<?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>146946</bug_id>
          
          <creation_ts>2015-07-14 15:12:16 -0700</creation_ts>
          <short_desc>jsc-tailcall: LLint, Baseline and DFG JIT should save &amp; restore platform&apos;s callee-save registers</short_desc>
          <delta_ts>2015-09-14 10:57:49 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>147461</dependson>
          <blocked>146845</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Michael Saboff">msaboff</reporter>
          <assigned_to name="Michael Saboff">msaboff</assigned_to>
          <cc>basile_clement</cc>
    
    <cc>ossy</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1109484</commentid>
    <comment_count>0</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2015-07-14 15:12:16 -0700</bug_when>
    <thetext>Save and restore platform callee save registers in the LLInt and baseline JIT.  We only do this for 64 bit builds as it isn&apos;t needed nor expected to be profitable for 32 bit builds.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1109495</commentid>
    <comment_count>1</comment_count>
      <attachid>256803</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2015-07-14 15:33:45 -0700</bug_when>
    <thetext>Created attachment 256803
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1109501</commentid>
    <comment_count>2</comment_count>
      <attachid>256803</attachid>
    <who name="Basile Clement">basile_clement</who>
    <bug_when>2015-07-14 15:50:29 -0700</bug_when>
    <thetext>Comment on attachment 256803
Patch

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

Looks good to me overall. Does this correctly restores callee-save registers on throw? We should probably test it with DFG disabled and without preserveCalleeSave() in vmEntryToJavascript.

&gt; Source/JavaScriptCore/ChangeLog:10
&gt; +        This space is maximum space needed for the callee registers that the LLInt  or baseline JIT

is maximum space -&gt; is the maximum space

&gt; Source/JavaScriptCore/bytecode/CodeBlock.cpp:3295
&gt; +#endif

Isn&apos;t this the same as sizeof(Register)?

&gt; Source/JavaScriptCore/jit/AssemblyHelpers.h:187
&gt; +                storePtr(reg.gpr(), Address(framePointerRegister, -(sizeof(void*) * registerIndex--)));

Shouldn&apos;t sizeof(void*) be sizeof(Register) instead?

&gt; Source/JavaScriptCore/jit/AssemblyHelpers.h:201
&gt; +                loadPtr(Address(framePointerRegister, -(sizeof(void*) * registerIndex--)), reg.gpr());

Ditto.

&gt; Source/JavaScriptCore/jit/GPRInfo.h:329
&gt; +    static const int numberLLIntBaselineCalleeSaveRegisters = 0;

I think numberOfLLIntBaselineCalleeSaveRegisters is nicer.

&gt; Source/JavaScriptCore/jit/RegisterSet.cpp:150
&gt; +    UNREACHABLE_FOR_PLATFORM();

What about MIPS and SH4?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1109510</commentid>
    <comment_count>3</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2015-07-14 16:20:36 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; Comment on attachment 256803 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=256803&amp;action=review
&gt; 
&gt; Looks good to me overall. Does this correctly restores callee-save registers
&gt; on throw? We should probably test it with DFG disabled and without
&gt; preserveCalleeSave() in vmEntryToJavascript.

No, that will be done in an unwinder patch.
 
&gt; &gt; Source/JavaScriptCore/ChangeLog:10
&gt; &gt; +        This space is maximum space needed for the callee registers that the LLInt  or baseline JIT
&gt; 
&gt; is maximum space -&gt; is the maximum space

Fixed locally.

&gt; &gt; Source/JavaScriptCore/bytecode/CodeBlock.cpp:3295
&gt; &gt; +#endif
&gt; 
&gt; Isn&apos;t this the same as sizeof(Register)?

No, Register is our JS 64 bit register.

&gt; &gt; Source/JavaScriptCore/jit/GPRInfo.h:329
&gt; &gt; +    static const int numberLLIntBaselineCalleeSaveRegisters = 0;
&gt; 
&gt; I think numberOfLLIntBaselineCalleeSaveRegisters is nicer.

Fixed locally.
 
&gt; &gt; Source/JavaScriptCore/jit/RegisterSet.cpp:150
&gt; &gt; +    UNREACHABLE_FOR_PLATFORM();
&gt; 
&gt; What about MIPS and SH4?

Added.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1112900</commentid>
    <comment_count>4</comment_count>
      <attachid>257695</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2015-07-28 15:31:02 -0700</bug_when>
    <thetext>Created attachment 257695
Patch with code to handle the DFG and OSR entry / exit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1112925</commentid>
    <comment_count>5</comment_count>
      <attachid>257695</attachid>
    <who name="Basile Clement">basile_clement</who>
    <bug_when>2015-07-28 16:31:44 -0700</bug_when>
    <thetext>Comment on attachment 257695
Patch with code to handle the DFG and OSR entry / exit.

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

LGTM with a few nits.

&gt; Source/JavaScriptCore/dfg/DFGOSRExitCompilerCommon.cpp:255
&gt; -    jit.move(AssemblyHelpers::TrustedImmPtr(jit.codeBlock()-&gt;ownerExecutable()), GPRInfo::nonArgGPR0);
&gt; -    osrWriteBarrier(jit, GPRInfo::nonArgGPR0, GPRInfo::nonArgGPR1);
&gt; +    jit.move(AssemblyHelpers::TrustedImmPtr(jit.codeBlock()-&gt;ownerExecutable()), GPRInfo::argumentGPR1);
&gt; +    osrWriteBarrier(jit, GPRInfo::argumentGPR1, GPRInfo::nonArgGPR0);

What is the reason for this change?

&gt; Source/JavaScriptCore/dfg/DFGOSRExitCompilerCommon.cpp:261
&gt; -            jit.move(AssemblyHelpers::TrustedImmPtr(ownerExecutable), GPRInfo::nonArgGPR0); 
&gt; -            osrWriteBarrier(jit, GPRInfo::nonArgGPR0, GPRInfo::nonArgGPR1);
&gt; +            jit.move(AssemblyHelpers::TrustedImmPtr(ownerExecutable), GPRInfo::argumentGPR1);
&gt; +            osrWriteBarrier(jit, GPRInfo::argumentGPR1, GPRInfo::nonArgGPR0);

Ditto.

&gt; Source/JavaScriptCore/jit/GPRInfo.h:415
&gt; -    static const GPRReg regCS4 = X86Registers::edi; // regT4
&gt; +    static const GPRReg regCS4 = X86Registers::edi; // regT6

This is regT4. edi is regT6 on X86, but regT4 on X86_WIN.

&gt; Source/JavaScriptCore/jit/GPRInfo.h:445
&gt; +    static const int numberOfLLIntBaselineCalleeSaveRegisters = 5; // rbx, rdi, rsi, r14 &amp; r15

We don&apos;t use rsi, saving rbx, rdi, r14 and r15 should be enough.

&gt; Source/JavaScriptCore/jit/GPRInfo.h:635
&gt; +    static const int numberCalleeSaveRegisters = 3;

This should be 2. We only use x27 and x28 in the DFG.

&gt; Source/JavaScriptCore/jit/RegisterSaveMap.cpp:47
&gt; +    HashMap&lt;unsigned, unsigned, WTF::IntHash&lt;unsigned&gt;, WTF::UnsignedWithZeroKeyHashTraits&lt;unsigned&gt; &gt;::const_iterator iter = m_indexForRegister.find(reg.index());

Maybe use auto iter = ... instead?

&gt; Source/JavaScriptCore/jit/RegisterSaveMap.h:51
&gt; +    HashMap&lt;unsigned, unsigned, WTF::IntHash&lt;unsigned&gt;, WTF::UnsignedWithZeroKeyHashTraits&lt;unsigned&gt; &gt; m_indexForRegister;

Maybe using a Vector&lt;unsigned, MacroAssembler::numberOfRegisters()&gt; would be better here? It requires making numerOfRegisters() and related functions constexpr, but that looks like a desirable thing anyway.

&gt; Source/JavaScriptCore/jit/RegisterSet.cpp:160
&gt; +RegisterSet RegisterSet::allVMCalleeSaveRegisters()
&gt; +{
&gt; +    RegisterSet result;
&gt; +#if CPU(X86)
&gt; +#elif CPU(X86_64)
&gt; +    result.set(GPRInfo::regCS0);
&gt; +    result.set(GPRInfo::regCS1);
&gt; +    result.set(GPRInfo::regCS2);
&gt; +#if !OS(WINDOWS)
&gt; +    ASSERT(GPRInfo::regCS3 == GPRInfo::tagTypeNumberRegister);
&gt; +    ASSERT(GPRInfo::regCS4 == GPRInfo::tagMaskRegister);
&gt; +    result.set(GPRInfo::regCS3);
&gt; +    result.set(GPRInfo::regCS4);
&gt; +#else
&gt; +    result.set(GPRInfo::regCS3);
&gt; +    result.set(GPRInfo::regCS4);
&gt; +    ASSERT(GPRInfo::regCS5 == GPRInfo::tagTypeNumberRegister);
&gt; +    ASSERT(GPRInfo::regCS6 == GPRInfo::tagMaskRegister);
&gt; +    result.set(GPRInfo::regCS5);
&gt; +    result.set(GPRInfo::regCS6);
&gt; +#endif
&gt; +#elif CPU(ARM_THUMB2)
&gt; +#elif CPU(ARM_TRADITIONAL)
&gt; +#elif CPU(ARM64)
&gt; +    result.set(ARM64Registers::x26);
&gt; +    ASSERT(GPRInfo::regCS0 == GPRInfo::tagTypeNumberRegister);
&gt; +    ASSERT(GPRInfo::regCS1 == GPRInfo::tagMaskRegister);
&gt; +    result.set(GPRInfo::regCS0);
&gt; +    result.set(GPRInfo::regCS1);
&gt; +#elif CPU(MIPS)
&gt; +#elif CPU(SH4)
&gt; +#else
&gt; +    UNREACHABLE_FOR_PLATFORM();
&gt; +#endif
&gt; +    return result;
&gt; +}

Couldn&apos;t this be implemented as baselineCalleeSaveRegisters().merge(dfgCalleeSaveRegisters()); ? Seems like it would simplify future changes.

&gt; Source/JavaScriptCore/llint/LLIntData.cpp:141
&gt; +    ASSERT(CodeBlock::llintBaselineCalleeSaveSpaceAsVirtualRegisters() == 5);

Cf above, this should be 4.

&gt; Source/JavaScriptCore/llint/LowLevelInterpreter.asm:226
&gt; +    const CalleeSaveSpaceAsVirtualRegisters = 5

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1113031</commentid>
    <comment_count>6</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2015-07-28 21:45:01 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; Comment on attachment 257695 [details]
&gt; Patch with code to handle the DFG and OSR entry / exit.
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=257695&amp;action=review
&gt; 
&gt; LGTM with a few nits.
&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGOSRExitCompilerCommon.cpp:255
&gt; &gt; -    jit.move(AssemblyHelpers::TrustedImmPtr(jit.codeBlock()-&gt;ownerExecutable()), GPRInfo::nonArgGPR0);
&gt; &gt; -    osrWriteBarrier(jit, GPRInfo::nonArgGPR0, GPRInfo::nonArgGPR1);
&gt; &gt; +    jit.move(AssemblyHelpers::TrustedImmPtr(jit.codeBlock()-&gt;ownerExecutable()), GPRInfo::argumentGPR1);
&gt; &gt; +    osrWriteBarrier(jit, GPRInfo::argumentGPR1, GPRInfo::nonArgGPR0);
&gt; 
&gt; What is the reason for this change?

GPRInfo::nonArgGPR1 is rbx on X86_64, which is a callee save.  I found this by looking through generated assembly language for callee save use.  I changed nonArgGPR0 to argumentGPR1 as it is the first argument and to free up nonArgGPR0.
 
&gt; &gt; Source/JavaScriptCore/dfg/DFGOSRExitCompilerCommon.cpp:261
&gt; &gt; -            jit.move(AssemblyHelpers::TrustedImmPtr(ownerExecutable), GPRInfo::nonArgGPR0); 
&gt; &gt; -            osrWriteBarrier(jit, GPRInfo::nonArgGPR0, GPRInfo::nonArgGPR1);
&gt; &gt; +            jit.move(AssemblyHelpers::TrustedImmPtr(ownerExecutable), GPRInfo::argumentGPR1);
&gt; &gt; +            osrWriteBarrier(jit, GPRInfo::argumentGPR1, GPRInfo::nonArgGPR0);
&gt; 
&gt; Ditto.

See above

&gt; &gt; Source/JavaScriptCore/jit/GPRInfo.h:415
&gt; &gt; -    static const GPRReg regCS4 = X86Registers::edi; // regT4
&gt; &gt; +    static const GPRReg regCS4 = X86Registers::edi; // regT6
&gt; 
&gt; This is regT4. edi is regT6 on X86, but regT4 on X86_WIN.

I restored this.

&gt; &gt; Source/JavaScriptCore/jit/GPRInfo.h:445
&gt; &gt; +    static const int numberOfLLIntBaselineCalleeSaveRegisters = 5; // rbx, rdi, rsi, r14 &amp; r15
&gt; 
&gt; We don&apos;t use rsi, saving rbx, rdi, r14 and r15 should be enough.

I made changes to eliminate rbi as a X86 Windows callee save for the LLInt and baseline JIT.

&gt; &gt; Source/JavaScriptCore/jit/GPRInfo.h:635
&gt; &gt; +    static const int numberCalleeSaveRegisters = 3;
&gt; 
&gt; This should be 2. We only use x27 and x28 in the DFG.

This needs to be number of registers in the union of callee saves for all VMs.  Since the LLInt uses 3 on ARM64, this needs to be 3.  It is used to size the callee saves buffer in the VM.

&gt; &gt; Source/JavaScriptCore/jit/RegisterSaveMap.cpp:47
&gt; &gt; +    HashMap&lt;unsigned, unsigned, WTF::IntHash&lt;unsigned&gt;, WTF::UnsignedWithZeroKeyHashTraits&lt;unsigned&gt; &gt;::const_iterator iter = m_indexForRegister.find(reg.index());
&gt; 
&gt; Maybe use auto iter = ... instead?

But that is way too easy to read!!! (I changed it.)

&gt; &gt; Source/JavaScriptCore/jit/RegisterSaveMap.h:51
&gt; &gt; +    HashMap&lt;unsigned, unsigned, WTF::IntHash&lt;unsigned&gt;, WTF::UnsignedWithZeroKeyHashTraits&lt;unsigned&gt; &gt; m_indexForRegister;
&gt; 
&gt; Maybe using a Vector&lt;unsigned, MacroAssembler::numberOfRegisters()&gt; would be
&gt; better here? It requires making numerOfRegisters() and related functions
&gt; constexpr, but that looks like a desirable thing anyway.

According to http://blogs.msdn.com/b/vcblog/archive/2013/12/02/c-11-14-core-language-features-in-vs-2013-and-the-nov-2013-ctp.aspx, constexpr is not part of VS 2013.  At this point, I&apos;m going to keep it as it is.

&gt; &gt; Source/JavaScriptCore/jit/RegisterSet.cpp:160
&gt; &gt; +RegisterSet RegisterSet::allVMCalleeSaveRegisters()
&gt; &gt; +{
&gt; &gt; +    RegisterSet result;
&gt; &gt; +#if CPU(X86)
&gt; &gt; +#elif CPU(X86_64)
&gt; &gt; +    result.set(GPRInfo::regCS0);
&gt; &gt; +    result.set(GPRInfo::regCS1);
&gt; &gt; +    result.set(GPRInfo::regCS2);
&gt; &gt; +#if !OS(WINDOWS)
&gt; &gt; +    ASSERT(GPRInfo::regCS3 == GPRInfo::tagTypeNumberRegister);
&gt; &gt; +    ASSERT(GPRInfo::regCS4 == GPRInfo::tagMaskRegister);
&gt; &gt; +    result.set(GPRInfo::regCS3);
&gt; &gt; +    result.set(GPRInfo::regCS4);
&gt; &gt; +#else
&gt; &gt; +    result.set(GPRInfo::regCS3);
&gt; &gt; +    result.set(GPRInfo::regCS4);
&gt; &gt; +    ASSERT(GPRInfo::regCS5 == GPRInfo::tagTypeNumberRegister);
&gt; &gt; +    ASSERT(GPRInfo::regCS6 == GPRInfo::tagMaskRegister);
&gt; &gt; +    result.set(GPRInfo::regCS5);
&gt; &gt; +    result.set(GPRInfo::regCS6);
&gt; &gt; +#endif
&gt; &gt; +#elif CPU(ARM_THUMB2)
&gt; &gt; +#elif CPU(ARM_TRADITIONAL)
&gt; &gt; +#elif CPU(ARM64)
&gt; &gt; +    result.set(ARM64Registers::x26);
&gt; &gt; +    ASSERT(GPRInfo::regCS0 == GPRInfo::tagTypeNumberRegister);
&gt; &gt; +    ASSERT(GPRInfo::regCS1 == GPRInfo::tagMaskRegister);
&gt; &gt; +    result.set(GPRInfo::regCS0);
&gt; &gt; +    result.set(GPRInfo::regCS1);
&gt; &gt; +#elif CPU(MIPS)
&gt; &gt; +#elif CPU(SH4)
&gt; &gt; +#else
&gt; &gt; +    UNREACHABLE_FOR_PLATFORM();
&gt; &gt; +#endif
&gt; &gt; +    return result;
&gt; &gt; +}
&gt; 
&gt; Couldn&apos;t this be implemented as
&gt; baselineCalleeSaveRegisters().merge(dfgCalleeSaveRegisters()); ? Seems like
&gt; it would simplify future changes.

Creating a union makes sense only if we include the LLInt callee save registers.  There current;y isn&apos;t a LLInt callee save RegisterSet, it would need to be added.

&gt; &gt; Source/JavaScriptCore/llint/LLIntData.cpp:141
&gt; &gt; +    ASSERT(CodeBlock::llintBaselineCalleeSaveSpaceAsVirtualRegisters() == 5);
&gt; 
&gt; Cf above, this should be 4.

I made this along with the change above.

&gt; &gt; Source/JavaScriptCore/llint/LowLevelInterpreter.asm:226
&gt; &gt; +    const CalleeSaveSpaceAsVirtualRegisters = 5
&gt; 
&gt; Ditto.

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1113658</commentid>
    <comment_count>7</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2015-07-30 23:02:44 -0700</bug_when>
    <thetext>Committed r187639: &lt;http://trac.webkit.org/changeset/187639&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1125637</commentid>
    <comment_count>8</comment_count>
      <attachid>257695</attachid>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2015-09-14 10:57:49 -0700</bug_when>
    <thetext>Comment on attachment 257695
Patch with code to handle the DFG and OSR entry / exit.

Cleared review? from attachment 257695 so that this bug does not appear in http://webkit.org/pending-review.  If you would like this patch reviewed, please attach it to a new bug (or re-open this bug before marking it for review again).</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>256803</attachid>
            <date>2015-07-14 15:33:45 -0700</date>
            <delta_ts>2015-07-28 15:31:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>146946.patch</filename>
            <type>text/plain</type>
            <size>21173</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTg2ODIwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc1IEBA
CisyMDE1LTA3LTE0ICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgorCisgICAg
ICAgIGpzYy10YWlsY2FsbDogTExpbnQgYW5kIEJhc2VsaW5lIEpJVCBzaG91bGQgcmVzcGVjdCB0
aGUgcGxhdGZvcm0ncyBjYWxsZWUtc2F2ZSByZWdpc3RlciBjb252ZW50aW9ucworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ2OTQ2CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2Ugc2F2ZSBwbGF0Zm9ybSBj
YWxsZWUgc2F2ZSByZWdpc3RlcnMgcmlnaHQgYmVsb3cgdGhlIGNhbGwgZnJhbWUgaGVhZGVyLCBp
biB0aGUgbG9jYXRpb24ocykKKyAgICAgICAgc3RhcnRpbmcgd2l0aCBWaXJ0dWFsUmVnaXN0ZXIg
MC4gIEFsbG9jYXRlZCBsb2NhbCBzcGFjZSBpbiB0aGUgYnl0ZWNvZGUgY29tcGlsZXIuCisgICAg
ICAgIFRoaXMgc3BhY2UgaXMgbWF4aW11bSBzcGFjZSBuZWVkZWQgZm9yIHRoZSBjYWxsZWUgcmVn
aXN0ZXJzIHRoYXQgdGhlIExMSW50ICBvciBiYXNlbGluZSBKSVQKKyAgICAgICAgd2lsbCB1c2Vk
LCByb3VuZGVkIHVwIHRvIG51bWJlciBvZiBWaXJ0dWFsUmVnaXN0ZXJzLiAgVGhlIExMSW50IGV4
cGxpY2l0bHkgc2F2ZXMgYW5kIHJlc3RvcmVzCisgICAgICAgIHRoZSByZWdpc3RlcnMgaW4gdGhl
IGZ1bmN0aW9ucyBwcmVzZXJ2ZUNhbGxlZVNhdmVzVXNlZEJ5TExJbnQgYW5kIHJlc3RvcmVDYWxs
ZWVTYXZlc1VzZWRCeUxMSW50LgorICAgICAgICBUaGUgYmFzZWxpbmUgSklUIHNhdmVzIGFuZCBy
ZXN0b3JlcyBjYWxsZWUgc2F2ZXMgcmVnaXN0ZXJzIGJ5IHdoYXQgcmVnaXN0ZXJzIGFyZSBpbmNs
dWRlZAorICAgICAgICBpbiBtX2NhbGxlZVNhdmVSZWdpc3RlcnMuCisKKyAgICAgICAgKiBieXRl
Y29kZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmxsaW50QmFzZWxp
bmVDYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMpOgorICAgICAgICAqIGJ5dGVjb2Rl
L0NvZGVCbG9jay5oOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om51bWJlck9mTExJbnRCYXNl
bGluZUNhbGxlZVNhdmVSZWdpc3RlcnMpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmxsaW50
QmFzZWxpbmVDYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMpOgorICAgICAgICAoSlND
OjpDb2RlQmxvY2s6OnNldENhbGxlZVNhdmVSZWdpc3RlcnMpOgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2s6OmNhbGxlZVNhdmVSZWdpc3RlcnMpOgorICAgICAgICBDaGFuZ2VzIHRvIGtlZXAgdHJh
Y2sgb2YgdGhlIGNhbGxlZSBzYXZlIHJlZ2lzdGVycy4KKworICAgICAgICAqIGJ5dGVjb21waWxl
ci9CeXRlY29kZUdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9y
OjpCeXRlY29kZUdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpj
b250aW51ZVRhcmdldCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjphbGxvY2F0
ZUNhbGxlZVNhdmVTcGFjZSk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjphbGxv
Y2F0ZUFuZEVtaXRTY29wZSk6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJh
dG9yLmg6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjphbGxvY2F0ZUNhbGxlZVNh
dmVTcGFjZSk6CisgICAgICAgIFJlc2VydmUgc3BhY2Ugb24gdGhlIHN0YWNrIHZpYSBhbGxvY2F0
aW5nIFZpcnR1YWxSZWdpc3RlcihzKSBmb3IgY2FsbGVlIHZhc2UgcmVnaXN0ZXJzLgorCisgICAg
ICAgICogaml0L0Fzc2VtYmx5SGVscGVycy5oOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBl
cnM6OmVtaXRTYXZlQ2FsbGVlU2F2ZXMpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6
OmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMpOiBGdW5jdGlvbnMgdG8gc2F2ZSBhbmQgcmVzdG9yZQor
ICAgICAgICBjYWxsZWUgc2F2ZSByZWdpc3RlcnMgcGFydCBvZiB0aGUgQ29kZUJsb2NrOjpjYWxs
ZWVTYXZlUmVnaXN0ZXJzKCkgUmVnaXN0ZXJTZXQuCisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVs
cGVyczo6ZW1pdE1hdGVyaWFsaXplVGFnQ2hlY2tSZWdpc3RlcnMpOgorICAgICAgICBIZWxwZXIg
dG8gcG9wdWxhdGUgdGFnVHlwZU51bWJlclJlZ2lzdGVyIGFuZCB0YWdNYXNrUmVnaXN0ZXIgd2l0
aCB0aGUgYXBwcm9wcmlhdGUKKyAgICAgICAgY29uc3RhbnRzLgorCisgICAgICAgICogaml0L0dQ
UkluZm8uaDoKKyAgICAgICAgKEpTQzo6R1BSSW5mbzo6bnVtYmVyTExJbnRCYXNlbGluZUNhbGxl
ZVNhdmVSZWdpc3RlcnMpOgorICAgICAgICBBZGRlZCB0aGlzIGNvbnN0YW50IHRvIGhvbGQgdGhl
IG1heGltdW0gbnVtYmVyIG9mIGNhbGxlZSBzYXZlIHJlZ2lzdGVycyB0aGF0IHdlIHVzZSBpbgor
ICAgICAgICB0aGUgTExJbnQgb3IgYmFzZWxpbmUgSklULgorCisgICAgICAgICogaml0L0pJVC5j
cHA6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGUpOgorICAgICAgICAqIGppdC9K
SVRDYWxsMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcmV0KToKKyAgICAg
ICAgKiBqaXQvSklUT3Bjb2Rlcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9lbmQp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcmV0KToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0U2xvd19vcF9sb29wX2hpbnQpOgorICAgICAgICAqIGppdC9KSVRPcGNvZGVzMzJfNjQuY3Bw
OgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlQ1RJTmF0aXZlQ2FsbCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9lbmQpOgorICAgICAgICBFbWl0IGNvZGUgdG8gc2F2ZSBh
bmQgcmVzdG9yZSBjYWxsZWUgc2F2ZSByZWdpc3RlcnMgYW5kIG1hdGVyaWFsaXplIHRhZ1R5cGVO
dW1iZXJSZWdpc3RlcgorICAgICAgICBhbmQgdGFnTWFza1JlZ2lzdGVyLgorICAgICAgCisgICAg
ICAgICogaml0L1JlZ2lzdGVyU2V0LmNwcDoKKyAgICAgICAgKEpTQzo6UmVnaXN0ZXJTZXQ6OmJh
c2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycyk6CisgICAgICAgICogaml0L1JlZ2lzdGVyU2V0Lmg6
CisgICAgICAgIChKU0M6OlJlZ2lzdGVyU2V0OjpiYXNlbGluZUNhbGxlZVNhdmVSZWdpc3RlcnMp
OgorICAgICAgICBBIG5ldyBzdGF0aWMgcmVnaXN0ZXIgc2V0IHRoYXQgY29udGFpbnMgdGhlIGZp
eGVkIHNldCBvZiBwbGF0Zm9ybSBzcGVjaWZpYyBjYWxsZWUKKyAgICAgICAgc2F2ZSByZWdpc3Rl
cnMgdGhhdCB0aGUgYmFzZWxpbmUgSklUIHVzZXMuCisKKyAgICAgICAgKiBsbGludC9Mb3dMZXZl
bEludGVycHJldGVyLmFzbToKKyAgICAgICAgKHByZXNlcnZlQ2FsbGVlU2F2ZXNVc2VkQnlMTElu
dCk6CisgICAgICAgIChyZXN0b3JlQ2FsbGVlU2F2ZXNVc2VkQnlMTEludCk6CisgICAgICAgIFNh
dmVzIGFuZCByZXN0b3JlcyBhIGZpeCBzZXQgb2YgcGxhZm9ybSBzcGVjaWZpYyByZWdpc3RlcnMg
dGhhdCB0aGUgTExJbnQgdXNlcy4KKwogMjAxNS0wNy0xMyAgQmFzaWxlIENsZW1lbnQgIDxiYXNp
bGVfY2xlbWVudEBhcHBsZS5jb20+CiAKICAgICAgICAganNjLXRhaWxjYWxsOiBHZXQgcmlkIG9m
IHRoZSBhcml0eSBmaXh1cCByZXR1cm4gdGh1bmsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAxODY3OTMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzI4Niw2ICszMjg2LDE2IEBAIHVuc2lnbmVkIENvZGVCbG9jazo6cmVvcHRpbWl6YXRpb25SZXRy
eUMKIH0KIAogI2lmIEVOQUJMRShKSVQpCitzaXplX3QgQ29kZUJsb2NrOjpsbGludEJhc2VsaW5l
Q2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCkKK3sKKyNpZiBVU0UoSlNWQUxVRTY0
KQorICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjcHVSZWdpc3RlclNpemUgPSA4OworI2Vsc2UK
KyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY3B1UmVnaXN0ZXJTaXplID0gNDsKKyNlbmRpZgor
ICAgIHJldHVybiAoV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHNpemVvZihSZWdpc3RlciksIG51
bWJlck9mTExJbnRCYXNlbGluZUNhbGxlZVNhdmVSZWdpc3RlcnMoKSAqIGNwdVJlZ2lzdGVyU2l6
ZSkgLyBzaXplb2YoUmVnaXN0ZXIpKTsKK30KKwogdm9pZCBDb2RlQmxvY2s6OmNvdW50UmVvcHRp
bWl6YXRpb24oKQogewogICAgIG1fcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIrKzsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDE4
Njc5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29y
a2luZyBjb3B5KQpAQCAtNzMyLDYgKzczMiw5IEBAIHB1YmxpYzoKICAgICBKU19FWFBPUlRfUFJJ
VkFURSB1bnNpZ25lZCByZW9wdGltaXphdGlvblJldHJ5Q291bnRlcigpIGNvbnN0OwogICAgIHZv
aWQgY291bnRSZW9wdGltaXphdGlvbigpOwogI2lmIEVOQUJMRShKSVQpCisgICAgc3RhdGljIHVu
c2lnbmVkIG51bWJlck9mTExJbnRCYXNlbGluZUNhbGxlZVNhdmVSZWdpc3RlcnMoKSB7IHJldHVy
biBHUFJJbmZvOjpudW1iZXJMTEludEJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVyczsgfQorICAg
IHN0YXRpYyBzaXplX3QgbGxpbnRCYXNlbGluZUNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lz
dGVycygpOworCiAgICAgdW5zaWduZWQgbnVtYmVyT2ZERkdDb21waWxlcygpOwogCiAgICAgaW50
MzJfdCBjb2RlVHlwZVRocmVzaG9sZE11bHRpcGxpZXIoKSBjb25zdDsKQEAgLTgxOCw2ICs4MjEs
OCBAQCBwdWJsaWM6CiAgICAgYm9vbCBzaG91bGRSZW9wdGltaXplTm93KCk7CiAgICAgYm9vbCBz
aG91bGRSZW9wdGltaXplRnJvbUxvb3BOb3coKTsKICNlbHNlIC8vIE5vIEpJVAorICAgIHN0YXRp
YyB1bnNpZ25lZCBudW1iZXJPZkxMSW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCkgeyBy
ZXR1cm4gMDsgfQorICAgIHN0YXRpYyBzaXplX3QgbGxpbnRCYXNlbGluZUNhbGxlZVNhdmVTcGFj
ZUFzVmlydHVhbFJlZ2lzdGVycygpIHsgcmV0dXJuIDA7IH07CiAgICAgdm9pZCBvcHRpbWl6ZUFm
dGVyV2FybVVwKCkgeyB9CiAgICAgdW5zaWduZWQgbnVtYmVyT2ZERkdDb21waWxlcygpIHsgcmV0
dXJuIDA7IH0KICNlbmRpZgpAQCAtODMwLDYgKzgzNSwxNCBAQCBwdWJsaWM6CiAgICAgdW5zaWdu
ZWQgZnJhbWVSZWdpc3RlckNvdW50KCk7CiAgICAgaW50IHN0YWNrUG9pbnRlck9mZnNldCgpOwog
CisgICAgdm9pZCBzZXRDYWxsZWVTYXZlUmVnaXN0ZXJzKFJlZ2lzdGVyU2V0IGNhbGxlZVNhdmVS
ZWdpc3RlcnMpCisgICAgeworICAgICAgICBBU1NFUlQoIW1fY2FsbGVlU2F2ZVJlZ2lzdGVycy5u
dW1iZXJPZlNldFJlZ2lzdGVycygpKTsKKyAgICAgICAgbV9jYWxsZWVTYXZlUmVnaXN0ZXJzID0g
Y2FsbGVlU2F2ZVJlZ2lzdGVyczsKKyAgICB9CisKKyAgICBSZWdpc3RlclNldCBjYWxsZWVTYXZl
UmVnaXN0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9jYWxsZWVTYXZlUmVnaXN0ZXJzOyB9CisKICAg
ICBib29sIGhhc09wRGVidWdGb3JMaW5lQW5kQ29sdW1uKHVuc2lnbmVkIGxpbmUsIHVuc2lnbmVk
IGNvbHVtbik7CiAKICAgICBib29sIGhhc0RlYnVnZ2VyUmVxdWVzdHMoKSBjb25zdCB7IHJldHVy
biBtX2RlYnVnZ2VyUmVxdWVzdHM7IH0KQEAgLTk5OSw2ICsxMDEyLDggQEAgcHJpdmF0ZToKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgbV9zY29wZVJlZ2lzdGVyOwogICAgIFZpcnR1YWxSZWdpc3RlciBt
X2xleGljYWxFbnZpcm9ubWVudFJlZ2lzdGVyOwogCisgICAgUmVnaXN0ZXJTZXQgbV9jYWxsZWVT
YXZlUmVnaXN0ZXJzOworCiAgICAgYm9vbCBtX2lzU3RyaWN0TW9kZTsKICAgICBib29sIG1fbmVl
ZHNBY3RpdmF0aW9uOwogICAgIGJvb2wgbV9tYXlCZUV4ZWN1dGluZzsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0
b3IuY3BwCShyZXZpc2lvbiAxODY3OTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
bXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYwLDYgKzE2
MCw4IEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihWTSYKICAgICBmb3Ig
KGF1dG8mIGNvbnN0YW50UmVnaXN0ZXIgOiBtX2xpbmtUaW1lQ29uc3RhbnRSZWdpc3RlcnMpCiAg
ICAgICAgIGNvbnN0YW50UmVnaXN0ZXIgPSBudWxscHRyOwogCisgICAgYWxsb2NhdGVDYWxsZWVT
YXZlU3BhY2UoKTsKKwogICAgIG1fY29kZUJsb2NrLT5zZXROdW1QYXJhbWV0ZXJzKDEpOyAvLyBB
bGxvY2F0ZSBzcGFjZSBmb3IgInRoaXMiCiAKICAgICBlbWl0T3Bjb2RlKG9wX2VudGVyKTsKQEAg
LTE5NSw2ICsxOTcsOCBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoVk0m
CiAgICAgaWYgKG1faXNCdWlsdGluRnVuY3Rpb24pCiAgICAgICAgIG1fc2hvdWxkRW1pdERlYnVn
SG9va3MgPSBmYWxzZTsKICAgICAKKyAgICBhbGxvY2F0ZUNhbGxlZVNhdmVTcGFjZSgpOworCiAg
ICAgbV9zeW1ib2xUYWJsZS0+c2V0VXNlc05vblN0cmljdEV2YWwoY29kZUJsb2NrLT51c2VzRXZh
bCgpICYmICFjb2RlQmxvY2stPmlzU3RyaWN0TW9kZSgpKTsKICAgICBWZWN0b3I8SWRlbnRpZmll
cj4gYm91bmRQYXJhbWV0ZXJQcm9wZXJ0aWVzOwogICAgIEZ1bmN0aW9uUGFyYW1ldGVycyYgcGFy
YW1ldGVycyA9ICpmdW5jdGlvbk5vZGUtPnBhcmFtZXRlcnMoKTsKQEAgLTUxMCw2ICs1MTQsOCBA
QCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoVk0mCiAgICAgZm9yIChhdXRv
JiBjb25zdGFudFJlZ2lzdGVyIDogbV9saW5rVGltZUNvbnN0YW50UmVnaXN0ZXJzKQogICAgICAg
ICBjb25zdGFudFJlZ2lzdGVyID0gbnVsbHB0cjsKIAorICAgIGFsbG9jYXRlQ2FsbGVlU2F2ZVNw
YWNlKCk7CisKICAgICBtX3N5bWJvbFRhYmxlLT5zZXRVc2VzTm9uU3RyaWN0RXZhbChjb2RlQmxv
Y2stPnVzZXNFdmFsKCkgJiYgIWNvZGVCbG9jay0+aXNTdHJpY3RNb2RlKCkpOwogICAgIG1fY29k
ZUJsb2NrLT5zZXROdW1QYXJhbWV0ZXJzKDEpOwogCkBAIC0yMzYxLDYgKzIzNjcsMTcgQEAgTGFi
ZWxTY29wZVB0ciBCeXRlY29kZUdlbmVyYXRvcjo6Y29udGludQogICAgIHJldHVybiBMYWJlbFNj
b3BlUHRyOjpudWxsKCk7CiB9CiAKK3ZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmFsbG9jYXRlQ2Fs
bGVlU2F2ZVNwYWNlKCkKK3sKKyAgICBzaXplX3QgdmlydHVhbFJlZ2lzdGVyQ291bnRGb3JDYWxs
ZWVTYXZlcyA9IENvZGVCbG9jazo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVTcGFjZUFzVmlydHVh
bFJlZ2lzdGVycygpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2aXJ0dWFsUmVnaXN0
ZXJDb3VudEZvckNhbGxlZVNhdmVzOyBpKyspIHsKKyAgICAgICAgUmVnaXN0ZXJJRCogbG9jYWxS
ZWdpc3RlciA9IGFkZFZhcigpOworICAgICAgICBsb2NhbFJlZ2lzdGVyLT5yZWYoKTsKKyAgICAg
ICAgbV9sb2NhbFJlZ2lzdGVyc0ZvckNhbGxlZVNhdmVSZWdpc3RlcnMuYXBwZW5kKGxvY2FsUmVn
aXN0ZXIpOworICAgIH0KK30KKwogdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6YWxsb2NhdGVBbmRF
bWl0U2NvcGUoKQogewogICAgIG1fc2NvcGVSZWdpc3RlciA9IGFkZFZhcigpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5l
cmF0b3IuaAkocmV2aXNpb24gMTg2NzkzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC02MjUsNiArNjI1
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEFMV0FZU19JTkxJTkUgdm9pZCByZXdpbmRC
aW5hcnlPcCgpOwogICAgICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgcmV3aW5kVW5hcnlPcCgpOwog
CisgICAgICAgIHZvaWQgYWxsb2NhdGVDYWxsZWVTYXZlU3BhY2UoKTsKICAgICAgICAgdm9pZCBh
bGxvY2F0ZUFuZEVtaXRTY29wZSgpOwogICAgICAgICB2b2lkIGVtaXRDb21wbGV4UG9wU2NvcGVz
KFJlZ2lzdGVySUQqLCBDb250cm9sRmxvd0NvbnRleHQqIHRvcFNjb3BlLCBDb250cm9sRmxvd0Nv
bnRleHQqIGJvdHRvbVNjb3BlKTsKIApAQCAtNzQzLDYgKzc0NCw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICBSZWdpc3RlcklEKiBtX25ld1RhcmdldFJlZ2lzdGVyIHsgbnVsbHB0ciB9Owog
ICAgICAgICBSZWdpc3RlcklEKiBtX2xpbmtUaW1lQ29uc3RhbnRSZWdpc3RlcnNbTGlua1RpbWVD
b25zdGFudENvdW50XTsKIAorICAgICAgICBTZWdtZW50ZWRWZWN0b3I8UmVnaXN0ZXJJRCosIDE2
PiBtX2xvY2FsUmVnaXN0ZXJzRm9yQ2FsbGVlU2F2ZVJlZ2lzdGVyczsKICAgICAgICAgU2VnbWVu
dGVkVmVjdG9yPFJlZ2lzdGVySUQsIDMyPiBtX2NvbnN0YW50UG9vbFJlZ2lzdGVyczsKICAgICAg
ICAgU2VnbWVudGVkVmVjdG9yPFJlZ2lzdGVySUQsIDMyPiBtX2NhbGxlZVJlZ2lzdGVyczsKICAg
ICAgICAgU2VnbWVudGVkVmVjdG9yPFJlZ2lzdGVySUQsIDMyPiBtX3BhcmFtZXRlcnM7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHJldmlzaW9u
IDE4Njc5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTE3NCw2ICsxNzQsNDIgQEAgcHVibGljOgogI2VuZGlmCiAgICAg
fQogCisgICAgdm9pZCBlbWl0U2F2ZUNhbGxlZVNhdmVzKCkKKyAgICB7CisgICAgICAgIGlmICgh
bV9jb2RlQmxvY2spCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgUmVnaXN0ZXJTZXQg
Y2FsbGVlU2F2ZXMgPSBtX2NvZGVCbG9jay0+Y2FsbGVlU2F2ZVJlZ2lzdGVycygpOworICAgICAg
ICBpbnQgcmVnaXN0ZXJJbmRleCA9IGNhbGxlZVNhdmVzLm51bWJlck9mU2V0R1BScygpOworCisg
ICAgICAgIGZvciAoUmVnIHJlZyA9IFJlZzo6Zmlyc3QoKTsgcmVnIDw9IFJlZzo6bGFzdCgpOyBy
ZWcgPSByZWcubmV4dCgpKSB7CisgICAgICAgICAgICBpZiAoY2FsbGVlU2F2ZXMuZ2V0KHJlZykg
JiYgcmVnLmlzR1BSKCkpCisgICAgICAgICAgICAgICAgc3RvcmVQdHIocmVnLmdwcigpLCBBZGRy
ZXNzKGZyYW1lUG9pbnRlclJlZ2lzdGVyLCAtKHNpemVvZih2b2lkKikgKiByZWdpc3RlckluZGV4
LS0pKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIGVtaXRSZXN0b3JlQ2FsbGVlU2F2
ZXMoKQorICAgIHsKKyAgICAgICAgaWYgKCFtX2NvZGVCbG9jaykKKyAgICAgICAgICAgIHJldHVy
bjsKKworICAgICAgICBSZWdpc3RlclNldCBjYWxsZWVTYXZlcyA9IG1fY29kZUJsb2NrLT5jYWxs
ZWVTYXZlUmVnaXN0ZXJzKCk7CisgICAgICAgIGludCByZWdpc3RlckluZGV4ID0gY2FsbGVlU2F2
ZXMubnVtYmVyT2ZTZXRHUFJzKCk7CisKKyAgICAgICAgZm9yIChSZWcgcmVnID0gUmVnOjpmaXJz
dCgpOyByZWcgPD0gUmVnOjpsYXN0KCk7IHJlZyA9IHJlZy5uZXh0KCkpIHsKKyAgICAgICAgICAg
IGlmIChjYWxsZWVTYXZlcy5nZXQocmVnKSAmJiByZWcuaXNHUFIoKSkKKyAgICAgICAgICAgICAg
ICBsb2FkUHRyKEFkZHJlc3MoZnJhbWVQb2ludGVyUmVnaXN0ZXIsIC0oc2l6ZW9mKHZvaWQqKSAq
IHJlZ2lzdGVySW5kZXgtLSkpLCByZWcuZ3ByKCkpOworICAgICAgICB9CisgICAgfQorCisgICAg
dm9pZCBlbWl0TWF0ZXJpYWxpemVUYWdDaGVja1JlZ2lzdGVycygpCisgICAgeworI2lmIFVTRShK
U1ZBTFVFNjQpCisgICAgICAgIG1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChUYWdU
eXBlTnVtYmVyKSwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKKyAgICAgICAgb3JQ
dHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihUYWdCaXRUeXBlT3RoZXIpLCBHUFJJbmZv
Ojp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIEdQUkluZm86OnRhZ01hc2tSZWdpc3Rlcik7CisjZW5k
aWYKKyAgICB9CisKICNpZiBDUFUoWDg2XzY0KSB8fCBDUFUoWDg2KQogICAgIHN0YXRpYyBzaXpl
X3QgcHJvbG9ndWVTdGFja1BvaW50ZXJEZWx0YSgpCiAgICAgewpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9HUFJJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9HUFJJbmZvLmgJKHJldmlzaW9uIDE4Njc5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvR1BSSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMjYsNiArMzI2LDcgQEAgcHVi
bGljOgogICAgIHN0YXRpYyBjb25zdCBHUFJSZWcgcmV0dXJuVmFsdWVHUFIgPSBYODZSZWdpc3Rl
cnM6OmVheDsgLy8gcmVnVDAKICAgICBzdGF0aWMgY29uc3QgR1BSUmVnIHJldHVyblZhbHVlR1BS
MiA9IFg4NlJlZ2lzdGVyczo6ZWR4OyAvLyByZWdUMQogICAgIHN0YXRpYyBjb25zdCBHUFJSZWcg
bm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSID0gWDg2UmVnaXN0ZXJzOjplY3g7CisgICAgc3RhdGlj
IGNvbnN0IGludCBudW1iZXJMTEludEJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycyA9IDA7CiAK
ICAgICBzdGF0aWMgR1BSUmVnIHRvUmVnaXN0ZXIodW5zaWduZWQgaW5kZXgpCiAgICAgewpAQCAt
NDM2LDYgKzQzNywxMSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0IEdQUlJlZyBub25QcmVz
ZXJ2ZWROb25SZXR1cm5HUFIgPSBYODZSZWdpc3RlcnM6OnIxMDsgLy8gcmVnVDUKICAgICBzdGF0
aWMgY29uc3QgR1BSUmVnIG5vblByZXNlcnZlZE5vbkFyZ3VtZW50R1BSID0gWDg2UmVnaXN0ZXJz
OjpyMTA7IC8vIHJlZ1Q1CiAgICAgc3RhdGljIGNvbnN0IEdQUlJlZyBwYXRjaHBvaW50U2NyYXRj
aFJlZ2lzdGVyID0gTWFjcm9Bc3NlbWJsZXI6OnNjcmF0Y2hSZWdpc3RlcjsKKyNpZiAhT1MoV0lO
RE9XUykKKyAgICBzdGF0aWMgY29uc3QgaW50IG51bWJlckxMSW50QmFzZWxpbmVDYWxsZWVTYXZl
UmVnaXN0ZXJzID0gMzsgLy8gcmJ4LCByMTQgJiByMTUKKyNlbHNlCisgICAgc3RhdGljIGNvbnN0
IGludCBudW1iZXJMTEludEJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycyA9IDU7IC8vIHJieCwg
cmRpLCByc2ksIHIxNCAmIHIxNQorI2VuZGlmCiAKICAgICBzdGF0aWMgR1BSUmVnIHRvUmVnaXN0
ZXIodW5zaWduZWQgaW5kZXgpCiAgICAgewpAQCAtNTI1LDYgKzUzMSw3IEBAIHB1YmxpYzoKICAg
ICBzdGF0aWMgY29uc3QgR1BSUmVnIHJldHVyblZhbHVlR1BSID0gQVJNUmVnaXN0ZXJzOjpyMDsg
Ly8gcmVnVDAKICAgICBzdGF0aWMgY29uc3QgR1BSUmVnIHJldHVyblZhbHVlR1BSMiA9IEFSTVJl
Z2lzdGVyczo6cjE7IC8vIHJlZ1QxCiAgICAgc3RhdGljIGNvbnN0IEdQUlJlZyBub25QcmVzZXJ2
ZWROb25SZXR1cm5HUFIgPSBBUk1SZWdpc3RlcnM6OnI1OworICAgIHN0YXRpYyBjb25zdCBpbnQg
bnVtYmVyTExJbnRCYXNlbGluZUNhbGxlZVNhdmVSZWdpc3RlcnMgPSAwOwogCiAgICAgc3RhdGlj
IEdQUlJlZyB0b1JlZ2lzdGVyKHVuc2lnbmVkIGluZGV4KQogICAgIHsKQEAgLTYyMCw2ICs2Mjcs
NyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0IEdQUlJlZyBub25QcmVzZXJ2ZWROb25SZXR1
cm5HUFIgPSBBUk02NFJlZ2lzdGVyczo6eDI7CiAgICAgc3RhdGljIGNvbnN0IEdQUlJlZyBub25Q
cmVzZXJ2ZWROb25Bcmd1bWVudEdQUiA9IEFSTTY0UmVnaXN0ZXJzOjp4ODsKICAgICBzdGF0aWMg
Y29uc3QgR1BSUmVnIHBhdGNocG9pbnRTY3JhdGNoUmVnaXN0ZXIgPSBBUk02NFJlZ2lzdGVyczo6
aXAwOworICAgIHN0YXRpYyBjb25zdCBpbnQgbnVtYmVyTExJbnRCYXNlbGluZUNhbGxlZVNhdmVS
ZWdpc3RlcnMgPSAzOyAvLyB4MjYgKExMSW50IG9ubHkpLCB4MjcgJiB4MjgKIAogICAgIC8vIEdQ
UlJlZyBtYXBwaW5nIGlzIGRpcmVjdCwgdGhlIG1hY2hpbmUgcmVnc2l0ZXIgbnVtYmVycyBjYW4K
ICAgICAvLyBiZSB1c2VkIGRpcmVjdGx5IGFzIGluZGljZXMgaW50byB0aGUgR1BSIFJlZ2lzdGVy
QmFuay4KQEAgLTcwNyw2ICs3MTUsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0IEdQUlJl
ZyByZXR1cm5WYWx1ZUdQUiA9IHJlZ1QwOwogICAgIHN0YXRpYyBjb25zdCBHUFJSZWcgcmV0dXJu
VmFsdWVHUFIyID0gcmVnVDE7CiAgICAgc3RhdGljIGNvbnN0IEdQUlJlZyBub25QcmVzZXJ2ZWRO
b25SZXR1cm5HUFIgPSByZWdUMjsKKyAgICBzdGF0aWMgY29uc3QgaW50IG51bWJlckxMSW50QmFz
ZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzID0gMDsKIAogICAgIHN0YXRpYyBHUFJSZWcgdG9SZWdp
c3Rlcih1bnNpZ25lZCBpbmRleCkKICAgICB7CkBAIC03ODEsNiArNzkwLDcgQEAgcHVibGljOgog
ICAgIHN0YXRpYyBjb25zdCBHUFJSZWcgcmV0dXJuVmFsdWVHUFIgPSByZWdUMDsKICAgICBzdGF0
aWMgY29uc3QgR1BSUmVnIHJldHVyblZhbHVlR1BSMiA9IHJlZ1QxOwogICAgIHN0YXRpYyBjb25z
dCBHUFJSZWcgbm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSID0gcmVnVDI7CisgICAgc3RhdGljIGNv
bnN0IGludCBudW1iZXJMTEludEJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycyA9IDA7CiAKICAg
ICBzdGF0aWMgR1BSUmVnIHRvUmVnaXN0ZXIodW5zaWduZWQgaW5kZXgpCiAgICAgewpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkocmV2aXNpb24gMTg2NzkzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OTgsNiArNDk4LDgg
QEAgQ29tcGlsYXRpb25SZXN1bHQgSklUOjpwcml2YXRlQ29tcGlsZShKSQogICAgICAgICBicmVh
azsKICAgICB9CiAKKyAgICBtX2NvZGVCbG9jay0+c2V0Q2FsbGVlU2F2ZVJlZ2lzdGVycyhSZWdp
c3RlclNldDo6YmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOworCiAgICAgLy8gVGhpcyBl
bnN1cmVzIHRoYXQgd2UgaGF2ZSB0aGUgbW9zdCB1cCB0byBkYXRlIHR5cGUgaW5mb3JtYXRpb24g
d2hlbiBwZXJmb3JtaW5nIHR5cGVjaGVjayBvcHRpbWl6YXRpb25zIGZvciBvcF9wcm9maWxlX3R5
cGUuCiAgICAgaWYgKG1fdm0tPnR5cGVQcm9maWxlcigpKQogICAgICAgICBtX3ZtLT50eXBlUHJv
ZmlsZXJMb2coKS0+cHJvY2Vzc0xvZ0VudHJpZXMoQVNDSUlMaXRlcmFsKCJQcmVwYXJpbmcgZm9y
IEpJVCBjb21waWxhdGlvbi4iKSk7CkBAIC01MjAsMTAgKzUyMiwxMyBAQCBDb21waWxhdGlvblJl
c3VsdCBKSVQ6OnByaXZhdGVDb21waWxlKEpJCiAgICAgICAgIG5vcCgpOwogCiAgICAgZW1pdEZ1
bmN0aW9uUHJvbG9ndWUoKTsKKyAgICBlbWl0U2F2ZUNhbGxlZVNhdmVzKCk7CiAgICAgZW1pdFB1
dEltbWVkaWF0ZVRvQ2FsbEZyYW1lSGVhZGVyKG1fY29kZUJsb2NrLCBKU1N0YWNrOjpDb2RlQmxv
Y2spOwogCiAgICAgTGFiZWwgYmVnaW5MYWJlbCh0aGlzKTsKIAorICAgIGVtaXRNYXRlcmlhbGl6
ZVRhZ0NoZWNrUmVnaXN0ZXJzKCk7CisKICAgICBzYW1wbGVDb2RlQmxvY2sobV9jb2RlQmxvY2sp
OwogI2lmIEVOQUJMRShPUENPREVfU0FNUExJTkcpCiAgICAgc2FtcGxlSW5zdHJ1Y3Rpb24obV9j
b2RlQmxvY2stPmluc3RydWN0aW9ucygpLmJlZ2luKCkpOwpAQCAtNTczLDYgKzU3OCw3IEBAIENv
bXBpbGF0aW9uUmVzdWx0IEpJVDo6cHJpdmF0ZUNvbXBpbGUoSkkKICAgICAgICAgYXJpdHlDaGVj
ayA9IGxhYmVsKCk7CiAgICAgICAgIHN0b3JlOChUcnVzdGVkSW1tMzIoMCksICZtX2NvZGVCbG9j
ay0+bV9zaG91bGRBbHdheXNCZUlubGluZWQpOwogICAgICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1
ZSgpOworICAgICAgICBlbWl0U2F2ZUNhbGxlZVNhdmVzKCk7CiAgICAgICAgIGVtaXRQdXRJbW1l
ZGlhdGVUb0NhbGxGcmFtZUhlYWRlcihtX2NvZGVCbG9jaywgSlNTdGFjazo6Q29kZUJsb2NrKTsK
IAogICAgICAgICBsb2FkMzIocGF5bG9hZEZvcihKU1N0YWNrOjpBcmd1bWVudENvdW50KSwgcmVn
VDEpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAko
cmV2aXNpb24gMTg2NzkzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJf
NjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MCw2ICs2MCw3IEBAIHZvaWQgSklUOjplbWl0X29w
X3JldChJbnN0cnVjdGlvbiogY3VycmUKICAgICBlbWl0TG9hZChkc3QsIHJlZ1QxLCByZWdUMCk7
CiAKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOworICAgIGVtaXRSZXN0b3JlQ2Fs
bGVlU2F2ZXMoKTsKICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOwogICAgIHJldCgpOwogfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAko
cmV2aXNpb24gMTg2NzkzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVz
MzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDAsNiArMTAwLDcgQEAgSklUOjpDb2RlUmVm
IEpJVDo6cHJpdmF0ZUNvbXBpbGVDVElOYXRpdgogICAgIC8vIENoZWNrIGZvciBhbiBleGNlcHRp
b24KICAgICBKdW1wIHNhd0V4Y2VwdGlvbiA9IGJyYW5jaDMyKE5vdEVxdWFsLCBBYnNvbHV0ZUFk
ZHJlc3Modm0tPmFkZHJlc3NPZkV4Y2VwdGlvbigpKSwgVHJ1c3RlZEltbTMyKDApKTsKIAorICAg
IGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOwog
ICAgIC8vIFJldHVybi4KICAgICByZXQoKTsKQEAgLTE0OSw2ICsxNTAsNyBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9lbmQoSW5zdHJ1Y3Rpb24qIGN1cnJlCiB7CiAgICAgQVNTRVJUKHJldHVyblZhbHVl
R1BSICE9IGNhbGxGcmFtZVJlZ2lzdGVyKTsKICAgICBlbWl0TG9hZChjdXJyZW50SW5zdHJ1Y3Rp
b25bMV0udS5vcGVyYW5kLCByZWdUMSwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRSZXN0b3Jl
Q2FsbGVlU2F2ZXMoKTsKICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOwogICAgIHJldCgpOwog
fQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCShyZXZpc2lv
biAxODY3OTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC03MCw2ICs3MCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2VuZChJbnN0
cnVjdGlvbiogY3VycmUKIHsKICAgICBSRUxFQVNFX0FTU0VSVChyZXR1cm5WYWx1ZUdQUiAhPSBj
YWxsRnJhbWVSZWdpc3Rlcik7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5z
dHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFJlc3RvcmVD
YWxsZWVTYXZlcygpOwogICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CiAgICAgcmV0KCk7CiB9
CkBAIC0yNTUsNiArMjU2LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmV0KEluc3RydWN0aW9uKiBj
dXJyZQogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUu
b3BlcmFuZCwgcmV0dXJuVmFsdWVHUFIpOwogCiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1l
bnQoKTsKKyAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAgICAgZW1pdEZ1bmN0aW9uRXBp
bG9ndWUoKTsKICAgICByZXQoKTsKIH0KQEAgLTk0Miw2ICs5NDQsNyBAQCB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfbG9vcF9oaW50KEluc3RydWN0CiAgICAgICAgICAgICBhYm9ydFdpdGhSZWFzb24o
SklUVW5yZWFzb25hYmxlTG9vcEhpbnRKdW1wVGFyZ2V0KTsKICAgICAgICAgICAgIG9rLmxpbmso
dGhpcyk7CiAgICAgICAgIH0KKyAgICAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOyAvLyBS
ZXN0b3JlIGNhbGxlZSByZWdpc3RlcnMgdGhhdCB0aGUgQmFzZWxpbmUgSklUIHNhdmVkLiAgICAg
ICAKICAgICAgICAganVtcChyZXR1cm5WYWx1ZUdQUik7CiAgICAgICAgIG5vT3B0aW1pemVkRW50
cnkubGluayh0aGlzKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3Rl
clNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3Rl
clNldC5jcHAJKHJldmlzaW9uIDE4Njc5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
UmVnaXN0ZXJTZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjIsNiArMTIyLDM2IEBAIFJlZ2lz
dGVyU2V0IFJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZlUmVnaXMKICAgICByZXR1cm4gcmVzdWx0Owog
fQogCitSZWdpc3RlclNldCBSZWdpc3RlclNldDo6YmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJz
KCkKK3sKKyAgICBSZWdpc3RlclNldCByZXN1bHQ7CisjaWYgQ1BVKFg4NikKKyNlbGlmIENQVShY
ODZfNjQpCisgICAgcmVzdWx0LnNldChHUFJJbmZvOjpyZWdDUzApOworI2lmICFPUyhXSU5ET1dT
KQorICAgIEFTU0VSVChHUFJJbmZvOjpyZWdDUzMgPT0gR1BSSW5mbzo6dGFnVHlwZU51bWJlclJl
Z2lzdGVyKTsKKyAgICBBU1NFUlQoR1BSSW5mbzo6cmVnQ1M0ID09IEdQUkluZm86OnRhZ01hc2tS
ZWdpc3Rlcik7CisgICAgcmVzdWx0LnNldChHUFJJbmZvOjpyZWdDUzMpOworICAgIHJlc3VsdC5z
ZXQoR1BSSW5mbzo6cmVnQ1M0KTsKKyNlbHNlCisgICAgQVNTRVJUKEdQUkluZm86OnJlZ0NTNSA9
PSBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOworICAgIEFTU0VSVChHUFJJbmZvOjpy
ZWdDUzYgPT0gR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsKKyAgICByZXN1bHQuc2V0KEdQUklu
Zm86OnJlZ0NTNSk7CisgICAgcmVzdWx0LnNldChHUFJJbmZvOjpyZWdDUzYpOworI2VuZGlmCisj
ZWxpZiBDUFUoQVJNX1RIVU1CMikKKyNlbGlmIENQVShBUk1fVFJBRElUSU9OQUwpCisjZWxpZiBD
UFUoQVJNNjQpCisgICAgQVNTRVJUKEdQUkluZm86OnJlZ0NTMCA9PSBHUFJJbmZvOjp0YWdUeXBl
TnVtYmVyUmVnaXN0ZXIpOworICAgIEFTU0VSVChHUFJJbmZvOjpyZWdDUzEgPT0gR1BSSW5mbzo6
dGFnTWFza1JlZ2lzdGVyKTsKKyAgICByZXN1bHQuc2V0KEdQUkluZm86OnJlZ0NTMCk7CisgICAg
cmVzdWx0LnNldChHUFJJbmZvOjpyZWdDUzEpOworI2Vsc2UKKyAgICBVTlJFQUNIQUJMRV9GT1Jf
UExBVEZPUk0oKTsKKyNlbmRpZgorICAgIHJldHVybiByZXN1bHQ7Cit9CisKIFJlZ2lzdGVyU2V0
IFJlZ2lzdGVyU2V0OjphbGxHUFJzKCkKIHsKICAgICBSZWdpc3RlclNldCByZXN1bHQ7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyU2V0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlclNldC5oCShyZXZpc2lvbiAxODY3OTMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyU2V0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTUwLDYgKzUwLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBSZWdpc3RlclNldCBydW50
aW1lUmVnaXN0ZXJzKCk7CiAgICAgc3RhdGljIFJlZ2lzdGVyU2V0IHNwZWNpYWxSZWdpc3RlcnMo
KTsgLy8gVGhlIHVuaW9uIG9mIHN0YWNrLCByZXNlcnZlZCBoYXJkd2FyZSwgYW5kIHJ1bnRpbWUg
cmVnaXN0ZXJzLgogICAgIHN0YXRpYyBSZWdpc3RlclNldCBjYWxsZWVTYXZlUmVnaXN0ZXJzKCk7
CisgICAgc3RhdGljIFJlZ2lzdGVyU2V0IGJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygpOyAv
LyBSZWdpc3RlcnMgc2F2ZWQgYW5kIHVzZWQgYnkgdGhlIExMSW50IGFuZCBiYXNlbGluZSBKSVQu
CiAgICAgc3RhdGljIFJlZ2lzdGVyU2V0IGFsbEdQUnMoKTsKICAgICBzdGF0aWMgUmVnaXN0ZXJT
ZXQgYWxsRlBScygpOwogICAgIHN0YXRpYyBSZWdpc3RlclNldCBhbGxSZWdpc3RlcnMoKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnBy
ZXRlci5hc20JKHJldmlzaW9uIDE4Njc5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkod29ya2luZyBjb3B5KQpAQCAtNTIzLDYgKzUyMyw0
MiBAQCBtYWNybyByZXN0b3JlQ2FsbGVyUENBbmRDRlIoKQogICAgIGVuZAogZW5kCiAKK21hY3Jv
IHByZXNlcnZlQ2FsbGVlU2F2ZXNVc2VkQnlMTEludCgpCisgICAgaWYgQ19MT09QCisgICAgZWxz
aWYgQVJNIG9yIEFSTXY3X1RSQURJVElPTkFMCisgICAgZWxzaWYgQVJNdjcKKyAgICBlbHNpZiBB
Uk02NAorICAgICAgICBlbWl0ICJzdHAgeDI3LCB4MjgsIFtmcCwgIy0xNl0iCisgICAgICAgIGVt
aXQgInN0cCB4enIsIHgyNiwgW2ZwLCAjLTMyXSIKKyAgICBlbHNpZiBNSVBTCisgICAgZWxzaWYg
U0g0CisgICAgZWxzaWYgWDg2CisgICAgZWxzaWYgWDg2X1dJTgorICAgIGVsc2lmIFg4Nl82NCBv
ciBYODZfNjRfV0lOCisgICAgICAgIHN0b3JlcCBjc3IyLCAtOFtjZnJdCisgICAgICAgIHN0b3Jl
cCBjc3IxLCAtMTZbY2ZyXQorICAgICAgICBzdG9yZXAgY3NyMCwgLTI0W2Nmcl0KKyAgICBlbmQK
K2VuZAorCittYWNybyByZXN0b3JlQ2FsbGVlU2F2ZXNVc2VkQnlMTEludCgpCisgICAgaWYgQ19M
T09QCisgICAgZWxzaWYgQVJNIG9yIEFSTXY3X1RSQURJVElPTkFMCisgICAgZWxzaWYgQVJNdjcK
KyAgICBlbHNpZiBBUk02NAorICAgICAgICBlbWl0ICJsZHAgeHpyLCB4MjYsIFtmcCwgIy0zMl0i
CisgICAgICAgIGVtaXQgImxkcCB4MjcsIHgyOCwgW2ZwLCAjLTE2XSIKKyAgICBlbHNpZiBNSVBT
CisgICAgZWxzaWYgU0g0CisgICAgZWxzaWYgWDg2CisgICAgZWxzaWYgWDg2X1dJTgorICAgIGVs
c2lmIFg4Nl82NCBvciBYODZfNjRfV0lOCisgICAgICAgIGxvYWRwIC0yNFtjZnJdLCBjc3IwCisg
ICAgICAgIGxvYWRwIC0xNltjZnJdLCBjc3IxCisgICAgICAgIGxvYWRwIC04W2Nmcl0sIGNzcjIK
KyAgICBlbmQKK2VuZAorCiBtYWNybyBwcmVzZXJ2ZVJldHVybkFkZHJlc3NBZnRlckNhbGwoZGVz
dGluYXRpb25SZWdpc3RlcikKICAgICBpZiBDX0xPT1Agb3IgQVJNIG9yIEFSTXY3IG9yIEFSTXY3
X1RSQURJVElPTkFMIG9yIEFSTTY0IG9yIE1JUFMgb3IgU0g0CiAgICAgICAgICMgSW4gQ19MT09Q
IGNhc2UsIHdlJ3JlIG9ubHkgcHJlc2VydmluZyB0aGUgYnl0ZWNvZGUgdlBDLgpAQCAtNzQxLDYg
Kzc3NywxMCBAQCBtYWNybyBwcm9sb2d1ZShjb2RlQmxvY2tHZXR0ZXIsIGNvZGVCbG9jCiAgICAg
ZW5kCiAKICAgICBjb2RlQmxvY2tTZXR0ZXIodDEpCisgICAgcHJlc2VydmVDYWxsZWVTYXZlc1Vz
ZWRCeUxMSW50KCkKKworICAgIG1vdmUgVGFnVHlwZU51bWJlciwgdGFnVHlwZU51bWJlcgorICAg
IGFkZHAgVGFnQml0VHlwZU90aGVyLCB0YWdUeXBlTnVtYmVyLCB0YWdNYXNrCiAKICAgICAjIFNl
dCB1cCB0aGUgUEMuCiAgICAgaWYgSlNWQUxVRTY0CkBAIC04MjcsNiArODY3LDcgQEAgbWFjcm8g
YWxsb2NhdGVKU09iamVjdChhbGxvY2F0b3IsIHN0cnVjdAogZW5kCiAKIG1hY3JvIGRvUmV0dXJu
KCkKKyAgICByZXN0b3JlQ2FsbGVlU2F2ZXNVc2VkQnlMTEludCgpCiAgICAgcmVzdG9yZUNhbGxl
clBDQW5kQ0ZSKCkKICAgICByZXQKIGVuZAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>257695</attachid>
            <date>2015-07-28 15:31:02 -0700</date>
            <delta_ts>2015-09-14 10:57:49 -0700</delta_ts>
            <desc>Patch with code to handle the DFG and OSR entry / exit.</desc>
            <filename>146946-2.patch</filename>
            <type>text/plain</type>
            <size>58130</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTg3NTE5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0NSBA
QAorMjAxNS0wNy0yOCAgTWljaGFlbCBTYWJvZmYgIDxtc2Fib2ZmQGFwcGxlLmNvbT4KKworICAg
ICAgICBqc2MtdGFpbGNhbGw6IExMaW50LCBCYXNlbGluZSBhbmQgREZHIEpJVCBzaG91bGQgc2F2
ZSAmIHJlc3RvcmUgcGxhdGZvcm0ncyBjYWxsZWUtc2F2ZSByZWdpc3RlcnMKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0Njk0NgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlIHNhdmUgcGxhdGZvcm0gY2Fs
bGVlIHNhdmUgcmVnaXN0ZXJzIHJpZ2h0IGJlbG93IHRoZSBjYWxsIGZyYW1lIGhlYWRlciwgaW4g
dGhlIGxvY2F0aW9uKHMpCisgICAgICAgIHN0YXJ0aW5nIHdpdGggVmlydHVhbFJlZ2lzdGVyIDAu
ICBBbGxvY2F0ZWQgbG9jYWwgc3BhY2UgaW4gdGhlIGJ5dGVjb2RlIGNvbXBpbGVyLgorICAgICAg
ICBUaGlzIHNwYWNlIGlzIHRoZSBtYXhpbXVtIHNwYWNlIG5lZWRlZCBmb3IgdGhlIGNhbGxlZSBy
ZWdpc3RlcnMgdGhhdCB0aGUgTExJbnQgb3IgYmFzZWxpbmUgSklUCisgICAgICAgIHdpbGwgdXNl
ZCwgcm91bmRlZCB1cCB0byBudW1iZXIgb2YgVmlydHVhbFJlZ2lzdGVycy4gIFRoZSBMTEludCBl
eHBsaWNpdGx5IHNhdmVzIGFuZCByZXN0b3JlcworICAgICAgICB0aGUgcmVnaXN0ZXJzIGluIHRo
ZSBmdW5jdGlvbnMgcHJlc2VydmVDYWxsZWVTYXZlc1VzZWRCeUxMSW50IGFuZCByZXN0b3JlQ2Fs
bGVlU2F2ZXNVc2VkQnlMTEludC4KKyAgICAgICAgVGhlIGJhc2VsaW5lIGFuZCBERkcgSklUcyBz
YXZlcyBhbmQgcmVzdG9yZXMgY2FsbGVlIHNhdmVzIHJlZ2lzdGVycyBieSB3aGF0IHJlZ2lzdGVy
cyBhcmUgaW5jbHVkZWQKKyAgICAgICAgaW4gbV9jYWxsZWVTYXZlUmVnaXN0ZXJzIGluIHRoZSBj
b2RlIGJsb2NrLgorCisgICAgICAgIEFkZGVkIGNvZGUgdG8gdHJhbnNpdGlvbiBjYWxsZWUgc2F2
ZXMgZnJvbSBvbmUgVk0ncyBmb3JtYXQgdG8gdGhlIGFub3RoZXIgYXMgcGFydCBvZiBPU1IgZW50
cnkgYW5kCisgICAgICAgIE9TUiBleGl0LiAgQWRkZWQgYSBoZWxwZXIgY2xhc3MgUmVnaXN0ZXJT
YXZlTWFwIHRoYXQgaGFzIHRoZSBjYW5ub25pY2FsIGxvY2F0aW9ucyBmb3IgYSBzZXQgb2YKKyAg
ICAgICAgc2F2ZWQgcmVnaXN0ZXJzLiAgVGhpcyBpcyB1c2VkIG5vdCBvbmx5IHRvIHNhdmUgYW5k
IHJlc3RvcmUgcmVnaXN0ZXJzIG9uIGZ1bmN0aW9uIGVudHJ5IGFuZCBleGl0LAorICAgICAgICBi
dXQgYWxzbyB0byBoYW5kbGUgT1NSIGVudHJ5IGFuZCBleGl0IGNhc2VzLgorCisgICAgICAgICog
Q01ha2VMaXN0cy50eHQ6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2Ny
aXB0Q29yZS52Y3hwcm9qOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgIEFkZGVkIFJlZ2lzdGVyU2F2ZU1hcCB0byBidWlsZCBjb25m
aWd1cmF0aW9ucy4KKworICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAg
IChKU0M6OkNvZGVCbG9jazo6c2V0Q2FsbGVlU2F2ZVJlZ2lzdGVycyk6CisgICAgICAgIChKU0M6
OnJvdW5kQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKToKKyAgICAgICAgKEpTQzo6
Q29kZUJsb2NrOjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJz
KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpjYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdp
c3RlcnMpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmNvdW50UmVvcHRpbWl6YXRpb24pOgor
ICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6
Om51bWJlck9mTExJbnRCYXNlbGluZUNhbGxlZVNhdmVSZWdpc3RlcnMpOgorICAgICAgICAoSlND
OjpDb2RlQmxvY2s6OmNhbGxlZVNhdmVSZWdpc3RlcnMpOgorICAgICAgICAoSlNDOjpDb2RlQmxv
Y2s6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMpOgorICAg
ICAgICAoSlNDOjpDb2RlQmxvY2s6Om9wdGltaXplQWZ0ZXJXYXJtVXApOgorICAgICAgICAoSlND
OjpDb2RlQmxvY2s6Om51bWJlck9mREZHQ29tcGlsZXMpOgorICAgICAgICBNZXRob2RzIHRvIG1h
bmFnZSBhIHNldCBvZiBjYWxsZWUgc2F2ZSByZWdpc3RlcnMuICBBbHNvIHRvIGFsbG9jYXRlIHRo
ZSBhcHByb3ByaWF0ZQorICAgICAgICBudW1iZXIgb2YgVnJpdHVhbFJlZ2lzdGVycyBmb3IgY2Fs
bGVlIHNhdmVzLgorCisgICAgICAgICogYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNw
cDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmFsbG9jYXRlQ2FsbGVlU2F2ZVNw
YWNlKToKKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaDoKKyAgICAg
ICAgQWxsb2NhdGUgdGhlIGFwcHJvcHJpYXRlIG51bWJlciBvZiBWcml0dWFsUmVnaXN0ZXJzIGZv
ciBjYWxsZWUgc2F2ZXMgbmVlZGVkIGJ5IExMSW50IG9yIGJhc2VsaW5lIEpJVC4KKworICAgICAg
ICAqIGRmZy9ERkdKSVRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGls
ZXI6OmNvbXBpbGVFbnRyeSk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmNvbXBp
bGVTZXR1cFJlZ2lzdGVyc0ZvckVudHJ5KToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxl
cjo6Y29tcGlsZUJvZHkpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpjb21waWxl
KToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6Y29tcGlsZUZ1bmN0aW9uKToKKyAg
ICAgICAgKiBkZmcvREZHSklUQ29tcGlsZXIuaDoKKworICAgICAgICAqIGRmZy9ERkdPU1JFbnRy
eS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6cHJlcGFyZU9TUkVudHJ5KToKKyAgICAgICAgKiBk
ZmcvREZHT1NSRXhpdENvbXBpbGVyNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXRD
b21waWxlcjo6Y29tcGlsZUV4aXQpOgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0Q29tcGlsZXJD
b21tb24uY3BwOgorICAgICAgICAoSlNDOjpERkc6OnJlaWZ5SW5saW5lZENhbGxGcmFtZXMpOgor
ICAgICAgICAoSlNDOjpERkc6OmFkanVzdEFuZEp1bXBUb1RhcmdldCk6CisgICAgICAgICogZGZn
L0RGR1BsYW4uY3BwOgorICAgICAgICAoSlNDOjpERkc6OlBsYW46OmNvbXBpbGVJblRocmVhZElt
cGwpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1Nw
ZWN1bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpj
b21waWxlKToKKworICAgICAgICAqIGRmZy9ERkdTdGFja0xheW91dFBoYXNlLmNwcDoKKyAgICAg
ICAgKEpTQzo6REZHOjpTdGFja0xheW91dFBoYXNlOjpydW4pOgorICAgICAgICBQcm9wZXJseSBo
YW5kbGUgVmlydHVhbFJlZ2lzdGVycyBzZXQgYXNpZGUgZm9yIExMSW50IG9yIGJhc2VsaW5lIEpJ
VCBjYWxsZWUgc2F2ZXMuCisKKyAgICAgICAgKiBqaXQvQXNzZW1ibHlIZWxwZXJzLmg6CisgICAg
ICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6c3RvcmVUcnVzdGVkVmFsdWUpOgorICAgICAgICAo
SlNDOjpBc3NlbWJseUhlbHBlcnM6OmVtaXRTYXZlQ2FsbGVlU2F2ZXNGb3IpOgorICAgICAgICAo
SlNDOjpBc3NlbWJseUhlbHBlcnM6OmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXNGb3IpOgorICAgICAg
ICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmVtaXRTYXZlQ2FsbGVlU2F2ZXMpOgorICAgICAgICAo
SlNDOjpBc3NlbWJseUhlbHBlcnM6OmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMpOgorICAgICAgICAo
SlNDOjpBc3NlbWJseUhlbHBlcnM6OmNvcHlDYWxsZWVTYXZlc0Zyb21GcmFtZU9yUmVnaXN0ZXJU
b1ZNQ2FsbGVlU2F2ZXNCdWZmZXIpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmVt
aXRNYXRlcmlhbGl6ZVRhZ0NoZWNrUmVnaXN0ZXJzKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlI
ZWxwZXJzOjpwcm9sb2d1ZVN0YWNrUG9pbnRlckRlbHRhKToKKyAgICAgICAgRnVuY3Rpb25zIHRv
IHNhdmUgYW5kIHJlc3RvcmUgY2FsbGVlIHNhdmUgcmVnaXN0ZXJzIGluIGEgc3RhY2sgZnJhbWUg
b3Igb3RoZXIgYnVmZmVyLgorCisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6ZW1pdE1h
dGVyaWFsaXplVGFnQ2hlY2tSZWdpc3RlcnMpOgorICAgICAgICBIZWxwZXIgdG8gcG9wdWxhdGUg
dGFnVHlwZU51bWJlclJlZ2lzdGVyIGFuZCB0YWdNYXNrUmVnaXN0ZXIgd2l0aCB0aGUgYXBwcm9w
cmlhdGUKKyAgICAgICAgY29uc3RhbnRzLgorCisgICAgICAgICogaml0L0dQUkluZm8uaDoKKyAg
ICAgICAgKEpTQzo6R1BSSW5mbzo6bnVtYmVyT2ZMTEludEJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lz
dGVycyk6CisgICAgICAgIEFkZGVkIHRoaXMgY29uc3RhbnQgdG8gaG9sZCB0aGUgbWF4aW11bSBu
dW1iZXIgb2YgY2FsbGVlIHNhdmUgcmVnaXN0ZXJzIHRoYXQgd2UgdXNlIGluCisgICAgICAgIHRo
ZSBMTEludCBvciBiYXNlbGluZSBKSVQuCisKKyAgICAgICAgKiBqaXQvSklULmNwcDoKKyAgICAg
ICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZSk6CisgICAgICAgICogaml0L0pJVENhbGwzMl82
NC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9yZXQpOgorICAgICAgICAqIGppdC9K
SVRPcGNvZGVzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2VuZCk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF9yZXQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZW50
ZXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2xvb3BfaGludCk6CisgICAgICAg
ICogaml0L0pJVE9wY29kZXMzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9l
bmQpOgorICAgICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgRW1pdCBjb2Rl
IHRvIHNhdmUgYW5kIHJlc3RvcmUgY2FsbGVlIHNhdmUgcmVnaXN0ZXJzIGFuZCBtYXRlcmlhbGl6
ZSB0YWdUeXBlTnVtYmVyUmVnaXN0ZXIKKyAgICAgICAgYW5kIHRhZ01hc2tSZWdpc3Rlci4gIEFs
c28gaGFuZGxlIGNhbGxlZSBzYXZlcyB3aGVuIHRpZXJpbmcgdXAgdG8gdGhlIERGRy4KKworICAg
ICAgICAqIGppdC9SZWdpc3RlclNhdmVNYXAuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6UmVn
aXN0ZXJTYXZlTWFwOjpSZWdpc3RlclNhdmVNYXApOgorICAgICAgICAoSlNDOjpSZWdpc3RlclNh
dmVNYXA6OmdldEluZGV4Rm9yKToKKyAgICAgICAgKiBqaXQvUmVnaXN0ZXJTYXZlTWFwLmg6IEFk
ZGVkLgorICAgICAgICAoSlNDOjpSZWdpc3RlclNhdmVNYXA6OnNpemUpOgorICAgICAgICAoSlND
OjpSZWdpc3RlclNhdmVNYXA6Omhhcyk6CisgICAgICAgIChKU0M6OlJlZ2lzdGVyU2F2ZU1hcDo6
bWF4T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6UmVnaXN0ZXJTYXZlTWFwOjpnZXRPZmZzZXRGb3Ip
OgorICAgICAgICBOZXcgY2xhc3MgdG8gdHJhY2sgcmVnaXN0ZXIgb2Zmc2V0cyBpbiB0aGUgc3Rh
Y2sgb3Igb3RoZXIgbWVtb3J5LgorCisgICAgICAgICogaml0L1JlZ2lzdGVyU2V0LmNwcDoKKyAg
ICAgICAgKEpTQzo6UmVnaXN0ZXJTZXQ6OmFsbFZNQ2FsbGVlU2F2ZVJlZ2lzdGVycyk6CisgICAg
ICAgIChKU0M6OlJlZ2lzdGVyU2V0OjpiYXNlbGluZUNhbGxlZVNhdmVSZWdpc3RlcnMpOgorICAg
ICAgICAoSlNDOjpSZWdpc3RlclNldDo6ZGZnQ2FsbGVlU2F2ZVJlZ2lzdGVycyk6CisgICAgICAg
ICogaml0L1JlZ2lzdGVyU2V0Lmg6CisgICAgICAgIEZpeGVkIHNldCBvZiBjYWxsZWUgc2F2ZSBy
ZWdpc3RlcnMgZm9yIGNhbGxlZSBzYXZlIHJlZ3NpdGVycyBpbiBhbnkgVk0sIGZvciB0aGUgYmFz
ZWxpbmUgSklUIGFuZCBmb3IgdGhlCisgICAgICAgIERGRy4KKworICAgICAgICAqIGxsaW50L0xM
SW50RGF0YS5jcHA6CisgICAgICAgIChKU0M6OkxMSW50OjpEYXRhOjpwZXJmb3JtQXNzZXJ0aW9u
cyk6CisgICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc206CisgICAgICAgICog
bGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbToKKyAgICAgICAgU2F2ZSBhbmQgcmVzdG9y
IGNhbGxlZSBzYXZlcyB1c2VkIGJ5IHRoZSBMTEludC4gIEFkZGVkIGNvZGUgdG8gaGFuZGxlIE9T
UiBlbnRyeS4KKyAgICAgICAgQ2hhbmdlZCB0aGUgTExJbnQgYXJpdHkgZml4dXAgdG8gYWx3YXlz
IHVzZSB0aGUgTExJbnQgc3VwcGxpZWQgbG9vcCBhcyB0aGUgTExJbnQgbmVlZHMgdG8gaW5jbHVk
ZQorICAgICAgICBjYWxsZWUgc2F2ZXMgYXMgdGhleSBuZWVkIHRvIGJlIHNhdmVkIGJlZm9yZSBj
YWxsaW5nIHRoZSBzbG93IHBhdGggdGhhdCBkb2VzIGFyaXR5IGNoZWNraW5nIHNpbmNlIHRoZQor
ICAgICAgICBQQyByZWdpc3RlciBpcyBkZXJpdmVkIGZyb20gdGhlIHZhbHVlIGluIGEgY2FsbGVl
IHNhdmUgcmVnaXN0ZXIuICBUaGVyZWZvcmUgdGhhdCBjYWxsZWUgc2F2ZSBuZWVkcyB0bworICAg
ICAgICBiZSB1c2VkIGJlZm9yZSBhcml0eSBmaXh1cCwgbWVhbmluZyB0aGF0IHdlIG5lZWQgdG8g
c2F2ZSB0aGUgcHJpb3IgY29udGVudHMuCisKKyAgICAgICAgKiBydW50aW1lL1ZNLmNwcDoKKyAg
ICAgICAgKEpTQzo6Vk06OlZNKToKKyAgICAgICAgKiBydW50aW1lL1ZNLmg6CisgICAgICAgIChK
U0M6OlZNOjpjYWxsZWVTYXZlUmVnaXN0ZXJzQnVmZmVyT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6
Vk06OmdldEFsbENhbGxlZVNhdmVSZWdpc3RlcnNNYXApOgorICAgICAgICBQcm92aWRlIGEgUmVn
aXN0ZXJTYXZlTWFwIHRoYXQgaGFzIGFsbCByZWdpc3RlcnMgdGhhdCBtaWdodCBiZSBzYXZlZC4g
IEFkZGVkIGEgY2FsbGVlIHNhdmUgYnVmZmVyIHRvIGJlCisgICAgICAgIHVzZWQgZm9yIE9TUiBl
eGl0IGFuZCBmb3IgZXhjZXB0aW9uIHByb2Nlc3NpbmcgaW4gYSBmdXR1cmUgcGF0Y2guCisKIDIw
MTUtMDctMjMgIEJhc2lsZSBDbGVtZW50ICA8YmFzaWxlX2NsZW1lbnRAYXBwbGUuY29tPgogCiAg
ICAgICAgIGpzYy10YWlsY2FsbDogUmVwYXRjaGluZyB0YWlsIGNhbGxzIGFzIGp1bXAgc2hvdWxk
IGRlcGVuZCBvbiB0aGUgb3Bjb2RlLCBub3QgdGhlIEpTIENhbGxMaW5rSW5mbwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMTg3NDc4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0zNjgsNiAr
MzY4LDcgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBqaXQvUG9seW1vcnBoaWND
YWxsU3R1YlJvdXRpbmUuY3BwCiAgICAgaml0L1JlZy5jcHAKICAgICBqaXQvUmVnaXN0ZXJQcmVz
ZXJ2YXRpb25XcmFwcGVyR2VuZXJhdG9yLmNwcAorICAgIGppdC9SZWdpc3RlclNhdmVNYXAuY3Bw
CiAgICAgaml0L1JlZ2lzdGVyU2V0LmNwcAogICAgIGppdC9SZXBhdGNoLmNwcAogICAgIGppdC9T
Y3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3Jp
cHRDb3JlLnZjeHByb2oJKHJldmlzaW9uIDE4NzQ3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oJKHdvcmtpbmcg
Y29weSkKQEAgLTYzNCw2ICs2MzQsNyBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caml0
XFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXGppdFxSZWcuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caml0XFJl
Z2lzdGVyUHJlc2VydmF0aW9uV3JhcHBlckdlbmVyYXRvci5jcHAiIC8+CisgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxqaXRcUmVnaXN0ZXJTYXZlTWFwLmNwcCIgLz4KICAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXGppdFxSZWdpc3RlclNldC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxqaXRcUmVwYXRjaC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxq
aXRcU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmNwcCIgLz4KQEAgLTEzOTcsNiArMTM5OCw3IEBA
CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRcUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRp
bmUuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGppdFxSZWcuaCIgLz4KICAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGppdFxSZWdpc3RlclByZXNlcnZhdGlvbldyYXBwZXJHZW5l
cmF0b3IuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGppdFxSZWdpc3RlclNhdmVN
YXAuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGppdFxSZWdpc3RlclNldC5oIiAv
PgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caml0XFJlcGF0Y2guaCIgLz4KICAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXGppdFxTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCIgLz4KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxODc0NzgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkod29ya2luZyBjb3B5KQpAQCAtOTcyLDYgKzk3Miw4IEBACiAJCTY1MTEyMzA3MTQwNDZCMEEw
MDJCMTAxRCAvKiB0ZXN0UmVnRXhwLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDY1MTEyMkU1MTQwNDY5QkEwMDJCMTAxRCAvKiB0ZXN0UmVnRXhwLmNw
cCAqLzsgfTsKIAkJNjUxNEYyMTkxOEIzRTE2NzAwOThGRjhCIC8qIEJ5dGVjb2Rlcy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjUxNEYyMTcxOEIzRTE2
NzAwOThGRjhCIC8qIEJ5dGVjb2Rlcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTY1MzAzRDY0MTQ0N0I5RTEwMEQzRjkwNCAvKiBQYXJzZXJUb2tl
bnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1MzAz
RDYzMTQ0N0I5RTEwMEQzRjkwNCAvKiBQYXJzZXJUb2tlbnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk2NTNENTA4QTFCNUQ5RjlDMDBERDRCQ0Qg
LyogUmVnaXN0ZXJTYXZlTWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA2NUFEOUIxOTFCNUQ5Qjc1MDA5ODU1NkQgLyogUmVnaXN0ZXJTYXZlTWFwLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNjUzRDUw
OEIxQjVEQzI5MDAwREQ0QkNEIC8qIFJlZ2lzdGVyU2F2ZU1hcC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NUFEOUIxODFCNUQ5Qjc1MDA5ODU1NkQg
LyogUmVnaXN0ZXJTYXZlTWFwLmNwcCAqLzsgfTsKIAkJNjU0NkY1MjExQTMyQjMxMzAwNkYwN0Q1
IC8qIE51bGxHZXR0ZXJGdW5jdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA2NTQ2RjUxRjFBMzJBNTlDMDA2RjA3RDUgLyogTnVsbEdldHRlckZ1
bmN0aW9uLmNwcCAqLzsgfTsKIAkJNjU1MjVGQzUxQTZERDgwMTAwN0I1NDk1IC8qIE51bGxTZXR0
ZXJGdW5jdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA2NTUyNUZDMzFBNkREM0IzMDA3QjU0OTUgLyogTnVsbFNldHRlckZ1bmN0aW9uLmNwcCAq
LzsgfTsKIAkJNjU1M0EzMzExN0ExRjFFRTAwOENGNkYzIC8qIENvbW1vblNsb3dQYXRoc0V4Y2Vw
dGlvbnMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NjU1M0EzMkYxN0ExRjFFRTAwOENGNkYzIC8qIENvbW1vblNsb3dQYXRoc0V4Y2VwdGlvbnMuY3Bw
ICovOyB9OwpAQCAtMjcxMCw2ICsyNzEyLDggQEAKIAkJNjU4RDNBNTUxOTYzODI2ODAwM0M0NUQ2
IC8qIFZNRW50cnlSZWNvcmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBsaW5lRW5kaW5n
ID0gMDsgcGF0aCA9IFZNRW50cnlSZWNvcmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgeGNM
YW5ndWFnZVNwZWNpZmljYXRpb25JZGVudGlmaWVyID0geGNvZGUubGFuZy5vYmpjcHA7IH07CiAJ
CTY1OTg3RjJDMTY3RkU4NEIwMDNDMkY4RCAvKiBERkdPU1JFeGl0Q29tcGlsYXRpb25JbmZvLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR09TUkV4aXRDb21waWxhdGlvbklu
Zm8uaDsgcGF0aCA9IGRmZy9ERkdPU1JFeGl0Q29tcGlsYXRpb25JbmZvLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTY1OTg3RjJGMTY4MjhBN0UwMDNDMkY4RCAvKiBVbnVzZWRQb2lu
dGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVudXNlZFBvaW50ZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNjVBRDlCMTgxQjVEOUI3NTAwOTg1NTZEIC8q
IFJlZ2lzdGVyU2F2ZU1hcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBSZWdpc3RlclNhdmVNYXAuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2NUFE
OUIxOTFCNUQ5Qjc1MDA5ODU1NkQgLyogUmVnaXN0ZXJTYXZlTWFwLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFJlZ2lzdGVyU2F2ZU1hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk2NUMwMjg0RjE3MTc5NUUyMDAzNTFFMzUgLyogQVJNdjdEaXNhc3NlbWJsZXIu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQVJNdjdEaXNhc3NlbWJs
ZXIuY3BwOyBwYXRoID0gZGlzYXNzZW1ibGVyL0FSTXY3RGlzYXNzZW1ibGVyLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjVDMDI4NUExNzE3OTY2ODAwMzUxRTM1IC8qIEFSTXY3
RE9wY29kZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBUk12N0RP
cGNvZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2NUMwMjg1QjE3MTc5NjY4
MDAzNTFFMzUgLyogQVJNdjdET3Bjb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEFSTXY3RE9wY29kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzk2MSw2
ICszOTY1LDggQEAKIAkJCQkwRkE3QThFQTE4QjQxM0M4MDA1MjM3MUQgLyogUmVnLmggKi8sCiAJ
CQkJMEY2QjFDQkIxODYxMjQ2QTAwODQ1RDk3IC8qIFJlZ2lzdGVyUHJlc2VydmF0aW9uV3JhcHBl
ckdlbmVyYXRvci5jcHAgKi8sCiAJCQkJMEY2QjFDQkMxODYxMjQ2QTAwODQ1RDk3IC8qIFJlZ2lz
dGVyUHJlc2VydmF0aW9uV3JhcHBlckdlbmVyYXRvci5oICovLAorCQkJCTY1QUQ5QjE4MUI1RDlC
NzUwMDk4NTU2RCAvKiBSZWdpc3RlclNhdmVNYXAuY3BwICovLAorCQkJCTY1QUQ5QjE5MUI1RDlC
NzUwMDk4NTU2RCAvKiBSZWdpc3RlclNhdmVNYXAuaCAqLywKIAkJCQkwRkMzMTQxNDE4MTQ2RDcw
MDAwMzMyMzIgLyogUmVnaXN0ZXJTZXQuY3BwICovLAogCQkJCTBGQzMxNDEwMTgxNDU1OTEwMDAz
MzIzMiAvKiBSZWdpc3RlclNldC5oICovLAogCQkJCTBGMjRFNTQ5MTdFRTI3NDkwMEFCQjIxNyAv
KiBSZXBhdGNoLmNwcCAqLywKQEAgLTU2MTksNiArNTYyNSw3IEBACiAJCQkJNTI2NzhGOTExQTA0
MTc3QzAwNkEzMDZEIC8qIENvbnRyb2xGbG93UHJvZmlsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTUyNjc4RjhGMUEwMzEwMDkwMDZBMzA2RCAvKiBCYXNpY0Jsb2NrTG9jYXRpb24uaCBpbiBIZWFk
ZXJzICovLAogCQkJCUE1RUE3MTBFMTlGNkRGODEwMDk4RjVFQyAvKiBJbnNwZWN0b3JBbHRlcm5h
dGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCBpbiBIZWFkZXJzICovLAorCQkJCTY1M0Q1MDhBMUI1RDlG
OUMwMERENEJDRCAvKiBSZWdpc3RlclNhdmVNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1RUE3
MEVDMTlGNUIzRUEwMDk4RjVFQyAvKiBnZW5lcmF0ZV9jcHBfYWx0ZXJuYXRlX2JhY2tlbmRfZGlz
cGF0Y2hlcl9oZWFkZXIucHkgaW4gSGVhZGVycyAqLywKIAkJCQlDNEY0QjZGMzFBMDVDOTQ0MDA1
Q0FCNzYgLyogY3BwX2dlbmVyYXRvcl90ZW1wbGF0ZXMucHkgaW4gSGVhZGVycyAqLywKIAkJCQlB
NUVGOUIxNTFBMUQ0M0ZBMDA3MDJFOTAgLyogZ2VuZXJhdGVfY3BwX2JhY2tlbmRfZGlzcGF0Y2hl
cl9pbXBsZW1lbnRhdGlvbi5weSBpbiBIZWFkZXJzICovLApAQCAtNjk5Nyw2ICs3MDA0LDcgQEAK
IAkJCWlzYSA9IFBCWFNvdXJjZXNCdWlsZFBoYXNlOwogCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0
NzQ4MzY0NzsKIAkJCWZpbGVzID0gKAorCQkJCTY1M0Q1MDhCMUI1REMyOTAwMERENEJDRCAvKiBS
ZWdpc3RlclNhdmVNYXAuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOUVBNUM3QTIxOTBGMDg4NzAw
NTA4RUJFIC8qIEluaXRpYWxpemVMTFZNTWFjLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTlFQTVD
N0ExMTkwRjA4NDIwMDUwOEVCRSAvKiBCdW5kbGVQYXRoLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJ
NTJCMzEwRkYxOTc1QjQyNDAwODA4NTdDIC8qIFR5cGVMb2NhdGlvbkNhY2hlLmNwcCBpbiBTb3Vy
Y2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9j
ay5jcHAJKHJldmlzaW9uIDE4NzQ3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OCw2ICs2OCwxMCBAQAogI2luY2x1
ZGUgPHd0Zi9TdHJpbmdQcmludFN0cmVhbS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1VuaXF1ZWRT
dHJpbmdJbXBsLmg+CiAKKyNpZiBFTkFCTEUoSklUKQorI2luY2x1ZGUgIlJlZ2lzdGVyU2F2ZU1h
cC5oIgorI2VuZGlmCisKICNpZiBFTkFCTEUoREZHX0pJVCkKICNpbmNsdWRlICJERkdPcGVyYXRp
b25zLmgiCiAjZW5kaWYKQEAgLTMyOTMsNiArMzI5NywyOCBAQCB1bnNpZ25lZCBDb2RlQmxvY2s6
OnJlb3B0aW1pemF0aW9uUmV0cnlDCiB9CiAKICNpZiBFTkFCTEUoSklUKQordm9pZCBDb2RlQmxv
Y2s6OnNldENhbGxlZVNhdmVSZWdpc3RlcnMoUmVnaXN0ZXJTZXQgY2FsbGVlU2F2ZVJlZ2lzdGVy
cykKK3sKKyAgICBtX2NhbGxlZVNhdmVSZWdpc3RlcnMgPSBzdGQ6Om1ha2VfdW5pcXVlPFJlZ2lz
dGVyU2F2ZU1hcD4oY2FsbGVlU2F2ZVJlZ2lzdGVycyk7Cit9CisKK3N0YXRpYyBzaXplX3Qgcm91
bmRDYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoc2l6ZV90IGNhbGxlZVNhdmVSZWdp
c3RlcnMpCit7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNwdVJlZ2lzdGVyU2l6ZSA9IHNp
emVvZih2b2lkKik7CisgICAgcmV0dXJuIChXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc2l6ZW9m
KFJlZ2lzdGVyKSwgY2FsbGVlU2F2ZVJlZ2lzdGVycyAqIGNwdVJlZ2lzdGVyU2l6ZSkgLyBzaXpl
b2YoUmVnaXN0ZXIpKTsKKworfQorCitzaXplX3QgQ29kZUJsb2NrOjpsbGludEJhc2VsaW5lQ2Fs
bGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCkKK3sKKyAgICByZXR1cm4gcm91bmRDYWxs
ZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMobnVtYmVyT2ZMTEludEJhc2VsaW5lQ2FsbGVl
U2F2ZVJlZ2lzdGVycygpKTsKK30KKworc2l6ZV90IENvZGVCbG9jazo6Y2FsbGVlU2F2ZVNwYWNl
QXNWaXJ0dWFsUmVnaXN0ZXJzKCkKK3sKKyAgICByZXR1cm4gcm91bmRDYWxsZWVTYXZlU3BhY2VB
c1ZpcnR1YWxSZWdpc3RlcnMobV9jYWxsZWVTYXZlUmVnaXN0ZXJzLT5zaXplKCkpOworfQorCiB2
b2lkIENvZGVCbG9jazo6Y291bnRSZW9wdGltaXphdGlvbigpCiB7CiAgICAgbV9yZW9wdGltaXph
dGlvblJldHJ5Q291bnRlcisrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suaAkocmV2aXNpb24gMTg3NDc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC04MCw2ICs4MCw3IEBAIG5h
bWVzcGFjZSBKU0MgewogCiBjbGFzcyBFeGVjU3RhdGU7CiBjbGFzcyBMTEludE9mZnNldHNFeHRy
YWN0b3I7CitjbGFzcyBSZWdpc3RlclNhdmVNYXA7CiBjbGFzcyBSZXBhdGNoQnVmZmVyOwogY2xh
c3MgVHlwZUxvY2F0aW9uOwogCkBAIC03MzIsNiArNzMzLDEwIEBAIHB1YmxpYzoKICAgICBKU19F
WFBPUlRfUFJJVkFURSB1bnNpZ25lZCByZW9wdGltaXphdGlvblJldHJ5Q291bnRlcigpIGNvbnN0
OwogICAgIHZvaWQgY291bnRSZW9wdGltaXphdGlvbigpOwogI2lmIEVOQUJMRShKSVQpCisgICAg
c3RhdGljIHVuc2lnbmVkIG51bWJlck9mTExJbnRCYXNlbGluZUNhbGxlZVNhdmVSZWdpc3RlcnMo
KSB7IHJldHVybiBHUFJJbmZvOjpudW1iZXJPZkxMSW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0
ZXJzOyB9CisgICAgc3RhdGljIHNpemVfdCBsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNW
aXJ0dWFsUmVnaXN0ZXJzKCk7CisgICAgc2l6ZV90IGNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJl
Z2lzdGVycygpOworCiAgICAgdW5zaWduZWQgbnVtYmVyT2ZERkdDb21waWxlcygpOwogCiAgICAg
aW50MzJfdCBjb2RlVHlwZVRocmVzaG9sZE11bHRpcGxpZXIoKSBjb25zdDsKQEAgLTgxNyw3ICs4
MjIsMTMgQEAgcHVibGljOgogICAgIHVpbnQzMl90IGV4aXRDb3VudFRocmVzaG9sZEZvclJlb3B0
aW1pemF0aW9uRnJvbUxvb3AoKTsKICAgICBib29sIHNob3VsZFJlb3B0aW1pemVOb3coKTsKICAg
ICBib29sIHNob3VsZFJlb3B0aW1pemVGcm9tTG9vcE5vdygpOworCisgICAgdm9pZCBzZXRDYWxs
ZWVTYXZlUmVnaXN0ZXJzKFJlZ2lzdGVyU2V0KTsKKyAgICAKKyAgICBSZWdpc3RlclNhdmVNYXAq
IGNhbGxlZVNhdmVSZWdpc3RlcnMoKSBjb25zdCB7IHJldHVybiBtX2NhbGxlZVNhdmVSZWdpc3Rl
cnMuZ2V0KCk7IH0KICNlbHNlIC8vIE5vIEpJVAorICAgIHN0YXRpYyB1bnNpZ25lZCBudW1iZXJP
ZkxMSW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCkgeyByZXR1cm4gMDsgfQorICAgIHN0
YXRpYyBzaXplX3QgbGxpbnRCYXNlbGluZUNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVy
cygpIHsgcmV0dXJuIDA7IH07CiAgICAgdm9pZCBvcHRpbWl6ZUFmdGVyV2FybVVwKCkgeyB9CiAg
ICAgdW5zaWduZWQgbnVtYmVyT2ZERkdDb21waWxlcygpIHsgcmV0dXJuIDA7IH0KICNlbmRpZgpA
QCAtODU2LDYgKzg2Nyw3IEBAIHB1YmxpYzoKICAgICAKICAgICAvLyBGSVhNRTogTWFrZSB0aGVz
ZSByZW1haW5pbmcgbWVtYmVycyBwcml2YXRlLgogCisgICAgaW50IG1fbnVtTG9jYWxSZWdpc3Rl
cnNGb3JDYWxsZWVTYXZlczsKICAgICBpbnQgbV9udW1DYWxsZWVSZWdpc3RlcnM7CiAgICAgaW50
IG1fbnVtVmFyczsKICAgICBib29sIG1faXNDb25zdHJ1Y3RvciA6IDE7CkBAIC0xMDEzLDYgKzEw
MjUsNyBAQCBwcml2YXRlOgogICAgIFNlbnRpbmVsTGlua2VkTGlzdDxMTEludENhbGxMaW5rSW5m
bywgQmFzaWNSYXdTZW50aW5lbE5vZGU8TExJbnRDYWxsTGlua0luZm8+PiBtX2luY29taW5nTExJ
bnRDYWxsczsKICAgICBSZWZQdHI8SklUQ29kZT4gbV9qaXRDb2RlOwogI2lmIEVOQUJMRShKSVQp
CisgICAgc3RkOjp1bmlxdWVfcHRyPFJlZ2lzdGVyU2F2ZU1hcD4gbV9jYWxsZWVTYXZlUmVnaXN0
ZXJzOwogICAgIEJhZzxTdHJ1Y3R1cmVTdHViSW5mbz4gbV9zdHViSW5mb3M7CiAgICAgVmVjdG9y
PEJ5VmFsSW5mbz4gbV9ieVZhbEluZm9zOwogICAgIEJhZzxDYWxsTGlua0luZm8+IG1fY2FsbExp
bmtJbmZvczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNv
ZGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAxODc0NzgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTYwLDYgKzE2MCw4IEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29k
ZUdlbmVyYXRvcihWTSYKICAgICBmb3IgKGF1dG8mIGNvbnN0YW50UmVnaXN0ZXIgOiBtX2xpbmtU
aW1lQ29uc3RhbnRSZWdpc3RlcnMpCiAgICAgICAgIGNvbnN0YW50UmVnaXN0ZXIgPSBudWxscHRy
OwogCisgICAgYWxsb2NhdGVDYWxsZWVTYXZlU3BhY2UoKTsKKwogICAgIG1fY29kZUJsb2NrLT5z
ZXROdW1QYXJhbWV0ZXJzKDEpOyAvLyBBbGxvY2F0ZSBzcGFjZSBmb3IgInRoaXMiCiAKICAgICBl
bWl0T3Bjb2RlKG9wX2VudGVyKTsKQEAgLTE5NSw2ICsxOTcsOCBAQCBCeXRlY29kZUdlbmVyYXRv
cjo6Qnl0ZWNvZGVHZW5lcmF0b3IoVk0mCiAgICAgaWYgKG1faXNCdWlsdGluRnVuY3Rpb24pCiAg
ICAgICAgIG1fc2hvdWxkRW1pdERlYnVnSG9va3MgPSBmYWxzZTsKICAgICAKKyAgICBhbGxvY2F0
ZUNhbGxlZVNhdmVTcGFjZSgpOworCiAgICAgbV9zeW1ib2xUYWJsZS0+c2V0VXNlc05vblN0cmlj
dEV2YWwoY29kZUJsb2NrLT51c2VzRXZhbCgpICYmICFjb2RlQmxvY2stPmlzU3RyaWN0TW9kZSgp
KTsKICAgICBWZWN0b3I8SWRlbnRpZmllcj4gYm91bmRQYXJhbWV0ZXJQcm9wZXJ0aWVzOwogICAg
IEZ1bmN0aW9uUGFyYW1ldGVycyYgcGFyYW1ldGVycyA9ICpmdW5jdGlvbk5vZGUtPnBhcmFtZXRl
cnMoKTsKQEAgLTUxMCw2ICs1MTQsOCBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5l
cmF0b3IoVk0mCiAgICAgZm9yIChhdXRvJiBjb25zdGFudFJlZ2lzdGVyIDogbV9saW5rVGltZUNv
bnN0YW50UmVnaXN0ZXJzKQogICAgICAgICBjb25zdGFudFJlZ2lzdGVyID0gbnVsbHB0cjsKIAor
ICAgIGFsbG9jYXRlQ2FsbGVlU2F2ZVNwYWNlKCk7CisKICAgICBtX3N5bWJvbFRhYmxlLT5zZXRV
c2VzTm9uU3RyaWN0RXZhbChjb2RlQmxvY2stPnVzZXNFdmFsKCkgJiYgIWNvZGVCbG9jay0+aXNT
dHJpY3RNb2RlKCkpOwogICAgIG1fY29kZUJsb2NrLT5zZXROdW1QYXJhbWV0ZXJzKDEpOwogCkBA
IC0yMzczLDYgKzIzNzksMTcgQEAgTGFiZWxTY29wZVB0ciBCeXRlY29kZUdlbmVyYXRvcjo6Y29u
dGludQogICAgIHJldHVybiBMYWJlbFNjb3BlUHRyOjpudWxsKCk7CiB9CiAKK3ZvaWQgQnl0ZWNv
ZGVHZW5lcmF0b3I6OmFsbG9jYXRlQ2FsbGVlU2F2ZVNwYWNlKCkKK3sKKyAgICBzaXplX3Qgdmly
dHVhbFJlZ2lzdGVyQ291bnRGb3JDYWxsZWVTYXZlcyA9IENvZGVCbG9jazo6bGxpbnRCYXNlbGlu
ZUNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpOworCisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCB2aXJ0dWFsUmVnaXN0ZXJDb3VudEZvckNhbGxlZVNhdmVzOyBpKyspIHsKKyAg
ICAgICAgUmVnaXN0ZXJJRCogbG9jYWxSZWdpc3RlciA9IGFkZFZhcigpOworICAgICAgICBsb2Nh
bFJlZ2lzdGVyLT5yZWYoKTsKKyAgICAgICAgbV9sb2NhbFJlZ2lzdGVyc0ZvckNhbGxlZVNhdmVS
ZWdpc3RlcnMuYXBwZW5kKGxvY2FsUmVnaXN0ZXIpOworICAgIH0KK30KKwogdm9pZCBCeXRlY29k
ZUdlbmVyYXRvcjo6YWxsb2NhdGVBbmRFbWl0U2NvcGUoKQogewogICAgIG1fc2NvcGVSZWdpc3Rl
ciA9IGFkZFZhcigpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9C
eXRlY29kZUdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAkocmV2aXNpb24gMTg3NDc4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC02MjcsNiArNjI3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEFM
V0FZU19JTkxJTkUgdm9pZCByZXdpbmRCaW5hcnlPcCgpOwogICAgICAgICBBTFdBWVNfSU5MSU5F
IHZvaWQgcmV3aW5kVW5hcnlPcCgpOwogCisgICAgICAgIHZvaWQgYWxsb2NhdGVDYWxsZWVTYXZl
U3BhY2UoKTsKICAgICAgICAgdm9pZCBhbGxvY2F0ZUFuZEVtaXRTY29wZSgpOwogICAgICAgICB2
b2lkIGVtaXRDb21wbGV4UG9wU2NvcGVzKFJlZ2lzdGVySUQqLCBDb250cm9sRmxvd0NvbnRleHQq
IHRvcFNjb3BlLCBDb250cm9sRmxvd0NvbnRleHQqIGJvdHRvbVNjb3BlKTsKIApAQCAtNzQ1LDYg
Kzc0Niw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBSZWdpc3RlcklEKiBtX25ld1Rhcmdl
dFJlZ2lzdGVyIHsgbnVsbHB0ciB9OwogICAgICAgICBSZWdpc3RlcklEKiBtX2xpbmtUaW1lQ29u
c3RhbnRSZWdpc3RlcnNbTGlua1RpbWVDb25zdGFudENvdW50XTsKIAorICAgICAgICBTZWdtZW50
ZWRWZWN0b3I8UmVnaXN0ZXJJRCosIDE2PiBtX2xvY2FsUmVnaXN0ZXJzRm9yQ2FsbGVlU2F2ZVJl
Z2lzdGVyczsKICAgICAgICAgU2VnbWVudGVkVmVjdG9yPFJlZ2lzdGVySUQsIDMyPiBtX2NvbnN0
YW50UG9vbFJlZ2lzdGVyczsKICAgICAgICAgU2VnbWVudGVkVmVjdG9yPFJlZ2lzdGVySUQsIDMy
PiBtX2NhbGxlZVJlZ2lzdGVyczsKICAgICAgICAgU2VnbWVudGVkVmVjdG9yPFJlZ2lzdGVySUQs
IDMyPiBtX3BhcmFtZXRlcnM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJ
VENvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0pJVENvbXBpbGVyLmNwcAkocmV2aXNpb24gMTg3NDc4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMSw3ICsxMDEs
MTIgQEAgdm9pZCBKSVRDb21waWxlcjo6Y29tcGlsZUVudHJ5KCkKICAgICAvLyBib3RoIG5vcm1h
bCByZXR1cm4gY29kZSBhbmQgd2hlbiBqdW1waW5nIHRvIGFuIGV4Y2VwdGlvbiBoYW5kbGVyKS4K
ICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZSgpOwogICAgIGVtaXRQdXRJbW1lZGlhdGVUb0NhbGxG
cmFtZUhlYWRlcihtX2NvZGVCbG9jaywgSlNTdGFjazo6Q29kZUJsb2NrKTsKLSAgICBqaXRBc3Nl
cnRUYWdzSW5QbGFjZSgpOworfQorCit2b2lkIEpJVENvbXBpbGVyOjpjb21waWxlU2V0dXBSZWdp
c3RlcnNGb3JFbnRyeSgpCit7CisgICAgZW1pdFNhdmVDYWxsZWVTYXZlcygpOworICAgIGVtaXRN
YXRlcmlhbGl6ZVRhZ0NoZWNrUmVnaXN0ZXJzKCk7ICAgIAogfQogCiB2b2lkIEpJVENvbXBpbGVy
Ojpjb21waWxlQm9keSgpCkBAIC0yODcsNiArMjkyLDcgQEAgdm9pZCBKSVRDb21waWxlcjo6Y29t
cGlsZSgpCiAKICAgICBzZXRTdGFydE9mQ29kZSgpOwogICAgIGNvbXBpbGVFbnRyeSgpOworICAg
IGNvbXBpbGVTZXR1cFJlZ2lzdGVyc0ZvckVudHJ5KCk7CiAgICAgbV9zcGVjdWxhdGl2ZSA9IHN0
ZDo6bWFrZV91bmlxdWU8U3BlY3VsYXRpdmVKSVQ+KCp0aGlzKTsKIAogICAgIC8vIFBsYW50IGEg
Y2hlY2sgdGhhdCBzdWZmaWNpZW50IHNwYWNlIGlzIGF2YWlsYWJsZSBpbiB0aGUgSlNTdGFjay4K
QEAgLTM1OSw2ICszNjUsOCBAQCB2b2lkIEpJVENvbXBpbGVyOjpjb21waWxlRnVuY3Rpb24oKQog
ICAgIGFkZFB0cihUcnVzdGVkSW1tMzIobV9ncmFwaC5zdGFja1BvaW50ZXJPZmZzZXQoKSAqIHNp
emVvZihSZWdpc3RlcikpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVy
UmVnaXN0ZXIpOwogICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAKKyAgICBjb21w
aWxlU2V0dXBSZWdpc3RlcnNGb3JFbnRyeSgpOworCiAgICAgLy8gPT09IEZ1bmN0aW9uIGJvZHkg
Y29kZSBnZW5lcmF0aW9uID09PQogICAgIG1fc3BlY3VsYXRpdmUgPSBzdGQ6Om1ha2VfdW5pcXVl
PFNwZWN1bGF0aXZlSklUPigqdGhpcyk7CiAgICAgY29tcGlsZUJvZHkoKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgJKHJldmlzaW9uIDE4NzQ3OCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtMzIyLDYgKzMyMiw3IEBAIHByaXZhdGU6CiAgICAgCiAgICAgLy8gSW50ZXJuYWwg
aW1wbGVtZW50YXRpb24gdG8gY29tcGlsZS4KICAgICB2b2lkIGNvbXBpbGVFbnRyeSgpOworICAg
IHZvaWQgY29tcGlsZVNldHVwUmVnaXN0ZXJzRm9yRW50cnkoKTsKICAgICB2b2lkIGNvbXBpbGVC
b2R5KCk7CiAgICAgdm9pZCBsaW5rKExpbmtCdWZmZXImKTsKICAgICAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwCShyZXZpc2lvbiAxODc0NzgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjU1LDYgKzI1NSwxMyBAQCB2b2lkKiBwcmVwYXJlT1NSRW50cnkoRXhlY1N0YXRlKiBleGVj
LCBDCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgcGl2b3RbaV0gPSBKU1ZhbHVlKCk7
CiAgICAgfQorCisgICAgUmVnaXN0ZXJTYXZlTWFwKiByZWdpc3RlclNhdmVMb2NhdGlvbnMgPSBj
b2RlQmxvY2stPmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKKyAgICB1bnNpZ25lZCBudW1iZXJSZWdp
c3RlcnNUb1NhdmUgPSByZWdpc3RlclNhdmVMb2NhdGlvbnMtPnNpemUoKTsKKyAgICBmb3IgKFJl
ZyByZWcgPSBSZWc6OmZpcnN0KCk7IHJlZyA8PSBSZWc6Omxhc3QoKTsgcmVnID0gcmVnLm5leHQo
KSkgeworICAgICAgICBpZiAocmVnaXN0ZXJTYXZlTG9jYXRpb25zLT5oYXMocmVnKSAmJiByZWcu
aXNHUFIoKSkKKyAgICAgICAgICAgICooYml0d2lzZV9jYXN0PGludHB0cl90Kj4ocGl2b3QpICsg
bnVtYmVyUmVnaXN0ZXJzVG9TYXZlIC0gcmVnaXN0ZXJTYXZlTG9jYXRpb25zLT5nZXRJbmRleEZv
cihyZWcpIC0gMSkgPSB2bS0+Y2FsbGVlU2F2ZVJlZ2lzdGVyc0J1ZmZlclt2bS0+Z2V0QWxsQ2Fs
bGVlU2F2ZVJlZ2lzdGVyc01hcCgpLT5nZXRJbmRleEZvcihyZWcpXTsKKyAgICB9CiAgICAgCiAg
ICAgLy8gNikgRml4IHRoZSBjYWxsIGZyYW1lIHRvIGhhdmUgdGhlIHJpZ2h0IGNvZGUgYmxvY2su
CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxl
cjY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4
aXRDb21waWxlcjY0LmNwcAkocmV2aXNpb24gMTg3NDc4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXI2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMiw2
ICsyMDIsOSBAQCB2b2lkIE9TUkV4aXRDb21waWxlcjo6Y29tcGlsZUV4aXQoY29uc3QgCiAgICAg
fQogICAgIAogICAgIC8vIEFuZCB2b2lsYSwgYWxsIEdQUnMgYXJlIGZyZWUgdG8gcmV1c2UuCisK
KyAgICBtX2ppdC5lbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CisgICAgLy8gVGhlIGNvZGUgYmVs
b3cgY2Fubm90IHVzZSBhbnkgY2FsbGVlIHNhdmUgcmVnaXN0ZXJzLgogICAgIAogICAgIC8vIFNh
dmUgYWxsIHN0YXRlIGZyb20gRlBScyBpbnRvIHRoZSBzY3JhdGNoIGJ1ZmZlci4KICAgICAKQEAg
LTMxOCw2ICszMjEsMTAgQEAgdm9pZCBPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KGNvbnN0
IAogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9CisKKyAgICAvLyBUaGUgREZH
IGNhbGxlZSBzYXZlcyB3ZXJlIHJlc3RvcmVkIHVwIGFib3ZlLiBTYXZlIHRoZSBvbmVzIHRoZSBi
YXNlbGluZSBKSVQgdXNlcy4KKworICAgIG1faml0LmVtaXRTYXZlQ2FsbGVlU2F2ZXNGb3IobV9q
aXQuYmFzZWxpbmVDb2RlQmxvY2soKSk7CiAgICAgCiAgICAgLy8gTm93IHRoYXQgdGhpbmdzIG9u
IHRoZSBzdGFjayBhcmUgcmVjb3ZlcmVkLCBkbyB0aGUgYXJndW1lbnRzIHJlY292ZXJ5LiBXZSBh
c3N1bWUgdGhhdCBhcmd1bWVudHMKICAgICAvLyByZWNvdmVyaWVzIGRvbid0IHJlY3Vyc2l2ZWx5
IHJlZmVyIHRvIGVhY2ggb3RoZXIuIEJ1dCwgd2UgZG9uJ3QgdHJ5IHRvIGFzc3VtZSB0aGF0IHRo
ZXkgb25seQpAQCAtMzY4LDcgKzM3NSw3IEBAIHZvaWQgT1NSRXhpdENvbXBpbGVyOjpjb21waWxl
RXhpdChjb25zdCAKICAgICAvLyBSZWlmeSBpbmxpbmVkIGNhbGwgZnJhbWVzLgogICAgIAogICAg
IHJlaWZ5SW5saW5lZENhbGxGcmFtZXMobV9qaXQsIGV4aXQpOwotICAgIAorCiAgICAgLy8gQW5k
IGZpbmlzaC4KICAgICBhZGp1c3RBbmRKdW1wVG9UYXJnZXQobV9qaXQsIGV4aXQpOwogfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBp
bGVyQ29tbW9uLmNwcAkocmV2aXNpb24gMTg3NDc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTcs
NiArMTk3LDcgQEAgdm9pZCByZWlmeUlubGluZWRDYWxsRnJhbWVzKENDYWxsSGVscGVycwogICAg
ICAgICAgICAgaml0LnN0b3JlUHRyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbVB0cih0cnVl
UmV0dXJuUEMpLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoaW5saW5lQ2FsbEZyYW1lLT5z
dGFja09mZnNldCArIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGlubGluZUNhbGxGcmFtZS0+
YXJndW1lbnRzLnNpemUoKSkub2Zmc2V0KCkpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAK
ICAgICAgICAgaml0LnN0b3JlUHRyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbVB0cihiYXNl
bGluZUNvZGVCbG9jayksIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lz
dGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgSlNTdGFjazo6Q29kZUJsb2NrKSkp
OworICAgICAgICBqaXQuZW1pdFNhdmVDYWxsZWVTYXZlc0ZvcihiYXNlbGluZUNvZGVCbG9jaywg
c3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0
KSk7CiAgICAgICAgIGlmICghaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkKICAgICAgICAg
ICAgIGppdC5zdG9yZTMyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKGlubGluZUNhbGxG
cmFtZS0+YXJndW1lbnRzLnNpemUoKSksIEFzc2VtYmx5SGVscGVyczo6cGF5bG9hZEZvcigoVmly
dHVhbFJlZ2lzdGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgSlNTdGFjazo6QXJn
dW1lbnRDb3VudCkpKTsKICNpZiBVU0UoSlNWQUxVRTY0KQpAQCAtMjUwLDE0ICsyNTEsMTQgQEAg
c3RhdGljIHZvaWQgb3NyV3JpdGVCYXJyaWVyKENDYWxsSGVscGVycwogdm9pZCBhZGp1c3RBbmRK
dW1wVG9UYXJnZXQoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IE9TUkV4aXRCYXNlJiBleGl0KQog
ewogI2lmIEVOQUJMRShHR0MpIAotICAgIGppdC5tb3ZlKEFzc2VtYmx5SGVscGVyczo6VHJ1c3Rl
ZEltbVB0cihqaXQuY29kZUJsb2NrKCktPm93bmVyRXhlY3V0YWJsZSgpKSwgR1BSSW5mbzo6bm9u
QXJnR1BSMCk7Ci0gICAgb3NyV3JpdGVCYXJyaWVyKGppdCwgR1BSSW5mbzo6bm9uQXJnR1BSMCwg
R1BSSW5mbzo6bm9uQXJnR1BSMSk7CisgICAgaml0Lm1vdmUoQXNzZW1ibHlIZWxwZXJzOjpUcnVz
dGVkSW1tUHRyKGppdC5jb2RlQmxvY2soKS0+b3duZXJFeGVjdXRhYmxlKCkpLCBHUFJJbmZvOjph
cmd1bWVudEdQUjEpOworICAgIG9zcldyaXRlQmFycmllcihqaXQsIEdQUkluZm86OmFyZ3VtZW50
R1BSMSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7CiAgICAgSW5saW5lQ2FsbEZyYW1lU2V0KiBpbmxp
bmVDYWxsRnJhbWVzID0gaml0LmNvZGVCbG9jaygpLT5qaXRDb2RlKCktPmRmZ0NvbW1vbigpLT5p
bmxpbmVDYWxsRnJhbWVzLmdldCgpOwogICAgIGlmIChpbmxpbmVDYWxsRnJhbWVzKSB7CiAgICAg
ICAgIGZvciAoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgOiAqaW5saW5lQ2FsbEZy
YW1lcykgewogICAgICAgICAgICAgU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlID0g
aW5saW5lQ2FsbEZyYW1lLT5leGVjdXRhYmxlLmdldCgpOwotICAgICAgICAgICAgaml0Lm1vdmUo
QXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG93bmVyRXhlY3V0YWJsZSksIEdQUkluZm86
Om5vbkFyZ0dQUjApOyAKLSAgICAgICAgICAgIG9zcldyaXRlQmFycmllcihqaXQsIEdQUkluZm86
Om5vbkFyZ0dQUjAsIEdQUkluZm86Om5vbkFyZ0dQUjEpOworICAgICAgICAgICAgaml0Lm1vdmUo
QXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG93bmVyRXhlY3V0YWJsZSksIEdQUkluZm86
OmFyZ3VtZW50R1BSMSk7CisgICAgICAgICAgICBvc3JXcml0ZUJhcnJpZXIoaml0LCBHUFJJbmZv
Ojphcmd1bWVudEdQUjEsIEdQUkluZm86Om5vbkFyZ0dQUjApOwogICAgICAgICB9CiAgICAgfQog
I2VuZGlmCkBAIC0yNzcsNyArMjc4LDcgQEAgdm9pZCBhZGp1c3RBbmRKdW1wVG9UYXJnZXQoQ0Nh
bGxIZWxwZXJzJgogCiAgICAgaml0LmFkZFB0cihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0z
MihKSVQ6OnN0YWNrUG9pbnRlck9mZnNldEZvcihiYXNlbGluZUNvZGVCbG9jaykgKiBzaXplb2Yo
UmVnaXN0ZXIpKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEFzc2VtYmx5SGVscGVyczo6
c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgIAotICAgIGppdC5qaXRBc3NlcnRUYWdzSW5QbGFj
ZSgpOworICAgIGppdC5lbWl0TWF0ZXJpYWxpemVUYWdDaGVja1JlZ2lzdGVycygpOwogCiAgICAg
aml0Lm1vdmUoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGp1bXBUYXJnZXQpLCBHUFJJ
bmZvOjpyZWdUMik7CiAgICAgaml0Lmp1bXAoR1BSSW5mbzo6cmVnVDIpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCShyZXZpc2lvbiAxODc0NzgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTMsNiAr
MjEzLDggQEAgUGxhbjo6Q29tcGlsYXRpb25QYXRoIFBsYW46OmNvbXBpbGVJblRocgogICAgICAg
ICBmaW5hbGl6ZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPEZhaWxlZEZpbmFsaXplcj4oKnRoaXMpOwog
ICAgICAgICByZXR1cm4gRmFpbFBhdGg7CiAgICAgfQorCisgICAgY29kZUJsb2NrLT5zZXRDYWxs
ZWVTYXZlUmVnaXN0ZXJzKFJlZ2lzdGVyU2V0OjpkZmdDYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOwog
ICAgIAogICAgIC8vIEJ5IHRoaXMgcG9pbnQgdGhlIERGRyBieXRlY29kZSBwYXJzZXIgd2lsbCBo
YXZlIHBvdGVudGlhbGx5IG11dGF0ZWQgdmFyaW91cyB0YWJsZXMKICAgICAvLyBpbiB0aGUgQ29k
ZUJsb2NrLiBUaGlzIGlzIGEgZ29vZCB0aW1lIHRvIHBlcmZvcm0gYW4gZWFybHkgc2hyaW5rLCB3
aGljaCBpcyBtb3JlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklUMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHJldmlzaW9uIDE4NzQ3OCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMwODIsNiArMzA4Miw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9k
ZSogbm9kZSkKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCisgICAgICAgIG1faml0LmVtaXRS
ZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKICAgICAgICAgbV9qaXQuZW1pdEZ1bmN0aW9uRXBpbG9ndWUo
KTsKICAgICAgICAgbV9qaXQucmV0KCk7CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAxODc0
NzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMTU4LDYgKzMxNTgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIEpTVmFsdWVPcGVyYW5kIG9wMSh0aGlzLCBu
b2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIG1faml0Lm1vdmUob3AxLmdwcigpLCBHUFJJbmZvOjpy
ZXR1cm5WYWx1ZUdQUik7CiAKKyAgICAgICAgbV9qaXQuZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygp
OwogICAgICAgICBtX2ppdC5lbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOwogICAgICAgICBtX2ppdC5y
ZXQoKTsKICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0YWNr
TGF5b3V0UGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3RhY2tMYXlvdXRQaGFzZS5jcHAJKHJldmlzaW9uIDE4NzQ3OCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3RhY2tMYXlvdXRQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEyOSw3ICsxMjksNyBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIFZl
Y3Rvcjx1bnNpZ25lZD4gYWxsb2NhdGlvbih1c2VkTG9jYWxzLnNpemUoKSk7Ci0gICAgICAgIG1f
Z3JhcGgubV9uZXh0TWFjaGluZUxvY2FsID0gMDsKKyAgICAgICAgbV9ncmFwaC5tX25leHRNYWNo
aW5lTG9jYWwgPSBjb2RlQmxvY2soKS0+Y2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJz
KCk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB1c2VkTG9jYWxzLnNpemUoKTsg
KytpKSB7CiAgICAgICAgICAgICBpZiAoIXVzZWRMb2NhbHMuZ2V0KGkpKSB7CiAgICAgICAgICAg
ICAgICAgYWxsb2NhdGlvbltpXSA9IFVJTlRfTUFYOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCShyZXZpc2lvbiAxODc0NzgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
Myw2ICszMyw3IEBACiAjaW5jbHVkZSAiR1BSSW5mby5oIgogI2luY2x1ZGUgIkpJVENvZGUuaCIK
ICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlci5oIgorI2luY2x1ZGUgIlJlZ2lzdGVyU2F2ZU1hcC5o
IgogI2luY2x1ZGUgIlR5cGVvZlR5cGUuaCIKICNpbmNsdWRlICJWTS5oIgogCkBAIC0xNzQsNiAr
MTc1LDg3IEBAIHB1YmxpYzoKICNlbmRpZgogICAgIH0KIAorICAgIHZvaWQgZW1pdFNhdmVDYWxs
ZWVTYXZlc0ZvcihDb2RlQmxvY2sqIGNvZGVCbG9jaywgVmlydHVhbFJlZ2lzdGVyIG9mZnNldFZp
cnR1YWxSZWdpc3RlciA9IHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oMCkpCisgICAgewor
ICAgICAgICBBU1NFUlQoY29kZUJsb2NrKTsKKworICAgICAgICBSZWdpc3RlclNhdmVNYXAqIGNh
bGxlZVNhdmVzTWFwID0gY29kZUJsb2NrLT5jYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CisKKyAgICAg
ICAgaWYgKCFjYWxsZWVTYXZlc01hcC0+c2l6ZSgpKQorICAgICAgICAgICAgcmV0dXJuOworCisg
ICAgICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVmlydHVhbFJlZ2lzdGVyID0gdmlydHVhbFJlZ2lz
dGVyRm9yTG9jYWwoY29kZUJsb2NrLT5jYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMo
KSAtIDEpICsgb2Zmc2V0VmlydHVhbFJlZ2lzdGVyOworCisgICAgICAgIGZvciAoUmVnIHJlZyA9
IFJlZzo6Zmlyc3QoKTsgcmVnIDw9IFJlZzo6bGFzdCgpOyByZWcgPSByZWcubmV4dCgpKSB7Cisg
ICAgICAgICAgICBpZiAoY2FsbGVlU2F2ZXNNYXAtPmhhcyhyZWcpICYmIHJlZy5pc0dQUigpKQor
ICAgICAgICAgICAgICAgIHN0b3JlUHRyKHJlZy5ncHIoKSwgQWRkcmVzcyhmcmFtZVBvaW50ZXJS
ZWdpc3RlciwgYmFzZVZpcnR1YWxSZWdpc3Rlci5vZmZzZXRJbkJ5dGVzKCkgKyBjYWxsZWVTYXZl
c01hcC0+Z2V0T2Zmc2V0Rm9yKHJlZykpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQg
ZW1pdFJlc3RvcmVDYWxsZWVTYXZlc0ZvcihDb2RlQmxvY2sqIGNvZGVCbG9jaykKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChjb2RlQmxvY2spOworCisgICAgICAgIFJlZ2lzdGVyU2F2ZU1hcCogY2Fs
bGVlU2F2ZXNNYXAgPSBjb2RlQmxvY2stPmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKKworICAgICAg
ICBpZiAoIWNhbGxlZVNhdmVzTWFwLT5zaXplKCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAg
ICAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWaXJ0dWFsUmVnaXN0ZXIgPSB2aXJ0dWFsUmVnaXN0
ZXJGb3JMb2NhbChjb2RlQmxvY2stPmNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygp
IC0gMSk7CisKKyAgICAgICAgZm9yIChSZWcgcmVnID0gUmVnOjpmaXJzdCgpOyByZWcgPD0gUmVn
OjpsYXN0KCk7IHJlZyA9IHJlZy5uZXh0KCkpIHsKKyAgICAgICAgICAgIGlmIChjYWxsZWVTYXZl
c01hcC0+aGFzKHJlZykgJiYgcmVnLmlzR1BSKCkpCisgICAgICAgICAgICAgICAgbG9hZFB0cihB
ZGRyZXNzKGZyYW1lUG9pbnRlclJlZ2lzdGVyLCBiYXNlVmlydHVhbFJlZ2lzdGVyLm9mZnNldElu
Qnl0ZXMoKSArIGNhbGxlZVNhdmVzTWFwLT5nZXRPZmZzZXRGb3IocmVnKSksIHJlZy5ncHIoKSk7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIGVtaXRTYXZlQ2FsbGVlU2F2ZXMoKQorICAg
IHsKKyAgICAgICAgZW1pdFNhdmVDYWxsZWVTYXZlc0Zvcihjb2RlQmxvY2soKSk7CisgICAgfQor
CisgICAgdm9pZCBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCkKKyAgICB7CisgICAgICAgIGVtaXRS
ZXN0b3JlQ2FsbGVlU2F2ZXNGb3IoY29kZUJsb2NrKCkpOworICAgIH0KKworICAgIHZvaWQgY29w
eUNhbGxlZVNhdmVzRnJvbUZyYW1lT3JSZWdpc3RlclRvVk1DYWxsZWVTYXZlc0J1ZmZlcihHUFJS
ZWcgdGVtcEdQUikKKyAgICB7CisgICAgICAgIEFTU0VSVChjb2RlQmxvY2soKSk7CisKKyAgICAg
ICAgLy8gQ29weSBzYXZlZCBjYWxsZWVTYXZlcyBvbiBzdGFjayBvciB1bnNhdmVkIGNhbGxlZVNh
dmVzIGluIHJlZ2lzdGVyIHRvIHZtIGNhbGxlZVNhdmUgYnVmZmVyCisgICAgICAgIG1vdmUoVHJ1
c3RlZEltbVB0cihtX3ZtKSwgdGVtcEdQUik7CisgICAgICAgIGFkZFB0cihUcnVzdGVkSW1tMzIo
Vk06OmNhbGxlZVNhdmVSZWdpc3RlcnNCdWZmZXJPZmZzZXQoKSksIHRlbXBHUFIpOworCisgICAg
ICAgIFJlZ2lzdGVyU2F2ZU1hcCogYWxsQ2FsbGVlU2F2ZXNNYXAgPSBtX3ZtLT5nZXRBbGxDYWxs
ZWVTYXZlUmVnaXN0ZXJzTWFwKCk7CisgICAgICAgIFJlZ2lzdGVyU2F2ZU1hcCogY3VycmVudENh
bGxlZVNhdmVzID0gY29kZUJsb2NrKCktPmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKKyAgICAgICAg
VmlydHVhbFJlZ2lzdGVyIGNhbGxlZVNhdmVCYXNlID0gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwo
Y29kZUJsb2NrKCktPmNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpIC0gMSk7CisK
KyAgICAgICAgZm9yIChSZWcgcmVnID0gUmVnOjpmaXJzdCgpOyByZWcgPD0gUmVnOjpsYXN0KCk7
IHJlZyA9IHJlZy5uZXh0KCkpIHsKKyAgICAgICAgICAgIEdQUlJlZyByZWdUb1N0b3JlOworCisg
ICAgICAgICAgICBpZiAoYWxsQ2FsbGVlU2F2ZXNNYXAtPmhhcyhyZWcpICYmIHJlZy5pc0dQUigp
KSB7CisgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRDYWxsZWVTYXZlcy0+aGFzKHJlZykpIHsK
KyAgICAgICAgICAgICAgICAgICAgLy8gTG9hZCBjYWxsZWVTYXZlIGZyb20gc3RhY2sgaW50byB0
ZW1wIHJlZ2lzdGVyCisgICAgICAgICAgICAgICAgICAgIHJlZ1RvU3RvcmUgPSBHUFJJbmZvOjpy
ZWdUMDsKKyAgICAgICAgICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKGZyYW1lUG9pbnRlclJl
Z2lzdGVyLCAgY2FsbGVlU2F2ZUJhc2Uub2Zmc2V0SW5CeXRlcygpICsgY3VycmVudENhbGxlZVNh
dmVzLT5nZXRPZmZzZXRGb3IocmVnKSksIHJlZ1RvU3RvcmUpOworICAgICAgICAgICAgICAgIH0g
ZWxzZQorICAgICAgICAgICAgICAgICAgICAvLyBKdXN0IHN0b3JlIGNhbGxlZSBzYXZlIGRpcmVj
dGx5CisgICAgICAgICAgICAgICAgICAgIHJlZ1RvU3RvcmUgPSByZWcuZ3ByKCk7CisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgc3RvcmVQdHIocmVnVG9TdG9yZSwgQWRkcmVzcyh0
ZW1wR1BSLCBhbGxDYWxsZWVTYXZlc01hcC0+Z2V0T2Zmc2V0Rm9yKHJlZykpKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgZW1pdE1hdGVyaWFsaXplVGFnQ2hl
Y2tSZWdpc3RlcnMoKQorICAgIHsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICBtb3ZlKE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoVGFnVHlwZU51bWJlciksIEdQUkluZm86OnRhZ1R5
cGVOdW1iZXJSZWdpc3Rlcik7CisgICAgICAgIG9yUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tMzIoVGFnQml0VHlwZU90aGVyKSwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBH
UFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpOworI2VuZGlmCisgICAgfQorCiAjaWYgQ1BVKFg4Nl82
NCkgfHwgQ1BVKFg4NikKICAgICBzdGF0aWMgc2l6ZV90IHByb2xvZ3VlU3RhY2tQb2ludGVyRGVs
dGEoKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvR1BSSW5mby5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvR1BSSW5mby5oCShyZXZpc2lv
biAxODc0NzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0dQUkluZm8uaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzI2LDYgKzMyNiw4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3QgR1BS
UmVnIHJldHVyblZhbHVlR1BSID0gWDg2UmVnaXN0ZXJzOjplYXg7IC8vIHJlZ1QwCiAgICAgc3Rh
dGljIGNvbnN0IEdQUlJlZyByZXR1cm5WYWx1ZUdQUjIgPSBYODZSZWdpc3RlcnM6OmVkeDsgLy8g
cmVnVDEKICAgICBzdGF0aWMgY29uc3QgR1BSUmVnIG5vblByZXNlcnZlZE5vblJldHVybkdQUiA9
IFg4NlJlZ2lzdGVyczo6ZWN4OworICAgIHN0YXRpYyBjb25zdCBpbnQgbnVtYmVyT2ZMTEludEJh
c2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycyA9IDA7CisgICAgc3RhdGljIGNvbnN0IGludCBudW1i
ZXJDYWxsZWVTYXZlUmVnaXN0ZXJzID0gMDsKIAogICAgIHN0YXRpYyBHUFJSZWcgdG9SZWdpc3Rl
cih1bnNpZ25lZCBpbmRleCkKICAgICB7CkBAIC00MTAsNyArNDEyLDcgQEAgcHVibGljOgogICAg
IHN0YXRpYyBjb25zdCBHUFJSZWcgcmVnQ1M0ID0gWDg2UmVnaXN0ZXJzOjpyMTU7CiAjZWxzZQog
ICAgIHN0YXRpYyBjb25zdCBHUFJSZWcgcmVnQ1MzID0gWDg2UmVnaXN0ZXJzOjplc2k7Ci0gICAg
c3RhdGljIGNvbnN0IEdQUlJlZyByZWdDUzQgPSBYODZSZWdpc3RlcnM6OmVkaTsgLy8gcmVnVDQK
KyAgICBzdGF0aWMgY29uc3QgR1BSUmVnIHJlZ0NTNCA9IFg4NlJlZ2lzdGVyczo6ZWRpOyAvLyBy
ZWdUNgogICAgIHN0YXRpYyBjb25zdCBHUFJSZWcgcmVnQ1M1ID0gWDg2UmVnaXN0ZXJzOjpyMTQ7
CiAgICAgc3RhdGljIGNvbnN0IEdQUlJlZyByZWdDUzYgPSBYODZSZWdpc3RlcnM6OnIxNTsKICNl
bmRpZgpAQCAtNDM2LDYgKzQzOCwxMyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0IEdQUlJl
ZyBub25QcmVzZXJ2ZWROb25SZXR1cm5HUFIgPSBYODZSZWdpc3RlcnM6OnIxMDsgLy8gcmVnVDUK
ICAgICBzdGF0aWMgY29uc3QgR1BSUmVnIG5vblByZXNlcnZlZE5vbkFyZ3VtZW50R1BSID0gWDg2
UmVnaXN0ZXJzOjpyMTA7IC8vIHJlZ1Q1CiAgICAgc3RhdGljIGNvbnN0IEdQUlJlZyBwYXRjaHBv
aW50U2NyYXRjaFJlZ2lzdGVyID0gTWFjcm9Bc3NlbWJsZXI6OnNjcmF0Y2hSZWdpc3RlcjsKKyNp
ZiAhT1MoV0lORE9XUykKKyAgICBzdGF0aWMgY29uc3QgaW50IG51bWJlck9mTExJbnRCYXNlbGlu
ZUNhbGxlZVNhdmVSZWdpc3RlcnMgPSAzOyAvLyByYngsIHIxNCAmIHIxNQorICAgIHN0YXRpYyBj
b25zdCBpbnQgbnVtYmVyQ2FsbGVlU2F2ZVJlZ2lzdGVycyA9IDU7CisjZWxzZQorICAgIHN0YXRp
YyBjb25zdCBpbnQgbnVtYmVyT2ZMTEludEJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycyA9IDU7
IC8vIHJieCwgcmRpLCByc2ksIHIxNCAmIHIxNQorICAgIHN0YXRpYyBjb25zdCBpbnQgbnVtYmVy
Q2FsbGVlU2F2ZVJlZ2lzdGVycyA9IDc7CisjZW5kaWYKIAogICAgIHN0YXRpYyBHUFJSZWcgdG9S
ZWdpc3Rlcih1bnNpZ25lZCBpbmRleCkKICAgICB7CkBAIC01MjUsNiArNTM0LDggQEAgcHVibGlj
OgogICAgIHN0YXRpYyBjb25zdCBHUFJSZWcgcmV0dXJuVmFsdWVHUFIgPSBBUk1SZWdpc3RlcnM6
OnIwOyAvLyByZWdUMAogICAgIHN0YXRpYyBjb25zdCBHUFJSZWcgcmV0dXJuVmFsdWVHUFIyID0g
QVJNUmVnaXN0ZXJzOjpyMTsgLy8gcmVnVDEKICAgICBzdGF0aWMgY29uc3QgR1BSUmVnIG5vblBy
ZXNlcnZlZE5vblJldHVybkdQUiA9IEFSTVJlZ2lzdGVyczo6cjU7CisgICAgc3RhdGljIGNvbnN0
IGludCBudW1iZXJPZkxMSW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzID0gMDsKKyAgICBz
dGF0aWMgY29uc3QgaW50IG51bWJlckNhbGxlZVNhdmVSZWdpc3RlcnMgPSAwOwogCiAgICAgc3Rh
dGljIEdQUlJlZyB0b1JlZ2lzdGVyKHVuc2lnbmVkIGluZGV4KQogICAgIHsKQEAgLTYyMCw2ICs2
MzEsOCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0IEdQUlJlZyBub25QcmVzZXJ2ZWROb25S
ZXR1cm5HUFIgPSBBUk02NFJlZ2lzdGVyczo6eDI7CiAgICAgc3RhdGljIGNvbnN0IEdQUlJlZyBu
b25QcmVzZXJ2ZWROb25Bcmd1bWVudEdQUiA9IEFSTTY0UmVnaXN0ZXJzOjp4ODsKICAgICBzdGF0
aWMgY29uc3QgR1BSUmVnIHBhdGNocG9pbnRTY3JhdGNoUmVnaXN0ZXIgPSBBUk02NFJlZ2lzdGVy
czo6aXAwOworICAgIHN0YXRpYyBjb25zdCBpbnQgbnVtYmVyT2ZMTEludEJhc2VsaW5lQ2FsbGVl
U2F2ZVJlZ2lzdGVycyA9IDM7IC8vIHgyNiAoTExJbnQgb25seSksIHgyNyAmIHgyOAorICAgIHN0
YXRpYyBjb25zdCBpbnQgbnVtYmVyQ2FsbGVlU2F2ZVJlZ2lzdGVycyA9IDM7CiAKICAgICAvLyBH
UFJSZWcgbWFwcGluZyBpcyBkaXJlY3QsIHRoZSBtYWNoaW5lIHJlZ3NpdGVyIG51bWJlcnMgY2Fu
CiAgICAgLy8gYmUgdXNlZCBkaXJlY3RseSBhcyBpbmRpY2VzIGludG8gdGhlIEdQUiBSZWdpc3Rl
ckJhbmsuCkBAIC03MDcsNiArNzIwLDggQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdCBHUFJS
ZWcgcmV0dXJuVmFsdWVHUFIgPSByZWdUMDsKICAgICBzdGF0aWMgY29uc3QgR1BSUmVnIHJldHVy
blZhbHVlR1BSMiA9IHJlZ1QxOwogICAgIHN0YXRpYyBjb25zdCBHUFJSZWcgbm9uUHJlc2VydmVk
Tm9uUmV0dXJuR1BSID0gcmVnVDI7CisgICAgc3RhdGljIGNvbnN0IGludCBudW1iZXJPZkxMSW50
QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzID0gMDsKKyAgICBzdGF0aWMgY29uc3QgaW50IG51
bWJlckNhbGxlZVNhdmVSZWdpc3RlcnMgPSAwOwogCiAgICAgc3RhdGljIEdQUlJlZyB0b1JlZ2lz
dGVyKHVuc2lnbmVkIGluZGV4KQogICAgIHsKQEAgLTc4MSw2ICs3OTYsOCBAQCBwdWJsaWM6CiAg
ICAgc3RhdGljIGNvbnN0IEdQUlJlZyByZXR1cm5WYWx1ZUdQUiA9IHJlZ1QwOwogICAgIHN0YXRp
YyBjb25zdCBHUFJSZWcgcmV0dXJuVmFsdWVHUFIyID0gcmVnVDE7CiAgICAgc3RhdGljIGNvbnN0
IEdQUlJlZyBub25QcmVzZXJ2ZWROb25SZXR1cm5HUFIgPSByZWdUMjsKKyAgICBzdGF0aWMgY29u
c3QgaW50IG51bWJlck9mTExJbnRCYXNlbGluZUNhbGxlZVNhdmVSZWdpc3RlcnMgPSAwOworICAg
IHN0YXRpYyBjb25zdCBpbnQgbnVtYmVyQ2FsbGVlU2F2ZVJlZ2lzdGVycyA9IDA7CiAKICAgICBz
dGF0aWMgR1BSUmVnIHRvUmVnaXN0ZXIodW5zaWduZWQgaW5kZXgpCiAgICAgewpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklULmNwcAkocmV2aXNpb24gMTg3NDc4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MCw2ICs5MCw5IEBAIHZv
aWQgSklUOjplbWl0RW50ZXJPcHRpbWl6YXRpb25DaGVjaygpCiAgICAgCiAgICAgc2tpcE9wdGlt
aXplLmFwcGVuZChicmFuY2hBZGQzMihTaWduZWQsIFRydXN0ZWRJbW0zMihPcHRpb25zOjpleGVj
dXRpb25Db3VudGVySW5jcmVtZW50Rm9yRW50cnkoKSksIEFic29sdXRlQWRkcmVzcyhtX2NvZGVC
bG9jay0+YWRkcmVzc09mSklURXhlY3V0ZUNvdW50ZXIoKSkpKTsKICAgICBBU1NFUlQoIW1fYnl0
ZWNvZGVPZmZzZXQpOworCisgICAgY29weUNhbGxlZVNhdmVzRnJvbUZyYW1lT3JSZWdpc3RlclRv
Vk1DYWxsZWVTYXZlc0J1ZmZlcihyZWdUMSk7CisKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bk9wdGltaXplLCBtX2J5dGVjb2RlT2Zmc2V0KTsKICAgICBza2lwT3B0aW1pemUuYXBwZW5kKGJy
YW5jaFRlc3RQdHIoWmVybywgcmV0dXJuVmFsdWVHUFIpKTsKICAgICBtb3ZlKHJldHVyblZhbHVl
R1BSMiwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwpAQCAtNDk1LDYgKzQ5OCw4IEBAIENvbXBpbGF0
aW9uUmVzdWx0IEpJVDo6cHJpdmF0ZUNvbXBpbGUoSkkKICAgICAgICAgYnJlYWs7CiAgICAgfQog
CisgICAgbV9jb2RlQmxvY2stPnNldENhbGxlZVNhdmVSZWdpc3RlcnMoUmVnaXN0ZXJTZXQ6OmJh
c2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKKwogICAgIC8vIFRoaXMgZW5zdXJlcyB0aGF0
IHdlIGhhdmUgdGhlIG1vc3QgdXAgdG8gZGF0ZSB0eXBlIGluZm9ybWF0aW9uIHdoZW4gcGVyZm9y
bWluZyB0eXBlY2hlY2sgb3B0aW1pemF0aW9ucyBmb3Igb3BfcHJvZmlsZV90eXBlLgogICAgIGlm
IChtX3ZtLT50eXBlUHJvZmlsZXIoKSkKICAgICAgICAgbV92bS0+dHlwZVByb2ZpbGVyTG9nKCkt
PnByb2Nlc3NMb2dFbnRyaWVzKEFTQ0lJTGl0ZXJhbCgiUHJlcGFyaW5nIGZvciBKSVQgY29tcGls
YXRpb24uIikpOwpAQCAtNTIxLDYgKzUyNiw5IEBAIENvbXBpbGF0aW9uUmVzdWx0IEpJVDo6cHJp
dmF0ZUNvbXBpbGUoSkkKIAogICAgIExhYmVsIGJlZ2luTGFiZWwodGhpcyk7CiAKKyAgICBlbWl0
U2F2ZUNhbGxlZVNhdmVzKCk7CisgICAgZW1pdE1hdGVyaWFsaXplVGFnQ2hlY2tSZWdpc3RlcnMo
KTsKKwogICAgIHNhbXBsZUNvZGVCbG9jayhtX2NvZGVCbG9jayk7CiAjaWYgRU5BQkxFKE9QQ09E
RV9TQU1QTElORykKICAgICBzYW1wbGVJbnN0cnVjdGlvbihtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rp
b25zKCkuYmVnaW4oKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwz
Ml82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxs
MzJfNjQuY3BwCShyZXZpc2lvbiAxODc0NzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVENhbGwzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYwLDYgKzYwLDcgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfcmV0KEluc3RydWN0aW9uKiBjdXJyZQogICAgIGVtaXRMb2FkKGRzdCwgcmVn
VDEsIHJlZ1QwKTsKIAogICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CisgICAgZW1p
dFJlc3RvcmVDYWxsZWVTYXZlcygpOwogICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CiAgICAg
cmV0KCk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82
NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVz
MzJfNjQuY3BwCShyZXZpc2lvbiAxODc0NzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVE9wY29kZXMzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0OSw2ICsxNDksNyBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9lbmQoSW5zdHJ1Y3Rpb24qIGN1cnJlCiB7CiAgICAgQVNTRVJUKHJl
dHVyblZhbHVlR1BSICE9IGNhbGxGcmFtZVJlZ2lzdGVyKTsKICAgICBlbWl0TG9hZChjdXJyZW50
SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCByZWdUMSwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVt
aXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOwogICAg
IHJldCgpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3Bw
CShyZXZpc2lvbiAxODc0NzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29k
ZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MCw2ICs3MCw3IEBAIHZvaWQgSklUOjplbWl0X29w
X2VuZChJbnN0cnVjdGlvbiogY3VycmUKIHsKICAgICBSRUxFQVNFX0FTU0VSVChyZXR1cm5WYWx1
ZUdQUiAhPSBjYWxsRnJhbWVSZWdpc3Rlcik7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihj
dXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1p
dFJlc3RvcmVDYWxsZWVTYXZlcygpOwogICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CiAgICAg
cmV0KCk7CiB9CkBAIC0yNTUsNiArMjU2LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmV0KEluc3Ry
dWN0aW9uKiBjdXJyZQogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0
aW9uWzFdLnUub3BlcmFuZCwgcmV0dXJuVmFsdWVHUFIpOwogCiAgICAgY2hlY2tTdGFja1BvaW50
ZXJBbGlnbm1lbnQoKTsKKyAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAgICAgZW1pdEZ1
bmN0aW9uRXBpbG9ndWUoKTsKICAgICByZXQoKTsKIH0KQEAgLTY2NSw3ICs2NjcsNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9lbnRlcihJbnN0cnVjdGlvbiopCiAgICAgLy8gcmVnaXN0ZXJzIHRvIHph
cCBzdGFsZSBwb2ludGVycywgdG8gYXZvaWQgdW5uZWNlc3NhcmlseSBwcm9sb25naW5nCiAgICAg
Ly8gb2JqZWN0IGxpZmV0aW1lIGFuZCBpbmNyZWFzaW5nIEdDIHByZXNzdXJlLgogICAgIHNpemVf
dCBjb3VudCA9IG1fY29kZUJsb2NrLT5tX251bVZhcnM7Ci0gICAgZm9yIChzaXplX3QgaiA9IDA7
IGogPCBjb3VudDsgKytqKQorICAgIGZvciAoc2l6ZV90IGogPSBDb2RlQmxvY2s6OmxsaW50QmFz
ZWxpbmVDYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKTsgaiA8IGNvdW50OyArK2op
CiAgICAgICAgIGVtaXRJbml0UmVnaXN0ZXIodmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaikub2Zm
c2V0KCkpOwogCiAgICAgZW1pdFdyaXRlQmFycmllcihtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRh
YmxlKCkpOwpAQCAtOTM1LDYgKzkzNyw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9sb29wX2hp
bnQoSW5zdHJ1Y3QKICAgICBpZiAoY2FuQmVPcHRpbWl6ZWQoKSkgewogICAgICAgICBsaW5rU2xv
d0Nhc2UoaXRlcik7CiAgICAgICAgIAorICAgICAgICBjb3B5Q2FsbGVlU2F2ZXNGcm9tRnJhbWVP
clJlZ2lzdGVyVG9WTUNhbGxlZVNhdmVzQnVmZmVyKHJlZ1QxKTsKKwogICAgICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbk9wdGltaXplLCBtX2J5dGVjb2RlT2Zmc2V0KTsKICAgICAgICAgSnVt
cCBub09wdGltaXplZEVudHJ5ID0gYnJhbmNoVGVzdFB0cihaZXJvLCByZXR1cm5WYWx1ZUdQUik7
CiAgICAgICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDE4NzQ3OCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEyNDYsOCArMTI0NiwxMSBAQCBTbG93UGF0aFJldHVyblR5cGUgSklUX09QRVJBVElPTiBvcGVy
YXRpCiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIG51bVZhcnNXaXRoVmFsdWVzID0gMDsKICAg
ICAgICAgT3BlcmFuZHM8SlNWYWx1ZT4gbXVzdEhhbmRsZVZhbHVlcyhjb2RlQmxvY2stPm51bVBh
cmFtZXRlcnMoKSwgbnVtVmFyc1dpdGhWYWx1ZXMpOworICAgICAgICBpbnQgbG9jYWxzVXNlZEZv
ckNhbGxlZVNhdmVzID0gc3RhdGljX2Nhc3Q8aW50PihDb2RlQmxvY2s6OmxsaW50QmFzZWxpbmVD
YWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKSk7CiAgICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbXVzdEhhbmRsZVZhbHVlcy5zaXplKCk7ICsraSkgewogICAgICAgICAgICAg
aW50IG9wZXJhbmQgPSBtdXN0SGFuZGxlVmFsdWVzLm9wZXJhbmRGb3JJbmRleChpKTsKKyAgICAg
ICAgICAgIGlmIChvcGVyYW5kSXNMb2NhbChvcGVyYW5kKSAmJiBWaXJ0dWFsUmVnaXN0ZXIob3Bl
cmFuZCkudG9Mb2NhbCgpIDwgbG9jYWxzVXNlZEZvckNhbGxlZVNhdmVzKQorICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgbXVzdEhhbmRsZVZhbHVlc1tpXSA9IGV4ZWMtPnVu
Y2hlY2tlZFIob3BlcmFuZCkuanNWYWx1ZSgpOwogICAgICAgICB9CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJTYXZlTWFwLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyU2F2ZU1hcC5jcHAJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyU2F2ZU1hcC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTWFjcm9Bc3NlbWJs
ZXIuaCIKKyNpbmNsdWRlICJSZWdpc3RlclNhdmVNYXAuaCIKKworI2lmIEVOQUJMRShKSVQpCisK
K25hbWVzcGFjZSBKU0MgeworCitSZWdpc3RlclNhdmVNYXA6OlJlZ2lzdGVyU2F2ZU1hcChSZWdp
c3RlclNldCByZWdpc3RlcnMpCit7CisgICAgbV9udW1iZXJPZlJlZ2lzdGVycyA9IDA7CisgICAg
Zm9yIChSZWcgcmVnID0gUmVnOjpmaXJzdCgpOyByZWcgPD0gUmVnOjpsYXN0KCk7cmVnID0gcmVn
Lm5leHQoKSkgeworICAgICAgICBpZiAocmVnaXN0ZXJzLmdldChyZWcpICYmIHJlZy5pc0dQUigp
KSB7CisgICAgICAgICAgICBtX2luZGV4Rm9yUmVnaXN0ZXIuc2V0KHJlZy5pbmRleCgpLCBtX251
bWJlck9mUmVnaXN0ZXJzKTsKKyAgICAgICAgICAgIG1fbnVtYmVyT2ZSZWdpc3RlcnMrKzsKKyAg
ICAgICAgfQorICAgIH0KK30KKwordW5zaWduZWQgUmVnaXN0ZXJTYXZlTWFwOjpnZXRJbmRleEZv
cihSZWcgcmVnKSBjb25zdAoreworICAgIEhhc2hNYXA8dW5zaWduZWQsIHVuc2lnbmVkLCBXVEY6
OkludEhhc2g8dW5zaWduZWQ+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVu
c2lnbmVkPiA+Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gbV9pbmRleEZvclJlZ2lzdGVyLmZpbmQo
cmVnLmluZGV4KCkpOworICAgIEFTU0VSVChpdGVyICE9IG1faW5kZXhGb3JSZWdpc3Rlci5lbmQo
KSk7CisgICAgcmV0dXJuIGl0ZXItPnZhbHVlOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwor
I2VuZGlmIC8vIEVOQUJMRShKSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
UmVnaXN0ZXJTYXZlTWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9SZWdpc3RlclNhdmVNYXAuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvUmVnaXN0ZXJTYXZlTWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1OSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFJl
Z2lzdGVyU2F2ZU1hcF9oCisjZGVmaW5lIFJlZ2lzdGVyU2F2ZU1hcF9oCisKKyNpZiBFTkFCTEUo
SklUKQorCisjaW5jbHVkZSAiR1BSSW5mby5oIgorI2luY2x1ZGUgIlJlZy5oIgorI2luY2x1ZGUg
IlJlZ2lzdGVyU2V0LmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKworbmFtZXNwYWNlIEpT
QyB7CisKK2NsYXNzIFJlZ2lzdGVyU2F2ZU1hcCB7CitwdWJsaWM6CisgICAgUmVnaXN0ZXJTYXZl
TWFwKFJlZ2lzdGVyU2V0IHJlZ2lzdGVycyk7CisKKyAgICB1bnNpZ25lZCBzaXplKCkgeyByZXR1
cm4gbV9udW1iZXJPZlJlZ2lzdGVyczsgfQorICAgIGJvb2wgaGFzKFJlZyByZWcpIHsgcmV0dXJu
IG1faW5kZXhGb3JSZWdpc3Rlci5jb250YWlucyhyZWcuaW5kZXgoKSk7IH0KKyAgICB1bnNpZ25l
ZCBtYXhPZmZzZXQoKSB7IHJldHVybiBzaXplKCkgKiBjcHVSZWdpc3RlclNpemU7IH0KKyAgICB1
bnNpZ25lZCBnZXRJbmRleEZvcihSZWcpIGNvbnN0OworICAgIHVuc2lnbmVkIGdldE9mZnNldEZv
cihSZWcgcmVnKSBjb25zdCB7IHJldHVybiBnZXRJbmRleEZvcihyZWcpICogY3B1UmVnaXN0ZXJT
aXplOyB9Citwcml2YXRlOgorICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjcHVSZWdpc3RlclNp
emUgPSBzaXplb2YoaW50cHRyX3QpOworCisgICAgdW5zaWduZWQgbV9udW1iZXJPZlJlZ2lzdGVy
czsKKyAgICBIYXNoTWFwPHVuc2lnbmVkLCB1bnNpZ25lZCwgV1RGOjpJbnRIYXNoPHVuc2lnbmVk
PiwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1bnNpZ25lZD4gPiBtX2luZGV4
Rm9yUmVnaXN0ZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJM
RShKSVQpCisKKyNlbmRpZiAvLyBSZWdpc3RlclNhdmVNYXBfaAorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyU2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyU2V0LmNwcAkocmV2aXNpb24gMTg3NDc4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlclNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEyMiw2ICsxMjIsMTExIEBAIFJlZ2lzdGVyU2V0IFJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZlUmVn
aXMKICAgICByZXR1cm4gcmVzdWx0OwogfQogCitSZWdpc3RlclNldCBSZWdpc3RlclNldDo6YWxs
Vk1DYWxsZWVTYXZlUmVnaXN0ZXJzKCkKK3sKKyAgICBSZWdpc3RlclNldCByZXN1bHQ7CisjaWYg
Q1BVKFg4NikKKyNlbGlmIENQVShYODZfNjQpCisgICAgcmVzdWx0LnNldChHUFJJbmZvOjpyZWdD
UzApOworICAgIHJlc3VsdC5zZXQoR1BSSW5mbzo6cmVnQ1MxKTsKKyAgICByZXN1bHQuc2V0KEdQ
UkluZm86OnJlZ0NTMik7CisjaWYgIU9TKFdJTkRPV1MpCisgICAgQVNTRVJUKEdQUkluZm86OnJl
Z0NTMyA9PSBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOworICAgIEFTU0VSVChHUFJJ
bmZvOjpyZWdDUzQgPT0gR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsKKyAgICByZXN1bHQuc2V0
KEdQUkluZm86OnJlZ0NTMyk7CisgICAgcmVzdWx0LnNldChHUFJJbmZvOjpyZWdDUzQpOworI2Vs
c2UKKyAgICByZXN1bHQuc2V0KEdQUkluZm86OnJlZ0NTMyk7CisgICAgcmVzdWx0LnNldChHUFJJ
bmZvOjpyZWdDUzQpOworICAgIEFTU0VSVChHUFJJbmZvOjpyZWdDUzUgPT0gR1BSSW5mbzo6dGFn
VHlwZU51bWJlclJlZ2lzdGVyKTsKKyAgICBBU1NFUlQoR1BSSW5mbzo6cmVnQ1M2ID09IEdQUklu
Zm86OnRhZ01hc2tSZWdpc3Rlcik7CisgICAgcmVzdWx0LnNldChHUFJJbmZvOjpyZWdDUzUpOwor
ICAgIHJlc3VsdC5zZXQoR1BSSW5mbzo6cmVnQ1M2KTsKKyNlbmRpZgorI2VsaWYgQ1BVKEFSTV9U
SFVNQjIpCisjZWxpZiBDUFUoQVJNX1RSQURJVElPTkFMKQorI2VsaWYgQ1BVKEFSTTY0KQorICAg
IHJlc3VsdC5zZXQoQVJNNjRSZWdpc3RlcnM6OngyNik7CisgICAgQVNTRVJUKEdQUkluZm86OnJl
Z0NTMCA9PSBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOworICAgIEFTU0VSVChHUFJJ
bmZvOjpyZWdDUzEgPT0gR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsKKyAgICByZXN1bHQuc2V0
KEdQUkluZm86OnJlZ0NTMCk7CisgICAgcmVzdWx0LnNldChHUFJJbmZvOjpyZWdDUzEpOworI2Vs
aWYgQ1BVKE1JUFMpCisjZWxpZiBDUFUoU0g0KQorI2Vsc2UKKyAgICBVTlJFQUNIQUJMRV9GT1Jf
UExBVEZPUk0oKTsKKyNlbmRpZgorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1JlZ2lzdGVyU2V0
IFJlZ2lzdGVyU2V0OjpiYXNlbGluZUNhbGxlZVNhdmVSZWdpc3RlcnMoKQoreworICAgIFJlZ2lz
dGVyU2V0IHJlc3VsdDsKKyNpZiBDUFUoWDg2KQorI2VsaWYgQ1BVKFg4Nl82NCkKKyAgICByZXN1
bHQuc2V0KEdQUkluZm86OnJlZ0NTMCk7CisjaWYgIU9TKFdJTkRPV1MpCisgICAgQVNTRVJUKEdQ
UkluZm86OnJlZ0NTMyA9PSBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOworICAgIEFT
U0VSVChHUFJJbmZvOjpyZWdDUzQgPT0gR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsKKyAgICBy
ZXN1bHQuc2V0KEdQUkluZm86OnJlZ0NTMyk7CisgICAgcmVzdWx0LnNldChHUFJJbmZvOjpyZWdD
UzQpOworI2Vsc2UKKyAgICBBU1NFUlQoR1BSSW5mbzo6cmVnQ1M1ID09IEdQUkluZm86OnRhZ1R5
cGVOdW1iZXJSZWdpc3Rlcik7CisgICAgQVNTRVJUKEdQUkluZm86OnJlZ0NTNiA9PSBHUFJJbmZv
Ojp0YWdNYXNrUmVnaXN0ZXIpOworICAgIHJlc3VsdC5zZXQoR1BSSW5mbzo6cmVnQ1M1KTsKKyAg
ICByZXN1bHQuc2V0KEdQUkluZm86OnJlZ0NTNik7CisjZW5kaWYKKyNlbGlmIENQVShBUk1fVEhV
TUIyKQorI2VsaWYgQ1BVKEFSTV9UUkFESVRJT05BTCkKKyNlbGlmIENQVShBUk02NCkKKyAgICBB
U1NFUlQoR1BSSW5mbzo6cmVnQ1MwID09IEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7
CisgICAgQVNTRVJUKEdQUkluZm86OnJlZ0NTMSA9PSBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIp
OworICAgIHJlc3VsdC5zZXQoR1BSSW5mbzo6cmVnQ1MwKTsKKyAgICByZXN1bHQuc2V0KEdQUklu
Zm86OnJlZ0NTMSk7CisjZWxpZiBDUFUoTUlQUykKKyNlbGlmIENQVShTSDQpCisjZWxzZQorICAg
IFVOUkVBQ0hBQkxFX0ZPUl9QTEFURk9STSgpOworI2VuZGlmCisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKworUmVnaXN0ZXJTZXQgUmVnaXN0ZXJTZXQ6OmRmZ0NhbGxlZVNhdmVSZWdpc3RlcnMoKQor
eworICAgIFJlZ2lzdGVyU2V0IHJlc3VsdDsKKyNpZiBDUFUoWDg2KQorI2VsaWYgQ1BVKFg4Nl82
NCkKKyAgICByZXN1bHQuc2V0KEdQUkluZm86OnJlZ0NTMCk7CisgICAgcmVzdWx0LnNldChHUFJJ
bmZvOjpyZWdDUzEpOworICAgIHJlc3VsdC5zZXQoR1BSSW5mbzo6cmVnQ1MyKTsKKyNpZiAhT1Mo
V0lORE9XUykKKyAgICBBU1NFUlQoR1BSSW5mbzo6cmVnQ1MzID09IEdQUkluZm86OnRhZ1R5cGVO
dW1iZXJSZWdpc3Rlcik7CisgICAgQVNTRVJUKEdQUkluZm86OnJlZ0NTNCA9PSBHUFJJbmZvOjp0
YWdNYXNrUmVnaXN0ZXIpOworICAgIHJlc3VsdC5zZXQoR1BSSW5mbzo6cmVnQ1MzKTsKKyAgICBy
ZXN1bHQuc2V0KEdQUkluZm86OnJlZ0NTNCk7CisjZWxzZQorICAgIHJlc3VsdC5zZXQoR1BSSW5m
bzo6cmVnQ1MzKTsKKyAgICByZXN1bHQuc2V0KEdQUkluZm86OnJlZ0NTNCk7CisgICAgQVNTRVJU
KEdQUkluZm86OnJlZ0NTNSA9PSBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOworICAg
IEFTU0VSVChHUFJJbmZvOjpyZWdDUzYgPT0gR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsKKyAg
ICByZXN1bHQuc2V0KEdQUkluZm86OnJlZ0NTNSk7CisgICAgcmVzdWx0LnNldChHUFJJbmZvOjpy
ZWdDUzYpOworI2VuZGlmCisjZWxpZiBDUFUoQVJNX1RIVU1CMikKKyNlbGlmIENQVShBUk1fVFJB
RElUSU9OQUwpCisjZWxpZiBDUFUoQVJNNjQpCisgICAgQVNTRVJUKEdQUkluZm86OnJlZ0NTMCA9
PSBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOworICAgIEFTU0VSVChHUFJJbmZvOjpy
ZWdDUzEgPT0gR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsKKyAgICByZXN1bHQuc2V0KEdQUklu
Zm86OnJlZ0NTMCk7CisgICAgcmVzdWx0LnNldChHUFJJbmZvOjpyZWdDUzEpOworI2VsaWYgQ1BV
KE1JUFMpCisjZWxpZiBDUFUoU0g0KQorI2Vsc2UKKyAgICBVTlJFQUNIQUJMRV9GT1JfUExBVEZP
Uk0oKTsKKyNlbmRpZgorICAgIHJldHVybiByZXN1bHQ7Cit9CisKIFJlZ2lzdGVyU2V0IFJlZ2lz
dGVyU2V0OjphbGxHUFJzKCkKIHsKICAgICBSZWdpc3RlclNldCByZXN1bHQ7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyU2V0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlclNldC5oCShyZXZpc2lvbiAxODc0NzgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyU2V0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTUwLDYgKzUwLDkgQEAgcHVibGljOgogICAgIHN0YXRpYyBSZWdpc3RlclNldCBydW50aW1lUmVn
aXN0ZXJzKCk7CiAgICAgc3RhdGljIFJlZ2lzdGVyU2V0IHNwZWNpYWxSZWdpc3RlcnMoKTsgLy8g
VGhlIHVuaW9uIG9mIHN0YWNrLCByZXNlcnZlZCBoYXJkd2FyZSwgYW5kIHJ1bnRpbWUgcmVnaXN0
ZXJzLgogICAgIHN0YXRpYyBSZWdpc3RlclNldCBjYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CisgICAg
c3RhdGljIFJlZ2lzdGVyU2V0IGFsbFZNQ2FsbGVlU2F2ZVJlZ2lzdGVycygpOyAvLyBUaGUgdW5p
b24gb2YgZWdpc3RlcnMgc2F2ZWQgYW5kIHVzZWQgYnkgYW55IFZNLgorICAgIHN0YXRpYyBSZWdp
c3RlclNldCBiYXNlbGluZUNhbGxlZVNhdmVSZWdpc3RlcnMoKTsgLy8gUmVnaXN0ZXJzIHNhdmVk
IGFuZCB1c2VkIGJ5IHRoZSBiYXNlbGluZSBKSVQuCisgICAgc3RhdGljIFJlZ2lzdGVyU2V0IGRm
Z0NhbGxlZVNhdmVSZWdpc3RlcnMoKTsgLy8gUmVnaXN0ZXJzIHNhdmVkIGFuZCB1c2VkIGJ5IHRo
ZSBERkcgSklULgogICAgIHN0YXRpYyBSZWdpc3RlclNldCBhbGxHUFJzKCk7CiAgICAgc3RhdGlj
IFJlZ2lzdGVyU2V0IGFsbEZQUnMoKTsKICAgICBzdGF0aWMgUmVnaXN0ZXJTZXQgYWxsUmVnaXN0
ZXJzKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnREYXRhLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnREYXRhLmNwcAko
cmV2aXNpb24gMTg3NDc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RGF0
YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcu
aCIKICNpbmNsdWRlICJMTEludERhdGEuaCIKICNpbmNsdWRlICJCeXRlY29kZUNvbnZlbnRpb25z
LmgiCisjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiQ29kZVR5cGUuaCIKICNpbmNs
dWRlICJJbnN0cnVjdGlvbi5oIgogI2luY2x1ZGUgIkpTU2NvcGUuaCIKQEAgLTEzMSw2ICsxMzIs
MTUgQEAgdm9pZCBEYXRhOjpwZXJmb3JtQXNzZXJ0aW9ucyhWTSYgdm0pCiAjZWxpZiBDUFUoWDg2
XzY0KSAmJiBPUyhXSU5ET1dTKQogICAgIEFTU0VSVChtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRo
Q2FsbCA9PSA2NCk7CiAjZW5kaWYKKworI2lmICFFTkFCTEUoSklUKSB8fCBVU0UoSlNWQUxVRTMy
XzY0KQorICAgIEFTU0VSVCghQ29kZUJsb2NrOjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNwYWNl
QXNWaXJ0dWFsUmVnaXN0ZXJzKCkpOworI2VsaWYgKENQVShYODZfNjQpICYmICFPUyhXSU5ET1dT
KSkgIHx8IENQVShBUk02NCkKKyAgICBBU1NFUlQoQ29kZUJsb2NrOjpsbGludEJhc2VsaW5lQ2Fs
bGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCkgPT0gMyk7CisjZWxpZiAoQ1BVKFg4Nl82
NCkgJiYgT1MoV0lORE9XUykpCisgICAgQVNTRVJUKENvZGVCbG9jazo6bGxpbnRCYXNlbGluZUNh
bGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpID09IDUpOworI2VuZGlmCisgICAgCiAg
ICAgQVNTRVJUKFN0cmluZ1R5cGUgPT0gNik7CiAgICAgQVNTRVJUKE9iamVjdFR5cGUgPT0gMTgp
OwogICAgIEFTU0VSVChGaW5hbE9iamVjdFR5cGUgPT0gMTkpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHJl
dmlzaW9uIDE4NzQ3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbElu
dGVycHJldGVyNjQuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC00OTMsMTkgKzQ5Myw2IEBAIG1hY3Jv
IGZ1bmN0aW9uQXJpdHlDaGVjayhkb25lTGFiZWwsIHNsb3cKICAgICBqbXAgX2xsaW50X3Rocm93
X2Zyb21fc2xvd19wYXRoX3RyYW1wb2xpbmUKIAogLm5vRXJyb3I6Ci0gICAgIyByMSBwb2ludHMg
dG8gQXJpdHlDaGVja0RhdGEuCi0gICAgbG9hZHAgQ29tbW9uU2xvd1BhdGhzOjpBcml0eUNoZWNr
RGF0YTo6dGh1bmtUb0NhbGxbcjFdLCB0MwotICAgIGJ0cHogdDMsIC5wcm9jZWVkSW5saW5lCi0g
ICAgCi0gICAgbG9hZHAgQ29tbW9uU2xvd1BhdGhzOjpBcml0eUNoZWNrRGF0YTo6cGFkZGVkU3Rh
Y2tTcGFjZVtyMV0sIGEwCi0gICAgY2FsbCB0MwotICAgIGlmIEFTU0VSVF9FTkFCTEVECi0gICAg
ICAgIGxvYWRwIFJldHVyblBDW2Nmcl0sIHQwCi0gICAgICAgIGxvYWRwIFt0MF0sIHQwCi0gICAg
ZW5kCi0gICAgam1wIC5jb250aW51ZQotCi0ucHJvY2VlZElubGluZToKICAgICBsb2FkaSBDb21t
b25TbG93UGF0aHM6OkFyaXR5Q2hlY2tEYXRhOjpwYWRkZWRTdGFja1NwYWNlW3IxXSwgdDEKICAg
ICBidGl6IHQxLCAuY29udGludWUKIApAQCAtNTEzLDggKzUwMCw5IEBAIG1hY3JvIGZ1bmN0aW9u
QXJpdHlDaGVjayhkb25lTGFiZWwsIHNsb3cKICAgICBsc2hpZnRwIDEsIHQxCiAgICAgbmVncSB0
MQogICAgIG1vdmUgY2ZyLCB0MworICAgIHN1YnAgQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVn
aXN0ZXJzICogOCwgdDMKICAgICBsb2FkaSBQYXlsb2FkT2Zmc2V0ICsgQXJndW1lbnRDb3VudFtj
ZnJdLCB0MgotICAgIGFkZGkgQ2FsbEZyYW1lSGVhZGVyU2xvdHMsIHQyCisgICAgYWRkaSBDYWxs
RnJhbWVIZWFkZXJTbG90cyArIENhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycywgdDIK
IC5jb3B5TG9vcDoKICAgICBsb2FkcSBbdDNdLCB0MAogICAgIHN0b3JlcSB0MCwgW3QzLCB0MSwg
OF0KQEAgLTU1NywxMiArNTQ1LDE1IEBAIF9sbGludF9vcF9lbnRlcjoKICAgICBjaGVja1N0YWNr
UG9pbnRlckFsaWdubWVudCh0MiwgMHhkZWFkMDBlMSkKICAgICBsb2FkcCBDb2RlQmxvY2tbY2Zy
XSwgdDIgICAgICAgICAgICAgICAgLy8gdDI8Q29kZUJsb2NrPiA9IGNmci5Db2RlQmxvY2sKICAg
ICBsb2FkaSBDb2RlQmxvY2s6Om1fbnVtVmFyc1t0Ml0sIHQyICAgICAgLy8gdDI8c2l6ZV90PiA9
IHQyPENvZGVCbG9jaz4ubV9udW1WYXJzCisgICAgc3VicSBDYWxsZWVTYXZlU3BhY2VBc1ZpcnR1
YWxSZWdpc3RlcnMsIHQyCisgICAgbW92ZSBjZnIsIHQxCisgICAgc3VicSBDYWxsZWVTYXZlU3Bh
Y2VBc1ZpcnR1YWxSZWdpc3RlcnMgKiA4LCB0MQogICAgIGJ0aXogdDIsIC5vcEVudGVyRG9uZQog
ICAgIG1vdmUgVmFsdWVVbmRlZmluZWQsIHQwCiAgICAgbmVnaSB0MgogICAgIHN4aTJxIHQyLCB0
MgogLm9wRW50ZXJMb29wOgotICAgIHN0b3JlcSB0MCwgW2NmciwgdDIsIDhdCisgICAgc3RvcmVx
IHQwLCBbdDEsIHQyLCA4XQogICAgIGFkZHEgMSwgdDIKICAgICBidHFueiB0MiwgLm9wRW50ZXJM
b29wCiAub3BFbnRlckRvbmU6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93
TGV2ZWxJbnRlcnByZXRlci5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCShyZXZpc2lvbiAxODc0NzgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20JKHdvcmtpbmcg
Y29weSkKQEAgLTIyMCw2ICsyMjAsMTQgQEAgZWxzaWYgWDg2XzY0X1dJTgogICAgIGNvbnN0IG1h
eEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsID0gNjQKIGVuZAogCitpZiBYODZfNjQgb3IgQVJN
NjQKKyAgICBjb25zdCBDYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMgPSAzCitlbHNp
ZiBYODZfNjRfV0lOCisgICAgY29uc3QgQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJz
ID0gNQorZWxzZQorICAgIGNvbnN0IENhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycyA9
IDAKK2VuZAorCiAjIFdhdGNocG9pbnQgc3RhdGVzCiBjb25zdCBDbGVhcldhdGNocG9pbnQgPSAw
CiBjb25zdCBJc1dhdGNoZWQgPSAxCkBAIC01MjMsNiArNTMxLDQyIEBAIG1hY3JvIHJlc3RvcmVD
YWxsZXJQQ0FuZENGUigpCiAgICAgZW5kCiBlbmQKIAorbWFjcm8gcHJlc2VydmVDYWxsZWVTYXZl
c1VzZWRCeUxMSW50KCkKKyAgICBpZiBDX0xPT1AKKyAgICBlbHNpZiBBUk0gb3IgQVJNdjdfVFJB
RElUSU9OQUwKKyAgICBlbHNpZiBBUk12NworICAgIGVsc2lmIEFSTTY0CisgICAgICAgIGVtaXQg
InN0cCB4MjcsIHgyOCwgW2ZwLCAjLTE2XSIKKyAgICAgICAgZW1pdCAic3RwIHh6ciwgeDI2LCBb
ZnAsICMtMzJdIgorICAgIGVsc2lmIE1JUFMKKyAgICBlbHNpZiBTSDQKKyAgICBlbHNpZiBYODYK
KyAgICBlbHNpZiBYODZfV0lOCisgICAgZWxzaWYgWDg2XzY0IG9yIFg4Nl82NF9XSU4KKyAgICAg
ICAgc3RvcmVwIGNzcjIsIC04W2Nmcl0KKyAgICAgICAgc3RvcmVwIGNzcjEsIC0xNltjZnJdCisg
ICAgICAgIHN0b3JlcCBjc3IwLCAtMjRbY2ZyXQorICAgIGVuZAorZW5kCisKK21hY3JvIHJlc3Rv
cmVDYWxsZWVTYXZlc1VzZWRCeUxMSW50KCkKKyAgICBpZiBDX0xPT1AKKyAgICBlbHNpZiBBUk0g
b3IgQVJNdjdfVFJBRElUSU9OQUwKKyAgICBlbHNpZiBBUk12NworICAgIGVsc2lmIEFSTTY0Cisg
ICAgICAgIGVtaXQgImxkcCB4enIsIHgyNiwgW2ZwLCAjLTMyXSIKKyAgICAgICAgZW1pdCAibGRw
IHgyNywgeDI4LCBbZnAsICMtMTZdIgorICAgIGVsc2lmIE1JUFMKKyAgICBlbHNpZiBTSDQKKyAg
ICBlbHNpZiBYODYKKyAgICBlbHNpZiBYODZfV0lOCisgICAgZWxzaWYgWDg2XzY0IG9yIFg4Nl82
NF9XSU4KKyAgICAgICAgbG9hZHAgLTI0W2Nmcl0sIGNzcjAKKyAgICAgICAgbG9hZHAgLTE2W2Nm
cl0sIGNzcjEKKyAgICAgICAgbG9hZHAgLThbY2ZyXSwgY3NyMgorICAgIGVuZAorZW5kCisKIG1h
Y3JvIHByZXNlcnZlUmV0dXJuQWRkcmVzc0FmdGVyQ2FsbChkZXN0aW5hdGlvblJlZ2lzdGVyKQog
ICAgIGlmIENfTE9PUCBvciBBUk0gb3IgQVJNdjcgb3IgQVJNdjdfVFJBRElUSU9OQUwgb3IgQVJN
NjQgb3IgTUlQUyBvciBTSDQKICAgICAgICAgIyBJbiBDX0xPT1AgY2FzZSwgd2UncmUgb25seSBw
cmVzZXJ2aW5nIHRoZSBieXRlY29kZSB2UEMuCkBAIC03NjYsNiArODEwLDEzIEBAIG1hY3JvIHBy
b2xvZ3VlKGNvZGVCbG9ja0dldHRlciwgY29kZUJsb2MKIAogICAgIGNvZGVCbG9ja1NldHRlcih0
MSkKIAorICAgIHByZXNlcnZlQ2FsbGVlU2F2ZXNVc2VkQnlMTEludCgpCisKKyAgICBpZiBKU1ZB
TFVFNjQKKyAgICAgICAgbW92ZSBUYWdUeXBlTnVtYmVyLCB0YWdUeXBlTnVtYmVyCisgICAgICAg
IGFkZHAgVGFnQml0VHlwZU90aGVyLCB0YWdUeXBlTnVtYmVyLCB0YWdNYXNrCisgICAgZW5kCisK
ICAgICAjIFNldCB1cCB0aGUgUEMuCiAgICAgaWYgSlNWQUxVRTY0CiAgICAgICAgIGxvYWRwIENv
ZGVCbG9jazo6bV9pbnN0cnVjdGlvbnNbdDFdLCBQQgpAQCAtODUxLDYgKzkwMiw3IEBAIG1hY3Jv
IGFsbG9jYXRlSlNPYmplY3QoYWxsb2NhdG9yLCBzdHJ1Y3QKIGVuZAogCiBtYWNybyBkb1JldHVy
bigpCisgICAgcmVzdG9yZUNhbGxlZVNhdmVzVXNlZEJ5TExJbnQoKQogICAgIHJlc3RvcmVDYWxs
ZXJQQ0FuZENGUigpCiAgICAgcmV0CiBlbmQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1ZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9WTS5jcHAJKHJldmlzaW9uIDE4NzQ3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1ZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzUsNiArNzUsNyBAQAogI2luY2x1ZGUgIlBy
b3BlcnR5TWFwSGFzaFRhYmxlLmgiCiAjaW5jbHVkZSAiUmVnRXhwQ2FjaGUuaCIKICNpbmNsdWRl
ICJSZWdFeHBPYmplY3QuaCIKKyNpbmNsdWRlICJSZWdpc3RlclNhdmVNYXAuaCIKICNpbmNsdWRl
ICJSdW50aW1lVHlwZS5oIgogI2luY2x1ZGUgIlNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmgi
CiAjaW5jbHVkZSAiU291cmNlUHJvdmlkZXJDYWNoZS5oIgpAQCAtMjQ1LDYgKzI0Niw3IEBAIFZN
OjpWTShWTVR5cGUgdm1UeXBlLCBIZWFwVHlwZSBoZWFwVHlwZSkKIAogI2lmIEVOQUJMRShKSVQp
CiAgICAgaml0U3R1YnMgPSBzdGQ6Om1ha2VfdW5pcXVlPEpJVFRodW5rcz4oKTsKKyAgICBhbGxD
YWxsZWVTYXZlUmVnaXN0ZXJzTWFwID0gc3RkOjptYWtlX3VuaXF1ZTxSZWdpc3RlclNhdmVNYXA+
KFJlZ2lzdGVyU2V0OjphbGxWTUNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7CiAjZW5kaWYKICAgICBh
cml0eUNoZWNrRGF0YSA9IHN0ZDo6bWFrZV91bmlxdWU8Q29tbW9uU2xvd1BhdGhzOjpBcml0eUNo
ZWNrRGF0YT4oKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCShyZXZpc2lv
biAxODc0NzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zMyw2ICszMyw5IEBACiAjaW5jbHVkZSAiRGF0ZUluc3RhbmNlQ2FjaGUuaCIK
ICNpbmNsdWRlICJFeGVjdXRhYmxlQWxsb2NhdG9yLmgiCiAjaW5jbHVkZSAiRnVuY3Rpb25IYXNF
eGVjdXRlZENhY2hlLmgiCisjaWYgRU5BQkxFKEpJVCkKKyNpbmNsdWRlICJHUFJJbmZvLmgiCisj
ZW5kaWYKICNpbmNsdWRlICJIZWFwLmgiCiAjaW5jbHVkZSAiSW50cmluc2ljLmgiCiAjaW5jbHVk
ZSAiSklUVGh1bmtzLmgiCkBAIC04OSw2ICs5Miw3IEBAIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJh
Y3RvcjsKIGNsYXNzIExlZ2FjeVByb2ZpbGVyOwogY2xhc3MgTmF0aXZlRXhlY3V0YWJsZTsKIGNs
YXNzIFJlZ0V4cENhY2hlOworY2xhc3MgUmVnaXN0ZXJTYXZlTWFwOwogY2xhc3MgU2NyaXB0RXhl
Y3V0YWJsZTsKIGNsYXNzIFNvdXJjZVByb3ZpZGVyOwogY2xhc3MgU291cmNlUHJvdmlkZXJDYWNo
ZTsKQEAgLTMzMSwxMiArMzM1LDIzIEBAIHB1YmxpYzoKICAgICBzdGQ6OnVuaXF1ZV9wdHI8S2V5
d29yZHM+IGtleXdvcmRzOwogICAgIEludGVycHJldGVyKiBpbnRlcnByZXRlcjsKICNpZiBFTkFC
TEUoSklUKQorICAgIGludHB0cl90IGNhbGxlZVNhdmVSZWdpc3RlcnNCdWZmZXJbR1BSSW5mbzo6
bnVtYmVyQ2FsbGVlU2F2ZVJlZ2lzdGVyc107CisKKyAgICBzdGF0aWMgcHRyZGlmZl90IGNhbGxl
ZVNhdmVSZWdpc3RlcnNCdWZmZXJPZmZzZXQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE9CSkVD
VF9PRkZTRVRPRihWTSwgY2FsbGVlU2F2ZVJlZ2lzdGVyc0J1ZmZlcik7CisgICAgfQorCiAgICAg
c3RkOjp1bmlxdWVfcHRyPEpJVFRodW5rcz4gaml0U3R1YnM7CiAgICAgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmIGdldENUSVN0dWIoVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yKQogICAgIHsKICAgICAg
ICAgcmV0dXJuIGppdFN0dWJzLT5jdGlTdHViKHRoaXMsIGdlbmVyYXRvcik7CiAgICAgfQogICAg
IE5hdGl2ZUV4ZWN1dGFibGUqIGdldEhvc3RGdW5jdGlvbihOYXRpdmVGdW5jdGlvbiwgSW50cmlu
c2ljKTsKKyAgICAKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVnaXN0ZXJTYXZlTWFwPiBhbGxDYWxs
ZWVTYXZlUmVnaXN0ZXJzTWFwOworICAgIAorICAgIFJlZ2lzdGVyU2F2ZU1hcCogZ2V0QWxsQ2Fs
bGVlU2F2ZVJlZ2lzdGVyc01hcCgpIHsgcmV0dXJuIGFsbENhbGxlZVNhdmVSZWdpc3RlcnNNYXAu
Z2V0KCk7IH0KIAogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiAgICAgc3RkOjp1bmlxdWVfcHRyPENv
bW1vblNsb3dQYXRoczo6QXJpdHlDaGVja0RhdGE+IGFyaXR5Q2hlY2tEYXRhOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>