<?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>226375</bug_id>
          
          <creation_ts>2021-05-28 08:41:51 -0700</creation_ts>
          <short_desc>Put the Baseline JIT prologue and op_loop_hint code in JIT thunks.</short_desc>
          <delta_ts>2021-06-19 01:26:09 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>REOPENED</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Lam">mark.lam</reporter>
          <assigned_to name="Mark Lam">mark.lam</assigned_to>
          <cc>ews-watchlist</cc>
    
    <cc>keith_miller</cc>
    
    <cc>msaboff</cc>
    
    <cc>rmorisset</cc>
    
    <cc>saam</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1764763</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-05-28 08:41:51 -0700</bug_when>
    <thetext>And also optimize op_enter a bit more.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1764766</commentid>
    <comment_count>1</comment_count>
      <attachid>430011</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-05-28 08:49:28 -0700</bug_when>
    <thetext>Created attachment 430011
wip.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1764777</commentid>
    <comment_count>2</comment_count>
      <attachid>430015</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-05-28 09:09:10 -0700</bug_when>
    <thetext>Created attachment 430015
wip.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1764814</commentid>
    <comment_count>3</comment_count>
      <attachid>430023</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-05-28 10:11:42 -0700</bug_when>
    <thetext>Created attachment 430023
work in progress.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1765155</commentid>
    <comment_count>4</comment_count>
      <attachid>430119</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-05-29 17:39:15 -0700</bug_when>
    <thetext>Created attachment 430119
work in progress.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1765174</commentid>
    <comment_count>5</comment_count>
      <attachid>430127</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-05-29 20:31:00 -0700</bug_when>
    <thetext>Created attachment 430127
work in progress.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1765201</commentid>
    <comment_count>6</comment_count>
      <attachid>430133</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-05-30 01:28:48 -0700</bug_when>
    <thetext>Created attachment 430133
work in progress.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1766615</commentid>
    <comment_count>7</comment_count>
      <attachid>430522</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-06-03 17:58:03 -0700</bug_when>
    <thetext>Created attachment 430522
proposed patch.

Let&apos;s test this on the EWS first.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1766781</commentid>
    <comment_count>8</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-06-04 08:42:18 -0700</bug_when>
    <thetext>&lt;rdar://problem/78870591&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1766964</commentid>
    <comment_count>9</comment_count>
      <attachid>430623</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-06-04 15:41:31 -0700</bug_when>
    <thetext>Created attachment 430623
proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1767001</commentid>
    <comment_count>10</comment_count>
      <attachid>430632</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-06-04 17:09:22 -0700</bug_when>
    <thetext>Created attachment 430632
proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1767232</commentid>
    <comment_count>11</comment_count>
      <attachid>430691</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-06-06 11:41:43 -0700</bug_when>
    <thetext>Created attachment 430691
proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1767233</commentid>
    <comment_count>12</comment_count>
      <attachid>430692</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-06-06 11:45:49 -0700</bug_when>
    <thetext>Created attachment 430692
proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1767307</commentid>
    <comment_count>13</comment_count>
      <attachid>430692</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2021-06-06 23:04:38 -0700</bug_when>
    <thetext>Comment on attachment 430692
proposed patch.

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

&gt; Source/JavaScriptCore/assembler/MacroAssemblerARM64.h:2238
&gt; +    void negate64(RegisterID dest)

Any reason not to do sub64(ARM64Registers::zr, dest, dest)?

&gt; Source/JavaScriptCore/assembler/MacroAssemblerARMv7.h:1809
&gt; +            // we&apos;ll need to reload it with the high bits of the address afterwards.

I don&apos;t see where you do this reloading?

&gt; Source/JavaScriptCore/assembler/MacroAssemblerX86_64.h:921
&gt; +    void negate64(RegisterID dest)

There seems to be an opcode exactly for this: https://www.aldeid.com/wiki/X86-assembly/Instructions/neg

&gt; Source/JavaScriptCore/jit/JIT.cpp:894
&gt; +        static constexpr ThunkGenerator generators[] = {

Isn&apos;t it already defined a few dozen lines above? How do they differ?
More general the entire block that follows appear duplicated, and I don&apos;t understand why.

&gt; Source/JavaScriptCore/jit/JIT.cpp:966
&gt; +    // We&apos;ll be imminently returing with a retab in the normal path, which will do validation.

returing -&gt; returning ?
retab -&gt; retag ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1767312</commentid>
    <comment_count>14</comment_count>
      <attachid>430692</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-06-06 23:19:16 -0700</bug_when>
    <thetext>Comment on attachment 430692
proposed patch.

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

&gt;&gt; Source/JavaScriptCore/assembler/MacroAssemblerARM64.h:2238
&gt;&gt; +    void negate64(RegisterID dest)
&gt; 
&gt; Any reason not to do sub64(ARM64Registers::zr, dest, dest)?

No good reason.  It&apos;s only because I forgot about ARM64Registers::zr.  Will fix.

&gt;&gt; Source/JavaScriptCore/assembler/MacroAssemblerARMv7.h:1809
&gt;&gt; +            // we&apos;ll need to reload it with the high bits of the address afterwards.
&gt; 
&gt; I don&apos;t see where you do this reloading?

Stale comment copied from `Jump branchAdd32(ResultCondition cond, TrustedImm32 imm, AbsoluteAddress dest)`.  Does not apply here because we are free to use addressTempRegister in this function.  I&apos;ll remove the comment.

&gt;&gt; Source/JavaScriptCore/assembler/MacroAssemblerX86_64.h:921
&gt;&gt; +    void negate64(RegisterID dest)
&gt; 
&gt; There seems to be an opcode exactly for this: https://www.aldeid.com/wiki/X86-assembly/Instructions/neg

k, thanks.  I&apos;ll look into it.

&gt;&gt; Source/JavaScriptCore/jit/JIT.cpp:894
&gt;&gt; +        static constexpr ThunkGenerator generators[] = {
&gt; 
&gt; Isn&apos;t it already defined a few dozen lines above? How do they differ?
&gt; More general the entire block that follows appear duplicated, and I don&apos;t understand why.

The table above is for the normal prologue thunks.  This table is for the arity fixup prologue thunks.

&gt;&gt; Source/JavaScriptCore/jit/JIT.cpp:966
&gt;&gt; +    // We&apos;ll be imminently returing with a retab in the normal path, which will do validation.
&gt; 
&gt; returing -&gt; returning ?
&gt; retab -&gt; retag ?

Will fix &quot;returing&quot;. &quot;retab&quot; is not a typo.  It&apos;s the ARM64E instruction for &quot;return with Authentication using the B key&quot;.  The ARM64E MacroAssembler automatically emits retab in place of ret when you see the `ret()` call below.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1767314</commentid>
    <comment_count>15</comment_count>
      <attachid>430692</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-06-06 23:26:18 -0700</bug_when>
    <thetext>Comment on attachment 430692
proposed patch.

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

&gt;&gt;&gt; Source/JavaScriptCore/assembler/MacroAssemblerARM64.h:2238
&gt;&gt;&gt; +    void negate64(RegisterID dest)
&gt;&gt; 
&gt;&gt; Any reason not to do sub64(ARM64Registers::zr, dest, dest)?
&gt; 
&gt; No good reason.  It&apos;s only because I forgot about ARM64Registers::zr.  Will fix.

Turns out, our MacroAssembler already has the neg64() emitter.  I just didn&apos;t think to search for neg64 instead of negate64.  Will remove these redundant negate64 emitters.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1767319</commentid>
    <comment_count>16</comment_count>
      <attachid>430714</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-06-06 23:32:05 -0700</bug_when>
    <thetext>Created attachment 430714
proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1767442</commentid>
    <comment_count>17</comment_count>
      <attachid>430746</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-06-07 08:03:13 -0700</bug_when>
    <thetext>Created attachment 430746
proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1767457</commentid>
    <comment_count>18</comment_count>
      <attachid>430746</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2021-06-07 08:43:35 -0700</bug_when>
    <thetext>Comment on attachment 430746
proposed patch.

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

r=me with some nits.

&gt; Source/JavaScriptCore/ChangeLog:45
&gt; +        LinkBuffer size results:

Are these number from a specific workload?

&gt; Source/JavaScriptCore/assembler/MacroAssemblerMIPS.h:2313
&gt; +    Jump branchAdd32(ResultCondition cond, TrustedImm32 imm, ImplicitAddress destAddress)

I don&apos;t know anything about MIPS so I&apos;m just gonna assume this is correct if tests pass.

&gt; Source/JavaScriptCore/jit/JIT.cpp:799
&gt; +            unsigned startArgument = m_codeBlock-&gt;isConstructor() ? 1 : 0;

Nit, I think you don&apos;t need the ternary here. True implicitly converts to unsigned 1.

&gt; Source/JavaScriptCore/jit/JIT.cpp:834
&gt; +    unsigned generatorSelector = doesProfiling &lt;&lt; 2 | isConstructor &lt;&lt; 1 | hasHugeFrame &lt;&lt; 0;

Nit: Maybe this should be an inline function next to the macro for future code changes?

&gt; Source/JavaScriptCore/jit/JIT.cpp:898
&gt; +        static constexpr ThunkGenerator generators[] = {
&gt; +#define USE_PROLOGUE_GENERATOR(doesProfiling, isConstructor, hasHugeFrame, name, arityFixupName) arityFixupName,
&gt; +            FOR_EACH_PROLOGUE_GENERATOR(USE_PROLOGUE_GENERATOR)
&gt; +#undef USE_PROLOGUE_GENERATOR
&gt; +        };

How does this not conflict with the generators definition on line 825? O.o

&gt; Source/JavaScriptCore/jit/JIT.cpp:943
&gt; +    store64(codeBlockGPR, addressFor(CallFrameSlot::codeBlock));

Nit: I think this should be storePtr.

&gt; Source/JavaScriptCore/jit/JIT.cpp:966
&gt; +    // We&apos;ll be imminently returning with a retab in the normal path, which will do validation.

Nit: retab =&gt; retag.

&gt; Source/JavaScriptCore/jit/JIT.cpp:1067
&gt; +#endif

Maybe add an else with a #error &quot;unsupported architecture&quot; for each of these?

&gt; Source/JavaScriptCore/jit/JIT.cpp:1069
&gt; +    store64(codeBlockGPR, addressFor(CallFrameSlot::codeBlock));

Ditto on storePtr.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1767459</commentid>
    <comment_count>19</comment_count>
      <attachid>430746</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2021-06-07 08:44:42 -0700</bug_when>
    <thetext>Comment on attachment 430746
proposed patch.

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

&gt; Source/JavaScriptCore/jit/JIT.cpp:696
&gt; +    v( doesProfiling, !isConstructor, !hasHugeFrame, prologueGenerator4, arityFixup_prologueGenerator4) \
&gt; +    v( doesProfiling, !isConstructor,  hasHugeFrame, prologueGenerator5, arityFixup_prologueGenerator5) \
&gt; +    v( doesProfiling,  isConstructor, !hasHugeFrame, prologueGenerator6, arityFixup_prologueGenerator6) \
&gt; +    v( doesProfiling,  isConstructor,  hasHugeFrame, prologueGenerator7, arityFixup_prologueGenerator7)

Nit: Style comment seems somewhat relevant here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1767480</commentid>
    <comment_count>20</comment_count>
      <attachid>430746</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-06-07 09:37:20 -0700</bug_when>
    <thetext>Comment on attachment 430746
proposed patch.

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

&gt;&gt; Source/JavaScriptCore/ChangeLog:45
&gt;&gt; +        LinkBuffer size results:
&gt; 
&gt; Are these number from a specific workload?

This is from a single run of Speedometer2.  I will update the ChangeLog to say so.

&gt;&gt; Source/JavaScriptCore/assembler/MacroAssemblerMIPS.h:2313
&gt;&gt; +    Jump branchAdd32(ResultCondition cond, TrustedImm32 imm, ImplicitAddress destAddress)
&gt; 
&gt; I don&apos;t know anything about MIPS so I&apos;m just gonna assume this is correct if tests pass.

Ditto.  FWIW, this implementation is based on `Jump branchAdd32(ResultCondition cond, TrustedImm32 imm, AbsoluteAddress destAddress)` but tweaked based on the implementation of `void load32(ImplicitAddress address, RegisterID dest)` and `void store32(RegisterID src, ImplicitAddress address)` plus a little googled knowledge: (1) MIPS (32-bit) instructions are always 4 bytes in size, and (2) the integers in the 2nd argument of conditional branches are the number of instructions between the branch instruction and the target.

&gt;&gt; Source/JavaScriptCore/jit/JIT.cpp:696
&gt;&gt; +    v( doesProfiling,  isConstructor,  hasHugeFrame, prologueGenerator7, arityFixup_prologueGenerator7)
&gt; 
&gt; Nit: Style comment seems somewhat relevant here.

I deliberately kept the columns aligned (in violation of the style) because this makes it easier to verify (both for me and future readers of the code) that I got the permutations correct.  I&apos;ll leave it as is.

&gt;&gt; Source/JavaScriptCore/jit/JIT.cpp:799
&gt;&gt; +            unsigned startArgument = m_codeBlock-&gt;isConstructor() ? 1 : 0;
&gt; 
&gt; Nit, I think you don&apos;t need the ternary here. True implicitly converts to unsigned 1.

That&apos;s true, but I think that this makes it clear that we want to start from argument 1 if isConstructor and argument 0 if otherwise, and not require the cognitive leap to realize that true == 1 (small as the cognitive leap may be).  I&apos;m going to leave this as is.

&gt;&gt; Source/JavaScriptCore/jit/JIT.cpp:834
&gt;&gt; +    unsigned generatorSelector = doesProfiling &lt;&lt; 2 | isConstructor &lt;&lt; 1 | hasHugeFrame &lt;&lt; 0;
&gt; 
&gt; Nit: Maybe this should be an inline function next to the macro for future code changes?

Sounds good.  Will do.

&gt;&gt; Source/JavaScriptCore/jit/JIT.cpp:898
&gt;&gt; +        };
&gt; 
&gt; How does this not conflict with the generators definition on line 825? O.o

Nope.  This one is inside an if statement block i.e. nested scope.

&gt;&gt; Source/JavaScriptCore/jit/JIT.cpp:943
&gt;&gt; +    store64(codeBlockGPR, addressFor(CallFrameSlot::codeBlock));
&gt; 
&gt; Nit: I think this should be storePtr.

Will fix.

&gt;&gt; Source/JavaScriptCore/jit/JIT.cpp:966
&gt;&gt; +    // We&apos;ll be imminently returning with a retab in the normal path, which will do validation.
&gt; 
&gt; Nit: retab =&gt; retag.

Nope. retab is ARM64E&apos;s &quot;return with Authentication using the B key&quot;.   This is the 2nd time someone got confused about this (Robin asked first).  I will update the comment to clarify.  Here&apos;s the updated comment:

    // We&apos;ll be imminently returning with a `retab` (ARM64E&apos;s return with authentication
    // using the B key) in the normal path (see MacroAssemblerARM64E&apos;s implementation of
    // ret()), which will do validation. So, extra validation here is redundant and unnecessary.

&gt;&gt; Source/JavaScriptCore/jit/JIT.cpp:1067
&gt;&gt; +#endif
&gt; 
&gt; Maybe add an else with a #error &quot;unsupported architecture&quot; for each of these?

If we do this, there will be many many places where we&apos;ll have to add this, and make the code unsightly.  As a compromise, I&apos;ll add the following at the top of JIT.cpp to alert the port developer:

#if ENABLE(EXTRA_CTI_THUNKS)
#if CPU(ARM64) || (CPU(X86_64) &amp;&amp; !OS(WINDOWS))
// These are supported ports.
#else
// This is a courtesy reminder (and warning) that the implementation of EXTRA_CTI_THUNKS can
// use up to 6 argument registers and/or 6/7 temp registers, and make use of ARM64 like
// features. Hence, it may not work for many other ports without significant work. If you
// plan on adding EXTRA_CTI_THUNKS support for your port, please remember to search the
// EXTRA_CTI_THUNKS code for CPU(ARM64) and CPU(X86_64) conditional code, and add support
// for your port there as well.
#error &quot;unsupported architecture&quot;
#endif
#endif // ENABLE(EXTRA_CTI_THUNKS)

&gt;&gt; Source/JavaScriptCore/jit/JIT.cpp:1069
&gt;&gt; +    store64(codeBlockGPR, addressFor(CallFrameSlot::codeBlock));
&gt; 
&gt; Ditto on storePtr.

Will fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1767481</commentid>
    <comment_count>21</comment_count>
      <attachid>430756</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-06-07 09:44:00 -0700</bug_when>
    <thetext>Created attachment 430756
patch for landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1767588</commentid>
    <comment_count>22</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-06-07 15:52:31 -0700</bug_when>
    <thetext>Thanks for the reviews.  Landed in r278576: &lt;http://trac.webkit.org/r278576&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1771084</commentid>
    <comment_count>23</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-06-19 01:26:09 -0700</bug_when>
    <thetext>Reverted patch in r279049: &lt;http://trac.webkit.org/r279049&gt; dues to suspected Speedometer2 regression.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>430011</attachid>
            <date>2021-05-28 08:49:28 -0700</date>
            <delta_ts>2021-05-28 09:09:10 -0700</delta_ts>
            <desc>wip.</desc>
            <filename>wip-loop-hint+prologue+enter.patch</filename>
            <type>text/plain</type>
            <size>46958</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNy
b0Fzc2VtYmxlckNvZGVSZWYuaAkocmV2aXNpb24gMjc4MDI5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaAkod29ya2luZyBjb3B5KQpA
QCAtMjM3LDcgKzIzNyw4IEBAIHB1YmxpYzoKICAgICBleHBsaWNpdCBSZXR1cm5BZGRyZXNzUHRy
KGNvbnN0IHZvaWQqIHJldHVybkFkZHJlc3MpCiAgICAgewogI2lmIENQVShBUk02NEUpCi0gICAg
ICAgIGFzc2VydElzTm90VGFnZ2VkKHJldHVybkFkZHJlc3MpOworLy8gICAgICAgIGFzc2VydElz
Tm90VGFnZ2VkKHJldHVybkFkZHJlc3MpOworICAgICAgICByZXR1cm5BZGRyZXNzID0gcmVtb3Zl
Q29kZVB0clRhZyhyZXR1cm5BZGRyZXNzKTsgLy8gbWxhbSBURVNUCiAgICAgICAgIHJldHVybkFk
ZHJlc3MgPSByZXRhZ0NvZGVQdHI8Tm9QdHJUYWcsIFJldHVybkFkZHJlc3NQdHJUYWc+KHJldHVy
bkFkZHJlc3MpOwogI2VuZGlmCiAgICAgICAgIG1fdmFsdWUgPSByZXR1cm5BZGRyZXNzOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24g
Mjc4MDI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xNzAsNiArMTcwLDcgQEAgcHVibGljOgogCiAgICAgdW5zaWduZWQq
IGFkZHJlc3NPZk51bVBhcmFtZXRlcnMoKSB7IHJldHVybiAmbV9udW1QYXJhbWV0ZXJzOyB9CiAg
ICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZk51bVBhcmFtZXRlcnMoKSB7IHJldHVybiBPQkpF
Q1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX251bVBhcmFtZXRlcnMpOyB9CisgICAgc3RhdGljIHB0
cmRpZmZfdCBvZmZzZXRPZk51bVZhcnMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJs
b2NrLCBtX251bVZhcnMpOyB9CiAKICAgICBDb2RlQmxvY2sqIGFsdGVybmF0aXZlKCkgY29uc3Qg
eyByZXR1cm4gc3RhdGljX2Nhc3Q8Q29kZUJsb2NrKj4obV9hbHRlcm5hdGl2ZS5nZXQoKSk7IH0K
ICAgICB2b2lkIHNldEFsdGVybmF0aXZlKFZNJiwgQ29kZUJsb2NrKik7CkBAIC00ODYsNiArNDg3
LDggQEAgcHVibGljOgogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAorICAgIHN0YXRp
YyBwdHJkaWZmX3Qgb2Zmc2V0T2ZBcmd1bWVudFZhbHVlUHJvZmlsZXMoKSB7IHJldHVybiBPQkpF
Q1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2FyZ3VtZW50VmFsdWVQcm9maWxlcyk7IH0KKwogICAg
IFZhbHVlUHJvZmlsZSYgdmFsdWVQcm9maWxlRm9yQnl0ZWNvZGVJbmRleChCeXRlY29kZUluZGV4
KTsKICAgICBTcGVjdWxhdGVkVHlwZSB2YWx1ZVByb2ZpbGVQcmVkaWN0aW9uRm9yQnl0ZWNvZGVJ
bmRleChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBCeXRlY29kZUluZGV4KTsKIApAQCAtODE5
LDcgKzgyMiw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBib29sIHdhc0NvbXBpbGVkV2l0aERl
YnVnZ2luZ09wY29kZXMoKSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+d2FzQ29tcGls
ZWRXaXRoRGVidWdnaW5nT3Bjb2RlcygpOyB9Ci0gICAgCisKICAgICAvLyBUaGlzIGlzIGludGVu
dGlvbmFsbHkgcHVibGljOyBpdCdzIHRoZSByZXNwb25zaWJpbGl0eSBvZiBhbnlvbmUgZG9pbmcg
YW55CiAgICAgLy8gb2YgdGhlIGZvbGxvd2luZyB0byBob2xkIHRoZSBsb2NrOgogICAgIC8vCkBA
IC05MDYsNiArOTA5LDggQEAgcHVibGljOgogCiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRP
Zk1ldGFkYXRhVGFibGUoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX21l
dGFkYXRhKTsgfQogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZJbnN0cnVjdGlvbnNSYXdQ
b2ludGVyKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9pbnN0cnVjdGlv
bnNSYXdQb2ludGVyKTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZTaG91bGRBbHdh
eXNCZUlubGluZWQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX3Nob3Vs
ZEFsd2F5c0JlSW5saW5lZCk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mVW5saW5r
ZWRDb2RlKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV91bmxpbmtlZENv
ZGUpOyB9CiAKICAgICBib29sIGxvb3BIaW50c0FyZUVsaWdpYmxlRm9yRnV6emluZ0Vhcmx5UmV0
dXJuKCkKICAgICB7CkBAIC0xMDE1LDggKzEwMjAsOCBAQCBwcml2YXRlOgogICAgIC8vIFRoaXMg
aXMgcmVsZXZhbnQgdG8gbm9uLURGRyBjb2RlIGJsb2NrcyB0aGF0IHNlcnZlIGFzIHRoZSBwcm9m
aWxlZCBjb2RlIGJsb2NrCiAgICAgLy8gZm9yIERGRyBjb2RlIGJsb2Nrcy4KICAgICBDb21wcmVz
c2VkTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVIb2xkZXIgbV9sYXp5T3BlcmFuZFZhbHVlUHJvZmls
ZXM7Ci0jZW5kaWYKICAgICBGaXhlZFZlY3RvcjxWYWx1ZVByb2ZpbGU+IG1fYXJndW1lbnRWYWx1
ZVByb2ZpbGVzOworI2VuZGlmCiAKICAgICAvLyBDb25zdGFudCBQb29sCiAgICAgQ09NUElMRV9B
U1NFUlQoc2l6ZW9mKFJlZ2lzdGVyKSA9PSBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSwg
UmVnaXN0ZXJfbXVzdF9iZV9zYW1lX3NpemVfYXNfV3JpdGVCYXJyaWVyX1Vua25vd24pOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCShyZXZpc2lv
biAyNzgwMjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMjYsNiArMzI2LDExIEBAIHB1YmxpYzoKICAgICAgICAgQVNT
RVJUKGNvZGVCbG9jayk7CiAKICAgICAgICAgY29uc3QgUmVnaXN0ZXJBdE9mZnNldExpc3QqIGNh
bGxlZVNhdmVzID0gY29kZUJsb2NrLT5jYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CisgICAgICAgIGVt
aXRTYXZlQ2FsbGVlU2F2ZXNGb3IoY2FsbGVlU2F2ZXMpOworICAgIH0KKworICAgIHZvaWQgZW1p
dFNhdmVDYWxsZWVTYXZlc0Zvcihjb25zdCBSZWdpc3RlckF0T2Zmc2V0TGlzdCogY2FsbGVlU2F2
ZXMpCisgICAgewogICAgICAgICBSZWdpc3RlclNldCBkb250U2F2ZVJlZ2lzdGVycyA9IFJlZ2lz
dGVyU2V0KFJlZ2lzdGVyU2V0OjpzdGFja1JlZ2lzdGVycygpLCBSZWdpc3RlclNldDo6YWxsRlBS
cygpKTsKICAgICAgICAgdW5zaWduZWQgcmVnaXN0ZXJDb3VudCA9IGNhbGxlZVNhdmVzLT5zaXpl
KCk7CiAKQEAgLTM5OSw2ICs0MDQsMTEgQEAgcHVibGljOgogICAgICAgICBlbWl0U2F2ZUNhbGxl
ZVNhdmVzRm9yKGNvZGVCbG9jaygpKTsKICAgICB9CiAKKyAgICB2b2lkIGVtaXRTYXZlQ2FsbGVl
U2F2ZXNGb3JCYXNlbGluZUpJVCgpCisgICAgeworICAgICAgICBlbWl0U2F2ZUNhbGxlZVNhdmVz
Rm9yKCZSZWdpc3RlckF0T2Zmc2V0TGlzdDo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVSZWdpc3Rl
cnMoKSk7CisgICAgfQorCiAgICAgdm9pZCBlbWl0U2F2ZVRoZW5NYXRlcmlhbGl6ZVRhZ1JlZ2lz
dGVycygpCiAgICAgewogI2lmIFVTRShKU1ZBTFVFNjQpCkBAIC00MTcsNiArNDI3LDExIEBAIHB1
YmxpYzoKICAgICAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlc0Zvcihjb2RlQmxvY2soKSk7CiAg
ICAgfQogCisgICAgdm9pZCBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzRm9yQmFzZWxpbmVKSVQoKQor
ICAgIHsKKyAgICAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlc0ZvcigmUmVnaXN0ZXJBdE9mZnNl
dExpc3Q6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOworICAgIH0KKwogICAg
IHZvaWQgZW1pdFJlc3RvcmVTYXZlZFRhZ1JlZ2lzdGVycygpCiAgICAgewogI2lmIFVTRShKU1ZB
TFVFNjQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCShyZXZpc2lvbiAyNzgwMjkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTgyLDcgKzgyLDcgQEAgSklUOjp+SklUKCkKIHsKIH0KIAotI2lmIEVOQUJMRShERkdfSklUKQor
I2lmIEVOQUJMRShERkdfSklUKSAmJiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiB2b2lkIEpJ
VDo6ZW1pdEVudGVyT3B0aW1pemF0aW9uQ2hlY2soKQogewogICAgIGlmICghY2FuQmVPcHRpbWl6
ZWQoKSkKQEAgLTEwMCw3ICsxMDAsNyBAQCB2b2lkIEpJVDo6ZW1pdEVudGVyT3B0aW1pemF0aW9u
Q2hlY2soKQogICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEdQUkluZm86OmNhbGxGcmFtZVJl
Z2lzdGVyKTsKICAgICBza2lwT3B0aW1pemUubGluayh0aGlzKTsKIH0KLSNlbmRpZgorI2VuZGlm
IC8vIEVOQUJMRShERkdfSklUKSAmJiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpKAogCiB2b2lk
IEpJVDo6ZW1pdE5vdGlmeVdyaXRlKFdhdGNocG9pbnRTZXQqIHNldCkKIHsKQEAgLTU3NCw3ICs1
NzQsOSBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgICAgICBERUZJ
TkVfU0xPV0NBU0VfT1Aob3Bfam5lcSkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2pz
dHJpY3RlcSkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2puc3RyaWN0ZXEpCisjaWYg
IUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3Bf
bG9vcF9oaW50KQorI2VuZGlmCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9jaGVja190
cmFwcykKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX21vZCkKICAgICAgICAgREVGSU5F
X1NMT1dDQVNFX09QKG9wX211bCkKQEAgLTY2MCw2ICs2NjIsMjcgQEAgdm9pZCBKSVQ6OnByaXZh
dGVDb21waWxlU2xvd0Nhc2VzKCkKICNlbmRpZgogfQogCisjZGVmaW5lIEZPUl9FQUNIX05PTl9Q
Uk9GSUxJTkdfUFJPTE9HVUVfR0VORVJBVE9SKHYpIFwKKyAgICB2KCFkb2VzUHJvZmlsaW5nLCAh
aXNDb25zdHJ1Y3RvciwgIWhhc0h1Z2VGcmFtZSwgcHJvbG9ndWVHZW5lcmF0b3IwLCBhcml0eUZp
eHVwX3Byb2xvZ3VlR2VuZXJhdG9yMCkgXAorICAgIHYoIWRvZXNQcm9maWxpbmcsICFpc0NvbnN0
cnVjdG9yLCAgaGFzSHVnZUZyYW1lLCBwcm9sb2d1ZUdlbmVyYXRvcjEsIGFyaXR5Rml4dXBfcHJv
bG9ndWVHZW5lcmF0b3IxKSBcCisgICAgdighZG9lc1Byb2ZpbGluZywgIGlzQ29uc3RydWN0b3Is
ICFoYXNIdWdlRnJhbWUsIHByb2xvZ3VlR2VuZXJhdG9yMiwgYXJpdHlGaXh1cF9wcm9sb2d1ZUdl
bmVyYXRvcjIpIFwKKyAgICB2KCFkb2VzUHJvZmlsaW5nLCAgaXNDb25zdHJ1Y3RvciwgIGhhc0h1
Z2VGcmFtZSwgcHJvbG9ndWVHZW5lcmF0b3IzLCBhcml0eUZpeHVwX3Byb2xvZ3VlR2VuZXJhdG9y
MykKKworI2lmIEVOQUJMRShERkdfSklUKQorI2RlZmluZSBGT1JfRUFDSF9QUk9GSUxJTkdfUFJP
TE9HVUVfR0VORVJBVE9SKHYpIFwKKyAgICB2KCBkb2VzUHJvZmlsaW5nLCAhaXNDb25zdHJ1Y3Rv
ciwgIWhhc0h1Z2VGcmFtZSwgcHJvbG9ndWVHZW5lcmF0b3I0LCBhcml0eUZpeHVwX3Byb2xvZ3Vl
R2VuZXJhdG9yNCkgXAorICAgIHYoIGRvZXNQcm9maWxpbmcsICFpc0NvbnN0cnVjdG9yLCAgaGFz
SHVnZUZyYW1lLCBwcm9sb2d1ZUdlbmVyYXRvcjUsIGFyaXR5Rml4dXBfcHJvbG9ndWVHZW5lcmF0
b3I1KSBcCisgICAgdiggZG9lc1Byb2ZpbGluZywgIGlzQ29uc3RydWN0b3IsICFoYXNIdWdlRnJh
bWUsIHByb2xvZ3VlR2VuZXJhdG9yNiwgYXJpdHlGaXh1cF9wcm9sb2d1ZUdlbmVyYXRvcjYpIFwK
KyAgICB2KCBkb2VzUHJvZmlsaW5nLCAgaXNDb25zdHJ1Y3RvciwgIGhhc0h1Z2VGcmFtZSwgcHJv
bG9ndWVHZW5lcmF0b3I3LCBhcml0eUZpeHVwX3Byb2xvZ3VlR2VuZXJhdG9yNykKKworI2Vsc2Ug
Ly8gbm90IEVOQUJMRShERkdfSklUKQorI2RlZmluZSBGT1JfRUFDSF9QUk9GSUxJTkdfUFJPTE9H
VUVfR0VORVJBVE9SKHYpCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNkZWZpbmUgRk9S
X0VBQ0hfUFJPTE9HVUVfR0VORVJBVE9SKHYpIFwKKyAgICBGT1JfRUFDSF9OT05fUFJPRklMSU5H
X1BST0xPR1VFX0dFTkVSQVRPUih2KSBcCisgICAgRk9SX0VBQ0hfUFJPRklMSU5HX1BST0xPR1VF
X0dFTkVSQVRPUih2KQorCiB2b2lkIEpJVDo6Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemlu
ZyhKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCiB7CiAgICAgTW9ub3RvbmljVGltZSBiZWZv
cmUgeyB9OwpAQCAtNzI2LDYgKzc0OSw4IEBAIHZvaWQgSklUOjpjb21waWxlQW5kTGlua1dpdGhv
dXRGaW5hbGl6aW4KICAgICAgICAgbm9wKCk7CiAKICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZSgp
OworCisjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogICAgIGVtaXRQdXRUb0NhbGxGcmFt
ZUhlYWRlcihtX2NvZGVCbG9jaywgQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKTsKIAogICAgIExh
YmVsIGJlZ2luTGFiZWwodGhpcyk7CkBAIC03MzMsNiArNzU4LDcgQEAgdm9pZCBKSVQ6OmNvbXBp
bGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbgogICAgIGludCBmcmFtZVRvcE9mZnNldCA9IHN0YWNr
UG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpOwogICAgIHVu
c2lnbmVkIG1heEZyYW1lU2l6ZSA9IC1mcmFtZVRvcE9mZnNldDsKICAgICBhZGRQdHIoVHJ1c3Rl
ZEltbTMyKGZyYW1lVG9wT2Zmc2V0KSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1QxKTsKKwogICAg
IEp1bXBMaXN0IHN0YWNrT3ZlcmZsb3c7CiAgICAgaWYgKFVOTElLRUxZKG1heEZyYW1lU2l6ZSA+
IE9wdGlvbnM6OnJlc2VydmVkWm9uZVNpemUoKSkpCiAgICAgICAgIHN0YWNrT3ZlcmZsb3cuYXBw
ZW5kKGJyYW5jaFB0cihBYm92ZSwgcmVnVDEsIGNhbGxGcmFtZVJlZ2lzdGVyKSk7CkBAIC03NDcs
MTEgKzc3MywxMCBAQCB2b2lkIEpJVDo6Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluCiAg
ICAgaWYgKG1fY29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSkgewogICAgICAg
ICBBU1NFUlQoIW1fYnl0ZWNvZGVJbmRleCk7CiAgICAgICAgIGlmIChzaG91bGRFbWl0UHJvZmls
aW5nKCkpIHsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQgPSAwOyBhcmd1bWVu
dCA8IG1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCk7ICsrYXJndW1lbnQpIHsKLSAgICAgICAg
ICAgICAgICAvLyBJZiB0aGlzIGlzIGEgY29uc3RydWN0b3IsIHRoZW4gd2Ugd2FudCB0byBwdXQg
aW4gYSBkdW1teSBwcm9maWxpbmcgc2l0ZSAodG8KLSAgICAgICAgICAgICAgICAvLyBrZWVwIHRo
aW5ncyBjb25zaXN0ZW50KSBidXQgd2UgZG9uJ3QgYWN0dWFsbHkgd2FudCB0byByZWNvcmQgdGhl
IGR1bW15IHZhbHVlLgotICAgICAgICAgICAgICAgIGlmIChtX2NvZGVCbG9jay0+aXNDb25zdHJ1
Y3RvcigpICYmICFhcmd1bWVudCkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICAvLyBJZiB0aGlzIGlzIGEgY29uc3RydWN0b3IsIHRoZW4gd2Ugd2FudCB0byBwdXQg
aW4gYSBkdW1teSBwcm9maWxpbmcgc2l0ZSAodG8KKyAgICAgICAgICAgIC8vIGtlZXAgdGhpbmdz
IGNvbnNpc3RlbnQpIGJ1dCB3ZSBkb24ndCBhY3R1YWxseSB3YW50IHRvIHJlY29yZCB0aGUgZHVt
bXkgdmFsdWUuCisgICAgICAgICAgICB1bnNpZ25lZCBzdGFydEFyZ3VtZW50ID0gbV9jb2RlQmxv
Y2stPmlzQ29uc3RydWN0b3IoKSA/IDEgOiAwOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBh
cmd1bWVudCA9IHN0YXJ0QXJndW1lbnQ7IGFyZ3VtZW50IDwgbV9jb2RlQmxvY2stPm51bVBhcmFt
ZXRlcnMoKTsgKythcmd1bWVudCkgewogICAgICAgICAgICAgICAgIGludCBvZmZzZXQgPSBDYWxs
RnJhbWU6OmFyZ3VtZW50T2Zmc2V0SW5jbHVkaW5nVGhpcyhhcmd1bWVudCkgKiBzdGF0aWNfY2Fz
dDxpbnQ+KHNpemVvZihSZWdpc3RlcikpOwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgICAgICAg
ICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKQEAgLTc2
NSw3ICs3OTAsMzYgQEAgdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbgog
ICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQotICAgIAorI2Vsc2UgLy8gRU5BQkxFKEVY
VFJBX0NUSV9USFVOS1MpCisgICAgY29uc3RleHByIEdQUlJlZyBmcmFtZVRvcE9mZnNldEdQUiA9
IHJlZ1Q3OworICAgIGNvbnN0ZXhwciBHUFJSZWcgY29kZUJsb2NrR1BSID0gcmVnVDY7CisgICAg
QVNTRVJUKCFtX2J5dGVjb2RlSW5kZXgpOworCisgICAgaW50IGZyYW1lVG9wT2Zmc2V0ID0gc3Rh
Y2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3Rlcik7CisgICAg
dW5zaWduZWQgbWF4RnJhbWVTaXplID0gLWZyYW1lVG9wT2Zmc2V0OworCisgICAgYm9vbCBkb2Vz
UHJvZmlsaW5nID0gKG1fY29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSkgJiYg
c2hvdWxkRW1pdFByb2ZpbGluZygpOworICAgIGJvb2wgaXNDb25zdHJ1Y3RvciA9IG1fY29kZUJs
b2NrLT5pc0NvbnN0cnVjdG9yKCk7CisgICAgYm9vbCBoYXNIdWdlRnJhbWUgPSBtYXhGcmFtZVNp
emUgPiBPcHRpb25zOjpyZXNlcnZlZFpvbmVTaXplKCk7CisKKyAgICBzdGF0aWMgY29uc3RleHBy
IFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvcnNbXSA9IHsKKyNkZWZpbmUgVVNFX1BST0xPR1VFX0dF
TkVSQVRPUihkb2VzUHJvZmlsaW5nLCBpc0NvbnN0cnVjdG9yLCBoYXNIdWdlRnJhbWUsIG5hbWUs
IGFyaXR5Rml4dXBOYW1lKSBuYW1lLAorICAgICAgICBGT1JfRUFDSF9QUk9MT0dVRV9HRU5FUkFU
T1IoVVNFX1BST0xPR1VFX0dFTkVSQVRPUikKKyN1bmRlZiBVU0VfUFJPTE9HVUVfR0VORVJBVE9S
CisgICAgfTsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG51bWJlck9mR2VuZXJhdG9y
cyA9IHNpemVvZihnZW5lcmF0b3JzKSAvIHNpemVvZihnZW5lcmF0b3JzWzBdKTsKKworICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jayksIGNvZGVCbG9ja0dQUik7CisgICAgbW92ZShU
cnVzdGVkSW1tNjQoZnJhbWVUb3BPZmZzZXQpLCBmcmFtZVRvcE9mZnNldEdQUik7CisKKyAgICB1
bnNpZ25lZCBnZW5lcmF0b3JTZWxlY3RvciA9IGRvZXNQcm9maWxpbmcgPDwgMiB8IGlzQ29uc3Ry
dWN0b3IgPDwgMSB8IGhhc0h1Z2VGcmFtZSA8PCAwOworICAgIFJFTEVBU0VfQVNTRVJUKGdlbmVy
YXRvclNlbGVjdG9yIDwgbnVtYmVyT2ZHZW5lcmF0b3JzKTsKKyAgICBhdXRvIGdlbmVyYXRvciA9
IGdlbmVyYXRvcnNbZ2VuZXJhdG9yU2VsZWN0b3JdOworICAgIGVtaXROYWtlZE5lYXJDYWxsKHZt
KCkuZ2V0Q1RJU3R1YihnZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisKKyAg
ICBMYWJlbCBib2R5TGFiZWwodGhpcyk7CisjZW5kaWYgLy8gIUVOQUJMRShFWFRSQV9DVElfVEhV
TktTKQorCiAgICAgUkVMRUFTRV9BU1NFUlQoIUpJVENvZGU6OmlzSklUKG1fY29kZUJsb2NrLT5q
aXRUeXBlKCkpKTsKIAogICAgIHByaXZhdGVDb21waWxlTWFpblBhc3MoKTsKQEAgLTc3NiwxNiAr
ODMwLDE5IEBAIHZvaWQgSklUOjpjb21waWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW4KICAgICAg
ICAgbV9kaXNhc3NlbWJsZXItPnNldEVuZE9mU2xvd1BhdGgobGFiZWwoKSk7CiAgICAgbV9wY1Rv
Q29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShsYWJlbCgpLCBQQ1RvQ29kZU9yaWdpbk1h
cEJ1aWxkZXI6OmRlZmF1bHRDb2RlT3JpZ2luKCkpOwogCisjaWYgIUVOQUJMRShFWFRSQV9DVElf
VEhVTktTKQogICAgIHN0YWNrT3ZlcmZsb3cubGluayh0aGlzKTsKICAgICBtX2J5dGVjb2RlSW5k
ZXggPSBCeXRlY29kZUluZGV4KDApOwogICAgIGlmIChtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRo
Q2FsbCkKICAgICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtc3RhdGljX2Nhc3Q8aW50MzJfdD4o
bWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwog
ICAgIGNhbGxPcGVyYXRpb25XaXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlvbihvcGVyYXRp
b25UaHJvd1N0YWNrT3ZlcmZsb3dFcnJvciwgbV9jb2RlQmxvY2spOworI2VuZGlmCiAKICAgICAv
LyBJZiB0aGUgbnVtYmVyIG9mIHBhcmFtZXRlcnMgaXMgMSwgd2UgbmV2ZXIgcmVxdWlyZSBhcml0
eSBmaXh1cC4KICAgICBib29sIHJlcXVpcmVzQXJpdHlGaXh1cCA9IG1fY29kZUJsb2NrLT5tX251
bVBhcmFtZXRlcnMgIT0gMTsKICAgICBpZiAobV9jb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVu
Y3Rpb25Db2RlICYmIHJlcXVpcmVzQXJpdHlGaXh1cCkgewogICAgICAgICBtX2FyaXR5Q2hlY2sg
PSBsYWJlbCgpOworI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICAgICAgc3RvcmU4
KFRydXN0ZWRJbW0zMigwKSwgJm1fY29kZUJsb2NrLT5tX3Nob3VsZEFsd2F5c0JlSW5saW5lZCk7
CiAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKCk7CiAgICAgICAgIGVtaXRQdXRUb0NhbGxG
cmFtZUhlYWRlcihtX2NvZGVCbG9jaywgQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKTsKQEAgLTgw
NCwxNyArODYxLDQ0IEBAIHZvaWQgSklUOjpjb21waWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW4K
ICAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKICAg
ICAgICAgZW1pdE5ha2VkTmVhckNhbGwobV92bS0+Z2V0Q1RJU3R1Yihhcml0eUZpeHVwR2VuZXJh
dG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCisgICAgICAgIGp1bXAoYmVnaW5MYWJl
bCk7CisKKyNlbHNlIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQorICAgICAgICBlbWl0RnVu
Y3Rpb25Qcm9sb2d1ZSgpOworCisgICAgICAgIHN0YXRpY19hc3NlcnQoZnJhbWVUb3BPZmZzZXRH
UFIgPT0gcmVnVDcpOworICAgICAgICBzdGF0aWNfYXNzZXJ0KGNvZGVCbG9ja0dQUiA9PSByZWdU
Nik7CisgICAgICAgIEFTU0VSVCghbV9ieXRlY29kZUluZGV4KTsKKworICAgICAgICBzdGF0aWMg
Y29uc3RleHByIFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvcnNbXSA9IHsKKyNkZWZpbmUgVVNFX1BS
T0xPR1VFX0dFTkVSQVRPUihkb2VzUHJvZmlsaW5nLCBpc0NvbnN0cnVjdG9yLCBoYXNIdWdlRnJh
bWUsIG5hbWUsIGFyaXR5Rml4dXBOYW1lKSBhcml0eUZpeHVwTmFtZSwKKyAgICAgICAgICAgIEZP
Ul9FQUNIX1BST0xPR1VFX0dFTkVSQVRPUihVU0VfUFJPTE9HVUVfR0VORVJBVE9SKQorI3VuZGVm
IFVTRV9QUk9MT0dVRV9HRU5FUkFUT1IKKyAgICAgICAgfTsKKyAgICAgICAgc3RhdGljIGNvbnN0
ZXhwciB1bnNpZ25lZCBudW1iZXJPZkdlbmVyYXRvcnMgPSBzaXplb2YoZ2VuZXJhdG9ycykgLyBz
aXplb2YoZ2VuZXJhdG9yc1swXSk7CisKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrKSwgY29kZUJsb2NrR1BSKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoZnJhbWVU
b3BPZmZzZXQpLCBmcmFtZVRvcE9mZnNldEdQUik7CisKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQo
Z2VuZXJhdG9yU2VsZWN0b3IgPCBudW1iZXJPZkdlbmVyYXRvcnMpOworICAgICAgICBhdXRvIGdl
bmVyYXRvciA9IGdlbmVyYXRvcnNbZ2VuZXJhdG9yU2VsZWN0b3JdOworICAgICAgICBSRUxFQVNF
X0FTU0VSVChnZW5lcmF0b3IpOworICAgICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bSgpLmdldENU
SVN0dWIoZ2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOworCisgICAgICAgIGp1
bXAoYm9keUxhYmVsKTsKKyNlbmRpZiAvLyAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCisKICNp
ZiBBU1NFUlRfRU5BQkxFRAogICAgICAgICBtX2J5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4
KCk7IC8vIFJlc2V0IHRoaXMsIGluIG9yZGVyIHRvIGd1YXJkIGl0cyB1c2Ugd2l0aCBBU1NFUlRz
LgogI2VuZGlmCi0KLSAgICAgICAganVtcChiZWdpbkxhYmVsKTsKICAgICB9IGVsc2UKICAgICAg
ICAgbV9hcml0eUNoZWNrID0gZW50cnlMYWJlbDsgLy8gTmV2ZXIgcmVxdWlyZSBhcml0eSBmaXh1
cC4KIAogICAgIEFTU0VSVChtX2ptcFRhYmxlLmlzRW1wdHkoKSk7CiAgICAgCisjaWYgIUVOQUJM
RShFWFRSQV9DVElfVEhVTktTKQogICAgIHByaXZhdGVDb21waWxlRXhjZXB0aW9uSGFuZGxlcnMo
KTsKKyNlbmRpZgogICAgIAogICAgIGlmIChtX2Rpc2Fzc2VtYmxlcikKICAgICAgICAgbV9kaXNh
c3NlbWJsZXItPnNldEVuZE9mQ29kZShsYWJlbCgpKTsKQEAgLTgzOCw2ICs5MjIsMjIzIEBAIHZv
aWQgSklUOjpjb21waWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW4KICAgICBsaW5rKCk7CiB9CiAK
KyNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gSklUOjpwcm9sb2d1ZUdlbmVyYXRvcihWTSYgdm0sIGJvb2wgZG9lc1Byb2Zp
bGluZywgYm9vbCBpc0NvbnN0cnVjdG9yLCBib29sIGhhc0h1Z2VGcmFtZSwgY29uc3QgY2hhciog
dGh1bmtOYW1lKQoreworICAgIC8vIFRoaXMgZnVuY3Rpb24gZ2VuZXJhdGVzIHRoZSBCYXNlbGlu
ZSBKSVQncyBwcm9sb2d1ZSBjb2RlLiBJdCBpcyBub3QgdXNlYWJsZSBieSBvdGhlciB0aWVycy4K
KyAgICBjb25zdGV4cHIgR1BSUmVnIGZyYW1lVG9wT2Zmc2V0R1BSID0gcmVnVDc7IC8vIGluY29t
aW5nCisgICAgY29uc3RleHByIEdQUlJlZyBjb2RlQmxvY2tHUFIgPSByZWdUNjsgLy8gaW5jb21p
bmcuCisKKyAgICB0YWdSZXR1cm5BZGRyZXNzKCk7CisKKyAgICBzdG9yZTY0KGNvZGVCbG9ja0dQ
UiwgYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spKTsKKworICAgIGFkZFB0cihm
cmFtZVRvcE9mZnNldEdQUiwgY2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1QxKTsKKworICAgIEp1bXBM
aXN0IHN0YWNrT3ZlcmZsb3c7CisgICAgaWYgKGhhc0h1Z2VGcmFtZSkKKyAgICAgICAgc3RhY2tP
dmVyZmxvdy5hcHBlbmQoYnJhbmNoUHRyKEFib3ZlLCByZWdUMSwgY2FsbEZyYW1lUmVnaXN0ZXIp
KTsKKyAgICBzdGFja092ZXJmbG93LmFwcGVuZChicmFuY2hQdHIoQWJvdmUsIEFic29sdXRlQWRk
cmVzcyh2bS5hZGRyZXNzT2ZTb2Z0U3RhY2tMaW1pdCgpKSwgcmVnVDEpKTsKKworICAgIHVudGFn
UmV0dXJuQWRkcmVzcygpOworICAgIG1vdmUocmVnVDEsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsK
KyAgICB0YWdSZXR1cm5BZGRyZXNzKCk7CisgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQo
KTsKKworICAgIGVtaXRTYXZlQ2FsbGVlU2F2ZXNGb3JCYXNlbGluZUpJVCgpOworICAgIGVtaXRN
YXRlcmlhbGl6ZVRhZ0NoZWNrUmVnaXN0ZXJzKCk7CisKKyAgICBpZiAoZG9lc1Byb2ZpbGluZykg
eworICAgICAgICBjb25zdGV4cHIgR1BSUmVnIGFyZ3VtZW50VmFsdWVQcm9maWxlR1BSID0gcmVn
VDU7CisgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgbnVtUGFyYW1ldGVyc0dQUiA9IHJlZ1Q0Owor
ICAgICAgICBjb25zdGV4cHIgR1BSUmVnIGFyZ3VtZW50R1BSID0gcmVnVDM7CisKKyAgICAgICAg
bG9hZDMyKEFkZHJlc3MoY29kZUJsb2NrR1BSLCBDb2RlQmxvY2s6Om9mZnNldE9mTnVtUGFyYW1l
dGVycygpKSwgbnVtUGFyYW1ldGVyc0dQUik7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhjb2Rl
QmxvY2tHUFIsIENvZGVCbG9jazo6b2Zmc2V0T2ZBcmd1bWVudFZhbHVlUHJvZmlsZXMoKSksIGFy
Z3VtZW50VmFsdWVQcm9maWxlR1BSKTsKKyAgICAgICAgaWYgKGlzQ29uc3RydWN0b3IpCisgICAg
ICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHNpemVvZihWYWx1ZVByb2ZpbGUpKSwgYXJndW1l
bnRWYWx1ZVByb2ZpbGVHUFIpOworCisgICAgICAgIGNvbnN0ZXhwciBpbnQgdmlydHVhbFJlZ2lz
dGVyU2l6ZSA9IHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSk7CisgICAgICAgIGlu
dCBzdGFydEFyZ3VtZW50ID0gQ2FsbEZyYW1lU2xvdDo6dGhpc0FyZ3VtZW50ICsgKGlzQ29uc3Ry
dWN0b3IgPyAxIDogMCk7CisgICAgICAgIGludCBzdGFydEFyZ3VtZW50T2Zmc2V0ID0gc3RhcnRB
cmd1bWVudCAqIHZpcnR1YWxSZWdpc3RlclNpemU7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0
KHN0YXJ0QXJndW1lbnRPZmZzZXQpLCBhcmd1bWVudEdQUik7CisKKyAgICAgICAgY29uc3RleHBy
IGludCB2aXJ0dWFsUmVnaXN0ZXJTaXplU2hpZnQgPSAzOworICAgICAgICBzdGF0aWNfYXNzZXJ0
KCgxIDw8IHZpcnR1YWxSZWdpc3RlclNpemVTaGlmdCkgPT0gdmlydHVhbFJlZ2lzdGVyU2l6ZSk7
CisgICAgICAgIGFkZDMyKFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQ+KENhbGxGcmFtZVNs
b3Q6OnRoaXNBcmd1bWVudCkpLCBudW1QYXJhbWV0ZXJzR1BSKTsKKyAgICAgICAgbHNoaWZ0MzIo
VHJ1c3RlZEltbTMyKHZpcnR1YWxSZWdpc3RlclNpemVTaGlmdCksIG51bVBhcmFtZXRlcnNHUFIp
OworCisgICAgICAgIGFkZFB0cihjYWxsRnJhbWVSZWdpc3RlciwgYXJndW1lbnRHUFIpOworICAg
ICAgICBhZGRQdHIoY2FsbEZyYW1lUmVnaXN0ZXIsIG51bVBhcmFtZXRlcnNHUFIpOworCisgICAg
ICAgIExhYmVsIGxvb3BTdGFydCh0aGlzKTsKKyAgICAgICAgSnVtcCBkb25lID0gYnJhbmNoUHRy
KEFib3ZlT3JFcXVhbCwgYXJndW1lbnRHUFIsIG51bVBhcmFtZXRlcnNHUFIpOworICAgICAgICB7
CisgICAgICAgICAgICBsb2FkNjQoQWRkcmVzcyhhcmd1bWVudEdQUiksIHJlZ1QwKTsKKyAgICAg
ICAgICAgIHN0b3JlNjQocmVnVDAsIEFkZHJlc3MoYXJndW1lbnRWYWx1ZVByb2ZpbGVHUFIsIE9C
SkVDVF9PRkZTRVRPRihWYWx1ZVByb2ZpbGUsIG1fYnVja2V0cykpKTsKKworICAgICAgICAgICAg
Ly8gVGhlIGFyZ3VtZW50IFZhbHVlUHJvZmlsZXMgYXJlIHN0b3JlZCBpbiBhIEZpeGVkVmVjdG9y
LiBIZW5jZSwgdGhlCisgICAgICAgICAgICAvLyBhZGRyZXNzIG9mIHRoZSBuZXh0IHByb2ZpbGUg
Y2FuIGJlIHRyaXZpYWxseSBjb21wdXRlZCB3aXRoIGFuIGluY3JlbWVudC4KKyAgICAgICAgICAg
IGFkZFB0cihUcnVzdGVkSW1tMzIoc2l6ZW9mKFZhbHVlUHJvZmlsZSkpLCBhcmd1bWVudFZhbHVl
UHJvZmlsZUdQUik7CisgICAgICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHZpcnR1YWxSZWdp
c3RlclNpemUpLCBhcmd1bWVudEdQUik7CisgICAgICAgICAgICBqdW1wKCkubGlua1RvKGxvb3BT
dGFydCwgdGhpcyk7CisgICAgICAgIH0KKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgIH0K
KyAgICByZXQoKTsKKworICAgIHN0YWNrT3ZlcmZsb3cubGluayh0aGlzKTsKKworICAgIHVpbnQz
Ml90IGxvY2F0aW9uQml0cyA9IENhbGxTaXRlSW5kZXgoMCkuYml0cygpOworICAgIHN0b3JlMzIo
VHJ1c3RlZEltbTMyKGxvY2F0aW9uQml0cyksIHRhZ0ZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcykpOworCisgICAgaWYgKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1Bh
dGhDYWxsKQorICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC1zdGF0aWNfY2FzdDxpbnQzMl90
PihtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCkpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7
CisKKyAgICBzZXR1cEFyZ3VtZW50czxkZWNsdHlwZShvcGVyYXRpb25UaHJvd1N0YWNrT3ZlcmZs
b3dFcnJvcik+KGNvZGVCbG9ja0dQUik7CisgICAgcHJlcGFyZUNhbGxPcGVyYXRpb24odm0pOwor
ICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIG9wZXJhdGlvbkNhbGwgPSBjYWxsKE9wZXJhdGlvblB0
clRhZyk7CisgICAgSnVtcCBoYW5kbGVFeGNlcHRpb25KdW1wID0ganVtcCgpOworCisgICAgYXV0
byBoYW5kbGVyID0gdm0uZ2V0Q1RJU3R1YihoYW5kbGVFeGNlcHRpb25XaXRoQ2FsbEZyYW1lUm9s
bGJhY2tHZW5lcmF0b3IpOworCisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdGhpcywgR0xP
QkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpFeHRyYUNUSVRodW5rKTsKKyAgICBw
YXRjaEJ1ZmZlci5saW5rKG9wZXJhdGlvbkNhbGwsIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRh
Zz4ob3BlcmF0aW9uVGhyb3dTdGFja092ZXJmbG93RXJyb3IpKTsKKyAgICBwYXRjaEJ1ZmZlci5s
aW5rKGhhbmRsZUV4Y2VwdGlvbkp1bXAsIENvZGVMb2NhdGlvbkxhYmVsKGhhbmRsZXIucmV0YWdn
ZWRDb2RlPE5vUHRyVGFnPigpKSk7CisgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZm
ZXIsIEpJVFRodW5rUHRyVGFnLCB0aHVua05hbWUpOworfQorCitzdGF0aWMgY29uc3RleHByIGJv
b2wgZG9lc1Byb2ZpbGluZyA9IHRydWU7CitzdGF0aWMgY29uc3RleHByIGJvb2wgaXNDb25zdHJ1
Y3RvciA9IHRydWU7CitzdGF0aWMgY29uc3RleHByIGJvb2wgaGFzSHVnZUZyYW1lID0gdHJ1ZTsK
KworI2RlZmluZSBERUZJTkVfUFJPR0xPR1VFX0dFTkVSQVRPUihkb2VzUHJvZmlsaW5nLCBpc0Nv
bnN0cnVjdG9yLCBoYXNIdWdlRnJhbWUsIG5hbWUsIGFyaXR5Rml4dXBOYW1lKSBcCisgICAgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6Om5hbWUoVk0mIHZtKSBcCisg
ICAgeyBcCisgICAgICAgIEpJVCBqaXQodm0pOyBcCisgICAgICAgIHJldHVybiBqaXQucHJvbG9n
dWVHZW5lcmF0b3Iodm0sIGRvZXNQcm9maWxpbmcsIGlzQ29uc3RydWN0b3IsIGhhc0h1Z2VGcmFt
ZSwgIkJhc2VsaW5lOiAiICNuYW1lKTsgXAorICAgIH0KKworRk9SX0VBQ0hfUFJPTE9HVUVfR0VO
RVJBVE9SKERFRklORV9QUk9HTE9HVUVfR0VORVJBVE9SKQorI3VuZGVmIERFRklORV9QUk9HTE9H
VUVfR0VORVJBVE9SCisKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklU
Ojphcml0eUZpeHVwUHJvbG9ndWVHZW5lcmF0b3IoVk0mIHZtLCBib29sIGlzQ29uc3RydWN0b3Is
IFRodW5rR2VuZXJhdG9yIG5vcm1hbFByb2xvZ3VlR2VuZXJhdG9yLCBjb25zdCBjaGFyKiB0aHVu
a05hbWUpCit7CisgICAgLy8gVGhpcyBmdW5jdGlvbiBnZW5lcmF0ZXMgdGhlIEJhc2VsaW5lIEpJ
VCdzIHByb2xvZ3VlIGNvZGUuIEl0IGlzIG5vdCB1c2VhYmxlIGJ5IG90aGVyIHRpZXJzLgorICAg
IGNvbnN0ZXhwciBHUFJSZWcgZnJhbWVUb3BPZmZzZXRHUFIgPSByZWdUNzsgLy8gaW5jb21pbmcK
KyAgICBjb25zdGV4cHIgR1BSUmVnIGNvZGVCbG9ja0dQUiA9IHJlZ1Q2OyAvLyBpbmNvbWluZy4K
KyAgICBjb25zdGV4cHIgR1BSUmVnIG51bVBhcmFtZXRlcnNHUFIgPSByZWdUNTsKKworICAgIHRh
Z1JldHVybkFkZHJlc3MoKTsKKyNpZiBDUFUoWDg2XzY0KQorICAgIHB1c2goZnJhbWVUb3BPZmZz
ZXRHUFIpOworI2VsaWYgQ1BVKEFSTTY0KQorICAgIHB1c2hQYWlyKGZyYW1lVG9wT2Zmc2V0R1BS
LCBsaW5rUmVnaXN0ZXIpOworI2VuZGlmCisKKyAgICBzdG9yZTY0KGNvZGVCbG9ja0dQUiwgYWRk
cmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spKTsKKyAgICBzdG9yZTgoVHJ1c3RlZElt
bTMyKDApLCBBZGRyZXNzKGNvZGVCbG9ja0dQUiwgQ29kZUJsb2NrOjpvZmZzZXRPZlNob3VsZEFs
d2F5c0JlSW5saW5lZCgpKSk7CisKKyAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90
Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyksIHJlZ1QxKTsKKyAgICBsb2FkMzIoQWRkcmVz
cyhjb2RlQmxvY2tHUFIsIENvZGVCbG9jazo6b2Zmc2V0T2ZOdW1QYXJhbWV0ZXJzKCkpLCBudW1Q
YXJhbWV0ZXJzR1BSKTsKKyAgICBKdW1wIG5vRml4dXBOZWVkZWQgPSBicmFuY2gzMihBYm92ZU9y
RXF1YWwsIHJlZ1QxLCBudW1QYXJhbWV0ZXJzR1BSKTsKKworICAgIGlmIGNvbnN0ZXhwciAobWF4
RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpCisgICAgICAgIGFkZFB0cihUcnVzdGVkSW1tMzIo
LXN0YXRpY19jYXN0PGludDMyX3Q+KG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKSksIHN0
YWNrUG9pbnRlclJlZ2lzdGVyKTsKKworICAgIGxvYWRQdHIoQWRkcmVzcyhjb2RlQmxvY2tHUFIs
IENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIGFyZ3VtZW50R1BSMCk7CisKKyAg
ICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShvcGVyYXRpb25Db25zdHJ1Y3RB
cml0eUNoZWNrKSwgZGVjbHR5cGUob3BlcmF0aW9uQ2FsbEFyaXR5Q2hlY2spPjo6dmFsdWUpOwor
ICAgIHNldHVwQXJndW1lbnRzPGRlY2x0eXBlKG9wZXJhdGlvbkNhbGxBcml0eUNoZWNrKT4oYXJn
dW1lbnRHUFIwKTsKKyAgICBwcmVwYXJlQ2FsbE9wZXJhdGlvbih2bSk7CisKKyAgICBNYWNyb0Fz
c2VtYmxlcjo6Q2FsbCBhcml0eUNoZWNrQ2FsbCA9IGNhbGwoT3BlcmF0aW9uUHRyVGFnKTsKKyAg
ICBKdW1wIGhhbmRsZUV4Y2VwdGlvbkp1bXAgPSBlbWl0Tm9uUGF0Y2hhYmxlRXhjZXB0aW9uQ2hl
Y2sodm0pOworCisgICAgaWYgY29uc3RleHByIChtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2Fs
bCkKKyAgICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRo
Q2FsbCksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBKdW1wIG5lZWRGaXh1cCA9IGJyYW5j
aFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUik7CisgICAgbm9GaXh1cE5lZWRlZC5saW5r
KHRoaXMpOworCisgICAgLy8gVGhlIG5vcm1hbCBwcm9sb2d1ZSBleHBlY3RzIGluY29taW5nIGNv
ZGVCbG9ja0dQUiBhbmQgZnJhbWVUb3BPZmZzZXRHUFIuCisgICAgbG9hZDY0KGFkZHJlc3NGb3Io
Q2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgY29kZUJsb2NrR1BSKTsKKworI2lmIENQVShYODZf
NjQpCisgICAgcG9wKGZyYW1lVG9wT2Zmc2V0R1BSKTsKKyNlbGlmIENQVShBUk02NCkKKyAgICBw
b3BQYWlyKGZyYW1lVG9wT2Zmc2V0R1BSLCBsaW5rUmVnaXN0ZXIpOworI2VuZGlmCisgICAgdW50
YWdSZXR1cm5BZGRyZXNzKCk7CisKKyAgICBKdW1wTGlzdCBub3JtYWxQcm9sb2d1ZUp1bXA7Cisg
ICAgbm9ybWFsUHJvbG9ndWVKdW1wLmFwcGVuZChqdW1wKCkpOworCisgICAgbmVlZEZpeHVwLmxp
bmsodGhpcyk7CisKKyAgICAvLyBSZXN0b3JlIHRoZSBzdGFjayBmb3IgYXJpdHkgZml4dXAsIGFu
ZCBwcmVzZXJ2ZSB0aGUgcmV0dXJuIGFkZHJlc3MgYW5kIGZyYW1lVG9wT2Zmc2V0R1BSLgorCisg
ICAgLy8gYXJpdHlGaXh1cEdlbmVyYXRvciB3aWxsIGJlIHNoaWZ0aW5nIHRoZSBzdGFjay4gU28s
IHdlIGNhbid0IHVzZSB0aGUgc3RhY2sgdG8gcHJlc2VydmUKKyAgICAvLyBmcmFtZVRvcE9mZnNl
dEdQUi4gY29kZUJsb2NrR1BSIGlzIGFsZWFkeSBwcmVzZXJ2ZWQgaW4gdGhlIENhbGxGcmFtZSBo
ZWFkZXIuCisgICAgLy8gV2UgYWxzbyBjYW4ndCB1c2UgY2FsbGVlIHNhdmVkIHJlZ2lzdGVycyBi
ZWNhdXNlIHRoZXkgaGF2ZW4ndCBiZWVuIHNhdmVkIHlldC4KKyAgICAvLworICAgIC8vIGFyaXR5
Rml4dXBHZW5lcmF0b3IgaXMgY2FyZWZ1bGx5IGNyYWZ0ZWQgdG8gb25sdSB1c2UgYTAsIGExLCBh
MiwgdDMsIHQ0IGFuZCB0NS4KKyAgICAvLyBTbywgZnJhbWVUb3BPZmZzZXRHUFIgc2hvdWxkIGJl
IHByZXNlcnZlZCBpbiByZWdUNy4KKyAgICAvLyBPbiBBUk02NCwgd2UgY2FuIHByZXNlcnZlIGxy
IGluIHJlZ1Q2LgorICAgIC8vIE9uIHg4Nl82NCwgcmVnVDYgPT0gYXJndW1lbnRHUFIwLCBhbmQg
d2UncmUgb3V0IG9mIGF2YWlsYWJsZSB2b2xhdGlsZSByZWdpc3RlcnMuCisgICAgLy8gU28sIHdl
J2xsIGhhdmUgdG8gdXNlIGEgVk0gc2NyYXRjaEJ1ZmZlciB0byBwcmVzZXJ2ZSB0aGUgcmV0dXJu
IGFkZHJlc3MuCisKKyNpZiBDUFUoWDg2XzY0KQorICAgIENQVVJlZ2lzdGVyKiBzY3JhdGNoID0g
dm0uc2NyYXRjaEJ1ZmZlckZvclNpemUoc2l6ZW9mKENQVVJlZ2lzdGVyKSktPmRhdGFCdWZmZXIo
KTsKKyAgICBwb3AoZnJhbWVUb3BPZmZzZXRHUFIpOworICAgIHBvcChhcmd1bWVudEdQUjIpOyAv
LyByZXR1cm4gYWRkcmVzcy4KKyAgICBzdG9yZVB0cihhcmd1bWVudEdQUjIsIEFic29sdXRlQWRk
cmVzcyhzY3JhdGNoKSk7CisjZWxpZiBDUFUoQVJNNjQpCisgICAgcG9wUGFpcihmcmFtZVRvcE9m
ZnNldEdQUiwgbGlua1JlZ2lzdGVyKTsKKyAgICB1bnRhZ1JldHVybkFkZHJlc3MoKTsKKyAgICBt
b3ZlKGxpbmtSZWdpc3RlciwgcmVnVDYpOworICAgIGF1dG8gaW50ZXJtZWRpYXRlVGFnID0gcmFu
ZG9tKCk7CisgICAgbW92ZShUcnVzdGVkSW1tMzIoaW50ZXJtZWRpYXRlVGFnKSwgcmVnVDEpOwor
ICAgIHRhZ1B0cihyZWdUMSwgcmVnVDYpOworI2VuZGlmCisgICAgbW92ZShyZXR1cm5WYWx1ZUdQ
UiwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICBDYWxsIGFyaXR5Rml4dXBDYWxsID0gbmVh
ckNhbGwoKTsKKworI2lmIENQVShYODZfNjQpCisgICAgbG9hZFB0cihBYnNvbHV0ZUFkZHJlc3Mo
c2NyYXRjaCksIGFyZ3VtZW50R1BSMik7CisgICAgcHVzaChhcmd1bWVudEdQUjIpOyAvLyByZXR1
cm4gYWRkcmVzcy4KKyNlbGlmIENQVShBUk02NCkKKyAgICBtb3ZlKFRydXN0ZWRJbW0zMihpbnRl
cm1lZGlhdGVUYWcpLCByZWdUMSk7CisgICAgdW50YWdQdHIocmVnVDEsIHJlZ1Q2KTsKKyAgICBt
b3ZlKHJlZ1Q2LCBsaW5rUmVnaXN0ZXIpOworI2VuZGlmCisgICAgbG9hZDY0KGFkZHJlc3NGb3Io
Q2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgY29kZUJsb2NrR1BSKTsKKyAgICBub3JtYWxQcm9s
b2d1ZUp1bXAuYXBwZW5kKGp1bXAoKSk7CisKKyAgICBhdXRvIGFyaXR5Q2hlY2tPcGVyYXRpb24g
PSBpc0NvbnN0cnVjdG9yID8gb3BlcmF0aW9uQ29uc3RydWN0QXJpdHlDaGVjayA6IG9wZXJhdGlv
bkNhbGxBcml0eUNoZWNrOworICAgIGF1dG8gYXJpdHlGaXh1cCA9IHZtLmdldENUSVN0dWIoYXJp
dHlGaXh1cEdlbmVyYXRvcik7CisgICAgYXV0byBub3JtYWxQcm9sb2d1ZSA9IHZtLmdldENUSVN0
dWIobm9ybWFsUHJvbG9ndWVHZW5lcmF0b3IpOworICAgIGF1dG8gZXhjZXB0aW9uSGFuZGxlciA9
IHZtLmdldENUSVN0dWIocG9wVGh1bmtTdGFja1ByZXNlcnZlc0FuZEhhbmRsZUV4Y2VwdGlvbkdl
bmVyYXRvcik7CisKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp0aGlzLCBHTE9CQUxfVEhV
TktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OkV4dHJhQ1RJVGh1bmspOworICAgIHBhdGNoQnVm
ZmVyLmxpbmsoYXJpdHlDaGVja0NhbGwsIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4oYXJp
dHlDaGVja09wZXJhdGlvbikpOworICAgIHBhdGNoQnVmZmVyLmxpbmsoYXJpdHlGaXh1cENhbGws
IEZ1bmN0aW9uUHRyKGFyaXR5Rml4dXAucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7CisgICAg
cGF0Y2hCdWZmZXIubGluayhub3JtYWxQcm9sb2d1ZUp1bXAsIENvZGVMb2NhdGlvbkxhYmVsKG5v
cm1hbFByb2xvZ3VlLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkpOworICAgIHBhdGNoQnVmZmVy
LmxpbmsoaGFuZGxlRXhjZXB0aW9uSnVtcCwgQ29kZUxvY2F0aW9uTGFiZWwoZXhjZXB0aW9uSGFu
ZGxlci5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKKyAgICByZXR1cm4gRklOQUxJWkVfQ09E
RShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsIHRodW5rTmFtZSk7Cit9CisKKyNkZWZpbmUg
REVGSU5FX1BST0dMT0dVRV9HRU5FUkFUT1IoZG9lc1Byb2ZpbGluZywgaXNDb25zdHJ1Y3Rvciwg
aGFzSHVnZUZyYW1lLCBuYW1lLCBhcml0eUZpeHVwTmFtZSkgXAorTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OmFyaXR5Rml4dXBOYW1lKFZNJiB2bSkgXAorICAgIHsg
XAorICAgICAgICBKSVQgaml0KHZtKTsgXAorICAgICAgICByZXR1cm4gaml0LmFyaXR5Rml4dXBQ
cm9sb2d1ZUdlbmVyYXRvcih2bSwgaXNDb25zdHJ1Y3RvciwgbmFtZSwgIkJhc2VsaW5lOiAiICNh
cml0eUZpeHVwTmFtZSk7IFwKKyAgICB9CisKK0ZPUl9FQUNIX1BST0xPR1VFX0dFTkVSQVRPUihE
RUZJTkVfUFJPR0xPR1VFX0dFTkVSQVRPUikKKyN1bmRlZiBERUZJTkVfUFJPR0xPR1VFX0dFTkVS
QVRPUgorCisjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCisKIHZvaWQgSklUOjps
aW5rKCkKIHsKICAgICBMaW5rQnVmZmVyJiBwYXRjaEJ1ZmZlciA9ICptX2xpbmtCdWZmZXI7CkBA
IC0xMDMyLDkgKzEzMzMsOSBAQCBDb21waWxhdGlvblJlc3VsdCBKSVQ6OnByaXZhdGVDb21waWxl
KEpJCiAgICAgcmV0dXJuIGZpbmFsaXplT25NYWluVGhyZWFkKCk7CiB9CiAKKyNpZiAhRU5BQkxF
KEVYVFJBX0NUSV9USFVOS1MpCiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVFeGNlcHRpb25IYW5k
bGVycygpCiB7Ci0jaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogICAgIGlmICghbV9leGNl
cHRpb25DaGVja3NXaXRoQ2FsbEZyYW1lUm9sbGJhY2suZW1wdHkoKSkgewogICAgICAgICBtX2V4
Y2VwdGlvbkNoZWNrc1dpdGhDYWxsRnJhbWVSb2xsYmFjay5saW5rKHRoaXMpOwogCkBAIC0xMDU5
LDggKzEzNjAsOCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVFeGNlcHRpb25IYW5kbGVyCiAg
ICAgICAgIG1fZmFyQ2FsbHMuYXBwZW5kKEZhckNhbGxSZWNvcmQoY2FsbChPcGVyYXRpb25QdHJU
YWcpLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbkxvb2t1cEV4Y2VwdGlv
bkhhbmRsZXIpKSk7CiAgICAgICAgIGp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIodm0oKSk7CiAgICAg
fQotI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogfQorI2VuZGlmIC8vICFFTkFC
TEUoRVhUUkFfQ1RJX1RIVU5LUykKIAogdm9pZCBKSVQ6OmRvTWFpblRocmVhZFByZXBhcmF0aW9u
QmVmb3JlQ29tcGlsZSgpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHJldmlzaW9u
IDI3ODAyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHdvcmtpbmcgY29w
eSkKQEAgLTMxNyw3ICszMTcsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIG1fZXhj
ZXB0aW9uQ2hlY2tzV2l0aENhbGxGcmFtZVJvbGxiYWNrLmFwcGVuZChlbWl0RXhjZXB0aW9uQ2hl
Y2sodm0oKSkpOwogICAgICAgICB9CiAKKyNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAg
ICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVFeGNlcHRpb25IYW5kbGVycygpOworI2VuZGlmCiAK
ICAgICAgICAgdm9pZCBhZHZhbmNlVG9OZXh0Q2hlY2twb2ludCgpOwogICAgICAgICB2b2lkIGVt
aXRKdW1wU2xvd1RvSG90Rm9yQ2hlY2twb2ludChKdW1wKTsKQEAgLTcxMiw3ICs3MTQsOSBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAg
IHZvaWQgZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qdHJ1
ZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsK
KyNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
bG9vcF9oaW50KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYpOworI2VuZGlmCiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2hlY2tfdHJhcHMoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfbW9kKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2b2lkIGVtaXRTbG93X29wX211bChjb25z
dCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKQEAgLTc4
Nyw2ICs3OTEsMjYgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RI
VU5LUykKICAgICAgICAgLy8gVGh1bmsgZ2VuZXJhdG9ycy4KKyAgICAgICAgc3RhdGljIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gcHJvbG9ndWVHZW5lcmF0b3IwKFZNJik7
CisgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHBy
b2xvZ3VlR2VuZXJhdG9yMShWTSYpOworICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiBwcm9sb2d1ZUdlbmVyYXRvcjIoVk0mKTsKKyAgICAgICAgc3Rh
dGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gcHJvbG9ndWVHZW5lcmF0
b3IzKFZNJik7CisgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+IHByb2xvZ3VlR2VuZXJhdG9yNChWTSYpOworICAgICAgICBzdGF0aWMgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBwcm9sb2d1ZUdlbmVyYXRvcjUoVk0mKTsKKyAg
ICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gcHJvbG9n
dWVHZW5lcmF0b3I2KFZNJik7CisgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IHByb2xvZ3VlR2VuZXJhdG9yNyhWTSYpOworICAgICAgICBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHByb2xvZ3VlR2VuZXJhdG9yKFZNJiwgYm9v
bCBkb2VzUHJvZmlsaW5nLCBib29sIGlzQ29uc3RydWN0b3IsIGJvb2wgaGFzSHVnZUZyYW1lLCBj
b25zdCBjaGFyKiBuYW1lKTsKKworICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFRodW5rUHRyVGFnPiBhcml0eUZpeHVwX3Byb2xvZ3VlR2VuZXJhdG9yMChWTSYpOworICAg
ICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBhcml0eUZp
eHVwX3Byb2xvZ3VlR2VuZXJhdG9yMShWTSYpOworICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBhcml0eUZpeHVwX3Byb2xvZ3VlR2VuZXJhdG9yMihW
TSYpOworICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiBhcml0eUZpeHVwX3Byb2xvZ3VlR2VuZXJhdG9yMyhWTSYpOworICAgICAgICBzdGF0aWMgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBhcml0eUZpeHVwX3Byb2xvZ3VlR2Vu
ZXJhdG9yNChWTSYpOworICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiBhcml0eUZpeHVwX3Byb2xvZ3VlR2VuZXJhdG9yNShWTSYpOworICAgICAgICBz
dGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBhcml0eUZpeHVwX3By
b2xvZ3VlR2VuZXJhdG9yNihWTSYpOworICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiBhcml0eUZpeHVwX3Byb2xvZ3VlR2VuZXJhdG9yNyhWTSYpOwor
ICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGFyaXR5Rml4dXBQ
cm9sb2d1ZUdlbmVyYXRvcihWTSYsIGJvb2wgaXNDb25zdHJ1Y3RvciwgVGh1bmtHZW5lcmF0b3Ig
bm9ybWFsUHJvbG9ndWVHZW5lcmF0b3IsIGNvbnN0IGNoYXIqIG5hbWUpOworCiAgICAgICAgIHN0
YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHNsb3dfb3BfZGVsX2J5
X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yKFZNJik7CiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHNsb3dfb3BfZGVsX2J5X3ZhbF9wcmVwYXJlQ2Fs
bEdlbmVyYXRvcihWTSYpOwogICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiBzbG93X29wX2dldF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvcihWTSYp
OwpAQCAtODAxLDcgKzgyNSwxNSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RhdGljIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gc2xvd19vcF9yZXNvbHZlX3Njb3Bl
R2VuZXJhdG9yKFZNJik7CiAKICAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gb3BfY2hlY2tfdHJhcHNfaGFuZGxlckdlbmVyYXRvcihWTSYpOwotICAg
ICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvcF9lbnRl
cl9oYW5kbGVyR2VuZXJhdG9yKFZNJik7CisKKyAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3BfZW50ZXJfY2FuQmVPcHRpbWl6ZWRfR2VuZXJhdG9y
KFZNJik7CisgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IG9wX2VudGVyX2Nhbm5vdEJlT3B0aW1pemVkX0dlbmVyYXRvcihWTSYpOworICAgICAgICBN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9wX2VudGVyX0dlbmVyYXRvcihW
TSYsIGJvb2wgY2FuQmVPcHRpbWl6ZWQsIGNvbnN0IGNoYXIqIHRodW5rTmFtZSk7CisKKyAgICAg
ICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3BfbG9vcF9o
aW50X2Z1enpHZW5lcmF0b3IoVk0mKTsKKyNpZiBFTkFCTEUoREZHX0pJVCkKKyAgICAgICAgc3Rh
dGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3BfbG9vcF9oaW50R2Vu
ZXJhdG9yKFZNJik7CisjZW5kaWYKICAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRUaHVua1B0clRhZz4gb3BfcmV0X2hhbmRsZXJHZW5lcmF0b3IoVk0mKTsKICAgICAgICAg
c3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3BfdGhyb3dfaGFu
ZGxlckdlbmVyYXRvcihWTSYpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElu
bGluZXMuaAkocmV2aXNpb24gMjc4MDI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTkxLDcgKzkxLDYgQEAgQUxXQVlTX0lOTElO
RSB2b2lkIEpJVDo6ZW1pdExvYWRDaGFyYWN0ZQogCiBBTFdBWVNfSU5MSU5FIEpJVDo6Q2FsbCBK
SVQ6OmVtaXROYWtlZE5lYXJDYWxsKENvZGVQdHI8Tm9QdHJUYWc+IHRhcmdldCkKIHsKLSAgICBB
U1NFUlQobV9ieXRlY29kZUluZGV4KTsgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2Fs
bGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZUlu
ZGV4IGlzIHNldC4KICAgICBDYWxsIG5ha2VkQ2FsbCA9IG5lYXJDYWxsKCk7CiAgICAgbV9uZWFy
Q2FsbHMuYXBwZW5kKE5lYXJDYWxsUmVjb3JkKG5ha2VkQ2FsbCwgRnVuY3Rpb25QdHI8SlNJbnRl
cm5hbFB0clRhZz4odGFyZ2V0LnJldGFnZ2VkPEpTSW50ZXJuYWxQdHJUYWc+KCkpKSk7CiAgICAg
cmV0dXJuIG5ha2VkQ2FsbDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bj
b2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNv
ZGVzLmNwcAkocmV2aXNpb24gMjc4MDI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGNvZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzc2LDcgKzM3Niw3IEBAIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICBKSVQgaml0KHZtKTsKIAogICAg
IGppdC5jaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwotICAgIGppdC5lbWl0UmVzdG9yZUNh
bGxlZVNhdmVzRm9yKCZSZWdpc3RlckF0T2Zmc2V0TGlzdDo6bGxpbnRCYXNlbGluZUNhbGxlZVNh
dmVSZWdpc3RlcnMoKSk7CisgICAgaml0LmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXNGb3JCYXNlbGlu
ZUpJVCgpOwogICAgIGppdC5lbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOwogICAgIGppdC5yZXQoKTsK
IApAQCAtMTE4NiwxMDMgKzExODYsMTE1IEBAIHZvaWQgSklUOjplbWl0X29wX2VudGVyKGNvbnN0
IEluc3RydWN0aW8KICAgICBlbWl0RW50ZXJPcHRpbWl6YXRpb25DaGVjaygpOwogI2Vsc2UKICAg
ICBBU1NFUlQobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpID09IDApOwotICAgIGNvbnN0ZXhwciBH
UFJSZWcgbG9jYWxzVG9Jbml0R1BSID0gYXJndW1lbnRHUFIwOwotICAgIGNvbnN0ZXhwciBHUFJS
ZWcgY2FuQmVPcHRpbWl6ZWRHUFIgPSBhcmd1bWVudEdQUjQ7Ci0KICAgICB1bnNpZ25lZCBsb2Nh
bHNUb0luaXQgPSBjb3VudCAtIENvZGVCbG9jazo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVTcGFj
ZUFzVmlydHVhbFJlZ2lzdGVycygpOwogICAgIFJFTEVBU0VfQVNTRVJUKGxvY2Fsc1RvSW5pdCA8
IGNvdW50KTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMihsb2NhbHNUb0luaXQgKiBzaXplb2YoUmVn
aXN0ZXIpKSwgbG9jYWxzVG9Jbml0R1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMihjYW5CZU9w
dGltaXplZCgpKSwgY2FuQmVPcHRpbWl6ZWRHUFIpOwotICAgIGVtaXROYWtlZE5lYXJDYWxsKHZt
KCkuZ2V0Q1RJU3R1YihvcF9lbnRlcl9oYW5kbGVyR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9Q
dHJUYWc+KCkpOworICAgIFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvciA9IGNhbkJlT3B0aW1pemVk
KCkgPyBvcF9lbnRlcl9jYW5CZU9wdGltaXplZF9HZW5lcmF0b3IgOiBvcF9lbnRlcl9jYW5ub3RC
ZU9wdGltaXplZF9HZW5lcmF0b3I7CisgICAgZW1pdE5ha2VkTmVhckNhbGwodm0oKS5nZXRDVElT
dHViKGdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICNlbmRpZiAvLyBFTkFC
TEUoRVhUUkFfQ1RJX1RIVU5LUykKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQot
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6Om9wX2VudGVyX2hhbmRs
ZXJHZW5lcmF0b3IoVk0mIHZtKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiBKSVQ6Om9wX2VudGVyX0dlbmVyYXRvcihWTSYgdm0sIGJvb2wgY2FuQmVPcHRpbWl6ZWQsIGNv
bnN0IGNoYXIqIHRodW5rTmFtZSkKIHsKLSAgICBKSVQgaml0KHZtKTsKLQogI2lmIENQVShYODZf
NjQpCi0gICAgaml0LnB1c2goWDg2UmVnaXN0ZXJzOjplYnApOworICAgIHB1c2goWDg2UmVnaXN0
ZXJzOjplYnApOwogI2VsaWYgQ1BVKEFSTTY0KQotICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7
Ci0gICAgaml0LnB1c2hQYWlyKGZyYW1lUG9pbnRlclJlZ2lzdGVyLCBsaW5rUmVnaXN0ZXIpOwor
ICAgIHRhZ1JldHVybkFkZHJlc3MoKTsKKyAgICBwdXNoUGFpcihmcmFtZVBvaW50ZXJSZWdpc3Rl
ciwgbGlua1JlZ2lzdGVyKTsKICNlbmRpZgogICAgIC8vIG9wX2VudGVyIGlzIGFsd2F5cyBhdCBi
eXRlY29kZU9mZnNldCAwLgotICAgIGppdC5zdG9yZTMyKFRydXN0ZWRJbW0zMigwKSwgdGFnRm9y
KENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSk7CisgICAgc3RvcmUz
MihUcnVzdGVkSW1tMzIoMCksIHRhZ0ZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcykpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBsb2NhbHNUb0luaXRHUFIgPSBh
cmd1bWVudEdQUjA7CiAgICAgY29uc3RleHByIEdQUlJlZyBpdGVyYXRvckdQUiA9IGFyZ3VtZW50
R1BSMTsKICAgICBjb25zdGV4cHIgR1BSUmVnIGVuZEdQUiA9IGFyZ3VtZW50R1BSMjsKICAgICBj
b25zdGV4cHIgR1BSUmVnIHVuZGVmaW5lZEdQUiA9IGFyZ3VtZW50R1BSMzsKLSAgICBjb25zdGV4
cHIgR1BSUmVnIGNhbkJlT3B0aW1pemVkR1BSID0gYXJndW1lbnRHUFI0OworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgY29kZUJsb2NrR1BSID0gYXJndW1lbnRHUFI0OworCisgICAgY29uc3RleHByIGlu
dCB2aXJ0dWFsUmVnaXN0ZXJTaXplU2hpZnQgPSAzOworICAgIHN0YXRpY19hc3NlcnQoKDEgPDwg
dmlydHVhbFJlZ2lzdGVyU2l6ZVNoaWZ0KSA9PSBzaXplb2YoUmVnaXN0ZXIpKTsKKworICAgIGxv
YWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCBjb2RlQmxvY2tHUFIp
OworICAgIGxvYWQzMihBZGRyZXNzKGNvZGVCbG9ja0dQUiwgQ29kZUJsb2NrOjpvZmZzZXRPZk51
bVZhcnMoKSksIGxvY2Fsc1RvSW5pdEdQUik7CisgICAgc3ViMzIoVHJ1c3RlZEltbTMyKENvZGVC
bG9jazo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpKSwg
bG9jYWxzVG9Jbml0R1BSKTsKKyAgICBsc2hpZnQzMihUcnVzdGVkSW1tMzIodmlydHVhbFJlZ2lz
dGVyU2l6ZVNoaWZ0KSwgbG9jYWxzVG9Jbml0R1BSKTsKIAogICAgIHNpemVfdCBzdGFydExvY2Fs
ID0gQ29kZUJsb2NrOjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0
ZXJzKCk7CiAgICAgaW50IHN0YXJ0T2Zmc2V0ID0gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoc3Rh
cnRMb2NhbCkub2Zmc2V0KCk7Ci0gICAgaml0Lm1vdmUoVHJ1c3RlZEltbTY0KHN0YXJ0T2Zmc2V0
ICogc2l6ZW9mKFJlZ2lzdGVyKSksIGl0ZXJhdG9yR1BSKTsKLSAgICBqaXQuc3ViNjQoaXRlcmF0
b3JHUFIsIGxvY2Fsc1RvSW5pdEdQUiwgZW5kR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW02NChz
dGFydE9mZnNldCAqIHNpemVvZihSZWdpc3RlcikpLCBpdGVyYXRvckdQUik7CisgICAgc3ViNjQo
aXRlcmF0b3JHUFIsIGxvY2Fsc1RvSW5pdEdQUiwgZW5kR1BSKTsKIAotICAgIGppdC5tb3ZlKFRy
dXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSkpLCB1bmRlZmluZWRHUFIp
OwotICAgIGF1dG8gaW5pdExvb3AgPSBqaXQubGFiZWwoKTsKLSAgICBKdW1wIGluaXREb25lID0g
aml0LmJyYW5jaDMyKExlc3NUaGFuT3JFcXVhbCwgaXRlcmF0b3JHUFIsIGVuZEdQUik7CisgICAg
bW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpKSwgdW5kZWZp
bmVkR1BSKTsKKyAgICBhdXRvIGluaXRMb29wID0gbGFiZWwoKTsKKyAgICBKdW1wIGluaXREb25l
ID0gYnJhbmNoMzIoTGVzc1RoYW5PckVxdWFsLCBpdGVyYXRvckdQUiwgZW5kR1BSKTsKICAgICB7
Ci0gICAgICAgIGppdC5zdG9yZTY0KHVuZGVmaW5lZEdQUiwgQmFzZUluZGV4KEdQUkluZm86OmNh
bGxGcmFtZVJlZ2lzdGVyLCBpdGVyYXRvckdQUiwgVGltZXNPbmUpKTsKLSAgICAgICAgaml0LnN1
YjY0KFRydXN0ZWRJbW0zMihzaXplb2YoUmVnaXN0ZXIpKSwgaXRlcmF0b3JHUFIpOwotICAgICAg
ICBqaXQuanVtcChpbml0TG9vcCk7CisgICAgICAgIHN0b3JlNjQodW5kZWZpbmVkR1BSLCBCYXNl
SW5kZXgoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGl0ZXJhdG9yR1BSLCBUaW1lc09uZSkp
OworICAgICAgICBzdWI2NChUcnVzdGVkSW1tMzIoc2l6ZW9mKFJlZ2lzdGVyKSksIGl0ZXJhdG9y
R1BSKTsKKyAgICAgICAganVtcChpbml0TG9vcCk7CiAgICAgfQotICAgIGluaXREb25lLmxpbmso
JmppdCk7CisgICAgaW5pdERvbmUubGluayh0aGlzKTsKIAotICAgIC8vIGVtaXRXcml0ZUJhcnJp
ZXIobV9jb2RlQmxvY2spLgotICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xv
dDo6Y29kZUJsb2NrKSwgYXJndW1lbnRHUFIxKTsKLSAgICBKdW1wIG93bmVySXNSZW1lbWJlcmVk
T3JJbkVkZW4gPSBqaXQuYmFycmllckJyYW5jaCh2bSwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQ
UjIpOworICAgIC8vIEltcGxlbWVudGluZyBlbWl0V3JpdGVCYXJyaWVyKG1fY29kZUJsb2NrKS4K
KyAgICBKdW1wIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBiYXJyaWVyQnJhbmNoKHZtLCBj
b2RlQmxvY2tHUFIsIGFyZ3VtZW50R1BSMik7CiAKLSAgICBqaXQubW92ZShjYW5CZU9wdGltaXpl
ZEdQUiwgR1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0ZXIpOyAvLyBzYXZlLgotICAgIGppdC5zZXR1
cEFyZ3VtZW50czxkZWNsdHlwZShvcGVyYXRpb25Xcml0ZUJhcnJpZXJTbG93UGF0aCk+KCZ2bSwg
YXJndW1lbnRHUFIxKTsKLSAgICBqaXQucHJlcGFyZUNhbGxPcGVyYXRpb24odm0pOwotICAgIENh
bGwgb3BlcmF0aW9uV3JpdGVCYXJyaWVyQ2FsbCA9IGppdC5jYWxsKE9wZXJhdGlvblB0clRhZyk7
CisgICAgc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUob3BlcmF0aW9uV3JpdGVCYXJyaWVyU2xvd1Bh
dGgpPigmdm0sIGNvZGVCbG9ja0dQUik7CisgICAgcHJlcGFyZUNhbGxPcGVyYXRpb24odm0pOwor
ICAgIENhbGwgb3BlcmF0aW9uV3JpdGVCYXJyaWVyQ2FsbCA9IGNhbGwoT3BlcmF0aW9uUHRyVGFn
KTsKKworICAgIGlmIChjYW5CZU9wdGltaXplZCkKKyAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9y
KENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIGNvZGVCbG9ja0dQUik7CiAKLSAgICBqaXQubW92
ZShHUFJJbmZvOjpudW1iZXJUYWdSZWdpc3RlciwgY2FuQmVPcHRpbWl6ZWRHUFIpOyAvLyByZXN0
b3JlLgotICAgIGppdC5tb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpOdW1iZXJUYWcpLCBHUFJJ
bmZvOjpudW1iZXJUYWdSZWdpc3Rlcik7Ci0gICAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbi5s
aW5rKCZqaXQpOworICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4ubGluayh0aGlzKTsKIAog
I2lmIEVOQUJMRShERkdfSklUKQorICAgIC8vIEltcGxlbWVudGluZyBlbWl0RW50ZXJPcHRpbWl6
YXRpb25DaGVjaygpLgogICAgIENhbGwgb3BlcmF0aW9uT3B0aW1pemVDYWxsOwotICAgIGlmIChP
cHRpb25zOjp1c2VERkdKSVQoKSkgewotICAgICAgICAvLyBlbWl0RW50ZXJPcHRpbWl6YXRpb25D
aGVjaygpLgorICAgIGlmIChjYW5CZU9wdGltaXplZCkgewogICAgICAgICBKdW1wTGlzdCBza2lw
T3B0aW1pemU7CiAKLSAgICAgICAgc2tpcE9wdGltaXplLmFwcGVuZChqaXQuYnJhbmNoVGVzdDMy
KFplcm8sIGNhbkJlT3B0aW1pemVkR1BSKSk7CisgICAgICAgIHNraXBPcHRpbWl6ZS5hcHBlbmQo
YnJhbmNoQWRkMzIoU2lnbmVkLCBUcnVzdGVkSW1tMzIoT3B0aW9uczo6ZXhlY3V0aW9uQ291bnRl
ckluY3JlbWVudEZvckVudHJ5KCkpLCBBZGRyZXNzKGNvZGVCbG9ja0dQUiwgQ29kZUJsb2NrOjpv
ZmZzZXRPZkpJVEV4ZWN1dGVDb3VudGVyKCkpKSk7CiAKLSAgICAgICAgaml0LmxvYWRQdHIoYWRk
cmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCBhcmd1bWVudEdQUjEpOwotICAgICAg
ICBza2lwT3B0aW1pemUuYXBwZW5kKGppdC5icmFuY2hBZGQzMihTaWduZWQsIFRydXN0ZWRJbW0z
MihPcHRpb25zOjpleGVjdXRpb25Db3VudGVySW5jcmVtZW50Rm9yRW50cnkoKSksIEFkZHJlc3Mo
YXJndW1lbnRHUFIxLCBDb2RlQmxvY2s6Om9mZnNldE9mSklURXhlY3V0ZUNvdW50ZXIoKSkpKTsK
KyAgICAgICAgY29weUxMSW50QmFzZWxpbmVDYWxsZWVTYXZlc0Zyb21GcmFtZU9yUmVnaXN0ZXJU
b0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bS50b3BFbnRyeUZyYW1lKTsKIAotICAgICAg
ICBqaXQuY29weUxMSW50QmFzZWxpbmVDYWxsZWVTYXZlc0Zyb21GcmFtZU9yUmVnaXN0ZXJUb0Vu
dHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bS50b3BFbnRyeUZyYW1lKTsKKyAgICAgICAgc2V0
dXBBcmd1bWVudHM8ZGVjbHR5cGUob3BlcmF0aW9uT3B0aW1pemUpPigmdm0sIFRydXN0ZWRJbW0z
MigwKSk7CisgICAgICAgIHByZXBhcmVDYWxsT3BlcmF0aW9uKHZtKTsKKyAgICAgICAgb3BlcmF0
aW9uT3B0aW1pemVDYWxsID0gY2FsbChPcGVyYXRpb25QdHJUYWcpOwogCi0gICAgICAgIGppdC5z
ZXR1cEFyZ3VtZW50czxkZWNsdHlwZShvcGVyYXRpb25PcHRpbWl6ZSk+KCZ2bSwgVHJ1c3RlZElt
bTMyKDApKTsKLSAgICAgICAgaml0LnByZXBhcmVDYWxsT3BlcmF0aW9uKHZtKTsKLSAgICAgICAg
b3BlcmF0aW9uT3B0aW1pemVDYWxsID0gaml0LmNhbGwoT3BlcmF0aW9uUHRyVGFnKTsKLQotICAg
ICAgICBza2lwT3B0aW1pemUuYXBwZW5kKGppdC5icmFuY2hUZXN0UHRyKFplcm8sIHJldHVyblZh
bHVlR1BSKSk7Ci0gICAgICAgIGppdC5mYXJKdW1wKHJldHVyblZhbHVlR1BSLCBHUFJJbmZvOjpj
YWxsRnJhbWVSZWdpc3Rlcik7CisgICAgICAgIHNraXBPcHRpbWl6ZS5hcHBlbmQoYnJhbmNoVGVz
dFB0cihaZXJvLCByZXR1cm5WYWx1ZUdQUikpOworICAgICAgICBmYXJKdW1wKHJldHVyblZhbHVl
R1BSLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CiAKLSAgICAgICAgc2tpcE9wdGltaXpl
LmxpbmsoJmppdCk7CisgICAgICAgIHNraXBPcHRpbWl6ZS5saW5rKHRoaXMpOwogICAgIH0KICNl
bmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKIAogI2lmIENQVShYODZfNjQpCi0gICAgaml0LnBvcChY
ODZSZWdpc3RlcnM6OmVicCk7CisgICAgcG9wKFg4NlJlZ2lzdGVyczo6ZWJwKTsKICNlbGlmIENQ
VShBUk02NCkKLSAgICBqaXQucG9wUGFpcihmcmFtZVBvaW50ZXJSZWdpc3RlciwgbGlua1JlZ2lz
dGVyKTsKKyAgICBwb3BQYWlyKGZyYW1lUG9pbnRlclJlZ2lzdGVyLCBsaW5rUmVnaXN0ZXIpOwog
I2VuZGlmCi0gICAgaml0LnJldCgpOworICAgIHJldCgpOwogCi0gICAgTGlua0J1ZmZlciBwYXRj
aEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6RXh0cmFD
VElUaHVuayk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdGhpcywgR0xPQkFMX1RIVU5L
X0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpFeHRyYUNUSVRodW5rKTsKICAgICBwYXRjaEJ1ZmZl
ci5saW5rKG9wZXJhdGlvbldyaXRlQmFycmllckNhbGwsIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0
clRhZz4ob3BlcmF0aW9uV3JpdGVCYXJyaWVyU2xvd1BhdGgpKTsKICNpZiBFTkFCTEUoREZHX0pJ
VCkKLSAgICBpZiAoT3B0aW9uczo6dXNlREZHSklUKCkpCisgICAgaWYgKGNhbkJlT3B0aW1pemVk
KQogICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKG9wZXJhdGlvbk9wdGltaXplQ2FsbCwgRnVuY3Rp
b25QdHI8T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25PcHRpbWl6ZSkpOwogI2VuZGlmCi0gICAg
cmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCAiQmFzZWxp
bmU6IG9wX2VudGVyX2hhbmRsZXIiKTsKKyAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1
ZmZlciwgSklUVGh1bmtQdHJUYWcsIHRodW5rTmFtZSk7Cit9CisKK01hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpvcF9lbnRlcl9jYW5CZU9wdGltaXplZF9HZW5lcmF0
b3IoVk0mIHZtKQoreworICAgIEpJVCBqaXQodm0pOworICAgIGNvbnN0ZXhwciBib29sIGNhbkJl
T3B0aW1pemVkID0gdHJ1ZTsKKyAgICByZXR1cm4gaml0Lm9wX2VudGVyX0dlbmVyYXRvcih2bSwg
Y2FuQmVPcHRpbWl6ZWQsICJCYXNlbGluZTogb3BfZW50ZXJfY2FuQmVPcHRpbWl6ZWQiKTsKK30K
KworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6Om9wX2VudGVyX2Nh
bm5vdEJlT3B0aW1pemVkX0dlbmVyYXRvcihWTSYgdm0pCit7CisgICAgSklUIGppdCh2bSk7Cisg
ICAgY29uc3RleHByIGJvb2wgY2FuQmVPcHRpbWl6ZWQgPSBmYWxzZTsKKyAgICByZXR1cm4gaml0
Lm9wX2VudGVyX0dlbmVyYXRvcih2bSwgY2FuQmVPcHRpbWl6ZWQsICJCYXNlbGluZTogb3BfZW50
ZXJfY2Fubm90QmVPcHRpbWl6ZWQiKTsKIH0KICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RI
VU5LUykKIApAQCAtMTQxNiw2ICsxNDI4LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3Rh
bmNlb2ZfY3VzdG9tKAogCiAjZW5kaWYgLy8gVVNFKEpTVkFMVUU2NCkKIAorI2lmICFFTkFCTEUo
RVhUUkFfQ1RJX1RIVU5LUykKIHZvaWQgSklUOjplbWl0X29wX2xvb3BfaGludChjb25zdCBJbnN0
cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCiB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKQEAgLTE0NjksNiAr
MTQ4MiwxNTcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2xvb3BfaGludChjb25zdCBJbgogICAg
IFVOVVNFRF9QQVJBTShpdGVyKTsKICNlbmRpZgogfQorI2Vsc2UgLy8gRU5BQkxFKEVYVFJBX0NU
SV9USFVOS1MpCisKK3ZvaWQgSklUOjplbWl0X29wX2xvb3BfaGludChjb25zdCBJbnN0cnVjdGlv
biogaW5zdHJ1Y3Rpb24pCit7CisgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKKyAgICB1aW50MzJf
dCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKKyAgICBBU1NFUlQo
Qnl0ZWNvZGVJbmRleChieXRlY29kZU9mZnNldCkgPT0gbV9ieXRlY29kZUluZGV4KTsKKyAgICBB
U1NFUlQobV9jb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KSA9PSBpbnN0
cnVjdGlvbik7CisKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVn
VDc7CisKKyAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6cmV0dXJuRWFybHlGcm9tSW5maW5pdGVM
b29wc0ZvckZ1enppbmcoKSAmJiBtX2NvZGVCbG9jay0+bG9vcEhpbnRzQXJlRWxpZ2libGVGb3JG
dXp6aW5nRWFybHlSZXR1cm4oKSkpIHsKKyAgICAgICAgY29uc3RleHByIEdQUlJlZyBsb29wSGlu
dEV4ZWN1dGlvbkNvdW50ZXJHUFIgPSByZWdUNjsKKyAgICAgICAgY29uc3RleHByIEdQUlJlZyBj
YW5CZU9wdGltaXplZEdQUiA9IHJlZ1Q1OworCisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5
dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOworICAgICAgICB1aW50NjRfdCogcHRy
ID0gdm0uZ2V0TG9vcEhpbnRFeGVjdXRpb25Db3VudGVyKGluc3RydWN0aW9uKTsKKyAgICAgICAg
bW92ZShUcnVzdGVkSW1tUHRyKHB0ciksIGxvb3BIaW50RXhlY3V0aW9uQ291bnRlckdQUik7Cisg
ICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGNhbkJlT3B0aW1pemVkKCkpLCBjYW5CZU9wdGltaXpl
ZEdQUik7CisgICAgICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIob3BfbG9vcF9o
aW50X2Z1enpHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKyAgICBpZiAoY2FuQmVPcHRpbWl6
ZWQoKSkgeworICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVj
b2RlT2Zmc2V0R1BSKTsKKyAgICAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1Yihv
cF9sb29wX2hpbnRHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisgICAgfQor
I2VuZGlmCit9CisKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpv
cF9sb29wX2hpbnRfZnV6ekdlbmVyYXRvcihWTSYgdm0pCit7CisgICAgLy8gVGhlIHRodW5rIGdl
bmVyYXRlZCBieSB0aGlzIGZ1bmN0aW9uIGNhbiBvbmx5IHdvcmsgd2l0aCB0aGUgTExJbnQgLyBC
YXNlbGluZSBKSVQgYmVjYXVzZQorICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRo
ZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2Rl
QmxvY2soKS4KKyAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0
byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCisgICAgLy8gQ2FsbEZy
YW1lOjpjb2RlQmxvY2soKS4KKyAgICBKSVQgaml0KHZtKTsKKworICAgIFJFTEVBU0VfQVNTRVJU
KE9wdGlvbnM6OnJldHVybkVhcmx5RnJvbUluZmluaXRlTG9vcHNGb3JGdXp6aW5nKCkpOworCisg
ICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKKworICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNv
ZGVPZmZzZXRHUFIgPSByZWdUNzsgLy8gaW5jb21pbmcuCisgICAgY29uc3RleHByIEdQUlJlZyBs
b29wSGludEV4ZWN1dGlvbkNvdW50ZXJHUFIgPSByZWdUNjsgLy8gaW5jb21pbmcKKyAgICBjb25z
dGV4cHIgR1BSUmVnIGNhbkJlT3B0aW1pemVkR1BSID0gcmVnVDU7CisgICAgY29uc3RleHByIEdQ
UlJlZyBjb2RlQmxvY2tHUFIgPSByZWdUNDsKKworICAgIFVOVVNFRF9QQVJBTShieXRlY29kZU9m
ZnNldEdQUik7IC8vIHBhc3MgdGhydSB0byBvcF9sb29wX2hpbnRHZW5lcmF0b3IuCisgICAgaml0
LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCBjb2RlQmxvY2tH
UFIpOworCisgICAgaml0LmxvYWQ2NChBZGRyZXNzKGxvb3BIaW50RXhlY3V0aW9uQ291bnRlckdQ
UiksIHJlZ1QwKTsKKyAgICBhdXRvIHNraXBFYXJseVJldHVybiA9IGppdC5icmFuY2g2NChCZWxv
dywgcmVnVDAsIFRydXN0ZWRJbW02NChPcHRpb25zOjplYXJseVJldHVybkZyb21JbmZpbml0ZUxv
b3BzTGltaXQoKSkpOworCisgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhjb2RlQmxvY2tHUFIsIENv
ZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIEdQUkluZm86OnJldHVyblZhbHVlR1BS
KTsKKworI2lmIENQVShYODZfNjQpCisgICAgLy8gUG9wIGJhY2sgdG8gY2FsbGVyIGZyYW1lIHNv
IHRoYXQgd2UgY2FuIGZvcmNlIGFuIGVhcmx5IHJldHVybiBmcm9tIHRoZXJlLgorICAgIGppdC5h
ZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc2l6ZW9mKENQVVJlZ2lzdGVyKSksIFg4
NlJlZ2lzdGVyczo6ZXNwKTsKKyNlbmRpZgorCisgICAgaml0LmNoZWNrU3RhY2tQb2ludGVyQWxp
Z25tZW50KCk7CisgICAgaml0LmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXNGb3JCYXNlbGluZUpJVCgp
OworICAgIGppdC5lbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOworICAgIGppdC5yZXQoKTsKKworICAg
IHNraXBFYXJseVJldHVybi5saW5rKCZqaXQpOworICAgIGppdC5hZGQ2NChUcnVzdGVkSW1tMzIo
MSksIHJlZ1QwKTsKKyAgICBqaXQuc3RvcmU2NChyZWdUMCwgQWRkcmVzcyhsb29wSGludEV4ZWN1
dGlvbkNvdW50ZXJHUFIpKTsKKworI2lmICFFTkFCTEUoREZHX0pJVCkKKyAgICBVTlVTRURfUEFS
QU0oY2FuQmVPcHRpbWl6ZWRHUFIpOworICAgIGppdC5yZXQoKTsKKworI2Vsc2UgLy8gRU5BQkxF
KERGR19KSVQpCisgICAgSnVtcCBjYW5CZU9wdGltaXplZCA9IGppdC5icmFuY2hUZXN0MzIoTm9u
WmVybywgY2FuQmVPcHRpbWl6ZWRHUFIpOworICAgIGppdC5yZXQoKTsKKworICAgIGNhbkJlT3B0
aW1pemVkLmxpbmsoJmppdCk7CisgICAgaml0LnVudGFnUmV0dXJuQWRkcmVzcygpOworICAgIEp1
bXAgbG9vcEhpbnRUaHVua0p1bXAgPSBqaXQuanVtcCgpOworI2VuZGlmIC8vICFFTkFCTEUoREZH
X0pJVCkKKworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQs
IExpbmtCdWZmZXI6OlByb2ZpbGU6OkV4dHJhQ1RJVGh1bmspOworI2lmIEVOQUJMRShERkdfSklU
KQorICAgIGF1dG8gbG9vcEhpbnRUaHVuayA9IHZtLmdldENUSVN0dWIob3BfbG9vcF9oaW50R2Vu
ZXJhdG9yKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKGxvb3BIaW50VGh1bmtKdW1wLCBDb2RlTG9j
YXRpb25MYWJlbChsb29wSGludFRodW5rLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkpOworI2Vu
ZGlmCisgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFn
LCAiQmFzZWxpbmU6IG9wX2xvb3BfaGludF9mdXp6Iik7Cit9CisKKyNpZiBFTkFCTEUoREZHX0pJ
VCkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpvcF9sb29wX2hp
bnRHZW5lcmF0b3IoVk0mIHZtKQoreworICAgIC8vIFRoZSB0aHVuayBnZW5lcmF0ZWQgYnkgdGhp
cyBmdW5jdGlvbiBjYW4gb25seSB3b3JrIHdpdGggdGhlIExMSW50IC8gQmFzZWxpbmUgSklUIGJl
Y2F1c2UKKyAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFs
T2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCisgICAg
Ly8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFs
T2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAorICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2Nr
KCkuCisgICAgSklUIGppdCh2bSk7CisKKyAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOworCisg
ICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q3OyAvLyBpbmNvbWlu
Zy4KKyAgICBjb25zdGV4cHIgR1BSUmVnIGNvZGVCbG9ja0dQUiA9IHJlZ1Q2OworICAgIGppdC5s
b2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgY29kZUJsb2NrR1BS
KTsKKworICAgIC8vIEVtaXQgdGhlIEpJVCBvcHRpbWl6YXRpb24gY2hlY2s6CisgICAgSnVtcCBu
ZWVkT3B0aW1pemF0aW9uQ2hlY2sgPSBqaXQuYnJhbmNoQWRkMzIoUG9zaXRpdmVPclplcm8sIFRy
dXN0ZWRJbW0zMihPcHRpb25zOjpleGVjdXRpb25Db3VudGVySW5jcmVtZW50Rm9yTG9vcCgpKSwK
KyAgICAgICAgICAgIEFkZHJlc3MoY29kZUJsb2NrR1BSLCBDb2RlQmxvY2s6Om9mZnNldE9mSklU
RXhlY3V0ZUNvdW50ZXIoKSkpOworICAgIGppdC5yZXQoKTsKKworICAgIG5lZWRPcHRpbWl6YXRp
b25DaGVjay5saW5rKCZqaXQpOworCisjaWYgQ1BVKFg4Nl82NCkKKyAgICBqaXQucHVzaChYODZS
ZWdpc3RlcnM6OmVicCk7CisjZWxpZiBDUFUoQVJNNjQpCisgICAgaml0LnB1c2hQYWlyKGZyYW1l
UG9pbnRlclJlZ2lzdGVyLCBsaW5rUmVnaXN0ZXIpOworI2VuZGlmCisKKyAgICBqaXQuY29weUxM
SW50QmFzZWxpbmVDYWxsZWVTYXZlc0Zyb21GcmFtZU9yUmVnaXN0ZXJUb0VudHJ5RnJhbWVDYWxs
ZWVTYXZlc0J1ZmZlcih2bS50b3BFbnRyeUZyYW1lKTsKKworICAgIGppdC5zdG9yZTMyKGJ5dGVj
b2RlT2Zmc2V0R1BSLCBDQ2FsbEhlbHBlcnM6OnRhZ0ZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcykpOworICAgIGppdC5sc2hpZnQzMihUcnVzdGVkSW1tMzIoQnl0
ZWNvZGVJbmRleDo6Y2hlY2twb2ludFNoaWZ0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOworICAgIGpp
dC5zZXR1cEFyZ3VtZW50czxkZWNsdHlwZShvcGVyYXRpb25PcHRpbWl6ZSk+KFRydXN0ZWRJbW1Q
dHIoJnZtKSwgYnl0ZWNvZGVPZmZzZXRHUFIpOworICAgIGppdC5wcmVwYXJlQ2FsbE9wZXJhdGlv
bih2bSk7CisgICAgQ2FsbCBvcGVyYXRpb25DYWxsID0gaml0LmNhbGwoT3BlcmF0aW9uUHRyVGFn
KTsKKyAgICAKKyNpZiBDUFUoWDg2XzY0KQorICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tMzIoMiAqIHNpemVvZihDUFVSZWdpc3RlcikpLCBYODZSZWdpc3RlcnM6OmVzcCk7
CisjZWxpZiBDUFUoQVJNNjQpCisgICAgaml0LnBvcFBhaXIoZnJhbWVQb2ludGVyUmVnaXN0ZXIs
IGxpbmtSZWdpc3Rlcik7CisjZW5kaWYKKworICAgIEp1bXAgaGFzT3B0aW1pemVkRW50cnkgPSBq
aXQuYnJhbmNoVGVzdFB0cihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUik7CisgICAgaml0LnJldCgp
OworCisgICAgaGFzT3B0aW1pemVkRW50cnkubGluaygmaml0KTsKKyAgICBpZiAoQVNTRVJUX0VO
QUJMRUQpIHsKKyAgICAgICAgSnVtcCBvayA9IGppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6
OkFib3ZlLCByZXR1cm5WYWx1ZUdQUiwgVHJ1c3RlZEltbVB0cihiaXR3aXNlX2Nhc3Q8dm9pZCo+
KHN0YXRpY19jYXN0PGludHB0cl90PigxMDAwKSkpKTsKKyAgICAgICAgaml0LmFib3J0V2l0aFJl
YXNvbihKSVRVbnJlYXNvbmFibGVMb29wSGludEp1bXBUYXJnZXQpOworICAgICAgICBvay5saW5r
KCZqaXQpOworICAgIH0KKworICAgIGppdC5mYXJKdW1wKHJldHVyblZhbHVlR1BSLCBHUFJJbmZv
OjpjYWxsRnJhbWVSZWdpc3Rlcik7CisKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwg
R0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpFeHRyYUNUSVRodW5rKTsKKyAg
ICBwYXRjaEJ1ZmZlci5saW5rKG9wZXJhdGlvbkNhbGwsIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0
clRhZz4ob3BlcmF0aW9uT3B0aW1pemUpKTsKKyAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRj
aEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsICJCYXNlbGluZTogb3BfbG9vcF9oaW50Iik7Cit9Cisj
ZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisjZW5kaWYgLy8gIUVOQUJMRShFWFRSQV9DVElfVEhV
TktTKQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9jaGVja190cmFwcyhjb25zdCBJbnN0cnVjdGlvbiop
CiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Nsb3dQYXRoQ2FsbC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TbG93UGF0aENhbGwuY3BwCShy
ZXZpc2lvbiAyNzgwMjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Nsb3dQYXRoQ2Fs
bC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDggKzQ1LDggQEAgdm9pZCBKSVRTbG93UGF0aENh
bGw6OmNhbGwoKQogICAgIEFTU0VSVChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSA9PSBt
X2ppdC0+bV9ieXRlY29kZUluZGV4KTsKIAogICAgIFVOVVNFRF9WQVJJQUJMRShtX3BjKTsKLSAg
ICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0UmVnID0gR1BSSW5mbzo6YXJndW1lbnRH
UFIxOwotICAgIG1faml0LT5tb3ZlKEpJVDo6VHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwg
Ynl0ZWNvZGVPZmZzZXRSZWcpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRH
UFIgPSBHUFJJbmZvOjphcmd1bWVudEdQUjE7CisgICAgbV9qaXQtPm1vdmUoSklUOjpUcnVzdGVk
SW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAgICAgbV9qaXQtPmVt
aXROYWtlZE5lYXJDYWxsKHZtLmppdFN0dWJzLT5jdGlTbG93UGF0aEZ1bmN0aW9uU3R1Yih2bSwg
bV9zbG93UGF0aEZ1bmN0aW9uKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogfQogCkBAIC01
NCw3ICs1NCw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKIHsK
ICAgICBDQ2FsbEhlbHBlcnMgaml0OwogCi0gICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9m
ZnNldFJlZyA9IEpJVDo6YXJndW1lbnRHUFIxOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNv
ZGVPZmZzZXRHUFIgPSBKSVQ6OmFyZ3VtZW50R1BSMTsKIAogI2lmIENQVShYODZfNjQpCiAgICAg
aml0LnB1c2goWDg2UmVnaXN0ZXJzOjplYnApOwpAQCAtNjMsMTQgKzYzLDE0IEBAIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICBqaXQucHVzaFBhaXIoQ0NhbGxI
ZWxwZXJzOjpmcmFtZVBvaW50ZXJSZWdpc3RlciwgQ0NhbGxIZWxwZXJzOjpsaW5rUmVnaXN0ZXIp
OwogI2VuZGlmCiAKLSAgICBqaXQuc3RvcmUzMihieXRlY29kZU9mZnNldFJlZywgQ0NhbGxIZWxw
ZXJzOjp0YWdGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKTsK
KyAgICBqaXQuc3RvcmUzMihieXRlY29kZU9mZnNldEdQUiwgQ0NhbGxIZWxwZXJzOjp0YWdGb3Io
Q2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKTsKIAogICAgIGppdC5s
b2FkUHRyKENDYWxsSGVscGVyczo6YWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2sp
LCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwogCiAgICAgaml0LnByZXBhcmVDYWxsT3BlcmF0aW9u
KHZtKTsKIAogICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjph
cmd1bWVudEdQUjAsIENvZGVCbG9jazo6b2Zmc2V0T2ZJbnN0cnVjdGlvbnNSYXdQb2ludGVyKCkp
LCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwotICAgIHN0YXRpY19hc3NlcnQoSklUOjphcmd1bWVu
dEdQUjEgPT0gYnl0ZWNvZGVPZmZzZXRSZWcpOworICAgIHN0YXRpY19hc3NlcnQoSklUOjphcmd1
bWVudEdQUjEgPT0gYnl0ZWNvZGVPZmZzZXRHUFIpOwogICAgIGppdC5hZGRQdHIoR1BSSW5mbzo6
YXJndW1lbnRHUFIwLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOwogICAgIGppdC5tb3ZlKEdQUklu
Zm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCShyZXZpc2lv
biAyNzgwMjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTgxLDExICs4MSwxMSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+IHBvCiB7CiAgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAotI2lmIENQ
VShYODZfNjQpCi0gICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigyICog
c2l6ZW9mKENQVVJlZ2lzdGVyKSksIFg4NlJlZ2lzdGVyczo6ZXNwKTsKLSNlbGlmIENQVShBUk02
NCkKLSAgICBqaXQucG9wUGFpcihDQ2FsbEhlbHBlcnM6OmZyYW1lUG9pbnRlclJlZ2lzdGVyLCBD
Q2FsbEhlbHBlcnM6OmxpbmtSZWdpc3Rlcik7Ci0jZW5kaWYKKy8vI2lmIENQVShYODZfNjQpCisg
ICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigyICogc2l6ZW9mKENQVVJl
Z2lzdGVyKSksIENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworLy8jZWxpZiBD
UFUoQVJNNjQpCisvLyAgICBqaXQucG9wUGFpcihDQ2FsbEhlbHBlcnM6OmZyYW1lUG9pbnRlclJl
Z2lzdGVyLCBDQ2FsbEhlbHBlcnM6OmxpbmtSZWdpc3Rlcik7CisvLyNlbmRpZgogCiAgICAgQ0Nh
bGxIZWxwZXJzOjpKdW1wIGNvbnRpbnVhdGlvbiA9IGppdC5qdW1wKCk7CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCShyZXZpc2lvbiAyNzgwMjkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTY4LDYgKzU2OCw4IEBAIHZvaWQgT3B0aW9uczo6cmVjb21wdXRlRGVwZW5kZW50T3B0
aW9ucygKIAogICAgIGlmIChPcHRpb25zOjp2ZXJib3NlVmVyaWZ5R0MoKSkKICAgICAgICAgT3B0
aW9uczo6dmVyaWZ5R0MoKSA9IHRydWU7CisKKyAgICBPcHRpb25zOjp1c2VEb2xsYXJWTSgpID0g
dHJ1ZTsgLy8gbWxhbSBURVNUCiB9CiAKIGlubGluZSB2b2lkKiBPcHRpb25zOjphZGRyZXNzT2ZP
cHRpb24oT3B0aW9uczo6SUQgaWQpCkBAIC02MDcsOSArNjA5LDkgQEAgdm9pZCBPcHRpb25zOjpp
bml0aWFsaXplKCkKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKE9wdGlvbnM6OmFkZHJlc3NP
Zk9wdGlvbihmb3JjZU9TUkV4aXRUb0xMSW50SUQpID09ICAmT3B0aW9uczo6Zm9yY2VPU1JFeGl0
VG9MTEludCgpKTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKE9wdGlvbnM6OmFkZHJlc3NP
Zk9wdGlvbkRlZmF1bHQoZm9yY2VPU1JFeGl0VG9MTEludElEKSA9PSAgJk9wdGlvbnM6OmZvcmNl
T1NSRXhpdFRvTExJbnREZWZhdWx0KCkpOwogCi0jaWZuZGVmIE5ERUJVRworLy8jaWZuZGVmIE5E
RUJVRwogICAgICAgICAgICAgQ29uZmlnOjplbmFibGVSZXN0cmljdGVkT3B0aW9ucygpOwotI2Vu
ZGlmCisvLyNlbmRpZgogICAgICAgICAgICAgLy8gSW5pdGlhbGl6ZSBlYWNoIG9mIHRoZSBvcHRp
b25zIHdpdGggdGhlaXIgZGVmYXVsdCB2YWx1ZXM6CiAjZGVmaW5lIElOSVRfT1BUSU9OKHR5cGVf
LCBuYW1lXywgZGVmYXVsdFZhbHVlXywgYXZhaWxhYmlsaXR5XywgZGVzY3JpcHRpb25fKSB7IFwK
ICAgICAgICAgICAgICAgICBhdXRvIHZhbHVlID0gZGVmYXVsdFZhbHVlXzsgXAo=
</data>
<flag name="commit-queue"
          id="451329"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>430015</attachid>
            <date>2021-05-28 09:09:10 -0700</date>
            <delta_ts>2021-05-28 10:11:42 -0700</delta_ts>
            <desc>wip.</desc>
            <filename>wip-loop-hint+prologue+enter.patch</filename>
            <type>text/plain</type>
            <size>46986</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNy
b0Fzc2VtYmxlckNvZGVSZWYuaAkocmV2aXNpb24gMjc4MDI5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaAkod29ya2luZyBjb3B5KQpA
QCAtMjM3LDcgKzIzNyw4IEBAIHB1YmxpYzoKICAgICBleHBsaWNpdCBSZXR1cm5BZGRyZXNzUHRy
KGNvbnN0IHZvaWQqIHJldHVybkFkZHJlc3MpCiAgICAgewogI2lmIENQVShBUk02NEUpCi0gICAg
ICAgIGFzc2VydElzTm90VGFnZ2VkKHJldHVybkFkZHJlc3MpOworLy8gICAgICAgIGFzc2VydElz
Tm90VGFnZ2VkKHJldHVybkFkZHJlc3MpOworICAgICAgICByZXR1cm5BZGRyZXNzID0gcmVtb3Zl
Q29kZVB0clRhZyhyZXR1cm5BZGRyZXNzKTsgLy8gbWxhbSBURVNUCiAgICAgICAgIHJldHVybkFk
ZHJlc3MgPSByZXRhZ0NvZGVQdHI8Tm9QdHJUYWcsIFJldHVybkFkZHJlc3NQdHJUYWc+KHJldHVy
bkFkZHJlc3MpOwogI2VuZGlmCiAgICAgICAgIG1fdmFsdWUgPSByZXR1cm5BZGRyZXNzOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24g
Mjc4MDI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xNzAsNiArMTcwLDcgQEAgcHVibGljOgogCiAgICAgdW5zaWduZWQq
IGFkZHJlc3NPZk51bVBhcmFtZXRlcnMoKSB7IHJldHVybiAmbV9udW1QYXJhbWV0ZXJzOyB9CiAg
ICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZk51bVBhcmFtZXRlcnMoKSB7IHJldHVybiBPQkpF
Q1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX251bVBhcmFtZXRlcnMpOyB9CisgICAgc3RhdGljIHB0
cmRpZmZfdCBvZmZzZXRPZk51bVZhcnMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJs
b2NrLCBtX251bVZhcnMpOyB9CiAKICAgICBDb2RlQmxvY2sqIGFsdGVybmF0aXZlKCkgY29uc3Qg
eyByZXR1cm4gc3RhdGljX2Nhc3Q8Q29kZUJsb2NrKj4obV9hbHRlcm5hdGl2ZS5nZXQoKSk7IH0K
ICAgICB2b2lkIHNldEFsdGVybmF0aXZlKFZNJiwgQ29kZUJsb2NrKik7CkBAIC00ODYsNiArNDg3
LDggQEAgcHVibGljOgogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAorICAgIHN0YXRp
YyBwdHJkaWZmX3Qgb2Zmc2V0T2ZBcmd1bWVudFZhbHVlUHJvZmlsZXMoKSB7IHJldHVybiBPQkpF
Q1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2FyZ3VtZW50VmFsdWVQcm9maWxlcyk7IH0KKwogICAg
IFZhbHVlUHJvZmlsZSYgdmFsdWVQcm9maWxlRm9yQnl0ZWNvZGVJbmRleChCeXRlY29kZUluZGV4
KTsKICAgICBTcGVjdWxhdGVkVHlwZSB2YWx1ZVByb2ZpbGVQcmVkaWN0aW9uRm9yQnl0ZWNvZGVJ
bmRleChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBCeXRlY29kZUluZGV4KTsKIApAQCAtODE5
LDcgKzgyMiw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBib29sIHdhc0NvbXBpbGVkV2l0aERl
YnVnZ2luZ09wY29kZXMoKSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+d2FzQ29tcGls
ZWRXaXRoRGVidWdnaW5nT3Bjb2RlcygpOyB9Ci0gICAgCisKICAgICAvLyBUaGlzIGlzIGludGVu
dGlvbmFsbHkgcHVibGljOyBpdCdzIHRoZSByZXNwb25zaWJpbGl0eSBvZiBhbnlvbmUgZG9pbmcg
YW55CiAgICAgLy8gb2YgdGhlIGZvbGxvd2luZyB0byBob2xkIHRoZSBsb2NrOgogICAgIC8vCkBA
IC05MDYsNiArOTA5LDggQEAgcHVibGljOgogCiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRP
Zk1ldGFkYXRhVGFibGUoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX21l
dGFkYXRhKTsgfQogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZJbnN0cnVjdGlvbnNSYXdQ
b2ludGVyKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9pbnN0cnVjdGlv
bnNSYXdQb2ludGVyKTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZTaG91bGRBbHdh
eXNCZUlubGluZWQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX3Nob3Vs
ZEFsd2F5c0JlSW5saW5lZCk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mVW5saW5r
ZWRDb2RlKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV91bmxpbmtlZENv
ZGUpOyB9CiAKICAgICBib29sIGxvb3BIaW50c0FyZUVsaWdpYmxlRm9yRnV6emluZ0Vhcmx5UmV0
dXJuKCkKICAgICB7CkBAIC0xMDE1LDggKzEwMjAsOCBAQCBwcml2YXRlOgogICAgIC8vIFRoaXMg
aXMgcmVsZXZhbnQgdG8gbm9uLURGRyBjb2RlIGJsb2NrcyB0aGF0IHNlcnZlIGFzIHRoZSBwcm9m
aWxlZCBjb2RlIGJsb2NrCiAgICAgLy8gZm9yIERGRyBjb2RlIGJsb2Nrcy4KICAgICBDb21wcmVz
c2VkTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVIb2xkZXIgbV9sYXp5T3BlcmFuZFZhbHVlUHJvZmls
ZXM7Ci0jZW5kaWYKICAgICBGaXhlZFZlY3RvcjxWYWx1ZVByb2ZpbGU+IG1fYXJndW1lbnRWYWx1
ZVByb2ZpbGVzOworI2VuZGlmCiAKICAgICAvLyBDb25zdGFudCBQb29sCiAgICAgQ09NUElMRV9B
U1NFUlQoc2l6ZW9mKFJlZ2lzdGVyKSA9PSBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSwg
UmVnaXN0ZXJfbXVzdF9iZV9zYW1lX3NpemVfYXNfV3JpdGVCYXJyaWVyX1Vua25vd24pOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCShyZXZpc2lv
biAyNzgwMjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMjYsNiArMzI2LDExIEBAIHB1YmxpYzoKICAgICAgICAgQVNT
RVJUKGNvZGVCbG9jayk7CiAKICAgICAgICAgY29uc3QgUmVnaXN0ZXJBdE9mZnNldExpc3QqIGNh
bGxlZVNhdmVzID0gY29kZUJsb2NrLT5jYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CisgICAgICAgIGVt
aXRTYXZlQ2FsbGVlU2F2ZXNGb3IoY2FsbGVlU2F2ZXMpOworICAgIH0KKworICAgIHZvaWQgZW1p
dFNhdmVDYWxsZWVTYXZlc0Zvcihjb25zdCBSZWdpc3RlckF0T2Zmc2V0TGlzdCogY2FsbGVlU2F2
ZXMpCisgICAgewogICAgICAgICBSZWdpc3RlclNldCBkb250U2F2ZVJlZ2lzdGVycyA9IFJlZ2lz
dGVyU2V0KFJlZ2lzdGVyU2V0OjpzdGFja1JlZ2lzdGVycygpLCBSZWdpc3RlclNldDo6YWxsRlBS
cygpKTsKICAgICAgICAgdW5zaWduZWQgcmVnaXN0ZXJDb3VudCA9IGNhbGxlZVNhdmVzLT5zaXpl
KCk7CiAKQEAgLTM5OSw2ICs0MDQsMTEgQEAgcHVibGljOgogICAgICAgICBlbWl0U2F2ZUNhbGxl
ZVNhdmVzRm9yKGNvZGVCbG9jaygpKTsKICAgICB9CiAKKyAgICB2b2lkIGVtaXRTYXZlQ2FsbGVl
U2F2ZXNGb3JCYXNlbGluZUpJVCgpCisgICAgeworICAgICAgICBlbWl0U2F2ZUNhbGxlZVNhdmVz
Rm9yKCZSZWdpc3RlckF0T2Zmc2V0TGlzdDo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVSZWdpc3Rl
cnMoKSk7CisgICAgfQorCiAgICAgdm9pZCBlbWl0U2F2ZVRoZW5NYXRlcmlhbGl6ZVRhZ1JlZ2lz
dGVycygpCiAgICAgewogI2lmIFVTRShKU1ZBTFVFNjQpCkBAIC00MTcsNiArNDI3LDExIEBAIHB1
YmxpYzoKICAgICAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlc0Zvcihjb2RlQmxvY2soKSk7CiAg
ICAgfQogCisgICAgdm9pZCBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzRm9yQmFzZWxpbmVKSVQoKQor
ICAgIHsKKyAgICAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlc0ZvcigmUmVnaXN0ZXJBdE9mZnNl
dExpc3Q6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOworICAgIH0KKwogICAg
IHZvaWQgZW1pdFJlc3RvcmVTYXZlZFRhZ1JlZ2lzdGVycygpCiAgICAgewogI2lmIFVTRShKU1ZB
TFVFNjQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCShyZXZpc2lvbiAyNzgwMjkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTgyLDcgKzgyLDcgQEAgSklUOjp+SklUKCkKIHsKIH0KIAotI2lmIEVOQUJMRShERkdfSklUKQor
I2lmIEVOQUJMRShERkdfSklUKSAmJiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiB2b2lkIEpJ
VDo6ZW1pdEVudGVyT3B0aW1pemF0aW9uQ2hlY2soKQogewogICAgIGlmICghY2FuQmVPcHRpbWl6
ZWQoKSkKQEAgLTEwMCw3ICsxMDAsNyBAQCB2b2lkIEpJVDo6ZW1pdEVudGVyT3B0aW1pemF0aW9u
Q2hlY2soKQogICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEdQUkluZm86OmNhbGxGcmFtZVJl
Z2lzdGVyKTsKICAgICBza2lwT3B0aW1pemUubGluayh0aGlzKTsKIH0KLSNlbmRpZgorI2VuZGlm
IC8vIEVOQUJMRShERkdfSklUKSAmJiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpKAogCiB2b2lk
IEpJVDo6ZW1pdE5vdGlmeVdyaXRlKFdhdGNocG9pbnRTZXQqIHNldCkKIHsKQEAgLTU3NCw3ICs1
NzQsOSBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgICAgICBERUZJ
TkVfU0xPV0NBU0VfT1Aob3Bfam5lcSkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2pz
dHJpY3RlcSkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2puc3RyaWN0ZXEpCisjaWYg
IUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3Bf
bG9vcF9oaW50KQorI2VuZGlmCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9jaGVja190
cmFwcykKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX21vZCkKICAgICAgICAgREVGSU5F
X1NMT1dDQVNFX09QKG9wX211bCkKQEAgLTY2MCw2ICs2NjIsMjcgQEAgdm9pZCBKSVQ6OnByaXZh
dGVDb21waWxlU2xvd0Nhc2VzKCkKICNlbmRpZgogfQogCisjZGVmaW5lIEZPUl9FQUNIX05PTl9Q
Uk9GSUxJTkdfUFJPTE9HVUVfR0VORVJBVE9SKHYpIFwKKyAgICB2KCFkb2VzUHJvZmlsaW5nLCAh
aXNDb25zdHJ1Y3RvciwgIWhhc0h1Z2VGcmFtZSwgcHJvbG9ndWVHZW5lcmF0b3IwLCBhcml0eUZp
eHVwX3Byb2xvZ3VlR2VuZXJhdG9yMCkgXAorICAgIHYoIWRvZXNQcm9maWxpbmcsICFpc0NvbnN0
cnVjdG9yLCAgaGFzSHVnZUZyYW1lLCBwcm9sb2d1ZUdlbmVyYXRvcjEsIGFyaXR5Rml4dXBfcHJv
bG9ndWVHZW5lcmF0b3IxKSBcCisgICAgdighZG9lc1Byb2ZpbGluZywgIGlzQ29uc3RydWN0b3Is
ICFoYXNIdWdlRnJhbWUsIHByb2xvZ3VlR2VuZXJhdG9yMiwgYXJpdHlGaXh1cF9wcm9sb2d1ZUdl
bmVyYXRvcjIpIFwKKyAgICB2KCFkb2VzUHJvZmlsaW5nLCAgaXNDb25zdHJ1Y3RvciwgIGhhc0h1
Z2VGcmFtZSwgcHJvbG9ndWVHZW5lcmF0b3IzLCBhcml0eUZpeHVwX3Byb2xvZ3VlR2VuZXJhdG9y
MykKKworI2lmIEVOQUJMRShERkdfSklUKQorI2RlZmluZSBGT1JfRUFDSF9QUk9GSUxJTkdfUFJP
TE9HVUVfR0VORVJBVE9SKHYpIFwKKyAgICB2KCBkb2VzUHJvZmlsaW5nLCAhaXNDb25zdHJ1Y3Rv
ciwgIWhhc0h1Z2VGcmFtZSwgcHJvbG9ndWVHZW5lcmF0b3I0LCBhcml0eUZpeHVwX3Byb2xvZ3Vl
R2VuZXJhdG9yNCkgXAorICAgIHYoIGRvZXNQcm9maWxpbmcsICFpc0NvbnN0cnVjdG9yLCAgaGFz
SHVnZUZyYW1lLCBwcm9sb2d1ZUdlbmVyYXRvcjUsIGFyaXR5Rml4dXBfcHJvbG9ndWVHZW5lcmF0
b3I1KSBcCisgICAgdiggZG9lc1Byb2ZpbGluZywgIGlzQ29uc3RydWN0b3IsICFoYXNIdWdlRnJh
bWUsIHByb2xvZ3VlR2VuZXJhdG9yNiwgYXJpdHlGaXh1cF9wcm9sb2d1ZUdlbmVyYXRvcjYpIFwK
KyAgICB2KCBkb2VzUHJvZmlsaW5nLCAgaXNDb25zdHJ1Y3RvciwgIGhhc0h1Z2VGcmFtZSwgcHJv
bG9ndWVHZW5lcmF0b3I3LCBhcml0eUZpeHVwX3Byb2xvZ3VlR2VuZXJhdG9yNykKKworI2Vsc2Ug
Ly8gbm90IEVOQUJMRShERkdfSklUKQorI2RlZmluZSBGT1JfRUFDSF9QUk9GSUxJTkdfUFJPTE9H
VUVfR0VORVJBVE9SKHYpCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNkZWZpbmUgRk9S
X0VBQ0hfUFJPTE9HVUVfR0VORVJBVE9SKHYpIFwKKyAgICBGT1JfRUFDSF9OT05fUFJPRklMSU5H
X1BST0xPR1VFX0dFTkVSQVRPUih2KSBcCisgICAgRk9SX0VBQ0hfUFJPRklMSU5HX1BST0xPR1VF
X0dFTkVSQVRPUih2KQorCiB2b2lkIEpJVDo6Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemlu
ZyhKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCiB7CiAgICAgTW9ub3RvbmljVGltZSBiZWZv
cmUgeyB9OwpAQCAtNzI2LDYgKzc0OSw4IEBAIHZvaWQgSklUOjpjb21waWxlQW5kTGlua1dpdGhv
dXRGaW5hbGl6aW4KICAgICAgICAgbm9wKCk7CiAKICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZSgp
OworCisjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogICAgIGVtaXRQdXRUb0NhbGxGcmFt
ZUhlYWRlcihtX2NvZGVCbG9jaywgQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKTsKIAogICAgIExh
YmVsIGJlZ2luTGFiZWwodGhpcyk7CkBAIC03MzMsNiArNzU4LDcgQEAgdm9pZCBKSVQ6OmNvbXBp
bGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbgogICAgIGludCBmcmFtZVRvcE9mZnNldCA9IHN0YWNr
UG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpOwogICAgIHVu
c2lnbmVkIG1heEZyYW1lU2l6ZSA9IC1mcmFtZVRvcE9mZnNldDsKICAgICBhZGRQdHIoVHJ1c3Rl
ZEltbTMyKGZyYW1lVG9wT2Zmc2V0KSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1QxKTsKKwogICAg
IEp1bXBMaXN0IHN0YWNrT3ZlcmZsb3c7CiAgICAgaWYgKFVOTElLRUxZKG1heEZyYW1lU2l6ZSA+
IE9wdGlvbnM6OnJlc2VydmVkWm9uZVNpemUoKSkpCiAgICAgICAgIHN0YWNrT3ZlcmZsb3cuYXBw
ZW5kKGJyYW5jaFB0cihBYm92ZSwgcmVnVDEsIGNhbGxGcmFtZVJlZ2lzdGVyKSk7CkBAIC03NDcs
MTEgKzc3MywxMCBAQCB2b2lkIEpJVDo6Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluCiAg
ICAgaWYgKG1fY29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSkgewogICAgICAg
ICBBU1NFUlQoIW1fYnl0ZWNvZGVJbmRleCk7CiAgICAgICAgIGlmIChzaG91bGRFbWl0UHJvZmls
aW5nKCkpIHsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQgPSAwOyBhcmd1bWVu
dCA8IG1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCk7ICsrYXJndW1lbnQpIHsKLSAgICAgICAg
ICAgICAgICAvLyBJZiB0aGlzIGlzIGEgY29uc3RydWN0b3IsIHRoZW4gd2Ugd2FudCB0byBwdXQg
aW4gYSBkdW1teSBwcm9maWxpbmcgc2l0ZSAodG8KLSAgICAgICAgICAgICAgICAvLyBrZWVwIHRo
aW5ncyBjb25zaXN0ZW50KSBidXQgd2UgZG9uJ3QgYWN0dWFsbHkgd2FudCB0byByZWNvcmQgdGhl
IGR1bW15IHZhbHVlLgotICAgICAgICAgICAgICAgIGlmIChtX2NvZGVCbG9jay0+aXNDb25zdHJ1
Y3RvcigpICYmICFhcmd1bWVudCkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICAvLyBJZiB0aGlzIGlzIGEgY29uc3RydWN0b3IsIHRoZW4gd2Ugd2FudCB0byBwdXQg
aW4gYSBkdW1teSBwcm9maWxpbmcgc2l0ZSAodG8KKyAgICAgICAgICAgIC8vIGtlZXAgdGhpbmdz
IGNvbnNpc3RlbnQpIGJ1dCB3ZSBkb24ndCBhY3R1YWxseSB3YW50IHRvIHJlY29yZCB0aGUgZHVt
bXkgdmFsdWUuCisgICAgICAgICAgICB1bnNpZ25lZCBzdGFydEFyZ3VtZW50ID0gbV9jb2RlQmxv
Y2stPmlzQ29uc3RydWN0b3IoKSA/IDEgOiAwOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBh
cmd1bWVudCA9IHN0YXJ0QXJndW1lbnQ7IGFyZ3VtZW50IDwgbV9jb2RlQmxvY2stPm51bVBhcmFt
ZXRlcnMoKTsgKythcmd1bWVudCkgewogICAgICAgICAgICAgICAgIGludCBvZmZzZXQgPSBDYWxs
RnJhbWU6OmFyZ3VtZW50T2Zmc2V0SW5jbHVkaW5nVGhpcyhhcmd1bWVudCkgKiBzdGF0aWNfY2Fz
dDxpbnQ+KHNpemVvZihSZWdpc3RlcikpOwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgICAgICAg
ICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKQEAgLTc2
NSw3ICs3OTAsMzYgQEAgdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbgog
ICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQotICAgIAorI2Vsc2UgLy8gRU5BQkxFKEVY
VFJBX0NUSV9USFVOS1MpCisgICAgY29uc3RleHByIEdQUlJlZyBmcmFtZVRvcE9mZnNldEdQUiA9
IHJlZ1Q3OworICAgIGNvbnN0ZXhwciBHUFJSZWcgY29kZUJsb2NrR1BSID0gcmVnVDY7CisgICAg
QVNTRVJUKCFtX2J5dGVjb2RlSW5kZXgpOworCisgICAgaW50IGZyYW1lVG9wT2Zmc2V0ID0gc3Rh
Y2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3Rlcik7CisgICAg
dW5zaWduZWQgbWF4RnJhbWVTaXplID0gLWZyYW1lVG9wT2Zmc2V0OworCisgICAgYm9vbCBkb2Vz
UHJvZmlsaW5nID0gKG1fY29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSkgJiYg
c2hvdWxkRW1pdFByb2ZpbGluZygpOworICAgIGJvb2wgaXNDb25zdHJ1Y3RvciA9IG1fY29kZUJs
b2NrLT5pc0NvbnN0cnVjdG9yKCk7CisgICAgYm9vbCBoYXNIdWdlRnJhbWUgPSBtYXhGcmFtZVNp
emUgPiBPcHRpb25zOjpyZXNlcnZlZFpvbmVTaXplKCk7CisKKyAgICBzdGF0aWMgY29uc3RleHBy
IFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvcnNbXSA9IHsKKyNkZWZpbmUgVVNFX1BST0xPR1VFX0dF
TkVSQVRPUihkb2VzUHJvZmlsaW5nLCBpc0NvbnN0cnVjdG9yLCBoYXNIdWdlRnJhbWUsIG5hbWUs
IGFyaXR5Rml4dXBOYW1lKSBuYW1lLAorICAgICAgICBGT1JfRUFDSF9QUk9MT0dVRV9HRU5FUkFU
T1IoVVNFX1BST0xPR1VFX0dFTkVSQVRPUikKKyN1bmRlZiBVU0VfUFJPTE9HVUVfR0VORVJBVE9S
CisgICAgfTsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG51bWJlck9mR2VuZXJhdG9y
cyA9IHNpemVvZihnZW5lcmF0b3JzKSAvIHNpemVvZihnZW5lcmF0b3JzWzBdKTsKKworICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jayksIGNvZGVCbG9ja0dQUik7CisgICAgbW92ZShU
cnVzdGVkSW1tNjQoZnJhbWVUb3BPZmZzZXQpLCBmcmFtZVRvcE9mZnNldEdQUik7CisKKyAgICB1
bnNpZ25lZCBnZW5lcmF0b3JTZWxlY3RvciA9IGRvZXNQcm9maWxpbmcgPDwgMiB8IGlzQ29uc3Ry
dWN0b3IgPDwgMSB8IGhhc0h1Z2VGcmFtZSA8PCAwOworICAgIFJFTEVBU0VfQVNTRVJUKGdlbmVy
YXRvclNlbGVjdG9yIDwgbnVtYmVyT2ZHZW5lcmF0b3JzKTsKKyAgICBhdXRvIGdlbmVyYXRvciA9
IGdlbmVyYXRvcnNbZ2VuZXJhdG9yU2VsZWN0b3JdOworICAgIGVtaXROYWtlZE5lYXJDYWxsKHZt
KCkuZ2V0Q1RJU3R1YihnZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisKKyAg
ICBMYWJlbCBib2R5TGFiZWwodGhpcyk7CisjZW5kaWYgLy8gIUVOQUJMRShFWFRSQV9DVElfVEhV
TktTKQorCiAgICAgUkVMRUFTRV9BU1NFUlQoIUpJVENvZGU6OmlzSklUKG1fY29kZUJsb2NrLT5q
aXRUeXBlKCkpKTsKIAogICAgIHByaXZhdGVDb21waWxlTWFpblBhc3MoKTsKQEAgLTc3NiwxNiAr
ODMwLDE5IEBAIHZvaWQgSklUOjpjb21waWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW4KICAgICAg
ICAgbV9kaXNhc3NlbWJsZXItPnNldEVuZE9mU2xvd1BhdGgobGFiZWwoKSk7CiAgICAgbV9wY1Rv
Q29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShsYWJlbCgpLCBQQ1RvQ29kZU9yaWdpbk1h
cEJ1aWxkZXI6OmRlZmF1bHRDb2RlT3JpZ2luKCkpOwogCisjaWYgIUVOQUJMRShFWFRSQV9DVElf
VEhVTktTKQogICAgIHN0YWNrT3ZlcmZsb3cubGluayh0aGlzKTsKICAgICBtX2J5dGVjb2RlSW5k
ZXggPSBCeXRlY29kZUluZGV4KDApOwogICAgIGlmIChtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRo
Q2FsbCkKICAgICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtc3RhdGljX2Nhc3Q8aW50MzJfdD4o
bWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwog
ICAgIGNhbGxPcGVyYXRpb25XaXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlvbihvcGVyYXRp
b25UaHJvd1N0YWNrT3ZlcmZsb3dFcnJvciwgbV9jb2RlQmxvY2spOworI2VuZGlmCiAKICAgICAv
LyBJZiB0aGUgbnVtYmVyIG9mIHBhcmFtZXRlcnMgaXMgMSwgd2UgbmV2ZXIgcmVxdWlyZSBhcml0
eSBmaXh1cC4KICAgICBib29sIHJlcXVpcmVzQXJpdHlGaXh1cCA9IG1fY29kZUJsb2NrLT5tX251
bVBhcmFtZXRlcnMgIT0gMTsKICAgICBpZiAobV9jb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVu
Y3Rpb25Db2RlICYmIHJlcXVpcmVzQXJpdHlGaXh1cCkgewogICAgICAgICBtX2FyaXR5Q2hlY2sg
PSBsYWJlbCgpOworI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICAgICAgc3RvcmU4
KFRydXN0ZWRJbW0zMigwKSwgJm1fY29kZUJsb2NrLT5tX3Nob3VsZEFsd2F5c0JlSW5saW5lZCk7
CiAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKCk7CiAgICAgICAgIGVtaXRQdXRUb0NhbGxG
cmFtZUhlYWRlcihtX2NvZGVCbG9jaywgQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKTsKQEAgLTgw
NCwxNyArODYxLDQ0IEBAIHZvaWQgSklUOjpjb21waWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW4K
ICAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKICAg
ICAgICAgZW1pdE5ha2VkTmVhckNhbGwobV92bS0+Z2V0Q1RJU3R1Yihhcml0eUZpeHVwR2VuZXJh
dG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCisgICAgICAgIGp1bXAoYmVnaW5MYWJl
bCk7CisKKyNlbHNlIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQorICAgICAgICBlbWl0RnVu
Y3Rpb25Qcm9sb2d1ZSgpOworCisgICAgICAgIHN0YXRpY19hc3NlcnQoZnJhbWVUb3BPZmZzZXRH
UFIgPT0gcmVnVDcpOworICAgICAgICBzdGF0aWNfYXNzZXJ0KGNvZGVCbG9ja0dQUiA9PSByZWdU
Nik7CisgICAgICAgIEFTU0VSVCghbV9ieXRlY29kZUluZGV4KTsKKworICAgICAgICBzdGF0aWMg
Y29uc3RleHByIFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvcnNbXSA9IHsKKyNkZWZpbmUgVVNFX1BS
T0xPR1VFX0dFTkVSQVRPUihkb2VzUHJvZmlsaW5nLCBpc0NvbnN0cnVjdG9yLCBoYXNIdWdlRnJh
bWUsIG5hbWUsIGFyaXR5Rml4dXBOYW1lKSBhcml0eUZpeHVwTmFtZSwKKyAgICAgICAgICAgIEZP
Ul9FQUNIX1BST0xPR1VFX0dFTkVSQVRPUihVU0VfUFJPTE9HVUVfR0VORVJBVE9SKQorI3VuZGVm
IFVTRV9QUk9MT0dVRV9HRU5FUkFUT1IKKyAgICAgICAgfTsKKyAgICAgICAgc3RhdGljIGNvbnN0
ZXhwciB1bnNpZ25lZCBudW1iZXJPZkdlbmVyYXRvcnMgPSBzaXplb2YoZ2VuZXJhdG9ycykgLyBz
aXplb2YoZ2VuZXJhdG9yc1swXSk7CisKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrKSwgY29kZUJsb2NrR1BSKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoZnJhbWVU
b3BPZmZzZXQpLCBmcmFtZVRvcE9mZnNldEdQUik7CisKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQo
Z2VuZXJhdG9yU2VsZWN0b3IgPCBudW1iZXJPZkdlbmVyYXRvcnMpOworICAgICAgICBhdXRvIGdl
bmVyYXRvciA9IGdlbmVyYXRvcnNbZ2VuZXJhdG9yU2VsZWN0b3JdOworICAgICAgICBSRUxFQVNF
X0FTU0VSVChnZW5lcmF0b3IpOworICAgICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bSgpLmdldENU
SVN0dWIoZ2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOworCisgICAgICAgIGp1
bXAoYm9keUxhYmVsKTsKKyNlbmRpZiAvLyAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCisKICNp
ZiBBU1NFUlRfRU5BQkxFRAogICAgICAgICBtX2J5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4
KCk7IC8vIFJlc2V0IHRoaXMsIGluIG9yZGVyIHRvIGd1YXJkIGl0cyB1c2Ugd2l0aCBBU1NFUlRz
LgogI2VuZGlmCi0KLSAgICAgICAganVtcChiZWdpbkxhYmVsKTsKICAgICB9IGVsc2UKICAgICAg
ICAgbV9hcml0eUNoZWNrID0gZW50cnlMYWJlbDsgLy8gTmV2ZXIgcmVxdWlyZSBhcml0eSBmaXh1
cC4KIAogICAgIEFTU0VSVChtX2ptcFRhYmxlLmlzRW1wdHkoKSk7CiAgICAgCisjaWYgIUVOQUJM
RShFWFRSQV9DVElfVEhVTktTKQogICAgIHByaXZhdGVDb21waWxlRXhjZXB0aW9uSGFuZGxlcnMo
KTsKKyNlbmRpZgogICAgIAogICAgIGlmIChtX2Rpc2Fzc2VtYmxlcikKICAgICAgICAgbV9kaXNh
c3NlbWJsZXItPnNldEVuZE9mQ29kZShsYWJlbCgpKTsKQEAgLTgzOCw2ICs5MjIsMjIzIEBAIHZv
aWQgSklUOjpjb21waWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW4KICAgICBsaW5rKCk7CiB9CiAK
KyNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gSklUOjpwcm9sb2d1ZUdlbmVyYXRvcihWTSYgdm0sIGJvb2wgZG9lc1Byb2Zp
bGluZywgYm9vbCBpc0NvbnN0cnVjdG9yLCBib29sIGhhc0h1Z2VGcmFtZSwgY29uc3QgY2hhciog
dGh1bmtOYW1lKQoreworICAgIC8vIFRoaXMgZnVuY3Rpb24gZ2VuZXJhdGVzIHRoZSBCYXNlbGlu
ZSBKSVQncyBwcm9sb2d1ZSBjb2RlLiBJdCBpcyBub3QgdXNlYWJsZSBieSBvdGhlciB0aWVycy4K
KyAgICBjb25zdGV4cHIgR1BSUmVnIGZyYW1lVG9wT2Zmc2V0R1BSID0gcmVnVDc7IC8vIGluY29t
aW5nCisgICAgY29uc3RleHByIEdQUlJlZyBjb2RlQmxvY2tHUFIgPSByZWdUNjsgLy8gaW5jb21p
bmcuCisKKyAgICB0YWdSZXR1cm5BZGRyZXNzKCk7CisKKyAgICBzdG9yZTY0KGNvZGVCbG9ja0dQ
UiwgYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spKTsKKworICAgIGFkZFB0cihm
cmFtZVRvcE9mZnNldEdQUiwgY2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1QxKTsKKworICAgIEp1bXBM
aXN0IHN0YWNrT3ZlcmZsb3c7CisgICAgaWYgKGhhc0h1Z2VGcmFtZSkKKyAgICAgICAgc3RhY2tP
dmVyZmxvdy5hcHBlbmQoYnJhbmNoUHRyKEFib3ZlLCByZWdUMSwgY2FsbEZyYW1lUmVnaXN0ZXIp
KTsKKyAgICBzdGFja092ZXJmbG93LmFwcGVuZChicmFuY2hQdHIoQWJvdmUsIEFic29sdXRlQWRk
cmVzcyh2bS5hZGRyZXNzT2ZTb2Z0U3RhY2tMaW1pdCgpKSwgcmVnVDEpKTsKKworICAgIHVudGFn
UmV0dXJuQWRkcmVzcygpOworICAgIG1vdmUocmVnVDEsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsK
KyAgICB0YWdSZXR1cm5BZGRyZXNzKCk7CisgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQo
KTsKKworICAgIGVtaXRTYXZlQ2FsbGVlU2F2ZXNGb3JCYXNlbGluZUpJVCgpOworICAgIGVtaXRN
YXRlcmlhbGl6ZVRhZ0NoZWNrUmVnaXN0ZXJzKCk7CisKKyAgICBpZiAoZG9lc1Byb2ZpbGluZykg
eworICAgICAgICBjb25zdGV4cHIgR1BSUmVnIGFyZ3VtZW50VmFsdWVQcm9maWxlR1BSID0gcmVn
VDU7CisgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgbnVtUGFyYW1ldGVyc0dQUiA9IHJlZ1Q0Owor
ICAgICAgICBjb25zdGV4cHIgR1BSUmVnIGFyZ3VtZW50R1BSID0gcmVnVDM7CisKKyAgICAgICAg
bG9hZDMyKEFkZHJlc3MoY29kZUJsb2NrR1BSLCBDb2RlQmxvY2s6Om9mZnNldE9mTnVtUGFyYW1l
dGVycygpKSwgbnVtUGFyYW1ldGVyc0dQUik7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhjb2Rl
QmxvY2tHUFIsIENvZGVCbG9jazo6b2Zmc2V0T2ZBcmd1bWVudFZhbHVlUHJvZmlsZXMoKSksIGFy
Z3VtZW50VmFsdWVQcm9maWxlR1BSKTsKKyAgICAgICAgaWYgKGlzQ29uc3RydWN0b3IpCisgICAg
ICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHNpemVvZihWYWx1ZVByb2ZpbGUpKSwgYXJndW1l
bnRWYWx1ZVByb2ZpbGVHUFIpOworCisgICAgICAgIGNvbnN0ZXhwciBpbnQgdmlydHVhbFJlZ2lz
dGVyU2l6ZSA9IHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSk7CisgICAgICAgIGlu
dCBzdGFydEFyZ3VtZW50ID0gQ2FsbEZyYW1lU2xvdDo6dGhpc0FyZ3VtZW50ICsgKGlzQ29uc3Ry
dWN0b3IgPyAxIDogMCk7CisgICAgICAgIGludCBzdGFydEFyZ3VtZW50T2Zmc2V0ID0gc3RhcnRB
cmd1bWVudCAqIHZpcnR1YWxSZWdpc3RlclNpemU7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0
KHN0YXJ0QXJndW1lbnRPZmZzZXQpLCBhcmd1bWVudEdQUik7CisKKyAgICAgICAgY29uc3RleHBy
IGludCB2aXJ0dWFsUmVnaXN0ZXJTaXplU2hpZnQgPSAzOworICAgICAgICBzdGF0aWNfYXNzZXJ0
KCgxIDw8IHZpcnR1YWxSZWdpc3RlclNpemVTaGlmdCkgPT0gdmlydHVhbFJlZ2lzdGVyU2l6ZSk7
CisgICAgICAgIGFkZDMyKFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQ+KENhbGxGcmFtZVNs
b3Q6OnRoaXNBcmd1bWVudCkpLCBudW1QYXJhbWV0ZXJzR1BSKTsKKyAgICAgICAgbHNoaWZ0MzIo
VHJ1c3RlZEltbTMyKHZpcnR1YWxSZWdpc3RlclNpemVTaGlmdCksIG51bVBhcmFtZXRlcnNHUFIp
OworCisgICAgICAgIGFkZFB0cihjYWxsRnJhbWVSZWdpc3RlciwgYXJndW1lbnRHUFIpOworICAg
ICAgICBhZGRQdHIoY2FsbEZyYW1lUmVnaXN0ZXIsIG51bVBhcmFtZXRlcnNHUFIpOworCisgICAg
ICAgIExhYmVsIGxvb3BTdGFydCh0aGlzKTsKKyAgICAgICAgSnVtcCBkb25lID0gYnJhbmNoUHRy
KEFib3ZlT3JFcXVhbCwgYXJndW1lbnRHUFIsIG51bVBhcmFtZXRlcnNHUFIpOworICAgICAgICB7
CisgICAgICAgICAgICBsb2FkNjQoQWRkcmVzcyhhcmd1bWVudEdQUiksIHJlZ1QwKTsKKyAgICAg
ICAgICAgIHN0b3JlNjQocmVnVDAsIEFkZHJlc3MoYXJndW1lbnRWYWx1ZVByb2ZpbGVHUFIsIE9C
SkVDVF9PRkZTRVRPRihWYWx1ZVByb2ZpbGUsIG1fYnVja2V0cykpKTsKKworICAgICAgICAgICAg
Ly8gVGhlIGFyZ3VtZW50IFZhbHVlUHJvZmlsZXMgYXJlIHN0b3JlZCBpbiBhIEZpeGVkVmVjdG9y
LiBIZW5jZSwgdGhlCisgICAgICAgICAgICAvLyBhZGRyZXNzIG9mIHRoZSBuZXh0IHByb2ZpbGUg
Y2FuIGJlIHRyaXZpYWxseSBjb21wdXRlZCB3aXRoIGFuIGluY3JlbWVudC4KKyAgICAgICAgICAg
IGFkZFB0cihUcnVzdGVkSW1tMzIoc2l6ZW9mKFZhbHVlUHJvZmlsZSkpLCBhcmd1bWVudFZhbHVl
UHJvZmlsZUdQUik7CisgICAgICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHZpcnR1YWxSZWdp
c3RlclNpemUpLCBhcmd1bWVudEdQUik7CisgICAgICAgICAgICBqdW1wKCkubGlua1RvKGxvb3BT
dGFydCwgdGhpcyk7CisgICAgICAgIH0KKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgIH0K
KyAgICByZXQoKTsKKworICAgIHN0YWNrT3ZlcmZsb3cubGluayh0aGlzKTsKKworICAgIHVpbnQz
Ml90IGxvY2F0aW9uQml0cyA9IENhbGxTaXRlSW5kZXgoMCkuYml0cygpOworICAgIHN0b3JlMzIo
VHJ1c3RlZEltbTMyKGxvY2F0aW9uQml0cyksIHRhZ0ZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcykpOworCisgICAgaWYgKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1Bh
dGhDYWxsKQorICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC1zdGF0aWNfY2FzdDxpbnQzMl90
PihtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCkpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7
CisKKyAgICBzZXR1cEFyZ3VtZW50czxkZWNsdHlwZShvcGVyYXRpb25UaHJvd1N0YWNrT3ZlcmZs
b3dFcnJvcik+KGNvZGVCbG9ja0dQUik7CisgICAgcHJlcGFyZUNhbGxPcGVyYXRpb24odm0pOwor
ICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIG9wZXJhdGlvbkNhbGwgPSBjYWxsKE9wZXJhdGlvblB0
clRhZyk7CisgICAgSnVtcCBoYW5kbGVFeGNlcHRpb25KdW1wID0ganVtcCgpOworCisgICAgYXV0
byBoYW5kbGVyID0gdm0uZ2V0Q1RJU3R1YihoYW5kbGVFeGNlcHRpb25XaXRoQ2FsbEZyYW1lUm9s
bGJhY2tHZW5lcmF0b3IpOworCisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdGhpcywgR0xP
QkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpFeHRyYUNUSVRodW5rKTsKKyAgICBw
YXRjaEJ1ZmZlci5saW5rKG9wZXJhdGlvbkNhbGwsIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRh
Zz4ob3BlcmF0aW9uVGhyb3dTdGFja092ZXJmbG93RXJyb3IpKTsKKyAgICBwYXRjaEJ1ZmZlci5s
aW5rKGhhbmRsZUV4Y2VwdGlvbkp1bXAsIENvZGVMb2NhdGlvbkxhYmVsKGhhbmRsZXIucmV0YWdn
ZWRDb2RlPE5vUHRyVGFnPigpKSk7CisgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZm
ZXIsIEpJVFRodW5rUHRyVGFnLCB0aHVua05hbWUpOworfQorCitzdGF0aWMgY29uc3RleHByIGJv
b2wgZG9lc1Byb2ZpbGluZyA9IHRydWU7CitzdGF0aWMgY29uc3RleHByIGJvb2wgaXNDb25zdHJ1
Y3RvciA9IHRydWU7CitzdGF0aWMgY29uc3RleHByIGJvb2wgaGFzSHVnZUZyYW1lID0gdHJ1ZTsK
KworI2RlZmluZSBERUZJTkVfUFJPR0xPR1VFX0dFTkVSQVRPUihkb2VzUHJvZmlsaW5nLCBpc0Nv
bnN0cnVjdG9yLCBoYXNIdWdlRnJhbWUsIG5hbWUsIGFyaXR5Rml4dXBOYW1lKSBcCisgICAgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6Om5hbWUoVk0mIHZtKSBcCisg
ICAgeyBcCisgICAgICAgIEpJVCBqaXQodm0pOyBcCisgICAgICAgIHJldHVybiBqaXQucHJvbG9n
dWVHZW5lcmF0b3Iodm0sIGRvZXNQcm9maWxpbmcsIGlzQ29uc3RydWN0b3IsIGhhc0h1Z2VGcmFt
ZSwgIkJhc2VsaW5lOiAiICNuYW1lKTsgXAorICAgIH0KKworRk9SX0VBQ0hfUFJPTE9HVUVfR0VO
RVJBVE9SKERFRklORV9QUk9HTE9HVUVfR0VORVJBVE9SKQorI3VuZGVmIERFRklORV9QUk9HTE9H
VUVfR0VORVJBVE9SCisKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklU
Ojphcml0eUZpeHVwUHJvbG9ndWVHZW5lcmF0b3IoVk0mIHZtLCBib29sIGlzQ29uc3RydWN0b3Is
IFRodW5rR2VuZXJhdG9yIG5vcm1hbFByb2xvZ3VlR2VuZXJhdG9yLCBjb25zdCBjaGFyKiB0aHVu
a05hbWUpCit7CisgICAgLy8gVGhpcyBmdW5jdGlvbiBnZW5lcmF0ZXMgdGhlIEJhc2VsaW5lIEpJ
VCdzIHByb2xvZ3VlIGNvZGUuIEl0IGlzIG5vdCB1c2VhYmxlIGJ5IG90aGVyIHRpZXJzLgorICAg
IGNvbnN0ZXhwciBHUFJSZWcgZnJhbWVUb3BPZmZzZXRHUFIgPSByZWdUNzsgLy8gaW5jb21pbmcK
KyAgICBjb25zdGV4cHIgR1BSUmVnIGNvZGVCbG9ja0dQUiA9IHJlZ1Q2OyAvLyBpbmNvbWluZy4K
KyAgICBjb25zdGV4cHIgR1BSUmVnIG51bVBhcmFtZXRlcnNHUFIgPSByZWdUNTsKKworICAgIHRh
Z1JldHVybkFkZHJlc3MoKTsKKyNpZiBDUFUoWDg2XzY0KQorICAgIHB1c2goZnJhbWVUb3BPZmZz
ZXRHUFIpOworI2VsaWYgQ1BVKEFSTTY0KQorICAgIHB1c2hQYWlyKGZyYW1lVG9wT2Zmc2V0R1BS
LCBsaW5rUmVnaXN0ZXIpOworI2VuZGlmCisKKyAgICBzdG9yZTY0KGNvZGVCbG9ja0dQUiwgYWRk
cmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spKTsKKyAgICBzdG9yZTgoVHJ1c3RlZElt
bTMyKDApLCBBZGRyZXNzKGNvZGVCbG9ja0dQUiwgQ29kZUJsb2NrOjpvZmZzZXRPZlNob3VsZEFs
d2F5c0JlSW5saW5lZCgpKSk7CisKKyAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90
Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyksIHJlZ1QxKTsKKyAgICBsb2FkMzIoQWRkcmVz
cyhjb2RlQmxvY2tHUFIsIENvZGVCbG9jazo6b2Zmc2V0T2ZOdW1QYXJhbWV0ZXJzKCkpLCBudW1Q
YXJhbWV0ZXJzR1BSKTsKKyAgICBKdW1wIG5vRml4dXBOZWVkZWQgPSBicmFuY2gzMihBYm92ZU9y
RXF1YWwsIHJlZ1QxLCBudW1QYXJhbWV0ZXJzR1BSKTsKKworICAgIGlmIGNvbnN0ZXhwciAobWF4
RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpCisgICAgICAgIGFkZFB0cihUcnVzdGVkSW1tMzIo
LXN0YXRpY19jYXN0PGludDMyX3Q+KG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKSksIHN0
YWNrUG9pbnRlclJlZ2lzdGVyKTsKKworICAgIGxvYWRQdHIoQWRkcmVzcyhjb2RlQmxvY2tHUFIs
IENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIGFyZ3VtZW50R1BSMCk7CisKKyAg
ICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShvcGVyYXRpb25Db25zdHJ1Y3RB
cml0eUNoZWNrKSwgZGVjbHR5cGUob3BlcmF0aW9uQ2FsbEFyaXR5Q2hlY2spPjo6dmFsdWUpOwor
ICAgIHNldHVwQXJndW1lbnRzPGRlY2x0eXBlKG9wZXJhdGlvbkNhbGxBcml0eUNoZWNrKT4oYXJn
dW1lbnRHUFIwKTsKKyAgICBwcmVwYXJlQ2FsbE9wZXJhdGlvbih2bSk7CisKKyAgICBNYWNyb0Fz
c2VtYmxlcjo6Q2FsbCBhcml0eUNoZWNrQ2FsbCA9IGNhbGwoT3BlcmF0aW9uUHRyVGFnKTsKKyAg
ICBKdW1wIGhhbmRsZUV4Y2VwdGlvbkp1bXAgPSBlbWl0Tm9uUGF0Y2hhYmxlRXhjZXB0aW9uQ2hl
Y2sodm0pOworCisgICAgaWYgY29uc3RleHByIChtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2Fs
bCkKKyAgICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRo
Q2FsbCksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBKdW1wIG5lZWRGaXh1cCA9IGJyYW5j
aFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUik7CisgICAgbm9GaXh1cE5lZWRlZC5saW5r
KHRoaXMpOworCisgICAgLy8gVGhlIG5vcm1hbCBwcm9sb2d1ZSBleHBlY3RzIGluY29taW5nIGNv
ZGVCbG9ja0dQUiBhbmQgZnJhbWVUb3BPZmZzZXRHUFIuCisgICAgbG9hZDY0KGFkZHJlc3NGb3Io
Q2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgY29kZUJsb2NrR1BSKTsKKworI2lmIENQVShYODZf
NjQpCisgICAgcG9wKGZyYW1lVG9wT2Zmc2V0R1BSKTsKKyNlbGlmIENQVShBUk02NCkKKyAgICBw
b3BQYWlyKGZyYW1lVG9wT2Zmc2V0R1BSLCBsaW5rUmVnaXN0ZXIpOworI2VuZGlmCisgICAgdW50
YWdSZXR1cm5BZGRyZXNzKCk7CisKKyAgICBKdW1wTGlzdCBub3JtYWxQcm9sb2d1ZUp1bXA7Cisg
ICAgbm9ybWFsUHJvbG9ndWVKdW1wLmFwcGVuZChqdW1wKCkpOworCisgICAgbmVlZEZpeHVwLmxp
bmsodGhpcyk7CisKKyAgICAvLyBSZXN0b3JlIHRoZSBzdGFjayBmb3IgYXJpdHkgZml4dXAsIGFu
ZCBwcmVzZXJ2ZSB0aGUgcmV0dXJuIGFkZHJlc3MgYW5kIGZyYW1lVG9wT2Zmc2V0R1BSLgorCisg
ICAgLy8gYXJpdHlGaXh1cEdlbmVyYXRvciB3aWxsIGJlIHNoaWZ0aW5nIHRoZSBzdGFjay4gU28s
IHdlIGNhbid0IHVzZSB0aGUgc3RhY2sgdG8gcHJlc2VydmUKKyAgICAvLyBmcmFtZVRvcE9mZnNl
dEdQUi4gY29kZUJsb2NrR1BSIGlzIGFsZWFkeSBwcmVzZXJ2ZWQgaW4gdGhlIENhbGxGcmFtZSBo
ZWFkZXIuCisgICAgLy8gV2UgYWxzbyBjYW4ndCB1c2UgY2FsbGVlIHNhdmVkIHJlZ2lzdGVycyBi
ZWNhdXNlIHRoZXkgaGF2ZW4ndCBiZWVuIHNhdmVkIHlldC4KKyAgICAvLworICAgIC8vIGFyaXR5
Rml4dXBHZW5lcmF0b3IgaXMgY2FyZWZ1bGx5IGNyYWZ0ZWQgdG8gb25sdSB1c2UgYTAsIGExLCBh
MiwgdDMsIHQ0IGFuZCB0NS4KKyAgICAvLyBTbywgZnJhbWVUb3BPZmZzZXRHUFIgc2hvdWxkIGJl
IHByZXNlcnZlZCBpbiByZWdUNy4KKyAgICAvLyBPbiBBUk02NCwgd2UgY2FuIHByZXNlcnZlIGxy
IGluIHJlZ1Q2LgorICAgIC8vIE9uIHg4Nl82NCwgcmVnVDYgPT0gYXJndW1lbnRHUFIwLCBhbmQg
d2UncmUgb3V0IG9mIGF2YWlsYWJsZSB2b2xhdGlsZSByZWdpc3RlcnMuCisgICAgLy8gU28sIHdl
J2xsIGhhdmUgdG8gdXNlIGEgVk0gc2NyYXRjaEJ1ZmZlciB0byBwcmVzZXJ2ZSB0aGUgcmV0dXJu
IGFkZHJlc3MuCisKKyNpZiBDUFUoWDg2XzY0KQorICAgIENQVVJlZ2lzdGVyKiBzY3JhdGNoID0g
Yml0d2lzZV9jYXN0PENQVVJlZ2lzdGVyKj4odm0uc2NyYXRjaEJ1ZmZlckZvclNpemUoc2l6ZW9m
KENQVVJlZ2lzdGVyKSktPmRhdGFCdWZmZXIoKSk7CisgICAgcG9wKGZyYW1lVG9wT2Zmc2V0R1BS
KTsKKyAgICBwb3AoYXJndW1lbnRHUFIyKTsgLy8gcmV0dXJuIGFkZHJlc3MuCisgICAgc3RvcmVQ
dHIoYXJndW1lbnRHUFIyLCBBYnNvbHV0ZUFkZHJlc3Moc2NyYXRjaCkpOworI2VsaWYgQ1BVKEFS
TTY0KQorICAgIHBvcFBhaXIoZnJhbWVUb3BPZmZzZXRHUFIsIGxpbmtSZWdpc3Rlcik7CisgICAg
dW50YWdSZXR1cm5BZGRyZXNzKCk7CisgICAgbW92ZShsaW5rUmVnaXN0ZXIsIHJlZ1Q2KTsKKyAg
ICBhdXRvIGludGVybWVkaWF0ZVRhZyA9IHJhbmRvbSgpOworICAgIG1vdmUoVHJ1c3RlZEltbTMy
KGludGVybWVkaWF0ZVRhZyksIHJlZ1QxKTsKKyAgICB0YWdQdHIocmVnVDEsIHJlZ1Q2KTsKKyNl
bmRpZgorICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7Cisg
ICAgQ2FsbCBhcml0eUZpeHVwQ2FsbCA9IG5lYXJDYWxsKCk7CisKKyNpZiBDUFUoWDg2XzY0KQor
ICAgIGxvYWRQdHIoQWJzb2x1dGVBZGRyZXNzKHNjcmF0Y2gpLCBhcmd1bWVudEdQUjIpOworICAg
IHB1c2goYXJndW1lbnRHUFIyKTsgLy8gcmV0dXJuIGFkZHJlc3MuCisjZWxpZiBDUFUoQVJNNjQp
CisgICAgbW92ZShUcnVzdGVkSW1tMzIoaW50ZXJtZWRpYXRlVGFnKSwgcmVnVDEpOworICAgIHVu
dGFnUHRyKHJlZ1QxLCByZWdUNik7CisgICAgbW92ZShyZWdUNiwgbGlua1JlZ2lzdGVyKTsKKyNl
bmRpZgorICAgIGxvYWQ2NChhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIGNv
ZGVCbG9ja0dQUik7CisgICAgbm9ybWFsUHJvbG9ndWVKdW1wLmFwcGVuZChqdW1wKCkpOworCisg
ICAgYXV0byBhcml0eUNoZWNrT3BlcmF0aW9uID0gaXNDb25zdHJ1Y3RvciA/IG9wZXJhdGlvbkNv
bnN0cnVjdEFyaXR5Q2hlY2sgOiBvcGVyYXRpb25DYWxsQXJpdHlDaGVjazsKKyAgICBhdXRvIGFy
aXR5Rml4dXAgPSB2bS5nZXRDVElTdHViKGFyaXR5Rml4dXBHZW5lcmF0b3IpOworICAgIGF1dG8g
bm9ybWFsUHJvbG9ndWUgPSB2bS5nZXRDVElTdHViKG5vcm1hbFByb2xvZ3VlR2VuZXJhdG9yKTsK
KyAgICBhdXRvIGV4Y2VwdGlvbkhhbmRsZXIgPSB2bS5nZXRDVElTdHViKHBvcFRodW5rU3RhY2tQ
cmVzZXJ2ZXNBbmRIYW5kbGVFeGNlcHRpb25HZW5lcmF0b3IpOworCisgICAgTGlua0J1ZmZlciBw
YXRjaEJ1ZmZlcigqdGhpcywgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpF
eHRyYUNUSVRodW5rKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKGFyaXR5Q2hlY2tDYWxsLCBGdW5j
dGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KGFyaXR5Q2hlY2tPcGVyYXRpb24pKTsKKyAgICBwYXRj
aEJ1ZmZlci5saW5rKGFyaXR5Rml4dXBDYWxsLCBGdW5jdGlvblB0cihhcml0eUZpeHVwLnJldGFn
Z2VkQ29kZTxOb1B0clRhZz4oKSkpOworICAgIHBhdGNoQnVmZmVyLmxpbmsobm9ybWFsUHJvbG9n
dWVKdW1wLCBDb2RlTG9jYXRpb25MYWJlbChub3JtYWxQcm9sb2d1ZS5yZXRhZ2dlZENvZGU8Tm9Q
dHJUYWc+KCkpKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKGhhbmRsZUV4Y2VwdGlvbkp1bXAsIENv
ZGVMb2NhdGlvbkxhYmVsKGV4Y2VwdGlvbkhhbmRsZXIucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigp
KSk7CisgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFn
LCB0aHVua05hbWUpOworfQorCisjZGVmaW5lIERFRklORV9QUk9HTE9HVUVfR0VORVJBVE9SKGRv
ZXNQcm9maWxpbmcsIGlzQ29uc3RydWN0b3IsIGhhc0h1Z2VGcmFtZSwgbmFtZSwgYXJpdHlGaXh1
cE5hbWUpIFwKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjphcml0
eUZpeHVwTmFtZShWTSYgdm0pIFwKKyAgICB7IFwKKyAgICAgICAgSklUIGppdCh2bSk7IFwKKyAg
ICAgICAgcmV0dXJuIGppdC5hcml0eUZpeHVwUHJvbG9ndWVHZW5lcmF0b3Iodm0sIGlzQ29uc3Ry
dWN0b3IsIG5hbWUsICJCYXNlbGluZTogIiAjYXJpdHlGaXh1cE5hbWUpOyBcCisgICAgfQorCitG
T1JfRUFDSF9QUk9MT0dVRV9HRU5FUkFUT1IoREVGSU5FX1BST0dMT0dVRV9HRU5FUkFUT1IpCisj
dW5kZWYgREVGSU5FX1BST0dMT0dVRV9HRU5FUkFUT1IKKworI2VuZGlmIC8vIEVOQUJMRShFWFRS
QV9DVElfVEhVTktTKQorCiB2b2lkIEpJVDo6bGluaygpCiB7CiAgICAgTGlua0J1ZmZlciYgcGF0
Y2hCdWZmZXIgPSAqbV9saW5rQnVmZmVyOwpAQCAtMTAzMiw5ICsxMzMzLDkgQEAgQ29tcGlsYXRp
b25SZXN1bHQgSklUOjpwcml2YXRlQ29tcGlsZShKSQogICAgIHJldHVybiBmaW5hbGl6ZU9uTWFp
blRocmVhZCgpOwogfQogCisjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogdm9pZCBKSVQ6
OnByaXZhdGVDb21waWxlRXhjZXB0aW9uSGFuZGxlcnMoKQogewotI2lmICFFTkFCTEUoRVhUUkFf
Q1RJX1RIVU5LUykKICAgICBpZiAoIW1fZXhjZXB0aW9uQ2hlY2tzV2l0aENhbGxGcmFtZVJvbGxi
YWNrLmVtcHR5KCkpIHsKICAgICAgICAgbV9leGNlcHRpb25DaGVja3NXaXRoQ2FsbEZyYW1lUm9s
bGJhY2subGluayh0aGlzKTsKIApAQCAtMTA1OSw4ICsxMzYwLDggQEAgdm9pZCBKSVQ6OnByaXZh
dGVDb21waWxlRXhjZXB0aW9uSGFuZGxlcgogICAgICAgICBtX2ZhckNhbGxzLmFwcGVuZChGYXJD
YWxsUmVjb3JkKGNhbGwoT3BlcmF0aW9uUHRyVGFnKSwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRy
VGFnPihvcGVyYXRpb25Mb29rdXBFeGNlcHRpb25IYW5kbGVyKSkpOwogICAgICAgICBqdW1wVG9F
eGNlcHRpb25IYW5kbGVyKHZtKCkpOwogICAgIH0KLSNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJ
X1RIVU5LUykKIH0KKyNlbmRpZiAvLyAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKIHZvaWQg
SklUOjpkb01haW5UaHJlYWRQcmVwYXJhdGlvbkJlZm9yZUNvbXBpbGUoKQogewpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVC5oCShyZXZpc2lvbiAyNzgwMjkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMTcsNyArMzE3LDkgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgICAgICBtX2V4Y2VwdGlvbkNoZWNrc1dpdGhDYWxsRnJhbWVSb2xs
YmFjay5hcHBlbmQoZW1pdEV4Y2VwdGlvbkNoZWNrKHZtKCkpKTsKICAgICAgICAgfQogCisjaWYg
IUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlRXhj
ZXB0aW9uSGFuZGxlcnMoKTsKKyNlbmRpZgogCiAgICAgICAgIHZvaWQgYWR2YW5jZVRvTmV4dENo
ZWNrcG9pbnQoKTsKICAgICAgICAgdm9pZCBlbWl0SnVtcFNsb3dUb0hvdEZvckNoZWNrcG9pbnQo
SnVtcCk7CkBAIC03MTIsNyArNzE0LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2b2lkIGVtaXRTbG93X29wX2puc3RyaWN0ZXEo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAg
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfanRydWUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktT
KQogICAgICAgICB2b2lkIGVtaXRTbG93X29wX2xvb3BfaGludChjb25zdCBJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyNlbmRpZgogICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2NoZWNrX3RyYXBzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2b2lkIGVtaXRTbG93X29wX21vZChjb25z
dCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9tdWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJik7CkBAIC03ODcsNiArNzkxLDI2IEBAIG5hbWVzcGFjZSBKU0Mg
ewogCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAgICAgICAgIC8vIFRodW5rIGdlbmVy
YXRvcnMuCisgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IHByb2xvZ3VlR2VuZXJhdG9yMChWTSYpOworICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBwcm9sb2d1ZUdlbmVyYXRvcjEoVk0mKTsKKyAgICAg
ICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gcHJvbG9ndWVH
ZW5lcmF0b3IyKFZNJik7CisgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHJUYWc+IHByb2xvZ3VlR2VuZXJhdG9yMyhWTSYpOworICAgICAgICBzdGF0aWMgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBwcm9sb2d1ZUdlbmVyYXRvcjQoVk0m
KTsKKyAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
cHJvbG9ndWVHZW5lcmF0b3I1KFZNJik7CisgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IHByb2xvZ3VlR2VuZXJhdG9yNihWTSYpOworICAgICAgICBz
dGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBwcm9sb2d1ZUdlbmVy
YXRvcjcoVk0mKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiBwcm9sb2d1ZUdlbmVyYXRvcihWTSYsIGJvb2wgZG9lc1Byb2ZpbGluZywgYm9vbCBpc0NvbnN0
cnVjdG9yLCBib29sIGhhc0h1Z2VGcmFtZSwgY29uc3QgY2hhciogbmFtZSk7CisKKyAgICAgICAg
c3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gYXJpdHlGaXh1cF9w
cm9sb2d1ZUdlbmVyYXRvcjAoVk0mKTsKKyAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRUaHVua1B0clRhZz4gYXJpdHlGaXh1cF9wcm9sb2d1ZUdlbmVyYXRvcjEoVk0mKTsK
KyAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gYXJp
dHlGaXh1cF9wcm9sb2d1ZUdlbmVyYXRvcjIoVk0mKTsKKyAgICAgICAgc3RhdGljIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gYXJpdHlGaXh1cF9wcm9sb2d1ZUdlbmVyYXRv
cjMoVk0mKTsKKyAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gYXJpdHlGaXh1cF9wcm9sb2d1ZUdlbmVyYXRvcjQoVk0mKTsKKyAgICAgICAgc3RhdGlj
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gYXJpdHlGaXh1cF9wcm9sb2d1
ZUdlbmVyYXRvcjUoVk0mKTsKKyAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gYXJpdHlGaXh1cF9wcm9sb2d1ZUdlbmVyYXRvcjYoVk0mKTsKKyAgICAg
ICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gYXJpdHlGaXh1
cF9wcm9sb2d1ZUdlbmVyYXRvcjcoVk0mKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFRodW5rUHRyVGFnPiBhcml0eUZpeHVwUHJvbG9ndWVHZW5lcmF0b3IoVk0mLCBib29sIGlz
Q29uc3RydWN0b3IsIFRodW5rR2VuZXJhdG9yIG5vcm1hbFByb2xvZ3VlR2VuZXJhdG9yLCBjb25z
dCBjaGFyKiBuYW1lKTsKKwogICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiBzbG93X29wX2RlbF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvcihWTSYp
OwogICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBz
bG93X29wX2RlbF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3IoVk0mKTsKICAgICAgICAgc3Rh
dGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gc2xvd19vcF9nZXRfYnlf
aWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IoVk0mKTsKQEAgLTgwMSw3ICs4MjUsMTUgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+IHNsb3dfb3BfcmVzb2x2ZV9zY29wZUdlbmVyYXRvcihWTSYpOwogCiAgICAgICAgIHN0
YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9wX2NoZWNrX3RyYXBz
X2hhbmRsZXJHZW5lcmF0b3IoVk0mKTsKLSAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRUaHVua1B0clRhZz4gb3BfZW50ZXJfaGFuZGxlckdlbmVyYXRvcihWTSYpOworCisg
ICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9wX2Vu
dGVyX2NhbkJlT3B0aW1pemVkX0dlbmVyYXRvcihWTSYpOworICAgICAgICBzdGF0aWMgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvcF9lbnRlcl9jYW5ub3RCZU9wdGltaXpl
ZF9HZW5lcmF0b3IoVk0mKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5r
UHRyVGFnPiBvcF9lbnRlcl9HZW5lcmF0b3IoVk0mLCBib29sIGNhbkJlT3B0aW1pemVkLCBjb25z
dCBjaGFyKiB0aHVua05hbWUpOworCisgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+IG9wX2xvb3BfaGludF9mdXp6R2VuZXJhdG9yKFZNJik7CisjaWYg
RU5BQkxFKERGR19KSVQpCisgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHJUYWc+IG9wX2xvb3BfaGludEdlbmVyYXRvcihWTSYpOworI2VuZGlmCiAgICAgICAg
IHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9wX3JldF9oYW5k
bGVyR2VuZXJhdG9yKFZNJik7CiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IG9wX3Rocm93X2hhbmRsZXJHZW5lcmF0b3IoVk0mKTsKIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgJKHJldmlzaW9uIDI3ODAyOSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBA
IC05MSw3ICs5MSw2IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRMb2FkQ2hhcmFjdGUK
IAogQUxXQVlTX0lOTElORSBKSVQ6OkNhbGwgSklUOjplbWl0TmFrZWROZWFyQ2FsbChDb2RlUHRy
PE5vUHRyVGFnPiB0YXJnZXQpCiB7Ci0gICAgQVNTRVJUKG1fYnl0ZWNvZGVJbmRleCk7IC8vIFRo
aXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5l
cmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQuCiAgICAgQ2FsbCBuYWtlZENh
bGwgPSBuZWFyQ2FsbCgpOwogICAgIG1fbmVhckNhbGxzLmFwcGVuZChOZWFyQ2FsbFJlY29yZChu
YWtlZENhbGwsIEZ1bmN0aW9uUHRyPEpTSW50ZXJuYWxQdHJUYWc+KHRhcmdldC5yZXRhZ2dlZDxK
U0ludGVybmFsUHRyVGFnPigpKSkpOwogICAgIHJldHVybiBuYWtlZENhbGw7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHJldmlzaW9uIDI3ODAyOSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM3Niw3ICszNzYsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+
IEpJCiAgICAgSklUIGppdCh2bSk7CiAKICAgICBqaXQuY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1l
bnQoKTsKLSAgICBqaXQuZW1pdFJlc3RvcmVDYWxsZWVTYXZlc0ZvcigmUmVnaXN0ZXJBdE9mZnNl
dExpc3Q6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOworICAgIGppdC5lbWl0
UmVzdG9yZUNhbGxlZVNhdmVzRm9yQmFzZWxpbmVKSVQoKTsKICAgICBqaXQuZW1pdEZ1bmN0aW9u
RXBpbG9ndWUoKTsKICAgICBqaXQucmV0KCk7CiAKQEAgLTExODYsMTAzICsxMTg2LDExNSBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9lbnRlcihjb25zdCBJbnN0cnVjdGlvCiAgICAgZW1pdEVudGVyT3B0
aW1pemF0aW9uQ2hlY2soKTsKICNlbHNlCiAgICAgQVNTRVJUKG1fYnl0ZWNvZGVJbmRleC5vZmZz
ZXQoKSA9PSAwKTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGxvY2Fsc1RvSW5pdEdQUiA9IGFyZ3Vt
ZW50R1BSMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGNhbkJlT3B0aW1pemVkR1BSID0gYXJndW1l
bnRHUFI0OwotCiAgICAgdW5zaWduZWQgbG9jYWxzVG9Jbml0ID0gY291bnQgLSBDb2RlQmxvY2s6
OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKTsKICAgICBS
RUxFQVNFX0FTU0VSVChsb2NhbHNUb0luaXQgPCBjb3VudCk7Ci0gICAgbW92ZShUcnVzdGVkSW1t
MzIobG9jYWxzVG9Jbml0ICogc2l6ZW9mKFJlZ2lzdGVyKSksIGxvY2Fsc1RvSW5pdEdQUik7Ci0g
ICAgbW92ZShUcnVzdGVkSW1tMzIoY2FuQmVPcHRpbWl6ZWQoKSksIGNhbkJlT3B0aW1pemVkR1BS
KTsKLSAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bSgpLmdldENUSVN0dWIob3BfZW50ZXJfaGFuZGxl
ckdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKKyAgICBUaHVua0dlbmVyYXRv
ciBnZW5lcmF0b3IgPSBjYW5CZU9wdGltaXplZCgpID8gb3BfZW50ZXJfY2FuQmVPcHRpbWl6ZWRf
R2VuZXJhdG9yIDogb3BfZW50ZXJfY2Fubm90QmVPcHRpbWl6ZWRfR2VuZXJhdG9yOworICAgIGVt
aXROYWtlZE5lYXJDYWxsKHZtKCkuZ2V0Q1RJU3R1YihnZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxO
b1B0clRhZz4oKSk7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiB9CiAKICNp
ZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz4gSklUOjpvcF9lbnRlcl9oYW5kbGVyR2VuZXJhdG9yKFZNJiB2bSkKK01hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpvcF9lbnRlcl9HZW5lcmF0b3IoVk0m
IHZtLCBib29sIGNhbkJlT3B0aW1pemVkLCBjb25zdCBjaGFyKiB0aHVua05hbWUpCiB7Ci0gICAg
SklUIGppdCh2bSk7Ci0KICNpZiBDUFUoWDg2XzY0KQotICAgIGppdC5wdXNoKFg4NlJlZ2lzdGVy
czo6ZWJwKTsKKyAgICBwdXNoKFg4NlJlZ2lzdGVyczo6ZWJwKTsKICNlbGlmIENQVShBUk02NCkK
LSAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwotICAgIGppdC5wdXNoUGFpcihmcmFtZVBvaW50
ZXJSZWdpc3RlciwgbGlua1JlZ2lzdGVyKTsKKyAgICB0YWdSZXR1cm5BZGRyZXNzKCk7CisgICAg
cHVzaFBhaXIoZnJhbWVQb2ludGVyUmVnaXN0ZXIsIGxpbmtSZWdpc3Rlcik7CiAjZW5kaWYKICAg
ICAvLyBvcF9lbnRlciBpcyBhbHdheXMgYXQgYnl0ZWNvZGVPZmZzZXQgMC4KLSAgICBqaXQuc3Rv
cmUzMihUcnVzdGVkSW1tMzIoMCksIHRhZ0ZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcykpOworICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKDApLCB0YWdGb3IoQ2Fs
bEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKTsKIAogICAgIGNvbnN0ZXhw
ciBHUFJSZWcgbG9jYWxzVG9Jbml0R1BSID0gYXJndW1lbnRHUFIwOwogICAgIGNvbnN0ZXhwciBH
UFJSZWcgaXRlcmF0b3JHUFIgPSBhcmd1bWVudEdQUjE7CiAgICAgY29uc3RleHByIEdQUlJlZyBl
bmRHUFIgPSBhcmd1bWVudEdQUjI7CiAgICAgY29uc3RleHByIEdQUlJlZyB1bmRlZmluZWRHUFIg
PSBhcmd1bWVudEdQUjM7Ci0gICAgY29uc3RleHByIEdQUlJlZyBjYW5CZU9wdGltaXplZEdQUiA9
IGFyZ3VtZW50R1BSNDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGNvZGVCbG9ja0dQUiA9IGFyZ3Vt
ZW50R1BSNDsKKworICAgIGNvbnN0ZXhwciBpbnQgdmlydHVhbFJlZ2lzdGVyU2l6ZVNoaWZ0ID0g
MzsKKyAgICBzdGF0aWNfYXNzZXJ0KCgxIDw8IHZpcnR1YWxSZWdpc3RlclNpemVTaGlmdCkgPT0g
c2l6ZW9mKFJlZ2lzdGVyKSk7CisKKyAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xv
dDo6Y29kZUJsb2NrKSwgY29kZUJsb2NrR1BSKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhjb2RlQmxv
Y2tHUFIsIENvZGVCbG9jazo6b2Zmc2V0T2ZOdW1WYXJzKCkpLCBsb2NhbHNUb0luaXRHUFIpOwor
ICAgIHN1YjMyKFRydXN0ZWRJbW0zMihDb2RlQmxvY2s6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZl
U3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKSksIGxvY2Fsc1RvSW5pdEdQUik7CisgICAgbHNoaWZ0
MzIoVHJ1c3RlZEltbTMyKHZpcnR1YWxSZWdpc3RlclNpemVTaGlmdCksIGxvY2Fsc1RvSW5pdEdQ
Uik7CiAKICAgICBzaXplX3Qgc3RhcnRMb2NhbCA9IENvZGVCbG9jazo6bGxpbnRCYXNlbGluZUNh
bGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpOwogICAgIGludCBzdGFydE9mZnNldCA9
IHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKHN0YXJ0TG9jYWwpLm9mZnNldCgpOwotICAgIGppdC5t
b3ZlKFRydXN0ZWRJbW02NChzdGFydE9mZnNldCAqIHNpemVvZihSZWdpc3RlcikpLCBpdGVyYXRv
ckdQUik7Ci0gICAgaml0LnN1YjY0KGl0ZXJhdG9yR1BSLCBsb2NhbHNUb0luaXRHUFIsIGVuZEdQ
Uik7CisgICAgbW92ZShUcnVzdGVkSW1tNjQoc3RhcnRPZmZzZXQgKiBzaXplb2YoUmVnaXN0ZXIp
KSwgaXRlcmF0b3JHUFIpOworICAgIHN1YjY0KGl0ZXJhdG9yR1BSLCBsb2NhbHNUb0luaXRHUFIs
IGVuZEdQUik7CiAKLSAgICBqaXQubW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpKSwgdW5kZWZpbmVkR1BSKTsKLSAgICBhdXRvIGluaXRMb29wID0gaml0Lmxh
YmVsKCk7Ci0gICAgSnVtcCBpbml0RG9uZSA9IGppdC5icmFuY2gzMihMZXNzVGhhbk9yRXF1YWws
IGl0ZXJhdG9yR1BSLCBlbmRHUFIpOworICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKSksIHVuZGVmaW5lZEdQUik7CisgICAgYXV0byBpbml0TG9vcCA9
IGxhYmVsKCk7CisgICAgSnVtcCBpbml0RG9uZSA9IGJyYW5jaDMyKExlc3NUaGFuT3JFcXVhbCwg
aXRlcmF0b3JHUFIsIGVuZEdQUik7CiAgICAgewotICAgICAgICBqaXQuc3RvcmU2NCh1bmRlZmlu
ZWRHUFIsIEJhc2VJbmRleChHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgaXRlcmF0b3JHUFIs
IFRpbWVzT25lKSk7Ci0gICAgICAgIGppdC5zdWI2NChUcnVzdGVkSW1tMzIoc2l6ZW9mKFJlZ2lz
dGVyKSksIGl0ZXJhdG9yR1BSKTsKLSAgICAgICAgaml0Lmp1bXAoaW5pdExvb3ApOworICAgICAg
ICBzdG9yZTY0KHVuZGVmaW5lZEdQUiwgQmFzZUluZGV4KEdQUkluZm86OmNhbGxGcmFtZVJlZ2lz
dGVyLCBpdGVyYXRvckdQUiwgVGltZXNPbmUpKTsKKyAgICAgICAgc3ViNjQoVHJ1c3RlZEltbTMy
KHNpemVvZihSZWdpc3RlcikpLCBpdGVyYXRvckdQUik7CisgICAgICAgIGp1bXAoaW5pdExvb3Ap
OwogICAgIH0KLSAgICBpbml0RG9uZS5saW5rKCZqaXQpOworICAgIGluaXREb25lLmxpbmsodGhp
cyk7CiAKLSAgICAvLyBlbWl0V3JpdGVCYXJyaWVyKG1fY29kZUJsb2NrKS4KLSAgICBqaXQubG9h
ZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIGFyZ3VtZW50R1BSMSk7
Ci0gICAgSnVtcCBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuID0gaml0LmJhcnJpZXJCcmFuY2go
dm0sIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKKyAgICAvLyBJbXBsZW1lbnRpbmcgZW1p
dFdyaXRlQmFycmllcihtX2NvZGVCbG9jaykuCisgICAgSnVtcCBvd25lcklzUmVtZW1iZXJlZE9y
SW5FZGVuID0gYmFycmllckJyYW5jaCh2bSwgY29kZUJsb2NrR1BSLCBhcmd1bWVudEdQUjIpOwog
Ci0gICAgaml0Lm1vdmUoY2FuQmVPcHRpbWl6ZWRHUFIsIEdQUkluZm86Om51bWJlclRhZ1JlZ2lz
dGVyKTsgLy8gc2F2ZS4KLSAgICBqaXQuc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUob3BlcmF0aW9u
V3JpdGVCYXJyaWVyU2xvd1BhdGgpPigmdm0sIGFyZ3VtZW50R1BSMSk7Ci0gICAgaml0LnByZXBh
cmVDYWxsT3BlcmF0aW9uKHZtKTsKLSAgICBDYWxsIG9wZXJhdGlvbldyaXRlQmFycmllckNhbGwg
PSBqaXQuY2FsbChPcGVyYXRpb25QdHJUYWcpOworICAgIHNldHVwQXJndW1lbnRzPGRlY2x0eXBl
KG9wZXJhdGlvbldyaXRlQmFycmllclNsb3dQYXRoKT4oJnZtLCBjb2RlQmxvY2tHUFIpOworICAg
IHByZXBhcmVDYWxsT3BlcmF0aW9uKHZtKTsKKyAgICBDYWxsIG9wZXJhdGlvbldyaXRlQmFycmll
ckNhbGwgPSBjYWxsKE9wZXJhdGlvblB0clRhZyk7CisKKyAgICBpZiAoY2FuQmVPcHRpbWl6ZWQp
CisgICAgICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCBj
b2RlQmxvY2tHUFIpOwogCi0gICAgaml0Lm1vdmUoR1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0ZXIs
IGNhbkJlT3B0aW1pemVkR1BSKTsgLy8gcmVzdG9yZS4KLSAgICBqaXQubW92ZShUcnVzdGVkSW1t
NjQoSlNWYWx1ZTo6TnVtYmVyVGFnKSwgR1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0ZXIpOwotICAg
IG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4ubGluaygmaml0KTsKKyAgICBvd25lcklzUmVtZW1i
ZXJlZE9ySW5FZGVuLmxpbmsodGhpcyk7CiAKICNpZiBFTkFCTEUoREZHX0pJVCkKKyAgICAvLyBJ
bXBsZW1lbnRpbmcgZW1pdEVudGVyT3B0aW1pemF0aW9uQ2hlY2soKS4KICAgICBDYWxsIG9wZXJh
dGlvbk9wdGltaXplQ2FsbDsKLSAgICBpZiAoT3B0aW9uczo6dXNlREZHSklUKCkpIHsKLSAgICAg
ICAgLy8gZW1pdEVudGVyT3B0aW1pemF0aW9uQ2hlY2soKS4KKyAgICBpZiAoY2FuQmVPcHRpbWl6
ZWQpIHsKICAgICAgICAgSnVtcExpc3Qgc2tpcE9wdGltaXplOwogCi0gICAgICAgIHNraXBPcHRp
bWl6ZS5hcHBlbmQoaml0LmJyYW5jaFRlc3QzMihaZXJvLCBjYW5CZU9wdGltaXplZEdQUikpOwor
ICAgICAgICBza2lwT3B0aW1pemUuYXBwZW5kKGJyYW5jaEFkZDMyKFNpZ25lZCwgVHJ1c3RlZElt
bTMyKE9wdGlvbnM6OmV4ZWN1dGlvbkNvdW50ZXJJbmNyZW1lbnRGb3JFbnRyeSgpKSwgQWRkcmVz
cyhjb2RlQmxvY2tHUFIsIENvZGVCbG9jazo6b2Zmc2V0T2ZKSVRFeGVjdXRlQ291bnRlcigpKSkp
OwogCi0gICAgICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJs
b2NrKSwgYXJndW1lbnRHUFIxKTsKLSAgICAgICAgc2tpcE9wdGltaXplLmFwcGVuZChqaXQuYnJh
bmNoQWRkMzIoU2lnbmVkLCBUcnVzdGVkSW1tMzIoT3B0aW9uczo6ZXhlY3V0aW9uQ291bnRlcklu
Y3JlbWVudEZvckVudHJ5KCkpLCBBZGRyZXNzKGFyZ3VtZW50R1BSMSwgQ29kZUJsb2NrOjpvZmZz
ZXRPZkpJVEV4ZWN1dGVDb3VudGVyKCkpKSk7CisgICAgICAgIGNvcHlMTEludEJhc2VsaW5lQ2Fs
bGVlU2F2ZXNGcm9tRnJhbWVPclJlZ2lzdGVyVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIo
dm0udG9wRW50cnlGcmFtZSk7CiAKLSAgICAgICAgaml0LmNvcHlMTEludEJhc2VsaW5lQ2FsbGVl
U2F2ZXNGcm9tRnJhbWVPclJlZ2lzdGVyVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0u
dG9wRW50cnlGcmFtZSk7CisgICAgICAgIHNldHVwQXJndW1lbnRzPGRlY2x0eXBlKG9wZXJhdGlv
bk9wdGltaXplKT4oJnZtLCBUcnVzdGVkSW1tMzIoMCkpOworICAgICAgICBwcmVwYXJlQ2FsbE9w
ZXJhdGlvbih2bSk7CisgICAgICAgIG9wZXJhdGlvbk9wdGltaXplQ2FsbCA9IGNhbGwoT3BlcmF0
aW9uUHRyVGFnKTsKIAotICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUob3BlcmF0
aW9uT3B0aW1pemUpPigmdm0sIFRydXN0ZWRJbW0zMigwKSk7Ci0gICAgICAgIGppdC5wcmVwYXJl
Q2FsbE9wZXJhdGlvbih2bSk7Ci0gICAgICAgIG9wZXJhdGlvbk9wdGltaXplQ2FsbCA9IGppdC5j
YWxsKE9wZXJhdGlvblB0clRhZyk7Ci0KLSAgICAgICAgc2tpcE9wdGltaXplLmFwcGVuZChqaXQu
YnJhbmNoVGVzdFB0cihaZXJvLCByZXR1cm5WYWx1ZUdQUikpOwotICAgICAgICBqaXQuZmFySnVt
cChyZXR1cm5WYWx1ZUdQUiwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOworICAgICAgICBz
a2lwT3B0aW1pemUuYXBwZW5kKGJyYW5jaFRlc3RQdHIoWmVybywgcmV0dXJuVmFsdWVHUFIpKTsK
KyAgICAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0
ZXIpOwogCi0gICAgICAgIHNraXBPcHRpbWl6ZS5saW5rKCZqaXQpOworICAgICAgICBza2lwT3B0
aW1pemUubGluayh0aGlzKTsKICAgICB9CiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCiAKICNp
ZiBDUFUoWDg2XzY0KQotICAgIGppdC5wb3AoWDg2UmVnaXN0ZXJzOjplYnApOworICAgIHBvcChY
ODZSZWdpc3RlcnM6OmVicCk7CiAjZWxpZiBDUFUoQVJNNjQpCi0gICAgaml0LnBvcFBhaXIoZnJh
bWVQb2ludGVyUmVnaXN0ZXIsIGxpbmtSZWdpc3Rlcik7CisgICAgcG9wUGFpcihmcmFtZVBvaW50
ZXJSZWdpc3RlciwgbGlua1JlZ2lzdGVyKTsKICNlbmRpZgotICAgIGppdC5yZXQoKTsKKyAgICBy
ZXQoKTsKIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQs
IExpbmtCdWZmZXI6OlByb2ZpbGU6OkV4dHJhQ1RJVGh1bmspOworICAgIExpbmtCdWZmZXIgcGF0
Y2hCdWZmZXIoKnRoaXMsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6RXh0
cmFDVElUaHVuayk7CiAgICAgcGF0Y2hCdWZmZXIubGluayhvcGVyYXRpb25Xcml0ZUJhcnJpZXJD
YWxsLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbldyaXRlQmFycmllclNs
b3dQYXRoKSk7CiAjaWYgRU5BQkxFKERGR19KSVQpCi0gICAgaWYgKE9wdGlvbnM6OnVzZURGR0pJ
VCgpKQorICAgIGlmIChjYW5CZU9wdGltaXplZCkKICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhv
cGVyYXRpb25PcHRpbWl6ZUNhbGwsIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0
aW9uT3B0aW1pemUpKTsKICNlbmRpZgotICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVm
ZmVyLCBKSVRUaHVua1B0clRhZywgIkJhc2VsaW5lOiBvcF9lbnRlcl9oYW5kbGVyIik7CisgICAg
cmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCB0aHVua05h
bWUpOworfQorCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6b3Bf
ZW50ZXJfY2FuQmVPcHRpbWl6ZWRfR2VuZXJhdG9yKFZNJiB2bSkKK3sKKyAgICBKSVQgaml0KHZt
KTsKKyAgICBjb25zdGV4cHIgYm9vbCBjYW5CZU9wdGltaXplZCA9IHRydWU7CisgICAgcmV0dXJu
IGppdC5vcF9lbnRlcl9HZW5lcmF0b3Iodm0sIGNhbkJlT3B0aW1pemVkLCAiQmFzZWxpbmU6IG9w
X2VudGVyX2NhbkJlT3B0aW1pemVkIik7Cit9CisKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gSklUOjpvcF9lbnRlcl9jYW5ub3RCZU9wdGltaXplZF9HZW5lcmF0b3IoVk0m
IHZtKQoreworICAgIEpJVCBqaXQodm0pOworICAgIGNvbnN0ZXhwciBib29sIGNhbkJlT3B0aW1p
emVkID0gZmFsc2U7CisgICAgcmV0dXJuIGppdC5vcF9lbnRlcl9HZW5lcmF0b3Iodm0sIGNhbkJl
T3B0aW1pemVkLCAiQmFzZWxpbmU6IG9wX2VudGVyX2Nhbm5vdEJlT3B0aW1pemVkIik7CiB9CiAj
ZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKQEAgLTE0MTYsNiArMTQyOCw3IEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbSgKIAogI2VuZGlmIC8vIFVT
RShKU1ZBTFVFNjQpCiAKKyNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiB2b2lkIEpJVDo6
ZW1pdF9vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQogewogI2lm
IFVTRShKU1ZBTFVFNjQpCkBAIC0xNDY5LDYgKzE0ODIsMTU3IEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9sb29wX2hpbnQoY29uc3QgSW4KICAgICBVTlVTRURfUEFSQU0oaXRlcik7CiAjZW5kaWYK
IH0KKyNlbHNlIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQorCit2b2lkIEpJVDo6ZW1pdF9v
cF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQoreworICAgIFZNJiB2
bSA9IHRoaXMtPnZtKCk7CisgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2Rl
SW5kZXgub2Zmc2V0KCk7CisgICAgQVNTRVJUKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQp
ID09IG1fYnl0ZWNvZGVJbmRleCk7CisgICAgQVNTRVJUKG1fY29kZUJsb2NrLT5pbnN0cnVjdGlv
bkF0KG1fYnl0ZWNvZGVJbmRleCkgPT0gaW5zdHJ1Y3Rpb24pOworCisgICAgY29uc3RleHByIEdQ
UlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q3OworCisgICAgaWYgKFVOTElLRUxZKE9wdGlv
bnM6OnJldHVybkVhcmx5RnJvbUluZmluaXRlTG9vcHNGb3JGdXp6aW5nKCkgJiYgbV9jb2RlQmxv
Y2stPmxvb3BIaW50c0FyZUVsaWdpYmxlRm9yRnV6emluZ0Vhcmx5UmV0dXJuKCkpKSB7CisgICAg
ICAgIGNvbnN0ZXhwciBHUFJSZWcgbG9vcEhpbnRFeGVjdXRpb25Db3VudGVyR1BSID0gcmVnVDY7
CisgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgY2FuQmVPcHRpbWl6ZWRHUFIgPSByZWdUNTsKKwor
ICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0
R1BSKTsKKyAgICAgICAgdWludDY0X3QqIHB0ciA9IHZtLmdldExvb3BIaW50RXhlY3V0aW9uQ291
bnRlcihpbnN0cnVjdGlvbik7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihwdHIpLCBsb29w
SGludEV4ZWN1dGlvbkNvdW50ZXJHUFIpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihjYW5C
ZU9wdGltaXplZCgpKSwgY2FuQmVPcHRpbWl6ZWRHUFIpOworICAgICAgICBlbWl0TmFrZWROZWFy
Q2FsbCh2bS5nZXRDVElTdHViKG9wX2xvb3BfaGludF9mdXp6R2VuZXJhdG9yKS5yZXRhZ2dlZENv
ZGU8Tm9QdHJUYWc+KCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisjaWYgRU5BQkxFKERG
R19KSVQpCisgICAgaWYgKGNhbkJlT3B0aW1pemVkKCkpIHsKKyAgICAgICAgbW92ZShUcnVzdGVk
SW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CisgICAgICAgIGVtaXRO
YWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIob3BfbG9vcF9oaW50R2VuZXJhdG9yKS5yZXRhZ2dl
ZENvZGU8Tm9QdHJUYWc+KCkpOworICAgIH0KKyNlbmRpZgorfQorCitNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6b3BfbG9vcF9oaW50X2Z1enpHZW5lcmF0b3IoVk0m
IHZtKQoreworICAgIC8vIFRoZSB0aHVuayBnZW5lcmF0ZWQgYnkgdGhpcyBmdW5jdGlvbiBjYW4g
b25seSB3b3JrIHdpdGggdGhlIExMSW50IC8gQmFzZWxpbmUgSklUIGJlY2F1c2UKKyAgICAvLyBp
dCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2
YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCisgICAgLy8gREZHL0ZUTCBtYXkg
aW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2gg
bWF5IG5vdCBtYXRjaAorICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCisgICAgSklUIGpp
dCh2bSk7CisKKyAgICBSRUxFQVNFX0FTU0VSVChPcHRpb25zOjpyZXR1cm5FYXJseUZyb21JbmZp
bml0ZUxvb3BzRm9yRnV6emluZygpKTsKKworICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CisK
KyAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDc7IC8vIGluY29t
aW5nLgorICAgIGNvbnN0ZXhwciBHUFJSZWcgbG9vcEhpbnRFeGVjdXRpb25Db3VudGVyR1BSID0g
cmVnVDY7IC8vIGluY29taW5nCisgICAgY29uc3RleHByIEdQUlJlZyBjYW5CZU9wdGltaXplZEdQ
UiA9IHJlZ1Q1OworICAgIGNvbnN0ZXhwciBHUFJSZWcgY29kZUJsb2NrR1BSID0gcmVnVDQ7CisK
KyAgICBVTlVTRURfUEFSQU0oYnl0ZWNvZGVPZmZzZXRHUFIpOyAvLyBwYXNzIHRocnUgdG8gb3Bf
bG9vcF9oaW50R2VuZXJhdG9yLgorICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1l
U2xvdDo6Y29kZUJsb2NrKSwgY29kZUJsb2NrR1BSKTsKKworICAgIGppdC5sb2FkNjQoQWRkcmVz
cyhsb29wSGludEV4ZWN1dGlvbkNvdW50ZXJHUFIpLCByZWdUMCk7CisgICAgYXV0byBza2lwRWFy
bHlSZXR1cm4gPSBqaXQuYnJhbmNoNjQoQmVsb3csIHJlZ1QwLCBUcnVzdGVkSW1tNjQoT3B0aW9u
czo6ZWFybHlSZXR1cm5Gcm9tSW5maW5pdGVMb29wc0xpbWl0KCkpKTsKKworICAgIGppdC5sb2Fk
UHRyKEFkZHJlc3MoY29kZUJsb2NrR1BSLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0
KCkpLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisKKyNpZiBDUFUoWDg2XzY0KQorICAgIC8v
IFBvcCBiYWNrIHRvIGNhbGxlciBmcmFtZSBzbyB0aGF0IHdlIGNhbiBmb3JjZSBhbiBlYXJseSBy
ZXR1cm4gZnJvbSB0aGVyZS4KKyAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bTMyKHNpemVvZihDUFVSZWdpc3RlcikpLCBYODZSZWdpc3RlcnM6OmVzcCk7CisjZW5kaWYKKwor
ICAgIGppdC5jaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOworICAgIGppdC5lbWl0UmVzdG9y
ZUNhbGxlZVNhdmVzRm9yQmFzZWxpbmVKSVQoKTsKKyAgICBqaXQuZW1pdEZ1bmN0aW9uRXBpbG9n
dWUoKTsKKyAgICBqaXQucmV0KCk7CisKKyAgICBza2lwRWFybHlSZXR1cm4ubGluaygmaml0KTsK
KyAgICBqaXQuYWRkNjQoVHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7CisgICAgaml0LnN0b3JlNjQo
cmVnVDAsIEFkZHJlc3MobG9vcEhpbnRFeGVjdXRpb25Db3VudGVyR1BSKSk7CisKKyNpZiAhRU5B
QkxFKERGR19KSVQpCisgICAgVU5VU0VEX1BBUkFNKGNhbkJlT3B0aW1pemVkR1BSKTsKKyAgICBq
aXQucmV0KCk7CisKKyNlbHNlIC8vIEVOQUJMRShERkdfSklUKQorICAgIEp1bXAgY2FuQmVPcHRp
bWl6ZWQgPSBqaXQuYnJhbmNoVGVzdDMyKE5vblplcm8sIGNhbkJlT3B0aW1pemVkR1BSKTsKKyAg
ICBqaXQucmV0KCk7CisKKyAgICBjYW5CZU9wdGltaXplZC5saW5rKCZqaXQpOworICAgIGppdC51
bnRhZ1JldHVybkFkZHJlc3MoKTsKKyAgICBKdW1wIGxvb3BIaW50VGh1bmtKdW1wID0gaml0Lmp1
bXAoKTsKKyNlbmRpZiAvLyAhRU5BQkxFKERGR19KSVQpCisKKyAgICBMaW5rQnVmZmVyIHBhdGNo
QnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpFeHRyYUNU
SVRodW5rKTsKKyNpZiBFTkFCTEUoREZHX0pJVCkKKyAgICBhdXRvIGxvb3BIaW50VGh1bmsgPSB2
bS5nZXRDVElTdHViKG9wX2xvb3BfaGludEdlbmVyYXRvcik7CisgICAgcGF0Y2hCdWZmZXIubGlu
ayhsb29wSGludFRodW5rSnVtcCwgQ29kZUxvY2F0aW9uTGFiZWwobG9vcEhpbnRUaHVuay5yZXRh
Z2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKKyNlbmRpZgorICAgIHJldHVybiBGSU5BTElaRV9DT0RF
KHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgIkJhc2VsaW5lOiBvcF9sb29wX2hpbnRfZnV6
eiIpOworfQorCisjaWYgRU5BQkxFKERGR19KSVQpCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHJUYWc+IEpJVDo6b3BfbG9vcF9oaW50R2VuZXJhdG9yKFZNJiB2bSkKK3sKKyAgICAv
LyBUaGUgdGh1bmsgZ2VuZXJhdGVkIGJ5IHRoaXMgZnVuY3Rpb24gY2FuIG9ubHkgd29yayB3aXRo
IHRoZSBMTEludCAvIEJhc2VsaW5lIEpJVCBiZWNhdXNlCisgICAgLy8gaXQgbWFrZXMgYXNzdW1w
dGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBD
YWxsRnJhbWU6OmNvZGVCbG9jaygpLgorICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlv
bnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gK
KyAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgorICAgIEpJVCBqaXQodm0pOworCisgICAg
aml0LnRhZ1JldHVybkFkZHJlc3MoKTsKKworICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVP
ZmZzZXRHUFIgPSByZWdUNzsgLy8gaW5jb21pbmcuCisgICAgY29uc3RleHByIEdQUlJlZyBjb2Rl
QmxvY2tHUFIgPSByZWdUNjsKKyAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNs
b3Q6OmNvZGVCbG9jayksIGNvZGVCbG9ja0dQUik7CisKKyAgICAvLyBFbWl0IHRoZSBKSVQgb3B0
aW1pemF0aW9uIGNoZWNrOgorICAgIEp1bXAgbmVlZE9wdGltaXphdGlvbkNoZWNrID0gaml0LmJy
YW5jaEFkZDMyKFBvc2l0aXZlT3JaZXJvLCBUcnVzdGVkSW1tMzIoT3B0aW9uczo6ZXhlY3V0aW9u
Q291bnRlckluY3JlbWVudEZvckxvb3AoKSksCisgICAgICAgICAgICBBZGRyZXNzKGNvZGVCbG9j
a0dQUiwgQ29kZUJsb2NrOjpvZmZzZXRPZkpJVEV4ZWN1dGVDb3VudGVyKCkpKTsKKyAgICBqaXQu
cmV0KCk7CisKKyAgICBuZWVkT3B0aW1pemF0aW9uQ2hlY2subGluaygmaml0KTsKKworI2lmIENQ
VShYODZfNjQpCisgICAgaml0LnB1c2goWDg2UmVnaXN0ZXJzOjplYnApOworI2VsaWYgQ1BVKEFS
TTY0KQorICAgIGppdC5wdXNoUGFpcihmcmFtZVBvaW50ZXJSZWdpc3RlciwgbGlua1JlZ2lzdGVy
KTsKKyNlbmRpZgorCisgICAgaml0LmNvcHlMTEludEJhc2VsaW5lQ2FsbGVlU2F2ZXNGcm9tRnJh
bWVPclJlZ2lzdGVyVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0udG9wRW50cnlGcmFt
ZSk7CisKKyAgICBqaXQuc3RvcmUzMihieXRlY29kZU9mZnNldEdQUiwgQ0NhbGxIZWxwZXJzOjp0
YWdGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKTsKKyAgICBq
aXQubHNoaWZ0MzIoVHJ1c3RlZEltbTMyKEJ5dGVjb2RlSW5kZXg6OmNoZWNrcG9pbnRTaGlmdCks
IGJ5dGVjb2RlT2Zmc2V0R1BSKTsKKyAgICBqaXQuc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUob3Bl
cmF0aW9uT3B0aW1pemUpPihUcnVzdGVkSW1tUHRyKCZ2bSksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsK
KyAgICBqaXQucHJlcGFyZUNhbGxPcGVyYXRpb24odm0pOworICAgIENhbGwgb3BlcmF0aW9uQ2Fs
bCA9IGppdC5jYWxsKE9wZXJhdGlvblB0clRhZyk7CisgICAgCisjaWYgQ1BVKFg4Nl82NCkKKyAg
ICBqaXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDIgKiBzaXplb2YoQ1BVUmVn
aXN0ZXIpKSwgWDg2UmVnaXN0ZXJzOjplc3ApOworI2VsaWYgQ1BVKEFSTTY0KQorICAgIGppdC5w
b3BQYWlyKGZyYW1lUG9pbnRlclJlZ2lzdGVyLCBsaW5rUmVnaXN0ZXIpOworI2VuZGlmCisKKyAg
ICBKdW1wIGhhc09wdGltaXplZEVudHJ5ID0gaml0LmJyYW5jaFRlc3RQdHIoTm9uWmVybywgcmV0
dXJuVmFsdWVHUFIpOworICAgIGppdC5yZXQoKTsKKworICAgIGhhc09wdGltaXplZEVudHJ5Lmxp
bmsoJmppdCk7CisgICAgaWYgKEFTU0VSVF9FTkFCTEVEKSB7CisgICAgICAgIEp1bXAgb2sgPSBq
aXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZSwgcmV0dXJuVmFsdWVHUFIsIFRydXN0
ZWRJbW1QdHIoYml0d2lzZV9jYXN0PHZvaWQqPihzdGF0aWNfY2FzdDxpbnRwdHJfdD4oMTAwMCkp
KSk7CisgICAgICAgIGppdC5hYm9ydFdpdGhSZWFzb24oSklUVW5yZWFzb25hYmxlTG9vcEhpbnRK
dW1wVGFyZ2V0KTsKKyAgICAgICAgb2subGluaygmaml0KTsKKyAgICB9CisKKyAgICBqaXQuZmFy
SnVtcChyZXR1cm5WYWx1ZUdQUiwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOworCisgICAg
TGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6
UHJvZmlsZTo6RXh0cmFDVElUaHVuayk7CisgICAgcGF0Y2hCdWZmZXIubGluayhvcGVyYXRpb25D
YWxsLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbk9wdGltaXplKSk7Cisg
ICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCAiQmFz
ZWxpbmU6IG9wX2xvb3BfaGludCIpOworfQorI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorI2Vu
ZGlmIC8vICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAogdm9pZCBKSVQ6OmVtaXRfb3BfY2hl
Y2tfdHJhcHMoY29uc3QgSW5zdHJ1Y3Rpb24qKQogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9TbG93UGF0aENhbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvU2xvd1BhdGhDYWxsLmNwcAkocmV2aXNpb24gMjc4MDI5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9TbG93UGF0aENhbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw4
ICs0NSw4IEBAIHZvaWQgSklUU2xvd1BhdGhDYWxsOjpjYWxsKCkKICAgICBBU1NFUlQoQnl0ZWNv
ZGVJbmRleChieXRlY29kZU9mZnNldCkgPT0gbV9qaXQtPm1fYnl0ZWNvZGVJbmRleCk7CiAKICAg
ICBVTlVTRURfVkFSSUFCTEUobV9wYyk7Ci0gICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9m
ZnNldFJlZyA9IEdQUkluZm86OmFyZ3VtZW50R1BSMTsKLSAgICBtX2ppdC0+bW92ZShKSVQ6OlRy
dXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0UmVnKTsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gR1BSSW5mbzo6YXJndW1lbnRHUFIxOwor
ICAgIG1faml0LT5tb3ZlKEpJVDo6VHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNv
ZGVPZmZzZXRHUFIpOwogICAgIG1faml0LT5lbWl0TmFrZWROZWFyQ2FsbCh2bS5qaXRTdHVicy0+
Y3RpU2xvd1BhdGhGdW5jdGlvblN0dWIodm0sIG1fc2xvd1BhdGhGdW5jdGlvbikucmV0YWdnZWRD
b2RlPE5vUHRyVGFnPigpKTsKIH0KIApAQCAtNTQsNyArNTQsNyBAQCBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiB7CiAgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAotICAg
IGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRSZWcgPSBKSVQ6OmFyZ3VtZW50R1BSMTsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gSklUOjphcmd1bWVudEdQ
UjE7CiAKICNpZiBDUFUoWDg2XzY0KQogICAgIGppdC5wdXNoKFg4NlJlZ2lzdGVyczo6ZWJwKTsK
QEAgLTYzLDE0ICs2MywxNCBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+
IEpJCiAgICAgaml0LnB1c2hQYWlyKENDYWxsSGVscGVyczo6ZnJhbWVQb2ludGVyUmVnaXN0ZXIs
IENDYWxsSGVscGVyczo6bGlua1JlZ2lzdGVyKTsKICNlbmRpZgogCi0gICAgaml0LnN0b3JlMzIo
Ynl0ZWNvZGVPZmZzZXRSZWcsIENDYWxsSGVscGVyczo6dGFnRm9yKENhbGxGcmFtZVNsb3Q6OmFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSk7CisgICAgaml0LnN0b3JlMzIoYnl0ZWNvZGVPZmZz
ZXRHUFIsIENDYWxsSGVscGVyczo6dGFnRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzKSk7CiAKICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OmFkZHJlc3NG
b3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKIAog
ICAgIGppdC5wcmVwYXJlQ2FsbE9wZXJhdGlvbih2bSk7CiAKICAgICBqaXQubG9hZFB0cihDQ2Fs
bEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBDb2RlQmxvY2s6Om9mZnNl
dE9mSW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcigpKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKLSAg
ICBzdGF0aWNfYXNzZXJ0KEpJVDo6YXJndW1lbnRHUFIxID09IGJ5dGVjb2RlT2Zmc2V0UmVnKTsK
KyAgICBzdGF0aWNfYXNzZXJ0KEpJVDo6YXJndW1lbnRHUFIxID09IGJ5dGVjb2RlT2Zmc2V0R1BS
KTsKICAgICBqaXQuYWRkUHRyKEdQUkluZm86OmFyZ3VtZW50R1BSMCwgR1BSSW5mbzo6YXJndW1l
bnRHUFIxKTsKICAgICBqaXQubW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5m
bzo6YXJndW1lbnRHUFIwKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVu
a0dlbmVyYXRvcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
VGh1bmtHZW5lcmF0b3JzLmNwcAkocmV2aXNpb24gMjc4MDI5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MSwxMSAr
ODEsMTEgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBwbwogewogICAg
IENDYWxsSGVscGVycyBqaXQ7CiAKLSNpZiBDUFUoWDg2XzY0KQotICAgIGppdC5hZGRQdHIoQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMiAqIHNpemVvZihDUFVSZWdpc3RlcikpLCBYODZSZWdp
c3RlcnM6OmVzcCk7Ci0jZWxpZiBDUFUoQVJNNjQpCi0gICAgaml0LnBvcFBhaXIoQ0NhbGxIZWxw
ZXJzOjpmcmFtZVBvaW50ZXJSZWdpc3RlciwgQ0NhbGxIZWxwZXJzOjpsaW5rUmVnaXN0ZXIpOwot
I2VuZGlmCisvLyNpZiBDUFUoWDg2XzY0KQorICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tMzIoMiAqIHNpemVvZihDUFVSZWdpc3RlcikpLCBDQ2FsbEhlbHBlcnM6OnN0YWNr
UG9pbnRlclJlZ2lzdGVyKTsKKy8vI2VsaWYgQ1BVKEFSTTY0KQorLy8gICAgaml0LnBvcFBhaXIo
Q0NhbGxIZWxwZXJzOjpmcmFtZVBvaW50ZXJSZWdpc3RlciwgQ0NhbGxIZWxwZXJzOjpsaW5rUmVn
aXN0ZXIpOworLy8jZW5kaWYKIAogICAgIENDYWxsSGVscGVyczo6SnVtcCBjb250aW51YXRpb24g
PSBqaXQuanVtcCgpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRp
b25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRp
b25zLmNwcAkocmV2aXNpb24gMjc4MDI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvT3B0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2OCw2ICs1NjgsOCBAQCB2b2lkIE9w
dGlvbnM6OnJlY29tcHV0ZURlcGVuZGVudE9wdGlvbnMoCiAKICAgICBpZiAoT3B0aW9uczo6dmVy
Ym9zZVZlcmlmeUdDKCkpCiAgICAgICAgIE9wdGlvbnM6OnZlcmlmeUdDKCkgPSB0cnVlOworCisg
ICAgT3B0aW9uczo6dXNlRG9sbGFyVk0oKSA9IHRydWU7IC8vIG1sYW0gVEVTVAogfQogCiBpbmxp
bmUgdm9pZCogT3B0aW9uczo6YWRkcmVzc09mT3B0aW9uKE9wdGlvbnM6OklEIGlkKQpAQCAtNjA3
LDkgKzYwOSw5IEBAIHZvaWQgT3B0aW9uczo6aW5pdGlhbGl6ZSgpCiAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVChPcHRpb25zOjphZGRyZXNzT2ZPcHRpb24oZm9yY2VPU1JFeGl0VG9MTEludElE
KSA9PSAgJk9wdGlvbnM6OmZvcmNlT1NSRXhpdFRvTExJbnQoKSk7CiAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVChPcHRpb25zOjphZGRyZXNzT2ZPcHRpb25EZWZhdWx0KGZvcmNlT1NSRXhpdFRv
TExJbnRJRCkgPT0gICZPcHRpb25zOjpmb3JjZU9TUkV4aXRUb0xMSW50RGVmYXVsdCgpKTsKIAot
I2lmbmRlZiBOREVCVUcKKy8vI2lmbmRlZiBOREVCVUcKICAgICAgICAgICAgIENvbmZpZzo6ZW5h
YmxlUmVzdHJpY3RlZE9wdGlvbnMoKTsKLSNlbmRpZgorLy8jZW5kaWYKICAgICAgICAgICAgIC8v
IEluaXRpYWxpemUgZWFjaCBvZiB0aGUgb3B0aW9ucyB3aXRoIHRoZWlyIGRlZmF1bHQgdmFsdWVz
OgogI2RlZmluZSBJTklUX09QVElPTih0eXBlXywgbmFtZV8sIGRlZmF1bHRWYWx1ZV8sIGF2YWls
YWJpbGl0eV8sIGRlc2NyaXB0aW9uXykgeyBcCiAgICAgICAgICAgICAgICAgYXV0byB2YWx1ZSA9
IGRlZmF1bHRWYWx1ZV87IFwK
</data>
<flag name="commit-queue"
          id="451331"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>430023</attachid>
            <date>2021-05-28 10:11:42 -0700</date>
            <delta_ts>2021-05-28 11:27:14 -0700</delta_ts>
            <desc>work in progress.</desc>
            <filename>wip-loop-hint+prologue+enter2.patch</filename>
            <type>text/plain</type>
            <size>46987</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNy
b0Fzc2VtYmxlckNvZGVSZWYuaAkocmV2aXNpb24gMjc4MjAzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaAkod29ya2luZyBjb3B5KQpA
QCAtMjM3LDcgKzIzNyw4IEBAIHB1YmxpYzoKICAgICBleHBsaWNpdCBSZXR1cm5BZGRyZXNzUHRy
KGNvbnN0IHZvaWQqIHJldHVybkFkZHJlc3MpCiAgICAgewogI2lmIENQVShBUk02NEUpCi0gICAg
ICAgIGFzc2VydElzTm90VGFnZ2VkKHJldHVybkFkZHJlc3MpOworLy8gICAgICAgIGFzc2VydElz
Tm90VGFnZ2VkKHJldHVybkFkZHJlc3MpOworICAgICAgICByZXR1cm5BZGRyZXNzID0gcmVtb3Zl
Q29kZVB0clRhZyhyZXR1cm5BZGRyZXNzKTsgLy8gbWxhbSBURVNUCiAgICAgICAgIHJldHVybkFk
ZHJlc3MgPSByZXRhZ0NvZGVQdHI8Tm9QdHJUYWcsIFJldHVybkFkZHJlc3NQdHJUYWc+KHJldHVy
bkFkZHJlc3MpOwogI2VuZGlmCiAgICAgICAgIG1fdmFsdWUgPSByZXR1cm5BZGRyZXNzOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24g
Mjc4MjAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xNzAsNiArMTcwLDcgQEAgcHVibGljOgogCiAgICAgdW5zaWduZWQq
IGFkZHJlc3NPZk51bVBhcmFtZXRlcnMoKSB7IHJldHVybiAmbV9udW1QYXJhbWV0ZXJzOyB9CiAg
ICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZk51bVBhcmFtZXRlcnMoKSB7IHJldHVybiBPQkpF
Q1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX251bVBhcmFtZXRlcnMpOyB9CisgICAgc3RhdGljIHB0
cmRpZmZfdCBvZmZzZXRPZk51bVZhcnMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJs
b2NrLCBtX251bVZhcnMpOyB9CiAKICAgICBDb2RlQmxvY2sqIGFsdGVybmF0aXZlKCkgY29uc3Qg
eyByZXR1cm4gc3RhdGljX2Nhc3Q8Q29kZUJsb2NrKj4obV9hbHRlcm5hdGl2ZS5nZXQoKSk7IH0K
ICAgICB2b2lkIHNldEFsdGVybmF0aXZlKFZNJiwgQ29kZUJsb2NrKik7CkBAIC00ODYsNiArNDg3
LDggQEAgcHVibGljOgogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAorICAgIHN0YXRp
YyBwdHJkaWZmX3Qgb2Zmc2V0T2ZBcmd1bWVudFZhbHVlUHJvZmlsZXMoKSB7IHJldHVybiBPQkpF
Q1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2FyZ3VtZW50VmFsdWVQcm9maWxlcyk7IH0KKwogICAg
IFZhbHVlUHJvZmlsZSYgdmFsdWVQcm9maWxlRm9yQnl0ZWNvZGVJbmRleChCeXRlY29kZUluZGV4
KTsKICAgICBTcGVjdWxhdGVkVHlwZSB2YWx1ZVByb2ZpbGVQcmVkaWN0aW9uRm9yQnl0ZWNvZGVJ
bmRleChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBCeXRlY29kZUluZGV4KTsKIApAQCAtODE5
LDcgKzgyMiw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBib29sIHdhc0NvbXBpbGVkV2l0aERl
YnVnZ2luZ09wY29kZXMoKSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+d2FzQ29tcGls
ZWRXaXRoRGVidWdnaW5nT3Bjb2RlcygpOyB9Ci0gICAgCisKICAgICAvLyBUaGlzIGlzIGludGVu
dGlvbmFsbHkgcHVibGljOyBpdCdzIHRoZSByZXNwb25zaWJpbGl0eSBvZiBhbnlvbmUgZG9pbmcg
YW55CiAgICAgLy8gb2YgdGhlIGZvbGxvd2luZyB0byBob2xkIHRoZSBsb2NrOgogICAgIC8vCkBA
IC05MDYsNiArOTA5LDggQEAgcHVibGljOgogCiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRP
Zk1ldGFkYXRhVGFibGUoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX21l
dGFkYXRhKTsgfQogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZJbnN0cnVjdGlvbnNSYXdQ
b2ludGVyKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9pbnN0cnVjdGlv
bnNSYXdQb2ludGVyKTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZTaG91bGRBbHdh
eXNCZUlubGluZWQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX3Nob3Vs
ZEFsd2F5c0JlSW5saW5lZCk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mVW5saW5r
ZWRDb2RlKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV91bmxpbmtlZENv
ZGUpOyB9CiAKICAgICBib29sIGxvb3BIaW50c0FyZUVsaWdpYmxlRm9yRnV6emluZ0Vhcmx5UmV0
dXJuKCkKICAgICB7CkBAIC0xMDE1LDggKzEwMjAsOCBAQCBwcml2YXRlOgogICAgIC8vIFRoaXMg
aXMgcmVsZXZhbnQgdG8gbm9uLURGRyBjb2RlIGJsb2NrcyB0aGF0IHNlcnZlIGFzIHRoZSBwcm9m
aWxlZCBjb2RlIGJsb2NrCiAgICAgLy8gZm9yIERGRyBjb2RlIGJsb2Nrcy4KICAgICBDb21wcmVz
c2VkTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVIb2xkZXIgbV9sYXp5T3BlcmFuZFZhbHVlUHJvZmls
ZXM7Ci0jZW5kaWYKICAgICBGaXhlZFZlY3RvcjxWYWx1ZVByb2ZpbGU+IG1fYXJndW1lbnRWYWx1
ZVByb2ZpbGVzOworI2VuZGlmCiAKICAgICAvLyBDb25zdGFudCBQb29sCiAgICAgQ09NUElMRV9B
U1NFUlQoc2l6ZW9mKFJlZ2lzdGVyKSA9PSBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSwg
UmVnaXN0ZXJfbXVzdF9iZV9zYW1lX3NpemVfYXNfV3JpdGVCYXJyaWVyX1Vua25vd24pOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCShyZXZpc2lv
biAyNzgyMDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMjYsNiArMzI2LDExIEBAIHB1YmxpYzoKICAgICAgICAgQVNT
RVJUKGNvZGVCbG9jayk7CiAKICAgICAgICAgY29uc3QgUmVnaXN0ZXJBdE9mZnNldExpc3QqIGNh
bGxlZVNhdmVzID0gY29kZUJsb2NrLT5jYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CisgICAgICAgIGVt
aXRTYXZlQ2FsbGVlU2F2ZXNGb3IoY2FsbGVlU2F2ZXMpOworICAgIH0KKworICAgIHZvaWQgZW1p
dFNhdmVDYWxsZWVTYXZlc0Zvcihjb25zdCBSZWdpc3RlckF0T2Zmc2V0TGlzdCogY2FsbGVlU2F2
ZXMpCisgICAgewogICAgICAgICBSZWdpc3RlclNldCBkb250U2F2ZVJlZ2lzdGVycyA9IFJlZ2lz
dGVyU2V0KFJlZ2lzdGVyU2V0OjpzdGFja1JlZ2lzdGVycygpLCBSZWdpc3RlclNldDo6YWxsRlBS
cygpKTsKICAgICAgICAgdW5zaWduZWQgcmVnaXN0ZXJDb3VudCA9IGNhbGxlZVNhdmVzLT5zaXpl
KCk7CiAKQEAgLTM5OSw2ICs0MDQsMTEgQEAgcHVibGljOgogICAgICAgICBlbWl0U2F2ZUNhbGxl
ZVNhdmVzRm9yKGNvZGVCbG9jaygpKTsKICAgICB9CiAKKyAgICB2b2lkIGVtaXRTYXZlQ2FsbGVl
U2F2ZXNGb3JCYXNlbGluZUpJVCgpCisgICAgeworICAgICAgICBlbWl0U2F2ZUNhbGxlZVNhdmVz
Rm9yKCZSZWdpc3RlckF0T2Zmc2V0TGlzdDo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVSZWdpc3Rl
cnMoKSk7CisgICAgfQorCiAgICAgdm9pZCBlbWl0U2F2ZVRoZW5NYXRlcmlhbGl6ZVRhZ1JlZ2lz
dGVycygpCiAgICAgewogI2lmIFVTRShKU1ZBTFVFNjQpCkBAIC00MTcsNiArNDI3LDExIEBAIHB1
YmxpYzoKICAgICAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlc0Zvcihjb2RlQmxvY2soKSk7CiAg
ICAgfQogCisgICAgdm9pZCBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzRm9yQmFzZWxpbmVKSVQoKQor
ICAgIHsKKyAgICAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlc0ZvcigmUmVnaXN0ZXJBdE9mZnNl
dExpc3Q6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOworICAgIH0KKwogICAg
IHZvaWQgZW1pdFJlc3RvcmVTYXZlZFRhZ1JlZ2lzdGVycygpCiAgICAgewogI2lmIFVTRShKU1ZB
TFVFNjQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCShyZXZpc2lvbiAyNzgyMDMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTgyLDcgKzgyLDcgQEAgSklUOjp+SklUKCkKIHsKIH0KIAotI2lmIEVOQUJMRShERkdfSklUKQor
I2lmIEVOQUJMRShERkdfSklUKSAmJiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiB2b2lkIEpJ
VDo6ZW1pdEVudGVyT3B0aW1pemF0aW9uQ2hlY2soKQogewogICAgIGlmICghY2FuQmVPcHRpbWl6
ZWQoKSkKQEAgLTEwMCw3ICsxMDAsNyBAQCB2b2lkIEpJVDo6ZW1pdEVudGVyT3B0aW1pemF0aW9u
Q2hlY2soKQogICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEdQUkluZm86OmNhbGxGcmFtZVJl
Z2lzdGVyKTsKICAgICBza2lwT3B0aW1pemUubGluayh0aGlzKTsKIH0KLSNlbmRpZgorI2VuZGlm
IC8vIEVOQUJMRShERkdfSklUKSAmJiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpKAogCiB2b2lk
IEpJVDo6ZW1pdE5vdGlmeVdyaXRlKFdhdGNocG9pbnRTZXQqIHNldCkKIHsKQEAgLTU3NCw3ICs1
NzQsOSBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgICAgICBERUZJ
TkVfU0xPV0NBU0VfT1Aob3Bfam5lcSkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2pz
dHJpY3RlcSkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2puc3RyaWN0ZXEpCisjaWYg
IUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3Bf
bG9vcF9oaW50KQorI2VuZGlmCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9jaGVja190
cmFwcykKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX21vZCkKICAgICAgICAgREVGSU5F
X1NMT1dDQVNFX09QKG9wX211bCkKQEAgLTY2MCw2ICs2NjIsMjcgQEAgdm9pZCBKSVQ6OnByaXZh
dGVDb21waWxlU2xvd0Nhc2VzKCkKICNlbmRpZgogfQogCisjZGVmaW5lIEZPUl9FQUNIX05PTl9Q
Uk9GSUxJTkdfUFJPTE9HVUVfR0VORVJBVE9SKHYpIFwKKyAgICB2KCFkb2VzUHJvZmlsaW5nLCAh
aXNDb25zdHJ1Y3RvciwgIWhhc0h1Z2VGcmFtZSwgcHJvbG9ndWVHZW5lcmF0b3IwLCBhcml0eUZp
eHVwX3Byb2xvZ3VlR2VuZXJhdG9yMCkgXAorICAgIHYoIWRvZXNQcm9maWxpbmcsICFpc0NvbnN0
cnVjdG9yLCAgaGFzSHVnZUZyYW1lLCBwcm9sb2d1ZUdlbmVyYXRvcjEsIGFyaXR5Rml4dXBfcHJv
bG9ndWVHZW5lcmF0b3IxKSBcCisgICAgdighZG9lc1Byb2ZpbGluZywgIGlzQ29uc3RydWN0b3Is
ICFoYXNIdWdlRnJhbWUsIHByb2xvZ3VlR2VuZXJhdG9yMiwgYXJpdHlGaXh1cF9wcm9sb2d1ZUdl
bmVyYXRvcjIpIFwKKyAgICB2KCFkb2VzUHJvZmlsaW5nLCAgaXNDb25zdHJ1Y3RvciwgIGhhc0h1
Z2VGcmFtZSwgcHJvbG9ndWVHZW5lcmF0b3IzLCBhcml0eUZpeHVwX3Byb2xvZ3VlR2VuZXJhdG9y
MykKKworI2lmIEVOQUJMRShERkdfSklUKQorI2RlZmluZSBGT1JfRUFDSF9QUk9GSUxJTkdfUFJP
TE9HVUVfR0VORVJBVE9SKHYpIFwKKyAgICB2KCBkb2VzUHJvZmlsaW5nLCAhaXNDb25zdHJ1Y3Rv
ciwgIWhhc0h1Z2VGcmFtZSwgcHJvbG9ndWVHZW5lcmF0b3I0LCBhcml0eUZpeHVwX3Byb2xvZ3Vl
R2VuZXJhdG9yNCkgXAorICAgIHYoIGRvZXNQcm9maWxpbmcsICFpc0NvbnN0cnVjdG9yLCAgaGFz
SHVnZUZyYW1lLCBwcm9sb2d1ZUdlbmVyYXRvcjUsIGFyaXR5Rml4dXBfcHJvbG9ndWVHZW5lcmF0
b3I1KSBcCisgICAgdiggZG9lc1Byb2ZpbGluZywgIGlzQ29uc3RydWN0b3IsICFoYXNIdWdlRnJh
bWUsIHByb2xvZ3VlR2VuZXJhdG9yNiwgYXJpdHlGaXh1cF9wcm9sb2d1ZUdlbmVyYXRvcjYpIFwK
KyAgICB2KCBkb2VzUHJvZmlsaW5nLCAgaXNDb25zdHJ1Y3RvciwgIGhhc0h1Z2VGcmFtZSwgcHJv
bG9ndWVHZW5lcmF0b3I3LCBhcml0eUZpeHVwX3Byb2xvZ3VlR2VuZXJhdG9yNykKKworI2Vsc2Ug
Ly8gbm90IEVOQUJMRShERkdfSklUKQorI2RlZmluZSBGT1JfRUFDSF9QUk9GSUxJTkdfUFJPTE9H
VUVfR0VORVJBVE9SKHYpCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNkZWZpbmUgRk9S
X0VBQ0hfUFJPTE9HVUVfR0VORVJBVE9SKHYpIFwKKyAgICBGT1JfRUFDSF9OT05fUFJPRklMSU5H
X1BST0xPR1VFX0dFTkVSQVRPUih2KSBcCisgICAgRk9SX0VBQ0hfUFJPRklMSU5HX1BST0xPR1VF
X0dFTkVSQVRPUih2KQorCiB2b2lkIEpJVDo6Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemlu
ZyhKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCiB7CiAgICAgREZHOjpDYXBhYmlsaXR5TGV2
ZWwgbGV2ZWwgPSBtX2NvZGVCbG9jay0+Y2FwYWJpbGl0eUxldmVsKCk7CkBAIC03MjIsNiArNzQ1
LDggQEAgdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbgogICAgICAgICBu
b3AoKTsKIAogICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKCk7CisKKyNpZiAhRU5BQkxFKEVYVFJB
X0NUSV9USFVOS1MpCiAgICAgZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKG1fY29kZUJsb2NrLCBD
YWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spOwogCiAgICAgTGFiZWwgYmVnaW5MYWJlbCh0aGlzKTsK
QEAgLTcyOSw2ICs3NTQsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxp
emluCiAgICAgaW50IGZyYW1lVG9wT2Zmc2V0ID0gc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29k
ZUJsb2NrKSAqIHNpemVvZihSZWdpc3Rlcik7CiAgICAgdW5zaWduZWQgbWF4RnJhbWVTaXplID0g
LWZyYW1lVG9wT2Zmc2V0OwogICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoZnJhbWVUb3BPZmZzZXQp
LCBjYWxsRnJhbWVSZWdpc3RlciwgcmVnVDEpOworCiAgICAgSnVtcExpc3Qgc3RhY2tPdmVyZmxv
dzsKICAgICBpZiAoVU5MSUtFTFkobWF4RnJhbWVTaXplID4gT3B0aW9uczo6cmVzZXJ2ZWRab25l
U2l6ZSgpKSkKICAgICAgICAgc3RhY2tPdmVyZmxvdy5hcHBlbmQoYnJhbmNoUHRyKEFib3ZlLCBy
ZWdUMSwgY2FsbEZyYW1lUmVnaXN0ZXIpKTsKQEAgLTc0MywxMSArNzY5LDEwIEBAIHZvaWQgSklU
Ojpjb21waWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW4KICAgICBpZiAobV9jb2RlQmxvY2stPmNv
ZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlKSB7CiAgICAgICAgIEFTU0VSVCghbV9ieXRlY29kZUlu
ZGV4KTsKICAgICAgICAgaWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewotICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBhcmd1bWVudCA9IDA7IGFyZ3VtZW50IDwgbV9jb2RlQmxvY2stPm51bVBh
cmFtZXRlcnMoKTsgKythcmd1bWVudCkgewotICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgaXMg
YSBjb25zdHJ1Y3RvciwgdGhlbiB3ZSB3YW50IHRvIHB1dCBpbiBhIGR1bW15IHByb2ZpbGluZyBz
aXRlICh0bwotICAgICAgICAgICAgICAgIC8vIGtlZXAgdGhpbmdzIGNvbnNpc3RlbnQpIGJ1dCB3
ZSBkb24ndCBhY3R1YWxseSB3YW50IHRvIHJlY29yZCB0aGUgZHVtbXkgdmFsdWUuCi0gICAgICAg
ICAgICAgICAgaWYgKG1fY29kZUJsb2NrLT5pc0NvbnN0cnVjdG9yKCkgJiYgIWFyZ3VtZW50KQot
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIC8vIElmIHRoaXMgaXMg
YSBjb25zdHJ1Y3RvciwgdGhlbiB3ZSB3YW50IHRvIHB1dCBpbiBhIGR1bW15IHByb2ZpbGluZyBz
aXRlICh0bworICAgICAgICAgICAgLy8ga2VlcCB0aGluZ3MgY29uc2lzdGVudCkgYnV0IHdlIGRv
bid0IGFjdHVhbGx5IHdhbnQgdG8gcmVjb3JkIHRoZSBkdW1teSB2YWx1ZS4KKyAgICAgICAgICAg
IHVuc2lnbmVkIHN0YXJ0QXJndW1lbnQgPSBtX2NvZGVCbG9jay0+aXNDb25zdHJ1Y3RvcigpID8g
MSA6IDA7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0gc3RhcnRBcmd1bWVu
dDsgYXJndW1lbnQgPCBtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpOyArK2FyZ3VtZW50KSB7
CiAgICAgICAgICAgICAgICAgaW50IG9mZnNldCA9IENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXRJ
bmNsdWRpbmdUaGlzKGFyZ3VtZW50KSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVy
KSk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAgICAgICAgICBKU1ZhbHVlUmVncyByZXN1
bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwpAQCAtNzYxLDcgKzc4NiwzNiBAQCB2b2lkIEpJ
VDo6Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluCiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KICAgICB9Ci0gICAgCisjZWxzZSAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKKyAgICBj
b25zdGV4cHIgR1BSUmVnIGZyYW1lVG9wT2Zmc2V0R1BSID0gcmVnVDc7CisgICAgY29uc3RleHBy
IEdQUlJlZyBjb2RlQmxvY2tHUFIgPSByZWdUNjsKKyAgICBBU1NFUlQoIW1fYnl0ZWNvZGVJbmRl
eCk7CisKKyAgICBpbnQgZnJhbWVUb3BPZmZzZXQgPSBzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9j
b2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKTsKKyAgICB1bnNpZ25lZCBtYXhGcmFtZVNpemUg
PSAtZnJhbWVUb3BPZmZzZXQ7CisKKyAgICBib29sIGRvZXNQcm9maWxpbmcgPSAobV9jb2RlQmxv
Y2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlKSAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCk7
CisgICAgYm9vbCBpc0NvbnN0cnVjdG9yID0gbV9jb2RlQmxvY2stPmlzQ29uc3RydWN0b3IoKTsK
KyAgICBib29sIGhhc0h1Z2VGcmFtZSA9IG1heEZyYW1lU2l6ZSA+IE9wdGlvbnM6OnJlc2VydmVk
Wm9uZVNpemUoKTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgVGh1bmtHZW5lcmF0b3IgZ2VuZXJh
dG9yc1tdID0geworI2RlZmluZSBVU0VfUFJPTE9HVUVfR0VORVJBVE9SKGRvZXNQcm9maWxpbmcs
IGlzQ29uc3RydWN0b3IsIGhhc0h1Z2VGcmFtZSwgbmFtZSwgYXJpdHlGaXh1cE5hbWUpIG5hbWUs
CisgICAgICAgIEZPUl9FQUNIX1BST0xPR1VFX0dFTkVSQVRPUihVU0VfUFJPTE9HVUVfR0VORVJB
VE9SKQorI3VuZGVmIFVTRV9QUk9MT0dVRV9HRU5FUkFUT1IKKyAgICB9OworICAgIHN0YXRpYyBj
b25zdGV4cHIgdW5zaWduZWQgbnVtYmVyT2ZHZW5lcmF0b3JzID0gc2l6ZW9mKGdlbmVyYXRvcnMp
IC8gc2l6ZW9mKGdlbmVyYXRvcnNbMF0pOworCisgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrKSwgY29kZUJsb2NrR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW02NChmcmFtZVRvcE9m
ZnNldCksIGZyYW1lVG9wT2Zmc2V0R1BSKTsKKworICAgIHVuc2lnbmVkIGdlbmVyYXRvclNlbGVj
dG9yID0gZG9lc1Byb2ZpbGluZyA8PCAyIHwgaXNDb25zdHJ1Y3RvciA8PCAxIHwgaGFzSHVnZUZy
YW1lIDw8IDA7CisgICAgUkVMRUFTRV9BU1NFUlQoZ2VuZXJhdG9yU2VsZWN0b3IgPCBudW1iZXJP
ZkdlbmVyYXRvcnMpOworICAgIGF1dG8gZ2VuZXJhdG9yID0gZ2VuZXJhdG9yc1tnZW5lcmF0b3JT
ZWxlY3Rvcl07CisgICAgZW1pdE5ha2VkTmVhckNhbGwodm0oKS5nZXRDVElTdHViKGdlbmVyYXRv
cikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKKworICAgIExhYmVsIGJvZHlMYWJlbCh0aGlz
KTsKKyNlbmRpZiAvLyAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCisKICAgICBSRUxFQVNFX0FT
U0VSVCghSklUQ29kZTo6aXNKSVQobV9jb2RlQmxvY2stPmppdFR5cGUoKSkpOwogCiAgICAgcHJp
dmF0ZUNvbXBpbGVNYWluUGFzcygpOwpAQCAtNzcyLDE2ICs4MjYsMTkgQEAgdm9pZCBKSVQ6OmNv
bXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbgogICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0
RW5kT2ZTbG93UGF0aChsYWJlbCgpKTsKICAgICBtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlci5h
cHBlbmRJdGVtKGxhYmVsKCksIFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlcjo6ZGVmYXVsdENvZGVP
cmlnaW4oKSk7CiAKKyNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAgICAgc3RhY2tPdmVy
Zmxvdy5saW5rKHRoaXMpOwogICAgIG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCk7
CiAgICAgaWYgKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKQogICAgICAgICBhZGRQdHIo
VHJ1c3RlZEltbTMyKC1zdGF0aWNfY2FzdDxpbnQzMl90PihtYXhGcmFtZUV4dGVudEZvclNsb3dQ
YXRoQ2FsbCkpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2FsbE9wZXJhdGlvbldpdGhD
YWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKG9wZXJhdGlvblRocm93U3RhY2tPdmVyZmxvd0Vy
cm9yLCBtX2NvZGVCbG9jayk7CisjZW5kaWYKIAogICAgIC8vIElmIHRoZSBudW1iZXIgb2YgcGFy
YW1ldGVycyBpcyAxLCB3ZSBuZXZlciByZXF1aXJlIGFyaXR5IGZpeHVwLgogICAgIGJvb2wgcmVx
dWlyZXNBcml0eUZpeHVwID0gbV9jb2RlQmxvY2stPm1fbnVtUGFyYW1ldGVycyAhPSAxOwogICAg
IGlmIChtX2NvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUgJiYgcmVxdWlyZXNB
cml0eUZpeHVwKSB7CiAgICAgICAgIG1fYXJpdHlDaGVjayA9IGxhYmVsKCk7CisjaWYgIUVOQUJM
RShFWFRSQV9DVElfVEhVTktTKQogICAgICAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDApLCAmbV9j
b2RlQmxvY2stPm1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkKTsKICAgICAgICAgZW1pdEZ1bmN0aW9u
UHJvbG9ndWUoKTsKICAgICAgICAgZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKG1fY29kZUJsb2Nr
LCBDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spOwpAQCAtODAwLDE3ICs4NTcsNDQgQEAgdm9pZCBK
SVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbgogICAgICAgICBtb3ZlKHJldHVyblZh
bHVlR1BSLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwogICAgICAgICBlbWl0TmFrZWROZWFyQ2Fs
bChtX3ZtLT5nZXRDVElTdHViKGFyaXR5Rml4dXBHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0
clRhZz4oKSk7CiAKKyAgICAgICAganVtcChiZWdpbkxhYmVsKTsKKworI2Vsc2UgLy8gRU5BQkxF
KEVYVFJBX0NUSV9USFVOS1MpCisgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKCk7CisKKyAg
ICAgICAgc3RhdGljX2Fzc2VydChmcmFtZVRvcE9mZnNldEdQUiA9PSByZWdUNyk7CisgICAgICAg
IHN0YXRpY19hc3NlcnQoY29kZUJsb2NrR1BSID09IHJlZ1Q2KTsKKyAgICAgICAgQVNTRVJUKCFt
X2J5dGVjb2RlSW5kZXgpOworCisgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgVGh1bmtHZW5lcmF0
b3IgZ2VuZXJhdG9yc1tdID0geworI2RlZmluZSBVU0VfUFJPTE9HVUVfR0VORVJBVE9SKGRvZXNQ
cm9maWxpbmcsIGlzQ29uc3RydWN0b3IsIGhhc0h1Z2VGcmFtZSwgbmFtZSwgYXJpdHlGaXh1cE5h
bWUpIGFyaXR5Rml4dXBOYW1lLAorICAgICAgICAgICAgRk9SX0VBQ0hfUFJPTE9HVUVfR0VORVJB
VE9SKFVTRV9QUk9MT0dVRV9HRU5FUkFUT1IpCisjdW5kZWYgVVNFX1BST0xPR1VFX0dFTkVSQVRP
UgorICAgICAgICB9OworICAgICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG51bWJlck9m
R2VuZXJhdG9ycyA9IHNpemVvZihnZW5lcmF0b3JzKSAvIHNpemVvZihnZW5lcmF0b3JzWzBdKTsK
KworICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2spLCBjb2RlQmxvY2tHUFIp
OworICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChmcmFtZVRvcE9mZnNldCksIGZyYW1lVG9wT2Zm
c2V0R1BSKTsKKworICAgICAgICBSRUxFQVNFX0FTU0VSVChnZW5lcmF0b3JTZWxlY3RvciA8IG51
bWJlck9mR2VuZXJhdG9ycyk7CisgICAgICAgIGF1dG8gZ2VuZXJhdG9yID0gZ2VuZXJhdG9yc1tn
ZW5lcmF0b3JTZWxlY3Rvcl07CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGdlbmVyYXRvcik7Cisg
ICAgICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtKCkuZ2V0Q1RJU3R1YihnZW5lcmF0b3IpLnJldGFn
Z2VkQ29kZTxOb1B0clRhZz4oKSk7CisKKyAgICAgICAganVtcChib2R5TGFiZWwpOworI2VuZGlm
IC8vICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKKwogI2lmIEFTU0VSVF9FTkFCTEVECiAgICAg
ICAgIG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoKTsgLy8gUmVzZXQgdGhpcywgaW4g
b3JkZXIgdG8gZ3VhcmQgaXRzIHVzZSB3aXRoIEFTU0VSVHMuCiAjZW5kaWYKLQotICAgICAgICBq
dW1wKGJlZ2luTGFiZWwpOwogICAgIH0gZWxzZQogICAgICAgICBtX2FyaXR5Q2hlY2sgPSBlbnRy
eUxhYmVsOyAvLyBOZXZlciByZXF1aXJlIGFyaXR5IGZpeHVwLgogCiAgICAgQVNTRVJUKG1fam1w
VGFibGUuaXNFbXB0eSgpKTsKICAgICAKKyNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAg
ICAgcHJpdmF0ZUNvbXBpbGVFeGNlcHRpb25IYW5kbGVycygpOworI2VuZGlmCiAgICAgCiAgICAg
aWYgKG1fZGlzYXNzZW1ibGVyKQogICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0RW5kT2ZDb2Rl
KGxhYmVsKCkpOwpAQCAtODIwLDYgKzkwNCwyMjMgQEAgdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5r
V2l0aG91dEZpbmFsaXppbgogICAgIGxpbmsoKTsKIH0KIAorI2lmIEVOQUJMRShFWFRSQV9DVElf
VEhVTktTKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OnByb2xv
Z3VlR2VuZXJhdG9yKFZNJiB2bSwgYm9vbCBkb2VzUHJvZmlsaW5nLCBib29sIGlzQ29uc3RydWN0
b3IsIGJvb2wgaGFzSHVnZUZyYW1lLCBjb25zdCBjaGFyKiB0aHVua05hbWUpCit7CisgICAgLy8g
VGhpcyBmdW5jdGlvbiBnZW5lcmF0ZXMgdGhlIEJhc2VsaW5lIEpJVCdzIHByb2xvZ3VlIGNvZGUu
IEl0IGlzIG5vdCB1c2VhYmxlIGJ5IG90aGVyIHRpZXJzLgorICAgIGNvbnN0ZXhwciBHUFJSZWcg
ZnJhbWVUb3BPZmZzZXRHUFIgPSByZWdUNzsgLy8gaW5jb21pbmcKKyAgICBjb25zdGV4cHIgR1BS
UmVnIGNvZGVCbG9ja0dQUiA9IHJlZ1Q2OyAvLyBpbmNvbWluZy4KKworICAgIHRhZ1JldHVybkFk
ZHJlc3MoKTsKKworICAgIHN0b3JlNjQoY29kZUJsb2NrR1BSLCBhZGRyZXNzRm9yKENhbGxGcmFt
ZVNsb3Q6OmNvZGVCbG9jaykpOworCisgICAgYWRkUHRyKGZyYW1lVG9wT2Zmc2V0R1BSLCBjYWxs
RnJhbWVSZWdpc3RlciwgcmVnVDEpOworCisgICAgSnVtcExpc3Qgc3RhY2tPdmVyZmxvdzsKKyAg
ICBpZiAoaGFzSHVnZUZyYW1lKQorICAgICAgICBzdGFja092ZXJmbG93LmFwcGVuZChicmFuY2hQ
dHIoQWJvdmUsIHJlZ1QxLCBjYWxsRnJhbWVSZWdpc3RlcikpOworICAgIHN0YWNrT3ZlcmZsb3cu
YXBwZW5kKGJyYW5jaFB0cihBYm92ZSwgQWJzb2x1dGVBZGRyZXNzKHZtLmFkZHJlc3NPZlNvZnRT
dGFja0xpbWl0KCkpLCByZWdUMSkpOworCisgICAgdW50YWdSZXR1cm5BZGRyZXNzKCk7CisgICAg
bW92ZShyZWdUMSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIHRhZ1JldHVybkFkZHJlc3Mo
KTsKKyAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOworCisgICAgZW1pdFNhdmVDYWxs
ZWVTYXZlc0ZvckJhc2VsaW5lSklUKCk7CisgICAgZW1pdE1hdGVyaWFsaXplVGFnQ2hlY2tSZWdp
c3RlcnMoKTsKKworICAgIGlmIChkb2VzUHJvZmlsaW5nKSB7CisgICAgICAgIGNvbnN0ZXhwciBH
UFJSZWcgYXJndW1lbnRWYWx1ZVByb2ZpbGVHUFIgPSByZWdUNTsKKyAgICAgICAgY29uc3RleHBy
IEdQUlJlZyBudW1QYXJhbWV0ZXJzR1BSID0gcmVnVDQ7CisgICAgICAgIGNvbnN0ZXhwciBHUFJS
ZWcgYXJndW1lbnRHUFIgPSByZWdUMzsKKworICAgICAgICBsb2FkMzIoQWRkcmVzcyhjb2RlQmxv
Y2tHUFIsIENvZGVCbG9jazo6b2Zmc2V0T2ZOdW1QYXJhbWV0ZXJzKCkpLCBudW1QYXJhbWV0ZXJz
R1BSKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKGNvZGVCbG9ja0dQUiwgQ29kZUJsb2NrOjpv
ZmZzZXRPZkFyZ3VtZW50VmFsdWVQcm9maWxlcygpKSwgYXJndW1lbnRWYWx1ZVByb2ZpbGVHUFIp
OworICAgICAgICBpZiAoaXNDb25zdHJ1Y3RvcikKKyAgICAgICAgICAgIGFkZFB0cihUcnVzdGVk
SW1tMzIoc2l6ZW9mKFZhbHVlUHJvZmlsZSkpLCBhcmd1bWVudFZhbHVlUHJvZmlsZUdQUik7CisK
KyAgICAgICAgY29uc3RleHByIGludCB2aXJ0dWFsUmVnaXN0ZXJTaXplID0gc3RhdGljX2Nhc3Q8
aW50PihzaXplb2YoUmVnaXN0ZXIpKTsKKyAgICAgICAgaW50IHN0YXJ0QXJndW1lbnQgPSBDYWxs
RnJhbWVTbG90Ojp0aGlzQXJndW1lbnQgKyAoaXNDb25zdHJ1Y3RvciA/IDEgOiAwKTsKKyAgICAg
ICAgaW50IHN0YXJ0QXJndW1lbnRPZmZzZXQgPSBzdGFydEFyZ3VtZW50ICogdmlydHVhbFJlZ2lz
dGVyU2l6ZTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoc3RhcnRBcmd1bWVudE9mZnNldCks
IGFyZ3VtZW50R1BSKTsKKworICAgICAgICBjb25zdGV4cHIgaW50IHZpcnR1YWxSZWdpc3RlclNp
emVTaGlmdCA9IDM7CisgICAgICAgIHN0YXRpY19hc3NlcnQoKDEgPDwgdmlydHVhbFJlZ2lzdGVy
U2l6ZVNoaWZ0KSA9PSB2aXJ0dWFsUmVnaXN0ZXJTaXplKTsKKyAgICAgICAgYWRkMzIoVHJ1c3Rl
ZEltbTMyKHN0YXRpY19jYXN0PGludD4oQ2FsbEZyYW1lU2xvdDo6dGhpc0FyZ3VtZW50KSksIG51
bVBhcmFtZXRlcnNHUFIpOworICAgICAgICBsc2hpZnQzMihUcnVzdGVkSW1tMzIodmlydHVhbFJl
Z2lzdGVyU2l6ZVNoaWZ0KSwgbnVtUGFyYW1ldGVyc0dQUik7CisKKyAgICAgICAgYWRkUHRyKGNh
bGxGcmFtZVJlZ2lzdGVyLCBhcmd1bWVudEdQUik7CisgICAgICAgIGFkZFB0cihjYWxsRnJhbWVS
ZWdpc3RlciwgbnVtUGFyYW1ldGVyc0dQUik7CisKKyAgICAgICAgTGFiZWwgbG9vcFN0YXJ0KHRo
aXMpOworICAgICAgICBKdW1wIGRvbmUgPSBicmFuY2hQdHIoQWJvdmVPckVxdWFsLCBhcmd1bWVu
dEdQUiwgbnVtUGFyYW1ldGVyc0dQUik7CisgICAgICAgIHsKKyAgICAgICAgICAgIGxvYWQ2NChB
ZGRyZXNzKGFyZ3VtZW50R1BSKSwgcmVnVDApOworICAgICAgICAgICAgc3RvcmU2NChyZWdUMCwg
QWRkcmVzcyhhcmd1bWVudFZhbHVlUHJvZmlsZUdQUiwgT0JKRUNUX09GRlNFVE9GKFZhbHVlUHJv
ZmlsZSwgbV9idWNrZXRzKSkpOworCisgICAgICAgICAgICAvLyBUaGUgYXJndW1lbnQgVmFsdWVQ
cm9maWxlcyBhcmUgc3RvcmVkIGluIGEgRml4ZWRWZWN0b3IuIEhlbmNlLCB0aGUKKyAgICAgICAg
ICAgIC8vIGFkZHJlc3Mgb2YgdGhlIG5leHQgcHJvZmlsZSBjYW4gYmUgdHJpdmlhbGx5IGNvbXB1
dGVkIHdpdGggYW4gaW5jcmVtZW50LgorICAgICAgICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihz
aXplb2YoVmFsdWVQcm9maWxlKSksIGFyZ3VtZW50VmFsdWVQcm9maWxlR1BSKTsKKyAgICAgICAg
ICAgIGFkZFB0cihUcnVzdGVkSW1tMzIodmlydHVhbFJlZ2lzdGVyU2l6ZSksIGFyZ3VtZW50R1BS
KTsKKyAgICAgICAgICAgIGp1bXAoKS5saW5rVG8obG9vcFN0YXJ0LCB0aGlzKTsKKyAgICAgICAg
fQorICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgfQorICAgIHJldCgpOworCisgICAgc3Rh
Y2tPdmVyZmxvdy5saW5rKHRoaXMpOworCisgICAgdWludDMyX3QgbG9jYXRpb25CaXRzID0gQ2Fs
bFNpdGVJbmRleCgwKS5iaXRzKCk7CisgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIobG9jYXRpb25C
aXRzKSwgdGFnRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSk7
CisKKyAgICBpZiAobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpCisgICAgICAgIGFkZFB0
cihUcnVzdGVkSW1tMzIoLXN0YXRpY19jYXN0PGludDMyX3Q+KG1heEZyYW1lRXh0ZW50Rm9yU2xv
d1BhdGhDYWxsKSksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKworICAgIHNldHVwQXJndW1lbnRz
PGRlY2x0eXBlKG9wZXJhdGlvblRocm93U3RhY2tPdmVyZmxvd0Vycm9yKT4oY29kZUJsb2NrR1BS
KTsKKyAgICBwcmVwYXJlQ2FsbE9wZXJhdGlvbih2bSk7CisgICAgTWFjcm9Bc3NlbWJsZXI6OkNh
bGwgb3BlcmF0aW9uQ2FsbCA9IGNhbGwoT3BlcmF0aW9uUHRyVGFnKTsKKyAgICBKdW1wIGhhbmRs
ZUV4Y2VwdGlvbkp1bXAgPSBqdW1wKCk7CisKKyAgICBhdXRvIGhhbmRsZXIgPSB2bS5nZXRDVElT
dHViKGhhbmRsZUV4Y2VwdGlvbldpdGhDYWxsRnJhbWVSb2xsYmFja0dlbmVyYXRvcik7CisKKyAg
ICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp0aGlzLCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZm
ZXI6OlByb2ZpbGU6OkV4dHJhQ1RJVGh1bmspOworICAgIHBhdGNoQnVmZmVyLmxpbmsob3BlcmF0
aW9uQ2FsbCwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25UaHJvd1N0YWNr
T3ZlcmZsb3dFcnJvcikpOworICAgIHBhdGNoQnVmZmVyLmxpbmsoaGFuZGxlRXhjZXB0aW9uSnVt
cCwgQ29kZUxvY2F0aW9uTGFiZWwoaGFuZGxlci5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsK
KyAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsIHRo
dW5rTmFtZSk7Cit9CisKK3N0YXRpYyBjb25zdGV4cHIgYm9vbCBkb2VzUHJvZmlsaW5nID0gdHJ1
ZTsKK3N0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0NvbnN0cnVjdG9yID0gdHJ1ZTsKK3N0YXRpYyBj
b25zdGV4cHIgYm9vbCBoYXNIdWdlRnJhbWUgPSB0cnVlOworCisjZGVmaW5lIERFRklORV9QUk9H
TE9HVUVfR0VORVJBVE9SKGRvZXNQcm9maWxpbmcsIGlzQ29uc3RydWN0b3IsIGhhc0h1Z2VGcmFt
ZSwgbmFtZSwgYXJpdHlGaXh1cE5hbWUpIFwKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHJUYWc+IEpJVDo6bmFtZShWTSYgdm0pIFwKKyAgICB7IFwKKyAgICAgICAgSklUIGpp
dCh2bSk7IFwKKyAgICAgICAgcmV0dXJuIGppdC5wcm9sb2d1ZUdlbmVyYXRvcih2bSwgZG9lc1By
b2ZpbGluZywgaXNDb25zdHJ1Y3RvciwgaGFzSHVnZUZyYW1lLCAiQmFzZWxpbmU6ICIgI25hbWUp
OyBcCisgICAgfQorCitGT1JfRUFDSF9QUk9MT0dVRV9HRU5FUkFUT1IoREVGSU5FX1BST0dMT0dV
RV9HRU5FUkFUT1IpCisjdW5kZWYgREVGSU5FX1BST0dMT0dVRV9HRU5FUkFUT1IKKworTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OmFyaXR5Rml4dXBQcm9sb2d1ZUdl
bmVyYXRvcihWTSYgdm0sIGJvb2wgaXNDb25zdHJ1Y3RvciwgVGh1bmtHZW5lcmF0b3Igbm9ybWFs
UHJvbG9ndWVHZW5lcmF0b3IsIGNvbnN0IGNoYXIqIHRodW5rTmFtZSkKK3sKKyAgICAvLyBUaGlz
IGZ1bmN0aW9uIGdlbmVyYXRlcyB0aGUgQmFzZWxpbmUgSklUJ3MgcHJvbG9ndWUgY29kZS4gSXQg
aXMgbm90IHVzZWFibGUgYnkgb3RoZXIgdGllcnMuCisgICAgY29uc3RleHByIEdQUlJlZyBmcmFt
ZVRvcE9mZnNldEdQUiA9IHJlZ1Q3OyAvLyBpbmNvbWluZworICAgIGNvbnN0ZXhwciBHUFJSZWcg
Y29kZUJsb2NrR1BSID0gcmVnVDY7IC8vIGluY29taW5nLgorICAgIGNvbnN0ZXhwciBHUFJSZWcg
bnVtUGFyYW1ldGVyc0dQUiA9IHJlZ1Q1OworCisgICAgdGFnUmV0dXJuQWRkcmVzcygpOworI2lm
IENQVShYODZfNjQpCisgICAgcHVzaChmcmFtZVRvcE9mZnNldEdQUik7CisjZWxpZiBDUFUoQVJN
NjQpCisgICAgcHVzaFBhaXIoZnJhbWVUb3BPZmZzZXRHUFIsIGxpbmtSZWdpc3Rlcik7CisjZW5k
aWYKKworICAgIHN0b3JlNjQoY29kZUJsb2NrR1BSLCBhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6
OmNvZGVCbG9jaykpOworICAgIHN0b3JlOChUcnVzdGVkSW1tMzIoMCksIEFkZHJlc3MoY29kZUJs
b2NrR1BSLCBDb2RlQmxvY2s6Om9mZnNldE9mU2hvdWxkQWx3YXlzQmVJbmxpbmVkKCkpKTsKKwor
ICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzKSwgcmVnVDEpOworICAgIGxvYWQzMihBZGRyZXNzKGNvZGVCbG9ja0dQUiwgQ29kZUJs
b2NrOjpvZmZzZXRPZk51bVBhcmFtZXRlcnMoKSksIG51bVBhcmFtZXRlcnNHUFIpOworICAgIEp1
bXAgbm9GaXh1cE5lZWRlZCA9IGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIG51bVBhcmFt
ZXRlcnNHUFIpOworCisgICAgaWYgY29uc3RleHByIChtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRo
Q2FsbCkKKyAgICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtc3RhdGljX2Nhc3Q8aW50MzJfdD4o
bWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwor
CisgICAgbG9hZFB0cihBZGRyZXNzKGNvZGVCbG9ja0dQUiwgQ29kZUJsb2NrOjpvZmZzZXRPZkds
b2JhbE9iamVjdCgpKSwgYXJndW1lbnRHUFIwKTsKKworICAgIHN0YXRpY19hc3NlcnQoc3RkOjpp
c19zYW1lPGRlY2x0eXBlKG9wZXJhdGlvbkNvbnN0cnVjdEFyaXR5Q2hlY2spLCBkZWNsdHlwZShv
cGVyYXRpb25DYWxsQXJpdHlDaGVjayk+Ojp2YWx1ZSk7CisgICAgc2V0dXBBcmd1bWVudHM8ZGVj
bHR5cGUob3BlcmF0aW9uQ2FsbEFyaXR5Q2hlY2spPihhcmd1bWVudEdQUjApOworICAgIHByZXBh
cmVDYWxsT3BlcmF0aW9uKHZtKTsKKworICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGFyaXR5Q2hl
Y2tDYWxsID0gY2FsbChPcGVyYXRpb25QdHJUYWcpOworICAgIEp1bXAgaGFuZGxlRXhjZXB0aW9u
SnVtcCA9IGVtaXROb25QYXRjaGFibGVFeGNlcHRpb25DaGVjayh2bSk7CisKKyAgICBpZiBjb25z
dGV4cHIgKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKQorICAgICAgICBhZGRQdHIoVHJ1
c3RlZEltbTMyKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKSwgc3RhY2tQb2ludGVyUmVn
aXN0ZXIpOworICAgIEp1bXAgbmVlZEZpeHVwID0gYnJhbmNoVGVzdDMyKE5vblplcm8sIHJldHVy
blZhbHVlR1BSKTsKKyAgICBub0ZpeHVwTmVlZGVkLmxpbmsodGhpcyk7CisKKyAgICAvLyBUaGUg
bm9ybWFsIHByb2xvZ3VlIGV4cGVjdHMgaW5jb21pbmcgY29kZUJsb2NrR1BSIGFuZCBmcmFtZVRv
cE9mZnNldEdQUi4KKyAgICBsb2FkNjQoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxv
Y2spLCBjb2RlQmxvY2tHUFIpOworCisjaWYgQ1BVKFg4Nl82NCkKKyAgICBwb3AoZnJhbWVUb3BP
ZmZzZXRHUFIpOworI2VsaWYgQ1BVKEFSTTY0KQorICAgIHBvcFBhaXIoZnJhbWVUb3BPZmZzZXRH
UFIsIGxpbmtSZWdpc3Rlcik7CisjZW5kaWYKKyAgICB1bnRhZ1JldHVybkFkZHJlc3MoKTsKKwor
ICAgIEp1bXBMaXN0IG5vcm1hbFByb2xvZ3VlSnVtcDsKKyAgICBub3JtYWxQcm9sb2d1ZUp1bXAu
YXBwZW5kKGp1bXAoKSk7CisKKyAgICBuZWVkRml4dXAubGluayh0aGlzKTsKKworICAgIC8vIFJl
c3RvcmUgdGhlIHN0YWNrIGZvciBhcml0eSBmaXh1cCwgYW5kIHByZXNlcnZlIHRoZSByZXR1cm4g
YWRkcmVzcyBhbmQgZnJhbWVUb3BPZmZzZXRHUFIuCisKKyAgICAvLyBhcml0eUZpeHVwR2VuZXJh
dG9yIHdpbGwgYmUgc2hpZnRpbmcgdGhlIHN0YWNrLiBTbywgd2UgY2FuJ3QgdXNlIHRoZSBzdGFj
ayB0byBwcmVzZXJ2ZQorICAgIC8vIGZyYW1lVG9wT2Zmc2V0R1BSLiBjb2RlQmxvY2tHUFIgaXMg
YWxlYWR5IHByZXNlcnZlZCBpbiB0aGUgQ2FsbEZyYW1lIGhlYWRlci4KKyAgICAvLyBXZSBhbHNv
IGNhbid0IHVzZSBjYWxsZWUgc2F2ZWQgcmVnaXN0ZXJzIGJlY2F1c2UgdGhleSBoYXZlbid0IGJl
ZW4gc2F2ZWQgeWV0LgorICAgIC8vCisgICAgLy8gYXJpdHlGaXh1cEdlbmVyYXRvciBpcyBjYXJl
ZnVsbHkgY3JhZnRlZCB0byBvbmx1IHVzZSBhMCwgYTEsIGEyLCB0MywgdDQgYW5kIHQ1LgorICAg
IC8vIFNvLCBmcmFtZVRvcE9mZnNldEdQUiBzaG91bGQgYmUgcHJlc2VydmVkIGluIHJlZ1Q3Lgor
ICAgIC8vIE9uIEFSTTY0LCB3ZSBjYW4gcHJlc2VydmUgbHIgaW4gcmVnVDYuCisgICAgLy8gT24g
eDg2XzY0LCByZWdUNiA9PSBhcmd1bWVudEdQUjAsIGFuZCB3ZSdyZSBvdXQgb2YgYXZhaWxhYmxl
IHZvbGF0aWxlIHJlZ2lzdGVycy4KKyAgICAvLyBTbywgd2UnbGwgaGF2ZSB0byB1c2UgYSBWTSBz
Y3JhdGNoQnVmZmVyIHRvIHByZXNlcnZlIHRoZSByZXR1cm4gYWRkcmVzcy4KKworI2lmIENQVShY
ODZfNjQpCisgICAgQ1BVUmVnaXN0ZXIqIHNjcmF0Y2ggPSBiaXR3aXNlX2Nhc3Q8Q1BVUmVnaXN0
ZXIqPih2bS5zY3JhdGNoQnVmZmVyRm9yU2l6ZShzaXplb2YoQ1BVUmVnaXN0ZXIpKS0+ZGF0YUJ1
ZmZlcigpKTsKKyAgICBwb3AoZnJhbWVUb3BPZmZzZXRHUFIpOworICAgIHBvcChhcmd1bWVudEdQ
UjIpOyAvLyByZXR1cm4gYWRkcmVzcy4KKyAgICBzdG9yZVB0cihhcmd1bWVudEdQUjIsIHNjcmF0
Y2gpOworI2VsaWYgQ1BVKEFSTTY0KQorICAgIHBvcFBhaXIoZnJhbWVUb3BPZmZzZXRHUFIsIGxp
bmtSZWdpc3Rlcik7CisgICAgdW50YWdSZXR1cm5BZGRyZXNzKCk7CisgICAgbW92ZShsaW5rUmVn
aXN0ZXIsIHJlZ1Q2KTsKKyAgICBhdXRvIGludGVybWVkaWF0ZVRhZyA9IHJhbmRvbSgpOworICAg
IG1vdmUoVHJ1c3RlZEltbTMyKGludGVybWVkaWF0ZVRhZyksIHJlZ1QxKTsKKyAgICB0YWdQdHIo
cmVnVDEsIHJlZ1Q2KTsKKyNlbmRpZgorICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIEdQUkluZm86
OmFyZ3VtZW50R1BSMCk7CisgICAgQ2FsbCBhcml0eUZpeHVwQ2FsbCA9IG5lYXJDYWxsKCk7CisK
KyNpZiBDUFUoWDg2XzY0KQorICAgIGxvYWRQdHIoc2NyYXRjaCwgYXJndW1lbnRHUFIyKTsKKyAg
ICBwdXNoKGFyZ3VtZW50R1BSMik7IC8vIHJldHVybiBhZGRyZXNzLgorI2VsaWYgQ1BVKEFSTTY0
KQorICAgIG1vdmUoVHJ1c3RlZEltbTMyKGludGVybWVkaWF0ZVRhZyksIHJlZ1QxKTsKKyAgICB1
bnRhZ1B0cihyZWdUMSwgcmVnVDYpOworICAgIG1vdmUocmVnVDYsIGxpbmtSZWdpc3Rlcik7Cisj
ZW5kaWYKKyAgICBsb2FkNjQoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCBj
b2RlQmxvY2tHUFIpOworICAgIG5vcm1hbFByb2xvZ3VlSnVtcC5hcHBlbmQoanVtcCgpKTsKKwor
ICAgIGF1dG8gYXJpdHlDaGVja09wZXJhdGlvbiA9IGlzQ29uc3RydWN0b3IgPyBvcGVyYXRpb25D
b25zdHJ1Y3RBcml0eUNoZWNrIDogb3BlcmF0aW9uQ2FsbEFyaXR5Q2hlY2s7CisgICAgYXV0byBh
cml0eUZpeHVwID0gdm0uZ2V0Q1RJU3R1Yihhcml0eUZpeHVwR2VuZXJhdG9yKTsKKyAgICBhdXRv
IG5vcm1hbFByb2xvZ3VlID0gdm0uZ2V0Q1RJU3R1Yihub3JtYWxQcm9sb2d1ZUdlbmVyYXRvcik7
CisgICAgYXV0byBleGNlcHRpb25IYW5kbGVyID0gdm0uZ2V0Q1RJU3R1Yihwb3BUaHVua1N0YWNr
UHJlc2VydmVzQW5kSGFuZGxlRXhjZXB0aW9uR2VuZXJhdG9yKTsKKworICAgIExpbmtCdWZmZXIg
cGF0Y2hCdWZmZXIoKnRoaXMsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6
RXh0cmFDVElUaHVuayk7CisgICAgcGF0Y2hCdWZmZXIubGluayhhcml0eUNoZWNrQ2FsbCwgRnVu
Y3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihhcml0eUNoZWNrT3BlcmF0aW9uKSk7CisgICAgcGF0
Y2hCdWZmZXIubGluayhhcml0eUZpeHVwQ2FsbCwgRnVuY3Rpb25QdHIoYXJpdHlGaXh1cC5yZXRh
Z2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKG5vcm1hbFByb2xv
Z3VlSnVtcCwgQ29kZUxvY2F0aW9uTGFiZWwobm9ybWFsUHJvbG9ndWUucmV0YWdnZWRDb2RlPE5v
UHRyVGFnPigpKSk7CisgICAgcGF0Y2hCdWZmZXIubGluayhoYW5kbGVFeGNlcHRpb25KdW1wLCBD
b2RlTG9jYXRpb25MYWJlbChleGNlcHRpb25IYW5kbGVyLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4o
KSkpOworICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRh
ZywgdGh1bmtOYW1lKTsKK30KKworI2RlZmluZSBERUZJTkVfUFJPR0xPR1VFX0dFTkVSQVRPUihk
b2VzUHJvZmlsaW5nLCBpc0NvbnN0cnVjdG9yLCBoYXNIdWdlRnJhbWUsIG5hbWUsIGFyaXR5Rml4
dXBOYW1lKSBcCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6YXJp
dHlGaXh1cE5hbWUoVk0mIHZtKSBcCisgICAgeyBcCisgICAgICAgIEpJVCBqaXQodm0pOyBcCisg
ICAgICAgIHJldHVybiBqaXQuYXJpdHlGaXh1cFByb2xvZ3VlR2VuZXJhdG9yKHZtLCBpc0NvbnN0
cnVjdG9yLCBuYW1lLCAiQmFzZWxpbmU6ICIgI2FyaXR5Rml4dXBOYW1lKTsgXAorICAgIH0KKwor
Rk9SX0VBQ0hfUFJPTE9HVUVfR0VORVJBVE9SKERFRklORV9QUk9HTE9HVUVfR0VORVJBVE9SKQor
I3VuZGVmIERFRklORV9QUk9HTE9HVUVfR0VORVJBVE9SCisKKyNlbmRpZiAvLyBFTkFCTEUoRVhU
UkFfQ1RJX1RIVU5LUykKKwogdm9pZCBKSVQ6OmxpbmsoKQogewogICAgIExpbmtCdWZmZXImIHBh
dGNoQnVmZmVyID0gKm1fbGlua0J1ZmZlcjsKQEAgLTEwMTQsOSArMTMxNSw5IEBAIENvbXBpbGF0
aW9uUmVzdWx0IEpJVDo6cHJpdmF0ZUNvbXBpbGUoSkkKICAgICByZXR1cm4gZmluYWxpemVPbk1h
aW5UaHJlYWQoKTsKIH0KIAorI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIHZvaWQgSklU
Ojpwcml2YXRlQ29tcGlsZUV4Y2VwdGlvbkhhbmRsZXJzKCkKIHsKLSNpZiAhRU5BQkxFKEVYVFJB
X0NUSV9USFVOS1MpCiAgICAgaWYgKCFtX2V4Y2VwdGlvbkNoZWNrc1dpdGhDYWxsRnJhbWVSb2xs
YmFjay5lbXB0eSgpKSB7CiAgICAgICAgIG1fZXhjZXB0aW9uQ2hlY2tzV2l0aENhbGxGcmFtZVJv
bGxiYWNrLmxpbmsodGhpcyk7CiAKQEAgLTEwNDEsOCArMTM0Miw4IEBAIHZvaWQgSklUOjpwcml2
YXRlQ29tcGlsZUV4Y2VwdGlvbkhhbmRsZXIKICAgICAgICAgbV9mYXJDYWxscy5hcHBlbmQoRmFy
Q2FsbFJlY29yZChjYWxsKE9wZXJhdGlvblB0clRhZyksIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0
clRhZz4ob3BlcmF0aW9uTG9va3VwRXhjZXB0aW9uSGFuZGxlcikpKTsKICAgICAgICAganVtcFRv
RXhjZXB0aW9uSGFuZGxlcih2bSgpKTsKICAgICB9Ci0jZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NU
SV9USFVOS1MpCiB9CisjZW5kaWYgLy8gIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCiB2b2lk
IEpJVDo6ZG9NYWluVGhyZWFkUHJlcGFyYXRpb25CZWZvcmVDb21waWxlKCkKIHsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVQuaAkocmV2aXNpb24gMjc4MjAzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMzE4LDcgKzMxOCw5IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICAgICAgbV9leGNlcHRpb25DaGVja3NXaXRoQ2FsbEZyYW1lUm9s
bGJhY2suYXBwZW5kKGVtaXRFeGNlcHRpb25DaGVjayh2bSgpKSk7CiAgICAgICAgIH0KIAorI2lm
ICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZUV4
Y2VwdGlvbkhhbmRsZXJzKCk7CisjZW5kaWYKIAogICAgICAgICB2b2lkIGFkdmFuY2VUb05leHRD
aGVja3BvaW50KCk7CiAgICAgICAgIHZvaWQgZW1pdEp1bXBTbG93VG9Ib3RGb3JDaGVja3BvaW50
KEp1bXApOwpAQCAtNzEzLDcgKzcxNSw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbnN0cmljdGVx
KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwog
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2p0cnVlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5L
UykKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisjZW5kaWYKICAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9jaGVja190cmFwcyhjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9tb2QoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfbXVsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYpOwpAQCAtNzg4LDYgKzc5MiwyNiBAQCBuYW1lc3BhY2UgSlND
IHsKIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogICAgICAgICAvLyBUaHVuayBnZW5l
cmF0b3JzLgorICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBwcm9sb2d1ZUdlbmVyYXRvcjAoVk0mKTsKKyAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gcHJvbG9ndWVHZW5lcmF0b3IxKFZNJik7CisgICAg
ICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHByb2xvZ3Vl
R2VuZXJhdG9yMihWTSYpOworICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiBwcm9sb2d1ZUdlbmVyYXRvcjMoVk0mKTsKKyAgICAgICAgc3RhdGljIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gcHJvbG9ndWVHZW5lcmF0b3I0KFZN
Jik7CisgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+
IHByb2xvZ3VlR2VuZXJhdG9yNShWTSYpOworICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiBwcm9sb2d1ZUdlbmVyYXRvcjYoVk0mKTsKKyAgICAgICAg
c3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gcHJvbG9ndWVHZW5l
cmF0b3I3KFZNJik7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gcHJvbG9ndWVHZW5lcmF0b3IoVk0mLCBib29sIGRvZXNQcm9maWxpbmcsIGJvb2wgaXNDb25z
dHJ1Y3RvciwgYm9vbCBoYXNIdWdlRnJhbWUsIGNvbnN0IGNoYXIqIG5hbWUpOworCisgICAgICAg
IHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGFyaXR5Rml4dXBf
cHJvbG9ndWVHZW5lcmF0b3IwKFZNJik7CisgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IGFyaXR5Rml4dXBfcHJvbG9ndWVHZW5lcmF0b3IxKFZNJik7
CisgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGFy
aXR5Rml4dXBfcHJvbG9ndWVHZW5lcmF0b3IyKFZNJik7CisgICAgICAgIHN0YXRpYyBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGFyaXR5Rml4dXBfcHJvbG9ndWVHZW5lcmF0
b3IzKFZNJik7CisgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+IGFyaXR5Rml4dXBfcHJvbG9ndWVHZW5lcmF0b3I0KFZNJik7CisgICAgICAgIHN0YXRp
YyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGFyaXR5Rml4dXBfcHJvbG9n
dWVHZW5lcmF0b3I1KFZNJik7CisgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IGFyaXR5Rml4dXBfcHJvbG9ndWVHZW5lcmF0b3I2KFZNJik7CisgICAg
ICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGFyaXR5Rml4
dXBfcHJvbG9ndWVHZW5lcmF0b3I3KFZNJik7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRUaHVua1B0clRhZz4gYXJpdHlGaXh1cFByb2xvZ3VlR2VuZXJhdG9yKFZNJiwgYm9vbCBp
c0NvbnN0cnVjdG9yLCBUaHVua0dlbmVyYXRvciBub3JtYWxQcm9sb2d1ZUdlbmVyYXRvciwgY29u
c3QgY2hhciogbmFtZSk7CisKICAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gc2xvd19vcF9kZWxfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IoVk0m
KTsKICAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
c2xvd19vcF9kZWxfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yKFZNJik7CiAgICAgICAgIHN0
YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHNsb3dfb3BfZ2V0X2J5
X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yKFZNJik7CkBAIC04MDIsNyArODI2LDE1IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5r
UHRyVGFnPiBzbG93X29wX3Jlc29sdmVfc2NvcGVHZW5lcmF0b3IoVk0mKTsKIAogICAgICAgICBz
dGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvcF9jaGVja190cmFw
c19oYW5kbGVyR2VuZXJhdG9yKFZNJik7Ci0gICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9wX2VudGVyX2hhbmRsZXJHZW5lcmF0b3IoVk0mKTsKKwor
ICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvcF9l
bnRlcl9jYW5CZU9wdGltaXplZF9HZW5lcmF0b3IoVk0mKTsKKyAgICAgICAgc3RhdGljIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3BfZW50ZXJfY2Fubm90QmVPcHRpbWl6
ZWRfR2VuZXJhdG9yKFZNJik7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz4gb3BfZW50ZXJfR2VuZXJhdG9yKFZNJiwgYm9vbCBjYW5CZU9wdGltaXplZCwgY29u
c3QgY2hhciogdGh1bmtOYW1lKTsKKworICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiBvcF9sb29wX2hpbnRfZnV6ekdlbmVyYXRvcihWTSYpOworI2lm
IEVOQUJMRShERkdfSklUKQorICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiBvcF9sb29wX2hpbnRHZW5lcmF0b3IoVk0mKTsKKyNlbmRpZgogICAgICAg
ICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvcF9yZXRfaGFu
ZGxlckdlbmVyYXRvcihWTSYpOwogICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFRodW5rUHRyVGFnPiBvcF90aHJvd19oYW5kbGVyR2VuZXJhdG9yKFZNJik7CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCShyZXZpc2lvbiAyNzgyMDMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAkod29ya2luZyBjb3B5KQpA
QCAtOTEsNyArOTEsNiBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0TG9hZENoYXJhY3Rl
CiAKIEFMV0FZU19JTkxJTkUgSklUOjpDYWxsIEpJVDo6ZW1pdE5ha2VkTmVhckNhbGwoQ29kZVB0
cjxOb1B0clRhZz4gdGFyZ2V0KQogewotICAgIEFTU0VSVChtX2J5dGVjb2RlSW5kZXgpOyAvLyBU
aGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2Vu
ZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0LgogICAgIENhbGwgbmFrZWRD
YWxsID0gbmVhckNhbGwoKTsKICAgICBtX25lYXJDYWxscy5hcHBlbmQoTmVhckNhbGxSZWNvcmQo
bmFrZWRDYWxsLCBGdW5jdGlvblB0cjxKU0ludGVybmFsUHRyVGFnPih0YXJnZXQucmV0YWdnZWQ8
SlNJbnRlcm5hbFB0clRhZz4oKSkpKTsKICAgICByZXR1cm4gbmFrZWRDYWxsOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCShyZXZpc2lvbiAyNzgyMDMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zNzYsNyArMzc2LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiBKSQogICAgIEpJVCBqaXQodm0pOwogCiAgICAgaml0LmNoZWNrU3RhY2tQb2ludGVyQWxpZ25t
ZW50KCk7Ci0gICAgaml0LmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXNGb3IoJlJlZ2lzdGVyQXRPZmZz
ZXRMaXN0OjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKKyAgICBqaXQuZW1p
dFJlc3RvcmVDYWxsZWVTYXZlc0ZvckJhc2VsaW5lSklUKCk7CiAgICAgaml0LmVtaXRGdW5jdGlv
bkVwaWxvZ3VlKCk7CiAgICAgaml0LnJldCgpOwogCkBAIC0xMTg2LDEwMyArMTE4NiwxMTUgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfZW50ZXIoY29uc3QgSW5zdHJ1Y3RpbwogICAgIGVtaXRFbnRlck9w
dGltaXphdGlvbkNoZWNrKCk7CiAjZWxzZQogICAgIEFTU0VSVChtX2J5dGVjb2RlSW5kZXgub2Zm
c2V0KCkgPT0gMCk7Ci0gICAgY29uc3RleHByIEdQUlJlZyBsb2NhbHNUb0luaXRHUFIgPSBhcmd1
bWVudEdQUjA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBjYW5CZU9wdGltaXplZEdQUiA9IGFyZ3Vt
ZW50R1BSNDsKLQogICAgIHVuc2lnbmVkIGxvY2Fsc1RvSW5pdCA9IGNvdW50IC0gQ29kZUJsb2Nr
OjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCk7CiAgICAg
UkVMRUFTRV9BU1NFUlQobG9jYWxzVG9Jbml0IDwgY291bnQpOwotICAgIG1vdmUoVHJ1c3RlZElt
bTMyKGxvY2Fsc1RvSW5pdCAqIHNpemVvZihSZWdpc3RlcikpLCBsb2NhbHNUb0luaXRHUFIpOwot
ICAgIG1vdmUoVHJ1c3RlZEltbTMyKGNhbkJlT3B0aW1pemVkKCkpLCBjYW5CZU9wdGltaXplZEdQ
Uik7Ci0gICAgZW1pdE5ha2VkTmVhckNhbGwodm0oKS5nZXRDVElTdHViKG9wX2VudGVyX2hhbmRs
ZXJHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisgICAgVGh1bmtHZW5lcmF0
b3IgZ2VuZXJhdG9yID0gY2FuQmVPcHRpbWl6ZWQoKSA/IG9wX2VudGVyX2NhbkJlT3B0aW1pemVk
X0dlbmVyYXRvciA6IG9wX2VudGVyX2Nhbm5vdEJlT3B0aW1pemVkX0dlbmVyYXRvcjsKKyAgICBl
bWl0TmFrZWROZWFyQ2FsbCh2bSgpLmdldENUSVN0dWIoZ2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8
Tm9QdHJUYWc+KCkpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogfQogCiAj
aWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1
bmtQdHJUYWc+IEpJVDo6b3BfZW50ZXJfaGFuZGxlckdlbmVyYXRvcihWTSYgdm0pCitNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6b3BfZW50ZXJfR2VuZXJhdG9yKFZN
JiB2bSwgYm9vbCBjYW5CZU9wdGltaXplZCwgY29uc3QgY2hhciogdGh1bmtOYW1lKQogewotICAg
IEpJVCBqaXQodm0pOwotCiAjaWYgQ1BVKFg4Nl82NCkKLSAgICBqaXQucHVzaChYODZSZWdpc3Rl
cnM6OmVicCk7CisgICAgcHVzaChYODZSZWdpc3RlcnM6OmVicCk7CiAjZWxpZiBDUFUoQVJNNjQp
Ci0gICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKLSAgICBqaXQucHVzaFBhaXIoZnJhbWVQb2lu
dGVyUmVnaXN0ZXIsIGxpbmtSZWdpc3Rlcik7CisgICAgdGFnUmV0dXJuQWRkcmVzcygpOworICAg
IHB1c2hQYWlyKGZyYW1lUG9pbnRlclJlZ2lzdGVyLCBsaW5rUmVnaXN0ZXIpOwogI2VuZGlmCiAg
ICAgLy8gb3BfZW50ZXIgaXMgYWx3YXlzIGF0IGJ5dGVjb2RlT2Zmc2V0IDAuCi0gICAgaml0LnN0
b3JlMzIoVHJ1c3RlZEltbTMyKDApLCB0YWdGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMpKTsKKyAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMigwKSwgdGFnRm9yKENh
bGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSk7CiAKICAgICBjb25zdGV4
cHIgR1BSUmVnIGxvY2Fsc1RvSW5pdEdQUiA9IGFyZ3VtZW50R1BSMDsKICAgICBjb25zdGV4cHIg
R1BSUmVnIGl0ZXJhdG9yR1BSID0gYXJndW1lbnRHUFIxOwogICAgIGNvbnN0ZXhwciBHUFJSZWcg
ZW5kR1BSID0gYXJndW1lbnRHUFIyOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgdW5kZWZpbmVkR1BS
ID0gYXJndW1lbnRHUFIzOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgY2FuQmVPcHRpbWl6ZWRHUFIg
PSBhcmd1bWVudEdQUjQ7CisgICAgY29uc3RleHByIEdQUlJlZyBjb2RlQmxvY2tHUFIgPSBhcmd1
bWVudEdQUjQ7CisKKyAgICBjb25zdGV4cHIgaW50IHZpcnR1YWxSZWdpc3RlclNpemVTaGlmdCA9
IDM7CisgICAgc3RhdGljX2Fzc2VydCgoMSA8PCB2aXJ0dWFsUmVnaXN0ZXJTaXplU2hpZnQpID09
IHNpemVvZihSZWdpc3RlcikpOworCisgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNs
b3Q6OmNvZGVCbG9jayksIGNvZGVCbG9ja0dQUik7CisgICAgbG9hZDMyKEFkZHJlc3MoY29kZUJs
b2NrR1BSLCBDb2RlQmxvY2s6Om9mZnNldE9mTnVtVmFycygpKSwgbG9jYWxzVG9Jbml0R1BSKTsK
KyAgICBzdWIzMihUcnVzdGVkSW1tMzIoQ29kZUJsb2NrOjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2
ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCkpLCBsb2NhbHNUb0luaXRHUFIpOworICAgIGxzaGlm
dDMyKFRydXN0ZWRJbW0zMih2aXJ0dWFsUmVnaXN0ZXJTaXplU2hpZnQpLCBsb2NhbHNUb0luaXRH
UFIpOwogCiAgICAgc2l6ZV90IHN0YXJ0TG9jYWwgPSBDb2RlQmxvY2s6OmxsaW50QmFzZWxpbmVD
YWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKTsKICAgICBpbnQgc3RhcnRPZmZzZXQg
PSB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChzdGFydExvY2FsKS5vZmZzZXQoKTsKLSAgICBqaXQu
bW92ZShUcnVzdGVkSW1tNjQoc3RhcnRPZmZzZXQgKiBzaXplb2YoUmVnaXN0ZXIpKSwgaXRlcmF0
b3JHUFIpOwotICAgIGppdC5zdWI2NChpdGVyYXRvckdQUiwgbG9jYWxzVG9Jbml0R1BSLCBlbmRH
UFIpOworICAgIG1vdmUoVHJ1c3RlZEltbTY0KHN0YXJ0T2Zmc2V0ICogc2l6ZW9mKFJlZ2lzdGVy
KSksIGl0ZXJhdG9yR1BSKTsKKyAgICBzdWI2NChpdGVyYXRvckdQUiwgbG9jYWxzVG9Jbml0R1BS
LCBlbmRHUFIpOwogCi0gICAgaml0Lm1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKSksIHVuZGVmaW5lZEdQUik7Ci0gICAgYXV0byBpbml0TG9vcCA9IGppdC5s
YWJlbCgpOwotICAgIEp1bXAgaW5pdERvbmUgPSBqaXQuYnJhbmNoMzIoTGVzc1RoYW5PckVxdWFs
LCBpdGVyYXRvckdQUiwgZW5kR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSkpLCB1bmRlZmluZWRHUFIpOworICAgIGF1dG8gaW5pdExvb3Ag
PSBsYWJlbCgpOworICAgIEp1bXAgaW5pdERvbmUgPSBicmFuY2gzMihMZXNzVGhhbk9yRXF1YWws
IGl0ZXJhdG9yR1BSLCBlbmRHUFIpOwogICAgIHsKLSAgICAgICAgaml0LnN0b3JlNjQodW5kZWZp
bmVkR1BSLCBCYXNlSW5kZXgoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGl0ZXJhdG9yR1BS
LCBUaW1lc09uZSkpOwotICAgICAgICBqaXQuc3ViNjQoVHJ1c3RlZEltbTMyKHNpemVvZihSZWdp
c3RlcikpLCBpdGVyYXRvckdQUik7Ci0gICAgICAgIGppdC5qdW1wKGluaXRMb29wKTsKKyAgICAg
ICAgc3RvcmU2NCh1bmRlZmluZWRHUFIsIEJhc2VJbmRleChHUFJJbmZvOjpjYWxsRnJhbWVSZWdp
c3RlciwgaXRlcmF0b3JHUFIsIFRpbWVzT25lKSk7CisgICAgICAgIHN1YjY0KFRydXN0ZWRJbW0z
MihzaXplb2YoUmVnaXN0ZXIpKSwgaXRlcmF0b3JHUFIpOworICAgICAgICBqdW1wKGluaXRMb29w
KTsKICAgICB9Ci0gICAgaW5pdERvbmUubGluaygmaml0KTsKKyAgICBpbml0RG9uZS5saW5rKHRo
aXMpOwogCi0gICAgLy8gZW1pdFdyaXRlQmFycmllcihtX2NvZGVCbG9jaykuCi0gICAgaml0Lmxv
YWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCBhcmd1bWVudEdQUjEp
OwotICAgIEp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9IGppdC5iYXJyaWVyQnJhbmNo
KHZtLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CisgICAgLy8gSW1wbGVtZW50aW5nIGVt
aXRXcml0ZUJhcnJpZXIobV9jb2RlQmxvY2spLgorICAgIEp1bXAgb3duZXJJc1JlbWVtYmVyZWRP
ckluRWRlbiA9IGJhcnJpZXJCcmFuY2godm0sIGNvZGVCbG9ja0dQUiwgYXJndW1lbnRHUFIyKTsK
IAotICAgIGppdC5tb3ZlKGNhbkJlT3B0aW1pemVkR1BSLCBHUFJJbmZvOjpudW1iZXJUYWdSZWdp
c3Rlcik7IC8vIHNhdmUuCi0gICAgaml0LnNldHVwQXJndW1lbnRzPGRlY2x0eXBlKG9wZXJhdGlv
bldyaXRlQmFycmllclNsb3dQYXRoKT4oJnZtLCBhcmd1bWVudEdQUjEpOwotICAgIGppdC5wcmVw
YXJlQ2FsbE9wZXJhdGlvbih2bSk7Ci0gICAgQ2FsbCBvcGVyYXRpb25Xcml0ZUJhcnJpZXJDYWxs
ID0gaml0LmNhbGwoT3BlcmF0aW9uUHRyVGFnKTsKKyAgICBzZXR1cEFyZ3VtZW50czxkZWNsdHlw
ZShvcGVyYXRpb25Xcml0ZUJhcnJpZXJTbG93UGF0aCk+KCZ2bSwgY29kZUJsb2NrR1BSKTsKKyAg
ICBwcmVwYXJlQ2FsbE9wZXJhdGlvbih2bSk7CisgICAgQ2FsbCBvcGVyYXRpb25Xcml0ZUJhcnJp
ZXJDYWxsID0gY2FsbChPcGVyYXRpb25QdHJUYWcpOworCisgICAgaWYgKGNhbkJlT3B0aW1pemVk
KQorICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwg
Y29kZUJsb2NrR1BSKTsKIAotICAgIGppdC5tb3ZlKEdQUkluZm86Om51bWJlclRhZ1JlZ2lzdGVy
LCBjYW5CZU9wdGltaXplZEdQUik7IC8vIHJlc3RvcmUuCi0gICAgaml0Lm1vdmUoVHJ1c3RlZElt
bTY0KEpTVmFsdWU6Ok51bWJlclRhZyksIEdQUkluZm86Om51bWJlclRhZ1JlZ2lzdGVyKTsKLSAg
ICBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuLmxpbmsoJmppdCk7CisgICAgb3duZXJJc1JlbWVt
YmVyZWRPckluRWRlbi5saW5rKHRoaXMpOwogCiAjaWYgRU5BQkxFKERGR19KSVQpCisgICAgLy8g
SW1wbGVtZW50aW5nIGVtaXRFbnRlck9wdGltaXphdGlvbkNoZWNrKCkuCiAgICAgQ2FsbCBvcGVy
YXRpb25PcHRpbWl6ZUNhbGw7Ci0gICAgaWYgKE9wdGlvbnM6OnVzZURGR0pJVCgpKSB7Ci0gICAg
ICAgIC8vIGVtaXRFbnRlck9wdGltaXphdGlvbkNoZWNrKCkuCisgICAgaWYgKGNhbkJlT3B0aW1p
emVkKSB7CiAgICAgICAgIEp1bXBMaXN0IHNraXBPcHRpbWl6ZTsKIAotICAgICAgICBza2lwT3B0
aW1pemUuYXBwZW5kKGppdC5icmFuY2hUZXN0MzIoWmVybywgY2FuQmVPcHRpbWl6ZWRHUFIpKTsK
KyAgICAgICAgc2tpcE9wdGltaXplLmFwcGVuZChicmFuY2hBZGQzMihTaWduZWQsIFRydXN0ZWRJ
bW0zMihPcHRpb25zOjpleGVjdXRpb25Db3VudGVySW5jcmVtZW50Rm9yRW50cnkoKSksIEFkZHJl
c3MoY29kZUJsb2NrR1BSLCBDb2RlQmxvY2s6Om9mZnNldE9mSklURXhlY3V0ZUNvdW50ZXIoKSkp
KTsKIAotICAgICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVC
bG9jayksIGFyZ3VtZW50R1BSMSk7Ci0gICAgICAgIHNraXBPcHRpbWl6ZS5hcHBlbmQoaml0LmJy
YW5jaEFkZDMyKFNpZ25lZCwgVHJ1c3RlZEltbTMyKE9wdGlvbnM6OmV4ZWN1dGlvbkNvdW50ZXJJ
bmNyZW1lbnRGb3JFbnRyeSgpKSwgQWRkcmVzcyhhcmd1bWVudEdQUjEsIENvZGVCbG9jazo6b2Zm
c2V0T2ZKSVRFeGVjdXRlQ291bnRlcigpKSkpOworICAgICAgICBjb3B5TExJbnRCYXNlbGluZUNh
bGxlZVNhdmVzRnJvbUZyYW1lT3JSZWdpc3RlclRvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVy
KHZtLnRvcEVudHJ5RnJhbWUpOwogCi0gICAgICAgIGppdC5jb3B5TExJbnRCYXNlbGluZUNhbGxl
ZVNhdmVzRnJvbUZyYW1lT3JSZWdpc3RlclRvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZt
LnRvcEVudHJ5RnJhbWUpOworICAgICAgICBzZXR1cEFyZ3VtZW50czxkZWNsdHlwZShvcGVyYXRp
b25PcHRpbWl6ZSk+KCZ2bSwgVHJ1c3RlZEltbTMyKDApKTsKKyAgICAgICAgcHJlcGFyZUNhbGxP
cGVyYXRpb24odm0pOworICAgICAgICBvcGVyYXRpb25PcHRpbWl6ZUNhbGwgPSBjYWxsKE9wZXJh
dGlvblB0clRhZyk7CiAKLSAgICAgICAgaml0LnNldHVwQXJndW1lbnRzPGRlY2x0eXBlKG9wZXJh
dGlvbk9wdGltaXplKT4oJnZtLCBUcnVzdGVkSW1tMzIoMCkpOwotICAgICAgICBqaXQucHJlcGFy
ZUNhbGxPcGVyYXRpb24odm0pOwotICAgICAgICBvcGVyYXRpb25PcHRpbWl6ZUNhbGwgPSBqaXQu
Y2FsbChPcGVyYXRpb25QdHJUYWcpOwotCi0gICAgICAgIHNraXBPcHRpbWl6ZS5hcHBlbmQoaml0
LmJyYW5jaFRlc3RQdHIoWmVybywgcmV0dXJuVmFsdWVHUFIpKTsKLSAgICAgICAgaml0LmZhckp1
bXAocmV0dXJuVmFsdWVHUFIsIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKKyAgICAgICAg
c2tpcE9wdGltaXplLmFwcGVuZChicmFuY2hUZXN0UHRyKFplcm8sIHJldHVyblZhbHVlR1BSKSk7
CisgICAgICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lz
dGVyKTsKIAotICAgICAgICBza2lwT3B0aW1pemUubGluaygmaml0KTsKKyAgICAgICAgc2tpcE9w
dGltaXplLmxpbmsodGhpcyk7CiAgICAgfQogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQogCiAj
aWYgQ1BVKFg4Nl82NCkKLSAgICBqaXQucG9wKFg4NlJlZ2lzdGVyczo6ZWJwKTsKKyAgICBwb3Ao
WDg2UmVnaXN0ZXJzOjplYnApOwogI2VsaWYgQ1BVKEFSTTY0KQotICAgIGppdC5wb3BQYWlyKGZy
YW1lUG9pbnRlclJlZ2lzdGVyLCBsaW5rUmVnaXN0ZXIpOworICAgIHBvcFBhaXIoZnJhbWVQb2lu
dGVyUmVnaXN0ZXIsIGxpbmtSZWdpc3Rlcik7CiAjZW5kaWYKLSAgICBqaXQucmV0KCk7CisgICAg
cmV0KCk7CiAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lE
LCBMaW5rQnVmZmVyOjpQcm9maWxlOjpFeHRyYUNUSVRodW5rKTsKKyAgICBMaW5rQnVmZmVyIHBh
dGNoQnVmZmVyKCp0aGlzLCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OkV4
dHJhQ1RJVGh1bmspOwogICAgIHBhdGNoQnVmZmVyLmxpbmsob3BlcmF0aW9uV3JpdGVCYXJyaWVy
Q2FsbCwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25Xcml0ZUJhcnJpZXJT
bG93UGF0aCkpOwogI2lmIEVOQUJMRShERkdfSklUKQotICAgIGlmIChPcHRpb25zOjp1c2VERkdK
SVQoKSkKKyAgICBpZiAoY2FuQmVPcHRpbWl6ZWQpCiAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmso
b3BlcmF0aW9uT3B0aW1pemVDYWxsLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJh
dGlvbk9wdGltaXplKSk7CiAjZW5kaWYKLSAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1
ZmZlciwgSklUVGh1bmtQdHJUYWcsICJCYXNlbGluZTogb3BfZW50ZXJfaGFuZGxlciIpOworICAg
IHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgdGh1bmtO
YW1lKTsKK30KKworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6Om9w
X2VudGVyX2NhbkJlT3B0aW1pemVkX0dlbmVyYXRvcihWTSYgdm0pCit7CisgICAgSklUIGppdCh2
bSk7CisgICAgY29uc3RleHByIGJvb2wgY2FuQmVPcHRpbWl6ZWQgPSB0cnVlOworICAgIHJldHVy
biBqaXQub3BfZW50ZXJfR2VuZXJhdG9yKHZtLCBjYW5CZU9wdGltaXplZCwgIkJhc2VsaW5lOiBv
cF9lbnRlcl9jYW5CZU9wdGltaXplZCIpOworfQorCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHJUYWc+IEpJVDo6b3BfZW50ZXJfY2Fubm90QmVPcHRpbWl6ZWRfR2VuZXJhdG9yKFZN
JiB2bSkKK3sKKyAgICBKSVQgaml0KHZtKTsKKyAgICBjb25zdGV4cHIgYm9vbCBjYW5CZU9wdGlt
aXplZCA9IGZhbHNlOworICAgIHJldHVybiBqaXQub3BfZW50ZXJfR2VuZXJhdG9yKHZtLCBjYW5C
ZU9wdGltaXplZCwgIkJhc2VsaW5lOiBvcF9lbnRlcl9jYW5ub3RCZU9wdGltaXplZCIpOwogfQog
I2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCkBAIC0xNDE2LDYgKzE0MjgsNyBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oCiAKICNlbmRpZiAvLyBV
U0UoSlNWQUxVRTY0KQogCisjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogdm9pZCBKSVQ6
OmVtaXRfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbikKIHsKICNp
ZiBVU0UoSlNWQUxVRTY0KQpAQCAtMTQ2OSw2ICsxNDgyLDE1NyBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfbG9vcF9oaW50KGNvbnN0IEluCiAgICAgVU5VU0VEX1BBUkFNKGl0ZXIpOwogI2VuZGlm
CiB9CisjZWxzZSAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKKwordm9pZCBKSVQ6OmVtaXRf
b3BfbG9vcF9oaW50KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbikKK3sKKyAgICBWTSYg
dm0gPSB0aGlzLT52bSgpOworICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29k
ZUluZGV4Lm9mZnNldCgpOworICAgIEFTU0VSVChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0
KSA9PSBtX2J5dGVjb2RlSW5kZXgpOworICAgIEFTU0VSVChtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rp
b25BdChtX2J5dGVjb2RlSW5kZXgpID09IGluc3RydWN0aW9uKTsKKworICAgIGNvbnN0ZXhwciBH
UFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNzsKKworICAgIGlmIChVTkxJS0VMWShPcHRp
b25zOjpyZXR1cm5FYXJseUZyb21JbmZpbml0ZUxvb3BzRm9yRnV6emluZygpICYmIG1fY29kZUJs
b2NrLT5sb29wSGludHNBcmVFbGlnaWJsZUZvckZ1enppbmdFYXJseVJldHVybigpKSkgeworICAg
ICAgICBjb25zdGV4cHIgR1BSUmVnIGxvb3BIaW50RXhlY3V0aW9uQ291bnRlckdQUiA9IHJlZ1Q2
OworICAgICAgICBjb25zdGV4cHIgR1BSUmVnIGNhbkJlT3B0aW1pemVkR1BSID0gcmVnVDU7CisK
KyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNl
dEdQUik7CisgICAgICAgIHVpbnQ2NF90KiBwdHIgPSB2bS5nZXRMb29wSGludEV4ZWN1dGlvbkNv
dW50ZXIoaW5zdHJ1Y3Rpb24pOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIocHRyKSwgbG9v
cEhpbnRFeGVjdXRpb25Db3VudGVyR1BSKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoY2Fu
QmVPcHRpbWl6ZWQoKSksIGNhbkJlT3B0aW1pemVkR1BSKTsKKyAgICAgICAgZW1pdE5ha2VkTmVh
ckNhbGwodm0uZ2V0Q1RJU3R1YihvcF9sb29wX2hpbnRfZnV6ekdlbmVyYXRvcikucmV0YWdnZWRD
b2RlPE5vUHRyVGFnPigpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworI2lmIEVOQUJMRShE
RkdfSklUKQorICAgIGlmIChjYW5CZU9wdGltaXplZCgpKSB7CisgICAgICAgIG1vdmUoVHJ1c3Rl
ZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOworICAgICAgICBlbWl0
TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKG9wX2xvb3BfaGludEdlbmVyYXRvcikucmV0YWdn
ZWRDb2RlPE5vUHRyVGFnPigpKTsKKyAgICB9CisjZW5kaWYKK30KKworTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6Om9wX2xvb3BfaGludF9mdXp6R2VuZXJhdG9yKFZN
JiB2bSkKK3sKKyAgICAvLyBUaGUgdGh1bmsgZ2VuZXJhdGVkIGJ5IHRoaXMgZnVuY3Rpb24gY2Fu
IG9ubHkgd29yayB3aXRoIHRoZSBMTEludCAvIEJhc2VsaW5lIEpJVCBiZWNhdXNlCisgICAgLy8g
aXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBh
dmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgorICAgIC8vIERGRy9GVEwgbWF5
IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNo
IG1heSBub3QgbWF0Y2gKKyAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgorICAgIEpJVCBq
aXQodm0pOworCisgICAgUkVMRUFTRV9BU1NFUlQoT3B0aW9uczo6cmV0dXJuRWFybHlGcm9tSW5m
aW5pdGVMb29wc0ZvckZ1enppbmcoKSk7CisKKyAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwor
CisgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q3OyAvLyBpbmNv
bWluZy4KKyAgICBjb25zdGV4cHIgR1BSUmVnIGxvb3BIaW50RXhlY3V0aW9uQ291bnRlckdQUiA9
IHJlZ1Q2OyAvLyBpbmNvbWluZworICAgIGNvbnN0ZXhwciBHUFJSZWcgY2FuQmVPcHRpbWl6ZWRH
UFIgPSByZWdUNTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGNvZGVCbG9ja0dQUiA9IHJlZ1Q0Owor
CisgICAgVU5VU0VEX1BBUkFNKGJ5dGVjb2RlT2Zmc2V0R1BSKTsgLy8gcGFzcyB0aHJ1IHRvIG9w
X2xvb3BfaGludEdlbmVyYXRvci4KKyAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFt
ZVNsb3Q6OmNvZGVCbG9jayksIGNvZGVCbG9ja0dQUik7CisKKyAgICBqaXQubG9hZDY0KEFkZHJl
c3MobG9vcEhpbnRFeGVjdXRpb25Db3VudGVyR1BSKSwgcmVnVDApOworICAgIGF1dG8gc2tpcEVh
cmx5UmV0dXJuID0gaml0LmJyYW5jaDY0KEJlbG93LCByZWdUMCwgVHJ1c3RlZEltbTY0KE9wdGlv
bnM6OmVhcmx5UmV0dXJuRnJvbUluZmluaXRlTG9vcHNMaW1pdCgpKSk7CisKKyAgICBqaXQubG9h
ZFB0cihBZGRyZXNzKGNvZGVCbG9ja0dQUiwgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVj
dCgpKSwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworCisjaWYgQ1BVKFg4Nl82NCkKKyAgICAv
LyBQb3AgYmFjayB0byBjYWxsZXIgZnJhbWUgc28gdGhhdCB3ZSBjYW4gZm9yY2UgYW4gZWFybHkg
cmV0dXJuIGZyb20gdGhlcmUuCisgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW0zMihzaXplb2YoQ1BVUmVnaXN0ZXIpKSwgWDg2UmVnaXN0ZXJzOjplc3ApOworI2VuZGlmCisK
KyAgICBqaXQuY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKKyAgICBqaXQuZW1pdFJlc3Rv
cmVDYWxsZWVTYXZlc0ZvckJhc2VsaW5lSklUKCk7CisgICAgaml0LmVtaXRGdW5jdGlvbkVwaWxv
Z3VlKCk7CisgICAgaml0LnJldCgpOworCisgICAgc2tpcEVhcmx5UmV0dXJuLmxpbmsoJmppdCk7
CisgICAgaml0LmFkZDY0KFRydXN0ZWRJbW0zMigxKSwgcmVnVDApOworICAgIGppdC5zdG9yZTY0
KHJlZ1QwLCBBZGRyZXNzKGxvb3BIaW50RXhlY3V0aW9uQ291bnRlckdQUikpOworCisjaWYgIUVO
QUJMRShERkdfSklUKQorICAgIFVOVVNFRF9QQVJBTShjYW5CZU9wdGltaXplZEdQUik7CisgICAg
aml0LnJldCgpOworCisjZWxzZSAvLyBFTkFCTEUoREZHX0pJVCkKKyAgICBKdW1wIGNhbkJlT3B0
aW1pemVkID0gaml0LmJyYW5jaFRlc3QzMihOb25aZXJvLCBjYW5CZU9wdGltaXplZEdQUik7Cisg
ICAgaml0LnJldCgpOworCisgICAgY2FuQmVPcHRpbWl6ZWQubGluaygmaml0KTsKKyAgICBqaXQu
dW50YWdSZXR1cm5BZGRyZXNzKCk7CisgICAgSnVtcCBsb29wSGludFRodW5rSnVtcCA9IGppdC5q
dW1wKCk7CisjZW5kaWYgLy8gIUVOQUJMRShERkdfSklUKQorCisgICAgTGlua0J1ZmZlciBwYXRj
aEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6RXh0cmFD
VElUaHVuayk7CisjaWYgRU5BQkxFKERGR19KSVQpCisgICAgYXV0byBsb29wSGludFRodW5rID0g
dm0uZ2V0Q1RJU3R1YihvcF9sb29wX2hpbnRHZW5lcmF0b3IpOworICAgIHBhdGNoQnVmZmVyLmxp
bmsobG9vcEhpbnRUaHVua0p1bXAsIENvZGVMb2NhdGlvbkxhYmVsKGxvb3BIaW50VGh1bmsucmV0
YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7CisjZW5kaWYKKyAgICByZXR1cm4gRklOQUxJWkVfQ09E
RShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsICJCYXNlbGluZTogb3BfbG9vcF9oaW50X2Z1
enoiKTsKK30KKworI2lmIEVOQUJMRShERkdfSklUKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiBKSVQ6Om9wX2xvb3BfaGludEdlbmVyYXRvcihWTSYgdm0pCit7CisgICAg
Ly8gVGhlIHRodW5rIGdlbmVyYXRlZCBieSB0aGlzIGZ1bmN0aW9uIGNhbiBvbmx5IHdvcmsgd2l0
aCB0aGUgTExJbnQgLyBCYXNlbGluZSBKSVQgYmVjYXVzZQorICAgIC8vIGl0IG1ha2VzIGFzc3Vt
cHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20g
Q2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KKyAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rp
b25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNo
CisgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KKyAgICBKSVQgaml0KHZtKTsKKworICAg
IGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CisKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2Rl
T2Zmc2V0R1BSID0gcmVnVDc7IC8vIGluY29taW5nLgorICAgIGNvbnN0ZXhwciBHUFJSZWcgY29k
ZUJsb2NrR1BSID0gcmVnVDY7CisgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVT
bG90Ojpjb2RlQmxvY2spLCBjb2RlQmxvY2tHUFIpOworCisgICAgLy8gRW1pdCB0aGUgSklUIG9w
dGltaXphdGlvbiBjaGVjazoKKyAgICBKdW1wIG5lZWRPcHRpbWl6YXRpb25DaGVjayA9IGppdC5i
cmFuY2hBZGQzMihQb3NpdGl2ZU9yWmVybywgVHJ1c3RlZEltbTMyKE9wdGlvbnM6OmV4ZWN1dGlv
bkNvdW50ZXJJbmNyZW1lbnRGb3JMb29wKCkpLAorICAgICAgICAgICAgQWRkcmVzcyhjb2RlQmxv
Y2tHUFIsIENvZGVCbG9jazo6b2Zmc2V0T2ZKSVRFeGVjdXRlQ291bnRlcigpKSk7CisgICAgaml0
LnJldCgpOworCisgICAgbmVlZE9wdGltaXphdGlvbkNoZWNrLmxpbmsoJmppdCk7CisKKyNpZiBD
UFUoWDg2XzY0KQorICAgIGppdC5wdXNoKFg4NlJlZ2lzdGVyczo6ZWJwKTsKKyNlbGlmIENQVShB
Uk02NCkKKyAgICBqaXQucHVzaFBhaXIoZnJhbWVQb2ludGVyUmVnaXN0ZXIsIGxpbmtSZWdpc3Rl
cik7CisjZW5kaWYKKworICAgIGppdC5jb3B5TExJbnRCYXNlbGluZUNhbGxlZVNhdmVzRnJvbUZy
YW1lT3JSZWdpc3RlclRvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtLnRvcEVudHJ5RnJh
bWUpOworCisgICAgaml0LnN0b3JlMzIoYnl0ZWNvZGVPZmZzZXRHUFIsIENDYWxsSGVscGVyczo6
dGFnRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSk7CisgICAg
aml0LmxzaGlmdDMyKFRydXN0ZWRJbW0zMihCeXRlY29kZUluZGV4OjpjaGVja3BvaW50U2hpZnQp
LCBieXRlY29kZU9mZnNldEdQUik7CisgICAgaml0LnNldHVwQXJndW1lbnRzPGRlY2x0eXBlKG9w
ZXJhdGlvbk9wdGltaXplKT4oVHJ1c3RlZEltbVB0cigmdm0pLCBieXRlY29kZU9mZnNldEdQUik7
CisgICAgaml0LnByZXBhcmVDYWxsT3BlcmF0aW9uKHZtKTsKKyAgICBDYWxsIG9wZXJhdGlvbkNh
bGwgPSBqaXQuY2FsbChPcGVyYXRpb25QdHJUYWcpOworICAgIAorI2lmIENQVShYODZfNjQpCisg
ICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigyICogc2l6ZW9mKENQVVJl
Z2lzdGVyKSksIFg4NlJlZ2lzdGVyczo6ZXNwKTsKKyNlbGlmIENQVShBUk02NCkKKyAgICBqaXQu
cG9wUGFpcihmcmFtZVBvaW50ZXJSZWdpc3RlciwgbGlua1JlZ2lzdGVyKTsKKyNlbmRpZgorCisg
ICAgSnVtcCBoYXNPcHRpbWl6ZWRFbnRyeSA9IGppdC5icmFuY2hUZXN0UHRyKE5vblplcm8sIHJl
dHVyblZhbHVlR1BSKTsKKyAgICBqaXQucmV0KCk7CisKKyAgICBoYXNPcHRpbWl6ZWRFbnRyeS5s
aW5rKCZqaXQpOworICAgIGlmIChBU1NFUlRfRU5BQkxFRCkgeworICAgICAgICBKdW1wIG9rID0g
aml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6QWJvdmUsIHJldHVyblZhbHVlR1BSLCBUcnVz
dGVkSW1tUHRyKGJpdHdpc2VfY2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KDEwMDAp
KSkpOworICAgICAgICBqaXQuYWJvcnRXaXRoUmVhc29uKEpJVFVucmVhc29uYWJsZUxvb3BIaW50
SnVtcFRhcmdldCk7CisgICAgICAgIG9rLmxpbmsoJmppdCk7CisgICAgfQorCisgICAgaml0LmZh
ckp1bXAocmV0dXJuVmFsdWVHUFIsIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKKworICAg
IExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6
OlByb2ZpbGU6OkV4dHJhQ1RJVGh1bmspOworICAgIHBhdGNoQnVmZmVyLmxpbmsob3BlcmF0aW9u
Q2FsbCwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25PcHRpbWl6ZSkpOwor
ICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgIkJh
c2VsaW5lOiBvcF9sb29wX2hpbnQiKTsKK30KKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKyNl
bmRpZiAvLyAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKIHZvaWQgSklUOjplbWl0X29wX2No
ZWNrX3RyYXBzKGNvbnN0IEluc3RydWN0aW9uKikKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvU2xvd1BhdGhDYWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L1Nsb3dQYXRoQ2FsbC5jcHAJKHJldmlzaW9uIDI3ODIwMykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvU2xvd1BhdGhDYWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUs
OCArNDUsOCBAQCB2b2lkIEpJVFNsb3dQYXRoQ2FsbDo6Y2FsbCgpCiAgICAgQVNTRVJUKEJ5dGVj
b2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpID09IG1faml0LT5tX2J5dGVjb2RlSW5kZXgpOwogCiAg
ICAgVU5VU0VEX1ZBUklBQkxFKG1fcGMpOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVP
ZmZzZXRSZWcgPSBHUFJJbmZvOjphcmd1bWVudEdQUjE7Ci0gICAgbV9qaXQtPm1vdmUoSklUOjpU
cnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldFJlZyk7CisgICAgY29u
c3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IEdQUkluZm86OmFyZ3VtZW50R1BSMTsK
KyAgICBtX2ppdC0+bW92ZShKSVQ6OlRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVj
b2RlT2Zmc2V0R1BSKTsKICAgICBtX2ppdC0+ZW1pdE5ha2VkTmVhckNhbGwodm0uaml0U3R1YnMt
PmN0aVNsb3dQYXRoRnVuY3Rpb25TdHViKHZtLCBtX3Nsb3dQYXRoRnVuY3Rpb24pLnJldGFnZ2Vk
Q29kZTxOb1B0clRhZz4oKSk7CiB9CiAKQEAgLTU0LDcgKzU0LDcgQEAgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogewogICAgIENDYWxsSGVscGVycyBqaXQ7CiAKLSAg
ICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0UmVnID0gSklUOjphcmd1bWVudEdQUjE7
CisgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IEpJVDo6YXJndW1lbnRH
UFIxOwogCiAjaWYgQ1BVKFg4Nl82NCkKICAgICBqaXQucHVzaChYODZSZWdpc3RlcnM6OmVicCk7
CkBAIC02MywxNCArNjMsMTQgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiBKSQogICAgIGppdC5wdXNoUGFpcihDQ2FsbEhlbHBlcnM6OmZyYW1lUG9pbnRlclJlZ2lzdGVy
LCBDQ2FsbEhlbHBlcnM6OmxpbmtSZWdpc3Rlcik7CiAjZW5kaWYKIAotICAgIGppdC5zdG9yZTMy
KGJ5dGVjb2RlT2Zmc2V0UmVnLCBDQ2FsbEhlbHBlcnM6OnRhZ0ZvcihDYWxsRnJhbWVTbG90Ojph
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykpOworICAgIGppdC5zdG9yZTMyKGJ5dGVjb2RlT2Zm
c2V0R1BSLCBDQ2FsbEhlbHBlcnM6OnRhZ0ZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcykpOwogCiAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjphZGRyZXNz
Rm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CiAK
ICAgICBqaXQucHJlcGFyZUNhbGxPcGVyYXRpb24odm0pOwogCiAgICAgaml0LmxvYWRQdHIoQ0Nh
bGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmFyZ3VtZW50R1BSMCwgQ29kZUJsb2NrOjpvZmZz
ZXRPZkluc3RydWN0aW9uc1Jhd1BvaW50ZXIoKSksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7Ci0g
ICAgc3RhdGljX2Fzc2VydChKSVQ6OmFyZ3VtZW50R1BSMSA9PSBieXRlY29kZU9mZnNldFJlZyk7
CisgICAgc3RhdGljX2Fzc2VydChKSVQ6OmFyZ3VtZW50R1BSMSA9PSBieXRlY29kZU9mZnNldEdQ
Uik7CiAgICAgaml0LmFkZFB0cihHUFJJbmZvOjphcmd1bWVudEdQUjAsIEdQUkluZm86OmFyZ3Vt
ZW50R1BSMSk7CiAgICAgaml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUklu
Zm86OmFyZ3VtZW50R1BSMCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1
bmtHZW5lcmF0b3JzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1RodW5rR2VuZXJhdG9ycy5jcHAJKHJldmlzaW9uIDI3ODIwMykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODEsMTEg
KzgxLDExIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gcG8KIHsKICAg
ICBDQ2FsbEhlbHBlcnMgaml0OwogCi0jaWYgQ1BVKFg4Nl82NCkKLSAgICBqaXQuYWRkUHRyKEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDIgKiBzaXplb2YoQ1BVUmVnaXN0ZXIpKSwgWDg2UmVn
aXN0ZXJzOjplc3ApOwotI2VsaWYgQ1BVKEFSTTY0KQotICAgIGppdC5wb3BQYWlyKENDYWxsSGVs
cGVyczo6ZnJhbWVQb2ludGVyUmVnaXN0ZXIsIENDYWxsSGVscGVyczo6bGlua1JlZ2lzdGVyKTsK
LSNlbmRpZgorLy8jaWYgQ1BVKFg4Nl82NCkKKyAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbTMyKDIgKiBzaXplb2YoQ1BVUmVnaXN0ZXIpKSwgQ0NhbGxIZWxwZXJzOjpzdGFj
a1BvaW50ZXJSZWdpc3Rlcik7CisvLyNlbGlmIENQVShBUk02NCkKKy8vICAgIGppdC5wb3BQYWly
KENDYWxsSGVscGVyczo6ZnJhbWVQb2ludGVyUmVnaXN0ZXIsIENDYWxsSGVscGVyczo6bGlua1Jl
Z2lzdGVyKTsKKy8vI2VuZGlmCiAKICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgY29udGludWF0aW9u
ID0gaml0Lmp1bXAoKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0
aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0
aW9ucy5jcHAJKHJldmlzaW9uIDI3ODIwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL09wdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NjgsNiArNTY4LDggQEAgdm9pZCBP
cHRpb25zOjpyZWNvbXB1dGVEZXBlbmRlbnRPcHRpb25zKAogCiAgICAgaWYgKE9wdGlvbnM6OnZl
cmJvc2VWZXJpZnlHQygpKQogICAgICAgICBPcHRpb25zOjp2ZXJpZnlHQygpID0gdHJ1ZTsKKwor
ICAgIE9wdGlvbnM6OnVzZURvbGxhclZNKCkgPSB0cnVlOyAvLyBtbGFtIFRFU1QKIH0KIAogaW5s
aW5lIHZvaWQqIE9wdGlvbnM6OmFkZHJlc3NPZk9wdGlvbihPcHRpb25zOjpJRCBpZCkKQEAgLTYw
Nyw5ICs2MDksOSBAQCB2b2lkIE9wdGlvbnM6OmluaXRpYWxpemUoKQogICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQoT3B0aW9uczo6YWRkcmVzc09mT3B0aW9uKGZvcmNlT1NSRXhpdFRvTExJbnRJ
RCkgPT0gICZPcHRpb25zOjpmb3JjZU9TUkV4aXRUb0xMSW50KCkpOwogICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQoT3B0aW9uczo6YWRkcmVzc09mT3B0aW9uRGVmYXVsdChmb3JjZU9TUkV4aXRU
b0xMSW50SUQpID09ICAmT3B0aW9uczo6Zm9yY2VPU1JFeGl0VG9MTEludERlZmF1bHQoKSk7CiAK
LSNpZm5kZWYgTkRFQlVHCisvLyNpZm5kZWYgTkRFQlVHCiAgICAgICAgICAgICBDb25maWc6OmVu
YWJsZVJlc3RyaWN0ZWRPcHRpb25zKCk7Ci0jZW5kaWYKKy8vI2VuZGlmCiAgICAgICAgICAgICAv
LyBJbml0aWFsaXplIGVhY2ggb2YgdGhlIG9wdGlvbnMgd2l0aCB0aGVpciBkZWZhdWx0IHZhbHVl
czoKICNkZWZpbmUgSU5JVF9PUFRJT04odHlwZV8sIG5hbWVfLCBkZWZhdWx0VmFsdWVfLCBhdmFp
bGFiaWxpdHlfLCBkZXNjcmlwdGlvbl8pIHsgXAogICAgICAgICAgICAgICAgIGF1dG8gdmFsdWUg
PSBkZWZhdWx0VmFsdWVfOyBcCg==
</data>
<flag name="commit-queue"
          id="451345"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>430119</attachid>
            <date>2021-05-29 17:39:15 -0700</date>
            <delta_ts>2021-05-29 20:31:00 -0700</delta_ts>
            <desc>work in progress.</desc>
            <filename>wip-loop-hint+prologue+enter5.patch</filename>
            <type>text/plain</type>
            <size>44881</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNy
b0Fzc2VtYmxlckNvZGVSZWYuaAkocmV2aXNpb24gMjc4MjAzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaAkod29ya2luZyBjb3B5KQpA
QCAtMjM3LDcgKzIzNyw4IEBAIHB1YmxpYzoKICAgICBleHBsaWNpdCBSZXR1cm5BZGRyZXNzUHRy
KGNvbnN0IHZvaWQqIHJldHVybkFkZHJlc3MpCiAgICAgewogI2lmIENQVShBUk02NEUpCi0gICAg
ICAgIGFzc2VydElzTm90VGFnZ2VkKHJldHVybkFkZHJlc3MpOworLy8gICAgICAgIGFzc2VydElz
Tm90VGFnZ2VkKHJldHVybkFkZHJlc3MpOworICAgICAgICByZXR1cm5BZGRyZXNzID0gcmVtb3Zl
Q29kZVB0clRhZyhyZXR1cm5BZGRyZXNzKTsgLy8gbWxhbSBURVNUCiAgICAgICAgIHJldHVybkFk
ZHJlc3MgPSByZXRhZ0NvZGVQdHI8Tm9QdHJUYWcsIFJldHVybkFkZHJlc3NQdHJUYWc+KHJldHVy
bkFkZHJlc3MpOwogI2VuZGlmCiAgICAgICAgIG1fdmFsdWUgPSByZXR1cm5BZGRyZXNzOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24g
Mjc4MjAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xNzAsNiArMTcwLDcgQEAgcHVibGljOgogCiAgICAgdW5zaWduZWQq
IGFkZHJlc3NPZk51bVBhcmFtZXRlcnMoKSB7IHJldHVybiAmbV9udW1QYXJhbWV0ZXJzOyB9CiAg
ICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZk51bVBhcmFtZXRlcnMoKSB7IHJldHVybiBPQkpF
Q1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX251bVBhcmFtZXRlcnMpOyB9CisgICAgc3RhdGljIHB0
cmRpZmZfdCBvZmZzZXRPZk51bVZhcnMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJs
b2NrLCBtX251bVZhcnMpOyB9CiAKICAgICBDb2RlQmxvY2sqIGFsdGVybmF0aXZlKCkgY29uc3Qg
eyByZXR1cm4gc3RhdGljX2Nhc3Q8Q29kZUJsb2NrKj4obV9hbHRlcm5hdGl2ZS5nZXQoKSk7IH0K
ICAgICB2b2lkIHNldEFsdGVybmF0aXZlKFZNJiwgQ29kZUJsb2NrKik7CkBAIC00ODYsNiArNDg3
LDggQEAgcHVibGljOgogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAorICAgIHN0YXRp
YyBwdHJkaWZmX3Qgb2Zmc2V0T2ZBcmd1bWVudFZhbHVlUHJvZmlsZXMoKSB7IHJldHVybiBPQkpF
Q1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2FyZ3VtZW50VmFsdWVQcm9maWxlcyk7IH0KKwogICAg
IFZhbHVlUHJvZmlsZSYgdmFsdWVQcm9maWxlRm9yQnl0ZWNvZGVJbmRleChCeXRlY29kZUluZGV4
KTsKICAgICBTcGVjdWxhdGVkVHlwZSB2YWx1ZVByb2ZpbGVQcmVkaWN0aW9uRm9yQnl0ZWNvZGVJ
bmRleChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBCeXRlY29kZUluZGV4KTsKIApAQCAtODE5
LDcgKzgyMiw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBib29sIHdhc0NvbXBpbGVkV2l0aERl
YnVnZ2luZ09wY29kZXMoKSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+d2FzQ29tcGls
ZWRXaXRoRGVidWdnaW5nT3Bjb2RlcygpOyB9Ci0gICAgCisKICAgICAvLyBUaGlzIGlzIGludGVu
dGlvbmFsbHkgcHVibGljOyBpdCdzIHRoZSByZXNwb25zaWJpbGl0eSBvZiBhbnlvbmUgZG9pbmcg
YW55CiAgICAgLy8gb2YgdGhlIGZvbGxvd2luZyB0byBob2xkIHRoZSBsb2NrOgogICAgIC8vCkBA
IC05MDYsNiArOTA5LDggQEAgcHVibGljOgogCiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRP
Zk1ldGFkYXRhVGFibGUoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX21l
dGFkYXRhKTsgfQogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZJbnN0cnVjdGlvbnNSYXdQ
b2ludGVyKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9pbnN0cnVjdGlv
bnNSYXdQb2ludGVyKTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZTaG91bGRBbHdh
eXNCZUlubGluZWQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX3Nob3Vs
ZEFsd2F5c0JlSW5saW5lZCk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mVW5saW5r
ZWRDb2RlKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV91bmxpbmtlZENv
ZGUpOyB9CiAKICAgICBib29sIGxvb3BIaW50c0FyZUVsaWdpYmxlRm9yRnV6emluZ0Vhcmx5UmV0
dXJuKCkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVs
cGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlI
ZWxwZXJzLmgJKHJldmlzaW9uIDI3ODIwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
QXNzZW1ibHlIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyNiw2ICszMjYsMTEgQEAgcHVi
bGljOgogICAgICAgICBBU1NFUlQoY29kZUJsb2NrKTsKIAogICAgICAgICBjb25zdCBSZWdpc3Rl
ckF0T2Zmc2V0TGlzdCogY2FsbGVlU2F2ZXMgPSBjb2RlQmxvY2stPmNhbGxlZVNhdmVSZWdpc3Rl
cnMoKTsKKyAgICAgICAgZW1pdFNhdmVDYWxsZWVTYXZlc0ZvcihjYWxsZWVTYXZlcyk7CisgICAg
fQorCisgICAgdm9pZCBlbWl0U2F2ZUNhbGxlZVNhdmVzRm9yKGNvbnN0IFJlZ2lzdGVyQXRPZmZz
ZXRMaXN0KiBjYWxsZWVTYXZlcykKKyAgICB7CiAgICAgICAgIFJlZ2lzdGVyU2V0IGRvbnRTYXZl
UmVnaXN0ZXJzID0gUmVnaXN0ZXJTZXQoUmVnaXN0ZXJTZXQ6OnN0YWNrUmVnaXN0ZXJzKCksIFJl
Z2lzdGVyU2V0OjphbGxGUFJzKCkpOwogICAgICAgICB1bnNpZ25lZCByZWdpc3RlckNvdW50ID0g
Y2FsbGVlU2F2ZXMtPnNpemUoKTsKIApAQCAtMzk5LDYgKzQwNCwxMSBAQCBwdWJsaWM6CiAgICAg
ICAgIGVtaXRTYXZlQ2FsbGVlU2F2ZXNGb3IoY29kZUJsb2NrKCkpOwogICAgIH0KIAorICAgIHZv
aWQgZW1pdFNhdmVDYWxsZWVTYXZlc0ZvckJhc2VsaW5lSklUKCkKKyAgICB7CisgICAgICAgIGVt
aXRTYXZlQ2FsbGVlU2F2ZXNGb3IoJlJlZ2lzdGVyQXRPZmZzZXRMaXN0OjpsbGludEJhc2VsaW5l
Q2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKKyAgICB9CisKICAgICB2b2lkIGVtaXRTYXZlVGhlbk1h
dGVyaWFsaXplVGFnUmVnaXN0ZXJzKCkKICAgICB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKQEAgLTQx
Nyw2ICs0MjcsMTEgQEAgcHVibGljOgogICAgICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzRm9y
KGNvZGVCbG9jaygpKTsKICAgICB9CiAKKyAgICB2b2lkIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXNG
b3JCYXNlbGluZUpJVCgpCisgICAgeworICAgICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzRm9y
KCZSZWdpc3RlckF0T2Zmc2V0TGlzdDo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVSZWdpc3RlcnMo
KSk7CisgICAgfQorCiAgICAgdm9pZCBlbWl0UmVzdG9yZVNhdmVkVGFnUmVnaXN0ZXJzKCkKICAg
ICB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJ
KHJldmlzaW9uIDI3ODIwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAko
d29ya2luZyBjb3B5KQpAQCAtODIsNyArODIsNyBAQCBKSVQ6On5KSVQoKQogewogfQogCi0jaWYg
RU5BQkxFKERGR19KSVQpCisjaWYgRU5BQkxFKERGR19KSVQpICYmICFFTkFCTEUoRVhUUkFfQ1RJ
X1RIVU5LUykKIHZvaWQgSklUOjplbWl0RW50ZXJPcHRpbWl6YXRpb25DaGVjaygpCiB7CiAgICAg
aWYgKCFjYW5CZU9wdGltaXplZCgpKQpAQCAtMTAwLDcgKzEwMCw3IEBAIHZvaWQgSklUOjplbWl0
RW50ZXJPcHRpbWl6YXRpb25DaGVjaygpCiAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgR1BS
SW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOwogICAgIHNraXBPcHRpbWl6ZS5saW5rKHRoaXMpOwog
fQotI2VuZGlmCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpICYmICFFTkFCTEUoRVhUUkFfQ1RJ
X1RIVU5LUykoCiAKIHZvaWQgSklUOjplbWl0Tm90aWZ5V3JpdGUoV2F0Y2hwb2ludFNldCogc2V0
KQogewpAQCAtNTc0LDcgKzU3NCw5IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNl
cygpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9qbmVxKQogICAgICAgICBERUZJTkVf
U0xPV0NBU0VfT1Aob3BfanN0cmljdGVxKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3Bf
am5zdHJpY3RlcSkKKyNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAgICAgICAgIERFRklO
RV9TTE9XQ0FTRV9PUChvcF9sb29wX2hpbnQpCisjZW5kaWYKICAgICAgICAgREVGSU5FX1NMT1dD
QVNFX09QKG9wX2NoZWNrX3RyYXBzKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfbW9k
KQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfbXVsKQpAQCAtNjYwLDYgKzY2MiwyNyBA
QCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogI2VuZGlmCiB9CiAKKyNkZWZp
bmUgRk9SX0VBQ0hfTk9OX1BST0ZJTElOR19QUk9MT0dVRV9HRU5FUkFUT1IodikgXAorICAgIHYo
IWRvZXNQcm9maWxpbmcsICFpc0NvbnN0cnVjdG9yLCAhaGFzSHVnZUZyYW1lLCBwcm9sb2d1ZUdl
bmVyYXRvcjAsIGFyaXR5Rml4dXBfcHJvbG9ndWVHZW5lcmF0b3IwKSBcCisgICAgdighZG9lc1By
b2ZpbGluZywgIWlzQ29uc3RydWN0b3IsICBoYXNIdWdlRnJhbWUsIHByb2xvZ3VlR2VuZXJhdG9y
MSwgYXJpdHlGaXh1cF9wcm9sb2d1ZUdlbmVyYXRvcjEpIFwKKyAgICB2KCFkb2VzUHJvZmlsaW5n
LCAgaXNDb25zdHJ1Y3RvciwgIWhhc0h1Z2VGcmFtZSwgcHJvbG9ndWVHZW5lcmF0b3IyLCBhcml0
eUZpeHVwX3Byb2xvZ3VlR2VuZXJhdG9yMikgXAorICAgIHYoIWRvZXNQcm9maWxpbmcsICBpc0Nv
bnN0cnVjdG9yLCAgaGFzSHVnZUZyYW1lLCBwcm9sb2d1ZUdlbmVyYXRvcjMsIGFyaXR5Rml4dXBf
cHJvbG9ndWVHZW5lcmF0b3IzKQorCisjaWYgRU5BQkxFKERGR19KSVQpCisjZGVmaW5lIEZPUl9F
QUNIX1BST0ZJTElOR19QUk9MT0dVRV9HRU5FUkFUT1IodikgXAorICAgIHYoIGRvZXNQcm9maWxp
bmcsICFpc0NvbnN0cnVjdG9yLCAhaGFzSHVnZUZyYW1lLCBwcm9sb2d1ZUdlbmVyYXRvcjQsIGFy
aXR5Rml4dXBfcHJvbG9ndWVHZW5lcmF0b3I0KSBcCisgICAgdiggZG9lc1Byb2ZpbGluZywgIWlz
Q29uc3RydWN0b3IsICBoYXNIdWdlRnJhbWUsIHByb2xvZ3VlR2VuZXJhdG9yNSwgYXJpdHlGaXh1
cF9wcm9sb2d1ZUdlbmVyYXRvcjUpIFwKKyAgICB2KCBkb2VzUHJvZmlsaW5nLCAgaXNDb25zdHJ1
Y3RvciwgIWhhc0h1Z2VGcmFtZSwgcHJvbG9ndWVHZW5lcmF0b3I2LCBhcml0eUZpeHVwX3Byb2xv
Z3VlR2VuZXJhdG9yNikgXAorICAgIHYoIGRvZXNQcm9maWxpbmcsICBpc0NvbnN0cnVjdG9yLCAg
aGFzSHVnZUZyYW1lLCBwcm9sb2d1ZUdlbmVyYXRvcjcsIGFyaXR5Rml4dXBfcHJvbG9ndWVHZW5l
cmF0b3I3KQorCisjZWxzZSAvLyBub3QgRU5BQkxFKERGR19KSVQpCisjZGVmaW5lIEZPUl9FQUNI
X1BST0ZJTElOR19QUk9MT0dVRV9HRU5FUkFUT1IodikKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJ
VCkKKworI2RlZmluZSBGT1JfRUFDSF9QUk9MT0dVRV9HRU5FUkFUT1IodikgXAorICAgIEZPUl9F
QUNIX05PTl9QUk9GSUxJTkdfUFJPTE9HVUVfR0VORVJBVE9SKHYpIFwKKyAgICBGT1JfRUFDSF9Q
Uk9GSUxJTkdfUFJPTE9HVUVfR0VORVJBVE9SKHYpCisKIHZvaWQgSklUOjpjb21waWxlQW5kTGlu
a1dpdGhvdXRGaW5hbGl6aW5nKEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKIHsKICAgICBE
Rkc6OkNhcGFiaWxpdHlMZXZlbCBsZXZlbCA9IG1fY29kZUJsb2NrLT5jYXBhYmlsaXR5TGV2ZWwo
KTsKQEAgLTcyMiw2ICs3NDUsOCBAQCB2b2lkIEpJVDo6Y29tcGlsZUFuZExpbmtXaXRob3V0Rmlu
YWxpemluCiAgICAgICAgIG5vcCgpOwogCiAgICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoKTsKKwor
I2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICBlbWl0UHV0VG9DYWxsRnJhbWVIZWFk
ZXIobV9jb2RlQmxvY2ssIENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayk7CiAKICAgICBMYWJlbCBi
ZWdpbkxhYmVsKHRoaXMpOwpAQCAtNzI5LDYgKzc1NCw3IEBAIHZvaWQgSklUOjpjb21waWxlQW5k
TGlua1dpdGhvdXRGaW5hbGl6aW4KICAgICBpbnQgZnJhbWVUb3BPZmZzZXQgPSBzdGFja1BvaW50
ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKTsKICAgICB1bnNpZ25l
ZCBtYXhGcmFtZVNpemUgPSAtZnJhbWVUb3BPZmZzZXQ7CiAgICAgYWRkUHRyKFRydXN0ZWRJbW0z
MihmcmFtZVRvcE9mZnNldCksIGNhbGxGcmFtZVJlZ2lzdGVyLCByZWdUMSk7CisKICAgICBKdW1w
TGlzdCBzdGFja092ZXJmbG93OwogICAgIGlmIChVTkxJS0VMWShtYXhGcmFtZVNpemUgPiBPcHRp
b25zOjpyZXNlcnZlZFpvbmVTaXplKCkpKQogICAgICAgICBzdGFja092ZXJmbG93LmFwcGVuZChi
cmFuY2hQdHIoQWJvdmUsIHJlZ1QxLCBjYWxsRnJhbWVSZWdpc3RlcikpOwpAQCAtNzQzLDExICs3
NjksMTAgQEAgdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbgogICAgIGlm
IChtX2NvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUpIHsKICAgICAgICAgQVNT
RVJUKCFtX2J5dGVjb2RlSW5kZXgpOwogICAgICAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygp
KSB7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0gMDsgYXJndW1lbnQgPCBt
X2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpOyArK2FyZ3VtZW50KSB7Ci0gICAgICAgICAgICAg
ICAgLy8gSWYgdGhpcyBpcyBhIGNvbnN0cnVjdG9yLCB0aGVuIHdlIHdhbnQgdG8gcHV0IGluIGEg
ZHVtbXkgcHJvZmlsaW5nIHNpdGUgKHRvCi0gICAgICAgICAgICAgICAgLy8ga2VlcCB0aGluZ3Mg
Y29uc2lzdGVudCkgYnV0IHdlIGRvbid0IGFjdHVhbGx5IHdhbnQgdG8gcmVjb3JkIHRoZSBkdW1t
eSB2YWx1ZS4KLSAgICAgICAgICAgICAgICBpZiAobV9jb2RlQmxvY2stPmlzQ29uc3RydWN0b3Io
KSAmJiAhYXJndW1lbnQpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgLy8gSWYgdGhpcyBpcyBhIGNvbnN0cnVjdG9yLCB0aGVuIHdlIHdhbnQgdG8gcHV0IGluIGEg
ZHVtbXkgcHJvZmlsaW5nIHNpdGUgKHRvCisgICAgICAgICAgICAvLyBrZWVwIHRoaW5ncyBjb25z
aXN0ZW50KSBidXQgd2UgZG9uJ3QgYWN0dWFsbHkgd2FudCB0byByZWNvcmQgdGhlIGR1bW15IHZh
bHVlLgorICAgICAgICAgICAgdW5zaWduZWQgc3RhcnRBcmd1bWVudCA9IG1fY29kZUJsb2NrLT5p
c0NvbnN0cnVjdG9yKCkgPyAxIDogMDsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgYXJndW1l
bnQgPSBzdGFydEFyZ3VtZW50OyBhcmd1bWVudCA8IG1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJz
KCk7ICsrYXJndW1lbnQpIHsKICAgICAgICAgICAgICAgICBpbnQgb2Zmc2V0ID0gQ2FsbEZyYW1l
Ojphcmd1bWVudE9mZnNldEluY2x1ZGluZ1RoaXMoYXJndW1lbnQpICogc3RhdGljX2Nhc3Q8aW50
PihzaXplb2YoUmVnaXN0ZXIpKTsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICAgICAgICAg
IEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CkBAIC03NjEsNyAr
Nzg2LDM2IEBAIHZvaWQgSklUOjpjb21waWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW4KICAgICAg
ICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLSAgICAKKyNlbHNlIC8vIEVOQUJMRShFWFRSQV9D
VElfVEhVTktTKQorICAgIGNvbnN0ZXhwciBHUFJSZWcgZnJhbWVUb3BPZmZzZXRHUFIgPSByZWdU
NzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGNvZGVCbG9ja0dQUiA9IHJlZ1Q2OworICAgIEFTU0VS
VCghbV9ieXRlY29kZUluZGV4KTsKKworICAgIGludCBmcmFtZVRvcE9mZnNldCA9IHN0YWNrUG9p
bnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpOworICAgIHVuc2ln
bmVkIG1heEZyYW1lU2l6ZSA9IC1mcmFtZVRvcE9mZnNldDsKKworICAgIGJvb2wgZG9lc1Byb2Zp
bGluZyA9IChtX2NvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUpICYmIHNob3Vs
ZEVtaXRQcm9maWxpbmcoKTsKKyAgICBib29sIGlzQ29uc3RydWN0b3IgPSBtX2NvZGVCbG9jay0+
aXNDb25zdHJ1Y3RvcigpOworICAgIGJvb2wgaGFzSHVnZUZyYW1lID0gbWF4RnJhbWVTaXplID4g
T3B0aW9uczo6cmVzZXJ2ZWRab25lU2l6ZSgpOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBUaHVu
a0dlbmVyYXRvciBnZW5lcmF0b3JzW10gPSB7CisjZGVmaW5lIFVTRV9QUk9MT0dVRV9HRU5FUkFU
T1IoZG9lc1Byb2ZpbGluZywgaXNDb25zdHJ1Y3RvciwgaGFzSHVnZUZyYW1lLCBuYW1lLCBhcml0
eUZpeHVwTmFtZSkgbmFtZSwKKyAgICAgICAgRk9SX0VBQ0hfUFJPTE9HVUVfR0VORVJBVE9SKFVT
RV9QUk9MT0dVRV9HRU5FUkFUT1IpCisjdW5kZWYgVVNFX1BST0xPR1VFX0dFTkVSQVRPUgorICAg
IH07CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBudW1iZXJPZkdlbmVyYXRvcnMgPSBz
aXplb2YoZ2VuZXJhdG9ycykgLyBzaXplb2YoZ2VuZXJhdG9yc1swXSk7CisKKyAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2spLCBjb2RlQmxvY2tHUFIpOworICAgIG1vdmUoVHJ1c3Rl
ZEltbTY0KGZyYW1lVG9wT2Zmc2V0KSwgZnJhbWVUb3BPZmZzZXRHUFIpOworCisgICAgdW5zaWdu
ZWQgZ2VuZXJhdG9yU2VsZWN0b3IgPSBkb2VzUHJvZmlsaW5nIDw8IDIgfCBpc0NvbnN0cnVjdG9y
IDw8IDEgfCBoYXNIdWdlRnJhbWUgPDwgMDsKKyAgICBSRUxFQVNFX0FTU0VSVChnZW5lcmF0b3JT
ZWxlY3RvciA8IG51bWJlck9mR2VuZXJhdG9ycyk7CisgICAgYXV0byBnZW5lcmF0b3IgPSBnZW5l
cmF0b3JzW2dlbmVyYXRvclNlbGVjdG9yXTsKKyAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bSgpLmdl
dENUSVN0dWIoZ2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOworCisgICAgTGFi
ZWwgYm9keUxhYmVsKHRoaXMpOworI2VuZGlmIC8vICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykK
KwogICAgIFJFTEVBU0VfQVNTRVJUKCFKSVRDb2RlOjppc0pJVChtX2NvZGVCbG9jay0+aml0VHlw
ZSgpKSk7CiAKICAgICBwcml2YXRlQ29tcGlsZU1haW5QYXNzKCk7CkBAIC03NzIsMTYgKzgyNiwx
OSBAQCB2b2lkIEpJVDo6Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluCiAgICAgICAgIG1f
ZGlzYXNzZW1ibGVyLT5zZXRFbmRPZlNsb3dQYXRoKGxhYmVsKCkpOwogICAgIG1fcGNUb0NvZGVP
cmlnaW5NYXBCdWlsZGVyLmFwcGVuZEl0ZW0obGFiZWwoKSwgUENUb0NvZGVPcmlnaW5NYXBCdWls
ZGVyOjpkZWZhdWx0Q29kZU9yaWdpbigpKTsKIAorI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5L
UykKICAgICBzdGFja092ZXJmbG93LmxpbmsodGhpcyk7CiAgICAgbV9ieXRlY29kZUluZGV4ID0g
Qnl0ZWNvZGVJbmRleCgwKTsKICAgICBpZiAobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwp
CiAgICAgICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLXN0YXRpY19jYXN0PGludDMyX3Q+KG1heEZy
YW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKSksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBj
YWxsT3BlcmF0aW9uV2l0aENhbGxGcmFtZVJvbGxiYWNrT25FeGNlcHRpb24ob3BlcmF0aW9uVGhy
b3dTdGFja092ZXJmbG93RXJyb3IsIG1fY29kZUJsb2NrKTsKKyNlbmRpZgogCiAgICAgLy8gSWYg
dGhlIG51bWJlciBvZiBwYXJhbWV0ZXJzIGlzIDEsIHdlIG5ldmVyIHJlcXVpcmUgYXJpdHkgZml4
dXAuCiAgICAgYm9vbCByZXF1aXJlc0FyaXR5Rml4dXAgPSBtX2NvZGVCbG9jay0+bV9udW1QYXJh
bWV0ZXJzICE9IDE7CiAgICAgaWYgKG1fY29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9u
Q29kZSAmJiByZXF1aXJlc0FyaXR5Rml4dXApIHsKICAgICAgICAgbV9hcml0eUNoZWNrID0gbGFi
ZWwoKTsKKyNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAgICAgICAgIHN0b3JlOChUcnVz
dGVkSW1tMzIoMCksICZtX2NvZGVCbG9jay0+bV9zaG91bGRBbHdheXNCZUlubGluZWQpOwogICAg
ICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZSgpOwogICAgICAgICBlbWl0UHV0VG9DYWxsRnJhbWVI
ZWFkZXIobV9jb2RlQmxvY2ssIENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayk7CkBAIC04MDAsMTcg
Kzg1Nyw0NCBAQCB2b2lkIEpJVDo6Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluCiAgICAg
ICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CiAgICAgICAg
IGVtaXROYWtlZE5lYXJDYWxsKG1fdm0tPmdldENUSVN0dWIoYXJpdHlGaXh1cEdlbmVyYXRvciku
cmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAorICAgICAgICBqdW1wKGJlZ2luTGFiZWwpOwor
CisjZWxzZSAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKKyAgICAgICAgZW1pdEZ1bmN0aW9u
UHJvbG9ndWUoKTsKKworICAgICAgICBzdGF0aWNfYXNzZXJ0KGZyYW1lVG9wT2Zmc2V0R1BSID09
IHJlZ1Q3KTsKKyAgICAgICAgc3RhdGljX2Fzc2VydChjb2RlQmxvY2tHUFIgPT0gcmVnVDYpOwor
ICAgICAgICBBU1NFUlQoIW1fYnl0ZWNvZGVJbmRleCk7CisKKyAgICAgICAgc3RhdGljIGNvbnN0
ZXhwciBUaHVua0dlbmVyYXRvciBnZW5lcmF0b3JzW10gPSB7CisjZGVmaW5lIFVTRV9QUk9MT0dV
RV9HRU5FUkFUT1IoZG9lc1Byb2ZpbGluZywgaXNDb25zdHJ1Y3RvciwgaGFzSHVnZUZyYW1lLCBu
YW1lLCBhcml0eUZpeHVwTmFtZSkgYXJpdHlGaXh1cE5hbWUsCisgICAgICAgICAgICBGT1JfRUFD
SF9QUk9MT0dVRV9HRU5FUkFUT1IoVVNFX1BST0xPR1VFX0dFTkVSQVRPUikKKyN1bmRlZiBVU0Vf
UFJPTE9HVUVfR0VORVJBVE9SCisgICAgICAgIH07CisgICAgICAgIHN0YXRpYyBjb25zdGV4cHIg
dW5zaWduZWQgbnVtYmVyT2ZHZW5lcmF0b3JzID0gc2l6ZW9mKGdlbmVyYXRvcnMpIC8gc2l6ZW9m
KGdlbmVyYXRvcnNbMF0pOworCisgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ayksIGNvZGVCbG9ja0dQUik7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0KGZyYW1lVG9wT2Zm
c2V0KSwgZnJhbWVUb3BPZmZzZXRHUFIpOworCisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGdlbmVy
YXRvclNlbGVjdG9yIDwgbnVtYmVyT2ZHZW5lcmF0b3JzKTsKKyAgICAgICAgYXV0byBnZW5lcmF0
b3IgPSBnZW5lcmF0b3JzW2dlbmVyYXRvclNlbGVjdG9yXTsKKyAgICAgICAgUkVMRUFTRV9BU1NF
UlQoZ2VuZXJhdG9yKTsKKyAgICAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0oKS5nZXRDVElTdHVi
KGdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKKworICAgICAgICBqdW1wKGJv
ZHlMYWJlbCk7CisjZW5kaWYgLy8gIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQorCiAjaWYgQVNT
RVJUX0VOQUJMRUQKICAgICAgICAgbV9ieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgpOyAv
LyBSZXNldCB0aGlzLCBpbiBvcmRlciB0byBndWFyZCBpdHMgdXNlIHdpdGggQVNTRVJUcy4KICNl
bmRpZgotCi0gICAgICAgIGp1bXAoYmVnaW5MYWJlbCk7CiAgICAgfSBlbHNlCiAgICAgICAgIG1f
YXJpdHlDaGVjayA9IGVudHJ5TGFiZWw7IC8vIE5ldmVyIHJlcXVpcmUgYXJpdHkgZml4dXAuCiAK
ICAgICBBU1NFUlQobV9qbXBUYWJsZS5pc0VtcHR5KCkpOwogICAgIAorI2lmICFFTkFCTEUoRVhU
UkFfQ1RJX1RIVU5LUykKICAgICBwcml2YXRlQ29tcGlsZUV4Y2VwdGlvbkhhbmRsZXJzKCk7Cisj
ZW5kaWYKICAgICAKICAgICBpZiAobV9kaXNhc3NlbWJsZXIpCiAgICAgICAgIG1fZGlzYXNzZW1i
bGVyLT5zZXRFbmRPZkNvZGUobGFiZWwoKSk7CkBAIC04MjAsNiArOTA0LDIzMiBAQCB2b2lkIEpJ
VDo6Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluCiAgICAgbGluaygpOwogfQogCisjaWYg
RU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+IEpJVDo6cHJvbG9ndWVHZW5lcmF0b3IoVk0mIHZtLCBib29sIGRvZXNQcm9maWxpbmcs
IGJvb2wgaXNDb25zdHJ1Y3RvciwgYm9vbCBoYXNIdWdlRnJhbWUsIGNvbnN0IGNoYXIqIHRodW5r
TmFtZSkKK3sKKyAgICAvLyBUaGlzIGZ1bmN0aW9uIGdlbmVyYXRlcyB0aGUgQmFzZWxpbmUgSklU
J3MgcHJvbG9ndWUgY29kZS4gSXQgaXMgbm90IHVzZWFibGUgYnkgb3RoZXIgdGllcnMuCisgICAg
Y29uc3RleHByIEdQUlJlZyBmcmFtZVRvcE9mZnNldEdQUiA9IHJlZ1Q3OyAvLyBpbmNvbWluZwor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgY29kZUJsb2NrR1BSID0gcmVnVDY7IC8vIGluY29taW5nLgor
CisgICAgdGFnUmV0dXJuQWRkcmVzcygpOworCisgICAgc3RvcmU2NChjb2RlQmxvY2tHUFIsIGFk
ZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSk7CisKKyAgICBhZGRQdHIoZnJhbWVU
b3BPZmZzZXRHUFIsIGNhbGxGcmFtZVJlZ2lzdGVyLCByZWdUMSk7CisKKyAgICBKdW1wTGlzdCBz
dGFja092ZXJmbG93OworICAgIGlmIChoYXNIdWdlRnJhbWUpCisgICAgICAgIHN0YWNrT3ZlcmZs
b3cuYXBwZW5kKGJyYW5jaFB0cihBYm92ZSwgcmVnVDEsIGNhbGxGcmFtZVJlZ2lzdGVyKSk7Cisg
ICAgc3RhY2tPdmVyZmxvdy5hcHBlbmQoYnJhbmNoUHRyKEFib3ZlLCBBYnNvbHV0ZUFkZHJlc3Mo
dm0uYWRkcmVzc09mU29mdFN0YWNrTGltaXQoKSksIHJlZ1QxKSk7CisKKyAgICB1bnRhZ1JldHVy
bkFkZHJlc3MoKTsKKyNpZiBDUFUoWDg2XzY0KQorICAgIHBvcChyZWdUMik7IC8vIFNhdmUgdGhl
IHJldHVybiBhZGRyZXNzLgorI2VuZGlmCisgICAgbW92ZShyZWdUMSwgc3RhY2tQb2ludGVyUmVn
aXN0ZXIpOworI2lmIENQVShYODZfNjQpCisgICAgcHVzaChyZWdUMik7IC8vIFJlc3RvcmUgdGhl
IHJldHVybiBhZGRyZXNzLgorI2VuZGlmCisgICAgdGFnUmV0dXJuQWRkcmVzcygpOworICAgIGNo
ZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CisKKyAgICBlbWl0U2F2ZUNhbGxlZVNhdmVzRm9y
QmFzZWxpbmVKSVQoKTsKKyAgICBlbWl0TWF0ZXJpYWxpemVUYWdDaGVja1JlZ2lzdGVycygpOwor
CisgICAgaWYgKGRvZXNQcm9maWxpbmcpIHsKKyAgICAgICAgY29uc3RleHByIEdQUlJlZyBhcmd1
bWVudFZhbHVlUHJvZmlsZUdQUiA9IHJlZ1Q1OworICAgICAgICBjb25zdGV4cHIgR1BSUmVnIG51
bVBhcmFtZXRlcnNHUFIgPSByZWdUNDsKKyAgICAgICAgY29uc3RleHByIEdQUlJlZyBhcmd1bWVu
dEdQUiA9IHJlZ1QzOworCisgICAgICAgIGxvYWQzMihBZGRyZXNzKGNvZGVCbG9ja0dQUiwgQ29k
ZUJsb2NrOjpvZmZzZXRPZk51bVBhcmFtZXRlcnMoKSksIG51bVBhcmFtZXRlcnNHUFIpOworICAg
ICAgICBsb2FkUHRyKEFkZHJlc3MoY29kZUJsb2NrR1BSLCBDb2RlQmxvY2s6Om9mZnNldE9mQXJn
dW1lbnRWYWx1ZVByb2ZpbGVzKCkpLCBhcmd1bWVudFZhbHVlUHJvZmlsZUdQUik7CisgICAgICAg
IGlmIChpc0NvbnN0cnVjdG9yKQorICAgICAgICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzaXpl
b2YoVmFsdWVQcm9maWxlKSksIGFyZ3VtZW50VmFsdWVQcm9maWxlR1BSKTsKKworICAgICAgICBj
b25zdGV4cHIgaW50IHZpcnR1YWxSZWdpc3RlclNpemUgPSBzdGF0aWNfY2FzdDxpbnQ+KHNpemVv
ZihSZWdpc3RlcikpOworICAgICAgICBpbnQgc3RhcnRBcmd1bWVudCA9IENhbGxGcmFtZVNsb3Q6
OnRoaXNBcmd1bWVudCArIChpc0NvbnN0cnVjdG9yID8gMSA6IDApOworICAgICAgICBpbnQgc3Rh
cnRBcmd1bWVudE9mZnNldCA9IHN0YXJ0QXJndW1lbnQgKiB2aXJ0dWFsUmVnaXN0ZXJTaXplOwor
ICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChzdGFydEFyZ3VtZW50T2Zmc2V0KSwgYXJndW1lbnRH
UFIpOworCisgICAgICAgIGNvbnN0ZXhwciBpbnQgdmlydHVhbFJlZ2lzdGVyU2l6ZVNoaWZ0ID0g
MzsKKyAgICAgICAgc3RhdGljX2Fzc2VydCgoMSA8PCB2aXJ0dWFsUmVnaXN0ZXJTaXplU2hpZnQp
ID09IHZpcnR1YWxSZWdpc3RlclNpemUpOworICAgICAgICBhZGQzMihUcnVzdGVkSW1tMzIoc3Rh
dGljX2Nhc3Q8aW50PihDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQpKSwgbnVtUGFyYW1ldGVy
c0dQUik7CisgICAgICAgIGxzaGlmdDMyKFRydXN0ZWRJbW0zMih2aXJ0dWFsUmVnaXN0ZXJTaXpl
U2hpZnQpLCBudW1QYXJhbWV0ZXJzR1BSKTsKKworICAgICAgICBhZGRQdHIoY2FsbEZyYW1lUmVn
aXN0ZXIsIGFyZ3VtZW50R1BSKTsKKyAgICAgICAgYWRkUHRyKGNhbGxGcmFtZVJlZ2lzdGVyLCBu
dW1QYXJhbWV0ZXJzR1BSKTsKKworICAgICAgICBMYWJlbCBsb29wU3RhcnQodGhpcyk7CisgICAg
ICAgIEp1bXAgZG9uZSA9IGJyYW5jaFB0cihBYm92ZU9yRXF1YWwsIGFyZ3VtZW50R1BSLCBudW1Q
YXJhbWV0ZXJzR1BSKTsKKyAgICAgICAgeworICAgICAgICAgICAgbG9hZDY0KEFkZHJlc3MoYXJn
dW1lbnRHUFIpLCByZWdUMCk7CisgICAgICAgICAgICBzdG9yZTY0KHJlZ1QwLCBBZGRyZXNzKGFy
Z3VtZW50VmFsdWVQcm9maWxlR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoVmFsdWVQcm9maWxlLCBtX2J1
Y2tldHMpKSk7CisKKyAgICAgICAgICAgIC8vIFRoZSBhcmd1bWVudCBWYWx1ZVByb2ZpbGVzIGFy
ZSBzdG9yZWQgaW4gYSBGaXhlZFZlY3Rvci4gSGVuY2UsIHRoZQorICAgICAgICAgICAgLy8gYWRk
cmVzcyBvZiB0aGUgbmV4dCBwcm9maWxlIGNhbiBiZSB0cml2aWFsbHkgY29tcHV0ZWQgd2l0aCBh
biBpbmNyZW1lbnQuCisgICAgICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHNpemVvZihWYWx1
ZVByb2ZpbGUpKSwgYXJndW1lbnRWYWx1ZVByb2ZpbGVHUFIpOworICAgICAgICAgICAgYWRkUHRy
KFRydXN0ZWRJbW0zMih2aXJ0dWFsUmVnaXN0ZXJTaXplKSwgYXJndW1lbnRHUFIpOworICAgICAg
ICAgICAganVtcCgpLmxpbmtUbyhsb29wU3RhcnQsIHRoaXMpOworICAgICAgICB9CisgICAgICAg
IGRvbmUubGluayh0aGlzKTsKKyAgICB9CisgICAgcmV0KCk7CisKKyAgICBzdGFja092ZXJmbG93
LmxpbmsodGhpcyk7CisjaWYgQ1BVKFg4Nl82NCkKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKDEg
KiBzaXplb2YoQ1BVUmVnaXN0ZXIpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOyAvLyBkaXNjYXJk
IHJldHVybiBhZGRyZXNzLgorI2VuZGlmCisKKyAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBD
YWxsU2l0ZUluZGV4KDApLmJpdHMoKTsKKyAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihsb2NhdGlv
bkJpdHMpLCB0YWdGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMp
KTsKKworICAgIGlmIChtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCkKKyAgICAgICAgYWRk
UHRyKFRydXN0ZWRJbW0zMigtc3RhdGljX2Nhc3Q8aW50MzJfdD4obWF4RnJhbWVFeHRlbnRGb3JT
bG93UGF0aENhbGwpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworCisgICAgc2V0dXBBcmd1bWVu
dHM8ZGVjbHR5cGUob3BlcmF0aW9uVGhyb3dTdGFja092ZXJmbG93RXJyb3IpPihjb2RlQmxvY2tH
UFIpOworICAgIHByZXBhcmVDYWxsT3BlcmF0aW9uKHZtKTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6
Q2FsbCBvcGVyYXRpb25DYWxsID0gY2FsbChPcGVyYXRpb25QdHJUYWcpOworICAgIEp1bXAgaGFu
ZGxlRXhjZXB0aW9uSnVtcCA9IGp1bXAoKTsKKworICAgIGF1dG8gaGFuZGxlciA9IHZtLmdldENU
SVN0dWIoaGFuZGxlRXhjZXB0aW9uV2l0aENhbGxGcmFtZVJvbGxiYWNrR2VuZXJhdG9yKTsKKwor
ICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnRoaXMsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1
ZmZlcjo6UHJvZmlsZTo6RXh0cmFDVElUaHVuayk7CisgICAgcGF0Y2hCdWZmZXIubGluayhvcGVy
YXRpb25DYWxsLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvblRocm93U3Rh
Y2tPdmVyZmxvd0Vycm9yKSk7CisgICAgcGF0Y2hCdWZmZXIubGluayhoYW5kbGVFeGNlcHRpb25K
dW1wLCBDb2RlTG9jYXRpb25MYWJlbChoYW5kbGVyLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkp
OworICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywg
dGh1bmtOYW1lKTsKK30KKworc3RhdGljIGNvbnN0ZXhwciBib29sIGRvZXNQcm9maWxpbmcgPSB0
cnVlOworc3RhdGljIGNvbnN0ZXhwciBib29sIGlzQ29uc3RydWN0b3IgPSB0cnVlOworc3RhdGlj
IGNvbnN0ZXhwciBib29sIGhhc0h1Z2VGcmFtZSA9IHRydWU7CisKKyNkZWZpbmUgREVGSU5FX1BS
T0dMT0dVRV9HRU5FUkFUT1IoZG9lc1Byb2ZpbGluZywgaXNDb25zdHJ1Y3RvciwgaGFzSHVnZUZy
YW1lLCBuYW1lLCBhcml0eUZpeHVwTmFtZSkgXAorICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gSklUOjpuYW1lKFZNJiB2bSkgXAorICAgIHsgXAorICAgICAgICBKSVQg
aml0KHZtKTsgXAorICAgICAgICByZXR1cm4gaml0LnByb2xvZ3VlR2VuZXJhdG9yKHZtLCBkb2Vz
UHJvZmlsaW5nLCBpc0NvbnN0cnVjdG9yLCBoYXNIdWdlRnJhbWUsICJCYXNlbGluZTogIiAjbmFt
ZSk7IFwKKyAgICB9CisKK0ZPUl9FQUNIX1BST0xPR1VFX0dFTkVSQVRPUihERUZJTkVfUFJPR0xP
R1VFX0dFTkVSQVRPUikKKyN1bmRlZiBERUZJTkVfUFJPR0xPR1VFX0dFTkVSQVRPUgorCitNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6YXJpdHlGaXh1cFByb2xvZ3Vl
R2VuZXJhdG9yKFZNJiB2bSwgYm9vbCBpc0NvbnN0cnVjdG9yLCBUaHVua0dlbmVyYXRvciBub3Jt
YWxQcm9sb2d1ZUdlbmVyYXRvciwgY29uc3QgY2hhciogdGh1bmtOYW1lKQoreworICAgIC8vIFRo
aXMgZnVuY3Rpb24gZ2VuZXJhdGVzIHRoZSBCYXNlbGluZSBKSVQncyBwcm9sb2d1ZSBjb2RlLiBJ
dCBpcyBub3QgdXNlYWJsZSBieSBvdGhlciB0aWVycy4KKyAgICBjb25zdGV4cHIgR1BSUmVnIGZy
YW1lVG9wT2Zmc2V0R1BSID0gcmVnVDc7IC8vIGluY29taW5nCisgICAgY29uc3RleHByIEdQUlJl
ZyBjb2RlQmxvY2tHUFIgPSByZWdUNjsgLy8gaW5jb21pbmcuCisgICAgY29uc3RleHByIEdQUlJl
ZyBudW1QYXJhbWV0ZXJzR1BSID0gcmVnVDU7CisKKyAgICB0YWdSZXR1cm5BZGRyZXNzKCk7Cisj
aWYgQ1BVKFg4Nl82NCkKKyAgICBwdXNoKGZyYW1lVG9wT2Zmc2V0R1BSKTsKKyNlbGlmIENQVShB
Uk02NCkKKyAgICBwdXNoUGFpcihmcmFtZVRvcE9mZnNldEdQUiwgbGlua1JlZ2lzdGVyKTsKKyNl
bmRpZgorCisgICAgc3RvcmU2NChjb2RlQmxvY2tHUFIsIGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xv
dDo6Y29kZUJsb2NrKSk7CisgICAgc3RvcmU4KFRydXN0ZWRJbW0zMigwKSwgQWRkcmVzcyhjb2Rl
QmxvY2tHUFIsIENvZGVCbG9jazo6b2Zmc2V0T2ZTaG91bGRBbHdheXNCZUlubGluZWQoKSkpOwor
CisgICAgbG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMpLCByZWdUMSk7CisgICAgbG9hZDMyKEFkZHJlc3MoY29kZUJsb2NrR1BSLCBDb2Rl
QmxvY2s6Om9mZnNldE9mTnVtUGFyYW1ldGVycygpKSwgbnVtUGFyYW1ldGVyc0dQUik7CisgICAg
SnVtcCBub0ZpeHVwTmVlZGVkID0gYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwgbnVtUGFy
YW1ldGVyc0dQUik7CisKKyAgICBpZiBjb25zdGV4cHIgKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1Bh
dGhDYWxsKQorICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC1zdGF0aWNfY2FzdDxpbnQzMl90
PihtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCkpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7
CisKKyAgICBsb2FkUHRyKEFkZHJlc3MoY29kZUJsb2NrR1BSLCBDb2RlQmxvY2s6Om9mZnNldE9m
R2xvYmFsT2JqZWN0KCkpLCBhcmd1bWVudEdQUjApOworCisgICAgc3RhdGljX2Fzc2VydChzdGQ6
OmlzX3NhbWU8ZGVjbHR5cGUob3BlcmF0aW9uQ29uc3RydWN0QXJpdHlDaGVjayksIGRlY2x0eXBl
KG9wZXJhdGlvbkNhbGxBcml0eUNoZWNrKT46OnZhbHVlKTsKKyAgICBzZXR1cEFyZ3VtZW50czxk
ZWNsdHlwZShvcGVyYXRpb25DYWxsQXJpdHlDaGVjayk+KGFyZ3VtZW50R1BSMCk7CisgICAgcHJl
cGFyZUNhbGxPcGVyYXRpb24odm0pOworCisgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXJpdHlD
aGVja0NhbGwgPSBjYWxsKE9wZXJhdGlvblB0clRhZyk7CisgICAgSnVtcCBoYW5kbGVFeGNlcHRp
b25KdW1wID0gZW1pdE5vblBhdGNoYWJsZUV4Y2VwdGlvbkNoZWNrKHZtKTsKKworICAgIGlmIGNv
bnN0ZXhwciAobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpCisgICAgICAgIGFkZFB0cihU
cnVzdGVkSW1tMzIobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpLCBzdGFja1BvaW50ZXJS
ZWdpc3Rlcik7CisgICAgSnVtcCBuZWVkRml4dXAgPSBicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0
dXJuVmFsdWVHUFIpOworICAgIG5vRml4dXBOZWVkZWQubGluayh0aGlzKTsKKworICAgIC8vIFRo
ZSBub3JtYWwgcHJvbG9ndWUgZXhwZWN0cyBpbmNvbWluZyBjb2RlQmxvY2tHUFIgYW5kIGZyYW1l
VG9wT2Zmc2V0R1BSLgorICAgIGxvYWQ2NChhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVC
bG9jayksIGNvZGVCbG9ja0dQUik7CisKKyNpZiBDUFUoWDg2XzY0KQorICAgIHBvcChmcmFtZVRv
cE9mZnNldEdQUik7CisjZWxpZiBDUFUoQVJNNjQpCisgICAgcG9wUGFpcihmcmFtZVRvcE9mZnNl
dEdQUiwgbGlua1JlZ2lzdGVyKTsKKyNlbmRpZgorICAgIHVudGFnUmV0dXJuQWRkcmVzcygpOwor
CisgICAgSnVtcExpc3Qgbm9ybWFsUHJvbG9ndWVKdW1wOworICAgIG5vcm1hbFByb2xvZ3VlSnVt
cC5hcHBlbmQoanVtcCgpKTsKKworICAgIG5lZWRGaXh1cC5saW5rKHRoaXMpOworCisgICAgLy8g
UmVzdG9yZSB0aGUgc3RhY2sgZm9yIGFyaXR5IGZpeHVwLCBhbmQgcHJlc2VydmUgdGhlIHJldHVy
biBhZGRyZXNzIGFuZCBmcmFtZVRvcE9mZnNldEdQUi4KKworICAgIC8vIGFyaXR5Rml4dXBHZW5l
cmF0b3Igd2lsbCBiZSBzaGlmdGluZyB0aGUgc3RhY2suIFNvLCB3ZSBjYW4ndCB1c2UgdGhlIHN0
YWNrIHRvIHByZXNlcnZlCisgICAgLy8gZnJhbWVUb3BPZmZzZXRHUFIuIGNvZGVCbG9ja0dQUiBp
cyBhbGVhZHkgcHJlc2VydmVkIGluIHRoZSBDYWxsRnJhbWUgaGVhZGVyLgorICAgIC8vIFdlIGFs
c28gY2FuJ3QgdXNlIGNhbGxlZSBzYXZlZCByZWdpc3RlcnMgYmVjYXVzZSB0aGV5IGhhdmVuJ3Qg
YmVlbiBzYXZlZCB5ZXQuCisgICAgLy8KKyAgICAvLyBhcml0eUZpeHVwR2VuZXJhdG9yIGlzIGNh
cmVmdWxseSBjcmFmdGVkIHRvIG9ubHUgdXNlIGEwLCBhMSwgYTIsIHQzLCB0NCBhbmQgdDUuCisg
ICAgLy8gU28sIGZyYW1lVG9wT2Zmc2V0R1BSIHNob3VsZCBiZSBwcmVzZXJ2ZWQgaW4gcmVnVDcu
CisgICAgLy8gT24gQVJNNjQsIHdlIGNhbiBwcmVzZXJ2ZSBsciBpbiByZWdUNi4KKyAgICAvLyBP
biB4ODZfNjQsIHJlZ1Q2ID09IGFyZ3VtZW50R1BSMCwgYW5kIHdlJ3JlIG91dCBvZiBhdmFpbGFi
bGUgdm9sYXRpbGUgcmVnaXN0ZXJzLgorICAgIC8vIFNvLCB3ZSdsbCBoYXZlIHRvIHVzZSBhIFZN
IHNjcmF0Y2hCdWZmZXIgdG8gcHJlc2VydmUgdGhlIHJldHVybiBhZGRyZXNzLgorCisjaWYgQ1BV
KFg4Nl82NCkKKyAgICBDUFVSZWdpc3Rlciogc2NyYXRjaCA9IGJpdHdpc2VfY2FzdDxDUFVSZWdp
c3Rlcio+KHZtLnNjcmF0Y2hCdWZmZXJGb3JTaXplKHNpemVvZihDUFVSZWdpc3RlcikpLT5kYXRh
QnVmZmVyKCkpOworICAgIHBvcChmcmFtZVRvcE9mZnNldEdQUik7CisgICAgcG9wKGFyZ3VtZW50
R1BSMik7IC8vIHJldHVybiBhZGRyZXNzLgorICAgIHN0b3JlUHRyKGFyZ3VtZW50R1BSMiwgc2Ny
YXRjaCk7CisjZWxpZiBDUFUoQVJNNjQpCisgICAgcG9wUGFpcihmcmFtZVRvcE9mZnNldEdQUiwg
bGlua1JlZ2lzdGVyKTsKKyAgICB1bnRhZ1JldHVybkFkZHJlc3MoKTsKKyAgICBtb3ZlKGxpbmtS
ZWdpc3RlciwgcmVnVDYpOworICAgIGF1dG8gcmFuZG9tUmV0dXJuQWRkcmVzc1RhZyA9IHJhbmRv
bSgpOworICAgIG1vdmUoVHJ1c3RlZEltbTMyKHJhbmRvbVJldHVybkFkZHJlc3NUYWcpLCByZWdU
MSk7CisgICAgdGFnUHRyKHJlZ1QxLCByZWdUNik7CisjZW5kaWYKKyAgICBtb3ZlKHJldHVyblZh
bHVlR1BSLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgIENhbGwgYXJpdHlGaXh1cENhbGwg
PSBuZWFyQ2FsbCgpOworCisjaWYgQ1BVKFg4Nl82NCkKKyAgICBsb2FkUHRyKHNjcmF0Y2gsIGFy
Z3VtZW50R1BSMik7CisgICAgcHVzaChhcmd1bWVudEdQUjIpOyAvLyByZXR1cm4gYWRkcmVzcy4K
KyNlbGlmIENQVShBUk02NCkKKyAgICBtb3ZlKFRydXN0ZWRJbW0zMihyYW5kb21SZXR1cm5BZGRy
ZXNzVGFnKSwgcmVnVDEpOworICAgIHVudGFnUHRyKHJlZ1QxLCByZWdUNik7CisgICAgbW92ZShy
ZWdUNiwgbGlua1JlZ2lzdGVyKTsKKyNlbmRpZgorICAgIGxvYWQ2NChhZGRyZXNzRm9yKENhbGxG
cmFtZVNsb3Q6OmNvZGVCbG9jayksIGNvZGVCbG9ja0dQUik7CisgICAgbm9ybWFsUHJvbG9ndWVK
dW1wLmFwcGVuZChqdW1wKCkpOworCisgICAgYXV0byBhcml0eUNoZWNrT3BlcmF0aW9uID0gaXND
b25zdHJ1Y3RvciA/IG9wZXJhdGlvbkNvbnN0cnVjdEFyaXR5Q2hlY2sgOiBvcGVyYXRpb25DYWxs
QXJpdHlDaGVjazsKKyAgICBhdXRvIGFyaXR5Rml4dXAgPSB2bS5nZXRDVElTdHViKGFyaXR5Rml4
dXBHZW5lcmF0b3IpOworICAgIGF1dG8gbm9ybWFsUHJvbG9ndWUgPSB2bS5nZXRDVElTdHViKG5v
cm1hbFByb2xvZ3VlR2VuZXJhdG9yKTsKKyAgICBhdXRvIGV4Y2VwdGlvbkhhbmRsZXIgPSB2bS5n
ZXRDVElTdHViKHBvcFRodW5rU3RhY2tQcmVzZXJ2ZXNBbmRIYW5kbGVFeGNlcHRpb25HZW5lcmF0
b3IpOworCisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdGhpcywgR0xPQkFMX1RIVU5LX0lE
LCBMaW5rQnVmZmVyOjpQcm9maWxlOjpFeHRyYUNUSVRodW5rKTsKKyAgICBwYXRjaEJ1ZmZlci5s
aW5rKGFyaXR5Q2hlY2tDYWxsLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KGFyaXR5Q2hl
Y2tPcGVyYXRpb24pKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKGFyaXR5Rml4dXBDYWxsLCBGdW5j
dGlvblB0cihhcml0eUZpeHVwLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkpOworICAgIHBhdGNo
QnVmZmVyLmxpbmsobm9ybWFsUHJvbG9ndWVKdW1wLCBDb2RlTG9jYXRpb25MYWJlbChub3JtYWxQ
cm9sb2d1ZS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5r
KGhhbmRsZUV4Y2VwdGlvbkp1bXAsIENvZGVMb2NhdGlvbkxhYmVsKGV4Y2VwdGlvbkhhbmRsZXIu
cmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7CisgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0
Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCB0aHVua05hbWUpOworfQorCisjZGVmaW5lIERFRklO
RV9BUklUWV9QUk9HTE9HVUVfR0VORVJBVE9SKGRvZXNQcm9maWxpbmcsIGlzQ29uc3RydWN0b3Is
IGhhc0h1Z2VGcmFtZSwgbmFtZSwgYXJpdHlGaXh1cE5hbWUpIFwKK01hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjphcml0eUZpeHVwTmFtZShWTSYgdm0pIFwKKyAgICB7
IFwKKyAgICAgICAgSklUIGppdCh2bSk7IFwKKyAgICAgICAgcmV0dXJuIGppdC5hcml0eUZpeHVw
UHJvbG9ndWVHZW5lcmF0b3Iodm0sIGlzQ29uc3RydWN0b3IsIG5hbWUsICJCYXNlbGluZTogIiAj
YXJpdHlGaXh1cE5hbWUpOyBcCisgICAgfQorCitGT1JfRUFDSF9QUk9MT0dVRV9HRU5FUkFUT1Io
REVGSU5FX0FSSVRZX1BST0dMT0dVRV9HRU5FUkFUT1IpCisjdW5kZWYgREVGSU5FX0FSSVRZX1BS
T0dMT0dVRV9HRU5FUkFUT1IKKworI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQor
CiB2b2lkIEpJVDo6bGluaygpCiB7CiAgICAgTGlua0J1ZmZlciYgcGF0Y2hCdWZmZXIgPSAqbV9s
aW5rQnVmZmVyOwpAQCAtMTAxNCw5ICsxMzI0LDkgQEAgQ29tcGlsYXRpb25SZXN1bHQgSklUOjpw
cml2YXRlQ29tcGlsZShKSQogICAgIHJldHVybiBmaW5hbGl6ZU9uTWFpblRocmVhZCgpOwogfQog
CisjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxl
RXhjZXB0aW9uSGFuZGxlcnMoKQogewotI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAg
ICBpZiAoIW1fZXhjZXB0aW9uQ2hlY2tzV2l0aENhbGxGcmFtZVJvbGxiYWNrLmVtcHR5KCkpIHsK
ICAgICAgICAgbV9leGNlcHRpb25DaGVja3NXaXRoQ2FsbEZyYW1lUm9sbGJhY2subGluayh0aGlz
KTsKIApAQCAtMTA0MSw4ICsxMzUxLDggQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlRXhjZXB0
aW9uSGFuZGxlcgogICAgICAgICBtX2ZhckNhbGxzLmFwcGVuZChGYXJDYWxsUmVjb3JkKGNhbGwo
T3BlcmF0aW9uUHRyVGFnKSwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25M
b29rdXBFeGNlcHRpb25IYW5kbGVyKSkpOwogICAgICAgICBqdW1wVG9FeGNlcHRpb25IYW5kbGVy
KHZtKCkpOwogICAgIH0KLSNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIH0KKyNl
bmRpZiAvLyAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKIHZvaWQgSklUOjpkb01haW5UaHJl
YWRQcmVwYXJhdGlvbkJlZm9yZUNvbXBpbGUoKQogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VC5oCShyZXZpc2lvbiAyNzgyMDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMTgsNyArMzE4LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgICAgICBtX2V4Y2VwdGlvbkNoZWNrc1dpdGhDYWxsRnJhbWVSb2xsYmFjay5hcHBlbmQoZW1p
dEV4Y2VwdGlvbkNoZWNrKHZtKCkpKTsKICAgICAgICAgfQogCisjaWYgIUVOQUJMRShFWFRSQV9D
VElfVEhVTktTKQogICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlRXhjZXB0aW9uSGFuZGxlcnMo
KTsKKyNlbmRpZgogCiAgICAgICAgIHZvaWQgYWR2YW5jZVRvTmV4dENoZWNrcG9pbnQoKTsKICAg
ICAgICAgdm9pZCBlbWl0SnVtcFNsb3dUb0hvdEZvckNoZWNrcG9pbnQoSnVtcCk7CkBAIC03MTMs
NyArNzE1LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfanN0
cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYpOwogICAgICAgICB2b2lkIGVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfanRydWUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJik7CisjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2xvb3BfaGludChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyNlbmRpZgogICAgICAgICB2b2lkIGVtaXRTbG93X29wX2No
ZWNrX3RyYXBzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYpOwogICAgICAgICB2b2lkIGVtaXRTbG93X29wX21vZChjb25zdCBJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9tdWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJik7CkBAIC03ODgsNiArNzkyLDI2IEBAIG5hbWVzcGFjZSBKU0MgewogCiAjaWYgRU5BQkxF
KEVYVFJBX0NUSV9USFVOS1MpCiAgICAgICAgIC8vIFRodW5rIGdlbmVyYXRvcnMuCisgICAgICAg
IHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHByb2xvZ3VlR2Vu
ZXJhdG9yMChWTSYpOworICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiBwcm9sb2d1ZUdlbmVyYXRvcjEoVk0mKTsKKyAgICAgICAgc3RhdGljIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gcHJvbG9ndWVHZW5lcmF0b3IyKFZNJik7
CisgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHBy
b2xvZ3VlR2VuZXJhdG9yMyhWTSYpOworICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiBwcm9sb2d1ZUdlbmVyYXRvcjQoVk0mKTsKKyAgICAgICAgc3Rh
dGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gcHJvbG9ndWVHZW5lcmF0
b3I1KFZNJik7CisgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+IHByb2xvZ3VlR2VuZXJhdG9yNihWTSYpOworICAgICAgICBzdGF0aWMgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBwcm9sb2d1ZUdlbmVyYXRvcjcoVk0mKTsKKyAg
ICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBwcm9sb2d1ZUdlbmVy
YXRvcihWTSYsIGJvb2wgZG9lc1Byb2ZpbGluZywgYm9vbCBpc0NvbnN0cnVjdG9yLCBib29sIGhh
c0h1Z2VGcmFtZSwgY29uc3QgY2hhciogbmFtZSk7CisKKyAgICAgICAgc3RhdGljIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gYXJpdHlGaXh1cF9wcm9sb2d1ZUdlbmVyYXRv
cjAoVk0mKTsKKyAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gYXJpdHlGaXh1cF9wcm9sb2d1ZUdlbmVyYXRvcjEoVk0mKTsKKyAgICAgICAgc3RhdGlj
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gYXJpdHlGaXh1cF9wcm9sb2d1
ZUdlbmVyYXRvcjIoVk0mKTsKKyAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gYXJpdHlGaXh1cF9wcm9sb2d1ZUdlbmVyYXRvcjMoVk0mKTsKKyAgICAg
ICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gYXJpdHlGaXh1
cF9wcm9sb2d1ZUdlbmVyYXRvcjQoVk0mKTsKKyAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRUaHVua1B0clRhZz4gYXJpdHlGaXh1cF9wcm9sb2d1ZUdlbmVyYXRvcjUoVk0m
KTsKKyAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
YXJpdHlGaXh1cF9wcm9sb2d1ZUdlbmVyYXRvcjYoVk0mKTsKKyAgICAgICAgc3RhdGljIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gYXJpdHlGaXh1cF9wcm9sb2d1ZUdlbmVy
YXRvcjcoVk0mKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiBhcml0eUZpeHVwUHJvbG9ndWVHZW5lcmF0b3IoVk0mLCBib29sIGlzQ29uc3RydWN0b3IsIFRo
dW5rR2VuZXJhdG9yIG5vcm1hbFByb2xvZ3VlR2VuZXJhdG9yLCBjb25zdCBjaGFyKiBuYW1lKTsK
KwogICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBz
bG93X29wX2RlbF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvcihWTSYpOwogICAgICAgICBzdGF0
aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBzbG93X29wX2RlbF9ieV92
YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3IoVk0mKTsKICAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gc2xvd19vcF9nZXRfYnlfaWRfcHJlcGFyZUNhbGxH
ZW5lcmF0b3IoVk0mKTsKQEAgLTgwMiw3ICs4MjYsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHNsb3dfb3Bf
cmVzb2x2ZV9zY29wZUdlbmVyYXRvcihWTSYpOwogCiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9wX2NoZWNrX3RyYXBzX2hhbmRsZXJHZW5lcmF0
b3IoVk0mKTsKLSAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gb3BfZW50ZXJfaGFuZGxlckdlbmVyYXRvcihWTSYpOworCisgICAgICAgIHN0YXRpYyBN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9wX2VudGVyX2NhbkJlT3B0aW1p
emVkX0dlbmVyYXRvcihWTSYpOworICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFRodW5rUHRyVGFnPiBvcF9lbnRlcl9jYW5ub3RCZU9wdGltaXplZF9HZW5lcmF0b3IoVk0m
KTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvcF9lbnRl
cl9HZW5lcmF0b3IoVk0mLCBib29sIGNhbkJlT3B0aW1pemVkLCBjb25zdCBjaGFyKiB0aHVua05h
bWUpOworCisjaWYgRU5BQkxFKERGR19KSVQpCisgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9wX2xvb3BfaGludF9HZW5lcmF0b3IoVk0mKTsKKyNl
bmRpZgogICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiBvcF9yZXRfaGFuZGxlckdlbmVyYXRvcihWTSYpOwogICAgICAgICBzdGF0aWMgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvcF90aHJvd19oYW5kbGVyR2VuZXJhdG9yKFZN
Jik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCShyZXZpc2lv
biAyNzgyMDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAkod29y
a2luZyBjb3B5KQpAQCAtOTEsNyArOTEsNiBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0
TG9hZENoYXJhY3RlCiAKIEFMV0FZU19JTkxJTkUgSklUOjpDYWxsIEpJVDo6ZW1pdE5ha2VkTmVh
ckNhbGwoQ29kZVB0cjxOb1B0clRhZz4gdGFyZ2V0KQogewotICAgIEFTU0VSVChtX2J5dGVjb2Rl
SW5kZXgpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9j
b2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0LgogICAg
IENhbGwgbmFrZWRDYWxsID0gbmVhckNhbGwoKTsKICAgICBtX25lYXJDYWxscy5hcHBlbmQoTmVh
ckNhbGxSZWNvcmQobmFrZWRDYWxsLCBGdW5jdGlvblB0cjxKU0ludGVybmFsUHRyVGFnPih0YXJn
ZXQucmV0YWdnZWQ8SlNJbnRlcm5hbFB0clRhZz4oKSkpKTsKICAgICByZXR1cm4gbmFrZWRDYWxs
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCShyZXZpc2lv
biAyNzgyMDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zNzYsNyArMzc2LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiBKSQogICAgIEpJVCBqaXQodm0pOwogCiAgICAgaml0LmNoZWNrU3RhY2tQ
b2ludGVyQWxpZ25tZW50KCk7Ci0gICAgaml0LmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXNGb3IoJlJl
Z2lzdGVyQXRPZmZzZXRMaXN0OjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsK
KyAgICBqaXQuZW1pdFJlc3RvcmVDYWxsZWVTYXZlc0ZvckJhc2VsaW5lSklUKCk7CiAgICAgaml0
LmVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CiAgICAgaml0LnJldCgpOwogCkBAIC0xMTg2LDEwMyAr
MTE4NiwxMTUgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW50ZXIoY29uc3QgSW5zdHJ1Y3RpbwogICAg
IGVtaXRFbnRlck9wdGltaXphdGlvbkNoZWNrKCk7CiAjZWxzZQogICAgIEFTU0VSVChtX2J5dGVj
b2RlSW5kZXgub2Zmc2V0KCkgPT0gMCk7Ci0gICAgY29uc3RleHByIEdQUlJlZyBsb2NhbHNUb0lu
aXRHUFIgPSBhcmd1bWVudEdQUjA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBjYW5CZU9wdGltaXpl
ZEdQUiA9IGFyZ3VtZW50R1BSNDsKLQogICAgIHVuc2lnbmVkIGxvY2Fsc1RvSW5pdCA9IGNvdW50
IC0gQ29kZUJsb2NrOjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0
ZXJzKCk7CiAgICAgUkVMRUFTRV9BU1NFUlQobG9jYWxzVG9Jbml0IDwgY291bnQpOwotICAgIG1v
dmUoVHJ1c3RlZEltbTMyKGxvY2Fsc1RvSW5pdCAqIHNpemVvZihSZWdpc3RlcikpLCBsb2NhbHNU
b0luaXRHUFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKGNhbkJlT3B0aW1pemVkKCkpLCBjYW5C
ZU9wdGltaXplZEdQUik7Ci0gICAgZW1pdE5ha2VkTmVhckNhbGwodm0oKS5nZXRDVElTdHViKG9w
X2VudGVyX2hhbmRsZXJHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisgICAg
VGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yID0gY2FuQmVPcHRpbWl6ZWQoKSA/IG9wX2VudGVyX2Nh
bkJlT3B0aW1pemVkX0dlbmVyYXRvciA6IG9wX2VudGVyX2Nhbm5vdEJlT3B0aW1pemVkX0dlbmVy
YXRvcjsKKyAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bSgpLmdldENUSVN0dWIoZ2VuZXJhdG9yKS5y
ZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhV
TktTKQogfQogCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi1NYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6b3BfZW50ZXJfaGFuZGxlckdlbmVyYXRvcihWTSYg
dm0pCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6b3BfZW50ZXJf
R2VuZXJhdG9yKFZNJiB2bSwgYm9vbCBjYW5CZU9wdGltaXplZCwgY29uc3QgY2hhciogdGh1bmtO
YW1lKQogewotICAgIEpJVCBqaXQodm0pOwotCiAjaWYgQ1BVKFg4Nl82NCkKLSAgICBqaXQucHVz
aChYODZSZWdpc3RlcnM6OmVicCk7CisgICAgcHVzaChYODZSZWdpc3RlcnM6OmVicCk7CiAjZWxp
ZiBDUFUoQVJNNjQpCi0gICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKLSAgICBqaXQucHVzaFBh
aXIoZnJhbWVQb2ludGVyUmVnaXN0ZXIsIGxpbmtSZWdpc3Rlcik7CisgICAgdGFnUmV0dXJuQWRk
cmVzcygpOworICAgIHB1c2hQYWlyKGZyYW1lUG9pbnRlclJlZ2lzdGVyLCBsaW5rUmVnaXN0ZXIp
OwogI2VuZGlmCiAgICAgLy8gb3BfZW50ZXIgaXMgYWx3YXlzIGF0IGJ5dGVjb2RlT2Zmc2V0IDAu
Ci0gICAgaml0LnN0b3JlMzIoVHJ1c3RlZEltbTMyKDApLCB0YWdGb3IoQ2FsbEZyYW1lU2xvdDo6
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKTsKKyAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMigw
KSwgdGFnRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSk7CiAK
ICAgICBjb25zdGV4cHIgR1BSUmVnIGxvY2Fsc1RvSW5pdEdQUiA9IGFyZ3VtZW50R1BSMDsKICAg
ICBjb25zdGV4cHIgR1BSUmVnIGl0ZXJhdG9yR1BSID0gYXJndW1lbnRHUFIxOwogICAgIGNvbnN0
ZXhwciBHUFJSZWcgZW5kR1BSID0gYXJndW1lbnRHUFIyOwogICAgIGNvbnN0ZXhwciBHUFJSZWcg
dW5kZWZpbmVkR1BSID0gYXJndW1lbnRHUFIzOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgY2FuQmVP
cHRpbWl6ZWRHUFIgPSBhcmd1bWVudEdQUjQ7CisgICAgY29uc3RleHByIEdQUlJlZyBjb2RlQmxv
Y2tHUFIgPSBhcmd1bWVudEdQUjQ7CisKKyAgICBjb25zdGV4cHIgaW50IHZpcnR1YWxSZWdpc3Rl
clNpemVTaGlmdCA9IDM7CisgICAgc3RhdGljX2Fzc2VydCgoMSA8PCB2aXJ0dWFsUmVnaXN0ZXJT
aXplU2hpZnQpID09IHNpemVvZihSZWdpc3RlcikpOworCisgICAgbG9hZFB0cihhZGRyZXNzRm9y
KENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIGNvZGVCbG9ja0dQUik7CisgICAgbG9hZDMyKEFk
ZHJlc3MoY29kZUJsb2NrR1BSLCBDb2RlQmxvY2s6Om9mZnNldE9mTnVtVmFycygpKSwgbG9jYWxz
VG9Jbml0R1BSKTsKKyAgICBzdWIzMihUcnVzdGVkSW1tMzIoQ29kZUJsb2NrOjpsbGludEJhc2Vs
aW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCkpLCBsb2NhbHNUb0luaXRHUFIp
OworICAgIGxzaGlmdDMyKFRydXN0ZWRJbW0zMih2aXJ0dWFsUmVnaXN0ZXJTaXplU2hpZnQpLCBs
b2NhbHNUb0luaXRHUFIpOwogCiAgICAgc2l6ZV90IHN0YXJ0TG9jYWwgPSBDb2RlQmxvY2s6Omxs
aW50QmFzZWxpbmVDYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKTsKICAgICBpbnQg
c3RhcnRPZmZzZXQgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChzdGFydExvY2FsKS5vZmZzZXQo
KTsKLSAgICBqaXQubW92ZShUcnVzdGVkSW1tNjQoc3RhcnRPZmZzZXQgKiBzaXplb2YoUmVnaXN0
ZXIpKSwgaXRlcmF0b3JHUFIpOwotICAgIGppdC5zdWI2NChpdGVyYXRvckdQUiwgbG9jYWxzVG9J
bml0R1BSLCBlbmRHUFIpOworICAgIG1vdmUoVHJ1c3RlZEltbTY0KHN0YXJ0T2Zmc2V0ICogc2l6
ZW9mKFJlZ2lzdGVyKSksIGl0ZXJhdG9yR1BSKTsKKyAgICBzdWI2NChpdGVyYXRvckdQUiwgbG9j
YWxzVG9Jbml0R1BSLCBlbmRHUFIpOwogCi0gICAgaml0Lm1vdmUoVHJ1c3RlZEltbTY0KEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKSksIHVuZGVmaW5lZEdQUik7Ci0gICAgYXV0byBpbml0
TG9vcCA9IGppdC5sYWJlbCgpOwotICAgIEp1bXAgaW5pdERvbmUgPSBqaXQuYnJhbmNoMzIoTGVz
c1RoYW5PckVxdWFsLCBpdGVyYXRvckdQUiwgZW5kR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW02
NChKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSkpLCB1bmRlZmluZWRHUFIpOworICAgIGF1
dG8gaW5pdExvb3AgPSBsYWJlbCgpOworICAgIEp1bXAgaW5pdERvbmUgPSBicmFuY2gzMihMZXNz
VGhhbk9yRXF1YWwsIGl0ZXJhdG9yR1BSLCBlbmRHUFIpOwogICAgIHsKLSAgICAgICAgaml0LnN0
b3JlNjQodW5kZWZpbmVkR1BSLCBCYXNlSW5kZXgoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIs
IGl0ZXJhdG9yR1BSLCBUaW1lc09uZSkpOwotICAgICAgICBqaXQuc3ViNjQoVHJ1c3RlZEltbTMy
KHNpemVvZihSZWdpc3RlcikpLCBpdGVyYXRvckdQUik7Ci0gICAgICAgIGppdC5qdW1wKGluaXRM
b29wKTsKKyAgICAgICAgc3RvcmU2NCh1bmRlZmluZWRHUFIsIEJhc2VJbmRleChHUFJJbmZvOjpj
YWxsRnJhbWVSZWdpc3RlciwgaXRlcmF0b3JHUFIsIFRpbWVzT25lKSk7CisgICAgICAgIHN1YjY0
KFRydXN0ZWRJbW0zMihzaXplb2YoUmVnaXN0ZXIpKSwgaXRlcmF0b3JHUFIpOworICAgICAgICBq
dW1wKGluaXRMb29wKTsKICAgICB9Ci0gICAgaW5pdERvbmUubGluaygmaml0KTsKKyAgICBpbml0
RG9uZS5saW5rKHRoaXMpOwogCi0gICAgLy8gZW1pdFdyaXRlQmFycmllcihtX2NvZGVCbG9jayku
Ci0gICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCBh
cmd1bWVudEdQUjEpOwotICAgIEp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9IGppdC5i
YXJyaWVyQnJhbmNoKHZtLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CisgICAgLy8gSW1w
bGVtZW50aW5nIGVtaXRXcml0ZUJhcnJpZXIobV9jb2RlQmxvY2spLgorICAgIEp1bXAgb3duZXJJ
c1JlbWVtYmVyZWRPckluRWRlbiA9IGJhcnJpZXJCcmFuY2godm0sIGNvZGVCbG9ja0dQUiwgYXJn
dW1lbnRHUFIyKTsKIAotICAgIGppdC5tb3ZlKGNhbkJlT3B0aW1pemVkR1BSLCBHUFJJbmZvOjpu
dW1iZXJUYWdSZWdpc3Rlcik7IC8vIHNhdmUuCi0gICAgaml0LnNldHVwQXJndW1lbnRzPGRlY2x0
eXBlKG9wZXJhdGlvbldyaXRlQmFycmllclNsb3dQYXRoKT4oJnZtLCBhcmd1bWVudEdQUjEpOwot
ICAgIGppdC5wcmVwYXJlQ2FsbE9wZXJhdGlvbih2bSk7Ci0gICAgQ2FsbCBvcGVyYXRpb25Xcml0
ZUJhcnJpZXJDYWxsID0gaml0LmNhbGwoT3BlcmF0aW9uUHRyVGFnKTsKKyAgICBzZXR1cEFyZ3Vt
ZW50czxkZWNsdHlwZShvcGVyYXRpb25Xcml0ZUJhcnJpZXJTbG93UGF0aCk+KCZ2bSwgY29kZUJs
b2NrR1BSKTsKKyAgICBwcmVwYXJlQ2FsbE9wZXJhdGlvbih2bSk7CisgICAgQ2FsbCBvcGVyYXRp
b25Xcml0ZUJhcnJpZXJDYWxsID0gY2FsbChPcGVyYXRpb25QdHJUYWcpOworCisgICAgaWYgKGNh
bkJlT3B0aW1pemVkKQorICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6
Y29kZUJsb2NrKSwgY29kZUJsb2NrR1BSKTsKIAotICAgIGppdC5tb3ZlKEdQUkluZm86Om51bWJl
clRhZ1JlZ2lzdGVyLCBjYW5CZU9wdGltaXplZEdQUik7IC8vIHJlc3RvcmUuCi0gICAgaml0Lm1v
dmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6Ok51bWJlclRhZyksIEdQUkluZm86Om51bWJlclRhZ1Jl
Z2lzdGVyKTsKLSAgICBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuLmxpbmsoJmppdCk7CisgICAg
b3duZXJJc1JlbWVtYmVyZWRPckluRWRlbi5saW5rKHRoaXMpOwogCiAjaWYgRU5BQkxFKERGR19K
SVQpCisgICAgLy8gSW1wbGVtZW50aW5nIGVtaXRFbnRlck9wdGltaXphdGlvbkNoZWNrKCkuCiAg
ICAgQ2FsbCBvcGVyYXRpb25PcHRpbWl6ZUNhbGw7Ci0gICAgaWYgKE9wdGlvbnM6OnVzZURGR0pJ
VCgpKSB7Ci0gICAgICAgIC8vIGVtaXRFbnRlck9wdGltaXphdGlvbkNoZWNrKCkuCisgICAgaWYg
KGNhbkJlT3B0aW1pemVkKSB7CiAgICAgICAgIEp1bXBMaXN0IHNraXBPcHRpbWl6ZTsKIAotICAg
ICAgICBza2lwT3B0aW1pemUuYXBwZW5kKGppdC5icmFuY2hUZXN0MzIoWmVybywgY2FuQmVPcHRp
bWl6ZWRHUFIpKTsKLQotICAgICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNs
b3Q6OmNvZGVCbG9jayksIGFyZ3VtZW50R1BSMSk7Ci0gICAgICAgIHNraXBPcHRpbWl6ZS5hcHBl
bmQoaml0LmJyYW5jaEFkZDMyKFNpZ25lZCwgVHJ1c3RlZEltbTMyKE9wdGlvbnM6OmV4ZWN1dGlv
bkNvdW50ZXJJbmNyZW1lbnRGb3JFbnRyeSgpKSwgQWRkcmVzcyhhcmd1bWVudEdQUjEsIENvZGVC
bG9jazo6b2Zmc2V0T2ZKSVRFeGVjdXRlQ291bnRlcigpKSkpOworICAgICAgICBza2lwT3B0aW1p
emUuYXBwZW5kKGJyYW5jaEFkZDMyKFNpZ25lZCwgVHJ1c3RlZEltbTMyKE9wdGlvbnM6OmV4ZWN1
dGlvbkNvdW50ZXJJbmNyZW1lbnRGb3JFbnRyeSgpKSwgQWRkcmVzcyhjb2RlQmxvY2tHUFIsIENv
ZGVCbG9jazo6b2Zmc2V0T2ZKSVRFeGVjdXRlQ291bnRlcigpKSkpOwogCi0gICAgICAgIGppdC5j
b3B5TExJbnRCYXNlbGluZUNhbGxlZVNhdmVzRnJvbUZyYW1lT3JSZWdpc3RlclRvRW50cnlGcmFt
ZUNhbGxlZVNhdmVzQnVmZmVyKHZtLnRvcEVudHJ5RnJhbWUpOworICAgICAgICBjb3B5TExJbnRC
YXNlbGluZUNhbGxlZVNhdmVzRnJvbUZyYW1lT3JSZWdpc3RlclRvRW50cnlGcmFtZUNhbGxlZVNh
dmVzQnVmZmVyKHZtLnRvcEVudHJ5RnJhbWUpOwogCi0gICAgICAgIGppdC5zZXR1cEFyZ3VtZW50
czxkZWNsdHlwZShvcGVyYXRpb25PcHRpbWl6ZSk+KCZ2bSwgVHJ1c3RlZEltbTMyKDApKTsKLSAg
ICAgICAgaml0LnByZXBhcmVDYWxsT3BlcmF0aW9uKHZtKTsKLSAgICAgICAgb3BlcmF0aW9uT3B0
aW1pemVDYWxsID0gaml0LmNhbGwoT3BlcmF0aW9uUHRyVGFnKTsKKyAgICAgICAgc2V0dXBBcmd1
bWVudHM8ZGVjbHR5cGUob3BlcmF0aW9uT3B0aW1pemUpPigmdm0sIFRydXN0ZWRJbW0zMigwKSk7
CisgICAgICAgIHByZXBhcmVDYWxsT3BlcmF0aW9uKHZtKTsKKyAgICAgICAgb3BlcmF0aW9uT3B0
aW1pemVDYWxsID0gY2FsbChPcGVyYXRpb25QdHJUYWcpOwogCi0gICAgICAgIHNraXBPcHRpbWl6
ZS5hcHBlbmQoaml0LmJyYW5jaFRlc3RQdHIoWmVybywgcmV0dXJuVmFsdWVHUFIpKTsKLSAgICAg
ICAgaml0LmZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVy
KTsKKyAgICAgICAgc2tpcE9wdGltaXplLmFwcGVuZChicmFuY2hUZXN0UHRyKFplcm8sIHJldHVy
blZhbHVlR1BSKSk7CisgICAgICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEdQUkluZm86OmNh
bGxGcmFtZVJlZ2lzdGVyKTsKIAotICAgICAgICBza2lwT3B0aW1pemUubGluaygmaml0KTsKKyAg
ICAgICAgc2tpcE9wdGltaXplLmxpbmsodGhpcyk7CiAgICAgfQogI2VuZGlmIC8vIEVOQUJMRShE
RkdfSklUKQogCiAjaWYgQ1BVKFg4Nl82NCkKLSAgICBqaXQucG9wKFg4NlJlZ2lzdGVyczo6ZWJw
KTsKKyAgICBwb3AoWDg2UmVnaXN0ZXJzOjplYnApOwogI2VsaWYgQ1BVKEFSTTY0KQotICAgIGpp
dC5wb3BQYWlyKGZyYW1lUG9pbnRlclJlZ2lzdGVyLCBsaW5rUmVnaXN0ZXIpOworICAgIHBvcFBh
aXIoZnJhbWVQb2ludGVyUmVnaXN0ZXIsIGxpbmtSZWdpc3Rlcik7CiAjZW5kaWYKLSAgICBqaXQu
cmV0KCk7CisgICAgcmV0KCk7CiAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xP
QkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpFeHRyYUNUSVRodW5rKTsKKyAgICBM
aW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp0aGlzLCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6
OlByb2ZpbGU6OkV4dHJhQ1RJVGh1bmspOwogICAgIHBhdGNoQnVmZmVyLmxpbmsob3BlcmF0aW9u
V3JpdGVCYXJyaWVyQ2FsbCwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25X
cml0ZUJhcnJpZXJTbG93UGF0aCkpOwogI2lmIEVOQUJMRShERkdfSklUKQotICAgIGlmIChPcHRp
b25zOjp1c2VERkdKSVQoKSkKKyAgICBpZiAoY2FuQmVPcHRpbWl6ZWQpCiAgICAgICAgIHBhdGNo
QnVmZmVyLmxpbmsob3BlcmF0aW9uT3B0aW1pemVDYWxsLCBGdW5jdGlvblB0cjxPcGVyYXRpb25Q
dHJUYWc+KG9wZXJhdGlvbk9wdGltaXplKSk7CiAjZW5kaWYKLSAgICByZXR1cm4gRklOQUxJWkVf
Q09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsICJCYXNlbGluZTogb3BfZW50ZXJfaGFu
ZGxlciIpOworICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0
clRhZywgdGh1bmtOYW1lKTsKK30KKworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBKSVQ6Om9wX2VudGVyX2NhbkJlT3B0aW1pemVkX0dlbmVyYXRvcihWTSYgdm0pCit7Cisg
ICAgSklUIGppdCh2bSk7CisgICAgY29uc3RleHByIGJvb2wgY2FuQmVPcHRpbWl6ZWQgPSB0cnVl
OworICAgIHJldHVybiBqaXQub3BfZW50ZXJfR2VuZXJhdG9yKHZtLCBjYW5CZU9wdGltaXplZCwg
IkJhc2VsaW5lOiBvcF9lbnRlcl9jYW5CZU9wdGltaXplZCIpOworfQorCitNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6b3BfZW50ZXJfY2Fubm90QmVPcHRpbWl6ZWRf
R2VuZXJhdG9yKFZNJiB2bSkKK3sKKyAgICBKSVQgaml0KHZtKTsKKyAgICBjb25zdGV4cHIgYm9v
bCBjYW5CZU9wdGltaXplZCA9IGZhbHNlOworICAgIHJldHVybiBqaXQub3BfZW50ZXJfR2VuZXJh
dG9yKHZtLCBjYW5CZU9wdGltaXplZCwgIkJhc2VsaW5lOiBvcF9lbnRlcl9jYW5ub3RCZU9wdGlt
aXplZCIpOwogfQogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCkBAIC0xNDE4
LDkgKzE0MzAsMTAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKAog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0
aW9uKQogeworICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAg
ICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6cmV0dXJuRWFybHlGcm9tSW5maW5pdGVMb29wc0ZvckZ1
enppbmcoKSAmJiBtX2NvZGVCbG9jay0+bG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFy
bHlSZXR1cm4oKSkpIHsKLSAgICAgICAgdWludDY0X3QqIHB0ciA9IHZtKCkuZ2V0TG9vcEhpbnRF
eGVjdXRpb25Db3VudGVyKGluc3RydWN0aW9uKTsKKyAgICAgICAgdWludDY0X3QqIHB0ciA9IHZt
LmdldExvb3BIaW50RXhlY3V0aW9uQ291bnRlcihpbnN0cnVjdGlvbik7CiAgICAgICAgIGxvYWQ2
NChwdHIsIHJlZ1QwKTsKICAgICAgICAgYXV0byBza2lwRWFybHlSZXR1cm4gPSBicmFuY2g2NChC
ZWxvdywgcmVnVDAsIFRydXN0ZWRJbW02NChPcHRpb25zOjplYXJseVJldHVybkZyb21JbmZpbml0
ZUxvb3BzTGltaXQoKSkpOwogCkBAIC0xNDM2LDEzICsxNDQ5LDI3IEBAIHZvaWQgSklUOjplbWl0
X29wX2xvb3BfaGludChjb25zdCBJbnN0cnUKICAgICB9CiAjZW5kaWYKIAotICAgIC8vIEVtaXQg
dGhlIEpJVCBvcHRpbWl6YXRpb24gY2hlY2s6IAorI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5L
UykKKyAgICAvLyBFbWl0IHRoZSBKSVQgb3B0aW1pemF0aW9uIGNoZWNrOgogICAgIGlmIChjYW5C
ZU9wdGltaXplZCgpKSB7CiAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaEFkZDMyKFBvc2l0aXZl
T3JaZXJvLCBUcnVzdGVkSW1tMzIoT3B0aW9uczo6ZXhlY3V0aW9uQ291bnRlckluY3JlbWVudEZv
ckxvb3AoKSksCiAgICAgICAgICAgICBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmFkZHJl
c3NPZkpJVEV4ZWN1dGVDb3VudGVyKCkpKSk7CiAgICAgfQorI2Vsc2UKKyAgICBpZiAoY2FuQmVP
cHRpbWl6ZWQoKSkgeworICAgICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNv
ZGVJbmRleC5vZmZzZXQoKTsKKyAgICAgICAgQVNTRVJUKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVP
ZmZzZXQpID09IG1fYnl0ZWNvZGVJbmRleCk7CisgICAgICAgIEFTU0VSVChtX2NvZGVCbG9jay0+
aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgpID09IGluc3RydWN0aW9uKTsKKworICAgICAg
ICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDc7CisKKyAgICAgICAg
bW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7Cisg
ICAgICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIob3BfbG9vcF9oaW50X0dlbmVy
YXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKKyAgICB9CisjZW5kaWYKIH0KIAorI2lm
ICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIHZvaWQgSklUOjplbWl0U2xvd19vcF9sb29wX2hp
bnQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKICNpZiBFTkFCTEUoREZHX0pJVCkKQEAgLTE0NzAs
NiArMTQ5Nyw3NCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbG9vcF9oaW50KGNvbnN0IEluCiAj
ZW5kaWYKIH0KIAorI2Vsc2UgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCisKKyNpZiBFTkFC
TEUoREZHX0pJVCkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpv
cF9sb29wX2hpbnRfR2VuZXJhdG9yKFZNJiB2bSkKK3sKKyAgICAvLyBUaGUgdGh1bmsgZ2VuZXJh
dGVkIGJ5IHRoaXMgZnVuY3Rpb24gY2FuIG9ubHkgd29yayB3aXRoIHRoZSBMTEludCAvIEJhc2Vs
aW5lIEpJVCBiZWNhdXNlCisgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJp
Z2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9j
aygpLgorICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90
aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKKyAgICAvLyBDYWxsRnJhbWU6
OmNvZGVCbG9jaygpLgorICAgIEpJVCBqaXQodm0pOworCisgICAgaml0LnRhZ1JldHVybkFkZHJl
c3MoKTsKKworICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNzsg
Ly8gaW5jb21pbmcuCisgICAgY29uc3RleHByIEdQUlJlZyBjb2RlQmxvY2tHUFIgPSByZWdUNjsK
KyAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIGNv
ZGVCbG9ja0dQUik7CisKKyAgICAvLyBFbWl0IHRoZSBKSVQgb3B0aW1pemF0aW9uIGNoZWNrOgor
ICAgIEp1bXAgbmVlZE9wdGltaXphdGlvbkNoZWNrID0gaml0LmJyYW5jaEFkZDMyKFBvc2l0aXZl
T3JaZXJvLCBUcnVzdGVkSW1tMzIoT3B0aW9uczo6ZXhlY3V0aW9uQ291bnRlckluY3JlbWVudEZv
ckxvb3AoKSksCisgICAgICAgICAgICBBZGRyZXNzKGNvZGVCbG9ja0dQUiwgQ29kZUJsb2NrOjpv
ZmZzZXRPZkpJVEV4ZWN1dGVDb3VudGVyKCkpKTsKKyAgICBqaXQucmV0KCk7CisKKyAgICBuZWVk
T3B0aW1pemF0aW9uQ2hlY2subGluaygmaml0KTsKKyNpZiBDUFUoWDg2XzY0KQorICAgIGppdC5w
dXNoKGZyYW1lUG9pbnRlclJlZ2lzdGVyKTsKKyNlbGlmIENQVShBUk02NCkKKyAgICBqaXQucHVz
aFBhaXIoZnJhbWVQb2ludGVyUmVnaXN0ZXIsIGxpbmtSZWdpc3Rlcik7CisjZW5kaWYKKworICAg
IGF1dG8gdXNlZFJlZ2lzdGVycyA9IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3Rl
cnMoKTsKKyAgICB1c2VkUmVnaXN0ZXJzLmFkZChieXRlY29kZU9mZnNldEdQUik7CisgICAgaml0
LmNvcHlMTEludEJhc2VsaW5lQ2FsbGVlU2F2ZXNGcm9tRnJhbWVPclJlZ2lzdGVyVG9FbnRyeUZy
YW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0udG9wRW50cnlGcmFtZSwgdXNlZFJlZ2lzdGVycyk7CisK
KyAgICBqaXQuc3RvcmUzMihieXRlY29kZU9mZnNldEdQUiwgQ0NhbGxIZWxwZXJzOjp0YWdGb3Io
Q2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKTsKKyAgICBqaXQubHNo
aWZ0MzIoVHJ1c3RlZEltbTMyKEJ5dGVjb2RlSW5kZXg6OmNoZWNrcG9pbnRTaGlmdCksIGJ5dGVj
b2RlT2Zmc2V0R1BSKTsKKyAgICBqaXQuc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUob3BlcmF0aW9u
T3B0aW1pemUpPihUcnVzdGVkSW1tUHRyKCZ2bSksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKKyAgICBq
aXQucHJlcGFyZUNhbGxPcGVyYXRpb24odm0pOworICAgIENhbGwgb3BlcmF0aW9uQ2FsbCA9IGpp
dC5jYWxsKE9wZXJhdGlvblB0clRhZyk7CisgICAgSnVtcCBoYXNPcHRpbWl6ZWRFbnRyeSA9IGpp
dC5icmFuY2hUZXN0UHRyKE5vblplcm8sIHJldHVyblZhbHVlR1BSKTsKKworI2lmIENQVShYODZf
NjQpCisgICAgaml0LnBvcChmcmFtZVBvaW50ZXJSZWdpc3Rlcik7OworI2VsaWYgQ1BVKEFSTTY0
KQorICAgIGppdC5wb3BQYWlyKGZyYW1lUG9pbnRlclJlZ2lzdGVyLCBsaW5rUmVnaXN0ZXIpOwor
I2VuZGlmCisgICAgaml0LnJldCgpOworCisgICAgaGFzT3B0aW1pemVkRW50cnkubGluaygmaml0
KTsKKyNpZiBDUFUoWDg2XzY0KQorICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tMzIoMiAqIHNpemVvZihDUFVSZWdpc3RlcikpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7Cisj
ZWxpZiBDUFUoQVJNNjQpCisgICAgaml0LnBvcFBhaXIoZnJhbWVQb2ludGVyUmVnaXN0ZXIsIGxp
bmtSZWdpc3Rlcik7CisjZW5kaWYKKyAgICBpZiAoQVNTRVJUX0VOQUJMRUQpIHsKKyAgICAgICAg
SnVtcCBvayA9IGppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlLCByZXR1cm5WYWx1
ZUdQUiwgVHJ1c3RlZEltbVB0cihiaXR3aXNlX2Nhc3Q8dm9pZCo+KHN0YXRpY19jYXN0PGludHB0
cl90PigxMDAwKSkpKTsKKyAgICAgICAgaml0LmFib3J0V2l0aFJlYXNvbihKSVRVbnJlYXNvbmFi
bGVMb29wSGludEp1bXBUYXJnZXQpOworICAgICAgICBvay5saW5rKCZqaXQpOworICAgIH0KKwor
ICAgIGppdC5mYXJKdW1wKHJldHVyblZhbHVlR1BSLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rl
cik7CisKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBM
aW5rQnVmZmVyOjpQcm9maWxlOjpFeHRyYUNUSVRodW5rKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5r
KG9wZXJhdGlvbkNhbGwsIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uT3B0
aW1pemUpKTsKKyAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQ
dHJUYWcsICJCYXNlbGluZTogb3BfbG9vcF9oaW50Iik7Cit9CisjZW5kaWYgLy8gRU5BQkxFKERG
R19KSVQpCisjZW5kaWYgLy8gIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQorCiB2b2lkIEpJVDo6
ZW1pdF9vcF9jaGVja190cmFwcyhjb25zdCBJbnN0cnVjdGlvbiopCiB7CiAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoVGVzdDMyKE5vblplcm8sIEFic29sdXRlQWRkcmVzcyhtX3ZtLT50cmFwcygpLnRy
YXBCaXRzQWRkcmVzcygpKSwgVHJ1c3RlZEltbTMyKFZNVHJhcHM6OkFzeW5jRXZlbnRzKSkpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TbG93UGF0aENhbGwuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2xvd1BhdGhDYWxsLmNwcAkocmV2aXNp
b24gMjc4MjAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TbG93UGF0aENhbGwuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00NSw4ICs0NSw4IEBAIHZvaWQgSklUU2xvd1BhdGhDYWxsOjpj
YWxsKCkKICAgICBBU1NFUlQoQnl0ZWNvZGVJbmRleChieXRlY29kZU9mZnNldCkgPT0gbV9qaXQt
Pm1fYnl0ZWNvZGVJbmRleCk7CiAKICAgICBVTlVTRURfVkFSSUFCTEUobV9wYyk7Ci0gICAgY29u
c3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldFJlZyA9IEdQUkluZm86OmFyZ3VtZW50R1BSMTsK
LSAgICBtX2ppdC0+bW92ZShKSVQ6OlRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVj
b2RlT2Zmc2V0UmVnKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0g
R1BSSW5mbzo6YXJndW1lbnRHUFIxOworICAgIG1faml0LT5tb3ZlKEpJVDo6VHJ1c3RlZEltbTMy
KGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogICAgIG1faml0LT5lbWl0TmFr
ZWROZWFyQ2FsbCh2bS5qaXRTdHVicy0+Y3RpU2xvd1BhdGhGdW5jdGlvblN0dWIodm0sIG1fc2xv
d1BhdGhGdW5jdGlvbikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIH0KIApAQCAtNTQsNyAr
NTQsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiB7CiAgICAg
Q0NhbGxIZWxwZXJzIGppdDsKIAotICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRS
ZWcgPSBKSVQ6OmFyZ3VtZW50R1BSMTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zm
c2V0R1BSID0gSklUOjphcmd1bWVudEdQUjE7CiAKICNpZiBDUFUoWDg2XzY0KQogICAgIGppdC5w
dXNoKFg4NlJlZ2lzdGVyczo6ZWJwKTsKQEAgLTYzLDE0ICs2MywxNCBAQCBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgaml0LnB1c2hQYWlyKENDYWxsSGVscGVy
czo6ZnJhbWVQb2ludGVyUmVnaXN0ZXIsIENDYWxsSGVscGVyczo6bGlua1JlZ2lzdGVyKTsKICNl
bmRpZgogCi0gICAgaml0LnN0b3JlMzIoYnl0ZWNvZGVPZmZzZXRSZWcsIENDYWxsSGVscGVyczo6
dGFnRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSk7CisgICAg
aml0LnN0b3JlMzIoYnl0ZWNvZGVPZmZzZXRHUFIsIENDYWxsSGVscGVyczo6dGFnRm9yKENhbGxG
cmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSk7CiAKICAgICBqaXQubG9hZFB0
cihDQ2FsbEhlbHBlcnM6OmFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgR1BS
SW5mbzo6YXJndW1lbnRHUFIwKTsKIAogICAgIGppdC5wcmVwYXJlQ2FsbE9wZXJhdGlvbih2bSk7
CiAKICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6YXJndW1l
bnRHUFIwLCBDb2RlQmxvY2s6Om9mZnNldE9mSW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcigpKSwgR1BS
SW5mbzo6YXJndW1lbnRHUFIwKTsKLSAgICBzdGF0aWNfYXNzZXJ0KEpJVDo6YXJndW1lbnRHUFIx
ID09IGJ5dGVjb2RlT2Zmc2V0UmVnKTsKKyAgICBzdGF0aWNfYXNzZXJ0KEpJVDo6YXJndW1lbnRH
UFIxID09IGJ5dGVjb2RlT2Zmc2V0R1BSKTsKICAgICBqaXQuYWRkUHRyKEdQUkluZm86OmFyZ3Vt
ZW50R1BSMCwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKICAgICBqaXQubW92ZShHUFJJbmZvOjpj
YWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAkocmV2aXNpb24gMjc4
MjAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC04MSwxMSArODEsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHJUYWc+IHBvCiB7CiAgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAotI2lmIENQVShYODZf
NjQpCi0gICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigyICogc2l6ZW9m
KENQVVJlZ2lzdGVyKSksIFg4NlJlZ2lzdGVyczo6ZXNwKTsKLSNlbGlmIENQVShBUk02NCkKLSAg
ICBqaXQucG9wUGFpcihDQ2FsbEhlbHBlcnM6OmZyYW1lUG9pbnRlclJlZ2lzdGVyLCBDQ2FsbEhl
bHBlcnM6OmxpbmtSZWdpc3Rlcik7Ci0jZW5kaWYKKyAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbTMyKDIgKiBzaXplb2YoQ1BVUmVnaXN0ZXIpKSwgQ0NhbGxIZWxwZXJzOjpz
dGFja1BvaW50ZXJSZWdpc3Rlcik7CiAKICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgY29udGludWF0
aW9uID0gaml0Lmp1bXAoKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
T3B0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
T3B0aW9ucy5jcHAJKHJldmlzaW9uIDI3ODIwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL09wdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NjgsNiArNTY4LDggQEAgdm9p
ZCBPcHRpb25zOjpyZWNvbXB1dGVEZXBlbmRlbnRPcHRpb25zKAogCiAgICAgaWYgKE9wdGlvbnM6
OnZlcmJvc2VWZXJpZnlHQygpKQogICAgICAgICBPcHRpb25zOjp2ZXJpZnlHQygpID0gdHJ1ZTsK
KworICAgIE9wdGlvbnM6OnVzZURvbGxhclZNKCkgPSB0cnVlOyAvLyBtbGFtIFRFU1QKIH0KIAog
aW5saW5lIHZvaWQqIE9wdGlvbnM6OmFkZHJlc3NPZk9wdGlvbihPcHRpb25zOjpJRCBpZCkKQEAg
LTYwNyw5ICs2MDksOSBAQCB2b2lkIE9wdGlvbnM6OmluaXRpYWxpemUoKQogICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlQoT3B0aW9uczo6YWRkcmVzc09mT3B0aW9uKGZvcmNlT1NSRXhpdFRvTExJ
bnRJRCkgPT0gICZPcHRpb25zOjpmb3JjZU9TUkV4aXRUb0xMSW50KCkpOwogICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlQoT3B0aW9uczo6YWRkcmVzc09mT3B0aW9uRGVmYXVsdChmb3JjZU9TUkV4
aXRUb0xMSW50SUQpID09ICAmT3B0aW9uczo6Zm9yY2VPU1JFeGl0VG9MTEludERlZmF1bHQoKSk7
CiAKLSNpZm5kZWYgTkRFQlVHCisvLyNpZm5kZWYgTkRFQlVHCiAgICAgICAgICAgICBDb25maWc6
OmVuYWJsZVJlc3RyaWN0ZWRPcHRpb25zKCk7Ci0jZW5kaWYKKy8vI2VuZGlmCiAgICAgICAgICAg
ICAvLyBJbml0aWFsaXplIGVhY2ggb2YgdGhlIG9wdGlvbnMgd2l0aCB0aGVpciBkZWZhdWx0IHZh
bHVlczoKICNkZWZpbmUgSU5JVF9PUFRJT04odHlwZV8sIG5hbWVfLCBkZWZhdWx0VmFsdWVfLCBh
dmFpbGFiaWxpdHlfLCBkZXNjcmlwdGlvbl8pIHsgXAogICAgICAgICAgICAgICAgIGF1dG8gdmFs
dWUgPSBkZWZhdWx0VmFsdWVfOyBcCg==
</data>
<flag name="commit-queue"
          id="451484"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>430127</attachid>
            <date>2021-05-29 20:31:00 -0700</date>
            <delta_ts>2021-05-30 01:28:48 -0700</delta_ts>
            <desc>work in progress.</desc>
            <filename>wip-loop-hint+prologue+enter6.patch</filename>
            <type>text/plain</type>
            <size>44881</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNy
b0Fzc2VtYmxlckNvZGVSZWYuaAkocmV2aXNpb24gMjc4MjAzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaAkod29ya2luZyBjb3B5KQpA
QCAtMjM3LDcgKzIzNyw4IEBAIHB1YmxpYzoKICAgICBleHBsaWNpdCBSZXR1cm5BZGRyZXNzUHRy
KGNvbnN0IHZvaWQqIHJldHVybkFkZHJlc3MpCiAgICAgewogI2lmIENQVShBUk02NEUpCi0gICAg
ICAgIGFzc2VydElzTm90VGFnZ2VkKHJldHVybkFkZHJlc3MpOworLy8gICAgICAgIGFzc2VydElz
Tm90VGFnZ2VkKHJldHVybkFkZHJlc3MpOworICAgICAgICByZXR1cm5BZGRyZXNzID0gcmVtb3Zl
Q29kZVB0clRhZyhyZXR1cm5BZGRyZXNzKTsgLy8gbWxhbSBURVNUCiAgICAgICAgIHJldHVybkFk
ZHJlc3MgPSByZXRhZ0NvZGVQdHI8Tm9QdHJUYWcsIFJldHVybkFkZHJlc3NQdHJUYWc+KHJldHVy
bkFkZHJlc3MpOwogI2VuZGlmCiAgICAgICAgIG1fdmFsdWUgPSByZXR1cm5BZGRyZXNzOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24g
Mjc4MjAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xNzAsNiArMTcwLDcgQEAgcHVibGljOgogCiAgICAgdW5zaWduZWQq
IGFkZHJlc3NPZk51bVBhcmFtZXRlcnMoKSB7IHJldHVybiAmbV9udW1QYXJhbWV0ZXJzOyB9CiAg
ICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZk51bVBhcmFtZXRlcnMoKSB7IHJldHVybiBPQkpF
Q1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX251bVBhcmFtZXRlcnMpOyB9CisgICAgc3RhdGljIHB0
cmRpZmZfdCBvZmZzZXRPZk51bVZhcnMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJs
b2NrLCBtX251bVZhcnMpOyB9CiAKICAgICBDb2RlQmxvY2sqIGFsdGVybmF0aXZlKCkgY29uc3Qg
eyByZXR1cm4gc3RhdGljX2Nhc3Q8Q29kZUJsb2NrKj4obV9hbHRlcm5hdGl2ZS5nZXQoKSk7IH0K
ICAgICB2b2lkIHNldEFsdGVybmF0aXZlKFZNJiwgQ29kZUJsb2NrKik7CkBAIC00ODYsNiArNDg3
LDggQEAgcHVibGljOgogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAorICAgIHN0YXRp
YyBwdHJkaWZmX3Qgb2Zmc2V0T2ZBcmd1bWVudFZhbHVlUHJvZmlsZXMoKSB7IHJldHVybiBPQkpF
Q1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2FyZ3VtZW50VmFsdWVQcm9maWxlcyk7IH0KKwogICAg
IFZhbHVlUHJvZmlsZSYgdmFsdWVQcm9maWxlRm9yQnl0ZWNvZGVJbmRleChCeXRlY29kZUluZGV4
KTsKICAgICBTcGVjdWxhdGVkVHlwZSB2YWx1ZVByb2ZpbGVQcmVkaWN0aW9uRm9yQnl0ZWNvZGVJ
bmRleChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBCeXRlY29kZUluZGV4KTsKIApAQCAtODE5
LDcgKzgyMiw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBib29sIHdhc0NvbXBpbGVkV2l0aERl
YnVnZ2luZ09wY29kZXMoKSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+d2FzQ29tcGls
ZWRXaXRoRGVidWdnaW5nT3Bjb2RlcygpOyB9Ci0gICAgCisKICAgICAvLyBUaGlzIGlzIGludGVu
dGlvbmFsbHkgcHVibGljOyBpdCdzIHRoZSByZXNwb25zaWJpbGl0eSBvZiBhbnlvbmUgZG9pbmcg
YW55CiAgICAgLy8gb2YgdGhlIGZvbGxvd2luZyB0byBob2xkIHRoZSBsb2NrOgogICAgIC8vCkBA
IC05MDYsNiArOTA5LDggQEAgcHVibGljOgogCiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRP
Zk1ldGFkYXRhVGFibGUoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX21l
dGFkYXRhKTsgfQogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZJbnN0cnVjdGlvbnNSYXdQ
b2ludGVyKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9pbnN0cnVjdGlv
bnNSYXdQb2ludGVyKTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZTaG91bGRBbHdh
eXNCZUlubGluZWQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX3Nob3Vs
ZEFsd2F5c0JlSW5saW5lZCk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mVW5saW5r
ZWRDb2RlKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV91bmxpbmtlZENv
ZGUpOyB9CiAKICAgICBib29sIGxvb3BIaW50c0FyZUVsaWdpYmxlRm9yRnV6emluZ0Vhcmx5UmV0
dXJuKCkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVs
cGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlI
ZWxwZXJzLmgJKHJldmlzaW9uIDI3ODIwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
QXNzZW1ibHlIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyNiw2ICszMjYsMTEgQEAgcHVi
bGljOgogICAgICAgICBBU1NFUlQoY29kZUJsb2NrKTsKIAogICAgICAgICBjb25zdCBSZWdpc3Rl
ckF0T2Zmc2V0TGlzdCogY2FsbGVlU2F2ZXMgPSBjb2RlQmxvY2stPmNhbGxlZVNhdmVSZWdpc3Rl
cnMoKTsKKyAgICAgICAgZW1pdFNhdmVDYWxsZWVTYXZlc0ZvcihjYWxsZWVTYXZlcyk7CisgICAg
fQorCisgICAgdm9pZCBlbWl0U2F2ZUNhbGxlZVNhdmVzRm9yKGNvbnN0IFJlZ2lzdGVyQXRPZmZz
ZXRMaXN0KiBjYWxsZWVTYXZlcykKKyAgICB7CiAgICAgICAgIFJlZ2lzdGVyU2V0IGRvbnRTYXZl
UmVnaXN0ZXJzID0gUmVnaXN0ZXJTZXQoUmVnaXN0ZXJTZXQ6OnN0YWNrUmVnaXN0ZXJzKCksIFJl
Z2lzdGVyU2V0OjphbGxGUFJzKCkpOwogICAgICAgICB1bnNpZ25lZCByZWdpc3RlckNvdW50ID0g
Y2FsbGVlU2F2ZXMtPnNpemUoKTsKIApAQCAtMzk5LDYgKzQwNCwxMSBAQCBwdWJsaWM6CiAgICAg
ICAgIGVtaXRTYXZlQ2FsbGVlU2F2ZXNGb3IoY29kZUJsb2NrKCkpOwogICAgIH0KIAorICAgIHZv
aWQgZW1pdFNhdmVDYWxsZWVTYXZlc0ZvckJhc2VsaW5lSklUKCkKKyAgICB7CisgICAgICAgIGVt
aXRTYXZlQ2FsbGVlU2F2ZXNGb3IoJlJlZ2lzdGVyQXRPZmZzZXRMaXN0OjpsbGludEJhc2VsaW5l
Q2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKKyAgICB9CisKICAgICB2b2lkIGVtaXRTYXZlVGhlbk1h
dGVyaWFsaXplVGFnUmVnaXN0ZXJzKCkKICAgICB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKQEAgLTQx
Nyw2ICs0MjcsMTEgQEAgcHVibGljOgogICAgICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzRm9y
KGNvZGVCbG9jaygpKTsKICAgICB9CiAKKyAgICB2b2lkIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXNG
b3JCYXNlbGluZUpJVCgpCisgICAgeworICAgICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzRm9y
KCZSZWdpc3RlckF0T2Zmc2V0TGlzdDo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVSZWdpc3RlcnMo
KSk7CisgICAgfQorCiAgICAgdm9pZCBlbWl0UmVzdG9yZVNhdmVkVGFnUmVnaXN0ZXJzKCkKICAg
ICB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJ
KHJldmlzaW9uIDI3ODIwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAko
d29ya2luZyBjb3B5KQpAQCAtODIsNyArODIsNyBAQCBKSVQ6On5KSVQoKQogewogfQogCi0jaWYg
RU5BQkxFKERGR19KSVQpCisjaWYgRU5BQkxFKERGR19KSVQpICYmICFFTkFCTEUoRVhUUkFfQ1RJ
X1RIVU5LUykKIHZvaWQgSklUOjplbWl0RW50ZXJPcHRpbWl6YXRpb25DaGVjaygpCiB7CiAgICAg
aWYgKCFjYW5CZU9wdGltaXplZCgpKQpAQCAtMTAwLDcgKzEwMCw3IEBAIHZvaWQgSklUOjplbWl0
RW50ZXJPcHRpbWl6YXRpb25DaGVjaygpCiAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgR1BS
SW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOwogICAgIHNraXBPcHRpbWl6ZS5saW5rKHRoaXMpOwog
fQotI2VuZGlmCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpICYmICFFTkFCTEUoRVhUUkFfQ1RJ
X1RIVU5LUykoCiAKIHZvaWQgSklUOjplbWl0Tm90aWZ5V3JpdGUoV2F0Y2hwb2ludFNldCogc2V0
KQogewpAQCAtNTc0LDcgKzU3NCw5IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNl
cygpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9qbmVxKQogICAgICAgICBERUZJTkVf
U0xPV0NBU0VfT1Aob3BfanN0cmljdGVxKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3Bf
am5zdHJpY3RlcSkKKyNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAgICAgICAgIERFRklO
RV9TTE9XQ0FTRV9PUChvcF9sb29wX2hpbnQpCisjZW5kaWYKICAgICAgICAgREVGSU5FX1NMT1dD
QVNFX09QKG9wX2NoZWNrX3RyYXBzKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfbW9k
KQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfbXVsKQpAQCAtNjYwLDYgKzY2MiwyNyBA
QCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogI2VuZGlmCiB9CiAKKyNkZWZp
bmUgRk9SX0VBQ0hfTk9OX1BST0ZJTElOR19QUk9MT0dVRV9HRU5FUkFUT1IodikgXAorICAgIHYo
IWRvZXNQcm9maWxpbmcsICFpc0NvbnN0cnVjdG9yLCAhaGFzSHVnZUZyYW1lLCBwcm9sb2d1ZUdl
bmVyYXRvcjAsIGFyaXR5Rml4dXBfcHJvbG9ndWVHZW5lcmF0b3IwKSBcCisgICAgdighZG9lc1By
b2ZpbGluZywgIWlzQ29uc3RydWN0b3IsICBoYXNIdWdlRnJhbWUsIHByb2xvZ3VlR2VuZXJhdG9y
MSwgYXJpdHlGaXh1cF9wcm9sb2d1ZUdlbmVyYXRvcjEpIFwKKyAgICB2KCFkb2VzUHJvZmlsaW5n
LCAgaXNDb25zdHJ1Y3RvciwgIWhhc0h1Z2VGcmFtZSwgcHJvbG9ndWVHZW5lcmF0b3IyLCBhcml0
eUZpeHVwX3Byb2xvZ3VlR2VuZXJhdG9yMikgXAorICAgIHYoIWRvZXNQcm9maWxpbmcsICBpc0Nv
bnN0cnVjdG9yLCAgaGFzSHVnZUZyYW1lLCBwcm9sb2d1ZUdlbmVyYXRvcjMsIGFyaXR5Rml4dXBf
cHJvbG9ndWVHZW5lcmF0b3IzKQorCisjaWYgRU5BQkxFKERGR19KSVQpCisjZGVmaW5lIEZPUl9F
QUNIX1BST0ZJTElOR19QUk9MT0dVRV9HRU5FUkFUT1IodikgXAorICAgIHYoIGRvZXNQcm9maWxp
bmcsICFpc0NvbnN0cnVjdG9yLCAhaGFzSHVnZUZyYW1lLCBwcm9sb2d1ZUdlbmVyYXRvcjQsIGFy
aXR5Rml4dXBfcHJvbG9ndWVHZW5lcmF0b3I0KSBcCisgICAgdiggZG9lc1Byb2ZpbGluZywgIWlz
Q29uc3RydWN0b3IsICBoYXNIdWdlRnJhbWUsIHByb2xvZ3VlR2VuZXJhdG9yNSwgYXJpdHlGaXh1
cF9wcm9sb2d1ZUdlbmVyYXRvcjUpIFwKKyAgICB2KCBkb2VzUHJvZmlsaW5nLCAgaXNDb25zdHJ1
Y3RvciwgIWhhc0h1Z2VGcmFtZSwgcHJvbG9ndWVHZW5lcmF0b3I2LCBhcml0eUZpeHVwX3Byb2xv
Z3VlR2VuZXJhdG9yNikgXAorICAgIHYoIGRvZXNQcm9maWxpbmcsICBpc0NvbnN0cnVjdG9yLCAg
aGFzSHVnZUZyYW1lLCBwcm9sb2d1ZUdlbmVyYXRvcjcsIGFyaXR5Rml4dXBfcHJvbG9ndWVHZW5l
cmF0b3I3KQorCisjZWxzZSAvLyBub3QgRU5BQkxFKERGR19KSVQpCisjZGVmaW5lIEZPUl9FQUNI
X1BST0ZJTElOR19QUk9MT0dVRV9HRU5FUkFUT1IodikKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJ
VCkKKworI2RlZmluZSBGT1JfRUFDSF9QUk9MT0dVRV9HRU5FUkFUT1IodikgXAorICAgIEZPUl9F
QUNIX05PTl9QUk9GSUxJTkdfUFJPTE9HVUVfR0VORVJBVE9SKHYpIFwKKyAgICBGT1JfRUFDSF9Q
Uk9GSUxJTkdfUFJPTE9HVUVfR0VORVJBVE9SKHYpCisKIHZvaWQgSklUOjpjb21waWxlQW5kTGlu
a1dpdGhvdXRGaW5hbGl6aW5nKEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKIHsKICAgICBE
Rkc6OkNhcGFiaWxpdHlMZXZlbCBsZXZlbCA9IG1fY29kZUJsb2NrLT5jYXBhYmlsaXR5TGV2ZWwo
KTsKQEAgLTcyMiw2ICs3NDUsOCBAQCB2b2lkIEpJVDo6Y29tcGlsZUFuZExpbmtXaXRob3V0Rmlu
YWxpemluCiAgICAgICAgIG5vcCgpOwogCiAgICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoKTsKKwor
I2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICBlbWl0UHV0VG9DYWxsRnJhbWVIZWFk
ZXIobV9jb2RlQmxvY2ssIENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayk7CiAKICAgICBMYWJlbCBi
ZWdpbkxhYmVsKHRoaXMpOwpAQCAtNzI5LDYgKzc1NCw3IEBAIHZvaWQgSklUOjpjb21waWxlQW5k
TGlua1dpdGhvdXRGaW5hbGl6aW4KICAgICBpbnQgZnJhbWVUb3BPZmZzZXQgPSBzdGFja1BvaW50
ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKTsKICAgICB1bnNpZ25l
ZCBtYXhGcmFtZVNpemUgPSAtZnJhbWVUb3BPZmZzZXQ7CiAgICAgYWRkUHRyKFRydXN0ZWRJbW0z
MihmcmFtZVRvcE9mZnNldCksIGNhbGxGcmFtZVJlZ2lzdGVyLCByZWdUMSk7CisKICAgICBKdW1w
TGlzdCBzdGFja092ZXJmbG93OwogICAgIGlmIChVTkxJS0VMWShtYXhGcmFtZVNpemUgPiBPcHRp
b25zOjpyZXNlcnZlZFpvbmVTaXplKCkpKQogICAgICAgICBzdGFja092ZXJmbG93LmFwcGVuZChi
cmFuY2hQdHIoQWJvdmUsIHJlZ1QxLCBjYWxsRnJhbWVSZWdpc3RlcikpOwpAQCAtNzQzLDExICs3
NjksMTAgQEAgdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbgogICAgIGlm
IChtX2NvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUpIHsKICAgICAgICAgQVNT
RVJUKCFtX2J5dGVjb2RlSW5kZXgpOwogICAgICAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygp
KSB7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0gMDsgYXJndW1lbnQgPCBt
X2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpOyArK2FyZ3VtZW50KSB7Ci0gICAgICAgICAgICAg
ICAgLy8gSWYgdGhpcyBpcyBhIGNvbnN0cnVjdG9yLCB0aGVuIHdlIHdhbnQgdG8gcHV0IGluIGEg
ZHVtbXkgcHJvZmlsaW5nIHNpdGUgKHRvCi0gICAgICAgICAgICAgICAgLy8ga2VlcCB0aGluZ3Mg
Y29uc2lzdGVudCkgYnV0IHdlIGRvbid0IGFjdHVhbGx5IHdhbnQgdG8gcmVjb3JkIHRoZSBkdW1t
eSB2YWx1ZS4KLSAgICAgICAgICAgICAgICBpZiAobV9jb2RlQmxvY2stPmlzQ29uc3RydWN0b3Io
KSAmJiAhYXJndW1lbnQpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgLy8gSWYgdGhpcyBpcyBhIGNvbnN0cnVjdG9yLCB0aGVuIHdlIHdhbnQgdG8gcHV0IGluIGEg
ZHVtbXkgcHJvZmlsaW5nIHNpdGUgKHRvCisgICAgICAgICAgICAvLyBrZWVwIHRoaW5ncyBjb25z
aXN0ZW50KSBidXQgd2UgZG9uJ3QgYWN0dWFsbHkgd2FudCB0byByZWNvcmQgdGhlIGR1bW15IHZh
bHVlLgorICAgICAgICAgICAgdW5zaWduZWQgc3RhcnRBcmd1bWVudCA9IG1fY29kZUJsb2NrLT5p
c0NvbnN0cnVjdG9yKCkgPyAxIDogMDsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgYXJndW1l
bnQgPSBzdGFydEFyZ3VtZW50OyBhcmd1bWVudCA8IG1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJz
KCk7ICsrYXJndW1lbnQpIHsKICAgICAgICAgICAgICAgICBpbnQgb2Zmc2V0ID0gQ2FsbEZyYW1l
Ojphcmd1bWVudE9mZnNldEluY2x1ZGluZ1RoaXMoYXJndW1lbnQpICogc3RhdGljX2Nhc3Q8aW50
PihzaXplb2YoUmVnaXN0ZXIpKTsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICAgICAgICAg
IEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CkBAIC03NjEsNyAr
Nzg2LDM2IEBAIHZvaWQgSklUOjpjb21waWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW4KICAgICAg
ICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLSAgICAKKyNlbHNlIC8vIEVOQUJMRShFWFRSQV9D
VElfVEhVTktTKQorICAgIGNvbnN0ZXhwciBHUFJSZWcgZnJhbWVUb3BPZmZzZXRHUFIgPSByZWdU
NzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGNvZGVCbG9ja0dQUiA9IHJlZ1Q2OworICAgIEFTU0VS
VCghbV9ieXRlY29kZUluZGV4KTsKKworICAgIGludCBmcmFtZVRvcE9mZnNldCA9IHN0YWNrUG9p
bnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpOworICAgIHVuc2ln
bmVkIG1heEZyYW1lU2l6ZSA9IC1mcmFtZVRvcE9mZnNldDsKKworICAgIGJvb2wgZG9lc1Byb2Zp
bGluZyA9IChtX2NvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUpICYmIHNob3Vs
ZEVtaXRQcm9maWxpbmcoKTsKKyAgICBib29sIGlzQ29uc3RydWN0b3IgPSBtX2NvZGVCbG9jay0+
aXNDb25zdHJ1Y3RvcigpOworICAgIGJvb2wgaGFzSHVnZUZyYW1lID0gbWF4RnJhbWVTaXplID4g
T3B0aW9uczo6cmVzZXJ2ZWRab25lU2l6ZSgpOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBUaHVu
a0dlbmVyYXRvciBnZW5lcmF0b3JzW10gPSB7CisjZGVmaW5lIFVTRV9QUk9MT0dVRV9HRU5FUkFU
T1IoZG9lc1Byb2ZpbGluZywgaXNDb25zdHJ1Y3RvciwgaGFzSHVnZUZyYW1lLCBuYW1lLCBhcml0
eUZpeHVwTmFtZSkgbmFtZSwKKyAgICAgICAgRk9SX0VBQ0hfUFJPTE9HVUVfR0VORVJBVE9SKFVT
RV9QUk9MT0dVRV9HRU5FUkFUT1IpCisjdW5kZWYgVVNFX1BST0xPR1VFX0dFTkVSQVRPUgorICAg
IH07CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBudW1iZXJPZkdlbmVyYXRvcnMgPSBz
aXplb2YoZ2VuZXJhdG9ycykgLyBzaXplb2YoZ2VuZXJhdG9yc1swXSk7CisKKyAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2spLCBjb2RlQmxvY2tHUFIpOworICAgIG1vdmUoVHJ1c3Rl
ZEltbTY0KGZyYW1lVG9wT2Zmc2V0KSwgZnJhbWVUb3BPZmZzZXRHUFIpOworCisgICAgdW5zaWdu
ZWQgZ2VuZXJhdG9yU2VsZWN0b3IgPSBkb2VzUHJvZmlsaW5nIDw8IDIgfCBpc0NvbnN0cnVjdG9y
IDw8IDEgfCBoYXNIdWdlRnJhbWUgPDwgMDsKKyAgICBSRUxFQVNFX0FTU0VSVChnZW5lcmF0b3JT
ZWxlY3RvciA8IG51bWJlck9mR2VuZXJhdG9ycyk7CisgICAgYXV0byBnZW5lcmF0b3IgPSBnZW5l
cmF0b3JzW2dlbmVyYXRvclNlbGVjdG9yXTsKKyAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bSgpLmdl
dENUSVN0dWIoZ2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOworCisgICAgTGFi
ZWwgYm9keUxhYmVsKHRoaXMpOworI2VuZGlmIC8vICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykK
KwogICAgIFJFTEVBU0VfQVNTRVJUKCFKSVRDb2RlOjppc0pJVChtX2NvZGVCbG9jay0+aml0VHlw
ZSgpKSk7CiAKICAgICBwcml2YXRlQ29tcGlsZU1haW5QYXNzKCk7CkBAIC03NzIsMTYgKzgyNiwx
OSBAQCB2b2lkIEpJVDo6Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluCiAgICAgICAgIG1f
ZGlzYXNzZW1ibGVyLT5zZXRFbmRPZlNsb3dQYXRoKGxhYmVsKCkpOwogICAgIG1fcGNUb0NvZGVP
cmlnaW5NYXBCdWlsZGVyLmFwcGVuZEl0ZW0obGFiZWwoKSwgUENUb0NvZGVPcmlnaW5NYXBCdWls
ZGVyOjpkZWZhdWx0Q29kZU9yaWdpbigpKTsKIAorI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5L
UykKICAgICBzdGFja092ZXJmbG93LmxpbmsodGhpcyk7CiAgICAgbV9ieXRlY29kZUluZGV4ID0g
Qnl0ZWNvZGVJbmRleCgwKTsKICAgICBpZiAobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwp
CiAgICAgICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLXN0YXRpY19jYXN0PGludDMyX3Q+KG1heEZy
YW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKSksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBj
YWxsT3BlcmF0aW9uV2l0aENhbGxGcmFtZVJvbGxiYWNrT25FeGNlcHRpb24ob3BlcmF0aW9uVGhy
b3dTdGFja092ZXJmbG93RXJyb3IsIG1fY29kZUJsb2NrKTsKKyNlbmRpZgogCiAgICAgLy8gSWYg
dGhlIG51bWJlciBvZiBwYXJhbWV0ZXJzIGlzIDEsIHdlIG5ldmVyIHJlcXVpcmUgYXJpdHkgZml4
dXAuCiAgICAgYm9vbCByZXF1aXJlc0FyaXR5Rml4dXAgPSBtX2NvZGVCbG9jay0+bV9udW1QYXJh
bWV0ZXJzICE9IDE7CiAgICAgaWYgKG1fY29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9u
Q29kZSAmJiByZXF1aXJlc0FyaXR5Rml4dXApIHsKICAgICAgICAgbV9hcml0eUNoZWNrID0gbGFi
ZWwoKTsKKyNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAgICAgICAgIHN0b3JlOChUcnVz
dGVkSW1tMzIoMCksICZtX2NvZGVCbG9jay0+bV9zaG91bGRBbHdheXNCZUlubGluZWQpOwogICAg
ICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZSgpOwogICAgICAgICBlbWl0UHV0VG9DYWxsRnJhbWVI
ZWFkZXIobV9jb2RlQmxvY2ssIENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayk7CkBAIC04MDAsMTcg
Kzg1Nyw0NCBAQCB2b2lkIEpJVDo6Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluCiAgICAg
ICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CiAgICAgICAg
IGVtaXROYWtlZE5lYXJDYWxsKG1fdm0tPmdldENUSVN0dWIoYXJpdHlGaXh1cEdlbmVyYXRvciku
cmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIAorICAgICAgICBqdW1wKGJlZ2luTGFiZWwpOwor
CisjZWxzZSAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKKyAgICAgICAgZW1pdEZ1bmN0aW9u
UHJvbG9ndWUoKTsKKworICAgICAgICBzdGF0aWNfYXNzZXJ0KGZyYW1lVG9wT2Zmc2V0R1BSID09
IHJlZ1Q3KTsKKyAgICAgICAgc3RhdGljX2Fzc2VydChjb2RlQmxvY2tHUFIgPT0gcmVnVDYpOwor
ICAgICAgICBBU1NFUlQoIW1fYnl0ZWNvZGVJbmRleCk7CisKKyAgICAgICAgc3RhdGljIGNvbnN0
ZXhwciBUaHVua0dlbmVyYXRvciBnZW5lcmF0b3JzW10gPSB7CisjZGVmaW5lIFVTRV9QUk9MT0dV
RV9HRU5FUkFUT1IoZG9lc1Byb2ZpbGluZywgaXNDb25zdHJ1Y3RvciwgaGFzSHVnZUZyYW1lLCBu
YW1lLCBhcml0eUZpeHVwTmFtZSkgYXJpdHlGaXh1cE5hbWUsCisgICAgICAgICAgICBGT1JfRUFD
SF9QUk9MT0dVRV9HRU5FUkFUT1IoVVNFX1BST0xPR1VFX0dFTkVSQVRPUikKKyN1bmRlZiBVU0Vf
UFJPTE9HVUVfR0VORVJBVE9SCisgICAgICAgIH07CisgICAgICAgIHN0YXRpYyBjb25zdGV4cHIg
dW5zaWduZWQgbnVtYmVyT2ZHZW5lcmF0b3JzID0gc2l6ZW9mKGdlbmVyYXRvcnMpIC8gc2l6ZW9m
KGdlbmVyYXRvcnNbMF0pOworCisgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9j
ayksIGNvZGVCbG9ja0dQUik7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0KGZyYW1lVG9wT2Zm
c2V0KSwgZnJhbWVUb3BPZmZzZXRHUFIpOworCisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGdlbmVy
YXRvclNlbGVjdG9yIDwgbnVtYmVyT2ZHZW5lcmF0b3JzKTsKKyAgICAgICAgYXV0byBnZW5lcmF0
b3IgPSBnZW5lcmF0b3JzW2dlbmVyYXRvclNlbGVjdG9yXTsKKyAgICAgICAgUkVMRUFTRV9BU1NF
UlQoZ2VuZXJhdG9yKTsKKyAgICAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0oKS5nZXRDVElTdHVi
KGdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKKworICAgICAgICBqdW1wKGJv
ZHlMYWJlbCk7CisjZW5kaWYgLy8gIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQorCiAjaWYgQVNT
RVJUX0VOQUJMRUQKICAgICAgICAgbV9ieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgpOyAv
LyBSZXNldCB0aGlzLCBpbiBvcmRlciB0byBndWFyZCBpdHMgdXNlIHdpdGggQVNTRVJUcy4KICNl
bmRpZgotCi0gICAgICAgIGp1bXAoYmVnaW5MYWJlbCk7CiAgICAgfSBlbHNlCiAgICAgICAgIG1f
YXJpdHlDaGVjayA9IGVudHJ5TGFiZWw7IC8vIE5ldmVyIHJlcXVpcmUgYXJpdHkgZml4dXAuCiAK
ICAgICBBU1NFUlQobV9qbXBUYWJsZS5pc0VtcHR5KCkpOwogICAgIAorI2lmICFFTkFCTEUoRVhU
UkFfQ1RJX1RIVU5LUykKICAgICBwcml2YXRlQ29tcGlsZUV4Y2VwdGlvbkhhbmRsZXJzKCk7Cisj
ZW5kaWYKICAgICAKICAgICBpZiAobV9kaXNhc3NlbWJsZXIpCiAgICAgICAgIG1fZGlzYXNzZW1i
bGVyLT5zZXRFbmRPZkNvZGUobGFiZWwoKSk7CkBAIC04MjAsNiArOTA0LDIzMiBAQCB2b2lkIEpJ
VDo6Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluCiAgICAgbGluaygpOwogfQogCisjaWYg
RU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+IEpJVDo6cHJvbG9ndWVHZW5lcmF0b3IoVk0mIHZtLCBib29sIGRvZXNQcm9maWxpbmcs
IGJvb2wgaXNDb25zdHJ1Y3RvciwgYm9vbCBoYXNIdWdlRnJhbWUsIGNvbnN0IGNoYXIqIHRodW5r
TmFtZSkKK3sKKyAgICAvLyBUaGlzIGZ1bmN0aW9uIGdlbmVyYXRlcyB0aGUgQmFzZWxpbmUgSklU
J3MgcHJvbG9ndWUgY29kZS4gSXQgaXMgbm90IHVzZWFibGUgYnkgb3RoZXIgdGllcnMuCisgICAg
Y29uc3RleHByIEdQUlJlZyBmcmFtZVRvcE9mZnNldEdQUiA9IHJlZ1Q3OyAvLyBpbmNvbWluZwor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgY29kZUJsb2NrR1BSID0gcmVnVDY7IC8vIGluY29taW5nLgor
CisgICAgdGFnUmV0dXJuQWRkcmVzcygpOworCisgICAgc3RvcmU2NChjb2RlQmxvY2tHUFIsIGFk
ZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSk7CisKKyAgICBhZGRQdHIoZnJhbWVU
b3BPZmZzZXRHUFIsIGNhbGxGcmFtZVJlZ2lzdGVyLCByZWdUMSk7CisKKyAgICBKdW1wTGlzdCBz
dGFja092ZXJmbG93OworICAgIGlmIChoYXNIdWdlRnJhbWUpCisgICAgICAgIHN0YWNrT3ZlcmZs
b3cuYXBwZW5kKGJyYW5jaFB0cihBYm92ZSwgcmVnVDEsIGNhbGxGcmFtZVJlZ2lzdGVyKSk7Cisg
ICAgc3RhY2tPdmVyZmxvdy5hcHBlbmQoYnJhbmNoUHRyKEFib3ZlLCBBYnNvbHV0ZUFkZHJlc3Mo
dm0uYWRkcmVzc09mU29mdFN0YWNrTGltaXQoKSksIHJlZ1QxKSk7CisKKyAgICB1bnRhZ1JldHVy
bkFkZHJlc3MoKTsKKyNpZiBDUFUoWDg2XzY0KQorICAgIHBvcChyZWdUMik7IC8vIFNhdmUgdGhl
IHJldHVybiBhZGRyZXNzLgorI2VuZGlmCisgICAgbW92ZShyZWdUMSwgc3RhY2tQb2ludGVyUmVn
aXN0ZXIpOworICAgIHRhZ1JldHVybkFkZHJlc3MoKTsKKyAgICBjaGVja1N0YWNrUG9pbnRlckFs
aWdubWVudCgpOworI2lmIENQVShYODZfNjQpCisgICAgcHVzaChyZWdUMik7IC8vIFJlc3RvcmUg
dGhlIHJldHVybiBhZGRyZXNzLgorI2VuZGlmCisKKyAgICBlbWl0U2F2ZUNhbGxlZVNhdmVzRm9y
QmFzZWxpbmVKSVQoKTsKKyAgICBlbWl0TWF0ZXJpYWxpemVUYWdDaGVja1JlZ2lzdGVycygpOwor
CisgICAgaWYgKGRvZXNQcm9maWxpbmcpIHsKKyAgICAgICAgY29uc3RleHByIEdQUlJlZyBhcmd1
bWVudFZhbHVlUHJvZmlsZUdQUiA9IHJlZ1Q1OworICAgICAgICBjb25zdGV4cHIgR1BSUmVnIG51
bVBhcmFtZXRlcnNHUFIgPSByZWdUNDsKKyAgICAgICAgY29uc3RleHByIEdQUlJlZyBhcmd1bWVu
dEdQUiA9IHJlZ1QzOworCisgICAgICAgIGxvYWQzMihBZGRyZXNzKGNvZGVCbG9ja0dQUiwgQ29k
ZUJsb2NrOjpvZmZzZXRPZk51bVBhcmFtZXRlcnMoKSksIG51bVBhcmFtZXRlcnNHUFIpOworICAg
ICAgICBsb2FkUHRyKEFkZHJlc3MoY29kZUJsb2NrR1BSLCBDb2RlQmxvY2s6Om9mZnNldE9mQXJn
dW1lbnRWYWx1ZVByb2ZpbGVzKCkpLCBhcmd1bWVudFZhbHVlUHJvZmlsZUdQUik7CisgICAgICAg
IGlmIChpc0NvbnN0cnVjdG9yKQorICAgICAgICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzaXpl
b2YoVmFsdWVQcm9maWxlKSksIGFyZ3VtZW50VmFsdWVQcm9maWxlR1BSKTsKKworICAgICAgICBj
b25zdGV4cHIgaW50IHZpcnR1YWxSZWdpc3RlclNpemUgPSBzdGF0aWNfY2FzdDxpbnQ+KHNpemVv
ZihSZWdpc3RlcikpOworICAgICAgICBpbnQgc3RhcnRBcmd1bWVudCA9IENhbGxGcmFtZVNsb3Q6
OnRoaXNBcmd1bWVudCArIChpc0NvbnN0cnVjdG9yID8gMSA6IDApOworICAgICAgICBpbnQgc3Rh
cnRBcmd1bWVudE9mZnNldCA9IHN0YXJ0QXJndW1lbnQgKiB2aXJ0dWFsUmVnaXN0ZXJTaXplOwor
ICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChzdGFydEFyZ3VtZW50T2Zmc2V0KSwgYXJndW1lbnRH
UFIpOworCisgICAgICAgIGNvbnN0ZXhwciBpbnQgdmlydHVhbFJlZ2lzdGVyU2l6ZVNoaWZ0ID0g
MzsKKyAgICAgICAgc3RhdGljX2Fzc2VydCgoMSA8PCB2aXJ0dWFsUmVnaXN0ZXJTaXplU2hpZnQp
ID09IHZpcnR1YWxSZWdpc3RlclNpemUpOworICAgICAgICBhZGQzMihUcnVzdGVkSW1tMzIoc3Rh
dGljX2Nhc3Q8aW50PihDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQpKSwgbnVtUGFyYW1ldGVy
c0dQUik7CisgICAgICAgIGxzaGlmdDMyKFRydXN0ZWRJbW0zMih2aXJ0dWFsUmVnaXN0ZXJTaXpl
U2hpZnQpLCBudW1QYXJhbWV0ZXJzR1BSKTsKKworICAgICAgICBhZGRQdHIoY2FsbEZyYW1lUmVn
aXN0ZXIsIGFyZ3VtZW50R1BSKTsKKyAgICAgICAgYWRkUHRyKGNhbGxGcmFtZVJlZ2lzdGVyLCBu
dW1QYXJhbWV0ZXJzR1BSKTsKKworICAgICAgICBMYWJlbCBsb29wU3RhcnQodGhpcyk7CisgICAg
ICAgIEp1bXAgZG9uZSA9IGJyYW5jaFB0cihBYm92ZU9yRXF1YWwsIGFyZ3VtZW50R1BSLCBudW1Q
YXJhbWV0ZXJzR1BSKTsKKyAgICAgICAgeworICAgICAgICAgICAgbG9hZDY0KEFkZHJlc3MoYXJn
dW1lbnRHUFIpLCByZWdUMCk7CisgICAgICAgICAgICBzdG9yZTY0KHJlZ1QwLCBBZGRyZXNzKGFy
Z3VtZW50VmFsdWVQcm9maWxlR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoVmFsdWVQcm9maWxlLCBtX2J1
Y2tldHMpKSk7CisKKyAgICAgICAgICAgIC8vIFRoZSBhcmd1bWVudCBWYWx1ZVByb2ZpbGVzIGFy
ZSBzdG9yZWQgaW4gYSBGaXhlZFZlY3Rvci4gSGVuY2UsIHRoZQorICAgICAgICAgICAgLy8gYWRk
cmVzcyBvZiB0aGUgbmV4dCBwcm9maWxlIGNhbiBiZSB0cml2aWFsbHkgY29tcHV0ZWQgd2l0aCBh
biBpbmNyZW1lbnQuCisgICAgICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHNpemVvZihWYWx1
ZVByb2ZpbGUpKSwgYXJndW1lbnRWYWx1ZVByb2ZpbGVHUFIpOworICAgICAgICAgICAgYWRkUHRy
KFRydXN0ZWRJbW0zMih2aXJ0dWFsUmVnaXN0ZXJTaXplKSwgYXJndW1lbnRHUFIpOworICAgICAg
ICAgICAganVtcCgpLmxpbmtUbyhsb29wU3RhcnQsIHRoaXMpOworICAgICAgICB9CisgICAgICAg
IGRvbmUubGluayh0aGlzKTsKKyAgICB9CisgICAgcmV0KCk7CisKKyAgICBzdGFja092ZXJmbG93
LmxpbmsodGhpcyk7CisjaWYgQ1BVKFg4Nl82NCkKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKDEg
KiBzaXplb2YoQ1BVUmVnaXN0ZXIpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOyAvLyBkaXNjYXJk
IHJldHVybiBhZGRyZXNzLgorI2VuZGlmCisKKyAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBD
YWxsU2l0ZUluZGV4KDApLmJpdHMoKTsKKyAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihsb2NhdGlv
bkJpdHMpLCB0YWdGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMp
KTsKKworICAgIGlmIChtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCkKKyAgICAgICAgYWRk
UHRyKFRydXN0ZWRJbW0zMigtc3RhdGljX2Nhc3Q8aW50MzJfdD4obWF4RnJhbWVFeHRlbnRGb3JT
bG93UGF0aENhbGwpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworCisgICAgc2V0dXBBcmd1bWVu
dHM8ZGVjbHR5cGUob3BlcmF0aW9uVGhyb3dTdGFja092ZXJmbG93RXJyb3IpPihjb2RlQmxvY2tH
UFIpOworICAgIHByZXBhcmVDYWxsT3BlcmF0aW9uKHZtKTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6
Q2FsbCBvcGVyYXRpb25DYWxsID0gY2FsbChPcGVyYXRpb25QdHJUYWcpOworICAgIEp1bXAgaGFu
ZGxlRXhjZXB0aW9uSnVtcCA9IGp1bXAoKTsKKworICAgIGF1dG8gaGFuZGxlciA9IHZtLmdldENU
SVN0dWIoaGFuZGxlRXhjZXB0aW9uV2l0aENhbGxGcmFtZVJvbGxiYWNrR2VuZXJhdG9yKTsKKwor
ICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnRoaXMsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1
ZmZlcjo6UHJvZmlsZTo6RXh0cmFDVElUaHVuayk7CisgICAgcGF0Y2hCdWZmZXIubGluayhvcGVy
YXRpb25DYWxsLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvblRocm93U3Rh
Y2tPdmVyZmxvd0Vycm9yKSk7CisgICAgcGF0Y2hCdWZmZXIubGluayhoYW5kbGVFeGNlcHRpb25K
dW1wLCBDb2RlTG9jYXRpb25MYWJlbChoYW5kbGVyLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkp
OworICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywg
dGh1bmtOYW1lKTsKK30KKworc3RhdGljIGNvbnN0ZXhwciBib29sIGRvZXNQcm9maWxpbmcgPSB0
cnVlOworc3RhdGljIGNvbnN0ZXhwciBib29sIGlzQ29uc3RydWN0b3IgPSB0cnVlOworc3RhdGlj
IGNvbnN0ZXhwciBib29sIGhhc0h1Z2VGcmFtZSA9IHRydWU7CisKKyNkZWZpbmUgREVGSU5FX1BS
T0dMT0dVRV9HRU5FUkFUT1IoZG9lc1Byb2ZpbGluZywgaXNDb25zdHJ1Y3RvciwgaGFzSHVnZUZy
YW1lLCBuYW1lLCBhcml0eUZpeHVwTmFtZSkgXAorICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gSklUOjpuYW1lKFZNJiB2bSkgXAorICAgIHsgXAorICAgICAgICBKSVQg
aml0KHZtKTsgXAorICAgICAgICByZXR1cm4gaml0LnByb2xvZ3VlR2VuZXJhdG9yKHZtLCBkb2Vz
UHJvZmlsaW5nLCBpc0NvbnN0cnVjdG9yLCBoYXNIdWdlRnJhbWUsICJCYXNlbGluZTogIiAjbmFt
ZSk7IFwKKyAgICB9CisKK0ZPUl9FQUNIX1BST0xPR1VFX0dFTkVSQVRPUihERUZJTkVfUFJPR0xP
R1VFX0dFTkVSQVRPUikKKyN1bmRlZiBERUZJTkVfUFJPR0xPR1VFX0dFTkVSQVRPUgorCitNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6YXJpdHlGaXh1cFByb2xvZ3Vl
R2VuZXJhdG9yKFZNJiB2bSwgYm9vbCBpc0NvbnN0cnVjdG9yLCBUaHVua0dlbmVyYXRvciBub3Jt
YWxQcm9sb2d1ZUdlbmVyYXRvciwgY29uc3QgY2hhciogdGh1bmtOYW1lKQoreworICAgIC8vIFRo
aXMgZnVuY3Rpb24gZ2VuZXJhdGVzIHRoZSBCYXNlbGluZSBKSVQncyBwcm9sb2d1ZSBjb2RlLiBJ
dCBpcyBub3QgdXNlYWJsZSBieSBvdGhlciB0aWVycy4KKyAgICBjb25zdGV4cHIgR1BSUmVnIGZy
YW1lVG9wT2Zmc2V0R1BSID0gcmVnVDc7IC8vIGluY29taW5nCisgICAgY29uc3RleHByIEdQUlJl
ZyBjb2RlQmxvY2tHUFIgPSByZWdUNjsgLy8gaW5jb21pbmcuCisgICAgY29uc3RleHByIEdQUlJl
ZyBudW1QYXJhbWV0ZXJzR1BSID0gcmVnVDU7CisKKyAgICB0YWdSZXR1cm5BZGRyZXNzKCk7Cisj
aWYgQ1BVKFg4Nl82NCkKKyAgICBwdXNoKGZyYW1lVG9wT2Zmc2V0R1BSKTsKKyNlbGlmIENQVShB
Uk02NCkKKyAgICBwdXNoUGFpcihmcmFtZVRvcE9mZnNldEdQUiwgbGlua1JlZ2lzdGVyKTsKKyNl
bmRpZgorCisgICAgc3RvcmU2NChjb2RlQmxvY2tHUFIsIGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xv
dDo6Y29kZUJsb2NrKSk7CisgICAgc3RvcmU4KFRydXN0ZWRJbW0zMigwKSwgQWRkcmVzcyhjb2Rl
QmxvY2tHUFIsIENvZGVCbG9jazo6b2Zmc2V0T2ZTaG91bGRBbHdheXNCZUlubGluZWQoKSkpOwor
CisgICAgbG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMpLCByZWdUMSk7CisgICAgbG9hZDMyKEFkZHJlc3MoY29kZUJsb2NrR1BSLCBDb2Rl
QmxvY2s6Om9mZnNldE9mTnVtUGFyYW1ldGVycygpKSwgbnVtUGFyYW1ldGVyc0dQUik7CisgICAg
SnVtcCBub0ZpeHVwTmVlZGVkID0gYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwgbnVtUGFy
YW1ldGVyc0dQUik7CisKKyAgICBpZiBjb25zdGV4cHIgKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1Bh
dGhDYWxsKQorICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC1zdGF0aWNfY2FzdDxpbnQzMl90
PihtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCkpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7
CisKKyAgICBsb2FkUHRyKEFkZHJlc3MoY29kZUJsb2NrR1BSLCBDb2RlQmxvY2s6Om9mZnNldE9m
R2xvYmFsT2JqZWN0KCkpLCBhcmd1bWVudEdQUjApOworCisgICAgc3RhdGljX2Fzc2VydChzdGQ6
OmlzX3NhbWU8ZGVjbHR5cGUob3BlcmF0aW9uQ29uc3RydWN0QXJpdHlDaGVjayksIGRlY2x0eXBl
KG9wZXJhdGlvbkNhbGxBcml0eUNoZWNrKT46OnZhbHVlKTsKKyAgICBzZXR1cEFyZ3VtZW50czxk
ZWNsdHlwZShvcGVyYXRpb25DYWxsQXJpdHlDaGVjayk+KGFyZ3VtZW50R1BSMCk7CisgICAgcHJl
cGFyZUNhbGxPcGVyYXRpb24odm0pOworCisgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXJpdHlD
aGVja0NhbGwgPSBjYWxsKE9wZXJhdGlvblB0clRhZyk7CisgICAgSnVtcCBoYW5kbGVFeGNlcHRp
b25KdW1wID0gZW1pdE5vblBhdGNoYWJsZUV4Y2VwdGlvbkNoZWNrKHZtKTsKKworICAgIGlmIGNv
bnN0ZXhwciAobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpCisgICAgICAgIGFkZFB0cihU
cnVzdGVkSW1tMzIobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpLCBzdGFja1BvaW50ZXJS
ZWdpc3Rlcik7CisgICAgSnVtcCBuZWVkRml4dXAgPSBicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0
dXJuVmFsdWVHUFIpOworICAgIG5vRml4dXBOZWVkZWQubGluayh0aGlzKTsKKworICAgIC8vIFRo
ZSBub3JtYWwgcHJvbG9ndWUgZXhwZWN0cyBpbmNvbWluZyBjb2RlQmxvY2tHUFIgYW5kIGZyYW1l
VG9wT2Zmc2V0R1BSLgorICAgIGxvYWQ2NChhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVC
bG9jayksIGNvZGVCbG9ja0dQUik7CisKKyNpZiBDUFUoWDg2XzY0KQorICAgIHBvcChmcmFtZVRv
cE9mZnNldEdQUik7CisjZWxpZiBDUFUoQVJNNjQpCisgICAgcG9wUGFpcihmcmFtZVRvcE9mZnNl
dEdQUiwgbGlua1JlZ2lzdGVyKTsKKyNlbmRpZgorICAgIHVudGFnUmV0dXJuQWRkcmVzcygpOwor
CisgICAgSnVtcExpc3Qgbm9ybWFsUHJvbG9ndWVKdW1wOworICAgIG5vcm1hbFByb2xvZ3VlSnVt
cC5hcHBlbmQoanVtcCgpKTsKKworICAgIG5lZWRGaXh1cC5saW5rKHRoaXMpOworCisgICAgLy8g
UmVzdG9yZSB0aGUgc3RhY2sgZm9yIGFyaXR5IGZpeHVwLCBhbmQgcHJlc2VydmUgdGhlIHJldHVy
biBhZGRyZXNzIGFuZCBmcmFtZVRvcE9mZnNldEdQUi4KKworICAgIC8vIGFyaXR5Rml4dXBHZW5l
cmF0b3Igd2lsbCBiZSBzaGlmdGluZyB0aGUgc3RhY2suIFNvLCB3ZSBjYW4ndCB1c2UgdGhlIHN0
YWNrIHRvIHByZXNlcnZlCisgICAgLy8gZnJhbWVUb3BPZmZzZXRHUFIuIGNvZGVCbG9ja0dQUiBp
cyBhbGVhZHkgcHJlc2VydmVkIGluIHRoZSBDYWxsRnJhbWUgaGVhZGVyLgorICAgIC8vIFdlIGFs
c28gY2FuJ3QgdXNlIGNhbGxlZSBzYXZlZCByZWdpc3RlcnMgYmVjYXVzZSB0aGV5IGhhdmVuJ3Qg
YmVlbiBzYXZlZCB5ZXQuCisgICAgLy8KKyAgICAvLyBhcml0eUZpeHVwR2VuZXJhdG9yIGlzIGNh
cmVmdWxseSBjcmFmdGVkIHRvIG9ubHUgdXNlIGEwLCBhMSwgYTIsIHQzLCB0NCBhbmQgdDUuCisg
ICAgLy8gU28sIGZyYW1lVG9wT2Zmc2V0R1BSIHNob3VsZCBiZSBwcmVzZXJ2ZWQgaW4gcmVnVDcu
CisgICAgLy8gT24gQVJNNjQsIHdlIGNhbiBwcmVzZXJ2ZSBsciBpbiByZWdUNi4KKyAgICAvLyBP
biB4ODZfNjQsIHJlZ1Q2ID09IGFyZ3VtZW50R1BSMCwgYW5kIHdlJ3JlIG91dCBvZiBhdmFpbGFi
bGUgdm9sYXRpbGUgcmVnaXN0ZXJzLgorICAgIC8vIFNvLCB3ZSdsbCBoYXZlIHRvIHVzZSBhIFZN
IHNjcmF0Y2hCdWZmZXIgdG8gcHJlc2VydmUgdGhlIHJldHVybiBhZGRyZXNzLgorCisjaWYgQ1BV
KFg4Nl82NCkKKyAgICBDUFVSZWdpc3Rlciogc2NyYXRjaCA9IGJpdHdpc2VfY2FzdDxDUFVSZWdp
c3Rlcio+KHZtLnNjcmF0Y2hCdWZmZXJGb3JTaXplKHNpemVvZihDUFVSZWdpc3RlcikpLT5kYXRh
QnVmZmVyKCkpOworICAgIHBvcChmcmFtZVRvcE9mZnNldEdQUik7CisgICAgcG9wKGFyZ3VtZW50
R1BSMik7IC8vIHJldHVybiBhZGRyZXNzLgorICAgIHN0b3JlUHRyKGFyZ3VtZW50R1BSMiwgc2Ny
YXRjaCk7CisjZWxpZiBDUFUoQVJNNjQpCisgICAgcG9wUGFpcihmcmFtZVRvcE9mZnNldEdQUiwg
bGlua1JlZ2lzdGVyKTsKKyAgICB1bnRhZ1JldHVybkFkZHJlc3MoKTsKKyAgICBtb3ZlKGxpbmtS
ZWdpc3RlciwgcmVnVDYpOworICAgIGF1dG8gcmFuZG9tUmV0dXJuQWRkcmVzc1RhZyA9IHJhbmRv
bSgpOworICAgIG1vdmUoVHJ1c3RlZEltbTMyKHJhbmRvbVJldHVybkFkZHJlc3NUYWcpLCByZWdU
MSk7CisgICAgdGFnUHRyKHJlZ1QxLCByZWdUNik7CisjZW5kaWYKKyAgICBtb3ZlKHJldHVyblZh
bHVlR1BSLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgIENhbGwgYXJpdHlGaXh1cENhbGwg
PSBuZWFyQ2FsbCgpOworCisjaWYgQ1BVKFg4Nl82NCkKKyAgICBsb2FkUHRyKHNjcmF0Y2gsIGFy
Z3VtZW50R1BSMik7CisgICAgcHVzaChhcmd1bWVudEdQUjIpOyAvLyByZXR1cm4gYWRkcmVzcy4K
KyNlbGlmIENQVShBUk02NCkKKyAgICBtb3ZlKFRydXN0ZWRJbW0zMihyYW5kb21SZXR1cm5BZGRy
ZXNzVGFnKSwgcmVnVDEpOworICAgIHVudGFnUHRyKHJlZ1QxLCByZWdUNik7CisgICAgbW92ZShy
ZWdUNiwgbGlua1JlZ2lzdGVyKTsKKyNlbmRpZgorICAgIGxvYWQ2NChhZGRyZXNzRm9yKENhbGxG
cmFtZVNsb3Q6OmNvZGVCbG9jayksIGNvZGVCbG9ja0dQUik7CisgICAgbm9ybWFsUHJvbG9ndWVK
dW1wLmFwcGVuZChqdW1wKCkpOworCisgICAgYXV0byBhcml0eUNoZWNrT3BlcmF0aW9uID0gaXND
b25zdHJ1Y3RvciA/IG9wZXJhdGlvbkNvbnN0cnVjdEFyaXR5Q2hlY2sgOiBvcGVyYXRpb25DYWxs
QXJpdHlDaGVjazsKKyAgICBhdXRvIGFyaXR5Rml4dXAgPSB2bS5nZXRDVElTdHViKGFyaXR5Rml4
dXBHZW5lcmF0b3IpOworICAgIGF1dG8gbm9ybWFsUHJvbG9ndWUgPSB2bS5nZXRDVElTdHViKG5v
cm1hbFByb2xvZ3VlR2VuZXJhdG9yKTsKKyAgICBhdXRvIGV4Y2VwdGlvbkhhbmRsZXIgPSB2bS5n
ZXRDVElTdHViKHBvcFRodW5rU3RhY2tQcmVzZXJ2ZXNBbmRIYW5kbGVFeGNlcHRpb25HZW5lcmF0
b3IpOworCisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdGhpcywgR0xPQkFMX1RIVU5LX0lE
LCBMaW5rQnVmZmVyOjpQcm9maWxlOjpFeHRyYUNUSVRodW5rKTsKKyAgICBwYXRjaEJ1ZmZlci5s
aW5rKGFyaXR5Q2hlY2tDYWxsLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KGFyaXR5Q2hl
Y2tPcGVyYXRpb24pKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKGFyaXR5Rml4dXBDYWxsLCBGdW5j
dGlvblB0cihhcml0eUZpeHVwLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkpOworICAgIHBhdGNo
QnVmZmVyLmxpbmsobm9ybWFsUHJvbG9ndWVKdW1wLCBDb2RlTG9jYXRpb25MYWJlbChub3JtYWxQ
cm9sb2d1ZS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5r
KGhhbmRsZUV4Y2VwdGlvbkp1bXAsIENvZGVMb2NhdGlvbkxhYmVsKGV4Y2VwdGlvbkhhbmRsZXIu
cmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7CisgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0
Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCB0aHVua05hbWUpOworfQorCisjZGVmaW5lIERFRklO
RV9BUklUWV9QUk9HTE9HVUVfR0VORVJBVE9SKGRvZXNQcm9maWxpbmcsIGlzQ29uc3RydWN0b3Is
IGhhc0h1Z2VGcmFtZSwgbmFtZSwgYXJpdHlGaXh1cE5hbWUpIFwKK01hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjphcml0eUZpeHVwTmFtZShWTSYgdm0pIFwKKyAgICB7
IFwKKyAgICAgICAgSklUIGppdCh2bSk7IFwKKyAgICAgICAgcmV0dXJuIGppdC5hcml0eUZpeHVw
UHJvbG9ndWVHZW5lcmF0b3Iodm0sIGlzQ29uc3RydWN0b3IsIG5hbWUsICJCYXNlbGluZTogIiAj
YXJpdHlGaXh1cE5hbWUpOyBcCisgICAgfQorCitGT1JfRUFDSF9QUk9MT0dVRV9HRU5FUkFUT1Io
REVGSU5FX0FSSVRZX1BST0dMT0dVRV9HRU5FUkFUT1IpCisjdW5kZWYgREVGSU5FX0FSSVRZX1BS
T0dMT0dVRV9HRU5FUkFUT1IKKworI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQor
CiB2b2lkIEpJVDo6bGluaygpCiB7CiAgICAgTGlua0J1ZmZlciYgcGF0Y2hCdWZmZXIgPSAqbV9s
aW5rQnVmZmVyOwpAQCAtMTAxNCw5ICsxMzI0LDkgQEAgQ29tcGlsYXRpb25SZXN1bHQgSklUOjpw
cml2YXRlQ29tcGlsZShKSQogICAgIHJldHVybiBmaW5hbGl6ZU9uTWFpblRocmVhZCgpOwogfQog
CisjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxl
RXhjZXB0aW9uSGFuZGxlcnMoKQogewotI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAg
ICBpZiAoIW1fZXhjZXB0aW9uQ2hlY2tzV2l0aENhbGxGcmFtZVJvbGxiYWNrLmVtcHR5KCkpIHsK
ICAgICAgICAgbV9leGNlcHRpb25DaGVja3NXaXRoQ2FsbEZyYW1lUm9sbGJhY2subGluayh0aGlz
KTsKIApAQCAtMTA0MSw4ICsxMzUxLDggQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlRXhjZXB0
aW9uSGFuZGxlcgogICAgICAgICBtX2ZhckNhbGxzLmFwcGVuZChGYXJDYWxsUmVjb3JkKGNhbGwo
T3BlcmF0aW9uUHRyVGFnKSwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25M
b29rdXBFeGNlcHRpb25IYW5kbGVyKSkpOwogICAgICAgICBqdW1wVG9FeGNlcHRpb25IYW5kbGVy
KHZtKCkpOwogICAgIH0KLSNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIH0KKyNl
bmRpZiAvLyAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKIHZvaWQgSklUOjpkb01haW5UaHJl
YWRQcmVwYXJhdGlvbkJlZm9yZUNvbXBpbGUoKQogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VC5oCShyZXZpc2lvbiAyNzgyMDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMTgsNyArMzE4LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgICAgICBtX2V4Y2VwdGlvbkNoZWNrc1dpdGhDYWxsRnJhbWVSb2xsYmFjay5hcHBlbmQoZW1p
dEV4Y2VwdGlvbkNoZWNrKHZtKCkpKTsKICAgICAgICAgfQogCisjaWYgIUVOQUJMRShFWFRSQV9D
VElfVEhVTktTKQogICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlRXhjZXB0aW9uSGFuZGxlcnMo
KTsKKyNlbmRpZgogCiAgICAgICAgIHZvaWQgYWR2YW5jZVRvTmV4dENoZWNrcG9pbnQoKTsKICAg
ICAgICAgdm9pZCBlbWl0SnVtcFNsb3dUb0hvdEZvckNoZWNrcG9pbnQoSnVtcCk7CkBAIC03MTMs
NyArNzE1LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfanN0
cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYpOwogICAgICAgICB2b2lkIGVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfanRydWUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJik7CisjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2xvb3BfaGludChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyNlbmRpZgogICAgICAgICB2b2lkIGVtaXRTbG93X29wX2No
ZWNrX3RyYXBzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYpOwogICAgICAgICB2b2lkIGVtaXRTbG93X29wX21vZChjb25zdCBJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9tdWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJik7CkBAIC03ODgsNiArNzkyLDI2IEBAIG5hbWVzcGFjZSBKU0MgewogCiAjaWYgRU5BQkxF
KEVYVFJBX0NUSV9USFVOS1MpCiAgICAgICAgIC8vIFRodW5rIGdlbmVyYXRvcnMuCisgICAgICAg
IHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHByb2xvZ3VlR2Vu
ZXJhdG9yMChWTSYpOworICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiBwcm9sb2d1ZUdlbmVyYXRvcjEoVk0mKTsKKyAgICAgICAgc3RhdGljIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gcHJvbG9ndWVHZW5lcmF0b3IyKFZNJik7
CisgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHBy
b2xvZ3VlR2VuZXJhdG9yMyhWTSYpOworICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiBwcm9sb2d1ZUdlbmVyYXRvcjQoVk0mKTsKKyAgICAgICAgc3Rh
dGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gcHJvbG9ndWVHZW5lcmF0
b3I1KFZNJik7CisgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+IHByb2xvZ3VlR2VuZXJhdG9yNihWTSYpOworICAgICAgICBzdGF0aWMgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBwcm9sb2d1ZUdlbmVyYXRvcjcoVk0mKTsKKyAg
ICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBwcm9sb2d1ZUdlbmVy
YXRvcihWTSYsIGJvb2wgZG9lc1Byb2ZpbGluZywgYm9vbCBpc0NvbnN0cnVjdG9yLCBib29sIGhh
c0h1Z2VGcmFtZSwgY29uc3QgY2hhciogbmFtZSk7CisKKyAgICAgICAgc3RhdGljIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gYXJpdHlGaXh1cF9wcm9sb2d1ZUdlbmVyYXRv
cjAoVk0mKTsKKyAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gYXJpdHlGaXh1cF9wcm9sb2d1ZUdlbmVyYXRvcjEoVk0mKTsKKyAgICAgICAgc3RhdGlj
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gYXJpdHlGaXh1cF9wcm9sb2d1
ZUdlbmVyYXRvcjIoVk0mKTsKKyAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gYXJpdHlGaXh1cF9wcm9sb2d1ZUdlbmVyYXRvcjMoVk0mKTsKKyAgICAg
ICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gYXJpdHlGaXh1
cF9wcm9sb2d1ZUdlbmVyYXRvcjQoVk0mKTsKKyAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRUaHVua1B0clRhZz4gYXJpdHlGaXh1cF9wcm9sb2d1ZUdlbmVyYXRvcjUoVk0m
KTsKKyAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
YXJpdHlGaXh1cF9wcm9sb2d1ZUdlbmVyYXRvcjYoVk0mKTsKKyAgICAgICAgc3RhdGljIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gYXJpdHlGaXh1cF9wcm9sb2d1ZUdlbmVy
YXRvcjcoVk0mKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiBhcml0eUZpeHVwUHJvbG9ndWVHZW5lcmF0b3IoVk0mLCBib29sIGlzQ29uc3RydWN0b3IsIFRo
dW5rR2VuZXJhdG9yIG5vcm1hbFByb2xvZ3VlR2VuZXJhdG9yLCBjb25zdCBjaGFyKiBuYW1lKTsK
KwogICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBz
bG93X29wX2RlbF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvcihWTSYpOwogICAgICAgICBzdGF0
aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBzbG93X29wX2RlbF9ieV92
YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3IoVk0mKTsKICAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gc2xvd19vcF9nZXRfYnlfaWRfcHJlcGFyZUNhbGxH
ZW5lcmF0b3IoVk0mKTsKQEAgLTgwMiw3ICs4MjYsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHNsb3dfb3Bf
cmVzb2x2ZV9zY29wZUdlbmVyYXRvcihWTSYpOwogCiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9wX2NoZWNrX3RyYXBzX2hhbmRsZXJHZW5lcmF0
b3IoVk0mKTsKLSAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gb3BfZW50ZXJfaGFuZGxlckdlbmVyYXRvcihWTSYpOworCisgICAgICAgIHN0YXRpYyBN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9wX2VudGVyX2NhbkJlT3B0aW1p
emVkX0dlbmVyYXRvcihWTSYpOworICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFRodW5rUHRyVGFnPiBvcF9lbnRlcl9jYW5ub3RCZU9wdGltaXplZF9HZW5lcmF0b3IoVk0m
KTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvcF9lbnRl
cl9HZW5lcmF0b3IoVk0mLCBib29sIGNhbkJlT3B0aW1pemVkLCBjb25zdCBjaGFyKiB0aHVua05h
bWUpOworCisjaWYgRU5BQkxFKERGR19KSVQpCisgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9wX2xvb3BfaGludF9HZW5lcmF0b3IoVk0mKTsKKyNl
bmRpZgogICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiBvcF9yZXRfaGFuZGxlckdlbmVyYXRvcihWTSYpOwogICAgICAgICBzdGF0aWMgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvcF90aHJvd19oYW5kbGVyR2VuZXJhdG9yKFZN
Jik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCShyZXZpc2lv
biAyNzgyMDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAkod29y
a2luZyBjb3B5KQpAQCAtOTEsNyArOTEsNiBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0
TG9hZENoYXJhY3RlCiAKIEFMV0FZU19JTkxJTkUgSklUOjpDYWxsIEpJVDo6ZW1pdE5ha2VkTmVh
ckNhbGwoQ29kZVB0cjxOb1B0clRhZz4gdGFyZ2V0KQogewotICAgIEFTU0VSVChtX2J5dGVjb2Rl
SW5kZXgpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9j
b2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0LgogICAg
IENhbGwgbmFrZWRDYWxsID0gbmVhckNhbGwoKTsKICAgICBtX25lYXJDYWxscy5hcHBlbmQoTmVh
ckNhbGxSZWNvcmQobmFrZWRDYWxsLCBGdW5jdGlvblB0cjxKU0ludGVybmFsUHRyVGFnPih0YXJn
ZXQucmV0YWdnZWQ8SlNJbnRlcm5hbFB0clRhZz4oKSkpKTsKICAgICByZXR1cm4gbmFrZWRDYWxs
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCShyZXZpc2lv
biAyNzgyMDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zNzYsNyArMzc2LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiBKSQogICAgIEpJVCBqaXQodm0pOwogCiAgICAgaml0LmNoZWNrU3RhY2tQ
b2ludGVyQWxpZ25tZW50KCk7Ci0gICAgaml0LmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXNGb3IoJlJl
Z2lzdGVyQXRPZmZzZXRMaXN0OjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsK
KyAgICBqaXQuZW1pdFJlc3RvcmVDYWxsZWVTYXZlc0ZvckJhc2VsaW5lSklUKCk7CiAgICAgaml0
LmVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CiAgICAgaml0LnJldCgpOwogCkBAIC0xMTg2LDEwMyAr
MTE4NiwxMTUgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW50ZXIoY29uc3QgSW5zdHJ1Y3RpbwogICAg
IGVtaXRFbnRlck9wdGltaXphdGlvbkNoZWNrKCk7CiAjZWxzZQogICAgIEFTU0VSVChtX2J5dGVj
b2RlSW5kZXgub2Zmc2V0KCkgPT0gMCk7Ci0gICAgY29uc3RleHByIEdQUlJlZyBsb2NhbHNUb0lu
aXRHUFIgPSBhcmd1bWVudEdQUjA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBjYW5CZU9wdGltaXpl
ZEdQUiA9IGFyZ3VtZW50R1BSNDsKLQogICAgIHVuc2lnbmVkIGxvY2Fsc1RvSW5pdCA9IGNvdW50
IC0gQ29kZUJsb2NrOjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0
ZXJzKCk7CiAgICAgUkVMRUFTRV9BU1NFUlQobG9jYWxzVG9Jbml0IDwgY291bnQpOwotICAgIG1v
dmUoVHJ1c3RlZEltbTMyKGxvY2Fsc1RvSW5pdCAqIHNpemVvZihSZWdpc3RlcikpLCBsb2NhbHNU
b0luaXRHUFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKGNhbkJlT3B0aW1pemVkKCkpLCBjYW5C
ZU9wdGltaXplZEdQUik7Ci0gICAgZW1pdE5ha2VkTmVhckNhbGwodm0oKS5nZXRDVElTdHViKG9w
X2VudGVyX2hhbmRsZXJHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisgICAg
VGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yID0gY2FuQmVPcHRpbWl6ZWQoKSA/IG9wX2VudGVyX2Nh
bkJlT3B0aW1pemVkX0dlbmVyYXRvciA6IG9wX2VudGVyX2Nhbm5vdEJlT3B0aW1pemVkX0dlbmVy
YXRvcjsKKyAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bSgpLmdldENUSVN0dWIoZ2VuZXJhdG9yKS5y
ZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhV
TktTKQogfQogCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi1NYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6b3BfZW50ZXJfaGFuZGxlckdlbmVyYXRvcihWTSYg
dm0pCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6b3BfZW50ZXJf
R2VuZXJhdG9yKFZNJiB2bSwgYm9vbCBjYW5CZU9wdGltaXplZCwgY29uc3QgY2hhciogdGh1bmtO
YW1lKQogewotICAgIEpJVCBqaXQodm0pOwotCiAjaWYgQ1BVKFg4Nl82NCkKLSAgICBqaXQucHVz
aChYODZSZWdpc3RlcnM6OmVicCk7CisgICAgcHVzaChYODZSZWdpc3RlcnM6OmVicCk7CiAjZWxp
ZiBDUFUoQVJNNjQpCi0gICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKLSAgICBqaXQucHVzaFBh
aXIoZnJhbWVQb2ludGVyUmVnaXN0ZXIsIGxpbmtSZWdpc3Rlcik7CisgICAgdGFnUmV0dXJuQWRk
cmVzcygpOworICAgIHB1c2hQYWlyKGZyYW1lUG9pbnRlclJlZ2lzdGVyLCBsaW5rUmVnaXN0ZXIp
OwogI2VuZGlmCiAgICAgLy8gb3BfZW50ZXIgaXMgYWx3YXlzIGF0IGJ5dGVjb2RlT2Zmc2V0IDAu
Ci0gICAgaml0LnN0b3JlMzIoVHJ1c3RlZEltbTMyKDApLCB0YWdGb3IoQ2FsbEZyYW1lU2xvdDo6
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKTsKKyAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMigw
KSwgdGFnRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSk7CiAK
ICAgICBjb25zdGV4cHIgR1BSUmVnIGxvY2Fsc1RvSW5pdEdQUiA9IGFyZ3VtZW50R1BSMDsKICAg
ICBjb25zdGV4cHIgR1BSUmVnIGl0ZXJhdG9yR1BSID0gYXJndW1lbnRHUFIxOwogICAgIGNvbnN0
ZXhwciBHUFJSZWcgZW5kR1BSID0gYXJndW1lbnRHUFIyOwogICAgIGNvbnN0ZXhwciBHUFJSZWcg
dW5kZWZpbmVkR1BSID0gYXJndW1lbnRHUFIzOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgY2FuQmVP
cHRpbWl6ZWRHUFIgPSBhcmd1bWVudEdQUjQ7CisgICAgY29uc3RleHByIEdQUlJlZyBjb2RlQmxv
Y2tHUFIgPSBhcmd1bWVudEdQUjQ7CisKKyAgICBjb25zdGV4cHIgaW50IHZpcnR1YWxSZWdpc3Rl
clNpemVTaGlmdCA9IDM7CisgICAgc3RhdGljX2Fzc2VydCgoMSA8PCB2aXJ0dWFsUmVnaXN0ZXJT
aXplU2hpZnQpID09IHNpemVvZihSZWdpc3RlcikpOworCisgICAgbG9hZFB0cihhZGRyZXNzRm9y
KENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIGNvZGVCbG9ja0dQUik7CisgICAgbG9hZDMyKEFk
ZHJlc3MoY29kZUJsb2NrR1BSLCBDb2RlQmxvY2s6Om9mZnNldE9mTnVtVmFycygpKSwgbG9jYWxz
VG9Jbml0R1BSKTsKKyAgICBzdWIzMihUcnVzdGVkSW1tMzIoQ29kZUJsb2NrOjpsbGludEJhc2Vs
aW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCkpLCBsb2NhbHNUb0luaXRHUFIp
OworICAgIGxzaGlmdDMyKFRydXN0ZWRJbW0zMih2aXJ0dWFsUmVnaXN0ZXJTaXplU2hpZnQpLCBs
b2NhbHNUb0luaXRHUFIpOwogCiAgICAgc2l6ZV90IHN0YXJ0TG9jYWwgPSBDb2RlQmxvY2s6Omxs
aW50QmFzZWxpbmVDYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKTsKICAgICBpbnQg
c3RhcnRPZmZzZXQgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChzdGFydExvY2FsKS5vZmZzZXQo
KTsKLSAgICBqaXQubW92ZShUcnVzdGVkSW1tNjQoc3RhcnRPZmZzZXQgKiBzaXplb2YoUmVnaXN0
ZXIpKSwgaXRlcmF0b3JHUFIpOwotICAgIGppdC5zdWI2NChpdGVyYXRvckdQUiwgbG9jYWxzVG9J
bml0R1BSLCBlbmRHUFIpOworICAgIG1vdmUoVHJ1c3RlZEltbTY0KHN0YXJ0T2Zmc2V0ICogc2l6
ZW9mKFJlZ2lzdGVyKSksIGl0ZXJhdG9yR1BSKTsKKyAgICBzdWI2NChpdGVyYXRvckdQUiwgbG9j
YWxzVG9Jbml0R1BSLCBlbmRHUFIpOwogCi0gICAgaml0Lm1vdmUoVHJ1c3RlZEltbTY0KEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKSksIHVuZGVmaW5lZEdQUik7Ci0gICAgYXV0byBpbml0
TG9vcCA9IGppdC5sYWJlbCgpOwotICAgIEp1bXAgaW5pdERvbmUgPSBqaXQuYnJhbmNoMzIoTGVz
c1RoYW5PckVxdWFsLCBpdGVyYXRvckdQUiwgZW5kR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW02
NChKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSkpLCB1bmRlZmluZWRHUFIpOworICAgIGF1
dG8gaW5pdExvb3AgPSBsYWJlbCgpOworICAgIEp1bXAgaW5pdERvbmUgPSBicmFuY2gzMihMZXNz
VGhhbk9yRXF1YWwsIGl0ZXJhdG9yR1BSLCBlbmRHUFIpOwogICAgIHsKLSAgICAgICAgaml0LnN0
b3JlNjQodW5kZWZpbmVkR1BSLCBCYXNlSW5kZXgoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIs
IGl0ZXJhdG9yR1BSLCBUaW1lc09uZSkpOwotICAgICAgICBqaXQuc3ViNjQoVHJ1c3RlZEltbTMy
KHNpemVvZihSZWdpc3RlcikpLCBpdGVyYXRvckdQUik7Ci0gICAgICAgIGppdC5qdW1wKGluaXRM
b29wKTsKKyAgICAgICAgc3RvcmU2NCh1bmRlZmluZWRHUFIsIEJhc2VJbmRleChHUFJJbmZvOjpj
YWxsRnJhbWVSZWdpc3RlciwgaXRlcmF0b3JHUFIsIFRpbWVzT25lKSk7CisgICAgICAgIHN1YjY0
KFRydXN0ZWRJbW0zMihzaXplb2YoUmVnaXN0ZXIpKSwgaXRlcmF0b3JHUFIpOworICAgICAgICBq
dW1wKGluaXRMb29wKTsKICAgICB9Ci0gICAgaW5pdERvbmUubGluaygmaml0KTsKKyAgICBpbml0
RG9uZS5saW5rKHRoaXMpOwogCi0gICAgLy8gZW1pdFdyaXRlQmFycmllcihtX2NvZGVCbG9jayku
Ci0gICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCBh
cmd1bWVudEdQUjEpOwotICAgIEp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9IGppdC5i
YXJyaWVyQnJhbmNoKHZtLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CisgICAgLy8gSW1w
bGVtZW50aW5nIGVtaXRXcml0ZUJhcnJpZXIobV9jb2RlQmxvY2spLgorICAgIEp1bXAgb3duZXJJ
c1JlbWVtYmVyZWRPckluRWRlbiA9IGJhcnJpZXJCcmFuY2godm0sIGNvZGVCbG9ja0dQUiwgYXJn
dW1lbnRHUFIyKTsKIAotICAgIGppdC5tb3ZlKGNhbkJlT3B0aW1pemVkR1BSLCBHUFJJbmZvOjpu
dW1iZXJUYWdSZWdpc3Rlcik7IC8vIHNhdmUuCi0gICAgaml0LnNldHVwQXJndW1lbnRzPGRlY2x0
eXBlKG9wZXJhdGlvbldyaXRlQmFycmllclNsb3dQYXRoKT4oJnZtLCBhcmd1bWVudEdQUjEpOwot
ICAgIGppdC5wcmVwYXJlQ2FsbE9wZXJhdGlvbih2bSk7Ci0gICAgQ2FsbCBvcGVyYXRpb25Xcml0
ZUJhcnJpZXJDYWxsID0gaml0LmNhbGwoT3BlcmF0aW9uUHRyVGFnKTsKKyAgICBzZXR1cEFyZ3Vt
ZW50czxkZWNsdHlwZShvcGVyYXRpb25Xcml0ZUJhcnJpZXJTbG93UGF0aCk+KCZ2bSwgY29kZUJs
b2NrR1BSKTsKKyAgICBwcmVwYXJlQ2FsbE9wZXJhdGlvbih2bSk7CisgICAgQ2FsbCBvcGVyYXRp
b25Xcml0ZUJhcnJpZXJDYWxsID0gY2FsbChPcGVyYXRpb25QdHJUYWcpOworCisgICAgaWYgKGNh
bkJlT3B0aW1pemVkKQorICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6
Y29kZUJsb2NrKSwgY29kZUJsb2NrR1BSKTsKIAotICAgIGppdC5tb3ZlKEdQUkluZm86Om51bWJl
clRhZ1JlZ2lzdGVyLCBjYW5CZU9wdGltaXplZEdQUik7IC8vIHJlc3RvcmUuCi0gICAgaml0Lm1v
dmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6Ok51bWJlclRhZyksIEdQUkluZm86Om51bWJlclRhZ1Jl
Z2lzdGVyKTsKLSAgICBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuLmxpbmsoJmppdCk7CisgICAg
b3duZXJJc1JlbWVtYmVyZWRPckluRWRlbi5saW5rKHRoaXMpOwogCiAjaWYgRU5BQkxFKERGR19K
SVQpCisgICAgLy8gSW1wbGVtZW50aW5nIGVtaXRFbnRlck9wdGltaXphdGlvbkNoZWNrKCkuCiAg
ICAgQ2FsbCBvcGVyYXRpb25PcHRpbWl6ZUNhbGw7Ci0gICAgaWYgKE9wdGlvbnM6OnVzZURGR0pJ
VCgpKSB7Ci0gICAgICAgIC8vIGVtaXRFbnRlck9wdGltaXphdGlvbkNoZWNrKCkuCisgICAgaWYg
KGNhbkJlT3B0aW1pemVkKSB7CiAgICAgICAgIEp1bXBMaXN0IHNraXBPcHRpbWl6ZTsKIAotICAg
ICAgICBza2lwT3B0aW1pemUuYXBwZW5kKGppdC5icmFuY2hUZXN0MzIoWmVybywgY2FuQmVPcHRp
bWl6ZWRHUFIpKTsKLQotICAgICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNs
b3Q6OmNvZGVCbG9jayksIGFyZ3VtZW50R1BSMSk7Ci0gICAgICAgIHNraXBPcHRpbWl6ZS5hcHBl
bmQoaml0LmJyYW5jaEFkZDMyKFNpZ25lZCwgVHJ1c3RlZEltbTMyKE9wdGlvbnM6OmV4ZWN1dGlv
bkNvdW50ZXJJbmNyZW1lbnRGb3JFbnRyeSgpKSwgQWRkcmVzcyhhcmd1bWVudEdQUjEsIENvZGVC
bG9jazo6b2Zmc2V0T2ZKSVRFeGVjdXRlQ291bnRlcigpKSkpOworICAgICAgICBza2lwT3B0aW1p
emUuYXBwZW5kKGJyYW5jaEFkZDMyKFNpZ25lZCwgVHJ1c3RlZEltbTMyKE9wdGlvbnM6OmV4ZWN1
dGlvbkNvdW50ZXJJbmNyZW1lbnRGb3JFbnRyeSgpKSwgQWRkcmVzcyhjb2RlQmxvY2tHUFIsIENv
ZGVCbG9jazo6b2Zmc2V0T2ZKSVRFeGVjdXRlQ291bnRlcigpKSkpOwogCi0gICAgICAgIGppdC5j
b3B5TExJbnRCYXNlbGluZUNhbGxlZVNhdmVzRnJvbUZyYW1lT3JSZWdpc3RlclRvRW50cnlGcmFt
ZUNhbGxlZVNhdmVzQnVmZmVyKHZtLnRvcEVudHJ5RnJhbWUpOworICAgICAgICBjb3B5TExJbnRC
YXNlbGluZUNhbGxlZVNhdmVzRnJvbUZyYW1lT3JSZWdpc3RlclRvRW50cnlGcmFtZUNhbGxlZVNh
dmVzQnVmZmVyKHZtLnRvcEVudHJ5RnJhbWUpOwogCi0gICAgICAgIGppdC5zZXR1cEFyZ3VtZW50
czxkZWNsdHlwZShvcGVyYXRpb25PcHRpbWl6ZSk+KCZ2bSwgVHJ1c3RlZEltbTMyKDApKTsKLSAg
ICAgICAgaml0LnByZXBhcmVDYWxsT3BlcmF0aW9uKHZtKTsKLSAgICAgICAgb3BlcmF0aW9uT3B0
aW1pemVDYWxsID0gaml0LmNhbGwoT3BlcmF0aW9uUHRyVGFnKTsKKyAgICAgICAgc2V0dXBBcmd1
bWVudHM8ZGVjbHR5cGUob3BlcmF0aW9uT3B0aW1pemUpPigmdm0sIFRydXN0ZWRJbW0zMigwKSk7
CisgICAgICAgIHByZXBhcmVDYWxsT3BlcmF0aW9uKHZtKTsKKyAgICAgICAgb3BlcmF0aW9uT3B0
aW1pemVDYWxsID0gY2FsbChPcGVyYXRpb25QdHJUYWcpOwogCi0gICAgICAgIHNraXBPcHRpbWl6
ZS5hcHBlbmQoaml0LmJyYW5jaFRlc3RQdHIoWmVybywgcmV0dXJuVmFsdWVHUFIpKTsKLSAgICAg
ICAgaml0LmZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVy
KTsKKyAgICAgICAgc2tpcE9wdGltaXplLmFwcGVuZChicmFuY2hUZXN0UHRyKFplcm8sIHJldHVy
blZhbHVlR1BSKSk7CisgICAgICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEdQUkluZm86OmNh
bGxGcmFtZVJlZ2lzdGVyKTsKIAotICAgICAgICBza2lwT3B0aW1pemUubGluaygmaml0KTsKKyAg
ICAgICAgc2tpcE9wdGltaXplLmxpbmsodGhpcyk7CiAgICAgfQogI2VuZGlmIC8vIEVOQUJMRShE
RkdfSklUKQogCiAjaWYgQ1BVKFg4Nl82NCkKLSAgICBqaXQucG9wKFg4NlJlZ2lzdGVyczo6ZWJw
KTsKKyAgICBwb3AoWDg2UmVnaXN0ZXJzOjplYnApOwogI2VsaWYgQ1BVKEFSTTY0KQotICAgIGpp
dC5wb3BQYWlyKGZyYW1lUG9pbnRlclJlZ2lzdGVyLCBsaW5rUmVnaXN0ZXIpOworICAgIHBvcFBh
aXIoZnJhbWVQb2ludGVyUmVnaXN0ZXIsIGxpbmtSZWdpc3Rlcik7CiAjZW5kaWYKLSAgICBqaXQu
cmV0KCk7CisgICAgcmV0KCk7CiAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xP
QkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpFeHRyYUNUSVRodW5rKTsKKyAgICBM
aW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp0aGlzLCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6
OlByb2ZpbGU6OkV4dHJhQ1RJVGh1bmspOwogICAgIHBhdGNoQnVmZmVyLmxpbmsob3BlcmF0aW9u
V3JpdGVCYXJyaWVyQ2FsbCwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25X
cml0ZUJhcnJpZXJTbG93UGF0aCkpOwogI2lmIEVOQUJMRShERkdfSklUKQotICAgIGlmIChPcHRp
b25zOjp1c2VERkdKSVQoKSkKKyAgICBpZiAoY2FuQmVPcHRpbWl6ZWQpCiAgICAgICAgIHBhdGNo
QnVmZmVyLmxpbmsob3BlcmF0aW9uT3B0aW1pemVDYWxsLCBGdW5jdGlvblB0cjxPcGVyYXRpb25Q
dHJUYWc+KG9wZXJhdGlvbk9wdGltaXplKSk7CiAjZW5kaWYKLSAgICByZXR1cm4gRklOQUxJWkVf
Q09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsICJCYXNlbGluZTogb3BfZW50ZXJfaGFu
ZGxlciIpOworICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0
clRhZywgdGh1bmtOYW1lKTsKK30KKworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBKSVQ6Om9wX2VudGVyX2NhbkJlT3B0aW1pemVkX0dlbmVyYXRvcihWTSYgdm0pCit7Cisg
ICAgSklUIGppdCh2bSk7CisgICAgY29uc3RleHByIGJvb2wgY2FuQmVPcHRpbWl6ZWQgPSB0cnVl
OworICAgIHJldHVybiBqaXQub3BfZW50ZXJfR2VuZXJhdG9yKHZtLCBjYW5CZU9wdGltaXplZCwg
IkJhc2VsaW5lOiBvcF9lbnRlcl9jYW5CZU9wdGltaXplZCIpOworfQorCitNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6b3BfZW50ZXJfY2Fubm90QmVPcHRpbWl6ZWRf
R2VuZXJhdG9yKFZNJiB2bSkKK3sKKyAgICBKSVQgaml0KHZtKTsKKyAgICBjb25zdGV4cHIgYm9v
bCBjYW5CZU9wdGltaXplZCA9IGZhbHNlOworICAgIHJldHVybiBqaXQub3BfZW50ZXJfR2VuZXJh
dG9yKHZtLCBjYW5CZU9wdGltaXplZCwgIkJhc2VsaW5lOiBvcF9lbnRlcl9jYW5ub3RCZU9wdGlt
aXplZCIpOwogfQogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCkBAIC0xNDE4
LDkgKzE0MzAsMTAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKAog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0
aW9uKQogeworICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAg
ICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6cmV0dXJuRWFybHlGcm9tSW5maW5pdGVMb29wc0ZvckZ1
enppbmcoKSAmJiBtX2NvZGVCbG9jay0+bG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFy
bHlSZXR1cm4oKSkpIHsKLSAgICAgICAgdWludDY0X3QqIHB0ciA9IHZtKCkuZ2V0TG9vcEhpbnRF
eGVjdXRpb25Db3VudGVyKGluc3RydWN0aW9uKTsKKyAgICAgICAgdWludDY0X3QqIHB0ciA9IHZt
LmdldExvb3BIaW50RXhlY3V0aW9uQ291bnRlcihpbnN0cnVjdGlvbik7CiAgICAgICAgIGxvYWQ2
NChwdHIsIHJlZ1QwKTsKICAgICAgICAgYXV0byBza2lwRWFybHlSZXR1cm4gPSBicmFuY2g2NChC
ZWxvdywgcmVnVDAsIFRydXN0ZWRJbW02NChPcHRpb25zOjplYXJseVJldHVybkZyb21JbmZpbml0
ZUxvb3BzTGltaXQoKSkpOwogCkBAIC0xNDM2LDEzICsxNDQ5LDI3IEBAIHZvaWQgSklUOjplbWl0
X29wX2xvb3BfaGludChjb25zdCBJbnN0cnUKICAgICB9CiAjZW5kaWYKIAotICAgIC8vIEVtaXQg
dGhlIEpJVCBvcHRpbWl6YXRpb24gY2hlY2s6IAorI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5L
UykKKyAgICAvLyBFbWl0IHRoZSBKSVQgb3B0aW1pemF0aW9uIGNoZWNrOgogICAgIGlmIChjYW5C
ZU9wdGltaXplZCgpKSB7CiAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaEFkZDMyKFBvc2l0aXZl
T3JaZXJvLCBUcnVzdGVkSW1tMzIoT3B0aW9uczo6ZXhlY3V0aW9uQ291bnRlckluY3JlbWVudEZv
ckxvb3AoKSksCiAgICAgICAgICAgICBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmFkZHJl
c3NPZkpJVEV4ZWN1dGVDb3VudGVyKCkpKSk7CiAgICAgfQorI2Vsc2UKKyAgICBpZiAoY2FuQmVP
cHRpbWl6ZWQoKSkgeworICAgICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNv
ZGVJbmRleC5vZmZzZXQoKTsKKyAgICAgICAgQVNTRVJUKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVP
ZmZzZXQpID09IG1fYnl0ZWNvZGVJbmRleCk7CisgICAgICAgIEFTU0VSVChtX2NvZGVCbG9jay0+
aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgpID09IGluc3RydWN0aW9uKTsKKworICAgICAg
ICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDc7CisKKyAgICAgICAg
bW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7Cisg
ICAgICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIob3BfbG9vcF9oaW50X0dlbmVy
YXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKKyAgICB9CisjZW5kaWYKIH0KIAorI2lm
ICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIHZvaWQgSklUOjplbWl0U2xvd19vcF9sb29wX2hp
bnQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKICNpZiBFTkFCTEUoREZHX0pJVCkKQEAgLTE0NzAs
NiArMTQ5Nyw3NCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbG9vcF9oaW50KGNvbnN0IEluCiAj
ZW5kaWYKIH0KIAorI2Vsc2UgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCisKKyNpZiBFTkFC
TEUoREZHX0pJVCkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpv
cF9sb29wX2hpbnRfR2VuZXJhdG9yKFZNJiB2bSkKK3sKKyAgICAvLyBUaGUgdGh1bmsgZ2VuZXJh
dGVkIGJ5IHRoaXMgZnVuY3Rpb24gY2FuIG9ubHkgd29yayB3aXRoIHRoZSBMTEludCAvIEJhc2Vs
aW5lIEpJVCBiZWNhdXNlCisgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJp
Z2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9j
aygpLgorICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90
aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKKyAgICAvLyBDYWxsRnJhbWU6
OmNvZGVCbG9jaygpLgorICAgIEpJVCBqaXQodm0pOworCisgICAgaml0LnRhZ1JldHVybkFkZHJl
c3MoKTsKKworICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNzsg
Ly8gaW5jb21pbmcuCisgICAgY29uc3RleHByIEdQUlJlZyBjb2RlQmxvY2tHUFIgPSByZWdUNjsK
KyAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIGNv
ZGVCbG9ja0dQUik7CisKKyAgICAvLyBFbWl0IHRoZSBKSVQgb3B0aW1pemF0aW9uIGNoZWNrOgor
ICAgIEp1bXAgbmVlZE9wdGltaXphdGlvbkNoZWNrID0gaml0LmJyYW5jaEFkZDMyKFBvc2l0aXZl
T3JaZXJvLCBUcnVzdGVkSW1tMzIoT3B0aW9uczo6ZXhlY3V0aW9uQ291bnRlckluY3JlbWVudEZv
ckxvb3AoKSksCisgICAgICAgICAgICBBZGRyZXNzKGNvZGVCbG9ja0dQUiwgQ29kZUJsb2NrOjpv
ZmZzZXRPZkpJVEV4ZWN1dGVDb3VudGVyKCkpKTsKKyAgICBqaXQucmV0KCk7CisKKyAgICBuZWVk
T3B0aW1pemF0aW9uQ2hlY2subGluaygmaml0KTsKKyNpZiBDUFUoWDg2XzY0KQorICAgIGppdC5w
dXNoKGZyYW1lUG9pbnRlclJlZ2lzdGVyKTsKKyNlbGlmIENQVShBUk02NCkKKyAgICBqaXQucHVz
aFBhaXIoZnJhbWVQb2ludGVyUmVnaXN0ZXIsIGxpbmtSZWdpc3Rlcik7CisjZW5kaWYKKworICAg
IGF1dG8gdXNlZFJlZ2lzdGVycyA9IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3Rl
cnMoKTsKKyAgICB1c2VkUmVnaXN0ZXJzLmFkZChieXRlY29kZU9mZnNldEdQUik7CisgICAgaml0
LmNvcHlMTEludEJhc2VsaW5lQ2FsbGVlU2F2ZXNGcm9tRnJhbWVPclJlZ2lzdGVyVG9FbnRyeUZy
YW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0udG9wRW50cnlGcmFtZSwgdXNlZFJlZ2lzdGVycyk7CisK
KyAgICBqaXQuc3RvcmUzMihieXRlY29kZU9mZnNldEdQUiwgQ0NhbGxIZWxwZXJzOjp0YWdGb3Io
Q2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKTsKKyAgICBqaXQubHNo
aWZ0MzIoVHJ1c3RlZEltbTMyKEJ5dGVjb2RlSW5kZXg6OmNoZWNrcG9pbnRTaGlmdCksIGJ5dGVj
b2RlT2Zmc2V0R1BSKTsKKyAgICBqaXQuc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUob3BlcmF0aW9u
T3B0aW1pemUpPihUcnVzdGVkSW1tUHRyKCZ2bSksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKKyAgICBq
aXQucHJlcGFyZUNhbGxPcGVyYXRpb24odm0pOworICAgIENhbGwgb3BlcmF0aW9uQ2FsbCA9IGpp
dC5jYWxsKE9wZXJhdGlvblB0clRhZyk7CisgICAgSnVtcCBoYXNPcHRpbWl6ZWRFbnRyeSA9IGpp
dC5icmFuY2hUZXN0UHRyKE5vblplcm8sIHJldHVyblZhbHVlR1BSKTsKKworI2lmIENQVShYODZf
NjQpCisgICAgaml0LnBvcChmcmFtZVBvaW50ZXJSZWdpc3Rlcik7OworI2VsaWYgQ1BVKEFSTTY0
KQorICAgIGppdC5wb3BQYWlyKGZyYW1lUG9pbnRlclJlZ2lzdGVyLCBsaW5rUmVnaXN0ZXIpOwor
I2VuZGlmCisgICAgaml0LnJldCgpOworCisgICAgaGFzT3B0aW1pemVkRW50cnkubGluaygmaml0
KTsKKyNpZiBDUFUoWDg2XzY0KQorICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tMzIoMiAqIHNpemVvZihDUFVSZWdpc3RlcikpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7Cisj
ZWxpZiBDUFUoQVJNNjQpCisgICAgaml0LnBvcFBhaXIoZnJhbWVQb2ludGVyUmVnaXN0ZXIsIGxp
bmtSZWdpc3Rlcik7CisjZW5kaWYKKyAgICBpZiAoQVNTRVJUX0VOQUJMRUQpIHsKKyAgICAgICAg
SnVtcCBvayA9IGppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlLCByZXR1cm5WYWx1
ZUdQUiwgVHJ1c3RlZEltbVB0cihiaXR3aXNlX2Nhc3Q8dm9pZCo+KHN0YXRpY19jYXN0PGludHB0
cl90PigxMDAwKSkpKTsKKyAgICAgICAgaml0LmFib3J0V2l0aFJlYXNvbihKSVRVbnJlYXNvbmFi
bGVMb29wSGludEp1bXBUYXJnZXQpOworICAgICAgICBvay5saW5rKCZqaXQpOworICAgIH0KKwor
ICAgIGppdC5mYXJKdW1wKHJldHVyblZhbHVlR1BSLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rl
cik7CisKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBM
aW5rQnVmZmVyOjpQcm9maWxlOjpFeHRyYUNUSVRodW5rKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5r
KG9wZXJhdGlvbkNhbGwsIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uT3B0
aW1pemUpKTsKKyAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQ
dHJUYWcsICJCYXNlbGluZTogb3BfbG9vcF9oaW50Iik7Cit9CisjZW5kaWYgLy8gRU5BQkxFKERG
R19KSVQpCisjZW5kaWYgLy8gIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQorCiB2b2lkIEpJVDo6
ZW1pdF9vcF9jaGVja190cmFwcyhjb25zdCBJbnN0cnVjdGlvbiopCiB7CiAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoVGVzdDMyKE5vblplcm8sIEFic29sdXRlQWRkcmVzcyhtX3ZtLT50cmFwcygpLnRy
YXBCaXRzQWRkcmVzcygpKSwgVHJ1c3RlZEltbTMyKFZNVHJhcHM6OkFzeW5jRXZlbnRzKSkpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TbG93UGF0aENhbGwuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2xvd1BhdGhDYWxsLmNwcAkocmV2aXNp
b24gMjc4MjAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TbG93UGF0aENhbGwuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00NSw4ICs0NSw4IEBAIHZvaWQgSklUU2xvd1BhdGhDYWxsOjpj
YWxsKCkKICAgICBBU1NFUlQoQnl0ZWNvZGVJbmRleChieXRlY29kZU9mZnNldCkgPT0gbV9qaXQt
Pm1fYnl0ZWNvZGVJbmRleCk7CiAKICAgICBVTlVTRURfVkFSSUFCTEUobV9wYyk7Ci0gICAgY29u
c3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldFJlZyA9IEdQUkluZm86OmFyZ3VtZW50R1BSMTsK
LSAgICBtX2ppdC0+bW92ZShKSVQ6OlRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVj
b2RlT2Zmc2V0UmVnKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0g
R1BSSW5mbzo6YXJndW1lbnRHUFIxOworICAgIG1faml0LT5tb3ZlKEpJVDo6VHJ1c3RlZEltbTMy
KGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogICAgIG1faml0LT5lbWl0TmFr
ZWROZWFyQ2FsbCh2bS5qaXRTdHVicy0+Y3RpU2xvd1BhdGhGdW5jdGlvblN0dWIodm0sIG1fc2xv
d1BhdGhGdW5jdGlvbikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKIH0KIApAQCAtNTQsNyAr
NTQsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiB7CiAgICAg
Q0NhbGxIZWxwZXJzIGppdDsKIAotICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRS
ZWcgPSBKSVQ6OmFyZ3VtZW50R1BSMTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zm
c2V0R1BSID0gSklUOjphcmd1bWVudEdQUjE7CiAKICNpZiBDUFUoWDg2XzY0KQogICAgIGppdC5w
dXNoKFg4NlJlZ2lzdGVyczo6ZWJwKTsKQEAgLTYzLDE0ICs2MywxNCBAQCBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgaml0LnB1c2hQYWlyKENDYWxsSGVscGVy
czo6ZnJhbWVQb2ludGVyUmVnaXN0ZXIsIENDYWxsSGVscGVyczo6bGlua1JlZ2lzdGVyKTsKICNl
bmRpZgogCi0gICAgaml0LnN0b3JlMzIoYnl0ZWNvZGVPZmZzZXRSZWcsIENDYWxsSGVscGVyczo6
dGFnRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSk7CisgICAg
aml0LnN0b3JlMzIoYnl0ZWNvZGVPZmZzZXRHUFIsIENDYWxsSGVscGVyczo6dGFnRm9yKENhbGxG
cmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSk7CiAKICAgICBqaXQubG9hZFB0
cihDQ2FsbEhlbHBlcnM6OmFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgR1BS
SW5mbzo6YXJndW1lbnRHUFIwKTsKIAogICAgIGppdC5wcmVwYXJlQ2FsbE9wZXJhdGlvbih2bSk7
CiAKICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6YXJndW1l
bnRHUFIwLCBDb2RlQmxvY2s6Om9mZnNldE9mSW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcigpKSwgR1BS
SW5mbzo6YXJndW1lbnRHUFIwKTsKLSAgICBzdGF0aWNfYXNzZXJ0KEpJVDo6YXJndW1lbnRHUFIx
ID09IGJ5dGVjb2RlT2Zmc2V0UmVnKTsKKyAgICBzdGF0aWNfYXNzZXJ0KEpJVDo6YXJndW1lbnRH
UFIxID09IGJ5dGVjb2RlT2Zmc2V0R1BSKTsKICAgICBqaXQuYWRkUHRyKEdQUkluZm86OmFyZ3Vt
ZW50R1BSMCwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKICAgICBqaXQubW92ZShHUFJJbmZvOjpj
YWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAkocmV2aXNpb24gMjc4
MjAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC04MSwxMSArODEsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHJUYWc+IHBvCiB7CiAgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAotI2lmIENQVShYODZf
NjQpCi0gICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigyICogc2l6ZW9m
KENQVVJlZ2lzdGVyKSksIFg4NlJlZ2lzdGVyczo6ZXNwKTsKLSNlbGlmIENQVShBUk02NCkKLSAg
ICBqaXQucG9wUGFpcihDQ2FsbEhlbHBlcnM6OmZyYW1lUG9pbnRlclJlZ2lzdGVyLCBDQ2FsbEhl
bHBlcnM6OmxpbmtSZWdpc3Rlcik7Ci0jZW5kaWYKKyAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbTMyKDIgKiBzaXplb2YoQ1BVUmVnaXN0ZXIpKSwgQ0NhbGxIZWxwZXJzOjpz
dGFja1BvaW50ZXJSZWdpc3Rlcik7CiAKICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgY29udGludWF0
aW9uID0gaml0Lmp1bXAoKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
T3B0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
T3B0aW9ucy5jcHAJKHJldmlzaW9uIDI3ODIwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL09wdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NjgsNiArNTY4LDggQEAgdm9p
ZCBPcHRpb25zOjpyZWNvbXB1dGVEZXBlbmRlbnRPcHRpb25zKAogCiAgICAgaWYgKE9wdGlvbnM6
OnZlcmJvc2VWZXJpZnlHQygpKQogICAgICAgICBPcHRpb25zOjp2ZXJpZnlHQygpID0gdHJ1ZTsK
KworICAgIE9wdGlvbnM6OnVzZURvbGxhclZNKCkgPSB0cnVlOyAvLyBtbGFtIFRFU1QKIH0KIAog
aW5saW5lIHZvaWQqIE9wdGlvbnM6OmFkZHJlc3NPZk9wdGlvbihPcHRpb25zOjpJRCBpZCkKQEAg
LTYwNyw5ICs2MDksOSBAQCB2b2lkIE9wdGlvbnM6OmluaXRpYWxpemUoKQogICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlQoT3B0aW9uczo6YWRkcmVzc09mT3B0aW9uKGZvcmNlT1NSRXhpdFRvTExJ
bnRJRCkgPT0gICZPcHRpb25zOjpmb3JjZU9TUkV4aXRUb0xMSW50KCkpOwogICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlQoT3B0aW9uczo6YWRkcmVzc09mT3B0aW9uRGVmYXVsdChmb3JjZU9TUkV4
aXRUb0xMSW50SUQpID09ICAmT3B0aW9uczo6Zm9yY2VPU1JFeGl0VG9MTEludERlZmF1bHQoKSk7
CiAKLSNpZm5kZWYgTkRFQlVHCisvLyNpZm5kZWYgTkRFQlVHCiAgICAgICAgICAgICBDb25maWc6
OmVuYWJsZVJlc3RyaWN0ZWRPcHRpb25zKCk7Ci0jZW5kaWYKKy8vI2VuZGlmCiAgICAgICAgICAg
ICAvLyBJbml0aWFsaXplIGVhY2ggb2YgdGhlIG9wdGlvbnMgd2l0aCB0aGVpciBkZWZhdWx0IHZh
bHVlczoKICNkZWZpbmUgSU5JVF9PUFRJT04odHlwZV8sIG5hbWVfLCBkZWZhdWx0VmFsdWVfLCBh
dmFpbGFiaWxpdHlfLCBkZXNjcmlwdGlvbl8pIHsgXAogICAgICAgICAgICAgICAgIGF1dG8gdmFs
dWUgPSBkZWZhdWx0VmFsdWVfOyBcCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>430133</attachid>
            <date>2021-05-30 01:28:48 -0700</date>
            <delta_ts>2021-06-03 17:58:03 -0700</delta_ts>
            <desc>work in progress.</desc>
            <filename>wip-loop-hint+prologue+enter7.patch</filename>
            <type>text/plain</type>
            <size>44618</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjc4MjUxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU1IEBA
CisyMDIxLTA1LTMwICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBQ
dXQgdGhlIEJhc2VsaW5lIEpJVCBwcm9sb2d1ZSBhbmQgb3BfbG9vcF9oaW50IGNvZGUgaW4gSklU
IHRodW5rcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIyNjM3NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFRoZSBwcm9sb2d1ZSB1c2VzIDEgb2YgOCBwb3NzaWJsZSBzcGVjaWFsaXplZCB0aHVua3MgdG8g
cmVkdWNlIHRoZSBuZWVkIHRvIHBhc3MKKyAgICAgICAgYXJndW1lbnRzLiAgVGhlIG9ubHkgbmVl
ZGVkIGFyZ3VtZW50IGlzIHRoZSBjb2RlQmxvY2sgcG9pbnRlci4KKyAgICAgICAgVGhlcmUgYXJl
IGFsc28gOCBhbmFsb2dvdXMgYXJpdHkgZml4dXAgcHJvbG9ndWVzIHRoYXQgd29yayBzaW1pbGFy
bHkuCisKKyAgICAgICAgVGhlIG9wX2xvb3BfaGludCBvbmx5IHRha2VzIDEgYXJndW1lbnQ6IHRo
ZSBieXRlY29kZSBvZmZzZXQuCisKKyAgICAgICAgQWxzbyBvcHRpbWl6ZWQgb3BfZW50ZXIgYSBi
aXQgbW9yZSBieSBlbGltaW5hdGluZyB0aGUgbmVlZCB0byBwYXNzIGFueQorICAgICAgICBhcmd1
bWVudHMgdG8gdGhlIHRodW5rLiAgbG9jYWxzVG9Jbml0R1BSIGlzIG5vdyBjb21wdXRlZCBpbiB0
aGUgdGh1bmsuCisgICAgICAgIGNhbkJlT3B0aW1pemVkIGlzIG9idmlhdGVkIGJ5IHVzaW5nIHNw
ZWNpYWxpemVkIHRodW5rcy4KKworICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFS
TTY0Lmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6Om5lZ2F0ZTY0KToKKyAg
ICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaDoKKyAgICAgICAgKEpTQzo6
TWFjcm9Bc3NlbWJsZXJYODZfNjQ6Om5lZ2F0ZTY0KToKKyAgICAgICAgKiBieXRlY29kZS9Db2Rl
QmxvY2suaDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpvZmZzZXRPZk51bUNhbGxlZUxvY2Fs
cyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6b2Zmc2V0T2ZOdW1WYXJzKToKKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjpvZmZzZXRPZkFyZ3VtZW50VmFsdWVQcm9maWxlcyk6CisgICAgICAg
IChKU0M6OkNvZGVCbG9jazo6b2Zmc2V0T2ZTaG91bGRBbHdheXNCZUlubGluZWQpOgorICAgICAg
ICAoSlNDOjpDb2RlQmxvY2s6Om9mZnNldE9mVW5saW5rZWRDb2RlKToKKyAgICAgICAgKiBqaXQv
QXNzZW1ibHlIZWxwZXJzLmg6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6ZW1pdFNh
dmVDYWxsZWVTYXZlc0Zvcik6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6ZW1pdFNh
dmVDYWxsZWVTYXZlc0ZvckJhc2VsaW5lSklUKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxw
ZXJzOjplbWl0UmVzdG9yZUNhbGxlZVNhdmVzRm9yQmFzZWxpbmVKSVQpOgorICAgICAgICAqIGpp
dC9KSVQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKToK
KyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW5nKToKKyAg
ICAgICAgKEpTQzo6SklUOjpwcm9sb2d1ZUdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6
YXJpdHlGaXh1cFByb2xvZ3VlR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRl
Q29tcGlsZUV4Y2VwdGlvbkhhbmRsZXJzKToKKyAgICAgICAgKiBqaXQvSklULmg6CisgICAgICAg
ICogaml0L0pJVElubGluZXMuaDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0TmFrZWROZWFyQ2Fs
bCk6CisgICAgICAgICogaml0L0pJVE9wY29kZXMuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6Om9w
X3JldF9oYW5kbGVyR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2VudGVy
KToKKyAgICAgICAgKEpTQzo6SklUOjpvcF9lbnRlcl9HZW5lcmF0b3IpOgorICAgICAgICAoSlND
OjpKSVQ6Om9wX2VudGVyX2NhbkJlT3B0aW1pemVkX0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6
OkpJVDo6b3BfZW50ZXJfY2Fubm90QmVPcHRpbWl6ZWRfR2VuZXJhdG9yKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX2xvb3BfaGludCk6CisgICAgICAgIChKU0M6OkpJVDo6b3BfbG9vcF9o
aW50X0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6b3BfZW50ZXJfaGFuZGxlckdlbmVy
YXRvcik6IERlbGV0ZWQuCisgICAgICAgICogaml0L1RodW5rR2VuZXJhdG9ycy5jcHA6CisgICAg
ICAgIChKU0M6OnBvcFRodW5rU3RhY2tQcmVzZXJ2ZXNBbmRIYW5kbGVFeGNlcHRpb25HZW5lcmF0
b3IpOgorCiAyMDIxLTA1LTI5ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAg
ICAgICAgU3RvcCB1c2luZyBVbmNoZWNrZWRMb2NrIGluIEpTQzo6Vk1JbnNwZWN0b3IKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJs
ZXJBUk02NC5oCShyZXZpc2lvbiAyNzgyMDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaAkod29ya2luZyBjb3B5KQpAQCAtMjIzNiw2ICsy
MjM2LDEyIEBAIHB1YmxpYzoKICAgICAgICAgb3JEb3VibGUob3AxLCBvcDIsIGRlc3QpOwogICAg
IH0KIAorICAgIHZvaWQgbmVnYXRlNjQoUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAg
bm90NjQoZGVzdCk7CisgICAgICAgIGFkZDY0KFRydXN0ZWRJbW0zMigxKSwgZGVzdCk7CisgICAg
fQorCiAgICAgdm9pZCBuZWdhdGVEb3VibGUoRlBSZWdpc3RlcklEIHNyYywgRlBSZWdpc3RlcklE
IGRlc3QpCiAgICAgewogICAgICAgICBtX2Fzc2VtYmxlci5mbmVnPDY0PihkZXN0LCBzcmMpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82
NC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9B
c3NlbWJsZXJYODZfNjQuaAkocmV2aXNpb24gMjc4MjAzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oCSh3b3JraW5nIGNvcHkpCkBAIC05
MTgsNiArOTE4LDEyIEBAIHB1YmxpYzoKICAgICAgICAgbV9hc3NlbWJsZXIubm90cV9tKGRlc3Qu
b2Zmc2V0LCBkZXN0LmJhc2UsIGRlc3QuaW5kZXgsIGRlc3Quc2NhbGUpOwogICAgIH0KIAorICAg
IHZvaWQgbmVnYXRlNjQoUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbm90NjQoZGVz
dCk7CisgICAgICAgIGFkZDY0KFRydXN0ZWRJbW0zMigxKSwgZGVzdCk7CisgICAgfQorCiAgICAg
dm9pZCBsb2FkNjQoSW1wbGljaXRBZGRyZXNzIGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKICAg
ICB7CiAgICAgICAgIG1fYXNzZW1ibGVyLm1vdnFfbXIoYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3Mu
YmFzZSwgZGVzdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVC
bG9jay5oCShyZXZpc2lvbiAyNzgyMDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTE2OSw3ICsxNjksMTAgQEAgcHVibGlj
OgogICAgIHVuc2lnbmVkIG51bVRtcHMoKSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+
aGFzQ2hlY2twb2ludHMoKSAqIG1heE51bUNoZWNrcG9pbnRUbXBzOyB9CiAKICAgICB1bnNpZ25l
ZCogYWRkcmVzc09mTnVtUGFyYW1ldGVycygpIHsgcmV0dXJuICZtX251bVBhcmFtZXRlcnM7IH0K
KworICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZOdW1DYWxsZWVMb2NhbHMoKSB7IHJldHVy
biBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX251bUNhbGxlZUxvY2Fscyk7IH0KICAgICBz
dGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTnVtUGFyYW1ldGVycygpIHsgcmV0dXJuIE9CSkVDVF9P
RkZTRVRPRihDb2RlQmxvY2ssIG1fbnVtUGFyYW1ldGVycyk7IH0KKyAgICBzdGF0aWMgcHRyZGlm
Zl90IG9mZnNldE9mTnVtVmFycygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ss
IG1fbnVtVmFycyk7IH0KIAogICAgIENvZGVCbG9jayogYWx0ZXJuYXRpdmUoKSBjb25zdCB7IHJl
dHVybiBzdGF0aWNfY2FzdDxDb2RlQmxvY2sqPihtX2FsdGVybmF0aXZlLmdldCgpKTsgfQogICAg
IHZvaWQgc2V0QWx0ZXJuYXRpdmUoVk0mLCBDb2RlQmxvY2sqKTsKQEAgLTQ4Niw2ICs0ODksOCBA
QCBwdWJsaWM6CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCisgICAgc3RhdGljIHB0
cmRpZmZfdCBvZmZzZXRPZkFyZ3VtZW50VmFsdWVQcm9maWxlcygpIHsgcmV0dXJuIE9CSkVDVF9P
RkZTRVRPRihDb2RlQmxvY2ssIG1fYXJndW1lbnRWYWx1ZVByb2ZpbGVzKTsgfQorCiAgICAgVmFs
dWVQcm9maWxlJiB2YWx1ZVByb2ZpbGVGb3JCeXRlY29kZUluZGV4KEJ5dGVjb2RlSW5kZXgpOwog
ICAgIFNwZWN1bGF0ZWRUeXBlIHZhbHVlUHJvZmlsZVByZWRpY3Rpb25Gb3JCeXRlY29kZUluZGV4
KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIEJ5dGVjb2RlSW5kZXgpOwogCkBAIC04MTksNyAr
ODI0LDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIGJvb2wgd2FzQ29tcGlsZWRXaXRoRGVidWdn
aW5nT3Bjb2RlcygpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT53YXNDb21waWxlZFdp
dGhEZWJ1Z2dpbmdPcGNvZGVzKCk7IH0KLSAgICAKKwogICAgIC8vIFRoaXMgaXMgaW50ZW50aW9u
YWxseSBwdWJsaWM7IGl0J3MgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIGFueW9uZSBkb2luZyBhbnkK
ICAgICAvLyBvZiB0aGUgZm9sbG93aW5nIHRvIGhvbGQgdGhlIGxvY2s6CiAgICAgLy8KQEAgLTkw
Niw2ICs5MTEsOCBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTWV0
YWRhdGFUYWJsZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1fbWV0YWRh
dGEpOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkluc3RydWN0aW9uc1Jhd1BvaW50
ZXIoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2luc3RydWN0aW9uc1Jh
d1BvaW50ZXIpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlNob3VsZEFsd2F5c0Jl
SW5saW5lZCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1fc2hvdWxkQWx3
YXlzQmVJbmxpbmVkKTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZVbmxpbmtlZENv
ZGUoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX3VubGlua2VkQ29kZSk7
IH0KIAogICAgIGJvb2wgbG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFybHlSZXR1cm4o
KQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBl
cnMuaAkocmV2aXNpb24gMjc4MjAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3Nl
bWJseUhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMzI2LDYgKzMyNiwxMSBAQCBwdWJsaWM6
CiAgICAgICAgIEFTU0VSVChjb2RlQmxvY2spOwogCiAgICAgICAgIGNvbnN0IFJlZ2lzdGVyQXRP
ZmZzZXRMaXN0KiBjYWxsZWVTYXZlcyA9IGNvZGVCbG9jay0+Y2FsbGVlU2F2ZVJlZ2lzdGVycygp
OworICAgICAgICBlbWl0U2F2ZUNhbGxlZVNhdmVzRm9yKGNhbGxlZVNhdmVzKTsKKyAgICB9CisK
KyAgICB2b2lkIGVtaXRTYXZlQ2FsbGVlU2F2ZXNGb3IoY29uc3QgUmVnaXN0ZXJBdE9mZnNldExp
c3QqIGNhbGxlZVNhdmVzKQorICAgIHsKICAgICAgICAgUmVnaXN0ZXJTZXQgZG9udFNhdmVSZWdp
c3RlcnMgPSBSZWdpc3RlclNldChSZWdpc3RlclNldDo6c3RhY2tSZWdpc3RlcnMoKSwgUmVnaXN0
ZXJTZXQ6OmFsbEZQUnMoKSk7CiAgICAgICAgIHVuc2lnbmVkIHJlZ2lzdGVyQ291bnQgPSBjYWxs
ZWVTYXZlcy0+c2l6ZSgpOwogCkBAIC0zOTksNiArNDA0LDExIEBAIHB1YmxpYzoKICAgICAgICAg
ZW1pdFNhdmVDYWxsZWVTYXZlc0Zvcihjb2RlQmxvY2soKSk7CiAgICAgfQogCisgICAgdm9pZCBl
bWl0U2F2ZUNhbGxlZVNhdmVzRm9yQmFzZWxpbmVKSVQoKQorICAgIHsKKyAgICAgICAgZW1pdFNh
dmVDYWxsZWVTYXZlc0ZvcigmUmVnaXN0ZXJBdE9mZnNldExpc3Q6OmxsaW50QmFzZWxpbmVDYWxs
ZWVTYXZlUmVnaXN0ZXJzKCkpOworICAgIH0KKwogICAgIHZvaWQgZW1pdFNhdmVUaGVuTWF0ZXJp
YWxpemVUYWdSZWdpc3RlcnMoKQogICAgIHsKICNpZiBVU0UoSlNWQUxVRTY0KQpAQCAtNDE3LDYg
KzQyNywxMSBAQCBwdWJsaWM6CiAgICAgICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXNGb3IoY29k
ZUJsb2NrKCkpOwogICAgIH0KIAorICAgIHZvaWQgZW1pdFJlc3RvcmVDYWxsZWVTYXZlc0ZvckJh
c2VsaW5lSklUKCkKKyAgICB7CisgICAgICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXNGb3IoJlJl
Z2lzdGVyQXRPZmZzZXRMaXN0OjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsK
KyAgICB9CisKICAgICB2b2lkIGVtaXRSZXN0b3JlU2F2ZWRUYWdSZWdpc3RlcnMoKQogICAgIHsK
ICNpZiBVU0UoSlNWQUxVRTY0KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkocmV2
aXNpb24gMjc4MjAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC04Miw3ICs4Miw3IEBAIEpJVDo6fkpJVCgpCiB7CiB9CiAKLSNpZiBFTkFC
TEUoREZHX0pJVCkKKyNpZiBFTkFCTEUoREZHX0pJVCkgJiYgIUVOQUJMRShFWFRSQV9DVElfVEhV
TktTKQogdm9pZCBKSVQ6OmVtaXRFbnRlck9wdGltaXphdGlvbkNoZWNrKCkKIHsKICAgICBpZiAo
IWNhbkJlT3B0aW1pemVkKCkpCkBAIC0xMDAsNyArMTAwLDcgQEAgdm9pZCBKSVQ6OmVtaXRFbnRl
ck9wdGltaXphdGlvbkNoZWNrKCkKICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBHUFJJbmZv
OjpjYWxsRnJhbWVSZWdpc3Rlcik7CiAgICAgc2tpcE9wdGltaXplLmxpbmsodGhpcyk7CiB9Ci0j
ZW5kaWYKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkgJiYgIUVOQUJMRShFWFRSQV9DVElfVEhV
TktTKSgKIAogdm9pZCBKSVQ6OmVtaXROb3RpZnlXcml0ZShXYXRjaHBvaW50U2V0KiBzZXQpCiB7
CkBAIC01NzQsNyArNTc0LDkgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkK
ICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2puZXEpCiAgICAgICAgIERFRklORV9TTE9X
Q0FTRV9PUChvcF9qc3RyaWN0ZXEpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9qbnN0
cmljdGVxKQorI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICAgICAgREVGSU5FX1NM
T1dDQVNFX09QKG9wX2xvb3BfaGludCkKKyNlbmRpZgogICAgICAgICBERUZJTkVfU0xPV0NBU0Vf
T1Aob3BfY2hlY2tfdHJhcHMpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9tb2QpCiAg
ICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9tdWwpCkBAIC02NjAsNiArNjYyLDI3IEBAIHZv
aWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAjZW5kaWYKIH0KIAorI2RlZmluZSBG
T1JfRUFDSF9OT05fUFJPRklMSU5HX1BST0xPR1VFX0dFTkVSQVRPUih2KSBcCisgICAgdighZG9l
c1Byb2ZpbGluZywgIWlzQ29uc3RydWN0b3IsICFoYXNIdWdlRnJhbWUsIHByb2xvZ3VlR2VuZXJh
dG9yMCwgYXJpdHlGaXh1cF9wcm9sb2d1ZUdlbmVyYXRvcjApIFwKKyAgICB2KCFkb2VzUHJvZmls
aW5nLCAhaXNDb25zdHJ1Y3RvciwgIGhhc0h1Z2VGcmFtZSwgcHJvbG9ndWVHZW5lcmF0b3IxLCBh
cml0eUZpeHVwX3Byb2xvZ3VlR2VuZXJhdG9yMSkgXAorICAgIHYoIWRvZXNQcm9maWxpbmcsICBp
c0NvbnN0cnVjdG9yLCAhaGFzSHVnZUZyYW1lLCBwcm9sb2d1ZUdlbmVyYXRvcjIsIGFyaXR5Rml4
dXBfcHJvbG9ndWVHZW5lcmF0b3IyKSBcCisgICAgdighZG9lc1Byb2ZpbGluZywgIGlzQ29uc3Ry
dWN0b3IsICBoYXNIdWdlRnJhbWUsIHByb2xvZ3VlR2VuZXJhdG9yMywgYXJpdHlGaXh1cF9wcm9s
b2d1ZUdlbmVyYXRvcjMpCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKyNkZWZpbmUgRk9SX0VBQ0hf
UFJPRklMSU5HX1BST0xPR1VFX0dFTkVSQVRPUih2KSBcCisgICAgdiggZG9lc1Byb2ZpbGluZywg
IWlzQ29uc3RydWN0b3IsICFoYXNIdWdlRnJhbWUsIHByb2xvZ3VlR2VuZXJhdG9yNCwgYXJpdHlG
aXh1cF9wcm9sb2d1ZUdlbmVyYXRvcjQpIFwKKyAgICB2KCBkb2VzUHJvZmlsaW5nLCAhaXNDb25z
dHJ1Y3RvciwgIGhhc0h1Z2VGcmFtZSwgcHJvbG9ndWVHZW5lcmF0b3I1LCBhcml0eUZpeHVwX3By
b2xvZ3VlR2VuZXJhdG9yNSkgXAorICAgIHYoIGRvZXNQcm9maWxpbmcsICBpc0NvbnN0cnVjdG9y
LCAhaGFzSHVnZUZyYW1lLCBwcm9sb2d1ZUdlbmVyYXRvcjYsIGFyaXR5Rml4dXBfcHJvbG9ndWVH
ZW5lcmF0b3I2KSBcCisgICAgdiggZG9lc1Byb2ZpbGluZywgIGlzQ29uc3RydWN0b3IsICBoYXNI
dWdlRnJhbWUsIHByb2xvZ3VlR2VuZXJhdG9yNywgYXJpdHlGaXh1cF9wcm9sb2d1ZUdlbmVyYXRv
cjcpCisKKyNlbHNlIC8vIG5vdCBFTkFCTEUoREZHX0pJVCkKKyNkZWZpbmUgRk9SX0VBQ0hfUFJP
RklMSU5HX1BST0xPR1VFX0dFTkVSQVRPUih2KQorI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQor
CisjZGVmaW5lIEZPUl9FQUNIX1BST0xPR1VFX0dFTkVSQVRPUih2KSBcCisgICAgRk9SX0VBQ0hf
Tk9OX1BST0ZJTElOR19QUk9MT0dVRV9HRU5FUkFUT1IodikgXAorICAgIEZPUl9FQUNIX1BST0ZJ
TElOR19QUk9MT0dVRV9HRU5FUkFUT1IodikKKwogdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0
aG91dEZpbmFsaXppbmcoSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQogewogICAgIERGRzo6
Q2FwYWJpbGl0eUxldmVsIGxldmVsID0gbV9jb2RlQmxvY2stPmNhcGFiaWxpdHlMZXZlbCgpOwpA
QCAtNzIyLDYgKzc0NSw4IEBAIHZvaWQgSklUOjpjb21waWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6
aW4KICAgICAgICAgbm9wKCk7CiAKICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZSgpOworCisjaWYg
IUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogICAgIGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlciht
X2NvZGVCbG9jaywgQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKTsKIAogICAgIExhYmVsIGJlZ2lu
TGFiZWwodGhpcyk7CkBAIC03NDMsMTEgKzc2OCwxMCBAQCB2b2lkIEpJVDo6Y29tcGlsZUFuZExp
bmtXaXRob3V0RmluYWxpemluCiAgICAgaWYgKG1fY29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1
bmN0aW9uQ29kZSkgewogICAgICAgICBBU1NFUlQoIW1fYnl0ZWNvZGVJbmRleCk7CiAgICAgICAg
IGlmIChzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQg
YXJndW1lbnQgPSAwOyBhcmd1bWVudCA8IG1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCk7ICsr
YXJndW1lbnQpIHsKLSAgICAgICAgICAgICAgICAvLyBJZiB0aGlzIGlzIGEgY29uc3RydWN0b3Is
IHRoZW4gd2Ugd2FudCB0byBwdXQgaW4gYSBkdW1teSBwcm9maWxpbmcgc2l0ZSAodG8KLSAgICAg
ICAgICAgICAgICAvLyBrZWVwIHRoaW5ncyBjb25zaXN0ZW50KSBidXQgd2UgZG9uJ3QgYWN0dWFs
bHkgd2FudCB0byByZWNvcmQgdGhlIGR1bW15IHZhbHVlLgotICAgICAgICAgICAgICAgIGlmICht
X2NvZGVCbG9jay0+aXNDb25zdHJ1Y3RvcigpICYmICFhcmd1bWVudCkKLSAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICAvLyBJZiB0aGlzIGlzIGEgY29uc3RydWN0b3Is
IHRoZW4gd2Ugd2FudCB0byBwdXQgaW4gYSBkdW1teSBwcm9maWxpbmcgc2l0ZSAodG8KKyAgICAg
ICAgICAgIC8vIGtlZXAgdGhpbmdzIGNvbnNpc3RlbnQpIGJ1dCB3ZSBkb24ndCBhY3R1YWxseSB3
YW50IHRvIHJlY29yZCB0aGUgZHVtbXkgdmFsdWUuCisgICAgICAgICAgICB1bnNpZ25lZCBzdGFy
dEFyZ3VtZW50ID0gbV9jb2RlQmxvY2stPmlzQ29uc3RydWN0b3IoKSA/IDEgOiAwOworICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudCA9IHN0YXJ0QXJndW1lbnQ7IGFyZ3VtZW50IDwg
bV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKTsgKythcmd1bWVudCkgewogICAgICAgICAgICAg
ICAgIGludCBvZmZzZXQgPSBDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0SW5jbHVkaW5nVGhpcyhh
cmd1bWVudCkgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpOwogI2lmIFVTRShK
U1ZBTFVFNjQpCiAgICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFs
dWVSZWdzKHJlZ1QwKTsKQEAgLTc2MSw3ICs3ODUsMzQgQEAgdm9pZCBKSVQ6OmNvbXBpbGVBbmRM
aW5rV2l0aG91dEZpbmFsaXppbgogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQotICAg
IAorI2Vsc2UgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCisgICAgY29uc3RleHByIEdQUlJl
ZyBjb2RlQmxvY2tHUFIgPSByZWdUNzsKKyAgICBBU1NFUlQoIW1fYnl0ZWNvZGVJbmRleCk7CisK
KyAgICBpbnQgZnJhbWVUb3BPZmZzZXQgPSBzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxv
Y2spICogc2l6ZW9mKFJlZ2lzdGVyKTsKKyAgICB1bnNpZ25lZCBtYXhGcmFtZVNpemUgPSAtZnJh
bWVUb3BPZmZzZXQ7CisKKyAgICBib29sIGRvZXNQcm9maWxpbmcgPSAobV9jb2RlQmxvY2stPmNv
ZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlKSAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCk7CisgICAg
Ym9vbCBpc0NvbnN0cnVjdG9yID0gbV9jb2RlQmxvY2stPmlzQ29uc3RydWN0b3IoKTsKKyAgICBi
b29sIGhhc0h1Z2VGcmFtZSA9IG1heEZyYW1lU2l6ZSA+IE9wdGlvbnM6OnJlc2VydmVkWm9uZVNp
emUoKTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yc1td
ID0geworI2RlZmluZSBVU0VfUFJPTE9HVUVfR0VORVJBVE9SKGRvZXNQcm9maWxpbmcsIGlzQ29u
c3RydWN0b3IsIGhhc0h1Z2VGcmFtZSwgbmFtZSwgYXJpdHlGaXh1cE5hbWUpIG5hbWUsCisgICAg
ICAgIEZPUl9FQUNIX1BST0xPR1VFX0dFTkVSQVRPUihVU0VfUFJPTE9HVUVfR0VORVJBVE9SKQor
I3VuZGVmIFVTRV9QUk9MT0dVRV9HRU5FUkFUT1IKKyAgICB9OworICAgIHN0YXRpYyBjb25zdGV4
cHIgdW5zaWduZWQgbnVtYmVyT2ZHZW5lcmF0b3JzID0gc2l6ZW9mKGdlbmVyYXRvcnMpIC8gc2l6
ZW9mKGdlbmVyYXRvcnNbMF0pOworCisgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2Nr
KSwgY29kZUJsb2NrR1BSKTsKKworICAgIHVuc2lnbmVkIGdlbmVyYXRvclNlbGVjdG9yID0gZG9l
c1Byb2ZpbGluZyA8PCAyIHwgaXNDb25zdHJ1Y3RvciA8PCAxIHwgaGFzSHVnZUZyYW1lIDw8IDA7
CisgICAgUkVMRUFTRV9BU1NFUlQoZ2VuZXJhdG9yU2VsZWN0b3IgPCBudW1iZXJPZkdlbmVyYXRv
cnMpOworICAgIGF1dG8gZ2VuZXJhdG9yID0gZ2VuZXJhdG9yc1tnZW5lcmF0b3JTZWxlY3Rvcl07
CisgICAgZW1pdE5ha2VkTmVhckNhbGwodm0oKS5nZXRDVElTdHViKGdlbmVyYXRvcikucmV0YWdn
ZWRDb2RlPE5vUHRyVGFnPigpKTsKKworICAgIExhYmVsIGJvZHlMYWJlbCh0aGlzKTsKKyNlbmRp
ZiAvLyAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCisKICAgICBSRUxFQVNFX0FTU0VSVCghSklU
Q29kZTo6aXNKSVQobV9jb2RlQmxvY2stPmppdFR5cGUoKSkpOwogCiAgICAgcHJpdmF0ZUNvbXBp
bGVNYWluUGFzcygpOwpAQCAtNzcyLDE2ICs4MjMsMTkgQEAgdm9pZCBKSVQ6OmNvbXBpbGVBbmRM
aW5rV2l0aG91dEZpbmFsaXppbgogICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0RW5kT2ZTbG93
UGF0aChsYWJlbCgpKTsKICAgICBtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlci5hcHBlbmRJdGVt
KGxhYmVsKCksIFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlcjo6ZGVmYXVsdENvZGVPcmlnaW4oKSk7
CiAKKyNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAgICAgc3RhY2tPdmVyZmxvdy5saW5r
KHRoaXMpOwogICAgIG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoMCk7CiAgICAgaWYg
KG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKQogICAgICAgICBhZGRQdHIoVHJ1c3RlZElt
bTMyKC1zdGF0aWNfY2FzdDxpbnQzMl90PihtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCkp
LCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2FsbE9wZXJhdGlvbldpdGhDYWxsRnJhbWVS
b2xsYmFja09uRXhjZXB0aW9uKG9wZXJhdGlvblRocm93U3RhY2tPdmVyZmxvd0Vycm9yLCBtX2Nv
ZGVCbG9jayk7CisjZW5kaWYKIAogICAgIC8vIElmIHRoZSBudW1iZXIgb2YgcGFyYW1ldGVycyBp
cyAxLCB3ZSBuZXZlciByZXF1aXJlIGFyaXR5IGZpeHVwLgogICAgIGJvb2wgcmVxdWlyZXNBcml0
eUZpeHVwID0gbV9jb2RlQmxvY2stPm1fbnVtUGFyYW1ldGVycyAhPSAxOwogICAgIGlmIChtX2Nv
ZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUgJiYgcmVxdWlyZXNBcml0eUZpeHVw
KSB7CiAgICAgICAgIG1fYXJpdHlDaGVjayA9IGxhYmVsKCk7CisjaWYgIUVOQUJMRShFWFRSQV9D
VElfVEhVTktTKQogICAgICAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDApLCAmbV9jb2RlQmxvY2st
Pm1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkKTsKICAgICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUo
KTsKICAgICAgICAgZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKG1fY29kZUJsb2NrLCBDYWxsRnJh
bWVTbG90Ojpjb2RlQmxvY2spOwpAQCAtODAwLDE3ICs4NTQsNDIgQEAgdm9pZCBKSVQ6OmNvbXBp
bGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbgogICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBH
UFJJbmZvOjphcmd1bWVudEdQUjApOwogICAgICAgICBlbWl0TmFrZWROZWFyQ2FsbChtX3ZtLT5n
ZXRDVElTdHViKGFyaXR5Rml4dXBHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7
CiAKKyAgICAgICAganVtcChiZWdpbkxhYmVsKTsKKworI2Vsc2UgLy8gRU5BQkxFKEVYVFJBX0NU
SV9USFVOS1MpCisgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKCk7CisKKyAgICAgICAgc3Rh
dGljX2Fzc2VydChjb2RlQmxvY2tHUFIgPT0gcmVnVDcpOworICAgICAgICBBU1NFUlQoIW1fYnl0
ZWNvZGVJbmRleCk7CisKKyAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBUaHVua0dlbmVyYXRvciBn
ZW5lcmF0b3JzW10gPSB7CisjZGVmaW5lIFVTRV9QUk9MT0dVRV9HRU5FUkFUT1IoZG9lc1Byb2Zp
bGluZywgaXNDb25zdHJ1Y3RvciwgaGFzSHVnZUZyYW1lLCBuYW1lLCBhcml0eUZpeHVwTmFtZSkg
YXJpdHlGaXh1cE5hbWUsCisgICAgICAgICAgICBGT1JfRUFDSF9QUk9MT0dVRV9HRU5FUkFUT1Io
VVNFX1BST0xPR1VFX0dFTkVSQVRPUikKKyN1bmRlZiBVU0VfUFJPTE9HVUVfR0VORVJBVE9SCisg
ICAgICAgIH07CisgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbnVtYmVyT2ZHZW5l
cmF0b3JzID0gc2l6ZW9mKGdlbmVyYXRvcnMpIC8gc2l6ZW9mKGdlbmVyYXRvcnNbMF0pOworCisg
ICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jayksIGNvZGVCbG9ja0dQUik7CisK
KyAgICAgICAgUkVMRUFTRV9BU1NFUlQoZ2VuZXJhdG9yU2VsZWN0b3IgPCBudW1iZXJPZkdlbmVy
YXRvcnMpOworICAgICAgICBhdXRvIGdlbmVyYXRvciA9IGdlbmVyYXRvcnNbZ2VuZXJhdG9yU2Vs
ZWN0b3JdOworICAgICAgICBSRUxFQVNFX0FTU0VSVChnZW5lcmF0b3IpOworICAgICAgICBlbWl0
TmFrZWROZWFyQ2FsbCh2bSgpLmdldENUSVN0dWIoZ2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9Q
dHJUYWc+KCkpOworCisgICAgICAgIGp1bXAoYm9keUxhYmVsKTsKKyNlbmRpZiAvLyAhRU5BQkxF
KEVYVFJBX0NUSV9USFVOS1MpCisKICNpZiBBU1NFUlRfRU5BQkxFRAogICAgICAgICBtX2J5dGVj
b2RlSW5kZXggPSBCeXRlY29kZUluZGV4KCk7IC8vIFJlc2V0IHRoaXMsIGluIG9yZGVyIHRvIGd1
YXJkIGl0cyB1c2Ugd2l0aCBBU1NFUlRzLgogI2VuZGlmCi0KLSAgICAgICAganVtcChiZWdpbkxh
YmVsKTsKICAgICB9IGVsc2UKICAgICAgICAgbV9hcml0eUNoZWNrID0gZW50cnlMYWJlbDsgLy8g
TmV2ZXIgcmVxdWlyZSBhcml0eSBmaXh1cC4KIAogICAgIEFTU0VSVChtX2ptcFRhYmxlLmlzRW1w
dHkoKSk7CiAgICAgCisjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogICAgIHByaXZhdGVD
b21waWxlRXhjZXB0aW9uSGFuZGxlcnMoKTsKKyNlbmRpZgogICAgIAogICAgIGlmIChtX2Rpc2Fz
c2VtYmxlcikKICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnNldEVuZE9mQ29kZShsYWJlbCgpKTsK
QEAgLTgyMCw2ICs4OTksMjM3IEBAIHZvaWQgSklUOjpjb21waWxlQW5kTGlua1dpdGhvdXRGaW5h
bGl6aW4KICAgICBsaW5rKCk7CiB9CiAKKyNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKK01h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpwcm9sb2d1ZUdlbmVyYXRv
cihWTSYgdm0sIGJvb2wgZG9lc1Byb2ZpbGluZywgYm9vbCBpc0NvbnN0cnVjdG9yLCBib29sIGhh
c0h1Z2VGcmFtZSwgY29uc3QgY2hhciogdGh1bmtOYW1lKQoreworICAgIC8vIFRoaXMgZnVuY3Rp
b24gZ2VuZXJhdGVzIHRoZSBCYXNlbGluZSBKSVQncyBwcm9sb2d1ZSBjb2RlLiBJdCBpcyBub3Qg
dXNlYWJsZSBieSBvdGhlciB0aWVycy4KKyAgICBjb25zdGV4cHIgR1BSUmVnIGNvZGVCbG9ja0dQ
UiA9IHJlZ1Q3OyAvLyBpbmNvbWluZy4KKworICAgIGNvbnN0ZXhwciBpbnQgdmlydHVhbFJlZ2lz
dGVyU2l6ZSA9IHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSk7CisgICAgY29uc3Rl
eHByIGludCB2aXJ0dWFsUmVnaXN0ZXJTaXplU2hpZnQgPSAzOworICAgIHN0YXRpY19hc3NlcnQo
KDEgPDwgdmlydHVhbFJlZ2lzdGVyU2l6ZVNoaWZ0KSA9PSB2aXJ0dWFsUmVnaXN0ZXJTaXplKTsK
KworICAgIHRhZ1JldHVybkFkZHJlc3MoKTsKKworICAgIHN0b3JlNjQoY29kZUJsb2NrR1BSLCBh
ZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jaykpOworCisgICAgbG9hZDMyKEFkZHJl
c3MoY29kZUJsb2NrR1BSLCBDb2RlQmxvY2s6Om9mZnNldE9mTnVtQ2FsbGVlTG9jYWxzKCkpLCBy
ZWdUMSk7CisgICAgaWYgY29uc3RleHByIChtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbElu
UmVnaXN0ZXJzKQorICAgICAgICBhZGQzMihUcnVzdGVkSW1tMzIobWF4RnJhbWVFeHRlbnRGb3JT
bG93UGF0aENhbGxJblJlZ2lzdGVycyksIHJlZ1QxKTsKKyAgICBsc2hpZnQzMihUcnVzdGVkSW1t
MzIodmlydHVhbFJlZ2lzdGVyU2l6ZVNoaWZ0KSwgcmVnVDEpOworICAgIG5lZ2F0ZTY0KHJlZ1Qx
KTsKKyNpZiBBU1NFUlRfRU5BQkxFRAorICAgIHByb2JlKFtdIChQcm9iZTo6Q29udGV4dCYgY29u
dGV4dCkgeworICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNvbnRleHQuZnA8Q2FsbEZy
YW1lKj4oKS0+Y29kZUJsb2NrKCk7CisgICAgICAgIGludDY0X3QgZnJhbWVUb3BPZmZzZXQgPSBz
dGFja1BvaW50ZXJPZmZzZXRGb3IoY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3Rlcik7CisgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKGNvbnRleHQuZ3ByPGludHB0cl90PihyZWdUMSkgPT0gZnJhbWVU
b3BPZmZzZXQpOworICAgIH0sIG51bGxwdHIpOworI2VuZGlmCisKKyAgICBhZGRQdHIoY2FsbEZy
YW1lUmVnaXN0ZXIsIHJlZ1QxKTsKKworICAgIEp1bXBMaXN0IHN0YWNrT3ZlcmZsb3c7CisgICAg
aWYgKGhhc0h1Z2VGcmFtZSkKKyAgICAgICAgc3RhY2tPdmVyZmxvdy5hcHBlbmQoYnJhbmNoUHRy
KEFib3ZlLCByZWdUMSwgY2FsbEZyYW1lUmVnaXN0ZXIpKTsKKyAgICBzdGFja092ZXJmbG93LmFw
cGVuZChicmFuY2hQdHIoQWJvdmUsIEFic29sdXRlQWRkcmVzcyh2bS5hZGRyZXNzT2ZTb2Z0U3Rh
Y2tMaW1pdCgpKSwgcmVnVDEpKTsKKworICAgIHVudGFnUmV0dXJuQWRkcmVzcygpOworI2lmIENQ
VShYODZfNjQpCisgICAgcG9wKHJlZ1QyKTsgLy8gU2F2ZSB0aGUgcmV0dXJuIGFkZHJlc3MuCisj
ZW5kaWYKKyAgICBtb3ZlKHJlZ1QxLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgdGFnUmV0
dXJuQWRkcmVzcygpOworICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CisjaWYgQ1BV
KFg4Nl82NCkKKyAgICBwdXNoKHJlZ1QyKTsgLy8gUmVzdG9yZSB0aGUgcmV0dXJuIGFkZHJlc3Mu
CisjZW5kaWYKKworICAgIGVtaXRTYXZlQ2FsbGVlU2F2ZXNGb3JCYXNlbGluZUpJVCgpOworICAg
IGVtaXRNYXRlcmlhbGl6ZVRhZ0NoZWNrUmVnaXN0ZXJzKCk7CisKKyAgICBpZiAoZG9lc1Byb2Zp
bGluZykgeworICAgICAgICBjb25zdGV4cHIgR1BSUmVnIGFyZ3VtZW50VmFsdWVQcm9maWxlR1BS
ID0gcmVnVDY7CisgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgbnVtUGFyYW1ldGVyc0dQUiA9IHJl
Z1Q1OworICAgICAgICBjb25zdGV4cHIgR1BSUmVnIGFyZ3VtZW50R1BSID0gcmVnVDQ7CisKKyAg
ICAgICAgbG9hZDMyKEFkZHJlc3MoY29kZUJsb2NrR1BSLCBDb2RlQmxvY2s6Om9mZnNldE9mTnVt
UGFyYW1ldGVycygpKSwgbnVtUGFyYW1ldGVyc0dQUik7CisgICAgICAgIGxvYWRQdHIoQWRkcmVz
cyhjb2RlQmxvY2tHUFIsIENvZGVCbG9jazo6b2Zmc2V0T2ZBcmd1bWVudFZhbHVlUHJvZmlsZXMo
KSksIGFyZ3VtZW50VmFsdWVQcm9maWxlR1BSKTsKKyAgICAgICAgaWYgKGlzQ29uc3RydWN0b3Ip
CisgICAgICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHNpemVvZihWYWx1ZVByb2ZpbGUpKSwg
YXJndW1lbnRWYWx1ZVByb2ZpbGVHUFIpOworCisgICAgICAgIGludCBzdGFydEFyZ3VtZW50ID0g
Q2FsbEZyYW1lU2xvdDo6dGhpc0FyZ3VtZW50ICsgKGlzQ29uc3RydWN0b3IgPyAxIDogMCk7Cisg
ICAgICAgIGludCBzdGFydEFyZ3VtZW50T2Zmc2V0ID0gc3RhcnRBcmd1bWVudCAqIHZpcnR1YWxS
ZWdpc3RlclNpemU7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0KHN0YXJ0QXJndW1lbnRPZmZz
ZXQpLCBhcmd1bWVudEdQUik7CisKKyAgICAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKHN0YXRpY19j
YXN0PGludD4oQ2FsbEZyYW1lU2xvdDo6dGhpc0FyZ3VtZW50KSksIG51bVBhcmFtZXRlcnNHUFIp
OworICAgICAgICBsc2hpZnQzMihUcnVzdGVkSW1tMzIodmlydHVhbFJlZ2lzdGVyU2l6ZVNoaWZ0
KSwgbnVtUGFyYW1ldGVyc0dQUik7CisKKyAgICAgICAgYWRkUHRyKGNhbGxGcmFtZVJlZ2lzdGVy
LCBhcmd1bWVudEdQUik7CisgICAgICAgIGFkZFB0cihjYWxsRnJhbWVSZWdpc3RlciwgbnVtUGFy
YW1ldGVyc0dQUik7CisKKyAgICAgICAgTGFiZWwgbG9vcFN0YXJ0KHRoaXMpOworICAgICAgICBK
dW1wIGRvbmUgPSBicmFuY2hQdHIoQWJvdmVPckVxdWFsLCBhcmd1bWVudEdQUiwgbnVtUGFyYW1l
dGVyc0dQUik7CisgICAgICAgIHsKKyAgICAgICAgICAgIGxvYWQ2NChBZGRyZXNzKGFyZ3VtZW50
R1BSKSwgcmVnVDApOworICAgICAgICAgICAgc3RvcmU2NChyZWdUMCwgQWRkcmVzcyhhcmd1bWVu
dFZhbHVlUHJvZmlsZUdQUiwgT0JKRUNUX09GRlNFVE9GKFZhbHVlUHJvZmlsZSwgbV9idWNrZXRz
KSkpOworCisgICAgICAgICAgICAvLyBUaGUgYXJndW1lbnQgVmFsdWVQcm9maWxlcyBhcmUgc3Rv
cmVkIGluIGEgRml4ZWRWZWN0b3IuIEhlbmNlLCB0aGUKKyAgICAgICAgICAgIC8vIGFkZHJlc3Mg
b2YgdGhlIG5leHQgcHJvZmlsZSBjYW4gYmUgdHJpdmlhbGx5IGNvbXB1dGVkIHdpdGggYW4gaW5j
cmVtZW50LgorICAgICAgICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzaXplb2YoVmFsdWVQcm9m
aWxlKSksIGFyZ3VtZW50VmFsdWVQcm9maWxlR1BSKTsKKyAgICAgICAgICAgIGFkZFB0cihUcnVz
dGVkSW1tMzIodmlydHVhbFJlZ2lzdGVyU2l6ZSksIGFyZ3VtZW50R1BSKTsKKyAgICAgICAgICAg
IGp1bXAoKS5saW5rVG8obG9vcFN0YXJ0LCB0aGlzKTsKKyAgICAgICAgfQorICAgICAgICBkb25l
LmxpbmsodGhpcyk7CisgICAgfQorICAgIHJldCgpOworCisgICAgc3RhY2tPdmVyZmxvdy5saW5r
KHRoaXMpOworI2lmIENQVShYODZfNjQpCisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMigxICogc2l6
ZW9mKENQVVJlZ2lzdGVyKSksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsgLy8gZGlzY2FyZCByZXR1
cm4gYWRkcmVzcy4KKyNlbmRpZgorCisgICAgdWludDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbFNp
dGVJbmRleCgwKS5iaXRzKCk7CisgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIobG9jYXRpb25CaXRz
KSwgdGFnRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSk7CisK
KyAgICBpZiAobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpCisgICAgICAgIGFkZFB0cihU
cnVzdGVkSW1tMzIoLXN0YXRpY19jYXN0PGludDMyX3Q+KG1heEZyYW1lRXh0ZW50Rm9yU2xvd1Bh
dGhDYWxsKSksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKworICAgIHNldHVwQXJndW1lbnRzPGRl
Y2x0eXBlKG9wZXJhdGlvblRocm93U3RhY2tPdmVyZmxvd0Vycm9yKT4oY29kZUJsb2NrR1BSKTsK
KyAgICBwcmVwYXJlQ2FsbE9wZXJhdGlvbih2bSk7CisgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwg
b3BlcmF0aW9uQ2FsbCA9IGNhbGwoT3BlcmF0aW9uUHRyVGFnKTsKKyAgICBKdW1wIGhhbmRsZUV4
Y2VwdGlvbkp1bXAgPSBqdW1wKCk7CisKKyAgICBhdXRvIGhhbmRsZXIgPSB2bS5nZXRDVElTdHVi
KGhhbmRsZUV4Y2VwdGlvbldpdGhDYWxsRnJhbWVSb2xsYmFja0dlbmVyYXRvcik7CisKKyAgICBM
aW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp0aGlzLCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6
OlByb2ZpbGU6OkV4dHJhQ1RJVGh1bmspOworICAgIHBhdGNoQnVmZmVyLmxpbmsob3BlcmF0aW9u
Q2FsbCwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25UaHJvd1N0YWNrT3Zl
cmZsb3dFcnJvcikpOworICAgIHBhdGNoQnVmZmVyLmxpbmsoaGFuZGxlRXhjZXB0aW9uSnVtcCwg
Q29kZUxvY2F0aW9uTGFiZWwoaGFuZGxlci5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKKyAg
ICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsIHRodW5r
TmFtZSk7Cit9CisKK3N0YXRpYyBjb25zdGV4cHIgYm9vbCBkb2VzUHJvZmlsaW5nID0gdHJ1ZTsK
K3N0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0NvbnN0cnVjdG9yID0gdHJ1ZTsKK3N0YXRpYyBjb25z
dGV4cHIgYm9vbCBoYXNIdWdlRnJhbWUgPSB0cnVlOworCisjZGVmaW5lIERFRklORV9QUk9HTE9H
VUVfR0VORVJBVE9SKGRvZXNQcm9maWxpbmcsIGlzQ29uc3RydWN0b3IsIGhhc0h1Z2VGcmFtZSwg
bmFtZSwgYXJpdHlGaXh1cE5hbWUpIFwKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1
bmtQdHJUYWc+IEpJVDo6bmFtZShWTSYgdm0pIFwKKyAgICB7IFwKKyAgICAgICAgSklUIGppdCh2
bSk7IFwKKyAgICAgICAgcmV0dXJuIGppdC5wcm9sb2d1ZUdlbmVyYXRvcih2bSwgZG9lc1Byb2Zp
bGluZywgaXNDb25zdHJ1Y3RvciwgaGFzSHVnZUZyYW1lLCAiQmFzZWxpbmU6ICIgI25hbWUpOyBc
CisgICAgfQorCitGT1JfRUFDSF9QUk9MT0dVRV9HRU5FUkFUT1IoREVGSU5FX1BST0dMT0dVRV9H
RU5FUkFUT1IpCisjdW5kZWYgREVGSU5FX1BST0dMT0dVRV9HRU5FUkFUT1IKKworTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OmFyaXR5Rml4dXBQcm9sb2d1ZUdlbmVy
YXRvcihWTSYgdm0sIGJvb2wgaXNDb25zdHJ1Y3RvciwgVGh1bmtHZW5lcmF0b3Igbm9ybWFsUHJv
bG9ndWVHZW5lcmF0b3IsIGNvbnN0IGNoYXIqIHRodW5rTmFtZSkKK3sKKyAgICAvLyBUaGlzIGZ1
bmN0aW9uIGdlbmVyYXRlcyB0aGUgQmFzZWxpbmUgSklUJ3MgcHJvbG9ndWUgY29kZS4gSXQgaXMg
bm90IHVzZWFibGUgYnkgb3RoZXIgdGllcnMuCisgICAgY29uc3RleHByIEdQUlJlZyBjb2RlQmxv
Y2tHUFIgPSByZWdUNzsgLy8gaW5jb21pbmcuCisgICAgY29uc3RleHByIEdQUlJlZyBudW1QYXJh
bWV0ZXJzR1BSID0gcmVnVDY7CisKKyAgICB0YWdSZXR1cm5BZGRyZXNzKCk7CisjaWYgQ1BVKFg4
Nl82NCkKKyAgICBwdXNoKGZyYW1lUG9pbnRlclJlZ2lzdGVyKTsKKyNlbGlmIENQVShBUk02NCkK
KyAgICBwdXNoUGFpcihmcmFtZVBvaW50ZXJSZWdpc3RlciwgbGlua1JlZ2lzdGVyKTsKKyNlbmRp
ZgorCisgICAgc3RvcmU2NChjb2RlQmxvY2tHUFIsIGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6
Y29kZUJsb2NrKSk7CisgICAgc3RvcmU4KFRydXN0ZWRJbW0zMigwKSwgQWRkcmVzcyhjb2RlQmxv
Y2tHUFIsIENvZGVCbG9jazo6b2Zmc2V0T2ZTaG91bGRBbHdheXNCZUlubGluZWQoKSkpOworCisg
ICAgbG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMpLCByZWdUMSk7CisgICAgbG9hZDMyKEFkZHJlc3MoY29kZUJsb2NrR1BSLCBDb2RlQmxv
Y2s6Om9mZnNldE9mTnVtUGFyYW1ldGVycygpKSwgbnVtUGFyYW1ldGVyc0dQUik7CisgICAgSnVt
cCBub0ZpeHVwTmVlZGVkID0gYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwgbnVtUGFyYW1l
dGVyc0dQUik7CisKKyAgICBpZiBjb25zdGV4cHIgKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhD
YWxsKQorICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC1zdGF0aWNfY2FzdDxpbnQzMl90Piht
YXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCkpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisK
KyAgICBsb2FkUHRyKEFkZHJlc3MoY29kZUJsb2NrR1BSLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xv
YmFsT2JqZWN0KCkpLCBhcmd1bWVudEdQUjApOworCisgICAgc3RhdGljX2Fzc2VydChzdGQ6Omlz
X3NhbWU8ZGVjbHR5cGUob3BlcmF0aW9uQ29uc3RydWN0QXJpdHlDaGVjayksIGRlY2x0eXBlKG9w
ZXJhdGlvbkNhbGxBcml0eUNoZWNrKT46OnZhbHVlKTsKKyAgICBzZXR1cEFyZ3VtZW50czxkZWNs
dHlwZShvcGVyYXRpb25DYWxsQXJpdHlDaGVjayk+KGFyZ3VtZW50R1BSMCk7CisgICAgcHJlcGFy
ZUNhbGxPcGVyYXRpb24odm0pOworCisgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXJpdHlDaGVj
a0NhbGwgPSBjYWxsKE9wZXJhdGlvblB0clRhZyk7CisgICAgSnVtcCBoYW5kbGVFeGNlcHRpb25K
dW1wID0gZW1pdE5vblBhdGNoYWJsZUV4Y2VwdGlvbkNoZWNrKHZtKTsKKworICAgIGlmIGNvbnN0
ZXhwciAobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpCisgICAgICAgIGFkZFB0cihUcnVz
dGVkSW1tMzIobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpLCBzdGFja1BvaW50ZXJSZWdp
c3Rlcik7CisgICAgSnVtcCBuZWVkRml4dXAgPSBicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJu
VmFsdWVHUFIpOworICAgIG5vRml4dXBOZWVkZWQubGluayh0aGlzKTsKKworICAgIC8vIFRoZSBu
b3JtYWwgcHJvbG9ndWUgZXhwZWN0cyBpbmNvbWluZyBjb2RlQmxvY2tHUFIuCisgICAgbG9hZDY0
KGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgY29kZUJsb2NrR1BSKTsKKwor
I2lmIENQVShYODZfNjQpCisgICAgcG9wKGZyYW1lUG9pbnRlclJlZ2lzdGVyKTsKKyNlbGlmIENQ
VShBUk02NCkKKyAgICBwb3BQYWlyKGZyYW1lUG9pbnRlclJlZ2lzdGVyLCBsaW5rUmVnaXN0ZXIp
OworI2VuZGlmCisgICAgdW50YWdSZXR1cm5BZGRyZXNzKCk7CisKKyAgICBKdW1wTGlzdCBub3Jt
YWxQcm9sb2d1ZUp1bXA7CisgICAgbm9ybWFsUHJvbG9ndWVKdW1wLmFwcGVuZChqdW1wKCkpOwor
CisgICAgbmVlZEZpeHVwLmxpbmsodGhpcyk7CisKKyAgICAvLyBSZXN0b3JlIHRoZSBzdGFjayBm
b3IgYXJpdHkgZml4dXAsIGFuZCBwcmVzZXJ2ZSB0aGUgcmV0dXJuIGFkZHJlc3MuCisgICAgLy8g
YXJpdHlGaXh1cEdlbmVyYXRvciB3aWxsIGJlIHNoaWZ0aW5nIHRoZSBzdGFjay4gU28sIHdlIGNh
bid0IHVzZSB0aGUgc3RhY2sgdG8KKyAgICAvLyBwcmVzZXJ2ZSB0aGUgcmV0dXJuIGFkZHJlc3Mu
IFdlIGFsc28gY2FuJ3QgdXNlIGNhbGxlZSBzYXZlZCByZWdpc3RlcnMgYmVjYXVzZQorICAgIC8v
IHRoZXkgaGF2ZW4ndCBiZWVuIHNhdmVkIHlldC4KKyAgICAvLworICAgIC8vIGFyaXR5Rml4dXBH
ZW5lcmF0b3IgaXMgY2FyZWZ1bGx5IGNyYWZ0ZWQgdG8gb25seSB1c2UgYTAsIGExLCBhMiwgdDMs
IHQ0IGFuZCB0NS4KKyAgICAvLyBTbywgdGhlIHJldHVybiBhZGRyZXNzIGNhbiBiZSBwcmVzZXJ2
ZWQgaW4gcmVnVDcuCisjaWYgQ1BVKFg4Nl82NCkKKyAgICBwb3AoYXJndW1lbnRHUFIyKTsgLy8g
ZGlzY2FyZC4KKyAgICBwb3AocmVnVDcpOyAvLyBzYXZlIHJldHVybiBhZGRyZXNzLgorI2VsaWYg
Q1BVKEFSTTY0KQorICAgIHBvcFBhaXIoZnJhbWVQb2ludGVyUmVnaXN0ZXIsIGxpbmtSZWdpc3Rl
cik7CisgICAgdW50YWdSZXR1cm5BZGRyZXNzKCk7CisgICAgbW92ZShsaW5rUmVnaXN0ZXIsIHJl
Z1Q3KTsKKyAgICBhdXRvIHJhbmRvbVJldHVybkFkZHJlc3NUYWcgPSByYW5kb20oKTsKKyAgICBt
b3ZlKFRydXN0ZWRJbW0zMihyYW5kb21SZXR1cm5BZGRyZXNzVGFnKSwgcmVnVDEpOworICAgIHRh
Z1B0cihyZWdUMSwgcmVnVDcpOworI2VuZGlmCisgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgR1BS
SW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICBDYWxsIGFyaXR5Rml4dXBDYWxsID0gbmVhckNhbGwo
KTsKKworI2lmIENQVShYODZfNjQpCisgICAgcHVzaChyZWdUNyk7IC8vIHJlc3RvcmUgcmV0dXJu
IGFkZHJlc3MuCisjZWxpZiBDUFUoQVJNNjQpCisgICAgbW92ZShUcnVzdGVkSW1tMzIocmFuZG9t
UmV0dXJuQWRkcmVzc1RhZyksIHJlZ1QxKTsKKyAgICB1bnRhZ1B0cihyZWdUMSwgcmVnVDcpOwor
ICAgIG1vdmUocmVnVDcsIGxpbmtSZWdpc3Rlcik7CisjZW5kaWYKKworICAgIGxvYWQ2NChhZGRy
ZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIGNvZGVCbG9ja0dQUik7CisgICAgbm9y
bWFsUHJvbG9ndWVKdW1wLmFwcGVuZChqdW1wKCkpOworCisgICAgYXV0byBhcml0eUNoZWNrT3Bl
cmF0aW9uID0gaXNDb25zdHJ1Y3RvciA/IG9wZXJhdGlvbkNvbnN0cnVjdEFyaXR5Q2hlY2sgOiBv
cGVyYXRpb25DYWxsQXJpdHlDaGVjazsKKyAgICBhdXRvIGFyaXR5Rml4dXAgPSB2bS5nZXRDVElT
dHViKGFyaXR5Rml4dXBHZW5lcmF0b3IpOworICAgIGF1dG8gbm9ybWFsUHJvbG9ndWUgPSB2bS5n
ZXRDVElTdHViKG5vcm1hbFByb2xvZ3VlR2VuZXJhdG9yKTsKKyAgICBhdXRvIGV4Y2VwdGlvbkhh
bmRsZXIgPSB2bS5nZXRDVElTdHViKHBvcFRodW5rU3RhY2tQcmVzZXJ2ZXNBbmRIYW5kbGVFeGNl
cHRpb25HZW5lcmF0b3IpOworCisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdGhpcywgR0xP
QkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpFeHRyYUNUSVRodW5rKTsKKyAgICBw
YXRjaEJ1ZmZlci5saW5rKGFyaXR5Q2hlY2tDYWxsLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJU
YWc+KGFyaXR5Q2hlY2tPcGVyYXRpb24pKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKGFyaXR5Rml4
dXBDYWxsLCBGdW5jdGlvblB0cihhcml0eUZpeHVwLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkp
OworICAgIHBhdGNoQnVmZmVyLmxpbmsobm9ybWFsUHJvbG9ndWVKdW1wLCBDb2RlTG9jYXRpb25M
YWJlbChub3JtYWxQcm9sb2d1ZS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKKyAgICBwYXRj
aEJ1ZmZlci5saW5rKGhhbmRsZUV4Y2VwdGlvbkp1bXAsIENvZGVMb2NhdGlvbkxhYmVsKGV4Y2Vw
dGlvbkhhbmRsZXIucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7CisgICAgcmV0dXJuIEZJTkFM
SVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCB0aHVua05hbWUpOworfQorCisj
ZGVmaW5lIERFRklORV9BUklUWV9QUk9HTE9HVUVfR0VORVJBVE9SKGRvZXNQcm9maWxpbmcsIGlz
Q29uc3RydWN0b3IsIGhhc0h1Z2VGcmFtZSwgbmFtZSwgYXJpdHlGaXh1cE5hbWUpIFwKK01hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjphcml0eUZpeHVwTmFtZShWTSYg
dm0pIFwKKyAgICB7IFwKKyAgICAgICAgSklUIGppdCh2bSk7IFwKKyAgICAgICAgcmV0dXJuIGpp
dC5hcml0eUZpeHVwUHJvbG9ndWVHZW5lcmF0b3Iodm0sIGlzQ29uc3RydWN0b3IsIG5hbWUsICJC
YXNlbGluZTogIiAjYXJpdHlGaXh1cE5hbWUpOyBcCisgICAgfQorCitGT1JfRUFDSF9QUk9MT0dV
RV9HRU5FUkFUT1IoREVGSU5FX0FSSVRZX1BST0dMT0dVRV9HRU5FUkFUT1IpCisjdW5kZWYgREVG
SU5FX0FSSVRZX1BST0dMT0dVRV9HRU5FUkFUT1IKKworI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9D
VElfVEhVTktTKQorCiB2b2lkIEpJVDo6bGluaygpCiB7CiAgICAgTGlua0J1ZmZlciYgcGF0Y2hC
dWZmZXIgPSAqbV9saW5rQnVmZmVyOwpAQCAtMTAxNCw5ICsxMzI0LDkgQEAgQ29tcGlsYXRpb25S
ZXN1bHQgSklUOjpwcml2YXRlQ29tcGlsZShKSQogICAgIHJldHVybiBmaW5hbGl6ZU9uTWFpblRo
cmVhZCgpOwogfQogCisjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogdm9pZCBKSVQ6OnBy
aXZhdGVDb21waWxlRXhjZXB0aW9uSGFuZGxlcnMoKQogewotI2lmICFFTkFCTEUoRVhUUkFfQ1RJ
X1RIVU5LUykKICAgICBpZiAoIW1fZXhjZXB0aW9uQ2hlY2tzV2l0aENhbGxGcmFtZVJvbGxiYWNr
LmVtcHR5KCkpIHsKICAgICAgICAgbV9leGNlcHRpb25DaGVja3NXaXRoQ2FsbEZyYW1lUm9sbGJh
Y2subGluayh0aGlzKTsKIApAQCAtMTA0MSw4ICsxMzUxLDggQEAgdm9pZCBKSVQ6OnByaXZhdGVD
b21waWxlRXhjZXB0aW9uSGFuZGxlcgogICAgICAgICBtX2ZhckNhbGxzLmFwcGVuZChGYXJDYWxs
UmVjb3JkKGNhbGwoT3BlcmF0aW9uUHRyVGFnKSwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFn
PihvcGVyYXRpb25Mb29rdXBFeGNlcHRpb25IYW5kbGVyKSkpOwogICAgICAgICBqdW1wVG9FeGNl
cHRpb25IYW5kbGVyKHZtKCkpOwogICAgIH0KLSNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RI
VU5LUykKIH0KKyNlbmRpZiAvLyAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKIHZvaWQgSklU
Ojpkb01haW5UaHJlYWRQcmVwYXJhdGlvbkJlZm9yZUNvbXBpbGUoKQogewpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVC5oCShyZXZpc2lvbiAyNzgyMDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMTgsNyArMzE4LDkgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgICAgICBtX2V4Y2VwdGlvbkNoZWNrc1dpdGhDYWxsRnJhbWVSb2xsYmFj
ay5hcHBlbmQoZW1pdEV4Y2VwdGlvbkNoZWNrKHZtKCkpKTsKICAgICAgICAgfQogCisjaWYgIUVO
QUJMRShFWFRSQV9DVElfVEhVTktTKQogICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlRXhjZXB0
aW9uSGFuZGxlcnMoKTsKKyNlbmRpZgogCiAgICAgICAgIHZvaWQgYWR2YW5jZVRvTmV4dENoZWNr
cG9pbnQoKTsKICAgICAgICAgdm9pZCBlbWl0SnVtcFNsb3dUb0hvdEZvckNoZWNrcG9pbnQoSnVt
cCk7CkBAIC03MTMsNyArNzE1LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfanN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2b2lkIGVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfanRydWUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQog
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2xvb3BfaGludChjb25zdCBJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyNlbmRpZgogICAgICAgICB2b2lkIGVt
aXRTbG93X29wX2NoZWNrX3RyYXBzKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2b2lkIGVtaXRTbG93X29wX21vZChjb25zdCBJ
bnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9tdWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJik7CkBAIC03ODgsNiArNzkyLDI2IEBAIG5hbWVzcGFjZSBKU0Mgewog
CiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAgICAgICAgIC8vIFRodW5rIGdlbmVyYXRv
cnMuCisgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+
IHByb2xvZ3VlR2VuZXJhdG9yMChWTSYpOworICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiBwcm9sb2d1ZUdlbmVyYXRvcjEoVk0mKTsKKyAgICAgICAg
c3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gcHJvbG9ndWVHZW5l
cmF0b3IyKFZNJik7CisgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1
bmtQdHJUYWc+IHByb2xvZ3VlR2VuZXJhdG9yMyhWTSYpOworICAgICAgICBzdGF0aWMgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBwcm9sb2d1ZUdlbmVyYXRvcjQoVk0mKTsK
KyAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gcHJv
bG9ndWVHZW5lcmF0b3I1KFZNJik7CisgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+IHByb2xvZ3VlR2VuZXJhdG9yNihWTSYpOworICAgICAgICBzdGF0
aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBwcm9sb2d1ZUdlbmVyYXRv
cjcoVk0mKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBw
cm9sb2d1ZUdlbmVyYXRvcihWTSYsIGJvb2wgZG9lc1Byb2ZpbGluZywgYm9vbCBpc0NvbnN0cnVj
dG9yLCBib29sIGhhc0h1Z2VGcmFtZSwgY29uc3QgY2hhciogbmFtZSk7CisKKyAgICAgICAgc3Rh
dGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gYXJpdHlGaXh1cF9wcm9s
b2d1ZUdlbmVyYXRvcjAoVk0mKTsKKyAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRUaHVua1B0clRhZz4gYXJpdHlGaXh1cF9wcm9sb2d1ZUdlbmVyYXRvcjEoVk0mKTsKKyAg
ICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gYXJpdHlG
aXh1cF9wcm9sb2d1ZUdlbmVyYXRvcjIoVk0mKTsKKyAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gYXJpdHlGaXh1cF9wcm9sb2d1ZUdlbmVyYXRvcjMo
Vk0mKTsKKyAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gYXJpdHlGaXh1cF9wcm9sb2d1ZUdlbmVyYXRvcjQoVk0mKTsKKyAgICAgICAgc3RhdGljIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gYXJpdHlGaXh1cF9wcm9sb2d1ZUdl
bmVyYXRvcjUoVk0mKTsKKyAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gYXJpdHlGaXh1cF9wcm9sb2d1ZUdlbmVyYXRvcjYoVk0mKTsKKyAgICAgICAg
c3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gYXJpdHlGaXh1cF9w
cm9sb2d1ZUdlbmVyYXRvcjcoVk0mKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiBhcml0eUZpeHVwUHJvbG9ndWVHZW5lcmF0b3IoVk0mLCBib29sIGlzQ29u
c3RydWN0b3IsIFRodW5rR2VuZXJhdG9yIG5vcm1hbFByb2xvZ3VlR2VuZXJhdG9yLCBjb25zdCBj
aGFyKiBuYW1lKTsKKwogICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiBzbG93X29wX2RlbF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvcihWTSYpOwog
ICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBzbG93
X29wX2RlbF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3IoVk0mKTsKICAgICAgICAgc3RhdGlj
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gc2xvd19vcF9nZXRfYnlfaWRf
cHJlcGFyZUNhbGxHZW5lcmF0b3IoVk0mKTsKQEAgLTgwMiw3ICs4MjYsMTQgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IHNsb3dfb3BfcmVzb2x2ZV9zY29wZUdlbmVyYXRvcihWTSYpOwogCiAgICAgICAgIHN0YXRp
YyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9wX2NoZWNrX3RyYXBzX2hh
bmRsZXJHZW5lcmF0b3IoVk0mKTsKLSAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRUaHVua1B0clRhZz4gb3BfZW50ZXJfaGFuZGxlckdlbmVyYXRvcihWTSYpOworCisgICAg
ICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9wX2VudGVy
X2NhbkJlT3B0aW1pemVkX0dlbmVyYXRvcihWTSYpOworICAgICAgICBzdGF0aWMgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvcF9lbnRlcl9jYW5ub3RCZU9wdGltaXplZF9H
ZW5lcmF0b3IoVk0mKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBvcF9lbnRlcl9HZW5lcmF0b3IoVk0mLCBib29sIGNhbkJlT3B0aW1pemVkLCBjb25zdCBj
aGFyKiB0aHVua05hbWUpOworCisjaWYgRU5BQkxFKERGR19KSVQpCisgICAgICAgIHN0YXRpYyBN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9wX2xvb3BfaGludF9HZW5lcmF0
b3IoVk0mKTsKKyNlbmRpZgogICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiBvcF9yZXRfaGFuZGxlckdlbmVyYXRvcihWTSYpOwogICAgICAgICBzdGF0
aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvcF90aHJvd19oYW5kbGVy
R2VuZXJhdG9yKFZNJik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5s
aW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5l
cy5oCShyZXZpc2lvbiAyNzgyMDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElu
bGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtOTEsNyArOTEsNiBAQCBBTFdBWVNfSU5MSU5FIHZv
aWQgSklUOjplbWl0TG9hZENoYXJhY3RlCiAKIEFMV0FZU19JTkxJTkUgSklUOjpDYWxsIEpJVDo6
ZW1pdE5ha2VkTmVhckNhbGwoQ29kZVB0cjxOb1B0clRhZz4gdGFyZ2V0KQogewotICAgIEFTU0VS
VChtX2J5dGVjb2RlSW5kZXgpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQg
ZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXgg
aXMgc2V0LgogICAgIENhbGwgbmFrZWRDYWxsID0gbmVhckNhbGwoKTsKICAgICBtX25lYXJDYWxs
cy5hcHBlbmQoTmVhckNhbGxSZWNvcmQobmFrZWRDYWxsLCBGdW5jdGlvblB0cjxKU0ludGVybmFs
UHRyVGFnPih0YXJnZXQucmV0YWdnZWQ8SlNJbnRlcm5hbFB0clRhZz4oKSkpKTsKICAgICByZXR1
cm4gbmFrZWRDYWxsOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMu
Y3BwCShyZXZpc2lvbiAyNzgyMDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9w
Y29kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNzYsNyArMzc2LDcgQEAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIEpJVCBqaXQodm0pOwogCiAgICAgaml0
LmNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7Ci0gICAgaml0LmVtaXRSZXN0b3JlQ2FsbGVl
U2F2ZXNGb3IoJlJlZ2lzdGVyQXRPZmZzZXRMaXN0OjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVJl
Z2lzdGVycygpKTsKKyAgICBqaXQuZW1pdFJlc3RvcmVDYWxsZWVTYXZlc0ZvckJhc2VsaW5lSklU
KCk7CiAgICAgaml0LmVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CiAgICAgaml0LnJldCgpOwogCkBA
IC0xMTg2LDEwMyArMTE4NiwxMTUgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW50ZXIoY29uc3QgSW5z
dHJ1Y3RpbwogICAgIGVtaXRFbnRlck9wdGltaXphdGlvbkNoZWNrKCk7CiAjZWxzZQogICAgIEFT
U0VSVChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkgPT0gMCk7Ci0gICAgY29uc3RleHByIEdQUlJl
ZyBsb2NhbHNUb0luaXRHUFIgPSBhcmd1bWVudEdQUjA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBj
YW5CZU9wdGltaXplZEdQUiA9IGFyZ3VtZW50R1BSNDsKLQogICAgIHVuc2lnbmVkIGxvY2Fsc1Rv
SW5pdCA9IGNvdW50IC0gQ29kZUJsb2NrOjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNW
aXJ0dWFsUmVnaXN0ZXJzKCk7CiAgICAgUkVMRUFTRV9BU1NFUlQobG9jYWxzVG9Jbml0IDwgY291
bnQpOwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKGxvY2Fsc1RvSW5pdCAqIHNpemVvZihSZWdpc3Rl
cikpLCBsb2NhbHNUb0luaXRHUFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKGNhbkJlT3B0aW1p
emVkKCkpLCBjYW5CZU9wdGltaXplZEdQUik7Ci0gICAgZW1pdE5ha2VkTmVhckNhbGwodm0oKS5n
ZXRDVElTdHViKG9wX2VudGVyX2hhbmRsZXJHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRh
Zz4oKSk7CisgICAgVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yID0gY2FuQmVPcHRpbWl6ZWQoKSA/
IG9wX2VudGVyX2NhbkJlT3B0aW1pemVkX0dlbmVyYXRvciA6IG9wX2VudGVyX2Nhbm5vdEJlT3B0
aW1pemVkX0dlbmVyYXRvcjsKKyAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bSgpLmdldENUSVN0dWIo
Z2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogI2VuZGlmIC8vIEVOQUJMRShF
WFRSQV9DVElfVEhVTktTKQogfQogCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi1NYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6b3BfZW50ZXJfaGFuZGxlckdl
bmVyYXRvcihWTSYgdm0pCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJ
VDo6b3BfZW50ZXJfR2VuZXJhdG9yKFZNJiB2bSwgYm9vbCBjYW5CZU9wdGltaXplZCwgY29uc3Qg
Y2hhciogdGh1bmtOYW1lKQogewotICAgIEpJVCBqaXQodm0pOwotCiAjaWYgQ1BVKFg4Nl82NCkK
LSAgICBqaXQucHVzaChYODZSZWdpc3RlcnM6OmVicCk7CisgICAgcHVzaChYODZSZWdpc3RlcnM6
OmVicCk7CiAjZWxpZiBDUFUoQVJNNjQpCi0gICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKLSAg
ICBqaXQucHVzaFBhaXIoZnJhbWVQb2ludGVyUmVnaXN0ZXIsIGxpbmtSZWdpc3Rlcik7CisgICAg
dGFnUmV0dXJuQWRkcmVzcygpOworICAgIHB1c2hQYWlyKGZyYW1lUG9pbnRlclJlZ2lzdGVyLCBs
aW5rUmVnaXN0ZXIpOwogI2VuZGlmCiAgICAgLy8gb3BfZW50ZXIgaXMgYWx3YXlzIGF0IGJ5dGVj
b2RlT2Zmc2V0IDAuCi0gICAgaml0LnN0b3JlMzIoVHJ1c3RlZEltbTMyKDApLCB0YWdGb3IoQ2Fs
bEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKTsKKyAgICBzdG9yZTMyKFRy
dXN0ZWRJbW0zMigwKSwgdGFnRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzKSk7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIGxvY2Fsc1RvSW5pdEdQUiA9IGFyZ3Vt
ZW50R1BSMDsKICAgICBjb25zdGV4cHIgR1BSUmVnIGl0ZXJhdG9yR1BSID0gYXJndW1lbnRHUFIx
OwogICAgIGNvbnN0ZXhwciBHUFJSZWcgZW5kR1BSID0gYXJndW1lbnRHUFIyOwogICAgIGNvbnN0
ZXhwciBHUFJSZWcgdW5kZWZpbmVkR1BSID0gYXJndW1lbnRHUFIzOwotICAgIGNvbnN0ZXhwciBH
UFJSZWcgY2FuQmVPcHRpbWl6ZWRHUFIgPSBhcmd1bWVudEdQUjQ7CisgICAgY29uc3RleHByIEdQ
UlJlZyBjb2RlQmxvY2tHUFIgPSBhcmd1bWVudEdQUjQ7CisKKyAgICBjb25zdGV4cHIgaW50IHZp
cnR1YWxSZWdpc3RlclNpemVTaGlmdCA9IDM7CisgICAgc3RhdGljX2Fzc2VydCgoMSA8PCB2aXJ0
dWFsUmVnaXN0ZXJTaXplU2hpZnQpID09IHNpemVvZihSZWdpc3RlcikpOworCisgICAgbG9hZFB0
cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIGNvZGVCbG9ja0dQUik7Cisg
ICAgbG9hZDMyKEFkZHJlc3MoY29kZUJsb2NrR1BSLCBDb2RlQmxvY2s6Om9mZnNldE9mTnVtVmFy
cygpKSwgbG9jYWxzVG9Jbml0R1BSKTsKKyAgICBzdWIzMihUcnVzdGVkSW1tMzIoQ29kZUJsb2Nr
OjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCkpLCBsb2Nh
bHNUb0luaXRHUFIpOworICAgIGxzaGlmdDMyKFRydXN0ZWRJbW0zMih2aXJ0dWFsUmVnaXN0ZXJT
aXplU2hpZnQpLCBsb2NhbHNUb0luaXRHUFIpOwogCiAgICAgc2l6ZV90IHN0YXJ0TG9jYWwgPSBD
b2RlQmxvY2s6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMo
KTsKICAgICBpbnQgc3RhcnRPZmZzZXQgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChzdGFydExv
Y2FsKS5vZmZzZXQoKTsKLSAgICBqaXQubW92ZShUcnVzdGVkSW1tNjQoc3RhcnRPZmZzZXQgKiBz
aXplb2YoUmVnaXN0ZXIpKSwgaXRlcmF0b3JHUFIpOwotICAgIGppdC5zdWI2NChpdGVyYXRvckdQ
UiwgbG9jYWxzVG9Jbml0R1BSLCBlbmRHUFIpOworICAgIG1vdmUoVHJ1c3RlZEltbTY0KHN0YXJ0
T2Zmc2V0ICogc2l6ZW9mKFJlZ2lzdGVyKSksIGl0ZXJhdG9yR1BSKTsKKyAgICBzdWI2NChpdGVy
YXRvckdQUiwgbG9jYWxzVG9Jbml0R1BSLCBlbmRHUFIpOwogCi0gICAgaml0Lm1vdmUoVHJ1c3Rl
ZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKSksIHVuZGVmaW5lZEdQUik7Ci0g
ICAgYXV0byBpbml0TG9vcCA9IGppdC5sYWJlbCgpOwotICAgIEp1bXAgaW5pdERvbmUgPSBqaXQu
YnJhbmNoMzIoTGVzc1RoYW5PckVxdWFsLCBpdGVyYXRvckdQUiwgZW5kR1BSKTsKKyAgICBtb3Zl
KFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSkpLCB1bmRlZmluZWRH
UFIpOworICAgIGF1dG8gaW5pdExvb3AgPSBsYWJlbCgpOworICAgIEp1bXAgaW5pdERvbmUgPSBi
cmFuY2gzMihMZXNzVGhhbk9yRXF1YWwsIGl0ZXJhdG9yR1BSLCBlbmRHUFIpOwogICAgIHsKLSAg
ICAgICAgaml0LnN0b3JlNjQodW5kZWZpbmVkR1BSLCBCYXNlSW5kZXgoR1BSSW5mbzo6Y2FsbEZy
YW1lUmVnaXN0ZXIsIGl0ZXJhdG9yR1BSLCBUaW1lc09uZSkpOwotICAgICAgICBqaXQuc3ViNjQo
VHJ1c3RlZEltbTMyKHNpemVvZihSZWdpc3RlcikpLCBpdGVyYXRvckdQUik7Ci0gICAgICAgIGpp
dC5qdW1wKGluaXRMb29wKTsKKyAgICAgICAgc3RvcmU2NCh1bmRlZmluZWRHUFIsIEJhc2VJbmRl
eChHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgaXRlcmF0b3JHUFIsIFRpbWVzT25lKSk7Cisg
ICAgICAgIHN1YjY0KFRydXN0ZWRJbW0zMihzaXplb2YoUmVnaXN0ZXIpKSwgaXRlcmF0b3JHUFIp
OworICAgICAgICBqdW1wKGluaXRMb29wKTsKICAgICB9Ci0gICAgaW5pdERvbmUubGluaygmaml0
KTsKKyAgICBpbml0RG9uZS5saW5rKHRoaXMpOwogCi0gICAgLy8gZW1pdFdyaXRlQmFycmllciht
X2NvZGVCbG9jaykuCi0gICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpj
b2RlQmxvY2spLCBhcmd1bWVudEdQUjEpOwotICAgIEp1bXAgb3duZXJJc1JlbWVtYmVyZWRPcklu
RWRlbiA9IGppdC5iYXJyaWVyQnJhbmNoKHZtLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7
CisgICAgLy8gSW1wbGVtZW50aW5nIGVtaXRXcml0ZUJhcnJpZXIobV9jb2RlQmxvY2spLgorICAg
IEp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9IGJhcnJpZXJCcmFuY2godm0sIGNvZGVC
bG9ja0dQUiwgYXJndW1lbnRHUFIyKTsKIAotICAgIGppdC5tb3ZlKGNhbkJlT3B0aW1pemVkR1BS
LCBHUFJJbmZvOjpudW1iZXJUYWdSZWdpc3Rlcik7IC8vIHNhdmUuCi0gICAgaml0LnNldHVwQXJn
dW1lbnRzPGRlY2x0eXBlKG9wZXJhdGlvbldyaXRlQmFycmllclNsb3dQYXRoKT4oJnZtLCBhcmd1
bWVudEdQUjEpOwotICAgIGppdC5wcmVwYXJlQ2FsbE9wZXJhdGlvbih2bSk7Ci0gICAgQ2FsbCBv
cGVyYXRpb25Xcml0ZUJhcnJpZXJDYWxsID0gaml0LmNhbGwoT3BlcmF0aW9uUHRyVGFnKTsKKyAg
ICBzZXR1cEFyZ3VtZW50czxkZWNsdHlwZShvcGVyYXRpb25Xcml0ZUJhcnJpZXJTbG93UGF0aCk+
KCZ2bSwgY29kZUJsb2NrR1BSKTsKKyAgICBwcmVwYXJlQ2FsbE9wZXJhdGlvbih2bSk7CisgICAg
Q2FsbCBvcGVyYXRpb25Xcml0ZUJhcnJpZXJDYWxsID0gY2FsbChPcGVyYXRpb25QdHJUYWcpOwor
CisgICAgaWYgKGNhbkJlT3B0aW1pemVkKQorICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2Fs
bEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgY29kZUJsb2NrR1BSKTsKIAotICAgIGppdC5tb3ZlKEdQ
UkluZm86Om51bWJlclRhZ1JlZ2lzdGVyLCBjYW5CZU9wdGltaXplZEdQUik7IC8vIHJlc3RvcmUu
Ci0gICAgaml0Lm1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6Ok51bWJlclRhZyksIEdQUkluZm86
Om51bWJlclRhZ1JlZ2lzdGVyKTsKLSAgICBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuLmxpbmso
JmppdCk7CisgICAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbi5saW5rKHRoaXMpOwogCiAjaWYg
RU5BQkxFKERGR19KSVQpCisgICAgLy8gSW1wbGVtZW50aW5nIGVtaXRFbnRlck9wdGltaXphdGlv
bkNoZWNrKCkuCiAgICAgQ2FsbCBvcGVyYXRpb25PcHRpbWl6ZUNhbGw7Ci0gICAgaWYgKE9wdGlv
bnM6OnVzZURGR0pJVCgpKSB7Ci0gICAgICAgIC8vIGVtaXRFbnRlck9wdGltaXphdGlvbkNoZWNr
KCkuCisgICAgaWYgKGNhbkJlT3B0aW1pemVkKSB7CiAgICAgICAgIEp1bXBMaXN0IHNraXBPcHRp
bWl6ZTsKIAotICAgICAgICBza2lwT3B0aW1pemUuYXBwZW5kKGppdC5icmFuY2hUZXN0MzIoWmVy
bywgY2FuQmVPcHRpbWl6ZWRHUFIpKTsKLQotICAgICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9y
KENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIGFyZ3VtZW50R1BSMSk7Ci0gICAgICAgIHNraXBP
cHRpbWl6ZS5hcHBlbmQoaml0LmJyYW5jaEFkZDMyKFNpZ25lZCwgVHJ1c3RlZEltbTMyKE9wdGlv
bnM6OmV4ZWN1dGlvbkNvdW50ZXJJbmNyZW1lbnRGb3JFbnRyeSgpKSwgQWRkcmVzcyhhcmd1bWVu
dEdQUjEsIENvZGVCbG9jazo6b2Zmc2V0T2ZKSVRFeGVjdXRlQ291bnRlcigpKSkpOworICAgICAg
ICBza2lwT3B0aW1pemUuYXBwZW5kKGJyYW5jaEFkZDMyKFNpZ25lZCwgVHJ1c3RlZEltbTMyKE9w
dGlvbnM6OmV4ZWN1dGlvbkNvdW50ZXJJbmNyZW1lbnRGb3JFbnRyeSgpKSwgQWRkcmVzcyhjb2Rl
QmxvY2tHUFIsIENvZGVCbG9jazo6b2Zmc2V0T2ZKSVRFeGVjdXRlQ291bnRlcigpKSkpOwogCi0g
ICAgICAgIGppdC5jb3B5TExJbnRCYXNlbGluZUNhbGxlZVNhdmVzRnJvbUZyYW1lT3JSZWdpc3Rl
clRvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtLnRvcEVudHJ5RnJhbWUpOworICAgICAg
ICBjb3B5TExJbnRCYXNlbGluZUNhbGxlZVNhdmVzRnJvbUZyYW1lT3JSZWdpc3RlclRvRW50cnlG
cmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtLnRvcEVudHJ5RnJhbWUpOwogCi0gICAgICAgIGppdC5z
ZXR1cEFyZ3VtZW50czxkZWNsdHlwZShvcGVyYXRpb25PcHRpbWl6ZSk+KCZ2bSwgVHJ1c3RlZElt
bTMyKDApKTsKLSAgICAgICAgaml0LnByZXBhcmVDYWxsT3BlcmF0aW9uKHZtKTsKLSAgICAgICAg
b3BlcmF0aW9uT3B0aW1pemVDYWxsID0gaml0LmNhbGwoT3BlcmF0aW9uUHRyVGFnKTsKKyAgICAg
ICAgc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUob3BlcmF0aW9uT3B0aW1pemUpPigmdm0sIFRydXN0
ZWRJbW0zMigwKSk7CisgICAgICAgIHByZXBhcmVDYWxsT3BlcmF0aW9uKHZtKTsKKyAgICAgICAg
b3BlcmF0aW9uT3B0aW1pemVDYWxsID0gY2FsbChPcGVyYXRpb25QdHJUYWcpOwogCi0gICAgICAg
IHNraXBPcHRpbWl6ZS5hcHBlbmQoaml0LmJyYW5jaFRlc3RQdHIoWmVybywgcmV0dXJuVmFsdWVH
UFIpKTsKLSAgICAgICAgaml0LmZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEdQUkluZm86OmNhbGxG
cmFtZVJlZ2lzdGVyKTsKKyAgICAgICAgc2tpcE9wdGltaXplLmFwcGVuZChicmFuY2hUZXN0UHRy
KFplcm8sIHJldHVyblZhbHVlR1BSKSk7CisgICAgICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIs
IEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKIAotICAgICAgICBza2lwT3B0aW1pemUubGlu
aygmaml0KTsKKyAgICAgICAgc2tpcE9wdGltaXplLmxpbmsodGhpcyk7CiAgICAgfQogI2VuZGlm
IC8vIEVOQUJMRShERkdfSklUKQogCiAjaWYgQ1BVKFg4Nl82NCkKLSAgICBqaXQucG9wKFg4NlJl
Z2lzdGVyczo6ZWJwKTsKKyAgICBwb3AoWDg2UmVnaXN0ZXJzOjplYnApOwogI2VsaWYgQ1BVKEFS
TTY0KQotICAgIGppdC5wb3BQYWlyKGZyYW1lUG9pbnRlclJlZ2lzdGVyLCBsaW5rUmVnaXN0ZXIp
OworICAgIHBvcFBhaXIoZnJhbWVQb2ludGVyUmVnaXN0ZXIsIGxpbmtSZWdpc3Rlcik7CiAjZW5k
aWYKLSAgICBqaXQucmV0KCk7CisgICAgcmV0KCk7CiAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVm
ZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpFeHRyYUNUSVRo
dW5rKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp0aGlzLCBHTE9CQUxfVEhVTktfSUQs
IExpbmtCdWZmZXI6OlByb2ZpbGU6OkV4dHJhQ1RJVGh1bmspOwogICAgIHBhdGNoQnVmZmVyLmxp
bmsob3BlcmF0aW9uV3JpdGVCYXJyaWVyQ2FsbCwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFn
PihvcGVyYXRpb25Xcml0ZUJhcnJpZXJTbG93UGF0aCkpOwogI2lmIEVOQUJMRShERkdfSklUKQot
ICAgIGlmIChPcHRpb25zOjp1c2VERkdKSVQoKSkKKyAgICBpZiAoY2FuQmVPcHRpbWl6ZWQpCiAg
ICAgICAgIHBhdGNoQnVmZmVyLmxpbmsob3BlcmF0aW9uT3B0aW1pemVDYWxsLCBGdW5jdGlvblB0
cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbk9wdGltaXplKSk7CiAjZW5kaWYKLSAgICByZXR1
cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsICJCYXNlbGluZTog
b3BfZW50ZXJfaGFuZGxlciIpOworICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVy
LCBKSVRUaHVua1B0clRhZywgdGh1bmtOYW1lKTsKK30KKworTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFRodW5rUHRyVGFnPiBKSVQ6Om9wX2VudGVyX2NhbkJlT3B0aW1pemVkX0dlbmVyYXRvcihW
TSYgdm0pCit7CisgICAgSklUIGppdCh2bSk7CisgICAgY29uc3RleHByIGJvb2wgY2FuQmVPcHRp
bWl6ZWQgPSB0cnVlOworICAgIHJldHVybiBqaXQub3BfZW50ZXJfR2VuZXJhdG9yKHZtLCBjYW5C
ZU9wdGltaXplZCwgIkJhc2VsaW5lOiBvcF9lbnRlcl9jYW5CZU9wdGltaXplZCIpOworfQorCitN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6b3BfZW50ZXJfY2Fubm90
QmVPcHRpbWl6ZWRfR2VuZXJhdG9yKFZNJiB2bSkKK3sKKyAgICBKSVQgaml0KHZtKTsKKyAgICBj
b25zdGV4cHIgYm9vbCBjYW5CZU9wdGltaXplZCA9IGZhbHNlOworICAgIHJldHVybiBqaXQub3Bf
ZW50ZXJfR2VuZXJhdG9yKHZtLCBjYW5CZU9wdGltaXplZCwgIkJhc2VsaW5lOiBvcF9lbnRlcl9j
YW5ub3RCZU9wdGltaXplZCIpOwogfQogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktT
KQogCkBAIC0xNDE4LDkgKzE0MzAsMTAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNl
b2ZfY3VzdG9tKAogCiB2b2lkIEpJVDo6ZW1pdF9vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1Y3Rp
b24qIGluc3RydWN0aW9uKQogeworICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAjaWYgVVNFKEpT
VkFMVUU2NCkKICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6cmV0dXJuRWFybHlGcm9tSW5maW5p
dGVMb29wc0ZvckZ1enppbmcoKSAmJiBtX2NvZGVCbG9jay0+bG9vcEhpbnRzQXJlRWxpZ2libGVG
b3JGdXp6aW5nRWFybHlSZXR1cm4oKSkpIHsKLSAgICAgICAgdWludDY0X3QqIHB0ciA9IHZtKCku
Z2V0TG9vcEhpbnRFeGVjdXRpb25Db3VudGVyKGluc3RydWN0aW9uKTsKKyAgICAgICAgdWludDY0
X3QqIHB0ciA9IHZtLmdldExvb3BIaW50RXhlY3V0aW9uQ291bnRlcihpbnN0cnVjdGlvbik7CiAg
ICAgICAgIGxvYWQ2NChwdHIsIHJlZ1QwKTsKICAgICAgICAgYXV0byBza2lwRWFybHlSZXR1cm4g
PSBicmFuY2g2NChCZWxvdywgcmVnVDAsIFRydXN0ZWRJbW02NChPcHRpb25zOjplYXJseVJldHVy
bkZyb21JbmZpbml0ZUxvb3BzTGltaXQoKSkpOwogCkBAIC0xNDM2LDEzICsxNDQ5LDI3IEBAIHZv
aWQgSklUOjplbWl0X29wX2xvb3BfaGludChjb25zdCBJbnN0cnUKICAgICB9CiAjZW5kaWYKIAot
ICAgIC8vIEVtaXQgdGhlIEpJVCBvcHRpbWl6YXRpb24gY2hlY2s6IAorI2lmICFFTkFCTEUoRVhU
UkFfQ1RJX1RIVU5LUykKKyAgICAvLyBFbWl0IHRoZSBKSVQgb3B0aW1pemF0aW9uIGNoZWNrOgog
ICAgIGlmIChjYW5CZU9wdGltaXplZCgpKSB7CiAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaEFk
ZDMyKFBvc2l0aXZlT3JaZXJvLCBUcnVzdGVkSW1tMzIoT3B0aW9uczo6ZXhlY3V0aW9uQ291bnRl
ckluY3JlbWVudEZvckxvb3AoKSksCiAgICAgICAgICAgICBBYnNvbHV0ZUFkZHJlc3MobV9jb2Rl
QmxvY2stPmFkZHJlc3NPZkpJVEV4ZWN1dGVDb3VudGVyKCkpKSk7CiAgICAgfQorI2Vsc2UKKyAg
ICBpZiAoY2FuQmVPcHRpbWl6ZWQoKSkgeworICAgICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNl
dCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKKyAgICAgICAgQVNTRVJUKEJ5dGVjb2RlSW5k
ZXgoYnl0ZWNvZGVPZmZzZXQpID09IG1fYnl0ZWNvZGVJbmRleCk7CisgICAgICAgIEFTU0VSVCht
X2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgpID09IGluc3RydWN0aW9u
KTsKKworICAgICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDc7
CisKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9m
ZnNldEdQUik7CisgICAgICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIob3BfbG9v
cF9oaW50X0dlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKKyAgICB9CisjZW5k
aWYKIH0KIAorI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIHZvaWQgSklUOjplbWl0U2xv
d19vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKICNpZiBFTkFCTEUoREZHX0pJ
VCkKQEAgLTE0NzAsNiArMTQ5Nyw3NCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbG9vcF9oaW50
KGNvbnN0IEluCiAjZW5kaWYKIH0KIAorI2Vsc2UgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1Mp
CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gSklUOjpvcF9sb29wX2hpbnRfR2VuZXJhdG9yKFZNJiB2bSkKK3sKKyAgICAvLyBUaGUg
dGh1bmsgZ2VuZXJhdGVkIGJ5IHRoaXMgZnVuY3Rpb24gY2FuIG9ubHkgd29yayB3aXRoIHRoZSBM
TEludCAvIEJhc2VsaW5lIEpJVCBiZWNhdXNlCisgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMg
YWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJh
bWU6OmNvZGVCbG9jaygpLgorICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVs
b25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKKyAgICAv
LyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgorICAgIEpJVCBqaXQodm0pOworCisgICAgaml0LnRh
Z1JldHVybkFkZHJlc3MoKTsKKworICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRH
UFIgPSByZWdUNzsgLy8gaW5jb21pbmcuCisgICAgY29uc3RleHByIEdQUlJlZyBjb2RlQmxvY2tH
UFIgPSByZWdUNjsKKyAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNv
ZGVCbG9jayksIGNvZGVCbG9ja0dQUik7CisKKyAgICAvLyBFbWl0IHRoZSBKSVQgb3B0aW1pemF0
aW9uIGNoZWNrOgorICAgIEp1bXAgbmVlZE9wdGltaXphdGlvbkNoZWNrID0gaml0LmJyYW5jaEFk
ZDMyKFBvc2l0aXZlT3JaZXJvLCBUcnVzdGVkSW1tMzIoT3B0aW9uczo6ZXhlY3V0aW9uQ291bnRl
ckluY3JlbWVudEZvckxvb3AoKSksCisgICAgICAgICAgICBBZGRyZXNzKGNvZGVCbG9ja0dQUiwg
Q29kZUJsb2NrOjpvZmZzZXRPZkpJVEV4ZWN1dGVDb3VudGVyKCkpKTsKKyAgICBqaXQucmV0KCk7
CisKKyAgICBuZWVkT3B0aW1pemF0aW9uQ2hlY2subGluaygmaml0KTsKKyNpZiBDUFUoWDg2XzY0
KQorICAgIGppdC5wdXNoKGZyYW1lUG9pbnRlclJlZ2lzdGVyKTsKKyNlbGlmIENQVShBUk02NCkK
KyAgICBqaXQucHVzaFBhaXIoZnJhbWVQb2ludGVyUmVnaXN0ZXIsIGxpbmtSZWdpc3Rlcik7Cisj
ZW5kaWYKKworICAgIGF1dG8gdXNlZFJlZ2lzdGVycyA9IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFp
bGFibGVSZWdpc3RlcnMoKTsKKyAgICB1c2VkUmVnaXN0ZXJzLmFkZChieXRlY29kZU9mZnNldEdQ
Uik7CisgICAgaml0LmNvcHlMTEludEJhc2VsaW5lQ2FsbGVlU2F2ZXNGcm9tRnJhbWVPclJlZ2lz
dGVyVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0udG9wRW50cnlGcmFtZSwgdXNlZFJl
Z2lzdGVycyk7CisKKyAgICBqaXQuc3RvcmUzMihieXRlY29kZU9mZnNldEdQUiwgQ0NhbGxIZWxw
ZXJzOjp0YWdGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKTsK
KyAgICBqaXQubHNoaWZ0MzIoVHJ1c3RlZEltbTMyKEJ5dGVjb2RlSW5kZXg6OmNoZWNrcG9pbnRT
aGlmdCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKKyAgICBqaXQuc2V0dXBBcmd1bWVudHM8ZGVjbHR5
cGUob3BlcmF0aW9uT3B0aW1pemUpPihUcnVzdGVkSW1tUHRyKCZ2bSksIGJ5dGVjb2RlT2Zmc2V0
R1BSKTsKKyAgICBqaXQucHJlcGFyZUNhbGxPcGVyYXRpb24odm0pOworICAgIENhbGwgb3BlcmF0
aW9uQ2FsbCA9IGppdC5jYWxsKE9wZXJhdGlvblB0clRhZyk7CisgICAgSnVtcCBoYXNPcHRpbWl6
ZWRFbnRyeSA9IGppdC5icmFuY2hUZXN0UHRyKE5vblplcm8sIHJldHVyblZhbHVlR1BSKTsKKwor
I2lmIENQVShYODZfNjQpCisgICAgaml0LnBvcChmcmFtZVBvaW50ZXJSZWdpc3Rlcik7OworI2Vs
aWYgQ1BVKEFSTTY0KQorICAgIGppdC5wb3BQYWlyKGZyYW1lUG9pbnRlclJlZ2lzdGVyLCBsaW5r
UmVnaXN0ZXIpOworI2VuZGlmCisgICAgaml0LnJldCgpOworCisgICAgaGFzT3B0aW1pemVkRW50
cnkubGluaygmaml0KTsKKyNpZiBDUFUoWDg2XzY0KQorICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tMzIoMiAqIHNpemVvZihDUFVSZWdpc3RlcikpLCBzdGFja1BvaW50ZXJS
ZWdpc3Rlcik7CisjZWxpZiBDUFUoQVJNNjQpCisgICAgaml0LnBvcFBhaXIoZnJhbWVQb2ludGVy
UmVnaXN0ZXIsIGxpbmtSZWdpc3Rlcik7CisjZW5kaWYKKyAgICBpZiAoQVNTRVJUX0VOQUJMRUQp
IHsKKyAgICAgICAgSnVtcCBvayA9IGppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkFib3Zl
LCByZXR1cm5WYWx1ZUdQUiwgVHJ1c3RlZEltbVB0cihiaXR3aXNlX2Nhc3Q8dm9pZCo+KHN0YXRp
Y19jYXN0PGludHB0cl90PigxMDAwKSkpKTsKKyAgICAgICAgaml0LmFib3J0V2l0aFJlYXNvbihK
SVRVbnJlYXNvbmFibGVMb29wSGludEp1bXBUYXJnZXQpOworICAgICAgICBvay5saW5rKCZqaXQp
OworICAgIH0KKworICAgIGppdC5mYXJKdW1wKHJldHVyblZhbHVlR1BSLCBHUFJJbmZvOjpjYWxs
RnJhbWVSZWdpc3Rlcik7CisKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFM
X1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpFeHRyYUNUSVRodW5rKTsKKyAgICBwYXRj
aEJ1ZmZlci5saW5rKG9wZXJhdGlvbkNhbGwsIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4o
b3BlcmF0aW9uT3B0aW1pemUpKTsKKyAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZl
ciwgSklUVGh1bmtQdHJUYWcsICJCYXNlbGluZTogb3BfbG9vcF9oaW50Iik7Cit9CisjZW5kaWYg
Ly8gRU5BQkxFKERGR19KSVQpCisjZW5kaWYgLy8gIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQor
CiB2b2lkIEpJVDo6ZW1pdF9vcF9jaGVja190cmFwcyhjb25zdCBJbnN0cnVjdGlvbiopCiB7CiAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdDMyKE5vblplcm8sIEFic29sdXRlQWRkcmVzcyhtX3Zt
LT50cmFwcygpLnRyYXBCaXRzQWRkcmVzcygpKSwgVHJ1c3RlZEltbTMyKFZNVHJhcHM6OkFzeW5j
RXZlbnRzKSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRv
cnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5l
cmF0b3JzLmNwcAkocmV2aXNpb24gMjc4MjAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9UaHVua0dlbmVyYXRvcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MSwxMSArODEsNyBAQCBN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHBvCiB7CiAgICAgQ0NhbGxIZWxw
ZXJzIGppdDsKIAotI2lmIENQVShYODZfNjQpCi0gICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW0zMigyICogc2l6ZW9mKENQVVJlZ2lzdGVyKSksIFg4NlJlZ2lzdGVyczo6ZXNw
KTsKLSNlbGlmIENQVShBUk02NCkKLSAgICBqaXQucG9wUGFpcihDQ2FsbEhlbHBlcnM6OmZyYW1l
UG9pbnRlclJlZ2lzdGVyLCBDQ2FsbEhlbHBlcnM6OmxpbmtSZWdpc3Rlcik7Ci0jZW5kaWYKKyAg
ICBqaXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDIgKiBzaXplb2YoQ1BVUmVn
aXN0ZXIpKSwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAKICAgICBDQ2Fs
bEhlbHBlcnM6Okp1bXAgY29udGludWF0aW9uID0gaml0Lmp1bXAoKTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>430522</attachid>
            <date>2021-06-03 17:58:03 -0700</date>
            <delta_ts>2021-06-04 15:41:31 -0700</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-226375.patch</filename>
            <type>text/plain</type>
            <size>49908</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjc4NDI1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY0IEBA
CisyMDIxLTA2LTAzICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBQ
dXQgdGhlIEJhc2VsaW5lIEpJVCBwcm9sb2d1ZSBhbmQgb3BfbG9vcF9oaW50IGNvZGUgaW4gSklU
IHRodW5rcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIyNjM3NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFRoZSBwcm9sb2d1ZSB1c2VzIDEgb2YgOCBwb3NzaWJsZSBzcGVjaWFsaXplZCB0aHVua3MgdG8g
cmVkdWNlIHRoZSBuZWVkIHRvIHBhc3MKKyAgICAgICAgYXJndW1lbnRzLiAgVGhlIG9ubHkgbmVl
ZGVkIGFyZ3VtZW50IGlzIHRoZSBjb2RlQmxvY2sgcG9pbnRlci4KKyAgICAgICAgVGhlcmUgYXJl
IGFsc28gOCBhbmFsb2dvdXMgYXJpdHkgZml4dXAgcHJvbG9ndWVzIHRoYXQgd29yayBzaW1pbGFy
bHkuCisKKyAgICAgICAgVGhlIG9wX2xvb3BfaGludCBvbmx5IHRha2VzIDEgYXJndW1lbnQ6IHRo
ZSBieXRlY29kZSBvZmZzZXQuCisKKyAgICAgICAgQWxzbyBvcHRpbWl6ZWQgb3BfZW50ZXIgYSBi
aXQgbW9yZSBieSBlbGltaW5hdGluZyB0aGUgbmVlZCB0byBwYXNzIGFueQorICAgICAgICBhcmd1
bWVudHMgdG8gdGhlIHRodW5rLiAgbG9jYWxzVG9Jbml0R1BSIGlzIG5vdyBjb21wdXRlZCBpbiB0
aGUgdGh1bmsuCisgICAgICAgIGNhbkJlT3B0aW1pemVkIGlzIG9idmlhdGVkIGJ5IHVzaW5nIHNw
ZWNpYWxpemVkIHRodW5rcy4KKworICAgICAgICBBbHNvIG9wdGltaXplZCBBc3NlbWJseUhlbHBl
cnM6OmVtaXRTYXZlQ2FsbGVlU2F2ZXNGb3IoKSBhbmQKKyAgICAgICAgQXNzZW1ibHlIZWxwZXJz
OjplbWl0UmVzdG9yZUNhbGxlZVNhdmVzRm9yKCkgdG8gdXNlIHN0b3JlUGFpciBhbmQgbG9hZFBh
aXIKKyAgICAgICAgaW5zdHJ1Y3Rpb25zIHJlc3BlY3RpdmVseS4KKworICAgICAgICAqIGFzc2Vt
Ymxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmg6CisgICAgICAgIChKU0M6OkFic3RyYWN0TWFj
cm9Bc3NlbWJsZXI6OnVudGFnUmV0dXJuQWRkcmVzc1dpdGhvdXRFeHRyYVZhbGlkYXRpb24pOgor
ICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTTY0Lmg6CisgICAgICAgIChKU0M6
Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6Om5lZ2F0ZTY0KToKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFj
cm9Bc3NlbWJsZXJBUk02NEUuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NEU6
OnVudGFnUmV0dXJuQWRkcmVzcyk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjRF
Ojp1bnRhZ1JldHVybkFkZHJlc3NXaXRob3V0RXh0cmFWYWxpZGF0aW9uKToKKyAgICAgICAgKiBh
c3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3Nl
bWJsZXJYODZfNjQ6Om5lZ2F0ZTY0KToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suaDoK
KyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpvZmZzZXRPZk51bUNhbGxlZUxvY2Fscyk6CisgICAg
ICAgIChKU0M6OkNvZGVCbG9jazo6b2Zmc2V0T2ZOdW1WYXJzKToKKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjpvZmZzZXRPZkFyZ3VtZW50VmFsdWVQcm9maWxlcyk6CisgICAgICAgIChKU0M6OkNv
ZGVCbG9jazo6b2Zmc2V0T2ZTaG91bGRBbHdheXNCZUlubGluZWQpOgorICAgICAgICAqIGppdC9B
c3NlbWJseUhlbHBlcnMuaDoKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjplbWl0U2F2
ZUNhbGxlZVNhdmVzRm9yKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjplbWl0UmVz
dG9yZUNhbGxlZVNhdmVzRm9yKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjplbWl0
U2F2ZUNhbGxlZVNhdmVzRm9yQmFzZWxpbmVKSVQpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhl
bHBlcnM6OmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXNGb3JCYXNlbGluZUpJVCk6CisgICAgICAgICog
aml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMp
OgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbmcpOgor
ICAgICAgICAoSlNDOjpKSVQ6OnByb2xvZ3VlR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklU
Ojphcml0eUZpeHVwUHJvbG9ndWVHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZh
dGVDb21waWxlRXhjZXB0aW9uSGFuZGxlcnMpOgorICAgICAgICAqIGppdC9KSVQuaDoKKyAgICAg
ICAgKiBqaXQvSklUSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXROYWtlZE5lYXJD
YWxsKToKKyAgICAgICAgKiBqaXQvSklUT3Bjb2Rlcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6
b3BfcmV0X2hhbmRsZXJHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZW50
ZXIpOgorICAgICAgICAoSlNDOjpKSVQ6Om9wX2VudGVyX0dlbmVyYXRvcik6CisgICAgICAgIChK
U0M6OkpJVDo6b3BfZW50ZXJfY2FuQmVPcHRpbWl6ZWRfR2VuZXJhdG9yKToKKyAgICAgICAgKEpT
Qzo6SklUOjpvcF9lbnRlcl9jYW5ub3RCZU9wdGltaXplZF9HZW5lcmF0b3IpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfbG9vcF9oaW50KToKKyAgICAgICAgKEpTQzo6SklUOjpvcF9sb29w
X2hpbnRfR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUOjpvcF9lbnRlcl9oYW5kbGVyR2Vu
ZXJhdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvVGh1bmtHZW5lcmF0b3JzLmNwcDoKKyAg
ICAgICAgKEpTQzo6cG9wVGh1bmtTdGFja1ByZXNlcnZlc0FuZEhhbmRsZUV4Y2VwdGlvbkdlbmVy
YXRvcik6CisKIDIwMjEtMDYtMDMgIENvbW1pdCBRdWV1ZSAgPGNvbW1pdC1xdWV1ZUB3ZWJraXQu
b3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJldmVydGluZyByMjc4MzU2LgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3Jv
QXNzZW1ibGVyLmgJKHJldmlzaW9uIDI3ODQyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDAz
LDYgKzEwMDMsNyBAQCBwdWJsaWM6CiAKICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgdGFnUmV0dXJu
QWRkcmVzcygpIHsgfQogICAgIEFMV0FZU19JTkxJTkUgdm9pZCB1bnRhZ1JldHVybkFkZHJlc3Mo
UmVnaXN0ZXJJRCA9IFJlZ2lzdGVySUQ6OkludmFsaWRHUFJSZWcpIHsgfQorICAgIEFMV0FZU19J
TkxJTkUgdm9pZCB1bnRhZ1JldHVybkFkZHJlc3NXaXRob3V0RXh0cmFWYWxpZGF0aW9uKCkgeyB9
CiAKICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgdGFnUHRyKFB0clRhZywgUmVnaXN0ZXJJRCkgeyB9
CiAgICAgQUxXQVlTX0lOTElORSB2b2lkIHRhZ1B0cihSZWdpc3RlcklELCBSZWdpc3RlcklEKSB7
IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJB
Uk02NC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFj
cm9Bc3NlbWJsZXJBUk02NC5oCShyZXZpc2lvbiAyNzg0MjUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaAkod29ya2luZyBjb3B5KQpAQCAt
MjIzNSw2ICsyMjM1LDEyIEBAIHB1YmxpYzoKICAgICAgICAgb3JEb3VibGUob3AxLCBvcDIsIGRl
c3QpOwogICAgIH0KIAorICAgIHZvaWQgbmVnYXRlNjQoUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsK
KyAgICAgICAgbm90NjQoZGVzdCk7CisgICAgICAgIGFkZDY0KFRydXN0ZWRJbW0zMigxKSwgZGVz
dCk7CisgICAgfQorCiAgICAgdm9pZCBuZWdhdGVEb3VibGUoRlBSZWdpc3RlcklEIHNyYywgRlBS
ZWdpc3RlcklEIGRlc3QpCiAgICAgewogICAgICAgICBtX2Fzc2VtYmxlci5mbmVnPDY0PihkZXN0
LCBzcmMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2Vt
YmxlckFSTTY0RS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvTWFjcm9Bc3NlbWJsZXJBUk02NEUuaAkocmV2aXNpb24gMjc4NDI1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTTY0RS5oCSh3b3JraW5nIGNv
cHkpCkBAIC01NCwxMCArNTQsMTUgQEAgcHVibGljOgogCiAgICAgQUxXQVlTX0lOTElORSB2b2lk
IHVudGFnUmV0dXJuQWRkcmVzcyhSZWdpc3RlcklEIHNjcmF0Y2ggPSBJbnZhbGlkR1BSKQogICAg
IHsKLSAgICAgICAgdW50YWdQdHIoQVJNNjRSZWdpc3RlcnM6OnNwLCBBUk02NFJlZ2lzdGVyczo6
bHIpOworICAgICAgICB1bnRhZ1JldHVybkFkZHJlc3NXaXRob3V0RXh0cmFWYWxpZGF0aW9uKCk7
CiAgICAgICAgIHZhbGlkYXRlVW50YWdnZWRQdHIoQVJNNjRSZWdpc3RlcnM6OmxyLCBzY3JhdGNo
KTsKICAgICB9CiAKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgdW50YWdSZXR1cm5BZGRyZXNzV2l0
aG91dEV4dHJhVmFsaWRhdGlvbigpCisgICAgeworICAgICAgICB1bnRhZ1B0cihBUk02NFJlZ2lz
dGVyczo6c3AsIEFSTTY0UmVnaXN0ZXJzOjpscik7CisgICAgfQorCiAgICAgQUxXQVlTX0lOTElO
RSB2b2lkIHRhZ1B0cihQdHJUYWcgdGFnLCBSZWdpc3RlcklEIHRhcmdldCkKICAgICB7CiAgICAg
ICAgIGF1dG8gdGFnR1BSID0gZ2V0Q2FjaGVkRGF0YVRlbXBSZWdpc3RlcklEQW5kSW52YWxpZGF0
ZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxl
clg4Nl82NC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
TWFjcm9Bc3NlbWJsZXJYODZfNjQuaAkocmV2aXNpb24gMjc4NDI1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oCSh3b3JraW5nIGNvcHkp
CkBAIC05MTgsNiArOTE4LDEyIEBAIHB1YmxpYzoKICAgICAgICAgbV9hc3NlbWJsZXIubm90cV9t
KGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UsIGRlc3QuaW5kZXgsIGRlc3Quc2NhbGUpOwogICAgIH0K
IAorICAgIHZvaWQgbmVnYXRlNjQoUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbm90
NjQoZGVzdCk7CisgICAgICAgIGFkZDY0KFRydXN0ZWRJbW0zMigxKSwgZGVzdCk7CisgICAgfQor
CiAgICAgdm9pZCBsb2FkNjQoSW1wbGljaXRBZGRyZXNzIGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVz
dCkKICAgICB7CiAgICAgICAgIG1fYXNzZW1ibGVyLm1vdnFfbXIoYWRkcmVzcy5vZmZzZXQsIGFk
ZHJlc3MuYmFzZSwgZGVzdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5oCShyZXZpc2lvbiAyNzg0MjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTE2OSw3ICsxNjksMTAgQEAg
cHVibGljOgogICAgIHVuc2lnbmVkIG51bVRtcHMoKSBjb25zdCB7IHJldHVybiBtX3VubGlua2Vk
Q29kZS0+aGFzQ2hlY2twb2ludHMoKSAqIG1heE51bUNoZWNrcG9pbnRUbXBzOyB9CiAKICAgICB1
bnNpZ25lZCogYWRkcmVzc09mTnVtUGFyYW1ldGVycygpIHsgcmV0dXJuICZtX251bVBhcmFtZXRl
cnM7IH0KKworICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZOdW1DYWxsZWVMb2NhbHMoKSB7
IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX251bUNhbGxlZUxvY2Fscyk7IH0K
ICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTnVtUGFyYW1ldGVycygpIHsgcmV0dXJuIE9C
SkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1fbnVtUGFyYW1ldGVycyk7IH0KKyAgICBzdGF0aWMg
cHRyZGlmZl90IG9mZnNldE9mTnVtVmFycygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2Rl
QmxvY2ssIG1fbnVtVmFycyk7IH0KIAogICAgIENvZGVCbG9jayogYWx0ZXJuYXRpdmUoKSBjb25z
dCB7IHJldHVybiBzdGF0aWNfY2FzdDxDb2RlQmxvY2sqPihtX2FsdGVybmF0aXZlLmdldCgpKTsg
fQogICAgIHZvaWQgc2V0QWx0ZXJuYXRpdmUoVk0mLCBDb2RlQmxvY2sqKTsKQEAgLTQ4Niw2ICs0
ODksOCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCisgICAgc3Rh
dGljIHB0cmRpZmZfdCBvZmZzZXRPZkFyZ3VtZW50VmFsdWVQcm9maWxlcygpIHsgcmV0dXJuIE9C
SkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1fYXJndW1lbnRWYWx1ZVByb2ZpbGVzKTsgfQorCiAg
ICAgVmFsdWVQcm9maWxlJiB2YWx1ZVByb2ZpbGVGb3JCeXRlY29kZUluZGV4KEJ5dGVjb2RlSW5k
ZXgpOwogICAgIFNwZWN1bGF0ZWRUeXBlIHZhbHVlUHJvZmlsZVByZWRpY3Rpb25Gb3JCeXRlY29k
ZUluZGV4KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIEJ5dGVjb2RlSW5kZXgpOwogCkBAIC04
MTksNyArODI0LDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIGJvb2wgd2FzQ29tcGlsZWRXaXRo
RGVidWdnaW5nT3Bjb2RlcygpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT53YXNDb21w
aWxlZFdpdGhEZWJ1Z2dpbmdPcGNvZGVzKCk7IH0KLSAgICAKKwogICAgIC8vIFRoaXMgaXMgaW50
ZW50aW9uYWxseSBwdWJsaWM7IGl0J3MgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIGFueW9uZSBkb2lu
ZyBhbnkKICAgICAvLyBvZiB0aGUgZm9sbG93aW5nIHRvIGhvbGQgdGhlIGxvY2s6CiAgICAgLy8K
QEAgLTkwNiw2ICs5MTEsNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNl
dE9mTWV0YWRhdGFUYWJsZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1f
bWV0YWRhdGEpOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkluc3RydWN0aW9uc1Jh
d1BvaW50ZXIoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2luc3RydWN0
aW9uc1Jhd1BvaW50ZXIpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlNob3VsZEFs
d2F5c0JlSW5saW5lZCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1fc2hv
dWxkQWx3YXlzQmVJbmxpbmVkKTsgfQogCiAgICAgYm9vbCBsb29wSGludHNBcmVFbGlnaWJsZUZv
ckZ1enppbmdFYXJseVJldHVybigpCiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9Bc3NlbWJseUhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCShyZXZpc2lvbiAyNzg0MjUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMjYs
MTUgKzMyNiw0NyBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVChjb2RlQmxvY2spOwogCiAgICAg
ICAgIGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiBjYWxsZWVTYXZlcyA9IGNvZGVCbG9jay0+
Y2FsbGVlU2F2ZVJlZ2lzdGVycygpOworICAgICAgICBlbWl0U2F2ZUNhbGxlZVNhdmVzRm9yKGNh
bGxlZVNhdmVzKTsKKyAgICB9CisKKyAgICB2b2lkIGVtaXRTYXZlQ2FsbGVlU2F2ZXNGb3IoY29u
c3QgUmVnaXN0ZXJBdE9mZnNldExpc3QqIGNhbGxlZVNhdmVzKQorICAgIHsKICAgICAgICAgUmVn
aXN0ZXJTZXQgZG9udFNhdmVSZWdpc3RlcnMgPSBSZWdpc3RlclNldChSZWdpc3RlclNldDo6c3Rh
Y2tSZWdpc3RlcnMoKSwgUmVnaXN0ZXJTZXQ6OmFsbEZQUnMoKSk7CiAgICAgICAgIHVuc2lnbmVk
IHJlZ2lzdGVyQ291bnQgPSBjYWxsZWVTYXZlcy0+c2l6ZSgpOwogCisjaWYgQ1BVKEFSTTY0KQor
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVnaXN0ZXJDb3VudDspIHsKKyAgICAg
ICAgICAgIGF1dG8gZ2V0UmVnaXN0ZXIgPSBbJl0gKCkgLT4gUmVnaXN0ZXJBdE9mZnNldCB7Cisg
ICAgICAgICAgICAgICAgd2hpbGUgKGkgPCByZWdpc3RlckNvdW50KSB7CisgICAgICAgICAgICAg
ICAgICAgIFJlZ2lzdGVyQXRPZmZzZXQgZW50cnkgPSBjYWxsZWVTYXZlcy0+YXQoaSsrKTsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKCFkb250U2F2ZVJlZ2lzdGVycy5nZXQoZW50cnkucmVnKCkp
KQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVudHJ5OworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICByZXR1cm4geyB9OworICAgICAgICAgICAgfTsKKworICAgICAg
ICAgICAgUmVnaXN0ZXJBdE9mZnNldCBlbnRyeTEgPSBnZXRSZWdpc3RlcigpOworICAgICAgICAg
ICAgUmVnaXN0ZXJBdE9mZnNldCBlbnRyeTIgPSBnZXRSZWdpc3RlcigpOworICAgICAgICAgICAg
aWYgKCFlbnRyeTEucmVnKCkuaXNTZXQoKSkgeworICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKGkgPT0gcmVnaXN0ZXJDb3VudCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBpZiAoIWVudHJ5Mi5yZWcoKS5pc1NldCgpKSB7CisgICAgICAg
ICAgICAgICAgc3RvcmVQdHIoZW50cnkxLnJlZygpLmdwcigpLCBBZGRyZXNzKGZyYW1lUG9pbnRl
clJlZ2lzdGVyLCBlbnRyeTEub2Zmc2V0KCkpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGVudHJ5Mi5vZmZzZXQoKSA9
PSBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KGVudHJ5MS5vZmZzZXQoKSArIHNpemVvZihDUFVSZWdp
c3RlcikpKTsKKworICAgICAgICAgICAgc3RvcmVQYWlyNjQoZW50cnkxLnJlZygpLmdwcigpLCBl
bnRyeTIucmVnKCkuZ3ByKCksIGZyYW1lUG9pbnRlclJlZ2lzdGVyLCBUcnVzdGVkSW1tMzIoZW50
cnkxLm9mZnNldCgpKSk7CisgICAgICAgIH0KKyNlbHNlCiAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCByZWdpc3RlckNvdW50OyBpKyspIHsKICAgICAgICAgICAgIFJlZ2lzdGVyQXRP
ZmZzZXQgZW50cnkgPSBjYWxsZWVTYXZlcy0+YXQoaSk7CiAgICAgICAgICAgICBpZiAoZG9udFNh
dmVSZWdpc3RlcnMuZ2V0KGVudHJ5LnJlZygpKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgICAgIHN0b3JlUHRyKGVudHJ5LnJlZygpLmdwcigpLCBBZGRyZXNzKGZyYW1lUG9p
bnRlclJlZ2lzdGVyLCBlbnRyeS5vZmZzZXQoKSkpOwogICAgICAgICB9CisjZW5kaWYKICAgICB9
CiAgICAgCiAgICAgZW51bSBSZXN0b3JlVGFnUmVnaXN0ZXJNb2RlIHsgVXNlRXhpc3RpbmdUYWdS
ZWdpc3RlckNvbnRlbnRzLCBDb3B5QmFzZWxpbmVDYWxsZWVTYXZlZFJlZ2lzdGVyc0Zyb21CYXNl
RnJhbWUgfTsKQEAgLTM4NiwxMiArNDE4LDM5IEBAIHB1YmxpYzoKICAgICAgICAgUmVnaXN0ZXJT
ZXQgZG9udFJlc3RvcmVSZWdpc3RlcnMgPSBSZWdpc3RlclNldChSZWdpc3RlclNldDo6c3RhY2tS
ZWdpc3RlcnMoKSwgUmVnaXN0ZXJTZXQ6OmFsbEZQUnMoKSk7CiAgICAgICAgIHVuc2lnbmVkIHJl
Z2lzdGVyQ291bnQgPSBjYWxsZWVTYXZlcy0+c2l6ZSgpOwogICAgICAgICAKKyNpZiBDUFUoQVJN
NjQpCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZWdpc3RlckNvdW50Oykgewor
ICAgICAgICAgICAgYXV0byBnZXRSZWdpc3RlciA9IFsmXSAoKSAtPiBSZWdpc3RlckF0T2Zmc2V0
IHsKKyAgICAgICAgICAgICAgICB3aGlsZSAoaSA8IHJlZ2lzdGVyQ291bnQpIHsKKyAgICAgICAg
ICAgICAgICAgICAgUmVnaXN0ZXJBdE9mZnNldCBlbnRyeSA9IGNhbGxlZVNhdmVzLT5hdChpKysp
OworICAgICAgICAgICAgICAgICAgICBpZiAoIWRvbnRSZXN0b3JlUmVnaXN0ZXJzLmdldChlbnRy
eS5yZWcoKSkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZW50cnk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiB7IH07CisgICAgICAgICAgICB9Owor
CisgICAgICAgICAgICBSZWdpc3RlckF0T2Zmc2V0IGVudHJ5MSA9IGdldFJlZ2lzdGVyKCk7Cisg
ICAgICAgICAgICBSZWdpc3RlckF0T2Zmc2V0IGVudHJ5MiA9IGdldFJlZ2lzdGVyKCk7CisgICAg
ICAgICAgICBpZiAoIWVudHJ5MS5yZWcoKS5pc1NldCgpKSB7CisgICAgICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQoaSA9PSByZWdpc3RlckNvdW50KTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghZW50cnkyLnJlZygpLmlzU2V0KCkpIHsK
KyAgICAgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MoZnJhbWVQb2ludGVyUmVnaXN0ZXIsIGVu
dHJ5MS5vZmZzZXQoKSksIGVudHJ5MS5yZWcoKS5ncHIoKSk7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChlbnRyeTIub2Zm
c2V0KCkgPT0gc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihlbnRyeTEub2Zmc2V0KCkgKyBzaXplb2Yo
Q1BVUmVnaXN0ZXIpKSk7CisKKyAgICAgICAgICAgIGxvYWRQYWlyNjQoZnJhbWVQb2ludGVyUmVn
aXN0ZXIsIFRydXN0ZWRJbW0zMihlbnRyeTEub2Zmc2V0KCkpLCBlbnRyeTEucmVnKCkuZ3ByKCks
IGVudHJ5Mi5yZWcoKS5ncHIoKSk7CisgICAgICAgIH0KKyNlbHNlCiAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCByZWdpc3RlckNvdW50OyBpKyspIHsKICAgICAgICAgICAgIFJlZ2lz
dGVyQXRPZmZzZXQgZW50cnkgPSBjYWxsZWVTYXZlcy0+YXQoaSk7CiAgICAgICAgICAgICBpZiAo
ZG9udFJlc3RvcmVSZWdpc3RlcnMuZ2V0KGVudHJ5LnJlZygpKSkKICAgICAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhmcmFtZVBvaW50ZXJSZWdpc3Rl
ciwgZW50cnkub2Zmc2V0KCkpLCBlbnRyeS5yZWcoKS5ncHIoKSk7CiAgICAgICAgIH0KKyNlbmRp
ZgogICAgIH0KIAogICAgIHZvaWQgZW1pdFNhdmVDYWxsZWVTYXZlcygpCkBAIC0zOTksNiArNDU4
LDExIEBAIHB1YmxpYzoKICAgICAgICAgZW1pdFNhdmVDYWxsZWVTYXZlc0Zvcihjb2RlQmxvY2so
KSk7CiAgICAgfQogCisgICAgdm9pZCBlbWl0U2F2ZUNhbGxlZVNhdmVzRm9yQmFzZWxpbmVKSVQo
KQorICAgIHsKKyAgICAgICAgZW1pdFNhdmVDYWxsZWVTYXZlc0ZvcigmUmVnaXN0ZXJBdE9mZnNl
dExpc3Q6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOworICAgIH0KKwogICAg
IHZvaWQgZW1pdFNhdmVUaGVuTWF0ZXJpYWxpemVUYWdSZWdpc3RlcnMoKQogICAgIHsKICNpZiBV
U0UoSlNWQUxVRTY0KQpAQCAtNDE3LDYgKzQ4MSwxMSBAQCBwdWJsaWM6CiAgICAgICAgIGVtaXRS
ZXN0b3JlQ2FsbGVlU2F2ZXNGb3IoY29kZUJsb2NrKCkpOwogICAgIH0KIAorICAgIHZvaWQgZW1p
dFJlc3RvcmVDYWxsZWVTYXZlc0ZvckJhc2VsaW5lSklUKCkKKyAgICB7CisgICAgICAgIGVtaXRS
ZXN0b3JlQ2FsbGVlU2F2ZXNGb3IoJlJlZ2lzdGVyQXRPZmZzZXRMaXN0OjpsbGludEJhc2VsaW5l
Q2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKKyAgICB9CisKICAgICB2b2lkIGVtaXRSZXN0b3JlU2F2
ZWRUYWdSZWdpc3RlcnMoKQogICAgIHsKICNpZiBVU0UoSlNWQUxVRTY0KQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklULmNwcAkocmV2aXNpb24gMjc4NDI1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Myw3ICs4Myw3IEBAIEpJVDo6
fkpJVCgpCiB7CiB9CiAKLSNpZiBFTkFCTEUoREZHX0pJVCkKKyNpZiBFTkFCTEUoREZHX0pJVCkg
JiYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogdm9pZCBKSVQ6OmVtaXRFbnRlck9wdGltaXph
dGlvbkNoZWNrKCkKIHsKICAgICBpZiAoIWNhbkJlT3B0aW1pemVkKCkpCkBAIC0xMDEsNyArMTAx
LDcgQEAgdm9pZCBKSVQ6OmVtaXRFbnRlck9wdGltaXphdGlvbkNoZWNrKCkKICAgICBmYXJKdW1w
KHJldHVyblZhbHVlR1BSLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CiAgICAgc2tpcE9w
dGltaXplLmxpbmsodGhpcyk7CiB9Ci0jZW5kaWYKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkg
JiYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKSgKIAogdm9pZCBKSVQ6OmVtaXROb3RpZnlXcml0
ZShXYXRjaHBvaW50U2V0KiBzZXQpCiB7CkBAIC01OTEsNyArNTkxLDkgQEAgdm9pZCBKSVQ6OnBy
aXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2pu
ZXEpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9qc3RyaWN0ZXEpCiAgICAgICAgIERF
RklORV9TTE9XQ0FTRV9PUChvcF9qbnN0cmljdGVxKQorI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RI
VU5LUykKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2xvb3BfaGludCkKKyNlbmRpZgog
ICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfY2hlY2tfdHJhcHMpCiAgICAgICAgIERFRklO
RV9TTE9XQ0FTRV9PUChvcF9tb2QpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9tdWwp
CkBAIC02ODAsNiArNjgyLDI3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygp
CiAjZW5kaWYKIH0KIAorI2RlZmluZSBGT1JfRUFDSF9OT05fUFJPRklMSU5HX1BST0xPR1VFX0dF
TkVSQVRPUih2KSBcCisgICAgdighZG9lc1Byb2ZpbGluZywgIWlzQ29uc3RydWN0b3IsICFoYXNI
dWdlRnJhbWUsIHByb2xvZ3VlR2VuZXJhdG9yMCwgYXJpdHlGaXh1cF9wcm9sb2d1ZUdlbmVyYXRv
cjApIFwKKyAgICB2KCFkb2VzUHJvZmlsaW5nLCAhaXNDb25zdHJ1Y3RvciwgIGhhc0h1Z2VGcmFt
ZSwgcHJvbG9ndWVHZW5lcmF0b3IxLCBhcml0eUZpeHVwX3Byb2xvZ3VlR2VuZXJhdG9yMSkgXAor
ICAgIHYoIWRvZXNQcm9maWxpbmcsICBpc0NvbnN0cnVjdG9yLCAhaGFzSHVnZUZyYW1lLCBwcm9s
b2d1ZUdlbmVyYXRvcjIsIGFyaXR5Rml4dXBfcHJvbG9ndWVHZW5lcmF0b3IyKSBcCisgICAgdigh
ZG9lc1Byb2ZpbGluZywgIGlzQ29uc3RydWN0b3IsICBoYXNIdWdlRnJhbWUsIHByb2xvZ3VlR2Vu
ZXJhdG9yMywgYXJpdHlGaXh1cF9wcm9sb2d1ZUdlbmVyYXRvcjMpCisKKyNpZiBFTkFCTEUoREZH
X0pJVCkKKyNkZWZpbmUgRk9SX0VBQ0hfUFJPRklMSU5HX1BST0xPR1VFX0dFTkVSQVRPUih2KSBc
CisgICAgdiggZG9lc1Byb2ZpbGluZywgIWlzQ29uc3RydWN0b3IsICFoYXNIdWdlRnJhbWUsIHBy
b2xvZ3VlR2VuZXJhdG9yNCwgYXJpdHlGaXh1cF9wcm9sb2d1ZUdlbmVyYXRvcjQpIFwKKyAgICB2
KCBkb2VzUHJvZmlsaW5nLCAhaXNDb25zdHJ1Y3RvciwgIGhhc0h1Z2VGcmFtZSwgcHJvbG9ndWVH
ZW5lcmF0b3I1LCBhcml0eUZpeHVwX3Byb2xvZ3VlR2VuZXJhdG9yNSkgXAorICAgIHYoIGRvZXNQ
cm9maWxpbmcsICBpc0NvbnN0cnVjdG9yLCAhaGFzSHVnZUZyYW1lLCBwcm9sb2d1ZUdlbmVyYXRv
cjYsIGFyaXR5Rml4dXBfcHJvbG9ndWVHZW5lcmF0b3I2KSBcCisgICAgdiggZG9lc1Byb2ZpbGlu
ZywgIGlzQ29uc3RydWN0b3IsICBoYXNIdWdlRnJhbWUsIHByb2xvZ3VlR2VuZXJhdG9yNywgYXJp
dHlGaXh1cF9wcm9sb2d1ZUdlbmVyYXRvcjcpCisKKyNlbHNlIC8vIG5vdCBFTkFCTEUoREZHX0pJ
VCkKKyNkZWZpbmUgRk9SX0VBQ0hfUFJPRklMSU5HX1BST0xPR1VFX0dFTkVSQVRPUih2KQorI2Vu
ZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZGVmaW5lIEZPUl9FQUNIX1BST0xPR1VFX0dFTkVS
QVRPUih2KSBcCisgICAgRk9SX0VBQ0hfTk9OX1BST0ZJTElOR19QUk9MT0dVRV9HRU5FUkFUT1Io
dikgXAorICAgIEZPUl9FQUNIX1BST0ZJTElOR19QUk9MT0dVRV9HRU5FUkFUT1IodikKKwogdm9p
ZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbmcoSklUQ29tcGlsYXRpb25FZmZv
cnQgZWZmb3J0KQogewogICAgIERGRzo6Q2FwYWJpbGl0eUxldmVsIGxldmVsID0gbV9jb2RlQmxv
Y2stPmNhcGFiaWxpdHlMZXZlbCgpOwpAQCAtNzQ4LDYgKzc3MSw4IEBAIHZvaWQgSklUOjpjb21w
aWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW4KICAgICAgICAgbm9wKCk7CiAKICAgICBlbWl0RnVu
Y3Rpb25Qcm9sb2d1ZSgpOworCisjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogICAgIGVt
aXRQdXRUb0NhbGxGcmFtZUhlYWRlcihtX2NvZGVCbG9jaywgQ2FsbEZyYW1lU2xvdDo6Y29kZUJs
b2NrKTsKIAogICAgIExhYmVsIGJlZ2luTGFiZWwodGhpcyk7CkBAIC03NjksMTEgKzc5NCwxMCBA
QCB2b2lkIEpJVDo6Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluCiAgICAgaWYgKG1fY29k
ZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSkgewogICAgICAgICBBU1NFUlQoIW1f
Ynl0ZWNvZGVJbmRleCk7CiAgICAgICAgIGlmIChzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKLSAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQgPSAwOyBhcmd1bWVudCA8IG1fY29kZUJs
b2NrLT5udW1QYXJhbWV0ZXJzKCk7ICsrYXJndW1lbnQpIHsKLSAgICAgICAgICAgICAgICAvLyBJ
ZiB0aGlzIGlzIGEgY29uc3RydWN0b3IsIHRoZW4gd2Ugd2FudCB0byBwdXQgaW4gYSBkdW1teSBw
cm9maWxpbmcgc2l0ZSAodG8KLSAgICAgICAgICAgICAgICAvLyBrZWVwIHRoaW5ncyBjb25zaXN0
ZW50KSBidXQgd2UgZG9uJ3QgYWN0dWFsbHkgd2FudCB0byByZWNvcmQgdGhlIGR1bW15IHZhbHVl
LgotICAgICAgICAgICAgICAgIGlmIChtX2NvZGVCbG9jay0+aXNDb25zdHJ1Y3RvcigpICYmICFh
cmd1bWVudCkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAvLyBJ
ZiB0aGlzIGlzIGEgY29uc3RydWN0b3IsIHRoZW4gd2Ugd2FudCB0byBwdXQgaW4gYSBkdW1teSBw
cm9maWxpbmcgc2l0ZSAodG8KKyAgICAgICAgICAgIC8vIGtlZXAgdGhpbmdzIGNvbnNpc3RlbnQp
IGJ1dCB3ZSBkb24ndCBhY3R1YWxseSB3YW50IHRvIHJlY29yZCB0aGUgZHVtbXkgdmFsdWUuCisg
ICAgICAgICAgICB1bnNpZ25lZCBzdGFydEFyZ3VtZW50ID0gbV9jb2RlQmxvY2stPmlzQ29uc3Ry
dWN0b3IoKSA/IDEgOiAwOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudCA9IHN0
YXJ0QXJndW1lbnQ7IGFyZ3VtZW50IDwgbV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKTsgKyth
cmd1bWVudCkgewogICAgICAgICAgICAgICAgIGludCBvZmZzZXQgPSBDYWxsRnJhbWU6OmFyZ3Vt
ZW50T2Zmc2V0SW5jbHVkaW5nVGhpcyhhcmd1bWVudCkgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVv
ZihSZWdpc3RlcikpOwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgICAgICAgICAgICAgSlNWYWx1
ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKQEAgLTc4Nyw3ICs4MTEsMzQg
QEAgdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbgogICAgICAgICAgICAg
fQogICAgICAgICB9CiAgICAgfQotICAgIAorI2Vsc2UgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVO
S1MpCisgICAgY29uc3RleHByIEdQUlJlZyBjb2RlQmxvY2tHUFIgPSByZWdUNzsKKyAgICBBU1NF
UlQoIW1fYnl0ZWNvZGVJbmRleCk7CisKKyAgICBpbnQgZnJhbWVUb3BPZmZzZXQgPSBzdGFja1Bv
aW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKTsKKyAgICB1bnNp
Z25lZCBtYXhGcmFtZVNpemUgPSAtZnJhbWVUb3BPZmZzZXQ7CisKKyAgICBib29sIGRvZXNQcm9m
aWxpbmcgPSAobV9jb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlKSAmJiBzaG91
bGRFbWl0UHJvZmlsaW5nKCk7CisgICAgYm9vbCBpc0NvbnN0cnVjdG9yID0gbV9jb2RlQmxvY2st
PmlzQ29uc3RydWN0b3IoKTsKKyAgICBib29sIGhhc0h1Z2VGcmFtZSA9IG1heEZyYW1lU2l6ZSA+
IE9wdGlvbnM6OnJlc2VydmVkWm9uZVNpemUoKTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgVGh1
bmtHZW5lcmF0b3IgZ2VuZXJhdG9yc1tdID0geworI2RlZmluZSBVU0VfUFJPTE9HVUVfR0VORVJB
VE9SKGRvZXNQcm9maWxpbmcsIGlzQ29uc3RydWN0b3IsIGhhc0h1Z2VGcmFtZSwgbmFtZSwgYXJp
dHlGaXh1cE5hbWUpIG5hbWUsCisgICAgICAgIEZPUl9FQUNIX1BST0xPR1VFX0dFTkVSQVRPUihV
U0VfUFJPTE9HVUVfR0VORVJBVE9SKQorI3VuZGVmIFVTRV9QUk9MT0dVRV9HRU5FUkFUT1IKKyAg
ICB9OworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbnVtYmVyT2ZHZW5lcmF0b3JzID0g
c2l6ZW9mKGdlbmVyYXRvcnMpIC8gc2l6ZW9mKGdlbmVyYXRvcnNbMF0pOworCisgICAgbW92ZShU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrKSwgY29kZUJsb2NrR1BSKTsKKworICAgIHVuc2lnbmVk
IGdlbmVyYXRvclNlbGVjdG9yID0gZG9lc1Byb2ZpbGluZyA8PCAyIHwgaXNDb25zdHJ1Y3RvciA8
PCAxIHwgaGFzSHVnZUZyYW1lIDw8IDA7CisgICAgUkVMRUFTRV9BU1NFUlQoZ2VuZXJhdG9yU2Vs
ZWN0b3IgPCBudW1iZXJPZkdlbmVyYXRvcnMpOworICAgIGF1dG8gZ2VuZXJhdG9yID0gZ2VuZXJh
dG9yc1tnZW5lcmF0b3JTZWxlY3Rvcl07CisgICAgZW1pdE5ha2VkTmVhckNhbGwodm0oKS5nZXRD
VElTdHViKGdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKKworICAgIExhYmVs
IGJvZHlMYWJlbCh0aGlzKTsKKyNlbmRpZiAvLyAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCisK
ICAgICBSRUxFQVNFX0FTU0VSVCghSklUQ29kZTo6aXNKSVQobV9jb2RlQmxvY2stPmppdFR5cGUo
KSkpOwogCiAgICAgaWYgKFVOTElLRUxZKHNpemVNYXJrZXIpKQpAQCAtODAxLDE2ICs4NTIsMTkg
QEAgdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbgogICAgICAgICBtX2Rp
c2Fzc2VtYmxlci0+c2V0RW5kT2ZTbG93UGF0aChsYWJlbCgpKTsKICAgICBtX3BjVG9Db2RlT3Jp
Z2luTWFwQnVpbGRlci5hcHBlbmRJdGVtKGxhYmVsKCksIFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRl
cjo6ZGVmYXVsdENvZGVPcmlnaW4oKSk7CiAKKyNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1Mp
CiAgICAgc3RhY2tPdmVyZmxvdy5saW5rKHRoaXMpOwogICAgIG1fYnl0ZWNvZGVJbmRleCA9IEJ5
dGVjb2RlSW5kZXgoMCk7CiAgICAgaWYgKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKQog
ICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC1zdGF0aWNfY2FzdDxpbnQzMl90PihtYXhGcmFt
ZUV4dGVudEZvclNsb3dQYXRoQ2FsbCkpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2Fs
bE9wZXJhdGlvbldpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKG9wZXJhdGlvblRocm93
U3RhY2tPdmVyZmxvd0Vycm9yLCBtX2NvZGVCbG9jayk7CisjZW5kaWYKIAogICAgIC8vIElmIHRo
ZSBudW1iZXIgb2YgcGFyYW1ldGVycyBpcyAxLCB3ZSBuZXZlciByZXF1aXJlIGFyaXR5IGZpeHVw
LgogICAgIGJvb2wgcmVxdWlyZXNBcml0eUZpeHVwID0gbV9jb2RlQmxvY2stPm1fbnVtUGFyYW1l
dGVycyAhPSAxOwogICAgIGlmIChtX2NvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNv
ZGUgJiYgcmVxdWlyZXNBcml0eUZpeHVwKSB7CiAgICAgICAgIG1fYXJpdHlDaGVjayA9IGxhYmVs
KCk7CisjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogICAgICAgICBzdG9yZTgoVHJ1c3Rl
ZEltbTMyKDApLCAmbV9jb2RlQmxvY2stPm1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkKTsKICAgICAg
ICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoKTsKICAgICAgICAgZW1pdFB1dFRvQ2FsbEZyYW1lSGVh
ZGVyKG1fY29kZUJsb2NrLCBDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spOwpAQCAtODI5LDE3ICs4
ODMsNDIgQEAgdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbgogICAgICAg
ICBtb3ZlKHJldHVyblZhbHVlR1BSLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwogICAgICAgICBl
bWl0TmFrZWROZWFyQ2FsbChtX3ZtLT5nZXRDVElTdHViKGFyaXR5Rml4dXBHZW5lcmF0b3IpLnJl
dGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKKyAgICAgICAganVtcChiZWdpbkxhYmVsKTsKKwor
I2Vsc2UgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCisgICAgICAgIGVtaXRGdW5jdGlvblBy
b2xvZ3VlKCk7CisKKyAgICAgICAgc3RhdGljX2Fzc2VydChjb2RlQmxvY2tHUFIgPT0gcmVnVDcp
OworICAgICAgICBBU1NFUlQoIW1fYnl0ZWNvZGVJbmRleCk7CisKKyAgICAgICAgc3RhdGljIGNv
bnN0ZXhwciBUaHVua0dlbmVyYXRvciBnZW5lcmF0b3JzW10gPSB7CisjZGVmaW5lIFVTRV9QUk9M
T0dVRV9HRU5FUkFUT1IoZG9lc1Byb2ZpbGluZywgaXNDb25zdHJ1Y3RvciwgaGFzSHVnZUZyYW1l
LCBuYW1lLCBhcml0eUZpeHVwTmFtZSkgYXJpdHlGaXh1cE5hbWUsCisgICAgICAgICAgICBGT1Jf
RUFDSF9QUk9MT0dVRV9HRU5FUkFUT1IoVVNFX1BST0xPR1VFX0dFTkVSQVRPUikKKyN1bmRlZiBV
U0VfUFJPTE9HVUVfR0VORVJBVE9SCisgICAgICAgIH07CisgICAgICAgIHN0YXRpYyBjb25zdGV4
cHIgdW5zaWduZWQgbnVtYmVyT2ZHZW5lcmF0b3JzID0gc2l6ZW9mKGdlbmVyYXRvcnMpIC8gc2l6
ZW9mKGdlbmVyYXRvcnNbMF0pOworCisgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jayksIGNvZGVCbG9ja0dQUik7CisKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoZ2VuZXJhdG9y
U2VsZWN0b3IgPCBudW1iZXJPZkdlbmVyYXRvcnMpOworICAgICAgICBhdXRvIGdlbmVyYXRvciA9
IGdlbmVyYXRvcnNbZ2VuZXJhdG9yU2VsZWN0b3JdOworICAgICAgICBSRUxFQVNFX0FTU0VSVChn
ZW5lcmF0b3IpOworICAgICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bSgpLmdldENUSVN0dWIoZ2Vu
ZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOworCisgICAgICAgIGp1bXAoYm9keUxh
YmVsKTsKKyNlbmRpZiAvLyAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCisKICNpZiBBU1NFUlRf
RU5BQkxFRAogICAgICAgICBtX2J5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4KCk7IC8vIFJl
c2V0IHRoaXMsIGluIG9yZGVyIHRvIGd1YXJkIGl0cyB1c2Ugd2l0aCBBU1NFUlRzLgogI2VuZGlm
Ci0KLSAgICAgICAganVtcChiZWdpbkxhYmVsKTsKICAgICB9IGVsc2UKICAgICAgICAgbV9hcml0
eUNoZWNrID0gZW50cnlMYWJlbDsgLy8gTmV2ZXIgcmVxdWlyZSBhcml0eSBmaXh1cC4KIAogICAg
IEFTU0VSVChtX2ptcFRhYmxlLmlzRW1wdHkoKSk7CiAgICAgCisjaWYgIUVOQUJMRShFWFRSQV9D
VElfVEhVTktTKQogICAgIHByaXZhdGVDb21waWxlRXhjZXB0aW9uSGFuZGxlcnMoKTsKKyNlbmRp
ZgogICAgIAogICAgIGlmIChtX2Rpc2Fzc2VtYmxlcikKICAgICAgICAgbV9kaXNhc3NlbWJsZXIt
PnNldEVuZE9mQ29kZShsYWJlbCgpKTsKQEAgLTg0OSw2ICs5MjgsMjQwIEBAIHZvaWQgSklUOjpj
b21waWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW4KICAgICBsaW5rKCk7CiB9CiAKKyNpZiBFTkFC
TEUoRVhUUkFfQ1RJX1RIVU5LUykKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gSklUOjpwcm9sb2d1ZUdlbmVyYXRvcihWTSYgdm0sIGJvb2wgZG9lc1Byb2ZpbGluZywgYm9v
bCBpc0NvbnN0cnVjdG9yLCBib29sIGhhc0h1Z2VGcmFtZSwgY29uc3QgY2hhciogdGh1bmtOYW1l
KQoreworICAgIC8vIFRoaXMgZnVuY3Rpb24gZ2VuZXJhdGVzIHRoZSBCYXNlbGluZSBKSVQncyBw
cm9sb2d1ZSBjb2RlLiBJdCBpcyBub3QgdXNlYWJsZSBieSBvdGhlciB0aWVycy4KKyAgICBjb25z
dGV4cHIgR1BSUmVnIGNvZGVCbG9ja0dQUiA9IHJlZ1Q3OyAvLyBpbmNvbWluZy4KKworICAgIGNv
bnN0ZXhwciBpbnQgdmlydHVhbFJlZ2lzdGVyU2l6ZSA9IHN0YXRpY19jYXN0PGludD4oc2l6ZW9m
KFJlZ2lzdGVyKSk7CisgICAgY29uc3RleHByIGludCB2aXJ0dWFsUmVnaXN0ZXJTaXplU2hpZnQg
PSAzOworICAgIHN0YXRpY19hc3NlcnQoKDEgPDwgdmlydHVhbFJlZ2lzdGVyU2l6ZVNoaWZ0KSA9
PSB2aXJ0dWFsUmVnaXN0ZXJTaXplKTsKKworICAgIHRhZ1JldHVybkFkZHJlc3MoKTsKKworICAg
IHN0b3JlNjQoY29kZUJsb2NrR1BSLCBhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9j
aykpOworCisgICAgbG9hZDMyKEFkZHJlc3MoY29kZUJsb2NrR1BSLCBDb2RlQmxvY2s6Om9mZnNl
dE9mTnVtQ2FsbGVlTG9jYWxzKCkpLCByZWdUMSk7CisgICAgaWYgY29uc3RleHByIChtYXhGcmFt
ZUV4dGVudEZvclNsb3dQYXRoQ2FsbEluUmVnaXN0ZXJzKQorICAgICAgICBhZGQzMihUcnVzdGVk
SW1tMzIobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGxJblJlZ2lzdGVycyksIHJlZ1QxKTsK
KyAgICBsc2hpZnQzMihUcnVzdGVkSW1tMzIodmlydHVhbFJlZ2lzdGVyU2l6ZVNoaWZ0KSwgcmVn
VDEpOworICAgIG5lZ2F0ZTY0KHJlZ1QxKTsKKyNpZiBBU1NFUlRfRU5BQkxFRAorICAgIFByb2Jl
OjpGdW5jdGlvbiBwcm9iZUZ1bmN0aW9uID0gW10gKFByb2JlOjpDb250ZXh0JiBjb250ZXh0KSB7
CisgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY29udGV4dC5mcDxDYWxsRnJhbWUqPigp
LT5jb2RlQmxvY2soKTsKKyAgICAgICAgaW50NjRfdCBmcmFtZVRvcE9mZnNldCA9IHN0YWNrUG9p
bnRlck9mZnNldEZvcihjb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKTsKKyAgICAgICAgUkVM
RUFTRV9BU1NFUlQoY29udGV4dC5ncHI8aW50cHRyX3Q+KHJlZ1QxKSA9PSBmcmFtZVRvcE9mZnNl
dCk7CisgICAgfTsKKyAgICBwcm9iZSh0YWdDRnVuY3Rpb25QdHI8SklUUHJvYmVQdHJUYWc+KHBy
b2JlRnVuY3Rpb24pLCBudWxscHRyKTsKKyNlbmRpZgorCisgICAgYWRkUHRyKGNhbGxGcmFtZVJl
Z2lzdGVyLCByZWdUMSk7CisKKyAgICBKdW1wTGlzdCBzdGFja092ZXJmbG93OworICAgIGlmICho
YXNIdWdlRnJhbWUpCisgICAgICAgIHN0YWNrT3ZlcmZsb3cuYXBwZW5kKGJyYW5jaFB0cihBYm92
ZSwgcmVnVDEsIGNhbGxGcmFtZVJlZ2lzdGVyKSk7CisgICAgc3RhY2tPdmVyZmxvdy5hcHBlbmQo
YnJhbmNoUHRyKEFib3ZlLCBBYnNvbHV0ZUFkZHJlc3Modm0uYWRkcmVzc09mU29mdFN0YWNrTGlt
aXQoKSksIHJlZ1QxKSk7CisKKyAgICAvLyBXZSdsbCBiZSBpbW1pbmVudGx5IHJldHVyaW5nIHdp
dGggYSByZXRhYiBpbiB0aGUgbm9ybWFsIHBhdGgsIHdoaWNoIHdpbGwgZG8gdmFsaWRhdGlvbi4K
KyAgICAvLyBTbywgZXh0cmEgdmFsaWRhdGlvbiBoZXJlIGlzIHJlZHVuZGFudC4KKyAgICB1bnRh
Z1JldHVybkFkZHJlc3NXaXRob3V0RXh0cmFWYWxpZGF0aW9uKCk7CisjaWYgQ1BVKFg4Nl82NCkK
KyAgICBwb3AocmVnVDIpOyAvLyBTYXZlIHRoZSByZXR1cm4gYWRkcmVzcy4KKyNlbmRpZgorICAg
IG1vdmUocmVnVDEsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICB0YWdSZXR1cm5BZGRyZXNz
KCk7CisgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKKyNpZiBDUFUoWDg2XzY0KQor
ICAgIHB1c2gocmVnVDIpOyAvLyBSZXN0b3JlIHRoZSByZXR1cm4gYWRkcmVzcy4KKyNlbmRpZgor
CisgICAgZW1pdFNhdmVDYWxsZWVTYXZlc0ZvckJhc2VsaW5lSklUKCk7CisgICAgZW1pdE1hdGVy
aWFsaXplVGFnQ2hlY2tSZWdpc3RlcnMoKTsKKworICAgIGlmIChkb2VzUHJvZmlsaW5nKSB7Cisg
ICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgYXJndW1lbnRWYWx1ZVByb2ZpbGVHUFIgPSByZWdUNjsK
KyAgICAgICAgY29uc3RleHByIEdQUlJlZyBudW1QYXJhbWV0ZXJzR1BSID0gcmVnVDU7CisgICAg
ICAgIGNvbnN0ZXhwciBHUFJSZWcgYXJndW1lbnRHUFIgPSByZWdUNDsKKworICAgICAgICBsb2Fk
MzIoQWRkcmVzcyhjb2RlQmxvY2tHUFIsIENvZGVCbG9jazo6b2Zmc2V0T2ZOdW1QYXJhbWV0ZXJz
KCkpLCBudW1QYXJhbWV0ZXJzR1BSKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKGNvZGVCbG9j
a0dQUiwgQ29kZUJsb2NrOjpvZmZzZXRPZkFyZ3VtZW50VmFsdWVQcm9maWxlcygpKSwgYXJndW1l
bnRWYWx1ZVByb2ZpbGVHUFIpOworICAgICAgICBpZiAoaXNDb25zdHJ1Y3RvcikKKyAgICAgICAg
ICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc2l6ZW9mKFZhbHVlUHJvZmlsZSkpLCBhcmd1bWVudFZh
bHVlUHJvZmlsZUdQUik7CisKKyAgICAgICAgaW50IHN0YXJ0QXJndW1lbnQgPSBDYWxsRnJhbWVT
bG90Ojp0aGlzQXJndW1lbnQgKyAoaXNDb25zdHJ1Y3RvciA/IDEgOiAwKTsKKyAgICAgICAgaW50
IHN0YXJ0QXJndW1lbnRPZmZzZXQgPSBzdGFydEFyZ3VtZW50ICogdmlydHVhbFJlZ2lzdGVyU2l6
ZTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoc3RhcnRBcmd1bWVudE9mZnNldCksIGFyZ3Vt
ZW50R1BSKTsKKworICAgICAgICBhZGQzMihUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50PihD
YWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQpKSwgbnVtUGFyYW1ldGVyc0dQUik7CisgICAgICAg
IGxzaGlmdDMyKFRydXN0ZWRJbW0zMih2aXJ0dWFsUmVnaXN0ZXJTaXplU2hpZnQpLCBudW1QYXJh
bWV0ZXJzR1BSKTsKKworICAgICAgICBhZGRQdHIoY2FsbEZyYW1lUmVnaXN0ZXIsIGFyZ3VtZW50
R1BSKTsKKyAgICAgICAgYWRkUHRyKGNhbGxGcmFtZVJlZ2lzdGVyLCBudW1QYXJhbWV0ZXJzR1BS
KTsKKworICAgICAgICBMYWJlbCBsb29wU3RhcnQodGhpcyk7CisgICAgICAgIEp1bXAgZG9uZSA9
IGJyYW5jaFB0cihBYm92ZU9yRXF1YWwsIGFyZ3VtZW50R1BSLCBudW1QYXJhbWV0ZXJzR1BSKTsK
KyAgICAgICAgeworICAgICAgICAgICAgbG9hZDY0KEFkZHJlc3MoYXJndW1lbnRHUFIpLCByZWdU
MCk7CisgICAgICAgICAgICBzdG9yZTY0KHJlZ1QwLCBBZGRyZXNzKGFyZ3VtZW50VmFsdWVQcm9m
aWxlR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoVmFsdWVQcm9maWxlLCBtX2J1Y2tldHMpKSk7CisKKyAg
ICAgICAgICAgIC8vIFRoZSBhcmd1bWVudCBWYWx1ZVByb2ZpbGVzIGFyZSBzdG9yZWQgaW4gYSBG
aXhlZFZlY3Rvci4gSGVuY2UsIHRoZQorICAgICAgICAgICAgLy8gYWRkcmVzcyBvZiB0aGUgbmV4
dCBwcm9maWxlIGNhbiBiZSB0cml2aWFsbHkgY29tcHV0ZWQgd2l0aCBhbiBpbmNyZW1lbnQuCisg
ICAgICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHNpemVvZihWYWx1ZVByb2ZpbGUpKSwgYXJn
dW1lbnRWYWx1ZVByb2ZpbGVHUFIpOworICAgICAgICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMih2
aXJ0dWFsUmVnaXN0ZXJTaXplKSwgYXJndW1lbnRHUFIpOworICAgICAgICAgICAganVtcCgpLmxp
bmtUbyhsb29wU3RhcnQsIHRoaXMpOworICAgICAgICB9CisgICAgICAgIGRvbmUubGluayh0aGlz
KTsKKyAgICB9CisgICAgcmV0KCk7CisKKyAgICBzdGFja092ZXJmbG93LmxpbmsodGhpcyk7Cisj
aWYgQ1BVKFg4Nl82NCkKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKDEgKiBzaXplb2YoQ1BVUmVn
aXN0ZXIpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOyAvLyBkaXNjYXJkIHJldHVybiBhZGRyZXNz
LgorI2VuZGlmCisKKyAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4KDAp
LmJpdHMoKTsKKyAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihsb2NhdGlvbkJpdHMpLCB0YWdGb3Io
Q2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKTsKKworICAgIGlmICht
YXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCkKKyAgICAgICAgYWRkUHRyKFRydXN0ZWRJbW0z
Migtc3RhdGljX2Nhc3Q8aW50MzJfdD4obWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpKSwg
c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworCisgICAgc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUob3Bl
cmF0aW9uVGhyb3dTdGFja092ZXJmbG93RXJyb3IpPihjb2RlQmxvY2tHUFIpOworICAgIHByZXBh
cmVDYWxsT3BlcmF0aW9uKHZtKTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBvcGVyYXRpb25D
YWxsID0gY2FsbChPcGVyYXRpb25QdHJUYWcpOworICAgIEp1bXAgaGFuZGxlRXhjZXB0aW9uSnVt
cCA9IGp1bXAoKTsKKworICAgIGF1dG8gaGFuZGxlciA9IHZtLmdldENUSVN0dWIoaGFuZGxlRXhj
ZXB0aW9uV2l0aENhbGxGcmFtZVJvbGxiYWNrR2VuZXJhdG9yKTsKKworICAgIExpbmtCdWZmZXIg
cGF0Y2hCdWZmZXIoKnRoaXMsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6
RXh0cmFDVElUaHVuayk7CisgICAgcGF0Y2hCdWZmZXIubGluayhvcGVyYXRpb25DYWxsLCBGdW5j
dGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvblRocm93U3RhY2tPdmVyZmxvd0Vycm9y
KSk7CisgICAgcGF0Y2hCdWZmZXIubGluayhoYW5kbGVFeGNlcHRpb25KdW1wLCBDb2RlTG9jYXRp
b25MYWJlbChoYW5kbGVyLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkpOworICAgIHJldHVybiBG
SU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgdGh1bmtOYW1lKTsKK30K
Kworc3RhdGljIGNvbnN0ZXhwciBib29sIGRvZXNQcm9maWxpbmcgPSB0cnVlOworc3RhdGljIGNv
bnN0ZXhwciBib29sIGlzQ29uc3RydWN0b3IgPSB0cnVlOworc3RhdGljIGNvbnN0ZXhwciBib29s
IGhhc0h1Z2VGcmFtZSA9IHRydWU7CisKKyNkZWZpbmUgREVGSU5FX1BST0dMT0dVRV9HRU5FUkFU
T1IoZG9lc1Byb2ZpbGluZywgaXNDb25zdHJ1Y3RvciwgaGFzSHVnZUZyYW1lLCBuYW1lLCBhcml0
eUZpeHVwTmFtZSkgXAorICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
SklUOjpuYW1lKFZNJiB2bSkgXAorICAgIHsgXAorICAgICAgICBKSVQgaml0KHZtKTsgXAorICAg
ICAgICByZXR1cm4gaml0LnByb2xvZ3VlR2VuZXJhdG9yKHZtLCBkb2VzUHJvZmlsaW5nLCBpc0Nv
bnN0cnVjdG9yLCBoYXNIdWdlRnJhbWUsICJCYXNlbGluZTogIiAjbmFtZSk7IFwKKyAgICB9CisK
K0ZPUl9FQUNIX1BST0xPR1VFX0dFTkVSQVRPUihERUZJTkVfUFJPR0xPR1VFX0dFTkVSQVRPUikK
KyN1bmRlZiBERUZJTkVfUFJPR0xPR1VFX0dFTkVSQVRPUgorCitNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6YXJpdHlGaXh1cFByb2xvZ3VlR2VuZXJhdG9yKFZNJiB2
bSwgYm9vbCBpc0NvbnN0cnVjdG9yLCBUaHVua0dlbmVyYXRvciBub3JtYWxQcm9sb2d1ZUdlbmVy
YXRvciwgY29uc3QgY2hhciogdGh1bmtOYW1lKQoreworICAgIC8vIFRoaXMgZnVuY3Rpb24gZ2Vu
ZXJhdGVzIHRoZSBCYXNlbGluZSBKSVQncyBwcm9sb2d1ZSBjb2RlLiBJdCBpcyBub3QgdXNlYWJs
ZSBieSBvdGhlciB0aWVycy4KKyAgICBjb25zdGV4cHIgR1BSUmVnIGNvZGVCbG9ja0dQUiA9IHJl
Z1Q3OyAvLyBpbmNvbWluZy4KKyAgICBjb25zdGV4cHIgR1BSUmVnIG51bVBhcmFtZXRlcnNHUFIg
PSByZWdUNjsKKworICAgIHRhZ1JldHVybkFkZHJlc3MoKTsKKyNpZiBDUFUoWDg2XzY0KQorICAg
IHB1c2goZnJhbWVQb2ludGVyUmVnaXN0ZXIpOworI2VsaWYgQ1BVKEFSTTY0KQorICAgIHB1c2hQ
YWlyKGZyYW1lUG9pbnRlclJlZ2lzdGVyLCBsaW5rUmVnaXN0ZXIpOworI2VuZGlmCisKKyAgICBz
dG9yZTY0KGNvZGVCbG9ja0dQUiwgYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2sp
KTsKKyAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDApLCBBZGRyZXNzKGNvZGVCbG9ja0dQUiwgQ29k
ZUJsb2NrOjpvZmZzZXRPZlNob3VsZEFsd2F5c0JlSW5saW5lZCgpKSk7CisKKyAgICBsb2FkMzIo
cGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyksIHJl
Z1QxKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhjb2RlQmxvY2tHUFIsIENvZGVCbG9jazo6b2Zmc2V0
T2ZOdW1QYXJhbWV0ZXJzKCkpLCBudW1QYXJhbWV0ZXJzR1BSKTsKKyAgICBKdW1wIG5vRml4dXBO
ZWVkZWQgPSBicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBudW1QYXJhbWV0ZXJzR1BSKTsK
KworICAgIGlmIGNvbnN0ZXhwciAobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpCisgICAg
ICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLXN0YXRpY19jYXN0PGludDMyX3Q+KG1heEZyYW1lRXh0
ZW50Rm9yU2xvd1BhdGhDYWxsKSksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKworICAgIGxvYWRQ
dHIoQWRkcmVzcyhjb2RlQmxvY2tHUFIsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3Qo
KSksIGFyZ3VtZW50R1BSMCk7CisKKyAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxkZWNs
dHlwZShvcGVyYXRpb25Db25zdHJ1Y3RBcml0eUNoZWNrKSwgZGVjbHR5cGUob3BlcmF0aW9uQ2Fs
bEFyaXR5Q2hlY2spPjo6dmFsdWUpOworICAgIHNldHVwQXJndW1lbnRzPGRlY2x0eXBlKG9wZXJh
dGlvbkNhbGxBcml0eUNoZWNrKT4oYXJndW1lbnRHUFIwKTsKKyAgICBwcmVwYXJlQ2FsbE9wZXJh
dGlvbih2bSk7CisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcml0eUNoZWNrQ2FsbCA9IGNh
bGwoT3BlcmF0aW9uUHRyVGFnKTsKKyAgICBKdW1wIGhhbmRsZUV4Y2VwdGlvbkp1bXAgPSBlbWl0
Tm9uUGF0Y2hhYmxlRXhjZXB0aW9uQ2hlY2sodm0pOworCisgICAgaWYgY29uc3RleHByIChtYXhG
cmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCkKKyAgICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMiht
YXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAg
ICBKdW1wIG5lZWRGaXh1cCA9IGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUik7
CisgICAgbm9GaXh1cE5lZWRlZC5saW5rKHRoaXMpOworCisgICAgLy8gVGhlIG5vcm1hbCBwcm9s
b2d1ZSBleHBlY3RzIGluY29taW5nIGNvZGVCbG9ja0dQUi4KKyAgICBsb2FkNjQoYWRkcmVzc0Zv
cihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCBjb2RlQmxvY2tHUFIpOworCisjaWYgQ1BVKFg4
Nl82NCkKKyAgICBwb3AoZnJhbWVQb2ludGVyUmVnaXN0ZXIpOworI2VsaWYgQ1BVKEFSTTY0KQor
ICAgIHBvcFBhaXIoZnJhbWVQb2ludGVyUmVnaXN0ZXIsIGxpbmtSZWdpc3Rlcik7CisjZW5kaWYK
KyAgICB1bnRhZ1JldHVybkFkZHJlc3MoKTsKKworICAgIEp1bXBMaXN0IG5vcm1hbFByb2xvZ3Vl
SnVtcDsKKyAgICBub3JtYWxQcm9sb2d1ZUp1bXAuYXBwZW5kKGp1bXAoKSk7CisKKyAgICBuZWVk
Rml4dXAubGluayh0aGlzKTsKKworICAgIC8vIFJlc3RvcmUgdGhlIHN0YWNrIGZvciBhcml0eSBm
aXh1cCwgYW5kIHByZXNlcnZlIHRoZSByZXR1cm4gYWRkcmVzcy4KKyAgICAvLyBhcml0eUZpeHVw
R2VuZXJhdG9yIHdpbGwgYmUgc2hpZnRpbmcgdGhlIHN0YWNrLiBTbywgd2UgY2FuJ3QgdXNlIHRo
ZSBzdGFjayB0bworICAgIC8vIHByZXNlcnZlIHRoZSByZXR1cm4gYWRkcmVzcy4gV2UgYWxzbyBj
YW4ndCB1c2UgY2FsbGVlIHNhdmVkIHJlZ2lzdGVycyBiZWNhdXNlCisgICAgLy8gdGhleSBoYXZl
bid0IGJlZW4gc2F2ZWQgeWV0LgorICAgIC8vCisgICAgLy8gYXJpdHlGaXh1cEdlbmVyYXRvciBp
cyBjYXJlZnVsbHkgY3JhZnRlZCB0byBvbmx5IHVzZSBhMCwgYTEsIGEyLCB0MywgdDQgYW5kIHQ1
LgorICAgIC8vIFNvLCB0aGUgcmV0dXJuIGFkZHJlc3MgY2FuIGJlIHByZXNlcnZlZCBpbiByZWdU
Ny4KKyNpZiBDUFUoWDg2XzY0KQorICAgIHBvcChhcmd1bWVudEdQUjIpOyAvLyBkaXNjYXJkLgor
ICAgIHBvcChyZWdUNyk7IC8vIHNhdmUgcmV0dXJuIGFkZHJlc3MuCisjZWxpZiBDUFUoQVJNNjQp
CisgICAgcG9wUGFpcihmcmFtZVBvaW50ZXJSZWdpc3RlciwgbGlua1JlZ2lzdGVyKTsKKyAgICB1
bnRhZ1JldHVybkFkZHJlc3MoKTsKKyAgICBtb3ZlKGxpbmtSZWdpc3RlciwgcmVnVDcpOworICAg
IGF1dG8gcmFuZG9tUmV0dXJuQWRkcmVzc1RhZyA9IHJhbmRvbSgpOworICAgIG1vdmUoVHJ1c3Rl
ZEltbTMyKHJhbmRvbVJldHVybkFkZHJlc3NUYWcpLCByZWdUMSk7CisgICAgdGFnUHRyKHJlZ1Qx
LCByZWdUNyk7CisjZW5kaWYKKyAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBHUFJJbmZvOjphcmd1
bWVudEdQUjApOworICAgIENhbGwgYXJpdHlGaXh1cENhbGwgPSBuZWFyQ2FsbCgpOworCisjaWYg
Q1BVKFg4Nl82NCkKKyAgICBwdXNoKHJlZ1Q3KTsgLy8gcmVzdG9yZSByZXR1cm4gYWRkcmVzcy4K
KyNlbGlmIENQVShBUk02NCkKKyAgICBtb3ZlKFRydXN0ZWRJbW0zMihyYW5kb21SZXR1cm5BZGRy
ZXNzVGFnKSwgcmVnVDEpOworICAgIHVudGFnUHRyKHJlZ1QxLCByZWdUNyk7CisgICAgbW92ZShy
ZWdUNywgbGlua1JlZ2lzdGVyKTsKKyNlbmRpZgorCisgICAgbG9hZDY0KGFkZHJlc3NGb3IoQ2Fs
bEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgY29kZUJsb2NrR1BSKTsKKyAgICBub3JtYWxQcm9sb2d1
ZUp1bXAuYXBwZW5kKGp1bXAoKSk7CisKKyAgICBhdXRvIGFyaXR5Q2hlY2tPcGVyYXRpb24gPSBp
c0NvbnN0cnVjdG9yID8gb3BlcmF0aW9uQ29uc3RydWN0QXJpdHlDaGVjayA6IG9wZXJhdGlvbkNh
bGxBcml0eUNoZWNrOworICAgIGF1dG8gYXJpdHlGaXh1cCA9IHZtLmdldENUSVN0dWIoYXJpdHlG
aXh1cEdlbmVyYXRvcik7CisgICAgYXV0byBub3JtYWxQcm9sb2d1ZSA9IHZtLmdldENUSVN0dWIo
bm9ybWFsUHJvbG9ndWVHZW5lcmF0b3IpOworICAgIGF1dG8gZXhjZXB0aW9uSGFuZGxlciA9IHZt
LmdldENUSVN0dWIocG9wVGh1bmtTdGFja1ByZXNlcnZlc0FuZEhhbmRsZUV4Y2VwdGlvbkdlbmVy
YXRvcik7CisKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp0aGlzLCBHTE9CQUxfVEhVTktf
SUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OkV4dHJhQ1RJVGh1bmspOworICAgIHBhdGNoQnVmZmVy
LmxpbmsoYXJpdHlDaGVja0NhbGwsIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4oYXJpdHlD
aGVja09wZXJhdGlvbikpOworICAgIHBhdGNoQnVmZmVyLmxpbmsoYXJpdHlGaXh1cENhbGwsIEZ1
bmN0aW9uUHRyKGFyaXR5Rml4dXAucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7CisgICAgcGF0
Y2hCdWZmZXIubGluayhub3JtYWxQcm9sb2d1ZUp1bXAsIENvZGVMb2NhdGlvbkxhYmVsKG5vcm1h
bFByb2xvZ3VlLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkpOworICAgIHBhdGNoQnVmZmVyLmxp
bmsoaGFuZGxlRXhjZXB0aW9uSnVtcCwgQ29kZUxvY2F0aW9uTGFiZWwoZXhjZXB0aW9uSGFuZGxl
ci5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKKyAgICByZXR1cm4gRklOQUxJWkVfQ09ERShw
YXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsIHRodW5rTmFtZSk7Cit9CisKKyNkZWZpbmUgREVG
SU5FX0FSSVRZX1BST0dMT0dVRV9HRU5FUkFUT1IoZG9lc1Byb2ZpbGluZywgaXNDb25zdHJ1Y3Rv
ciwgaGFzSHVnZUZyYW1lLCBuYW1lLCBhcml0eUZpeHVwTmFtZSkgXAorTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OmFyaXR5Rml4dXBOYW1lKFZNJiB2bSkgXAorICAg
IHsgXAorICAgICAgICBKSVQgaml0KHZtKTsgXAorICAgICAgICByZXR1cm4gaml0LmFyaXR5Rml4
dXBQcm9sb2d1ZUdlbmVyYXRvcih2bSwgaXNDb25zdHJ1Y3RvciwgbmFtZSwgIkJhc2VsaW5lOiAi
ICNhcml0eUZpeHVwTmFtZSk7IFwKKyAgICB9CisKK0ZPUl9FQUNIX1BST0xPR1VFX0dFTkVSQVRP
UihERUZJTkVfQVJJVFlfUFJPR0xPR1VFX0dFTkVSQVRPUikKKyN1bmRlZiBERUZJTkVfQVJJVFlf
UFJPR0xPR1VFX0dFTkVSQVRPUgorCisjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1Mp
CisKIHZvaWQgSklUOjpsaW5rKCkKIHsKICAgICBMaW5rQnVmZmVyJiBwYXRjaEJ1ZmZlciA9ICpt
X2xpbmtCdWZmZXI7CkBAIC0xMDQzLDkgKzEzNTYsOSBAQCBDb21waWxhdGlvblJlc3VsdCBKSVQ6
OnByaXZhdGVDb21waWxlKEpJCiAgICAgcmV0dXJuIGZpbmFsaXplT25NYWluVGhyZWFkKCk7CiB9
CiAKKyNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBp
bGVFeGNlcHRpb25IYW5kbGVycygpCiB7Ci0jaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQog
ICAgIGlmICghbV9leGNlcHRpb25DaGVja3NXaXRoQ2FsbEZyYW1lUm9sbGJhY2suZW1wdHkoKSkg
ewogICAgICAgICBtX2V4Y2VwdGlvbkNoZWNrc1dpdGhDYWxsRnJhbWVSb2xsYmFjay5saW5rKHRo
aXMpOwogCkBAIC0xMDcwLDggKzEzODMsOCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVFeGNl
cHRpb25IYW5kbGVyCiAgICAgICAgIG1fZmFyQ2FsbHMuYXBwZW5kKEZhckNhbGxSZWNvcmQoY2Fs
bChPcGVyYXRpb25QdHJUYWcpLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlv
bkxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIpKSk7CiAgICAgICAgIGp1bXBUb0V4Y2VwdGlvbkhhbmRs
ZXIodm0oKSk7CiAgICAgfQotI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogfQor
I2VuZGlmIC8vICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAogdm9pZCBKSVQ6OmRvTWFpblRo
cmVhZFByZXBhcmF0aW9uQmVmb3JlQ29tcGlsZSgpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklULmgJKHJldmlzaW9uIDI3ODQyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
LmgJKHdvcmtpbmcgY29weSkKQEAgLTMxOCw3ICszMTgsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgICAgIG1fZXhjZXB0aW9uQ2hlY2tzV2l0aENhbGxGcmFtZVJvbGxiYWNrLmFwcGVuZChl
bWl0RXhjZXB0aW9uQ2hlY2sodm0oKSkpOwogICAgICAgICB9CiAKKyNpZiAhRU5BQkxFKEVYVFJB
X0NUSV9USFVOS1MpCiAgICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVFeGNlcHRpb25IYW5kbGVy
cygpOworI2VuZGlmCiAKICAgICAgICAgdm9pZCBhZHZhbmNlVG9OZXh0Q2hlY2twb2ludCgpOwog
ICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hlY2twb2ludChKdW1wKTsKQEAgLTcx
Myw3ICs3MTUsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9q
c3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cnVj
dGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9qdHJ1ZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImKTsKKyNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAgICAgICAgIHZv
aWQgZW1pdFNsb3dfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYpOworI2VuZGlmCiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
Y2hlY2tfdHJhcHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbW9kKGNvbnN0IEluc3RydWN0aW9u
KiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2b2lkIGVtaXRT
bG93X29wX211bChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImKTsKQEAgLTc4OCw2ICs3OTIsMjYgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICNpZiBFTkFC
TEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICAgICAgLy8gVGh1bmsgZ2VuZXJhdG9ycy4KKyAgICAg
ICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gcHJvbG9ndWVH
ZW5lcmF0b3IwKFZNJik7CisgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHJUYWc+IHByb2xvZ3VlR2VuZXJhdG9yMShWTSYpOworICAgICAgICBzdGF0aWMgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBwcm9sb2d1ZUdlbmVyYXRvcjIoVk0m
KTsKKyAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
cHJvbG9ndWVHZW5lcmF0b3IzKFZNJik7CisgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IHByb2xvZ3VlR2VuZXJhdG9yNChWTSYpOworICAgICAgICBz
dGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBwcm9sb2d1ZUdlbmVy
YXRvcjUoVk0mKTsKKyAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz4gcHJvbG9ndWVHZW5lcmF0b3I2KFZNJik7CisgICAgICAgIHN0YXRpYyBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHByb2xvZ3VlR2VuZXJhdG9yNyhWTSYpOwor
ICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHByb2xvZ3VlR2Vu
ZXJhdG9yKFZNJiwgYm9vbCBkb2VzUHJvZmlsaW5nLCBib29sIGlzQ29uc3RydWN0b3IsIGJvb2wg
aGFzSHVnZUZyYW1lLCBjb25zdCBjaGFyKiBuYW1lKTsKKworICAgICAgICBzdGF0aWMgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBhcml0eUZpeHVwX3Byb2xvZ3VlR2VuZXJh
dG9yMChWTSYpOworICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5r
UHRyVGFnPiBhcml0eUZpeHVwX3Byb2xvZ3VlR2VuZXJhdG9yMShWTSYpOworICAgICAgICBzdGF0
aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBhcml0eUZpeHVwX3Byb2xv
Z3VlR2VuZXJhdG9yMihWTSYpOworICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFRodW5rUHRyVGFnPiBhcml0eUZpeHVwX3Byb2xvZ3VlR2VuZXJhdG9yMyhWTSYpOworICAg
ICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBhcml0eUZp
eHVwX3Byb2xvZ3VlR2VuZXJhdG9yNChWTSYpOworICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBhcml0eUZpeHVwX3Byb2xvZ3VlR2VuZXJhdG9yNShW
TSYpOworICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiBhcml0eUZpeHVwX3Byb2xvZ3VlR2VuZXJhdG9yNihWTSYpOworICAgICAgICBzdGF0aWMgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBhcml0eUZpeHVwX3Byb2xvZ3VlR2Vu
ZXJhdG9yNyhWTSYpOworICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IGFyaXR5Rml4dXBQcm9sb2d1ZUdlbmVyYXRvcihWTSYsIGJvb2wgaXNDb25zdHJ1Y3Rvciwg
VGh1bmtHZW5lcmF0b3Igbm9ybWFsUHJvbG9ndWVHZW5lcmF0b3IsIGNvbnN0IGNoYXIqIG5hbWUp
OworCiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+
IHNsb3dfb3BfZGVsX2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yKFZNJik7CiAgICAgICAgIHN0
YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHNsb3dfb3BfZGVsX2J5
X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRvcihWTSYpOwogICAgICAgICBzdGF0aWMgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBzbG93X29wX2dldF9ieV9pZF9wcmVwYXJlQ2Fs
bEdlbmVyYXRvcihWTSYpOwpAQCAtODAyLDcgKzgyNiwxNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gc2xvd19v
cF9yZXNvbHZlX3Njb3BlR2VuZXJhdG9yKFZNJik7CiAKICAgICAgICAgc3RhdGljIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3BfY2hlY2tfdHJhcHNfaGFuZGxlckdlbmVy
YXRvcihWTSYpOwotICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5r
UHRyVGFnPiBvcF9lbnRlcl9oYW5kbGVyR2VuZXJhdG9yKFZNJik7CisKKyAgICAgICAgc3RhdGlj
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3BfZW50ZXJfY2FuQmVPcHRp
bWl6ZWRfR2VuZXJhdG9yKFZNJik7CisgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+IG9wX2VudGVyX2Nhbm5vdEJlT3B0aW1pemVkX0dlbmVyYXRvcihW
TSYpOworICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9wX2Vu
dGVyX0dlbmVyYXRvcihWTSYsIGJvb2wgY2FuQmVPcHRpbWl6ZWQsIGNvbnN0IGNoYXIqIHRodW5r
TmFtZSk7CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKyAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3BfbG9vcF9oaW50X0dlbmVyYXRvcihWTSYpOwor
I2VuZGlmCiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IG9wX3JldF9oYW5kbGVyR2VuZXJhdG9yKFZNJik7CiAgICAgICAgIHN0YXRpYyBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9wX3Rocm93X2hhbmRsZXJHZW5lcmF0b3Io
Vk0mKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgJKHJldmlz
aW9uIDI3ODQyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCSh3
b3JraW5nIGNvcHkpCkBAIC05MSw3ICs5MSw2IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVt
aXRMb2FkQ2hhcmFjdGUKIAogQUxXQVlTX0lOTElORSBKSVQ6OkNhbGwgSklUOjplbWl0TmFrZWRO
ZWFyQ2FsbChDb2RlUHRyPE5vUHRyVGFnPiB0YXJnZXQpCiB7Ci0gICAgQVNTRVJUKG1fYnl0ZWNv
ZGVJbmRleCk7IC8vIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90
L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQuCiAg
ICAgQ2FsbCBuYWtlZENhbGwgPSBuZWFyQ2FsbCgpOwogICAgIG1fbmVhckNhbGxzLmFwcGVuZChO
ZWFyQ2FsbFJlY29yZChuYWtlZENhbGwsIEZ1bmN0aW9uUHRyPEpTSW50ZXJuYWxQdHJUYWc+KHRh
cmdldC5yZXRhZ2dlZDxKU0ludGVybmFsUHRyVGFnPigpKSkpOwogICAgIHJldHVybiBuYWtlZENh
bGw7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHJldmlz
aW9uIDI3ODQyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM3Niw3ICszNzYsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgSklUIGppdCh2bSk7CiAKICAgICBqaXQuY2hlY2tTdGFj
a1BvaW50ZXJBbGlnbm1lbnQoKTsKLSAgICBqaXQuZW1pdFJlc3RvcmVDYWxsZWVTYXZlc0Zvcigm
UmVnaXN0ZXJBdE9mZnNldExpc3Q6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCkp
OworICAgIGppdC5lbWl0UmVzdG9yZUNhbGxlZVNhdmVzRm9yQmFzZWxpbmVKSVQoKTsKICAgICBq
aXQuZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKICAgICBqaXQucmV0KCk7CiAKQEAgLTExODYsMTAz
ICsxMTg2LDExNSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnRlcihjb25zdCBJbnN0cnVjdGlvCiAg
ICAgZW1pdEVudGVyT3B0aW1pemF0aW9uQ2hlY2soKTsKICNlbHNlCiAgICAgQVNTRVJUKG1fYnl0
ZWNvZGVJbmRleC5vZmZzZXQoKSA9PSAwKTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGxvY2Fsc1Rv
SW5pdEdQUiA9IGFyZ3VtZW50R1BSMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGNhbkJlT3B0aW1p
emVkR1BSID0gYXJndW1lbnRHUFI0OwotCiAgICAgdW5zaWduZWQgbG9jYWxzVG9Jbml0ID0gY291
bnQgLSBDb2RlQmxvY2s6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdp
c3RlcnMoKTsKICAgICBSRUxFQVNFX0FTU0VSVChsb2NhbHNUb0luaXQgPCBjb3VudCk7Ci0gICAg
bW92ZShUcnVzdGVkSW1tMzIobG9jYWxzVG9Jbml0ICogc2l6ZW9mKFJlZ2lzdGVyKSksIGxvY2Fs
c1RvSW5pdEdQUik7Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIoY2FuQmVPcHRpbWl6ZWQoKSksIGNh
bkJlT3B0aW1pemVkR1BSKTsKLSAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bSgpLmdldENUSVN0dWIo
b3BfZW50ZXJfaGFuZGxlckdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKKyAg
ICBUaHVua0dlbmVyYXRvciBnZW5lcmF0b3IgPSBjYW5CZU9wdGltaXplZCgpID8gb3BfZW50ZXJf
Y2FuQmVPcHRpbWl6ZWRfR2VuZXJhdG9yIDogb3BfZW50ZXJfY2Fubm90QmVPcHRpbWl6ZWRfR2Vu
ZXJhdG9yOworICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtKCkuZ2V0Q1RJU3R1YihnZW5lcmF0b3Ip
LnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9U
SFVOS1MpCiB9CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLU1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpvcF9lbnRlcl9oYW5kbGVyR2VuZXJhdG9yKFZN
JiB2bSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpvcF9lbnRl
cl9HZW5lcmF0b3IoVk0mIHZtLCBib29sIGNhbkJlT3B0aW1pemVkLCBjb25zdCBjaGFyKiB0aHVu
a05hbWUpCiB7Ci0gICAgSklUIGppdCh2bSk7Ci0KICNpZiBDUFUoWDg2XzY0KQotICAgIGppdC5w
dXNoKFg4NlJlZ2lzdGVyczo6ZWJwKTsKKyAgICBwdXNoKFg4NlJlZ2lzdGVyczo6ZWJwKTsKICNl
bGlmIENQVShBUk02NCkKLSAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwotICAgIGppdC5wdXNo
UGFpcihmcmFtZVBvaW50ZXJSZWdpc3RlciwgbGlua1JlZ2lzdGVyKTsKKyAgICB0YWdSZXR1cm5B
ZGRyZXNzKCk7CisgICAgcHVzaFBhaXIoZnJhbWVQb2ludGVyUmVnaXN0ZXIsIGxpbmtSZWdpc3Rl
cik7CiAjZW5kaWYKICAgICAvLyBvcF9lbnRlciBpcyBhbHdheXMgYXQgYnl0ZWNvZGVPZmZzZXQg
MC4KLSAgICBqaXQuc3RvcmUzMihUcnVzdGVkSW1tMzIoMCksIHRhZ0ZvcihDYWxsRnJhbWVTbG90
Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykpOworICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMy
KDApLCB0YWdGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKTsK
IAogICAgIGNvbnN0ZXhwciBHUFJSZWcgbG9jYWxzVG9Jbml0R1BSID0gYXJndW1lbnRHUFIwOwog
ICAgIGNvbnN0ZXhwciBHUFJSZWcgaXRlcmF0b3JHUFIgPSBhcmd1bWVudEdQUjE7CiAgICAgY29u
c3RleHByIEdQUlJlZyBlbmRHUFIgPSBhcmd1bWVudEdQUjI7CiAgICAgY29uc3RleHByIEdQUlJl
ZyB1bmRlZmluZWRHUFIgPSBhcmd1bWVudEdQUjM7Ci0gICAgY29uc3RleHByIEdQUlJlZyBjYW5C
ZU9wdGltaXplZEdQUiA9IGFyZ3VtZW50R1BSNDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGNvZGVC
bG9ja0dQUiA9IGFyZ3VtZW50R1BSNDsKKworICAgIGNvbnN0ZXhwciBpbnQgdmlydHVhbFJlZ2lz
dGVyU2l6ZVNoaWZ0ID0gMzsKKyAgICBzdGF0aWNfYXNzZXJ0KCgxIDw8IHZpcnR1YWxSZWdpc3Rl
clNpemVTaGlmdCkgPT0gc2l6ZW9mKFJlZ2lzdGVyKSk7CisKKyAgICBsb2FkUHRyKGFkZHJlc3NG
b3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgY29kZUJsb2NrR1BSKTsKKyAgICBsb2FkMzIo
QWRkcmVzcyhjb2RlQmxvY2tHUFIsIENvZGVCbG9jazo6b2Zmc2V0T2ZOdW1WYXJzKCkpLCBsb2Nh
bHNUb0luaXRHUFIpOworICAgIHN1YjMyKFRydXN0ZWRJbW0zMihDb2RlQmxvY2s6OmxsaW50QmFz
ZWxpbmVDYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKSksIGxvY2Fsc1RvSW5pdEdQ
Uik7CisgICAgbHNoaWZ0MzIoVHJ1c3RlZEltbTMyKHZpcnR1YWxSZWdpc3RlclNpemVTaGlmdCks
IGxvY2Fsc1RvSW5pdEdQUik7CiAKICAgICBzaXplX3Qgc3RhcnRMb2NhbCA9IENvZGVCbG9jazo6
bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpOwogICAgIGlu
dCBzdGFydE9mZnNldCA9IHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKHN0YXJ0TG9jYWwpLm9mZnNl
dCgpOwotICAgIGppdC5tb3ZlKFRydXN0ZWRJbW02NChzdGFydE9mZnNldCAqIHNpemVvZihSZWdp
c3RlcikpLCBpdGVyYXRvckdQUik7Ci0gICAgaml0LnN1YjY0KGl0ZXJhdG9yR1BSLCBsb2NhbHNU
b0luaXRHUFIsIGVuZEdQUik7CisgICAgbW92ZShUcnVzdGVkSW1tNjQoc3RhcnRPZmZzZXQgKiBz
aXplb2YoUmVnaXN0ZXIpKSwgaXRlcmF0b3JHUFIpOworICAgIHN1YjY0KGl0ZXJhdG9yR1BSLCBs
b2NhbHNUb0luaXRHUFIsIGVuZEdQUik7CiAKLSAgICBqaXQubW92ZShUcnVzdGVkSW1tNjQoSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpKSwgdW5kZWZpbmVkR1BSKTsKLSAgICBhdXRvIGlu
aXRMb29wID0gaml0LmxhYmVsKCk7Ci0gICAgSnVtcCBpbml0RG9uZSA9IGppdC5icmFuY2gzMihM
ZXNzVGhhbk9yRXF1YWwsIGl0ZXJhdG9yR1BSLCBlbmRHUFIpOworICAgIG1vdmUoVHJ1c3RlZElt
bTY0KEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKSksIHVuZGVmaW5lZEdQUik7CisgICAg
YXV0byBpbml0TG9vcCA9IGxhYmVsKCk7CisgICAgSnVtcCBpbml0RG9uZSA9IGJyYW5jaDMyKExl
c3NUaGFuT3JFcXVhbCwgaXRlcmF0b3JHUFIsIGVuZEdQUik7CiAgICAgewotICAgICAgICBqaXQu
c3RvcmU2NCh1bmRlZmluZWRHUFIsIEJhc2VJbmRleChHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rl
ciwgaXRlcmF0b3JHUFIsIFRpbWVzT25lKSk7Ci0gICAgICAgIGppdC5zdWI2NChUcnVzdGVkSW1t
MzIoc2l6ZW9mKFJlZ2lzdGVyKSksIGl0ZXJhdG9yR1BSKTsKLSAgICAgICAgaml0Lmp1bXAoaW5p
dExvb3ApOworICAgICAgICBzdG9yZTY0KHVuZGVmaW5lZEdQUiwgQmFzZUluZGV4KEdQUkluZm86
OmNhbGxGcmFtZVJlZ2lzdGVyLCBpdGVyYXRvckdQUiwgVGltZXNPbmUpKTsKKyAgICAgICAgc3Vi
NjQoVHJ1c3RlZEltbTMyKHNpemVvZihSZWdpc3RlcikpLCBpdGVyYXRvckdQUik7CisgICAgICAg
IGp1bXAoaW5pdExvb3ApOwogICAgIH0KLSAgICBpbml0RG9uZS5saW5rKCZqaXQpOworICAgIGlu
aXREb25lLmxpbmsodGhpcyk7CiAKLSAgICAvLyBlbWl0V3JpdGVCYXJyaWVyKG1fY29kZUJsb2Nr
KS4KLSAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayks
IGFyZ3VtZW50R1BSMSk7Ci0gICAgSnVtcCBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuID0gaml0
LmJhcnJpZXJCcmFuY2godm0sIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKKyAgICAvLyBJ
bXBsZW1lbnRpbmcgZW1pdFdyaXRlQmFycmllcihtX2NvZGVCbG9jaykuCisgICAgSnVtcCBvd25l
cklzUmVtZW1iZXJlZE9ySW5FZGVuID0gYmFycmllckJyYW5jaCh2bSwgY29kZUJsb2NrR1BSLCBh
cmd1bWVudEdQUjIpOwogCi0gICAgaml0Lm1vdmUoY2FuQmVPcHRpbWl6ZWRHUFIsIEdQUkluZm86
Om51bWJlclRhZ1JlZ2lzdGVyKTsgLy8gc2F2ZS4KLSAgICBqaXQuc2V0dXBBcmd1bWVudHM8ZGVj
bHR5cGUob3BlcmF0aW9uV3JpdGVCYXJyaWVyU2xvd1BhdGgpPigmdm0sIGFyZ3VtZW50R1BSMSk7
Ci0gICAgaml0LnByZXBhcmVDYWxsT3BlcmF0aW9uKHZtKTsKLSAgICBDYWxsIG9wZXJhdGlvbldy
aXRlQmFycmllckNhbGwgPSBqaXQuY2FsbChPcGVyYXRpb25QdHJUYWcpOworICAgIHNldHVwQXJn
dW1lbnRzPGRlY2x0eXBlKG9wZXJhdGlvbldyaXRlQmFycmllclNsb3dQYXRoKT4oJnZtLCBjb2Rl
QmxvY2tHUFIpOworICAgIHByZXBhcmVDYWxsT3BlcmF0aW9uKHZtKTsKKyAgICBDYWxsIG9wZXJh
dGlvbldyaXRlQmFycmllckNhbGwgPSBjYWxsKE9wZXJhdGlvblB0clRhZyk7CisKKyAgICBpZiAo
Y2FuQmVPcHRpbWl6ZWQpCisgICAgICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90
Ojpjb2RlQmxvY2spLCBjb2RlQmxvY2tHUFIpOwogCi0gICAgaml0Lm1vdmUoR1BSSW5mbzo6bnVt
YmVyVGFnUmVnaXN0ZXIsIGNhbkJlT3B0aW1pemVkR1BSKTsgLy8gcmVzdG9yZS4KLSAgICBqaXQu
bW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6TnVtYmVyVGFnKSwgR1BSSW5mbzo6bnVtYmVyVGFn
UmVnaXN0ZXIpOwotICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4ubGluaygmaml0KTsKKyAg
ICBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuLmxpbmsodGhpcyk7CiAKICNpZiBFTkFCTEUoREZH
X0pJVCkKKyAgICAvLyBJbXBsZW1lbnRpbmcgZW1pdEVudGVyT3B0aW1pemF0aW9uQ2hlY2soKS4K
ICAgICBDYWxsIG9wZXJhdGlvbk9wdGltaXplQ2FsbDsKLSAgICBpZiAoT3B0aW9uczo6dXNlREZH
SklUKCkpIHsKLSAgICAgICAgLy8gZW1pdEVudGVyT3B0aW1pemF0aW9uQ2hlY2soKS4KKyAgICBp
ZiAoY2FuQmVPcHRpbWl6ZWQpIHsKICAgICAgICAgSnVtcExpc3Qgc2tpcE9wdGltaXplOwogCi0g
ICAgICAgIHNraXBPcHRpbWl6ZS5hcHBlbmQoaml0LmJyYW5jaFRlc3QzMihaZXJvLCBjYW5CZU9w
dGltaXplZEdQUikpOwotCi0gICAgICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1l
U2xvdDo6Y29kZUJsb2NrKSwgYXJndW1lbnRHUFIxKTsKLSAgICAgICAgc2tpcE9wdGltaXplLmFw
cGVuZChqaXQuYnJhbmNoQWRkMzIoU2lnbmVkLCBUcnVzdGVkSW1tMzIoT3B0aW9uczo6ZXhlY3V0
aW9uQ291bnRlckluY3JlbWVudEZvckVudHJ5KCkpLCBBZGRyZXNzKGFyZ3VtZW50R1BSMSwgQ29k
ZUJsb2NrOjpvZmZzZXRPZkpJVEV4ZWN1dGVDb3VudGVyKCkpKSk7CisgICAgICAgIHNraXBPcHRp
bWl6ZS5hcHBlbmQoYnJhbmNoQWRkMzIoU2lnbmVkLCBUcnVzdGVkSW1tMzIoT3B0aW9uczo6ZXhl
Y3V0aW9uQ291bnRlckluY3JlbWVudEZvckVudHJ5KCkpLCBBZGRyZXNzKGNvZGVCbG9ja0dQUiwg
Q29kZUJsb2NrOjpvZmZzZXRPZkpJVEV4ZWN1dGVDb3VudGVyKCkpKSk7CiAKLSAgICAgICAgaml0
LmNvcHlMTEludEJhc2VsaW5lQ2FsbGVlU2F2ZXNGcm9tRnJhbWVPclJlZ2lzdGVyVG9FbnRyeUZy
YW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0udG9wRW50cnlGcmFtZSk7CisgICAgICAgIGNvcHlMTElu
dEJhc2VsaW5lQ2FsbGVlU2F2ZXNGcm9tRnJhbWVPclJlZ2lzdGVyVG9FbnRyeUZyYW1lQ2FsbGVl
U2F2ZXNCdWZmZXIodm0udG9wRW50cnlGcmFtZSk7CiAKLSAgICAgICAgaml0LnNldHVwQXJndW1l
bnRzPGRlY2x0eXBlKG9wZXJhdGlvbk9wdGltaXplKT4oJnZtLCBUcnVzdGVkSW1tMzIoMCkpOwot
ICAgICAgICBqaXQucHJlcGFyZUNhbGxPcGVyYXRpb24odm0pOwotICAgICAgICBvcGVyYXRpb25P
cHRpbWl6ZUNhbGwgPSBqaXQuY2FsbChPcGVyYXRpb25QdHJUYWcpOworICAgICAgICBzZXR1cEFy
Z3VtZW50czxkZWNsdHlwZShvcGVyYXRpb25PcHRpbWl6ZSk+KCZ2bSwgVHJ1c3RlZEltbTMyKDAp
KTsKKyAgICAgICAgcHJlcGFyZUNhbGxPcGVyYXRpb24odm0pOworICAgICAgICBvcGVyYXRpb25P
cHRpbWl6ZUNhbGwgPSBjYWxsKE9wZXJhdGlvblB0clRhZyk7CiAKLSAgICAgICAgc2tpcE9wdGlt
aXplLmFwcGVuZChqaXQuYnJhbmNoVGVzdFB0cihaZXJvLCByZXR1cm5WYWx1ZUdQUikpOwotICAg
ICAgICBqaXQuZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0
ZXIpOworICAgICAgICBza2lwT3B0aW1pemUuYXBwZW5kKGJyYW5jaFRlc3RQdHIoWmVybywgcmV0
dXJuVmFsdWVHUFIpKTsKKyAgICAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgR1BSSW5mbzo6
Y2FsbEZyYW1lUmVnaXN0ZXIpOwogCi0gICAgICAgIHNraXBPcHRpbWl6ZS5saW5rKCZqaXQpOwor
ICAgICAgICBza2lwT3B0aW1pemUubGluayh0aGlzKTsKICAgICB9CiAjZW5kaWYgLy8gRU5BQkxF
KERGR19KSVQpCiAKICNpZiBDUFUoWDg2XzY0KQotICAgIGppdC5wb3AoWDg2UmVnaXN0ZXJzOjpl
YnApOworICAgIHBvcChYODZSZWdpc3RlcnM6OmVicCk7CiAjZWxpZiBDUFUoQVJNNjQpCi0gICAg
aml0LnBvcFBhaXIoZnJhbWVQb2ludGVyUmVnaXN0ZXIsIGxpbmtSZWdpc3Rlcik7CisgICAgcG9w
UGFpcihmcmFtZVBvaW50ZXJSZWdpc3RlciwgbGlua1JlZ2lzdGVyKTsKICNlbmRpZgotICAgIGpp
dC5yZXQoKTsKKyAgICByZXQoKTsKIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBH
TE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OkV4dHJhQ1RJVGh1bmspOworICAg
IExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnRoaXMsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZl
cjo6UHJvZmlsZTo6RXh0cmFDVElUaHVuayk7CiAgICAgcGF0Y2hCdWZmZXIubGluayhvcGVyYXRp
b25Xcml0ZUJhcnJpZXJDYWxsLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlv
bldyaXRlQmFycmllclNsb3dQYXRoKSk7CiAjaWYgRU5BQkxFKERGR19KSVQpCi0gICAgaWYgKE9w
dGlvbnM6OnVzZURGR0pJVCgpKQorICAgIGlmIChjYW5CZU9wdGltaXplZCkKICAgICAgICAgcGF0
Y2hCdWZmZXIubGluayhvcGVyYXRpb25PcHRpbWl6ZUNhbGwsIEZ1bmN0aW9uUHRyPE9wZXJhdGlv
blB0clRhZz4ob3BlcmF0aW9uT3B0aW1pemUpKTsKICNlbmRpZgotICAgIHJldHVybiBGSU5BTEla
RV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgIkJhc2VsaW5lOiBvcF9lbnRlcl9o
YW5kbGVyIik7CisgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5r
UHRyVGFnLCB0aHVua05hbWUpOworfQorCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+IEpJVDo6b3BfZW50ZXJfY2FuQmVPcHRpbWl6ZWRfR2VuZXJhdG9yKFZNJiB2bSkKK3sK
KyAgICBKSVQgaml0KHZtKTsKKyAgICBjb25zdGV4cHIgYm9vbCBjYW5CZU9wdGltaXplZCA9IHRy
dWU7CisgICAgcmV0dXJuIGppdC5vcF9lbnRlcl9HZW5lcmF0b3Iodm0sIGNhbkJlT3B0aW1pemVk
LCAiQmFzZWxpbmU6IG9wX2VudGVyX2NhbkJlT3B0aW1pemVkIik7Cit9CisKK01hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpvcF9lbnRlcl9jYW5ub3RCZU9wdGltaXpl
ZF9HZW5lcmF0b3IoVk0mIHZtKQoreworICAgIEpJVCBqaXQodm0pOworICAgIGNvbnN0ZXhwciBi
b29sIGNhbkJlT3B0aW1pemVkID0gZmFsc2U7CisgICAgcmV0dXJuIGppdC5vcF9lbnRlcl9HZW5l
cmF0b3Iodm0sIGNhbkJlT3B0aW1pemVkLCAiQmFzZWxpbmU6IG9wX2VudGVyX2Nhbm5vdEJlT3B0
aW1pemVkIik7CiB9CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKQEAgLTE0
MTgsOSArMTQzMCwxMCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20o
CiAKIHZvaWQgSklUOjplbWl0X29wX2xvb3BfaGludChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1
Y3Rpb24pCiB7CisgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKICNpZiBVU0UoSlNWQUxVRTY0KQog
ICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpyZXR1cm5FYXJseUZyb21JbmZpbml0ZUxvb3BzRm9y
RnV6emluZygpICYmIG1fY29kZUJsb2NrLT5sb29wSGludHNBcmVFbGlnaWJsZUZvckZ1enppbmdF
YXJseVJldHVybigpKSkgewotICAgICAgICB1aW50NjRfdCogcHRyID0gdm0oKS5nZXRMb29wSGlu
dEV4ZWN1dGlvbkNvdW50ZXIoaW5zdHJ1Y3Rpb24pOworICAgICAgICB1aW50NjRfdCogcHRyID0g
dm0uZ2V0TG9vcEhpbnRFeGVjdXRpb25Db3VudGVyKGluc3RydWN0aW9uKTsKICAgICAgICAgbG9h
ZDY0KHB0ciwgcmVnVDApOwogICAgICAgICBhdXRvIHNraXBFYXJseVJldHVybiA9IGJyYW5jaDY0
KEJlbG93LCByZWdUMCwgVHJ1c3RlZEltbTY0KE9wdGlvbnM6OmVhcmx5UmV0dXJuRnJvbUluZmlu
aXRlTG9vcHNMaW1pdCgpKSk7CiAKQEAgLTE0MzYsMTMgKzE0NDksMjcgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydQogICAgIH0KICNlbmRpZgogCi0gICAgLy8gRW1p
dCB0aGUgSklUIG9wdGltaXphdGlvbiBjaGVjazogCisjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhV
TktTKQorICAgIC8vIEVtaXQgdGhlIEpJVCBvcHRpbWl6YXRpb24gY2hlY2s6CiAgICAgaWYgKGNh
bkJlT3B0aW1pemVkKCkpIHsKICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoQWRkMzIoUG9zaXRp
dmVPclplcm8sIFRydXN0ZWRJbW0zMihPcHRpb25zOjpleGVjdXRpb25Db3VudGVySW5jcmVtZW50
Rm9yTG9vcCgpKSwKICAgICAgICAgICAgIEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+YWRk
cmVzc09mSklURXhlY3V0ZUNvdW50ZXIoKSkpKTsKICAgICB9CisjZWxzZQorICAgIGlmIChjYW5C
ZU9wdGltaXplZCgpKSB7CisgICAgICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRl
Y29kZUluZGV4Lm9mZnNldCgpOworICAgICAgICBBU1NFUlQoQnl0ZWNvZGVJbmRleChieXRlY29k
ZU9mZnNldCkgPT0gbV9ieXRlY29kZUluZGV4KTsKKyAgICAgICAgQVNTRVJUKG1fY29kZUJsb2Nr
LT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCkgPT0gaW5zdHJ1Y3Rpb24pOworCisgICAg
ICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNzsKKworICAgICAg
ICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsK
KyAgICAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihvcF9sb29wX2hpbnRfR2Vu
ZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOworICAgIH0KKyNlbmRpZgogfQogCisj
aWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2xvb3Bf
aGludChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewogI2lmIEVOQUJMRShERkdfSklUKQpAQCAtMTQ3
MCw2ICsxNDk3LDc0IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9sb29wX2hpbnQoY29uc3QgSW4K
ICNlbmRpZgogfQogCisjZWxzZSAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKKworI2lmIEVO
QUJMRShERkdfSklUKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6
Om9wX2xvb3BfaGludF9HZW5lcmF0b3IoVk0mIHZtKQoreworICAgIC8vIFRoZSB0aHVuayBnZW5l
cmF0ZWQgYnkgdGhpcyBmdW5jdGlvbiBjYW4gb25seSB3b3JrIHdpdGggdGhlIExMSW50IC8gQmFz
ZWxpbmUgSklUIGJlY2F1c2UKKyAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUg
cmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJs
b2NrKCkuCisgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8g
b3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAorICAgIC8vIENhbGxGcmFt
ZTo6Y29kZUJsb2NrKCkuCisgICAgSklUIGppdCh2bSk7CisKKyAgICBqaXQudGFnUmV0dXJuQWRk
cmVzcygpOworCisgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q3
OyAvLyBpbmNvbWluZy4KKyAgICBjb25zdGV4cHIgR1BSUmVnIGNvZGVCbG9ja0dQUiA9IHJlZ1Q2
OworICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwg
Y29kZUJsb2NrR1BSKTsKKworICAgIC8vIEVtaXQgdGhlIEpJVCBvcHRpbWl6YXRpb24gY2hlY2s6
CisgICAgSnVtcCBuZWVkT3B0aW1pemF0aW9uQ2hlY2sgPSBqaXQuYnJhbmNoQWRkMzIoUG9zaXRp
dmVPclplcm8sIFRydXN0ZWRJbW0zMihPcHRpb25zOjpleGVjdXRpb25Db3VudGVySW5jcmVtZW50
Rm9yTG9vcCgpKSwKKyAgICAgICAgICAgIEFkZHJlc3MoY29kZUJsb2NrR1BSLCBDb2RlQmxvY2s6
Om9mZnNldE9mSklURXhlY3V0ZUNvdW50ZXIoKSkpOworICAgIGppdC5yZXQoKTsKKworICAgIG5l
ZWRPcHRpbWl6YXRpb25DaGVjay5saW5rKCZqaXQpOworI2lmIENQVShYODZfNjQpCisgICAgaml0
LnB1c2goZnJhbWVQb2ludGVyUmVnaXN0ZXIpOworI2VsaWYgQ1BVKEFSTTY0KQorICAgIGppdC5w
dXNoUGFpcihmcmFtZVBvaW50ZXJSZWdpc3RlciwgbGlua1JlZ2lzdGVyKTsKKyNlbmRpZgorCisg
ICAgYXV0byB1c2VkUmVnaXN0ZXJzID0gUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lz
dGVycygpOworICAgIHVzZWRSZWdpc3RlcnMuYWRkKGJ5dGVjb2RlT2Zmc2V0R1BSKTsKKyAgICBq
aXQuY29weUxMSW50QmFzZWxpbmVDYWxsZWVTYXZlc0Zyb21GcmFtZU9yUmVnaXN0ZXJUb0VudHJ5
RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bS50b3BFbnRyeUZyYW1lLCB1c2VkUmVnaXN0ZXJzKTsK
KworICAgIGppdC5zdG9yZTMyKGJ5dGVjb2RlT2Zmc2V0R1BSLCBDQ2FsbEhlbHBlcnM6OnRhZ0Zv
cihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykpOworICAgIGppdC5s
c2hpZnQzMihUcnVzdGVkSW1tMzIoQnl0ZWNvZGVJbmRleDo6Y2hlY2twb2ludFNoaWZ0KSwgYnl0
ZWNvZGVPZmZzZXRHUFIpOworICAgIGppdC5zZXR1cEFyZ3VtZW50czxkZWNsdHlwZShvcGVyYXRp
b25PcHRpbWl6ZSk+KFRydXN0ZWRJbW1QdHIoJnZtKSwgYnl0ZWNvZGVPZmZzZXRHUFIpOworICAg
IGppdC5wcmVwYXJlQ2FsbE9wZXJhdGlvbih2bSk7CisgICAgQ2FsbCBvcGVyYXRpb25DYWxsID0g
aml0LmNhbGwoT3BlcmF0aW9uUHRyVGFnKTsKKyAgICBKdW1wIGhhc09wdGltaXplZEVudHJ5ID0g
aml0LmJyYW5jaFRlc3RQdHIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpOworCisjaWYgQ1BVKFg4
Nl82NCkKKyAgICBqaXQucG9wKGZyYW1lUG9pbnRlclJlZ2lzdGVyKTsKKyNlbGlmIENQVShBUk02
NCkKKyAgICBqaXQucG9wUGFpcihmcmFtZVBvaW50ZXJSZWdpc3RlciwgbGlua1JlZ2lzdGVyKTsK
KyNlbmRpZgorICAgIGppdC5yZXQoKTsKKworICAgIGhhc09wdGltaXplZEVudHJ5LmxpbmsoJmpp
dCk7CisjaWYgQ1BVKFg4Nl82NCkKKyAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbTMyKDIgKiBzaXplb2YoQ1BVUmVnaXN0ZXIpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwor
I2VsaWYgQ1BVKEFSTTY0KQorICAgIGppdC5wb3BQYWlyKGZyYW1lUG9pbnRlclJlZ2lzdGVyLCBs
aW5rUmVnaXN0ZXIpOworI2VuZGlmCisgICAgaWYgKEFTU0VSVF9FTkFCTEVEKSB7CisgICAgICAg
IEp1bXAgb2sgPSBqaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZSwgcmV0dXJuVmFs
dWVHUFIsIFRydXN0ZWRJbW1QdHIoYml0d2lzZV9jYXN0PHZvaWQqPihzdGF0aWNfY2FzdDxpbnRw
dHJfdD4oMTAwMCkpKSk7CisgICAgICAgIGppdC5hYm9ydFdpdGhSZWFzb24oSklUVW5yZWFzb25h
YmxlTG9vcEhpbnRKdW1wVGFyZ2V0KTsKKyAgICAgICAgb2subGluaygmaml0KTsKKyAgICB9CisK
KyAgICBqaXQuZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0
ZXIpOworCisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwg
TGlua0J1ZmZlcjo6UHJvZmlsZTo6RXh0cmFDVElUaHVuayk7CisgICAgcGF0Y2hCdWZmZXIubGlu
ayhvcGVyYXRpb25DYWxsLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbk9w
dGltaXplKSk7CisgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5r
UHRyVGFnLCAiQmFzZWxpbmU6IG9wX2xvb3BfaGludCIpOworfQorI2VuZGlmIC8vIEVOQUJMRShE
RkdfSklUKQorI2VuZGlmIC8vICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKKwogdm9pZCBKSVQ6
OmVtaXRfb3BfY2hlY2tfdHJhcHMoY29uc3QgSW5zdHJ1Y3Rpb24qKQogewogICAgIGFkZFNsb3dD
YXNlKGJyYW5jaFRlc3QzMihOb25aZXJvLCBBYnNvbHV0ZUFkZHJlc3MobV92bS0+dHJhcHMoKS50
cmFwQml0c0FkZHJlc3MoKSksIFRydXN0ZWRJbW0zMihWTVRyYXBzOjpBc3luY0V2ZW50cykpKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAJ
KHJldmlzaW9uIDI3ODQyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5l
cmF0b3JzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODEsMTEgKzgxLDcgQEAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBwbwogewogICAgIENDYWxsSGVscGVycyBqaXQ7CiAK
LSNpZiBDUFUoWDg2XzY0KQotICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
MzIoMiAqIHNpemVvZihDUFVSZWdpc3RlcikpLCBYODZSZWdpc3RlcnM6OmVzcCk7Ci0jZWxpZiBD
UFUoQVJNNjQpCi0gICAgaml0LnBvcFBhaXIoQ0NhbGxIZWxwZXJzOjpmcmFtZVBvaW50ZXJSZWdp
c3RlciwgQ0NhbGxIZWxwZXJzOjpsaW5rUmVnaXN0ZXIpOwotI2VuZGlmCisgICAgaml0LmFkZFB0
cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigyICogc2l6ZW9mKENQVVJlZ2lzdGVyKSksIEND
YWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogCiAgICAgQ0NhbGxIZWxwZXJzOjpK
dW1wIGNvbnRpbnVhdGlvbiA9IGppdC5qdW1wKCk7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>430623</attachid>
            <date>2021-06-04 15:41:31 -0700</date>
            <delta_ts>2021-06-04 17:09:22 -0700</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-226375.patch</filename>
            <type>text/plain</type>
            <size>46482</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjc4NTAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDcxIEBA
CisyMDIxLTA2LTA0ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBQ
dXQgdGhlIEJhc2VsaW5lIEpJVCBwcm9sb2d1ZSBhbmQgb3BfbG9vcF9oaW50IGNvZGUgaW4gSklU
IHRodW5rcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIyNjM3NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFRoZSBwcm9sb2d1ZSB1c2VzIDEgb2YgOCBwb3NzaWJsZSBzcGVjaWFsaXplZCB0aHVua3MgdG8g
cmVkdWNlIHRoZSBuZWVkIHRvIHBhc3MKKyAgICAgICAgYXJndW1lbnRzLiAgVGhlIG9ubHkgbmVl
ZGVkIGFyZ3VtZW50IGlzIHRoZSBjb2RlQmxvY2sgcG9pbnRlci4KKyAgICAgICAgVGhlcmUgYXJl
IGFsc28gOCBhbmFsb2dvdXMgYXJpdHkgZml4dXAgcHJvbG9ndWVzIHRoYXQgd29yayBzaW1pbGFy
bHkuCisKKyAgICAgICAgVGhlIG9wX2xvb3BfaGludCB0aHVuayBvbmx5IHRha2VzIDEgYXJndW1l
bnQ6IHRoZSBieXRlY29kZSBvZmZzZXQuCisgICAgICAgIEkgaGFkIHRyaWVkIGRvaW5nIHRoZSBs
b29wX2hpbnQgb3B0aW1pemF0aW9uIGNoZWNrIGluIHRoZSB0aHVuaywgYnV0IHRoaXMgc2VlbXMK
KyAgICAgICAgdG8gaGF2ZSBzb21lIHNsaWdodCBuZWdhdGl2ZSBpbXBhY3Qgb24gYmVuY2htYXJr
IHBlcmZvcm1hbmNlLiAgSSBlbmRlZCB1cCBqdXN0CisgICAgICAgIGdvaW5nIHdpdGggbW92aW5n
IHRoZSBzbG93IHBhdGggaW50byBhIHRodW5rLgorCisgICAgICAgIEFsc28gb3B0aW1pemVkIG9w
X2VudGVyIGEgYml0IG1vcmUgYnkgZWxpbWluYXRpbmcgdGhlIG5lZWQgdG8gcGFzcyBhbnkKKyAg
ICAgICAgYXJndW1lbnRzIHRvIHRoZSB0aHVuay4gIGxvY2Fsc1RvSW5pdEdQUiBpcyBub3cgY29t
cHV0ZWQgaW4gdGhlIHRodW5rLgorICAgICAgICBjYW5CZU9wdGltaXplZCBpcyBvYnZpYXRlZCBi
eSB1c2luZyBzcGVjaWFsaXplZCB0aHVua3MuCisKKyAgICAgICAgTGlua0J1ZmZlciBzaXplIHJl
c3VsdHM6CisKKyAgICAgICAgICAgQmFzZWxpbmVKSVQ6IDkzMzE5NjI4ICg4OC45OTY1MzIgTUIp
ICAgPT4gODM4NTE4MjQgKDc5Ljk2NzMzMSBNQikgICAwLjkweAorICAgICAgICAgRXh0cmFDVElU
aHVuazogNTk5MiAoNS44NTE1NjIgS0IpICAgICAgICA9PiA2OTg0ICg2LjgyMDMxMiBLQikgICAg
ICAgIDEuMTd4CisgICAgICAgICAgICAgICAgICAgICAgICAuLi4KKyAgICAgICAgICAgICAgICAg
VG90YWw6IDE5NzUzMDAwOCAoMTg4LjM3OTI5NSBNQikgPT4gMTg4NDU5NDQ0ICgxNzkuNzI4OTMx
IE1CKSAwLjk1eAorCisgICAgICAgIFNwZWVkb21ldGVyMiBhbmQgSmV0U3RyZWFtMiByZXN1bHRz
IChhcyBtZWFzdXJlZCBvbiBhbiBNMSBNYWMpIGFyZSBuZXV0cmFsLgorCisgICAgICAgICogYXNz
ZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaDoKKyAgICAgICAgKEpTQzo6QWJzdHJhY3RN
YWNyb0Fzc2VtYmxlcjo6dW50YWdSZXR1cm5BZGRyZXNzV2l0aG91dEV4dHJhVmFsaWRhdGlvbik6
CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaDoKKyAgICAgICAgKEpT
Qzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6bmVnYXRlNjQpOgorICAgICAgICAqIGFzc2VtYmxlci9N
YWNyb0Fzc2VtYmxlckFSTTY0RS5oOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0
RTo6dW50YWdSZXR1cm5BZGRyZXNzKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02
NEU6OnVudGFnUmV0dXJuQWRkcmVzc1dpdGhvdXRFeHRyYVZhbGlkYXRpb24pOgorICAgICAgICAq
IGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oOgorICAgICAgICAoSlNDOjpNYWNyb0Fz
c2VtYmxlclg4Nl82NDo6bmVnYXRlNjQpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5o
OgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om9mZnNldE9mTnVtQ2FsbGVlTG9jYWxzKToKKyAg
ICAgICAgKEpTQzo6Q29kZUJsb2NrOjpvZmZzZXRPZk51bVZhcnMpOgorICAgICAgICAoSlNDOjpD
b2RlQmxvY2s6Om9mZnNldE9mQXJndW1lbnRWYWx1ZVByb2ZpbGVzKToKKyAgICAgICAgKEpTQzo6
Q29kZUJsb2NrOjpvZmZzZXRPZlNob3VsZEFsd2F5c0JlSW5saW5lZCk6CisgICAgICAgICogaml0
L0Fzc2VtYmx5SGVscGVycy5oOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmVtaXRT
YXZlQ2FsbGVlU2F2ZXNGb3IpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmVtaXRT
YXZlQ2FsbGVlU2F2ZXNGb3JCYXNlbGluZUpJVCk6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVs
cGVyczo6ZW1pdFJlc3RvcmVDYWxsZWVTYXZlc0ZvckJhc2VsaW5lSklUKToKKyAgICAgICAgKiBq
aXQvSklULmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlQW5kTGlua1dpdGhvdXRGaW5h
bGl6aW5nKToKKyAgICAgICAgKEpTQzo6SklUOjpwcm9sb2d1ZUdlbmVyYXRvcik6CisgICAgICAg
IChKU0M6OkpJVDo6YXJpdHlGaXh1cFByb2xvZ3VlR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6
SklUOjpwcml2YXRlQ29tcGlsZUV4Y2VwdGlvbkhhbmRsZXJzKToKKyAgICAgICAgKiBqaXQvSklU
Lmg6CisgICAgICAgICogaml0L0pJVElubGluZXMuaDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
TmFrZWROZWFyQ2FsbCk6CisgICAgICAgICogaml0L0pJVE9wY29kZXMuY3BwOgorICAgICAgICAo
SlNDOjpKSVQ6Om9wX3JldF9oYW5kbGVyR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X29wX2VudGVyKToKKyAgICAgICAgKEpTQzo6SklUOjpvcF9lbnRlcl9HZW5lcmF0b3IpOgor
ICAgICAgICAoSlNDOjpKSVQ6Om9wX2VudGVyX2NhbkJlT3B0aW1pemVkX0dlbmVyYXRvcik6Cisg
ICAgICAgIChKU0M6OkpJVDo6b3BfZW50ZXJfY2Fubm90QmVPcHRpbWl6ZWRfR2VuZXJhdG9yKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2xvb3BfaGludCk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdFNsb3dfb3BfbG9vcF9oaW50KToKKyAgICAgICAgKEpTQzo6SklUOjpvcF9sb29wX2hp
bnRfR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUOjpvcF9lbnRlcl9oYW5kbGVyR2VuZXJh
dG9yKTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvVGh1bmtHZW5lcmF0b3JzLmNwcDoKKyAgICAg
ICAgKEpTQzo6cG9wVGh1bmtTdGFja1ByZXNlcnZlc0FuZEhhbmRsZUV4Y2VwdGlvbkdlbmVyYXRv
cik6CisKIDIwMjEtMDYtMDQgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAg
ICAgICBEb24ndCBlbWl0IHRoZSBOb3REb3VibGUgY2hlY2tzIGlmIHdlJ3JlIGFscmVhZHkgTm90
RG91YmxlLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1h
Y3JvQXNzZW1ibGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgJKHJldmlzaW9uIDI3ODQ5OCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMDAzLDYgKzEwMDMsNyBAQCBwdWJsaWM6CiAKICAgICBBTFdBWVNfSU5M
SU5FIHZvaWQgdGFnUmV0dXJuQWRkcmVzcygpIHsgfQogICAgIEFMV0FZU19JTkxJTkUgdm9pZCB1
bnRhZ1JldHVybkFkZHJlc3MoUmVnaXN0ZXJJRCA9IFJlZ2lzdGVySUQ6OkludmFsaWRHUFJSZWcp
IHsgfQorICAgIEFMV0FZU19JTkxJTkUgdm9pZCB1bnRhZ1JldHVybkFkZHJlc3NXaXRob3V0RXh0
cmFWYWxpZGF0aW9uKCkgeyB9CiAKICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgdGFnUHRyKFB0clRh
ZywgUmVnaXN0ZXJJRCkgeyB9CiAgICAgQUxXQVlTX0lOTElORSB2b2lkIHRhZ1B0cihSZWdpc3Rl
cklELCBSZWdpc3RlcklEKSB7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oCShyZXZpc2lvbiAyNzg0OTgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaAko
d29ya2luZyBjb3B5KQpAQCAtMjIzNSw2ICsyMjM1LDEyIEBAIHB1YmxpYzoKICAgICAgICAgb3JE
b3VibGUob3AxLCBvcDIsIGRlc3QpOwogICAgIH0KIAorICAgIHZvaWQgbmVnYXRlNjQoUmVnaXN0
ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbm90NjQoZGVzdCk7CisgICAgICAgIGFkZDY0KFRy
dXN0ZWRJbW0zMigxKSwgZGVzdCk7CisgICAgfQorCiAgICAgdm9pZCBuZWdhdGVEb3VibGUoRlBS
ZWdpc3RlcklEIHNyYywgRlBSZWdpc3RlcklEIGRlc3QpCiAgICAgewogICAgICAgICBtX2Fzc2Vt
Ymxlci5mbmVnPDY0PihkZXN0LCBzcmMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTTY0RS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NEUuaAkocmV2aXNpb24gMjc4
NDk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFS
TTY0RS5oCSh3b3JraW5nIGNvcHkpCkBAIC01NCwxMCArNTQsMTUgQEAgcHVibGljOgogCiAgICAg
QUxXQVlTX0lOTElORSB2b2lkIHVudGFnUmV0dXJuQWRkcmVzcyhSZWdpc3RlcklEIHNjcmF0Y2gg
PSBJbnZhbGlkR1BSKQogICAgIHsKLSAgICAgICAgdW50YWdQdHIoQVJNNjRSZWdpc3RlcnM6OnNw
LCBBUk02NFJlZ2lzdGVyczo6bHIpOworICAgICAgICB1bnRhZ1JldHVybkFkZHJlc3NXaXRob3V0
RXh0cmFWYWxpZGF0aW9uKCk7CiAgICAgICAgIHZhbGlkYXRlVW50YWdnZWRQdHIoQVJNNjRSZWdp
c3RlcnM6OmxyLCBzY3JhdGNoKTsKICAgICB9CiAKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgdW50
YWdSZXR1cm5BZGRyZXNzV2l0aG91dEV4dHJhVmFsaWRhdGlvbigpCisgICAgeworICAgICAgICB1
bnRhZ1B0cihBUk02NFJlZ2lzdGVyczo6c3AsIEFSTTY0UmVnaXN0ZXJzOjpscik7CisgICAgfQor
CiAgICAgQUxXQVlTX0lOTElORSB2b2lkIHRhZ1B0cihQdHJUYWcgdGFnLCBSZWdpc3RlcklEIHRh
cmdldCkKICAgICB7CiAgICAgICAgIGF1dG8gdGFnR1BSID0gZ2V0Q2FjaGVkRGF0YVRlbXBSZWdp
c3RlcklEQW5kSW52YWxpZGF0ZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaAkocmV2aXNpb24gMjc4NDk4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82
NC5oCSh3b3JraW5nIGNvcHkpCkBAIC05MTgsNiArOTE4LDEyIEBAIHB1YmxpYzoKICAgICAgICAg
bV9hc3NlbWJsZXIubm90cV9tKGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UsIGRlc3QuaW5kZXgsIGRl
c3Quc2NhbGUpOwogICAgIH0KIAorICAgIHZvaWQgbmVnYXRlNjQoUmVnaXN0ZXJJRCBkZXN0KQor
ICAgIHsKKyAgICAgICAgbm90NjQoZGVzdCk7CisgICAgICAgIGFkZDY0KFRydXN0ZWRJbW0zMigx
KSwgZGVzdCk7CisgICAgfQorCiAgICAgdm9pZCBsb2FkNjQoSW1wbGljaXRBZGRyZXNzIGFkZHJl
c3MsIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CiAgICAgICAgIG1fYXNzZW1ibGVyLm1vdnFfbXIo
YWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSwgZGVzdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiAyNzg0OTgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAg
LTE2OSw3ICsxNjksMTAgQEAgcHVibGljOgogICAgIHVuc2lnbmVkIG51bVRtcHMoKSBjb25zdCB7
IHJldHVybiBtX3VubGlua2VkQ29kZS0+aGFzQ2hlY2twb2ludHMoKSAqIG1heE51bUNoZWNrcG9p
bnRUbXBzOyB9CiAKICAgICB1bnNpZ25lZCogYWRkcmVzc09mTnVtUGFyYW1ldGVycygpIHsgcmV0
dXJuICZtX251bVBhcmFtZXRlcnM7IH0KKworICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZO
dW1DYWxsZWVMb2NhbHMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX251
bUNhbGxlZUxvY2Fscyk7IH0KICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTnVtUGFyYW1l
dGVycygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1fbnVtUGFyYW1ldGVy
cyk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTnVtVmFycygpIHsgcmV0dXJuIE9C
SkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1fbnVtVmFycyk7IH0KIAogICAgIENvZGVCbG9jayog
YWx0ZXJuYXRpdmUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxDb2RlQmxvY2sqPihtX2Fs
dGVybmF0aXZlLmdldCgpKTsgfQogICAgIHZvaWQgc2V0QWx0ZXJuYXRpdmUoVk0mLCBDb2RlQmxv
Y2sqKTsKQEAgLTQ4Niw2ICs0ODksOCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiByZXN1bHQ7
CiAgICAgfQogCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkFyZ3VtZW50VmFsdWVQcm9m
aWxlcygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1fYXJndW1lbnRWYWx1
ZVByb2ZpbGVzKTsgfQorCiAgICAgVmFsdWVQcm9maWxlJiB2YWx1ZVByb2ZpbGVGb3JCeXRlY29k
ZUluZGV4KEJ5dGVjb2RlSW5kZXgpOwogICAgIFNwZWN1bGF0ZWRUeXBlIHZhbHVlUHJvZmlsZVBy
ZWRpY3Rpb25Gb3JCeXRlY29kZUluZGV4KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIEJ5dGVj
b2RlSW5kZXgpOwogCkBAIC04MTksNyArODI0LDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIGJv
b2wgd2FzQ29tcGlsZWRXaXRoRGVidWdnaW5nT3Bjb2RlcygpIGNvbnN0IHsgcmV0dXJuIG1fdW5s
aW5rZWRDb2RlLT53YXNDb21waWxlZFdpdGhEZWJ1Z2dpbmdPcGNvZGVzKCk7IH0KLSAgICAKKwog
ICAgIC8vIFRoaXMgaXMgaW50ZW50aW9uYWxseSBwdWJsaWM7IGl0J3MgdGhlIHJlc3BvbnNpYmls
aXR5IG9mIGFueW9uZSBkb2luZyBhbnkKICAgICAvLyBvZiB0aGUgZm9sbG93aW5nIHRvIGhvbGQg
dGhlIGxvY2s6CiAgICAgLy8KQEAgLTkwNiw2ICs5MTEsNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0
aWMgcHRyZGlmZl90IG9mZnNldE9mTWV0YWRhdGFUYWJsZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZT
RVRPRihDb2RlQmxvY2ssIG1fbWV0YWRhdGEpOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZz
ZXRPZkluc3RydWN0aW9uc1Jhd1BvaW50ZXIoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29k
ZUJsb2NrLCBtX2luc3RydWN0aW9uc1Jhd1BvaW50ZXIpOyB9CisgICAgc3RhdGljIHB0cmRpZmZf
dCBvZmZzZXRPZlNob3VsZEFsd2F5c0JlSW5saW5lZCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRP
RihDb2RlQmxvY2ssIG1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkKTsgfQogCiAgICAgYm9vbCBsb29w
SGludHNBcmVFbGlnaWJsZUZvckZ1enppbmdFYXJseVJldHVybigpCiAgICAgewpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCShyZXZpc2lvbiAyNzg0
OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMjYsNiArMzI2LDExIEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKGNv
ZGVCbG9jayk7CiAKICAgICAgICAgY29uc3QgUmVnaXN0ZXJBdE9mZnNldExpc3QqIGNhbGxlZVNh
dmVzID0gY29kZUJsb2NrLT5jYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CisgICAgICAgIGVtaXRTYXZl
Q2FsbGVlU2F2ZXNGb3IoY2FsbGVlU2F2ZXMpOworICAgIH0KKworICAgIHZvaWQgZW1pdFNhdmVD
YWxsZWVTYXZlc0Zvcihjb25zdCBSZWdpc3RlckF0T2Zmc2V0TGlzdCogY2FsbGVlU2F2ZXMpCisg
ICAgewogICAgICAgICBSZWdpc3RlclNldCBkb250U2F2ZVJlZ2lzdGVycyA9IFJlZ2lzdGVyU2V0
KFJlZ2lzdGVyU2V0OjpzdGFja1JlZ2lzdGVycygpLCBSZWdpc3RlclNldDo6YWxsRlBScygpKTsK
ICAgICAgICAgdW5zaWduZWQgcmVnaXN0ZXJDb3VudCA9IGNhbGxlZVNhdmVzLT5zaXplKCk7CiAK
QEAgLTM5OSw2ICs0MDQsMTEgQEAgcHVibGljOgogICAgICAgICBlbWl0U2F2ZUNhbGxlZVNhdmVz
Rm9yKGNvZGVCbG9jaygpKTsKICAgICB9CiAKKyAgICB2b2lkIGVtaXRTYXZlQ2FsbGVlU2F2ZXNG
b3JCYXNlbGluZUpJVCgpCisgICAgeworICAgICAgICBlbWl0U2F2ZUNhbGxlZVNhdmVzRm9yKCZS
ZWdpc3RlckF0T2Zmc2V0TGlzdDo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7
CisgICAgfQorCiAgICAgdm9pZCBlbWl0U2F2ZVRoZW5NYXRlcmlhbGl6ZVRhZ1JlZ2lzdGVycygp
CiAgICAgewogI2lmIFVTRShKU1ZBTFVFNjQpCkBAIC00MTcsNiArNDI3LDExIEBAIHB1YmxpYzoK
ICAgICAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlc0Zvcihjb2RlQmxvY2soKSk7CiAgICAgfQog
CisgICAgdm9pZCBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzRm9yQmFzZWxpbmVKSVQoKQorICAgIHsK
KyAgICAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlc0ZvcigmUmVnaXN0ZXJBdE9mZnNldExpc3Q6
OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOworICAgIH0KKwogICAgIHZvaWQg
ZW1pdFJlc3RvcmVTYXZlZFRhZ1JlZ2lzdGVycygpCiAgICAgewogI2lmIFVTRShKU1ZBTFVFNjQp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCShyZXZpc2lvbiAyNzg0OTgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgzLDcg
KzgzLDcgQEAgSklUOjp+SklUKCkKIHsKIH0KIAotI2lmIEVOQUJMRShERkdfSklUKQorI2lmIEVO
QUJMRShERkdfSklUKSAmJiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiB2b2lkIEpJVDo6ZW1p
dEVudGVyT3B0aW1pemF0aW9uQ2hlY2soKQogewogICAgIGlmICghY2FuQmVPcHRpbWl6ZWQoKSkK
QEAgLTEwMSw3ICsxMDEsNyBAQCB2b2lkIEpJVDo6ZW1pdEVudGVyT3B0aW1pemF0aW9uQ2hlY2so
KQogICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVy
KTsKICAgICBza2lwT3B0aW1pemUubGluayh0aGlzKTsKIH0KLSNlbmRpZgorI2VuZGlmIC8vIEVO
QUJMRShERkdfSklUKSAmJiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpKAogCiB2b2lkIEpJVDo6
ZW1pdE5vdGlmeVdyaXRlKFdhdGNocG9pbnRTZXQqIHNldCkKIHsKQEAgLTY4Miw2ICs2ODIsMjcg
QEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICNlbmRpZgogfQogCisjZGVm
aW5lIEZPUl9FQUNIX05PTl9QUk9GSUxJTkdfUFJPTE9HVUVfR0VORVJBVE9SKHYpIFwKKyAgICB2
KCFkb2VzUHJvZmlsaW5nLCAhaXNDb25zdHJ1Y3RvciwgIWhhc0h1Z2VGcmFtZSwgcHJvbG9ndWVH
ZW5lcmF0b3IwLCBhcml0eUZpeHVwX3Byb2xvZ3VlR2VuZXJhdG9yMCkgXAorICAgIHYoIWRvZXNQ
cm9maWxpbmcsICFpc0NvbnN0cnVjdG9yLCAgaGFzSHVnZUZyYW1lLCBwcm9sb2d1ZUdlbmVyYXRv
cjEsIGFyaXR5Rml4dXBfcHJvbG9ndWVHZW5lcmF0b3IxKSBcCisgICAgdighZG9lc1Byb2ZpbGlu
ZywgIGlzQ29uc3RydWN0b3IsICFoYXNIdWdlRnJhbWUsIHByb2xvZ3VlR2VuZXJhdG9yMiwgYXJp
dHlGaXh1cF9wcm9sb2d1ZUdlbmVyYXRvcjIpIFwKKyAgICB2KCFkb2VzUHJvZmlsaW5nLCAgaXND
b25zdHJ1Y3RvciwgIGhhc0h1Z2VGcmFtZSwgcHJvbG9ndWVHZW5lcmF0b3IzLCBhcml0eUZpeHVw
X3Byb2xvZ3VlR2VuZXJhdG9yMykKKworI2lmIEVOQUJMRShERkdfSklUKQorI2RlZmluZSBGT1Jf
RUFDSF9QUk9GSUxJTkdfUFJPTE9HVUVfR0VORVJBVE9SKHYpIFwKKyAgICB2KCBkb2VzUHJvZmls
aW5nLCAhaXNDb25zdHJ1Y3RvciwgIWhhc0h1Z2VGcmFtZSwgcHJvbG9ndWVHZW5lcmF0b3I0LCBh
cml0eUZpeHVwX3Byb2xvZ3VlR2VuZXJhdG9yNCkgXAorICAgIHYoIGRvZXNQcm9maWxpbmcsICFp
c0NvbnN0cnVjdG9yLCAgaGFzSHVnZUZyYW1lLCBwcm9sb2d1ZUdlbmVyYXRvcjUsIGFyaXR5Rml4
dXBfcHJvbG9ndWVHZW5lcmF0b3I1KSBcCisgICAgdiggZG9lc1Byb2ZpbGluZywgIGlzQ29uc3Ry
dWN0b3IsICFoYXNIdWdlRnJhbWUsIHByb2xvZ3VlR2VuZXJhdG9yNiwgYXJpdHlGaXh1cF9wcm9s
b2d1ZUdlbmVyYXRvcjYpIFwKKyAgICB2KCBkb2VzUHJvZmlsaW5nLCAgaXNDb25zdHJ1Y3Rvciwg
IGhhc0h1Z2VGcmFtZSwgcHJvbG9ndWVHZW5lcmF0b3I3LCBhcml0eUZpeHVwX3Byb2xvZ3VlR2Vu
ZXJhdG9yNykKKworI2Vsc2UgLy8gbm90IEVOQUJMRShERkdfSklUKQorI2RlZmluZSBGT1JfRUFD
SF9QUk9GSUxJTkdfUFJPTE9HVUVfR0VORVJBVE9SKHYpCisjZW5kaWYgLy8gRU5BQkxFKERGR19K
SVQpCisKKyNkZWZpbmUgRk9SX0VBQ0hfUFJPTE9HVUVfR0VORVJBVE9SKHYpIFwKKyAgICBGT1Jf
RUFDSF9OT05fUFJPRklMSU5HX1BST0xPR1VFX0dFTkVSQVRPUih2KSBcCisgICAgRk9SX0VBQ0hf
UFJPRklMSU5HX1BST0xPR1VFX0dFTkVSQVRPUih2KQorCiB2b2lkIEpJVDo6Y29tcGlsZUFuZExp
bmtXaXRob3V0RmluYWxpemluZyhKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCiB7CiAgICAg
REZHOjpDYXBhYmlsaXR5TGV2ZWwgbGV2ZWwgPSBtX2NvZGVCbG9jay0+Y2FwYWJpbGl0eUxldmVs
KCk7CkBAIC03NTAsNiArNzcxLDggQEAgdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZp
bmFsaXppbgogICAgICAgICBub3AoKTsKIAogICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKCk7CisK
KyNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAgICAgZW1pdFB1dFRvQ2FsbEZyYW1lSGVh
ZGVyKG1fY29kZUJsb2NrLCBDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spOwogCiAgICAgTGFiZWwg
YmVnaW5MYWJlbCh0aGlzKTsKQEAgLTc3MSwxMSArNzk0LDEwIEBAIHZvaWQgSklUOjpjb21waWxl
QW5kTGlua1dpdGhvdXRGaW5hbGl6aW4KICAgICBpZiAobV9jb2RlQmxvY2stPmNvZGVUeXBlKCkg
PT0gRnVuY3Rpb25Db2RlKSB7CiAgICAgICAgIEFTU0VSVCghbV9ieXRlY29kZUluZGV4KTsKICAg
ICAgICAgaWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewotICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBhcmd1bWVudCA9IDA7IGFyZ3VtZW50IDwgbV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMo
KTsgKythcmd1bWVudCkgewotICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgaXMgYSBjb25zdHJ1
Y3RvciwgdGhlbiB3ZSB3YW50IHRvIHB1dCBpbiBhIGR1bW15IHByb2ZpbGluZyBzaXRlICh0bwot
ICAgICAgICAgICAgICAgIC8vIGtlZXAgdGhpbmdzIGNvbnNpc3RlbnQpIGJ1dCB3ZSBkb24ndCBh
Y3R1YWxseSB3YW50IHRvIHJlY29yZCB0aGUgZHVtbXkgdmFsdWUuCi0gICAgICAgICAgICAgICAg
aWYgKG1fY29kZUJsb2NrLT5pc0NvbnN0cnVjdG9yKCkgJiYgIWFyZ3VtZW50KQotICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIC8vIElmIHRoaXMgaXMgYSBjb25zdHJ1
Y3RvciwgdGhlbiB3ZSB3YW50IHRvIHB1dCBpbiBhIGR1bW15IHByb2ZpbGluZyBzaXRlICh0bwor
ICAgICAgICAgICAgLy8ga2VlcCB0aGluZ3MgY29uc2lzdGVudCkgYnV0IHdlIGRvbid0IGFjdHVh
bGx5IHdhbnQgdG8gcmVjb3JkIHRoZSBkdW1teSB2YWx1ZS4KKyAgICAgICAgICAgIHVuc2lnbmVk
IHN0YXJ0QXJndW1lbnQgPSBtX2NvZGVCbG9jay0+aXNDb25zdHJ1Y3RvcigpID8gMSA6IDA7Cisg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0gc3RhcnRBcmd1bWVudDsgYXJndW1l
bnQgPCBtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpOyArK2FyZ3VtZW50KSB7CiAgICAgICAg
ICAgICAgICAgaW50IG9mZnNldCA9IENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXRJbmNsdWRpbmdU
aGlzKGFyZ3VtZW50KSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSk7CiAjaWYg
VVNFKEpTVkFMVUU2NCkKICAgICAgICAgICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0g
SlNWYWx1ZVJlZ3MocmVnVDApOwpAQCAtNzg5LDcgKzgxMSwzNCBAQCB2b2lkIEpJVDo6Y29tcGls
ZUFuZExpbmtXaXRob3V0RmluYWxpemluCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9
Ci0gICAgCisjZWxzZSAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKKyAgICBjb25zdGV4cHIg
R1BSUmVnIGNvZGVCbG9ja0dQUiA9IHJlZ1Q3OworICAgIEFTU0VSVCghbV9ieXRlY29kZUluZGV4
KTsKKworICAgIGludCBmcmFtZVRvcE9mZnNldCA9IHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2Nv
ZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpOworICAgIHVuc2lnbmVkIG1heEZyYW1lU2l6ZSA9
IC1mcmFtZVRvcE9mZnNldDsKKworICAgIGJvb2wgZG9lc1Byb2ZpbGluZyA9IChtX2NvZGVCbG9j
ay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUpICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKTsK
KyAgICBib29sIGlzQ29uc3RydWN0b3IgPSBtX2NvZGVCbG9jay0+aXNDb25zdHJ1Y3RvcigpOwor
ICAgIGJvb2wgaGFzSHVnZUZyYW1lID0gbWF4RnJhbWVTaXplID4gT3B0aW9uczo6cmVzZXJ2ZWRa
b25lU2l6ZSgpOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBUaHVua0dlbmVyYXRvciBnZW5lcmF0
b3JzW10gPSB7CisjZGVmaW5lIFVTRV9QUk9MT0dVRV9HRU5FUkFUT1IoZG9lc1Byb2ZpbGluZywg
aXNDb25zdHJ1Y3RvciwgaGFzSHVnZUZyYW1lLCBuYW1lLCBhcml0eUZpeHVwTmFtZSkgbmFtZSwK
KyAgICAgICAgRk9SX0VBQ0hfUFJPTE9HVUVfR0VORVJBVE9SKFVTRV9QUk9MT0dVRV9HRU5FUkFU
T1IpCisjdW5kZWYgVVNFX1BST0xPR1VFX0dFTkVSQVRPUgorICAgIH07CisgICAgc3RhdGljIGNv
bnN0ZXhwciB1bnNpZ25lZCBudW1iZXJPZkdlbmVyYXRvcnMgPSBzaXplb2YoZ2VuZXJhdG9ycykg
LyBzaXplb2YoZ2VuZXJhdG9yc1swXSk7CisKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2spLCBjb2RlQmxvY2tHUFIpOworCisgICAgdW5zaWduZWQgZ2VuZXJhdG9yU2VsZWN0b3Ig
PSBkb2VzUHJvZmlsaW5nIDw8IDIgfCBpc0NvbnN0cnVjdG9yIDw8IDEgfCBoYXNIdWdlRnJhbWUg
PDwgMDsKKyAgICBSRUxFQVNFX0FTU0VSVChnZW5lcmF0b3JTZWxlY3RvciA8IG51bWJlck9mR2Vu
ZXJhdG9ycyk7CisgICAgYXV0byBnZW5lcmF0b3IgPSBnZW5lcmF0b3JzW2dlbmVyYXRvclNlbGVj
dG9yXTsKKyAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bSgpLmdldENUSVN0dWIoZ2VuZXJhdG9yKS5y
ZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOworCisgICAgTGFiZWwgYm9keUxhYmVsKHRoaXMpOwor
I2VuZGlmIC8vICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKKwogICAgIFJFTEVBU0VfQVNTRVJU
KCFKSVRDb2RlOjppc0pJVChtX2NvZGVCbG9jay0+aml0VHlwZSgpKSk7CiAKICAgICBpZiAoVU5M
SUtFTFkoc2l6ZU1hcmtlcikpCkBAIC04MDMsMTYgKzg1MiwxOSBAQCB2b2lkIEpJVDo6Y29tcGls
ZUFuZExpbmtXaXRob3V0RmluYWxpemluCiAgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRFbmRP
ZlNsb3dQYXRoKGxhYmVsKCkpOwogICAgIG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyLmFwcGVu
ZEl0ZW0obGFiZWwoKSwgUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyOjpkZWZhdWx0Q29kZU9yaWdp
bigpKTsKIAorI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICBzdGFja092ZXJmbG93
LmxpbmsodGhpcyk7CiAgICAgbV9ieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgwKTsKICAg
ICBpZiAobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpCiAgICAgICAgIGFkZFB0cihUcnVz
dGVkSW1tMzIoLXN0YXRpY19jYXN0PGludDMyX3Q+KG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhD
YWxsKSksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBjYWxsT3BlcmF0aW9uV2l0aENhbGxG
cmFtZVJvbGxiYWNrT25FeGNlcHRpb24ob3BlcmF0aW9uVGhyb3dTdGFja092ZXJmbG93RXJyb3Is
IG1fY29kZUJsb2NrKTsKKyNlbmRpZgogCiAgICAgLy8gSWYgdGhlIG51bWJlciBvZiBwYXJhbWV0
ZXJzIGlzIDEsIHdlIG5ldmVyIHJlcXVpcmUgYXJpdHkgZml4dXAuCiAgICAgYm9vbCByZXF1aXJl
c0FyaXR5Rml4dXAgPSBtX2NvZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJzICE9IDE7CiAgICAgaWYg
KG1fY29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSAmJiByZXF1aXJlc0FyaXR5
Rml4dXApIHsKICAgICAgICAgbV9hcml0eUNoZWNrID0gbGFiZWwoKTsKKyNpZiAhRU5BQkxFKEVY
VFJBX0NUSV9USFVOS1MpCiAgICAgICAgIHN0b3JlOChUcnVzdGVkSW1tMzIoMCksICZtX2NvZGVC
bG9jay0+bV9zaG91bGRBbHdheXNCZUlubGluZWQpOwogICAgICAgICBlbWl0RnVuY3Rpb25Qcm9s
b2d1ZSgpOwogICAgICAgICBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIobV9jb2RlQmxvY2ssIENh
bGxGcmFtZVNsb3Q6OmNvZGVCbG9jayk7CkBAIC04MzEsMTcgKzg4Myw0MiBAQCB2b2lkIEpJVDo6
Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluCiAgICAgICAgIG1vdmUocmV0dXJuVmFsdWVH
UFIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CiAgICAgICAgIGVtaXROYWtlZE5lYXJDYWxsKG1f
dm0tPmdldENUSVN0dWIoYXJpdHlGaXh1cEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFn
PigpKTsKIAorICAgICAgICBqdW1wKGJlZ2luTGFiZWwpOworCisjZWxzZSAvLyBFTkFCTEUoRVhU
UkFfQ1RJX1RIVU5LUykKKyAgICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoKTsKKworICAgICAg
ICBzdGF0aWNfYXNzZXJ0KGNvZGVCbG9ja0dQUiA9PSByZWdUNyk7CisgICAgICAgIEFTU0VSVCgh
bV9ieXRlY29kZUluZGV4KTsKKworICAgICAgICBzdGF0aWMgY29uc3RleHByIFRodW5rR2VuZXJh
dG9yIGdlbmVyYXRvcnNbXSA9IHsKKyNkZWZpbmUgVVNFX1BST0xPR1VFX0dFTkVSQVRPUihkb2Vz
UHJvZmlsaW5nLCBpc0NvbnN0cnVjdG9yLCBoYXNIdWdlRnJhbWUsIG5hbWUsIGFyaXR5Rml4dXBO
YW1lKSBhcml0eUZpeHVwTmFtZSwKKyAgICAgICAgICAgIEZPUl9FQUNIX1BST0xPR1VFX0dFTkVS
QVRPUihVU0VfUFJPTE9HVUVfR0VORVJBVE9SKQorI3VuZGVmIFVTRV9QUk9MT0dVRV9HRU5FUkFU
T1IKKyAgICAgICAgfTsKKyAgICAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBudW1iZXJP
ZkdlbmVyYXRvcnMgPSBzaXplb2YoZ2VuZXJhdG9ycykgLyBzaXplb2YoZ2VuZXJhdG9yc1swXSk7
CisKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrKSwgY29kZUJsb2NrR1BS
KTsKKworICAgICAgICBSRUxFQVNFX0FTU0VSVChnZW5lcmF0b3JTZWxlY3RvciA8IG51bWJlck9m
R2VuZXJhdG9ycyk7CisgICAgICAgIGF1dG8gZ2VuZXJhdG9yID0gZ2VuZXJhdG9yc1tnZW5lcmF0
b3JTZWxlY3Rvcl07CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGdlbmVyYXRvcik7CisgICAgICAg
IGVtaXROYWtlZE5lYXJDYWxsKHZtKCkuZ2V0Q1RJU3R1YihnZW5lcmF0b3IpLnJldGFnZ2VkQ29k
ZTxOb1B0clRhZz4oKSk7CisKKyAgICAgICAganVtcChib2R5TGFiZWwpOworI2VuZGlmIC8vICFF
TkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKKwogI2lmIEFTU0VSVF9FTkFCTEVECiAgICAgICAgIG1f
Ynl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoKTsgLy8gUmVzZXQgdGhpcywgaW4gb3JkZXIg
dG8gZ3VhcmQgaXRzIHVzZSB3aXRoIEFTU0VSVHMuCiAjZW5kaWYKLQotICAgICAgICBqdW1wKGJl
Z2luTGFiZWwpOwogICAgIH0gZWxzZQogICAgICAgICBtX2FyaXR5Q2hlY2sgPSBlbnRyeUxhYmVs
OyAvLyBOZXZlciByZXF1aXJlIGFyaXR5IGZpeHVwLgogCiAgICAgQVNTRVJUKG1fam1wVGFibGUu
aXNFbXB0eSgpKTsKICAgICAKKyNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAgICAgcHJp
dmF0ZUNvbXBpbGVFeGNlcHRpb25IYW5kbGVycygpOworI2VuZGlmCiAgICAgCiAgICAgaWYgKG1f
ZGlzYXNzZW1ibGVyKQogICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0RW5kT2ZDb2RlKGxhYmVs
KCkpOwpAQCAtODUxLDYgKzkyOCwyNDAgQEAgdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91
dEZpbmFsaXppbgogICAgIGxpbmsoKTsKIH0KIAorI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktT
KQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OnByb2xvZ3VlR2Vu
ZXJhdG9yKFZNJiB2bSwgYm9vbCBkb2VzUHJvZmlsaW5nLCBib29sIGlzQ29uc3RydWN0b3IsIGJv
b2wgaGFzSHVnZUZyYW1lLCBjb25zdCBjaGFyKiB0aHVua05hbWUpCit7CisgICAgLy8gVGhpcyBm
dW5jdGlvbiBnZW5lcmF0ZXMgdGhlIEJhc2VsaW5lIEpJVCdzIHByb2xvZ3VlIGNvZGUuIEl0IGlz
IG5vdCB1c2VhYmxlIGJ5IG90aGVyIHRpZXJzLgorICAgIGNvbnN0ZXhwciBHUFJSZWcgY29kZUJs
b2NrR1BSID0gcmVnVDc7IC8vIGluY29taW5nLgorCisgICAgY29uc3RleHByIGludCB2aXJ0dWFs
UmVnaXN0ZXJTaXplID0gc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKTsKKyAgICBj
b25zdGV4cHIgaW50IHZpcnR1YWxSZWdpc3RlclNpemVTaGlmdCA9IDM7CisgICAgc3RhdGljX2Fz
c2VydCgoMSA8PCB2aXJ0dWFsUmVnaXN0ZXJTaXplU2hpZnQpID09IHZpcnR1YWxSZWdpc3RlclNp
emUpOworCisgICAgdGFnUmV0dXJuQWRkcmVzcygpOworCisgICAgc3RvcmU2NChjb2RlQmxvY2tH
UFIsIGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSk7CisKKyAgICBsb2FkMzIo
QWRkcmVzcyhjb2RlQmxvY2tHUFIsIENvZGVCbG9jazo6b2Zmc2V0T2ZOdW1DYWxsZWVMb2NhbHMo
KSksIHJlZ1QxKTsKKyAgICBpZiBjb25zdGV4cHIgKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhD
YWxsSW5SZWdpc3RlcnMpCisgICAgICAgIGFkZDMyKFRydXN0ZWRJbW0zMihtYXhGcmFtZUV4dGVu
dEZvclNsb3dQYXRoQ2FsbEluUmVnaXN0ZXJzKSwgcmVnVDEpOworICAgIGxzaGlmdDMyKFRydXN0
ZWRJbW0zMih2aXJ0dWFsUmVnaXN0ZXJTaXplU2hpZnQpLCByZWdUMSk7CisgICAgbmVnYXRlNjQo
cmVnVDEpOworI2lmIEFTU0VSVF9FTkFCTEVECisgICAgUHJvYmU6OkZ1bmN0aW9uIHByb2JlRnVu
Y3Rpb24gPSBbXSAoUHJvYmU6OkNvbnRleHQmIGNvbnRleHQpIHsKKyAgICAgICAgQ29kZUJsb2Nr
KiBjb2RlQmxvY2sgPSBjb250ZXh0LmZwPENhbGxGcmFtZSo+KCktPmNvZGVCbG9jaygpOworICAg
ICAgICBpbnQ2NF90IGZyYW1lVG9wT2Zmc2V0ID0gc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKGNvZGVC
bG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChjb250ZXh0
LmdwcjxpbnRwdHJfdD4ocmVnVDEpID09IGZyYW1lVG9wT2Zmc2V0KTsKKyAgICB9OworICAgIHBy
b2JlKHRhZ0NGdW5jdGlvblB0cjxKSVRQcm9iZVB0clRhZz4ocHJvYmVGdW5jdGlvbiksIG51bGxw
dHIpOworI2VuZGlmCisKKyAgICBhZGRQdHIoY2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1QxKTsKKwor
ICAgIEp1bXBMaXN0IHN0YWNrT3ZlcmZsb3c7CisgICAgaWYgKGhhc0h1Z2VGcmFtZSkKKyAgICAg
ICAgc3RhY2tPdmVyZmxvdy5hcHBlbmQoYnJhbmNoUHRyKEFib3ZlLCByZWdUMSwgY2FsbEZyYW1l
UmVnaXN0ZXIpKTsKKyAgICBzdGFja092ZXJmbG93LmFwcGVuZChicmFuY2hQdHIoQWJvdmUsIEFi
c29sdXRlQWRkcmVzcyh2bS5hZGRyZXNzT2ZTb2Z0U3RhY2tMaW1pdCgpKSwgcmVnVDEpKTsKKwor
ICAgIC8vIFdlJ2xsIGJlIGltbWluZW50bHkgcmV0dXJpbmcgd2l0aCBhIHJldGFiIGluIHRoZSBu
b3JtYWwgcGF0aCwgd2hpY2ggd2lsbCBkbyB2YWxpZGF0aW9uLgorICAgIC8vIFNvLCBleHRyYSB2
YWxpZGF0aW9uIGhlcmUgaXMgcmVkdW5kYW50LgorICAgIHVudGFnUmV0dXJuQWRkcmVzc1dpdGhv
dXRFeHRyYVZhbGlkYXRpb24oKTsKKyNpZiBDUFUoWDg2XzY0KQorICAgIHBvcChyZWdUMik7IC8v
IFNhdmUgdGhlIHJldHVybiBhZGRyZXNzLgorI2VuZGlmCisgICAgbW92ZShyZWdUMSwgc3RhY2tQ
b2ludGVyUmVnaXN0ZXIpOworICAgIHRhZ1JldHVybkFkZHJlc3MoKTsKKyAgICBjaGVja1N0YWNr
UG9pbnRlckFsaWdubWVudCgpOworI2lmIENQVShYODZfNjQpCisgICAgcHVzaChyZWdUMik7IC8v
IFJlc3RvcmUgdGhlIHJldHVybiBhZGRyZXNzLgorI2VuZGlmCisKKyAgICBlbWl0U2F2ZUNhbGxl
ZVNhdmVzRm9yQmFzZWxpbmVKSVQoKTsKKyAgICBlbWl0TWF0ZXJpYWxpemVUYWdDaGVja1JlZ2lz
dGVycygpOworCisgICAgaWYgKGRvZXNQcm9maWxpbmcpIHsKKyAgICAgICAgY29uc3RleHByIEdQ
UlJlZyBhcmd1bWVudFZhbHVlUHJvZmlsZUdQUiA9IHJlZ1Q2OworICAgICAgICBjb25zdGV4cHIg
R1BSUmVnIG51bVBhcmFtZXRlcnNHUFIgPSByZWdUNTsKKyAgICAgICAgY29uc3RleHByIEdQUlJl
ZyBhcmd1bWVudEdQUiA9IHJlZ1Q0OworCisgICAgICAgIGxvYWQzMihBZGRyZXNzKGNvZGVCbG9j
a0dQUiwgQ29kZUJsb2NrOjpvZmZzZXRPZk51bVBhcmFtZXRlcnMoKSksIG51bVBhcmFtZXRlcnNH
UFIpOworICAgICAgICBsb2FkUHRyKEFkZHJlc3MoY29kZUJsb2NrR1BSLCBDb2RlQmxvY2s6Om9m
ZnNldE9mQXJndW1lbnRWYWx1ZVByb2ZpbGVzKCkpLCBhcmd1bWVudFZhbHVlUHJvZmlsZUdQUik7
CisgICAgICAgIGlmIChpc0NvbnN0cnVjdG9yKQorICAgICAgICAgICAgYWRkUHRyKFRydXN0ZWRJ
bW0zMihzaXplb2YoVmFsdWVQcm9maWxlKSksIGFyZ3VtZW50VmFsdWVQcm9maWxlR1BSKTsKKwor
ICAgICAgICBpbnQgc3RhcnRBcmd1bWVudCA9IENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVudCAr
IChpc0NvbnN0cnVjdG9yID8gMSA6IDApOworICAgICAgICBpbnQgc3RhcnRBcmd1bWVudE9mZnNl
dCA9IHN0YXJ0QXJndW1lbnQgKiB2aXJ0dWFsUmVnaXN0ZXJTaXplOworICAgICAgICBtb3ZlKFRy
dXN0ZWRJbW02NChzdGFydEFyZ3VtZW50T2Zmc2V0KSwgYXJndW1lbnRHUFIpOworCisgICAgICAg
IGFkZDMyKFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQ+KENhbGxGcmFtZVNsb3Q6OnRoaXNB
cmd1bWVudCkpLCBudW1QYXJhbWV0ZXJzR1BSKTsKKyAgICAgICAgbHNoaWZ0MzIoVHJ1c3RlZElt
bTMyKHZpcnR1YWxSZWdpc3RlclNpemVTaGlmdCksIG51bVBhcmFtZXRlcnNHUFIpOworCisgICAg
ICAgIGFkZFB0cihjYWxsRnJhbWVSZWdpc3RlciwgYXJndW1lbnRHUFIpOworICAgICAgICBhZGRQ
dHIoY2FsbEZyYW1lUmVnaXN0ZXIsIG51bVBhcmFtZXRlcnNHUFIpOworCisgICAgICAgIExhYmVs
IGxvb3BTdGFydCh0aGlzKTsKKyAgICAgICAgSnVtcCBkb25lID0gYnJhbmNoUHRyKEFib3ZlT3JF
cXVhbCwgYXJndW1lbnRHUFIsIG51bVBhcmFtZXRlcnNHUFIpOworICAgICAgICB7CisgICAgICAg
ICAgICBsb2FkNjQoQWRkcmVzcyhhcmd1bWVudEdQUiksIHJlZ1QwKTsKKyAgICAgICAgICAgIHN0
b3JlNjQocmVnVDAsIEFkZHJlc3MoYXJndW1lbnRWYWx1ZVByb2ZpbGVHUFIsIE9CSkVDVF9PRkZT
RVRPRihWYWx1ZVByb2ZpbGUsIG1fYnVja2V0cykpKTsKKworICAgICAgICAgICAgLy8gVGhlIGFy
Z3VtZW50IFZhbHVlUHJvZmlsZXMgYXJlIHN0b3JlZCBpbiBhIEZpeGVkVmVjdG9yLiBIZW5jZSwg
dGhlCisgICAgICAgICAgICAvLyBhZGRyZXNzIG9mIHRoZSBuZXh0IHByb2ZpbGUgY2FuIGJlIHRy
aXZpYWxseSBjb21wdXRlZCB3aXRoIGFuIGluY3JlbWVudC4KKyAgICAgICAgICAgIGFkZFB0cihU
cnVzdGVkSW1tMzIoc2l6ZW9mKFZhbHVlUHJvZmlsZSkpLCBhcmd1bWVudFZhbHVlUHJvZmlsZUdQ
Uik7CisgICAgICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHZpcnR1YWxSZWdpc3RlclNpemUp
LCBhcmd1bWVudEdQUik7CisgICAgICAgICAgICBqdW1wKCkubGlua1RvKGxvb3BTdGFydCwgdGhp
cyk7CisgICAgICAgIH0KKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgIH0KKyAgICByZXQo
KTsKKworICAgIHN0YWNrT3ZlcmZsb3cubGluayh0aGlzKTsKKyNpZiBDUFUoWDg2XzY0KQorICAg
IGFkZFB0cihUcnVzdGVkSW1tMzIoMSAqIHNpemVvZihDUFVSZWdpc3RlcikpLCBzdGFja1BvaW50
ZXJSZWdpc3Rlcik7IC8vIGRpc2NhcmQgcmV0dXJuIGFkZHJlc3MuCisjZW5kaWYKKworICAgIHVp
bnQzMl90IGxvY2F0aW9uQml0cyA9IENhbGxTaXRlSW5kZXgoMCkuYml0cygpOworICAgIHN0b3Jl
MzIoVHJ1c3RlZEltbTMyKGxvY2F0aW9uQml0cyksIHRhZ0ZvcihDYWxsRnJhbWVTbG90Ojphcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcykpOworCisgICAgaWYgKG1heEZyYW1lRXh0ZW50Rm9yU2xv
d1BhdGhDYWxsKQorICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC1zdGF0aWNfY2FzdDxpbnQz
Ml90PihtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCkpLCBzdGFja1BvaW50ZXJSZWdpc3Rl
cik7CisKKyAgICBzZXR1cEFyZ3VtZW50czxkZWNsdHlwZShvcGVyYXRpb25UaHJvd1N0YWNrT3Zl
cmZsb3dFcnJvcik+KGNvZGVCbG9ja0dQUik7CisgICAgcHJlcGFyZUNhbGxPcGVyYXRpb24odm0p
OworICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIG9wZXJhdGlvbkNhbGwgPSBjYWxsKE9wZXJhdGlv
blB0clRhZyk7CisgICAgSnVtcCBoYW5kbGVFeGNlcHRpb25KdW1wID0ganVtcCgpOworCisgICAg
YXV0byBoYW5kbGVyID0gdm0uZ2V0Q1RJU3R1YihoYW5kbGVFeGNlcHRpb25XaXRoQ2FsbEZyYW1l
Um9sbGJhY2tHZW5lcmF0b3IpOworCisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdGhpcywg
R0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpFeHRyYUNUSVRodW5rKTsKKyAg
ICBwYXRjaEJ1ZmZlci5saW5rKG9wZXJhdGlvbkNhbGwsIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0
clRhZz4ob3BlcmF0aW9uVGhyb3dTdGFja092ZXJmbG93RXJyb3IpKTsKKyAgICBwYXRjaEJ1ZmZl
ci5saW5rKGhhbmRsZUV4Y2VwdGlvbkp1bXAsIENvZGVMb2NhdGlvbkxhYmVsKGhhbmRsZXIucmV0
YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7CisgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hC
dWZmZXIsIEpJVFRodW5rUHRyVGFnLCB0aHVua05hbWUpOworfQorCitzdGF0aWMgY29uc3RleHBy
IGJvb2wgZG9lc1Byb2ZpbGluZyA9IHRydWU7CitzdGF0aWMgY29uc3RleHByIGJvb2wgaXNDb25z
dHJ1Y3RvciA9IHRydWU7CitzdGF0aWMgY29uc3RleHByIGJvb2wgaGFzSHVnZUZyYW1lID0gdHJ1
ZTsKKworI2RlZmluZSBERUZJTkVfUFJPR0xPR1VFX0dFTkVSQVRPUihkb2VzUHJvZmlsaW5nLCBp
c0NvbnN0cnVjdG9yLCBoYXNIdWdlRnJhbWUsIG5hbWUsIGFyaXR5Rml4dXBOYW1lKSBcCisgICAg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6Om5hbWUoVk0mIHZtKSBc
CisgICAgeyBcCisgICAgICAgIEpJVCBqaXQodm0pOyBcCisgICAgICAgIHJldHVybiBqaXQucHJv
bG9ndWVHZW5lcmF0b3Iodm0sIGRvZXNQcm9maWxpbmcsIGlzQ29uc3RydWN0b3IsIGhhc0h1Z2VG
cmFtZSwgIkJhc2VsaW5lOiAiICNuYW1lKTsgXAorICAgIH0KKworRk9SX0VBQ0hfUFJPTE9HVUVf
R0VORVJBVE9SKERFRklORV9QUk9HTE9HVUVfR0VORVJBVE9SKQorI3VuZGVmIERFRklORV9QUk9H
TE9HVUVfR0VORVJBVE9SCisKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
SklUOjphcml0eUZpeHVwUHJvbG9ndWVHZW5lcmF0b3IoVk0mIHZtLCBib29sIGlzQ29uc3RydWN0
b3IsIFRodW5rR2VuZXJhdG9yIG5vcm1hbFByb2xvZ3VlR2VuZXJhdG9yLCBjb25zdCBjaGFyKiB0
aHVua05hbWUpCit7CisgICAgLy8gVGhpcyBmdW5jdGlvbiBnZW5lcmF0ZXMgdGhlIEJhc2VsaW5l
IEpJVCdzIHByb2xvZ3VlIGNvZGUuIEl0IGlzIG5vdCB1c2VhYmxlIGJ5IG90aGVyIHRpZXJzLgor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgY29kZUJsb2NrR1BSID0gcmVnVDc7IC8vIGluY29taW5nLgor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgbnVtUGFyYW1ldGVyc0dQUiA9IHJlZ1Q2OworCisgICAgdGFn
UmV0dXJuQWRkcmVzcygpOworI2lmIENQVShYODZfNjQpCisgICAgcHVzaChmcmFtZVBvaW50ZXJS
ZWdpc3Rlcik7CisjZWxpZiBDUFUoQVJNNjQpCisgICAgcHVzaFBhaXIoZnJhbWVQb2ludGVyUmVn
aXN0ZXIsIGxpbmtSZWdpc3Rlcik7CisjZW5kaWYKKworICAgIHN0b3JlNjQoY29kZUJsb2NrR1BS
LCBhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jaykpOworICAgIHN0b3JlOChUcnVz
dGVkSW1tMzIoMCksIEFkZHJlc3MoY29kZUJsb2NrR1BSLCBDb2RlQmxvY2s6Om9mZnNldE9mU2hv
dWxkQWx3YXlzQmVJbmxpbmVkKCkpKTsKKworICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFt
ZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVnVDEpOworICAgIGxvYWQzMihB
ZGRyZXNzKGNvZGVCbG9ja0dQUiwgQ29kZUJsb2NrOjpvZmZzZXRPZk51bVBhcmFtZXRlcnMoKSks
IG51bVBhcmFtZXRlcnNHUFIpOworICAgIEp1bXAgbm9GaXh1cE5lZWRlZCA9IGJyYW5jaDMyKEFi
b3ZlT3JFcXVhbCwgcmVnVDEsIG51bVBhcmFtZXRlcnNHUFIpOworCisgICAgaWYgY29uc3RleHBy
IChtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCkKKyAgICAgICAgYWRkUHRyKFRydXN0ZWRJ
bW0zMigtc3RhdGljX2Nhc3Q8aW50MzJfdD4obWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwp
KSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworCisgICAgbG9hZFB0cihBZGRyZXNzKGNvZGVCbG9j
a0dQUiwgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgYXJndW1lbnRHUFIwKTsK
KworICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPGRlY2x0eXBlKG9wZXJhdGlvbkNvbnN0
cnVjdEFyaXR5Q2hlY2spLCBkZWNsdHlwZShvcGVyYXRpb25DYWxsQXJpdHlDaGVjayk+Ojp2YWx1
ZSk7CisgICAgc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUob3BlcmF0aW9uQ2FsbEFyaXR5Q2hlY2sp
Pihhcmd1bWVudEdQUjApOworICAgIHByZXBhcmVDYWxsT3BlcmF0aW9uKHZtKTsKKworICAgIE1h
Y3JvQXNzZW1ibGVyOjpDYWxsIGFyaXR5Q2hlY2tDYWxsID0gY2FsbChPcGVyYXRpb25QdHJUYWcp
OworICAgIEp1bXAgaGFuZGxlRXhjZXB0aW9uSnVtcCA9IGVtaXROb25QYXRjaGFibGVFeGNlcHRp
b25DaGVjayh2bSk7CisKKyAgICBpZiBjb25zdGV4cHIgKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1Bh
dGhDYWxsKQorICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKG1heEZyYW1lRXh0ZW50Rm9yU2xv
d1BhdGhDYWxsKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIEp1bXAgbmVlZEZpeHVwID0g
YnJhbmNoVGVzdDMyKE5vblplcm8sIHJldHVyblZhbHVlR1BSKTsKKyAgICBub0ZpeHVwTmVlZGVk
LmxpbmsodGhpcyk7CisKKyAgICAvLyBUaGUgbm9ybWFsIHByb2xvZ3VlIGV4cGVjdHMgaW5jb21p
bmcgY29kZUJsb2NrR1BSLgorICAgIGxvYWQ2NChhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNv
ZGVCbG9jayksIGNvZGVCbG9ja0dQUik7CisKKyNpZiBDUFUoWDg2XzY0KQorICAgIHBvcChmcmFt
ZVBvaW50ZXJSZWdpc3Rlcik7CisjZWxpZiBDUFUoQVJNNjQpCisgICAgcG9wUGFpcihmcmFtZVBv
aW50ZXJSZWdpc3RlciwgbGlua1JlZ2lzdGVyKTsKKyNlbmRpZgorICAgIHVudGFnUmV0dXJuQWRk
cmVzcygpOworCisgICAgSnVtcExpc3Qgbm9ybWFsUHJvbG9ndWVKdW1wOworICAgIG5vcm1hbFBy
b2xvZ3VlSnVtcC5hcHBlbmQoanVtcCgpKTsKKworICAgIG5lZWRGaXh1cC5saW5rKHRoaXMpOwor
CisgICAgLy8gUmVzdG9yZSB0aGUgc3RhY2sgZm9yIGFyaXR5IGZpeHVwLCBhbmQgcHJlc2VydmUg
dGhlIHJldHVybiBhZGRyZXNzLgorICAgIC8vIGFyaXR5Rml4dXBHZW5lcmF0b3Igd2lsbCBiZSBz
aGlmdGluZyB0aGUgc3RhY2suIFNvLCB3ZSBjYW4ndCB1c2UgdGhlIHN0YWNrIHRvCisgICAgLy8g
cHJlc2VydmUgdGhlIHJldHVybiBhZGRyZXNzLiBXZSBhbHNvIGNhbid0IHVzZSBjYWxsZWUgc2F2
ZWQgcmVnaXN0ZXJzIGJlY2F1c2UKKyAgICAvLyB0aGV5IGhhdmVuJ3QgYmVlbiBzYXZlZCB5ZXQu
CisgICAgLy8KKyAgICAvLyBhcml0eUZpeHVwR2VuZXJhdG9yIGlzIGNhcmVmdWxseSBjcmFmdGVk
IHRvIG9ubHkgdXNlIGEwLCBhMSwgYTIsIHQzLCB0NCBhbmQgdDUuCisgICAgLy8gU28sIHRoZSBy
ZXR1cm4gYWRkcmVzcyBjYW4gYmUgcHJlc2VydmVkIGluIHJlZ1Q3LgorI2lmIENQVShYODZfNjQp
CisgICAgcG9wKGFyZ3VtZW50R1BSMik7IC8vIGRpc2NhcmQuCisgICAgcG9wKHJlZ1Q3KTsgLy8g
c2F2ZSByZXR1cm4gYWRkcmVzcy4KKyNlbGlmIENQVShBUk02NCkKKyAgICBwb3BQYWlyKGZyYW1l
UG9pbnRlclJlZ2lzdGVyLCBsaW5rUmVnaXN0ZXIpOworICAgIHVudGFnUmV0dXJuQWRkcmVzcygp
OworICAgIG1vdmUobGlua1JlZ2lzdGVyLCByZWdUNyk7CisgICAgYXV0byByYW5kb21SZXR1cm5B
ZGRyZXNzVGFnID0gcmFuZG9tKCk7CisgICAgbW92ZShUcnVzdGVkSW1tMzIocmFuZG9tUmV0dXJu
QWRkcmVzc1RhZyksIHJlZ1QxKTsKKyAgICB0YWdQdHIocmVnVDEsIHJlZ1Q3KTsKKyNlbmRpZgor
ICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgQ2Fs
bCBhcml0eUZpeHVwQ2FsbCA9IG5lYXJDYWxsKCk7CisKKyNpZiBDUFUoWDg2XzY0KQorICAgIHB1
c2gocmVnVDcpOyAvLyByZXN0b3JlIHJldHVybiBhZGRyZXNzLgorI2VsaWYgQ1BVKEFSTTY0KQor
ICAgIG1vdmUoVHJ1c3RlZEltbTMyKHJhbmRvbVJldHVybkFkZHJlc3NUYWcpLCByZWdUMSk7Cisg
ICAgdW50YWdQdHIocmVnVDEsIHJlZ1Q3KTsKKyAgICBtb3ZlKHJlZ1Q3LCBsaW5rUmVnaXN0ZXIp
OworI2VuZGlmCisKKyAgICBsb2FkNjQoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxv
Y2spLCBjb2RlQmxvY2tHUFIpOworICAgIG5vcm1hbFByb2xvZ3VlSnVtcC5hcHBlbmQoanVtcCgp
KTsKKworICAgIGF1dG8gYXJpdHlDaGVja09wZXJhdGlvbiA9IGlzQ29uc3RydWN0b3IgPyBvcGVy
YXRpb25Db25zdHJ1Y3RBcml0eUNoZWNrIDogb3BlcmF0aW9uQ2FsbEFyaXR5Q2hlY2s7CisgICAg
YXV0byBhcml0eUZpeHVwID0gdm0uZ2V0Q1RJU3R1Yihhcml0eUZpeHVwR2VuZXJhdG9yKTsKKyAg
ICBhdXRvIG5vcm1hbFByb2xvZ3VlID0gdm0uZ2V0Q1RJU3R1Yihub3JtYWxQcm9sb2d1ZUdlbmVy
YXRvcik7CisgICAgYXV0byBleGNlcHRpb25IYW5kbGVyID0gdm0uZ2V0Q1RJU3R1Yihwb3BUaHVu
a1N0YWNrUHJlc2VydmVzQW5kSGFuZGxlRXhjZXB0aW9uR2VuZXJhdG9yKTsKKworICAgIExpbmtC
dWZmZXIgcGF0Y2hCdWZmZXIoKnRoaXMsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJv
ZmlsZTo6RXh0cmFDVElUaHVuayk7CisgICAgcGF0Y2hCdWZmZXIubGluayhhcml0eUNoZWNrQ2Fs
bCwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihhcml0eUNoZWNrT3BlcmF0aW9uKSk7Cisg
ICAgcGF0Y2hCdWZmZXIubGluayhhcml0eUZpeHVwQ2FsbCwgRnVuY3Rpb25QdHIoYXJpdHlGaXh1
cC5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKG5vcm1h
bFByb2xvZ3VlSnVtcCwgQ29kZUxvY2F0aW9uTGFiZWwobm9ybWFsUHJvbG9ndWUucmV0YWdnZWRD
b2RlPE5vUHRyVGFnPigpKSk7CisgICAgcGF0Y2hCdWZmZXIubGluayhoYW5kbGVFeGNlcHRpb25K
dW1wLCBDb2RlTG9jYXRpb25MYWJlbChleGNlcHRpb25IYW5kbGVyLnJldGFnZ2VkQ29kZTxOb1B0
clRhZz4oKSkpOworICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVu
a1B0clRhZywgdGh1bmtOYW1lKTsKK30KKworI2RlZmluZSBERUZJTkVfQVJJVFlfUFJPR0xPR1VF
X0dFTkVSQVRPUihkb2VzUHJvZmlsaW5nLCBpc0NvbnN0cnVjdG9yLCBoYXNIdWdlRnJhbWUsIG5h
bWUsIGFyaXR5Rml4dXBOYW1lKSBcCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IEpJVDo6YXJpdHlGaXh1cE5hbWUoVk0mIHZtKSBcCisgICAgeyBcCisgICAgICAgIEpJVCBq
aXQodm0pOyBcCisgICAgICAgIHJldHVybiBqaXQuYXJpdHlGaXh1cFByb2xvZ3VlR2VuZXJhdG9y
KHZtLCBpc0NvbnN0cnVjdG9yLCBuYW1lLCAiQmFzZWxpbmU6ICIgI2FyaXR5Rml4dXBOYW1lKTsg
XAorICAgIH0KKworRk9SX0VBQ0hfUFJPTE9HVUVfR0VORVJBVE9SKERFRklORV9BUklUWV9QUk9H
TE9HVUVfR0VORVJBVE9SKQorI3VuZGVmIERFRklORV9BUklUWV9QUk9HTE9HVUVfR0VORVJBVE9S
CisKKyNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKKwogdm9pZCBKSVQ6Omxpbmso
KQogewogICAgIExpbmtCdWZmZXImIHBhdGNoQnVmZmVyID0gKm1fbGlua0J1ZmZlcjsKQEAgLTEw
NDYsOSArMTM1Nyw5IEBAIENvbXBpbGF0aW9uUmVzdWx0IEpJVDo6cHJpdmF0ZUNvbXBpbGUoSkkK
ICAgICByZXR1cm4gZmluYWxpemVPbk1haW5UaHJlYWQoKTsKIH0KIAorI2lmICFFTkFCTEUoRVhU
UkFfQ1RJX1RIVU5LUykKIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUV4Y2VwdGlvbkhhbmRsZXJz
KCkKIHsKLSNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAgICAgaWYgKCFtX2V4Y2VwdGlv
bkNoZWNrc1dpdGhDYWxsRnJhbWVSb2xsYmFjay5lbXB0eSgpKSB7CiAgICAgICAgIG1fZXhjZXB0
aW9uQ2hlY2tzV2l0aENhbGxGcmFtZVJvbGxiYWNrLmxpbmsodGhpcyk7CiAKQEAgLTEwNzMsOCAr
MTM4NCw4IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUV4Y2VwdGlvbkhhbmRsZXIKICAgICAg
ICAgbV9mYXJDYWxscy5hcHBlbmQoRmFyQ2FsbFJlY29yZChjYWxsKE9wZXJhdGlvblB0clRhZyks
IEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uTG9va3VwRXhjZXB0aW9uSGFu
ZGxlcikpKTsKICAgICAgICAganVtcFRvRXhjZXB0aW9uSGFuZGxlcih2bSgpKTsKICAgICB9Ci0j
ZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiB9CisjZW5kaWYgLy8gIUVOQUJMRShF
WFRSQV9DVElfVEhVTktTKQogCiB2b2lkIEpJVDo6ZG9NYWluVGhyZWFkUHJlcGFyYXRpb25CZWZv
cmVDb21waWxlKCkKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkocmV2aXNpb24gMjc4
NDk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkod29ya2luZyBjb3B5KQpA
QCAtMzE4LDcgKzMxOCw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgbV9leGNlcHRp
b25DaGVja3NXaXRoQ2FsbEZyYW1lUm9sbGJhY2suYXBwZW5kKGVtaXRFeGNlcHRpb25DaGVjayh2
bSgpKSk7CiAgICAgICAgIH0KIAorI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICAg
ICAgdm9pZCBwcml2YXRlQ29tcGlsZUV4Y2VwdGlvbkhhbmRsZXJzKCk7CisjZW5kaWYKIAogICAg
ICAgICB2b2lkIGFkdmFuY2VUb05leHRDaGVja3BvaW50KCk7CiAgICAgICAgIHZvaWQgZW1pdEp1
bXBTbG93VG9Ib3RGb3JDaGVja3BvaW50KEp1bXApOwpAQCAtNzkwLDYgKzc5MiwyNiBAQCBuYW1l
c3BhY2UgSlNDIHsKIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogICAgICAgICAvLyBU
aHVuayBnZW5lcmF0b3JzLgorICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiBwcm9sb2d1ZUdlbmVyYXRvcjAoVk0mKTsKKyAgICAgICAgc3RhdGljIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gcHJvbG9ndWVHZW5lcmF0b3IxKFZN
Jik7CisgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+
IHByb2xvZ3VlR2VuZXJhdG9yMihWTSYpOworICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiBwcm9sb2d1ZUdlbmVyYXRvcjMoVk0mKTsKKyAgICAgICAg
c3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gcHJvbG9ndWVHZW5l
cmF0b3I0KFZNJik7CisgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1
bmtQdHJUYWc+IHByb2xvZ3VlR2VuZXJhdG9yNShWTSYpOworICAgICAgICBzdGF0aWMgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBwcm9sb2d1ZUdlbmVyYXRvcjYoVk0mKTsK
KyAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gcHJv
bG9ndWVHZW5lcmF0b3I3KFZNJik7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gcHJvbG9ndWVHZW5lcmF0b3IoVk0mLCBib29sIGRvZXNQcm9maWxpbmcsIGJv
b2wgaXNDb25zdHJ1Y3RvciwgYm9vbCBoYXNIdWdlRnJhbWUsIGNvbnN0IGNoYXIqIG5hbWUpOwor
CisgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGFy
aXR5Rml4dXBfcHJvbG9ndWVHZW5lcmF0b3IwKFZNJik7CisgICAgICAgIHN0YXRpYyBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGFyaXR5Rml4dXBfcHJvbG9ndWVHZW5lcmF0
b3IxKFZNJik7CisgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+IGFyaXR5Rml4dXBfcHJvbG9ndWVHZW5lcmF0b3IyKFZNJik7CisgICAgICAgIHN0YXRp
YyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGFyaXR5Rml4dXBfcHJvbG9n
dWVHZW5lcmF0b3IzKFZNJik7CisgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IGFyaXR5Rml4dXBfcHJvbG9ndWVHZW5lcmF0b3I0KFZNJik7CisgICAg
ICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGFyaXR5Rml4
dXBfcHJvbG9ndWVHZW5lcmF0b3I1KFZNJik7CisgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGFyaXR5Rml4dXBfcHJvbG9ndWVHZW5lcmF0b3I2KFZN
Jik7CisgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+
IGFyaXR5Rml4dXBfcHJvbG9ndWVHZW5lcmF0b3I3KFZNJik7CisgICAgICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gYXJpdHlGaXh1cFByb2xvZ3VlR2VuZXJhdG9yKFZN
JiwgYm9vbCBpc0NvbnN0cnVjdG9yLCBUaHVua0dlbmVyYXRvciBub3JtYWxQcm9sb2d1ZUdlbmVy
YXRvciwgY29uc3QgY2hhciogbmFtZSk7CisKICAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRUaHVua1B0clRhZz4gc2xvd19vcF9kZWxfYnlfaWRfcHJlcGFyZUNhbGxHZW5l
cmF0b3IoVk0mKTsKICAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz4gc2xvd19vcF9kZWxfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yKFZNJik7CiAg
ICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHNsb3df
b3BfZ2V0X2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yKFZNJik7CkBAIC04MDQsNyArODI2LDE0
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFRodW5rUHRyVGFnPiBzbG93X29wX3Jlc29sdmVfc2NvcGVHZW5lcmF0b3IoVk0mKTsKIAog
ICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvcF9j
aGVja190cmFwc19oYW5kbGVyR2VuZXJhdG9yKFZNJik7Ci0gICAgICAgIHN0YXRpYyBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9wX2VudGVyX2hhbmRsZXJHZW5lcmF0b3Io
Vk0mKTsKKworICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBvcF9lbnRlcl9jYW5CZU9wdGltaXplZF9HZW5lcmF0b3IoVk0mKTsKKyAgICAgICAgc3Rh
dGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3BfZW50ZXJfY2Fubm90
QmVPcHRpbWl6ZWRfR2VuZXJhdG9yKFZNJik7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRUaHVua1B0clRhZz4gb3BfZW50ZXJfR2VuZXJhdG9yKFZNJiwgYm9vbCBjYW5CZU9wdGlt
aXplZCwgY29uc3QgY2hhciogdGh1bmtOYW1lKTsKKworI2lmIEVOQUJMRShERkdfSklUKQorICAg
ICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvcF9sb29w
X2hpbnRfR2VuZXJhdG9yKFZNJik7CisjZW5kaWYKICAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3BfcmV0X2hhbmRsZXJHZW5lcmF0b3IoVk0mKTsK
ICAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3Bf
dGhyb3dfaGFuZGxlckdlbmVyYXRvcihWTSYpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVElubGluZXMuaAkocmV2aXNpb24gMjc4NDk4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTkxLDcgKzkxLDYgQEAgQUxX
QVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdExvYWRDaGFyYWN0ZQogCiBBTFdBWVNfSU5MSU5FIEpJ
VDo6Q2FsbCBKSVQ6OmVtaXROYWtlZE5lYXJDYWxsKENvZGVQdHI8Tm9QdHJUYWc+IHRhcmdldCkK
IHsKLSAgICBBU1NFUlQobV9ieXRlY29kZUluZGV4KTsgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIG9u
bHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9i
eXRlY29kZUluZGV4IGlzIHNldC4KICAgICBDYWxsIG5ha2VkQ2FsbCA9IG5lYXJDYWxsKCk7CiAg
ICAgbV9uZWFyQ2FsbHMuYXBwZW5kKE5lYXJDYWxsUmVjb3JkKG5ha2VkQ2FsbCwgRnVuY3Rpb25Q
dHI8SlNJbnRlcm5hbFB0clRhZz4odGFyZ2V0LnJldGFnZ2VkPEpTSW50ZXJuYWxQdHJUYWc+KCkp
KSk7CiAgICAgcmV0dXJuIG5ha2VkQ2FsbDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUT3Bjb2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRPcGNvZGVzLmNwcAkocmV2aXNpb24gMjc4NDk4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzc2LDcgKzM3Niw3IEBA
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICBKSVQgaml0KHZt
KTsKIAogICAgIGppdC5jaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwotICAgIGppdC5lbWl0
UmVzdG9yZUNhbGxlZVNhdmVzRm9yKCZSZWdpc3RlckF0T2Zmc2V0TGlzdDo6bGxpbnRCYXNlbGlu
ZUNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7CisgICAgaml0LmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXNG
b3JCYXNlbGluZUpJVCgpOwogICAgIGppdC5lbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOwogICAgIGpp
dC5yZXQoKTsKIApAQCAtMTE4NiwxMDMgKzExODYsMTE1IEBAIHZvaWQgSklUOjplbWl0X29wX2Vu
dGVyKGNvbnN0IEluc3RydWN0aW8KICAgICBlbWl0RW50ZXJPcHRpbWl6YXRpb25DaGVjaygpOwog
I2Vsc2UKICAgICBBU1NFUlQobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpID09IDApOwotICAgIGNv
bnN0ZXhwciBHUFJSZWcgbG9jYWxzVG9Jbml0R1BSID0gYXJndW1lbnRHUFIwOwotICAgIGNvbnN0
ZXhwciBHUFJSZWcgY2FuQmVPcHRpbWl6ZWRHUFIgPSBhcmd1bWVudEdQUjQ7Ci0KICAgICB1bnNp
Z25lZCBsb2NhbHNUb0luaXQgPSBjb3VudCAtIENvZGVCbG9jazo6bGxpbnRCYXNlbGluZUNhbGxl
ZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpOwogICAgIFJFTEVBU0VfQVNTRVJUKGxvY2Fs
c1RvSW5pdCA8IGNvdW50KTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMihsb2NhbHNUb0luaXQgKiBz
aXplb2YoUmVnaXN0ZXIpKSwgbG9jYWxzVG9Jbml0R1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0z
MihjYW5CZU9wdGltaXplZCgpKSwgY2FuQmVPcHRpbWl6ZWRHUFIpOwotICAgIGVtaXROYWtlZE5l
YXJDYWxsKHZtKCkuZ2V0Q1RJU3R1YihvcF9lbnRlcl9oYW5kbGVyR2VuZXJhdG9yKS5yZXRhZ2dl
ZENvZGU8Tm9QdHJUYWc+KCkpOworICAgIFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvciA9IGNhbkJl
T3B0aW1pemVkKCkgPyBvcF9lbnRlcl9jYW5CZU9wdGltaXplZF9HZW5lcmF0b3IgOiBvcF9lbnRl
cl9jYW5ub3RCZU9wdGltaXplZF9HZW5lcmF0b3I7CisgICAgZW1pdE5ha2VkTmVhckNhbGwodm0o
KS5nZXRDVElTdHViKGdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICNlbmRp
ZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElf
VEhVTktTKQotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6Om9wX2Vu
dGVyX2hhbmRsZXJHZW5lcmF0b3IoVk0mIHZtKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiBKSVQ6Om9wX2VudGVyX0dlbmVyYXRvcihWTSYgdm0sIGJvb2wgY2FuQmVPcHRp
bWl6ZWQsIGNvbnN0IGNoYXIqIHRodW5rTmFtZSkKIHsKLSAgICBKSVQgaml0KHZtKTsKLQogI2lm
IENQVShYODZfNjQpCi0gICAgaml0LnB1c2goWDg2UmVnaXN0ZXJzOjplYnApOworICAgIHB1c2go
WDg2UmVnaXN0ZXJzOjplYnApOwogI2VsaWYgQ1BVKEFSTTY0KQotICAgIGppdC50YWdSZXR1cm5B
ZGRyZXNzKCk7Ci0gICAgaml0LnB1c2hQYWlyKGZyYW1lUG9pbnRlclJlZ2lzdGVyLCBsaW5rUmVn
aXN0ZXIpOworICAgIHRhZ1JldHVybkFkZHJlc3MoKTsKKyAgICBwdXNoUGFpcihmcmFtZVBvaW50
ZXJSZWdpc3RlciwgbGlua1JlZ2lzdGVyKTsKICNlbmRpZgogICAgIC8vIG9wX2VudGVyIGlzIGFs
d2F5cyBhdCBieXRlY29kZU9mZnNldCAwLgotICAgIGppdC5zdG9yZTMyKFRydXN0ZWRJbW0zMigw
KSwgdGFnRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSk7Cisg
ICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoMCksIHRhZ0ZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcykpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBsb2NhbHNUb0lu
aXRHUFIgPSBhcmd1bWVudEdQUjA7CiAgICAgY29uc3RleHByIEdQUlJlZyBpdGVyYXRvckdQUiA9
IGFyZ3VtZW50R1BSMTsKICAgICBjb25zdGV4cHIgR1BSUmVnIGVuZEdQUiA9IGFyZ3VtZW50R1BS
MjsKICAgICBjb25zdGV4cHIgR1BSUmVnIHVuZGVmaW5lZEdQUiA9IGFyZ3VtZW50R1BSMzsKLSAg
ICBjb25zdGV4cHIgR1BSUmVnIGNhbkJlT3B0aW1pemVkR1BSID0gYXJndW1lbnRHUFI0OworICAg
IGNvbnN0ZXhwciBHUFJSZWcgY29kZUJsb2NrR1BSID0gYXJndW1lbnRHUFI0OworCisgICAgY29u
c3RleHByIGludCB2aXJ0dWFsUmVnaXN0ZXJTaXplU2hpZnQgPSAzOworICAgIHN0YXRpY19hc3Nl
cnQoKDEgPDwgdmlydHVhbFJlZ2lzdGVyU2l6ZVNoaWZ0KSA9PSBzaXplb2YoUmVnaXN0ZXIpKTsK
KworICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCBjb2Rl
QmxvY2tHUFIpOworICAgIGxvYWQzMihBZGRyZXNzKGNvZGVCbG9ja0dQUiwgQ29kZUJsb2NrOjpv
ZmZzZXRPZk51bVZhcnMoKSksIGxvY2Fsc1RvSW5pdEdQUik7CisgICAgc3ViMzIoVHJ1c3RlZElt
bTMyKENvZGVCbG9jazo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lz
dGVycygpKSwgbG9jYWxzVG9Jbml0R1BSKTsKKyAgICBsc2hpZnQzMihUcnVzdGVkSW1tMzIodmly
dHVhbFJlZ2lzdGVyU2l6ZVNoaWZ0KSwgbG9jYWxzVG9Jbml0R1BSKTsKIAogICAgIHNpemVfdCBz
dGFydExvY2FsID0gQ29kZUJsb2NrOjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0
dWFsUmVnaXN0ZXJzKCk7CiAgICAgaW50IHN0YXJ0T2Zmc2V0ID0gdmlydHVhbFJlZ2lzdGVyRm9y
TG9jYWwoc3RhcnRMb2NhbCkub2Zmc2V0KCk7Ci0gICAgaml0Lm1vdmUoVHJ1c3RlZEltbTY0KHN0
YXJ0T2Zmc2V0ICogc2l6ZW9mKFJlZ2lzdGVyKSksIGl0ZXJhdG9yR1BSKTsKLSAgICBqaXQuc3Vi
NjQoaXRlcmF0b3JHUFIsIGxvY2Fsc1RvSW5pdEdQUiwgZW5kR1BSKTsKKyAgICBtb3ZlKFRydXN0
ZWRJbW02NChzdGFydE9mZnNldCAqIHNpemVvZihSZWdpc3RlcikpLCBpdGVyYXRvckdQUik7Cisg
ICAgc3ViNjQoaXRlcmF0b3JHUFIsIGxvY2Fsc1RvSW5pdEdQUiwgZW5kR1BSKTsKIAotICAgIGpp
dC5tb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSkpLCB1bmRl
ZmluZWRHUFIpOwotICAgIGF1dG8gaW5pdExvb3AgPSBqaXQubGFiZWwoKTsKLSAgICBKdW1wIGlu
aXREb25lID0gaml0LmJyYW5jaDMyKExlc3NUaGFuT3JFcXVhbCwgaXRlcmF0b3JHUFIsIGVuZEdQ
Uik7CisgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
KSwgdW5kZWZpbmVkR1BSKTsKKyAgICBhdXRvIGluaXRMb29wID0gbGFiZWwoKTsKKyAgICBKdW1w
IGluaXREb25lID0gYnJhbmNoMzIoTGVzc1RoYW5PckVxdWFsLCBpdGVyYXRvckdQUiwgZW5kR1BS
KTsKICAgICB7Ci0gICAgICAgIGppdC5zdG9yZTY0KHVuZGVmaW5lZEdQUiwgQmFzZUluZGV4KEdQ
UkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBpdGVyYXRvckdQUiwgVGltZXNPbmUpKTsKLSAgICAg
ICAgaml0LnN1YjY0KFRydXN0ZWRJbW0zMihzaXplb2YoUmVnaXN0ZXIpKSwgaXRlcmF0b3JHUFIp
OwotICAgICAgICBqaXQuanVtcChpbml0TG9vcCk7CisgICAgICAgIHN0b3JlNjQodW5kZWZpbmVk
R1BSLCBCYXNlSW5kZXgoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGl0ZXJhdG9yR1BSLCBU
aW1lc09uZSkpOworICAgICAgICBzdWI2NChUcnVzdGVkSW1tMzIoc2l6ZW9mKFJlZ2lzdGVyKSks
IGl0ZXJhdG9yR1BSKTsKKyAgICAgICAganVtcChpbml0TG9vcCk7CiAgICAgfQotICAgIGluaXRE
b25lLmxpbmsoJmppdCk7CisgICAgaW5pdERvbmUubGluayh0aGlzKTsKIAotICAgIC8vIGVtaXRX
cml0ZUJhcnJpZXIobV9jb2RlQmxvY2spLgotICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2Fs
bEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgYXJndW1lbnRHUFIxKTsKLSAgICBKdW1wIG93bmVySXNS
ZW1lbWJlcmVkT3JJbkVkZW4gPSBqaXQuYmFycmllckJyYW5jaCh2bSwgYXJndW1lbnRHUFIxLCBh
cmd1bWVudEdQUjIpOworICAgIC8vIEltcGxlbWVudGluZyBlbWl0V3JpdGVCYXJyaWVyKG1fY29k
ZUJsb2NrKS4KKyAgICBKdW1wIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBiYXJyaWVyQnJh
bmNoKHZtLCBjb2RlQmxvY2tHUFIsIGFyZ3VtZW50R1BSMik7CiAKLSAgICBqaXQubW92ZShjYW5C
ZU9wdGltaXplZEdQUiwgR1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0ZXIpOyAvLyBzYXZlLgotICAg
IGppdC5zZXR1cEFyZ3VtZW50czxkZWNsdHlwZShvcGVyYXRpb25Xcml0ZUJhcnJpZXJTbG93UGF0
aCk+KCZ2bSwgYXJndW1lbnRHUFIxKTsKLSAgICBqaXQucHJlcGFyZUNhbGxPcGVyYXRpb24odm0p
OwotICAgIENhbGwgb3BlcmF0aW9uV3JpdGVCYXJyaWVyQ2FsbCA9IGppdC5jYWxsKE9wZXJhdGlv
blB0clRhZyk7CisgICAgc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUob3BlcmF0aW9uV3JpdGVCYXJy
aWVyU2xvd1BhdGgpPigmdm0sIGNvZGVCbG9ja0dQUik7CisgICAgcHJlcGFyZUNhbGxPcGVyYXRp
b24odm0pOworICAgIENhbGwgb3BlcmF0aW9uV3JpdGVCYXJyaWVyQ2FsbCA9IGNhbGwoT3BlcmF0
aW9uUHRyVGFnKTsKIAotICAgIGppdC5tb3ZlKEdQUkluZm86Om51bWJlclRhZ1JlZ2lzdGVyLCBj
YW5CZU9wdGltaXplZEdQUik7IC8vIHJlc3RvcmUuCi0gICAgaml0Lm1vdmUoVHJ1c3RlZEltbTY0
KEpTVmFsdWU6Ok51bWJlclRhZyksIEdQUkluZm86Om51bWJlclRhZ1JlZ2lzdGVyKTsKLSAgICBv
d25lcklzUmVtZW1iZXJlZE9ySW5FZGVuLmxpbmsoJmppdCk7CisgICAgaWYgKGNhbkJlT3B0aW1p
emVkKQorICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2Nr
KSwgY29kZUJsb2NrR1BSKTsKKworICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4ubGluayh0
aGlzKTsKIAogI2lmIEVOQUJMRShERkdfSklUKQorICAgIC8vIEltcGxlbWVudGluZyBlbWl0RW50
ZXJPcHRpbWl6YXRpb25DaGVjaygpLgogICAgIENhbGwgb3BlcmF0aW9uT3B0aW1pemVDYWxsOwot
ICAgIGlmIChPcHRpb25zOjp1c2VERkdKSVQoKSkgewotICAgICAgICAvLyBlbWl0RW50ZXJPcHRp
bWl6YXRpb25DaGVjaygpLgorICAgIGlmIChjYW5CZU9wdGltaXplZCkgewogICAgICAgICBKdW1w
TGlzdCBza2lwT3B0aW1pemU7CiAKLSAgICAgICAgc2tpcE9wdGltaXplLmFwcGVuZChqaXQuYnJh
bmNoVGVzdDMyKFplcm8sIGNhbkJlT3B0aW1pemVkR1BSKSk7Ci0KLSAgICAgICAgaml0LmxvYWRQ
dHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCBhcmd1bWVudEdQUjEpOwot
ICAgICAgICBza2lwT3B0aW1pemUuYXBwZW5kKGppdC5icmFuY2hBZGQzMihTaWduZWQsIFRydXN0
ZWRJbW0zMihPcHRpb25zOjpleGVjdXRpb25Db3VudGVySW5jcmVtZW50Rm9yRW50cnkoKSksIEFk
ZHJlc3MoYXJndW1lbnRHUFIxLCBDb2RlQmxvY2s6Om9mZnNldE9mSklURXhlY3V0ZUNvdW50ZXIo
KSkpKTsKKyAgICAgICAgc2tpcE9wdGltaXplLmFwcGVuZChicmFuY2hBZGQzMihTaWduZWQsIFRy
dXN0ZWRJbW0zMihPcHRpb25zOjpleGVjdXRpb25Db3VudGVySW5jcmVtZW50Rm9yRW50cnkoKSks
IEFkZHJlc3MoY29kZUJsb2NrR1BSLCBDb2RlQmxvY2s6Om9mZnNldE9mSklURXhlY3V0ZUNvdW50
ZXIoKSkpKTsKIAotICAgICAgICBqaXQuY29weUxMSW50QmFzZWxpbmVDYWxsZWVTYXZlc0Zyb21G
cmFtZU9yUmVnaXN0ZXJUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bS50b3BFbnRyeUZy
YW1lKTsKKyAgICAgICAgY29weUxMSW50QmFzZWxpbmVDYWxsZWVTYXZlc0Zyb21GcmFtZU9yUmVn
aXN0ZXJUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bS50b3BFbnRyeUZyYW1lKTsKIAot
ICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUob3BlcmF0aW9uT3B0aW1pemUpPigm
dm0sIFRydXN0ZWRJbW0zMigwKSk7Ci0gICAgICAgIGppdC5wcmVwYXJlQ2FsbE9wZXJhdGlvbih2
bSk7Ci0gICAgICAgIG9wZXJhdGlvbk9wdGltaXplQ2FsbCA9IGppdC5jYWxsKE9wZXJhdGlvblB0
clRhZyk7CisgICAgICAgIHNldHVwQXJndW1lbnRzPGRlY2x0eXBlKG9wZXJhdGlvbk9wdGltaXpl
KT4oJnZtLCBUcnVzdGVkSW1tMzIoMCkpOworICAgICAgICBwcmVwYXJlQ2FsbE9wZXJhdGlvbih2
bSk7CisgICAgICAgIG9wZXJhdGlvbk9wdGltaXplQ2FsbCA9IGNhbGwoT3BlcmF0aW9uUHRyVGFn
KTsKIAotICAgICAgICBza2lwT3B0aW1pemUuYXBwZW5kKGppdC5icmFuY2hUZXN0UHRyKFplcm8s
IHJldHVyblZhbHVlR1BSKSk7Ci0gICAgICAgIGppdC5mYXJKdW1wKHJldHVyblZhbHVlR1BSLCBH
UFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CisgICAgICAgIHNraXBPcHRpbWl6ZS5hcHBlbmQo
YnJhbmNoVGVzdFB0cihaZXJvLCByZXR1cm5WYWx1ZUdQUikpOworICAgICAgICBmYXJKdW1wKHJl
dHVyblZhbHVlR1BSLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CiAKLSAgICAgICAgc2tp
cE9wdGltaXplLmxpbmsoJmppdCk7CisgICAgICAgIHNraXBPcHRpbWl6ZS5saW5rKHRoaXMpOwog
ICAgIH0KICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKIAogI2lmIENQVShYODZfNjQpCi0gICAg
aml0LnBvcChYODZSZWdpc3RlcnM6OmVicCk7CisgICAgcG9wKFg4NlJlZ2lzdGVyczo6ZWJwKTsK
ICNlbGlmIENQVShBUk02NCkKLSAgICBqaXQucG9wUGFpcihmcmFtZVBvaW50ZXJSZWdpc3Rlciwg
bGlua1JlZ2lzdGVyKTsKKyAgICBwb3BQYWlyKGZyYW1lUG9pbnRlclJlZ2lzdGVyLCBsaW5rUmVn
aXN0ZXIpOwogI2VuZGlmCi0gICAgaml0LnJldCgpOworICAgIHJldCgpOwogCi0gICAgTGlua0J1
ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmls
ZTo6RXh0cmFDVElUaHVuayk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdGhpcywgR0xP
QkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpFeHRyYUNUSVRodW5rKTsKICAgICBw
YXRjaEJ1ZmZlci5saW5rKG9wZXJhdGlvbldyaXRlQmFycmllckNhbGwsIEZ1bmN0aW9uUHRyPE9w
ZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uV3JpdGVCYXJyaWVyU2xvd1BhdGgpKTsKICNpZiBFTkFC
TEUoREZHX0pJVCkKLSAgICBpZiAoT3B0aW9uczo6dXNlREZHSklUKCkpCisgICAgaWYgKGNhbkJl
T3B0aW1pemVkKQogICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKG9wZXJhdGlvbk9wdGltaXplQ2Fs
bCwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25PcHRpbWl6ZSkpOwogI2Vu
ZGlmCi0gICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFn
LCAiQmFzZWxpbmU6IG9wX2VudGVyX2hhbmRsZXIiKTsKKyAgICByZXR1cm4gRklOQUxJWkVfQ09E
RShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsIHRodW5rTmFtZSk7Cit9CisKK01hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpvcF9lbnRlcl9jYW5CZU9wdGltaXpl
ZF9HZW5lcmF0b3IoVk0mIHZtKQoreworICAgIEpJVCBqaXQodm0pOworICAgIGNvbnN0ZXhwciBi
b29sIGNhbkJlT3B0aW1pemVkID0gdHJ1ZTsKKyAgICByZXR1cm4gaml0Lm9wX2VudGVyX0dlbmVy
YXRvcih2bSwgY2FuQmVPcHRpbWl6ZWQsICJCYXNlbGluZTogb3BfZW50ZXJfY2FuQmVPcHRpbWl6
ZWQiKTsKK30KKworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6Om9w
X2VudGVyX2Nhbm5vdEJlT3B0aW1pemVkX0dlbmVyYXRvcihWTSYgdm0pCit7CisgICAgSklUIGpp
dCh2bSk7CisgICAgY29uc3RleHByIGJvb2wgY2FuQmVPcHRpbWl6ZWQgPSBmYWxzZTsKKyAgICBy
ZXR1cm4gaml0Lm9wX2VudGVyX0dlbmVyYXRvcih2bSwgY2FuQmVPcHRpbWl6ZWQsICJCYXNlbGlu
ZTogb3BfZW50ZXJfY2Fubm90QmVPcHRpbWl6ZWQiKTsKIH0KICNlbmRpZiAvLyBFTkFCTEUoRVhU
UkFfQ1RJX1RIVU5LUykKIApAQCAtMTQxOCw5ICsxNDMwLDEwIEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9pbnN0YW5jZW9mX2N1c3RvbSgKIAogdm9pZCBKSVQ6OmVtaXRfb3BfbG9vcF9oaW50KGNv
bnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbikKIHsKKyAgICBWTSYgdm0gPSB0aGlzLT52bSgp
OwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OnJldHVybkVh
cmx5RnJvbUluZmluaXRlTG9vcHNGb3JGdXp6aW5nKCkgJiYgbV9jb2RlQmxvY2stPmxvb3BIaW50
c0FyZUVsaWdpYmxlRm9yRnV6emluZ0Vhcmx5UmV0dXJuKCkpKSB7Ci0gICAgICAgIHVpbnQ2NF90
KiBwdHIgPSB2bSgpLmdldExvb3BIaW50RXhlY3V0aW9uQ291bnRlcihpbnN0cnVjdGlvbik7Cisg
ICAgICAgIHVpbnQ2NF90KiBwdHIgPSB2bS5nZXRMb29wSGludEV4ZWN1dGlvbkNvdW50ZXIoaW5z
dHJ1Y3Rpb24pOwogICAgICAgICBsb2FkNjQocHRyLCByZWdUMCk7CiAgICAgICAgIGF1dG8gc2tp
cEVhcmx5UmV0dXJuID0gYnJhbmNoNjQoQmVsb3csIHJlZ1QwLCBUcnVzdGVkSW1tNjQoT3B0aW9u
czo6ZWFybHlSZXR1cm5Gcm9tSW5maW5pdGVMb29wc0xpbWl0KCkpKTsKIApAQCAtMTQzNiwyMCAr
MTQ0OSwyMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1CiAgICAg
fQogI2VuZGlmCiAKLSAgICAvLyBFbWl0IHRoZSBKSVQgb3B0aW1pemF0aW9uIGNoZWNrOiAKKyAg
ICAvLyBFbWl0IHRoZSBKSVQgb3B0aW1pemF0aW9uIGNoZWNrOgogICAgIGlmIChjYW5CZU9wdGlt
aXplZCgpKSB7CisgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgY29kZUJsb2NrR1BSID0gcmVnVDY7
CisgICAgICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCBj
b2RlQmxvY2tHUFIpOwogICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hBZGQzMihQb3NpdGl2ZU9y
WmVybywgVHJ1c3RlZEltbTMyKE9wdGlvbnM6OmV4ZWN1dGlvbkNvdW50ZXJJbmNyZW1lbnRGb3JM
b29wKCkpLAotICAgICAgICAgICAgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5hZGRyZXNz
T2ZKSVRFeGVjdXRlQ291bnRlcigpKSkpOworICAgICAgICAgICAgICAgIEFkZHJlc3MoY29kZUJs
b2NrR1BSLCBDb2RlQmxvY2s6Om9mZnNldE9mSklURXhlY3V0ZUNvdW50ZXIoKSkpKTsKICAgICB9
CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1Y3Rpb24qIGlu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewogI2lm
IEVOQUJMRShERkdfSklUKQogICAgIC8vIEVtaXQgdGhlIHNsb3cgcGF0aCBmb3IgdGhlIEpJVCBv
cHRpbWl6YXRpb24gY2hlY2s6CiAgICAgaWYgKGNhbkJlT3B0aW1pemVkKCkpIHsKICAgICAgICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAorI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykK
ICAgICAgICAgY29weUxMSW50QmFzZWxpbmVDYWxsZWVTYXZlc0Zyb21GcmFtZU9yUmVnaXN0ZXJU
b0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSgpLnRvcEVudHJ5RnJhbWUpOwogCiAgICAg
ICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbk9wdGltaXplLCAmdm0o
KSwgbV9ieXRlY29kZUluZGV4LmFzQml0cygpKTsKQEAgLTE0NjIsMTMgKzE0NzgsODEgQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2xvb3BfaGludChjb25zdCBJbgogICAgICAgICBmYXJKdW1wKHJl
dHVyblZhbHVlR1BSLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CiAgICAgICAgIG5vT3B0
aW1pemVkRW50cnkubGluayh0aGlzKTsKIAotICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChqdW1w
KCksIGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpKTsKKyNlbHNlIC8vIEVOQUJMRShFWFRSQV9D
VElfVEhVTktTKQorICAgICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJ
bmRleC5vZmZzZXQoKTsKKyAgICAgICAgQVNTRVJUKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZz
ZXQpID09IG1fYnl0ZWNvZGVJbmRleCk7CisgICAgICAgIEFTU0VSVChtX2NvZGVCbG9jay0+aW5z
dHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgpID09IGluc3RydWN0aW9uKTsKKworICAgICAgICBj
b25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDc7CisKKyAgICAgICAgbW92
ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CisgICAg
ICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtKCkuZ2V0Q1RJU3R1YihvcF9sb29wX2hpbnRfR2VuZXJh
dG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOworI2VuZGlmIC8vICFFTkFCTEUoRVhUUkFf
Q1RJX1RIVU5LUykKICAgICB9Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShjdXJyZW50SW5zdHJ1
Y3Rpb24pOworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQogICAgIFVOVVNFRF9QQVJBTShpdGVy
KTsKKyAgICBVTlVTRURfUEFSQU0oaW5zdHJ1Y3Rpb24pOworfQorCisjaWYgRU5BQkxFKEVYVFJB
X0NUSV9USFVOS1MpCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKK01hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRUaHVua1B0clRhZz4gSklUOjpvcF9sb29wX2hpbnRfR2VuZXJhdG9yKFZNJiB2bSkKK3sK
KyAgICAvLyBUaGUgdGh1bmsgZ2VuZXJhdGVkIGJ5IHRoaXMgZnVuY3Rpb24gY2FuIG9ubHkgd29y
ayB3aXRoIHRoZSBMTEludCAvIEJhc2VsaW5lIEpJVCBiZWNhdXNlCisgICAgLy8gaXQgbWFrZXMg
YXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUg
ZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgorICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBm
dW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3Qg
bWF0Y2gKKyAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgorICAgIEpJVCBqaXQodm0pOwor
CisgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKKworICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0
ZWNvZGVPZmZzZXRHUFIgPSByZWdUNzsgLy8gaW5jb21pbmcuCisKKyNpZiBDUFUoWDg2XzY0KQor
ICAgIGppdC5wdXNoKGZyYW1lUG9pbnRlclJlZ2lzdGVyKTsKKyNlbGlmIENQVShBUk02NCkKKyAg
ICBqaXQucHVzaFBhaXIoZnJhbWVQb2ludGVyUmVnaXN0ZXIsIGxpbmtSZWdpc3Rlcik7CisjZW5k
aWYKKworICAgIGF1dG8gdXNlZFJlZ2lzdGVycyA9IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFi
bGVSZWdpc3RlcnMoKTsKKyAgICB1c2VkUmVnaXN0ZXJzLmFkZChieXRlY29kZU9mZnNldEdQUik7
CisgICAgaml0LmNvcHlMTEludEJhc2VsaW5lQ2FsbGVlU2F2ZXNGcm9tRnJhbWVPclJlZ2lzdGVy
VG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0udG9wRW50cnlGcmFtZSwgdXNlZFJlZ2lz
dGVycyk7CisKKyAgICBqaXQuc3RvcmUzMihieXRlY29kZU9mZnNldEdQUiwgQ0NhbGxIZWxwZXJz
Ojp0YWdGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKTsKKyAg
ICBqaXQubHNoaWZ0MzIoVHJ1c3RlZEltbTMyKEJ5dGVjb2RlSW5kZXg6OmNoZWNrcG9pbnRTaGlm
dCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKKyAgICBqaXQuc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUo
b3BlcmF0aW9uT3B0aW1pemUpPihUcnVzdGVkSW1tUHRyKCZ2bSksIGJ5dGVjb2RlT2Zmc2V0R1BS
KTsKKyAgICBqaXQucHJlcGFyZUNhbGxPcGVyYXRpb24odm0pOworICAgIENhbGwgb3BlcmF0aW9u
Q2FsbCA9IGppdC5jYWxsKE9wZXJhdGlvblB0clRhZyk7CisgICAgSnVtcCBoYXNPcHRpbWl6ZWRF
bnRyeSA9IGppdC5icmFuY2hUZXN0UHRyKE5vblplcm8sIHJldHVyblZhbHVlR1BSKTsKKworI2lm
IENQVShYODZfNjQpCisgICAgaml0LnBvcChmcmFtZVBvaW50ZXJSZWdpc3Rlcik7CisjZWxpZiBD
UFUoQVJNNjQpCisgICAgaml0LnBvcFBhaXIoZnJhbWVQb2ludGVyUmVnaXN0ZXIsIGxpbmtSZWdp
c3Rlcik7CisjZW5kaWYKKyAgICBqaXQucmV0KCk7CisKKyAgICBoYXNPcHRpbWl6ZWRFbnRyeS5s
aW5rKCZqaXQpOworI2lmIENQVShYODZfNjQpCisgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW0zMigyICogc2l6ZW9mKENQVVJlZ2lzdGVyKSksIHN0YWNrUG9pbnRlclJlZ2lz
dGVyKTsKKyNlbGlmIENQVShBUk02NCkKKyAgICBqaXQucG9wUGFpcihmcmFtZVBvaW50ZXJSZWdp
c3RlciwgbGlua1JlZ2lzdGVyKTsKICNlbmRpZgorICAgIGlmIChBU1NFUlRfRU5BQkxFRCkgewor
ICAgICAgICBKdW1wIG9rID0gaml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6QWJvdmUsIHJl
dHVyblZhbHVlR1BSLCBUcnVzdGVkSW1tUHRyKGJpdHdpc2VfY2FzdDx2b2lkKj4oc3RhdGljX2Nh
c3Q8aW50cHRyX3Q+KDEwMDApKSkpOworICAgICAgICBqaXQuYWJvcnRXaXRoUmVhc29uKEpJVFVu
cmVhc29uYWJsZUxvb3BIaW50SnVtcFRhcmdldCk7CisgICAgICAgIG9rLmxpbmsoJmppdCk7Cisg
ICAgfQorCisgICAgaml0LmZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEdQUkluZm86OmNhbGxGcmFt
ZVJlZ2lzdGVyKTsKKworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhV
TktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OkV4dHJhQ1RJVGh1bmspOworICAgIHBhdGNoQnVm
ZmVyLmxpbmsob3BlcmF0aW9uQ2FsbCwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihvcGVy
YXRpb25PcHRpbWl6ZSkpOworICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBK
SVRUaHVua1B0clRhZywgIkJhc2VsaW5lOiBvcF9sb29wX2hpbnQiKTsKIH0KKyNlbmRpZiAvLyBF
TkFCTEUoREZHX0pJVCkKKyNlbmRpZiAvLyAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKIHZv
aWQgSklUOjplbWl0X29wX2NoZWNrX3RyYXBzKGNvbnN0IEluc3RydWN0aW9uKikKIHsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAJKHJldmlz
aW9uIDI3ODQ5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3Jz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODEsMTEgKzgxLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiBwbwogewogICAgIENDYWxsSGVscGVycyBqaXQ7CiAKLSNpZiBD
UFUoWDg2XzY0KQotICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMiAq
IHNpemVvZihDUFVSZWdpc3RlcikpLCBYODZSZWdpc3RlcnM6OmVzcCk7Ci0jZWxpZiBDUFUoQVJN
NjQpCi0gICAgaml0LnBvcFBhaXIoQ0NhbGxIZWxwZXJzOjpmcmFtZVBvaW50ZXJSZWdpc3Rlciwg
Q0NhbGxIZWxwZXJzOjpsaW5rUmVnaXN0ZXIpOwotI2VuZGlmCisgICAgaml0LmFkZFB0cihDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW0zMigyICogc2l6ZW9mKENQVVJlZ2lzdGVyKSksIENDYWxsSGVs
cGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogCiAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGNv
bnRpbnVhdGlvbiA9IGppdC5qdW1wKCk7CiAK
</data>
<flag name="commit-queue"
          id="452131"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>430632</attachid>
            <date>2021-06-04 17:09:22 -0700</date>
            <delta_ts>2021-06-06 11:41:43 -0700</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-226375.patch</filename>
            <type>text/plain</type>
            <size>51069</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjc4NTExKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc4IEBA
CisyMDIxLTA2LTA0ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBQ
dXQgdGhlIEJhc2VsaW5lIEpJVCBwcm9sb2d1ZSBhbmQgb3BfbG9vcF9oaW50IGNvZGUgaW4gSklU
IHRodW5rcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIyNjM3NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFRoZSBwcm9sb2d1ZSB1c2VzIDEgb2YgOCBwb3NzaWJsZSBzcGVjaWFsaXplZCB0aHVua3MgdG8g
cmVkdWNlIHRoZSBuZWVkIHRvIHBhc3MKKyAgICAgICAgYXJndW1lbnRzLiAgVGhlIG9ubHkgbmVl
ZGVkIGFyZ3VtZW50IGlzIHRoZSBjb2RlQmxvY2sgcG9pbnRlci4KKyAgICAgICAgVGhlcmUgYXJl
IGFsc28gOCBhbmFsb2dvdXMgYXJpdHkgZml4dXAgcHJvbG9ndWVzIHRoYXQgd29yayBzaW1pbGFy
bHkuCisKKyAgICAgICAgVGhlIG9wX2xvb3BfaGludCB0aHVuayBvbmx5IHRha2VzIDEgYXJndW1l
bnQ6IHRoZSBieXRlY29kZSBvZmZzZXQuCisgICAgICAgIEkgaGFkIHRyaWVkIGRvaW5nIHRoZSBs
b29wX2hpbnQgb3B0aW1pemF0aW9uIGNoZWNrIGluIHRoZSB0aHVuaywgYnV0IHRoaXMgc2VlbXMK
KyAgICAgICAgdG8gaGF2ZSBzb21lIHNsaWdodCBuZWdhdGl2ZSBpbXBhY3Qgb24gYmVuY2htYXJr
IHBlcmZvcm1hbmNlLiAgSSBlbmRlZCB1cCBqdXN0CisgICAgICAgIGdvaW5nIHdpdGggbW92aW5n
IHRoZSBzbG93IHBhdGggaW50byBhIHRodW5rLgorCisgICAgICAgIEFsc28gb3B0aW1pemVkIG9w
X2VudGVyIGEgYml0IG1vcmUgYnkgZWxpbWluYXRpbmcgdGhlIG5lZWQgdG8gcGFzcyBhbnkKKyAg
ICAgICAgYXJndW1lbnRzIHRvIHRoZSB0aHVuay4gIGxvY2Fsc1RvSW5pdEdQUiBpcyBub3cgY29t
cHV0ZWQgaW4gdGhlIHRodW5rLgorICAgICAgICBjYW5CZU9wdGltaXplZCBpcyBvYnZpYXRlZCBi
eSB1c2luZyBzcGVjaWFsaXplZCB0aHVua3MuCisKKyAgICAgICAgTGlua0J1ZmZlciBzaXplIHJl
c3VsdHM6CisKKyAgICAgICAgICAgQmFzZWxpbmVKSVQ6IDkzMzE5NjI4ICg4OC45OTY1MzIgTUIp
ICAgPT4gODM4NTE4MjQgKDc5Ljk2NzMzMSBNQikgICAwLjkweAorICAgICAgICAgRXh0cmFDVElU
aHVuazogNTk5MiAoNS44NTE1NjIgS0IpICAgICAgICA9PiA2OTg0ICg2LjgyMDMxMiBLQikgICAg
ICAgIDEuMTd4CisgICAgICAgICAgICAgICAgICAgICAgICAuLi4KKyAgICAgICAgICAgICAgICAg
VG90YWw6IDE5NzUzMDAwOCAoMTg4LjM3OTI5NSBNQikgPT4gMTg4NDU5NDQ0ICgxNzkuNzI4OTMx
IE1CKSAwLjk1eAorCisgICAgICAgIFNwZWVkb21ldGVyMiBhbmQgSmV0U3RyZWFtMiByZXN1bHRz
IChhcyBtZWFzdXJlZCBvbiBhbiBNMSBNYWMpIGFyZSBuZXV0cmFsLgorCisgICAgICAgICogYXNz
ZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaDoKKyAgICAgICAgKEpTQzo6QWJzdHJhY3RN
YWNyb0Fzc2VtYmxlcjo6dW50YWdSZXR1cm5BZGRyZXNzV2l0aG91dEV4dHJhVmFsaWRhdGlvbik6
CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaDoKKyAgICAgICAgKEpT
Qzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6bmVnYXRlNjQpOgorICAgICAgICAqIGFzc2VtYmxlci9N
YWNyb0Fzc2VtYmxlckFSTTY0RS5oOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0
RTo6dW50YWdSZXR1cm5BZGRyZXNzKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02
NEU6OnVudGFnUmV0dXJuQWRkcmVzc1dpdGhvdXRFeHRyYVZhbGlkYXRpb24pOgorICAgICAgICAq
IGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTXY3Lmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNz
ZW1ibGVyQVJNdjc6OmJyYW5jaEFkZDMyKToKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3Nl
bWJsZXJNSVBTLmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyTUlQUzo6YnJhbmNoQWRk
MzJXaXRoUG9zdEFjdGlvbik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyTUlQUzo6YnJh
bmNoQWRkMzIpOgorICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oOgor
ICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4Nl82NDo6bmVnYXRlNjQpOgorICAgICAgICAq
IGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om9mZnNldE9m
TnVtQ2FsbGVlTG9jYWxzKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpvZmZzZXRPZk51bVZh
cnMpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om9mZnNldE9mQXJndW1lbnRWYWx1ZVByb2Zp
bGVzKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpvZmZzZXRPZlNob3VsZEFsd2F5c0JlSW5s
aW5lZCk6CisgICAgICAgICogaml0L0Fzc2VtYmx5SGVscGVycy5oOgorICAgICAgICAoSlNDOjpB
c3NlbWJseUhlbHBlcnM6OmVtaXRTYXZlQ2FsbGVlU2F2ZXNGb3IpOgorICAgICAgICAoSlNDOjpB
c3NlbWJseUhlbHBlcnM6OmVtaXRTYXZlQ2FsbGVlU2F2ZXNGb3JCYXNlbGluZUpJVCk6CisgICAg
ICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6ZW1pdFJlc3RvcmVDYWxsZWVTYXZlc0ZvckJhc2Vs
aW5lSklUKToKKyAgICAgICAgKiBqaXQvSklULmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpjb21w
aWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW5nKToKKyAgICAgICAgKEpTQzo6SklUOjpwcm9sb2d1
ZUdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6YXJpdHlGaXh1cFByb2xvZ3VlR2VuZXJh
dG9yKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUV4Y2VwdGlvbkhhbmRsZXJz
KToKKyAgICAgICAgKiBqaXQvSklULmg6CisgICAgICAgICogaml0L0pJVElubGluZXMuaDoKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0TmFrZWROZWFyQ2FsbCk6CisgICAgICAgICogaml0L0pJVE9w
Y29kZXMuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6Om9wX3JldF9oYW5kbGVyR2VuZXJhdG9yKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2VudGVyKToKKyAgICAgICAgKEpTQzo6SklUOjpv
cF9lbnRlcl9HZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVQ6Om9wX2VudGVyX2NhbkJlT3B0
aW1pemVkX0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6b3BfZW50ZXJfY2Fubm90QmVP
cHRpbWl6ZWRfR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2xvb3BfaGlu
dCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfbG9vcF9oaW50KToKKyAgICAgICAg
KEpTQzo6SklUOjpvcF9sb29wX2hpbnRfR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUOjpv
cF9lbnRlcl9oYW5kbGVyR2VuZXJhdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvSklUT3Bj
b2RlczMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2VudGVyKToKKyAgICAg
ICAgKiBqaXQvVGh1bmtHZW5lcmF0b3JzLmNwcDoKKyAgICAgICAgKEpTQzo6cG9wVGh1bmtTdGFj
a1ByZXNlcnZlc0FuZEhhbmRsZUV4Y2VwdGlvbkdlbmVyYXRvcik6CisKIDIwMjEtMDYtMDQgIERl
dmluIFJvdXNzbyAgPGRyb3Vzc29AYXBwbGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6
IG1hcmsgcmVjZW50bHkgYWRkZWQgcHJvdG9jb2wgY29tbWFuZHMvZXZlbnRzIGFzIHBhZ2Utb25s
eQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNz
ZW1ibGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9B
YnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgJKHJldmlzaW9uIDI3ODUxMSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDAzLDYgKzEwMDMsNyBAQCBwdWJsaWM6CiAKICAgICBBTFdBWVNfSU5MSU5FIHZv
aWQgdGFnUmV0dXJuQWRkcmVzcygpIHsgfQogICAgIEFMV0FZU19JTkxJTkUgdm9pZCB1bnRhZ1Jl
dHVybkFkZHJlc3MoUmVnaXN0ZXJJRCA9IFJlZ2lzdGVySUQ6OkludmFsaWRHUFJSZWcpIHsgfQor
ICAgIEFMV0FZU19JTkxJTkUgdm9pZCB1bnRhZ1JldHVybkFkZHJlc3NXaXRob3V0RXh0cmFWYWxp
ZGF0aW9uKCkgeyB9CiAKICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgdGFnUHRyKFB0clRhZywgUmVn
aXN0ZXJJRCkgeyB9CiAgICAgQUxXQVlTX0lOTElORSB2b2lkIHRhZ1B0cihSZWdpc3RlcklELCBS
ZWdpc3RlcklEKSB7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFj
cm9Bc3NlbWJsZXJBUk02NC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oCShyZXZpc2lvbiAyNzg1MTEpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjIzNSw2ICsyMjM1LDEyIEBAIHB1YmxpYzoKICAgICAgICAgb3JEb3VibGUo
b3AxLCBvcDIsIGRlc3QpOwogICAgIH0KIAorICAgIHZvaWQgbmVnYXRlNjQoUmVnaXN0ZXJJRCBk
ZXN0KQorICAgIHsKKyAgICAgICAgbm90NjQoZGVzdCk7CisgICAgICAgIGFkZDY0KFRydXN0ZWRJ
bW0zMigxKSwgZGVzdCk7CisgICAgfQorCiAgICAgdm9pZCBuZWdhdGVEb3VibGUoRlBSZWdpc3Rl
cklEIHNyYywgRlBSZWdpc3RlcklEIGRlc3QpCiAgICAgewogICAgICAgICBtX2Fzc2VtYmxlci5m
bmVnPDY0PihkZXN0LCBzcmMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9NYWNyb0Fzc2VtYmxlckFSTTY0RS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NEUuaAkocmV2aXNpb24gMjc4NTExKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTTY0RS5o
CSh3b3JraW5nIGNvcHkpCkBAIC01NCwxMCArNTQsMTUgQEAgcHVibGljOgogCiAgICAgQUxXQVlT
X0lOTElORSB2b2lkIHVudGFnUmV0dXJuQWRkcmVzcyhSZWdpc3RlcklEIHNjcmF0Y2ggPSBJbnZh
bGlkR1BSKQogICAgIHsKLSAgICAgICAgdW50YWdQdHIoQVJNNjRSZWdpc3RlcnM6OnNwLCBBUk02
NFJlZ2lzdGVyczo6bHIpOworICAgICAgICB1bnRhZ1JldHVybkFkZHJlc3NXaXRob3V0RXh0cmFW
YWxpZGF0aW9uKCk7CiAgICAgICAgIHZhbGlkYXRlVW50YWdnZWRQdHIoQVJNNjRSZWdpc3RlcnM6
OmxyLCBzY3JhdGNoKTsKICAgICB9CiAKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgdW50YWdSZXR1
cm5BZGRyZXNzV2l0aG91dEV4dHJhVmFsaWRhdGlvbigpCisgICAgeworICAgICAgICB1bnRhZ1B0
cihBUk02NFJlZ2lzdGVyczo6c3AsIEFSTTY0UmVnaXN0ZXJzOjpscik7CisgICAgfQorCiAgICAg
QUxXQVlTX0lOTElORSB2b2lkIHRhZ1B0cihQdHJUYWcgdGFnLCBSZWdpc3RlcklEIHRhcmdldCkK
ICAgICB7CiAgICAgICAgIGF1dG8gdGFnR1BSID0gZ2V0Q2FjaGVkRGF0YVRlbXBSZWdpc3RlcklE
QW5kSW52YWxpZGF0ZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9N
YWNyb0Fzc2VtYmxlckFSTXY3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTXY3LmgJKHJldmlzaW9uIDI3ODUxMSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk12Ny5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNzg0LDYgKzE3ODQsMTQgQEAgcHVibGljOgogICAgICAgICByZXR1cm4g
YnJhbmNoQWRkMzIoY29uZCwgZGVzdCwgc3JjLCBkZXN0KTsKICAgICB9CiAKKyAgICBKdW1wIGJy
YW5jaEFkZDMyKFJlc3VsdENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIHNyYywgQWRkcmVzcyBk
ZXN0KQorICAgIHsKKyAgICAgICAgbG9hZDMyKGRlc3QsIGRhdGFUZW1wUmVnaXN0ZXIpOworICAg
ICAgICBtX2Fzc2VtYmxlci5hZGRfUyhkYXRhVGVtcFJlZ2lzdGVyLCBzcmMsIGRhdGFUZW1wUmVn
aXN0ZXIpOworICAgICAgICBzdG9yZTMyKGRhdGFUZW1wUmVnaXN0ZXIsIGRlc3QpOworICAgICAg
ICByZXR1cm4gSnVtcChtYWtlQnJhbmNoKGNvbmQpKTsKKyAgICB9CisKICAgICBKdW1wIGJyYW5j
aEFkZDMyKFJlc3VsdENvbmRpdGlvbiBjb25kLCBBZGRyZXNzIHNyYywgUmVnaXN0ZXJJRCBkZXN0
KQogICAgIHsKICAgICAgICAgbG9hZDMyKHNyYywgZGF0YVRlbXBSZWdpc3Rlcik7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyTUlQUy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJN
SVBTLmgJKHJldmlzaW9uIDI3ODUxMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvTWFjcm9Bc3NlbWJsZXJNSVBTLmgJKHdvcmtpbmcgY29weSkKQEAgLTIwNjAsNyArMjA2MCw4
IEBAIHB1YmxpYzoKICAgICAvLyAqIGpvIG9wZXJhdGlvbnMgYnJhbmNoIGlmIHRoZSAoc2lnbmVk
KSBhcml0aG1ldGljCiAgICAgLy8gICBvcGVyYXRpb24gY2F1c2VkIGFuIG92ZXJmbG93IHRvIG9j
Y3VyLgogCi0gICAgSnVtcCBicmFuY2hBZGQzMihSZXN1bHRDb25kaXRpb24gY29uZCwgUmVnaXN0
ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgor
ICAgIEp1bXAgYnJhbmNoQWRkMzJXaXRoUG9zdEFjdGlvbihSZXN1bHRDb25kaXRpb24gY29uZCwg
UmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCwgRnVuYyBwb3N0QWN0aW9uKQogICAgIHsK
ICAgICAgICAgQVNTRVJUKChjb25kID09IE92ZXJmbG93KSB8fCAoY29uZCA9PSBTaWduZWQpIHx8
IChjb25kID09IFBvc2l0aXZlT3JaZXJvKSB8fCAoY29uZCA9PSBaZXJvKSB8fCAoY29uZCA9PSBO
b25aZXJvKSk7CiAgICAgICAgIGlmIChjb25kID09IE92ZXJmbG93KSB7CkBAIC0yMDg0LDYgKzIw
ODUsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBtX2Fzc2VtYmxlci54b3JJbnNuKGNtcFRlbXBS
ZWdpc3RlciwgZGF0YVRlbXBSZWdpc3Rlciwgc3JjKTsKICAgICAgICAgICAgIG1fYXNzZW1ibGVy
LmJsdHooY21wVGVtcFJlZ2lzdGVyLCAxMCk7CiAgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGR1
KGRlc3QsIGRhdGFUZW1wUmVnaXN0ZXIsIHNyYyk7CisgICAgICAgICAgICBwb3N0QWN0aW9uKCk7
CiAgICAgICAgICAgICBtX2Fzc2VtYmxlci54b3JJbnNuKGNtcFRlbXBSZWdpc3RlciwgZGVzdCwg
ZGF0YVRlbXBSZWdpc3Rlcik7CiAgICAgICAgICAgICBtX2Fzc2VtYmxlci5iZ2V6KGNtcFRlbXBS
ZWdpc3RlciwgNyk7CiAgICAgICAgICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKQEAgLTIwOTEsMjgg
KzIwOTMsMzcgQEAgcHVibGljOgogICAgICAgICB9CiAgICAgICAgIGlmIChjb25kID09IFNpZ25l
ZCkgewogICAgICAgICAgICAgYWRkMzIoc3JjLCBkZXN0KTsKKyAgICAgICAgICAgIHBvc3RBY3Rp
b24oKTsKICAgICAgICAgICAgIC8vIENoZWNrIGlmIGRlc3QgaXMgbmVnYXRpdmUuCiAgICAgICAg
ICAgICBtX2Fzc2VtYmxlci5zbHQoY21wVGVtcFJlZ2lzdGVyLCBkZXN0LCBNSVBTUmVnaXN0ZXJz
Ojp6ZXJvKTsKICAgICAgICAgICAgIHJldHVybiBicmFuY2hOb3RFcXVhbChjbXBUZW1wUmVnaXN0
ZXIsIE1JUFNSZWdpc3RlcnM6Onplcm8pOwogICAgICAgICB9CiAgICAgICAgIGlmIChjb25kID09
IFBvc2l0aXZlT3JaZXJvKSB7CiAgICAgICAgICAgICBhZGQzMihzcmMsIGRlc3QpOworICAgICAg
ICAgICAgcG9zdEFjdGlvbigpOwogICAgICAgICAgICAgLy8gQ2hlY2sgaWYgZGVzdCBpcyBub3Qg
bmVnYXRpdmUuCiAgICAgICAgICAgICBtX2Fzc2VtYmxlci5zbHQoY21wVGVtcFJlZ2lzdGVyLCBk
ZXN0LCBNSVBTUmVnaXN0ZXJzOjp6ZXJvKTsKICAgICAgICAgICAgIHJldHVybiBicmFuY2hFcXVh
bChjbXBUZW1wUmVnaXN0ZXIsIE1JUFNSZWdpc3RlcnM6Onplcm8pOwogICAgICAgICB9CiAgICAg
ICAgIGlmIChjb25kID09IFplcm8pIHsKICAgICAgICAgICAgIGFkZDMyKHNyYywgZGVzdCk7Cisg
ICAgICAgICAgICBwb3N0QWN0aW9uKCk7CiAgICAgICAgICAgICByZXR1cm4gYnJhbmNoRXF1YWwo
ZGVzdCwgTUlQU1JlZ2lzdGVyczo6emVybyk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGNvbmQg
PT0gTm9uWmVybykgewogICAgICAgICAgICAgYWRkMzIoc3JjLCBkZXN0KTsKKyAgICAgICAgICAg
IHBvc3RBY3Rpb24oKTsKICAgICAgICAgICAgIHJldHVybiBicmFuY2hOb3RFcXVhbChkZXN0LCBN
SVBTUmVnaXN0ZXJzOjp6ZXJvKTsKICAgICAgICAgfQogICAgICAgICBBU1NFUlQoMCk7CiAgICAg
ICAgIHJldHVybiBKdW1wKCk7CiAgICAgfQogCisgICAgSnVtcCBicmFuY2hBZGQzMihSZXN1bHRD
b25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBicmFuY2hBZGQzMldpdGhQb3N0QWN0aW9uKGNvbmQsIHNyYywgZGVzdCwg
W10geyB9KTsKKyAgICB9CisKICAgICBKdW1wIGJyYW5jaEFkZDMyKFJlc3VsdENvbmRpdGlvbiBj
b25kLCBSZWdpc3RlcklEIG9wMSwgUmVnaXN0ZXJJRCBvcDIsIFJlZ2lzdGVySUQgZGVzdCkKICAg
ICB7CiAgICAgICAgIEFTU0VSVCgoY29uZCA9PSBPdmVyZmxvdykgfHwgKGNvbmQgPT0gU2lnbmVk
KSB8fCAoY29uZCA9PSBQb3NpdGl2ZU9yWmVybykgfHwgKGNvbmQgPT0gWmVybykgfHwgKGNvbmQg
PT0gTm9uWmVybykpOwpAQCAtMjE3MSw2ICsyMTgyLDE0IEBAIHB1YmxpYzoKICAgICAgICAgcmV0
dXJuIGJyYW5jaEFkZDMyKGNvbmQsIGRlc3QsIGltbSwgZGVzdCk7CiAgICAgfQogCisgICAgSnVt
cCBicmFuY2hBZGQzMihSZXN1bHRDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBzcmMsIEFkZHJl
c3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIGxvYWQzMihhZGRyZXNzLCBpbW1UZW1wUmVnaXN0
ZXIpOworICAgICAgICByZXR1cm4gYnJhbmNoQWRkMzJXaXRoUG9zdEFjdGlvbihjb25kLCBzcmMs
IGltbVRlbXBSZWdpc3RlciwgWyZdIHsKKyAgICAgICAgICAgIHN0b3JlMzIoaW1tVGVtcFJlZ2lz
dGVyLCBhZGRyZXNzKTsKKyAgICAgICAgfSk7CisgICAgfQorCiAgICAgSnVtcCBicmFuY2hBZGQz
MihSZXN1bHRDb25kaXRpb24gY29uZCwgQWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3Qp
CiAgICAgewogICAgICAgICBsb2FkMzIoYWRkcmVzcywgaW1tVGVtcFJlZ2lzdGVyKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1i
bGVyWDg2XzY0LmgJKHJldmlzaW9uIDI3ODUxMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaAkod29ya2luZyBjb3B5KQpAQCAtOTE4LDYg
KzkxOCwxMiBAQCBwdWJsaWM6CiAgICAgICAgIG1fYXNzZW1ibGVyLm5vdHFfbShkZXN0Lm9mZnNl
dCwgZGVzdC5iYXNlLCBkZXN0LmluZGV4LCBkZXN0LnNjYWxlKTsKICAgICB9CiAKKyAgICB2b2lk
IG5lZ2F0ZTY0KFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG5vdDY0KGRlc3QpOwor
ICAgICAgICBhZGQ2NChUcnVzdGVkSW1tMzIoMSksIGRlc3QpOworICAgIH0KKwogICAgIHZvaWQg
bG9hZDY0KEltcGxpY2l0QWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewog
ICAgICAgICBtX2Fzc2VtYmxlci5tb3ZxX21yKGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2Us
IGRlc3QpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
aAkocmV2aXNpb24gMjc4NTExKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nv
ZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjksNyArMTY5LDEwIEBAIHB1YmxpYzoKICAg
ICB1bnNpZ25lZCBudW1UbXBzKCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPmhhc0No
ZWNrcG9pbnRzKCkgKiBtYXhOdW1DaGVja3BvaW50VG1wczsgfQogCiAgICAgdW5zaWduZWQqIGFk
ZHJlc3NPZk51bVBhcmFtZXRlcnMoKSB7IHJldHVybiAmbV9udW1QYXJhbWV0ZXJzOyB9CisKKyAg
ICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTnVtQ2FsbGVlTG9jYWxzKCkgeyByZXR1cm4gT0JK
RUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9udW1DYWxsZWVMb2NhbHMpOyB9CiAgICAgc3RhdGlj
IHB0cmRpZmZfdCBvZmZzZXRPZk51bVBhcmFtZXRlcnMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VU
T0YoQ29kZUJsb2NrLCBtX251bVBhcmFtZXRlcnMpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBv
ZmZzZXRPZk51bVZhcnMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX251
bVZhcnMpOyB9CiAKICAgICBDb2RlQmxvY2sqIGFsdGVybmF0aXZlKCkgY29uc3QgeyByZXR1cm4g
c3RhdGljX2Nhc3Q8Q29kZUJsb2NrKj4obV9hbHRlcm5hdGl2ZS5nZXQoKSk7IH0KICAgICB2b2lk
IHNldEFsdGVybmF0aXZlKFZNJiwgQ29kZUJsb2NrKik7CkBAIC00ODYsNiArNDg5LDggQEAgcHVi
bGljOgogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAorICAgIHN0YXRpYyBwdHJkaWZm
X3Qgb2Zmc2V0T2ZBcmd1bWVudFZhbHVlUHJvZmlsZXMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VU
T0YoQ29kZUJsb2NrLCBtX2FyZ3VtZW50VmFsdWVQcm9maWxlcyk7IH0KKwogICAgIFZhbHVlUHJv
ZmlsZSYgdmFsdWVQcm9maWxlRm9yQnl0ZWNvZGVJbmRleChCeXRlY29kZUluZGV4KTsKICAgICBT
cGVjdWxhdGVkVHlwZSB2YWx1ZVByb2ZpbGVQcmVkaWN0aW9uRm9yQnl0ZWNvZGVJbmRleChjb25z
dCBDb25jdXJyZW50SlNMb2NrZXImLCBCeXRlY29kZUluZGV4KTsKIApAQCAtODE5LDcgKzgyNCw3
IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBib29sIHdhc0NvbXBpbGVkV2l0aERlYnVnZ2luZ09w
Y29kZXMoKSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+d2FzQ29tcGlsZWRXaXRoRGVi
dWdnaW5nT3Bjb2RlcygpOyB9Ci0gICAgCisKICAgICAvLyBUaGlzIGlzIGludGVudGlvbmFsbHkg
cHVibGljOyBpdCdzIHRoZSByZXNwb25zaWJpbGl0eSBvZiBhbnlvbmUgZG9pbmcgYW55CiAgICAg
Ly8gb2YgdGhlIGZvbGxvd2luZyB0byBob2xkIHRoZSBsb2NrOgogICAgIC8vCkBAIC05MDYsNiAr
OTExLDcgQEAgcHVibGljOgogCiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZk1ldGFkYXRh
VGFibGUoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX21ldGFkYXRhKTsg
fQogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZJbnN0cnVjdGlvbnNSYXdQb2ludGVyKCkg
eyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9pbnN0cnVjdGlvbnNSYXdQb2lu
dGVyKTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZTaG91bGRBbHdheXNCZUlubGlu
ZWQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX3Nob3VsZEFsd2F5c0Jl
SW5saW5lZCk7IH0KIAogICAgIGJvb2wgbG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFy
bHlSZXR1cm4oKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1i
bHlIZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3Nl
bWJseUhlbHBlcnMuaAkocmV2aXNpb24gMjc4NTExKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMzI2LDYgKzMyNiwxMSBA
QCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVChjb2RlQmxvY2spOwogCiAgICAgICAgIGNvbnN0IFJl
Z2lzdGVyQXRPZmZzZXRMaXN0KiBjYWxsZWVTYXZlcyA9IGNvZGVCbG9jay0+Y2FsbGVlU2F2ZVJl
Z2lzdGVycygpOworICAgICAgICBlbWl0U2F2ZUNhbGxlZVNhdmVzRm9yKGNhbGxlZVNhdmVzKTsK
KyAgICB9CisKKyAgICB2b2lkIGVtaXRTYXZlQ2FsbGVlU2F2ZXNGb3IoY29uc3QgUmVnaXN0ZXJB
dE9mZnNldExpc3QqIGNhbGxlZVNhdmVzKQorICAgIHsKICAgICAgICAgUmVnaXN0ZXJTZXQgZG9u
dFNhdmVSZWdpc3RlcnMgPSBSZWdpc3RlclNldChSZWdpc3RlclNldDo6c3RhY2tSZWdpc3RlcnMo
KSwgUmVnaXN0ZXJTZXQ6OmFsbEZQUnMoKSk7CiAgICAgICAgIHVuc2lnbmVkIHJlZ2lzdGVyQ291
bnQgPSBjYWxsZWVTYXZlcy0+c2l6ZSgpOwogCkBAIC0zOTksNiArNDA0LDExIEBAIHB1YmxpYzoK
ICAgICAgICAgZW1pdFNhdmVDYWxsZWVTYXZlc0Zvcihjb2RlQmxvY2soKSk7CiAgICAgfQogCisg
ICAgdm9pZCBlbWl0U2F2ZUNhbGxlZVNhdmVzRm9yQmFzZWxpbmVKSVQoKQorICAgIHsKKyAgICAg
ICAgZW1pdFNhdmVDYWxsZWVTYXZlc0ZvcigmUmVnaXN0ZXJBdE9mZnNldExpc3Q6OmxsaW50QmFz
ZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOworICAgIH0KKwogICAgIHZvaWQgZW1pdFNhdmVU
aGVuTWF0ZXJpYWxpemVUYWdSZWdpc3RlcnMoKQogICAgIHsKICNpZiBVU0UoSlNWQUxVRTY0KQpA
QCAtNDE3LDYgKzQyNywxMSBAQCBwdWJsaWM6CiAgICAgICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2
ZXNGb3IoY29kZUJsb2NrKCkpOwogICAgIH0KIAorICAgIHZvaWQgZW1pdFJlc3RvcmVDYWxsZWVT
YXZlc0ZvckJhc2VsaW5lSklUKCkKKyAgICB7CisgICAgICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2
ZXNGb3IoJlJlZ2lzdGVyQXRPZmZzZXRMaXN0OjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lz
dGVycygpKTsKKyAgICB9CisKICAgICB2b2lkIGVtaXRSZXN0b3JlU2F2ZWRUYWdSZWdpc3RlcnMo
KQogICAgIHsKICNpZiBVU0UoSlNWQUxVRTY0KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
LmNwcAkocmV2aXNpb24gMjc4NTExKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Myw3ICs4Myw3IEBAIEpJVDo6fkpJVCgpCiB7CiB9CiAK
LSNpZiBFTkFCTEUoREZHX0pJVCkKKyNpZiBFTkFCTEUoREZHX0pJVCkgJiYgIUVOQUJMRShFWFRS
QV9DVElfVEhVTktTKQogdm9pZCBKSVQ6OmVtaXRFbnRlck9wdGltaXphdGlvbkNoZWNrKCkKIHsK
ICAgICBpZiAoIWNhbkJlT3B0aW1pemVkKCkpCkBAIC0xMDEsNyArMTAxLDcgQEAgdm9pZCBKSVQ6
OmVtaXRFbnRlck9wdGltaXphdGlvbkNoZWNrKCkKICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BS
LCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CiAgICAgc2tpcE9wdGltaXplLmxpbmsodGhp
cyk7CiB9Ci0jZW5kaWYKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkgJiYgIUVOQUJMRShFWFRS
QV9DVElfVEhVTktTKSgKIAogdm9pZCBKSVQ6OmVtaXROb3RpZnlXcml0ZShXYXRjaHBvaW50U2V0
KiBzZXQpCiB7CkBAIC02ODIsNiArNjgyLDI3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNs
b3dDYXNlcygpCiAjZW5kaWYKIH0KIAorI2RlZmluZSBGT1JfRUFDSF9OT05fUFJPRklMSU5HX1BS
T0xPR1VFX0dFTkVSQVRPUih2KSBcCisgICAgdighZG9lc1Byb2ZpbGluZywgIWlzQ29uc3RydWN0
b3IsICFoYXNIdWdlRnJhbWUsIHByb2xvZ3VlR2VuZXJhdG9yMCwgYXJpdHlGaXh1cF9wcm9sb2d1
ZUdlbmVyYXRvcjApIFwKKyAgICB2KCFkb2VzUHJvZmlsaW5nLCAhaXNDb25zdHJ1Y3RvciwgIGhh
c0h1Z2VGcmFtZSwgcHJvbG9ndWVHZW5lcmF0b3IxLCBhcml0eUZpeHVwX3Byb2xvZ3VlR2VuZXJh
dG9yMSkgXAorICAgIHYoIWRvZXNQcm9maWxpbmcsICBpc0NvbnN0cnVjdG9yLCAhaGFzSHVnZUZy
YW1lLCBwcm9sb2d1ZUdlbmVyYXRvcjIsIGFyaXR5Rml4dXBfcHJvbG9ndWVHZW5lcmF0b3IyKSBc
CisgICAgdighZG9lc1Byb2ZpbGluZywgIGlzQ29uc3RydWN0b3IsICBoYXNIdWdlRnJhbWUsIHBy
b2xvZ3VlR2VuZXJhdG9yMywgYXJpdHlGaXh1cF9wcm9sb2d1ZUdlbmVyYXRvcjMpCisKKyNpZiBF
TkFCTEUoREZHX0pJVCkKKyNkZWZpbmUgRk9SX0VBQ0hfUFJPRklMSU5HX1BST0xPR1VFX0dFTkVS
QVRPUih2KSBcCisgICAgdiggZG9lc1Byb2ZpbGluZywgIWlzQ29uc3RydWN0b3IsICFoYXNIdWdl
RnJhbWUsIHByb2xvZ3VlR2VuZXJhdG9yNCwgYXJpdHlGaXh1cF9wcm9sb2d1ZUdlbmVyYXRvcjQp
IFwKKyAgICB2KCBkb2VzUHJvZmlsaW5nLCAhaXNDb25zdHJ1Y3RvciwgIGhhc0h1Z2VGcmFtZSwg
cHJvbG9ndWVHZW5lcmF0b3I1LCBhcml0eUZpeHVwX3Byb2xvZ3VlR2VuZXJhdG9yNSkgXAorICAg
IHYoIGRvZXNQcm9maWxpbmcsICBpc0NvbnN0cnVjdG9yLCAhaGFzSHVnZUZyYW1lLCBwcm9sb2d1
ZUdlbmVyYXRvcjYsIGFyaXR5Rml4dXBfcHJvbG9ndWVHZW5lcmF0b3I2KSBcCisgICAgdiggZG9l
c1Byb2ZpbGluZywgIGlzQ29uc3RydWN0b3IsICBoYXNIdWdlRnJhbWUsIHByb2xvZ3VlR2VuZXJh
dG9yNywgYXJpdHlGaXh1cF9wcm9sb2d1ZUdlbmVyYXRvcjcpCisKKyNlbHNlIC8vIG5vdCBFTkFC
TEUoREZHX0pJVCkKKyNkZWZpbmUgRk9SX0VBQ0hfUFJPRklMSU5HX1BST0xPR1VFX0dFTkVSQVRP
Uih2KQorI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZGVmaW5lIEZPUl9FQUNIX1BST0xP
R1VFX0dFTkVSQVRPUih2KSBcCisgICAgRk9SX0VBQ0hfTk9OX1BST0ZJTElOR19QUk9MT0dVRV9H
RU5FUkFUT1IodikgXAorICAgIEZPUl9FQUNIX1BST0ZJTElOR19QUk9MT0dVRV9HRU5FUkFUT1Io
dikKKwogdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbmcoSklUQ29tcGls
YXRpb25FZmZvcnQgZWZmb3J0KQogewogICAgIERGRzo6Q2FwYWJpbGl0eUxldmVsIGxldmVsID0g
bV9jb2RlQmxvY2stPmNhcGFiaWxpdHlMZXZlbCgpOwpAQCAtNzUwLDYgKzc3MSw4IEBAIHZvaWQg
SklUOjpjb21waWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW4KICAgICAgICAgbm9wKCk7CiAKICAg
ICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZSgpOworCisjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktT
KQogICAgIGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihtX2NvZGVCbG9jaywgQ2FsbEZyYW1lU2xv
dDo6Y29kZUJsb2NrKTsKIAogICAgIExhYmVsIGJlZ2luTGFiZWwodGhpcyk7CkBAIC03NzEsMTEg
Kzc5NCwxMCBAQCB2b2lkIEpJVDo6Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluCiAgICAg
aWYgKG1fY29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSkgewogICAgICAgICBB
U1NFUlQoIW1fYnl0ZWNvZGVJbmRleCk7CiAgICAgICAgIGlmIChzaG91bGRFbWl0UHJvZmlsaW5n
KCkpIHsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQgPSAwOyBhcmd1bWVudCA8
IG1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCk7ICsrYXJndW1lbnQpIHsKLSAgICAgICAgICAg
ICAgICAvLyBJZiB0aGlzIGlzIGEgY29uc3RydWN0b3IsIHRoZW4gd2Ugd2FudCB0byBwdXQgaW4g
YSBkdW1teSBwcm9maWxpbmcgc2l0ZSAodG8KLSAgICAgICAgICAgICAgICAvLyBrZWVwIHRoaW5n
cyBjb25zaXN0ZW50KSBidXQgd2UgZG9uJ3QgYWN0dWFsbHkgd2FudCB0byByZWNvcmQgdGhlIGR1
bW15IHZhbHVlLgotICAgICAgICAgICAgICAgIGlmIChtX2NvZGVCbG9jay0+aXNDb25zdHJ1Y3Rv
cigpICYmICFhcmd1bWVudCkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICAvLyBJZiB0aGlzIGlzIGEgY29uc3RydWN0b3IsIHRoZW4gd2Ugd2FudCB0byBwdXQgaW4g
YSBkdW1teSBwcm9maWxpbmcgc2l0ZSAodG8KKyAgICAgICAgICAgIC8vIGtlZXAgdGhpbmdzIGNv
bnNpc3RlbnQpIGJ1dCB3ZSBkb24ndCBhY3R1YWxseSB3YW50IHRvIHJlY29yZCB0aGUgZHVtbXkg
dmFsdWUuCisgICAgICAgICAgICB1bnNpZ25lZCBzdGFydEFyZ3VtZW50ID0gbV9jb2RlQmxvY2st
PmlzQ29uc3RydWN0b3IoKSA/IDEgOiAwOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBhcmd1
bWVudCA9IHN0YXJ0QXJndW1lbnQ7IGFyZ3VtZW50IDwgbV9jb2RlQmxvY2stPm51bVBhcmFtZXRl
cnMoKTsgKythcmd1bWVudCkgewogICAgICAgICAgICAgICAgIGludCBvZmZzZXQgPSBDYWxsRnJh
bWU6OmFyZ3VtZW50T2Zmc2V0SW5jbHVkaW5nVGhpcyhhcmd1bWVudCkgKiBzdGF0aWNfY2FzdDxp
bnQ+KHNpemVvZihSZWdpc3RlcikpOwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgICAgICAgICAg
ICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKQEAgLTc4OSw3
ICs4MTEsMzQgQEAgdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbgogICAg
ICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQotICAgIAorI2Vsc2UgLy8gRU5BQkxFKEVYVFJB
X0NUSV9USFVOS1MpCisgICAgY29uc3RleHByIEdQUlJlZyBjb2RlQmxvY2tHUFIgPSByZWdUNzsK
KyAgICBBU1NFUlQoIW1fYnl0ZWNvZGVJbmRleCk7CisKKyAgICBpbnQgZnJhbWVUb3BPZmZzZXQg
PSBzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKTsK
KyAgICB1bnNpZ25lZCBtYXhGcmFtZVNpemUgPSAtZnJhbWVUb3BPZmZzZXQ7CisKKyAgICBib29s
IGRvZXNQcm9maWxpbmcgPSAobV9jb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2Rl
KSAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCk7CisgICAgYm9vbCBpc0NvbnN0cnVjdG9yID0gbV9j
b2RlQmxvY2stPmlzQ29uc3RydWN0b3IoKTsKKyAgICBib29sIGhhc0h1Z2VGcmFtZSA9IG1heEZy
YW1lU2l6ZSA+IE9wdGlvbnM6OnJlc2VydmVkWm9uZVNpemUoKTsKKworICAgIHN0YXRpYyBjb25z
dGV4cHIgVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yc1tdID0geworI2RlZmluZSBVU0VfUFJPTE9H
VUVfR0VORVJBVE9SKGRvZXNQcm9maWxpbmcsIGlzQ29uc3RydWN0b3IsIGhhc0h1Z2VGcmFtZSwg
bmFtZSwgYXJpdHlGaXh1cE5hbWUpIG5hbWUsCisgICAgICAgIEZPUl9FQUNIX1BST0xPR1VFX0dF
TkVSQVRPUihVU0VfUFJPTE9HVUVfR0VORVJBVE9SKQorI3VuZGVmIFVTRV9QUk9MT0dVRV9HRU5F
UkFUT1IKKyAgICB9OworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbnVtYmVyT2ZHZW5l
cmF0b3JzID0gc2l6ZW9mKGdlbmVyYXRvcnMpIC8gc2l6ZW9mKGdlbmVyYXRvcnNbMF0pOworCisg
ICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrKSwgY29kZUJsb2NrR1BSKTsKKworICAg
IHVuc2lnbmVkIGdlbmVyYXRvclNlbGVjdG9yID0gZG9lc1Byb2ZpbGluZyA8PCAyIHwgaXNDb25z
dHJ1Y3RvciA8PCAxIHwgaGFzSHVnZUZyYW1lIDw8IDA7CisgICAgUkVMRUFTRV9BU1NFUlQoZ2Vu
ZXJhdG9yU2VsZWN0b3IgPCBudW1iZXJPZkdlbmVyYXRvcnMpOworICAgIGF1dG8gZ2VuZXJhdG9y
ID0gZ2VuZXJhdG9yc1tnZW5lcmF0b3JTZWxlY3Rvcl07CisgICAgZW1pdE5ha2VkTmVhckNhbGwo
dm0oKS5nZXRDVElTdHViKGdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKKwor
ICAgIExhYmVsIGJvZHlMYWJlbCh0aGlzKTsKKyNlbmRpZiAvLyAhRU5BQkxFKEVYVFJBX0NUSV9U
SFVOS1MpCisKICAgICBSRUxFQVNFX0FTU0VSVCghSklUQ29kZTo6aXNKSVQobV9jb2RlQmxvY2st
PmppdFR5cGUoKSkpOwogCiAgICAgaWYgKFVOTElLRUxZKHNpemVNYXJrZXIpKQpAQCAtODAzLDE2
ICs4NTIsMTkgQEAgdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbgogICAg
ICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0RW5kT2ZTbG93UGF0aChsYWJlbCgpKTsKICAgICBtX3Bj
VG9Db2RlT3JpZ2luTWFwQnVpbGRlci5hcHBlbmRJdGVtKGxhYmVsKCksIFBDVG9Db2RlT3JpZ2lu
TWFwQnVpbGRlcjo6ZGVmYXVsdENvZGVPcmlnaW4oKSk7CiAKKyNpZiAhRU5BQkxFKEVYVFJBX0NU
SV9USFVOS1MpCiAgICAgc3RhY2tPdmVyZmxvdy5saW5rKHRoaXMpOwogICAgIG1fYnl0ZWNvZGVJ
bmRleCA9IEJ5dGVjb2RlSW5kZXgoMCk7CiAgICAgaWYgKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1Bh
dGhDYWxsKQogICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC1zdGF0aWNfY2FzdDxpbnQzMl90
PihtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCkpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7
CiAgICAgY2FsbE9wZXJhdGlvbldpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKG9wZXJh
dGlvblRocm93U3RhY2tPdmVyZmxvd0Vycm9yLCBtX2NvZGVCbG9jayk7CisjZW5kaWYKIAogICAg
IC8vIElmIHRoZSBudW1iZXIgb2YgcGFyYW1ldGVycyBpcyAxLCB3ZSBuZXZlciByZXF1aXJlIGFy
aXR5IGZpeHVwLgogICAgIGJvb2wgcmVxdWlyZXNBcml0eUZpeHVwID0gbV9jb2RlQmxvY2stPm1f
bnVtUGFyYW1ldGVycyAhPSAxOwogICAgIGlmIChtX2NvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBG
dW5jdGlvbkNvZGUgJiYgcmVxdWlyZXNBcml0eUZpeHVwKSB7CiAgICAgICAgIG1fYXJpdHlDaGVj
ayA9IGxhYmVsKCk7CisjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogICAgICAgICBzdG9y
ZTgoVHJ1c3RlZEltbTMyKDApLCAmbV9jb2RlQmxvY2stPm1fc2hvdWxkQWx3YXlzQmVJbmxpbmVk
KTsKICAgICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoKTsKICAgICAgICAgZW1pdFB1dFRvQ2Fs
bEZyYW1lSGVhZGVyKG1fY29kZUJsb2NrLCBDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spOwpAQCAt
ODMxLDE3ICs4ODMsNDIgQEAgdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXpp
bgogICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwog
ICAgICAgICBlbWl0TmFrZWROZWFyQ2FsbChtX3ZtLT5nZXRDVElTdHViKGFyaXR5Rml4dXBHZW5l
cmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKKyAgICAgICAganVtcChiZWdpbkxh
YmVsKTsKKworI2Vsc2UgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCisgICAgICAgIGVtaXRG
dW5jdGlvblByb2xvZ3VlKCk7CisKKyAgICAgICAgc3RhdGljX2Fzc2VydChjb2RlQmxvY2tHUFIg
PT0gcmVnVDcpOworICAgICAgICBBU1NFUlQoIW1fYnl0ZWNvZGVJbmRleCk7CisKKyAgICAgICAg
c3RhdGljIGNvbnN0ZXhwciBUaHVua0dlbmVyYXRvciBnZW5lcmF0b3JzW10gPSB7CisjZGVmaW5l
IFVTRV9QUk9MT0dVRV9HRU5FUkFUT1IoZG9lc1Byb2ZpbGluZywgaXNDb25zdHJ1Y3RvciwgaGFz
SHVnZUZyYW1lLCBuYW1lLCBhcml0eUZpeHVwTmFtZSkgYXJpdHlGaXh1cE5hbWUsCisgICAgICAg
ICAgICBGT1JfRUFDSF9QUk9MT0dVRV9HRU5FUkFUT1IoVVNFX1BST0xPR1VFX0dFTkVSQVRPUikK
KyN1bmRlZiBVU0VfUFJPTE9HVUVfR0VORVJBVE9SCisgICAgICAgIH07CisgICAgICAgIHN0YXRp
YyBjb25zdGV4cHIgdW5zaWduZWQgbnVtYmVyT2ZHZW5lcmF0b3JzID0gc2l6ZW9mKGdlbmVyYXRv
cnMpIC8gc2l6ZW9mKGdlbmVyYXRvcnNbMF0pOworCisgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jayksIGNvZGVCbG9ja0dQUik7CisKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQo
Z2VuZXJhdG9yU2VsZWN0b3IgPCBudW1iZXJPZkdlbmVyYXRvcnMpOworICAgICAgICBhdXRvIGdl
bmVyYXRvciA9IGdlbmVyYXRvcnNbZ2VuZXJhdG9yU2VsZWN0b3JdOworICAgICAgICBSRUxFQVNF
X0FTU0VSVChnZW5lcmF0b3IpOworICAgICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bSgpLmdldENU
SVN0dWIoZ2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOworCisgICAgICAgIGp1
bXAoYm9keUxhYmVsKTsKKyNlbmRpZiAvLyAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCisKICNp
ZiBBU1NFUlRfRU5BQkxFRAogICAgICAgICBtX2J5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4
KCk7IC8vIFJlc2V0IHRoaXMsIGluIG9yZGVyIHRvIGd1YXJkIGl0cyB1c2Ugd2l0aCBBU1NFUlRz
LgogI2VuZGlmCi0KLSAgICAgICAganVtcChiZWdpbkxhYmVsKTsKICAgICB9IGVsc2UKICAgICAg
ICAgbV9hcml0eUNoZWNrID0gZW50cnlMYWJlbDsgLy8gTmV2ZXIgcmVxdWlyZSBhcml0eSBmaXh1
cC4KIAogICAgIEFTU0VSVChtX2ptcFRhYmxlLmlzRW1wdHkoKSk7CiAgICAgCisjaWYgIUVOQUJM
RShFWFRSQV9DVElfVEhVTktTKQogICAgIHByaXZhdGVDb21waWxlRXhjZXB0aW9uSGFuZGxlcnMo
KTsKKyNlbmRpZgogICAgIAogICAgIGlmIChtX2Rpc2Fzc2VtYmxlcikKICAgICAgICAgbV9kaXNh
c3NlbWJsZXItPnNldEVuZE9mQ29kZShsYWJlbCgpKTsKQEAgLTg1MSw2ICs5MjgsMjQwIEBAIHZv
aWQgSklUOjpjb21waWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW4KICAgICBsaW5rKCk7CiB9CiAK
KyNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gSklUOjpwcm9sb2d1ZUdlbmVyYXRvcihWTSYgdm0sIGJvb2wgZG9lc1Byb2Zp
bGluZywgYm9vbCBpc0NvbnN0cnVjdG9yLCBib29sIGhhc0h1Z2VGcmFtZSwgY29uc3QgY2hhciog
dGh1bmtOYW1lKQoreworICAgIC8vIFRoaXMgZnVuY3Rpb24gZ2VuZXJhdGVzIHRoZSBCYXNlbGlu
ZSBKSVQncyBwcm9sb2d1ZSBjb2RlLiBJdCBpcyBub3QgdXNlYWJsZSBieSBvdGhlciB0aWVycy4K
KyAgICBjb25zdGV4cHIgR1BSUmVnIGNvZGVCbG9ja0dQUiA9IHJlZ1Q3OyAvLyBpbmNvbWluZy4K
KworICAgIGNvbnN0ZXhwciBpbnQgdmlydHVhbFJlZ2lzdGVyU2l6ZSA9IHN0YXRpY19jYXN0PGlu
dD4oc2l6ZW9mKFJlZ2lzdGVyKSk7CisgICAgY29uc3RleHByIGludCB2aXJ0dWFsUmVnaXN0ZXJT
aXplU2hpZnQgPSAzOworICAgIHN0YXRpY19hc3NlcnQoKDEgPDwgdmlydHVhbFJlZ2lzdGVyU2l6
ZVNoaWZ0KSA9PSB2aXJ0dWFsUmVnaXN0ZXJTaXplKTsKKworICAgIHRhZ1JldHVybkFkZHJlc3Mo
KTsKKworICAgIHN0b3JlNjQoY29kZUJsb2NrR1BSLCBhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6
OmNvZGVCbG9jaykpOworCisgICAgbG9hZDMyKEFkZHJlc3MoY29kZUJsb2NrR1BSLCBDb2RlQmxv
Y2s6Om9mZnNldE9mTnVtQ2FsbGVlTG9jYWxzKCkpLCByZWdUMSk7CisgICAgaWYgY29uc3RleHBy
IChtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbEluUmVnaXN0ZXJzKQorICAgICAgICBhZGQz
MihUcnVzdGVkSW1tMzIobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGxJblJlZ2lzdGVycyks
IHJlZ1QxKTsKKyAgICBsc2hpZnQzMihUcnVzdGVkSW1tMzIodmlydHVhbFJlZ2lzdGVyU2l6ZVNo
aWZ0KSwgcmVnVDEpOworICAgIG5lZ2F0ZTY0KHJlZ1QxKTsKKyNpZiBBU1NFUlRfRU5BQkxFRAor
ICAgIFByb2JlOjpGdW5jdGlvbiBwcm9iZUZ1bmN0aW9uID0gW10gKFByb2JlOjpDb250ZXh0JiBj
b250ZXh0KSB7CisgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY29udGV4dC5mcDxDYWxs
RnJhbWUqPigpLT5jb2RlQmxvY2soKTsKKyAgICAgICAgaW50NjRfdCBmcmFtZVRvcE9mZnNldCA9
IHN0YWNrUG9pbnRlck9mZnNldEZvcihjb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKTsKKyAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoY29udGV4dC5ncHI8aW50cHRyX3Q+KHJlZ1QxKSA9PSBmcmFt
ZVRvcE9mZnNldCk7CisgICAgfTsKKyAgICBwcm9iZSh0YWdDRnVuY3Rpb25QdHI8SklUUHJvYmVQ
dHJUYWc+KHByb2JlRnVuY3Rpb24pLCBudWxscHRyKTsKKyNlbmRpZgorCisgICAgYWRkUHRyKGNh
bGxGcmFtZVJlZ2lzdGVyLCByZWdUMSk7CisKKyAgICBKdW1wTGlzdCBzdGFja092ZXJmbG93Owor
ICAgIGlmIChoYXNIdWdlRnJhbWUpCisgICAgICAgIHN0YWNrT3ZlcmZsb3cuYXBwZW5kKGJyYW5j
aFB0cihBYm92ZSwgcmVnVDEsIGNhbGxGcmFtZVJlZ2lzdGVyKSk7CisgICAgc3RhY2tPdmVyZmxv
dy5hcHBlbmQoYnJhbmNoUHRyKEFib3ZlLCBBYnNvbHV0ZUFkZHJlc3Modm0uYWRkcmVzc09mU29m
dFN0YWNrTGltaXQoKSksIHJlZ1QxKSk7CisKKyAgICAvLyBXZSdsbCBiZSBpbW1pbmVudGx5IHJl
dHVyaW5nIHdpdGggYSByZXRhYiBpbiB0aGUgbm9ybWFsIHBhdGgsIHdoaWNoIHdpbGwgZG8gdmFs
aWRhdGlvbi4KKyAgICAvLyBTbywgZXh0cmEgdmFsaWRhdGlvbiBoZXJlIGlzIHJlZHVuZGFudC4K
KyAgICB1bnRhZ1JldHVybkFkZHJlc3NXaXRob3V0RXh0cmFWYWxpZGF0aW9uKCk7CisjaWYgQ1BV
KFg4Nl82NCkKKyAgICBwb3AocmVnVDIpOyAvLyBTYXZlIHRoZSByZXR1cm4gYWRkcmVzcy4KKyNl
bmRpZgorICAgIG1vdmUocmVnVDEsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICB0YWdSZXR1
cm5BZGRyZXNzKCk7CisgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKKyNpZiBDUFUo
WDg2XzY0KQorICAgIHB1c2gocmVnVDIpOyAvLyBSZXN0b3JlIHRoZSByZXR1cm4gYWRkcmVzcy4K
KyNlbmRpZgorCisgICAgZW1pdFNhdmVDYWxsZWVTYXZlc0ZvckJhc2VsaW5lSklUKCk7CisgICAg
ZW1pdE1hdGVyaWFsaXplVGFnQ2hlY2tSZWdpc3RlcnMoKTsKKworICAgIGlmIChkb2VzUHJvZmls
aW5nKSB7CisgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgYXJndW1lbnRWYWx1ZVByb2ZpbGVHUFIg
PSByZWdUNjsKKyAgICAgICAgY29uc3RleHByIEdQUlJlZyBudW1QYXJhbWV0ZXJzR1BSID0gcmVn
VDU7CisgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgYXJndW1lbnRHUFIgPSByZWdUNDsKKworICAg
ICAgICBsb2FkMzIoQWRkcmVzcyhjb2RlQmxvY2tHUFIsIENvZGVCbG9jazo6b2Zmc2V0T2ZOdW1Q
YXJhbWV0ZXJzKCkpLCBudW1QYXJhbWV0ZXJzR1BSKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNz
KGNvZGVCbG9ja0dQUiwgQ29kZUJsb2NrOjpvZmZzZXRPZkFyZ3VtZW50VmFsdWVQcm9maWxlcygp
KSwgYXJndW1lbnRWYWx1ZVByb2ZpbGVHUFIpOworICAgICAgICBpZiAoaXNDb25zdHJ1Y3RvcikK
KyAgICAgICAgICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc2l6ZW9mKFZhbHVlUHJvZmlsZSkpLCBh
cmd1bWVudFZhbHVlUHJvZmlsZUdQUik7CisKKyAgICAgICAgaW50IHN0YXJ0QXJndW1lbnQgPSBD
YWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQgKyAoaXNDb25zdHJ1Y3RvciA/IDEgOiAwKTsKKyAg
ICAgICAgaW50IHN0YXJ0QXJndW1lbnRPZmZzZXQgPSBzdGFydEFyZ3VtZW50ICogdmlydHVhbFJl
Z2lzdGVyU2l6ZTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoc3RhcnRBcmd1bWVudE9mZnNl
dCksIGFyZ3VtZW50R1BSKTsKKworICAgICAgICBhZGQzMihUcnVzdGVkSW1tMzIoc3RhdGljX2Nh
c3Q8aW50PihDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQpKSwgbnVtUGFyYW1ldGVyc0dQUik7
CisgICAgICAgIGxzaGlmdDMyKFRydXN0ZWRJbW0zMih2aXJ0dWFsUmVnaXN0ZXJTaXplU2hpZnQp
LCBudW1QYXJhbWV0ZXJzR1BSKTsKKworICAgICAgICBhZGRQdHIoY2FsbEZyYW1lUmVnaXN0ZXIs
IGFyZ3VtZW50R1BSKTsKKyAgICAgICAgYWRkUHRyKGNhbGxGcmFtZVJlZ2lzdGVyLCBudW1QYXJh
bWV0ZXJzR1BSKTsKKworICAgICAgICBMYWJlbCBsb29wU3RhcnQodGhpcyk7CisgICAgICAgIEp1
bXAgZG9uZSA9IGJyYW5jaFB0cihBYm92ZU9yRXF1YWwsIGFyZ3VtZW50R1BSLCBudW1QYXJhbWV0
ZXJzR1BSKTsKKyAgICAgICAgeworICAgICAgICAgICAgbG9hZDY0KEFkZHJlc3MoYXJndW1lbnRH
UFIpLCByZWdUMCk7CisgICAgICAgICAgICBzdG9yZTY0KHJlZ1QwLCBBZGRyZXNzKGFyZ3VtZW50
VmFsdWVQcm9maWxlR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoVmFsdWVQcm9maWxlLCBtX2J1Y2tldHMp
KSk7CisKKyAgICAgICAgICAgIC8vIFRoZSBhcmd1bWVudCBWYWx1ZVByb2ZpbGVzIGFyZSBzdG9y
ZWQgaW4gYSBGaXhlZFZlY3Rvci4gSGVuY2UsIHRoZQorICAgICAgICAgICAgLy8gYWRkcmVzcyBv
ZiB0aGUgbmV4dCBwcm9maWxlIGNhbiBiZSB0cml2aWFsbHkgY29tcHV0ZWQgd2l0aCBhbiBpbmNy
ZW1lbnQuCisgICAgICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHNpemVvZihWYWx1ZVByb2Zp
bGUpKSwgYXJndW1lbnRWYWx1ZVByb2ZpbGVHUFIpOworICAgICAgICAgICAgYWRkUHRyKFRydXN0
ZWRJbW0zMih2aXJ0dWFsUmVnaXN0ZXJTaXplKSwgYXJndW1lbnRHUFIpOworICAgICAgICAgICAg
anVtcCgpLmxpbmtUbyhsb29wU3RhcnQsIHRoaXMpOworICAgICAgICB9CisgICAgICAgIGRvbmUu
bGluayh0aGlzKTsKKyAgICB9CisgICAgcmV0KCk7CisKKyAgICBzdGFja092ZXJmbG93Lmxpbmso
dGhpcyk7CisjaWYgQ1BVKFg4Nl82NCkKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKDEgKiBzaXpl
b2YoQ1BVUmVnaXN0ZXIpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOyAvLyBkaXNjYXJkIHJldHVy
biBhZGRyZXNzLgorI2VuZGlmCisKKyAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsU2l0
ZUluZGV4KDApLmJpdHMoKTsKKyAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihsb2NhdGlvbkJpdHMp
LCB0YWdGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKTsKKwor
ICAgIGlmIChtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCkKKyAgICAgICAgYWRkUHRyKFRy
dXN0ZWRJbW0zMigtc3RhdGljX2Nhc3Q8aW50MzJfdD4obWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0
aENhbGwpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworCisgICAgc2V0dXBBcmd1bWVudHM8ZGVj
bHR5cGUob3BlcmF0aW9uVGhyb3dTdGFja092ZXJmbG93RXJyb3IpPihjb2RlQmxvY2tHUFIpOwor
ICAgIHByZXBhcmVDYWxsT3BlcmF0aW9uKHZtKTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBv
cGVyYXRpb25DYWxsID0gY2FsbChPcGVyYXRpb25QdHJUYWcpOworICAgIEp1bXAgaGFuZGxlRXhj
ZXB0aW9uSnVtcCA9IGp1bXAoKTsKKworICAgIGF1dG8gaGFuZGxlciA9IHZtLmdldENUSVN0dWIo
aGFuZGxlRXhjZXB0aW9uV2l0aENhbGxGcmFtZVJvbGxiYWNrR2VuZXJhdG9yKTsKKworICAgIExp
bmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnRoaXMsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6
UHJvZmlsZTo6RXh0cmFDVElUaHVuayk7CisgICAgcGF0Y2hCdWZmZXIubGluayhvcGVyYXRpb25D
YWxsLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvblRocm93U3RhY2tPdmVy
Zmxvd0Vycm9yKSk7CisgICAgcGF0Y2hCdWZmZXIubGluayhoYW5kbGVFeGNlcHRpb25KdW1wLCBD
b2RlTG9jYXRpb25MYWJlbChoYW5kbGVyLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkpOworICAg
IHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgdGh1bmtO
YW1lKTsKK30KKworc3RhdGljIGNvbnN0ZXhwciBib29sIGRvZXNQcm9maWxpbmcgPSB0cnVlOwor
c3RhdGljIGNvbnN0ZXhwciBib29sIGlzQ29uc3RydWN0b3IgPSB0cnVlOworc3RhdGljIGNvbnN0
ZXhwciBib29sIGhhc0h1Z2VGcmFtZSA9IHRydWU7CisKKyNkZWZpbmUgREVGSU5FX1BST0dMT0dV
RV9HRU5FUkFUT1IoZG9lc1Byb2ZpbGluZywgaXNDb25zdHJ1Y3RvciwgaGFzSHVnZUZyYW1lLCBu
YW1lLCBhcml0eUZpeHVwTmFtZSkgXAorICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz4gSklUOjpuYW1lKFZNJiB2bSkgXAorICAgIHsgXAorICAgICAgICBKSVQgaml0KHZt
KTsgXAorICAgICAgICByZXR1cm4gaml0LnByb2xvZ3VlR2VuZXJhdG9yKHZtLCBkb2VzUHJvZmls
aW5nLCBpc0NvbnN0cnVjdG9yLCBoYXNIdWdlRnJhbWUsICJCYXNlbGluZTogIiAjbmFtZSk7IFwK
KyAgICB9CisKK0ZPUl9FQUNIX1BST0xPR1VFX0dFTkVSQVRPUihERUZJTkVfUFJPR0xPR1VFX0dF
TkVSQVRPUikKKyN1bmRlZiBERUZJTkVfUFJPR0xPR1VFX0dFTkVSQVRPUgorCitNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6YXJpdHlGaXh1cFByb2xvZ3VlR2VuZXJh
dG9yKFZNJiB2bSwgYm9vbCBpc0NvbnN0cnVjdG9yLCBUaHVua0dlbmVyYXRvciBub3JtYWxQcm9s
b2d1ZUdlbmVyYXRvciwgY29uc3QgY2hhciogdGh1bmtOYW1lKQoreworICAgIC8vIFRoaXMgZnVu
Y3Rpb24gZ2VuZXJhdGVzIHRoZSBCYXNlbGluZSBKSVQncyBwcm9sb2d1ZSBjb2RlLiBJdCBpcyBu
b3QgdXNlYWJsZSBieSBvdGhlciB0aWVycy4KKyAgICBjb25zdGV4cHIgR1BSUmVnIGNvZGVCbG9j
a0dQUiA9IHJlZ1Q3OyAvLyBpbmNvbWluZy4KKyAgICBjb25zdGV4cHIgR1BSUmVnIG51bVBhcmFt
ZXRlcnNHUFIgPSByZWdUNjsKKworICAgIHRhZ1JldHVybkFkZHJlc3MoKTsKKyNpZiBDUFUoWDg2
XzY0KQorICAgIHB1c2goZnJhbWVQb2ludGVyUmVnaXN0ZXIpOworI2VsaWYgQ1BVKEFSTTY0KQor
ICAgIHB1c2hQYWlyKGZyYW1lUG9pbnRlclJlZ2lzdGVyLCBsaW5rUmVnaXN0ZXIpOworI2VuZGlm
CisKKyAgICBzdG9yZTY0KGNvZGVCbG9ja0dQUiwgYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpj
b2RlQmxvY2spKTsKKyAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDApLCBBZGRyZXNzKGNvZGVCbG9j
a0dQUiwgQ29kZUJsb2NrOjpvZmZzZXRPZlNob3VsZEFsd2F5c0JlSW5saW5lZCgpKSk7CisKKyAg
ICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcyksIHJlZ1QxKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhjb2RlQmxvY2tHUFIsIENvZGVCbG9j
azo6b2Zmc2V0T2ZOdW1QYXJhbWV0ZXJzKCkpLCBudW1QYXJhbWV0ZXJzR1BSKTsKKyAgICBKdW1w
IG5vRml4dXBOZWVkZWQgPSBicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBudW1QYXJhbWV0
ZXJzR1BSKTsKKworICAgIGlmIGNvbnN0ZXhwciAobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENh
bGwpCisgICAgICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLXN0YXRpY19jYXN0PGludDMyX3Q+KG1h
eEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKSksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKwor
ICAgIGxvYWRQdHIoQWRkcmVzcyhjb2RlQmxvY2tHUFIsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9i
YWxPYmplY3QoKSksIGFyZ3VtZW50R1BSMCk7CisKKyAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNf
c2FtZTxkZWNsdHlwZShvcGVyYXRpb25Db25zdHJ1Y3RBcml0eUNoZWNrKSwgZGVjbHR5cGUob3Bl
cmF0aW9uQ2FsbEFyaXR5Q2hlY2spPjo6dmFsdWUpOworICAgIHNldHVwQXJndW1lbnRzPGRlY2x0
eXBlKG9wZXJhdGlvbkNhbGxBcml0eUNoZWNrKT4oYXJndW1lbnRHUFIwKTsKKyAgICBwcmVwYXJl
Q2FsbE9wZXJhdGlvbih2bSk7CisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcml0eUNoZWNr
Q2FsbCA9IGNhbGwoT3BlcmF0aW9uUHRyVGFnKTsKKyAgICBKdW1wIGhhbmRsZUV4Y2VwdGlvbkp1
bXAgPSBlbWl0Tm9uUGF0Y2hhYmxlRXhjZXB0aW9uQ2hlY2sodm0pOworCisgICAgaWYgY29uc3Rl
eHByIChtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCkKKyAgICAgICAgYWRkUHRyKFRydXN0
ZWRJbW0zMihtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCksIHN0YWNrUG9pbnRlclJlZ2lz
dGVyKTsKKyAgICBKdW1wIG5lZWRGaXh1cCA9IGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXR1cm5W
YWx1ZUdQUik7CisgICAgbm9GaXh1cE5lZWRlZC5saW5rKHRoaXMpOworCisgICAgLy8gVGhlIG5v
cm1hbCBwcm9sb2d1ZSBleHBlY3RzIGluY29taW5nIGNvZGVCbG9ja0dQUi4KKyAgICBsb2FkNjQo
YWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCBjb2RlQmxvY2tHUFIpOworCisj
aWYgQ1BVKFg4Nl82NCkKKyAgICBwb3AoZnJhbWVQb2ludGVyUmVnaXN0ZXIpOworI2VsaWYgQ1BV
KEFSTTY0KQorICAgIHBvcFBhaXIoZnJhbWVQb2ludGVyUmVnaXN0ZXIsIGxpbmtSZWdpc3Rlcik7
CisjZW5kaWYKKyAgICB1bnRhZ1JldHVybkFkZHJlc3MoKTsKKworICAgIEp1bXBMaXN0IG5vcm1h
bFByb2xvZ3VlSnVtcDsKKyAgICBub3JtYWxQcm9sb2d1ZUp1bXAuYXBwZW5kKGp1bXAoKSk7CisK
KyAgICBuZWVkRml4dXAubGluayh0aGlzKTsKKworICAgIC8vIFJlc3RvcmUgdGhlIHN0YWNrIGZv
ciBhcml0eSBmaXh1cCwgYW5kIHByZXNlcnZlIHRoZSByZXR1cm4gYWRkcmVzcy4KKyAgICAvLyBh
cml0eUZpeHVwR2VuZXJhdG9yIHdpbGwgYmUgc2hpZnRpbmcgdGhlIHN0YWNrLiBTbywgd2UgY2Fu
J3QgdXNlIHRoZSBzdGFjayB0bworICAgIC8vIHByZXNlcnZlIHRoZSByZXR1cm4gYWRkcmVzcy4g
V2UgYWxzbyBjYW4ndCB1c2UgY2FsbGVlIHNhdmVkIHJlZ2lzdGVycyBiZWNhdXNlCisgICAgLy8g
dGhleSBoYXZlbid0IGJlZW4gc2F2ZWQgeWV0LgorICAgIC8vCisgICAgLy8gYXJpdHlGaXh1cEdl
bmVyYXRvciBpcyBjYXJlZnVsbHkgY3JhZnRlZCB0byBvbmx5IHVzZSBhMCwgYTEsIGEyLCB0Mywg
dDQgYW5kIHQ1LgorICAgIC8vIFNvLCB0aGUgcmV0dXJuIGFkZHJlc3MgY2FuIGJlIHByZXNlcnZl
ZCBpbiByZWdUNy4KKyNpZiBDUFUoWDg2XzY0KQorICAgIHBvcChhcmd1bWVudEdQUjIpOyAvLyBk
aXNjYXJkLgorICAgIHBvcChyZWdUNyk7IC8vIHNhdmUgcmV0dXJuIGFkZHJlc3MuCisjZWxpZiBD
UFUoQVJNNjQpCisgICAgcG9wUGFpcihmcmFtZVBvaW50ZXJSZWdpc3RlciwgbGlua1JlZ2lzdGVy
KTsKKyAgICB1bnRhZ1JldHVybkFkZHJlc3MoKTsKKyAgICBtb3ZlKGxpbmtSZWdpc3RlciwgcmVn
VDcpOworICAgIGF1dG8gcmFuZG9tUmV0dXJuQWRkcmVzc1RhZyA9IHJhbmRvbSgpOworICAgIG1v
dmUoVHJ1c3RlZEltbTMyKHJhbmRvbVJldHVybkFkZHJlc3NUYWcpLCByZWdUMSk7CisgICAgdGFn
UHRyKHJlZ1QxLCByZWdUNyk7CisjZW5kaWYKKyAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBHUFJJ
bmZvOjphcmd1bWVudEdQUjApOworICAgIENhbGwgYXJpdHlGaXh1cENhbGwgPSBuZWFyQ2FsbCgp
OworCisjaWYgQ1BVKFg4Nl82NCkKKyAgICBwdXNoKHJlZ1Q3KTsgLy8gcmVzdG9yZSByZXR1cm4g
YWRkcmVzcy4KKyNlbGlmIENQVShBUk02NCkKKyAgICBtb3ZlKFRydXN0ZWRJbW0zMihyYW5kb21S
ZXR1cm5BZGRyZXNzVGFnKSwgcmVnVDEpOworICAgIHVudGFnUHRyKHJlZ1QxLCByZWdUNyk7Cisg
ICAgbW92ZShyZWdUNywgbGlua1JlZ2lzdGVyKTsKKyNlbmRpZgorCisgICAgbG9hZDY0KGFkZHJl
c3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgY29kZUJsb2NrR1BSKTsKKyAgICBub3Jt
YWxQcm9sb2d1ZUp1bXAuYXBwZW5kKGp1bXAoKSk7CisKKyAgICBhdXRvIGFyaXR5Q2hlY2tPcGVy
YXRpb24gPSBpc0NvbnN0cnVjdG9yID8gb3BlcmF0aW9uQ29uc3RydWN0QXJpdHlDaGVjayA6IG9w
ZXJhdGlvbkNhbGxBcml0eUNoZWNrOworICAgIGF1dG8gYXJpdHlGaXh1cCA9IHZtLmdldENUSVN0
dWIoYXJpdHlGaXh1cEdlbmVyYXRvcik7CisgICAgYXV0byBub3JtYWxQcm9sb2d1ZSA9IHZtLmdl
dENUSVN0dWIobm9ybWFsUHJvbG9ndWVHZW5lcmF0b3IpOworICAgIGF1dG8gZXhjZXB0aW9uSGFu
ZGxlciA9IHZtLmdldENUSVN0dWIocG9wVGh1bmtTdGFja1ByZXNlcnZlc0FuZEhhbmRsZUV4Y2Vw
dGlvbkdlbmVyYXRvcik7CisKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp0aGlzLCBHTE9C
QUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OkV4dHJhQ1RJVGh1bmspOworICAgIHBh
dGNoQnVmZmVyLmxpbmsoYXJpdHlDaGVja0NhbGwsIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRh
Zz4oYXJpdHlDaGVja09wZXJhdGlvbikpOworICAgIHBhdGNoQnVmZmVyLmxpbmsoYXJpdHlGaXh1
cENhbGwsIEZ1bmN0aW9uUHRyKGFyaXR5Rml4dXAucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7
CisgICAgcGF0Y2hCdWZmZXIubGluayhub3JtYWxQcm9sb2d1ZUp1bXAsIENvZGVMb2NhdGlvbkxh
YmVsKG5vcm1hbFByb2xvZ3VlLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkpOworICAgIHBhdGNo
QnVmZmVyLmxpbmsoaGFuZGxlRXhjZXB0aW9uSnVtcCwgQ29kZUxvY2F0aW9uTGFiZWwoZXhjZXB0
aW9uSGFuZGxlci5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKKyAgICByZXR1cm4gRklOQUxJ
WkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsIHRodW5rTmFtZSk7Cit9CisKKyNk
ZWZpbmUgREVGSU5FX0FSSVRZX1BST0dMT0dVRV9HRU5FUkFUT1IoZG9lc1Byb2ZpbGluZywgaXND
b25zdHJ1Y3RvciwgaGFzSHVnZUZyYW1lLCBuYW1lLCBhcml0eUZpeHVwTmFtZSkgXAorTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OmFyaXR5Rml4dXBOYW1lKFZNJiB2
bSkgXAorICAgIHsgXAorICAgICAgICBKSVQgaml0KHZtKTsgXAorICAgICAgICByZXR1cm4gaml0
LmFyaXR5Rml4dXBQcm9sb2d1ZUdlbmVyYXRvcih2bSwgaXNDb25zdHJ1Y3RvciwgbmFtZSwgIkJh
c2VsaW5lOiAiICNhcml0eUZpeHVwTmFtZSk7IFwKKyAgICB9CisKK0ZPUl9FQUNIX1BST0xPR1VF
X0dFTkVSQVRPUihERUZJTkVfQVJJVFlfUFJPR0xPR1VFX0dFTkVSQVRPUikKKyN1bmRlZiBERUZJ
TkVfQVJJVFlfUFJPR0xPR1VFX0dFTkVSQVRPUgorCisjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NU
SV9USFVOS1MpCisKIHZvaWQgSklUOjpsaW5rKCkKIHsKICAgICBMaW5rQnVmZmVyJiBwYXRjaEJ1
ZmZlciA9ICptX2xpbmtCdWZmZXI7CkBAIC0xMDQ2LDkgKzEzNTcsOSBAQCBDb21waWxhdGlvblJl
c3VsdCBKSVQ6OnByaXZhdGVDb21waWxlKEpJCiAgICAgcmV0dXJuIGZpbmFsaXplT25NYWluVGhy
ZWFkKCk7CiB9CiAKKyNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiB2b2lkIEpJVDo6cHJp
dmF0ZUNvbXBpbGVFeGNlcHRpb25IYW5kbGVycygpCiB7Ci0jaWYgIUVOQUJMRShFWFRSQV9DVElf
VEhVTktTKQogICAgIGlmICghbV9leGNlcHRpb25DaGVja3NXaXRoQ2FsbEZyYW1lUm9sbGJhY2su
ZW1wdHkoKSkgewogICAgICAgICBtX2V4Y2VwdGlvbkNoZWNrc1dpdGhDYWxsRnJhbWVSb2xsYmFj
ay5saW5rKHRoaXMpOwogCkBAIC0xMDczLDggKzEzODQsOCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNv
bXBpbGVFeGNlcHRpb25IYW5kbGVyCiAgICAgICAgIG1fZmFyQ2FsbHMuYXBwZW5kKEZhckNhbGxS
ZWNvcmQoY2FsbChPcGVyYXRpb25QdHJUYWcpLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+
KG9wZXJhdGlvbkxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIpKSk7CiAgICAgICAgIGp1bXBUb0V4Y2Vw
dGlvbkhhbmRsZXIodm0oKSk7CiAgICAgfQotI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhV
TktTKQogfQorI2VuZGlmIC8vICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAogdm9pZCBKSVQ6
OmRvTWFpblRocmVhZFByZXBhcmF0aW9uQmVmb3JlQ29tcGlsZSgpCiB7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklULmgJKHJldmlzaW9uIDI3ODUxMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTMxOCw3ICszMTgsOSBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgICAgIG1fZXhjZXB0aW9uQ2hlY2tzV2l0aENhbGxGcmFtZVJvbGxiYWNr
LmFwcGVuZChlbWl0RXhjZXB0aW9uQ2hlY2sodm0oKSkpOwogICAgICAgICB9CiAKKyNpZiAhRU5B
QkxFKEVYVFJBX0NUSV9USFVOS1MpCiAgICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVFeGNlcHRp
b25IYW5kbGVycygpOworI2VuZGlmCiAKICAgICAgICAgdm9pZCBhZHZhbmNlVG9OZXh0Q2hlY2tw
b2ludCgpOwogICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hlY2twb2ludChKdW1w
KTsKQEAgLTc5MCw2ICs3OTIsMjYgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICNpZiBFTkFCTEUoRVhU
UkFfQ1RJX1RIVU5LUykKICAgICAgICAgLy8gVGh1bmsgZ2VuZXJhdG9ycy4KKyAgICAgICAgc3Rh
dGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gcHJvbG9ndWVHZW5lcmF0
b3IwKFZNJik7CisgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+IHByb2xvZ3VlR2VuZXJhdG9yMShWTSYpOworICAgICAgICBzdGF0aWMgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBwcm9sb2d1ZUdlbmVyYXRvcjIoVk0mKTsKKyAg
ICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gcHJvbG9n
dWVHZW5lcmF0b3IzKFZNJik7CisgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IHByb2xvZ3VlR2VuZXJhdG9yNChWTSYpOworICAgICAgICBzdGF0aWMg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBwcm9sb2d1ZUdlbmVyYXRvcjUo
Vk0mKTsKKyAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gcHJvbG9ndWVHZW5lcmF0b3I2KFZNJik7CisgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHByb2xvZ3VlR2VuZXJhdG9yNyhWTSYpOworICAgICAg
ICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHByb2xvZ3VlR2VuZXJhdG9y
KFZNJiwgYm9vbCBkb2VzUHJvZmlsaW5nLCBib29sIGlzQ29uc3RydWN0b3IsIGJvb2wgaGFzSHVn
ZUZyYW1lLCBjb25zdCBjaGFyKiBuYW1lKTsKKworICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBhcml0eUZpeHVwX3Byb2xvZ3VlR2VuZXJhdG9yMChW
TSYpOworICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiBhcml0eUZpeHVwX3Byb2xvZ3VlR2VuZXJhdG9yMShWTSYpOworICAgICAgICBzdGF0aWMgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBhcml0eUZpeHVwX3Byb2xvZ3VlR2Vu
ZXJhdG9yMihWTSYpOworICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiBhcml0eUZpeHVwX3Byb2xvZ3VlR2VuZXJhdG9yMyhWTSYpOworICAgICAgICBz
dGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBhcml0eUZpeHVwX3By
b2xvZ3VlR2VuZXJhdG9yNChWTSYpOworICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiBhcml0eUZpeHVwX3Byb2xvZ3VlR2VuZXJhdG9yNShWTSYpOwor
ICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBhcml0
eUZpeHVwX3Byb2xvZ3VlR2VuZXJhdG9yNihWTSYpOworICAgICAgICBzdGF0aWMgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBhcml0eUZpeHVwX3Byb2xvZ3VlR2VuZXJhdG9y
NyhWTSYpOworICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGFy
aXR5Rml4dXBQcm9sb2d1ZUdlbmVyYXRvcihWTSYsIGJvb2wgaXNDb25zdHJ1Y3RvciwgVGh1bmtH
ZW5lcmF0b3Igbm9ybWFsUHJvbG9ndWVHZW5lcmF0b3IsIGNvbnN0IGNoYXIqIG5hbWUpOworCiAg
ICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHNsb3df
b3BfZGVsX2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yKFZNJik7CiAgICAgICAgIHN0YXRpYyBN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHNsb3dfb3BfZGVsX2J5X3ZhbF9w
cmVwYXJlQ2FsbEdlbmVyYXRvcihWTSYpOwogICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiBzbG93X29wX2dldF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVy
YXRvcihWTSYpOwpAQCAtODA0LDcgKzgyNiwxNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
c3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gc2xvd19vcF9yZXNv
bHZlX3Njb3BlR2VuZXJhdG9yKFZNJik7CiAKICAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3BfY2hlY2tfdHJhcHNfaGFuZGxlckdlbmVyYXRvcihW
TSYpOwotICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiBvcF9lbnRlcl9oYW5kbGVyR2VuZXJhdG9yKFZNJik7CisKKyAgICAgICAgc3RhdGljIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3BfZW50ZXJfY2FuQmVPcHRpbWl6ZWRf
R2VuZXJhdG9yKFZNJik7CisgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHJUYWc+IG9wX2VudGVyX2Nhbm5vdEJlT3B0aW1pemVkX0dlbmVyYXRvcihWTSYpOwor
ICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9wX2VudGVyX0dl
bmVyYXRvcihWTSYsIGJvb2wgY2FuQmVPcHRpbWl6ZWQsIGNvbnN0IGNoYXIqIHRodW5rTmFtZSk7
CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKyAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRUaHVua1B0clRhZz4gb3BfbG9vcF9oaW50X0dlbmVyYXRvcihWTSYpOworI2VuZGlm
CiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9w
X3JldF9oYW5kbGVyR2VuZXJhdG9yKFZNJik7CiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9wX3Rocm93X2hhbmRsZXJHZW5lcmF0b3IoVk0mKTsK
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgJKHJldmlzaW9uIDI3
ODUxMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC05MSw3ICs5MSw2IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRMb2Fk
Q2hhcmFjdGUKIAogQUxXQVlTX0lOTElORSBKSVQ6OkNhbGwgSklUOjplbWl0TmFrZWROZWFyQ2Fs
bChDb2RlUHRyPE5vUHRyVGFnPiB0YXJnZXQpCiB7Ci0gICAgQVNTRVJUKG1fYnl0ZWNvZGVJbmRl
eCk7IC8vIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQg
cGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQuCiAgICAgQ2Fs
bCBuYWtlZENhbGwgPSBuZWFyQ2FsbCgpOwogICAgIG1fbmVhckNhbGxzLmFwcGVuZChOZWFyQ2Fs
bFJlY29yZChuYWtlZENhbGwsIEZ1bmN0aW9uUHRyPEpTSW50ZXJuYWxQdHJUYWc+KHRhcmdldC5y
ZXRhZ2dlZDxKU0ludGVybmFsUHRyVGFnPigpKSkpOwogICAgIHJldHVybiBuYWtlZENhbGw7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCShy
ZXZpc2lvbiAyNzg1MTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMz
Ml82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNjYsNyArMTA2Niw3IEBAIHZvaWQgSklUOjpl
bWl0X29wX2VudGVyKGNvbnN0IEluc3RydWN0aW8KICAgICAvLyBFdmVuIHRob3VnaCBKSVQgY29k
ZSBkb2Vzbid0IHVzZSB0aGVtLCB3ZSBpbml0aWFsaXplIG91ciBjb25zdGFudAogICAgIC8vIHJl
Z2lzdGVycyB0byB6YXAgc3RhbGUgcG9pbnRlcnMsIHRvIGF2b2lkIHVubmVjZXNzYXJpbHkgcHJv
bG9uZ2luZwogICAgIC8vIG9iamVjdCBsaWZldGltZSBhbmQgaW5jcmVhc2luZyBHQyBwcmVzc3Vy
ZS4KLSAgICBmb3IgKGludCBpID0gQ29kZUJsb2NrOjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNw
YWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCk7IGkgPCBtX2NvZGVCbG9jay0+bnVtVmFycygpOyArK2kp
CisgICAgZm9yICh1bnNpZ25lZCBpID0gQ29kZUJsb2NrOjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2
ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCk7IGkgPCBtX2NvZGVCbG9jay0+bnVtVmFycygpOyAr
K2kpCiAgICAgICAgIGVtaXRTdG9yZSh2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpKSwganNVbmRl
ZmluZWQoKSk7CiAKICAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJl
bnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX2VudGVyKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkocmV2aXNpb24gMjc4NTExKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzc2LDcgKzM3
Niw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICBKSVQg
aml0KHZtKTsKIAogICAgIGppdC5jaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwotICAgIGpp
dC5lbWl0UmVzdG9yZUNhbGxlZVNhdmVzRm9yKCZSZWdpc3RlckF0T2Zmc2V0TGlzdDo6bGxpbnRC
YXNlbGluZUNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7CisgICAgaml0LmVtaXRSZXN0b3JlQ2FsbGVl
U2F2ZXNGb3JCYXNlbGluZUpJVCgpOwogICAgIGppdC5lbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOwog
ICAgIGppdC5yZXQoKTsKIApAQCAtMTE4NiwxMDMgKzExODYsMTE1IEBAIHZvaWQgSklUOjplbWl0
X29wX2VudGVyKGNvbnN0IEluc3RydWN0aW8KICAgICBlbWl0RW50ZXJPcHRpbWl6YXRpb25DaGVj
aygpOwogI2Vsc2UKICAgICBBU1NFUlQobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpID09IDApOwot
ICAgIGNvbnN0ZXhwciBHUFJSZWcgbG9jYWxzVG9Jbml0R1BSID0gYXJndW1lbnRHUFIwOwotICAg
IGNvbnN0ZXhwciBHUFJSZWcgY2FuQmVPcHRpbWl6ZWRHUFIgPSBhcmd1bWVudEdQUjQ7Ci0KICAg
ICB1bnNpZ25lZCBsb2NhbHNUb0luaXQgPSBjb3VudCAtIENvZGVCbG9jazo6bGxpbnRCYXNlbGlu
ZUNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpOwogICAgIFJFTEVBU0VfQVNTRVJU
KGxvY2Fsc1RvSW5pdCA8IGNvdW50KTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMihsb2NhbHNUb0lu
aXQgKiBzaXplb2YoUmVnaXN0ZXIpKSwgbG9jYWxzVG9Jbml0R1BSKTsKLSAgICBtb3ZlKFRydXN0
ZWRJbW0zMihjYW5CZU9wdGltaXplZCgpKSwgY2FuQmVPcHRpbWl6ZWRHUFIpOwotICAgIGVtaXRO
YWtlZE5lYXJDYWxsKHZtKCkuZ2V0Q1RJU3R1YihvcF9lbnRlcl9oYW5kbGVyR2VuZXJhdG9yKS5y
ZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOworICAgIFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvciA9
IGNhbkJlT3B0aW1pemVkKCkgPyBvcF9lbnRlcl9jYW5CZU9wdGltaXplZF9HZW5lcmF0b3IgOiBv
cF9lbnRlcl9jYW5ub3RCZU9wdGltaXplZF9HZW5lcmF0b3I7CisgICAgZW1pdE5ha2VkTmVhckNh
bGwodm0oKS5nZXRDVElTdHViKGdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsK
ICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIH0KIAogI2lmIEVOQUJMRShFWFRS
QV9DVElfVEhVTktTKQotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6
Om9wX2VudGVyX2hhbmRsZXJHZW5lcmF0b3IoVk0mIHZtKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFRodW5rUHRyVGFnPiBKSVQ6Om9wX2VudGVyX0dlbmVyYXRvcihWTSYgdm0sIGJvb2wgY2Fu
QmVPcHRpbWl6ZWQsIGNvbnN0IGNoYXIqIHRodW5rTmFtZSkKIHsKLSAgICBKSVQgaml0KHZtKTsK
LQogI2lmIENQVShYODZfNjQpCi0gICAgaml0LnB1c2goWDg2UmVnaXN0ZXJzOjplYnApOworICAg
IHB1c2goWDg2UmVnaXN0ZXJzOjplYnApOwogI2VsaWYgQ1BVKEFSTTY0KQotICAgIGppdC50YWdS
ZXR1cm5BZGRyZXNzKCk7Ci0gICAgaml0LnB1c2hQYWlyKGZyYW1lUG9pbnRlclJlZ2lzdGVyLCBs
aW5rUmVnaXN0ZXIpOworICAgIHRhZ1JldHVybkFkZHJlc3MoKTsKKyAgICBwdXNoUGFpcihmcmFt
ZVBvaW50ZXJSZWdpc3RlciwgbGlua1JlZ2lzdGVyKTsKICNlbmRpZgogICAgIC8vIG9wX2VudGVy
IGlzIGFsd2F5cyBhdCBieXRlY29kZU9mZnNldCAwLgotICAgIGppdC5zdG9yZTMyKFRydXN0ZWRJ
bW0zMigwKSwgdGFnRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
KSk7CisgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoMCksIHRhZ0ZvcihDYWxsRnJhbWVTbG90Ojph
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBsb2Nh
bHNUb0luaXRHUFIgPSBhcmd1bWVudEdQUjA7CiAgICAgY29uc3RleHByIEdQUlJlZyBpdGVyYXRv
ckdQUiA9IGFyZ3VtZW50R1BSMTsKICAgICBjb25zdGV4cHIgR1BSUmVnIGVuZEdQUiA9IGFyZ3Vt
ZW50R1BSMjsKICAgICBjb25zdGV4cHIgR1BSUmVnIHVuZGVmaW5lZEdQUiA9IGFyZ3VtZW50R1BS
MzsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGNhbkJlT3B0aW1pemVkR1BSID0gYXJndW1lbnRHUFI0
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgY29kZUJsb2NrR1BSID0gYXJndW1lbnRHUFI0OworCisg
ICAgY29uc3RleHByIGludCB2aXJ0dWFsUmVnaXN0ZXJTaXplU2hpZnQgPSAzOworICAgIHN0YXRp
Y19hc3NlcnQoKDEgPDwgdmlydHVhbFJlZ2lzdGVyU2l6ZVNoaWZ0KSA9PSBzaXplb2YoUmVnaXN0
ZXIpKTsKKworICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2sp
LCBjb2RlQmxvY2tHUFIpOworICAgIGxvYWQzMihBZGRyZXNzKGNvZGVCbG9ja0dQUiwgQ29kZUJs
b2NrOjpvZmZzZXRPZk51bVZhcnMoKSksIGxvY2Fsc1RvSW5pdEdQUik7CisgICAgc3ViMzIoVHJ1
c3RlZEltbTMyKENvZGVCbG9jazo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVTcGFjZUFzVmlydHVh
bFJlZ2lzdGVycygpKSwgbG9jYWxzVG9Jbml0R1BSKTsKKyAgICBsc2hpZnQzMihUcnVzdGVkSW1t
MzIodmlydHVhbFJlZ2lzdGVyU2l6ZVNoaWZ0KSwgbG9jYWxzVG9Jbml0R1BSKTsKIAogICAgIHNp
emVfdCBzdGFydExvY2FsID0gQ29kZUJsb2NrOjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNwYWNl
QXNWaXJ0dWFsUmVnaXN0ZXJzKCk7CiAgICAgaW50IHN0YXJ0T2Zmc2V0ID0gdmlydHVhbFJlZ2lz
dGVyRm9yTG9jYWwoc3RhcnRMb2NhbCkub2Zmc2V0KCk7Ci0gICAgaml0Lm1vdmUoVHJ1c3RlZElt
bTY0KHN0YXJ0T2Zmc2V0ICogc2l6ZW9mKFJlZ2lzdGVyKSksIGl0ZXJhdG9yR1BSKTsKLSAgICBq
aXQuc3ViNjQoaXRlcmF0b3JHUFIsIGxvY2Fsc1RvSW5pdEdQUiwgZW5kR1BSKTsKKyAgICBtb3Zl
KFRydXN0ZWRJbW02NChzdGFydE9mZnNldCAqIHNpemVvZihSZWdpc3RlcikpLCBpdGVyYXRvckdQ
Uik7CisgICAgc3ViNjQoaXRlcmF0b3JHUFIsIGxvY2Fsc1RvSW5pdEdQUiwgZW5kR1BSKTsKIAot
ICAgIGppdC5tb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSkp
LCB1bmRlZmluZWRHUFIpOwotICAgIGF1dG8gaW5pdExvb3AgPSBqaXQubGFiZWwoKTsKLSAgICBK
dW1wIGluaXREb25lID0gaml0LmJyYW5jaDMyKExlc3NUaGFuT3JFcXVhbCwgaXRlcmF0b3JHUFIs
IGVuZEdQUik7CisgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpKSwgdW5kZWZpbmVkR1BSKTsKKyAgICBhdXRvIGluaXRMb29wID0gbGFiZWwoKTsKKyAg
ICBKdW1wIGluaXREb25lID0gYnJhbmNoMzIoTGVzc1RoYW5PckVxdWFsLCBpdGVyYXRvckdQUiwg
ZW5kR1BSKTsKICAgICB7Ci0gICAgICAgIGppdC5zdG9yZTY0KHVuZGVmaW5lZEdQUiwgQmFzZUlu
ZGV4KEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBpdGVyYXRvckdQUiwgVGltZXNPbmUpKTsK
LSAgICAgICAgaml0LnN1YjY0KFRydXN0ZWRJbW0zMihzaXplb2YoUmVnaXN0ZXIpKSwgaXRlcmF0
b3JHUFIpOwotICAgICAgICBqaXQuanVtcChpbml0TG9vcCk7CisgICAgICAgIHN0b3JlNjQodW5k
ZWZpbmVkR1BSLCBCYXNlSW5kZXgoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGl0ZXJhdG9y
R1BSLCBUaW1lc09uZSkpOworICAgICAgICBzdWI2NChUcnVzdGVkSW1tMzIoc2l6ZW9mKFJlZ2lz
dGVyKSksIGl0ZXJhdG9yR1BSKTsKKyAgICAgICAganVtcChpbml0TG9vcCk7CiAgICAgfQotICAg
IGluaXREb25lLmxpbmsoJmppdCk7CisgICAgaW5pdERvbmUubGluayh0aGlzKTsKIAotICAgIC8v
IGVtaXRXcml0ZUJhcnJpZXIobV9jb2RlQmxvY2spLgotICAgIGppdC5sb2FkUHRyKGFkZHJlc3NG
b3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgYXJndW1lbnRHUFIxKTsKLSAgICBKdW1wIG93
bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBqaXQuYmFycmllckJyYW5jaCh2bSwgYXJndW1lbnRH
UFIxLCBhcmd1bWVudEdQUjIpOworICAgIC8vIEltcGxlbWVudGluZyBlbWl0V3JpdGVCYXJyaWVy
KG1fY29kZUJsb2NrKS4KKyAgICBKdW1wIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBiYXJy
aWVyQnJhbmNoKHZtLCBjb2RlQmxvY2tHUFIsIGFyZ3VtZW50R1BSMik7CiAKLSAgICBqaXQubW92
ZShjYW5CZU9wdGltaXplZEdQUiwgR1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0ZXIpOyAvLyBzYXZl
LgotICAgIGppdC5zZXR1cEFyZ3VtZW50czxkZWNsdHlwZShvcGVyYXRpb25Xcml0ZUJhcnJpZXJT
bG93UGF0aCk+KCZ2bSwgYXJndW1lbnRHUFIxKTsKLSAgICBqaXQucHJlcGFyZUNhbGxPcGVyYXRp
b24odm0pOwotICAgIENhbGwgb3BlcmF0aW9uV3JpdGVCYXJyaWVyQ2FsbCA9IGppdC5jYWxsKE9w
ZXJhdGlvblB0clRhZyk7CisgICAgc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUob3BlcmF0aW9uV3Jp
dGVCYXJyaWVyU2xvd1BhdGgpPigmdm0sIGNvZGVCbG9ja0dQUik7CisgICAgcHJlcGFyZUNhbGxP
cGVyYXRpb24odm0pOworICAgIENhbGwgb3BlcmF0aW9uV3JpdGVCYXJyaWVyQ2FsbCA9IGNhbGwo
T3BlcmF0aW9uUHRyVGFnKTsKKworICAgIGlmIChjYW5CZU9wdGltaXplZCkKKyAgICAgICAgbG9h
ZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIGNvZGVCbG9ja0dQUik7
CiAKLSAgICBqaXQubW92ZShHUFJJbmZvOjpudW1iZXJUYWdSZWdpc3RlciwgY2FuQmVPcHRpbWl6
ZWRHUFIpOyAvLyByZXN0b3JlLgotICAgIGppdC5tb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpO
dW1iZXJUYWcpLCBHUFJJbmZvOjpudW1iZXJUYWdSZWdpc3Rlcik7Ci0gICAgb3duZXJJc1JlbWVt
YmVyZWRPckluRWRlbi5saW5rKCZqaXQpOworICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4u
bGluayh0aGlzKTsKIAogI2lmIEVOQUJMRShERkdfSklUKQorICAgIC8vIEltcGxlbWVudGluZyBl
bWl0RW50ZXJPcHRpbWl6YXRpb25DaGVjaygpLgogICAgIENhbGwgb3BlcmF0aW9uT3B0aW1pemVD
YWxsOwotICAgIGlmIChPcHRpb25zOjp1c2VERkdKSVQoKSkgewotICAgICAgICAvLyBlbWl0RW50
ZXJPcHRpbWl6YXRpb25DaGVjaygpLgorICAgIGlmIChjYW5CZU9wdGltaXplZCkgewogICAgICAg
ICBKdW1wTGlzdCBza2lwT3B0aW1pemU7CiAKLSAgICAgICAgc2tpcE9wdGltaXplLmFwcGVuZChq
aXQuYnJhbmNoVGVzdDMyKFplcm8sIGNhbkJlT3B0aW1pemVkR1BSKSk7CisgICAgICAgIHNraXBP
cHRpbWl6ZS5hcHBlbmQoYnJhbmNoQWRkMzIoU2lnbmVkLCBUcnVzdGVkSW1tMzIoT3B0aW9uczo6
ZXhlY3V0aW9uQ291bnRlckluY3JlbWVudEZvckVudHJ5KCkpLCBBZGRyZXNzKGNvZGVCbG9ja0dQ
UiwgQ29kZUJsb2NrOjpvZmZzZXRPZkpJVEV4ZWN1dGVDb3VudGVyKCkpKSk7CiAKLSAgICAgICAg
aml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCBhcmd1bWVu
dEdQUjEpOwotICAgICAgICBza2lwT3B0aW1pemUuYXBwZW5kKGppdC5icmFuY2hBZGQzMihTaWdu
ZWQsIFRydXN0ZWRJbW0zMihPcHRpb25zOjpleGVjdXRpb25Db3VudGVySW5jcmVtZW50Rm9yRW50
cnkoKSksIEFkZHJlc3MoYXJndW1lbnRHUFIxLCBDb2RlQmxvY2s6Om9mZnNldE9mSklURXhlY3V0
ZUNvdW50ZXIoKSkpKTsKKyAgICAgICAgY29weUxMSW50QmFzZWxpbmVDYWxsZWVTYXZlc0Zyb21G
cmFtZU9yUmVnaXN0ZXJUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bS50b3BFbnRyeUZy
YW1lKTsKIAotICAgICAgICBqaXQuY29weUxMSW50QmFzZWxpbmVDYWxsZWVTYXZlc0Zyb21GcmFt
ZU9yUmVnaXN0ZXJUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bS50b3BFbnRyeUZyYW1l
KTsKKyAgICAgICAgc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUob3BlcmF0aW9uT3B0aW1pemUpPigm
dm0sIFRydXN0ZWRJbW0zMigwKSk7CisgICAgICAgIHByZXBhcmVDYWxsT3BlcmF0aW9uKHZtKTsK
KyAgICAgICAgb3BlcmF0aW9uT3B0aW1pemVDYWxsID0gY2FsbChPcGVyYXRpb25QdHJUYWcpOwog
Ci0gICAgICAgIGppdC5zZXR1cEFyZ3VtZW50czxkZWNsdHlwZShvcGVyYXRpb25PcHRpbWl6ZSk+
KCZ2bSwgVHJ1c3RlZEltbTMyKDApKTsKLSAgICAgICAgaml0LnByZXBhcmVDYWxsT3BlcmF0aW9u
KHZtKTsKLSAgICAgICAgb3BlcmF0aW9uT3B0aW1pemVDYWxsID0gaml0LmNhbGwoT3BlcmF0aW9u
UHRyVGFnKTsKLQotICAgICAgICBza2lwT3B0aW1pemUuYXBwZW5kKGppdC5icmFuY2hUZXN0UHRy
KFplcm8sIHJldHVyblZhbHVlR1BSKSk7Ci0gICAgICAgIGppdC5mYXJKdW1wKHJldHVyblZhbHVl
R1BSLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CisgICAgICAgIHNraXBPcHRpbWl6ZS5h
cHBlbmQoYnJhbmNoVGVzdFB0cihaZXJvLCByZXR1cm5WYWx1ZUdQUikpOworICAgICAgICBmYXJK
dW1wKHJldHVyblZhbHVlR1BSLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CiAKLSAgICAg
ICAgc2tpcE9wdGltaXplLmxpbmsoJmppdCk7CisgICAgICAgIHNraXBPcHRpbWl6ZS5saW5rKHRo
aXMpOwogICAgIH0KICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKIAogI2lmIENQVShYODZfNjQp
Ci0gICAgaml0LnBvcChYODZSZWdpc3RlcnM6OmVicCk7CisgICAgcG9wKFg4NlJlZ2lzdGVyczo6
ZWJwKTsKICNlbGlmIENQVShBUk02NCkKLSAgICBqaXQucG9wUGFpcihmcmFtZVBvaW50ZXJSZWdp
c3RlciwgbGlua1JlZ2lzdGVyKTsKKyAgICBwb3BQYWlyKGZyYW1lUG9pbnRlclJlZ2lzdGVyLCBs
aW5rUmVnaXN0ZXIpOwogI2VuZGlmCi0gICAgaml0LnJldCgpOworICAgIHJldCgpOwogCi0gICAg
TGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6
UHJvZmlsZTo6RXh0cmFDVElUaHVuayk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdGhp
cywgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpFeHRyYUNUSVRodW5rKTsK
ICAgICBwYXRjaEJ1ZmZlci5saW5rKG9wZXJhdGlvbldyaXRlQmFycmllckNhbGwsIEZ1bmN0aW9u
UHRyPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uV3JpdGVCYXJyaWVyU2xvd1BhdGgpKTsKICNp
ZiBFTkFCTEUoREZHX0pJVCkKLSAgICBpZiAoT3B0aW9uczo6dXNlREZHSklUKCkpCisgICAgaWYg
KGNhbkJlT3B0aW1pemVkKQogICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKG9wZXJhdGlvbk9wdGlt
aXplQ2FsbCwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25PcHRpbWl6ZSkp
OwogI2VuZGlmCi0gICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5r
UHRyVGFnLCAiQmFzZWxpbmU6IG9wX2VudGVyX2hhbmRsZXIiKTsKKyAgICByZXR1cm4gRklOQUxJ
WkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsIHRodW5rTmFtZSk7Cit9CisKK01h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpvcF9lbnRlcl9jYW5CZU9w
dGltaXplZF9HZW5lcmF0b3IoVk0mIHZtKQoreworICAgIEpJVCBqaXQodm0pOworICAgIGNvbnN0
ZXhwciBib29sIGNhbkJlT3B0aW1pemVkID0gdHJ1ZTsKKyAgICByZXR1cm4gaml0Lm9wX2VudGVy
X0dlbmVyYXRvcih2bSwgY2FuQmVPcHRpbWl6ZWQsICJCYXNlbGluZTogb3BfZW50ZXJfY2FuQmVP
cHRpbWl6ZWQiKTsKK30KKworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBK
SVQ6Om9wX2VudGVyX2Nhbm5vdEJlT3B0aW1pemVkX0dlbmVyYXRvcihWTSYgdm0pCit7CisgICAg
SklUIGppdCh2bSk7CisgICAgY29uc3RleHByIGJvb2wgY2FuQmVPcHRpbWl6ZWQgPSBmYWxzZTsK
KyAgICByZXR1cm4gaml0Lm9wX2VudGVyX0dlbmVyYXRvcih2bSwgY2FuQmVPcHRpbWl6ZWQsICJC
YXNlbGluZTogb3BfZW50ZXJfY2Fubm90QmVPcHRpbWl6ZWQiKTsKIH0KICNlbmRpZiAvLyBFTkFC
TEUoRVhUUkFfQ1RJX1RIVU5LUykKIApAQCAtMTQzNCwyMiArMTQ0NiwyNyBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1CiAgICAgICAgIGFkZDY0KFRydXN0ZWRJbW0z
MigxKSwgcmVnVDApOwogICAgICAgICBzdG9yZTY0KHJlZ1QwLCBwdHIpOwogICAgIH0KKyNlbHNl
CisgICAgVU5VU0VEX1BBUkFNKGluc3RydWN0aW9uKTsKICNlbmRpZgogCi0gICAgLy8gRW1pdCB0
aGUgSklUIG9wdGltaXphdGlvbiBjaGVjazogCisgICAgLy8gRW1pdCB0aGUgSklUIG9wdGltaXph
dGlvbiBjaGVjazoKICAgICBpZiAoY2FuQmVPcHRpbWl6ZWQoKSkgeworICAgICAgICBjb25zdGV4
cHIgR1BSUmVnIGNvZGVCbG9ja0dQUiA9IHJlZ1QwOworICAgICAgICBsb2FkUHRyKGFkZHJlc3NG
b3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgY29kZUJsb2NrR1BSKTsKICAgICAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoQWRkMzIoUG9zaXRpdmVPclplcm8sIFRydXN0ZWRJbW0zMihPcHRpb25z
OjpleGVjdXRpb25Db3VudGVySW5jcmVtZW50Rm9yTG9vcCgpKSwKLSAgICAgICAgICAgIEFic29s
dXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+YWRkcmVzc09mSklURXhlY3V0ZUNvdW50ZXIoKSkpKTsK
KyAgICAgICAgICAgIEFkZHJlc3MoY29kZUJsb2NrR1BSLCBDb2RlQmxvY2s6Om9mZnNldE9mSklU
RXhlY3V0ZUNvdW50ZXIoKSkpKTsKICAgICB9CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9s
b29wX2hpbnQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9sb29w
X2hpbnQoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQogewogI2lmIEVOQUJMRShERkdfSklUKQogICAgIC8vIEVtaXQg
dGhlIHNsb3cgcGF0aCBmb3IgdGhlIEpJVCBvcHRpbWl6YXRpb24gY2hlY2s6CiAgICAgaWYgKGNh
bkJlT3B0aW1pemVkKCkpIHsKICAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAorI2lm
ICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICAgICAgY29weUxMSW50QmFzZWxpbmVDYWxs
ZWVTYXZlc0Zyb21GcmFtZU9yUmVnaXN0ZXJUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2
bSgpLnRvcEVudHJ5RnJhbWUpOwogCiAgICAgICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNo
ZWNrKG9wZXJhdGlvbk9wdGltaXplLCAmdm0oKSwgbV9ieXRlY29kZUluZGV4LmFzQml0cygpKTsK
QEAgLTE0NjIsMTMgKzE0NzksODEgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2xvb3BfaGludChj
b25zdCBJbgogICAgICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBHUFJJbmZvOjpjYWxsRnJh
bWVSZWdpc3Rlcik7CiAgICAgICAgIG5vT3B0aW1pemVkRW50cnkubGluayh0aGlzKTsKIAotICAg
ICAgICBlbWl0SnVtcFNsb3dUb0hvdChqdW1wKCksIGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgp
KTsKKyNlbHNlIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQorICAgICAgICB1aW50MzJfdCBi
eXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKTsKKyAgICAgICAgQVNTRVJU
KEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpID09IG1fYnl0ZWNvZGVJbmRleCk7CisgICAg
ICAgIEFTU0VSVChtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgpID09
IGluc3RydWN0aW9uKTsKKworICAgICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0
R1BSID0gcmVnVDc7CisKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQp
LCBieXRlY29kZU9mZnNldEdQUik7CisgICAgICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtKCkuZ2V0
Q1RJU3R1YihvcF9sb29wX2hpbnRfR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkp
OworI2VuZGlmIC8vICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICB9Ci0jZWxzZQotICAg
IFVOVVNFRF9QQVJBTShjdXJyZW50SW5zdHJ1Y3Rpb24pOworI2VuZGlmIC8vIEVOQUJMRShERkdf
SklUKQogICAgIFVOVVNFRF9QQVJBTShpdGVyKTsKKyAgICBVTlVTRURfUEFSQU0oaW5zdHJ1Y3Rp
b24pOworfQorCisjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCisKKyNpZiBFTkFCTEUoREZH
X0pJVCkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpvcF9sb29w
X2hpbnRfR2VuZXJhdG9yKFZNJiB2bSkKK3sKKyAgICAvLyBUaGUgdGh1bmsgZ2VuZXJhdGVkIGJ5
IHRoaXMgZnVuY3Rpb24gY2FuIG9ubHkgd29yayB3aXRoIHRoZSBMTEludCAvIEJhc2VsaW5lIEpJ
VCBiZWNhdXNlCisgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGds
b2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgor
ICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGds
b2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKKyAgICAvLyBDYWxsRnJhbWU6OmNvZGVC
bG9jaygpLgorICAgIEpJVCBqaXQodm0pOworCisgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsK
KworICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNzsgLy8gaW5j
b21pbmcuCisKKyNpZiBDUFUoWDg2XzY0KQorICAgIGppdC5wdXNoKGZyYW1lUG9pbnRlclJlZ2lz
dGVyKTsKKyNlbGlmIENQVShBUk02NCkKKyAgICBqaXQucHVzaFBhaXIoZnJhbWVQb2ludGVyUmVn
aXN0ZXIsIGxpbmtSZWdpc3Rlcik7CisjZW5kaWYKKworICAgIGF1dG8gdXNlZFJlZ2lzdGVycyA9
IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKTsKKyAgICB1c2VkUmVnaXN0
ZXJzLmFkZChieXRlY29kZU9mZnNldEdQUik7CisgICAgaml0LmNvcHlMTEludEJhc2VsaW5lQ2Fs
bGVlU2F2ZXNGcm9tRnJhbWVPclJlZ2lzdGVyVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIo
dm0udG9wRW50cnlGcmFtZSwgdXNlZFJlZ2lzdGVycyk7CisKKyAgICBqaXQuc3RvcmUzMihieXRl
Y29kZU9mZnNldEdQUiwgQ0NhbGxIZWxwZXJzOjp0YWdGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMpKTsKKyAgICBqaXQubHNoaWZ0MzIoVHJ1c3RlZEltbTMyKEJ5
dGVjb2RlSW5kZXg6OmNoZWNrcG9pbnRTaGlmdCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKKyAgICBq
aXQuc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUob3BlcmF0aW9uT3B0aW1pemUpPihUcnVzdGVkSW1t
UHRyKCZ2bSksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKKyAgICBqaXQucHJlcGFyZUNhbGxPcGVyYXRp
b24odm0pOworICAgIENhbGwgb3BlcmF0aW9uQ2FsbCA9IGppdC5jYWxsKE9wZXJhdGlvblB0clRh
Zyk7CisgICAgSnVtcCBoYXNPcHRpbWl6ZWRFbnRyeSA9IGppdC5icmFuY2hUZXN0UHRyKE5vblpl
cm8sIHJldHVyblZhbHVlR1BSKTsKKworI2lmIENQVShYODZfNjQpCisgICAgaml0LnBvcChmcmFt
ZVBvaW50ZXJSZWdpc3Rlcik7CisjZWxpZiBDUFUoQVJNNjQpCisgICAgaml0LnBvcFBhaXIoZnJh
bWVQb2ludGVyUmVnaXN0ZXIsIGxpbmtSZWdpc3Rlcik7CisjZW5kaWYKKyAgICBqaXQucmV0KCk7
CisKKyAgICBoYXNPcHRpbWl6ZWRFbnRyeS5saW5rKCZqaXQpOworI2lmIENQVShYODZfNjQpCisg
ICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigyICogc2l6ZW9mKENQVVJl
Z2lzdGVyKSksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyNlbGlmIENQVShBUk02NCkKKyAgICBq
aXQucG9wUGFpcihmcmFtZVBvaW50ZXJSZWdpc3RlciwgbGlua1JlZ2lzdGVyKTsKICNlbmRpZgor
ICAgIGlmIChBU1NFUlRfRU5BQkxFRCkgeworICAgICAgICBKdW1wIG9rID0gaml0LmJyYW5jaFB0
cihNYWNyb0Fzc2VtYmxlcjo6QWJvdmUsIHJldHVyblZhbHVlR1BSLCBUcnVzdGVkSW1tUHRyKGJp
dHdpc2VfY2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KDEwMDApKSkpOworICAgICAg
ICBqaXQuYWJvcnRXaXRoUmVhc29uKEpJVFVucmVhc29uYWJsZUxvb3BIaW50SnVtcFRhcmdldCk7
CisgICAgICAgIG9rLmxpbmsoJmppdCk7CisgICAgfQorCisgICAgaml0LmZhckp1bXAocmV0dXJu
VmFsdWVHUFIsIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKKworICAgIExpbmtCdWZmZXIg
cGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OkV4
dHJhQ1RJVGh1bmspOworICAgIHBhdGNoQnVmZmVyLmxpbmsob3BlcmF0aW9uQ2FsbCwgRnVuY3Rp
b25QdHI8T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25PcHRpbWl6ZSkpOworICAgIHJldHVybiBG
SU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgIkJhc2VsaW5lOiBvcF9s
b29wX2hpbnQiKTsKIH0KKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKyNlbmRpZiAvLyAhRU5B
QkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKIHZvaWQgSklUOjplbWl0X29wX2NoZWNrX3RyYXBzKGNv
bnN0IEluc3RydWN0aW9uKikKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1
bmtHZW5lcmF0b3JzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1RodW5rR2VuZXJhdG9ycy5jcHAJKHJldmlzaW9uIDI3ODUxMSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODEsMTEg
KzgxLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBwbwogewogICAg
IENDYWxsSGVscGVycyBqaXQ7CiAKLSNpZiBDUFUoWDg2XzY0KQotICAgIGppdC5hZGRQdHIoQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMiAqIHNpemVvZihDUFVSZWdpc3RlcikpLCBYODZSZWdp
c3RlcnM6OmVzcCk7Ci0jZWxpZiBDUFUoQVJNNjQpCi0gICAgaml0LnBvcFBhaXIoQ0NhbGxIZWxw
ZXJzOjpmcmFtZVBvaW50ZXJSZWdpc3RlciwgQ0NhbGxIZWxwZXJzOjpsaW5rUmVnaXN0ZXIpOwot
I2VuZGlmCisgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigyICogc2l6
ZW9mKENQVVJlZ2lzdGVyKSksIENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwog
CiAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGNvbnRpbnVhdGlvbiA9IGppdC5qdW1wKCk7CiAK
</data>
<flag name="commit-queue"
          id="452144"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>430691</attachid>
            <date>2021-06-06 11:41:43 -0700</date>
            <delta_ts>2021-06-06 11:45:49 -0700</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-226375.patch</filename>
            <type>text/plain</type>
            <size>54069</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjc4NTM3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc4IEBA
CisyMDIxLTA2LTA0ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBQ
dXQgdGhlIEJhc2VsaW5lIEpJVCBwcm9sb2d1ZSBhbmQgb3BfbG9vcF9oaW50IGNvZGUgaW4gSklU
IHRodW5rcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIyNjM3NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFRoZSBwcm9sb2d1ZSB1c2VzIDEgb2YgOCBwb3NzaWJsZSBzcGVjaWFsaXplZCB0aHVua3MgdG8g
cmVkdWNlIHRoZSBuZWVkIHRvIHBhc3MKKyAgICAgICAgYXJndW1lbnRzLiAgVGhlIG9ubHkgbmVl
ZGVkIGFyZ3VtZW50IGlzIHRoZSBjb2RlQmxvY2sgcG9pbnRlci4KKyAgICAgICAgVGhlcmUgYXJl
IGFsc28gOCBhbmFsb2dvdXMgYXJpdHkgZml4dXAgcHJvbG9ndWVzIHRoYXQgd29yayBzaW1pbGFy
bHkuCisKKyAgICAgICAgVGhlIG9wX2xvb3BfaGludCB0aHVuayBvbmx5IHRha2VzIDEgYXJndW1l
bnQ6IHRoZSBieXRlY29kZSBvZmZzZXQuCisgICAgICAgIEkgaGFkIHRyaWVkIGRvaW5nIHRoZSBs
b29wX2hpbnQgb3B0aW1pemF0aW9uIGNoZWNrIGluIHRoZSB0aHVuaywgYnV0IHRoaXMgc2VlbXMK
KyAgICAgICAgdG8gaGF2ZSBzb21lIHNsaWdodCBuZWdhdGl2ZSBpbXBhY3Qgb24gYmVuY2htYXJr
IHBlcmZvcm1hbmNlLiAgSSBlbmRlZCB1cCBqdXN0CisgICAgICAgIGdvaW5nIHdpdGggbW92aW5n
IHRoZSBzbG93IHBhdGggaW50byBhIHRodW5rLgorCisgICAgICAgIEFsc28gb3B0aW1pemVkIG9w
X2VudGVyIGEgYml0IG1vcmUgYnkgZWxpbWluYXRpbmcgdGhlIG5lZWQgdG8gcGFzcyBhbnkKKyAg
ICAgICAgYXJndW1lbnRzIHRvIHRoZSB0aHVuay4gIGxvY2Fsc1RvSW5pdEdQUiBpcyBub3cgY29t
cHV0ZWQgaW4gdGhlIHRodW5rLgorICAgICAgICBjYW5CZU9wdGltaXplZCBpcyBvYnZpYXRlZCBi
eSB1c2luZyBzcGVjaWFsaXplZCB0aHVua3MuCisKKyAgICAgICAgTGlua0J1ZmZlciBzaXplIHJl
c3VsdHM6CisKKyAgICAgICAgICAgQmFzZWxpbmVKSVQ6IDkzMzE5NjI4ICg4OC45OTY1MzIgTUIp
ICAgPT4gODM4NTE4MjQgKDc5Ljk2NzMzMSBNQikgICAwLjkweAorICAgICAgICAgRXh0cmFDVElU
aHVuazogNTk5MiAoNS44NTE1NjIgS0IpICAgICAgICA9PiA2OTg0ICg2LjgyMDMxMiBLQikgICAg
ICAgIDEuMTd4CisgICAgICAgICAgICAgICAgICAgICAgICAuLi4KKyAgICAgICAgICAgICAgICAg
VG90YWw6IDE5NzUzMDAwOCAoMTg4LjM3OTI5NSBNQikgPT4gMTg4NDU5NDQ0ICgxNzkuNzI4OTMx
IE1CKSAwLjk1eAorCisgICAgICAgIFNwZWVkb21ldGVyMiBhbmQgSmV0U3RyZWFtMiByZXN1bHRz
IChhcyBtZWFzdXJlZCBvbiBhbiBNMSBNYWMpIGFyZSBuZXV0cmFsLgorCisgICAgICAgICogYXNz
ZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaDoKKyAgICAgICAgKEpTQzo6QWJzdHJhY3RN
YWNyb0Fzc2VtYmxlcjo6dW50YWdSZXR1cm5BZGRyZXNzV2l0aG91dEV4dHJhVmFsaWRhdGlvbik6
CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaDoKKyAgICAgICAgKEpT
Qzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6bmVnYXRlNjQpOgorICAgICAgICAqIGFzc2VtYmxlci9N
YWNyb0Fzc2VtYmxlckFSTTY0RS5oOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0
RTo6dW50YWdSZXR1cm5BZGRyZXNzKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02
NEU6OnVudGFnUmV0dXJuQWRkcmVzc1dpdGhvdXRFeHRyYVZhbGlkYXRpb24pOgorICAgICAgICAq
IGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTXY3Lmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNz
ZW1ibGVyQVJNdjc6OmJyYW5jaEFkZDMyKToKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3Nl
bWJsZXJNSVBTLmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyTUlQUzo6YnJhbmNoQWRk
MzJXaXRoUG9zdEFjdGlvbik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyTUlQUzo6YnJh
bmNoQWRkMzIpOgorICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oOgor
ICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4Nl82NDo6bmVnYXRlNjQpOgorICAgICAgICAq
IGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om9mZnNldE9m
TnVtQ2FsbGVlTG9jYWxzKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpvZmZzZXRPZk51bVZh
cnMpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om9mZnNldE9mQXJndW1lbnRWYWx1ZVByb2Zp
bGVzKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpvZmZzZXRPZlNob3VsZEFsd2F5c0JlSW5s
aW5lZCk6CisgICAgICAgICogaml0L0Fzc2VtYmx5SGVscGVycy5oOgorICAgICAgICAoSlNDOjpB
c3NlbWJseUhlbHBlcnM6OmVtaXRTYXZlQ2FsbGVlU2F2ZXNGb3IpOgorICAgICAgICAoSlNDOjpB
c3NlbWJseUhlbHBlcnM6OmVtaXRTYXZlQ2FsbGVlU2F2ZXNGb3JCYXNlbGluZUpJVCk6CisgICAg
ICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6ZW1pdFJlc3RvcmVDYWxsZWVTYXZlc0ZvckJhc2Vs
aW5lSklUKToKKyAgICAgICAgKiBqaXQvSklULmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpjb21w
aWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW5nKToKKyAgICAgICAgKEpTQzo6SklUOjpwcm9sb2d1
ZUdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6YXJpdHlGaXh1cFByb2xvZ3VlR2VuZXJh
dG9yKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUV4Y2VwdGlvbkhhbmRsZXJz
KToKKyAgICAgICAgKiBqaXQvSklULmg6CisgICAgICAgICogaml0L0pJVElubGluZXMuaDoKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0TmFrZWROZWFyQ2FsbCk6CisgICAgICAgICogaml0L0pJVE9w
Y29kZXMuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6Om9wX3JldF9oYW5kbGVyR2VuZXJhdG9yKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2VudGVyKToKKyAgICAgICAgKEpTQzo6SklUOjpv
cF9lbnRlcl9HZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVQ6Om9wX2VudGVyX2NhbkJlT3B0
aW1pemVkX0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6b3BfZW50ZXJfY2Fubm90QmVP
cHRpbWl6ZWRfR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2xvb3BfaGlu
dCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfbG9vcF9oaW50KToKKyAgICAgICAg
KEpTQzo6SklUOjpvcF9sb29wX2hpbnRfR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUOjpv
cF9lbnRlcl9oYW5kbGVyR2VuZXJhdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvSklUT3Bj
b2RlczMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2VudGVyKToKKyAgICAg
ICAgKiBqaXQvVGh1bmtHZW5lcmF0b3JzLmNwcDoKKyAgICAgICAgKEpTQzo6cG9wVGh1bmtTdGFj
a1ByZXNlcnZlc0FuZEhhbmRsZUV4Y2VwdGlvbkdlbmVyYXRvcik6CisKIDIwMjEtMDYtMDQgIENo
cmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBGaWxlU3lzdGVtOjpyZWFk
RnJvbUZpbGUoKSBzaG91bGQgcmV0dXJuIGRhdGEgYXMgYHZvaWQqYApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1i
bGVyLmgJKHJldmlzaW9uIDI3ODUzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDAzLDYgKzEw
MDMsNyBAQCBwdWJsaWM6CiAKICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgdGFnUmV0dXJuQWRkcmVz
cygpIHsgfQogICAgIEFMV0FZU19JTkxJTkUgdm9pZCB1bnRhZ1JldHVybkFkZHJlc3MoUmVnaXN0
ZXJJRCA9IFJlZ2lzdGVySUQ6OkludmFsaWRHUFJSZWcpIHsgfQorICAgIEFMV0FZU19JTkxJTkUg
dm9pZCB1bnRhZ1JldHVybkFkZHJlc3NXaXRob3V0RXh0cmFWYWxpZGF0aW9uKCkgeyB9CiAKICAg
ICBBTFdBWVNfSU5MSU5FIHZvaWQgdGFnUHRyKFB0clRhZywgUmVnaXN0ZXJJRCkgeyB9CiAgICAg
QUxXQVlTX0lOTElORSB2b2lkIHRhZ1B0cihSZWdpc3RlcklELCBSZWdpc3RlcklEKSB7IH0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3Nl
bWJsZXJBUk02NC5oCShyZXZpc2lvbiAyNzg1MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaAkod29ya2luZyBjb3B5KQpAQCAtMjIzNSw2
ICsyMjM1LDEyIEBAIHB1YmxpYzoKICAgICAgICAgb3JEb3VibGUob3AxLCBvcDIsIGRlc3QpOwog
ICAgIH0KIAorICAgIHZvaWQgbmVnYXRlNjQoUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAg
ICAgbm90NjQoZGVzdCk7CisgICAgICAgIGFkZDY0KFRydXN0ZWRJbW0zMigxKSwgZGVzdCk7Cisg
ICAgfQorCiAgICAgdm9pZCBuZWdhdGVEb3VibGUoRlBSZWdpc3RlcklEIHNyYywgRlBSZWdpc3Rl
cklEIGRlc3QpCiAgICAgewogICAgICAgICBtX2Fzc2VtYmxlci5mbmVnPDY0PihkZXN0LCBzcmMp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFS
TTY0RS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFj
cm9Bc3NlbWJsZXJBUk02NEUuaAkocmV2aXNpb24gMjc4NTM3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTTY0RS5oCSh3b3JraW5nIGNvcHkpCkBA
IC01NCwxMCArNTQsMTUgQEAgcHVibGljOgogCiAgICAgQUxXQVlTX0lOTElORSB2b2lkIHVudGFn
UmV0dXJuQWRkcmVzcyhSZWdpc3RlcklEIHNjcmF0Y2ggPSBJbnZhbGlkR1BSKQogICAgIHsKLSAg
ICAgICAgdW50YWdQdHIoQVJNNjRSZWdpc3RlcnM6OnNwLCBBUk02NFJlZ2lzdGVyczo6bHIpOwor
ICAgICAgICB1bnRhZ1JldHVybkFkZHJlc3NXaXRob3V0RXh0cmFWYWxpZGF0aW9uKCk7CiAgICAg
ICAgIHZhbGlkYXRlVW50YWdnZWRQdHIoQVJNNjRSZWdpc3RlcnM6OmxyLCBzY3JhdGNoKTsKICAg
ICB9CiAKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgdW50YWdSZXR1cm5BZGRyZXNzV2l0aG91dEV4
dHJhVmFsaWRhdGlvbigpCisgICAgeworICAgICAgICB1bnRhZ1B0cihBUk02NFJlZ2lzdGVyczo6
c3AsIEFSTTY0UmVnaXN0ZXJzOjpscik7CisgICAgfQorCiAgICAgQUxXQVlTX0lOTElORSB2b2lk
IHRhZ1B0cihQdHJUYWcgdGFnLCBSZWdpc3RlcklEIHRhcmdldCkKICAgICB7CiAgICAgICAgIGF1
dG8gdGFnR1BSID0gZ2V0Q2FjaGVkRGF0YVRlbXBSZWdpc3RlcklEQW5kSW52YWxpZGF0ZSgpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTXY3
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fz
c2VtYmxlckFSTXY3LmgJKHJldmlzaW9uIDI3ODUzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk12Ny5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzk1
LDYgKzE3OTUsMjYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYnJhbmNoQWRkMzIoY29uZCwg
ZGVzdCwgaW1tLCBkZXN0KTsKICAgICB9CiAKKyAgICBKdW1wIGJyYW5jaEFkZDMyKFJlc3VsdENv
bmRpdGlvbiBjb25kLCBUcnVzdGVkSW1tMzIgaW1tLCBBZGRyZXNzIGRlc3QpCisgICAgeworICAg
ICAgICBsb2FkMzIoZGVzdCwgZGF0YVRlbXBSZWdpc3Rlcik7CisKKyAgICAgICAgLy8gRG8gdGhl
IGFkZC4KKyAgICAgICAgQVJNVGh1bWJJbW1lZGlhdGUgYXJtSW1tID0gQVJNVGh1bWJJbW1lZGlh
dGU6Om1ha2VFbmNvZGVkSW1tKGltbS5tX3ZhbHVlKTsKKyAgICAgICAgaWYgKGFybUltbS5pc1Zh
bGlkKCkpCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGRfUyhkYXRhVGVtcFJlZ2lzdGVyLCBk
YXRhVGVtcFJlZ2lzdGVyLCBhcm1JbW0pOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIC8v
IElmIHRoZSBvcGVyYW5kIGRvZXMgbm90IGZpdCBpbnRvIGFuIGltbWVkaWF0ZSB0aGVuIGxvYWQg
aXQgdGVtcG9yYXJpbHkKKyAgICAgICAgICAgIC8vIGludG8gYWRkcmVzc1RlbXBSZWdpc3Rlcjsg
c2luY2Ugd2UncmUgb3ZlcndyaXRpbmcgYWRkcmVzc1RlbXBSZWdpc3RlcgorICAgICAgICAgICAg
Ly8gd2UnbGwgbmVlZCB0byByZWxvYWQgaXQgd2l0aCB0aGUgaGlnaCBiaXRzIG9mIHRoZSBhZGRy
ZXNzIGFmdGVyd2FyZHMuCisgICAgICAgICAgICBtb3ZlKGltbSwgYWRkcmVzc1RlbXBSZWdpc3Rl
cik7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGRfUyhkYXRhVGVtcFJlZ2lzdGVyLCBkYXRh
VGVtcFJlZ2lzdGVyLCBhZGRyZXNzVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgfQorCisgICAgICAg
IHN0b3JlMzIoZGF0YVRlbXBSZWdpc3RlciwgZGVzdCk7CisgICAgICAgIHJldHVybiBKdW1wKG1h
a2VCcmFuY2goY29uZCkpOworICAgIH0KKwogICAgIEp1bXAgYnJhbmNoQWRkMzIoUmVzdWx0Q29u
ZGl0aW9uIGNvbmQsIFRydXN0ZWRJbW0zMiBpbW0sIEFic29sdXRlQWRkcmVzcyBkZXN0KQogICAg
IHsKICAgICAgICAgLy8gTW92ZSB0aGUgaGlnaCBiaXRzIG9mIHRoZSBhZGRyZXNzIGludG8gYWRk
cmVzc1RlbXBSZWdpc3RlciwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
TWFjcm9Bc3NlbWJsZXJNSVBTLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlck1JUFMuaAkocmV2aXNpb24gMjc4NTM3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlck1JUFMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjMxMCw2ICsyMzEwLDExMSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBK
dW1wKCk7CiAgICAgfQogCisgICAgSnVtcCBicmFuY2hBZGQzMihSZXN1bHRDb25kaXRpb24gY29u
ZCwgVHJ1c3RlZEltbTMyIGltbSwgSW1wbGljaXRBZGRyZXNzIGRlc3RBZGRyZXNzKQorICAgIHsK
KyAgICAgICAgYm9vbCB1c2VBZGRyVGVtcFJlZ2lzdGVyID0gIShhZGRyZXNzLm9mZnNldCA+PSAt
MzI3NjggJiYgYWRkcmVzcy5vZmZzZXQgPD0gMzI3NjcKKyAgICAgICAgICAgICYmICFtX2ZpeGVk
V2lkdGgpOworCisgICAgICAgIGlmICh1c2VBZGRyVGVtcFJlZ2lzdGVyKSB7CisgICAgICAgICAg
ICBtX2Fzc2VtYmxlci5sdWkoYWRkclRlbXBSZWdpc3RlciwgKGRlc3RBZGRyZXNzLm9mZnNldCAr
IDB4ODAwMCkgPj4gMTYpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRkdShhZGRyVGVtcFJl
Z2lzdGVyLCBhZGRyVGVtcFJlZ2lzdGVyLCBkZXN0QWRkcmVzcy5iYXNlKTsKKyAgICAgICAgfQor
CisgICAgICAgIGF1dG8gbG9hZERlc3QgPSBbJl0gKFJlZ2lzdGVySUQgZGVzdCkgeworICAgICAg
ICAgICAgaWYgKHVzZUFkZHJUZW1wUmVnaXN0ZXIpCisgICAgICAgICAgICAgICAgbV9hc3NlbWJs
ZXIubHcoZGVzdCwgYWRkclRlbXBSZWdpc3RlciwgZGVzdEFkZHJlc3Mub2Zmc2V0KTsKKyAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX2Fzc2VtYmxlci5sdyhkZXN0LCBkZXN0QWRk
cmVzcy5iYXNlLCBkZXN0QWRkcmVzcy5vZmZzZXQpOworICAgICAgICB9OworCisgICAgICAgIGF1
dG8gc3RvcmVEZXN0ID0gWyZdIChSZWdpc3RlcklEIHNyYykgeworICAgICAgICAgICAgaWYgKHVz
ZUFkZHJUZW1wUmVnaXN0ZXIpCisgICAgICAgICAgICAgICAgbV9hc3NlbWJsZXIuc3coc3JjLCBh
ZGRyVGVtcFJlZ2lzdGVyLCBkZXN0QWRkcmVzcy5vZmZzZXQpOworICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgIG1fYXNzZW1ibGVyLnN3KHNyYywgZGVzdEFkZHJlc3MuYmFzZSwgZGVz
dEFkZHJlc3Mub2Zmc2V0KTsKKyAgICAgICAgfTsKKworICAgICAgICBBU1NFUlQoKGNvbmQgPT0g
T3ZlcmZsb3cpIHx8IChjb25kID09IFNpZ25lZCkgfHwgKGNvbmQgPT0gUG9zaXRpdmVPclplcm8p
IHx8IChjb25kID09IFplcm8pIHx8IChjb25kID09IE5vblplcm8pKTsKKyAgICAgICAgaWYgKGNv
bmQgPT0gT3ZlcmZsb3cpIHsKKyAgICAgICAgICAgIGlmIChtX2ZpeGVkV2lkdGgpIHsKKyAgICAg
ICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAgICBsb2FkICAgIGRlc3QsIGRhdGFUZW1w
CisgICAgICAgICAgICAgICAgICAgIG1vdmUgICAgaW1tLCBpbW1UZW1wCisgICAgICAgICAgICAg
ICAgICAgIHhvciAgICAgY21wVGVtcCwgZGF0YVRlbXAsIGltbVRlbXAKKyAgICAgICAgICAgICAg
ICAgICAgYWRkdSAgICBkYXRhVGVtcCwgZGF0YVRlbXAsIGltbVRlbXAKKyAgICAgICAgICAgICAg
ICAgICAgc3RvcmUgICBkYXRhVGVtcCwgZGVzdAorICAgICAgICAgICAgICAgICAgICBibHR6ICAg
IGNtcFRlbXAsIE5vX292ZXJmbG93ICAgICMgZGlmZiBzaWduIGJpdCAtPiBubyBvdmVyZmxvdwor
ICAgICAgICAgICAgICAgICAgICB4b3IgICAgIGNtcFRlbXAsIGRhdGFUZW1wLCBpbW1UZW1wCisg
ICAgICAgICAgICAgICAgICAgIGJnZXogICAgY21wVGVtcCwgTm9fb3ZlcmZsb3cgICAgIyBzYW1l
IHNpZ24gYmlnIC0+IG5vIG92ZXJmbG93CisgICAgICAgICAgICAgICAgICAgIG5vcAorICAgICAg
ICAgICAgICAgICAgICBiICAgICAgIE92ZXJmbG93CisgICAgICAgICAgICAgICAgICAgIG5vcAor
ICAgICAgICAgICAgICAgICAgICBiICAgICAgIE5vX292ZXJmbG93CisgICAgICAgICAgICAgICAg
ICAgIG5vcAorICAgICAgICAgICAgICAgICAgICBub3AKKyAgICAgICAgICAgICAgICAgICAgbm9w
CisgICAgICAgICAgICAgICAgTm9fb3ZlcmZsb3c6CisgICAgICAgICAgICAgICAgKi8KKyAgICAg
ICAgICAgICAgICBsb2FkRGVzdChkYXRhVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgICAgICAgICBt
b3ZlKGltbSwgaW1tVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgICAgICAgICBtX2Fzc2VtYmxlci54
b3JJbnNuKGNtcFRlbXBSZWdpc3RlciwgZGF0YVRlbXBSZWdpc3RlciwgaW1tVGVtcFJlZ2lzdGVy
KTsKKyAgICAgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGR1KGRhdGFUZW1wUmVnaXN0ZXIsIGRh
dGFUZW1wUmVnaXN0ZXIsIGltbVRlbXBSZWdpc3Rlcik7CisgICAgICAgICAgICAgICAgc3RvcmVE
ZXN0KGRhdGFUZW1wUmVnaXN0ZXIpOworICAgICAgICAgICAgICAgIG1fYXNzZW1ibGVyLmJsdHoo
Y21wVGVtcFJlZ2lzdGVyLCA5KTsKKyAgICAgICAgICAgICAgICBtX2Fzc2VtYmxlci54b3JJbnNu
KGNtcFRlbXBSZWdpc3RlciwgZGF0YVRlbXBSZWdpc3RlciwgaW1tVGVtcFJlZ2lzdGVyKTsKKyAg
ICAgICAgICAgICAgICBtX2Fzc2VtYmxlci5iZ2V6KGNtcFRlbXBSZWdpc3RlciwgNyk7CisgICAg
ICAgICAgICAgICAgbV9hc3NlbWJsZXIubm9wKCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgIGxvYWREZXN0KGRhdGFUZW1wUmVnaXN0ZXIpOworICAgICAgICAgICAgICAg
IGlmIChpbW0ubV92YWx1ZSA+PSAwICYmIGltbS5tX3ZhbHVlICA8PSAzMjc2NykgeworICAgICAg
ICAgICAgICAgICAgICBtb3ZlKGRhdGFUZW1wUmVnaXN0ZXIsIGNtcFRlbXBSZWdpc3Rlcik7Cisg
ICAgICAgICAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZGl1KGRhdGFUZW1wUmVnaXN0ZXIsIGRh
dGFUZW1wUmVnaXN0ZXIsIGltbS5tX3ZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgbV9hc3Nl
bWJsZXIuYmx0eihjbXBUZW1wUmVnaXN0ZXIsIDkpOworICAgICAgICAgICAgICAgICAgICBzdG9y
ZURlc3QoZGF0YVRlbXBSZWdpc3Rlcik7CisgICAgICAgICAgICAgICAgICAgIG1fYXNzZW1ibGVy
LmJnZXooZGF0YVRlbXBSZWdpc3RlciwgNyk7CisgICAgICAgICAgICAgICAgICAgIG1fYXNzZW1i
bGVyLm5vcCgpOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaW1tLm1fdmFsdWUgPj0gLTMy
NzY4ICYmIGltbS5tX3ZhbHVlIDwgMCkgeworICAgICAgICAgICAgICAgICAgICBtb3ZlKGRhdGFU
ZW1wUmVnaXN0ZXIsIGNtcFRlbXBSZWdpc3Rlcik7CisgICAgICAgICAgICAgICAgICAgIG1fYXNz
ZW1ibGVyLmFkZGl1KGRhdGFUZW1wUmVnaXN0ZXIsIGRhdGFUZW1wUmVnaXN0ZXIsIGltbS5tX3Zh
bHVlKTsKKyAgICAgICAgICAgICAgICAgICAgbV9hc3NlbWJsZXIuYmdleihjbXBUZW1wUmVnaXN0
ZXIsIDkpOworICAgICAgICAgICAgICAgICAgICBzdG9yZURlc3QoZGF0YVRlbXBSZWdpc3Rlcik7
CisgICAgICAgICAgICAgICAgICAgIG1fYXNzZW1ibGVyLmJsdHooY21wVGVtcFJlZ2lzdGVyLCA3
KTsKKyAgICAgICAgICAgICAgICAgICAgbV9hc3NlbWJsZXIubm9wKCk7CisgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgbW92ZShpbW0sIGltbVRlbXBSZWdpc3Rl
cik7CisgICAgICAgICAgICAgICAgICAgIG1fYXNzZW1ibGVyLnhvckluc24oY21wVGVtcFJlZ2lz
dGVyLCBkYXRhVGVtcFJlZ2lzdGVyLCBpbW1UZW1wUmVnaXN0ZXIpOworICAgICAgICAgICAgICAg
ICAgICBtX2Fzc2VtYmxlci5hZGR1KGRhdGFUZW1wUmVnaXN0ZXIsIGRhdGFUZW1wUmVnaXN0ZXIs
IGltbVRlbXBSZWdpc3Rlcik7CisgICAgICAgICAgICAgICAgICAgIG1fYXNzZW1ibGVyLmJsdHoo
Y21wVGVtcFJlZ2lzdGVyLCAxMCk7CisgICAgICAgICAgICAgICAgICAgIHN0b3JlRGVzdChkYXRh
VGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgICAgICAgICAgICAgbV9hc3NlbWJsZXIueG9ySW5zbihj
bXBUZW1wUmVnaXN0ZXIsIGRhdGFUZW1wUmVnaXN0ZXIsIGltbVRlbXBSZWdpc3Rlcik7CisgICAg
ICAgICAgICAgICAgICAgIG1fYXNzZW1ibGVyLmJnZXooY21wVGVtcFJlZ2lzdGVyLCA3KTsKKyAg
ICAgICAgICAgICAgICAgICAgbV9hc3NlbWJsZXIubm9wKCk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGp1bXAoKTsKKyAgICAgICAgfQorICAg
ICAgICBtb3ZlKGltbSwgaW1tVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgbG9hZERlc3QoZGF0YVRl
bXBSZWdpc3Rlcik7CisgICAgICAgIGFkZDMyKGltbVRlbXBSZWdpc3RlciwgZGF0YVRlbXBSZWdp
c3Rlcik7CisgICAgICAgIHN0b3JlRGVzdChkYXRhVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgaWYg
KGNvbmQgPT0gU2lnbmVkKSB7CisgICAgICAgICAgICAvLyBDaGVjayBpZiBkZXN0IGlzIG5lZ2F0
aXZlLgorICAgICAgICAgICAgbV9hc3NlbWJsZXIuc2x0KGNtcFRlbXBSZWdpc3RlciwgZGF0YVRl
bXBSZWdpc3RlciwgTUlQU1JlZ2lzdGVyczo6emVybyk7CisgICAgICAgICAgICByZXR1cm4gYnJh
bmNoTm90RXF1YWwoY21wVGVtcFJlZ2lzdGVyLCBNSVBTUmVnaXN0ZXJzOjp6ZXJvKTsKKyAgICAg
ICAgfQorICAgICAgICBpZiAoY29uZCA9PSBQb3NpdGl2ZU9yWmVybykgeworICAgICAgICAgICAg
Ly8gQ2hlY2sgaWYgZGVzdCBpcyBub3QgbmVnYXRpdmUuCisgICAgICAgICAgICBtX2Fzc2VtYmxl
ci5zbHQoY21wVGVtcFJlZ2lzdGVyLCBkYXRhVGVtcFJlZ2lzdGVyLCBNSVBTUmVnaXN0ZXJzOjp6
ZXJvKTsKKyAgICAgICAgICAgIHJldHVybiBicmFuY2hFcXVhbChjbXBUZW1wUmVnaXN0ZXIsIE1J
UFNSZWdpc3RlcnM6Onplcm8pOworICAgICAgICB9CisgICAgICAgIGlmIChjb25kID09IFplcm8p
CisgICAgICAgICAgICByZXR1cm4gYnJhbmNoRXF1YWwoZGF0YVRlbXBSZWdpc3RlciwgTUlQU1Jl
Z2lzdGVyczo6emVybyk7CisgICAgICAgIGlmIChjb25kID09IE5vblplcm8pCisgICAgICAgICAg
ICByZXR1cm4gYnJhbmNoTm90RXF1YWwoZGF0YVRlbXBSZWdpc3RlciwgTUlQU1JlZ2lzdGVyczo6
emVybyk7CisgICAgICAgIEFTU0VSVCgwKTsKKyAgICAgICAgcmV0dXJuIEp1bXAoKTsKKyAgICB9
CisKICAgICBKdW1wIGJyYW5jaE11bDMyKFJlc3VsdENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklE
IHNyYzEsIFJlZ2lzdGVySUQgc3JjMiwgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKICAgICAgICAg
QVNTRVJUKChjb25kID09IE92ZXJmbG93KSB8fCAoY29uZCA9PSBTaWduZWQpIHx8IChjb25kID09
IFplcm8pIHx8IChjb25kID09IE5vblplcm8pKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0LmgJKHJldmlzaW9u
IDI3ODUzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJs
ZXJYODZfNjQuaAkod29ya2luZyBjb3B5KQpAQCAtOTE4LDYgKzkxOCwxMiBAQCBwdWJsaWM6CiAg
ICAgICAgIG1fYXNzZW1ibGVyLm5vdHFfbShkZXN0Lm9mZnNldCwgZGVzdC5iYXNlLCBkZXN0Lmlu
ZGV4LCBkZXN0LnNjYWxlKTsKICAgICB9CiAKKyAgICB2b2lkIG5lZ2F0ZTY0KFJlZ2lzdGVySUQg
ZGVzdCkKKyAgICB7CisgICAgICAgIG5vdDY0KGRlc3QpOworICAgICAgICBhZGQ2NChUcnVzdGVk
SW1tMzIoMSksIGRlc3QpOworICAgIH0KKwogICAgIHZvaWQgbG9hZDY0KEltcGxpY2l0QWRkcmVz
cyBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewogICAgICAgICBtX2Fzc2VtYmxlci5t
b3ZxX21yKGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UsIGRlc3QpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24gMjc4NTM3KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xNjksNyArMTY5LDEwIEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBudW1UbXBzKCkg
Y29uc3QgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPmhhc0NoZWNrcG9pbnRzKCkgKiBtYXhOdW1D
aGVja3BvaW50VG1wczsgfQogCiAgICAgdW5zaWduZWQqIGFkZHJlc3NPZk51bVBhcmFtZXRlcnMo
KSB7IHJldHVybiAmbV9udW1QYXJhbWV0ZXJzOyB9CisKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9m
ZnNldE9mTnVtQ2FsbGVlTG9jYWxzKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9j
aywgbV9udW1DYWxsZWVMb2NhbHMpOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZk51
bVBhcmFtZXRlcnMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX251bVBh
cmFtZXRlcnMpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZk51bVZhcnMoKSB7IHJl
dHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX251bVZhcnMpOyB9CiAKICAgICBDb2Rl
QmxvY2sqIGFsdGVybmF0aXZlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Q29kZUJsb2Nr
Kj4obV9hbHRlcm5hdGl2ZS5nZXQoKSk7IH0KICAgICB2b2lkIHNldEFsdGVybmF0aXZlKFZNJiwg
Q29kZUJsb2NrKik7CkBAIC00ODYsNiArNDg5LDggQEAgcHVibGljOgogICAgICAgICByZXR1cm4g
cmVzdWx0OwogICAgIH0KIAorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZBcmd1bWVudFZh
bHVlUHJvZmlsZXMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2FyZ3Vt
ZW50VmFsdWVQcm9maWxlcyk7IH0KKwogICAgIFZhbHVlUHJvZmlsZSYgdmFsdWVQcm9maWxlRm9y
Qnl0ZWNvZGVJbmRleChCeXRlY29kZUluZGV4KTsKICAgICBTcGVjdWxhdGVkVHlwZSB2YWx1ZVBy
b2ZpbGVQcmVkaWN0aW9uRm9yQnl0ZWNvZGVJbmRleChjb25zdCBDb25jdXJyZW50SlNMb2NrZXIm
LCBCeXRlY29kZUluZGV4KTsKIApAQCAtODE5LDcgKzgyNCw3IEBAIHB1YmxpYzoKICAgICB9CiAK
ICAgICBib29sIHdhc0NvbXBpbGVkV2l0aERlYnVnZ2luZ09wY29kZXMoKSBjb25zdCB7IHJldHVy
biBtX3VubGlua2VkQ29kZS0+d2FzQ29tcGlsZWRXaXRoRGVidWdnaW5nT3Bjb2RlcygpOyB9Ci0g
ICAgCisKICAgICAvLyBUaGlzIGlzIGludGVudGlvbmFsbHkgcHVibGljOyBpdCdzIHRoZSByZXNw
b25zaWJpbGl0eSBvZiBhbnlvbmUgZG9pbmcgYW55CiAgICAgLy8gb2YgdGhlIGZvbGxvd2luZyB0
byBob2xkIHRoZSBsb2NrOgogICAgIC8vCkBAIC05MDYsNiArOTExLDcgQEAgcHVibGljOgogCiAg
ICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZk1ldGFkYXRhVGFibGUoKSB7IHJldHVybiBPQkpF
Q1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX21ldGFkYXRhKTsgfQogICAgIHN0YXRpYyBwdHJkaWZm
X3Qgb2Zmc2V0T2ZJbnN0cnVjdGlvbnNSYXdQb2ludGVyKCkgeyByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKENvZGVCbG9jaywgbV9pbnN0cnVjdGlvbnNSYXdQb2ludGVyKTsgfQorICAgIHN0YXRpYyBw
dHJkaWZmX3Qgb2Zmc2V0T2ZTaG91bGRBbHdheXNCZUlubGluZWQoKSB7IHJldHVybiBPQkpFQ1Rf
T0ZGU0VUT0YoQ29kZUJsb2NrLCBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZCk7IH0KIAogICAgIGJv
b2wgbG9vcEhpbnRzQXJlRWxpZ2libGVGb3JGdXp6aW5nRWFybHlSZXR1cm4oKQogICAgIHsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkocmV2aXNp
b24gMjc4NTM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMu
aAkod29ya2luZyBjb3B5KQpAQCAtMzI2LDYgKzMyNiwxMSBAQCBwdWJsaWM6CiAgICAgICAgIEFT
U0VSVChjb2RlQmxvY2spOwogCiAgICAgICAgIGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiBj
YWxsZWVTYXZlcyA9IGNvZGVCbG9jay0+Y2FsbGVlU2F2ZVJlZ2lzdGVycygpOworICAgICAgICBl
bWl0U2F2ZUNhbGxlZVNhdmVzRm9yKGNhbGxlZVNhdmVzKTsKKyAgICB9CisKKyAgICB2b2lkIGVt
aXRTYXZlQ2FsbGVlU2F2ZXNGb3IoY29uc3QgUmVnaXN0ZXJBdE9mZnNldExpc3QqIGNhbGxlZVNh
dmVzKQorICAgIHsKICAgICAgICAgUmVnaXN0ZXJTZXQgZG9udFNhdmVSZWdpc3RlcnMgPSBSZWdp
c3RlclNldChSZWdpc3RlclNldDo6c3RhY2tSZWdpc3RlcnMoKSwgUmVnaXN0ZXJTZXQ6OmFsbEZQ
UnMoKSk7CiAgICAgICAgIHVuc2lnbmVkIHJlZ2lzdGVyQ291bnQgPSBjYWxsZWVTYXZlcy0+c2l6
ZSgpOwogCkBAIC0zOTksNiArNDA0LDExIEBAIHB1YmxpYzoKICAgICAgICAgZW1pdFNhdmVDYWxs
ZWVTYXZlc0Zvcihjb2RlQmxvY2soKSk7CiAgICAgfQogCisgICAgdm9pZCBlbWl0U2F2ZUNhbGxl
ZVNhdmVzRm9yQmFzZWxpbmVKSVQoKQorICAgIHsKKyAgICAgICAgZW1pdFNhdmVDYWxsZWVTYXZl
c0ZvcigmUmVnaXN0ZXJBdE9mZnNldExpc3Q6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0
ZXJzKCkpOworICAgIH0KKwogICAgIHZvaWQgZW1pdFNhdmVUaGVuTWF0ZXJpYWxpemVUYWdSZWdp
c3RlcnMoKQogICAgIHsKICNpZiBVU0UoSlNWQUxVRTY0KQpAQCAtNDE3LDYgKzQyNywxMSBAQCBw
dWJsaWM6CiAgICAgICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXNGb3IoY29kZUJsb2NrKCkpOwog
ICAgIH0KIAorICAgIHZvaWQgZW1pdFJlc3RvcmVDYWxsZWVTYXZlc0ZvckJhc2VsaW5lSklUKCkK
KyAgICB7CisgICAgICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXNGb3IoJlJlZ2lzdGVyQXRPZmZz
ZXRMaXN0OjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKKyAgICB9CisKICAg
ICB2b2lkIGVtaXRSZXN0b3JlU2F2ZWRUYWdSZWdpc3RlcnMoKQogICAgIHsKICNpZiBVU0UoSlNW
QUxVRTY0KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkocmV2aXNpb24gMjc4NTM3
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC04Myw3ICs4Myw3IEBAIEpJVDo6fkpJVCgpCiB7CiB9CiAKLSNpZiBFTkFCTEUoREZHX0pJVCkK
KyNpZiBFTkFCTEUoREZHX0pJVCkgJiYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogdm9pZCBK
SVQ6OmVtaXRFbnRlck9wdGltaXphdGlvbkNoZWNrKCkKIHsKICAgICBpZiAoIWNhbkJlT3B0aW1p
emVkKCkpCkBAIC0xMDEsNyArMTAxLDcgQEAgdm9pZCBKSVQ6OmVtaXRFbnRlck9wdGltaXphdGlv
bkNoZWNrKCkKICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBHUFJJbmZvOjpjYWxsRnJhbWVS
ZWdpc3Rlcik7CiAgICAgc2tpcE9wdGltaXplLmxpbmsodGhpcyk7CiB9Ci0jZW5kaWYKKyNlbmRp
ZiAvLyBFTkFCTEUoREZHX0pJVCkgJiYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKSgKIAogdm9p
ZCBKSVQ6OmVtaXROb3RpZnlXcml0ZShXYXRjaHBvaW50U2V0KiBzZXQpCiB7CkBAIC02ODIsNiAr
NjgyLDI3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAjZW5kaWYKIH0K
IAorI2RlZmluZSBGT1JfRUFDSF9OT05fUFJPRklMSU5HX1BST0xPR1VFX0dFTkVSQVRPUih2KSBc
CisgICAgdighZG9lc1Byb2ZpbGluZywgIWlzQ29uc3RydWN0b3IsICFoYXNIdWdlRnJhbWUsIHBy
b2xvZ3VlR2VuZXJhdG9yMCwgYXJpdHlGaXh1cF9wcm9sb2d1ZUdlbmVyYXRvcjApIFwKKyAgICB2
KCFkb2VzUHJvZmlsaW5nLCAhaXNDb25zdHJ1Y3RvciwgIGhhc0h1Z2VGcmFtZSwgcHJvbG9ndWVH
ZW5lcmF0b3IxLCBhcml0eUZpeHVwX3Byb2xvZ3VlR2VuZXJhdG9yMSkgXAorICAgIHYoIWRvZXNQ
cm9maWxpbmcsICBpc0NvbnN0cnVjdG9yLCAhaGFzSHVnZUZyYW1lLCBwcm9sb2d1ZUdlbmVyYXRv
cjIsIGFyaXR5Rml4dXBfcHJvbG9ndWVHZW5lcmF0b3IyKSBcCisgICAgdighZG9lc1Byb2ZpbGlu
ZywgIGlzQ29uc3RydWN0b3IsICBoYXNIdWdlRnJhbWUsIHByb2xvZ3VlR2VuZXJhdG9yMywgYXJp
dHlGaXh1cF9wcm9sb2d1ZUdlbmVyYXRvcjMpCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKyNkZWZp
bmUgRk9SX0VBQ0hfUFJPRklMSU5HX1BST0xPR1VFX0dFTkVSQVRPUih2KSBcCisgICAgdiggZG9l
c1Byb2ZpbGluZywgIWlzQ29uc3RydWN0b3IsICFoYXNIdWdlRnJhbWUsIHByb2xvZ3VlR2VuZXJh
dG9yNCwgYXJpdHlGaXh1cF9wcm9sb2d1ZUdlbmVyYXRvcjQpIFwKKyAgICB2KCBkb2VzUHJvZmls
aW5nLCAhaXNDb25zdHJ1Y3RvciwgIGhhc0h1Z2VGcmFtZSwgcHJvbG9ndWVHZW5lcmF0b3I1LCBh
cml0eUZpeHVwX3Byb2xvZ3VlR2VuZXJhdG9yNSkgXAorICAgIHYoIGRvZXNQcm9maWxpbmcsICBp
c0NvbnN0cnVjdG9yLCAhaGFzSHVnZUZyYW1lLCBwcm9sb2d1ZUdlbmVyYXRvcjYsIGFyaXR5Rml4
dXBfcHJvbG9ndWVHZW5lcmF0b3I2KSBcCisgICAgdiggZG9lc1Byb2ZpbGluZywgIGlzQ29uc3Ry
dWN0b3IsICBoYXNIdWdlRnJhbWUsIHByb2xvZ3VlR2VuZXJhdG9yNywgYXJpdHlGaXh1cF9wcm9s
b2d1ZUdlbmVyYXRvcjcpCisKKyNlbHNlIC8vIG5vdCBFTkFCTEUoREZHX0pJVCkKKyNkZWZpbmUg
Rk9SX0VBQ0hfUFJPRklMSU5HX1BST0xPR1VFX0dFTkVSQVRPUih2KQorI2VuZGlmIC8vIEVOQUJM
RShERkdfSklUKQorCisjZGVmaW5lIEZPUl9FQUNIX1BST0xPR1VFX0dFTkVSQVRPUih2KSBcCisg
ICAgRk9SX0VBQ0hfTk9OX1BST0ZJTElOR19QUk9MT0dVRV9HRU5FUkFUT1IodikgXAorICAgIEZP
Ul9FQUNIX1BST0ZJTElOR19QUk9MT0dVRV9HRU5FUkFUT1IodikKKwogdm9pZCBKSVQ6OmNvbXBp
bGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbmcoSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQog
ewogICAgIERGRzo6Q2FwYWJpbGl0eUxldmVsIGxldmVsID0gbV9jb2RlQmxvY2stPmNhcGFiaWxp
dHlMZXZlbCgpOwpAQCAtNzUwLDYgKzc3MSw4IEBAIHZvaWQgSklUOjpjb21waWxlQW5kTGlua1dp
dGhvdXRGaW5hbGl6aW4KICAgICAgICAgbm9wKCk7CiAKICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1
ZSgpOworCisjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogICAgIGVtaXRQdXRUb0NhbGxG
cmFtZUhlYWRlcihtX2NvZGVCbG9jaywgQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKTsKIAogICAg
IExhYmVsIGJlZ2luTGFiZWwodGhpcyk7CkBAIC03NzEsMTEgKzc5NCwxMCBAQCB2b2lkIEpJVDo6
Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluCiAgICAgaWYgKG1fY29kZUJsb2NrLT5jb2Rl
VHlwZSgpID09IEZ1bmN0aW9uQ29kZSkgewogICAgICAgICBBU1NFUlQoIW1fYnl0ZWNvZGVJbmRl
eCk7CiAgICAgICAgIGlmIChzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKLSAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgYXJndW1lbnQgPSAwOyBhcmd1bWVudCA8IG1fY29kZUJsb2NrLT5udW1QYXJh
bWV0ZXJzKCk7ICsrYXJndW1lbnQpIHsKLSAgICAgICAgICAgICAgICAvLyBJZiB0aGlzIGlzIGEg
Y29uc3RydWN0b3IsIHRoZW4gd2Ugd2FudCB0byBwdXQgaW4gYSBkdW1teSBwcm9maWxpbmcgc2l0
ZSAodG8KLSAgICAgICAgICAgICAgICAvLyBrZWVwIHRoaW5ncyBjb25zaXN0ZW50KSBidXQgd2Ug
ZG9uJ3QgYWN0dWFsbHkgd2FudCB0byByZWNvcmQgdGhlIGR1bW15IHZhbHVlLgotICAgICAgICAg
ICAgICAgIGlmIChtX2NvZGVCbG9jay0+aXNDb25zdHJ1Y3RvcigpICYmICFhcmd1bWVudCkKLSAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAvLyBJZiB0aGlzIGlzIGEg
Y29uc3RydWN0b3IsIHRoZW4gd2Ugd2FudCB0byBwdXQgaW4gYSBkdW1teSBwcm9maWxpbmcgc2l0
ZSAodG8KKyAgICAgICAgICAgIC8vIGtlZXAgdGhpbmdzIGNvbnNpc3RlbnQpIGJ1dCB3ZSBkb24n
dCBhY3R1YWxseSB3YW50IHRvIHJlY29yZCB0aGUgZHVtbXkgdmFsdWUuCisgICAgICAgICAgICB1
bnNpZ25lZCBzdGFydEFyZ3VtZW50ID0gbV9jb2RlQmxvY2stPmlzQ29uc3RydWN0b3IoKSA/IDEg
OiAwOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudCA9IHN0YXJ0QXJndW1lbnQ7
IGFyZ3VtZW50IDwgbV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKTsgKythcmd1bWVudCkgewog
ICAgICAgICAgICAgICAgIGludCBvZmZzZXQgPSBDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0SW5j
bHVkaW5nVGhpcyhhcmd1bWVudCkgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3Rlcikp
OwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0
UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKQEAgLTc4OSw3ICs4MTEsMzQgQEAgdm9pZCBKSVQ6
OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbgogICAgICAgICAgICAgfQogICAgICAgICB9
CiAgICAgfQotICAgIAorI2Vsc2UgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCisgICAgY29u
c3RleHByIEdQUlJlZyBjb2RlQmxvY2tHUFIgPSByZWdUNzsKKyAgICBBU1NFUlQoIW1fYnl0ZWNv
ZGVJbmRleCk7CisKKyAgICBpbnQgZnJhbWVUb3BPZmZzZXQgPSBzdGFja1BvaW50ZXJPZmZzZXRG
b3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKTsKKyAgICB1bnNpZ25lZCBtYXhGcmFt
ZVNpemUgPSAtZnJhbWVUb3BPZmZzZXQ7CisKKyAgICBib29sIGRvZXNQcm9maWxpbmcgPSAobV9j
b2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlKSAmJiBzaG91bGRFbWl0UHJvZmls
aW5nKCk7CisgICAgYm9vbCBpc0NvbnN0cnVjdG9yID0gbV9jb2RlQmxvY2stPmlzQ29uc3RydWN0
b3IoKTsKKyAgICBib29sIGhhc0h1Z2VGcmFtZSA9IG1heEZyYW1lU2l6ZSA+IE9wdGlvbnM6OnJl
c2VydmVkWm9uZVNpemUoKTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgVGh1bmtHZW5lcmF0b3Ig
Z2VuZXJhdG9yc1tdID0geworI2RlZmluZSBVU0VfUFJPTE9HVUVfR0VORVJBVE9SKGRvZXNQcm9m
aWxpbmcsIGlzQ29uc3RydWN0b3IsIGhhc0h1Z2VGcmFtZSwgbmFtZSwgYXJpdHlGaXh1cE5hbWUp
IG5hbWUsCisgICAgICAgIEZPUl9FQUNIX1BST0xPR1VFX0dFTkVSQVRPUihVU0VfUFJPTE9HVUVf
R0VORVJBVE9SKQorI3VuZGVmIFVTRV9QUk9MT0dVRV9HRU5FUkFUT1IKKyAgICB9OworICAgIHN0
YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbnVtYmVyT2ZHZW5lcmF0b3JzID0gc2l6ZW9mKGdlbmVy
YXRvcnMpIC8gc2l6ZW9mKGdlbmVyYXRvcnNbMF0pOworCisgICAgbW92ZShUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrKSwgY29kZUJsb2NrR1BSKTsKKworICAgIHVuc2lnbmVkIGdlbmVyYXRvclNl
bGVjdG9yID0gZG9lc1Byb2ZpbGluZyA8PCAyIHwgaXNDb25zdHJ1Y3RvciA8PCAxIHwgaGFzSHVn
ZUZyYW1lIDw8IDA7CisgICAgUkVMRUFTRV9BU1NFUlQoZ2VuZXJhdG9yU2VsZWN0b3IgPCBudW1i
ZXJPZkdlbmVyYXRvcnMpOworICAgIGF1dG8gZ2VuZXJhdG9yID0gZ2VuZXJhdG9yc1tnZW5lcmF0
b3JTZWxlY3Rvcl07CisgICAgZW1pdE5ha2VkTmVhckNhbGwodm0oKS5nZXRDVElTdHViKGdlbmVy
YXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKKworICAgIExhYmVsIGJvZHlMYWJlbCh0
aGlzKTsKKyNlbmRpZiAvLyAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCisKICAgICBSRUxFQVNF
X0FTU0VSVCghSklUQ29kZTo6aXNKSVQobV9jb2RlQmxvY2stPmppdFR5cGUoKSkpOwogCiAgICAg
aWYgKFVOTElLRUxZKHNpemVNYXJrZXIpKQpAQCAtODAzLDE2ICs4NTIsMTkgQEAgdm9pZCBKSVQ6
OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbgogICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+
c2V0RW5kT2ZTbG93UGF0aChsYWJlbCgpKTsKICAgICBtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRl
ci5hcHBlbmRJdGVtKGxhYmVsKCksIFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlcjo6ZGVmYXVsdENv
ZGVPcmlnaW4oKSk7CiAKKyNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAgICAgc3RhY2tP
dmVyZmxvdy5saW5rKHRoaXMpOwogICAgIG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgo
MCk7CiAgICAgaWYgKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKQogICAgICAgICBhZGRQ
dHIoVHJ1c3RlZEltbTMyKC1zdGF0aWNfY2FzdDxpbnQzMl90PihtYXhGcmFtZUV4dGVudEZvclNs
b3dQYXRoQ2FsbCkpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgY2FsbE9wZXJhdGlvbldp
dGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKG9wZXJhdGlvblRocm93U3RhY2tPdmVyZmxv
d0Vycm9yLCBtX2NvZGVCbG9jayk7CisjZW5kaWYKIAogICAgIC8vIElmIHRoZSBudW1iZXIgb2Yg
cGFyYW1ldGVycyBpcyAxLCB3ZSBuZXZlciByZXF1aXJlIGFyaXR5IGZpeHVwLgogICAgIGJvb2wg
cmVxdWlyZXNBcml0eUZpeHVwID0gbV9jb2RlQmxvY2stPm1fbnVtUGFyYW1ldGVycyAhPSAxOwog
ICAgIGlmIChtX2NvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUgJiYgcmVxdWly
ZXNBcml0eUZpeHVwKSB7CiAgICAgICAgIG1fYXJpdHlDaGVjayA9IGxhYmVsKCk7CisjaWYgIUVO
QUJMRShFWFRSQV9DVElfVEhVTktTKQogICAgICAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDApLCAm
bV9jb2RlQmxvY2stPm1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkKTsKICAgICAgICAgZW1pdEZ1bmN0
aW9uUHJvbG9ndWUoKTsKICAgICAgICAgZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKG1fY29kZUJs
b2NrLCBDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spOwpAQCAtODMxLDE3ICs4ODMsNDIgQEAgdm9p
ZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbgogICAgICAgICBtb3ZlKHJldHVy
blZhbHVlR1BSLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwogICAgICAgICBlbWl0TmFrZWROZWFy
Q2FsbChtX3ZtLT5nZXRDVElTdHViKGFyaXR5Rml4dXBHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxO
b1B0clRhZz4oKSk7CiAKKyAgICAgICAganVtcChiZWdpbkxhYmVsKTsKKworI2Vsc2UgLy8gRU5B
QkxFKEVYVFJBX0NUSV9USFVOS1MpCisgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKCk7CisK
KyAgICAgICAgc3RhdGljX2Fzc2VydChjb2RlQmxvY2tHUFIgPT0gcmVnVDcpOworICAgICAgICBB
U1NFUlQoIW1fYnl0ZWNvZGVJbmRleCk7CisKKyAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBUaHVu
a0dlbmVyYXRvciBnZW5lcmF0b3JzW10gPSB7CisjZGVmaW5lIFVTRV9QUk9MT0dVRV9HRU5FUkFU
T1IoZG9lc1Byb2ZpbGluZywgaXNDb25zdHJ1Y3RvciwgaGFzSHVnZUZyYW1lLCBuYW1lLCBhcml0
eUZpeHVwTmFtZSkgYXJpdHlGaXh1cE5hbWUsCisgICAgICAgICAgICBGT1JfRUFDSF9QUk9MT0dV
RV9HRU5FUkFUT1IoVVNFX1BST0xPR1VFX0dFTkVSQVRPUikKKyN1bmRlZiBVU0VfUFJPTE9HVUVf
R0VORVJBVE9SCisgICAgICAgIH07CisgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQg
bnVtYmVyT2ZHZW5lcmF0b3JzID0gc2l6ZW9mKGdlbmVyYXRvcnMpIC8gc2l6ZW9mKGdlbmVyYXRv
cnNbMF0pOworCisgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jayksIGNvZGVC
bG9ja0dQUik7CisKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoZ2VuZXJhdG9yU2VsZWN0b3IgPCBu
dW1iZXJPZkdlbmVyYXRvcnMpOworICAgICAgICBhdXRvIGdlbmVyYXRvciA9IGdlbmVyYXRvcnNb
Z2VuZXJhdG9yU2VsZWN0b3JdOworICAgICAgICBSRUxFQVNFX0FTU0VSVChnZW5lcmF0b3IpOwor
ICAgICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bSgpLmdldENUSVN0dWIoZ2VuZXJhdG9yKS5yZXRh
Z2dlZENvZGU8Tm9QdHJUYWc+KCkpOworCisgICAgICAgIGp1bXAoYm9keUxhYmVsKTsKKyNlbmRp
ZiAvLyAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCisKICNpZiBBU1NFUlRfRU5BQkxFRAogICAg
ICAgICBtX2J5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4KCk7IC8vIFJlc2V0IHRoaXMsIGlu
IG9yZGVyIHRvIGd1YXJkIGl0cyB1c2Ugd2l0aCBBU1NFUlRzLgogI2VuZGlmCi0KLSAgICAgICAg
anVtcChiZWdpbkxhYmVsKTsKICAgICB9IGVsc2UKICAgICAgICAgbV9hcml0eUNoZWNrID0gZW50
cnlMYWJlbDsgLy8gTmV2ZXIgcmVxdWlyZSBhcml0eSBmaXh1cC4KIAogICAgIEFTU0VSVChtX2pt
cFRhYmxlLmlzRW1wdHkoKSk7CiAgICAgCisjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQog
ICAgIHByaXZhdGVDb21waWxlRXhjZXB0aW9uSGFuZGxlcnMoKTsKKyNlbmRpZgogICAgIAogICAg
IGlmIChtX2Rpc2Fzc2VtYmxlcikKICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnNldEVuZE9mQ29k
ZShsYWJlbCgpKTsKQEAgLTg1MSw2ICs5MjgsMjQwIEBAIHZvaWQgSklUOjpjb21waWxlQW5kTGlu
a1dpdGhvdXRGaW5hbGl6aW4KICAgICBsaW5rKCk7CiB9CiAKKyNpZiBFTkFCTEUoRVhUUkFfQ1RJ
X1RIVU5LUykKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpwcm9s
b2d1ZUdlbmVyYXRvcihWTSYgdm0sIGJvb2wgZG9lc1Byb2ZpbGluZywgYm9vbCBpc0NvbnN0cnVj
dG9yLCBib29sIGhhc0h1Z2VGcmFtZSwgY29uc3QgY2hhciogdGh1bmtOYW1lKQoreworICAgIC8v
IFRoaXMgZnVuY3Rpb24gZ2VuZXJhdGVzIHRoZSBCYXNlbGluZSBKSVQncyBwcm9sb2d1ZSBjb2Rl
LiBJdCBpcyBub3QgdXNlYWJsZSBieSBvdGhlciB0aWVycy4KKyAgICBjb25zdGV4cHIgR1BSUmVn
IGNvZGVCbG9ja0dQUiA9IHJlZ1Q3OyAvLyBpbmNvbWluZy4KKworICAgIGNvbnN0ZXhwciBpbnQg
dmlydHVhbFJlZ2lzdGVyU2l6ZSA9IHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSk7
CisgICAgY29uc3RleHByIGludCB2aXJ0dWFsUmVnaXN0ZXJTaXplU2hpZnQgPSAzOworICAgIHN0
YXRpY19hc3NlcnQoKDEgPDwgdmlydHVhbFJlZ2lzdGVyU2l6ZVNoaWZ0KSA9PSB2aXJ0dWFsUmVn
aXN0ZXJTaXplKTsKKworICAgIHRhZ1JldHVybkFkZHJlc3MoKTsKKworICAgIHN0b3JlNjQoY29k
ZUJsb2NrR1BSLCBhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jaykpOworCisgICAg
bG9hZDMyKEFkZHJlc3MoY29kZUJsb2NrR1BSLCBDb2RlQmxvY2s6Om9mZnNldE9mTnVtQ2FsbGVl
TG9jYWxzKCkpLCByZWdUMSk7CisgICAgaWYgY29uc3RleHByIChtYXhGcmFtZUV4dGVudEZvclNs
b3dQYXRoQ2FsbEluUmVnaXN0ZXJzKQorICAgICAgICBhZGQzMihUcnVzdGVkSW1tMzIobWF4RnJh
bWVFeHRlbnRGb3JTbG93UGF0aENhbGxJblJlZ2lzdGVycyksIHJlZ1QxKTsKKyAgICBsc2hpZnQz
MihUcnVzdGVkSW1tMzIodmlydHVhbFJlZ2lzdGVyU2l6ZVNoaWZ0KSwgcmVnVDEpOworICAgIG5l
Z2F0ZTY0KHJlZ1QxKTsKKyNpZiBBU1NFUlRfRU5BQkxFRAorICAgIFByb2JlOjpGdW5jdGlvbiBw
cm9iZUZ1bmN0aW9uID0gW10gKFByb2JlOjpDb250ZXh0JiBjb250ZXh0KSB7CisgICAgICAgIENv
ZGVCbG9jayogY29kZUJsb2NrID0gY29udGV4dC5mcDxDYWxsRnJhbWUqPigpLT5jb2RlQmxvY2so
KTsKKyAgICAgICAgaW50NjRfdCBmcmFtZVRvcE9mZnNldCA9IHN0YWNrUG9pbnRlck9mZnNldEZv
cihjb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQo
Y29udGV4dC5ncHI8aW50cHRyX3Q+KHJlZ1QxKSA9PSBmcmFtZVRvcE9mZnNldCk7CisgICAgfTsK
KyAgICBwcm9iZSh0YWdDRnVuY3Rpb25QdHI8SklUUHJvYmVQdHJUYWc+KHByb2JlRnVuY3Rpb24p
LCBudWxscHRyKTsKKyNlbmRpZgorCisgICAgYWRkUHRyKGNhbGxGcmFtZVJlZ2lzdGVyLCByZWdU
MSk7CisKKyAgICBKdW1wTGlzdCBzdGFja092ZXJmbG93OworICAgIGlmIChoYXNIdWdlRnJhbWUp
CisgICAgICAgIHN0YWNrT3ZlcmZsb3cuYXBwZW5kKGJyYW5jaFB0cihBYm92ZSwgcmVnVDEsIGNh
bGxGcmFtZVJlZ2lzdGVyKSk7CisgICAgc3RhY2tPdmVyZmxvdy5hcHBlbmQoYnJhbmNoUHRyKEFi
b3ZlLCBBYnNvbHV0ZUFkZHJlc3Modm0uYWRkcmVzc09mU29mdFN0YWNrTGltaXQoKSksIHJlZ1Qx
KSk7CisKKyAgICAvLyBXZSdsbCBiZSBpbW1pbmVudGx5IHJldHVyaW5nIHdpdGggYSByZXRhYiBp
biB0aGUgbm9ybWFsIHBhdGgsIHdoaWNoIHdpbGwgZG8gdmFsaWRhdGlvbi4KKyAgICAvLyBTbywg
ZXh0cmEgdmFsaWRhdGlvbiBoZXJlIGlzIHJlZHVuZGFudC4KKyAgICB1bnRhZ1JldHVybkFkZHJl
c3NXaXRob3V0RXh0cmFWYWxpZGF0aW9uKCk7CisjaWYgQ1BVKFg4Nl82NCkKKyAgICBwb3AocmVn
VDIpOyAvLyBTYXZlIHRoZSByZXR1cm4gYWRkcmVzcy4KKyNlbmRpZgorICAgIG1vdmUocmVnVDEs
IHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICB0YWdSZXR1cm5BZGRyZXNzKCk7CisgICAgY2hl
Y2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKKyNpZiBDUFUoWDg2XzY0KQorICAgIHB1c2gocmVn
VDIpOyAvLyBSZXN0b3JlIHRoZSByZXR1cm4gYWRkcmVzcy4KKyNlbmRpZgorCisgICAgZW1pdFNh
dmVDYWxsZWVTYXZlc0ZvckJhc2VsaW5lSklUKCk7CisgICAgZW1pdE1hdGVyaWFsaXplVGFnQ2hl
Y2tSZWdpc3RlcnMoKTsKKworICAgIGlmIChkb2VzUHJvZmlsaW5nKSB7CisgICAgICAgIGNvbnN0
ZXhwciBHUFJSZWcgYXJndW1lbnRWYWx1ZVByb2ZpbGVHUFIgPSByZWdUNjsKKyAgICAgICAgY29u
c3RleHByIEdQUlJlZyBudW1QYXJhbWV0ZXJzR1BSID0gcmVnVDU7CisgICAgICAgIGNvbnN0ZXhw
ciBHUFJSZWcgYXJndW1lbnRHUFIgPSByZWdUNDsKKworICAgICAgICBsb2FkMzIoQWRkcmVzcyhj
b2RlQmxvY2tHUFIsIENvZGVCbG9jazo6b2Zmc2V0T2ZOdW1QYXJhbWV0ZXJzKCkpLCBudW1QYXJh
bWV0ZXJzR1BSKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKGNvZGVCbG9ja0dQUiwgQ29kZUJs
b2NrOjpvZmZzZXRPZkFyZ3VtZW50VmFsdWVQcm9maWxlcygpKSwgYXJndW1lbnRWYWx1ZVByb2Zp
bGVHUFIpOworICAgICAgICBpZiAoaXNDb25zdHJ1Y3RvcikKKyAgICAgICAgICAgIGFkZFB0cihU
cnVzdGVkSW1tMzIoc2l6ZW9mKFZhbHVlUHJvZmlsZSkpLCBhcmd1bWVudFZhbHVlUHJvZmlsZUdQ
Uik7CisKKyAgICAgICAgaW50IHN0YXJ0QXJndW1lbnQgPSBDYWxsRnJhbWVTbG90Ojp0aGlzQXJn
dW1lbnQgKyAoaXNDb25zdHJ1Y3RvciA/IDEgOiAwKTsKKyAgICAgICAgaW50IHN0YXJ0QXJndW1l
bnRPZmZzZXQgPSBzdGFydEFyZ3VtZW50ICogdmlydHVhbFJlZ2lzdGVyU2l6ZTsKKyAgICAgICAg
bW92ZShUcnVzdGVkSW1tNjQoc3RhcnRBcmd1bWVudE9mZnNldCksIGFyZ3VtZW50R1BSKTsKKwor
ICAgICAgICBhZGQzMihUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50PihDYWxsRnJhbWVTbG90
Ojp0aGlzQXJndW1lbnQpKSwgbnVtUGFyYW1ldGVyc0dQUik7CisgICAgICAgIGxzaGlmdDMyKFRy
dXN0ZWRJbW0zMih2aXJ0dWFsUmVnaXN0ZXJTaXplU2hpZnQpLCBudW1QYXJhbWV0ZXJzR1BSKTsK
KworICAgICAgICBhZGRQdHIoY2FsbEZyYW1lUmVnaXN0ZXIsIGFyZ3VtZW50R1BSKTsKKyAgICAg
ICAgYWRkUHRyKGNhbGxGcmFtZVJlZ2lzdGVyLCBudW1QYXJhbWV0ZXJzR1BSKTsKKworICAgICAg
ICBMYWJlbCBsb29wU3RhcnQodGhpcyk7CisgICAgICAgIEp1bXAgZG9uZSA9IGJyYW5jaFB0cihB
Ym92ZU9yRXF1YWwsIGFyZ3VtZW50R1BSLCBudW1QYXJhbWV0ZXJzR1BSKTsKKyAgICAgICAgewor
ICAgICAgICAgICAgbG9hZDY0KEFkZHJlc3MoYXJndW1lbnRHUFIpLCByZWdUMCk7CisgICAgICAg
ICAgICBzdG9yZTY0KHJlZ1QwLCBBZGRyZXNzKGFyZ3VtZW50VmFsdWVQcm9maWxlR1BSLCBPQkpF
Q1RfT0ZGU0VUT0YoVmFsdWVQcm9maWxlLCBtX2J1Y2tldHMpKSk7CisKKyAgICAgICAgICAgIC8v
IFRoZSBhcmd1bWVudCBWYWx1ZVByb2ZpbGVzIGFyZSBzdG9yZWQgaW4gYSBGaXhlZFZlY3Rvci4g
SGVuY2UsIHRoZQorICAgICAgICAgICAgLy8gYWRkcmVzcyBvZiB0aGUgbmV4dCBwcm9maWxlIGNh
biBiZSB0cml2aWFsbHkgY29tcHV0ZWQgd2l0aCBhbiBpbmNyZW1lbnQuCisgICAgICAgICAgICBh
ZGRQdHIoVHJ1c3RlZEltbTMyKHNpemVvZihWYWx1ZVByb2ZpbGUpKSwgYXJndW1lbnRWYWx1ZVBy
b2ZpbGVHUFIpOworICAgICAgICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMih2aXJ0dWFsUmVnaXN0
ZXJTaXplKSwgYXJndW1lbnRHUFIpOworICAgICAgICAgICAganVtcCgpLmxpbmtUbyhsb29wU3Rh
cnQsIHRoaXMpOworICAgICAgICB9CisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICB9Cisg
ICAgcmV0KCk7CisKKyAgICBzdGFja092ZXJmbG93LmxpbmsodGhpcyk7CisjaWYgQ1BVKFg4Nl82
NCkKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKDEgKiBzaXplb2YoQ1BVUmVnaXN0ZXIpKSwgc3Rh
Y2tQb2ludGVyUmVnaXN0ZXIpOyAvLyBkaXNjYXJkIHJldHVybiBhZGRyZXNzLgorI2VuZGlmCisK
KyAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4KDApLmJpdHMoKTsKKyAg
ICBzdG9yZTMyKFRydXN0ZWRJbW0zMihsb2NhdGlvbkJpdHMpLCB0YWdGb3IoQ2FsbEZyYW1lU2xv
dDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKTsKKworICAgIGlmIChtYXhGcmFtZUV4dGVu
dEZvclNsb3dQYXRoQ2FsbCkKKyAgICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtc3RhdGljX2Nh
c3Q8aW50MzJfdD4obWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpKSwgc3RhY2tQb2ludGVy
UmVnaXN0ZXIpOworCisgICAgc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUob3BlcmF0aW9uVGhyb3dT
dGFja092ZXJmbG93RXJyb3IpPihjb2RlQmxvY2tHUFIpOworICAgIHByZXBhcmVDYWxsT3BlcmF0
aW9uKHZtKTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBvcGVyYXRpb25DYWxsID0gY2FsbChP
cGVyYXRpb25QdHJUYWcpOworICAgIEp1bXAgaGFuZGxlRXhjZXB0aW9uSnVtcCA9IGp1bXAoKTsK
KworICAgIGF1dG8gaGFuZGxlciA9IHZtLmdldENUSVN0dWIoaGFuZGxlRXhjZXB0aW9uV2l0aENh
bGxGcmFtZVJvbGxiYWNrR2VuZXJhdG9yKTsKKworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIo
KnRoaXMsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6RXh0cmFDVElUaHVu
ayk7CisgICAgcGF0Y2hCdWZmZXIubGluayhvcGVyYXRpb25DYWxsLCBGdW5jdGlvblB0cjxPcGVy
YXRpb25QdHJUYWc+KG9wZXJhdGlvblRocm93U3RhY2tPdmVyZmxvd0Vycm9yKSk7CisgICAgcGF0
Y2hCdWZmZXIubGluayhoYW5kbGVFeGNlcHRpb25KdW1wLCBDb2RlTG9jYXRpb25MYWJlbChoYW5k
bGVyLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkpOworICAgIHJldHVybiBGSU5BTElaRV9DT0RF
KHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgdGh1bmtOYW1lKTsKK30KKworc3RhdGljIGNv
bnN0ZXhwciBib29sIGRvZXNQcm9maWxpbmcgPSB0cnVlOworc3RhdGljIGNvbnN0ZXhwciBib29s
IGlzQ29uc3RydWN0b3IgPSB0cnVlOworc3RhdGljIGNvbnN0ZXhwciBib29sIGhhc0h1Z2VGcmFt
ZSA9IHRydWU7CisKKyNkZWZpbmUgREVGSU5FX1BST0dMT0dVRV9HRU5FUkFUT1IoZG9lc1Byb2Zp
bGluZywgaXNDb25zdHJ1Y3RvciwgaGFzSHVnZUZyYW1lLCBuYW1lLCBhcml0eUZpeHVwTmFtZSkg
XAorICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpuYW1lKFZN
JiB2bSkgXAorICAgIHsgXAorICAgICAgICBKSVQgaml0KHZtKTsgXAorICAgICAgICByZXR1cm4g
aml0LnByb2xvZ3VlR2VuZXJhdG9yKHZtLCBkb2VzUHJvZmlsaW5nLCBpc0NvbnN0cnVjdG9yLCBo
YXNIdWdlRnJhbWUsICJCYXNlbGluZTogIiAjbmFtZSk7IFwKKyAgICB9CisKK0ZPUl9FQUNIX1BS
T0xPR1VFX0dFTkVSQVRPUihERUZJTkVfUFJPR0xPR1VFX0dFTkVSQVRPUikKKyN1bmRlZiBERUZJ
TkVfUFJPR0xPR1VFX0dFTkVSQVRPUgorCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+IEpJVDo6YXJpdHlGaXh1cFByb2xvZ3VlR2VuZXJhdG9yKFZNJiB2bSwgYm9vbCBpc0Nv
bnN0cnVjdG9yLCBUaHVua0dlbmVyYXRvciBub3JtYWxQcm9sb2d1ZUdlbmVyYXRvciwgY29uc3Qg
Y2hhciogdGh1bmtOYW1lKQoreworICAgIC8vIFRoaXMgZnVuY3Rpb24gZ2VuZXJhdGVzIHRoZSBC
YXNlbGluZSBKSVQncyBwcm9sb2d1ZSBjb2RlLiBJdCBpcyBub3QgdXNlYWJsZSBieSBvdGhlciB0
aWVycy4KKyAgICBjb25zdGV4cHIgR1BSUmVnIGNvZGVCbG9ja0dQUiA9IHJlZ1Q3OyAvLyBpbmNv
bWluZy4KKyAgICBjb25zdGV4cHIgR1BSUmVnIG51bVBhcmFtZXRlcnNHUFIgPSByZWdUNjsKKwor
ICAgIHRhZ1JldHVybkFkZHJlc3MoKTsKKyNpZiBDUFUoWDg2XzY0KQorICAgIHB1c2goZnJhbWVQ
b2ludGVyUmVnaXN0ZXIpOworI2VsaWYgQ1BVKEFSTTY0KQorICAgIHB1c2hQYWlyKGZyYW1lUG9p
bnRlclJlZ2lzdGVyLCBsaW5rUmVnaXN0ZXIpOworI2VuZGlmCisKKyAgICBzdG9yZTY0KGNvZGVC
bG9ja0dQUiwgYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spKTsKKyAgICBzdG9y
ZTgoVHJ1c3RlZEltbTMyKDApLCBBZGRyZXNzKGNvZGVCbG9ja0dQUiwgQ29kZUJsb2NrOjpvZmZz
ZXRPZlNob3VsZEFsd2F5c0JlSW5saW5lZCgpKSk7CisKKyAgICBsb2FkMzIocGF5bG9hZEZvcihD
YWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyksIHJlZ1QxKTsKKyAgICBs
b2FkMzIoQWRkcmVzcyhjb2RlQmxvY2tHUFIsIENvZGVCbG9jazo6b2Zmc2V0T2ZOdW1QYXJhbWV0
ZXJzKCkpLCBudW1QYXJhbWV0ZXJzR1BSKTsKKyAgICBKdW1wIG5vRml4dXBOZWVkZWQgPSBicmFu
Y2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBudW1QYXJhbWV0ZXJzR1BSKTsKKworICAgIGlmIGNv
bnN0ZXhwciAobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpCisgICAgICAgIGFkZFB0cihU
cnVzdGVkSW1tMzIoLXN0YXRpY19jYXN0PGludDMyX3Q+KG1heEZyYW1lRXh0ZW50Rm9yU2xvd1Bh
dGhDYWxsKSksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKworICAgIGxvYWRQdHIoQWRkcmVzcyhj
b2RlQmxvY2tHUFIsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIGFyZ3VtZW50
R1BSMCk7CisKKyAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShvcGVyYXRp
b25Db25zdHJ1Y3RBcml0eUNoZWNrKSwgZGVjbHR5cGUob3BlcmF0aW9uQ2FsbEFyaXR5Q2hlY2sp
Pjo6dmFsdWUpOworICAgIHNldHVwQXJndW1lbnRzPGRlY2x0eXBlKG9wZXJhdGlvbkNhbGxBcml0
eUNoZWNrKT4oYXJndW1lbnRHUFIwKTsKKyAgICBwcmVwYXJlQ2FsbE9wZXJhdGlvbih2bSk7CisK
KyAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcml0eUNoZWNrQ2FsbCA9IGNhbGwoT3BlcmF0aW9u
UHRyVGFnKTsKKyAgICBKdW1wIGhhbmRsZUV4Y2VwdGlvbkp1bXAgPSBlbWl0Tm9uUGF0Y2hhYmxl
RXhjZXB0aW9uQ2hlY2sodm0pOworCisgICAgaWYgY29uc3RleHByIChtYXhGcmFtZUV4dGVudEZv
clNsb3dQYXRoQ2FsbCkKKyAgICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihtYXhGcmFtZUV4dGVu
dEZvclNsb3dQYXRoQ2FsbCksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBKdW1wIG5lZWRG
aXh1cCA9IGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUik7CisgICAgbm9GaXh1
cE5lZWRlZC5saW5rKHRoaXMpOworCisgICAgLy8gVGhlIG5vcm1hbCBwcm9sb2d1ZSBleHBlY3Rz
IGluY29taW5nIGNvZGVCbG9ja0dQUi4KKyAgICBsb2FkNjQoYWRkcmVzc0ZvcihDYWxsRnJhbWVT
bG90Ojpjb2RlQmxvY2spLCBjb2RlQmxvY2tHUFIpOworCisjaWYgQ1BVKFg4Nl82NCkKKyAgICBw
b3AoZnJhbWVQb2ludGVyUmVnaXN0ZXIpOworI2VsaWYgQ1BVKEFSTTY0KQorICAgIHBvcFBhaXIo
ZnJhbWVQb2ludGVyUmVnaXN0ZXIsIGxpbmtSZWdpc3Rlcik7CisjZW5kaWYKKyAgICB1bnRhZ1Jl
dHVybkFkZHJlc3MoKTsKKworICAgIEp1bXBMaXN0IG5vcm1hbFByb2xvZ3VlSnVtcDsKKyAgICBu
b3JtYWxQcm9sb2d1ZUp1bXAuYXBwZW5kKGp1bXAoKSk7CisKKyAgICBuZWVkRml4dXAubGluayh0
aGlzKTsKKworICAgIC8vIFJlc3RvcmUgdGhlIHN0YWNrIGZvciBhcml0eSBmaXh1cCwgYW5kIHBy
ZXNlcnZlIHRoZSByZXR1cm4gYWRkcmVzcy4KKyAgICAvLyBhcml0eUZpeHVwR2VuZXJhdG9yIHdp
bGwgYmUgc2hpZnRpbmcgdGhlIHN0YWNrLiBTbywgd2UgY2FuJ3QgdXNlIHRoZSBzdGFjayB0bwor
ICAgIC8vIHByZXNlcnZlIHRoZSByZXR1cm4gYWRkcmVzcy4gV2UgYWxzbyBjYW4ndCB1c2UgY2Fs
bGVlIHNhdmVkIHJlZ2lzdGVycyBiZWNhdXNlCisgICAgLy8gdGhleSBoYXZlbid0IGJlZW4gc2F2
ZWQgeWV0LgorICAgIC8vCisgICAgLy8gYXJpdHlGaXh1cEdlbmVyYXRvciBpcyBjYXJlZnVsbHkg
Y3JhZnRlZCB0byBvbmx5IHVzZSBhMCwgYTEsIGEyLCB0MywgdDQgYW5kIHQ1LgorICAgIC8vIFNv
LCB0aGUgcmV0dXJuIGFkZHJlc3MgY2FuIGJlIHByZXNlcnZlZCBpbiByZWdUNy4KKyNpZiBDUFUo
WDg2XzY0KQorICAgIHBvcChhcmd1bWVudEdQUjIpOyAvLyBkaXNjYXJkLgorICAgIHBvcChyZWdU
Nyk7IC8vIHNhdmUgcmV0dXJuIGFkZHJlc3MuCisjZWxpZiBDUFUoQVJNNjQpCisgICAgcG9wUGFp
cihmcmFtZVBvaW50ZXJSZWdpc3RlciwgbGlua1JlZ2lzdGVyKTsKKyAgICB1bnRhZ1JldHVybkFk
ZHJlc3MoKTsKKyAgICBtb3ZlKGxpbmtSZWdpc3RlciwgcmVnVDcpOworICAgIGF1dG8gcmFuZG9t
UmV0dXJuQWRkcmVzc1RhZyA9IHJhbmRvbSgpOworICAgIG1vdmUoVHJ1c3RlZEltbTMyKHJhbmRv
bVJldHVybkFkZHJlc3NUYWcpLCByZWdUMSk7CisgICAgdGFnUHRyKHJlZ1QxLCByZWdUNyk7Cisj
ZW5kaWYKKyAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwor
ICAgIENhbGwgYXJpdHlGaXh1cENhbGwgPSBuZWFyQ2FsbCgpOworCisjaWYgQ1BVKFg4Nl82NCkK
KyAgICBwdXNoKHJlZ1Q3KTsgLy8gcmVzdG9yZSByZXR1cm4gYWRkcmVzcy4KKyNlbGlmIENQVShB
Uk02NCkKKyAgICBtb3ZlKFRydXN0ZWRJbW0zMihyYW5kb21SZXR1cm5BZGRyZXNzVGFnKSwgcmVn
VDEpOworICAgIHVudGFnUHRyKHJlZ1QxLCByZWdUNyk7CisgICAgbW92ZShyZWdUNywgbGlua1Jl
Z2lzdGVyKTsKKyNlbmRpZgorCisgICAgbG9hZDY0KGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6
Y29kZUJsb2NrKSwgY29kZUJsb2NrR1BSKTsKKyAgICBub3JtYWxQcm9sb2d1ZUp1bXAuYXBwZW5k
KGp1bXAoKSk7CisKKyAgICBhdXRvIGFyaXR5Q2hlY2tPcGVyYXRpb24gPSBpc0NvbnN0cnVjdG9y
ID8gb3BlcmF0aW9uQ29uc3RydWN0QXJpdHlDaGVjayA6IG9wZXJhdGlvbkNhbGxBcml0eUNoZWNr
OworICAgIGF1dG8gYXJpdHlGaXh1cCA9IHZtLmdldENUSVN0dWIoYXJpdHlGaXh1cEdlbmVyYXRv
cik7CisgICAgYXV0byBub3JtYWxQcm9sb2d1ZSA9IHZtLmdldENUSVN0dWIobm9ybWFsUHJvbG9n
dWVHZW5lcmF0b3IpOworICAgIGF1dG8gZXhjZXB0aW9uSGFuZGxlciA9IHZtLmdldENUSVN0dWIo
cG9wVGh1bmtTdGFja1ByZXNlcnZlc0FuZEhhbmRsZUV4Y2VwdGlvbkdlbmVyYXRvcik7CisKKyAg
ICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp0aGlzLCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZm
ZXI6OlByb2ZpbGU6OkV4dHJhQ1RJVGh1bmspOworICAgIHBhdGNoQnVmZmVyLmxpbmsoYXJpdHlD
aGVja0NhbGwsIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4oYXJpdHlDaGVja09wZXJhdGlv
bikpOworICAgIHBhdGNoQnVmZmVyLmxpbmsoYXJpdHlGaXh1cENhbGwsIEZ1bmN0aW9uUHRyKGFy
aXR5Rml4dXAucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7CisgICAgcGF0Y2hCdWZmZXIubGlu
ayhub3JtYWxQcm9sb2d1ZUp1bXAsIENvZGVMb2NhdGlvbkxhYmVsKG5vcm1hbFByb2xvZ3VlLnJl
dGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkpOworICAgIHBhdGNoQnVmZmVyLmxpbmsoaGFuZGxlRXhj
ZXB0aW9uSnVtcCwgQ29kZUxvY2F0aW9uTGFiZWwoZXhjZXB0aW9uSGFuZGxlci5yZXRhZ2dlZENv
ZGU8Tm9QdHJUYWc+KCkpKTsKKyAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwg
SklUVGh1bmtQdHJUYWcsIHRodW5rTmFtZSk7Cit9CisKKyNkZWZpbmUgREVGSU5FX0FSSVRZX1BS
T0dMT0dVRV9HRU5FUkFUT1IoZG9lc1Byb2ZpbGluZywgaXNDb25zdHJ1Y3RvciwgaGFzSHVnZUZy
YW1lLCBuYW1lLCBhcml0eUZpeHVwTmFtZSkgXAorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiBKSVQ6OmFyaXR5Rml4dXBOYW1lKFZNJiB2bSkgXAorICAgIHsgXAorICAgICAg
ICBKSVQgaml0KHZtKTsgXAorICAgICAgICByZXR1cm4gaml0LmFyaXR5Rml4dXBQcm9sb2d1ZUdl
bmVyYXRvcih2bSwgaXNDb25zdHJ1Y3RvciwgbmFtZSwgIkJhc2VsaW5lOiAiICNhcml0eUZpeHVw
TmFtZSk7IFwKKyAgICB9CisKK0ZPUl9FQUNIX1BST0xPR1VFX0dFTkVSQVRPUihERUZJTkVfQVJJ
VFlfUFJPR0xPR1VFX0dFTkVSQVRPUikKKyN1bmRlZiBERUZJTkVfQVJJVFlfUFJPR0xPR1VFX0dF
TkVSQVRPUgorCisjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCisKIHZvaWQgSklU
OjpsaW5rKCkKIHsKICAgICBMaW5rQnVmZmVyJiBwYXRjaEJ1ZmZlciA9ICptX2xpbmtCdWZmZXI7
CkBAIC0xMDQ2LDkgKzEzNTcsOSBAQCBDb21waWxhdGlvblJlc3VsdCBKSVQ6OnByaXZhdGVDb21w
aWxlKEpJCiAgICAgcmV0dXJuIGZpbmFsaXplT25NYWluVGhyZWFkKCk7CiB9CiAKKyNpZiAhRU5B
QkxFKEVYVFJBX0NUSV9USFVOS1MpCiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVFeGNlcHRpb25I
YW5kbGVycygpCiB7Ci0jaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogICAgIGlmICghbV9l
eGNlcHRpb25DaGVja3NXaXRoQ2FsbEZyYW1lUm9sbGJhY2suZW1wdHkoKSkgewogICAgICAgICBt
X2V4Y2VwdGlvbkNoZWNrc1dpdGhDYWxsRnJhbWVSb2xsYmFjay5saW5rKHRoaXMpOwogCkBAIC0x
MDczLDggKzEzODQsOCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVFeGNlcHRpb25IYW5kbGVy
CiAgICAgICAgIG1fZmFyQ2FsbHMuYXBwZW5kKEZhckNhbGxSZWNvcmQoY2FsbChPcGVyYXRpb25Q
dHJUYWcpLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbkxvb2t1cEV4Y2Vw
dGlvbkhhbmRsZXIpKSk7CiAgICAgICAgIGp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIodm0oKSk7CiAg
ICAgfQotI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogfQorI2VuZGlmIC8vICFF
TkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAogdm9pZCBKSVQ6OmRvTWFpblRocmVhZFByZXBhcmF0
aW9uQmVmb3JlQ29tcGlsZSgpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHJldmlz
aW9uIDI3ODUzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHdvcmtpbmcg
Y29weSkKQEAgLTMxOCw3ICszMTgsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIG1f
ZXhjZXB0aW9uQ2hlY2tzV2l0aENhbGxGcmFtZVJvbGxiYWNrLmFwcGVuZChlbWl0RXhjZXB0aW9u
Q2hlY2sodm0oKSkpOwogICAgICAgICB9CiAKKyNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1Mp
CiAgICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVFeGNlcHRpb25IYW5kbGVycygpOworI2VuZGlm
CiAKICAgICAgICAgdm9pZCBhZHZhbmNlVG9OZXh0Q2hlY2twb2ludCgpOwogICAgICAgICB2b2lk
IGVtaXRKdW1wU2xvd1RvSG90Rm9yQ2hlY2twb2ludChKdW1wKTsKQEAgLTc5MCw2ICs3OTIsMjYg
QEAgbmFtZXNwYWNlIEpTQyB7CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICAg
ICAgLy8gVGh1bmsgZ2VuZXJhdG9ycy4KKyAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRUaHVua1B0clRhZz4gcHJvbG9ndWVHZW5lcmF0b3IwKFZNJik7CisgICAgICAgIHN0
YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHByb2xvZ3VlR2VuZXJh
dG9yMShWTSYpOworICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5r
UHRyVGFnPiBwcm9sb2d1ZUdlbmVyYXRvcjIoVk0mKTsKKyAgICAgICAgc3RhdGljIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gcHJvbG9ndWVHZW5lcmF0b3IzKFZNJik7Cisg
ICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHByb2xv
Z3VlR2VuZXJhdG9yNChWTSYpOworICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFRodW5rUHRyVGFnPiBwcm9sb2d1ZUdlbmVyYXRvcjUoVk0mKTsKKyAgICAgICAgc3RhdGlj
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gcHJvbG9ndWVHZW5lcmF0b3I2
KFZNJik7CisgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IHByb2xvZ3VlR2VuZXJhdG9yNyhWTSYpOworICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+IHByb2xvZ3VlR2VuZXJhdG9yKFZNJiwgYm9vbCBkb2VzUHJvZmls
aW5nLCBib29sIGlzQ29uc3RydWN0b3IsIGJvb2wgaGFzSHVnZUZyYW1lLCBjb25zdCBjaGFyKiBu
YW1lKTsKKworICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBhcml0eUZpeHVwX3Byb2xvZ3VlR2VuZXJhdG9yMChWTSYpOworICAgICAgICBzdGF0aWMg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBhcml0eUZpeHVwX3Byb2xvZ3Vl
R2VuZXJhdG9yMShWTSYpOworICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiBhcml0eUZpeHVwX3Byb2xvZ3VlR2VuZXJhdG9yMihWTSYpOworICAgICAg
ICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBhcml0eUZpeHVw
X3Byb2xvZ3VlR2VuZXJhdG9yMyhWTSYpOworICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiBhcml0eUZpeHVwX3Byb2xvZ3VlR2VuZXJhdG9yNChWTSYp
OworICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBh
cml0eUZpeHVwX3Byb2xvZ3VlR2VuZXJhdG9yNShWTSYpOworICAgICAgICBzdGF0aWMgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBhcml0eUZpeHVwX3Byb2xvZ3VlR2VuZXJh
dG9yNihWTSYpOworICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5r
UHRyVGFnPiBhcml0eUZpeHVwX3Byb2xvZ3VlR2VuZXJhdG9yNyhWTSYpOworICAgICAgICBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGFyaXR5Rml4dXBQcm9sb2d1ZUdlbmVy
YXRvcihWTSYsIGJvb2wgaXNDb25zdHJ1Y3RvciwgVGh1bmtHZW5lcmF0b3Igbm9ybWFsUHJvbG9n
dWVHZW5lcmF0b3IsIGNvbnN0IGNoYXIqIG5hbWUpOworCiAgICAgICAgIHN0YXRpYyBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHNsb3dfb3BfZGVsX2J5X2lkX3ByZXBhcmVD
YWxsR2VuZXJhdG9yKFZNJik7CiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IHNsb3dfb3BfZGVsX2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRvcihW
TSYpOwogICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiBzbG93X29wX2dldF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvcihWTSYpOwpAQCAtODA0LDcg
KzgyNiwxNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRUaHVua1B0clRhZz4gc2xvd19vcF9yZXNvbHZlX3Njb3BlR2VuZXJhdG9yKFZN
Jik7CiAKICAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gb3BfY2hlY2tfdHJhcHNfaGFuZGxlckdlbmVyYXRvcihWTSYpOwotICAgICAgICBzdGF0aWMg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvcF9lbnRlcl9oYW5kbGVyR2Vu
ZXJhdG9yKFZNJik7CisKKyAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gb3BfZW50ZXJfY2FuQmVPcHRpbWl6ZWRfR2VuZXJhdG9yKFZNJik7CisgICAg
ICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9wX2VudGVy
X2Nhbm5vdEJlT3B0aW1pemVkX0dlbmVyYXRvcihWTSYpOworICAgICAgICBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9wX2VudGVyX0dlbmVyYXRvcihWTSYsIGJvb2wgY2Fu
QmVPcHRpbWl6ZWQsIGNvbnN0IGNoYXIqIHRodW5rTmFtZSk7CisKKyNpZiBFTkFCTEUoREZHX0pJ
VCkKKyAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
b3BfbG9vcF9oaW50X0dlbmVyYXRvcihWTSYpOworI2VuZGlmCiAgICAgICAgIHN0YXRpYyBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9wX3JldF9oYW5kbGVyR2VuZXJhdG9y
KFZNJik7CiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IG9wX3Rocm93X2hhbmRsZXJHZW5lcmF0b3IoVk0mKTsKIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgJKHJldmlzaW9uIDI3ODUzNykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC05MSw3ICs5MSw2
IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRMb2FkQ2hhcmFjdGUKIAogQUxXQVlTX0lO
TElORSBKSVQ6OkNhbGwgSklUOjplbWl0TmFrZWROZWFyQ2FsbChDb2RlUHRyPE5vUHRyVGFnPiB0
YXJnZXQpCiB7Ci0gICAgQVNTRVJUKG1fYnl0ZWNvZGVJbmRleCk7IC8vIFRoaXMgbWV0aG9kIHNo
b3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0
aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQuCiAgICAgQ2FsbCBuYWtlZENhbGwgPSBuZWFyQ2Fs
bCgpOwogICAgIG1fbmVhckNhbGxzLmFwcGVuZChOZWFyQ2FsbFJlY29yZChuYWtlZENhbGwsIEZ1
bmN0aW9uUHRyPEpTSW50ZXJuYWxQdHJUYWc+KHRhcmdldC5yZXRhZ2dlZDxKU0ludGVybmFsUHRy
VGFnPigpKSkpOwogICAgIHJldHVybiBuYWtlZENhbGw7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCShyZXZpc2lvbiAyNzg1MzcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEwNjYsNyArMTA2Niw3IEBAIHZvaWQgSklUOjplbWl0X29wX2VudGVyKGNvbnN0IElu
c3RydWN0aW8KICAgICAvLyBFdmVuIHRob3VnaCBKSVQgY29kZSBkb2Vzbid0IHVzZSB0aGVtLCB3
ZSBpbml0aWFsaXplIG91ciBjb25zdGFudAogICAgIC8vIHJlZ2lzdGVycyB0byB6YXAgc3RhbGUg
cG9pbnRlcnMsIHRvIGF2b2lkIHVubmVjZXNzYXJpbHkgcHJvbG9uZ2luZwogICAgIC8vIG9iamVj
dCBsaWZldGltZSBhbmQgaW5jcmVhc2luZyBHQyBwcmVzc3VyZS4KLSAgICBmb3IgKGludCBpID0g
Q29kZUJsb2NrOjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJz
KCk7IGkgPCBtX2NvZGVCbG9jay0+bnVtVmFycygpOyArK2kpCisgICAgZm9yICh1bnNpZ25lZCBp
ID0gQ29kZUJsb2NrOjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0
ZXJzKCk7IGkgPCBtX2NvZGVCbG9jay0+bnVtVmFycygpOyArK2kpCiAgICAgICAgIGVtaXRTdG9y
ZSh2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpKSwganNVbmRlZmluZWQoKSk7CiAKICAgICBKSVRT
bG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19w
YXRoX2VudGVyKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNw
cAkocmV2aXNpb24gMjc4NTM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNv
ZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzc2LDcgKzM3Niw3IEBAIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICBKSVQgaml0KHZtKTsKIAogICAgIGppdC5j
aGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwotICAgIGppdC5lbWl0UmVzdG9yZUNhbGxlZVNh
dmVzRm9yKCZSZWdpc3RlckF0T2Zmc2V0TGlzdDo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVSZWdp
c3RlcnMoKSk7CisgICAgaml0LmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXNGb3JCYXNlbGluZUpJVCgp
OwogICAgIGppdC5lbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOwogICAgIGppdC5yZXQoKTsKIApAQCAt
MTE4NiwxMDMgKzExODYsMTE1IEBAIHZvaWQgSklUOjplbWl0X29wX2VudGVyKGNvbnN0IEluc3Ry
dWN0aW8KICAgICBlbWl0RW50ZXJPcHRpbWl6YXRpb25DaGVjaygpOwogI2Vsc2UKICAgICBBU1NF
UlQobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpID09IDApOwotICAgIGNvbnN0ZXhwciBHUFJSZWcg
bG9jYWxzVG9Jbml0R1BSID0gYXJndW1lbnRHUFIwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgY2Fu
QmVPcHRpbWl6ZWRHUFIgPSBhcmd1bWVudEdQUjQ7Ci0KICAgICB1bnNpZ25lZCBsb2NhbHNUb0lu
aXQgPSBjb3VudCAtIENvZGVCbG9jazo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVTcGFjZUFzVmly
dHVhbFJlZ2lzdGVycygpOwogICAgIFJFTEVBU0VfQVNTRVJUKGxvY2Fsc1RvSW5pdCA8IGNvdW50
KTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMihsb2NhbHNUb0luaXQgKiBzaXplb2YoUmVnaXN0ZXIp
KSwgbG9jYWxzVG9Jbml0R1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMihjYW5CZU9wdGltaXpl
ZCgpKSwgY2FuQmVPcHRpbWl6ZWRHUFIpOwotICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtKCkuZ2V0
Q1RJU3R1YihvcF9lbnRlcl9oYW5kbGVyR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+
KCkpOworICAgIFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvciA9IGNhbkJlT3B0aW1pemVkKCkgPyBv
cF9lbnRlcl9jYW5CZU9wdGltaXplZF9HZW5lcmF0b3IgOiBvcF9lbnRlcl9jYW5ub3RCZU9wdGlt
aXplZF9HZW5lcmF0b3I7CisgICAgZW1pdE5ha2VkTmVhckNhbGwodm0oKS5nZXRDVElTdHViKGdl
bmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhU
UkFfQ1RJX1RIVU5LUykKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6Om9wX2VudGVyX2hhbmRsZXJHZW5l
cmF0b3IoVk0mIHZtKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6
Om9wX2VudGVyX0dlbmVyYXRvcihWTSYgdm0sIGJvb2wgY2FuQmVPcHRpbWl6ZWQsIGNvbnN0IGNo
YXIqIHRodW5rTmFtZSkKIHsKLSAgICBKSVQgaml0KHZtKTsKLQogI2lmIENQVShYODZfNjQpCi0g
ICAgaml0LnB1c2goWDg2UmVnaXN0ZXJzOjplYnApOworICAgIHB1c2goWDg2UmVnaXN0ZXJzOjpl
YnApOwogI2VsaWYgQ1BVKEFSTTY0KQotICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7Ci0gICAg
aml0LnB1c2hQYWlyKGZyYW1lUG9pbnRlclJlZ2lzdGVyLCBsaW5rUmVnaXN0ZXIpOworICAgIHRh
Z1JldHVybkFkZHJlc3MoKTsKKyAgICBwdXNoUGFpcihmcmFtZVBvaW50ZXJSZWdpc3RlciwgbGlu
a1JlZ2lzdGVyKTsKICNlbmRpZgogICAgIC8vIG9wX2VudGVyIGlzIGFsd2F5cyBhdCBieXRlY29k
ZU9mZnNldCAwLgotICAgIGppdC5zdG9yZTMyKFRydXN0ZWRJbW0zMigwKSwgdGFnRm9yKENhbGxG
cmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSk7CisgICAgc3RvcmUzMihUcnVz
dGVkSW1tMzIoMCksIHRhZ0ZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcykpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBsb2NhbHNUb0luaXRHUFIgPSBhcmd1bWVu
dEdQUjA7CiAgICAgY29uc3RleHByIEdQUlJlZyBpdGVyYXRvckdQUiA9IGFyZ3VtZW50R1BSMTsK
ICAgICBjb25zdGV4cHIgR1BSUmVnIGVuZEdQUiA9IGFyZ3VtZW50R1BSMjsKICAgICBjb25zdGV4
cHIgR1BSUmVnIHVuZGVmaW5lZEdQUiA9IGFyZ3VtZW50R1BSMzsKLSAgICBjb25zdGV4cHIgR1BS
UmVnIGNhbkJlT3B0aW1pemVkR1BSID0gYXJndW1lbnRHUFI0OworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgY29kZUJsb2NrR1BSID0gYXJndW1lbnRHUFI0OworCisgICAgY29uc3RleHByIGludCB2aXJ0
dWFsUmVnaXN0ZXJTaXplU2hpZnQgPSAzOworICAgIHN0YXRpY19hc3NlcnQoKDEgPDwgdmlydHVh
bFJlZ2lzdGVyU2l6ZVNoaWZ0KSA9PSBzaXplb2YoUmVnaXN0ZXIpKTsKKworICAgIGxvYWRQdHIo
YWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCBjb2RlQmxvY2tHUFIpOworICAg
IGxvYWQzMihBZGRyZXNzKGNvZGVCbG9ja0dQUiwgQ29kZUJsb2NrOjpvZmZzZXRPZk51bVZhcnMo
KSksIGxvY2Fsc1RvSW5pdEdQUik7CisgICAgc3ViMzIoVHJ1c3RlZEltbTMyKENvZGVCbG9jazo6
bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpKSwgbG9jYWxz
VG9Jbml0R1BSKTsKKyAgICBsc2hpZnQzMihUcnVzdGVkSW1tMzIodmlydHVhbFJlZ2lzdGVyU2l6
ZVNoaWZ0KSwgbG9jYWxzVG9Jbml0R1BSKTsKIAogICAgIHNpemVfdCBzdGFydExvY2FsID0gQ29k
ZUJsb2NrOjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCk7
CiAgICAgaW50IHN0YXJ0T2Zmc2V0ID0gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoc3RhcnRMb2Nh
bCkub2Zmc2V0KCk7Ci0gICAgaml0Lm1vdmUoVHJ1c3RlZEltbTY0KHN0YXJ0T2Zmc2V0ICogc2l6
ZW9mKFJlZ2lzdGVyKSksIGl0ZXJhdG9yR1BSKTsKLSAgICBqaXQuc3ViNjQoaXRlcmF0b3JHUFIs
IGxvY2Fsc1RvSW5pdEdQUiwgZW5kR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW02NChzdGFydE9m
ZnNldCAqIHNpemVvZihSZWdpc3RlcikpLCBpdGVyYXRvckdQUik7CisgICAgc3ViNjQoaXRlcmF0
b3JHUFIsIGxvY2Fsc1RvSW5pdEdQUiwgZW5kR1BSKTsKIAotICAgIGppdC5tb3ZlKFRydXN0ZWRJ
bW02NChKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSkpLCB1bmRlZmluZWRHUFIpOwotICAg
IGF1dG8gaW5pdExvb3AgPSBqaXQubGFiZWwoKTsKLSAgICBKdW1wIGluaXREb25lID0gaml0LmJy
YW5jaDMyKExlc3NUaGFuT3JFcXVhbCwgaXRlcmF0b3JHUFIsIGVuZEdQUik7CisgICAgbW92ZShU
cnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpKSwgdW5kZWZpbmVkR1BS
KTsKKyAgICBhdXRvIGluaXRMb29wID0gbGFiZWwoKTsKKyAgICBKdW1wIGluaXREb25lID0gYnJh
bmNoMzIoTGVzc1RoYW5PckVxdWFsLCBpdGVyYXRvckdQUiwgZW5kR1BSKTsKICAgICB7Ci0gICAg
ICAgIGppdC5zdG9yZTY0KHVuZGVmaW5lZEdQUiwgQmFzZUluZGV4KEdQUkluZm86OmNhbGxGcmFt
ZVJlZ2lzdGVyLCBpdGVyYXRvckdQUiwgVGltZXNPbmUpKTsKLSAgICAgICAgaml0LnN1YjY0KFRy
dXN0ZWRJbW0zMihzaXplb2YoUmVnaXN0ZXIpKSwgaXRlcmF0b3JHUFIpOwotICAgICAgICBqaXQu
anVtcChpbml0TG9vcCk7CisgICAgICAgIHN0b3JlNjQodW5kZWZpbmVkR1BSLCBCYXNlSW5kZXgo
R1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGl0ZXJhdG9yR1BSLCBUaW1lc09uZSkpOworICAg
ICAgICBzdWI2NChUcnVzdGVkSW1tMzIoc2l6ZW9mKFJlZ2lzdGVyKSksIGl0ZXJhdG9yR1BSKTsK
KyAgICAgICAganVtcChpbml0TG9vcCk7CiAgICAgfQotICAgIGluaXREb25lLmxpbmsoJmppdCk7
CisgICAgaW5pdERvbmUubGluayh0aGlzKTsKIAotICAgIC8vIGVtaXRXcml0ZUJhcnJpZXIobV9j
b2RlQmxvY2spLgotICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29k
ZUJsb2NrKSwgYXJndW1lbnRHUFIxKTsKLSAgICBKdW1wIG93bmVySXNSZW1lbWJlcmVkT3JJbkVk
ZW4gPSBqaXQuYmFycmllckJyYW5jaCh2bSwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwor
ICAgIC8vIEltcGxlbWVudGluZyBlbWl0V3JpdGVCYXJyaWVyKG1fY29kZUJsb2NrKS4KKyAgICBK
dW1wIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBiYXJyaWVyQnJhbmNoKHZtLCBjb2RlQmxv
Y2tHUFIsIGFyZ3VtZW50R1BSMik7CiAKLSAgICBqaXQubW92ZShjYW5CZU9wdGltaXplZEdQUiwg
R1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0ZXIpOyAvLyBzYXZlLgotICAgIGppdC5zZXR1cEFyZ3Vt
ZW50czxkZWNsdHlwZShvcGVyYXRpb25Xcml0ZUJhcnJpZXJTbG93UGF0aCk+KCZ2bSwgYXJndW1l
bnRHUFIxKTsKLSAgICBqaXQucHJlcGFyZUNhbGxPcGVyYXRpb24odm0pOwotICAgIENhbGwgb3Bl
cmF0aW9uV3JpdGVCYXJyaWVyQ2FsbCA9IGppdC5jYWxsKE9wZXJhdGlvblB0clRhZyk7CisgICAg
c2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUob3BlcmF0aW9uV3JpdGVCYXJyaWVyU2xvd1BhdGgpPigm
dm0sIGNvZGVCbG9ja0dQUik7CisgICAgcHJlcGFyZUNhbGxPcGVyYXRpb24odm0pOworICAgIENh
bGwgb3BlcmF0aW9uV3JpdGVCYXJyaWVyQ2FsbCA9IGNhbGwoT3BlcmF0aW9uUHRyVGFnKTsKKwor
ICAgIGlmIChjYW5CZU9wdGltaXplZCkKKyAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxG
cmFtZVNsb3Q6OmNvZGVCbG9jayksIGNvZGVCbG9ja0dQUik7CiAKLSAgICBqaXQubW92ZShHUFJJ
bmZvOjpudW1iZXJUYWdSZWdpc3RlciwgY2FuQmVPcHRpbWl6ZWRHUFIpOyAvLyByZXN0b3JlLgot
ICAgIGppdC5tb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpOdW1iZXJUYWcpLCBHUFJJbmZvOjpu
dW1iZXJUYWdSZWdpc3Rlcik7Ci0gICAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbi5saW5rKCZq
aXQpOworICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4ubGluayh0aGlzKTsKIAogI2lmIEVO
QUJMRShERkdfSklUKQorICAgIC8vIEltcGxlbWVudGluZyBlbWl0RW50ZXJPcHRpbWl6YXRpb25D
aGVjaygpLgogICAgIENhbGwgb3BlcmF0aW9uT3B0aW1pemVDYWxsOwotICAgIGlmIChPcHRpb25z
Ojp1c2VERkdKSVQoKSkgewotICAgICAgICAvLyBlbWl0RW50ZXJPcHRpbWl6YXRpb25DaGVjaygp
LgorICAgIGlmIChjYW5CZU9wdGltaXplZCkgewogICAgICAgICBKdW1wTGlzdCBza2lwT3B0aW1p
emU7CiAKLSAgICAgICAgc2tpcE9wdGltaXplLmFwcGVuZChqaXQuYnJhbmNoVGVzdDMyKFplcm8s
IGNhbkJlT3B0aW1pemVkR1BSKSk7CisgICAgICAgIHNraXBPcHRpbWl6ZS5hcHBlbmQoYnJhbmNo
QWRkMzIoU2lnbmVkLCBUcnVzdGVkSW1tMzIoT3B0aW9uczo6ZXhlY3V0aW9uQ291bnRlckluY3Jl
bWVudEZvckVudHJ5KCkpLCBBZGRyZXNzKGNvZGVCbG9ja0dQUiwgQ29kZUJsb2NrOjpvZmZzZXRP
ZkpJVEV4ZWN1dGVDb3VudGVyKCkpKSk7CiAKLSAgICAgICAgaml0LmxvYWRQdHIoYWRkcmVzc0Zv
cihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCBhcmd1bWVudEdQUjEpOwotICAgICAgICBza2lw
T3B0aW1pemUuYXBwZW5kKGppdC5icmFuY2hBZGQzMihTaWduZWQsIFRydXN0ZWRJbW0zMihPcHRp
b25zOjpleGVjdXRpb25Db3VudGVySW5jcmVtZW50Rm9yRW50cnkoKSksIEFkZHJlc3MoYXJndW1l
bnRHUFIxLCBDb2RlQmxvY2s6Om9mZnNldE9mSklURXhlY3V0ZUNvdW50ZXIoKSkpKTsKKyAgICAg
ICAgY29weUxMSW50QmFzZWxpbmVDYWxsZWVTYXZlc0Zyb21GcmFtZU9yUmVnaXN0ZXJUb0VudHJ5
RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bS50b3BFbnRyeUZyYW1lKTsKIAotICAgICAgICBqaXQu
Y29weUxMSW50QmFzZWxpbmVDYWxsZWVTYXZlc0Zyb21GcmFtZU9yUmVnaXN0ZXJUb0VudHJ5RnJh
bWVDYWxsZWVTYXZlc0J1ZmZlcih2bS50b3BFbnRyeUZyYW1lKTsKKyAgICAgICAgc2V0dXBBcmd1
bWVudHM8ZGVjbHR5cGUob3BlcmF0aW9uT3B0aW1pemUpPigmdm0sIFRydXN0ZWRJbW0zMigwKSk7
CisgICAgICAgIHByZXBhcmVDYWxsT3BlcmF0aW9uKHZtKTsKKyAgICAgICAgb3BlcmF0aW9uT3B0
aW1pemVDYWxsID0gY2FsbChPcGVyYXRpb25QdHJUYWcpOwogCi0gICAgICAgIGppdC5zZXR1cEFy
Z3VtZW50czxkZWNsdHlwZShvcGVyYXRpb25PcHRpbWl6ZSk+KCZ2bSwgVHJ1c3RlZEltbTMyKDAp
KTsKLSAgICAgICAgaml0LnByZXBhcmVDYWxsT3BlcmF0aW9uKHZtKTsKLSAgICAgICAgb3BlcmF0
aW9uT3B0aW1pemVDYWxsID0gaml0LmNhbGwoT3BlcmF0aW9uUHRyVGFnKTsKLQotICAgICAgICBz
a2lwT3B0aW1pemUuYXBwZW5kKGppdC5icmFuY2hUZXN0UHRyKFplcm8sIHJldHVyblZhbHVlR1BS
KSk7Ci0gICAgICAgIGppdC5mYXJKdW1wKHJldHVyblZhbHVlR1BSLCBHUFJJbmZvOjpjYWxsRnJh
bWVSZWdpc3Rlcik7CisgICAgICAgIHNraXBPcHRpbWl6ZS5hcHBlbmQoYnJhbmNoVGVzdFB0ciha
ZXJvLCByZXR1cm5WYWx1ZUdQUikpOworICAgICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBH
UFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CiAKLSAgICAgICAgc2tpcE9wdGltaXplLmxpbmso
JmppdCk7CisgICAgICAgIHNraXBPcHRpbWl6ZS5saW5rKHRoaXMpOwogICAgIH0KICNlbmRpZiAv
LyBFTkFCTEUoREZHX0pJVCkKIAogI2lmIENQVShYODZfNjQpCi0gICAgaml0LnBvcChYODZSZWdp
c3RlcnM6OmVicCk7CisgICAgcG9wKFg4NlJlZ2lzdGVyczo6ZWJwKTsKICNlbGlmIENQVShBUk02
NCkKLSAgICBqaXQucG9wUGFpcihmcmFtZVBvaW50ZXJSZWdpc3RlciwgbGlua1JlZ2lzdGVyKTsK
KyAgICBwb3BQYWlyKGZyYW1lUG9pbnRlclJlZ2lzdGVyLCBsaW5rUmVnaXN0ZXIpOwogI2VuZGlm
Ci0gICAgaml0LnJldCgpOworICAgIHJldCgpOwogCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZl
cihqaXQsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6RXh0cmFDVElUaHVu
ayk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdGhpcywgR0xPQkFMX1RIVU5LX0lELCBM
aW5rQnVmZmVyOjpQcm9maWxlOjpFeHRyYUNUSVRodW5rKTsKICAgICBwYXRjaEJ1ZmZlci5saW5r
KG9wZXJhdGlvbldyaXRlQmFycmllckNhbGwsIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4o
b3BlcmF0aW9uV3JpdGVCYXJyaWVyU2xvd1BhdGgpKTsKICNpZiBFTkFCTEUoREZHX0pJVCkKLSAg
ICBpZiAoT3B0aW9uczo6dXNlREZHSklUKCkpCisgICAgaWYgKGNhbkJlT3B0aW1pemVkKQogICAg
ICAgICBwYXRjaEJ1ZmZlci5saW5rKG9wZXJhdGlvbk9wdGltaXplQ2FsbCwgRnVuY3Rpb25QdHI8
T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25PcHRpbWl6ZSkpOwogI2VuZGlmCi0gICAgcmV0dXJu
IEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCAiQmFzZWxpbmU6IG9w
X2VudGVyX2hhbmRsZXIiKTsKKyAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwg
SklUVGh1bmtQdHJUYWcsIHRodW5rTmFtZSk7Cit9CisKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gSklUOjpvcF9lbnRlcl9jYW5CZU9wdGltaXplZF9HZW5lcmF0b3IoVk0m
IHZtKQoreworICAgIEpJVCBqaXQodm0pOworICAgIGNvbnN0ZXhwciBib29sIGNhbkJlT3B0aW1p
emVkID0gdHJ1ZTsKKyAgICByZXR1cm4gaml0Lm9wX2VudGVyX0dlbmVyYXRvcih2bSwgY2FuQmVP
cHRpbWl6ZWQsICJCYXNlbGluZTogb3BfZW50ZXJfY2FuQmVPcHRpbWl6ZWQiKTsKK30KKworTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6Om9wX2VudGVyX2Nhbm5vdEJl
T3B0aW1pemVkX0dlbmVyYXRvcihWTSYgdm0pCit7CisgICAgSklUIGppdCh2bSk7CisgICAgY29u
c3RleHByIGJvb2wgY2FuQmVPcHRpbWl6ZWQgPSBmYWxzZTsKKyAgICByZXR1cm4gaml0Lm9wX2Vu
dGVyX0dlbmVyYXRvcih2bSwgY2FuQmVPcHRpbWl6ZWQsICJCYXNlbGluZTogb3BfZW50ZXJfY2Fu
bm90QmVPcHRpbWl6ZWQiKTsKIH0KICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykK
IApAQCAtMTQzNCwyMiArMTQ0NiwyNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9sb29wX2hpbnQoY29u
c3QgSW5zdHJ1CiAgICAgICAgIGFkZDY0KFRydXN0ZWRJbW0zMigxKSwgcmVnVDApOwogICAgICAg
ICBzdG9yZTY0KHJlZ1QwLCBwdHIpOwogICAgIH0KKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGlu
c3RydWN0aW9uKTsKICNlbmRpZgogCi0gICAgLy8gRW1pdCB0aGUgSklUIG9wdGltaXphdGlvbiBj
aGVjazogCisgICAgLy8gRW1pdCB0aGUgSklUIG9wdGltaXphdGlvbiBjaGVjazoKICAgICBpZiAo
Y2FuQmVPcHRpbWl6ZWQoKSkgeworICAgICAgICBjb25zdGV4cHIgR1BSUmVnIGNvZGVCbG9ja0dQ
UiA9IHJlZ1QwOworICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29k
ZUJsb2NrKSwgY29kZUJsb2NrR1BSKTsKICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoQWRkMzIo
UG9zaXRpdmVPclplcm8sIFRydXN0ZWRJbW0zMihPcHRpb25zOjpleGVjdXRpb25Db3VudGVySW5j
cmVtZW50Rm9yTG9vcCgpKSwKLSAgICAgICAgICAgIEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9j
ay0+YWRkcmVzc09mSklURXhlY3V0ZUNvdW50ZXIoKSkpKTsKKyAgICAgICAgICAgIEFkZHJlc3Mo
Y29kZUJsb2NrR1BSLCBDb2RlQmxvY2s6Om9mZnNldE9mSklURXhlY3V0ZUNvdW50ZXIoKSkpKTsK
ICAgICB9CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1Y3Rp
b24qIGluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQog
ewogI2lmIEVOQUJMRShERkdfSklUKQogICAgIC8vIEVtaXQgdGhlIHNsb3cgcGF0aCBmb3IgdGhl
IEpJVCBvcHRpbWl6YXRpb24gY2hlY2s6CiAgICAgaWYgKGNhbkJlT3B0aW1pemVkKCkpIHsKICAg
ICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAorI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RI
VU5LUykKICAgICAgICAgY29weUxMSW50QmFzZWxpbmVDYWxsZWVTYXZlc0Zyb21GcmFtZU9yUmVn
aXN0ZXJUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSgpLnRvcEVudHJ5RnJhbWUpOwog
CiAgICAgICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbk9wdGltaXpl
LCAmdm0oKSwgbV9ieXRlY29kZUluZGV4LmFzQml0cygpKTsKQEAgLTE0NjIsMTMgKzE0NzksODEg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2xvb3BfaGludChjb25zdCBJbgogICAgICAgICBmYXJK
dW1wKHJldHVyblZhbHVlR1BSLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CiAgICAgICAg
IG5vT3B0aW1pemVkRW50cnkubGluayh0aGlzKTsKIAotICAgICAgICBlbWl0SnVtcFNsb3dUb0hv
dChqdW1wKCksIGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpKTsKKyNlbHNlIC8vIEVOQUJMRShF
WFRSQV9DVElfVEhVTktTKQorICAgICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0
ZWNvZGVJbmRleC5vZmZzZXQoKTsKKyAgICAgICAgQVNTRVJUKEJ5dGVjb2RlSW5kZXgoYnl0ZWNv
ZGVPZmZzZXQpID09IG1fYnl0ZWNvZGVJbmRleCk7CisgICAgICAgIEFTU0VSVChtX2NvZGVCbG9j
ay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgpID09IGluc3RydWN0aW9uKTsKKworICAg
ICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDc7CisKKyAgICAg
ICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7
CisgICAgICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtKCkuZ2V0Q1RJU3R1YihvcF9sb29wX2hpbnRf
R2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOworI2VuZGlmIC8vICFFTkFCTEUo
RVhUUkFfQ1RJX1RIVU5LUykKICAgICB9Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShjdXJyZW50
SW5zdHJ1Y3Rpb24pOworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQogICAgIFVOVVNFRF9QQVJB
TShpdGVyKTsKKyAgICBVTlVTRURfUEFSQU0oaW5zdHJ1Y3Rpb24pOworfQorCisjaWYgRU5BQkxF
KEVYVFJBX0NUSV9USFVOS1MpCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKK01hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpvcF9sb29wX2hpbnRfR2VuZXJhdG9yKFZNJiB2
bSkKK3sKKyAgICAvLyBUaGUgdGh1bmsgZ2VuZXJhdGVkIGJ5IHRoaXMgZnVuY3Rpb24gY2FuIG9u
bHkgd29yayB3aXRoIHRoZSBMTEludCAvIEJhc2VsaW5lIEpJVCBiZWNhdXNlCisgICAgLy8gaXQg
bWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFp
bGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgorICAgIC8vIERGRy9GVEwgbWF5IGlu
bGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1h
eSBub3QgbWF0Y2gKKyAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgorICAgIEpJVCBqaXQo
dm0pOworCisgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKKworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNzsgLy8gaW5jb21pbmcuCisKKyNpZiBDUFUoWDg2
XzY0KQorICAgIGppdC5wdXNoKGZyYW1lUG9pbnRlclJlZ2lzdGVyKTsKKyNlbGlmIENQVShBUk02
NCkKKyAgICBqaXQucHVzaFBhaXIoZnJhbWVQb2ludGVyUmVnaXN0ZXIsIGxpbmtSZWdpc3Rlcik7
CisjZW5kaWYKKworICAgIGF1dG8gdXNlZFJlZ2lzdGVycyA9IFJlZ2lzdGVyU2V0OjpzdHViVW5h
dmFpbGFibGVSZWdpc3RlcnMoKTsKKyAgICB1c2VkUmVnaXN0ZXJzLmFkZChieXRlY29kZU9mZnNl
dEdQUik7CisgICAgaml0LmNvcHlMTEludEJhc2VsaW5lQ2FsbGVlU2F2ZXNGcm9tRnJhbWVPclJl
Z2lzdGVyVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0udG9wRW50cnlGcmFtZSwgdXNl
ZFJlZ2lzdGVycyk7CisKKyAgICBqaXQuc3RvcmUzMihieXRlY29kZU9mZnNldEdQUiwgQ0NhbGxI
ZWxwZXJzOjp0YWdGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMp
KTsKKyAgICBqaXQubHNoaWZ0MzIoVHJ1c3RlZEltbTMyKEJ5dGVjb2RlSW5kZXg6OmNoZWNrcG9p
bnRTaGlmdCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKKyAgICBqaXQuc2V0dXBBcmd1bWVudHM8ZGVj
bHR5cGUob3BlcmF0aW9uT3B0aW1pemUpPihUcnVzdGVkSW1tUHRyKCZ2bSksIGJ5dGVjb2RlT2Zm
c2V0R1BSKTsKKyAgICBqaXQucHJlcGFyZUNhbGxPcGVyYXRpb24odm0pOworICAgIENhbGwgb3Bl
cmF0aW9uQ2FsbCA9IGppdC5jYWxsKE9wZXJhdGlvblB0clRhZyk7CisgICAgSnVtcCBoYXNPcHRp
bWl6ZWRFbnRyeSA9IGppdC5icmFuY2hUZXN0UHRyKE5vblplcm8sIHJldHVyblZhbHVlR1BSKTsK
KworI2lmIENQVShYODZfNjQpCisgICAgaml0LnBvcChmcmFtZVBvaW50ZXJSZWdpc3Rlcik7Cisj
ZWxpZiBDUFUoQVJNNjQpCisgICAgaml0LnBvcFBhaXIoZnJhbWVQb2ludGVyUmVnaXN0ZXIsIGxp
bmtSZWdpc3Rlcik7CisjZW5kaWYKKyAgICBqaXQucmV0KCk7CisKKyAgICBoYXNPcHRpbWl6ZWRF
bnRyeS5saW5rKCZqaXQpOworI2lmIENQVShYODZfNjQpCisgICAgaml0LmFkZFB0cihDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW0zMigyICogc2l6ZW9mKENQVVJlZ2lzdGVyKSksIHN0YWNrUG9pbnRl
clJlZ2lzdGVyKTsKKyNlbGlmIENQVShBUk02NCkKKyAgICBqaXQucG9wUGFpcihmcmFtZVBvaW50
ZXJSZWdpc3RlciwgbGlua1JlZ2lzdGVyKTsKICNlbmRpZgorICAgIGlmIChBU1NFUlRfRU5BQkxF
RCkgeworICAgICAgICBKdW1wIG9rID0gaml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6QWJv
dmUsIHJldHVyblZhbHVlR1BSLCBUcnVzdGVkSW1tUHRyKGJpdHdpc2VfY2FzdDx2b2lkKj4oc3Rh
dGljX2Nhc3Q8aW50cHRyX3Q+KDEwMDApKSkpOworICAgICAgICBqaXQuYWJvcnRXaXRoUmVhc29u
KEpJVFVucmVhc29uYWJsZUxvb3BIaW50SnVtcFRhcmdldCk7CisgICAgICAgIG9rLmxpbmsoJmpp
dCk7CisgICAgfQorCisgICAgaml0LmZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEdQUkluZm86OmNh
bGxGcmFtZVJlZ2lzdGVyKTsKKworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9C
QUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OkV4dHJhQ1RJVGh1bmspOworICAgIHBh
dGNoQnVmZmVyLmxpbmsob3BlcmF0aW9uQ2FsbCwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFn
PihvcGVyYXRpb25PcHRpbWl6ZSkpOworICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVm
ZmVyLCBKSVRUaHVua1B0clRhZywgIkJhc2VsaW5lOiBvcF9sb29wX2hpbnQiKTsKIH0KKyNlbmRp
ZiAvLyBFTkFCTEUoREZHX0pJVCkKKyNlbmRpZiAvLyAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1Mp
CiAKIHZvaWQgSklUOjplbWl0X29wX2NoZWNrX3RyYXBzKGNvbnN0IEluc3RydWN0aW9uKikKIHsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAJ
KHJldmlzaW9uIDI3ODUzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5l
cmF0b3JzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODEsMTEgKzgxLDcgQEAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBwbwogewogICAgIENDYWxsSGVscGVycyBqaXQ7CiAK
LSNpZiBDUFUoWDg2XzY0KQotICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
MzIoMiAqIHNpemVvZihDUFVSZWdpc3RlcikpLCBYODZSZWdpc3RlcnM6OmVzcCk7Ci0jZWxpZiBD
UFUoQVJNNjQpCi0gICAgaml0LnBvcFBhaXIoQ0NhbGxIZWxwZXJzOjpmcmFtZVBvaW50ZXJSZWdp
c3RlciwgQ0NhbGxIZWxwZXJzOjpsaW5rUmVnaXN0ZXIpOwotI2VuZGlmCisgICAgaml0LmFkZFB0
cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigyICogc2l6ZW9mKENQVVJlZ2lzdGVyKSksIEND
YWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogCiAgICAgQ0NhbGxIZWxwZXJzOjpK
dW1wIGNvbnRpbnVhdGlvbiA9IGppdC5qdW1wKCk7CiAK
</data>
<flag name="commit-queue"
          id="452242"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>430692</attachid>
            <date>2021-06-06 11:45:49 -0700</date>
            <delta_ts>2021-06-06 23:32:05 -0700</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-226375.patch</filename>
            <type>text/plain</type>
            <size>54014</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjc4NTM3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc3IEBA
CisyMDIxLTA2LTA0ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBQ
dXQgdGhlIEJhc2VsaW5lIEpJVCBwcm9sb2d1ZSBhbmQgb3BfbG9vcF9oaW50IGNvZGUgaW4gSklU
IHRodW5rcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIyNjM3NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFRoZSBwcm9sb2d1ZSB1c2VzIDEgb2YgOCBwb3NzaWJsZSBzcGVjaWFsaXplZCB0aHVua3MgdG8g
cmVkdWNlIHRoZSBuZWVkIHRvIHBhc3MKKyAgICAgICAgYXJndW1lbnRzLiAgVGhlIG9ubHkgbmVl
ZGVkIGFyZ3VtZW50IGlzIHRoZSBjb2RlQmxvY2sgcG9pbnRlci4KKyAgICAgICAgVGhlcmUgYXJl
IGFsc28gOCBhbmFsb2dvdXMgYXJpdHkgZml4dXAgcHJvbG9ndWVzIHRoYXQgd29yayBzaW1pbGFy
bHkuCisKKyAgICAgICAgVGhlIG9wX2xvb3BfaGludCB0aHVuayBvbmx5IHRha2VzIDEgYXJndW1l
bnQ6IHRoZSBieXRlY29kZSBvZmZzZXQuCisgICAgICAgIEkgaGFkIHRyaWVkIGRvaW5nIHRoZSBs
b29wX2hpbnQgb3B0aW1pemF0aW9uIGNoZWNrIGluIHRoZSB0aHVuaywgYnV0IHRoaXMgc2VlbXMK
KyAgICAgICAgdG8gaGF2ZSBzb21lIHNsaWdodCBuZWdhdGl2ZSBpbXBhY3Qgb24gYmVuY2htYXJr
IHBlcmZvcm1hbmNlLiAgSSBlbmRlZCB1cCBqdXN0CisgICAgICAgIGdvaW5nIHdpdGggbW92aW5n
IHRoZSBzbG93IHBhdGggaW50byBhIHRodW5rLgorCisgICAgICAgIEFsc28gb3B0aW1pemVkIG9w
X2VudGVyIGEgYml0IG1vcmUgYnkgZWxpbWluYXRpbmcgdGhlIG5lZWQgdG8gcGFzcyBhbnkKKyAg
ICAgICAgYXJndW1lbnRzIHRvIHRoZSB0aHVuay4gIGxvY2Fsc1RvSW5pdEdQUiBpcyBub3cgY29t
cHV0ZWQgaW4gdGhlIHRodW5rLgorICAgICAgICBjYW5CZU9wdGltaXplZCBpcyBvYnZpYXRlZCBi
eSB1c2luZyBzcGVjaWFsaXplZCB0aHVua3MuCisKKyAgICAgICAgTGlua0J1ZmZlciBzaXplIHJl
c3VsdHM6CisKKyAgICAgICAgICAgQmFzZWxpbmVKSVQ6IDkzMzE5NjI4ICg4OC45OTY1MzIgTUIp
ICAgPT4gODM4NTE4MjQgKDc5Ljk2NzMzMSBNQikgICAwLjkweAorICAgICAgICAgRXh0cmFDVElU
aHVuazogNTk5MiAoNS44NTE1NjIgS0IpICAgICAgICA9PiA2OTg0ICg2LjgyMDMxMiBLQikgICAg
ICAgIDEuMTd4CisgICAgICAgICAgICAgICAgICAgICAgICAuLi4KKyAgICAgICAgICAgICAgICAg
VG90YWw6IDE5NzUzMDAwOCAoMTg4LjM3OTI5NSBNQikgPT4gMTg4NDU5NDQ0ICgxNzkuNzI4OTMx
IE1CKSAwLjk1eAorCisgICAgICAgIFNwZWVkb21ldGVyMiBhbmQgSmV0U3RyZWFtMiByZXN1bHRz
IChhcyBtZWFzdXJlZCBvbiBhbiBNMSBNYWMpIGFyZSBuZXV0cmFsLgorCisgICAgICAgICogYXNz
ZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaDoKKyAgICAgICAgKEpTQzo6QWJzdHJhY3RN
YWNyb0Fzc2VtYmxlcjo6dW50YWdSZXR1cm5BZGRyZXNzV2l0aG91dEV4dHJhVmFsaWRhdGlvbik6
CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaDoKKyAgICAgICAgKEpT
Qzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6bmVnYXRlNjQpOgorICAgICAgICAqIGFzc2VtYmxlci9N
YWNyb0Fzc2VtYmxlckFSTTY0RS5oOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0
RTo6dW50YWdSZXR1cm5BZGRyZXNzKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02
NEU6OnVudGFnUmV0dXJuQWRkcmVzc1dpdGhvdXRFeHRyYVZhbGlkYXRpb24pOgorICAgICAgICAq
IGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTXY3Lmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNz
ZW1ibGVyQVJNdjc6OmJyYW5jaEFkZDMyKToKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3Nl
bWJsZXJNSVBTLmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyTUlQUzo6YnJhbmNoQWRk
MzIpOgorICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oOgorICAgICAg
ICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4Nl82NDo6bmVnYXRlNjQpOgorICAgICAgICAqIGJ5dGVj
b2RlL0NvZGVCbG9jay5oOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om9mZnNldE9mTnVtQ2Fs
bGVlTG9jYWxzKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpvZmZzZXRPZk51bVZhcnMpOgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om9mZnNldE9mQXJndW1lbnRWYWx1ZVByb2ZpbGVzKToK
KyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpvZmZzZXRPZlNob3VsZEFsd2F5c0JlSW5saW5lZCk6
CisgICAgICAgICogaml0L0Fzc2VtYmx5SGVscGVycy5oOgorICAgICAgICAoSlNDOjpBc3NlbWJs
eUhlbHBlcnM6OmVtaXRTYXZlQ2FsbGVlU2F2ZXNGb3IpOgorICAgICAgICAoSlNDOjpBc3NlbWJs
eUhlbHBlcnM6OmVtaXRTYXZlQ2FsbGVlU2F2ZXNGb3JCYXNlbGluZUpJVCk6CisgICAgICAgIChK
U0M6OkFzc2VtYmx5SGVscGVyczo6ZW1pdFJlc3RvcmVDYWxsZWVTYXZlc0ZvckJhc2VsaW5lSklU
KToKKyAgICAgICAgKiBqaXQvSklULmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlQW5k
TGlua1dpdGhvdXRGaW5hbGl6aW5nKToKKyAgICAgICAgKEpTQzo6SklUOjpwcm9sb2d1ZUdlbmVy
YXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6YXJpdHlGaXh1cFByb2xvZ3VlR2VuZXJhdG9yKToK
KyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUV4Y2VwdGlvbkhhbmRsZXJzKToKKyAg
ICAgICAgKiBqaXQvSklULmg6CisgICAgICAgICogaml0L0pJVElubGluZXMuaDoKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0TmFrZWROZWFyQ2FsbCk6CisgICAgICAgICogaml0L0pJVE9wY29kZXMu
Y3BwOgorICAgICAgICAoSlNDOjpKSVQ6Om9wX3JldF9oYW5kbGVyR2VuZXJhdG9yKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX2VudGVyKToKKyAgICAgICAgKEpTQzo6SklUOjpvcF9lbnRl
cl9HZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVQ6Om9wX2VudGVyX2NhbkJlT3B0aW1pemVk
X0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6b3BfZW50ZXJfY2Fubm90QmVPcHRpbWl6
ZWRfR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2xvb3BfaGludCk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfbG9vcF9oaW50KToKKyAgICAgICAgKEpTQzo6
SklUOjpvcF9sb29wX2hpbnRfR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUOjpvcF9lbnRl
cl9oYW5kbGVyR2VuZXJhdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvSklUT3Bjb2RlczMy
XzY0LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2VudGVyKToKKyAgICAgICAgKiBq
aXQvVGh1bmtHZW5lcmF0b3JzLmNwcDoKKyAgICAgICAgKEpTQzo6cG9wVGh1bmtTdGFja1ByZXNl
cnZlc0FuZEhhbmRsZUV4Y2VwdGlvbkdlbmVyYXRvcik6CisKIDIwMjEtMDYtMDQgIENocmlzIER1
bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBGaWxlU3lzdGVtOjpyZWFkRnJvbUZp
bGUoKSBzaG91bGQgcmV0dXJuIGRhdGEgYXMgYHZvaWQqYApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgJ
KHJldmlzaW9uIDI3ODUzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJz
dHJhY3RNYWNyb0Fzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDAzLDYgKzEwMDMsNyBA
QCBwdWJsaWM6CiAKICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgdGFnUmV0dXJuQWRkcmVzcygpIHsg
fQogICAgIEFMV0FZU19JTkxJTkUgdm9pZCB1bnRhZ1JldHVybkFkZHJlc3MoUmVnaXN0ZXJJRCA9
IFJlZ2lzdGVySUQ6OkludmFsaWRHUFJSZWcpIHsgfQorICAgIEFMV0FZU19JTkxJTkUgdm9pZCB1
bnRhZ1JldHVybkFkZHJlc3NXaXRob3V0RXh0cmFWYWxpZGF0aW9uKCkgeyB9CiAKICAgICBBTFdB
WVNfSU5MSU5FIHZvaWQgdGFnUHRyKFB0clRhZywgUmVnaXN0ZXJJRCkgeyB9CiAgICAgQUxXQVlT
X0lOTElORSB2b2lkIHRhZ1B0cihSZWdpc3RlcklELCBSZWdpc3RlcklEKSB7IH0KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJB
Uk02NC5oCShyZXZpc2lvbiAyNzg1MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaAkod29ya2luZyBjb3B5KQpAQCAtMjIzNSw2ICsyMjM1
LDEyIEBAIHB1YmxpYzoKICAgICAgICAgb3JEb3VibGUob3AxLCBvcDIsIGRlc3QpOwogICAgIH0K
IAorICAgIHZvaWQgbmVnYXRlNjQoUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbm90
NjQoZGVzdCk7CisgICAgICAgIGFkZDY0KFRydXN0ZWRJbW0zMigxKSwgZGVzdCk7CisgICAgfQor
CiAgICAgdm9pZCBuZWdhdGVEb3VibGUoRlBSZWdpc3RlcklEIHNyYywgRlBSZWdpc3RlcklEIGRl
c3QpCiAgICAgewogICAgICAgICBtX2Fzc2VtYmxlci5mbmVnPDY0PihkZXN0LCBzcmMpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTTY0RS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3Nl
bWJsZXJBUk02NEUuaAkocmV2aXNpb24gMjc4NTM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTTY0RS5oCSh3b3JraW5nIGNvcHkpCkBAIC01NCwx
MCArNTQsMTUgQEAgcHVibGljOgogCiAgICAgQUxXQVlTX0lOTElORSB2b2lkIHVudGFnUmV0dXJu
QWRkcmVzcyhSZWdpc3RlcklEIHNjcmF0Y2ggPSBJbnZhbGlkR1BSKQogICAgIHsKLSAgICAgICAg
dW50YWdQdHIoQVJNNjRSZWdpc3RlcnM6OnNwLCBBUk02NFJlZ2lzdGVyczo6bHIpOworICAgICAg
ICB1bnRhZ1JldHVybkFkZHJlc3NXaXRob3V0RXh0cmFWYWxpZGF0aW9uKCk7CiAgICAgICAgIHZh
bGlkYXRlVW50YWdnZWRQdHIoQVJNNjRSZWdpc3RlcnM6OmxyLCBzY3JhdGNoKTsKICAgICB9CiAK
KyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgdW50YWdSZXR1cm5BZGRyZXNzV2l0aG91dEV4dHJhVmFs
aWRhdGlvbigpCisgICAgeworICAgICAgICB1bnRhZ1B0cihBUk02NFJlZ2lzdGVyczo6c3AsIEFS
TTY0UmVnaXN0ZXJzOjpscik7CisgICAgfQorCiAgICAgQUxXQVlTX0lOTElORSB2b2lkIHRhZ1B0
cihQdHJUYWcgdGFnLCBSZWdpc3RlcklEIHRhcmdldCkKICAgICB7CiAgICAgICAgIGF1dG8gdGFn
R1BSID0gZ2V0Q2FjaGVkRGF0YVRlbXBSZWdpc3RlcklEQW5kSW52YWxpZGF0ZSgpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTXY3LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxl
ckFSTXY3LmgJKHJldmlzaW9uIDI3ODUzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk12Ny5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzk1LDYgKzE3
OTUsMjYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYnJhbmNoQWRkMzIoY29uZCwgZGVzdCwg
aW1tLCBkZXN0KTsKICAgICB9CiAKKyAgICBKdW1wIGJyYW5jaEFkZDMyKFJlc3VsdENvbmRpdGlv
biBjb25kLCBUcnVzdGVkSW1tMzIgaW1tLCBBZGRyZXNzIGRlc3QpCisgICAgeworICAgICAgICBs
b2FkMzIoZGVzdCwgZGF0YVRlbXBSZWdpc3Rlcik7CisKKyAgICAgICAgLy8gRG8gdGhlIGFkZC4K
KyAgICAgICAgQVJNVGh1bWJJbW1lZGlhdGUgYXJtSW1tID0gQVJNVGh1bWJJbW1lZGlhdGU6Om1h
a2VFbmNvZGVkSW1tKGltbS5tX3ZhbHVlKTsKKyAgICAgICAgaWYgKGFybUltbS5pc1ZhbGlkKCkp
CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGRfUyhkYXRhVGVtcFJlZ2lzdGVyLCBkYXRhVGVt
cFJlZ2lzdGVyLCBhcm1JbW0pOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIC8vIElmIHRo
ZSBvcGVyYW5kIGRvZXMgbm90IGZpdCBpbnRvIGFuIGltbWVkaWF0ZSB0aGVuIGxvYWQgaXQgdGVt
cG9yYXJpbHkKKyAgICAgICAgICAgIC8vIGludG8gYWRkcmVzc1RlbXBSZWdpc3Rlcjsgc2luY2Ug
d2UncmUgb3ZlcndyaXRpbmcgYWRkcmVzc1RlbXBSZWdpc3RlcgorICAgICAgICAgICAgLy8gd2Un
bGwgbmVlZCB0byByZWxvYWQgaXQgd2l0aCB0aGUgaGlnaCBiaXRzIG9mIHRoZSBhZGRyZXNzIGFm
dGVyd2FyZHMuCisgICAgICAgICAgICBtb3ZlKGltbSwgYWRkcmVzc1RlbXBSZWdpc3Rlcik7Cisg
ICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGRfUyhkYXRhVGVtcFJlZ2lzdGVyLCBkYXRhVGVtcFJl
Z2lzdGVyLCBhZGRyZXNzVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgfQorCisgICAgICAgIHN0b3Jl
MzIoZGF0YVRlbXBSZWdpc3RlciwgZGVzdCk7CisgICAgICAgIHJldHVybiBKdW1wKG1ha2VCcmFu
Y2goY29uZCkpOworICAgIH0KKwogICAgIEp1bXAgYnJhbmNoQWRkMzIoUmVzdWx0Q29uZGl0aW9u
IGNvbmQsIFRydXN0ZWRJbW0zMiBpbW0sIEFic29sdXRlQWRkcmVzcyBkZXN0KQogICAgIHsKICAg
ICAgICAgLy8gTW92ZSB0aGUgaGlnaCBiaXRzIG9mIHRoZSBhZGRyZXNzIGludG8gYWRkcmVzc1Rl
bXBSZWdpc3RlciwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9B
c3NlbWJsZXJNSVBTLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9NYWNyb0Fzc2VtYmxlck1JUFMuaAkocmV2aXNpb24gMjc4NTM3KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlck1JUFMuaAkod29ya2luZyBjb3B5
KQpAQCAtMjMxMCw2ICsyMzEwLDExMSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBKdW1wKCk7
CiAgICAgfQogCisgICAgSnVtcCBicmFuY2hBZGQzMihSZXN1bHRDb25kaXRpb24gY29uZCwgVHJ1
c3RlZEltbTMyIGltbSwgSW1wbGljaXRBZGRyZXNzIGRlc3RBZGRyZXNzKQorICAgIHsKKyAgICAg
ICAgYm9vbCB1c2VBZGRyVGVtcFJlZ2lzdGVyID0gIShkZXN0QWRkcmVzcy5vZmZzZXQgPj0gLTMy
NzY4ICYmIGRlc3RBZGRyZXNzLm9mZnNldCA8PSAzMjc2NworICAgICAgICAgICAgJiYgIW1fZml4
ZWRXaWR0aCk7CisKKyAgICAgICAgaWYgKHVzZUFkZHJUZW1wUmVnaXN0ZXIpIHsKKyAgICAgICAg
ICAgIG1fYXNzZW1ibGVyLmx1aShhZGRyVGVtcFJlZ2lzdGVyLCAoZGVzdEFkZHJlc3Mub2Zmc2V0
ICsgMHg4MDAwKSA+PiAxNik7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGR1KGFkZHJUZW1w
UmVnaXN0ZXIsIGFkZHJUZW1wUmVnaXN0ZXIsIGRlc3RBZGRyZXNzLmJhc2UpOworICAgICAgICB9
CisKKyAgICAgICAgYXV0byBsb2FkRGVzdCA9IFsmXSAoUmVnaXN0ZXJJRCBkZXN0KSB7CisgICAg
ICAgICAgICBpZiAodXNlQWRkclRlbXBSZWdpc3RlcikKKyAgICAgICAgICAgICAgICBtX2Fzc2Vt
Ymxlci5sdyhkZXN0LCBhZGRyVGVtcFJlZ2lzdGVyLCBkZXN0QWRkcmVzcy5vZmZzZXQpOworICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1fYXNzZW1ibGVyLmx3KGRlc3QsIGRlc3RB
ZGRyZXNzLmJhc2UsIGRlc3RBZGRyZXNzLm9mZnNldCk7CisgICAgICAgIH07CisKKyAgICAgICAg
YXV0byBzdG9yZURlc3QgPSBbJl0gKFJlZ2lzdGVySUQgc3JjKSB7CisgICAgICAgICAgICBpZiAo
dXNlQWRkclRlbXBSZWdpc3RlcikKKyAgICAgICAgICAgICAgICBtX2Fzc2VtYmxlci5zdyhzcmMs
IGFkZHJUZW1wUmVnaXN0ZXIsIGRlc3RBZGRyZXNzLm9mZnNldCk7CisgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgbV9hc3NlbWJsZXIuc3coc3JjLCBkZXN0QWRkcmVzcy5iYXNlLCBk
ZXN0QWRkcmVzcy5vZmZzZXQpOworICAgICAgICB9OworCisgICAgICAgIEFTU0VSVCgoY29uZCA9
PSBPdmVyZmxvdykgfHwgKGNvbmQgPT0gU2lnbmVkKSB8fCAoY29uZCA9PSBQb3NpdGl2ZU9yWmVy
bykgfHwgKGNvbmQgPT0gWmVybykgfHwgKGNvbmQgPT0gTm9uWmVybykpOworICAgICAgICBpZiAo
Y29uZCA9PSBPdmVyZmxvdykgeworICAgICAgICAgICAgaWYgKG1fZml4ZWRXaWR0aCkgeworICAg
ICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICAgIGxvYWQgICAgZGVzdCwgZGF0YVRl
bXAKKyAgICAgICAgICAgICAgICAgICAgbW92ZSAgICBpbW0sIGltbVRlbXAKKyAgICAgICAgICAg
ICAgICAgICAgeG9yICAgICBjbXBUZW1wLCBkYXRhVGVtcCwgaW1tVGVtcAorICAgICAgICAgICAg
ICAgICAgICBhZGR1ICAgIGRhdGFUZW1wLCBkYXRhVGVtcCwgaW1tVGVtcAorICAgICAgICAgICAg
ICAgICAgICBzdG9yZSAgIGRhdGFUZW1wLCBkZXN0CisgICAgICAgICAgICAgICAgICAgIGJsdHog
ICAgY21wVGVtcCwgTm9fb3ZlcmZsb3cgICAgIyBkaWZmIHNpZ24gYml0IC0+IG5vIG92ZXJmbG93
CisgICAgICAgICAgICAgICAgICAgIHhvciAgICAgY21wVGVtcCwgZGF0YVRlbXAsIGltbVRlbXAK
KyAgICAgICAgICAgICAgICAgICAgYmdleiAgICBjbXBUZW1wLCBOb19vdmVyZmxvdyAgICAjIHNh
bWUgc2lnbiBiaWcgLT4gbm8gb3ZlcmZsb3cKKyAgICAgICAgICAgICAgICAgICAgbm9wCisgICAg
ICAgICAgICAgICAgICAgIGIgICAgICAgT3ZlcmZsb3cKKyAgICAgICAgICAgICAgICAgICAgbm9w
CisgICAgICAgICAgICAgICAgICAgIGIgICAgICAgTm9fb3ZlcmZsb3cKKyAgICAgICAgICAgICAg
ICAgICAgbm9wCisgICAgICAgICAgICAgICAgICAgIG5vcAorICAgICAgICAgICAgICAgICAgICBu
b3AKKyAgICAgICAgICAgICAgICBOb19vdmVyZmxvdzoKKyAgICAgICAgICAgICAgICAqLworICAg
ICAgICAgICAgICAgIGxvYWREZXN0KGRhdGFUZW1wUmVnaXN0ZXIpOworICAgICAgICAgICAgICAg
IG1vdmUoaW1tLCBpbW1UZW1wUmVnaXN0ZXIpOworICAgICAgICAgICAgICAgIG1fYXNzZW1ibGVy
Lnhvckluc24oY21wVGVtcFJlZ2lzdGVyLCBkYXRhVGVtcFJlZ2lzdGVyLCBpbW1UZW1wUmVnaXN0
ZXIpOworICAgICAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZHUoZGF0YVRlbXBSZWdpc3Rlciwg
ZGF0YVRlbXBSZWdpc3RlciwgaW1tVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgICAgICAgICBzdG9y
ZURlc3QoZGF0YVRlbXBSZWdpc3Rlcik7CisgICAgICAgICAgICAgICAgbV9hc3NlbWJsZXIuYmx0
eihjbXBUZW1wUmVnaXN0ZXIsIDkpOworICAgICAgICAgICAgICAgIG1fYXNzZW1ibGVyLnhvcklu
c24oY21wVGVtcFJlZ2lzdGVyLCBkYXRhVGVtcFJlZ2lzdGVyLCBpbW1UZW1wUmVnaXN0ZXIpOwor
ICAgICAgICAgICAgICAgIG1fYXNzZW1ibGVyLmJnZXooY21wVGVtcFJlZ2lzdGVyLCA3KTsKKyAg
ICAgICAgICAgICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKKyAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgbG9hZERlc3QoZGF0YVRlbXBSZWdpc3Rlcik7CisgICAgICAgICAgICAg
ICAgaWYgKGltbS5tX3ZhbHVlID49IDAgJiYgaW1tLm1fdmFsdWUgIDw9IDMyNzY3KSB7CisgICAg
ICAgICAgICAgICAgICAgIG1vdmUoZGF0YVRlbXBSZWdpc3RlciwgY21wVGVtcFJlZ2lzdGVyKTsK
KyAgICAgICAgICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRkaXUoZGF0YVRlbXBSZWdpc3Rlciwg
ZGF0YVRlbXBSZWdpc3RlciwgaW1tLm1fdmFsdWUpOworICAgICAgICAgICAgICAgICAgICBtX2Fz
c2VtYmxlci5ibHR6KGNtcFRlbXBSZWdpc3RlciwgOSk7CisgICAgICAgICAgICAgICAgICAgIHN0
b3JlRGVzdChkYXRhVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgICAgICAgICAgICAgbV9hc3NlbWJs
ZXIuYmdleihkYXRhVGVtcFJlZ2lzdGVyLCA3KTsKKyAgICAgICAgICAgICAgICAgICAgbV9hc3Nl
bWJsZXIubm9wKCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpbW0ubV92YWx1ZSA+PSAt
MzI3NjggJiYgaW1tLm1fdmFsdWUgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgIG1vdmUoZGF0
YVRlbXBSZWdpc3RlciwgY21wVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgICAgICAgICAgICAgbV9h
c3NlbWJsZXIuYWRkaXUoZGF0YVRlbXBSZWdpc3RlciwgZGF0YVRlbXBSZWdpc3RlciwgaW1tLm1f
dmFsdWUpOworICAgICAgICAgICAgICAgICAgICBtX2Fzc2VtYmxlci5iZ2V6KGNtcFRlbXBSZWdp
c3RlciwgOSk7CisgICAgICAgICAgICAgICAgICAgIHN0b3JlRGVzdChkYXRhVGVtcFJlZ2lzdGVy
KTsKKyAgICAgICAgICAgICAgICAgICAgbV9hc3NlbWJsZXIuYmx0eihjbXBUZW1wUmVnaXN0ZXIs
IDcpOworICAgICAgICAgICAgICAgICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKKyAgICAgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBtb3ZlKGltbSwgaW1tVGVtcFJlZ2lz
dGVyKTsKKyAgICAgICAgICAgICAgICAgICAgbV9hc3NlbWJsZXIueG9ySW5zbihjbXBUZW1wUmVn
aXN0ZXIsIGRhdGFUZW1wUmVnaXN0ZXIsIGltbVRlbXBSZWdpc3Rlcik7CisgICAgICAgICAgICAg
ICAgICAgIG1fYXNzZW1ibGVyLmFkZHUoZGF0YVRlbXBSZWdpc3RlciwgZGF0YVRlbXBSZWdpc3Rl
ciwgaW1tVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgICAgICAgICAgICAgbV9hc3NlbWJsZXIuYmx0
eihjbXBUZW1wUmVnaXN0ZXIsIDEwKTsKKyAgICAgICAgICAgICAgICAgICAgc3RvcmVEZXN0KGRh
dGFUZW1wUmVnaXN0ZXIpOworICAgICAgICAgICAgICAgICAgICBtX2Fzc2VtYmxlci54b3JJbnNu
KGNtcFRlbXBSZWdpc3RlciwgZGF0YVRlbXBSZWdpc3RlciwgaW1tVGVtcFJlZ2lzdGVyKTsKKyAg
ICAgICAgICAgICAgICAgICAgbV9hc3NlbWJsZXIuYmdleihjbXBUZW1wUmVnaXN0ZXIsIDcpOwor
ICAgICAgICAgICAgICAgICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4ganVtcCgpOworICAgICAgICB9Cisg
ICAgICAgIG1vdmUoaW1tLCBpbW1UZW1wUmVnaXN0ZXIpOworICAgICAgICBsb2FkRGVzdChkYXRh
VGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgYWRkMzIoaW1tVGVtcFJlZ2lzdGVyLCBkYXRhVGVtcFJl
Z2lzdGVyKTsKKyAgICAgICAgc3RvcmVEZXN0KGRhdGFUZW1wUmVnaXN0ZXIpOworICAgICAgICBp
ZiAoY29uZCA9PSBTaWduZWQpIHsKKyAgICAgICAgICAgIC8vIENoZWNrIGlmIGRlc3QgaXMgbmVn
YXRpdmUuCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zbHQoY21wVGVtcFJlZ2lzdGVyLCBkYXRh
VGVtcFJlZ2lzdGVyLCBNSVBTUmVnaXN0ZXJzOjp6ZXJvKTsKKyAgICAgICAgICAgIHJldHVybiBi
cmFuY2hOb3RFcXVhbChjbXBUZW1wUmVnaXN0ZXIsIE1JUFNSZWdpc3RlcnM6Onplcm8pOworICAg
ICAgICB9CisgICAgICAgIGlmIChjb25kID09IFBvc2l0aXZlT3JaZXJvKSB7CisgICAgICAgICAg
ICAvLyBDaGVjayBpZiBkZXN0IGlzIG5vdCBuZWdhdGl2ZS4KKyAgICAgICAgICAgIG1fYXNzZW1i
bGVyLnNsdChjbXBUZW1wUmVnaXN0ZXIsIGRhdGFUZW1wUmVnaXN0ZXIsIE1JUFNSZWdpc3RlcnM6
Onplcm8pOworICAgICAgICAgICAgcmV0dXJuIGJyYW5jaEVxdWFsKGNtcFRlbXBSZWdpc3Rlciwg
TUlQU1JlZ2lzdGVyczo6emVybyk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNvbmQgPT0gWmVy
bykKKyAgICAgICAgICAgIHJldHVybiBicmFuY2hFcXVhbChkYXRhVGVtcFJlZ2lzdGVyLCBNSVBT
UmVnaXN0ZXJzOjp6ZXJvKTsKKyAgICAgICAgaWYgKGNvbmQgPT0gTm9uWmVybykKKyAgICAgICAg
ICAgIHJldHVybiBicmFuY2hOb3RFcXVhbChkYXRhVGVtcFJlZ2lzdGVyLCBNSVBTUmVnaXN0ZXJz
Ojp6ZXJvKTsKKyAgICAgICAgQVNTRVJUKDApOworICAgICAgICByZXR1cm4gSnVtcCgpOworICAg
IH0KKwogICAgIEp1bXAgYnJhbmNoTXVsMzIoUmVzdWx0Q29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVy
SUQgc3JjMSwgUmVnaXN0ZXJJRCBzcmMyLCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewogICAgICAg
ICBBU1NFUlQoKGNvbmQgPT0gT3ZlcmZsb3cpIHx8IChjb25kID09IFNpZ25lZCkgfHwgKGNvbmQg
PT0gWmVybykgfHwgKGNvbmQgPT0gTm9uWmVybykpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaAkocmV2aXNp
b24gMjc4NTM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2Vt
Ymxlclg4Nl82NC5oCSh3b3JraW5nIGNvcHkpCkBAIC05MTgsNiArOTE4LDEyIEBAIHB1YmxpYzoK
ICAgICAgICAgbV9hc3NlbWJsZXIubm90cV9tKGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UsIGRlc3Qu
aW5kZXgsIGRlc3Quc2NhbGUpOwogICAgIH0KIAorICAgIHZvaWQgbmVnYXRlNjQoUmVnaXN0ZXJJ
RCBkZXN0KQorICAgIHsKKyAgICAgICAgbm90NjQoZGVzdCk7CisgICAgICAgIGFkZDY0KFRydXN0
ZWRJbW0zMigxKSwgZGVzdCk7CisgICAgfQorCiAgICAgdm9pZCBsb2FkNjQoSW1wbGljaXRBZGRy
ZXNzIGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CiAgICAgICAgIG1fYXNzZW1ibGVy
Lm1vdnFfbXIoYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSwgZGVzdCk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiAyNzg1Mzcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTE2OSw3ICsxNjksMTAgQEAgcHVibGljOgogICAgIHVuc2lnbmVkIG51bVRtcHMo
KSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+aGFzQ2hlY2twb2ludHMoKSAqIG1heE51
bUNoZWNrcG9pbnRUbXBzOyB9CiAKICAgICB1bnNpZ25lZCogYWRkcmVzc09mTnVtUGFyYW1ldGVy
cygpIHsgcmV0dXJuICZtX251bVBhcmFtZXRlcnM7IH0KKworICAgIHN0YXRpYyBwdHJkaWZmX3Qg
b2Zmc2V0T2ZOdW1DYWxsZWVMb2NhbHMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJs
b2NrLCBtX251bUNhbGxlZUxvY2Fscyk7IH0KICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9m
TnVtUGFyYW1ldGVycygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1fbnVt
UGFyYW1ldGVycyk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTnVtVmFycygpIHsg
cmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1fbnVtVmFycyk7IH0KIAogICAgIENv
ZGVCbG9jayogYWx0ZXJuYXRpdmUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxDb2RlQmxv
Y2sqPihtX2FsdGVybmF0aXZlLmdldCgpKTsgfQogICAgIHZvaWQgc2V0QWx0ZXJuYXRpdmUoVk0m
LCBDb2RlQmxvY2sqKTsKQEAgLTQ4Niw2ICs0ODksOCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVy
biByZXN1bHQ7CiAgICAgfQogCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkFyZ3VtZW50
VmFsdWVQcm9maWxlcygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1fYXJn
dW1lbnRWYWx1ZVByb2ZpbGVzKTsgfQorCiAgICAgVmFsdWVQcm9maWxlJiB2YWx1ZVByb2ZpbGVG
b3JCeXRlY29kZUluZGV4KEJ5dGVjb2RlSW5kZXgpOwogICAgIFNwZWN1bGF0ZWRUeXBlIHZhbHVl
UHJvZmlsZVByZWRpY3Rpb25Gb3JCeXRlY29kZUluZGV4KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tl
ciYsIEJ5dGVjb2RlSW5kZXgpOwogCkBAIC04MTksNyArODI0LDcgQEAgcHVibGljOgogICAgIH0K
IAogICAgIGJvb2wgd2FzQ29tcGlsZWRXaXRoRGVidWdnaW5nT3Bjb2RlcygpIGNvbnN0IHsgcmV0
dXJuIG1fdW5saW5rZWRDb2RlLT53YXNDb21waWxlZFdpdGhEZWJ1Z2dpbmdPcGNvZGVzKCk7IH0K
LSAgICAKKwogICAgIC8vIFRoaXMgaXMgaW50ZW50aW9uYWxseSBwdWJsaWM7IGl0J3MgdGhlIHJl
c3BvbnNpYmlsaXR5IG9mIGFueW9uZSBkb2luZyBhbnkKICAgICAvLyBvZiB0aGUgZm9sbG93aW5n
IHRvIGhvbGQgdGhlIGxvY2s6CiAgICAgLy8KQEAgLTkwNiw2ICs5MTEsNyBAQCBwdWJsaWM6CiAK
ICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTWV0YWRhdGFUYWJsZSgpIHsgcmV0dXJuIE9C
SkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1fbWV0YWRhdGEpOyB9CiAgICAgc3RhdGljIHB0cmRp
ZmZfdCBvZmZzZXRPZkluc3RydWN0aW9uc1Jhd1BvaW50ZXIoKSB7IHJldHVybiBPQkpFQ1RfT0ZG
U0VUT0YoQ29kZUJsb2NrLCBtX2luc3RydWN0aW9uc1Jhd1BvaW50ZXIpOyB9CisgICAgc3RhdGlj
IHB0cmRpZmZfdCBvZmZzZXRPZlNob3VsZEFsd2F5c0JlSW5saW5lZCgpIHsgcmV0dXJuIE9CSkVD
VF9PRkZTRVRPRihDb2RlQmxvY2ssIG1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkKTsgfQogCiAgICAg
Ym9vbCBsb29wSGludHNBcmVFbGlnaWJsZUZvckZ1enppbmdFYXJseVJldHVybigpCiAgICAgewpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCShyZXZp
c2lvbiAyNzg1MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVy
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMjYsNiArMzI2LDExIEBAIHB1YmxpYzoKICAgICAgICAg
QVNTRVJUKGNvZGVCbG9jayk7CiAKICAgICAgICAgY29uc3QgUmVnaXN0ZXJBdE9mZnNldExpc3Qq
IGNhbGxlZVNhdmVzID0gY29kZUJsb2NrLT5jYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CisgICAgICAg
IGVtaXRTYXZlQ2FsbGVlU2F2ZXNGb3IoY2FsbGVlU2F2ZXMpOworICAgIH0KKworICAgIHZvaWQg
ZW1pdFNhdmVDYWxsZWVTYXZlc0Zvcihjb25zdCBSZWdpc3RlckF0T2Zmc2V0TGlzdCogY2FsbGVl
U2F2ZXMpCisgICAgewogICAgICAgICBSZWdpc3RlclNldCBkb250U2F2ZVJlZ2lzdGVycyA9IFJl
Z2lzdGVyU2V0KFJlZ2lzdGVyU2V0OjpzdGFja1JlZ2lzdGVycygpLCBSZWdpc3RlclNldDo6YWxs
RlBScygpKTsKICAgICAgICAgdW5zaWduZWQgcmVnaXN0ZXJDb3VudCA9IGNhbGxlZVNhdmVzLT5z
aXplKCk7CiAKQEAgLTM5OSw2ICs0MDQsMTEgQEAgcHVibGljOgogICAgICAgICBlbWl0U2F2ZUNh
bGxlZVNhdmVzRm9yKGNvZGVCbG9jaygpKTsKICAgICB9CiAKKyAgICB2b2lkIGVtaXRTYXZlQ2Fs
bGVlU2F2ZXNGb3JCYXNlbGluZUpJVCgpCisgICAgeworICAgICAgICBlbWl0U2F2ZUNhbGxlZVNh
dmVzRm9yKCZSZWdpc3RlckF0T2Zmc2V0TGlzdDo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVSZWdp
c3RlcnMoKSk7CisgICAgfQorCiAgICAgdm9pZCBlbWl0U2F2ZVRoZW5NYXRlcmlhbGl6ZVRhZ1Jl
Z2lzdGVycygpCiAgICAgewogI2lmIFVTRShKU1ZBTFVFNjQpCkBAIC00MTcsNiArNDI3LDExIEBA
IHB1YmxpYzoKICAgICAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlc0Zvcihjb2RlQmxvY2soKSk7
CiAgICAgfQogCisgICAgdm9pZCBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzRm9yQmFzZWxpbmVKSVQo
KQorICAgIHsKKyAgICAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlc0ZvcigmUmVnaXN0ZXJBdE9m
ZnNldExpc3Q6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOworICAgIH0KKwog
ICAgIHZvaWQgZW1pdFJlc3RvcmVTYXZlZFRhZ1JlZ2lzdGVycygpCiAgICAgewogI2lmIFVTRShK
U1ZBTFVFNjQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCShyZXZpc2lvbiAyNzg1
MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTgzLDcgKzgzLDcgQEAgSklUOjp+SklUKCkKIHsKIH0KIAotI2lmIEVOQUJMRShERkdfSklU
KQorI2lmIEVOQUJMRShERkdfSklUKSAmJiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiB2b2lk
IEpJVDo6ZW1pdEVudGVyT3B0aW1pemF0aW9uQ2hlY2soKQogewogICAgIGlmICghY2FuQmVPcHRp
bWl6ZWQoKSkKQEAgLTEwMSw3ICsxMDEsNyBAQCB2b2lkIEpJVDo6ZW1pdEVudGVyT3B0aW1pemF0
aW9uQ2hlY2soKQogICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEdQUkluZm86OmNhbGxGcmFt
ZVJlZ2lzdGVyKTsKICAgICBza2lwT3B0aW1pemUubGluayh0aGlzKTsKIH0KLSNlbmRpZgorI2Vu
ZGlmIC8vIEVOQUJMRShERkdfSklUKSAmJiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpKAogCiB2
b2lkIEpJVDo6ZW1pdE5vdGlmeVdyaXRlKFdhdGNocG9pbnRTZXQqIHNldCkKIHsKQEAgLTY4Miw2
ICs2ODIsMjcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICNlbmRpZgog
fQogCisjZGVmaW5lIEZPUl9FQUNIX05PTl9QUk9GSUxJTkdfUFJPTE9HVUVfR0VORVJBVE9SKHYp
IFwKKyAgICB2KCFkb2VzUHJvZmlsaW5nLCAhaXNDb25zdHJ1Y3RvciwgIWhhc0h1Z2VGcmFtZSwg
cHJvbG9ndWVHZW5lcmF0b3IwLCBhcml0eUZpeHVwX3Byb2xvZ3VlR2VuZXJhdG9yMCkgXAorICAg
IHYoIWRvZXNQcm9maWxpbmcsICFpc0NvbnN0cnVjdG9yLCAgaGFzSHVnZUZyYW1lLCBwcm9sb2d1
ZUdlbmVyYXRvcjEsIGFyaXR5Rml4dXBfcHJvbG9ndWVHZW5lcmF0b3IxKSBcCisgICAgdighZG9l
c1Byb2ZpbGluZywgIGlzQ29uc3RydWN0b3IsICFoYXNIdWdlRnJhbWUsIHByb2xvZ3VlR2VuZXJh
dG9yMiwgYXJpdHlGaXh1cF9wcm9sb2d1ZUdlbmVyYXRvcjIpIFwKKyAgICB2KCFkb2VzUHJvZmls
aW5nLCAgaXNDb25zdHJ1Y3RvciwgIGhhc0h1Z2VGcmFtZSwgcHJvbG9ndWVHZW5lcmF0b3IzLCBh
cml0eUZpeHVwX3Byb2xvZ3VlR2VuZXJhdG9yMykKKworI2lmIEVOQUJMRShERkdfSklUKQorI2Rl
ZmluZSBGT1JfRUFDSF9QUk9GSUxJTkdfUFJPTE9HVUVfR0VORVJBVE9SKHYpIFwKKyAgICB2KCBk
b2VzUHJvZmlsaW5nLCAhaXNDb25zdHJ1Y3RvciwgIWhhc0h1Z2VGcmFtZSwgcHJvbG9ndWVHZW5l
cmF0b3I0LCBhcml0eUZpeHVwX3Byb2xvZ3VlR2VuZXJhdG9yNCkgXAorICAgIHYoIGRvZXNQcm9m
aWxpbmcsICFpc0NvbnN0cnVjdG9yLCAgaGFzSHVnZUZyYW1lLCBwcm9sb2d1ZUdlbmVyYXRvcjUs
IGFyaXR5Rml4dXBfcHJvbG9ndWVHZW5lcmF0b3I1KSBcCisgICAgdiggZG9lc1Byb2ZpbGluZywg
IGlzQ29uc3RydWN0b3IsICFoYXNIdWdlRnJhbWUsIHByb2xvZ3VlR2VuZXJhdG9yNiwgYXJpdHlG
aXh1cF9wcm9sb2d1ZUdlbmVyYXRvcjYpIFwKKyAgICB2KCBkb2VzUHJvZmlsaW5nLCAgaXNDb25z
dHJ1Y3RvciwgIGhhc0h1Z2VGcmFtZSwgcHJvbG9ndWVHZW5lcmF0b3I3LCBhcml0eUZpeHVwX3By
b2xvZ3VlR2VuZXJhdG9yNykKKworI2Vsc2UgLy8gbm90IEVOQUJMRShERkdfSklUKQorI2RlZmlu
ZSBGT1JfRUFDSF9QUk9GSUxJTkdfUFJPTE9HVUVfR0VORVJBVE9SKHYpCisjZW5kaWYgLy8gRU5B
QkxFKERGR19KSVQpCisKKyNkZWZpbmUgRk9SX0VBQ0hfUFJPTE9HVUVfR0VORVJBVE9SKHYpIFwK
KyAgICBGT1JfRUFDSF9OT05fUFJPRklMSU5HX1BST0xPR1VFX0dFTkVSQVRPUih2KSBcCisgICAg
Rk9SX0VBQ0hfUFJPRklMSU5HX1BST0xPR1VFX0dFTkVSQVRPUih2KQorCiB2b2lkIEpJVDo6Y29t
cGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluZyhKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQp
CiB7CiAgICAgREZHOjpDYXBhYmlsaXR5TGV2ZWwgbGV2ZWwgPSBtX2NvZGVCbG9jay0+Y2FwYWJp
bGl0eUxldmVsKCk7CkBAIC03NTAsNiArNzcxLDggQEAgdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5r
V2l0aG91dEZpbmFsaXppbgogICAgICAgICBub3AoKTsKIAogICAgIGVtaXRGdW5jdGlvblByb2xv
Z3VlKCk7CisKKyNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAgICAgZW1pdFB1dFRvQ2Fs
bEZyYW1lSGVhZGVyKG1fY29kZUJsb2NrLCBDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spOwogCiAg
ICAgTGFiZWwgYmVnaW5MYWJlbCh0aGlzKTsKQEAgLTc3MSwxMSArNzk0LDEwIEBAIHZvaWQgSklU
Ojpjb21waWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW4KICAgICBpZiAobV9jb2RlQmxvY2stPmNv
ZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlKSB7CiAgICAgICAgIEFTU0VSVCghbV9ieXRlY29kZUlu
ZGV4KTsKICAgICAgICAgaWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewotICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBhcmd1bWVudCA9IDA7IGFyZ3VtZW50IDwgbV9jb2RlQmxvY2stPm51bVBh
cmFtZXRlcnMoKTsgKythcmd1bWVudCkgewotICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgaXMg
YSBjb25zdHJ1Y3RvciwgdGhlbiB3ZSB3YW50IHRvIHB1dCBpbiBhIGR1bW15IHByb2ZpbGluZyBz
aXRlICh0bwotICAgICAgICAgICAgICAgIC8vIGtlZXAgdGhpbmdzIGNvbnNpc3RlbnQpIGJ1dCB3
ZSBkb24ndCBhY3R1YWxseSB3YW50IHRvIHJlY29yZCB0aGUgZHVtbXkgdmFsdWUuCi0gICAgICAg
ICAgICAgICAgaWYgKG1fY29kZUJsb2NrLT5pc0NvbnN0cnVjdG9yKCkgJiYgIWFyZ3VtZW50KQot
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIC8vIElmIHRoaXMgaXMg
YSBjb25zdHJ1Y3RvciwgdGhlbiB3ZSB3YW50IHRvIHB1dCBpbiBhIGR1bW15IHByb2ZpbGluZyBz
aXRlICh0bworICAgICAgICAgICAgLy8ga2VlcCB0aGluZ3MgY29uc2lzdGVudCkgYnV0IHdlIGRv
bid0IGFjdHVhbGx5IHdhbnQgdG8gcmVjb3JkIHRoZSBkdW1teSB2YWx1ZS4KKyAgICAgICAgICAg
IHVuc2lnbmVkIHN0YXJ0QXJndW1lbnQgPSBtX2NvZGVCbG9jay0+aXNDb25zdHJ1Y3RvcigpID8g
MSA6IDA7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0gc3RhcnRBcmd1bWVu
dDsgYXJndW1lbnQgPCBtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpOyArK2FyZ3VtZW50KSB7
CiAgICAgICAgICAgICAgICAgaW50IG9mZnNldCA9IENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXRJ
bmNsdWRpbmdUaGlzKGFyZ3VtZW50KSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVy
KSk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAgICAgICAgICBKU1ZhbHVlUmVncyByZXN1
bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwpAQCAtNzg5LDcgKzgxMSwzNCBAQCB2b2lkIEpJ
VDo6Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluCiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KICAgICB9Ci0gICAgCisjZWxzZSAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKKyAgICBj
b25zdGV4cHIgR1BSUmVnIGNvZGVCbG9ja0dQUiA9IHJlZ1Q3OworICAgIEFTU0VSVCghbV9ieXRl
Y29kZUluZGV4KTsKKworICAgIGludCBmcmFtZVRvcE9mZnNldCA9IHN0YWNrUG9pbnRlck9mZnNl
dEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpOworICAgIHVuc2lnbmVkIG1heEZy
YW1lU2l6ZSA9IC1mcmFtZVRvcE9mZnNldDsKKworICAgIGJvb2wgZG9lc1Byb2ZpbGluZyA9ICht
X2NvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUpICYmIHNob3VsZEVtaXRQcm9m
aWxpbmcoKTsKKyAgICBib29sIGlzQ29uc3RydWN0b3IgPSBtX2NvZGVCbG9jay0+aXNDb25zdHJ1
Y3RvcigpOworICAgIGJvb2wgaGFzSHVnZUZyYW1lID0gbWF4RnJhbWVTaXplID4gT3B0aW9uczo6
cmVzZXJ2ZWRab25lU2l6ZSgpOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBUaHVua0dlbmVyYXRv
ciBnZW5lcmF0b3JzW10gPSB7CisjZGVmaW5lIFVTRV9QUk9MT0dVRV9HRU5FUkFUT1IoZG9lc1By
b2ZpbGluZywgaXNDb25zdHJ1Y3RvciwgaGFzSHVnZUZyYW1lLCBuYW1lLCBhcml0eUZpeHVwTmFt
ZSkgbmFtZSwKKyAgICAgICAgRk9SX0VBQ0hfUFJPTE9HVUVfR0VORVJBVE9SKFVTRV9QUk9MT0dV
RV9HRU5FUkFUT1IpCisjdW5kZWYgVVNFX1BST0xPR1VFX0dFTkVSQVRPUgorICAgIH07CisgICAg
c3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBudW1iZXJPZkdlbmVyYXRvcnMgPSBzaXplb2YoZ2Vu
ZXJhdG9ycykgLyBzaXplb2YoZ2VuZXJhdG9yc1swXSk7CisKKyAgICBtb3ZlKFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2spLCBjb2RlQmxvY2tHUFIpOworCisgICAgdW5zaWduZWQgZ2VuZXJhdG9y
U2VsZWN0b3IgPSBkb2VzUHJvZmlsaW5nIDw8IDIgfCBpc0NvbnN0cnVjdG9yIDw8IDEgfCBoYXNI
dWdlRnJhbWUgPDwgMDsKKyAgICBSRUxFQVNFX0FTU0VSVChnZW5lcmF0b3JTZWxlY3RvciA8IG51
bWJlck9mR2VuZXJhdG9ycyk7CisgICAgYXV0byBnZW5lcmF0b3IgPSBnZW5lcmF0b3JzW2dlbmVy
YXRvclNlbGVjdG9yXTsKKyAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bSgpLmdldENUSVN0dWIoZ2Vu
ZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOworCisgICAgTGFiZWwgYm9keUxhYmVs
KHRoaXMpOworI2VuZGlmIC8vICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKKwogICAgIFJFTEVB
U0VfQVNTRVJUKCFKSVRDb2RlOjppc0pJVChtX2NvZGVCbG9jay0+aml0VHlwZSgpKSk7CiAKICAg
ICBpZiAoVU5MSUtFTFkoc2l6ZU1hcmtlcikpCkBAIC04MDMsMTYgKzg1MiwxOSBAQCB2b2lkIEpJ
VDo6Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluCiAgICAgICAgIG1fZGlzYXNzZW1ibGVy
LT5zZXRFbmRPZlNsb3dQYXRoKGxhYmVsKCkpOwogICAgIG1fcGNUb0NvZGVPcmlnaW5NYXBCdWls
ZGVyLmFwcGVuZEl0ZW0obGFiZWwoKSwgUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyOjpkZWZhdWx0
Q29kZU9yaWdpbigpKTsKIAorI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICBzdGFj
a092ZXJmbG93LmxpbmsodGhpcyk7CiAgICAgbV9ieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRl
eCgwKTsKICAgICBpZiAobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpCiAgICAgICAgIGFk
ZFB0cihUcnVzdGVkSW1tMzIoLXN0YXRpY19jYXN0PGludDMyX3Q+KG1heEZyYW1lRXh0ZW50Rm9y
U2xvd1BhdGhDYWxsKSksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBjYWxsT3BlcmF0aW9u
V2l0aENhbGxGcmFtZVJvbGxiYWNrT25FeGNlcHRpb24ob3BlcmF0aW9uVGhyb3dTdGFja092ZXJm
bG93RXJyb3IsIG1fY29kZUJsb2NrKTsKKyNlbmRpZgogCiAgICAgLy8gSWYgdGhlIG51bWJlciBv
ZiBwYXJhbWV0ZXJzIGlzIDEsIHdlIG5ldmVyIHJlcXVpcmUgYXJpdHkgZml4dXAuCiAgICAgYm9v
bCByZXF1aXJlc0FyaXR5Rml4dXAgPSBtX2NvZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJzICE9IDE7
CiAgICAgaWYgKG1fY29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSAmJiByZXF1
aXJlc0FyaXR5Rml4dXApIHsKICAgICAgICAgbV9hcml0eUNoZWNrID0gbGFiZWwoKTsKKyNpZiAh
RU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAgICAgICAgIHN0b3JlOChUcnVzdGVkSW1tMzIoMCks
ICZtX2NvZGVCbG9jay0+bV9zaG91bGRBbHdheXNCZUlubGluZWQpOwogICAgICAgICBlbWl0RnVu
Y3Rpb25Qcm9sb2d1ZSgpOwogICAgICAgICBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIobV9jb2Rl
QmxvY2ssIENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayk7CkBAIC04MzEsMTcgKzg4Myw0MiBAQCB2
b2lkIEpJVDo6Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluCiAgICAgICAgIG1vdmUocmV0
dXJuVmFsdWVHUFIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CiAgICAgICAgIGVtaXROYWtlZE5l
YXJDYWxsKG1fdm0tPmdldENUSVN0dWIoYXJpdHlGaXh1cEdlbmVyYXRvcikucmV0YWdnZWRDb2Rl
PE5vUHRyVGFnPigpKTsKIAorICAgICAgICBqdW1wKGJlZ2luTGFiZWwpOworCisjZWxzZSAvLyBF
TkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKKyAgICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoKTsK
KworICAgICAgICBzdGF0aWNfYXNzZXJ0KGNvZGVCbG9ja0dQUiA9PSByZWdUNyk7CisgICAgICAg
IEFTU0VSVCghbV9ieXRlY29kZUluZGV4KTsKKworICAgICAgICBzdGF0aWMgY29uc3RleHByIFRo
dW5rR2VuZXJhdG9yIGdlbmVyYXRvcnNbXSA9IHsKKyNkZWZpbmUgVVNFX1BST0xPR1VFX0dFTkVS
QVRPUihkb2VzUHJvZmlsaW5nLCBpc0NvbnN0cnVjdG9yLCBoYXNIdWdlRnJhbWUsIG5hbWUsIGFy
aXR5Rml4dXBOYW1lKSBhcml0eUZpeHVwTmFtZSwKKyAgICAgICAgICAgIEZPUl9FQUNIX1BST0xP
R1VFX0dFTkVSQVRPUihVU0VfUFJPTE9HVUVfR0VORVJBVE9SKQorI3VuZGVmIFVTRV9QUk9MT0dV
RV9HRU5FUkFUT1IKKyAgICAgICAgfTsKKyAgICAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25l
ZCBudW1iZXJPZkdlbmVyYXRvcnMgPSBzaXplb2YoZ2VuZXJhdG9ycykgLyBzaXplb2YoZ2VuZXJh
dG9yc1swXSk7CisKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrKSwgY29k
ZUJsb2NrR1BSKTsKKworICAgICAgICBSRUxFQVNFX0FTU0VSVChnZW5lcmF0b3JTZWxlY3RvciA8
IG51bWJlck9mR2VuZXJhdG9ycyk7CisgICAgICAgIGF1dG8gZ2VuZXJhdG9yID0gZ2VuZXJhdG9y
c1tnZW5lcmF0b3JTZWxlY3Rvcl07CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGdlbmVyYXRvcik7
CisgICAgICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtKCkuZ2V0Q1RJU3R1YihnZW5lcmF0b3IpLnJl
dGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisKKyAgICAgICAganVtcChib2R5TGFiZWwpOworI2Vu
ZGlmIC8vICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKKwogI2lmIEFTU0VSVF9FTkFCTEVECiAg
ICAgICAgIG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoKTsgLy8gUmVzZXQgdGhpcywg
aW4gb3JkZXIgdG8gZ3VhcmQgaXRzIHVzZSB3aXRoIEFTU0VSVHMuCiAjZW5kaWYKLQotICAgICAg
ICBqdW1wKGJlZ2luTGFiZWwpOwogICAgIH0gZWxzZQogICAgICAgICBtX2FyaXR5Q2hlY2sgPSBl
bnRyeUxhYmVsOyAvLyBOZXZlciByZXF1aXJlIGFyaXR5IGZpeHVwLgogCiAgICAgQVNTRVJUKG1f
am1wVGFibGUuaXNFbXB0eSgpKTsKICAgICAKKyNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1Mp
CiAgICAgcHJpdmF0ZUNvbXBpbGVFeGNlcHRpb25IYW5kbGVycygpOworI2VuZGlmCiAgICAgCiAg
ICAgaWYgKG1fZGlzYXNzZW1ibGVyKQogICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0RW5kT2ZD
b2RlKGxhYmVsKCkpOwpAQCAtODUxLDYgKzkyOCwyNDAgQEAgdm9pZCBKSVQ6OmNvbXBpbGVBbmRM
aW5rV2l0aG91dEZpbmFsaXppbgogICAgIGxpbmsoKTsKIH0KIAorI2lmIEVOQUJMRShFWFRSQV9D
VElfVEhVTktTKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OnBy
b2xvZ3VlR2VuZXJhdG9yKFZNJiB2bSwgYm9vbCBkb2VzUHJvZmlsaW5nLCBib29sIGlzQ29uc3Ry
dWN0b3IsIGJvb2wgaGFzSHVnZUZyYW1lLCBjb25zdCBjaGFyKiB0aHVua05hbWUpCit7CisgICAg
Ly8gVGhpcyBmdW5jdGlvbiBnZW5lcmF0ZXMgdGhlIEJhc2VsaW5lIEpJVCdzIHByb2xvZ3VlIGNv
ZGUuIEl0IGlzIG5vdCB1c2VhYmxlIGJ5IG90aGVyIHRpZXJzLgorICAgIGNvbnN0ZXhwciBHUFJS
ZWcgY29kZUJsb2NrR1BSID0gcmVnVDc7IC8vIGluY29taW5nLgorCisgICAgY29uc3RleHByIGlu
dCB2aXJ0dWFsUmVnaXN0ZXJTaXplID0gc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIp
KTsKKyAgICBjb25zdGV4cHIgaW50IHZpcnR1YWxSZWdpc3RlclNpemVTaGlmdCA9IDM7CisgICAg
c3RhdGljX2Fzc2VydCgoMSA8PCB2aXJ0dWFsUmVnaXN0ZXJTaXplU2hpZnQpID09IHZpcnR1YWxS
ZWdpc3RlclNpemUpOworCisgICAgdGFnUmV0dXJuQWRkcmVzcygpOworCisgICAgc3RvcmU2NChj
b2RlQmxvY2tHUFIsIGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSk7CisKKyAg
ICBsb2FkMzIoQWRkcmVzcyhjb2RlQmxvY2tHUFIsIENvZGVCbG9jazo6b2Zmc2V0T2ZOdW1DYWxs
ZWVMb2NhbHMoKSksIHJlZ1QxKTsKKyAgICBpZiBjb25zdGV4cHIgKG1heEZyYW1lRXh0ZW50Rm9y
U2xvd1BhdGhDYWxsSW5SZWdpc3RlcnMpCisgICAgICAgIGFkZDMyKFRydXN0ZWRJbW0zMihtYXhG
cmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbEluUmVnaXN0ZXJzKSwgcmVnVDEpOworICAgIGxzaGlm
dDMyKFRydXN0ZWRJbW0zMih2aXJ0dWFsUmVnaXN0ZXJTaXplU2hpZnQpLCByZWdUMSk7CisgICAg
bmVnYXRlNjQocmVnVDEpOworI2lmIEFTU0VSVF9FTkFCTEVECisgICAgUHJvYmU6OkZ1bmN0aW9u
IHByb2JlRnVuY3Rpb24gPSBbXSAoUHJvYmU6OkNvbnRleHQmIGNvbnRleHQpIHsKKyAgICAgICAg
Q29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjb250ZXh0LmZwPENhbGxGcmFtZSo+KCktPmNvZGVCbG9j
aygpOworICAgICAgICBpbnQ2NF90IGZyYW1lVG9wT2Zmc2V0ID0gc3RhY2tQb2ludGVyT2Zmc2V0
Rm9yKGNvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpOworICAgICAgICBSRUxFQVNFX0FTU0VS
VChjb250ZXh0LmdwcjxpbnRwdHJfdD4ocmVnVDEpID09IGZyYW1lVG9wT2Zmc2V0KTsKKyAgICB9
OworICAgIHByb2JlKHRhZ0NGdW5jdGlvblB0cjxKSVRQcm9iZVB0clRhZz4ocHJvYmVGdW5jdGlv
biksIG51bGxwdHIpOworI2VuZGlmCisKKyAgICBhZGRQdHIoY2FsbEZyYW1lUmVnaXN0ZXIsIHJl
Z1QxKTsKKworICAgIEp1bXBMaXN0IHN0YWNrT3ZlcmZsb3c7CisgICAgaWYgKGhhc0h1Z2VGcmFt
ZSkKKyAgICAgICAgc3RhY2tPdmVyZmxvdy5hcHBlbmQoYnJhbmNoUHRyKEFib3ZlLCByZWdUMSwg
Y2FsbEZyYW1lUmVnaXN0ZXIpKTsKKyAgICBzdGFja092ZXJmbG93LmFwcGVuZChicmFuY2hQdHIo
QWJvdmUsIEFic29sdXRlQWRkcmVzcyh2bS5hZGRyZXNzT2ZTb2Z0U3RhY2tMaW1pdCgpKSwgcmVn
VDEpKTsKKworICAgIC8vIFdlJ2xsIGJlIGltbWluZW50bHkgcmV0dXJpbmcgd2l0aCBhIHJldGFi
IGluIHRoZSBub3JtYWwgcGF0aCwgd2hpY2ggd2lsbCBkbyB2YWxpZGF0aW9uLgorICAgIC8vIFNv
LCBleHRyYSB2YWxpZGF0aW9uIGhlcmUgaXMgcmVkdW5kYW50LgorICAgIHVudGFnUmV0dXJuQWRk
cmVzc1dpdGhvdXRFeHRyYVZhbGlkYXRpb24oKTsKKyNpZiBDUFUoWDg2XzY0KQorICAgIHBvcChy
ZWdUMik7IC8vIFNhdmUgdGhlIHJldHVybiBhZGRyZXNzLgorI2VuZGlmCisgICAgbW92ZShyZWdU
MSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIHRhZ1JldHVybkFkZHJlc3MoKTsKKyAgICBj
aGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOworI2lmIENQVShYODZfNjQpCisgICAgcHVzaChy
ZWdUMik7IC8vIFJlc3RvcmUgdGhlIHJldHVybiBhZGRyZXNzLgorI2VuZGlmCisKKyAgICBlbWl0
U2F2ZUNhbGxlZVNhdmVzRm9yQmFzZWxpbmVKSVQoKTsKKyAgICBlbWl0TWF0ZXJpYWxpemVUYWdD
aGVja1JlZ2lzdGVycygpOworCisgICAgaWYgKGRvZXNQcm9maWxpbmcpIHsKKyAgICAgICAgY29u
c3RleHByIEdQUlJlZyBhcmd1bWVudFZhbHVlUHJvZmlsZUdQUiA9IHJlZ1Q2OworICAgICAgICBj
b25zdGV4cHIgR1BSUmVnIG51bVBhcmFtZXRlcnNHUFIgPSByZWdUNTsKKyAgICAgICAgY29uc3Rl
eHByIEdQUlJlZyBhcmd1bWVudEdQUiA9IHJlZ1Q0OworCisgICAgICAgIGxvYWQzMihBZGRyZXNz
KGNvZGVCbG9ja0dQUiwgQ29kZUJsb2NrOjpvZmZzZXRPZk51bVBhcmFtZXRlcnMoKSksIG51bVBh
cmFtZXRlcnNHUFIpOworICAgICAgICBsb2FkUHRyKEFkZHJlc3MoY29kZUJsb2NrR1BSLCBDb2Rl
QmxvY2s6Om9mZnNldE9mQXJndW1lbnRWYWx1ZVByb2ZpbGVzKCkpLCBhcmd1bWVudFZhbHVlUHJv
ZmlsZUdQUik7CisgICAgICAgIGlmIChpc0NvbnN0cnVjdG9yKQorICAgICAgICAgICAgYWRkUHRy
KFRydXN0ZWRJbW0zMihzaXplb2YoVmFsdWVQcm9maWxlKSksIGFyZ3VtZW50VmFsdWVQcm9maWxl
R1BSKTsKKworICAgICAgICBpbnQgc3RhcnRBcmd1bWVudCA9IENhbGxGcmFtZVNsb3Q6OnRoaXNB
cmd1bWVudCArIChpc0NvbnN0cnVjdG9yID8gMSA6IDApOworICAgICAgICBpbnQgc3RhcnRBcmd1
bWVudE9mZnNldCA9IHN0YXJ0QXJndW1lbnQgKiB2aXJ0dWFsUmVnaXN0ZXJTaXplOworICAgICAg
ICBtb3ZlKFRydXN0ZWRJbW02NChzdGFydEFyZ3VtZW50T2Zmc2V0KSwgYXJndW1lbnRHUFIpOwor
CisgICAgICAgIGFkZDMyKFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQ+KENhbGxGcmFtZVNs
b3Q6OnRoaXNBcmd1bWVudCkpLCBudW1QYXJhbWV0ZXJzR1BSKTsKKyAgICAgICAgbHNoaWZ0MzIo
VHJ1c3RlZEltbTMyKHZpcnR1YWxSZWdpc3RlclNpemVTaGlmdCksIG51bVBhcmFtZXRlcnNHUFIp
OworCisgICAgICAgIGFkZFB0cihjYWxsRnJhbWVSZWdpc3RlciwgYXJndW1lbnRHUFIpOworICAg
ICAgICBhZGRQdHIoY2FsbEZyYW1lUmVnaXN0ZXIsIG51bVBhcmFtZXRlcnNHUFIpOworCisgICAg
ICAgIExhYmVsIGxvb3BTdGFydCh0aGlzKTsKKyAgICAgICAgSnVtcCBkb25lID0gYnJhbmNoUHRy
KEFib3ZlT3JFcXVhbCwgYXJndW1lbnRHUFIsIG51bVBhcmFtZXRlcnNHUFIpOworICAgICAgICB7
CisgICAgICAgICAgICBsb2FkNjQoQWRkcmVzcyhhcmd1bWVudEdQUiksIHJlZ1QwKTsKKyAgICAg
ICAgICAgIHN0b3JlNjQocmVnVDAsIEFkZHJlc3MoYXJndW1lbnRWYWx1ZVByb2ZpbGVHUFIsIE9C
SkVDVF9PRkZTRVRPRihWYWx1ZVByb2ZpbGUsIG1fYnVja2V0cykpKTsKKworICAgICAgICAgICAg
Ly8gVGhlIGFyZ3VtZW50IFZhbHVlUHJvZmlsZXMgYXJlIHN0b3JlZCBpbiBhIEZpeGVkVmVjdG9y
LiBIZW5jZSwgdGhlCisgICAgICAgICAgICAvLyBhZGRyZXNzIG9mIHRoZSBuZXh0IHByb2ZpbGUg
Y2FuIGJlIHRyaXZpYWxseSBjb21wdXRlZCB3aXRoIGFuIGluY3JlbWVudC4KKyAgICAgICAgICAg
IGFkZFB0cihUcnVzdGVkSW1tMzIoc2l6ZW9mKFZhbHVlUHJvZmlsZSkpLCBhcmd1bWVudFZhbHVl
UHJvZmlsZUdQUik7CisgICAgICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHZpcnR1YWxSZWdp
c3RlclNpemUpLCBhcmd1bWVudEdQUik7CisgICAgICAgICAgICBqdW1wKCkubGlua1RvKGxvb3BT
dGFydCwgdGhpcyk7CisgICAgICAgIH0KKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgIH0K
KyAgICByZXQoKTsKKworICAgIHN0YWNrT3ZlcmZsb3cubGluayh0aGlzKTsKKyNpZiBDUFUoWDg2
XzY0KQorICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoMSAqIHNpemVvZihDUFVSZWdpc3RlcikpLCBz
dGFja1BvaW50ZXJSZWdpc3Rlcik7IC8vIGRpc2NhcmQgcmV0dXJuIGFkZHJlc3MuCisjZW5kaWYK
KworICAgIHVpbnQzMl90IGxvY2F0aW9uQml0cyA9IENhbGxTaXRlSW5kZXgoMCkuYml0cygpOwor
ICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKGxvY2F0aW9uQml0cyksIHRhZ0ZvcihDYWxsRnJhbWVT
bG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykpOworCisgICAgaWYgKG1heEZyYW1lRXh0
ZW50Rm9yU2xvd1BhdGhDYWxsKQorICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC1zdGF0aWNf
Y2FzdDxpbnQzMl90PihtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCkpLCBzdGFja1BvaW50
ZXJSZWdpc3Rlcik7CisKKyAgICBzZXR1cEFyZ3VtZW50czxkZWNsdHlwZShvcGVyYXRpb25UaHJv
d1N0YWNrT3ZlcmZsb3dFcnJvcik+KGNvZGVCbG9ja0dQUik7CisgICAgcHJlcGFyZUNhbGxPcGVy
YXRpb24odm0pOworICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIG9wZXJhdGlvbkNhbGwgPSBjYWxs
KE9wZXJhdGlvblB0clRhZyk7CisgICAgSnVtcCBoYW5kbGVFeGNlcHRpb25KdW1wID0ganVtcCgp
OworCisgICAgYXV0byBoYW5kbGVyID0gdm0uZ2V0Q1RJU3R1YihoYW5kbGVFeGNlcHRpb25XaXRo
Q2FsbEZyYW1lUm9sbGJhY2tHZW5lcmF0b3IpOworCisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZl
cigqdGhpcywgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpFeHRyYUNUSVRo
dW5rKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKG9wZXJhdGlvbkNhbGwsIEZ1bmN0aW9uUHRyPE9w
ZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uVGhyb3dTdGFja092ZXJmbG93RXJyb3IpKTsKKyAgICBw
YXRjaEJ1ZmZlci5saW5rKGhhbmRsZUV4Y2VwdGlvbkp1bXAsIENvZGVMb2NhdGlvbkxhYmVsKGhh
bmRsZXIucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7CisgICAgcmV0dXJuIEZJTkFMSVpFX0NP
REUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCB0aHVua05hbWUpOworfQorCitzdGF0aWMg
Y29uc3RleHByIGJvb2wgZG9lc1Byb2ZpbGluZyA9IHRydWU7CitzdGF0aWMgY29uc3RleHByIGJv
b2wgaXNDb25zdHJ1Y3RvciA9IHRydWU7CitzdGF0aWMgY29uc3RleHByIGJvb2wgaGFzSHVnZUZy
YW1lID0gdHJ1ZTsKKworI2RlZmluZSBERUZJTkVfUFJPR0xPR1VFX0dFTkVSQVRPUihkb2VzUHJv
ZmlsaW5nLCBpc0NvbnN0cnVjdG9yLCBoYXNIdWdlRnJhbWUsIG5hbWUsIGFyaXR5Rml4dXBOYW1l
KSBcCisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6Om5hbWUo
Vk0mIHZtKSBcCisgICAgeyBcCisgICAgICAgIEpJVCBqaXQodm0pOyBcCisgICAgICAgIHJldHVy
biBqaXQucHJvbG9ndWVHZW5lcmF0b3Iodm0sIGRvZXNQcm9maWxpbmcsIGlzQ29uc3RydWN0b3Is
IGhhc0h1Z2VGcmFtZSwgIkJhc2VsaW5lOiAiICNuYW1lKTsgXAorICAgIH0KKworRk9SX0VBQ0hf
UFJPTE9HVUVfR0VORVJBVE9SKERFRklORV9QUk9HTE9HVUVfR0VORVJBVE9SKQorI3VuZGVmIERF
RklORV9QUk9HTE9HVUVfR0VORVJBVE9SCisKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz4gSklUOjphcml0eUZpeHVwUHJvbG9ndWVHZW5lcmF0b3IoVk0mIHZtLCBib29sIGlz
Q29uc3RydWN0b3IsIFRodW5rR2VuZXJhdG9yIG5vcm1hbFByb2xvZ3VlR2VuZXJhdG9yLCBjb25z
dCBjaGFyKiB0aHVua05hbWUpCit7CisgICAgLy8gVGhpcyBmdW5jdGlvbiBnZW5lcmF0ZXMgdGhl
IEJhc2VsaW5lIEpJVCdzIHByb2xvZ3VlIGNvZGUuIEl0IGlzIG5vdCB1c2VhYmxlIGJ5IG90aGVy
IHRpZXJzLgorICAgIGNvbnN0ZXhwciBHUFJSZWcgY29kZUJsb2NrR1BSID0gcmVnVDc7IC8vIGlu
Y29taW5nLgorICAgIGNvbnN0ZXhwciBHUFJSZWcgbnVtUGFyYW1ldGVyc0dQUiA9IHJlZ1Q2Owor
CisgICAgdGFnUmV0dXJuQWRkcmVzcygpOworI2lmIENQVShYODZfNjQpCisgICAgcHVzaChmcmFt
ZVBvaW50ZXJSZWdpc3Rlcik7CisjZWxpZiBDUFUoQVJNNjQpCisgICAgcHVzaFBhaXIoZnJhbWVQ
b2ludGVyUmVnaXN0ZXIsIGxpbmtSZWdpc3Rlcik7CisjZW5kaWYKKworICAgIHN0b3JlNjQoY29k
ZUJsb2NrR1BSLCBhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jaykpOworICAgIHN0
b3JlOChUcnVzdGVkSW1tMzIoMCksIEFkZHJlc3MoY29kZUJsb2NrR1BSLCBDb2RlQmxvY2s6Om9m
ZnNldE9mU2hvdWxkQWx3YXlzQmVJbmxpbmVkKCkpKTsKKworICAgIGxvYWQzMihwYXlsb2FkRm9y
KENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVnVDEpOworICAg
IGxvYWQzMihBZGRyZXNzKGNvZGVCbG9ja0dQUiwgQ29kZUJsb2NrOjpvZmZzZXRPZk51bVBhcmFt
ZXRlcnMoKSksIG51bVBhcmFtZXRlcnNHUFIpOworICAgIEp1bXAgbm9GaXh1cE5lZWRlZCA9IGJy
YW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIG51bVBhcmFtZXRlcnNHUFIpOworCisgICAgaWYg
Y29uc3RleHByIChtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCkKKyAgICAgICAgYWRkUHRy
KFRydXN0ZWRJbW0zMigtc3RhdGljX2Nhc3Q8aW50MzJfdD4obWF4RnJhbWVFeHRlbnRGb3JTbG93
UGF0aENhbGwpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworCisgICAgbG9hZFB0cihBZGRyZXNz
KGNvZGVCbG9ja0dQUiwgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgYXJndW1l
bnRHUFIwKTsKKworICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPGRlY2x0eXBlKG9wZXJh
dGlvbkNvbnN0cnVjdEFyaXR5Q2hlY2spLCBkZWNsdHlwZShvcGVyYXRpb25DYWxsQXJpdHlDaGVj
ayk+Ojp2YWx1ZSk7CisgICAgc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUob3BlcmF0aW9uQ2FsbEFy
aXR5Q2hlY2spPihhcmd1bWVudEdQUjApOworICAgIHByZXBhcmVDYWxsT3BlcmF0aW9uKHZtKTsK
KworICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGFyaXR5Q2hlY2tDYWxsID0gY2FsbChPcGVyYXRp
b25QdHJUYWcpOworICAgIEp1bXAgaGFuZGxlRXhjZXB0aW9uSnVtcCA9IGVtaXROb25QYXRjaGFi
bGVFeGNlcHRpb25DaGVjayh2bSk7CisKKyAgICBpZiBjb25zdGV4cHIgKG1heEZyYW1lRXh0ZW50
Rm9yU2xvd1BhdGhDYWxsKQorICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKG1heEZyYW1lRXh0
ZW50Rm9yU2xvd1BhdGhDYWxsKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIEp1bXAgbmVl
ZEZpeHVwID0gYnJhbmNoVGVzdDMyKE5vblplcm8sIHJldHVyblZhbHVlR1BSKTsKKyAgICBub0Zp
eHVwTmVlZGVkLmxpbmsodGhpcyk7CisKKyAgICAvLyBUaGUgbm9ybWFsIHByb2xvZ3VlIGV4cGVj
dHMgaW5jb21pbmcgY29kZUJsb2NrR1BSLgorICAgIGxvYWQ2NChhZGRyZXNzRm9yKENhbGxGcmFt
ZVNsb3Q6OmNvZGVCbG9jayksIGNvZGVCbG9ja0dQUik7CisKKyNpZiBDUFUoWDg2XzY0KQorICAg
IHBvcChmcmFtZVBvaW50ZXJSZWdpc3Rlcik7CisjZWxpZiBDUFUoQVJNNjQpCisgICAgcG9wUGFp
cihmcmFtZVBvaW50ZXJSZWdpc3RlciwgbGlua1JlZ2lzdGVyKTsKKyNlbmRpZgorICAgIHVudGFn
UmV0dXJuQWRkcmVzcygpOworCisgICAgSnVtcExpc3Qgbm9ybWFsUHJvbG9ndWVKdW1wOworICAg
IG5vcm1hbFByb2xvZ3VlSnVtcC5hcHBlbmQoanVtcCgpKTsKKworICAgIG5lZWRGaXh1cC5saW5r
KHRoaXMpOworCisgICAgLy8gUmVzdG9yZSB0aGUgc3RhY2sgZm9yIGFyaXR5IGZpeHVwLCBhbmQg
cHJlc2VydmUgdGhlIHJldHVybiBhZGRyZXNzLgorICAgIC8vIGFyaXR5Rml4dXBHZW5lcmF0b3Ig
d2lsbCBiZSBzaGlmdGluZyB0aGUgc3RhY2suIFNvLCB3ZSBjYW4ndCB1c2UgdGhlIHN0YWNrIHRv
CisgICAgLy8gcHJlc2VydmUgdGhlIHJldHVybiBhZGRyZXNzLiBXZSBhbHNvIGNhbid0IHVzZSBj
YWxsZWUgc2F2ZWQgcmVnaXN0ZXJzIGJlY2F1c2UKKyAgICAvLyB0aGV5IGhhdmVuJ3QgYmVlbiBz
YXZlZCB5ZXQuCisgICAgLy8KKyAgICAvLyBhcml0eUZpeHVwR2VuZXJhdG9yIGlzIGNhcmVmdWxs
eSBjcmFmdGVkIHRvIG9ubHkgdXNlIGEwLCBhMSwgYTIsIHQzLCB0NCBhbmQgdDUuCisgICAgLy8g
U28sIHRoZSByZXR1cm4gYWRkcmVzcyBjYW4gYmUgcHJlc2VydmVkIGluIHJlZ1Q3LgorI2lmIENQ
VShYODZfNjQpCisgICAgcG9wKGFyZ3VtZW50R1BSMik7IC8vIGRpc2NhcmQuCisgICAgcG9wKHJl
Z1Q3KTsgLy8gc2F2ZSByZXR1cm4gYWRkcmVzcy4KKyNlbGlmIENQVShBUk02NCkKKyAgICBwb3BQ
YWlyKGZyYW1lUG9pbnRlclJlZ2lzdGVyLCBsaW5rUmVnaXN0ZXIpOworICAgIHVudGFnUmV0dXJu
QWRkcmVzcygpOworICAgIG1vdmUobGlua1JlZ2lzdGVyLCByZWdUNyk7CisgICAgYXV0byByYW5k
b21SZXR1cm5BZGRyZXNzVGFnID0gcmFuZG9tKCk7CisgICAgbW92ZShUcnVzdGVkSW1tMzIocmFu
ZG9tUmV0dXJuQWRkcmVzc1RhZyksIHJlZ1QxKTsKKyAgICB0YWdQdHIocmVnVDEsIHJlZ1Q3KTsK
KyNlbmRpZgorICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7
CisgICAgQ2FsbCBhcml0eUZpeHVwQ2FsbCA9IG5lYXJDYWxsKCk7CisKKyNpZiBDUFUoWDg2XzY0
KQorICAgIHB1c2gocmVnVDcpOyAvLyByZXN0b3JlIHJldHVybiBhZGRyZXNzLgorI2VsaWYgQ1BV
KEFSTTY0KQorICAgIG1vdmUoVHJ1c3RlZEltbTMyKHJhbmRvbVJldHVybkFkZHJlc3NUYWcpLCBy
ZWdUMSk7CisgICAgdW50YWdQdHIocmVnVDEsIHJlZ1Q3KTsKKyAgICBtb3ZlKHJlZ1Q3LCBsaW5r
UmVnaXN0ZXIpOworI2VuZGlmCisKKyAgICBsb2FkNjQoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90
Ojpjb2RlQmxvY2spLCBjb2RlQmxvY2tHUFIpOworICAgIG5vcm1hbFByb2xvZ3VlSnVtcC5hcHBl
bmQoanVtcCgpKTsKKworICAgIGF1dG8gYXJpdHlDaGVja09wZXJhdGlvbiA9IGlzQ29uc3RydWN0
b3IgPyBvcGVyYXRpb25Db25zdHJ1Y3RBcml0eUNoZWNrIDogb3BlcmF0aW9uQ2FsbEFyaXR5Q2hl
Y2s7CisgICAgYXV0byBhcml0eUZpeHVwID0gdm0uZ2V0Q1RJU3R1Yihhcml0eUZpeHVwR2VuZXJh
dG9yKTsKKyAgICBhdXRvIG5vcm1hbFByb2xvZ3VlID0gdm0uZ2V0Q1RJU3R1Yihub3JtYWxQcm9s
b2d1ZUdlbmVyYXRvcik7CisgICAgYXV0byBleGNlcHRpb25IYW5kbGVyID0gdm0uZ2V0Q1RJU3R1
Yihwb3BUaHVua1N0YWNrUHJlc2VydmVzQW5kSGFuZGxlRXhjZXB0aW9uR2VuZXJhdG9yKTsKKwor
ICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnRoaXMsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1
ZmZlcjo6UHJvZmlsZTo6RXh0cmFDVElUaHVuayk7CisgICAgcGF0Y2hCdWZmZXIubGluayhhcml0
eUNoZWNrQ2FsbCwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihhcml0eUNoZWNrT3BlcmF0
aW9uKSk7CisgICAgcGF0Y2hCdWZmZXIubGluayhhcml0eUZpeHVwQ2FsbCwgRnVuY3Rpb25QdHIo
YXJpdHlGaXh1cC5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKKyAgICBwYXRjaEJ1ZmZlci5s
aW5rKG5vcm1hbFByb2xvZ3VlSnVtcCwgQ29kZUxvY2F0aW9uTGFiZWwobm9ybWFsUHJvbG9ndWUu
cmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7CisgICAgcGF0Y2hCdWZmZXIubGluayhoYW5kbGVF
eGNlcHRpb25KdW1wLCBDb2RlTG9jYXRpb25MYWJlbChleGNlcHRpb25IYW5kbGVyLnJldGFnZ2Vk
Q29kZTxOb1B0clRhZz4oKSkpOworICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVy
LCBKSVRUaHVua1B0clRhZywgdGh1bmtOYW1lKTsKK30KKworI2RlZmluZSBERUZJTkVfQVJJVFlf
UFJPR0xPR1VFX0dFTkVSQVRPUihkb2VzUHJvZmlsaW5nLCBpc0NvbnN0cnVjdG9yLCBoYXNIdWdl
RnJhbWUsIG5hbWUsIGFyaXR5Rml4dXBOYW1lKSBcCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHJUYWc+IEpJVDo6YXJpdHlGaXh1cE5hbWUoVk0mIHZtKSBcCisgICAgeyBcCisgICAg
ICAgIEpJVCBqaXQodm0pOyBcCisgICAgICAgIHJldHVybiBqaXQuYXJpdHlGaXh1cFByb2xvZ3Vl
R2VuZXJhdG9yKHZtLCBpc0NvbnN0cnVjdG9yLCBuYW1lLCAiQmFzZWxpbmU6ICIgI2FyaXR5Rml4
dXBOYW1lKTsgXAorICAgIH0KKworRk9SX0VBQ0hfUFJPTE9HVUVfR0VORVJBVE9SKERFRklORV9B
UklUWV9QUk9HTE9HVUVfR0VORVJBVE9SKQorI3VuZGVmIERFRklORV9BUklUWV9QUk9HTE9HVUVf
R0VORVJBVE9SCisKKyNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKKwogdm9pZCBK
SVQ6OmxpbmsoKQogewogICAgIExpbmtCdWZmZXImIHBhdGNoQnVmZmVyID0gKm1fbGlua0J1ZmZl
cjsKQEAgLTEwNDYsOSArMTM1Nyw5IEBAIENvbXBpbGF0aW9uUmVzdWx0IEpJVDo6cHJpdmF0ZUNv
bXBpbGUoSkkKICAgICByZXR1cm4gZmluYWxpemVPbk1haW5UaHJlYWQoKTsKIH0KIAorI2lmICFF
TkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUV4Y2VwdGlv
bkhhbmRsZXJzKCkKIHsKLSNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAgICAgaWYgKCFt
X2V4Y2VwdGlvbkNoZWNrc1dpdGhDYWxsRnJhbWVSb2xsYmFjay5lbXB0eSgpKSB7CiAgICAgICAg
IG1fZXhjZXB0aW9uQ2hlY2tzV2l0aENhbGxGcmFtZVJvbGxiYWNrLmxpbmsodGhpcyk7CiAKQEAg
LTEwNzMsOCArMTM4NCw4IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUV4Y2VwdGlvbkhhbmRs
ZXIKICAgICAgICAgbV9mYXJDYWxscy5hcHBlbmQoRmFyQ2FsbFJlY29yZChjYWxsKE9wZXJhdGlv
blB0clRhZyksIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uTG9va3VwRXhj
ZXB0aW9uSGFuZGxlcikpKTsKICAgICAgICAganVtcFRvRXhjZXB0aW9uSGFuZGxlcih2bSgpKTsK
ICAgICB9Ci0jZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiB9CisjZW5kaWYgLy8g
IUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCiB2b2lkIEpJVDo6ZG9NYWluVGhyZWFkUHJlcGFy
YXRpb25CZWZvcmVDb21waWxlKCkKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkocmV2
aXNpb24gMjc4NTM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzE4LDcgKzMxOCw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAg
bV9leGNlcHRpb25DaGVja3NXaXRoQ2FsbEZyYW1lUm9sbGJhY2suYXBwZW5kKGVtaXRFeGNlcHRp
b25DaGVjayh2bSgpKSk7CiAgICAgICAgIH0KIAorI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5L
UykKICAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZUV4Y2VwdGlvbkhhbmRsZXJzKCk7CisjZW5k
aWYKIAogICAgICAgICB2b2lkIGFkdmFuY2VUb05leHRDaGVja3BvaW50KCk7CiAgICAgICAgIHZv
aWQgZW1pdEp1bXBTbG93VG9Ib3RGb3JDaGVja3BvaW50KEp1bXApOwpAQCAtNzkwLDYgKzc5Miwy
NiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogICAg
ICAgICAvLyBUaHVuayBnZW5lcmF0b3JzLgorICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiBwcm9sb2d1ZUdlbmVyYXRvcjAoVk0mKTsKKyAgICAgICAg
c3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gcHJvbG9ndWVHZW5l
cmF0b3IxKFZNJik7CisgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1
bmtQdHJUYWc+IHByb2xvZ3VlR2VuZXJhdG9yMihWTSYpOworICAgICAgICBzdGF0aWMgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBwcm9sb2d1ZUdlbmVyYXRvcjMoVk0mKTsK
KyAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gcHJv
bG9ndWVHZW5lcmF0b3I0KFZNJik7CisgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+IHByb2xvZ3VlR2VuZXJhdG9yNShWTSYpOworICAgICAgICBzdGF0
aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBwcm9sb2d1ZUdlbmVyYXRv
cjYoVk0mKTsKKyAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gcHJvbG9ndWVHZW5lcmF0b3I3KFZNJik7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRUaHVua1B0clRhZz4gcHJvbG9ndWVHZW5lcmF0b3IoVk0mLCBib29sIGRvZXNQcm9m
aWxpbmcsIGJvb2wgaXNDb25zdHJ1Y3RvciwgYm9vbCBoYXNIdWdlRnJhbWUsIGNvbnN0IGNoYXIq
IG5hbWUpOworCisgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+IGFyaXR5Rml4dXBfcHJvbG9ndWVHZW5lcmF0b3IwKFZNJik7CisgICAgICAgIHN0YXRp
YyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGFyaXR5Rml4dXBfcHJvbG9n
dWVHZW5lcmF0b3IxKFZNJik7CisgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IGFyaXR5Rml4dXBfcHJvbG9ndWVHZW5lcmF0b3IyKFZNJik7CisgICAg
ICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGFyaXR5Rml4
dXBfcHJvbG9ndWVHZW5lcmF0b3IzKFZNJik7CisgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGFyaXR5Rml4dXBfcHJvbG9ndWVHZW5lcmF0b3I0KFZN
Jik7CisgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+
IGFyaXR5Rml4dXBfcHJvbG9ndWVHZW5lcmF0b3I1KFZNJik7CisgICAgICAgIHN0YXRpYyBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGFyaXR5Rml4dXBfcHJvbG9ndWVHZW5l
cmF0b3I2KFZNJik7CisgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1
bmtQdHJUYWc+IGFyaXR5Rml4dXBfcHJvbG9ndWVHZW5lcmF0b3I3KFZNJik7CisgICAgICAgIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gYXJpdHlGaXh1cFByb2xvZ3VlR2Vu
ZXJhdG9yKFZNJiwgYm9vbCBpc0NvbnN0cnVjdG9yLCBUaHVua0dlbmVyYXRvciBub3JtYWxQcm9s
b2d1ZUdlbmVyYXRvciwgY29uc3QgY2hhciogbmFtZSk7CisKICAgICAgICAgc3RhdGljIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gc2xvd19vcF9kZWxfYnlfaWRfcHJlcGFy
ZUNhbGxHZW5lcmF0b3IoVk0mKTsKICAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRUaHVua1B0clRhZz4gc2xvd19vcF9kZWxfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9y
KFZNJik7CiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IHNsb3dfb3BfZ2V0X2J5X2lkX3ByZXBhcmVDYWxsR2VuZXJhdG9yKFZNJik7CkBAIC04MDQs
NyArODI2LDE0IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBzbG93X29wX3Jlc29sdmVfc2NvcGVHZW5lcmF0b3Io
Vk0mKTsKIAogICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBvcF9jaGVja190cmFwc19oYW5kbGVyR2VuZXJhdG9yKFZNJik7Ci0gICAgICAgIHN0YXRp
YyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9wX2VudGVyX2hhbmRsZXJH
ZW5lcmF0b3IoVk0mKTsKKworICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiBvcF9lbnRlcl9jYW5CZU9wdGltaXplZF9HZW5lcmF0b3IoVk0mKTsKKyAg
ICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3BfZW50
ZXJfY2Fubm90QmVPcHRpbWl6ZWRfR2VuZXJhdG9yKFZNJik7CisgICAgICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3BfZW50ZXJfR2VuZXJhdG9yKFZNJiwgYm9vbCBj
YW5CZU9wdGltaXplZCwgY29uc3QgY2hhciogdGh1bmtOYW1lKTsKKworI2lmIEVOQUJMRShERkdf
SklUKQorICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiBvcF9sb29wX2hpbnRfR2VuZXJhdG9yKFZNJik7CisjZW5kaWYKICAgICAgICAgc3RhdGljIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3BfcmV0X2hhbmRsZXJHZW5lcmF0
b3IoVk0mKTsKICAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gb3BfdGhyb3dfaGFuZGxlckdlbmVyYXRvcihWTSYpOwogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVElubGluZXMuaAkocmV2aXNpb24gMjc4NTM3KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTkxLDcgKzkx
LDYgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdExvYWRDaGFyYWN0ZQogCiBBTFdBWVNf
SU5MSU5FIEpJVDo6Q2FsbCBKSVQ6OmVtaXROYWtlZE5lYXJDYWxsKENvZGVQdHI8Tm9QdHJUYWc+
IHRhcmdldCkKIHsKLSAgICBBU1NFUlQobV9ieXRlY29kZUluZGV4KTsgLy8gVGhpcyBtZXRob2Qg
c2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNv
IHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNldC4KICAgICBDYWxsIG5ha2VkQ2FsbCA9IG5lYXJD
YWxsKCk7CiAgICAgbV9uZWFyQ2FsbHMuYXBwZW5kKE5lYXJDYWxsUmVjb3JkKG5ha2VkQ2FsbCwg
RnVuY3Rpb25QdHI8SlNJbnRlcm5hbFB0clRhZz4odGFyZ2V0LnJldGFnZ2VkPEpTSW50ZXJuYWxQ
dHJUYWc+KCkpKSk7CiAgICAgcmV0dXJuIG5ha2VkQ2FsbDsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHJldmlzaW9uIDI3ODUzNykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTA2Niw3ICsxMDY2LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW50ZXIoY29uc3Qg
SW5zdHJ1Y3RpbwogICAgIC8vIEV2ZW4gdGhvdWdoIEpJVCBjb2RlIGRvZXNuJ3QgdXNlIHRoZW0s
IHdlIGluaXRpYWxpemUgb3VyIGNvbnN0YW50CiAgICAgLy8gcmVnaXN0ZXJzIHRvIHphcCBzdGFs
ZSBwb2ludGVycywgdG8gYXZvaWQgdW5uZWNlc3NhcmlseSBwcm9sb25naW5nCiAgICAgLy8gb2Jq
ZWN0IGxpZmV0aW1lIGFuZCBpbmNyZWFzaW5nIEdDIHByZXNzdXJlLgotICAgIGZvciAoaW50IGkg
PSBDb2RlQmxvY2s6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3Rl
cnMoKTsgaSA8IG1fY29kZUJsb2NrLT5udW1WYXJzKCk7ICsraSkKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSBDb2RlQmxvY2s6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdp
c3RlcnMoKTsgaSA8IG1fY29kZUJsb2NrLT5udW1WYXJzKCk7ICsraSkKICAgICAgICAgZW1pdFN0
b3JlKHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGkpLCBqc1VuZGVmaW5lZCgpKTsKIAogICAgIEpJ
VFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93
X3BhdGhfZW50ZXIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMu
Y3BwCShyZXZpc2lvbiAyNzg1MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9w
Y29kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNzYsNyArMzc2LDcgQEAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIEpJVCBqaXQodm0pOwogCiAgICAgaml0
LmNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7Ci0gICAgaml0LmVtaXRSZXN0b3JlQ2FsbGVl
U2F2ZXNGb3IoJlJlZ2lzdGVyQXRPZmZzZXRMaXN0OjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVJl
Z2lzdGVycygpKTsKKyAgICBqaXQuZW1pdFJlc3RvcmVDYWxsZWVTYXZlc0ZvckJhc2VsaW5lSklU
KCk7CiAgICAgaml0LmVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CiAgICAgaml0LnJldCgpOwogCkBA
IC0xMTg2LDEwMyArMTE4NiwxMTUgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW50ZXIoY29uc3QgSW5z
dHJ1Y3RpbwogICAgIGVtaXRFbnRlck9wdGltaXphdGlvbkNoZWNrKCk7CiAjZWxzZQogICAgIEFT
U0VSVChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkgPT0gMCk7Ci0gICAgY29uc3RleHByIEdQUlJl
ZyBsb2NhbHNUb0luaXRHUFIgPSBhcmd1bWVudEdQUjA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBj
YW5CZU9wdGltaXplZEdQUiA9IGFyZ3VtZW50R1BSNDsKLQogICAgIHVuc2lnbmVkIGxvY2Fsc1Rv
SW5pdCA9IGNvdW50IC0gQ29kZUJsb2NrOjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNW
aXJ0dWFsUmVnaXN0ZXJzKCk7CiAgICAgUkVMRUFTRV9BU1NFUlQobG9jYWxzVG9Jbml0IDwgY291
bnQpOwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKGxvY2Fsc1RvSW5pdCAqIHNpemVvZihSZWdpc3Rl
cikpLCBsb2NhbHNUb0luaXRHUFIpOwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKGNhbkJlT3B0aW1p
emVkKCkpLCBjYW5CZU9wdGltaXplZEdQUik7Ci0gICAgZW1pdE5ha2VkTmVhckNhbGwodm0oKS5n
ZXRDVElTdHViKG9wX2VudGVyX2hhbmRsZXJHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRh
Zz4oKSk7CisgICAgVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yID0gY2FuQmVPcHRpbWl6ZWQoKSA/
IG9wX2VudGVyX2NhbkJlT3B0aW1pemVkX0dlbmVyYXRvciA6IG9wX2VudGVyX2Nhbm5vdEJlT3B0
aW1pemVkX0dlbmVyYXRvcjsKKyAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bSgpLmdldENUSVN0dWIo
Z2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogI2VuZGlmIC8vIEVOQUJMRShF
WFRSQV9DVElfVEhVTktTKQogfQogCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi1NYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6b3BfZW50ZXJfaGFuZGxlckdl
bmVyYXRvcihWTSYgdm0pCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJ
VDo6b3BfZW50ZXJfR2VuZXJhdG9yKFZNJiB2bSwgYm9vbCBjYW5CZU9wdGltaXplZCwgY29uc3Qg
Y2hhciogdGh1bmtOYW1lKQogewotICAgIEpJVCBqaXQodm0pOwotCiAjaWYgQ1BVKFg4Nl82NCkK
LSAgICBqaXQucHVzaChYODZSZWdpc3RlcnM6OmVicCk7CisgICAgcHVzaChYODZSZWdpc3RlcnM6
OmVicCk7CiAjZWxpZiBDUFUoQVJNNjQpCi0gICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKLSAg
ICBqaXQucHVzaFBhaXIoZnJhbWVQb2ludGVyUmVnaXN0ZXIsIGxpbmtSZWdpc3Rlcik7CisgICAg
dGFnUmV0dXJuQWRkcmVzcygpOworICAgIHB1c2hQYWlyKGZyYW1lUG9pbnRlclJlZ2lzdGVyLCBs
aW5rUmVnaXN0ZXIpOwogI2VuZGlmCiAgICAgLy8gb3BfZW50ZXIgaXMgYWx3YXlzIGF0IGJ5dGVj
b2RlT2Zmc2V0IDAuCi0gICAgaml0LnN0b3JlMzIoVHJ1c3RlZEltbTMyKDApLCB0YWdGb3IoQ2Fs
bEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKTsKKyAgICBzdG9yZTMyKFRy
dXN0ZWRJbW0zMigwKSwgdGFnRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzKSk7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIGxvY2Fsc1RvSW5pdEdQUiA9IGFyZ3Vt
ZW50R1BSMDsKICAgICBjb25zdGV4cHIgR1BSUmVnIGl0ZXJhdG9yR1BSID0gYXJndW1lbnRHUFIx
OwogICAgIGNvbnN0ZXhwciBHUFJSZWcgZW5kR1BSID0gYXJndW1lbnRHUFIyOwogICAgIGNvbnN0
ZXhwciBHUFJSZWcgdW5kZWZpbmVkR1BSID0gYXJndW1lbnRHUFIzOwotICAgIGNvbnN0ZXhwciBH
UFJSZWcgY2FuQmVPcHRpbWl6ZWRHUFIgPSBhcmd1bWVudEdQUjQ7CisgICAgY29uc3RleHByIEdQ
UlJlZyBjb2RlQmxvY2tHUFIgPSBhcmd1bWVudEdQUjQ7CisKKyAgICBjb25zdGV4cHIgaW50IHZp
cnR1YWxSZWdpc3RlclNpemVTaGlmdCA9IDM7CisgICAgc3RhdGljX2Fzc2VydCgoMSA8PCB2aXJ0
dWFsUmVnaXN0ZXJTaXplU2hpZnQpID09IHNpemVvZihSZWdpc3RlcikpOworCisgICAgbG9hZFB0
cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIGNvZGVCbG9ja0dQUik7Cisg
ICAgbG9hZDMyKEFkZHJlc3MoY29kZUJsb2NrR1BSLCBDb2RlQmxvY2s6Om9mZnNldE9mTnVtVmFy
cygpKSwgbG9jYWxzVG9Jbml0R1BSKTsKKyAgICBzdWIzMihUcnVzdGVkSW1tMzIoQ29kZUJsb2Nr
OjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCkpLCBsb2Nh
bHNUb0luaXRHUFIpOworICAgIGxzaGlmdDMyKFRydXN0ZWRJbW0zMih2aXJ0dWFsUmVnaXN0ZXJT
aXplU2hpZnQpLCBsb2NhbHNUb0luaXRHUFIpOwogCiAgICAgc2l6ZV90IHN0YXJ0TG9jYWwgPSBD
b2RlQmxvY2s6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMo
KTsKICAgICBpbnQgc3RhcnRPZmZzZXQgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChzdGFydExv
Y2FsKS5vZmZzZXQoKTsKLSAgICBqaXQubW92ZShUcnVzdGVkSW1tNjQoc3RhcnRPZmZzZXQgKiBz
aXplb2YoUmVnaXN0ZXIpKSwgaXRlcmF0b3JHUFIpOwotICAgIGppdC5zdWI2NChpdGVyYXRvckdQ
UiwgbG9jYWxzVG9Jbml0R1BSLCBlbmRHUFIpOworICAgIG1vdmUoVHJ1c3RlZEltbTY0KHN0YXJ0
T2Zmc2V0ICogc2l6ZW9mKFJlZ2lzdGVyKSksIGl0ZXJhdG9yR1BSKTsKKyAgICBzdWI2NChpdGVy
YXRvckdQUiwgbG9jYWxzVG9Jbml0R1BSLCBlbmRHUFIpOwogCi0gICAgaml0Lm1vdmUoVHJ1c3Rl
ZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKSksIHVuZGVmaW5lZEdQUik7Ci0g
ICAgYXV0byBpbml0TG9vcCA9IGppdC5sYWJlbCgpOwotICAgIEp1bXAgaW5pdERvbmUgPSBqaXQu
YnJhbmNoMzIoTGVzc1RoYW5PckVxdWFsLCBpdGVyYXRvckdQUiwgZW5kR1BSKTsKKyAgICBtb3Zl
KFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSkpLCB1bmRlZmluZWRH
UFIpOworICAgIGF1dG8gaW5pdExvb3AgPSBsYWJlbCgpOworICAgIEp1bXAgaW5pdERvbmUgPSBi
cmFuY2gzMihMZXNzVGhhbk9yRXF1YWwsIGl0ZXJhdG9yR1BSLCBlbmRHUFIpOwogICAgIHsKLSAg
ICAgICAgaml0LnN0b3JlNjQodW5kZWZpbmVkR1BSLCBCYXNlSW5kZXgoR1BSSW5mbzo6Y2FsbEZy
YW1lUmVnaXN0ZXIsIGl0ZXJhdG9yR1BSLCBUaW1lc09uZSkpOwotICAgICAgICBqaXQuc3ViNjQo
VHJ1c3RlZEltbTMyKHNpemVvZihSZWdpc3RlcikpLCBpdGVyYXRvckdQUik7Ci0gICAgICAgIGpp
dC5qdW1wKGluaXRMb29wKTsKKyAgICAgICAgc3RvcmU2NCh1bmRlZmluZWRHUFIsIEJhc2VJbmRl
eChHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgaXRlcmF0b3JHUFIsIFRpbWVzT25lKSk7Cisg
ICAgICAgIHN1YjY0KFRydXN0ZWRJbW0zMihzaXplb2YoUmVnaXN0ZXIpKSwgaXRlcmF0b3JHUFIp
OworICAgICAgICBqdW1wKGluaXRMb29wKTsKICAgICB9Ci0gICAgaW5pdERvbmUubGluaygmaml0
KTsKKyAgICBpbml0RG9uZS5saW5rKHRoaXMpOwogCi0gICAgLy8gZW1pdFdyaXRlQmFycmllciht
X2NvZGVCbG9jaykuCi0gICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpj
b2RlQmxvY2spLCBhcmd1bWVudEdQUjEpOwotICAgIEp1bXAgb3duZXJJc1JlbWVtYmVyZWRPcklu
RWRlbiA9IGppdC5iYXJyaWVyQnJhbmNoKHZtLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7
CisgICAgLy8gSW1wbGVtZW50aW5nIGVtaXRXcml0ZUJhcnJpZXIobV9jb2RlQmxvY2spLgorICAg
IEp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9IGJhcnJpZXJCcmFuY2godm0sIGNvZGVC
bG9ja0dQUiwgYXJndW1lbnRHUFIyKTsKIAotICAgIGppdC5tb3ZlKGNhbkJlT3B0aW1pemVkR1BS
LCBHUFJJbmZvOjpudW1iZXJUYWdSZWdpc3Rlcik7IC8vIHNhdmUuCi0gICAgaml0LnNldHVwQXJn
dW1lbnRzPGRlY2x0eXBlKG9wZXJhdGlvbldyaXRlQmFycmllclNsb3dQYXRoKT4oJnZtLCBhcmd1
bWVudEdQUjEpOwotICAgIGppdC5wcmVwYXJlQ2FsbE9wZXJhdGlvbih2bSk7Ci0gICAgQ2FsbCBv
cGVyYXRpb25Xcml0ZUJhcnJpZXJDYWxsID0gaml0LmNhbGwoT3BlcmF0aW9uUHRyVGFnKTsKKyAg
ICBzZXR1cEFyZ3VtZW50czxkZWNsdHlwZShvcGVyYXRpb25Xcml0ZUJhcnJpZXJTbG93UGF0aCk+
KCZ2bSwgY29kZUJsb2NrR1BSKTsKKyAgICBwcmVwYXJlQ2FsbE9wZXJhdGlvbih2bSk7CisgICAg
Q2FsbCBvcGVyYXRpb25Xcml0ZUJhcnJpZXJDYWxsID0gY2FsbChPcGVyYXRpb25QdHJUYWcpOwor
CisgICAgaWYgKGNhbkJlT3B0aW1pemVkKQorICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2Fs
bEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgY29kZUJsb2NrR1BSKTsKIAotICAgIGppdC5tb3ZlKEdQ
UkluZm86Om51bWJlclRhZ1JlZ2lzdGVyLCBjYW5CZU9wdGltaXplZEdQUik7IC8vIHJlc3RvcmUu
Ci0gICAgaml0Lm1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6Ok51bWJlclRhZyksIEdQUkluZm86
Om51bWJlclRhZ1JlZ2lzdGVyKTsKLSAgICBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuLmxpbmso
JmppdCk7CisgICAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbi5saW5rKHRoaXMpOwogCiAjaWYg
RU5BQkxFKERGR19KSVQpCisgICAgLy8gSW1wbGVtZW50aW5nIGVtaXRFbnRlck9wdGltaXphdGlv
bkNoZWNrKCkuCiAgICAgQ2FsbCBvcGVyYXRpb25PcHRpbWl6ZUNhbGw7Ci0gICAgaWYgKE9wdGlv
bnM6OnVzZURGR0pJVCgpKSB7Ci0gICAgICAgIC8vIGVtaXRFbnRlck9wdGltaXphdGlvbkNoZWNr
KCkuCisgICAgaWYgKGNhbkJlT3B0aW1pemVkKSB7CiAgICAgICAgIEp1bXBMaXN0IHNraXBPcHRp
bWl6ZTsKIAotICAgICAgICBza2lwT3B0aW1pemUuYXBwZW5kKGppdC5icmFuY2hUZXN0MzIoWmVy
bywgY2FuQmVPcHRpbWl6ZWRHUFIpKTsKKyAgICAgICAgc2tpcE9wdGltaXplLmFwcGVuZChicmFu
Y2hBZGQzMihTaWduZWQsIFRydXN0ZWRJbW0zMihPcHRpb25zOjpleGVjdXRpb25Db3VudGVySW5j
cmVtZW50Rm9yRW50cnkoKSksIEFkZHJlc3MoY29kZUJsb2NrR1BSLCBDb2RlQmxvY2s6Om9mZnNl
dE9mSklURXhlY3V0ZUNvdW50ZXIoKSkpKTsKIAotICAgICAgICBqaXQubG9hZFB0cihhZGRyZXNz
Rm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIGFyZ3VtZW50R1BSMSk7Ci0gICAgICAgIHNr
aXBPcHRpbWl6ZS5hcHBlbmQoaml0LmJyYW5jaEFkZDMyKFNpZ25lZCwgVHJ1c3RlZEltbTMyKE9w
dGlvbnM6OmV4ZWN1dGlvbkNvdW50ZXJJbmNyZW1lbnRGb3JFbnRyeSgpKSwgQWRkcmVzcyhhcmd1
bWVudEdQUjEsIENvZGVCbG9jazo6b2Zmc2V0T2ZKSVRFeGVjdXRlQ291bnRlcigpKSkpOworICAg
ICAgICBjb3B5TExJbnRCYXNlbGluZUNhbGxlZVNhdmVzRnJvbUZyYW1lT3JSZWdpc3RlclRvRW50
cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtLnRvcEVudHJ5RnJhbWUpOwogCi0gICAgICAgIGpp
dC5jb3B5TExJbnRCYXNlbGluZUNhbGxlZVNhdmVzRnJvbUZyYW1lT3JSZWdpc3RlclRvRW50cnlG
cmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtLnRvcEVudHJ5RnJhbWUpOworICAgICAgICBzZXR1cEFy
Z3VtZW50czxkZWNsdHlwZShvcGVyYXRpb25PcHRpbWl6ZSk+KCZ2bSwgVHJ1c3RlZEltbTMyKDAp
KTsKKyAgICAgICAgcHJlcGFyZUNhbGxPcGVyYXRpb24odm0pOworICAgICAgICBvcGVyYXRpb25P
cHRpbWl6ZUNhbGwgPSBjYWxsKE9wZXJhdGlvblB0clRhZyk7CiAKLSAgICAgICAgaml0LnNldHVw
QXJndW1lbnRzPGRlY2x0eXBlKG9wZXJhdGlvbk9wdGltaXplKT4oJnZtLCBUcnVzdGVkSW1tMzIo
MCkpOwotICAgICAgICBqaXQucHJlcGFyZUNhbGxPcGVyYXRpb24odm0pOwotICAgICAgICBvcGVy
YXRpb25PcHRpbWl6ZUNhbGwgPSBqaXQuY2FsbChPcGVyYXRpb25QdHJUYWcpOwotCi0gICAgICAg
IHNraXBPcHRpbWl6ZS5hcHBlbmQoaml0LmJyYW5jaFRlc3RQdHIoWmVybywgcmV0dXJuVmFsdWVH
UFIpKTsKLSAgICAgICAgaml0LmZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEdQUkluZm86OmNhbGxG
cmFtZVJlZ2lzdGVyKTsKKyAgICAgICAgc2tpcE9wdGltaXplLmFwcGVuZChicmFuY2hUZXN0UHRy
KFplcm8sIHJldHVyblZhbHVlR1BSKSk7CisgICAgICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIs
IEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKIAotICAgICAgICBza2lwT3B0aW1pemUubGlu
aygmaml0KTsKKyAgICAgICAgc2tpcE9wdGltaXplLmxpbmsodGhpcyk7CiAgICAgfQogI2VuZGlm
IC8vIEVOQUJMRShERkdfSklUKQogCiAjaWYgQ1BVKFg4Nl82NCkKLSAgICBqaXQucG9wKFg4NlJl
Z2lzdGVyczo6ZWJwKTsKKyAgICBwb3AoWDg2UmVnaXN0ZXJzOjplYnApOwogI2VsaWYgQ1BVKEFS
TTY0KQotICAgIGppdC5wb3BQYWlyKGZyYW1lUG9pbnRlclJlZ2lzdGVyLCBsaW5rUmVnaXN0ZXIp
OworICAgIHBvcFBhaXIoZnJhbWVQb2ludGVyUmVnaXN0ZXIsIGxpbmtSZWdpc3Rlcik7CiAjZW5k
aWYKLSAgICBqaXQucmV0KCk7CisgICAgcmV0KCk7CiAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVm
ZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpFeHRyYUNUSVRo
dW5rKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp0aGlzLCBHTE9CQUxfVEhVTktfSUQs
IExpbmtCdWZmZXI6OlByb2ZpbGU6OkV4dHJhQ1RJVGh1bmspOwogICAgIHBhdGNoQnVmZmVyLmxp
bmsob3BlcmF0aW9uV3JpdGVCYXJyaWVyQ2FsbCwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFn
PihvcGVyYXRpb25Xcml0ZUJhcnJpZXJTbG93UGF0aCkpOwogI2lmIEVOQUJMRShERkdfSklUKQot
ICAgIGlmIChPcHRpb25zOjp1c2VERkdKSVQoKSkKKyAgICBpZiAoY2FuQmVPcHRpbWl6ZWQpCiAg
ICAgICAgIHBhdGNoQnVmZmVyLmxpbmsob3BlcmF0aW9uT3B0aW1pemVDYWxsLCBGdW5jdGlvblB0
cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbk9wdGltaXplKSk7CiAjZW5kaWYKLSAgICByZXR1
cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsICJCYXNlbGluZTog
b3BfZW50ZXJfaGFuZGxlciIpOworICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVy
LCBKSVRUaHVua1B0clRhZywgdGh1bmtOYW1lKTsKK30KKworTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFRodW5rUHRyVGFnPiBKSVQ6Om9wX2VudGVyX2NhbkJlT3B0aW1pemVkX0dlbmVyYXRvcihW
TSYgdm0pCit7CisgICAgSklUIGppdCh2bSk7CisgICAgY29uc3RleHByIGJvb2wgY2FuQmVPcHRp
bWl6ZWQgPSB0cnVlOworICAgIHJldHVybiBqaXQub3BfZW50ZXJfR2VuZXJhdG9yKHZtLCBjYW5C
ZU9wdGltaXplZCwgIkJhc2VsaW5lOiBvcF9lbnRlcl9jYW5CZU9wdGltaXplZCIpOworfQorCitN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6b3BfZW50ZXJfY2Fubm90
QmVPcHRpbWl6ZWRfR2VuZXJhdG9yKFZNJiB2bSkKK3sKKyAgICBKSVQgaml0KHZtKTsKKyAgICBj
b25zdGV4cHIgYm9vbCBjYW5CZU9wdGltaXplZCA9IGZhbHNlOworICAgIHJldHVybiBqaXQub3Bf
ZW50ZXJfR2VuZXJhdG9yKHZtLCBjYW5CZU9wdGltaXplZCwgIkJhc2VsaW5lOiBvcF9lbnRlcl9j
YW5ub3RCZU9wdGltaXplZCIpOwogfQogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktT
KQogCkBAIC0xNDM0LDIyICsxNDQ2LDI3IEBAIHZvaWQgSklUOjplbWl0X29wX2xvb3BfaGludChj
b25zdCBJbnN0cnUKICAgICAgICAgYWRkNjQoVHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7CiAgICAg
ICAgIHN0b3JlNjQocmVnVDAsIHB0cik7CiAgICAgfQorI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0o
aW5zdHJ1Y3Rpb24pOwogI2VuZGlmCiAKLSAgICAvLyBFbWl0IHRoZSBKSVQgb3B0aW1pemF0aW9u
IGNoZWNrOiAKKyAgICAvLyBFbWl0IHRoZSBKSVQgb3B0aW1pemF0aW9uIGNoZWNrOgogICAgIGlm
IChjYW5CZU9wdGltaXplZCgpKSB7CisgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgY29kZUJsb2Nr
R1BSID0gcmVnVDA7CisgICAgICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpj
b2RlQmxvY2spLCBjb2RlQmxvY2tHUFIpOwogICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hBZGQz
MihQb3NpdGl2ZU9yWmVybywgVHJ1c3RlZEltbTMyKE9wdGlvbnM6OmV4ZWN1dGlvbkNvdW50ZXJJ
bmNyZW1lbnRGb3JMb29wKCkpLAotICAgICAgICAgICAgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJs
b2NrLT5hZGRyZXNzT2ZKSVRFeGVjdXRlQ291bnRlcigpKSkpOworICAgICAgICAgICAgQWRkcmVz
cyhjb2RlQmxvY2tHUFIsIENvZGVCbG9jazo6b2Zmc2V0T2ZKSVRFeGVjdXRlQ291bnRlcigpKSkp
OwogICAgIH0KIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2xvb3BfaGludChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2xvb3BfaGludChjb25zdCBJbnN0cnVj
dGlvbiogaW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
CiB7CiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgLy8gRW1pdCB0aGUgc2xvdyBwYXRoIGZvciB0
aGUgSklUIG9wdGltaXphdGlvbiBjaGVjazoKICAgICBpZiAoY2FuQmVPcHRpbWl6ZWQoKSkgewog
ICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCisjaWYgIUVOQUJMRShFWFRSQV9DVElf
VEhVTktTKQogICAgICAgICBjb3B5TExJbnRCYXNlbGluZUNhbGxlZVNhdmVzRnJvbUZyYW1lT3JS
ZWdpc3RlclRvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtKCkudG9wRW50cnlGcmFtZSk7
CiAKICAgICAgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uT3B0aW1p
emUsICZ2bSgpLCBtX2J5dGVjb2RlSW5kZXguYXNCaXRzKCkpOwpAQCAtMTQ2MiwxMyArMTQ3OSw4
MSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbG9vcF9oaW50KGNvbnN0IEluCiAgICAgICAgIGZh
ckp1bXAocmV0dXJuVmFsdWVHUFIsIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKICAgICAg
ICAgbm9PcHRpbWl6ZWRFbnRyeS5saW5rKHRoaXMpOwogCi0gICAgICAgIGVtaXRKdW1wU2xvd1Rv
SG90KGp1bXAoKSwgY3VycmVudEluc3RydWN0aW9uLT5zaXplKCkpOworI2Vsc2UgLy8gRU5BQkxF
KEVYVFJBX0NUSV9USFVOS1MpCisgICAgICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9i
eXRlY29kZUluZGV4Lm9mZnNldCgpOworICAgICAgICBBU1NFUlQoQnl0ZWNvZGVJbmRleChieXRl
Y29kZU9mZnNldCkgPT0gbV9ieXRlY29kZUluZGV4KTsKKyAgICAgICAgQVNTRVJUKG1fY29kZUJs
b2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCkgPT0gaW5zdHJ1Y3Rpb24pOworCisg
ICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNzsKKworICAg
ICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BS
KTsKKyAgICAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0oKS5nZXRDVElTdHViKG9wX2xvb3BfaGlu
dF9HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisjZW5kaWYgLy8gIUVOQUJM
RShFWFRSQV9DVElfVEhVTktTKQogICAgIH0KLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGN1cnJl
bnRJbnN0cnVjdGlvbik7CisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCiAgICAgVU5VU0VEX1BB
UkFNKGl0ZXIpOworICAgIFVOVVNFRF9QQVJBTShpbnN0cnVjdGlvbik7Cit9CisKKyNpZiBFTkFC
TEUoRVhUUkFfQ1RJX1RIVU5LUykKKworI2lmIEVOQUJMRShERkdfSklUKQorTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6Om9wX2xvb3BfaGludF9HZW5lcmF0b3IoVk0m
IHZtKQoreworICAgIC8vIFRoZSB0aHVuayBnZW5lcmF0ZWQgYnkgdGhpcyBmdW5jdGlvbiBjYW4g
b25seSB3b3JrIHdpdGggdGhlIExMSW50IC8gQmFzZWxpbmUgSklUIGJlY2F1c2UKKyAgICAvLyBp
dCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2
YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCisgICAgLy8gREZHL0ZUTCBtYXkg
aW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2gg
bWF5IG5vdCBtYXRjaAorICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCisgICAgSklUIGpp
dCh2bSk7CisKKyAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOworCisgICAgY29uc3RleHByIEdQ
UlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q3OyAvLyBpbmNvbWluZy4KKworI2lmIENQVShY
ODZfNjQpCisgICAgaml0LnB1c2goZnJhbWVQb2ludGVyUmVnaXN0ZXIpOworI2VsaWYgQ1BVKEFS
TTY0KQorICAgIGppdC5wdXNoUGFpcihmcmFtZVBvaW50ZXJSZWdpc3RlciwgbGlua1JlZ2lzdGVy
KTsKKyNlbmRpZgorCisgICAgYXV0byB1c2VkUmVnaXN0ZXJzID0gUmVnaXN0ZXJTZXQ6OnN0dWJV
bmF2YWlsYWJsZVJlZ2lzdGVycygpOworICAgIHVzZWRSZWdpc3RlcnMuYWRkKGJ5dGVjb2RlT2Zm
c2V0R1BSKTsKKyAgICBqaXQuY29weUxMSW50QmFzZWxpbmVDYWxsZWVTYXZlc0Zyb21GcmFtZU9y
UmVnaXN0ZXJUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bS50b3BFbnRyeUZyYW1lLCB1
c2VkUmVnaXN0ZXJzKTsKKworICAgIGppdC5zdG9yZTMyKGJ5dGVjb2RlT2Zmc2V0R1BSLCBDQ2Fs
bEhlbHBlcnM6OnRhZ0ZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cykpOworICAgIGppdC5sc2hpZnQzMihUcnVzdGVkSW1tMzIoQnl0ZWNvZGVJbmRleDo6Y2hlY2tw
b2ludFNoaWZ0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOworICAgIGppdC5zZXR1cEFyZ3VtZW50czxk
ZWNsdHlwZShvcGVyYXRpb25PcHRpbWl6ZSk+KFRydXN0ZWRJbW1QdHIoJnZtKSwgYnl0ZWNvZGVP
ZmZzZXRHUFIpOworICAgIGppdC5wcmVwYXJlQ2FsbE9wZXJhdGlvbih2bSk7CisgICAgQ2FsbCBv
cGVyYXRpb25DYWxsID0gaml0LmNhbGwoT3BlcmF0aW9uUHRyVGFnKTsKKyAgICBKdW1wIGhhc09w
dGltaXplZEVudHJ5ID0gaml0LmJyYW5jaFRlc3RQdHIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIp
OworCisjaWYgQ1BVKFg4Nl82NCkKKyAgICBqaXQucG9wKGZyYW1lUG9pbnRlclJlZ2lzdGVyKTsK
KyNlbGlmIENQVShBUk02NCkKKyAgICBqaXQucG9wUGFpcihmcmFtZVBvaW50ZXJSZWdpc3Rlciwg
bGlua1JlZ2lzdGVyKTsKKyNlbmRpZgorICAgIGppdC5yZXQoKTsKKworICAgIGhhc09wdGltaXpl
ZEVudHJ5LmxpbmsoJmppdCk7CisjaWYgQ1BVKFg4Nl82NCkKKyAgICBqaXQuYWRkUHRyKENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbTMyKDIgKiBzaXplb2YoQ1BVUmVnaXN0ZXIpKSwgc3RhY2tQb2lu
dGVyUmVnaXN0ZXIpOworI2VsaWYgQ1BVKEFSTTY0KQorICAgIGppdC5wb3BQYWlyKGZyYW1lUG9p
bnRlclJlZ2lzdGVyLCBsaW5rUmVnaXN0ZXIpOwogI2VuZGlmCisgICAgaWYgKEFTU0VSVF9FTkFC
TEVEKSB7CisgICAgICAgIEp1bXAgb2sgPSBqaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpB
Ym92ZSwgcmV0dXJuVmFsdWVHUFIsIFRydXN0ZWRJbW1QdHIoYml0d2lzZV9jYXN0PHZvaWQqPihz
dGF0aWNfY2FzdDxpbnRwdHJfdD4oMTAwMCkpKSk7CisgICAgICAgIGppdC5hYm9ydFdpdGhSZWFz
b24oSklUVW5yZWFzb25hYmxlTG9vcEhpbnRKdW1wVGFyZ2V0KTsKKyAgICAgICAgb2subGluaygm
aml0KTsKKyAgICB9CisKKyAgICBqaXQuZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgR1BSSW5mbzo6
Y2FsbEZyYW1lUmVnaXN0ZXIpOworCisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdM
T0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6RXh0cmFDVElUaHVuayk7CisgICAg
cGF0Y2hCdWZmZXIubGluayhvcGVyYXRpb25DYWxsLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJU
YWc+KG9wZXJhdGlvbk9wdGltaXplKSk7CisgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hC
dWZmZXIsIEpJVFRodW5rUHRyVGFnLCAiQmFzZWxpbmU6IG9wX2xvb3BfaGludCIpOwogfQorI2Vu
ZGlmIC8vIEVOQUJMRShERkdfSklUKQorI2VuZGlmIC8vICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5L
UykKIAogdm9pZCBKSVQ6OmVtaXRfb3BfY2hlY2tfdHJhcHMoY29uc3QgSW5zdHJ1Y3Rpb24qKQog
ewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNw
cAkocmV2aXNpb24gMjc4NTM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dl
bmVyYXRvcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MSwxMSArODEsNyBAQCBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHBvCiB7CiAgICAgQ0NhbGxIZWxwZXJzIGppdDsK
IAotI2lmIENQVShYODZfNjQpCi0gICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW0zMigyICogc2l6ZW9mKENQVVJlZ2lzdGVyKSksIFg4NlJlZ2lzdGVyczo6ZXNwKTsKLSNlbGlm
IENQVShBUk02NCkKLSAgICBqaXQucG9wUGFpcihDQ2FsbEhlbHBlcnM6OmZyYW1lUG9pbnRlclJl
Z2lzdGVyLCBDQ2FsbEhlbHBlcnM6OmxpbmtSZWdpc3Rlcik7Ci0jZW5kaWYKKyAgICBqaXQuYWRk
UHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDIgKiBzaXplb2YoQ1BVUmVnaXN0ZXIpKSwg
Q0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAKICAgICBDQ2FsbEhlbHBlcnM6
Okp1bXAgY29udGludWF0aW9uID0gaml0Lmp1bXAoKTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>430714</attachid>
            <date>2021-06-06 23:32:05 -0700</date>
            <delta_ts>2021-06-07 08:03:13 -0700</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-226375.patch</filename>
            <type>text/plain</type>
            <size>52353</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjc4NTQ1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDczIEBA
CisyMDIxLTA2LTA2ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBQ
dXQgdGhlIEJhc2VsaW5lIEpJVCBwcm9sb2d1ZSBhbmQgb3BfbG9vcF9oaW50IGNvZGUgaW4gSklU
IHRodW5rcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIyNjM3NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFRoZSBwcm9sb2d1ZSB1c2VzIDEgb2YgOCBwb3NzaWJsZSBzcGVjaWFsaXplZCB0aHVua3MgdG8g
cmVkdWNlIHRoZSBuZWVkIHRvIHBhc3MKKyAgICAgICAgYXJndW1lbnRzLiAgVGhlIG9ubHkgbmVl
ZGVkIGFyZ3VtZW50IGlzIHRoZSBjb2RlQmxvY2sgcG9pbnRlci4KKyAgICAgICAgVGhlcmUgYXJl
IGFsc28gOCBhbmFsb2dvdXMgYXJpdHkgZml4dXAgcHJvbG9ndWVzIHRoYXQgd29yayBzaW1pbGFy
bHkuCisKKyAgICAgICAgVGhlIG9wX2xvb3BfaGludCB0aHVuayBvbmx5IHRha2VzIDEgYXJndW1l
bnQ6IHRoZSBieXRlY29kZSBvZmZzZXQuCisgICAgICAgIEkgaGFkIHRyaWVkIGRvaW5nIHRoZSBs
b29wX2hpbnQgb3B0aW1pemF0aW9uIGNoZWNrIGluIHRoZSB0aHVuaywgYnV0IHRoaXMgc2VlbXMK
KyAgICAgICAgdG8gaGF2ZSBzb21lIHNsaWdodCBuZWdhdGl2ZSBpbXBhY3Qgb24gYmVuY2htYXJr
IHBlcmZvcm1hbmNlLiAgSSBlbmRlZCB1cCBqdXN0CisgICAgICAgIGdvaW5nIHdpdGggbW92aW5n
IHRoZSBzbG93IHBhdGggaW50byBhIHRodW5rLgorCisgICAgICAgIEFsc28gb3B0aW1pemVkIG9w
X2VudGVyIGEgYml0IG1vcmUgYnkgZWxpbWluYXRpbmcgdGhlIG5lZWQgdG8gcGFzcyBhbnkKKyAg
ICAgICAgYXJndW1lbnRzIHRvIHRoZSB0aHVuay4gIGxvY2Fsc1RvSW5pdEdQUiBpcyBub3cgY29t
cHV0ZWQgaW4gdGhlIHRodW5rLgorICAgICAgICBjYW5CZU9wdGltaXplZCBpcyBvYnZpYXRlZCBi
eSB1c2luZyBzcGVjaWFsaXplZCB0aHVua3MuCisKKyAgICAgICAgTGlua0J1ZmZlciBzaXplIHJl
c3VsdHM6CisKKyAgICAgICAgICAgQmFzZWxpbmVKSVQ6IDkzMzE5NjI4ICg4OC45OTY1MzIgTUIp
ICAgPT4gODM4NTE4MjQgKDc5Ljk2NzMzMSBNQikgICAwLjkweAorICAgICAgICAgRXh0cmFDVElU
aHVuazogNTk5MiAoNS44NTE1NjIgS0IpICAgICAgICA9PiA2OTg0ICg2LjgyMDMxMiBLQikgICAg
ICAgIDEuMTd4CisgICAgICAgICAgICAgICAgICAgICAgICAuLi4KKyAgICAgICAgICAgICAgICAg
VG90YWw6IDE5NzUzMDAwOCAoMTg4LjM3OTI5NSBNQikgPT4gMTg4NDU5NDQ0ICgxNzkuNzI4OTMx
IE1CKSAwLjk1eAorCisgICAgICAgIFNwZWVkb21ldGVyMiBhbmQgSmV0U3RyZWFtMiByZXN1bHRz
IChhcyBtZWFzdXJlZCBvbiBhbiBNMSBNYWMpIGFyZSBuZXV0cmFsLgorCisgICAgICAgICogYXNz
ZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaDoKKyAgICAgICAgKEpTQzo6QWJzdHJhY3RN
YWNyb0Fzc2VtYmxlcjo6dW50YWdSZXR1cm5BZGRyZXNzV2l0aG91dEV4dHJhVmFsaWRhdGlvbik6
CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjRFLmg6CisgICAgICAgIChK
U0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjRFOjp1bnRhZ1JldHVybkFkZHJlc3MpOgorICAgICAgICAo
SlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0RTo6dW50YWdSZXR1cm5BZGRyZXNzV2l0aG91dEV4dHJh
VmFsaWRhdGlvbik6CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNdjcuaDoK
KyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk12Nzo6YnJhbmNoQWRkMzIpOgorICAgICAg
ICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlck1JUFMuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9B
c3NlbWJsZXJNSVBTOjpicmFuY2hBZGQzMik6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2Nr
Lmg6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6b2Zmc2V0T2ZOdW1DYWxsZWVMb2NhbHMpOgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om9mZnNldE9mTnVtVmFycyk6CisgICAgICAgIChKU0M6
OkNvZGVCbG9jazo6b2Zmc2V0T2ZBcmd1bWVudFZhbHVlUHJvZmlsZXMpOgorICAgICAgICAoSlND
OjpDb2RlQmxvY2s6Om9mZnNldE9mU2hvdWxkQWx3YXlzQmVJbmxpbmVkKToKKyAgICAgICAgKiBq
aXQvQXNzZW1ibHlIZWxwZXJzLmg6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6ZW1p
dFNhdmVDYWxsZWVTYXZlc0Zvcik6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6ZW1p
dFNhdmVDYWxsZWVTYXZlc0ZvckJhc2VsaW5lSklUKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlI
ZWxwZXJzOjplbWl0UmVzdG9yZUNhbGxlZVNhdmVzRm9yQmFzZWxpbmVKSVQpOgorICAgICAgICAq
IGppdC9KSVQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZp
bmFsaXppbmcpOgorICAgICAgICAoSlNDOjpKSVQ6OnByb2xvZ3VlR2VuZXJhdG9yKToKKyAgICAg
ICAgKEpTQzo6SklUOjphcml0eUZpeHVwUHJvbG9ndWVHZW5lcmF0b3IpOgorICAgICAgICAoSlND
OjpKSVQ6OnByaXZhdGVDb21waWxlRXhjZXB0aW9uSGFuZGxlcnMpOgorICAgICAgICAqIGppdC9K
SVQuaDoKKyAgICAgICAgKiBqaXQvSklUSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXROYWtlZE5lYXJDYWxsKToKKyAgICAgICAgKiBqaXQvSklUT3Bjb2Rlcy5jcHA6CisgICAgICAg
IChKU0M6OkpJVDo6b3BfcmV0X2hhbmRsZXJHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfb3BfZW50ZXIpOgorICAgICAgICAoSlNDOjpKSVQ6Om9wX2VudGVyX0dlbmVyYXRvcik6
CisgICAgICAgIChKU0M6OkpJVDo6b3BfZW50ZXJfY2FuQmVPcHRpbWl6ZWRfR2VuZXJhdG9yKToK
KyAgICAgICAgKEpTQzo6SklUOjpvcF9lbnRlcl9jYW5ub3RCZU9wdGltaXplZF9HZW5lcmF0b3Ip
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbG9vcF9oaW50KToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0U2xvd19vcF9sb29wX2hpbnQpOgorICAgICAgICAoSlNDOjpKSVQ6Om9wX2xvb3Bf
aGludF9HZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVQ6Om9wX2VudGVyX2hhbmRsZXJHZW5l
cmF0b3IpOiBEZWxldGVkLgorICAgICAgICAqIGppdC9KSVRPcGNvZGVzMzJfNjQuY3BwOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZW50ZXIpOgorICAgICAgICAqIGppdC9UaHVua0dlbmVy
YXRvcnMuY3BwOgorICAgICAgICAoSlNDOjpwb3BUaHVua1N0YWNrUHJlc2VydmVzQW5kSGFuZGxl
RXhjZXB0aW9uR2VuZXJhdG9yKToKKwogMjAyMS0wNi0wNCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpA
YXBwbGUuY29tPgogCiAgICAgICAgIEZpbGVTeXN0ZW06OnJlYWRGcm9tRmlsZSgpIHNob3VsZCBy
ZXR1cm4gZGF0YSBhcyBgdm9pZCpgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAkocmV2aXNpb24gMjc4
NTQ1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNz
ZW1ibGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMDMsNiArMTAwMyw3IEBAIHB1YmxpYzoKIAog
ICAgIEFMV0FZU19JTkxJTkUgdm9pZCB0YWdSZXR1cm5BZGRyZXNzKCkgeyB9CiAgICAgQUxXQVlT
X0lOTElORSB2b2lkIHVudGFnUmV0dXJuQWRkcmVzcyhSZWdpc3RlcklEID0gUmVnaXN0ZXJJRDo6
SW52YWxpZEdQUlJlZykgeyB9CisgICAgQUxXQVlTX0lOTElORSB2b2lkIHVudGFnUmV0dXJuQWRk
cmVzc1dpdGhvdXRFeHRyYVZhbGlkYXRpb24oKSB7IH0KIAogICAgIEFMV0FZU19JTkxJTkUgdm9p
ZCB0YWdQdHIoUHRyVGFnLCBSZWdpc3RlcklEKSB7IH0KICAgICBBTFdBWVNfSU5MSU5FIHZvaWQg
dGFnUHRyKFJlZ2lzdGVySUQsIFJlZ2lzdGVySUQpIHsgfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTTY0RS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NEUuaAkocmV2
aXNpb24gMjc4NTQ1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fz
c2VtYmxlckFSTTY0RS5oCSh3b3JraW5nIGNvcHkpCkBAIC01NCwxMCArNTQsMTUgQEAgcHVibGlj
OgogCiAgICAgQUxXQVlTX0lOTElORSB2b2lkIHVudGFnUmV0dXJuQWRkcmVzcyhSZWdpc3RlcklE
IHNjcmF0Y2ggPSBJbnZhbGlkR1BSKQogICAgIHsKLSAgICAgICAgdW50YWdQdHIoQVJNNjRSZWdp
c3RlcnM6OnNwLCBBUk02NFJlZ2lzdGVyczo6bHIpOworICAgICAgICB1bnRhZ1JldHVybkFkZHJl
c3NXaXRob3V0RXh0cmFWYWxpZGF0aW9uKCk7CiAgICAgICAgIHZhbGlkYXRlVW50YWdnZWRQdHIo
QVJNNjRSZWdpc3RlcnM6OmxyLCBzY3JhdGNoKTsKICAgICB9CiAKKyAgICBBTFdBWVNfSU5MSU5F
IHZvaWQgdW50YWdSZXR1cm5BZGRyZXNzV2l0aG91dEV4dHJhVmFsaWRhdGlvbigpCisgICAgewor
ICAgICAgICB1bnRhZ1B0cihBUk02NFJlZ2lzdGVyczo6c3AsIEFSTTY0UmVnaXN0ZXJzOjpscik7
CisgICAgfQorCiAgICAgQUxXQVlTX0lOTElORSB2b2lkIHRhZ1B0cihQdHJUYWcgdGFnLCBSZWdp
c3RlcklEIHRhcmdldCkKICAgICB7CiAgICAgICAgIGF1dG8gdGFnR1BSID0gZ2V0Q2FjaGVkRGF0
YVRlbXBSZWdpc3RlcklEQW5kSW52YWxpZGF0ZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTXY3LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTXY3LmgJKHJldmlzaW9u
IDI3ODU0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJs
ZXJBUk12Ny5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzk1LDYgKzE3OTUsMjMgQEAgcHVibGljOgog
ICAgICAgICByZXR1cm4gYnJhbmNoQWRkMzIoY29uZCwgZGVzdCwgaW1tLCBkZXN0KTsKICAgICB9
CiAKKyAgICBKdW1wIGJyYW5jaEFkZDMyKFJlc3VsdENvbmRpdGlvbiBjb25kLCBUcnVzdGVkSW1t
MzIgaW1tLCBBZGRyZXNzIGRlc3QpCisgICAgeworICAgICAgICBsb2FkMzIoZGVzdCwgZGF0YVRl
bXBSZWdpc3Rlcik7CisKKyAgICAgICAgLy8gRG8gdGhlIGFkZC4KKyAgICAgICAgQVJNVGh1bWJJ
bW1lZGlhdGUgYXJtSW1tID0gQVJNVGh1bWJJbW1lZGlhdGU6Om1ha2VFbmNvZGVkSW1tKGltbS5t
X3ZhbHVlKTsKKyAgICAgICAgaWYgKGFybUltbS5pc1ZhbGlkKCkpCisgICAgICAgICAgICBtX2Fz
c2VtYmxlci5hZGRfUyhkYXRhVGVtcFJlZ2lzdGVyLCBkYXRhVGVtcFJlZ2lzdGVyLCBhcm1JbW0p
OworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIG1vdmUoaW1tLCBhZGRyZXNzVGVtcFJlZ2lz
dGVyKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZF9TKGRhdGFUZW1wUmVnaXN0ZXIsIGRh
dGFUZW1wUmVnaXN0ZXIsIGFkZHJlc3NUZW1wUmVnaXN0ZXIpOworICAgICAgICB9CisKKyAgICAg
ICAgc3RvcmUzMihkYXRhVGVtcFJlZ2lzdGVyLCBkZXN0KTsKKyAgICAgICAgcmV0dXJuIEp1bXAo
bWFrZUJyYW5jaChjb25kKSk7CisgICAgfQorCiAgICAgSnVtcCBicmFuY2hBZGQzMihSZXN1bHRD
b25kaXRpb24gY29uZCwgVHJ1c3RlZEltbTMyIGltbSwgQWJzb2x1dGVBZGRyZXNzIGRlc3QpCiAg
ICAgewogICAgICAgICAvLyBNb3ZlIHRoZSBoaWdoIGJpdHMgb2YgdGhlIGFkZHJlc3MgaW50byBh
ZGRyZXNzVGVtcFJlZ2lzdGVyLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9NYWNyb0Fzc2VtYmxlck1JUFMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyTUlQUy5oCShyZXZpc2lvbiAyNzg1NDUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyTUlQUy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMzEwLDYgKzIzMTAsMTExIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJu
IEp1bXAoKTsKICAgICB9CiAKKyAgICBKdW1wIGJyYW5jaEFkZDMyKFJlc3VsdENvbmRpdGlvbiBj
b25kLCBUcnVzdGVkSW1tMzIgaW1tLCBJbXBsaWNpdEFkZHJlc3MgZGVzdEFkZHJlc3MpCisgICAg
eworICAgICAgICBib29sIHVzZUFkZHJUZW1wUmVnaXN0ZXIgPSAhKGRlc3RBZGRyZXNzLm9mZnNl
dCA+PSAtMzI3NjggJiYgZGVzdEFkZHJlc3Mub2Zmc2V0IDw9IDMyNzY3CisgICAgICAgICAgICAm
JiAhbV9maXhlZFdpZHRoKTsKKworICAgICAgICBpZiAodXNlQWRkclRlbXBSZWdpc3Rlcikgewor
ICAgICAgICAgICAgbV9hc3NlbWJsZXIubHVpKGFkZHJUZW1wUmVnaXN0ZXIsIChkZXN0QWRkcmVz
cy5vZmZzZXQgKyAweDgwMDApID4+IDE2KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZHUo
YWRkclRlbXBSZWdpc3RlciwgYWRkclRlbXBSZWdpc3RlciwgZGVzdEFkZHJlc3MuYmFzZSk7Cisg
ICAgICAgIH0KKworICAgICAgICBhdXRvIGxvYWREZXN0ID0gWyZdIChSZWdpc3RlcklEIGRlc3Qp
IHsKKyAgICAgICAgICAgIGlmICh1c2VBZGRyVGVtcFJlZ2lzdGVyKQorICAgICAgICAgICAgICAg
IG1fYXNzZW1ibGVyLmx3KGRlc3QsIGFkZHJUZW1wUmVnaXN0ZXIsIGRlc3RBZGRyZXNzLm9mZnNl
dCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbV9hc3NlbWJsZXIubHcoZGVz
dCwgZGVzdEFkZHJlc3MuYmFzZSwgZGVzdEFkZHJlc3Mub2Zmc2V0KTsKKyAgICAgICAgfTsKKwor
ICAgICAgICBhdXRvIHN0b3JlRGVzdCA9IFsmXSAoUmVnaXN0ZXJJRCBzcmMpIHsKKyAgICAgICAg
ICAgIGlmICh1c2VBZGRyVGVtcFJlZ2lzdGVyKQorICAgICAgICAgICAgICAgIG1fYXNzZW1ibGVy
LnN3KHNyYywgYWRkclRlbXBSZWdpc3RlciwgZGVzdEFkZHJlc3Mub2Zmc2V0KTsKKyAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX2Fzc2VtYmxlci5zdyhzcmMsIGRlc3RBZGRyZXNz
LmJhc2UsIGRlc3RBZGRyZXNzLm9mZnNldCk7CisgICAgICAgIH07CisKKyAgICAgICAgQVNTRVJU
KChjb25kID09IE92ZXJmbG93KSB8fCAoY29uZCA9PSBTaWduZWQpIHx8IChjb25kID09IFBvc2l0
aXZlT3JaZXJvKSB8fCAoY29uZCA9PSBaZXJvKSB8fCAoY29uZCA9PSBOb25aZXJvKSk7CisgICAg
ICAgIGlmIChjb25kID09IE92ZXJmbG93KSB7CisgICAgICAgICAgICBpZiAobV9maXhlZFdpZHRo
KSB7CisgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgICAgbG9hZCAgICBkZXN0
LCBkYXRhVGVtcAorICAgICAgICAgICAgICAgICAgICBtb3ZlICAgIGltbSwgaW1tVGVtcAorICAg
ICAgICAgICAgICAgICAgICB4b3IgICAgIGNtcFRlbXAsIGRhdGFUZW1wLCBpbW1UZW1wCisgICAg
ICAgICAgICAgICAgICAgIGFkZHUgICAgZGF0YVRlbXAsIGRhdGFUZW1wLCBpbW1UZW1wCisgICAg
ICAgICAgICAgICAgICAgIHN0b3JlICAgZGF0YVRlbXAsIGRlc3QKKyAgICAgICAgICAgICAgICAg
ICAgYmx0eiAgICBjbXBUZW1wLCBOb19vdmVyZmxvdyAgICAjIGRpZmYgc2lnbiBiaXQgLT4gbm8g
b3ZlcmZsb3cKKyAgICAgICAgICAgICAgICAgICAgeG9yICAgICBjbXBUZW1wLCBkYXRhVGVtcCwg
aW1tVGVtcAorICAgICAgICAgICAgICAgICAgICBiZ2V6ICAgIGNtcFRlbXAsIE5vX292ZXJmbG93
ICAgICMgc2FtZSBzaWduIGJpZyAtPiBubyBvdmVyZmxvdworICAgICAgICAgICAgICAgICAgICBu
b3AKKyAgICAgICAgICAgICAgICAgICAgYiAgICAgICBPdmVyZmxvdworICAgICAgICAgICAgICAg
ICAgICBub3AKKyAgICAgICAgICAgICAgICAgICAgYiAgICAgICBOb19vdmVyZmxvdworICAgICAg
ICAgICAgICAgICAgICBub3AKKyAgICAgICAgICAgICAgICAgICAgbm9wCisgICAgICAgICAgICAg
ICAgICAgIG5vcAorICAgICAgICAgICAgICAgIE5vX292ZXJmbG93OgorICAgICAgICAgICAgICAg
ICovCisgICAgICAgICAgICAgICAgbG9hZERlc3QoZGF0YVRlbXBSZWdpc3Rlcik7CisgICAgICAg
ICAgICAgICAgbW92ZShpbW0sIGltbVRlbXBSZWdpc3Rlcik7CisgICAgICAgICAgICAgICAgbV9h
c3NlbWJsZXIueG9ySW5zbihjbXBUZW1wUmVnaXN0ZXIsIGRhdGFUZW1wUmVnaXN0ZXIsIGltbVRl
bXBSZWdpc3Rlcik7CisgICAgICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRkdShkYXRhVGVtcFJl
Z2lzdGVyLCBkYXRhVGVtcFJlZ2lzdGVyLCBpbW1UZW1wUmVnaXN0ZXIpOworICAgICAgICAgICAg
ICAgIHN0b3JlRGVzdChkYXRhVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgICAgICAgICBtX2Fzc2Vt
Ymxlci5ibHR6KGNtcFRlbXBSZWdpc3RlciwgOSk7CisgICAgICAgICAgICAgICAgbV9hc3NlbWJs
ZXIueG9ySW5zbihjbXBUZW1wUmVnaXN0ZXIsIGRhdGFUZW1wUmVnaXN0ZXIsIGltbVRlbXBSZWdp
c3Rlcik7CisgICAgICAgICAgICAgICAgbV9hc3NlbWJsZXIuYmdleihjbXBUZW1wUmVnaXN0ZXIs
IDcpOworICAgICAgICAgICAgICAgIG1fYXNzZW1ibGVyLm5vcCgpOworICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICBsb2FkRGVzdChkYXRhVGVtcFJlZ2lzdGVyKTsKKyAgICAg
ICAgICAgICAgICBpZiAoaW1tLm1fdmFsdWUgPj0gMCAmJiBpbW0ubV92YWx1ZSAgPD0gMzI3Njcp
IHsKKyAgICAgICAgICAgICAgICAgICAgbW92ZShkYXRhVGVtcFJlZ2lzdGVyLCBjbXBUZW1wUmVn
aXN0ZXIpOworICAgICAgICAgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGRpdShkYXRhVGVtcFJl
Z2lzdGVyLCBkYXRhVGVtcFJlZ2lzdGVyLCBpbW0ubV92YWx1ZSk7CisgICAgICAgICAgICAgICAg
ICAgIG1fYXNzZW1ibGVyLmJsdHooY21wVGVtcFJlZ2lzdGVyLCA5KTsKKyAgICAgICAgICAgICAg
ICAgICAgc3RvcmVEZXN0KGRhdGFUZW1wUmVnaXN0ZXIpOworICAgICAgICAgICAgICAgICAgICBt
X2Fzc2VtYmxlci5iZ2V6KGRhdGFUZW1wUmVnaXN0ZXIsIDcpOworICAgICAgICAgICAgICAgICAg
ICBtX2Fzc2VtYmxlci5ub3AoKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGltbS5tX3Zh
bHVlID49IC0zMjc2OCAmJiBpbW0ubV92YWx1ZSA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAg
bW92ZShkYXRhVGVtcFJlZ2lzdGVyLCBjbXBUZW1wUmVnaXN0ZXIpOworICAgICAgICAgICAgICAg
ICAgICBtX2Fzc2VtYmxlci5hZGRpdShkYXRhVGVtcFJlZ2lzdGVyLCBkYXRhVGVtcFJlZ2lzdGVy
LCBpbW0ubV92YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIG1fYXNzZW1ibGVyLmJnZXooY21w
VGVtcFJlZ2lzdGVyLCA5KTsKKyAgICAgICAgICAgICAgICAgICAgc3RvcmVEZXN0KGRhdGFUZW1w
UmVnaXN0ZXIpOworICAgICAgICAgICAgICAgICAgICBtX2Fzc2VtYmxlci5ibHR6KGNtcFRlbXBS
ZWdpc3RlciwgNyk7CisgICAgICAgICAgICAgICAgICAgIG1fYXNzZW1ibGVyLm5vcCgpOworICAg
ICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIG1vdmUoaW1tLCBpbW1U
ZW1wUmVnaXN0ZXIpOworICAgICAgICAgICAgICAgICAgICBtX2Fzc2VtYmxlci54b3JJbnNuKGNt
cFRlbXBSZWdpc3RlciwgZGF0YVRlbXBSZWdpc3RlciwgaW1tVGVtcFJlZ2lzdGVyKTsKKyAgICAg
ICAgICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRkdShkYXRhVGVtcFJlZ2lzdGVyLCBkYXRhVGVt
cFJlZ2lzdGVyLCBpbW1UZW1wUmVnaXN0ZXIpOworICAgICAgICAgICAgICAgICAgICBtX2Fzc2Vt
Ymxlci5ibHR6KGNtcFRlbXBSZWdpc3RlciwgMTApOworICAgICAgICAgICAgICAgICAgICBzdG9y
ZURlc3QoZGF0YVRlbXBSZWdpc3Rlcik7CisgICAgICAgICAgICAgICAgICAgIG1fYXNzZW1ibGVy
Lnhvckluc24oY21wVGVtcFJlZ2lzdGVyLCBkYXRhVGVtcFJlZ2lzdGVyLCBpbW1UZW1wUmVnaXN0
ZXIpOworICAgICAgICAgICAgICAgICAgICBtX2Fzc2VtYmxlci5iZ2V6KGNtcFRlbXBSZWdpc3Rl
ciwgNyk7CisgICAgICAgICAgICAgICAgICAgIG1fYXNzZW1ibGVyLm5vcCgpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBqdW1wKCk7CisgICAg
ICAgIH0KKyAgICAgICAgbW92ZShpbW0sIGltbVRlbXBSZWdpc3Rlcik7CisgICAgICAgIGxvYWRE
ZXN0KGRhdGFUZW1wUmVnaXN0ZXIpOworICAgICAgICBhZGQzMihpbW1UZW1wUmVnaXN0ZXIsIGRh
dGFUZW1wUmVnaXN0ZXIpOworICAgICAgICBzdG9yZURlc3QoZGF0YVRlbXBSZWdpc3Rlcik7Cisg
ICAgICAgIGlmIChjb25kID09IFNpZ25lZCkgeworICAgICAgICAgICAgLy8gQ2hlY2sgaWYgZGVz
dCBpcyBuZWdhdGl2ZS4KKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnNsdChjbXBUZW1wUmVnaXN0
ZXIsIGRhdGFUZW1wUmVnaXN0ZXIsIE1JUFNSZWdpc3RlcnM6Onplcm8pOworICAgICAgICAgICAg
cmV0dXJuIGJyYW5jaE5vdEVxdWFsKGNtcFRlbXBSZWdpc3RlciwgTUlQU1JlZ2lzdGVyczo6emVy
byk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNvbmQgPT0gUG9zaXRpdmVPclplcm8pIHsKKyAg
ICAgICAgICAgIC8vIENoZWNrIGlmIGRlc3QgaXMgbm90IG5lZ2F0aXZlLgorICAgICAgICAgICAg
bV9hc3NlbWJsZXIuc2x0KGNtcFRlbXBSZWdpc3RlciwgZGF0YVRlbXBSZWdpc3RlciwgTUlQU1Jl
Z2lzdGVyczo6emVybyk7CisgICAgICAgICAgICByZXR1cm4gYnJhbmNoRXF1YWwoY21wVGVtcFJl
Z2lzdGVyLCBNSVBTUmVnaXN0ZXJzOjp6ZXJvKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoY29u
ZCA9PSBaZXJvKQorICAgICAgICAgICAgcmV0dXJuIGJyYW5jaEVxdWFsKGRhdGFUZW1wUmVnaXN0
ZXIsIE1JUFNSZWdpc3RlcnM6Onplcm8pOworICAgICAgICBpZiAoY29uZCA9PSBOb25aZXJvKQor
ICAgICAgICAgICAgcmV0dXJuIGJyYW5jaE5vdEVxdWFsKGRhdGFUZW1wUmVnaXN0ZXIsIE1JUFNS
ZWdpc3RlcnM6Onplcm8pOworICAgICAgICBBU1NFUlQoMCk7CisgICAgICAgIHJldHVybiBKdW1w
KCk7CisgICAgfQorCiAgICAgSnVtcCBicmFuY2hNdWwzMihSZXN1bHRDb25kaXRpb24gY29uZCwg
UmVnaXN0ZXJJRCBzcmMxLCBSZWdpc3RlcklEIHNyYzIsIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7
CiAgICAgICAgIEFTU0VSVCgoY29uZCA9PSBPdmVyZmxvdykgfHwgKGNvbmQgPT0gU2lnbmVkKSB8
fCAoY29uZCA9PSBaZXJvKSB8fCAoY29uZCA9PSBOb25aZXJvKSk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiAyNzg1NDUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkK
QEAgLTE2OSw3ICsxNjksMTAgQEAgcHVibGljOgogICAgIHVuc2lnbmVkIG51bVRtcHMoKSBjb25z
dCB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+aGFzQ2hlY2twb2ludHMoKSAqIG1heE51bUNoZWNr
cG9pbnRUbXBzOyB9CiAKICAgICB1bnNpZ25lZCogYWRkcmVzc09mTnVtUGFyYW1ldGVycygpIHsg
cmV0dXJuICZtX251bVBhcmFtZXRlcnM7IH0KKworICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0
T2ZOdW1DYWxsZWVMb2NhbHMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBt
X251bUNhbGxlZUxvY2Fscyk7IH0KICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTnVtUGFy
YW1ldGVycygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1fbnVtUGFyYW1l
dGVycyk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTnVtVmFycygpIHsgcmV0dXJu
IE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1fbnVtVmFycyk7IH0KIAogICAgIENvZGVCbG9j
ayogYWx0ZXJuYXRpdmUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxDb2RlQmxvY2sqPiht
X2FsdGVybmF0aXZlLmdldCgpKTsgfQogICAgIHZvaWQgc2V0QWx0ZXJuYXRpdmUoVk0mLCBDb2Rl
QmxvY2sqKTsKQEAgLTQ4Niw2ICs0ODksOCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiByZXN1
bHQ7CiAgICAgfQogCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkFyZ3VtZW50VmFsdWVQ
cm9maWxlcygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1fYXJndW1lbnRW
YWx1ZVByb2ZpbGVzKTsgfQorCiAgICAgVmFsdWVQcm9maWxlJiB2YWx1ZVByb2ZpbGVGb3JCeXRl
Y29kZUluZGV4KEJ5dGVjb2RlSW5kZXgpOwogICAgIFNwZWN1bGF0ZWRUeXBlIHZhbHVlUHJvZmls
ZVByZWRpY3Rpb25Gb3JCeXRlY29kZUluZGV4KGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIEJ5
dGVjb2RlSW5kZXgpOwogCkBAIC04MTksNyArODI0LDcgQEAgcHVibGljOgogICAgIH0KIAogICAg
IGJvb2wgd2FzQ29tcGlsZWRXaXRoRGVidWdnaW5nT3Bjb2RlcygpIGNvbnN0IHsgcmV0dXJuIG1f
dW5saW5rZWRDb2RlLT53YXNDb21waWxlZFdpdGhEZWJ1Z2dpbmdPcGNvZGVzKCk7IH0KLSAgICAK
KwogICAgIC8vIFRoaXMgaXMgaW50ZW50aW9uYWxseSBwdWJsaWM7IGl0J3MgdGhlIHJlc3BvbnNp
YmlsaXR5IG9mIGFueW9uZSBkb2luZyBhbnkKICAgICAvLyBvZiB0aGUgZm9sbG93aW5nIHRvIGhv
bGQgdGhlIGxvY2s6CiAgICAgLy8KQEAgLTkwNiw2ICs5MTEsNyBAQCBwdWJsaWM6CiAKICAgICBz
dGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTWV0YWRhdGFUYWJsZSgpIHsgcmV0dXJuIE9CSkVDVF9P
RkZTRVRPRihDb2RlQmxvY2ssIG1fbWV0YWRhdGEpOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBv
ZmZzZXRPZkluc3RydWN0aW9uc1Jhd1BvaW50ZXIoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0Yo
Q29kZUJsb2NrLCBtX2luc3RydWN0aW9uc1Jhd1BvaW50ZXIpOyB9CisgICAgc3RhdGljIHB0cmRp
ZmZfdCBvZmZzZXRPZlNob3VsZEFsd2F5c0JlSW5saW5lZCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZT
RVRPRihDb2RlQmxvY2ssIG1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkKTsgfQogCiAgICAgYm9vbCBs
b29wSGludHNBcmVFbGlnaWJsZUZvckZ1enppbmdFYXJseVJldHVybigpCiAgICAgewpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCShyZXZpc2lvbiAy
Nzg1NDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zMjYsNiArMzI2LDExIEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJU
KGNvZGVCbG9jayk7CiAKICAgICAgICAgY29uc3QgUmVnaXN0ZXJBdE9mZnNldExpc3QqIGNhbGxl
ZVNhdmVzID0gY29kZUJsb2NrLT5jYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CisgICAgICAgIGVtaXRT
YXZlQ2FsbGVlU2F2ZXNGb3IoY2FsbGVlU2F2ZXMpOworICAgIH0KKworICAgIHZvaWQgZW1pdFNh
dmVDYWxsZWVTYXZlc0Zvcihjb25zdCBSZWdpc3RlckF0T2Zmc2V0TGlzdCogY2FsbGVlU2F2ZXMp
CisgICAgewogICAgICAgICBSZWdpc3RlclNldCBkb250U2F2ZVJlZ2lzdGVycyA9IFJlZ2lzdGVy
U2V0KFJlZ2lzdGVyU2V0OjpzdGFja1JlZ2lzdGVycygpLCBSZWdpc3RlclNldDo6YWxsRlBScygp
KTsKICAgICAgICAgdW5zaWduZWQgcmVnaXN0ZXJDb3VudCA9IGNhbGxlZVNhdmVzLT5zaXplKCk7
CiAKQEAgLTM5OSw2ICs0MDQsMTEgQEAgcHVibGljOgogICAgICAgICBlbWl0U2F2ZUNhbGxlZVNh
dmVzRm9yKGNvZGVCbG9jaygpKTsKICAgICB9CiAKKyAgICB2b2lkIGVtaXRTYXZlQ2FsbGVlU2F2
ZXNGb3JCYXNlbGluZUpJVCgpCisgICAgeworICAgICAgICBlbWl0U2F2ZUNhbGxlZVNhdmVzRm9y
KCZSZWdpc3RlckF0T2Zmc2V0TGlzdDo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVSZWdpc3RlcnMo
KSk7CisgICAgfQorCiAgICAgdm9pZCBlbWl0U2F2ZVRoZW5NYXRlcmlhbGl6ZVRhZ1JlZ2lzdGVy
cygpCiAgICAgewogI2lmIFVTRShKU1ZBTFVFNjQpCkBAIC00MTcsNiArNDI3LDExIEBAIHB1Ymxp
YzoKICAgICAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlc0Zvcihjb2RlQmxvY2soKSk7CiAgICAg
fQogCisgICAgdm9pZCBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzRm9yQmFzZWxpbmVKSVQoKQorICAg
IHsKKyAgICAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlc0ZvcigmUmVnaXN0ZXJBdE9mZnNldExp
c3Q6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOworICAgIH0KKwogICAgIHZv
aWQgZW1pdFJlc3RvcmVTYXZlZFRhZ1JlZ2lzdGVycygpCiAgICAgewogI2lmIFVTRShKU1ZBTFVF
NjQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCShyZXZpc2lvbiAyNzg1NDUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgz
LDcgKzgzLDcgQEAgSklUOjp+SklUKCkKIHsKIH0KIAotI2lmIEVOQUJMRShERkdfSklUKQorI2lm
IEVOQUJMRShERkdfSklUKSAmJiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiB2b2lkIEpJVDo6
ZW1pdEVudGVyT3B0aW1pemF0aW9uQ2hlY2soKQogewogICAgIGlmICghY2FuQmVPcHRpbWl6ZWQo
KSkKQEAgLTEwMSw3ICsxMDEsNyBAQCB2b2lkIEpJVDo6ZW1pdEVudGVyT3B0aW1pemF0aW9uQ2hl
Y2soKQogICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lz
dGVyKTsKICAgICBza2lwT3B0aW1pemUubGluayh0aGlzKTsKIH0KLSNlbmRpZgorI2VuZGlmIC8v
IEVOQUJMRShERkdfSklUKSAmJiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpKAogCiB2b2lkIEpJ
VDo6ZW1pdE5vdGlmeVdyaXRlKFdhdGNocG9pbnRTZXQqIHNldCkKIHsKQEAgLTY4Miw2ICs2ODIs
MjcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICNlbmRpZgogfQogCisj
ZGVmaW5lIEZPUl9FQUNIX05PTl9QUk9GSUxJTkdfUFJPTE9HVUVfR0VORVJBVE9SKHYpIFwKKyAg
ICB2KCFkb2VzUHJvZmlsaW5nLCAhaXNDb25zdHJ1Y3RvciwgIWhhc0h1Z2VGcmFtZSwgcHJvbG9n
dWVHZW5lcmF0b3IwLCBhcml0eUZpeHVwX3Byb2xvZ3VlR2VuZXJhdG9yMCkgXAorICAgIHYoIWRv
ZXNQcm9maWxpbmcsICFpc0NvbnN0cnVjdG9yLCAgaGFzSHVnZUZyYW1lLCBwcm9sb2d1ZUdlbmVy
YXRvcjEsIGFyaXR5Rml4dXBfcHJvbG9ndWVHZW5lcmF0b3IxKSBcCisgICAgdighZG9lc1Byb2Zp
bGluZywgIGlzQ29uc3RydWN0b3IsICFoYXNIdWdlRnJhbWUsIHByb2xvZ3VlR2VuZXJhdG9yMiwg
YXJpdHlGaXh1cF9wcm9sb2d1ZUdlbmVyYXRvcjIpIFwKKyAgICB2KCFkb2VzUHJvZmlsaW5nLCAg
aXNDb25zdHJ1Y3RvciwgIGhhc0h1Z2VGcmFtZSwgcHJvbG9ndWVHZW5lcmF0b3IzLCBhcml0eUZp
eHVwX3Byb2xvZ3VlR2VuZXJhdG9yMykKKworI2lmIEVOQUJMRShERkdfSklUKQorI2RlZmluZSBG
T1JfRUFDSF9QUk9GSUxJTkdfUFJPTE9HVUVfR0VORVJBVE9SKHYpIFwKKyAgICB2KCBkb2VzUHJv
ZmlsaW5nLCAhaXNDb25zdHJ1Y3RvciwgIWhhc0h1Z2VGcmFtZSwgcHJvbG9ndWVHZW5lcmF0b3I0
LCBhcml0eUZpeHVwX3Byb2xvZ3VlR2VuZXJhdG9yNCkgXAorICAgIHYoIGRvZXNQcm9maWxpbmcs
ICFpc0NvbnN0cnVjdG9yLCAgaGFzSHVnZUZyYW1lLCBwcm9sb2d1ZUdlbmVyYXRvcjUsIGFyaXR5
Rml4dXBfcHJvbG9ndWVHZW5lcmF0b3I1KSBcCisgICAgdiggZG9lc1Byb2ZpbGluZywgIGlzQ29u
c3RydWN0b3IsICFoYXNIdWdlRnJhbWUsIHByb2xvZ3VlR2VuZXJhdG9yNiwgYXJpdHlGaXh1cF9w
cm9sb2d1ZUdlbmVyYXRvcjYpIFwKKyAgICB2KCBkb2VzUHJvZmlsaW5nLCAgaXNDb25zdHJ1Y3Rv
ciwgIGhhc0h1Z2VGcmFtZSwgcHJvbG9ndWVHZW5lcmF0b3I3LCBhcml0eUZpeHVwX3Byb2xvZ3Vl
R2VuZXJhdG9yNykKKworI2Vsc2UgLy8gbm90IEVOQUJMRShERkdfSklUKQorI2RlZmluZSBGT1Jf
RUFDSF9QUk9GSUxJTkdfUFJPTE9HVUVfR0VORVJBVE9SKHYpCisjZW5kaWYgLy8gRU5BQkxFKERG
R19KSVQpCisKKyNkZWZpbmUgRk9SX0VBQ0hfUFJPTE9HVUVfR0VORVJBVE9SKHYpIFwKKyAgICBG
T1JfRUFDSF9OT05fUFJPRklMSU5HX1BST0xPR1VFX0dFTkVSQVRPUih2KSBcCisgICAgRk9SX0VB
Q0hfUFJPRklMSU5HX1BST0xPR1VFX0dFTkVSQVRPUih2KQorCiB2b2lkIEpJVDo6Y29tcGlsZUFu
ZExpbmtXaXRob3V0RmluYWxpemluZyhKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCiB7CiAg
ICAgREZHOjpDYXBhYmlsaXR5TGV2ZWwgbGV2ZWwgPSBtX2NvZGVCbG9jay0+Y2FwYWJpbGl0eUxl
dmVsKCk7CkBAIC03NTAsNiArNzcxLDggQEAgdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91
dEZpbmFsaXppbgogICAgICAgICBub3AoKTsKIAogICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKCk7
CisKKyNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAgICAgZW1pdFB1dFRvQ2FsbEZyYW1l
SGVhZGVyKG1fY29kZUJsb2NrLCBDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spOwogCiAgICAgTGFi
ZWwgYmVnaW5MYWJlbCh0aGlzKTsKQEAgLTc3MSwxMSArNzk0LDEwIEBAIHZvaWQgSklUOjpjb21w
aWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW4KICAgICBpZiAobV9jb2RlQmxvY2stPmNvZGVUeXBl
KCkgPT0gRnVuY3Rpb25Db2RlKSB7CiAgICAgICAgIEFTU0VSVCghbV9ieXRlY29kZUluZGV4KTsK
ICAgICAgICAgaWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewotICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBhcmd1bWVudCA9IDA7IGFyZ3VtZW50IDwgbV9jb2RlQmxvY2stPm51bVBhcmFtZXRl
cnMoKTsgKythcmd1bWVudCkgewotICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgaXMgYSBjb25z
dHJ1Y3RvciwgdGhlbiB3ZSB3YW50IHRvIHB1dCBpbiBhIGR1bW15IHByb2ZpbGluZyBzaXRlICh0
bwotICAgICAgICAgICAgICAgIC8vIGtlZXAgdGhpbmdzIGNvbnNpc3RlbnQpIGJ1dCB3ZSBkb24n
dCBhY3R1YWxseSB3YW50IHRvIHJlY29yZCB0aGUgZHVtbXkgdmFsdWUuCi0gICAgICAgICAgICAg
ICAgaWYgKG1fY29kZUJsb2NrLT5pc0NvbnN0cnVjdG9yKCkgJiYgIWFyZ3VtZW50KQotICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIC8vIElmIHRoaXMgaXMgYSBjb25z
dHJ1Y3RvciwgdGhlbiB3ZSB3YW50IHRvIHB1dCBpbiBhIGR1bW15IHByb2ZpbGluZyBzaXRlICh0
bworICAgICAgICAgICAgLy8ga2VlcCB0aGluZ3MgY29uc2lzdGVudCkgYnV0IHdlIGRvbid0IGFj
dHVhbGx5IHdhbnQgdG8gcmVjb3JkIHRoZSBkdW1teSB2YWx1ZS4KKyAgICAgICAgICAgIHVuc2ln
bmVkIHN0YXJ0QXJndW1lbnQgPSBtX2NvZGVCbG9jay0+aXNDb25zdHJ1Y3RvcigpID8gMSA6IDA7
CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0gc3RhcnRBcmd1bWVudDsgYXJn
dW1lbnQgPCBtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpOyArK2FyZ3VtZW50KSB7CiAgICAg
ICAgICAgICAgICAgaW50IG9mZnNldCA9IENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXRJbmNsdWRp
bmdUaGlzKGFyZ3VtZW50KSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSk7CiAj
aWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAgICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdz
ID0gSlNWYWx1ZVJlZ3MocmVnVDApOwpAQCAtNzg5LDcgKzgxMSwzNCBAQCB2b2lkIEpJVDo6Y29t
cGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAg
ICB9Ci0gICAgCisjZWxzZSAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKKyAgICBjb25zdGV4
cHIgR1BSUmVnIGNvZGVCbG9ja0dQUiA9IHJlZ1Q3OworICAgIEFTU0VSVCghbV9ieXRlY29kZUlu
ZGV4KTsKKworICAgIGludCBmcmFtZVRvcE9mZnNldCA9IHN0YWNrUG9pbnRlck9mZnNldEZvciht
X2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpOworICAgIHVuc2lnbmVkIG1heEZyYW1lU2l6
ZSA9IC1mcmFtZVRvcE9mZnNldDsKKworICAgIGJvb2wgZG9lc1Byb2ZpbGluZyA9IChtX2NvZGVC
bG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUpICYmIHNob3VsZEVtaXRQcm9maWxpbmco
KTsKKyAgICBib29sIGlzQ29uc3RydWN0b3IgPSBtX2NvZGVCbG9jay0+aXNDb25zdHJ1Y3Rvcigp
OworICAgIGJvb2wgaGFzSHVnZUZyYW1lID0gbWF4RnJhbWVTaXplID4gT3B0aW9uczo6cmVzZXJ2
ZWRab25lU2l6ZSgpOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBUaHVua0dlbmVyYXRvciBnZW5l
cmF0b3JzW10gPSB7CisjZGVmaW5lIFVTRV9QUk9MT0dVRV9HRU5FUkFUT1IoZG9lc1Byb2ZpbGlu
ZywgaXNDb25zdHJ1Y3RvciwgaGFzSHVnZUZyYW1lLCBuYW1lLCBhcml0eUZpeHVwTmFtZSkgbmFt
ZSwKKyAgICAgICAgRk9SX0VBQ0hfUFJPTE9HVUVfR0VORVJBVE9SKFVTRV9QUk9MT0dVRV9HRU5F
UkFUT1IpCisjdW5kZWYgVVNFX1BST0xPR1VFX0dFTkVSQVRPUgorICAgIH07CisgICAgc3RhdGlj
IGNvbnN0ZXhwciB1bnNpZ25lZCBudW1iZXJPZkdlbmVyYXRvcnMgPSBzaXplb2YoZ2VuZXJhdG9y
cykgLyBzaXplb2YoZ2VuZXJhdG9yc1swXSk7CisKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2spLCBjb2RlQmxvY2tHUFIpOworCisgICAgdW5zaWduZWQgZ2VuZXJhdG9yU2VsZWN0
b3IgPSBkb2VzUHJvZmlsaW5nIDw8IDIgfCBpc0NvbnN0cnVjdG9yIDw8IDEgfCBoYXNIdWdlRnJh
bWUgPDwgMDsKKyAgICBSRUxFQVNFX0FTU0VSVChnZW5lcmF0b3JTZWxlY3RvciA8IG51bWJlck9m
R2VuZXJhdG9ycyk7CisgICAgYXV0byBnZW5lcmF0b3IgPSBnZW5lcmF0b3JzW2dlbmVyYXRvclNl
bGVjdG9yXTsKKyAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bSgpLmdldENUSVN0dWIoZ2VuZXJhdG9y
KS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOworCisgICAgTGFiZWwgYm9keUxhYmVsKHRoaXMp
OworI2VuZGlmIC8vICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKKwogICAgIFJFTEVBU0VfQVNT
RVJUKCFKSVRDb2RlOjppc0pJVChtX2NvZGVCbG9jay0+aml0VHlwZSgpKSk7CiAKICAgICBpZiAo
VU5MSUtFTFkoc2l6ZU1hcmtlcikpCkBAIC04MDMsMTYgKzg1MiwxOSBAQCB2b2lkIEpJVDo6Y29t
cGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluCiAgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRF
bmRPZlNsb3dQYXRoKGxhYmVsKCkpOwogICAgIG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyLmFw
cGVuZEl0ZW0obGFiZWwoKSwgUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyOjpkZWZhdWx0Q29kZU9y
aWdpbigpKTsKIAorI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICBzdGFja092ZXJm
bG93LmxpbmsodGhpcyk7CiAgICAgbV9ieXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJbmRleCgwKTsK
ICAgICBpZiAobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpCiAgICAgICAgIGFkZFB0cihU
cnVzdGVkSW1tMzIoLXN0YXRpY19jYXN0PGludDMyX3Q+KG1heEZyYW1lRXh0ZW50Rm9yU2xvd1Bh
dGhDYWxsKSksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBjYWxsT3BlcmF0aW9uV2l0aENh
bGxGcmFtZVJvbGxiYWNrT25FeGNlcHRpb24ob3BlcmF0aW9uVGhyb3dTdGFja092ZXJmbG93RXJy
b3IsIG1fY29kZUJsb2NrKTsKKyNlbmRpZgogCiAgICAgLy8gSWYgdGhlIG51bWJlciBvZiBwYXJh
bWV0ZXJzIGlzIDEsIHdlIG5ldmVyIHJlcXVpcmUgYXJpdHkgZml4dXAuCiAgICAgYm9vbCByZXF1
aXJlc0FyaXR5Rml4dXAgPSBtX2NvZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJzICE9IDE7CiAgICAg
aWYgKG1fY29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSAmJiByZXF1aXJlc0Fy
aXR5Rml4dXApIHsKICAgICAgICAgbV9hcml0eUNoZWNrID0gbGFiZWwoKTsKKyNpZiAhRU5BQkxF
KEVYVFJBX0NUSV9USFVOS1MpCiAgICAgICAgIHN0b3JlOChUcnVzdGVkSW1tMzIoMCksICZtX2Nv
ZGVCbG9jay0+bV9zaG91bGRBbHdheXNCZUlubGluZWQpOwogICAgICAgICBlbWl0RnVuY3Rpb25Q
cm9sb2d1ZSgpOwogICAgICAgICBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIobV9jb2RlQmxvY2ss
IENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayk7CkBAIC04MzEsMTcgKzg4Myw0MiBAQCB2b2lkIEpJ
VDo6Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluCiAgICAgICAgIG1vdmUocmV0dXJuVmFs
dWVHUFIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CiAgICAgICAgIGVtaXROYWtlZE5lYXJDYWxs
KG1fdm0tPmdldENUSVN0dWIoYXJpdHlGaXh1cEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRy
VGFnPigpKTsKIAorICAgICAgICBqdW1wKGJlZ2luTGFiZWwpOworCisjZWxzZSAvLyBFTkFCTEUo
RVhUUkFfQ1RJX1RIVU5LUykKKyAgICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoKTsKKworICAg
ICAgICBzdGF0aWNfYXNzZXJ0KGNvZGVCbG9ja0dQUiA9PSByZWdUNyk7CisgICAgICAgIEFTU0VS
VCghbV9ieXRlY29kZUluZGV4KTsKKworICAgICAgICBzdGF0aWMgY29uc3RleHByIFRodW5rR2Vu
ZXJhdG9yIGdlbmVyYXRvcnNbXSA9IHsKKyNkZWZpbmUgVVNFX1BST0xPR1VFX0dFTkVSQVRPUihk
b2VzUHJvZmlsaW5nLCBpc0NvbnN0cnVjdG9yLCBoYXNIdWdlRnJhbWUsIG5hbWUsIGFyaXR5Rml4
dXBOYW1lKSBhcml0eUZpeHVwTmFtZSwKKyAgICAgICAgICAgIEZPUl9FQUNIX1BST0xPR1VFX0dF
TkVSQVRPUihVU0VfUFJPTE9HVUVfR0VORVJBVE9SKQorI3VuZGVmIFVTRV9QUk9MT0dVRV9HRU5F
UkFUT1IKKyAgICAgICAgfTsKKyAgICAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBudW1i
ZXJPZkdlbmVyYXRvcnMgPSBzaXplb2YoZ2VuZXJhdG9ycykgLyBzaXplb2YoZ2VuZXJhdG9yc1sw
XSk7CisKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrKSwgY29kZUJsb2Nr
R1BSKTsKKworICAgICAgICBSRUxFQVNFX0FTU0VSVChnZW5lcmF0b3JTZWxlY3RvciA8IG51bWJl
ck9mR2VuZXJhdG9ycyk7CisgICAgICAgIGF1dG8gZ2VuZXJhdG9yID0gZ2VuZXJhdG9yc1tnZW5l
cmF0b3JTZWxlY3Rvcl07CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGdlbmVyYXRvcik7CisgICAg
ICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtKCkuZ2V0Q1RJU3R1YihnZW5lcmF0b3IpLnJldGFnZ2Vk
Q29kZTxOb1B0clRhZz4oKSk7CisKKyAgICAgICAganVtcChib2R5TGFiZWwpOworI2VuZGlmIC8v
ICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKKwogI2lmIEFTU0VSVF9FTkFCTEVECiAgICAgICAg
IG1fYnl0ZWNvZGVJbmRleCA9IEJ5dGVjb2RlSW5kZXgoKTsgLy8gUmVzZXQgdGhpcywgaW4gb3Jk
ZXIgdG8gZ3VhcmQgaXRzIHVzZSB3aXRoIEFTU0VSVHMuCiAjZW5kaWYKLQotICAgICAgICBqdW1w
KGJlZ2luTGFiZWwpOwogICAgIH0gZWxzZQogICAgICAgICBtX2FyaXR5Q2hlY2sgPSBlbnRyeUxh
YmVsOyAvLyBOZXZlciByZXF1aXJlIGFyaXR5IGZpeHVwLgogCiAgICAgQVNTRVJUKG1fam1wVGFi
bGUuaXNFbXB0eSgpKTsKICAgICAKKyNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAgICAg
cHJpdmF0ZUNvbXBpbGVFeGNlcHRpb25IYW5kbGVycygpOworI2VuZGlmCiAgICAgCiAgICAgaWYg
KG1fZGlzYXNzZW1ibGVyKQogICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0RW5kT2ZDb2RlKGxh
YmVsKCkpOwpAQCAtODUxLDYgKzkyOCwyNDAgQEAgdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0
aG91dEZpbmFsaXppbgogICAgIGxpbmsoKTsKIH0KIAorI2lmIEVOQUJMRShFWFRSQV9DVElfVEhV
TktTKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OnByb2xvZ3Vl
R2VuZXJhdG9yKFZNJiB2bSwgYm9vbCBkb2VzUHJvZmlsaW5nLCBib29sIGlzQ29uc3RydWN0b3Is
IGJvb2wgaGFzSHVnZUZyYW1lLCBjb25zdCBjaGFyKiB0aHVua05hbWUpCit7CisgICAgLy8gVGhp
cyBmdW5jdGlvbiBnZW5lcmF0ZXMgdGhlIEJhc2VsaW5lIEpJVCdzIHByb2xvZ3VlIGNvZGUuIEl0
IGlzIG5vdCB1c2VhYmxlIGJ5IG90aGVyIHRpZXJzLgorICAgIGNvbnN0ZXhwciBHUFJSZWcgY29k
ZUJsb2NrR1BSID0gcmVnVDc7IC8vIGluY29taW5nLgorCisgICAgY29uc3RleHByIGludCB2aXJ0
dWFsUmVnaXN0ZXJTaXplID0gc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKTsKKyAg
ICBjb25zdGV4cHIgaW50IHZpcnR1YWxSZWdpc3RlclNpemVTaGlmdCA9IDM7CisgICAgc3RhdGlj
X2Fzc2VydCgoMSA8PCB2aXJ0dWFsUmVnaXN0ZXJTaXplU2hpZnQpID09IHZpcnR1YWxSZWdpc3Rl
clNpemUpOworCisgICAgdGFnUmV0dXJuQWRkcmVzcygpOworCisgICAgc3RvcmU2NChjb2RlQmxv
Y2tHUFIsIGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSk7CisKKyAgICBsb2Fk
MzIoQWRkcmVzcyhjb2RlQmxvY2tHUFIsIENvZGVCbG9jazo6b2Zmc2V0T2ZOdW1DYWxsZWVMb2Nh
bHMoKSksIHJlZ1QxKTsKKyAgICBpZiBjb25zdGV4cHIgKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1Bh
dGhDYWxsSW5SZWdpc3RlcnMpCisgICAgICAgIGFkZDMyKFRydXN0ZWRJbW0zMihtYXhGcmFtZUV4
dGVudEZvclNsb3dQYXRoQ2FsbEluUmVnaXN0ZXJzKSwgcmVnVDEpOworICAgIGxzaGlmdDMyKFRy
dXN0ZWRJbW0zMih2aXJ0dWFsUmVnaXN0ZXJTaXplU2hpZnQpLCByZWdUMSk7CisgICAgbmVnNjQo
cmVnVDEpOworI2lmIEFTU0VSVF9FTkFCTEVECisgICAgUHJvYmU6OkZ1bmN0aW9uIHByb2JlRnVu
Y3Rpb24gPSBbXSAoUHJvYmU6OkNvbnRleHQmIGNvbnRleHQpIHsKKyAgICAgICAgQ29kZUJsb2Nr
KiBjb2RlQmxvY2sgPSBjb250ZXh0LmZwPENhbGxGcmFtZSo+KCktPmNvZGVCbG9jaygpOworICAg
ICAgICBpbnQ2NF90IGZyYW1lVG9wT2Zmc2V0ID0gc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKGNvZGVC
bG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChjb250ZXh0
LmdwcjxpbnRwdHJfdD4ocmVnVDEpID09IGZyYW1lVG9wT2Zmc2V0KTsKKyAgICB9OworICAgIHBy
b2JlKHRhZ0NGdW5jdGlvblB0cjxKSVRQcm9iZVB0clRhZz4ocHJvYmVGdW5jdGlvbiksIG51bGxw
dHIpOworI2VuZGlmCisKKyAgICBhZGRQdHIoY2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1QxKTsKKwor
ICAgIEp1bXBMaXN0IHN0YWNrT3ZlcmZsb3c7CisgICAgaWYgKGhhc0h1Z2VGcmFtZSkKKyAgICAg
ICAgc3RhY2tPdmVyZmxvdy5hcHBlbmQoYnJhbmNoUHRyKEFib3ZlLCByZWdUMSwgY2FsbEZyYW1l
UmVnaXN0ZXIpKTsKKyAgICBzdGFja092ZXJmbG93LmFwcGVuZChicmFuY2hQdHIoQWJvdmUsIEFi
c29sdXRlQWRkcmVzcyh2bS5hZGRyZXNzT2ZTb2Z0U3RhY2tMaW1pdCgpKSwgcmVnVDEpKTsKKwor
ICAgIC8vIFdlJ2xsIGJlIGltbWluZW50bHkgcmV0dXJuaW5nIHdpdGggYSByZXRhYiBpbiB0aGUg
bm9ybWFsIHBhdGgsIHdoaWNoIHdpbGwgZG8gdmFsaWRhdGlvbi4KKyAgICAvLyBTbywgZXh0cmEg
dmFsaWRhdGlvbiBoZXJlIGlzIHJlZHVuZGFudC4KKyAgICB1bnRhZ1JldHVybkFkZHJlc3NXaXRo
b3V0RXh0cmFWYWxpZGF0aW9uKCk7CisjaWYgQ1BVKFg4Nl82NCkKKyAgICBwb3AocmVnVDIpOyAv
LyBTYXZlIHRoZSByZXR1cm4gYWRkcmVzcy4KKyNlbmRpZgorICAgIG1vdmUocmVnVDEsIHN0YWNr
UG9pbnRlclJlZ2lzdGVyKTsKKyAgICB0YWdSZXR1cm5BZGRyZXNzKCk7CisgICAgY2hlY2tTdGFj
a1BvaW50ZXJBbGlnbm1lbnQoKTsKKyNpZiBDUFUoWDg2XzY0KQorICAgIHB1c2gocmVnVDIpOyAv
LyBSZXN0b3JlIHRoZSByZXR1cm4gYWRkcmVzcy4KKyNlbmRpZgorCisgICAgZW1pdFNhdmVDYWxs
ZWVTYXZlc0ZvckJhc2VsaW5lSklUKCk7CisgICAgZW1pdE1hdGVyaWFsaXplVGFnQ2hlY2tSZWdp
c3RlcnMoKTsKKworICAgIGlmIChkb2VzUHJvZmlsaW5nKSB7CisgICAgICAgIGNvbnN0ZXhwciBH
UFJSZWcgYXJndW1lbnRWYWx1ZVByb2ZpbGVHUFIgPSByZWdUNjsKKyAgICAgICAgY29uc3RleHBy
IEdQUlJlZyBudW1QYXJhbWV0ZXJzR1BSID0gcmVnVDU7CisgICAgICAgIGNvbnN0ZXhwciBHUFJS
ZWcgYXJndW1lbnRHUFIgPSByZWdUNDsKKworICAgICAgICBsb2FkMzIoQWRkcmVzcyhjb2RlQmxv
Y2tHUFIsIENvZGVCbG9jazo6b2Zmc2V0T2ZOdW1QYXJhbWV0ZXJzKCkpLCBudW1QYXJhbWV0ZXJz
R1BSKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKGNvZGVCbG9ja0dQUiwgQ29kZUJsb2NrOjpv
ZmZzZXRPZkFyZ3VtZW50VmFsdWVQcm9maWxlcygpKSwgYXJndW1lbnRWYWx1ZVByb2ZpbGVHUFIp
OworICAgICAgICBpZiAoaXNDb25zdHJ1Y3RvcikKKyAgICAgICAgICAgIGFkZFB0cihUcnVzdGVk
SW1tMzIoc2l6ZW9mKFZhbHVlUHJvZmlsZSkpLCBhcmd1bWVudFZhbHVlUHJvZmlsZUdQUik7CisK
KyAgICAgICAgaW50IHN0YXJ0QXJndW1lbnQgPSBDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQg
KyAoaXNDb25zdHJ1Y3RvciA/IDEgOiAwKTsKKyAgICAgICAgaW50IHN0YXJ0QXJndW1lbnRPZmZz
ZXQgPSBzdGFydEFyZ3VtZW50ICogdmlydHVhbFJlZ2lzdGVyU2l6ZTsKKyAgICAgICAgbW92ZShU
cnVzdGVkSW1tNjQoc3RhcnRBcmd1bWVudE9mZnNldCksIGFyZ3VtZW50R1BSKTsKKworICAgICAg
ICBhZGQzMihUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50PihDYWxsRnJhbWVTbG90Ojp0aGlz
QXJndW1lbnQpKSwgbnVtUGFyYW1ldGVyc0dQUik7CisgICAgICAgIGxzaGlmdDMyKFRydXN0ZWRJ
bW0zMih2aXJ0dWFsUmVnaXN0ZXJTaXplU2hpZnQpLCBudW1QYXJhbWV0ZXJzR1BSKTsKKworICAg
ICAgICBhZGRQdHIoY2FsbEZyYW1lUmVnaXN0ZXIsIGFyZ3VtZW50R1BSKTsKKyAgICAgICAgYWRk
UHRyKGNhbGxGcmFtZVJlZ2lzdGVyLCBudW1QYXJhbWV0ZXJzR1BSKTsKKworICAgICAgICBMYWJl
bCBsb29wU3RhcnQodGhpcyk7CisgICAgICAgIEp1bXAgZG9uZSA9IGJyYW5jaFB0cihBYm92ZU9y
RXF1YWwsIGFyZ3VtZW50R1BSLCBudW1QYXJhbWV0ZXJzR1BSKTsKKyAgICAgICAgeworICAgICAg
ICAgICAgbG9hZDY0KEFkZHJlc3MoYXJndW1lbnRHUFIpLCByZWdUMCk7CisgICAgICAgICAgICBz
dG9yZTY0KHJlZ1QwLCBBZGRyZXNzKGFyZ3VtZW50VmFsdWVQcm9maWxlR1BSLCBPQkpFQ1RfT0ZG
U0VUT0YoVmFsdWVQcm9maWxlLCBtX2J1Y2tldHMpKSk7CisKKyAgICAgICAgICAgIC8vIFRoZSBh
cmd1bWVudCBWYWx1ZVByb2ZpbGVzIGFyZSBzdG9yZWQgaW4gYSBGaXhlZFZlY3Rvci4gSGVuY2Us
IHRoZQorICAgICAgICAgICAgLy8gYWRkcmVzcyBvZiB0aGUgbmV4dCBwcm9maWxlIGNhbiBiZSB0
cml2aWFsbHkgY29tcHV0ZWQgd2l0aCBhbiBpbmNyZW1lbnQuCisgICAgICAgICAgICBhZGRQdHIo
VHJ1c3RlZEltbTMyKHNpemVvZihWYWx1ZVByb2ZpbGUpKSwgYXJndW1lbnRWYWx1ZVByb2ZpbGVH
UFIpOworICAgICAgICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMih2aXJ0dWFsUmVnaXN0ZXJTaXpl
KSwgYXJndW1lbnRHUFIpOworICAgICAgICAgICAganVtcCgpLmxpbmtUbyhsb29wU3RhcnQsIHRo
aXMpOworICAgICAgICB9CisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICB9CisgICAgcmV0
KCk7CisKKyAgICBzdGFja092ZXJmbG93LmxpbmsodGhpcyk7CisjaWYgQ1BVKFg4Nl82NCkKKyAg
ICBhZGRQdHIoVHJ1c3RlZEltbTMyKDEgKiBzaXplb2YoQ1BVUmVnaXN0ZXIpKSwgc3RhY2tQb2lu
dGVyUmVnaXN0ZXIpOyAvLyBkaXNjYXJkIHJldHVybiBhZGRyZXNzLgorI2VuZGlmCisKKyAgICB1
aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4KDApLmJpdHMoKTsKKyAgICBzdG9y
ZTMyKFRydXN0ZWRJbW0zMihsb2NhdGlvbkJpdHMpLCB0YWdGb3IoQ2FsbEZyYW1lU2xvdDo6YXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKTsKKworICAgIGlmIChtYXhGcmFtZUV4dGVudEZvclNs
b3dQYXRoQ2FsbCkKKyAgICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtc3RhdGljX2Nhc3Q8aW50
MzJfdD4obWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpKSwgc3RhY2tQb2ludGVyUmVnaXN0
ZXIpOworCisgICAgc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUob3BlcmF0aW9uVGhyb3dTdGFja092
ZXJmbG93RXJyb3IpPihjb2RlQmxvY2tHUFIpOworICAgIHByZXBhcmVDYWxsT3BlcmF0aW9uKHZt
KTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBvcGVyYXRpb25DYWxsID0gY2FsbChPcGVyYXRp
b25QdHJUYWcpOworICAgIEp1bXAgaGFuZGxlRXhjZXB0aW9uSnVtcCA9IGp1bXAoKTsKKworICAg
IGF1dG8gaGFuZGxlciA9IHZtLmdldENUSVN0dWIoaGFuZGxlRXhjZXB0aW9uV2l0aENhbGxGcmFt
ZVJvbGxiYWNrR2VuZXJhdG9yKTsKKworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnRoaXMs
IEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6RXh0cmFDVElUaHVuayk7Cisg
ICAgcGF0Y2hCdWZmZXIubGluayhvcGVyYXRpb25DYWxsLCBGdW5jdGlvblB0cjxPcGVyYXRpb25Q
dHJUYWc+KG9wZXJhdGlvblRocm93U3RhY2tPdmVyZmxvd0Vycm9yKSk7CisgICAgcGF0Y2hCdWZm
ZXIubGluayhoYW5kbGVFeGNlcHRpb25KdW1wLCBDb2RlTG9jYXRpb25MYWJlbChoYW5kbGVyLnJl
dGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkpOworICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNo
QnVmZmVyLCBKSVRUaHVua1B0clRhZywgdGh1bmtOYW1lKTsKK30KKworc3RhdGljIGNvbnN0ZXhw
ciBib29sIGRvZXNQcm9maWxpbmcgPSB0cnVlOworc3RhdGljIGNvbnN0ZXhwciBib29sIGlzQ29u
c3RydWN0b3IgPSB0cnVlOworc3RhdGljIGNvbnN0ZXhwciBib29sIGhhc0h1Z2VGcmFtZSA9IHRy
dWU7CisKKyNkZWZpbmUgREVGSU5FX1BST0dMT0dVRV9HRU5FUkFUT1IoZG9lc1Byb2ZpbGluZywg
aXNDb25zdHJ1Y3RvciwgaGFzSHVnZUZyYW1lLCBuYW1lLCBhcml0eUZpeHVwTmFtZSkgXAorICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpuYW1lKFZNJiB2bSkg
XAorICAgIHsgXAorICAgICAgICBKSVQgaml0KHZtKTsgXAorICAgICAgICByZXR1cm4gaml0LnBy
b2xvZ3VlR2VuZXJhdG9yKHZtLCBkb2VzUHJvZmlsaW5nLCBpc0NvbnN0cnVjdG9yLCBoYXNIdWdl
RnJhbWUsICJCYXNlbGluZTogIiAjbmFtZSk7IFwKKyAgICB9CisKK0ZPUl9FQUNIX1BST0xPR1VF
X0dFTkVSQVRPUihERUZJTkVfUFJPR0xPR1VFX0dFTkVSQVRPUikKKyN1bmRlZiBERUZJTkVfUFJP
R0xPR1VFX0dFTkVSQVRPUgorCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+
IEpJVDo6YXJpdHlGaXh1cFByb2xvZ3VlR2VuZXJhdG9yKFZNJiB2bSwgYm9vbCBpc0NvbnN0cnVj
dG9yLCBUaHVua0dlbmVyYXRvciBub3JtYWxQcm9sb2d1ZUdlbmVyYXRvciwgY29uc3QgY2hhciog
dGh1bmtOYW1lKQoreworICAgIC8vIFRoaXMgZnVuY3Rpb24gZ2VuZXJhdGVzIHRoZSBCYXNlbGlu
ZSBKSVQncyBwcm9sb2d1ZSBjb2RlLiBJdCBpcyBub3QgdXNlYWJsZSBieSBvdGhlciB0aWVycy4K
KyAgICBjb25zdGV4cHIgR1BSUmVnIGNvZGVCbG9ja0dQUiA9IHJlZ1Q3OyAvLyBpbmNvbWluZy4K
KyAgICBjb25zdGV4cHIgR1BSUmVnIG51bVBhcmFtZXRlcnNHUFIgPSByZWdUNjsKKworICAgIHRh
Z1JldHVybkFkZHJlc3MoKTsKKyNpZiBDUFUoWDg2XzY0KQorICAgIHB1c2goZnJhbWVQb2ludGVy
UmVnaXN0ZXIpOworI2VsaWYgQ1BVKEFSTTY0KQorICAgIHB1c2hQYWlyKGZyYW1lUG9pbnRlclJl
Z2lzdGVyLCBsaW5rUmVnaXN0ZXIpOworI2VuZGlmCisKKyAgICBzdG9yZTY0KGNvZGVCbG9ja0dQ
UiwgYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spKTsKKyAgICBzdG9yZTgoVHJ1
c3RlZEltbTMyKDApLCBBZGRyZXNzKGNvZGVCbG9ja0dQUiwgQ29kZUJsb2NrOjpvZmZzZXRPZlNo
b3VsZEFsd2F5c0JlSW5saW5lZCgpKSk7CisKKyAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJh
bWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyksIHJlZ1QxKTsKKyAgICBsb2FkMzIo
QWRkcmVzcyhjb2RlQmxvY2tHUFIsIENvZGVCbG9jazo6b2Zmc2V0T2ZOdW1QYXJhbWV0ZXJzKCkp
LCBudW1QYXJhbWV0ZXJzR1BSKTsKKyAgICBKdW1wIG5vRml4dXBOZWVkZWQgPSBicmFuY2gzMihB
Ym92ZU9yRXF1YWwsIHJlZ1QxLCBudW1QYXJhbWV0ZXJzR1BSKTsKKworICAgIGlmIGNvbnN0ZXhw
ciAobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpCisgICAgICAgIGFkZFB0cihUcnVzdGVk
SW1tMzIoLXN0YXRpY19jYXN0PGludDMyX3Q+KG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxs
KSksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKworICAgIGxvYWRQdHIoQWRkcmVzcyhjb2RlQmxv
Y2tHUFIsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIGFyZ3VtZW50R1BSMCk7
CisKKyAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShvcGVyYXRpb25Db25z
dHJ1Y3RBcml0eUNoZWNrKSwgZGVjbHR5cGUob3BlcmF0aW9uQ2FsbEFyaXR5Q2hlY2spPjo6dmFs
dWUpOworICAgIHNldHVwQXJndW1lbnRzPGRlY2x0eXBlKG9wZXJhdGlvbkNhbGxBcml0eUNoZWNr
KT4oYXJndW1lbnRHUFIwKTsKKyAgICBwcmVwYXJlQ2FsbE9wZXJhdGlvbih2bSk7CisKKyAgICBN
YWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcml0eUNoZWNrQ2FsbCA9IGNhbGwoT3BlcmF0aW9uUHRyVGFn
KTsKKyAgICBKdW1wIGhhbmRsZUV4Y2VwdGlvbkp1bXAgPSBlbWl0Tm9uUGF0Y2hhYmxlRXhjZXB0
aW9uQ2hlY2sodm0pOworCisgICAgaWYgY29uc3RleHByIChtYXhGcmFtZUV4dGVudEZvclNsb3dQ
YXRoQ2FsbCkKKyAgICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihtYXhGcmFtZUV4dGVudEZvclNs
b3dQYXRoQ2FsbCksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBKdW1wIG5lZWRGaXh1cCA9
IGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUik7CisgICAgbm9GaXh1cE5lZWRl
ZC5saW5rKHRoaXMpOworCisgICAgLy8gVGhlIG5vcm1hbCBwcm9sb2d1ZSBleHBlY3RzIGluY29t
aW5nIGNvZGVCbG9ja0dQUi4KKyAgICBsb2FkNjQoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpj
b2RlQmxvY2spLCBjb2RlQmxvY2tHUFIpOworCisjaWYgQ1BVKFg4Nl82NCkKKyAgICBwb3AoZnJh
bWVQb2ludGVyUmVnaXN0ZXIpOworI2VsaWYgQ1BVKEFSTTY0KQorICAgIHBvcFBhaXIoZnJhbWVQ
b2ludGVyUmVnaXN0ZXIsIGxpbmtSZWdpc3Rlcik7CisjZW5kaWYKKyAgICB1bnRhZ1JldHVybkFk
ZHJlc3MoKTsKKworICAgIEp1bXBMaXN0IG5vcm1hbFByb2xvZ3VlSnVtcDsKKyAgICBub3JtYWxQ
cm9sb2d1ZUp1bXAuYXBwZW5kKGp1bXAoKSk7CisKKyAgICBuZWVkRml4dXAubGluayh0aGlzKTsK
KworICAgIC8vIFJlc3RvcmUgdGhlIHN0YWNrIGZvciBhcml0eSBmaXh1cCwgYW5kIHByZXNlcnZl
IHRoZSByZXR1cm4gYWRkcmVzcy4KKyAgICAvLyBhcml0eUZpeHVwR2VuZXJhdG9yIHdpbGwgYmUg
c2hpZnRpbmcgdGhlIHN0YWNrLiBTbywgd2UgY2FuJ3QgdXNlIHRoZSBzdGFjayB0bworICAgIC8v
IHByZXNlcnZlIHRoZSByZXR1cm4gYWRkcmVzcy4gV2UgYWxzbyBjYW4ndCB1c2UgY2FsbGVlIHNh
dmVkIHJlZ2lzdGVycyBiZWNhdXNlCisgICAgLy8gdGhleSBoYXZlbid0IGJlZW4gc2F2ZWQgeWV0
LgorICAgIC8vCisgICAgLy8gYXJpdHlGaXh1cEdlbmVyYXRvciBpcyBjYXJlZnVsbHkgY3JhZnRl
ZCB0byBvbmx5IHVzZSBhMCwgYTEsIGEyLCB0MywgdDQgYW5kIHQ1LgorICAgIC8vIFNvLCB0aGUg
cmV0dXJuIGFkZHJlc3MgY2FuIGJlIHByZXNlcnZlZCBpbiByZWdUNy4KKyNpZiBDUFUoWDg2XzY0
KQorICAgIHBvcChhcmd1bWVudEdQUjIpOyAvLyBkaXNjYXJkLgorICAgIHBvcChyZWdUNyk7IC8v
IHNhdmUgcmV0dXJuIGFkZHJlc3MuCisjZWxpZiBDUFUoQVJNNjQpCisgICAgcG9wUGFpcihmcmFt
ZVBvaW50ZXJSZWdpc3RlciwgbGlua1JlZ2lzdGVyKTsKKyAgICB1bnRhZ1JldHVybkFkZHJlc3Mo
KTsKKyAgICBtb3ZlKGxpbmtSZWdpc3RlciwgcmVnVDcpOworICAgIGF1dG8gcmFuZG9tUmV0dXJu
QWRkcmVzc1RhZyA9IHJhbmRvbSgpOworICAgIG1vdmUoVHJ1c3RlZEltbTMyKHJhbmRvbVJldHVy
bkFkZHJlc3NUYWcpLCByZWdUMSk7CisgICAgdGFnUHRyKHJlZ1QxLCByZWdUNyk7CisjZW5kaWYK
KyAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgIENh
bGwgYXJpdHlGaXh1cENhbGwgPSBuZWFyQ2FsbCgpOworCisjaWYgQ1BVKFg4Nl82NCkKKyAgICBw
dXNoKHJlZ1Q3KTsgLy8gcmVzdG9yZSByZXR1cm4gYWRkcmVzcy4KKyNlbGlmIENQVShBUk02NCkK
KyAgICBtb3ZlKFRydXN0ZWRJbW0zMihyYW5kb21SZXR1cm5BZGRyZXNzVGFnKSwgcmVnVDEpOwor
ICAgIHVudGFnUHRyKHJlZ1QxLCByZWdUNyk7CisgICAgbW92ZShyZWdUNywgbGlua1JlZ2lzdGVy
KTsKKyNlbmRpZgorCisgICAgbG9hZDY0KGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJs
b2NrKSwgY29kZUJsb2NrR1BSKTsKKyAgICBub3JtYWxQcm9sb2d1ZUp1bXAuYXBwZW5kKGp1bXAo
KSk7CisKKyAgICBhdXRvIGFyaXR5Q2hlY2tPcGVyYXRpb24gPSBpc0NvbnN0cnVjdG9yID8gb3Bl
cmF0aW9uQ29uc3RydWN0QXJpdHlDaGVjayA6IG9wZXJhdGlvbkNhbGxBcml0eUNoZWNrOworICAg
IGF1dG8gYXJpdHlGaXh1cCA9IHZtLmdldENUSVN0dWIoYXJpdHlGaXh1cEdlbmVyYXRvcik7Cisg
ICAgYXV0byBub3JtYWxQcm9sb2d1ZSA9IHZtLmdldENUSVN0dWIobm9ybWFsUHJvbG9ndWVHZW5l
cmF0b3IpOworICAgIGF1dG8gZXhjZXB0aW9uSGFuZGxlciA9IHZtLmdldENUSVN0dWIocG9wVGh1
bmtTdGFja1ByZXNlcnZlc0FuZEhhbmRsZUV4Y2VwdGlvbkdlbmVyYXRvcik7CisKKyAgICBMaW5r
QnVmZmVyIHBhdGNoQnVmZmVyKCp0aGlzLCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlBy
b2ZpbGU6OkV4dHJhQ1RJVGh1bmspOworICAgIHBhdGNoQnVmZmVyLmxpbmsoYXJpdHlDaGVja0Nh
bGwsIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4oYXJpdHlDaGVja09wZXJhdGlvbikpOwor
ICAgIHBhdGNoQnVmZmVyLmxpbmsoYXJpdHlGaXh1cENhbGwsIEZ1bmN0aW9uUHRyKGFyaXR5Rml4
dXAucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7CisgICAgcGF0Y2hCdWZmZXIubGluayhub3Jt
YWxQcm9sb2d1ZUp1bXAsIENvZGVMb2NhdGlvbkxhYmVsKG5vcm1hbFByb2xvZ3VlLnJldGFnZ2Vk
Q29kZTxOb1B0clRhZz4oKSkpOworICAgIHBhdGNoQnVmZmVyLmxpbmsoaGFuZGxlRXhjZXB0aW9u
SnVtcCwgQ29kZUxvY2F0aW9uTGFiZWwoZXhjZXB0aW9uSGFuZGxlci5yZXRhZ2dlZENvZGU8Tm9Q
dHJUYWc+KCkpKTsKKyAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1
bmtQdHJUYWcsIHRodW5rTmFtZSk7Cit9CisKKyNkZWZpbmUgREVGSU5FX0FSSVRZX1BST0dMT0dV
RV9HRU5FUkFUT1IoZG9lc1Byb2ZpbGluZywgaXNDb25zdHJ1Y3RvciwgaGFzSHVnZUZyYW1lLCBu
YW1lLCBhcml0eUZpeHVwTmFtZSkgXAorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBKSVQ6OmFyaXR5Rml4dXBOYW1lKFZNJiB2bSkgXAorICAgIHsgXAorICAgICAgICBKSVQg
aml0KHZtKTsgXAorICAgICAgICByZXR1cm4gaml0LmFyaXR5Rml4dXBQcm9sb2d1ZUdlbmVyYXRv
cih2bSwgaXNDb25zdHJ1Y3RvciwgbmFtZSwgIkJhc2VsaW5lOiAiICNhcml0eUZpeHVwTmFtZSk7
IFwKKyAgICB9CisKK0ZPUl9FQUNIX1BST0xPR1VFX0dFTkVSQVRPUihERUZJTkVfQVJJVFlfUFJP
R0xPR1VFX0dFTkVSQVRPUikKKyN1bmRlZiBERUZJTkVfQVJJVFlfUFJPR0xPR1VFX0dFTkVSQVRP
UgorCisjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCisKIHZvaWQgSklUOjpsaW5r
KCkKIHsKICAgICBMaW5rQnVmZmVyJiBwYXRjaEJ1ZmZlciA9ICptX2xpbmtCdWZmZXI7CkBAIC0x
MDQ2LDkgKzEzNTcsOSBAQCBDb21waWxhdGlvblJlc3VsdCBKSVQ6OnByaXZhdGVDb21waWxlKEpJ
CiAgICAgcmV0dXJuIGZpbmFsaXplT25NYWluVGhyZWFkKCk7CiB9CiAKKyNpZiAhRU5BQkxFKEVY
VFJBX0NUSV9USFVOS1MpCiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVFeGNlcHRpb25IYW5kbGVy
cygpCiB7Ci0jaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogICAgIGlmICghbV9leGNlcHRp
b25DaGVja3NXaXRoQ2FsbEZyYW1lUm9sbGJhY2suZW1wdHkoKSkgewogICAgICAgICBtX2V4Y2Vw
dGlvbkNoZWNrc1dpdGhDYWxsRnJhbWVSb2xsYmFjay5saW5rKHRoaXMpOwogCkBAIC0xMDczLDgg
KzEzODQsOCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVFeGNlcHRpb25IYW5kbGVyCiAgICAg
ICAgIG1fZmFyQ2FsbHMuYXBwZW5kKEZhckNhbGxSZWNvcmQoY2FsbChPcGVyYXRpb25QdHJUYWcp
LCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbkxvb2t1cEV4Y2VwdGlvbkhh
bmRsZXIpKSk7CiAgICAgICAgIGp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIodm0oKSk7CiAgICAgfQot
I2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogfQorI2VuZGlmIC8vICFFTkFCTEUo
RVhUUkFfQ1RJX1RIVU5LUykKIAogdm9pZCBKSVQ6OmRvTWFpblRocmVhZFByZXBhcmF0aW9uQmVm
b3JlQ29tcGlsZSgpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHJldmlzaW9uIDI3
ODU0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHdvcmtpbmcgY29weSkK
QEAgLTMxOCw3ICszMTgsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIG1fZXhjZXB0
aW9uQ2hlY2tzV2l0aENhbGxGcmFtZVJvbGxiYWNrLmFwcGVuZChlbWl0RXhjZXB0aW9uQ2hlY2so
dm0oKSkpOwogICAgICAgICB9CiAKKyNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAgICAg
ICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVFeGNlcHRpb25IYW5kbGVycygpOworI2VuZGlmCiAKICAg
ICAgICAgdm9pZCBhZHZhbmNlVG9OZXh0Q2hlY2twb2ludCgpOwogICAgICAgICB2b2lkIGVtaXRK
dW1wU2xvd1RvSG90Rm9yQ2hlY2twb2ludChKdW1wKTsKQEAgLTc5MCw2ICs3OTIsMjYgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICAgICAgLy8g
VGh1bmsgZ2VuZXJhdG9ycy4KKyAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gcHJvbG9ndWVHZW5lcmF0b3IwKFZNJik7CisgICAgICAgIHN0YXRpYyBN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHByb2xvZ3VlR2VuZXJhdG9yMShW
TSYpOworICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiBwcm9sb2d1ZUdlbmVyYXRvcjIoVk0mKTsKKyAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRUaHVua1B0clRhZz4gcHJvbG9ndWVHZW5lcmF0b3IzKFZNJik7CisgICAgICAg
IHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHByb2xvZ3VlR2Vu
ZXJhdG9yNChWTSYpOworICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiBwcm9sb2d1ZUdlbmVyYXRvcjUoVk0mKTsKKyAgICAgICAgc3RhdGljIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gcHJvbG9ndWVHZW5lcmF0b3I2KFZNJik7
CisgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHBy
b2xvZ3VlR2VuZXJhdG9yNyhWTSYpOworICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHJUYWc+IHByb2xvZ3VlR2VuZXJhdG9yKFZNJiwgYm9vbCBkb2VzUHJvZmlsaW5nLCBi
b29sIGlzQ29uc3RydWN0b3IsIGJvb2wgaGFzSHVnZUZyYW1lLCBjb25zdCBjaGFyKiBuYW1lKTsK
KworICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBh
cml0eUZpeHVwX3Byb2xvZ3VlR2VuZXJhdG9yMChWTSYpOworICAgICAgICBzdGF0aWMgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBhcml0eUZpeHVwX3Byb2xvZ3VlR2VuZXJh
dG9yMShWTSYpOworICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5r
UHRyVGFnPiBhcml0eUZpeHVwX3Byb2xvZ3VlR2VuZXJhdG9yMihWTSYpOworICAgICAgICBzdGF0
aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBhcml0eUZpeHVwX3Byb2xv
Z3VlR2VuZXJhdG9yMyhWTSYpOworICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFRodW5rUHRyVGFnPiBhcml0eUZpeHVwX3Byb2xvZ3VlR2VuZXJhdG9yNChWTSYpOworICAg
ICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBhcml0eUZp
eHVwX3Byb2xvZ3VlR2VuZXJhdG9yNShWTSYpOworICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBhcml0eUZpeHVwX3Byb2xvZ3VlR2VuZXJhdG9yNihW
TSYpOworICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiBhcml0eUZpeHVwX3Byb2xvZ3VlR2VuZXJhdG9yNyhWTSYpOworICAgICAgICBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGFyaXR5Rml4dXBQcm9sb2d1ZUdlbmVyYXRvcihW
TSYsIGJvb2wgaXNDb25zdHJ1Y3RvciwgVGh1bmtHZW5lcmF0b3Igbm9ybWFsUHJvbG9ndWVHZW5l
cmF0b3IsIGNvbnN0IGNoYXIqIG5hbWUpOworCiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHNsb3dfb3BfZGVsX2J5X2lkX3ByZXBhcmVDYWxsR2Vu
ZXJhdG9yKFZNJik7CiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1
bmtQdHJUYWc+IHNsb3dfb3BfZGVsX2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRvcihWTSYpOwog
ICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBzbG93
X29wX2dldF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvcihWTSYpOwpAQCAtODA0LDcgKzgyNiwx
NCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRUaHVua1B0clRhZz4gc2xvd19vcF9yZXNvbHZlX3Njb3BlR2VuZXJhdG9yKFZNJik7CiAK
ICAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3Bf
Y2hlY2tfdHJhcHNfaGFuZGxlckdlbmVyYXRvcihWTSYpOwotICAgICAgICBzdGF0aWMgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvcF9lbnRlcl9oYW5kbGVyR2VuZXJhdG9y
KFZNJik7CisKKyAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gb3BfZW50ZXJfY2FuQmVPcHRpbWl6ZWRfR2VuZXJhdG9yKFZNJik7CisgICAgICAgIHN0
YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9wX2VudGVyX2Nhbm5v
dEJlT3B0aW1pemVkX0dlbmVyYXRvcihWTSYpOworICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+IG9wX2VudGVyX0dlbmVyYXRvcihWTSYsIGJvb2wgY2FuQmVPcHRp
bWl6ZWQsIGNvbnN0IGNoYXIqIHRodW5rTmFtZSk7CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKyAg
ICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3BfbG9v
cF9oaW50X0dlbmVyYXRvcihWTSYpOworI2VuZGlmCiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9wX3JldF9oYW5kbGVyR2VuZXJhdG9yKFZNJik7
CiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9w
X3Rocm93X2hhbmRsZXJHZW5lcmF0b3IoVk0mKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRJbmxpbmVzLmgJKHJldmlzaW9uIDI3ODU0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC05MSw3ICs5MSw2IEBAIEFM
V0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRMb2FkQ2hhcmFjdGUKIAogQUxXQVlTX0lOTElORSBK
SVQ6OkNhbGwgSklUOjplbWl0TmFrZWROZWFyQ2FsbChDb2RlUHRyPE5vUHRyVGFnPiB0YXJnZXQp
CiB7Ci0gICAgQVNTRVJUKG1fYnl0ZWNvZGVJbmRleCk7IC8vIFRoaXMgbWV0aG9kIHNob3VsZCBv
bmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1f
Ynl0ZWNvZGVJbmRleCBpcyBzZXQuCiAgICAgQ2FsbCBuYWtlZENhbGwgPSBuZWFyQ2FsbCgpOwog
ICAgIG1fbmVhckNhbGxzLmFwcGVuZChOZWFyQ2FsbFJlY29yZChuYWtlZENhbGwsIEZ1bmN0aW9u
UHRyPEpTSW50ZXJuYWxQdHJUYWc+KHRhcmdldC5yZXRhZ2dlZDxKU0ludGVybmFsUHRyVGFnPigp
KSkpOwogICAgIHJldHVybiBuYWtlZENhbGw7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVE9wY29kZXMzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCShyZXZpc2lvbiAyNzg1NDUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEwNjYsNyArMTA2Niw3IEBAIHZvaWQgSklUOjplbWl0X29wX2VudGVyKGNvbnN0IEluc3RydWN0
aW8KICAgICAvLyBFdmVuIHRob3VnaCBKSVQgY29kZSBkb2Vzbid0IHVzZSB0aGVtLCB3ZSBpbml0
aWFsaXplIG91ciBjb25zdGFudAogICAgIC8vIHJlZ2lzdGVycyB0byB6YXAgc3RhbGUgcG9pbnRl
cnMsIHRvIGF2b2lkIHVubmVjZXNzYXJpbHkgcHJvbG9uZ2luZwogICAgIC8vIG9iamVjdCBsaWZl
dGltZSBhbmQgaW5jcmVhc2luZyBHQyBwcmVzc3VyZS4KLSAgICBmb3IgKGludCBpID0gQ29kZUJs
b2NrOjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCk7IGkg
PCBtX2NvZGVCbG9jay0+bnVtVmFycygpOyArK2kpCisgICAgZm9yICh1bnNpZ25lZCBpID0gQ29k
ZUJsb2NrOjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCk7
IGkgPCBtX2NvZGVCbG9jay0+bnVtVmFycygpOyArK2kpCiAgICAgICAgIGVtaXRTdG9yZSh2aXJ0
dWFsUmVnaXN0ZXJGb3JMb2NhbChpKSwganNVbmRlZmluZWQoKSk7CiAKICAgICBKSVRTbG93UGF0
aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX2Vu
dGVyKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkocmV2
aXNpb24gMjc4NTQ1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzc2LDcgKzM3Niw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICBKSVQgaml0KHZtKTsKIAogICAgIGppdC5jaGVja1N0
YWNrUG9pbnRlckFsaWdubWVudCgpOwotICAgIGppdC5lbWl0UmVzdG9yZUNhbGxlZVNhdmVzRm9y
KCZSZWdpc3RlckF0T2Zmc2V0TGlzdDo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVSZWdpc3RlcnMo
KSk7CisgICAgaml0LmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXNGb3JCYXNlbGluZUpJVCgpOwogICAg
IGppdC5lbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOwogICAgIGppdC5yZXQoKTsKIApAQCAtMTE4Niwx
MDMgKzExODYsMTE1IEBAIHZvaWQgSklUOjplbWl0X29wX2VudGVyKGNvbnN0IEluc3RydWN0aW8K
ICAgICBlbWl0RW50ZXJPcHRpbWl6YXRpb25DaGVjaygpOwogI2Vsc2UKICAgICBBU1NFUlQobV9i
eXRlY29kZUluZGV4Lm9mZnNldCgpID09IDApOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgbG9jYWxz
VG9Jbml0R1BSID0gYXJndW1lbnRHUFIwOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgY2FuQmVPcHRp
bWl6ZWRHUFIgPSBhcmd1bWVudEdQUjQ7Ci0KICAgICB1bnNpZ25lZCBsb2NhbHNUb0luaXQgPSBj
b3VudCAtIENvZGVCbG9jazo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJl
Z2lzdGVycygpOwogICAgIFJFTEVBU0VfQVNTRVJUKGxvY2Fsc1RvSW5pdCA8IGNvdW50KTsKLSAg
ICBtb3ZlKFRydXN0ZWRJbW0zMihsb2NhbHNUb0luaXQgKiBzaXplb2YoUmVnaXN0ZXIpKSwgbG9j
YWxzVG9Jbml0R1BSKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMihjYW5CZU9wdGltaXplZCgpKSwg
Y2FuQmVPcHRpbWl6ZWRHUFIpOwotICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtKCkuZ2V0Q1RJU3R1
YihvcF9lbnRlcl9oYW5kbGVyR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwor
ICAgIFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvciA9IGNhbkJlT3B0aW1pemVkKCkgPyBvcF9lbnRl
cl9jYW5CZU9wdGltaXplZF9HZW5lcmF0b3IgOiBvcF9lbnRlcl9jYW5ub3RCZU9wdGltaXplZF9H
ZW5lcmF0b3I7CisgICAgZW1pdE5ha2VkTmVhckNhbGwodm0oKS5nZXRDVElTdHViKGdlbmVyYXRv
cikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJ
X1RIVU5LUykKIH0KIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6Om9wX2VudGVyX2hhbmRsZXJHZW5lcmF0b3Io
Vk0mIHZtKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6Om9wX2Vu
dGVyX0dlbmVyYXRvcihWTSYgdm0sIGJvb2wgY2FuQmVPcHRpbWl6ZWQsIGNvbnN0IGNoYXIqIHRo
dW5rTmFtZSkKIHsKLSAgICBKSVQgaml0KHZtKTsKLQogI2lmIENQVShYODZfNjQpCi0gICAgaml0
LnB1c2goWDg2UmVnaXN0ZXJzOjplYnApOworICAgIHB1c2goWDg2UmVnaXN0ZXJzOjplYnApOwog
I2VsaWYgQ1BVKEFSTTY0KQotICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7Ci0gICAgaml0LnB1
c2hQYWlyKGZyYW1lUG9pbnRlclJlZ2lzdGVyLCBsaW5rUmVnaXN0ZXIpOworICAgIHRhZ1JldHVy
bkFkZHJlc3MoKTsKKyAgICBwdXNoUGFpcihmcmFtZVBvaW50ZXJSZWdpc3RlciwgbGlua1JlZ2lz
dGVyKTsKICNlbmRpZgogICAgIC8vIG9wX2VudGVyIGlzIGFsd2F5cyBhdCBieXRlY29kZU9mZnNl
dCAwLgotICAgIGppdC5zdG9yZTMyKFRydXN0ZWRJbW0zMigwKSwgdGFnRm9yKENhbGxGcmFtZVNs
b3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSk7CisgICAgc3RvcmUzMihUcnVzdGVkSW1t
MzIoMCksIHRhZ0ZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykp
OwogCiAgICAgY29uc3RleHByIEdQUlJlZyBsb2NhbHNUb0luaXRHUFIgPSBhcmd1bWVudEdQUjA7
CiAgICAgY29uc3RleHByIEdQUlJlZyBpdGVyYXRvckdQUiA9IGFyZ3VtZW50R1BSMTsKICAgICBj
b25zdGV4cHIgR1BSUmVnIGVuZEdQUiA9IGFyZ3VtZW50R1BSMjsKICAgICBjb25zdGV4cHIgR1BS
UmVnIHVuZGVmaW5lZEdQUiA9IGFyZ3VtZW50R1BSMzsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGNh
bkJlT3B0aW1pemVkR1BSID0gYXJndW1lbnRHUFI0OworICAgIGNvbnN0ZXhwciBHUFJSZWcgY29k
ZUJsb2NrR1BSID0gYXJndW1lbnRHUFI0OworCisgICAgY29uc3RleHByIGludCB2aXJ0dWFsUmVn
aXN0ZXJTaXplU2hpZnQgPSAzOworICAgIHN0YXRpY19hc3NlcnQoKDEgPDwgdmlydHVhbFJlZ2lz
dGVyU2l6ZVNoaWZ0KSA9PSBzaXplb2YoUmVnaXN0ZXIpKTsKKworICAgIGxvYWRQdHIoYWRkcmVz
c0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCBjb2RlQmxvY2tHUFIpOworICAgIGxvYWQz
MihBZGRyZXNzKGNvZGVCbG9ja0dQUiwgQ29kZUJsb2NrOjpvZmZzZXRPZk51bVZhcnMoKSksIGxv
Y2Fsc1RvSW5pdEdQUik7CisgICAgc3ViMzIoVHJ1c3RlZEltbTMyKENvZGVCbG9jazo6bGxpbnRC
YXNlbGluZUNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpKSwgbG9jYWxzVG9Jbml0
R1BSKTsKKyAgICBsc2hpZnQzMihUcnVzdGVkSW1tMzIodmlydHVhbFJlZ2lzdGVyU2l6ZVNoaWZ0
KSwgbG9jYWxzVG9Jbml0R1BSKTsKIAogICAgIHNpemVfdCBzdGFydExvY2FsID0gQ29kZUJsb2Nr
OjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCk7CiAgICAg
aW50IHN0YXJ0T2Zmc2V0ID0gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoc3RhcnRMb2NhbCkub2Zm
c2V0KCk7Ci0gICAgaml0Lm1vdmUoVHJ1c3RlZEltbTY0KHN0YXJ0T2Zmc2V0ICogc2l6ZW9mKFJl
Z2lzdGVyKSksIGl0ZXJhdG9yR1BSKTsKLSAgICBqaXQuc3ViNjQoaXRlcmF0b3JHUFIsIGxvY2Fs
c1RvSW5pdEdQUiwgZW5kR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW02NChzdGFydE9mZnNldCAq
IHNpemVvZihSZWdpc3RlcikpLCBpdGVyYXRvckdQUik7CisgICAgc3ViNjQoaXRlcmF0b3JHUFIs
IGxvY2Fsc1RvSW5pdEdQUiwgZW5kR1BSKTsKIAotICAgIGppdC5tb3ZlKFRydXN0ZWRJbW02NChK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSkpLCB1bmRlZmluZWRHUFIpOwotICAgIGF1dG8g
aW5pdExvb3AgPSBqaXQubGFiZWwoKTsKLSAgICBKdW1wIGluaXREb25lID0gaml0LmJyYW5jaDMy
KExlc3NUaGFuT3JFcXVhbCwgaXRlcmF0b3JHUFIsIGVuZEdQUik7CisgICAgbW92ZShUcnVzdGVk
SW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpKSwgdW5kZWZpbmVkR1BSKTsKKyAg
ICBhdXRvIGluaXRMb29wID0gbGFiZWwoKTsKKyAgICBKdW1wIGluaXREb25lID0gYnJhbmNoMzIo
TGVzc1RoYW5PckVxdWFsLCBpdGVyYXRvckdQUiwgZW5kR1BSKTsKICAgICB7Ci0gICAgICAgIGpp
dC5zdG9yZTY0KHVuZGVmaW5lZEdQUiwgQmFzZUluZGV4KEdQUkluZm86OmNhbGxGcmFtZVJlZ2lz
dGVyLCBpdGVyYXRvckdQUiwgVGltZXNPbmUpKTsKLSAgICAgICAgaml0LnN1YjY0KFRydXN0ZWRJ
bW0zMihzaXplb2YoUmVnaXN0ZXIpKSwgaXRlcmF0b3JHUFIpOwotICAgICAgICBqaXQuanVtcChp
bml0TG9vcCk7CisgICAgICAgIHN0b3JlNjQodW5kZWZpbmVkR1BSLCBCYXNlSW5kZXgoR1BSSW5m
bzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGl0ZXJhdG9yR1BSLCBUaW1lc09uZSkpOworICAgICAgICBz
dWI2NChUcnVzdGVkSW1tMzIoc2l6ZW9mKFJlZ2lzdGVyKSksIGl0ZXJhdG9yR1BSKTsKKyAgICAg
ICAganVtcChpbml0TG9vcCk7CiAgICAgfQotICAgIGluaXREb25lLmxpbmsoJmppdCk7CisgICAg
aW5pdERvbmUubGluayh0aGlzKTsKIAotICAgIC8vIGVtaXRXcml0ZUJhcnJpZXIobV9jb2RlQmxv
Y2spLgotICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2Nr
KSwgYXJndW1lbnRHUFIxKTsKLSAgICBKdW1wIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBq
aXQuYmFycmllckJyYW5jaCh2bSwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOworICAgIC8v
IEltcGxlbWVudGluZyBlbWl0V3JpdGVCYXJyaWVyKG1fY29kZUJsb2NrKS4KKyAgICBKdW1wIG93
bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBiYXJyaWVyQnJhbmNoKHZtLCBjb2RlQmxvY2tHUFIs
IGFyZ3VtZW50R1BSMik7CiAKLSAgICBqaXQubW92ZShjYW5CZU9wdGltaXplZEdQUiwgR1BSSW5m
bzo6bnVtYmVyVGFnUmVnaXN0ZXIpOyAvLyBzYXZlLgotICAgIGppdC5zZXR1cEFyZ3VtZW50czxk
ZWNsdHlwZShvcGVyYXRpb25Xcml0ZUJhcnJpZXJTbG93UGF0aCk+KCZ2bSwgYXJndW1lbnRHUFIx
KTsKLSAgICBqaXQucHJlcGFyZUNhbGxPcGVyYXRpb24odm0pOwotICAgIENhbGwgb3BlcmF0aW9u
V3JpdGVCYXJyaWVyQ2FsbCA9IGppdC5jYWxsKE9wZXJhdGlvblB0clRhZyk7CisgICAgc2V0dXBB
cmd1bWVudHM8ZGVjbHR5cGUob3BlcmF0aW9uV3JpdGVCYXJyaWVyU2xvd1BhdGgpPigmdm0sIGNv
ZGVCbG9ja0dQUik7CisgICAgcHJlcGFyZUNhbGxPcGVyYXRpb24odm0pOworICAgIENhbGwgb3Bl
cmF0aW9uV3JpdGVCYXJyaWVyQ2FsbCA9IGNhbGwoT3BlcmF0aW9uUHRyVGFnKTsKKworICAgIGlm
IChjYW5CZU9wdGltaXplZCkKKyAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNs
b3Q6OmNvZGVCbG9jayksIGNvZGVCbG9ja0dQUik7CiAKLSAgICBqaXQubW92ZShHUFJJbmZvOjpu
dW1iZXJUYWdSZWdpc3RlciwgY2FuQmVPcHRpbWl6ZWRHUFIpOyAvLyByZXN0b3JlLgotICAgIGpp
dC5tb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpOdW1iZXJUYWcpLCBHUFJJbmZvOjpudW1iZXJU
YWdSZWdpc3Rlcik7Ci0gICAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbi5saW5rKCZqaXQpOwor
ICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4ubGluayh0aGlzKTsKIAogI2lmIEVOQUJMRShE
RkdfSklUKQorICAgIC8vIEltcGxlbWVudGluZyBlbWl0RW50ZXJPcHRpbWl6YXRpb25DaGVjaygp
LgogICAgIENhbGwgb3BlcmF0aW9uT3B0aW1pemVDYWxsOwotICAgIGlmIChPcHRpb25zOjp1c2VE
RkdKSVQoKSkgewotICAgICAgICAvLyBlbWl0RW50ZXJPcHRpbWl6YXRpb25DaGVjaygpLgorICAg
IGlmIChjYW5CZU9wdGltaXplZCkgewogICAgICAgICBKdW1wTGlzdCBza2lwT3B0aW1pemU7CiAK
LSAgICAgICAgc2tpcE9wdGltaXplLmFwcGVuZChqaXQuYnJhbmNoVGVzdDMyKFplcm8sIGNhbkJl
T3B0aW1pemVkR1BSKSk7CisgICAgICAgIHNraXBPcHRpbWl6ZS5hcHBlbmQoYnJhbmNoQWRkMzIo
U2lnbmVkLCBUcnVzdGVkSW1tMzIoT3B0aW9uczo6ZXhlY3V0aW9uQ291bnRlckluY3JlbWVudEZv
ckVudHJ5KCkpLCBBZGRyZXNzKGNvZGVCbG9ja0dQUiwgQ29kZUJsb2NrOjpvZmZzZXRPZkpJVEV4
ZWN1dGVDb3VudGVyKCkpKSk7CiAKLSAgICAgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxs
RnJhbWVTbG90Ojpjb2RlQmxvY2spLCBhcmd1bWVudEdQUjEpOwotICAgICAgICBza2lwT3B0aW1p
emUuYXBwZW5kKGppdC5icmFuY2hBZGQzMihTaWduZWQsIFRydXN0ZWRJbW0zMihPcHRpb25zOjpl
eGVjdXRpb25Db3VudGVySW5jcmVtZW50Rm9yRW50cnkoKSksIEFkZHJlc3MoYXJndW1lbnRHUFIx
LCBDb2RlQmxvY2s6Om9mZnNldE9mSklURXhlY3V0ZUNvdW50ZXIoKSkpKTsKKyAgICAgICAgY29w
eUxMSW50QmFzZWxpbmVDYWxsZWVTYXZlc0Zyb21GcmFtZU9yUmVnaXN0ZXJUb0VudHJ5RnJhbWVD
YWxsZWVTYXZlc0J1ZmZlcih2bS50b3BFbnRyeUZyYW1lKTsKIAotICAgICAgICBqaXQuY29weUxM
SW50QmFzZWxpbmVDYWxsZWVTYXZlc0Zyb21GcmFtZU9yUmVnaXN0ZXJUb0VudHJ5RnJhbWVDYWxs
ZWVTYXZlc0J1ZmZlcih2bS50b3BFbnRyeUZyYW1lKTsKKyAgICAgICAgc2V0dXBBcmd1bWVudHM8
ZGVjbHR5cGUob3BlcmF0aW9uT3B0aW1pemUpPigmdm0sIFRydXN0ZWRJbW0zMigwKSk7CisgICAg
ICAgIHByZXBhcmVDYWxsT3BlcmF0aW9uKHZtKTsKKyAgICAgICAgb3BlcmF0aW9uT3B0aW1pemVD
YWxsID0gY2FsbChPcGVyYXRpb25QdHJUYWcpOwogCi0gICAgICAgIGppdC5zZXR1cEFyZ3VtZW50
czxkZWNsdHlwZShvcGVyYXRpb25PcHRpbWl6ZSk+KCZ2bSwgVHJ1c3RlZEltbTMyKDApKTsKLSAg
ICAgICAgaml0LnByZXBhcmVDYWxsT3BlcmF0aW9uKHZtKTsKLSAgICAgICAgb3BlcmF0aW9uT3B0
aW1pemVDYWxsID0gaml0LmNhbGwoT3BlcmF0aW9uUHRyVGFnKTsKLQotICAgICAgICBza2lwT3B0
aW1pemUuYXBwZW5kKGppdC5icmFuY2hUZXN0UHRyKFplcm8sIHJldHVyblZhbHVlR1BSKSk7Ci0g
ICAgICAgIGppdC5mYXJKdW1wKHJldHVyblZhbHVlR1BSLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdp
c3Rlcik7CisgICAgICAgIHNraXBPcHRpbWl6ZS5hcHBlbmQoYnJhbmNoVGVzdFB0cihaZXJvLCBy
ZXR1cm5WYWx1ZUdQUikpOworICAgICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBHUFJJbmZv
OjpjYWxsRnJhbWVSZWdpc3Rlcik7CiAKLSAgICAgICAgc2tpcE9wdGltaXplLmxpbmsoJmppdCk7
CisgICAgICAgIHNraXBPcHRpbWl6ZS5saW5rKHRoaXMpOwogICAgIH0KICNlbmRpZiAvLyBFTkFC
TEUoREZHX0pJVCkKIAogI2lmIENQVShYODZfNjQpCi0gICAgaml0LnBvcChYODZSZWdpc3RlcnM6
OmVicCk7CisgICAgcG9wKFg4NlJlZ2lzdGVyczo6ZWJwKTsKICNlbGlmIENQVShBUk02NCkKLSAg
ICBqaXQucG9wUGFpcihmcmFtZVBvaW50ZXJSZWdpc3RlciwgbGlua1JlZ2lzdGVyKTsKKyAgICBw
b3BQYWlyKGZyYW1lUG9pbnRlclJlZ2lzdGVyLCBsaW5rUmVnaXN0ZXIpOwogI2VuZGlmCi0gICAg
aml0LnJldCgpOworICAgIHJldCgpOwogCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQs
IEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6RXh0cmFDVElUaHVuayk7Cisg
ICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdGhpcywgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVm
ZmVyOjpQcm9maWxlOjpFeHRyYUNUSVRodW5rKTsKICAgICBwYXRjaEJ1ZmZlci5saW5rKG9wZXJh
dGlvbldyaXRlQmFycmllckNhbGwsIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0
aW9uV3JpdGVCYXJyaWVyU2xvd1BhdGgpKTsKICNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICBpZiAo
T3B0aW9uczo6dXNlREZHSklUKCkpCisgICAgaWYgKGNhbkJlT3B0aW1pemVkKQogICAgICAgICBw
YXRjaEJ1ZmZlci5saW5rKG9wZXJhdGlvbk9wdGltaXplQ2FsbCwgRnVuY3Rpb25QdHI8T3BlcmF0
aW9uUHRyVGFnPihvcGVyYXRpb25PcHRpbWl6ZSkpOwogI2VuZGlmCi0gICAgcmV0dXJuIEZJTkFM
SVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCAiQmFzZWxpbmU6IG9wX2VudGVy
X2hhbmRsZXIiKTsKKyAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1
bmtQdHJUYWcsIHRodW5rTmFtZSk7Cit9CisKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz4gSklUOjpvcF9lbnRlcl9jYW5CZU9wdGltaXplZF9HZW5lcmF0b3IoVk0mIHZtKQor
eworICAgIEpJVCBqaXQodm0pOworICAgIGNvbnN0ZXhwciBib29sIGNhbkJlT3B0aW1pemVkID0g
dHJ1ZTsKKyAgICByZXR1cm4gaml0Lm9wX2VudGVyX0dlbmVyYXRvcih2bSwgY2FuQmVPcHRpbWl6
ZWQsICJCYXNlbGluZTogb3BfZW50ZXJfY2FuQmVPcHRpbWl6ZWQiKTsKK30KKworTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6Om9wX2VudGVyX2Nhbm5vdEJlT3B0aW1p
emVkX0dlbmVyYXRvcihWTSYgdm0pCit7CisgICAgSklUIGppdCh2bSk7CisgICAgY29uc3RleHBy
IGJvb2wgY2FuQmVPcHRpbWl6ZWQgPSBmYWxzZTsKKyAgICByZXR1cm4gaml0Lm9wX2VudGVyX0dl
bmVyYXRvcih2bSwgY2FuQmVPcHRpbWl6ZWQsICJCYXNlbGluZTogb3BfZW50ZXJfY2Fubm90QmVP
cHRpbWl6ZWQiKTsKIH0KICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIApAQCAt
MTQzNCwyMiArMTQ0NiwyNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9sb29wX2hpbnQoY29uc3QgSW5z
dHJ1CiAgICAgICAgIGFkZDY0KFRydXN0ZWRJbW0zMigxKSwgcmVnVDApOwogICAgICAgICBzdG9y
ZTY0KHJlZ1QwLCBwdHIpOwogICAgIH0KKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGluc3RydWN0
aW9uKTsKICNlbmRpZgogCi0gICAgLy8gRW1pdCB0aGUgSklUIG9wdGltaXphdGlvbiBjaGVjazog
CisgICAgLy8gRW1pdCB0aGUgSklUIG9wdGltaXphdGlvbiBjaGVjazoKICAgICBpZiAoY2FuQmVP
cHRpbWl6ZWQoKSkgeworICAgICAgICBjb25zdGV4cHIgR1BSUmVnIGNvZGVCbG9ja0dQUiA9IHJl
Z1QwOworICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2Nr
KSwgY29kZUJsb2NrR1BSKTsKICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoQWRkMzIoUG9zaXRp
dmVPclplcm8sIFRydXN0ZWRJbW0zMihPcHRpb25zOjpleGVjdXRpb25Db3VudGVySW5jcmVtZW50
Rm9yTG9vcCgpKSwKLSAgICAgICAgICAgIEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+YWRk
cmVzc09mSklURXhlY3V0ZUNvdW50ZXIoKSkpKTsKKyAgICAgICAgICAgIEFkZHJlc3MoY29kZUJs
b2NrR1BSLCBDb2RlQmxvY2s6Om9mZnNldE9mSklURXhlY3V0ZUNvdW50ZXIoKSkpKTsKICAgICB9
CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1Y3Rpb24qIGlu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewogI2lm
IEVOQUJMRShERkdfSklUKQogICAgIC8vIEVtaXQgdGhlIHNsb3cgcGF0aCBmb3IgdGhlIEpJVCBv
cHRpbWl6YXRpb24gY2hlY2s6CiAgICAgaWYgKGNhbkJlT3B0aW1pemVkKCkpIHsKICAgICAgICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAorI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykK
ICAgICAgICAgY29weUxMSW50QmFzZWxpbmVDYWxsZWVTYXZlc0Zyb21GcmFtZU9yUmVnaXN0ZXJU
b0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSgpLnRvcEVudHJ5RnJhbWUpOwogCiAgICAg
ICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbk9wdGltaXplLCAmdm0o
KSwgbV9ieXRlY29kZUluZGV4LmFzQml0cygpKTsKQEAgLTE0NjIsMTMgKzE0NzksODEgQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2xvb3BfaGludChjb25zdCBJbgogICAgICAgICBmYXJKdW1wKHJl
dHVyblZhbHVlR1BSLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CiAgICAgICAgIG5vT3B0
aW1pemVkRW50cnkubGluayh0aGlzKTsKIAotICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChqdW1w
KCksIGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpKTsKKyNlbHNlIC8vIEVOQUJMRShFWFRSQV9D
VElfVEhVTktTKQorICAgICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJ
bmRleC5vZmZzZXQoKTsKKyAgICAgICAgQVNTRVJUKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZz
ZXQpID09IG1fYnl0ZWNvZGVJbmRleCk7CisgICAgICAgIEFTU0VSVChtX2NvZGVCbG9jay0+aW5z
dHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgpID09IGluc3RydWN0aW9uKTsKKworICAgICAgICBj
b25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDc7CisKKyAgICAgICAgbW92
ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CisgICAg
ICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtKCkuZ2V0Q1RJU3R1YihvcF9sb29wX2hpbnRfR2VuZXJh
dG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOworI2VuZGlmIC8vICFFTkFCTEUoRVhUUkFf
Q1RJX1RIVU5LUykKICAgICB9Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShjdXJyZW50SW5zdHJ1
Y3Rpb24pOworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQogICAgIFVOVVNFRF9QQVJBTShpdGVy
KTsKKyAgICBVTlVTRURfUEFSQU0oaW5zdHJ1Y3Rpb24pOworfQorCisjaWYgRU5BQkxFKEVYVFJB
X0NUSV9USFVOS1MpCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKK01hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRUaHVua1B0clRhZz4gSklUOjpvcF9sb29wX2hpbnRfR2VuZXJhdG9yKFZNJiB2bSkKK3sK
KyAgICAvLyBUaGUgdGh1bmsgZ2VuZXJhdGVkIGJ5IHRoaXMgZnVuY3Rpb24gY2FuIG9ubHkgd29y
ayB3aXRoIHRoZSBMTEludCAvIEJhc2VsaW5lIEpJVCBiZWNhdXNlCisgICAgLy8gaXQgbWFrZXMg
YXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUg
ZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgorICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBm
dW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3Qg
bWF0Y2gKKyAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgorICAgIEpJVCBqaXQodm0pOwor
CisgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKKworICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0
ZWNvZGVPZmZzZXRHUFIgPSByZWdUNzsgLy8gaW5jb21pbmcuCisKKyNpZiBDUFUoWDg2XzY0KQor
ICAgIGppdC5wdXNoKGZyYW1lUG9pbnRlclJlZ2lzdGVyKTsKKyNlbGlmIENQVShBUk02NCkKKyAg
ICBqaXQucHVzaFBhaXIoZnJhbWVQb2ludGVyUmVnaXN0ZXIsIGxpbmtSZWdpc3Rlcik7CisjZW5k
aWYKKworICAgIGF1dG8gdXNlZFJlZ2lzdGVycyA9IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFi
bGVSZWdpc3RlcnMoKTsKKyAgICB1c2VkUmVnaXN0ZXJzLmFkZChieXRlY29kZU9mZnNldEdQUik7
CisgICAgaml0LmNvcHlMTEludEJhc2VsaW5lQ2FsbGVlU2F2ZXNGcm9tRnJhbWVPclJlZ2lzdGVy
VG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0udG9wRW50cnlGcmFtZSwgdXNlZFJlZ2lz
dGVycyk7CisKKyAgICBqaXQuc3RvcmUzMihieXRlY29kZU9mZnNldEdQUiwgQ0NhbGxIZWxwZXJz
Ojp0YWdGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKTsKKyAg
ICBqaXQubHNoaWZ0MzIoVHJ1c3RlZEltbTMyKEJ5dGVjb2RlSW5kZXg6OmNoZWNrcG9pbnRTaGlm
dCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKKyAgICBqaXQuc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUo
b3BlcmF0aW9uT3B0aW1pemUpPihUcnVzdGVkSW1tUHRyKCZ2bSksIGJ5dGVjb2RlT2Zmc2V0R1BS
KTsKKyAgICBqaXQucHJlcGFyZUNhbGxPcGVyYXRpb24odm0pOworICAgIENhbGwgb3BlcmF0aW9u
Q2FsbCA9IGppdC5jYWxsKE9wZXJhdGlvblB0clRhZyk7CisgICAgSnVtcCBoYXNPcHRpbWl6ZWRF
bnRyeSA9IGppdC5icmFuY2hUZXN0UHRyKE5vblplcm8sIHJldHVyblZhbHVlR1BSKTsKKworI2lm
IENQVShYODZfNjQpCisgICAgaml0LnBvcChmcmFtZVBvaW50ZXJSZWdpc3Rlcik7CisjZWxpZiBD
UFUoQVJNNjQpCisgICAgaml0LnBvcFBhaXIoZnJhbWVQb2ludGVyUmVnaXN0ZXIsIGxpbmtSZWdp
c3Rlcik7CisjZW5kaWYKKyAgICBqaXQucmV0KCk7CisKKyAgICBoYXNPcHRpbWl6ZWRFbnRyeS5s
aW5rKCZqaXQpOworI2lmIENQVShYODZfNjQpCisgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW0zMigyICogc2l6ZW9mKENQVVJlZ2lzdGVyKSksIHN0YWNrUG9pbnRlclJlZ2lz
dGVyKTsKKyNlbGlmIENQVShBUk02NCkKKyAgICBqaXQucG9wUGFpcihmcmFtZVBvaW50ZXJSZWdp
c3RlciwgbGlua1JlZ2lzdGVyKTsKICNlbmRpZgorICAgIGlmIChBU1NFUlRfRU5BQkxFRCkgewor
ICAgICAgICBKdW1wIG9rID0gaml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6QWJvdmUsIHJl
dHVyblZhbHVlR1BSLCBUcnVzdGVkSW1tUHRyKGJpdHdpc2VfY2FzdDx2b2lkKj4oc3RhdGljX2Nh
c3Q8aW50cHRyX3Q+KDEwMDApKSkpOworICAgICAgICBqaXQuYWJvcnRXaXRoUmVhc29uKEpJVFVu
cmVhc29uYWJsZUxvb3BIaW50SnVtcFRhcmdldCk7CisgICAgICAgIG9rLmxpbmsoJmppdCk7Cisg
ICAgfQorCisgICAgaml0LmZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEdQUkluZm86OmNhbGxGcmFt
ZVJlZ2lzdGVyKTsKKworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhV
TktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OkV4dHJhQ1RJVGh1bmspOworICAgIHBhdGNoQnVm
ZmVyLmxpbmsob3BlcmF0aW9uQ2FsbCwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihvcGVy
YXRpb25PcHRpbWl6ZSkpOworICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBK
SVRUaHVua1B0clRhZywgIkJhc2VsaW5lOiBvcF9sb29wX2hpbnQiKTsKIH0KKyNlbmRpZiAvLyBF
TkFCTEUoREZHX0pJVCkKKyNlbmRpZiAvLyAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKIHZv
aWQgSklUOjplbWl0X29wX2NoZWNrX3RyYXBzKGNvbnN0IEluc3RydWN0aW9uKikKIHsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAJKHJldmlz
aW9uIDI3ODU0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3Jz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODEsMTEgKzgxLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiBwbwogewogICAgIENDYWxsSGVscGVycyBqaXQ7CiAKLSNpZiBD
UFUoWDg2XzY0KQotICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMiAq
IHNpemVvZihDUFVSZWdpc3RlcikpLCBYODZSZWdpc3RlcnM6OmVzcCk7Ci0jZWxpZiBDUFUoQVJN
NjQpCi0gICAgaml0LnBvcFBhaXIoQ0NhbGxIZWxwZXJzOjpmcmFtZVBvaW50ZXJSZWdpc3Rlciwg
Q0NhbGxIZWxwZXJzOjpsaW5rUmVnaXN0ZXIpOwotI2VuZGlmCisgICAgaml0LmFkZFB0cihDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW0zMigyICogc2l6ZW9mKENQVVJlZ2lzdGVyKSksIENDYWxsSGVs
cGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogCiAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGNv
bnRpbnVhdGlvbiA9IGppdC5qdW1wKCk7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>430746</attachid>
            <date>2021-06-07 08:03:13 -0700</date>
            <delta_ts>2021-06-07 09:44:00 -0700</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-226375.patch</filename>
            <type>text/plain</type>
            <size>53930</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjc4NTYwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk3IEBA
CisyMDIxLTA2LTA3ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBQ
dXQgdGhlIEJhc2VsaW5lIEpJVCBwcm9sb2d1ZSBhbmQgb3BfbG9vcF9oaW50IGNvZGUgaW4gSklU
IHRodW5rcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIyNjM3NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEJhc2VsaW5lIEpJVCBwcm9sb2d1ZSBjb2RlIHZhcmllcyBpbiBiZWhhdmlvciBiYXNlZCBvbiBz
ZXZlcmFsIHZhcmlhYmxlcy4gIFRoZXNlCisgICAgICAgIHZhcmlhYmxlcyBpbmNsdWRlICgxKSB3
aGV0aGVyIHRoZSBwcm9sb2d1ZSBkb2VzIGFueSBhcmd1bWVudHMgdmFsdWUgcHJvZmlsaW5nLAor
ICAgICAgICAoMikgd2hldGhlciB0aGUgcHJvbG9ndWUgaXMgZm9yIGEgY29uc3RydWN0b3IsIGFu
ZCAoMykgd2hldGhlciB0aGUgY29tcGlsZWQKKyAgICAgICAgQ29kZUJsb2NrIHdpbGwgaGF2ZSBz
dWNoIGEgbGFyZ2UgZnJhbWUgdGhhdCBpdCBpcyBncmVhdGVyIHRoYW4gdGhlIHN0YWNrIHJlc2Vy
dmVkCisgICAgICAgIHpvbmUgKGFrYSByZWQgem9uZSkgd2hpY2ggd291bGQgcmVxdWlyZSBhZGRp
dGlvbmFsIHN0YWNrIGNoZWNrIGxvZ2ljLgorCisgICAgICAgIFRoZSBwcmUtZXhpc3RpbmcgY29k
ZSB3b3VsZCBnZW5lcmF0ZSBzcGVjaWFsaXplZCBjb2RlIGJhc2VkIG9uIHRoZXNlIChhbmQgb3Ro
ZXIKKyAgICAgICAgdmFyaWFibGVzKS4gIEluIGNvbnZlcnRpbmcgdG8gdXNpbmcgdGh1bmtzIGZv
ciB0aGUgcHJvbG9ndWUsIHdlIG9wdCBub3QgdG8KKyAgICAgICAgY29udmVydCB0aGVzZSBzcGVj
aWFsaXphdGlvbnMgaW50byBydW50aW1lIGNoZWNrcy4gIEluc3RlYWQsIHRoZSBpbXBsZW1lbnRh
dGlvbgorICAgICAgICB1c2VzIDEgb2YgOCBwb3NzaWJsZSBzcGVjaWFsaXplZCB0aHVua3MgdG8g
cmVkdWNlIHRoZSBuZWVkIHRvIHBhc3MgYXJndW1lbnRzIGZvcgorICAgICAgICBydW50aW1lIGNo
ZWNrcy4gIFRoZSBvbmx5IG5lZWRlZCBhcmd1bWVudCBwYXNzZWQgdG8gdGhlIHByb2xvZ3VlIHRo
dW5rcyBpcyB0aGUKKyAgICAgICAgY29kZUJsb2NrIHBvaW50ZXIuCisKKyAgICAgICAgVGhlcmUg
YXJlIDggcG9zc2libGUgdGh1bmtzIGJlY2F1c2Ugd2Ugc3BlY2lhbGl6ZSBiYXNlZCBvbiAzIHZh
cmlhYmxlczoKKyAgICAgICAgMS4gZG9lc1Byb2ZpbGluZworICAgICAgICAyLiBpc0NvbnN0cnVj
dG9yCisgICAgICAgIDMuIGhhc0h1Z2VGcmFtZQorCisgICAgICAgIDIqKjMgeWllbGRzIDggcGVy
bXV0YXRpb25zIG9mIHByb2xvZ3VlIHRodW5rIHNwZWNpYWxpemF0aW9ucy4KKworICAgICAgICBT
aW1pbGFybHksIHRoZXJlIGFyZSBhbHNvIDggYW5hbG9nb3VzIGFyaXR5IGZpeHVwIHByb2xvZ3Vl
cyB0aGF0IHdvcmsgc2ltaWxhcmx5LgorCisgICAgICAgIFRoZSBvcF9sb29wX2hpbnQgdGh1bmsg
b25seSB0YWtlcyAxIHJ1bnRpbWUgYXJndW1lbnQ6IHRoZSBieXRlY29kZSBvZmZzZXQuCisKKyAg
ICAgICAgV2UndmUgdHJpZWQgZG9pbmcgdGhlIGxvb3BfaGludCBvcHRpbWl6YXRpb24gY2hlY2sg
aW4gdGhlIHRodW5rIChpbiBvcmRlciB0byBtb3ZlCisgICAgICAgIGJvdGggdGhlIGZhc3QgYW5k
IHNsb3cgcGF0aCBpbnRvIHRoZSB0aHVuayBmb3IgbWF4aW11bSBzcGFjZSBzYXZpbmdzKS4gIEhv
d2V2ZXIsCisgICAgICAgIHRoaXMgc2VlbXMgdG8gaGF2ZSBzb21lIHNsaWdodCBuZWdhdGl2ZSBp
bXBhY3Qgb24gYmVuY2htYXJrIHBlcmZvcm1hbmNlLiAgV2UgZW5kZWQKKyAgICAgICAgdXAganVz
dCBrZWVwaW5nIHRoZSBmYXN0IHBhdGggYW5kIGluc3RlYWQgaGF2ZSB0aGUgc2xvdyBwYXRoIGNh
bGwgYSB0aHVuayB0byBkbworICAgICAgICBpdHMgd29yay4gIFRoaXMgcmVhbGl6ZXMgdGhlIGJ1
bGsgb2YgdGhlIHNpemUgc2F2aW5ncyB3aXRob3V0IHRoZSBwZXJmIGltcGFjdC4KKworICAgICAg
ICBUaGlzIHBhdGNoIGFsc28gb3B0aW1pemVzIG9wX2VudGVyIGEgYml0IG1vcmUgYnkgZWxpbWlu
YXRpbmcgdGhlIG5lZWQgdG8gcGFzcyBhbnkKKyAgICAgICAgYXJndW1lbnRzIHRvIHRoZSB0aHVu
ay4gIFRoZSB0aHVuayBwcmV2aW91c2x5IHRvb2sgMiBhcmd1bWVudHM6IGxvY2Fsc1RvSW5pdCBh
bmQKKyAgICAgICAgY2FuQmVPcHRpbWl6ZWQuICBsb2NhbHNUb0luaXQgaXMgbm93IGNvbXB1dGVk
IGluIHRoZSB0aHVuayBhdCBydW50aW1lLCBhbmQKKyAgICAgICAgY2FuQmVPcHRpbWl6ZWQgaXMg
dXNlZCBhcyBhIHNwZWNpYWxpemF0aW9uIGFyZ3VtZW50IHRvIGdlbmVyYXRlIDIgdmFyaWFudHMg
b2YgdGhlCisgICAgICAgIG9wX2VudGVyIHRodW5rOiBvcF9lbnRlcl9jYW5CZU9wdGltaXplZF9H
ZW5lcmF0b3IgYW5kIG9wX2VudGVyX2Nhbm5vdEJlT3B0aW1pemVkX0dlbmVyYXRvciwKKyAgICAg
ICAgdGhlcmVieSByZW1vdmluZyB0aGUgbmVlZCB0byBwYXNzIGl0IGFzIGEgcnVudGltZSBhcmd1
bWVudC4KKworICAgICAgICBMaW5rQnVmZmVyIHNpemUgcmVzdWx0czoKKworICAgICAgICAgICBC
YXNlbGluZUpJVDogOTMzMTk2MjggKDg4Ljk5NjUzMiBNQikgICA9PiA4Mzg1MTgyNCAoNzkuOTY3
MzMxIE1CKSAgIDAuOTB4CisgICAgICAgICBFeHRyYUNUSVRodW5rOiA1OTkyICg1Ljg1MTU2MiBL
QikgICAgICAgID0+IDY5ODQgKDYuODIwMzEyIEtCKSAgICAgICAgMS4xN3gKKyAgICAgICAgICAg
ICAgICAgICAgICAgIC4uLgorICAgICAgICAgICAgICAgICBUb3RhbDogMTk3NTMwMDA4ICgxODgu
Mzc5Mjk1IE1CKSA9PiAxODg0NTk0NDQgKDE3OS43Mjg5MzEgTUIpIDAuOTV4CisKKyAgICAgICAg
U3BlZWRvbWV0ZXIyIGFuZCBKZXRTdHJlYW0yIHJlc3VsdHMgKGFzIG1lYXN1cmVkIG9uIGFuIE0x
IE1hYykgYXJlIG5ldXRyYWwuCisKKyAgICAgICAgKiBhc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fz
c2VtYmxlci5oOgorICAgICAgICAoSlNDOjpBYnN0cmFjdE1hY3JvQXNzZW1ibGVyOjp1bnRhZ1Jl
dHVybkFkZHJlc3NXaXRob3V0RXh0cmFWYWxpZGF0aW9uKToKKyAgICAgICAgKiBhc3NlbWJsZXIv
TWFjcm9Bc3NlbWJsZXJBUk02NEUuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02
NEU6OnVudGFnUmV0dXJuQWRkcmVzcyk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJN
NjRFOjp1bnRhZ1JldHVybkFkZHJlc3NXaXRob3V0RXh0cmFWYWxpZGF0aW9uKToKKyAgICAgICAg
KiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk12Ny5oOgorICAgICAgICAoSlNDOjpNYWNyb0Fz
c2VtYmxlckFSTXY3OjpicmFuY2hBZGQzMik6CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNz
ZW1ibGVyTUlQUy5oOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlck1JUFM6OmJyYW5jaEFk
ZDMyKToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suaDoKKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjpvZmZzZXRPZk51bUNhbGxlZUxvY2Fscyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9j
azo6b2Zmc2V0T2ZOdW1WYXJzKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpvZmZzZXRPZkFy
Z3VtZW50VmFsdWVQcm9maWxlcyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6b2Zmc2V0T2ZT
aG91bGRBbHdheXNCZUlubGluZWQpOgorICAgICAgICAqIGppdC9Bc3NlbWJseUhlbHBlcnMuaDoK
KyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjplbWl0U2F2ZUNhbGxlZVNhdmVzRm9yKToK
KyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjplbWl0U2F2ZUNhbGxlZVNhdmVzRm9yQmFz
ZWxpbmVKSVQpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmVtaXRSZXN0b3JlQ2Fs
bGVlU2F2ZXNGb3JCYXNlbGluZUpJVCk6CisgICAgICAgICogaml0L0pJVC5jcHA6CisgICAgICAg
IChKU0M6OkpJVDo6Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluZyk6CisgICAgICAgIChK
U0M6OkpJVDo6cHJvbG9ndWVHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVQ6OmFyaXR5Rml4
dXBQcm9sb2d1ZUdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVF
eGNlcHRpb25IYW5kbGVycyk6CisgICAgICAgICogaml0L0pJVC5oOgorICAgICAgICAqIGppdC9K
SVRJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdE5ha2VkTmVhckNhbGwpOgorICAg
ICAgICAqIGppdC9KSVRPcGNvZGVzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpvcF9yZXRfaGFu
ZGxlckdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9lbnRlcik6CisgICAg
ICAgIChKU0M6OkpJVDo6b3BfZW50ZXJfR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUOjpv
cF9lbnRlcl9jYW5CZU9wdGltaXplZF9HZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVQ6Om9w
X2VudGVyX2Nhbm5vdEJlT3B0aW1pemVkX0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9sb29wX2hpbnQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2xvb3Bf
aGludCk6CisgICAgICAgIChKU0M6OkpJVDo6b3BfbG9vcF9oaW50X0dlbmVyYXRvcik6CisgICAg
ICAgIChKU0M6OkpJVDo6b3BfZW50ZXJfaGFuZGxlckdlbmVyYXRvcik6IERlbGV0ZWQuCisgICAg
ICAgICogaml0L0pJVE9wY29kZXMzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF9lbnRlcik6CisgICAgICAgICogaml0L1RodW5rR2VuZXJhdG9ycy5jcHA6CisgICAgICAgIChK
U0M6OnBvcFRodW5rU3RhY2tQcmVzZXJ2ZXNBbmRIYW5kbGVFeGNlcHRpb25HZW5lcmF0b3IpOgor
CiAyMDIxLTA2LTA3ICBUdW9tYXMgS2Fya2thaW5lbiAgPHR1b21hcy53ZWJraXRAYXBwbGUuY29t
PgogCiAgICAgICAgICR2bSBzaG91bGQgaGF2ZSBhIGZ1bmN0aW9uIGZvciBjaGVja2luZyBpZiBz
ZWN1cml0eSBhc3NlcnRpb25zIGFyZSBlbmFibGVkIHNpbWlsYXIgdG8gJHZtLmFzc2VydEVuYWJs
ZWQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fz
c2VtYmxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
QWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oCShyZXZpc2lvbiAyNzg1NjApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtMTAwMyw2ICsxMDAzLDcgQEAgcHVibGljOgogCiAgICAgQUxXQVlTX0lOTElORSB2
b2lkIHRhZ1JldHVybkFkZHJlc3MoKSB7IH0KICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgdW50YWdS
ZXR1cm5BZGRyZXNzKFJlZ2lzdGVySUQgPSBSZWdpc3RlcklEOjpJbnZhbGlkR1BSUmVnKSB7IH0K
KyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgdW50YWdSZXR1cm5BZGRyZXNzV2l0aG91dEV4dHJhVmFs
aWRhdGlvbigpIHsgfQogCiAgICAgQUxXQVlTX0lOTElORSB2b2lkIHRhZ1B0cihQdHJUYWcsIFJl
Z2lzdGVySUQpIHsgfQogICAgIEFMV0FZU19JTkxJTkUgdm9pZCB0YWdQdHIoUmVnaXN0ZXJJRCwg
UmVnaXN0ZXJJRCkgeyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01h
Y3JvQXNzZW1ibGVyQVJNNjRFLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTTY0RS5oCShyZXZpc2lvbiAyNzg1NjApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjRFLmgJKHdv
cmtpbmcgY29weSkKQEAgLTU0LDEwICs1NCwxNSBAQCBwdWJsaWM6CiAKICAgICBBTFdBWVNfSU5M
SU5FIHZvaWQgdW50YWdSZXR1cm5BZGRyZXNzKFJlZ2lzdGVySUQgc2NyYXRjaCA9IEludmFsaWRH
UFIpCiAgICAgewotICAgICAgICB1bnRhZ1B0cihBUk02NFJlZ2lzdGVyczo6c3AsIEFSTTY0UmVn
aXN0ZXJzOjpscik7CisgICAgICAgIHVudGFnUmV0dXJuQWRkcmVzc1dpdGhvdXRFeHRyYVZhbGlk
YXRpb24oKTsKICAgICAgICAgdmFsaWRhdGVVbnRhZ2dlZFB0cihBUk02NFJlZ2lzdGVyczo6bHIs
IHNjcmF0Y2gpOwogICAgIH0KIAorICAgIEFMV0FZU19JTkxJTkUgdm9pZCB1bnRhZ1JldHVybkFk
ZHJlc3NXaXRob3V0RXh0cmFWYWxpZGF0aW9uKCkKKyAgICB7CisgICAgICAgIHVudGFnUHRyKEFS
TTY0UmVnaXN0ZXJzOjpzcCwgQVJNNjRSZWdpc3RlcnM6OmxyKTsKKyAgICB9CisKICAgICBBTFdB
WVNfSU5MSU5FIHZvaWQgdGFnUHRyKFB0clRhZyB0YWcsIFJlZ2lzdGVySUQgdGFyZ2V0KQogICAg
IHsKICAgICAgICAgYXV0byB0YWdHUFIgPSBnZXRDYWNoZWREYXRhVGVtcFJlZ2lzdGVySURBbmRJ
bnZhbGlkYXRlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3Jv
QXNzZW1ibGVyQVJNdjcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNdjcuaAkocmV2aXNpb24gMjc4NTYwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTXY3LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTE3OTUsNiArMTc5NSwyMyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBicmFu
Y2hBZGQzMihjb25kLCBkZXN0LCBpbW0sIGRlc3QpOwogICAgIH0KIAorICAgIEp1bXAgYnJhbmNo
QWRkMzIoUmVzdWx0Q29uZGl0aW9uIGNvbmQsIFRydXN0ZWRJbW0zMiBpbW0sIEFkZHJlc3MgZGVz
dCkKKyAgICB7CisgICAgICAgIGxvYWQzMihkZXN0LCBkYXRhVGVtcFJlZ2lzdGVyKTsKKworICAg
ICAgICAvLyBEbyB0aGUgYWRkLgorICAgICAgICBBUk1UaHVtYkltbWVkaWF0ZSBhcm1JbW0gPSBB
Uk1UaHVtYkltbWVkaWF0ZTo6bWFrZUVuY29kZWRJbW0oaW1tLm1fdmFsdWUpOworICAgICAgICBp
ZiAoYXJtSW1tLmlzVmFsaWQoKSkKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZF9TKGRhdGFU
ZW1wUmVnaXN0ZXIsIGRhdGFUZW1wUmVnaXN0ZXIsIGFybUltbSk7CisgICAgICAgIGVsc2Ugewor
ICAgICAgICAgICAgbW92ZShpbW0sIGFkZHJlc3NUZW1wUmVnaXN0ZXIpOworICAgICAgICAgICAg
bV9hc3NlbWJsZXIuYWRkX1MoZGF0YVRlbXBSZWdpc3RlciwgZGF0YVRlbXBSZWdpc3RlciwgYWRk
cmVzc1RlbXBSZWdpc3Rlcik7CisgICAgICAgIH0KKworICAgICAgICBzdG9yZTMyKGRhdGFUZW1w
UmVnaXN0ZXIsIGRlc3QpOworICAgICAgICByZXR1cm4gSnVtcChtYWtlQnJhbmNoKGNvbmQpKTsK
KyAgICB9CisKICAgICBKdW1wIGJyYW5jaEFkZDMyKFJlc3VsdENvbmRpdGlvbiBjb25kLCBUcnVz
dGVkSW1tMzIgaW1tLCBBYnNvbHV0ZUFkZHJlc3MgZGVzdCkKICAgICB7CiAgICAgICAgIC8vIE1v
dmUgdGhlIGhpZ2ggYml0cyBvZiB0aGUgYWRkcmVzcyBpbnRvIGFkZHJlc3NUZW1wUmVnaXN0ZXIs
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyTUlQ
Uy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9B
c3NlbWJsZXJNSVBTLmgJKHJldmlzaW9uIDI3ODU2MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJNSVBTLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzMTAs
NiArMjMxMCwxMTEgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gSnVtcCgpOwogICAgIH0KIAor
ICAgIEp1bXAgYnJhbmNoQWRkMzIoUmVzdWx0Q29uZGl0aW9uIGNvbmQsIFRydXN0ZWRJbW0zMiBp
bW0sIEltcGxpY2l0QWRkcmVzcyBkZXN0QWRkcmVzcykKKyAgICB7CisgICAgICAgIGJvb2wgdXNl
QWRkclRlbXBSZWdpc3RlciA9ICEoZGVzdEFkZHJlc3Mub2Zmc2V0ID49IC0zMjc2OCAmJiBkZXN0
QWRkcmVzcy5vZmZzZXQgPD0gMzI3NjcKKyAgICAgICAgICAgICYmICFtX2ZpeGVkV2lkdGgpOwor
CisgICAgICAgIGlmICh1c2VBZGRyVGVtcFJlZ2lzdGVyKSB7CisgICAgICAgICAgICBtX2Fzc2Vt
Ymxlci5sdWkoYWRkclRlbXBSZWdpc3RlciwgKGRlc3RBZGRyZXNzLm9mZnNldCArIDB4ODAwMCkg
Pj4gMTYpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRkdShhZGRyVGVtcFJlZ2lzdGVyLCBh
ZGRyVGVtcFJlZ2lzdGVyLCBkZXN0QWRkcmVzcy5iYXNlKTsKKyAgICAgICAgfQorCisgICAgICAg
IGF1dG8gbG9hZERlc3QgPSBbJl0gKFJlZ2lzdGVySUQgZGVzdCkgeworICAgICAgICAgICAgaWYg
KHVzZUFkZHJUZW1wUmVnaXN0ZXIpCisgICAgICAgICAgICAgICAgbV9hc3NlbWJsZXIubHcoZGVz
dCwgYWRkclRlbXBSZWdpc3RlciwgZGVzdEFkZHJlc3Mub2Zmc2V0KTsKKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICBtX2Fzc2VtYmxlci5sdyhkZXN0LCBkZXN0QWRkcmVzcy5iYXNl
LCBkZXN0QWRkcmVzcy5vZmZzZXQpOworICAgICAgICB9OworCisgICAgICAgIGF1dG8gc3RvcmVE
ZXN0ID0gWyZdIChSZWdpc3RlcklEIHNyYykgeworICAgICAgICAgICAgaWYgKHVzZUFkZHJUZW1w
UmVnaXN0ZXIpCisgICAgICAgICAgICAgICAgbV9hc3NlbWJsZXIuc3coc3JjLCBhZGRyVGVtcFJl
Z2lzdGVyLCBkZXN0QWRkcmVzcy5vZmZzZXQpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgIG1fYXNzZW1ibGVyLnN3KHNyYywgZGVzdEFkZHJlc3MuYmFzZSwgZGVzdEFkZHJlc3Mu
b2Zmc2V0KTsKKyAgICAgICAgfTsKKworICAgICAgICBBU1NFUlQoKGNvbmQgPT0gT3ZlcmZsb3cp
IHx8IChjb25kID09IFNpZ25lZCkgfHwgKGNvbmQgPT0gUG9zaXRpdmVPclplcm8pIHx8IChjb25k
ID09IFplcm8pIHx8IChjb25kID09IE5vblplcm8pKTsKKyAgICAgICAgaWYgKGNvbmQgPT0gT3Zl
cmZsb3cpIHsKKyAgICAgICAgICAgIGlmIChtX2ZpeGVkV2lkdGgpIHsKKyAgICAgICAgICAgICAg
ICAvKgorICAgICAgICAgICAgICAgICAgICBsb2FkICAgIGRlc3QsIGRhdGFUZW1wCisgICAgICAg
ICAgICAgICAgICAgIG1vdmUgICAgaW1tLCBpbW1UZW1wCisgICAgICAgICAgICAgICAgICAgIHhv
ciAgICAgY21wVGVtcCwgZGF0YVRlbXAsIGltbVRlbXAKKyAgICAgICAgICAgICAgICAgICAgYWRk
dSAgICBkYXRhVGVtcCwgZGF0YVRlbXAsIGltbVRlbXAKKyAgICAgICAgICAgICAgICAgICAgc3Rv
cmUgICBkYXRhVGVtcCwgZGVzdAorICAgICAgICAgICAgICAgICAgICBibHR6ICAgIGNtcFRlbXAs
IE5vX292ZXJmbG93ICAgICMgZGlmZiBzaWduIGJpdCAtPiBubyBvdmVyZmxvdworICAgICAgICAg
ICAgICAgICAgICB4b3IgICAgIGNtcFRlbXAsIGRhdGFUZW1wLCBpbW1UZW1wCisgICAgICAgICAg
ICAgICAgICAgIGJnZXogICAgY21wVGVtcCwgTm9fb3ZlcmZsb3cgICAgIyBzYW1lIHNpZ24gYmln
IC0+IG5vIG92ZXJmbG93CisgICAgICAgICAgICAgICAgICAgIG5vcAorICAgICAgICAgICAgICAg
ICAgICBiICAgICAgIE92ZXJmbG93CisgICAgICAgICAgICAgICAgICAgIG5vcAorICAgICAgICAg
ICAgICAgICAgICBiICAgICAgIE5vX292ZXJmbG93CisgICAgICAgICAgICAgICAgICAgIG5vcAor
ICAgICAgICAgICAgICAgICAgICBub3AKKyAgICAgICAgICAgICAgICAgICAgbm9wCisgICAgICAg
ICAgICAgICAgTm9fb3ZlcmZsb3c6CisgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAg
ICBsb2FkRGVzdChkYXRhVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgICAgICAgICBtb3ZlKGltbSwg
aW1tVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgICAgICAgICBtX2Fzc2VtYmxlci54b3JJbnNuKGNt
cFRlbXBSZWdpc3RlciwgZGF0YVRlbXBSZWdpc3RlciwgaW1tVGVtcFJlZ2lzdGVyKTsKKyAgICAg
ICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGR1KGRhdGFUZW1wUmVnaXN0ZXIsIGRhdGFUZW1wUmVn
aXN0ZXIsIGltbVRlbXBSZWdpc3Rlcik7CisgICAgICAgICAgICAgICAgc3RvcmVEZXN0KGRhdGFU
ZW1wUmVnaXN0ZXIpOworICAgICAgICAgICAgICAgIG1fYXNzZW1ibGVyLmJsdHooY21wVGVtcFJl
Z2lzdGVyLCA5KTsKKyAgICAgICAgICAgICAgICBtX2Fzc2VtYmxlci54b3JJbnNuKGNtcFRlbXBS
ZWdpc3RlciwgZGF0YVRlbXBSZWdpc3RlciwgaW1tVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgICAg
ICAgICBtX2Fzc2VtYmxlci5iZ2V6KGNtcFRlbXBSZWdpc3RlciwgNyk7CisgICAgICAgICAgICAg
ICAgbV9hc3NlbWJsZXIubm9wKCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgIGxvYWREZXN0KGRhdGFUZW1wUmVnaXN0ZXIpOworICAgICAgICAgICAgICAgIGlmIChpbW0u
bV92YWx1ZSA+PSAwICYmIGltbS5tX3ZhbHVlICA8PSAzMjc2NykgeworICAgICAgICAgICAgICAg
ICAgICBtb3ZlKGRhdGFUZW1wUmVnaXN0ZXIsIGNtcFRlbXBSZWdpc3Rlcik7CisgICAgICAgICAg
ICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZGl1KGRhdGFUZW1wUmVnaXN0ZXIsIGRhdGFUZW1wUmVn
aXN0ZXIsIGltbS5tX3ZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgbV9hc3NlbWJsZXIuYmx0
eihjbXBUZW1wUmVnaXN0ZXIsIDkpOworICAgICAgICAgICAgICAgICAgICBzdG9yZURlc3QoZGF0
YVRlbXBSZWdpc3Rlcik7CisgICAgICAgICAgICAgICAgICAgIG1fYXNzZW1ibGVyLmJnZXooZGF0
YVRlbXBSZWdpc3RlciwgNyk7CisgICAgICAgICAgICAgICAgICAgIG1fYXNzZW1ibGVyLm5vcCgp
OworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaW1tLm1fdmFsdWUgPj0gLTMyNzY4ICYmIGlt
bS5tX3ZhbHVlIDwgMCkgeworICAgICAgICAgICAgICAgICAgICBtb3ZlKGRhdGFUZW1wUmVnaXN0
ZXIsIGNtcFRlbXBSZWdpc3Rlcik7CisgICAgICAgICAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFk
ZGl1KGRhdGFUZW1wUmVnaXN0ZXIsIGRhdGFUZW1wUmVnaXN0ZXIsIGltbS5tX3ZhbHVlKTsKKyAg
ICAgICAgICAgICAgICAgICAgbV9hc3NlbWJsZXIuYmdleihjbXBUZW1wUmVnaXN0ZXIsIDkpOwor
ICAgICAgICAgICAgICAgICAgICBzdG9yZURlc3QoZGF0YVRlbXBSZWdpc3Rlcik7CisgICAgICAg
ICAgICAgICAgICAgIG1fYXNzZW1ibGVyLmJsdHooY21wVGVtcFJlZ2lzdGVyLCA3KTsKKyAgICAg
ICAgICAgICAgICAgICAgbV9hc3NlbWJsZXIubm9wKCk7CisgICAgICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICAgICAgbW92ZShpbW0sIGltbVRlbXBSZWdpc3Rlcik7CisgICAg
ICAgICAgICAgICAgICAgIG1fYXNzZW1ibGVyLnhvckluc24oY21wVGVtcFJlZ2lzdGVyLCBkYXRh
VGVtcFJlZ2lzdGVyLCBpbW1UZW1wUmVnaXN0ZXIpOworICAgICAgICAgICAgICAgICAgICBtX2Fz
c2VtYmxlci5hZGR1KGRhdGFUZW1wUmVnaXN0ZXIsIGRhdGFUZW1wUmVnaXN0ZXIsIGltbVRlbXBS
ZWdpc3Rlcik7CisgICAgICAgICAgICAgICAgICAgIG1fYXNzZW1ibGVyLmJsdHooY21wVGVtcFJl
Z2lzdGVyLCAxMCk7CisgICAgICAgICAgICAgICAgICAgIHN0b3JlRGVzdChkYXRhVGVtcFJlZ2lz
dGVyKTsKKyAgICAgICAgICAgICAgICAgICAgbV9hc3NlbWJsZXIueG9ySW5zbihjbXBUZW1wUmVn
aXN0ZXIsIGRhdGFUZW1wUmVnaXN0ZXIsIGltbVRlbXBSZWdpc3Rlcik7CisgICAgICAgICAgICAg
ICAgICAgIG1fYXNzZW1ibGVyLmJnZXooY21wVGVtcFJlZ2lzdGVyLCA3KTsKKyAgICAgICAgICAg
ICAgICAgICAgbV9hc3NlbWJsZXIubm9wKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICAgICAgcmV0dXJuIGp1bXAoKTsKKyAgICAgICAgfQorICAgICAgICBtb3Zl
KGltbSwgaW1tVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgbG9hZERlc3QoZGF0YVRlbXBSZWdpc3Rl
cik7CisgICAgICAgIGFkZDMyKGltbVRlbXBSZWdpc3RlciwgZGF0YVRlbXBSZWdpc3Rlcik7Cisg
ICAgICAgIHN0b3JlRGVzdChkYXRhVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgaWYgKGNvbmQgPT0g
U2lnbmVkKSB7CisgICAgICAgICAgICAvLyBDaGVjayBpZiBkZXN0IGlzIG5lZ2F0aXZlLgorICAg
ICAgICAgICAgbV9hc3NlbWJsZXIuc2x0KGNtcFRlbXBSZWdpc3RlciwgZGF0YVRlbXBSZWdpc3Rl
ciwgTUlQU1JlZ2lzdGVyczo6emVybyk7CisgICAgICAgICAgICByZXR1cm4gYnJhbmNoTm90RXF1
YWwoY21wVGVtcFJlZ2lzdGVyLCBNSVBTUmVnaXN0ZXJzOjp6ZXJvKTsKKyAgICAgICAgfQorICAg
ICAgICBpZiAoY29uZCA9PSBQb3NpdGl2ZU9yWmVybykgeworICAgICAgICAgICAgLy8gQ2hlY2sg
aWYgZGVzdCBpcyBub3QgbmVnYXRpdmUuCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zbHQoY21w
VGVtcFJlZ2lzdGVyLCBkYXRhVGVtcFJlZ2lzdGVyLCBNSVBTUmVnaXN0ZXJzOjp6ZXJvKTsKKyAg
ICAgICAgICAgIHJldHVybiBicmFuY2hFcXVhbChjbXBUZW1wUmVnaXN0ZXIsIE1JUFNSZWdpc3Rl
cnM6Onplcm8pOworICAgICAgICB9CisgICAgICAgIGlmIChjb25kID09IFplcm8pCisgICAgICAg
ICAgICByZXR1cm4gYnJhbmNoRXF1YWwoZGF0YVRlbXBSZWdpc3RlciwgTUlQU1JlZ2lzdGVyczo6
emVybyk7CisgICAgICAgIGlmIChjb25kID09IE5vblplcm8pCisgICAgICAgICAgICByZXR1cm4g
YnJhbmNoTm90RXF1YWwoZGF0YVRlbXBSZWdpc3RlciwgTUlQU1JlZ2lzdGVyczo6emVybyk7Cisg
ICAgICAgIEFTU0VSVCgwKTsKKyAgICAgICAgcmV0dXJuIEp1bXAoKTsKKyAgICB9CisKICAgICBK
dW1wIGJyYW5jaE11bDMyKFJlc3VsdENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIHNyYzEsIFJl
Z2lzdGVySUQgc3JjMiwgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKICAgICAgICAgQVNTRVJUKChj
b25kID09IE92ZXJmbG93KSB8fCAoY29uZCA9PSBTaWduZWQpIHx8IChjb25kID09IFplcm8pIHx8
IChjb25kID09IE5vblplcm8pKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDI3ODU2MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMTY5LDcgKzE2OSwxMCBA
QCBwdWJsaWM6CiAgICAgdW5zaWduZWQgbnVtVG1wcygpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5r
ZWRDb2RlLT5oYXNDaGVja3BvaW50cygpICogbWF4TnVtQ2hlY2twb2ludFRtcHM7IH0KIAogICAg
IHVuc2lnbmVkKiBhZGRyZXNzT2ZOdW1QYXJhbWV0ZXJzKCkgeyByZXR1cm4gJm1fbnVtUGFyYW1l
dGVyczsgfQorCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZk51bUNhbGxlZUxvY2Fscygp
IHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1fbnVtQ2FsbGVlTG9jYWxzKTsg
fQogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZOdW1QYXJhbWV0ZXJzKCkgeyByZXR1cm4g
T0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9udW1QYXJhbWV0ZXJzKTsgfQorICAgIHN0YXRp
YyBwdHJkaWZmX3Qgb2Zmc2V0T2ZOdW1WYXJzKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENv
ZGVCbG9jaywgbV9udW1WYXJzKTsgfQogCiAgICAgQ29kZUJsb2NrKiBhbHRlcm5hdGl2ZSgpIGNv
bnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PENvZGVCbG9jayo+KG1fYWx0ZXJuYXRpdmUuZ2V0KCkp
OyB9CiAgICAgdm9pZCBzZXRBbHRlcm5hdGl2ZShWTSYsIENvZGVCbG9jayopOwpAQCAtNDg2LDYg
KzQ4OSw4IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKKyAgICBz
dGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQXJndW1lbnRWYWx1ZVByb2ZpbGVzKCkgeyByZXR1cm4g
T0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9hcmd1bWVudFZhbHVlUHJvZmlsZXMpOyB9CisK
ICAgICBWYWx1ZVByb2ZpbGUmIHZhbHVlUHJvZmlsZUZvckJ5dGVjb2RlSW5kZXgoQnl0ZWNvZGVJ
bmRleCk7CiAgICAgU3BlY3VsYXRlZFR5cGUgdmFsdWVQcm9maWxlUHJlZGljdGlvbkZvckJ5dGVj
b2RlSW5kZXgoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgQnl0ZWNvZGVJbmRleCk7CiAKQEAg
LTgxOSw3ICs4MjQsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgYm9vbCB3YXNDb21waWxlZFdp
dGhEZWJ1Z2dpbmdPcGNvZGVzKCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPndhc0Nv
bXBpbGVkV2l0aERlYnVnZ2luZ09wY29kZXMoKTsgfQotICAgIAorCiAgICAgLy8gVGhpcyBpcyBp
bnRlbnRpb25hbGx5IHB1YmxpYzsgaXQncyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgYW55b25lIGRv
aW5nIGFueQogICAgIC8vIG9mIHRoZSBmb2xsb3dpbmcgdG8gaG9sZCB0aGUgbG9jazoKICAgICAv
LwpAQCAtOTA2LDYgKzkxMSw3IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zm
c2V0T2ZNZXRhZGF0YVRhYmxlKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywg
bV9tZXRhZGF0YSk7IH0KICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSW5zdHJ1Y3Rpb25z
UmF3UG9pbnRlcigpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1faW5zdHJ1
Y3Rpb25zUmF3UG9pbnRlcik7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mU2hvdWxk
QWx3YXlzQmVJbmxpbmVkKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9z
aG91bGRBbHdheXNCZUlubGluZWQpOyB9CiAKICAgICBib29sIGxvb3BIaW50c0FyZUVsaWdpYmxl
Rm9yRnV6emluZ0Vhcmx5UmV0dXJuKCkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHJldmlzaW9uIDI3ODU2MCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMy
Niw2ICszMjYsMTEgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQoY29kZUJsb2NrKTsKIAogICAg
ICAgICBjb25zdCBSZWdpc3RlckF0T2Zmc2V0TGlzdCogY2FsbGVlU2F2ZXMgPSBjb2RlQmxvY2st
PmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKKyAgICAgICAgZW1pdFNhdmVDYWxsZWVTYXZlc0Zvcihj
YWxsZWVTYXZlcyk7CisgICAgfQorCisgICAgdm9pZCBlbWl0U2F2ZUNhbGxlZVNhdmVzRm9yKGNv
bnN0IFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiBjYWxsZWVTYXZlcykKKyAgICB7CiAgICAgICAgIFJl
Z2lzdGVyU2V0IGRvbnRTYXZlUmVnaXN0ZXJzID0gUmVnaXN0ZXJTZXQoUmVnaXN0ZXJTZXQ6OnN0
YWNrUmVnaXN0ZXJzKCksIFJlZ2lzdGVyU2V0OjphbGxGUFJzKCkpOwogICAgICAgICB1bnNpZ25l
ZCByZWdpc3RlckNvdW50ID0gY2FsbGVlU2F2ZXMtPnNpemUoKTsKIApAQCAtMzk5LDYgKzQwNCwx
MSBAQCBwdWJsaWM6CiAgICAgICAgIGVtaXRTYXZlQ2FsbGVlU2F2ZXNGb3IoY29kZUJsb2NrKCkp
OwogICAgIH0KIAorICAgIHZvaWQgZW1pdFNhdmVDYWxsZWVTYXZlc0ZvckJhc2VsaW5lSklUKCkK
KyAgICB7CisgICAgICAgIGVtaXRTYXZlQ2FsbGVlU2F2ZXNGb3IoJlJlZ2lzdGVyQXRPZmZzZXRM
aXN0OjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKKyAgICB9CisKICAgICB2
b2lkIGVtaXRTYXZlVGhlbk1hdGVyaWFsaXplVGFnUmVnaXN0ZXJzKCkKICAgICB7CiAjaWYgVVNF
KEpTVkFMVUU2NCkKQEAgLTQxNyw2ICs0MjcsMTEgQEAgcHVibGljOgogICAgICAgICBlbWl0UmVz
dG9yZUNhbGxlZVNhdmVzRm9yKGNvZGVCbG9jaygpKTsKICAgICB9CiAKKyAgICB2b2lkIGVtaXRS
ZXN0b3JlQ2FsbGVlU2F2ZXNGb3JCYXNlbGluZUpJVCgpCisgICAgeworICAgICAgICBlbWl0UmVz
dG9yZUNhbGxlZVNhdmVzRm9yKCZSZWdpc3RlckF0T2Zmc2V0TGlzdDo6bGxpbnRCYXNlbGluZUNh
bGxlZVNhdmVSZWdpc3RlcnMoKSk7CisgICAgfQorCiAgICAgdm9pZCBlbWl0UmVzdG9yZVNhdmVk
VGFnUmVnaXN0ZXJzKCkKICAgICB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDI3ODU2MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtODMsNyArODMsNyBAQCBKSVQ6On5K
SVQoKQogewogfQogCi0jaWYgRU5BQkxFKERGR19KSVQpCisjaWYgRU5BQkxFKERGR19KSVQpICYm
ICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIHZvaWQgSklUOjplbWl0RW50ZXJPcHRpbWl6YXRp
b25DaGVjaygpCiB7CiAgICAgaWYgKCFjYW5CZU9wdGltaXplZCgpKQpAQCAtMTAxLDcgKzEwMSw3
IEBAIHZvaWQgSklUOjplbWl0RW50ZXJPcHRpbWl6YXRpb25DaGVjaygpCiAgICAgZmFySnVtcChy
ZXR1cm5WYWx1ZUdQUiwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOwogICAgIHNraXBPcHRp
bWl6ZS5saW5rKHRoaXMpOwogfQotI2VuZGlmCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpICYm
ICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykoCiAKIHZvaWQgSklUOjplbWl0Tm90aWZ5V3JpdGUo
V2F0Y2hwb2ludFNldCogc2V0KQogewpAQCAtNjgyLDYgKzY4MiwyNyBAQCB2b2lkIEpJVDo6cHJp
dmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogI2VuZGlmCiB9CiAKKyNkZWZpbmUgRk9SX0VBQ0hfTk9O
X1BST0ZJTElOR19QUk9MT0dVRV9HRU5FUkFUT1IodikgXAorICAgIHYoIWRvZXNQcm9maWxpbmcs
ICFpc0NvbnN0cnVjdG9yLCAhaGFzSHVnZUZyYW1lLCBwcm9sb2d1ZUdlbmVyYXRvcjAsIGFyaXR5
Rml4dXBfcHJvbG9ndWVHZW5lcmF0b3IwKSBcCisgICAgdighZG9lc1Byb2ZpbGluZywgIWlzQ29u
c3RydWN0b3IsICBoYXNIdWdlRnJhbWUsIHByb2xvZ3VlR2VuZXJhdG9yMSwgYXJpdHlGaXh1cF9w
cm9sb2d1ZUdlbmVyYXRvcjEpIFwKKyAgICB2KCFkb2VzUHJvZmlsaW5nLCAgaXNDb25zdHJ1Y3Rv
ciwgIWhhc0h1Z2VGcmFtZSwgcHJvbG9ndWVHZW5lcmF0b3IyLCBhcml0eUZpeHVwX3Byb2xvZ3Vl
R2VuZXJhdG9yMikgXAorICAgIHYoIWRvZXNQcm9maWxpbmcsICBpc0NvbnN0cnVjdG9yLCAgaGFz
SHVnZUZyYW1lLCBwcm9sb2d1ZUdlbmVyYXRvcjMsIGFyaXR5Rml4dXBfcHJvbG9ndWVHZW5lcmF0
b3IzKQorCisjaWYgRU5BQkxFKERGR19KSVQpCisjZGVmaW5lIEZPUl9FQUNIX1BST0ZJTElOR19Q
Uk9MT0dVRV9HRU5FUkFUT1IodikgXAorICAgIHYoIGRvZXNQcm9maWxpbmcsICFpc0NvbnN0cnVj
dG9yLCAhaGFzSHVnZUZyYW1lLCBwcm9sb2d1ZUdlbmVyYXRvcjQsIGFyaXR5Rml4dXBfcHJvbG9n
dWVHZW5lcmF0b3I0KSBcCisgICAgdiggZG9lc1Byb2ZpbGluZywgIWlzQ29uc3RydWN0b3IsICBo
YXNIdWdlRnJhbWUsIHByb2xvZ3VlR2VuZXJhdG9yNSwgYXJpdHlGaXh1cF9wcm9sb2d1ZUdlbmVy
YXRvcjUpIFwKKyAgICB2KCBkb2VzUHJvZmlsaW5nLCAgaXNDb25zdHJ1Y3RvciwgIWhhc0h1Z2VG
cmFtZSwgcHJvbG9ndWVHZW5lcmF0b3I2LCBhcml0eUZpeHVwX3Byb2xvZ3VlR2VuZXJhdG9yNikg
XAorICAgIHYoIGRvZXNQcm9maWxpbmcsICBpc0NvbnN0cnVjdG9yLCAgaGFzSHVnZUZyYW1lLCBw
cm9sb2d1ZUdlbmVyYXRvcjcsIGFyaXR5Rml4dXBfcHJvbG9ndWVHZW5lcmF0b3I3KQorCisjZWxz
ZSAvLyBub3QgRU5BQkxFKERGR19KSVQpCisjZGVmaW5lIEZPUl9FQUNIX1BST0ZJTElOR19QUk9M
T0dVRV9HRU5FUkFUT1IodikKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2RlZmluZSBG
T1JfRUFDSF9QUk9MT0dVRV9HRU5FUkFUT1IodikgXAorICAgIEZPUl9FQUNIX05PTl9QUk9GSUxJ
TkdfUFJPTE9HVUVfR0VORVJBVE9SKHYpIFwKKyAgICBGT1JfRUFDSF9QUk9GSUxJTkdfUFJPTE9H
VUVfR0VORVJBVE9SKHYpCisKIHZvaWQgSklUOjpjb21waWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6
aW5nKEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKIHsKICAgICBERkc6OkNhcGFiaWxpdHlM
ZXZlbCBsZXZlbCA9IG1fY29kZUJsb2NrLT5jYXBhYmlsaXR5TGV2ZWwoKTsKQEAgLTc1MCw2ICs3
NzEsOCBAQCB2b2lkIEpJVDo6Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluCiAgICAgICAg
IG5vcCgpOwogCiAgICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoKTsKKworI2lmICFFTkFCTEUoRVhU
UkFfQ1RJX1RIVU5LUykKICAgICBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIobV9jb2RlQmxvY2ss
IENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayk7CiAKICAgICBMYWJlbCBiZWdpbkxhYmVsKHRoaXMp
OwpAQCAtNzcxLDExICs3OTQsMTAgQEAgdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZp
bmFsaXppbgogICAgIGlmIChtX2NvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUp
IHsKICAgICAgICAgQVNTRVJUKCFtX2J5dGVjb2RlSW5kZXgpOwogICAgICAgICBpZiAoc2hvdWxk
RW1pdFByb2ZpbGluZygpKSB7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0g
MDsgYXJndW1lbnQgPCBtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpOyArK2FyZ3VtZW50KSB7
Ci0gICAgICAgICAgICAgICAgLy8gSWYgdGhpcyBpcyBhIGNvbnN0cnVjdG9yLCB0aGVuIHdlIHdh
bnQgdG8gcHV0IGluIGEgZHVtbXkgcHJvZmlsaW5nIHNpdGUgKHRvCi0gICAgICAgICAgICAgICAg
Ly8ga2VlcCB0aGluZ3MgY29uc2lzdGVudCkgYnV0IHdlIGRvbid0IGFjdHVhbGx5IHdhbnQgdG8g
cmVjb3JkIHRoZSBkdW1teSB2YWx1ZS4KLSAgICAgICAgICAgICAgICBpZiAobV9jb2RlQmxvY2st
PmlzQ29uc3RydWN0b3IoKSAmJiAhYXJndW1lbnQpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgLy8gSWYgdGhpcyBpcyBhIGNvbnN0cnVjdG9yLCB0aGVuIHdlIHdh
bnQgdG8gcHV0IGluIGEgZHVtbXkgcHJvZmlsaW5nIHNpdGUgKHRvCisgICAgICAgICAgICAvLyBr
ZWVwIHRoaW5ncyBjb25zaXN0ZW50KSBidXQgd2UgZG9uJ3QgYWN0dWFsbHkgd2FudCB0byByZWNv
cmQgdGhlIGR1bW15IHZhbHVlLgorICAgICAgICAgICAgdW5zaWduZWQgc3RhcnRBcmd1bWVudCA9
IG1fY29kZUJsb2NrLT5pc0NvbnN0cnVjdG9yKCkgPyAxIDogMDsKKyAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgYXJndW1lbnQgPSBzdGFydEFyZ3VtZW50OyBhcmd1bWVudCA8IG1fY29kZUJsb2Nr
LT5udW1QYXJhbWV0ZXJzKCk7ICsrYXJndW1lbnQpIHsKICAgICAgICAgICAgICAgICBpbnQgb2Zm
c2V0ID0gQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldEluY2x1ZGluZ1RoaXMoYXJndW1lbnQpICog
c3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKTsKICNpZiBVU0UoSlNWQUxVRTY0KQog
ICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdU
MCk7CkBAIC03ODksNyArODExLDM0IEBAIHZvaWQgSklUOjpjb21waWxlQW5kTGlua1dpdGhvdXRG
aW5hbGl6aW4KICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLSAgICAKKyNlbHNlIC8v
IEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQorICAgIGNvbnN0ZXhwciBHUFJSZWcgY29kZUJsb2Nr
R1BSID0gcmVnVDc7CisgICAgQVNTRVJUKCFtX2J5dGVjb2RlSW5kZXgpOworCisgICAgaW50IGZy
YW1lVG9wT2Zmc2V0ID0gc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVv
ZihSZWdpc3Rlcik7CisgICAgdW5zaWduZWQgbWF4RnJhbWVTaXplID0gLWZyYW1lVG9wT2Zmc2V0
OworCisgICAgYm9vbCBkb2VzUHJvZmlsaW5nID0gKG1fY29kZUJsb2NrLT5jb2RlVHlwZSgpID09
IEZ1bmN0aW9uQ29kZSkgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpOworICAgIGJvb2wgaXNDb25z
dHJ1Y3RvciA9IG1fY29kZUJsb2NrLT5pc0NvbnN0cnVjdG9yKCk7CisgICAgYm9vbCBoYXNIdWdl
RnJhbWUgPSBtYXhGcmFtZVNpemUgPiBPcHRpb25zOjpyZXNlcnZlZFpvbmVTaXplKCk7CisKKyAg
ICBzdGF0aWMgY29uc3RleHByIFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvcnNbXSA9IHsKKyNkZWZp
bmUgVVNFX1BST0xPR1VFX0dFTkVSQVRPUihkb2VzUHJvZmlsaW5nLCBpc0NvbnN0cnVjdG9yLCBo
YXNIdWdlRnJhbWUsIG5hbWUsIGFyaXR5Rml4dXBOYW1lKSBuYW1lLAorICAgICAgICBGT1JfRUFD
SF9QUk9MT0dVRV9HRU5FUkFUT1IoVVNFX1BST0xPR1VFX0dFTkVSQVRPUikKKyN1bmRlZiBVU0Vf
UFJPTE9HVUVfR0VORVJBVE9SCisgICAgfTsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVk
IG51bWJlck9mR2VuZXJhdG9ycyA9IHNpemVvZihnZW5lcmF0b3JzKSAvIHNpemVvZihnZW5lcmF0
b3JzWzBdKTsKKworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jayksIGNvZGVCbG9j
a0dQUik7CisKKyAgICB1bnNpZ25lZCBnZW5lcmF0b3JTZWxlY3RvciA9IGRvZXNQcm9maWxpbmcg
PDwgMiB8IGlzQ29uc3RydWN0b3IgPDwgMSB8IGhhc0h1Z2VGcmFtZSA8PCAwOworICAgIFJFTEVB
U0VfQVNTRVJUKGdlbmVyYXRvclNlbGVjdG9yIDwgbnVtYmVyT2ZHZW5lcmF0b3JzKTsKKyAgICBh
dXRvIGdlbmVyYXRvciA9IGdlbmVyYXRvcnNbZ2VuZXJhdG9yU2VsZWN0b3JdOworICAgIGVtaXRO
YWtlZE5lYXJDYWxsKHZtKCkuZ2V0Q1RJU3R1YihnZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0
clRhZz4oKSk7CisKKyAgICBMYWJlbCBib2R5TGFiZWwodGhpcyk7CisjZW5kaWYgLy8gIUVOQUJM
RShFWFRSQV9DVElfVEhVTktTKQorCiAgICAgUkVMRUFTRV9BU1NFUlQoIUpJVENvZGU6OmlzSklU
KG1fY29kZUJsb2NrLT5qaXRUeXBlKCkpKTsKIAogICAgIGlmIChVTkxJS0VMWShzaXplTWFya2Vy
KSkKQEAgLTgwMywxNiArODUyLDE5IEBAIHZvaWQgSklUOjpjb21waWxlQW5kTGlua1dpdGhvdXRG
aW5hbGl6aW4KICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnNldEVuZE9mU2xvd1BhdGgobGFiZWwo
KSk7CiAgICAgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBwZW5kSXRlbShsYWJlbCgpLCBQ
Q1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXI6OmRlZmF1bHRDb2RlT3JpZ2luKCkpOwogCisjaWYgIUVO
QUJMRShFWFRSQV9DVElfVEhVTktTKQogICAgIHN0YWNrT3ZlcmZsb3cubGluayh0aGlzKTsKICAg
ICBtX2J5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4KDApOwogICAgIGlmIChtYXhGcmFtZUV4
dGVudEZvclNsb3dQYXRoQ2FsbCkKICAgICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtc3RhdGlj
X2Nhc3Q8aW50MzJfdD4obWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpKSwgc3RhY2tQb2lu
dGVyUmVnaXN0ZXIpOwogICAgIGNhbGxPcGVyYXRpb25XaXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4
Y2VwdGlvbihvcGVyYXRpb25UaHJvd1N0YWNrT3ZlcmZsb3dFcnJvciwgbV9jb2RlQmxvY2spOwor
I2VuZGlmCiAKICAgICAvLyBJZiB0aGUgbnVtYmVyIG9mIHBhcmFtZXRlcnMgaXMgMSwgd2UgbmV2
ZXIgcmVxdWlyZSBhcml0eSBmaXh1cC4KICAgICBib29sIHJlcXVpcmVzQXJpdHlGaXh1cCA9IG1f
Y29kZUJsb2NrLT5tX251bVBhcmFtZXRlcnMgIT0gMTsKICAgICBpZiAobV9jb2RlQmxvY2stPmNv
ZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlICYmIHJlcXVpcmVzQXJpdHlGaXh1cCkgewogICAgICAg
ICBtX2FyaXR5Q2hlY2sgPSBsYWJlbCgpOworI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykK
ICAgICAgICAgc3RvcmU4KFRydXN0ZWRJbW0zMigwKSwgJm1fY29kZUJsb2NrLT5tX3Nob3VsZEFs
d2F5c0JlSW5saW5lZCk7CiAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKCk7CiAgICAgICAg
IGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihtX2NvZGVCbG9jaywgQ2FsbEZyYW1lU2xvdDo6Y29k
ZUJsb2NrKTsKQEAgLTgzMSwxNyArODgzLDQyIEBAIHZvaWQgSklUOjpjb21waWxlQW5kTGlua1dp
dGhvdXRGaW5hbGl6aW4KICAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgR1BSSW5mbzo6YXJn
dW1lbnRHUFIwKTsKICAgICAgICAgZW1pdE5ha2VkTmVhckNhbGwobV92bS0+Z2V0Q1RJU3R1Yihh
cml0eUZpeHVwR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogCisgICAgICAg
IGp1bXAoYmVnaW5MYWJlbCk7CisKKyNlbHNlIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQor
ICAgICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZSgpOworCisgICAgICAgIHN0YXRpY19hc3NlcnQo
Y29kZUJsb2NrR1BSID09IHJlZ1Q3KTsKKyAgICAgICAgQVNTRVJUKCFtX2J5dGVjb2RlSW5kZXgp
OworCisgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yc1td
ID0geworI2RlZmluZSBVU0VfUFJPTE9HVUVfR0VORVJBVE9SKGRvZXNQcm9maWxpbmcsIGlzQ29u
c3RydWN0b3IsIGhhc0h1Z2VGcmFtZSwgbmFtZSwgYXJpdHlGaXh1cE5hbWUpIGFyaXR5Rml4dXBO
YW1lLAorICAgICAgICAgICAgRk9SX0VBQ0hfUFJPTE9HVUVfR0VORVJBVE9SKFVTRV9QUk9MT0dV
RV9HRU5FUkFUT1IpCisjdW5kZWYgVVNFX1BST0xPR1VFX0dFTkVSQVRPUgorICAgICAgICB9Owor
ICAgICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG51bWJlck9mR2VuZXJhdG9ycyA9IHNp
emVvZihnZW5lcmF0b3JzKSAvIHNpemVvZihnZW5lcmF0b3JzWzBdKTsKKworICAgICAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2spLCBjb2RlQmxvY2tHUFIpOworCisgICAgICAgIFJF
TEVBU0VfQVNTRVJUKGdlbmVyYXRvclNlbGVjdG9yIDwgbnVtYmVyT2ZHZW5lcmF0b3JzKTsKKyAg
ICAgICAgYXV0byBnZW5lcmF0b3IgPSBnZW5lcmF0b3JzW2dlbmVyYXRvclNlbGVjdG9yXTsKKyAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoZ2VuZXJhdG9yKTsKKyAgICAgICAgZW1pdE5ha2VkTmVhckNh
bGwodm0oKS5nZXRDVElTdHViKGdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsK
KworICAgICAgICBqdW1wKGJvZHlMYWJlbCk7CisjZW5kaWYgLy8gIUVOQUJMRShFWFRSQV9DVElf
VEhVTktTKQorCiAjaWYgQVNTRVJUX0VOQUJMRUQKICAgICAgICAgbV9ieXRlY29kZUluZGV4ID0g
Qnl0ZWNvZGVJbmRleCgpOyAvLyBSZXNldCB0aGlzLCBpbiBvcmRlciB0byBndWFyZCBpdHMgdXNl
IHdpdGggQVNTRVJUcy4KICNlbmRpZgotCi0gICAgICAgIGp1bXAoYmVnaW5MYWJlbCk7CiAgICAg
fSBlbHNlCiAgICAgICAgIG1fYXJpdHlDaGVjayA9IGVudHJ5TGFiZWw7IC8vIE5ldmVyIHJlcXVp
cmUgYXJpdHkgZml4dXAuCiAKICAgICBBU1NFUlQobV9qbXBUYWJsZS5pc0VtcHR5KCkpOwogICAg
IAorI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICBwcml2YXRlQ29tcGlsZUV4Y2Vw
dGlvbkhhbmRsZXJzKCk7CisjZW5kaWYKICAgICAKICAgICBpZiAobV9kaXNhc3NlbWJsZXIpCiAg
ICAgICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRFbmRPZkNvZGUobGFiZWwoKSk7CkBAIC04NTEsNiAr
OTI4LDI0MCBAQCB2b2lkIEpJVDo6Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluCiAgICAg
bGluaygpOwogfQogCisjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCitNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6cHJvbG9ndWVHZW5lcmF0b3IoVk0mIHZtLCBi
b29sIGRvZXNQcm9maWxpbmcsIGJvb2wgaXNDb25zdHJ1Y3RvciwgYm9vbCBoYXNIdWdlRnJhbWUs
IGNvbnN0IGNoYXIqIHRodW5rTmFtZSkKK3sKKyAgICAvLyBUaGlzIGZ1bmN0aW9uIGdlbmVyYXRl
cyB0aGUgQmFzZWxpbmUgSklUJ3MgcHJvbG9ndWUgY29kZS4gSXQgaXMgbm90IHVzZWFibGUgYnkg
b3RoZXIgdGllcnMuCisgICAgY29uc3RleHByIEdQUlJlZyBjb2RlQmxvY2tHUFIgPSByZWdUNzsg
Ly8gaW5jb21pbmcuCisKKyAgICBjb25zdGV4cHIgaW50IHZpcnR1YWxSZWdpc3RlclNpemUgPSBz
dGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpOworICAgIGNvbnN0ZXhwciBpbnQgdmly
dHVhbFJlZ2lzdGVyU2l6ZVNoaWZ0ID0gMzsKKyAgICBzdGF0aWNfYXNzZXJ0KCgxIDw8IHZpcnR1
YWxSZWdpc3RlclNpemVTaGlmdCkgPT0gdmlydHVhbFJlZ2lzdGVyU2l6ZSk7CisKKyAgICB0YWdS
ZXR1cm5BZGRyZXNzKCk7CisKKyAgICBzdG9yZTY0KGNvZGVCbG9ja0dQUiwgYWRkcmVzc0ZvcihD
YWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spKTsKKworICAgIGxvYWQzMihBZGRyZXNzKGNvZGVCbG9j
a0dQUiwgQ29kZUJsb2NrOjpvZmZzZXRPZk51bUNhbGxlZUxvY2FscygpKSwgcmVnVDEpOworICAg
IGlmIGNvbnN0ZXhwciAobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGxJblJlZ2lzdGVycykK
KyAgICAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxs
SW5SZWdpc3RlcnMpLCByZWdUMSk7CisgICAgbHNoaWZ0MzIoVHJ1c3RlZEltbTMyKHZpcnR1YWxS
ZWdpc3RlclNpemVTaGlmdCksIHJlZ1QxKTsKKyAgICBuZWc2NChyZWdUMSk7CisjaWYgQVNTRVJU
X0VOQUJMRUQKKyAgICBQcm9iZTo6RnVuY3Rpb24gcHJvYmVGdW5jdGlvbiA9IFtdIChQcm9iZTo6
Q29udGV4dCYgY29udGV4dCkgeworICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNvbnRl
eHQuZnA8Q2FsbEZyYW1lKj4oKS0+Y29kZUJsb2NrKCk7CisgICAgICAgIGludDY0X3QgZnJhbWVU
b3BPZmZzZXQgPSBzdGFja1BvaW50ZXJPZmZzZXRGb3IoY29kZUJsb2NrKSAqIHNpemVvZihSZWdp
c3Rlcik7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNvbnRleHQuZ3ByPGludHB0cl90PihyZWdU
MSkgPT0gZnJhbWVUb3BPZmZzZXQpOworICAgIH07CisgICAgcHJvYmUodGFnQ0Z1bmN0aW9uUHRy
PEpJVFByb2JlUHRyVGFnPihwcm9iZUZ1bmN0aW9uKSwgbnVsbHB0cik7CisjZW5kaWYKKworICAg
IGFkZFB0cihjYWxsRnJhbWVSZWdpc3RlciwgcmVnVDEpOworCisgICAgSnVtcExpc3Qgc3RhY2tP
dmVyZmxvdzsKKyAgICBpZiAoaGFzSHVnZUZyYW1lKQorICAgICAgICBzdGFja092ZXJmbG93LmFw
cGVuZChicmFuY2hQdHIoQWJvdmUsIHJlZ1QxLCBjYWxsRnJhbWVSZWdpc3RlcikpOworICAgIHN0
YWNrT3ZlcmZsb3cuYXBwZW5kKGJyYW5jaFB0cihBYm92ZSwgQWJzb2x1dGVBZGRyZXNzKHZtLmFk
ZHJlc3NPZlNvZnRTdGFja0xpbWl0KCkpLCByZWdUMSkpOworCisgICAgLy8gV2UnbGwgYmUgaW1t
aW5lbnRseSByZXR1cm5pbmcgd2l0aCBhIHJldGFiIGluIHRoZSBub3JtYWwgcGF0aCwgd2hpY2gg
d2lsbCBkbyB2YWxpZGF0aW9uLgorICAgIC8vIFNvLCBleHRyYSB2YWxpZGF0aW9uIGhlcmUgaXMg
cmVkdW5kYW50LgorICAgIHVudGFnUmV0dXJuQWRkcmVzc1dpdGhvdXRFeHRyYVZhbGlkYXRpb24o
KTsKKyNpZiBDUFUoWDg2XzY0KQorICAgIHBvcChyZWdUMik7IC8vIFNhdmUgdGhlIHJldHVybiBh
ZGRyZXNzLgorI2VuZGlmCisgICAgbW92ZShyZWdUMSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwor
ICAgIHRhZ1JldHVybkFkZHJlc3MoKTsKKyAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgp
OworI2lmIENQVShYODZfNjQpCisgICAgcHVzaChyZWdUMik7IC8vIFJlc3RvcmUgdGhlIHJldHVy
biBhZGRyZXNzLgorI2VuZGlmCisKKyAgICBlbWl0U2F2ZUNhbGxlZVNhdmVzRm9yQmFzZWxpbmVK
SVQoKTsKKyAgICBlbWl0TWF0ZXJpYWxpemVUYWdDaGVja1JlZ2lzdGVycygpOworCisgICAgaWYg
KGRvZXNQcm9maWxpbmcpIHsKKyAgICAgICAgY29uc3RleHByIEdQUlJlZyBhcmd1bWVudFZhbHVl
UHJvZmlsZUdQUiA9IHJlZ1Q2OworICAgICAgICBjb25zdGV4cHIgR1BSUmVnIG51bVBhcmFtZXRl
cnNHUFIgPSByZWdUNTsKKyAgICAgICAgY29uc3RleHByIEdQUlJlZyBhcmd1bWVudEdQUiA9IHJl
Z1Q0OworCisgICAgICAgIGxvYWQzMihBZGRyZXNzKGNvZGVCbG9ja0dQUiwgQ29kZUJsb2NrOjpv
ZmZzZXRPZk51bVBhcmFtZXRlcnMoKSksIG51bVBhcmFtZXRlcnNHUFIpOworICAgICAgICBsb2Fk
UHRyKEFkZHJlc3MoY29kZUJsb2NrR1BSLCBDb2RlQmxvY2s6Om9mZnNldE9mQXJndW1lbnRWYWx1
ZVByb2ZpbGVzKCkpLCBhcmd1bWVudFZhbHVlUHJvZmlsZUdQUik7CisgICAgICAgIGlmIChpc0Nv
bnN0cnVjdG9yKQorICAgICAgICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzaXplb2YoVmFsdWVQ
cm9maWxlKSksIGFyZ3VtZW50VmFsdWVQcm9maWxlR1BSKTsKKworICAgICAgICBpbnQgc3RhcnRB
cmd1bWVudCA9IENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVudCArIChpc0NvbnN0cnVjdG9yID8g
MSA6IDApOworICAgICAgICBpbnQgc3RhcnRBcmd1bWVudE9mZnNldCA9IHN0YXJ0QXJndW1lbnQg
KiB2aXJ0dWFsUmVnaXN0ZXJTaXplOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChzdGFydEFy
Z3VtZW50T2Zmc2V0KSwgYXJndW1lbnRHUFIpOworCisgICAgICAgIGFkZDMyKFRydXN0ZWRJbW0z
MihzdGF0aWNfY2FzdDxpbnQ+KENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVudCkpLCBudW1QYXJh
bWV0ZXJzR1BSKTsKKyAgICAgICAgbHNoaWZ0MzIoVHJ1c3RlZEltbTMyKHZpcnR1YWxSZWdpc3Rl
clNpemVTaGlmdCksIG51bVBhcmFtZXRlcnNHUFIpOworCisgICAgICAgIGFkZFB0cihjYWxsRnJh
bWVSZWdpc3RlciwgYXJndW1lbnRHUFIpOworICAgICAgICBhZGRQdHIoY2FsbEZyYW1lUmVnaXN0
ZXIsIG51bVBhcmFtZXRlcnNHUFIpOworCisgICAgICAgIExhYmVsIGxvb3BTdGFydCh0aGlzKTsK
KyAgICAgICAgSnVtcCBkb25lID0gYnJhbmNoUHRyKEFib3ZlT3JFcXVhbCwgYXJndW1lbnRHUFIs
IG51bVBhcmFtZXRlcnNHUFIpOworICAgICAgICB7CisgICAgICAgICAgICBsb2FkNjQoQWRkcmVz
cyhhcmd1bWVudEdQUiksIHJlZ1QwKTsKKyAgICAgICAgICAgIHN0b3JlNjQocmVnVDAsIEFkZHJl
c3MoYXJndW1lbnRWYWx1ZVByb2ZpbGVHUFIsIE9CSkVDVF9PRkZTRVRPRihWYWx1ZVByb2ZpbGUs
IG1fYnVja2V0cykpKTsKKworICAgICAgICAgICAgLy8gVGhlIGFyZ3VtZW50IFZhbHVlUHJvZmls
ZXMgYXJlIHN0b3JlZCBpbiBhIEZpeGVkVmVjdG9yLiBIZW5jZSwgdGhlCisgICAgICAgICAgICAv
LyBhZGRyZXNzIG9mIHRoZSBuZXh0IHByb2ZpbGUgY2FuIGJlIHRyaXZpYWxseSBjb21wdXRlZCB3
aXRoIGFuIGluY3JlbWVudC4KKyAgICAgICAgICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc2l6ZW9m
KFZhbHVlUHJvZmlsZSkpLCBhcmd1bWVudFZhbHVlUHJvZmlsZUdQUik7CisgICAgICAgICAgICBh
ZGRQdHIoVHJ1c3RlZEltbTMyKHZpcnR1YWxSZWdpc3RlclNpemUpLCBhcmd1bWVudEdQUik7Cisg
ICAgICAgICAgICBqdW1wKCkubGlua1RvKGxvb3BTdGFydCwgdGhpcyk7CisgICAgICAgIH0KKyAg
ICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgIH0KKyAgICByZXQoKTsKKworICAgIHN0YWNrT3Zl
cmZsb3cubGluayh0aGlzKTsKKyNpZiBDUFUoWDg2XzY0KQorICAgIGFkZFB0cihUcnVzdGVkSW1t
MzIoMSAqIHNpemVvZihDUFVSZWdpc3RlcikpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7IC8vIGRp
c2NhcmQgcmV0dXJuIGFkZHJlc3MuCisjZW5kaWYKKworICAgIHVpbnQzMl90IGxvY2F0aW9uQml0
cyA9IENhbGxTaXRlSW5kZXgoMCkuYml0cygpOworICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKGxv
Y2F0aW9uQml0cyksIHRhZ0ZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcykpOworCisgICAgaWYgKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKQorICAgICAg
ICBhZGRQdHIoVHJ1c3RlZEltbTMyKC1zdGF0aWNfY2FzdDxpbnQzMl90PihtYXhGcmFtZUV4dGVu
dEZvclNsb3dQYXRoQ2FsbCkpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisKKyAgICBzZXR1cEFy
Z3VtZW50czxkZWNsdHlwZShvcGVyYXRpb25UaHJvd1N0YWNrT3ZlcmZsb3dFcnJvcik+KGNvZGVC
bG9ja0dQUik7CisgICAgcHJlcGFyZUNhbGxPcGVyYXRpb24odm0pOworICAgIE1hY3JvQXNzZW1i
bGVyOjpDYWxsIG9wZXJhdGlvbkNhbGwgPSBjYWxsKE9wZXJhdGlvblB0clRhZyk7CisgICAgSnVt
cCBoYW5kbGVFeGNlcHRpb25KdW1wID0ganVtcCgpOworCisgICAgYXV0byBoYW5kbGVyID0gdm0u
Z2V0Q1RJU3R1YihoYW5kbGVFeGNlcHRpb25XaXRoQ2FsbEZyYW1lUm9sbGJhY2tHZW5lcmF0b3Ip
OworCisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdGhpcywgR0xPQkFMX1RIVU5LX0lELCBM
aW5rQnVmZmVyOjpQcm9maWxlOjpFeHRyYUNUSVRodW5rKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5r
KG9wZXJhdGlvbkNhbGwsIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uVGhy
b3dTdGFja092ZXJmbG93RXJyb3IpKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKGhhbmRsZUV4Y2Vw
dGlvbkp1bXAsIENvZGVMb2NhdGlvbkxhYmVsKGhhbmRsZXIucmV0YWdnZWRDb2RlPE5vUHRyVGFn
PigpKSk7CisgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRy
VGFnLCB0aHVua05hbWUpOworfQorCitzdGF0aWMgY29uc3RleHByIGJvb2wgZG9lc1Byb2ZpbGlu
ZyA9IHRydWU7CitzdGF0aWMgY29uc3RleHByIGJvb2wgaXNDb25zdHJ1Y3RvciA9IHRydWU7Citz
dGF0aWMgY29uc3RleHByIGJvb2wgaGFzSHVnZUZyYW1lID0gdHJ1ZTsKKworI2RlZmluZSBERUZJ
TkVfUFJPR0xPR1VFX0dFTkVSQVRPUihkb2VzUHJvZmlsaW5nLCBpc0NvbnN0cnVjdG9yLCBoYXNI
dWdlRnJhbWUsIG5hbWUsIGFyaXR5Rml4dXBOYW1lKSBcCisgICAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6Om5hbWUoVk0mIHZtKSBcCisgICAgeyBcCisgICAgICAg
IEpJVCBqaXQodm0pOyBcCisgICAgICAgIHJldHVybiBqaXQucHJvbG9ndWVHZW5lcmF0b3Iodm0s
IGRvZXNQcm9maWxpbmcsIGlzQ29uc3RydWN0b3IsIGhhc0h1Z2VGcmFtZSwgIkJhc2VsaW5lOiAi
ICNuYW1lKTsgXAorICAgIH0KKworRk9SX0VBQ0hfUFJPTE9HVUVfR0VORVJBVE9SKERFRklORV9Q
Uk9HTE9HVUVfR0VORVJBVE9SKQorI3VuZGVmIERFRklORV9QUk9HTE9HVUVfR0VORVJBVE9SCisK
K01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjphcml0eUZpeHVwUHJv
bG9ndWVHZW5lcmF0b3IoVk0mIHZtLCBib29sIGlzQ29uc3RydWN0b3IsIFRodW5rR2VuZXJhdG9y
IG5vcm1hbFByb2xvZ3VlR2VuZXJhdG9yLCBjb25zdCBjaGFyKiB0aHVua05hbWUpCit7CisgICAg
Ly8gVGhpcyBmdW5jdGlvbiBnZW5lcmF0ZXMgdGhlIEJhc2VsaW5lIEpJVCdzIHByb2xvZ3VlIGNv
ZGUuIEl0IGlzIG5vdCB1c2VhYmxlIGJ5IG90aGVyIHRpZXJzLgorICAgIGNvbnN0ZXhwciBHUFJS
ZWcgY29kZUJsb2NrR1BSID0gcmVnVDc7IC8vIGluY29taW5nLgorICAgIGNvbnN0ZXhwciBHUFJS
ZWcgbnVtUGFyYW1ldGVyc0dQUiA9IHJlZ1Q2OworCisgICAgdGFnUmV0dXJuQWRkcmVzcygpOwor
I2lmIENQVShYODZfNjQpCisgICAgcHVzaChmcmFtZVBvaW50ZXJSZWdpc3Rlcik7CisjZWxpZiBD
UFUoQVJNNjQpCisgICAgcHVzaFBhaXIoZnJhbWVQb2ludGVyUmVnaXN0ZXIsIGxpbmtSZWdpc3Rl
cik7CisjZW5kaWYKKworICAgIHN0b3JlNjQoY29kZUJsb2NrR1BSLCBhZGRyZXNzRm9yKENhbGxG
cmFtZVNsb3Q6OmNvZGVCbG9jaykpOworICAgIHN0b3JlOChUcnVzdGVkSW1tMzIoMCksIEFkZHJl
c3MoY29kZUJsb2NrR1BSLCBDb2RlQmxvY2s6Om9mZnNldE9mU2hvdWxkQWx3YXlzQmVJbmxpbmVk
KCkpKTsKKworICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzKSwgcmVnVDEpOworICAgIGxvYWQzMihBZGRyZXNzKGNvZGVCbG9ja0dQ
UiwgQ29kZUJsb2NrOjpvZmZzZXRPZk51bVBhcmFtZXRlcnMoKSksIG51bVBhcmFtZXRlcnNHUFIp
OworICAgIEp1bXAgbm9GaXh1cE5lZWRlZCA9IGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEs
IG51bVBhcmFtZXRlcnNHUFIpOworCisgICAgaWYgY29uc3RleHByIChtYXhGcmFtZUV4dGVudEZv
clNsb3dQYXRoQ2FsbCkKKyAgICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtc3RhdGljX2Nhc3Q8
aW50MzJfdD4obWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpKSwgc3RhY2tQb2ludGVyUmVn
aXN0ZXIpOworCisgICAgbG9hZFB0cihBZGRyZXNzKGNvZGVCbG9ja0dQUiwgQ29kZUJsb2NrOjpv
ZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgYXJndW1lbnRHUFIwKTsKKworICAgIHN0YXRpY19hc3Nl
cnQoc3RkOjppc19zYW1lPGRlY2x0eXBlKG9wZXJhdGlvbkNvbnN0cnVjdEFyaXR5Q2hlY2spLCBk
ZWNsdHlwZShvcGVyYXRpb25DYWxsQXJpdHlDaGVjayk+Ojp2YWx1ZSk7CisgICAgc2V0dXBBcmd1
bWVudHM8ZGVjbHR5cGUob3BlcmF0aW9uQ2FsbEFyaXR5Q2hlY2spPihhcmd1bWVudEdQUjApOwor
ICAgIHByZXBhcmVDYWxsT3BlcmF0aW9uKHZtKTsKKworICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxs
IGFyaXR5Q2hlY2tDYWxsID0gY2FsbChPcGVyYXRpb25QdHJUYWcpOworICAgIEp1bXAgaGFuZGxl
RXhjZXB0aW9uSnVtcCA9IGVtaXROb25QYXRjaGFibGVFeGNlcHRpb25DaGVjayh2bSk7CisKKyAg
ICBpZiBjb25zdGV4cHIgKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKQorICAgICAgICBh
ZGRQdHIoVHJ1c3RlZEltbTMyKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKSwgc3RhY2tQ
b2ludGVyUmVnaXN0ZXIpOworICAgIEp1bXAgbmVlZEZpeHVwID0gYnJhbmNoVGVzdDMyKE5vblpl
cm8sIHJldHVyblZhbHVlR1BSKTsKKyAgICBub0ZpeHVwTmVlZGVkLmxpbmsodGhpcyk7CisKKyAg
ICAvLyBUaGUgbm9ybWFsIHByb2xvZ3VlIGV4cGVjdHMgaW5jb21pbmcgY29kZUJsb2NrR1BSLgor
ICAgIGxvYWQ2NChhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIGNvZGVCbG9j
a0dQUik7CisKKyNpZiBDUFUoWDg2XzY0KQorICAgIHBvcChmcmFtZVBvaW50ZXJSZWdpc3Rlcik7
CisjZWxpZiBDUFUoQVJNNjQpCisgICAgcG9wUGFpcihmcmFtZVBvaW50ZXJSZWdpc3RlciwgbGlu
a1JlZ2lzdGVyKTsKKyNlbmRpZgorICAgIHVudGFnUmV0dXJuQWRkcmVzcygpOworCisgICAgSnVt
cExpc3Qgbm9ybWFsUHJvbG9ndWVKdW1wOworICAgIG5vcm1hbFByb2xvZ3VlSnVtcC5hcHBlbmQo
anVtcCgpKTsKKworICAgIG5lZWRGaXh1cC5saW5rKHRoaXMpOworCisgICAgLy8gUmVzdG9yZSB0
aGUgc3RhY2sgZm9yIGFyaXR5IGZpeHVwLCBhbmQgcHJlc2VydmUgdGhlIHJldHVybiBhZGRyZXNz
LgorICAgIC8vIGFyaXR5Rml4dXBHZW5lcmF0b3Igd2lsbCBiZSBzaGlmdGluZyB0aGUgc3RhY2su
IFNvLCB3ZSBjYW4ndCB1c2UgdGhlIHN0YWNrIHRvCisgICAgLy8gcHJlc2VydmUgdGhlIHJldHVy
biBhZGRyZXNzLiBXZSBhbHNvIGNhbid0IHVzZSBjYWxsZWUgc2F2ZWQgcmVnaXN0ZXJzIGJlY2F1
c2UKKyAgICAvLyB0aGV5IGhhdmVuJ3QgYmVlbiBzYXZlZCB5ZXQuCisgICAgLy8KKyAgICAvLyBh
cml0eUZpeHVwR2VuZXJhdG9yIGlzIGNhcmVmdWxseSBjcmFmdGVkIHRvIG9ubHkgdXNlIGEwLCBh
MSwgYTIsIHQzLCB0NCBhbmQgdDUuCisgICAgLy8gU28sIHRoZSByZXR1cm4gYWRkcmVzcyBjYW4g
YmUgcHJlc2VydmVkIGluIHJlZ1Q3LgorI2lmIENQVShYODZfNjQpCisgICAgcG9wKGFyZ3VtZW50
R1BSMik7IC8vIGRpc2NhcmQuCisgICAgcG9wKHJlZ1Q3KTsgLy8gc2F2ZSByZXR1cm4gYWRkcmVz
cy4KKyNlbGlmIENQVShBUk02NCkKKyAgICBwb3BQYWlyKGZyYW1lUG9pbnRlclJlZ2lzdGVyLCBs
aW5rUmVnaXN0ZXIpOworICAgIHVudGFnUmV0dXJuQWRkcmVzcygpOworICAgIG1vdmUobGlua1Jl
Z2lzdGVyLCByZWdUNyk7CisgICAgYXV0byByYW5kb21SZXR1cm5BZGRyZXNzVGFnID0gcmFuZG9t
KCk7CisgICAgbW92ZShUcnVzdGVkSW1tMzIocmFuZG9tUmV0dXJuQWRkcmVzc1RhZyksIHJlZ1Qx
KTsKKyAgICB0YWdQdHIocmVnVDEsIHJlZ1Q3KTsKKyNlbmRpZgorICAgIG1vdmUocmV0dXJuVmFs
dWVHUFIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgQ2FsbCBhcml0eUZpeHVwQ2FsbCA9
IG5lYXJDYWxsKCk7CisKKyNpZiBDUFUoWDg2XzY0KQorICAgIHB1c2gocmVnVDcpOyAvLyByZXN0
b3JlIHJldHVybiBhZGRyZXNzLgorI2VsaWYgQ1BVKEFSTTY0KQorICAgIG1vdmUoVHJ1c3RlZElt
bTMyKHJhbmRvbVJldHVybkFkZHJlc3NUYWcpLCByZWdUMSk7CisgICAgdW50YWdQdHIocmVnVDEs
IHJlZ1Q3KTsKKyAgICBtb3ZlKHJlZ1Q3LCBsaW5rUmVnaXN0ZXIpOworI2VuZGlmCisKKyAgICBs
b2FkNjQoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCBjb2RlQmxvY2tHUFIp
OworICAgIG5vcm1hbFByb2xvZ3VlSnVtcC5hcHBlbmQoanVtcCgpKTsKKworICAgIGF1dG8gYXJp
dHlDaGVja09wZXJhdGlvbiA9IGlzQ29uc3RydWN0b3IgPyBvcGVyYXRpb25Db25zdHJ1Y3RBcml0
eUNoZWNrIDogb3BlcmF0aW9uQ2FsbEFyaXR5Q2hlY2s7CisgICAgYXV0byBhcml0eUZpeHVwID0g
dm0uZ2V0Q1RJU3R1Yihhcml0eUZpeHVwR2VuZXJhdG9yKTsKKyAgICBhdXRvIG5vcm1hbFByb2xv
Z3VlID0gdm0uZ2V0Q1RJU3R1Yihub3JtYWxQcm9sb2d1ZUdlbmVyYXRvcik7CisgICAgYXV0byBl
eGNlcHRpb25IYW5kbGVyID0gdm0uZ2V0Q1RJU3R1Yihwb3BUaHVua1N0YWNrUHJlc2VydmVzQW5k
SGFuZGxlRXhjZXB0aW9uR2VuZXJhdG9yKTsKKworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIo
KnRoaXMsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6RXh0cmFDVElUaHVu
ayk7CisgICAgcGF0Y2hCdWZmZXIubGluayhhcml0eUNoZWNrQ2FsbCwgRnVuY3Rpb25QdHI8T3Bl
cmF0aW9uUHRyVGFnPihhcml0eUNoZWNrT3BlcmF0aW9uKSk7CisgICAgcGF0Y2hCdWZmZXIubGlu
ayhhcml0eUZpeHVwQ2FsbCwgRnVuY3Rpb25QdHIoYXJpdHlGaXh1cC5yZXRhZ2dlZENvZGU8Tm9Q
dHJUYWc+KCkpKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKG5vcm1hbFByb2xvZ3VlSnVtcCwgQ29k
ZUxvY2F0aW9uTGFiZWwobm9ybWFsUHJvbG9ndWUucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7
CisgICAgcGF0Y2hCdWZmZXIubGluayhoYW5kbGVFeGNlcHRpb25KdW1wLCBDb2RlTG9jYXRpb25M
YWJlbChleGNlcHRpb25IYW5kbGVyLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkpOworICAgIHJl
dHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgdGh1bmtOYW1l
KTsKK30KKworI2RlZmluZSBERUZJTkVfQVJJVFlfUFJPR0xPR1VFX0dFTkVSQVRPUihkb2VzUHJv
ZmlsaW5nLCBpc0NvbnN0cnVjdG9yLCBoYXNIdWdlRnJhbWUsIG5hbWUsIGFyaXR5Rml4dXBOYW1l
KSBcCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6YXJpdHlGaXh1
cE5hbWUoVk0mIHZtKSBcCisgICAgeyBcCisgICAgICAgIEpJVCBqaXQodm0pOyBcCisgICAgICAg
IHJldHVybiBqaXQuYXJpdHlGaXh1cFByb2xvZ3VlR2VuZXJhdG9yKHZtLCBpc0NvbnN0cnVjdG9y
LCBuYW1lLCAiQmFzZWxpbmU6ICIgI2FyaXR5Rml4dXBOYW1lKTsgXAorICAgIH0KKworRk9SX0VB
Q0hfUFJPTE9HVUVfR0VORVJBVE9SKERFRklORV9BUklUWV9QUk9HTE9HVUVfR0VORVJBVE9SKQor
I3VuZGVmIERFRklORV9BUklUWV9QUk9HTE9HVUVfR0VORVJBVE9SCisKKyNlbmRpZiAvLyBFTkFC
TEUoRVhUUkFfQ1RJX1RIVU5LUykKKwogdm9pZCBKSVQ6OmxpbmsoKQogewogICAgIExpbmtCdWZm
ZXImIHBhdGNoQnVmZmVyID0gKm1fbGlua0J1ZmZlcjsKQEAgLTEwNDYsOSArMTM1Nyw5IEBAIENv
bXBpbGF0aW9uUmVzdWx0IEpJVDo6cHJpdmF0ZUNvbXBpbGUoSkkKICAgICByZXR1cm4gZmluYWxp
emVPbk1haW5UaHJlYWQoKTsKIH0KIAorI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIHZv
aWQgSklUOjpwcml2YXRlQ29tcGlsZUV4Y2VwdGlvbkhhbmRsZXJzKCkKIHsKLSNpZiAhRU5BQkxF
KEVYVFJBX0NUSV9USFVOS1MpCiAgICAgaWYgKCFtX2V4Y2VwdGlvbkNoZWNrc1dpdGhDYWxsRnJh
bWVSb2xsYmFjay5lbXB0eSgpKSB7CiAgICAgICAgIG1fZXhjZXB0aW9uQ2hlY2tzV2l0aENhbGxG
cmFtZVJvbGxiYWNrLmxpbmsodGhpcyk7CiAKQEAgLTEwNzMsOCArMTM4NCw4IEBAIHZvaWQgSklU
Ojpwcml2YXRlQ29tcGlsZUV4Y2VwdGlvbkhhbmRsZXIKICAgICAgICAgbV9mYXJDYWxscy5hcHBl
bmQoRmFyQ2FsbFJlY29yZChjYWxsKE9wZXJhdGlvblB0clRhZyksIEZ1bmN0aW9uUHRyPE9wZXJh
dGlvblB0clRhZz4ob3BlcmF0aW9uTG9va3VwRXhjZXB0aW9uSGFuZGxlcikpKTsKICAgICAgICAg
anVtcFRvRXhjZXB0aW9uSGFuZGxlcih2bSgpKTsKICAgICB9Ci0jZW5kaWYgLy8gRU5BQkxFKEVY
VFJBX0NUSV9USFVOS1MpCiB9CisjZW5kaWYgLy8gIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQog
CiB2b2lkIEpJVDo6ZG9NYWluVGhyZWFkUHJlcGFyYXRpb25CZWZvcmVDb21waWxlKCkKIHsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkocmV2aXNpb24gMjc4NTYwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMzE4LDcgKzMxOCw5IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgbV9leGNlcHRpb25DaGVja3NXaXRoQ2FsbEZy
YW1lUm9sbGJhY2suYXBwZW5kKGVtaXRFeGNlcHRpb25DaGVjayh2bSgpKSk7CiAgICAgICAgIH0K
IAorI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICAgICAgdm9pZCBwcml2YXRlQ29t
cGlsZUV4Y2VwdGlvbkhhbmRsZXJzKCk7CisjZW5kaWYKIAogICAgICAgICB2b2lkIGFkdmFuY2VU
b05leHRDaGVja3BvaW50KCk7CiAgICAgICAgIHZvaWQgZW1pdEp1bXBTbG93VG9Ib3RGb3JDaGVj
a3BvaW50KEp1bXApOwpAQCAtNzkwLDYgKzc5MiwyNiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogI2lm
IEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogICAgICAgICAvLyBUaHVuayBnZW5lcmF0b3JzLgor
ICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBwcm9s
b2d1ZUdlbmVyYXRvcjAoVk0mKTsKKyAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRUaHVua1B0clRhZz4gcHJvbG9ndWVHZW5lcmF0b3IxKFZNJik7CisgICAgICAgIHN0YXRp
YyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHByb2xvZ3VlR2VuZXJhdG9y
MihWTSYpOworICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBwcm9sb2d1ZUdlbmVyYXRvcjMoVk0mKTsKKyAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gcHJvbG9ndWVHZW5lcmF0b3I0KFZNJik7CisgICAg
ICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHByb2xvZ3Vl
R2VuZXJhdG9yNShWTSYpOworICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiBwcm9sb2d1ZUdlbmVyYXRvcjYoVk0mKTsKKyAgICAgICAgc3RhdGljIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gcHJvbG9ndWVHZW5lcmF0b3I3KFZN
Jik7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gcHJvbG9n
dWVHZW5lcmF0b3IoVk0mLCBib29sIGRvZXNQcm9maWxpbmcsIGJvb2wgaXNDb25zdHJ1Y3Rvciwg
Ym9vbCBoYXNIdWdlRnJhbWUsIGNvbnN0IGNoYXIqIG5hbWUpOworCisgICAgICAgIHN0YXRpYyBN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGFyaXR5Rml4dXBfcHJvbG9ndWVH
ZW5lcmF0b3IwKFZNJik7CisgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHJUYWc+IGFyaXR5Rml4dXBfcHJvbG9ndWVHZW5lcmF0b3IxKFZNJik7CisgICAgICAg
IHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGFyaXR5Rml4dXBf
cHJvbG9ndWVHZW5lcmF0b3IyKFZNJik7CisgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IGFyaXR5Rml4dXBfcHJvbG9ndWVHZW5lcmF0b3IzKFZNJik7
CisgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGFy
aXR5Rml4dXBfcHJvbG9ndWVHZW5lcmF0b3I0KFZNJik7CisgICAgICAgIHN0YXRpYyBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGFyaXR5Rml4dXBfcHJvbG9ndWVHZW5lcmF0
b3I1KFZNJik7CisgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+IGFyaXR5Rml4dXBfcHJvbG9ndWVHZW5lcmF0b3I2KFZNJik7CisgICAgICAgIHN0YXRp
YyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGFyaXR5Rml4dXBfcHJvbG9n
dWVHZW5lcmF0b3I3KFZNJik7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz4gYXJpdHlGaXh1cFByb2xvZ3VlR2VuZXJhdG9yKFZNJiwgYm9vbCBpc0NvbnN0cnVj
dG9yLCBUaHVua0dlbmVyYXRvciBub3JtYWxQcm9sb2d1ZUdlbmVyYXRvciwgY29uc3QgY2hhciog
bmFtZSk7CisKICAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gc2xvd19vcF9kZWxfYnlfaWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IoVk0mKTsKICAgICAg
ICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gc2xvd19vcF9k
ZWxfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yKFZNJik7CiAgICAgICAgIHN0YXRpYyBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHNsb3dfb3BfZ2V0X2J5X2lkX3ByZXBh
cmVDYWxsR2VuZXJhdG9yKFZNJik7CkBAIC04MDQsNyArODI2LDE0IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBz
bG93X29wX3Jlc29sdmVfc2NvcGVHZW5lcmF0b3IoVk0mKTsKIAogICAgICAgICBzdGF0aWMgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvcF9jaGVja190cmFwc19oYW5kbGVy
R2VuZXJhdG9yKFZNJik7Ci0gICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHJUYWc+IG9wX2VudGVyX2hhbmRsZXJHZW5lcmF0b3IoVk0mKTsKKworICAgICAgICBz
dGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvcF9lbnRlcl9jYW5C
ZU9wdGltaXplZF9HZW5lcmF0b3IoVk0mKTsKKyAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3BfZW50ZXJfY2Fubm90QmVPcHRpbWl6ZWRfR2VuZXJh
dG9yKFZNJik7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
b3BfZW50ZXJfR2VuZXJhdG9yKFZNJiwgYm9vbCBjYW5CZU9wdGltaXplZCwgY29uc3QgY2hhciog
dGh1bmtOYW1lKTsKKworI2lmIEVOQUJMRShERkdfSklUKQorICAgICAgICBzdGF0aWMgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvcF9sb29wX2hpbnRfR2VuZXJhdG9yKFZN
Jik7CisjZW5kaWYKICAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz4gb3BfcmV0X2hhbmRsZXJHZW5lcmF0b3IoVk0mKTsKICAgICAgICAgc3RhdGljIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3BfdGhyb3dfaGFuZGxlckdlbmVy
YXRvcihWTSYpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAko
cmV2aXNpb24gMjc4NTYwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTkxLDcgKzkxLDYgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJ
VDo6ZW1pdExvYWRDaGFyYWN0ZQogCiBBTFdBWVNfSU5MSU5FIEpJVDo6Q2FsbCBKSVQ6OmVtaXRO
YWtlZE5lYXJDYWxsKENvZGVQdHI8Tm9QdHJUYWc+IHRhcmdldCkKIHsKLSAgICBBU1NFUlQobV9i
eXRlY29kZUluZGV4KTsgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmlu
ZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNl
dC4KICAgICBDYWxsIG5ha2VkQ2FsbCA9IG5lYXJDYWxsKCk7CiAgICAgbV9uZWFyQ2FsbHMuYXBw
ZW5kKE5lYXJDYWxsUmVjb3JkKG5ha2VkQ2FsbCwgRnVuY3Rpb25QdHI8SlNJbnRlcm5hbFB0clRh
Zz4odGFyZ2V0LnJldGFnZ2VkPEpTSW50ZXJuYWxQdHJUYWc+KCkpKSk7CiAgICAgcmV0dXJuIG5h
a2VkQ2FsbDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMz
Ml82NC5jcHAJKHJldmlzaW9uIDI3ODU2MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUT3Bjb2RlczMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA2Niw3ICsxMDY2LDcgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfZW50ZXIoY29uc3QgSW5zdHJ1Y3RpbwogICAgIC8vIEV2ZW4gdGhv
dWdoIEpJVCBjb2RlIGRvZXNuJ3QgdXNlIHRoZW0sIHdlIGluaXRpYWxpemUgb3VyIGNvbnN0YW50
CiAgICAgLy8gcmVnaXN0ZXJzIHRvIHphcCBzdGFsZSBwb2ludGVycywgdG8gYXZvaWQgdW5uZWNl
c3NhcmlseSBwcm9sb25naW5nCiAgICAgLy8gb2JqZWN0IGxpZmV0aW1lIGFuZCBpbmNyZWFzaW5n
IEdDIHByZXNzdXJlLgotICAgIGZvciAoaW50IGkgPSBDb2RlQmxvY2s6OmxsaW50QmFzZWxpbmVD
YWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKTsgaSA8IG1fY29kZUJsb2NrLT5udW1W
YXJzKCk7ICsraSkKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBDb2RlQmxvY2s6OmxsaW50QmFzZWxp
bmVDYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKTsgaSA8IG1fY29kZUJsb2NrLT5u
dW1WYXJzKCk7ICsraSkKICAgICAgICAgZW1pdFN0b3JlKHZpcnR1YWxSZWdpc3RlckZvckxvY2Fs
KGkpLCBqc1VuZGVmaW5lZCgpKTsKIAogICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwo
dGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfZW50ZXIpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCShyZXZpc2lvbiAyNzg1NjApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNzYsNyArMzc2LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBK
SQogICAgIEpJVCBqaXQodm0pOwogCiAgICAgaml0LmNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50
KCk7Ci0gICAgaml0LmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXNGb3IoJlJlZ2lzdGVyQXRPZmZzZXRM
aXN0OjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKKyAgICBqaXQuZW1pdFJl
c3RvcmVDYWxsZWVTYXZlc0ZvckJhc2VsaW5lSklUKCk7CiAgICAgaml0LmVtaXRGdW5jdGlvbkVw
aWxvZ3VlKCk7CiAgICAgaml0LnJldCgpOwogCkBAIC0xMTg2LDEwMyArMTE4NiwxMTUgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfZW50ZXIoY29uc3QgSW5zdHJ1Y3RpbwogICAgIGVtaXRFbnRlck9wdGlt
aXphdGlvbkNoZWNrKCk7CiAjZWxzZQogICAgIEFTU0VSVChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0
KCkgPT0gMCk7Ci0gICAgY29uc3RleHByIEdQUlJlZyBsb2NhbHNUb0luaXRHUFIgPSBhcmd1bWVu
dEdQUjA7Ci0gICAgY29uc3RleHByIEdQUlJlZyBjYW5CZU9wdGltaXplZEdQUiA9IGFyZ3VtZW50
R1BSNDsKLQogICAgIHVuc2lnbmVkIGxvY2Fsc1RvSW5pdCA9IGNvdW50IC0gQ29kZUJsb2NrOjps
bGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCk7CiAgICAgUkVM
RUFTRV9BU1NFUlQobG9jYWxzVG9Jbml0IDwgY291bnQpOwotICAgIG1vdmUoVHJ1c3RlZEltbTMy
KGxvY2Fsc1RvSW5pdCAqIHNpemVvZihSZWdpc3RlcikpLCBsb2NhbHNUb0luaXRHUFIpOwotICAg
IG1vdmUoVHJ1c3RlZEltbTMyKGNhbkJlT3B0aW1pemVkKCkpLCBjYW5CZU9wdGltaXplZEdQUik7
Ci0gICAgZW1pdE5ha2VkTmVhckNhbGwodm0oKS5nZXRDVElTdHViKG9wX2VudGVyX2hhbmRsZXJH
ZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisgICAgVGh1bmtHZW5lcmF0b3Ig
Z2VuZXJhdG9yID0gY2FuQmVPcHRpbWl6ZWQoKSA/IG9wX2VudGVyX2NhbkJlT3B0aW1pemVkX0dl
bmVyYXRvciA6IG9wX2VudGVyX2Nhbm5vdEJlT3B0aW1pemVkX0dlbmVyYXRvcjsKKyAgICBlbWl0
TmFrZWROZWFyQ2FsbCh2bSgpLmdldENUSVN0dWIoZ2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9Q
dHJUYWc+KCkpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogfQogCiAjaWYg
RU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+IEpJVDo6b3BfZW50ZXJfaGFuZGxlckdlbmVyYXRvcihWTSYgdm0pCitNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6b3BfZW50ZXJfR2VuZXJhdG9yKFZNJiB2
bSwgYm9vbCBjYW5CZU9wdGltaXplZCwgY29uc3QgY2hhciogdGh1bmtOYW1lKQogewotICAgIEpJ
VCBqaXQodm0pOwotCiAjaWYgQ1BVKFg4Nl82NCkKLSAgICBqaXQucHVzaChYODZSZWdpc3RlcnM6
OmVicCk7CisgICAgcHVzaChYODZSZWdpc3RlcnM6OmVicCk7CiAjZWxpZiBDUFUoQVJNNjQpCi0g
ICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKLSAgICBqaXQucHVzaFBhaXIoZnJhbWVQb2ludGVy
UmVnaXN0ZXIsIGxpbmtSZWdpc3Rlcik7CisgICAgdGFnUmV0dXJuQWRkcmVzcygpOworICAgIHB1
c2hQYWlyKGZyYW1lUG9pbnRlclJlZ2lzdGVyLCBsaW5rUmVnaXN0ZXIpOwogI2VuZGlmCiAgICAg
Ly8gb3BfZW50ZXIgaXMgYWx3YXlzIGF0IGJ5dGVjb2RlT2Zmc2V0IDAuCi0gICAgaml0LnN0b3Jl
MzIoVHJ1c3RlZEltbTMyKDApLCB0YWdGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMpKTsKKyAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMigwKSwgdGFnRm9yKENhbGxG
cmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSk7CiAKICAgICBjb25zdGV4cHIg
R1BSUmVnIGxvY2Fsc1RvSW5pdEdQUiA9IGFyZ3VtZW50R1BSMDsKICAgICBjb25zdGV4cHIgR1BS
UmVnIGl0ZXJhdG9yR1BSID0gYXJndW1lbnRHUFIxOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgZW5k
R1BSID0gYXJndW1lbnRHUFIyOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgdW5kZWZpbmVkR1BSID0g
YXJndW1lbnRHUFIzOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgY2FuQmVPcHRpbWl6ZWRHUFIgPSBh
cmd1bWVudEdQUjQ7CisgICAgY29uc3RleHByIEdQUlJlZyBjb2RlQmxvY2tHUFIgPSBhcmd1bWVu
dEdQUjQ7CisKKyAgICBjb25zdGV4cHIgaW50IHZpcnR1YWxSZWdpc3RlclNpemVTaGlmdCA9IDM7
CisgICAgc3RhdGljX2Fzc2VydCgoMSA8PCB2aXJ0dWFsUmVnaXN0ZXJTaXplU2hpZnQpID09IHNp
emVvZihSZWdpc3RlcikpOworCisgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6
OmNvZGVCbG9jayksIGNvZGVCbG9ja0dQUik7CisgICAgbG9hZDMyKEFkZHJlc3MoY29kZUJsb2Nr
R1BSLCBDb2RlQmxvY2s6Om9mZnNldE9mTnVtVmFycygpKSwgbG9jYWxzVG9Jbml0R1BSKTsKKyAg
ICBzdWIzMihUcnVzdGVkSW1tMzIoQ29kZUJsb2NrOjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNw
YWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCkpLCBsb2NhbHNUb0luaXRHUFIpOworICAgIGxzaGlmdDMy
KFRydXN0ZWRJbW0zMih2aXJ0dWFsUmVnaXN0ZXJTaXplU2hpZnQpLCBsb2NhbHNUb0luaXRHUFIp
OwogCiAgICAgc2l6ZV90IHN0YXJ0TG9jYWwgPSBDb2RlQmxvY2s6OmxsaW50QmFzZWxpbmVDYWxs
ZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKTsKICAgICBpbnQgc3RhcnRPZmZzZXQgPSB2
aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChzdGFydExvY2FsKS5vZmZzZXQoKTsKLSAgICBqaXQubW92
ZShUcnVzdGVkSW1tNjQoc3RhcnRPZmZzZXQgKiBzaXplb2YoUmVnaXN0ZXIpKSwgaXRlcmF0b3JH
UFIpOwotICAgIGppdC5zdWI2NChpdGVyYXRvckdQUiwgbG9jYWxzVG9Jbml0R1BSLCBlbmRHUFIp
OworICAgIG1vdmUoVHJ1c3RlZEltbTY0KHN0YXJ0T2Zmc2V0ICogc2l6ZW9mKFJlZ2lzdGVyKSks
IGl0ZXJhdG9yR1BSKTsKKyAgICBzdWI2NChpdGVyYXRvckdQUiwgbG9jYWxzVG9Jbml0R1BSLCBl
bmRHUFIpOwogCi0gICAgaml0Lm1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKSksIHVuZGVmaW5lZEdQUik7Ci0gICAgYXV0byBpbml0TG9vcCA9IGppdC5sYWJl
bCgpOwotICAgIEp1bXAgaW5pdERvbmUgPSBqaXQuYnJhbmNoMzIoTGVzc1RoYW5PckVxdWFsLCBp
dGVyYXRvckdQUiwgZW5kR1BSKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSkpLCB1bmRlZmluZWRHUFIpOworICAgIGF1dG8gaW5pdExvb3AgPSBs
YWJlbCgpOworICAgIEp1bXAgaW5pdERvbmUgPSBicmFuY2gzMihMZXNzVGhhbk9yRXF1YWwsIGl0
ZXJhdG9yR1BSLCBlbmRHUFIpOwogICAgIHsKLSAgICAgICAgaml0LnN0b3JlNjQodW5kZWZpbmVk
R1BSLCBCYXNlSW5kZXgoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGl0ZXJhdG9yR1BSLCBU
aW1lc09uZSkpOwotICAgICAgICBqaXQuc3ViNjQoVHJ1c3RlZEltbTMyKHNpemVvZihSZWdpc3Rl
cikpLCBpdGVyYXRvckdQUik7Ci0gICAgICAgIGppdC5qdW1wKGluaXRMb29wKTsKKyAgICAgICAg
c3RvcmU2NCh1bmRlZmluZWRHUFIsIEJhc2VJbmRleChHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rl
ciwgaXRlcmF0b3JHUFIsIFRpbWVzT25lKSk7CisgICAgICAgIHN1YjY0KFRydXN0ZWRJbW0zMihz
aXplb2YoUmVnaXN0ZXIpKSwgaXRlcmF0b3JHUFIpOworICAgICAgICBqdW1wKGluaXRMb29wKTsK
ICAgICB9Ci0gICAgaW5pdERvbmUubGluaygmaml0KTsKKyAgICBpbml0RG9uZS5saW5rKHRoaXMp
OwogCi0gICAgLy8gZW1pdFdyaXRlQmFycmllcihtX2NvZGVCbG9jaykuCi0gICAgaml0LmxvYWRQ
dHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCBhcmd1bWVudEdQUjEpOwot
ICAgIEp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9IGppdC5iYXJyaWVyQnJhbmNoKHZt
LCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CisgICAgLy8gSW1wbGVtZW50aW5nIGVtaXRX
cml0ZUJhcnJpZXIobV9jb2RlQmxvY2spLgorICAgIEp1bXAgb3duZXJJc1JlbWVtYmVyZWRPcklu
RWRlbiA9IGJhcnJpZXJCcmFuY2godm0sIGNvZGVCbG9ja0dQUiwgYXJndW1lbnRHUFIyKTsKIAot
ICAgIGppdC5tb3ZlKGNhbkJlT3B0aW1pemVkR1BSLCBHUFJJbmZvOjpudW1iZXJUYWdSZWdpc3Rl
cik7IC8vIHNhdmUuCi0gICAgaml0LnNldHVwQXJndW1lbnRzPGRlY2x0eXBlKG9wZXJhdGlvbldy
aXRlQmFycmllclNsb3dQYXRoKT4oJnZtLCBhcmd1bWVudEdQUjEpOwotICAgIGppdC5wcmVwYXJl
Q2FsbE9wZXJhdGlvbih2bSk7Ci0gICAgQ2FsbCBvcGVyYXRpb25Xcml0ZUJhcnJpZXJDYWxsID0g
aml0LmNhbGwoT3BlcmF0aW9uUHRyVGFnKTsKKyAgICBzZXR1cEFyZ3VtZW50czxkZWNsdHlwZShv
cGVyYXRpb25Xcml0ZUJhcnJpZXJTbG93UGF0aCk+KCZ2bSwgY29kZUJsb2NrR1BSKTsKKyAgICBw
cmVwYXJlQ2FsbE9wZXJhdGlvbih2bSk7CisgICAgQ2FsbCBvcGVyYXRpb25Xcml0ZUJhcnJpZXJD
YWxsID0gY2FsbChPcGVyYXRpb25QdHJUYWcpOworCisgICAgaWYgKGNhbkJlT3B0aW1pemVkKQor
ICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgY29k
ZUJsb2NrR1BSKTsKIAotICAgIGppdC5tb3ZlKEdQUkluZm86Om51bWJlclRhZ1JlZ2lzdGVyLCBj
YW5CZU9wdGltaXplZEdQUik7IC8vIHJlc3RvcmUuCi0gICAgaml0Lm1vdmUoVHJ1c3RlZEltbTY0
KEpTVmFsdWU6Ok51bWJlclRhZyksIEdQUkluZm86Om51bWJlclRhZ1JlZ2lzdGVyKTsKLSAgICBv
d25lcklzUmVtZW1iZXJlZE9ySW5FZGVuLmxpbmsoJmppdCk7CisgICAgb3duZXJJc1JlbWVtYmVy
ZWRPckluRWRlbi5saW5rKHRoaXMpOwogCiAjaWYgRU5BQkxFKERGR19KSVQpCisgICAgLy8gSW1w
bGVtZW50aW5nIGVtaXRFbnRlck9wdGltaXphdGlvbkNoZWNrKCkuCiAgICAgQ2FsbCBvcGVyYXRp
b25PcHRpbWl6ZUNhbGw7Ci0gICAgaWYgKE9wdGlvbnM6OnVzZURGR0pJVCgpKSB7Ci0gICAgICAg
IC8vIGVtaXRFbnRlck9wdGltaXphdGlvbkNoZWNrKCkuCisgICAgaWYgKGNhbkJlT3B0aW1pemVk
KSB7CiAgICAgICAgIEp1bXBMaXN0IHNraXBPcHRpbWl6ZTsKIAotICAgICAgICBza2lwT3B0aW1p
emUuYXBwZW5kKGppdC5icmFuY2hUZXN0MzIoWmVybywgY2FuQmVPcHRpbWl6ZWRHUFIpKTsKKyAg
ICAgICAgc2tpcE9wdGltaXplLmFwcGVuZChicmFuY2hBZGQzMihTaWduZWQsIFRydXN0ZWRJbW0z
MihPcHRpb25zOjpleGVjdXRpb25Db3VudGVySW5jcmVtZW50Rm9yRW50cnkoKSksIEFkZHJlc3Mo
Y29kZUJsb2NrR1BSLCBDb2RlQmxvY2s6Om9mZnNldE9mSklURXhlY3V0ZUNvdW50ZXIoKSkpKTsK
IAotICAgICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9j
ayksIGFyZ3VtZW50R1BSMSk7Ci0gICAgICAgIHNraXBPcHRpbWl6ZS5hcHBlbmQoaml0LmJyYW5j
aEFkZDMyKFNpZ25lZCwgVHJ1c3RlZEltbTMyKE9wdGlvbnM6OmV4ZWN1dGlvbkNvdW50ZXJJbmNy
ZW1lbnRGb3JFbnRyeSgpKSwgQWRkcmVzcyhhcmd1bWVudEdQUjEsIENvZGVCbG9jazo6b2Zmc2V0
T2ZKSVRFeGVjdXRlQ291bnRlcigpKSkpOworICAgICAgICBjb3B5TExJbnRCYXNlbGluZUNhbGxl
ZVNhdmVzRnJvbUZyYW1lT3JSZWdpc3RlclRvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZt
LnRvcEVudHJ5RnJhbWUpOwogCi0gICAgICAgIGppdC5jb3B5TExJbnRCYXNlbGluZUNhbGxlZVNh
dmVzRnJvbUZyYW1lT3JSZWdpc3RlclRvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtLnRv
cEVudHJ5RnJhbWUpOworICAgICAgICBzZXR1cEFyZ3VtZW50czxkZWNsdHlwZShvcGVyYXRpb25P
cHRpbWl6ZSk+KCZ2bSwgVHJ1c3RlZEltbTMyKDApKTsKKyAgICAgICAgcHJlcGFyZUNhbGxPcGVy
YXRpb24odm0pOworICAgICAgICBvcGVyYXRpb25PcHRpbWl6ZUNhbGwgPSBjYWxsKE9wZXJhdGlv
blB0clRhZyk7CiAKLSAgICAgICAgaml0LnNldHVwQXJndW1lbnRzPGRlY2x0eXBlKG9wZXJhdGlv
bk9wdGltaXplKT4oJnZtLCBUcnVzdGVkSW1tMzIoMCkpOwotICAgICAgICBqaXQucHJlcGFyZUNh
bGxPcGVyYXRpb24odm0pOwotICAgICAgICBvcGVyYXRpb25PcHRpbWl6ZUNhbGwgPSBqaXQuY2Fs
bChPcGVyYXRpb25QdHJUYWcpOwotCi0gICAgICAgIHNraXBPcHRpbWl6ZS5hcHBlbmQoaml0LmJy
YW5jaFRlc3RQdHIoWmVybywgcmV0dXJuVmFsdWVHUFIpKTsKLSAgICAgICAgaml0LmZhckp1bXAo
cmV0dXJuVmFsdWVHUFIsIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKKyAgICAgICAgc2tp
cE9wdGltaXplLmFwcGVuZChicmFuY2hUZXN0UHRyKFplcm8sIHJldHVyblZhbHVlR1BSKSk7Cisg
ICAgICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVy
KTsKIAotICAgICAgICBza2lwT3B0aW1pemUubGluaygmaml0KTsKKyAgICAgICAgc2tpcE9wdGlt
aXplLmxpbmsodGhpcyk7CiAgICAgfQogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQogCiAjaWYg
Q1BVKFg4Nl82NCkKLSAgICBqaXQucG9wKFg4NlJlZ2lzdGVyczo6ZWJwKTsKKyAgICBwb3AoWDg2
UmVnaXN0ZXJzOjplYnApOwogI2VsaWYgQ1BVKEFSTTY0KQotICAgIGppdC5wb3BQYWlyKGZyYW1l
UG9pbnRlclJlZ2lzdGVyLCBsaW5rUmVnaXN0ZXIpOworICAgIHBvcFBhaXIoZnJhbWVQb2ludGVy
UmVnaXN0ZXIsIGxpbmtSZWdpc3Rlcik7CiAjZW5kaWYKLSAgICBqaXQucmV0KCk7CisgICAgcmV0
KCk7CiAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBM
aW5rQnVmZmVyOjpQcm9maWxlOjpFeHRyYUNUSVRodW5rKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNo
QnVmZmVyKCp0aGlzLCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OkV4dHJh
Q1RJVGh1bmspOwogICAgIHBhdGNoQnVmZmVyLmxpbmsob3BlcmF0aW9uV3JpdGVCYXJyaWVyQ2Fs
bCwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25Xcml0ZUJhcnJpZXJTbG93
UGF0aCkpOwogI2lmIEVOQUJMRShERkdfSklUKQotICAgIGlmIChPcHRpb25zOjp1c2VERkdKSVQo
KSkKKyAgICBpZiAoY2FuQmVPcHRpbWl6ZWQpCiAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsob3Bl
cmF0aW9uT3B0aW1pemVDYWxsLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlv
bk9wdGltaXplKSk7CiAjZW5kaWYKLSAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZl
ciwgSklUVGh1bmtQdHJUYWcsICJCYXNlbGluZTogb3BfZW50ZXJfaGFuZGxlciIpOworICAgIHJl
dHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgdGh1bmtOYW1l
KTsKK30KKworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6Om9wX2Vu
dGVyX2NhbkJlT3B0aW1pemVkX0dlbmVyYXRvcihWTSYgdm0pCit7CisgICAgSklUIGppdCh2bSk7
CisgICAgY29uc3RleHByIGJvb2wgY2FuQmVPcHRpbWl6ZWQgPSB0cnVlOworICAgIHJldHVybiBq
aXQub3BfZW50ZXJfR2VuZXJhdG9yKHZtLCBjYW5CZU9wdGltaXplZCwgIkJhc2VsaW5lOiBvcF9l
bnRlcl9jYW5CZU9wdGltaXplZCIpOworfQorCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1
bmtQdHJUYWc+IEpJVDo6b3BfZW50ZXJfY2Fubm90QmVPcHRpbWl6ZWRfR2VuZXJhdG9yKFZNJiB2
bSkKK3sKKyAgICBKSVQgaml0KHZtKTsKKyAgICBjb25zdGV4cHIgYm9vbCBjYW5CZU9wdGltaXpl
ZCA9IGZhbHNlOworICAgIHJldHVybiBqaXQub3BfZW50ZXJfR2VuZXJhdG9yKHZtLCBjYW5CZU9w
dGltaXplZCwgIkJhc2VsaW5lOiBvcF9lbnRlcl9jYW5ub3RCZU9wdGltaXplZCIpOwogfQogI2Vu
ZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCkBAIC0xNDM0LDIyICsxNDQ2LDI3IEBA
IHZvaWQgSklUOjplbWl0X29wX2xvb3BfaGludChjb25zdCBJbnN0cnUKICAgICAgICAgYWRkNjQo
VHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7CiAgICAgICAgIHN0b3JlNjQocmVnVDAsIHB0cik7CiAg
ICAgfQorI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oaW5zdHJ1Y3Rpb24pOwogI2VuZGlmCiAKLSAg
ICAvLyBFbWl0IHRoZSBKSVQgb3B0aW1pemF0aW9uIGNoZWNrOiAKKyAgICAvLyBFbWl0IHRoZSBK
SVQgb3B0aW1pemF0aW9uIGNoZWNrOgogICAgIGlmIChjYW5CZU9wdGltaXplZCgpKSB7CisgICAg
ICAgIGNvbnN0ZXhwciBHUFJSZWcgY29kZUJsb2NrR1BSID0gcmVnVDA7CisgICAgICAgIGxvYWRQ
dHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCBjb2RlQmxvY2tHUFIpOwog
ICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hBZGQzMihQb3NpdGl2ZU9yWmVybywgVHJ1c3RlZElt
bTMyKE9wdGlvbnM6OmV4ZWN1dGlvbkNvdW50ZXJJbmNyZW1lbnRGb3JMb29wKCkpLAotICAgICAg
ICAgICAgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5hZGRyZXNzT2ZKSVRFeGVjdXRlQ291
bnRlcigpKSkpOworICAgICAgICAgICAgQWRkcmVzcyhjb2RlQmxvY2tHUFIsIENvZGVCbG9jazo6
b2Zmc2V0T2ZKSVRFeGVjdXRlQ291bnRlcigpKSkpOwogICAgIH0KIH0KIAotdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2xvb3BfaGludChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRT
bG93X29wX2xvb3BfaGludChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CiAjaWYgRU5BQkxFKERGR19KSVQpCiAg
ICAgLy8gRW1pdCB0aGUgc2xvdyBwYXRoIGZvciB0aGUgSklUIG9wdGltaXphdGlvbiBjaGVjazoK
ICAgICBpZiAoY2FuQmVPcHRpbWl6ZWQoKSkgewogICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwogCisjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogICAgICAgICBjb3B5TExJbnRC
YXNlbGluZUNhbGxlZVNhdmVzRnJvbUZyYW1lT3JSZWdpc3RlclRvRW50cnlGcmFtZUNhbGxlZVNh
dmVzQnVmZmVyKHZtKCkudG9wRW50cnlGcmFtZSk7CiAKICAgICAgICAgY2FsbE9wZXJhdGlvbk5v
RXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uT3B0aW1pemUsICZ2bSgpLCBtX2J5dGVjb2RlSW5kZXgu
YXNCaXRzKCkpOwpAQCAtMTQ2MiwxMyArMTQ3OSw4MSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
bG9vcF9oaW50KGNvbnN0IEluCiAgICAgICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEdQUklu
Zm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKICAgICAgICAgbm9PcHRpbWl6ZWRFbnRyeS5saW5rKHRo
aXMpOwogCi0gICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwgY3VycmVudEluc3RydWN0
aW9uLT5zaXplKCkpOworI2Vsc2UgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCisgICAgICAg
IHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOworICAg
ICAgICBBU1NFUlQoQnl0ZWNvZGVJbmRleChieXRlY29kZU9mZnNldCkgPT0gbV9ieXRlY29kZUlu
ZGV4KTsKKyAgICAgICAgQVNTRVJUKG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNv
ZGVJbmRleCkgPT0gaW5zdHJ1Y3Rpb24pOworCisgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0
ZWNvZGVPZmZzZXRHUFIgPSByZWdUNzsKKworICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRl
Y29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKKyAgICAgICAgZW1pdE5ha2VkTmVhckNh
bGwodm0oKS5nZXRDVElTdHViKG9wX2xvb3BfaGludF9HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxO
b1B0clRhZz4oKSk7CisjZW5kaWYgLy8gIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogICAgIH0K
LSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGN1cnJlbnRJbnN0cnVjdGlvbik7CisjZW5kaWYgLy8g
RU5BQkxFKERGR19KSVQpCiAgICAgVU5VU0VEX1BBUkFNKGl0ZXIpOworICAgIFVOVVNFRF9QQVJB
TShpbnN0cnVjdGlvbik7Cit9CisKKyNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKKworI2lm
IEVOQUJMRShERkdfSklUKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBK
SVQ6Om9wX2xvb3BfaGludF9HZW5lcmF0b3IoVk0mIHZtKQoreworICAgIC8vIFRoZSB0aHVuayBn
ZW5lcmF0ZWQgYnkgdGhpcyBmdW5jdGlvbiBjYW4gb25seSB3b3JrIHdpdGggdGhlIExMSW50IC8g
QmFzZWxpbmUgSklUIGJlY2F1c2UKKyAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0
aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29k
ZUJsb2NrKCkuCisgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcg
dG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAorICAgIC8vIENhbGxG
cmFtZTo6Y29kZUJsb2NrKCkuCisgICAgSklUIGppdCh2bSk7CisKKyAgICBqaXQudGFnUmV0dXJu
QWRkcmVzcygpOworCisgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJl
Z1Q3OyAvLyBpbmNvbWluZy4KKworI2lmIENQVShYODZfNjQpCisgICAgaml0LnB1c2goZnJhbWVQ
b2ludGVyUmVnaXN0ZXIpOworI2VsaWYgQ1BVKEFSTTY0KQorICAgIGppdC5wdXNoUGFpcihmcmFt
ZVBvaW50ZXJSZWdpc3RlciwgbGlua1JlZ2lzdGVyKTsKKyNlbmRpZgorCisgICAgYXV0byB1c2Vk
UmVnaXN0ZXJzID0gUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpOworICAg
IHVzZWRSZWdpc3RlcnMuYWRkKGJ5dGVjb2RlT2Zmc2V0R1BSKTsKKyAgICBqaXQuY29weUxMSW50
QmFzZWxpbmVDYWxsZWVTYXZlc0Zyb21GcmFtZU9yUmVnaXN0ZXJUb0VudHJ5RnJhbWVDYWxsZWVT
YXZlc0J1ZmZlcih2bS50b3BFbnRyeUZyYW1lLCB1c2VkUmVnaXN0ZXJzKTsKKworICAgIGppdC5z
dG9yZTMyKGJ5dGVjb2RlT2Zmc2V0R1BSLCBDQ2FsbEhlbHBlcnM6OnRhZ0ZvcihDYWxsRnJhbWVT
bG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykpOworICAgIGppdC5sc2hpZnQzMihUcnVz
dGVkSW1tMzIoQnl0ZWNvZGVJbmRleDo6Y2hlY2twb2ludFNoaWZ0KSwgYnl0ZWNvZGVPZmZzZXRH
UFIpOworICAgIGppdC5zZXR1cEFyZ3VtZW50czxkZWNsdHlwZShvcGVyYXRpb25PcHRpbWl6ZSk+
KFRydXN0ZWRJbW1QdHIoJnZtKSwgYnl0ZWNvZGVPZmZzZXRHUFIpOworICAgIGppdC5wcmVwYXJl
Q2FsbE9wZXJhdGlvbih2bSk7CisgICAgQ2FsbCBvcGVyYXRpb25DYWxsID0gaml0LmNhbGwoT3Bl
cmF0aW9uUHRyVGFnKTsKKyAgICBKdW1wIGhhc09wdGltaXplZEVudHJ5ID0gaml0LmJyYW5jaFRl
c3RQdHIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpOworCisjaWYgQ1BVKFg4Nl82NCkKKyAgICBq
aXQucG9wKGZyYW1lUG9pbnRlclJlZ2lzdGVyKTsKKyNlbGlmIENQVShBUk02NCkKKyAgICBqaXQu
cG9wUGFpcihmcmFtZVBvaW50ZXJSZWdpc3RlciwgbGlua1JlZ2lzdGVyKTsKKyNlbmRpZgorICAg
IGppdC5yZXQoKTsKKworICAgIGhhc09wdGltaXplZEVudHJ5LmxpbmsoJmppdCk7CisjaWYgQ1BV
KFg4Nl82NCkKKyAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDIgKiBz
aXplb2YoQ1BVUmVnaXN0ZXIpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworI2VsaWYgQ1BVKEFS
TTY0KQorICAgIGppdC5wb3BQYWlyKGZyYW1lUG9pbnRlclJlZ2lzdGVyLCBsaW5rUmVnaXN0ZXIp
OwogI2VuZGlmCisgICAgaWYgKEFTU0VSVF9FTkFCTEVEKSB7CisgICAgICAgIEp1bXAgb2sgPSBq
aXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZSwgcmV0dXJuVmFsdWVHUFIsIFRydXN0
ZWRJbW1QdHIoYml0d2lzZV9jYXN0PHZvaWQqPihzdGF0aWNfY2FzdDxpbnRwdHJfdD4oMTAwMCkp
KSk7CisgICAgICAgIGppdC5hYm9ydFdpdGhSZWFzb24oSklUVW5yZWFzb25hYmxlTG9vcEhpbnRK
dW1wVGFyZ2V0KTsKKyAgICAgICAgb2subGluaygmaml0KTsKKyAgICB9CisKKyAgICBqaXQuZmFy
SnVtcChyZXR1cm5WYWx1ZUdQUiwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOworCisgICAg
TGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6
UHJvZmlsZTo6RXh0cmFDVElUaHVuayk7CisgICAgcGF0Y2hCdWZmZXIubGluayhvcGVyYXRpb25D
YWxsLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbk9wdGltaXplKSk7Cisg
ICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCAiQmFz
ZWxpbmU6IG9wX2xvb3BfaGludCIpOwogfQorI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorI2Vu
ZGlmIC8vICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAogdm9pZCBKSVQ6OmVtaXRfb3BfY2hl
Y2tfdHJhcHMoY29uc3QgSW5zdHJ1Y3Rpb24qKQogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAkocmV2aXNpb24gMjc4NTYwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC04MSwxMSArODEsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+
IHBvCiB7CiAgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAotI2lmIENQVShYODZfNjQpCi0gICAgaml0
LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigyICogc2l6ZW9mKENQVVJlZ2lzdGVy
KSksIFg4NlJlZ2lzdGVyczo6ZXNwKTsKLSNlbGlmIENQVShBUk02NCkKLSAgICBqaXQucG9wUGFp
cihDQ2FsbEhlbHBlcnM6OmZyYW1lUG9pbnRlclJlZ2lzdGVyLCBDQ2FsbEhlbHBlcnM6OmxpbmtS
ZWdpc3Rlcik7Ci0jZW5kaWYKKyAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bTMyKDIgKiBzaXplb2YoQ1BVUmVnaXN0ZXIpKSwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJS
ZWdpc3Rlcik7CiAKICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgY29udGludWF0aW9uID0gaml0Lmp1
bXAoKTsKIAo=
</data>
<flag name="review"
          id="452317"
          type_id="1"
          status="+"
          setter="keith_miller"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>430756</attachid>
            <date>2021-06-07 09:44:00 -0700</date>
            <delta_ts>2021-06-07 09:44:00 -0700</delta_ts>
            <desc>patch for landing.</desc>
            <filename>bug-226375.patch</filename>
            <type>text/plain</type>
            <size>55192</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjc4NTYyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk3IEBA
CisyMDIxLTA2LTA3ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBQ
dXQgdGhlIEJhc2VsaW5lIEpJVCBwcm9sb2d1ZSBhbmQgb3BfbG9vcF9oaW50IGNvZGUgaW4gSklU
IHRodW5rcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIyNjM3NQorCisgICAgICAgIFJldmlld2VkIGJ5IEtlaXRoIE1pbGxlciBhbmQgUm9iaW4gTW9y
aXNzZXQuCisKKyAgICAgICAgQmFzZWxpbmUgSklUIHByb2xvZ3VlIGNvZGUgdmFyaWVzIGluIGJl
aGF2aW9yIGJhc2VkIG9uIHNldmVyYWwgdmFyaWFibGVzLiAgVGhlc2UKKyAgICAgICAgdmFyaWFi
bGVzIGluY2x1ZGUgKDEpIHdoZXRoZXIgdGhlIHByb2xvZ3VlIGRvZXMgYW55IGFyZ3VtZW50cyB2
YWx1ZSBwcm9maWxpbmcsCisgICAgICAgICgyKSB3aGV0aGVyIHRoZSBwcm9sb2d1ZSBpcyBmb3Ig
YSBjb25zdHJ1Y3RvciwgYW5kICgzKSB3aGV0aGVyIHRoZSBjb21waWxlZAorICAgICAgICBDb2Rl
QmxvY2sgd2lsbCBoYXZlIHN1Y2ggYSBsYXJnZSBmcmFtZSB0aGF0IGl0IGlzIGdyZWF0ZXIgdGhh
biB0aGUgc3RhY2sgcmVzZXJ2ZWQKKyAgICAgICAgem9uZSAoYWthIHJlZCB6b25lKSB3aGljaCB3
b3VsZCByZXF1aXJlIGFkZGl0aW9uYWwgc3RhY2sgY2hlY2sgbG9naWMuCisKKyAgICAgICAgVGhl
IHByZS1leGlzdGluZyBjb2RlIHdvdWxkIGdlbmVyYXRlIHNwZWNpYWxpemVkIGNvZGUgYmFzZWQg
b24gdGhlc2UgKGFuZCBvdGhlcgorICAgICAgICB2YXJpYWJsZXMpLiAgSW4gY29udmVydGluZyB0
byB1c2luZyB0aHVua3MgZm9yIHRoZSBwcm9sb2d1ZSwgd2Ugb3B0IG5vdCB0bworICAgICAgICBj
b252ZXJ0IHRoZXNlIHNwZWNpYWxpemF0aW9ucyBpbnRvIHJ1bnRpbWUgY2hlY2tzLiAgSW5zdGVh
ZCwgdGhlIGltcGxlbWVudGF0aW9uCisgICAgICAgIHVzZXMgMSBvZiA4IHBvc3NpYmxlIHNwZWNp
YWxpemVkIHRodW5rcyB0byByZWR1Y2UgdGhlIG5lZWQgdG8gcGFzcyBhcmd1bWVudHMgZm9yCisg
ICAgICAgIHJ1bnRpbWUgY2hlY2tzLiAgVGhlIG9ubHkgbmVlZGVkIGFyZ3VtZW50IHBhc3NlZCB0
byB0aGUgcHJvbG9ndWUgdGh1bmtzIGlzIHRoZQorICAgICAgICBjb2RlQmxvY2sgcG9pbnRlci4K
KworICAgICAgICBUaGVyZSBhcmUgOCBwb3NzaWJsZSB0aHVua3MgYmVjYXVzZSB3ZSBzcGVjaWFs
aXplIGJhc2VkIG9uIDMgdmFyaWFibGVzOgorICAgICAgICAxLiBkb2VzUHJvZmlsaW5nCisgICAg
ICAgIDIuIGlzQ29uc3RydWN0b3IKKyAgICAgICAgMy4gaGFzSHVnZUZyYW1lCisKKyAgICAgICAg
MioqMyB5aWVsZHMgOCBwZXJtdXRhdGlvbnMgb2YgcHJvbG9ndWUgdGh1bmsgc3BlY2lhbGl6YXRp
b25zLgorCisgICAgICAgIFNpbWlsYXJseSwgdGhlcmUgYXJlIGFsc28gOCBhbmFsb2dvdXMgYXJp
dHkgZml4dXAgcHJvbG9ndWVzIHRoYXQgd29yayBzaW1pbGFybHkuCisKKyAgICAgICAgVGhlIG9w
X2xvb3BfaGludCB0aHVuayBvbmx5IHRha2VzIDEgcnVudGltZSBhcmd1bWVudDogdGhlIGJ5dGVj
b2RlIG9mZnNldC4KKworICAgICAgICBXZSd2ZSB0cmllZCBkb2luZyB0aGUgbG9vcF9oaW50IG9w
dGltaXphdGlvbiBjaGVjayBpbiB0aGUgdGh1bmsgKGluIG9yZGVyIHRvIG1vdmUKKyAgICAgICAg
Ym90aCB0aGUgZmFzdCBhbmQgc2xvdyBwYXRoIGludG8gdGhlIHRodW5rIGZvciBtYXhpbXVtIHNw
YWNlIHNhdmluZ3MpLiAgSG93ZXZlciwKKyAgICAgICAgdGhpcyBzZWVtcyB0byBoYXZlIHNvbWUg
c2xpZ2h0IG5lZ2F0aXZlIGltcGFjdCBvbiBiZW5jaG1hcmsgcGVyZm9ybWFuY2UuICBXZSBlbmRl
ZAorICAgICAgICB1cCBqdXN0IGtlZXBpbmcgdGhlIGZhc3QgcGF0aCBhbmQgaW5zdGVhZCBoYXZl
IHRoZSBzbG93IHBhdGggY2FsbCBhIHRodW5rIHRvIGRvCisgICAgICAgIGl0cyB3b3JrLiAgVGhp
cyByZWFsaXplcyB0aGUgYnVsayBvZiB0aGUgc2l6ZSBzYXZpbmdzIHdpdGhvdXQgdGhlIHBlcmYg
aW1wYWN0LgorCisgICAgICAgIFRoaXMgcGF0Y2ggYWxzbyBvcHRpbWl6ZXMgb3BfZW50ZXIgYSBi
aXQgbW9yZSBieSBlbGltaW5hdGluZyB0aGUgbmVlZCB0byBwYXNzIGFueQorICAgICAgICBhcmd1
bWVudHMgdG8gdGhlIHRodW5rLiAgVGhlIHRodW5rIHByZXZpb3VzbHkgdG9vayAyIGFyZ3VtZW50
czogbG9jYWxzVG9Jbml0IGFuZAorICAgICAgICBjYW5CZU9wdGltaXplZC4gIGxvY2Fsc1RvSW5p
dCBpcyBub3cgY29tcHV0ZWQgaW4gdGhlIHRodW5rIGF0IHJ1bnRpbWUsIGFuZAorICAgICAgICBj
YW5CZU9wdGltaXplZCBpcyB1c2VkIGFzIGEgc3BlY2lhbGl6YXRpb24gYXJndW1lbnQgdG8gZ2Vu
ZXJhdGUgMiB2YXJpYW50cyBvZiB0aGUKKyAgICAgICAgb3BfZW50ZXIgdGh1bms6IG9wX2VudGVy
X2NhbkJlT3B0aW1pemVkX0dlbmVyYXRvciBhbmQgb3BfZW50ZXJfY2Fubm90QmVPcHRpbWl6ZWRf
R2VuZXJhdG9yLAorICAgICAgICB0aGVyZWJ5IHJlbW92aW5nIHRoZSBuZWVkIHRvIHBhc3MgaXQg
YXMgYSBydW50aW1lIGFyZ3VtZW50LgorCisgICAgICAgIExpbmtCdWZmZXIgc2l6ZSByZXN1bHRz
IChmcm9tIGEgc2luZ2xlIHJ1biBvZiBTcGVlZG9tZXRlcjIpOgorCisgICAgICAgICAgIEJhc2Vs
aW5lSklUOiA5MzMxOTYyOCAoODguOTk2NTMyIE1CKSAgID0+IDgzODUxODI0ICg3OS45NjczMzEg
TUIpICAgMC45MHgKKyAgICAgICAgIEV4dHJhQ1RJVGh1bms6IDU5OTIgKDUuODUxNTYyIEtCKSAg
ICAgICAgPT4gNjk4NCAoNi44MjAzMTIgS0IpICAgICAgICAxLjE3eAorICAgICAgICAgICAgICAg
ICAgICAgICAgLi4uCisgICAgICAgICAgICAgICAgIFRvdGFsOiAxOTc1MzAwMDggKDE4OC4zNzky
OTUgTUIpID0+IDE4ODQ1OTQ0NCAoMTc5LjcyODkzMSBNQikgMC45NXgKKworICAgICAgICBTcGVl
ZG9tZXRlcjIgYW5kIEpldFN0cmVhbTIgcmVzdWx0cyAoYXMgbWVhc3VyZWQgb24gYW4gTTEgTWFj
KSBhcmUgbmV1dHJhbC4KKworICAgICAgICAqIGFzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1i
bGVyLmg6CisgICAgICAgIChKU0M6OkFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6OnVudGFnUmV0dXJu
QWRkcmVzc1dpdGhvdXRFeHRyYVZhbGlkYXRpb24pOgorICAgICAgICAqIGFzc2VtYmxlci9NYWNy
b0Fzc2VtYmxlckFSTTY0RS5oOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0RTo6
dW50YWdSZXR1cm5BZGRyZXNzKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NEU6
OnVudGFnUmV0dXJuQWRkcmVzc1dpdGhvdXRFeHRyYVZhbGlkYXRpb24pOgorICAgICAgICAqIGFz
c2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTXY3Lmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1i
bGVyQVJNdjc6OmJyYW5jaEFkZDMyKToKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJs
ZXJNSVBTLmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyTUlQUzo6YnJhbmNoQWRkMzIp
OgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAgICAgICAoSlNDOjpDb2RlQmxv
Y2s6Om9mZnNldE9mTnVtQ2FsbGVlTG9jYWxzKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpv
ZmZzZXRPZk51bVZhcnMpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om9mZnNldE9mQXJndW1l
bnRWYWx1ZVByb2ZpbGVzKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpvZmZzZXRPZlNob3Vs
ZEFsd2F5c0JlSW5saW5lZCk6CisgICAgICAgICogaml0L0Fzc2VtYmx5SGVscGVycy5oOgorICAg
ICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmVtaXRTYXZlQ2FsbGVlU2F2ZXNGb3IpOgorICAg
ICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmVtaXRTYXZlQ2FsbGVlU2F2ZXNGb3JCYXNlbGlu
ZUpJVCk6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6ZW1pdFJlc3RvcmVDYWxsZWVT
YXZlc0ZvckJhc2VsaW5lSklUKToKKyAgICAgICAgKiBqaXQvSklULmNwcDoKKyAgICAgICAgKEpT
Qzo6SklUOjpjb21waWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW5nKToKKyAgICAgICAgKEpTQzo6
SklUOjpwcm9sb2d1ZUdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6YXJpdHlGaXh1cFBy
b2xvZ3VlR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUV4Y2Vw
dGlvbkhhbmRsZXJzKToKKyAgICAgICAgKiBqaXQvSklULmg6CisgICAgICAgICogaml0L0pJVElu
bGluZXMuaDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0TmFrZWROZWFyQ2FsbCk6CisgICAgICAg
ICogaml0L0pJVE9wY29kZXMuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6Om9wX3JldF9oYW5kbGVy
R2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2VudGVyKToKKyAgICAgICAg
KEpTQzo6SklUOjpvcF9lbnRlcl9HZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVQ6Om9wX2Vu
dGVyX2NhbkJlT3B0aW1pemVkX0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6b3BfZW50
ZXJfY2Fubm90QmVPcHRpbWl6ZWRfR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX2xvb3BfaGludCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfbG9vcF9oaW50
KToKKyAgICAgICAgKEpTQzo6SklUOjpvcF9sb29wX2hpbnRfR2VuZXJhdG9yKToKKyAgICAgICAg
KEpTQzo6SklUOjpvcF9lbnRlcl9oYW5kbGVyR2VuZXJhdG9yKTogRGVsZXRlZC4KKyAgICAgICAg
KiBqaXQvSklUT3Bjb2RlczMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2Vu
dGVyKToKKyAgICAgICAgKiBqaXQvVGh1bmtHZW5lcmF0b3JzLmNwcDoKKyAgICAgICAgKEpTQzo6
cG9wVGh1bmtTdGFja1ByZXNlcnZlc0FuZEhhbmRsZUV4Y2VwdGlvbkdlbmVyYXRvcik6CisKIDIw
MjEtMDYtMDcgIFR1b21hcyBLYXJra2FpbmVuICA8dHVvbWFzLndlYmtpdEBhcHBsZS5jb20+CiAK
ICAgICAgICAgJHZtIHNob3VsZCBoYXZlIGEgZnVuY3Rpb24gZm9yIGNoZWNraW5nIGlmIHNlY3Vy
aXR5IGFzc2VydGlvbnMgYXJlIGVuYWJsZWQgc2ltaWxhciB0byAkdm0uYXNzZXJ0RW5hYmxlZApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1i
bGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0
cmFjdE1hY3JvQXNzZW1ibGVyLmgJKHJldmlzaW9uIDI3ODU2MikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xMDAzLDYgKzEwMDMsNyBAQCBwdWJsaWM6CiAKICAgICBBTFdBWVNfSU5MSU5FIHZvaWQg
dGFnUmV0dXJuQWRkcmVzcygpIHsgfQogICAgIEFMV0FZU19JTkxJTkUgdm9pZCB1bnRhZ1JldHVy
bkFkZHJlc3MoUmVnaXN0ZXJJRCA9IFJlZ2lzdGVySUQ6OkludmFsaWRHUFJSZWcpIHsgfQorICAg
IEFMV0FZU19JTkxJTkUgdm9pZCB1bnRhZ1JldHVybkFkZHJlc3NXaXRob3V0RXh0cmFWYWxpZGF0
aW9uKCkgeyB9CiAKICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgdGFnUHRyKFB0clRhZywgUmVnaXN0
ZXJJRCkgeyB9CiAgICAgQUxXQVlTX0lOTElORSB2b2lkIHRhZ1B0cihSZWdpc3RlcklELCBSZWdp
c3RlcklEKSB7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9B
c3NlbWJsZXJBUk02NEUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjRFLmgJKHJldmlzaW9uIDI3ODU2MikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NEUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNTQsMTAgKzU0LDE1IEBAIHB1YmxpYzoKIAogICAgIEFMV0FZU19JTkxJTkUg
dm9pZCB1bnRhZ1JldHVybkFkZHJlc3MoUmVnaXN0ZXJJRCBzY3JhdGNoID0gSW52YWxpZEdQUikK
ICAgICB7Ci0gICAgICAgIHVudGFnUHRyKEFSTTY0UmVnaXN0ZXJzOjpzcCwgQVJNNjRSZWdpc3Rl
cnM6OmxyKTsKKyAgICAgICAgdW50YWdSZXR1cm5BZGRyZXNzV2l0aG91dEV4dHJhVmFsaWRhdGlv
bigpOwogICAgICAgICB2YWxpZGF0ZVVudGFnZ2VkUHRyKEFSTTY0UmVnaXN0ZXJzOjpsciwgc2Ny
YXRjaCk7CiAgICAgfQogCisgICAgQUxXQVlTX0lOTElORSB2b2lkIHVudGFnUmV0dXJuQWRkcmVz
c1dpdGhvdXRFeHRyYVZhbGlkYXRpb24oKQorICAgIHsKKyAgICAgICAgdW50YWdQdHIoQVJNNjRS
ZWdpc3RlcnM6OnNwLCBBUk02NFJlZ2lzdGVyczo6bHIpOworICAgIH0KKwogICAgIEFMV0FZU19J
TkxJTkUgdm9pZCB0YWdQdHIoUHRyVGFnIHRhZywgUmVnaXN0ZXJJRCB0YXJnZXQpCiAgICAgewog
ICAgICAgICBhdXRvIHRhZ0dQUiA9IGdldENhY2hlZERhdGFUZW1wUmVnaXN0ZXJJREFuZEludmFs
aWRhdGUoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3Nl
bWJsZXJBUk12Ny5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvTWFjcm9Bc3NlbWJsZXJBUk12Ny5oCShyZXZpc2lvbiAyNzg1NjIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNdjcuaAkod29ya2luZyBjb3B5
KQpAQCAtMTc5NSw2ICsxNzk1LDIzIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGJyYW5jaEFk
ZDMyKGNvbmQsIGRlc3QsIGltbSwgZGVzdCk7CiAgICAgfQogCisgICAgSnVtcCBicmFuY2hBZGQz
MihSZXN1bHRDb25kaXRpb24gY29uZCwgVHJ1c3RlZEltbTMyIGltbSwgQWRkcmVzcyBkZXN0KQor
ICAgIHsKKyAgICAgICAgbG9hZDMyKGRlc3QsIGRhdGFUZW1wUmVnaXN0ZXIpOworCisgICAgICAg
IC8vIERvIHRoZSBhZGQuCisgICAgICAgIEFSTVRodW1iSW1tZWRpYXRlIGFybUltbSA9IEFSTVRo
dW1iSW1tZWRpYXRlOjptYWtlRW5jb2RlZEltbShpbW0ubV92YWx1ZSk7CisgICAgICAgIGlmIChh
cm1JbW0uaXNWYWxpZCgpKQorICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRkX1MoZGF0YVRlbXBS
ZWdpc3RlciwgZGF0YVRlbXBSZWdpc3RlciwgYXJtSW1tKTsKKyAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICBtb3ZlKGltbSwgYWRkcmVzc1RlbXBSZWdpc3Rlcik7CisgICAgICAgICAgICBtX2Fz
c2VtYmxlci5hZGRfUyhkYXRhVGVtcFJlZ2lzdGVyLCBkYXRhVGVtcFJlZ2lzdGVyLCBhZGRyZXNz
VGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgfQorCisgICAgICAgIHN0b3JlMzIoZGF0YVRlbXBSZWdp
c3RlciwgZGVzdCk7CisgICAgICAgIHJldHVybiBKdW1wKG1ha2VCcmFuY2goY29uZCkpOworICAg
IH0KKwogICAgIEp1bXAgYnJhbmNoQWRkMzIoUmVzdWx0Q29uZGl0aW9uIGNvbmQsIFRydXN0ZWRJ
bW0zMiBpbW0sIEFic29sdXRlQWRkcmVzcyBkZXN0KQogICAgIHsKICAgICAgICAgLy8gTW92ZSB0
aGUgaGlnaCBiaXRzIG9mIHRoZSBhZGRyZXNzIGludG8gYWRkcmVzc1RlbXBSZWdpc3RlciwKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJNSVBTLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2Vt
Ymxlck1JUFMuaAkocmV2aXNpb24gMjc4NTYyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9NYWNyb0Fzc2VtYmxlck1JUFMuaAkod29ya2luZyBjb3B5KQpAQCAtMjMxMCw2ICsy
MzEwLDExMSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBKdW1wKCk7CiAgICAgfQogCisgICAg
SnVtcCBicmFuY2hBZGQzMihSZXN1bHRDb25kaXRpb24gY29uZCwgVHJ1c3RlZEltbTMyIGltbSwg
SW1wbGljaXRBZGRyZXNzIGRlc3RBZGRyZXNzKQorICAgIHsKKyAgICAgICAgYm9vbCB1c2VBZGRy
VGVtcFJlZ2lzdGVyID0gIShkZXN0QWRkcmVzcy5vZmZzZXQgPj0gLTMyNzY4ICYmIGRlc3RBZGRy
ZXNzLm9mZnNldCA8PSAzMjc2NworICAgICAgICAgICAgJiYgIW1fZml4ZWRXaWR0aCk7CisKKyAg
ICAgICAgaWYgKHVzZUFkZHJUZW1wUmVnaXN0ZXIpIHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVy
Lmx1aShhZGRyVGVtcFJlZ2lzdGVyLCAoZGVzdEFkZHJlc3Mub2Zmc2V0ICsgMHg4MDAwKSA+PiAx
Nik7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGR1KGFkZHJUZW1wUmVnaXN0ZXIsIGFkZHJU
ZW1wUmVnaXN0ZXIsIGRlc3RBZGRyZXNzLmJhc2UpOworICAgICAgICB9CisKKyAgICAgICAgYXV0
byBsb2FkRGVzdCA9IFsmXSAoUmVnaXN0ZXJJRCBkZXN0KSB7CisgICAgICAgICAgICBpZiAodXNl
QWRkclRlbXBSZWdpc3RlcikKKyAgICAgICAgICAgICAgICBtX2Fzc2VtYmxlci5sdyhkZXN0LCBh
ZGRyVGVtcFJlZ2lzdGVyLCBkZXN0QWRkcmVzcy5vZmZzZXQpOworICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgIG1fYXNzZW1ibGVyLmx3KGRlc3QsIGRlc3RBZGRyZXNzLmJhc2UsIGRl
c3RBZGRyZXNzLm9mZnNldCk7CisgICAgICAgIH07CisKKyAgICAgICAgYXV0byBzdG9yZURlc3Qg
PSBbJl0gKFJlZ2lzdGVySUQgc3JjKSB7CisgICAgICAgICAgICBpZiAodXNlQWRkclRlbXBSZWdp
c3RlcikKKyAgICAgICAgICAgICAgICBtX2Fzc2VtYmxlci5zdyhzcmMsIGFkZHJUZW1wUmVnaXN0
ZXIsIGRlc3RBZGRyZXNzLm9mZnNldCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgbV9hc3NlbWJsZXIuc3coc3JjLCBkZXN0QWRkcmVzcy5iYXNlLCBkZXN0QWRkcmVzcy5vZmZz
ZXQpOworICAgICAgICB9OworCisgICAgICAgIEFTU0VSVCgoY29uZCA9PSBPdmVyZmxvdykgfHwg
KGNvbmQgPT0gU2lnbmVkKSB8fCAoY29uZCA9PSBQb3NpdGl2ZU9yWmVybykgfHwgKGNvbmQgPT0g
WmVybykgfHwgKGNvbmQgPT0gTm9uWmVybykpOworICAgICAgICBpZiAoY29uZCA9PSBPdmVyZmxv
dykgeworICAgICAgICAgICAgaWYgKG1fZml4ZWRXaWR0aCkgeworICAgICAgICAgICAgICAgIC8q
CisgICAgICAgICAgICAgICAgICAgIGxvYWQgICAgZGVzdCwgZGF0YVRlbXAKKyAgICAgICAgICAg
ICAgICAgICAgbW92ZSAgICBpbW0sIGltbVRlbXAKKyAgICAgICAgICAgICAgICAgICAgeG9yICAg
ICBjbXBUZW1wLCBkYXRhVGVtcCwgaW1tVGVtcAorICAgICAgICAgICAgICAgICAgICBhZGR1ICAg
IGRhdGFUZW1wLCBkYXRhVGVtcCwgaW1tVGVtcAorICAgICAgICAgICAgICAgICAgICBzdG9yZSAg
IGRhdGFUZW1wLCBkZXN0CisgICAgICAgICAgICAgICAgICAgIGJsdHogICAgY21wVGVtcCwgTm9f
b3ZlcmZsb3cgICAgIyBkaWZmIHNpZ24gYml0IC0+IG5vIG92ZXJmbG93CisgICAgICAgICAgICAg
ICAgICAgIHhvciAgICAgY21wVGVtcCwgZGF0YVRlbXAsIGltbVRlbXAKKyAgICAgICAgICAgICAg
ICAgICAgYmdleiAgICBjbXBUZW1wLCBOb19vdmVyZmxvdyAgICAjIHNhbWUgc2lnbiBiaWcgLT4g
bm8gb3ZlcmZsb3cKKyAgICAgICAgICAgICAgICAgICAgbm9wCisgICAgICAgICAgICAgICAgICAg
IGIgICAgICAgT3ZlcmZsb3cKKyAgICAgICAgICAgICAgICAgICAgbm9wCisgICAgICAgICAgICAg
ICAgICAgIGIgICAgICAgTm9fb3ZlcmZsb3cKKyAgICAgICAgICAgICAgICAgICAgbm9wCisgICAg
ICAgICAgICAgICAgICAgIG5vcAorICAgICAgICAgICAgICAgICAgICBub3AKKyAgICAgICAgICAg
ICAgICBOb19vdmVyZmxvdzoKKyAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgIGxv
YWREZXN0KGRhdGFUZW1wUmVnaXN0ZXIpOworICAgICAgICAgICAgICAgIG1vdmUoaW1tLCBpbW1U
ZW1wUmVnaXN0ZXIpOworICAgICAgICAgICAgICAgIG1fYXNzZW1ibGVyLnhvckluc24oY21wVGVt
cFJlZ2lzdGVyLCBkYXRhVGVtcFJlZ2lzdGVyLCBpbW1UZW1wUmVnaXN0ZXIpOworICAgICAgICAg
ICAgICAgIG1fYXNzZW1ibGVyLmFkZHUoZGF0YVRlbXBSZWdpc3RlciwgZGF0YVRlbXBSZWdpc3Rl
ciwgaW1tVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgICAgICAgICBzdG9yZURlc3QoZGF0YVRlbXBS
ZWdpc3Rlcik7CisgICAgICAgICAgICAgICAgbV9hc3NlbWJsZXIuYmx0eihjbXBUZW1wUmVnaXN0
ZXIsIDkpOworICAgICAgICAgICAgICAgIG1fYXNzZW1ibGVyLnhvckluc24oY21wVGVtcFJlZ2lz
dGVyLCBkYXRhVGVtcFJlZ2lzdGVyLCBpbW1UZW1wUmVnaXN0ZXIpOworICAgICAgICAgICAgICAg
IG1fYXNzZW1ibGVyLmJnZXooY21wVGVtcFJlZ2lzdGVyLCA3KTsKKyAgICAgICAgICAgICAgICBt
X2Fzc2VtYmxlci5ub3AoKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
bG9hZERlc3QoZGF0YVRlbXBSZWdpc3Rlcik7CisgICAgICAgICAgICAgICAgaWYgKGltbS5tX3Zh
bHVlID49IDAgJiYgaW1tLm1fdmFsdWUgIDw9IDMyNzY3KSB7CisgICAgICAgICAgICAgICAgICAg
IG1vdmUoZGF0YVRlbXBSZWdpc3RlciwgY21wVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgICAgICAg
ICAgICAgbV9hc3NlbWJsZXIuYWRkaXUoZGF0YVRlbXBSZWdpc3RlciwgZGF0YVRlbXBSZWdpc3Rl
ciwgaW1tLm1fdmFsdWUpOworICAgICAgICAgICAgICAgICAgICBtX2Fzc2VtYmxlci5ibHR6KGNt
cFRlbXBSZWdpc3RlciwgOSk7CisgICAgICAgICAgICAgICAgICAgIHN0b3JlRGVzdChkYXRhVGVt
cFJlZ2lzdGVyKTsKKyAgICAgICAgICAgICAgICAgICAgbV9hc3NlbWJsZXIuYmdleihkYXRhVGVt
cFJlZ2lzdGVyLCA3KTsKKyAgICAgICAgICAgICAgICAgICAgbV9hc3NlbWJsZXIubm9wKCk7Cisg
ICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpbW0ubV92YWx1ZSA+PSAtMzI3NjggJiYgaW1tLm1f
dmFsdWUgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgIG1vdmUoZGF0YVRlbXBSZWdpc3Rlciwg
Y21wVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRkaXUo
ZGF0YVRlbXBSZWdpc3RlciwgZGF0YVRlbXBSZWdpc3RlciwgaW1tLm1fdmFsdWUpOworICAgICAg
ICAgICAgICAgICAgICBtX2Fzc2VtYmxlci5iZ2V6KGNtcFRlbXBSZWdpc3RlciwgOSk7CisgICAg
ICAgICAgICAgICAgICAgIHN0b3JlRGVzdChkYXRhVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgICAg
ICAgICAgICAgbV9hc3NlbWJsZXIuYmx0eihjbXBUZW1wUmVnaXN0ZXIsIDcpOworICAgICAgICAg
ICAgICAgICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKKyAgICAgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgICAgICBtb3ZlKGltbSwgaW1tVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAg
ICAgICAgICAgICAgbV9hc3NlbWJsZXIueG9ySW5zbihjbXBUZW1wUmVnaXN0ZXIsIGRhdGFUZW1w
UmVnaXN0ZXIsIGltbVRlbXBSZWdpc3Rlcik7CisgICAgICAgICAgICAgICAgICAgIG1fYXNzZW1i
bGVyLmFkZHUoZGF0YVRlbXBSZWdpc3RlciwgZGF0YVRlbXBSZWdpc3RlciwgaW1tVGVtcFJlZ2lz
dGVyKTsKKyAgICAgICAgICAgICAgICAgICAgbV9hc3NlbWJsZXIuYmx0eihjbXBUZW1wUmVnaXN0
ZXIsIDEwKTsKKyAgICAgICAgICAgICAgICAgICAgc3RvcmVEZXN0KGRhdGFUZW1wUmVnaXN0ZXIp
OworICAgICAgICAgICAgICAgICAgICBtX2Fzc2VtYmxlci54b3JJbnNuKGNtcFRlbXBSZWdpc3Rl
ciwgZGF0YVRlbXBSZWdpc3RlciwgaW1tVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgICAgICAgICAg
ICAgbV9hc3NlbWJsZXIuYmdleihjbXBUZW1wUmVnaXN0ZXIsIDcpOworICAgICAgICAgICAgICAg
ICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgICAgICByZXR1cm4ganVtcCgpOworICAgICAgICB9CisgICAgICAgIG1vdmUoaW1t
LCBpbW1UZW1wUmVnaXN0ZXIpOworICAgICAgICBsb2FkRGVzdChkYXRhVGVtcFJlZ2lzdGVyKTsK
KyAgICAgICAgYWRkMzIoaW1tVGVtcFJlZ2lzdGVyLCBkYXRhVGVtcFJlZ2lzdGVyKTsKKyAgICAg
ICAgc3RvcmVEZXN0KGRhdGFUZW1wUmVnaXN0ZXIpOworICAgICAgICBpZiAoY29uZCA9PSBTaWdu
ZWQpIHsKKyAgICAgICAgICAgIC8vIENoZWNrIGlmIGRlc3QgaXMgbmVnYXRpdmUuCisgICAgICAg
ICAgICBtX2Fzc2VtYmxlci5zbHQoY21wVGVtcFJlZ2lzdGVyLCBkYXRhVGVtcFJlZ2lzdGVyLCBN
SVBTUmVnaXN0ZXJzOjp6ZXJvKTsKKyAgICAgICAgICAgIHJldHVybiBicmFuY2hOb3RFcXVhbChj
bXBUZW1wUmVnaXN0ZXIsIE1JUFNSZWdpc3RlcnM6Onplcm8pOworICAgICAgICB9CisgICAgICAg
IGlmIChjb25kID09IFBvc2l0aXZlT3JaZXJvKSB7CisgICAgICAgICAgICAvLyBDaGVjayBpZiBk
ZXN0IGlzIG5vdCBuZWdhdGl2ZS4KKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnNsdChjbXBUZW1w
UmVnaXN0ZXIsIGRhdGFUZW1wUmVnaXN0ZXIsIE1JUFNSZWdpc3RlcnM6Onplcm8pOworICAgICAg
ICAgICAgcmV0dXJuIGJyYW5jaEVxdWFsKGNtcFRlbXBSZWdpc3RlciwgTUlQU1JlZ2lzdGVyczo6
emVybyk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNvbmQgPT0gWmVybykKKyAgICAgICAgICAg
IHJldHVybiBicmFuY2hFcXVhbChkYXRhVGVtcFJlZ2lzdGVyLCBNSVBTUmVnaXN0ZXJzOjp6ZXJv
KTsKKyAgICAgICAgaWYgKGNvbmQgPT0gTm9uWmVybykKKyAgICAgICAgICAgIHJldHVybiBicmFu
Y2hOb3RFcXVhbChkYXRhVGVtcFJlZ2lzdGVyLCBNSVBTUmVnaXN0ZXJzOjp6ZXJvKTsKKyAgICAg
ICAgQVNTRVJUKDApOworICAgICAgICByZXR1cm4gSnVtcCgpOworICAgIH0KKwogICAgIEp1bXAg
YnJhbmNoTXVsMzIoUmVzdWx0Q29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgc3JjMSwgUmVnaXN0
ZXJJRCBzcmMyLCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewogICAgICAgICBBU1NFUlQoKGNvbmQg
PT0gT3ZlcmZsb3cpIHx8IChjb25kID09IFNpZ25lZCkgfHwgKGNvbmQgPT0gWmVybykgfHwgKGNv
bmQgPT0gTm9uWmVybykpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nv
ZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlQmxvY2suaAkocmV2aXNpb24gMjc4NTYyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjksNyArMTY5LDEwIEBAIHB1
YmxpYzoKICAgICB1bnNpZ25lZCBudW1UbXBzKCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZENv
ZGUtPmhhc0NoZWNrcG9pbnRzKCkgKiBtYXhOdW1DaGVja3BvaW50VG1wczsgfQogCiAgICAgdW5z
aWduZWQqIGFkZHJlc3NPZk51bVBhcmFtZXRlcnMoKSB7IHJldHVybiAmbV9udW1QYXJhbWV0ZXJz
OyB9CisKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTnVtQ2FsbGVlTG9jYWxzKCkgeyBy
ZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9udW1DYWxsZWVMb2NhbHMpOyB9CiAg
ICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZk51bVBhcmFtZXRlcnMoKSB7IHJldHVybiBPQkpF
Q1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX251bVBhcmFtZXRlcnMpOyB9CisgICAgc3RhdGljIHB0
cmRpZmZfdCBvZmZzZXRPZk51bVZhcnMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJs
b2NrLCBtX251bVZhcnMpOyB9CiAKICAgICBDb2RlQmxvY2sqIGFsdGVybmF0aXZlKCkgY29uc3Qg
eyByZXR1cm4gc3RhdGljX2Nhc3Q8Q29kZUJsb2NrKj4obV9hbHRlcm5hdGl2ZS5nZXQoKSk7IH0K
ICAgICB2b2lkIHNldEFsdGVybmF0aXZlKFZNJiwgQ29kZUJsb2NrKik7CkBAIC00ODYsNiArNDg5
LDggQEAgcHVibGljOgogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAorICAgIHN0YXRp
YyBwdHJkaWZmX3Qgb2Zmc2V0T2ZBcmd1bWVudFZhbHVlUHJvZmlsZXMoKSB7IHJldHVybiBPQkpF
Q1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2FyZ3VtZW50VmFsdWVQcm9maWxlcyk7IH0KKwogICAg
IFZhbHVlUHJvZmlsZSYgdmFsdWVQcm9maWxlRm9yQnl0ZWNvZGVJbmRleChCeXRlY29kZUluZGV4
KTsKICAgICBTcGVjdWxhdGVkVHlwZSB2YWx1ZVByb2ZpbGVQcmVkaWN0aW9uRm9yQnl0ZWNvZGVJ
bmRleChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBCeXRlY29kZUluZGV4KTsKIApAQCAtODE5
LDcgKzgyNCw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBib29sIHdhc0NvbXBpbGVkV2l0aERl
YnVnZ2luZ09wY29kZXMoKSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+d2FzQ29tcGls
ZWRXaXRoRGVidWdnaW5nT3Bjb2RlcygpOyB9Ci0gICAgCisKICAgICAvLyBUaGlzIGlzIGludGVu
dGlvbmFsbHkgcHVibGljOyBpdCdzIHRoZSByZXNwb25zaWJpbGl0eSBvZiBhbnlvbmUgZG9pbmcg
YW55CiAgICAgLy8gb2YgdGhlIGZvbGxvd2luZyB0byBob2xkIHRoZSBsb2NrOgogICAgIC8vCkBA
IC05MDYsNiArOTExLDcgQEAgcHVibGljOgogCiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRP
Zk1ldGFkYXRhVGFibGUoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX21l
dGFkYXRhKTsgfQogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZJbnN0cnVjdGlvbnNSYXdQ
b2ludGVyKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9pbnN0cnVjdGlv
bnNSYXdQb2ludGVyKTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZTaG91bGRBbHdh
eXNCZUlubGluZWQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX3Nob3Vs
ZEFsd2F5c0JlSW5saW5lZCk7IH0KIAogICAgIGJvb2wgbG9vcEhpbnRzQXJlRWxpZ2libGVGb3JG
dXp6aW5nRWFybHlSZXR1cm4oKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvQXNzZW1ibHlIZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkocmV2aXNpb24gMjc4NTYyKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMzI2LDYg
KzMyNiwxMSBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVChjb2RlQmxvY2spOwogCiAgICAgICAg
IGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiBjYWxsZWVTYXZlcyA9IGNvZGVCbG9jay0+Y2Fs
bGVlU2F2ZVJlZ2lzdGVycygpOworICAgICAgICBlbWl0U2F2ZUNhbGxlZVNhdmVzRm9yKGNhbGxl
ZVNhdmVzKTsKKyAgICB9CisKKyAgICB2b2lkIGVtaXRTYXZlQ2FsbGVlU2F2ZXNGb3IoY29uc3Qg
UmVnaXN0ZXJBdE9mZnNldExpc3QqIGNhbGxlZVNhdmVzKQorICAgIHsKICAgICAgICAgUmVnaXN0
ZXJTZXQgZG9udFNhdmVSZWdpc3RlcnMgPSBSZWdpc3RlclNldChSZWdpc3RlclNldDo6c3RhY2tS
ZWdpc3RlcnMoKSwgUmVnaXN0ZXJTZXQ6OmFsbEZQUnMoKSk7CiAgICAgICAgIHVuc2lnbmVkIHJl
Z2lzdGVyQ291bnQgPSBjYWxsZWVTYXZlcy0+c2l6ZSgpOwogCkBAIC0zOTksNiArNDA0LDExIEBA
IHB1YmxpYzoKICAgICAgICAgZW1pdFNhdmVDYWxsZWVTYXZlc0Zvcihjb2RlQmxvY2soKSk7CiAg
ICAgfQogCisgICAgdm9pZCBlbWl0U2F2ZUNhbGxlZVNhdmVzRm9yQmFzZWxpbmVKSVQoKQorICAg
IHsKKyAgICAgICAgZW1pdFNhdmVDYWxsZWVTYXZlc0ZvcigmUmVnaXN0ZXJBdE9mZnNldExpc3Q6
OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOworICAgIH0KKwogICAgIHZvaWQg
ZW1pdFNhdmVUaGVuTWF0ZXJpYWxpemVUYWdSZWdpc3RlcnMoKQogICAgIHsKICNpZiBVU0UoSlNW
QUxVRTY0KQpAQCAtNDE3LDYgKzQyNywxMSBAQCBwdWJsaWM6CiAgICAgICAgIGVtaXRSZXN0b3Jl
Q2FsbGVlU2F2ZXNGb3IoY29kZUJsb2NrKCkpOwogICAgIH0KIAorICAgIHZvaWQgZW1pdFJlc3Rv
cmVDYWxsZWVTYXZlc0ZvckJhc2VsaW5lSklUKCkKKyAgICB7CisgICAgICAgIGVtaXRSZXN0b3Jl
Q2FsbGVlU2F2ZXNGb3IoJlJlZ2lzdGVyQXRPZmZzZXRMaXN0OjpsbGludEJhc2VsaW5lQ2FsbGVl
U2F2ZVJlZ2lzdGVycygpKTsKKyAgICB9CisKICAgICB2b2lkIGVtaXRSZXN0b3JlU2F2ZWRUYWdS
ZWdpc3RlcnMoKQogICAgIHsKICNpZiBVU0UoSlNWQUxVRTY0KQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklULmNwcAkocmV2aXNpb24gMjc4NTYyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NSw2ICs1NSwyMCBAQCBuYW1lc3BhY2Ug
SklUSW50ZXJuYWwgewogc3RhdGljIGNvbnN0ZXhwciBjb25zdCBib29sIHZlcmJvc2UgPSBmYWxz
ZTsKIH0KIAorI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQorI2lmIENQVShBUk02NCkgfHwg
KENQVShYODZfNjQpICYmICFPUyhXSU5ET1dTKSkKKy8vIFRoZXNlIGFyZSBzdXBwb3J0ZWQgcG9y
dHMuCisjZWxzZQorLy8gVGhpcyBpcyBhIGNvdXJ0ZXN5IHJlbWluZGVyIChhbmQgd2FybmluZykg
dGhhdCB0aGUgaW1wbGVtZW50YXRpb24gb2YgRVhUUkFfQ1RJX1RIVU5LUyBjYW4KKy8vIHVzZSB1
cCB0byA2IGFyZ3VtZW50IHJlZ2lzdGVycyBhbmQvb3IgNi83IHRlbXAgcmVnaXN0ZXJzLCBhbmQg
bWFrZSB1c2Ugb2YgQVJNNjQgbGlrZQorLy8gZmVhdHVyZXMuIEhlbmNlLCBpdCBtYXkgbm90IHdv
cmsgZm9yIG1hbnkgb3RoZXIgcG9ydHMgd2l0aG91dCBzaWduaWZpY2FudCB3b3JrLiBJZiB5b3UK
Ky8vIHBsYW4gb24gYWRkaW5nIEVYVFJBX0NUSV9USFVOS1Mgc3VwcG9ydCBmb3IgeW91ciBwb3J0
LCBwbGVhc2UgcmVtZW1iZXIgdG8gc2VhcmNoIHRoZQorLy8gRVhUUkFfQ1RJX1RIVU5LUyBjb2Rl
IGZvciBDUFUoQVJNNjQpIGFuZCBDUFUoWDg2XzY0KSBjb25kaXRpb25hbCBjb2RlLCBhbmQgYWRk
IHN1cHBvcnQKKy8vIGZvciB5b3VyIHBvcnQgdGhlcmUgYXMgd2VsbC4KKyNlcnJvciAidW5zdXBw
b3J0ZWQgYXJjaGl0ZWN0dXJlIgorI2VuZGlmCisjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9U
SFVOS1MpCisKIFNlY29uZHMgdG90YWxCYXNlbGluZUNvbXBpbGVUaW1lOwogU2Vjb25kcyB0b3Rh
bERGR0NvbXBpbGVUaW1lOwogU2Vjb25kcyB0b3RhbEZUTENvbXBpbGVUaW1lOwpAQCAtODMsNyAr
OTcsNyBAQCBKSVQ6On5KSVQoKQogewogfQogCi0jaWYgRU5BQkxFKERGR19KSVQpCisjaWYgRU5B
QkxFKERGR19KSVQpICYmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIHZvaWQgSklUOjplbWl0
RW50ZXJPcHRpbWl6YXRpb25DaGVjaygpCiB7CiAgICAgaWYgKCFjYW5CZU9wdGltaXplZCgpKQpA
QCAtMTAxLDcgKzExNSw3IEBAIHZvaWQgSklUOjplbWl0RW50ZXJPcHRpbWl6YXRpb25DaGVjaygp
CiAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIp
OwogICAgIHNraXBPcHRpbWl6ZS5saW5rKHRoaXMpOwogfQotI2VuZGlmCisjZW5kaWYgLy8gRU5B
QkxFKERGR19KSVQpICYmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykoCiAKIHZvaWQgSklUOjpl
bWl0Tm90aWZ5V3JpdGUoV2F0Y2hwb2ludFNldCogc2V0KQogewpAQCAtNjgyLDYgKzY5NiwzMiBA
QCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogI2VuZGlmCiB9CiAKK3N0YXRp
YyBpbmxpbmUgdW5zaWduZWQgcHJvbG9ndWVHZW5lcmF0b3JTZWxlY3Rvcihib29sIGRvZXNQcm9m
aWxpbmcsIGJvb2wgaXNDb25zdHJ1Y3RvciwgYm9vbCBoYXNIdWdlRnJhbWUpCit7CisgICAgcmV0
dXJuIGRvZXNQcm9maWxpbmcgPDwgMiB8IGlzQ29uc3RydWN0b3IgPDwgMSB8IGhhc0h1Z2VGcmFt
ZSA8PCAwOworfQorCisjZGVmaW5lIEZPUl9FQUNIX05PTl9QUk9GSUxJTkdfUFJPTE9HVUVfR0VO
RVJBVE9SKHYpIFwKKyAgICB2KCFkb2VzUHJvZmlsaW5nLCAhaXNDb25zdHJ1Y3RvciwgIWhhc0h1
Z2VGcmFtZSwgcHJvbG9ndWVHZW5lcmF0b3IwLCBhcml0eUZpeHVwX3Byb2xvZ3VlR2VuZXJhdG9y
MCkgXAorICAgIHYoIWRvZXNQcm9maWxpbmcsICFpc0NvbnN0cnVjdG9yLCAgaGFzSHVnZUZyYW1l
LCBwcm9sb2d1ZUdlbmVyYXRvcjEsIGFyaXR5Rml4dXBfcHJvbG9ndWVHZW5lcmF0b3IxKSBcCisg
ICAgdighZG9lc1Byb2ZpbGluZywgIGlzQ29uc3RydWN0b3IsICFoYXNIdWdlRnJhbWUsIHByb2xv
Z3VlR2VuZXJhdG9yMiwgYXJpdHlGaXh1cF9wcm9sb2d1ZUdlbmVyYXRvcjIpIFwKKyAgICB2KCFk
b2VzUHJvZmlsaW5nLCAgaXNDb25zdHJ1Y3RvciwgIGhhc0h1Z2VGcmFtZSwgcHJvbG9ndWVHZW5l
cmF0b3IzLCBhcml0eUZpeHVwX3Byb2xvZ3VlR2VuZXJhdG9yMykKKworI2lmIEVOQUJMRShERkdf
SklUKQorI2RlZmluZSBGT1JfRUFDSF9QUk9GSUxJTkdfUFJPTE9HVUVfR0VORVJBVE9SKHYpIFwK
KyAgICB2KCBkb2VzUHJvZmlsaW5nLCAhaXNDb25zdHJ1Y3RvciwgIWhhc0h1Z2VGcmFtZSwgcHJv
bG9ndWVHZW5lcmF0b3I0LCBhcml0eUZpeHVwX3Byb2xvZ3VlR2VuZXJhdG9yNCkgXAorICAgIHYo
IGRvZXNQcm9maWxpbmcsICFpc0NvbnN0cnVjdG9yLCAgaGFzSHVnZUZyYW1lLCBwcm9sb2d1ZUdl
bmVyYXRvcjUsIGFyaXR5Rml4dXBfcHJvbG9ndWVHZW5lcmF0b3I1KSBcCisgICAgdiggZG9lc1By
b2ZpbGluZywgIGlzQ29uc3RydWN0b3IsICFoYXNIdWdlRnJhbWUsIHByb2xvZ3VlR2VuZXJhdG9y
NiwgYXJpdHlGaXh1cF9wcm9sb2d1ZUdlbmVyYXRvcjYpIFwKKyAgICB2KCBkb2VzUHJvZmlsaW5n
LCAgaXNDb25zdHJ1Y3RvciwgIGhhc0h1Z2VGcmFtZSwgcHJvbG9ndWVHZW5lcmF0b3I3LCBhcml0
eUZpeHVwX3Byb2xvZ3VlR2VuZXJhdG9yNykKKworI2Vsc2UgLy8gbm90IEVOQUJMRShERkdfSklU
KQorI2RlZmluZSBGT1JfRUFDSF9QUk9GSUxJTkdfUFJPTE9HVUVfR0VORVJBVE9SKHYpCisjZW5k
aWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNkZWZpbmUgRk9SX0VBQ0hfUFJPTE9HVUVfR0VORVJB
VE9SKHYpIFwKKyAgICBGT1JfRUFDSF9OT05fUFJPRklMSU5HX1BST0xPR1VFX0dFTkVSQVRPUih2
KSBcCisgICAgRk9SX0VBQ0hfUFJPRklMSU5HX1BST0xPR1VFX0dFTkVSQVRPUih2KQorCiB2b2lk
IEpJVDo6Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluZyhKSVRDb21waWxhdGlvbkVmZm9y
dCBlZmZvcnQpCiB7CiAgICAgREZHOjpDYXBhYmlsaXR5TGV2ZWwgbGV2ZWwgPSBtX2NvZGVCbG9j
ay0+Y2FwYWJpbGl0eUxldmVsKCk7CkBAIC03NTAsNiArNzkwLDggQEAgdm9pZCBKSVQ6OmNvbXBp
bGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbgogICAgICAgICBub3AoKTsKIAogICAgIGVtaXRGdW5j
dGlvblByb2xvZ3VlKCk7CisKKyNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAgICAgZW1p
dFB1dFRvQ2FsbEZyYW1lSGVhZGVyKG1fY29kZUJsb2NrLCBDYWxsRnJhbWVTbG90Ojpjb2RlQmxv
Y2spOwogCiAgICAgTGFiZWwgYmVnaW5MYWJlbCh0aGlzKTsKQEAgLTc3MSwxMSArODEzLDEwIEBA
IHZvaWQgSklUOjpjb21waWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW4KICAgICBpZiAobV9jb2Rl
QmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlKSB7CiAgICAgICAgIEFTU0VSVCghbV9i
eXRlY29kZUluZGV4KTsKICAgICAgICAgaWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewotICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudCA9IDA7IGFyZ3VtZW50IDwgbV9jb2RlQmxv
Y2stPm51bVBhcmFtZXRlcnMoKTsgKythcmd1bWVudCkgewotICAgICAgICAgICAgICAgIC8vIElm
IHRoaXMgaXMgYSBjb25zdHJ1Y3RvciwgdGhlbiB3ZSB3YW50IHRvIHB1dCBpbiBhIGR1bW15IHBy
b2ZpbGluZyBzaXRlICh0bwotICAgICAgICAgICAgICAgIC8vIGtlZXAgdGhpbmdzIGNvbnNpc3Rl
bnQpIGJ1dCB3ZSBkb24ndCBhY3R1YWxseSB3YW50IHRvIHJlY29yZCB0aGUgZHVtbXkgdmFsdWUu
Ci0gICAgICAgICAgICAgICAgaWYgKG1fY29kZUJsb2NrLT5pc0NvbnN0cnVjdG9yKCkgJiYgIWFy
Z3VtZW50KQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIC8vIElm
IHRoaXMgaXMgYSBjb25zdHJ1Y3RvciwgdGhlbiB3ZSB3YW50IHRvIHB1dCBpbiBhIGR1bW15IHBy
b2ZpbGluZyBzaXRlICh0bworICAgICAgICAgICAgLy8ga2VlcCB0aGluZ3MgY29uc2lzdGVudCkg
YnV0IHdlIGRvbid0IGFjdHVhbGx5IHdhbnQgdG8gcmVjb3JkIHRoZSBkdW1teSB2YWx1ZS4KKyAg
ICAgICAgICAgIHVuc2lnbmVkIHN0YXJ0QXJndW1lbnQgPSBtX2NvZGVCbG9jay0+aXNDb25zdHJ1
Y3RvcigpID8gMSA6IDA7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0gc3Rh
cnRBcmd1bWVudDsgYXJndW1lbnQgPCBtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpOyArK2Fy
Z3VtZW50KSB7CiAgICAgICAgICAgICAgICAgaW50IG9mZnNldCA9IENhbGxGcmFtZTo6YXJndW1l
bnRPZmZzZXRJbmNsdWRpbmdUaGlzKGFyZ3VtZW50KSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9m
KFJlZ2lzdGVyKSk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAgICAgICAgICBKU1ZhbHVl
UmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwpAQCAtNzg5LDcgKzgzMCwzNCBA
QCB2b2lkIEpJVDo6Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemluCiAgICAgICAgICAgICB9
CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisjZWxzZSAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5L
UykKKyAgICBjb25zdGV4cHIgR1BSUmVnIGNvZGVCbG9ja0dQUiA9IHJlZ1Q3OworICAgIEFTU0VS
VCghbV9ieXRlY29kZUluZGV4KTsKKworICAgIGludCBmcmFtZVRvcE9mZnNldCA9IHN0YWNrUG9p
bnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpOworICAgIHVuc2ln
bmVkIG1heEZyYW1lU2l6ZSA9IC1mcmFtZVRvcE9mZnNldDsKKworICAgIGJvb2wgZG9lc1Byb2Zp
bGluZyA9IChtX2NvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUpICYmIHNob3Vs
ZEVtaXRQcm9maWxpbmcoKTsKKyAgICBib29sIGlzQ29uc3RydWN0b3IgPSBtX2NvZGVCbG9jay0+
aXNDb25zdHJ1Y3RvcigpOworICAgIGJvb2wgaGFzSHVnZUZyYW1lID0gbWF4RnJhbWVTaXplID4g
T3B0aW9uczo6cmVzZXJ2ZWRab25lU2l6ZSgpOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBUaHVu
a0dlbmVyYXRvciBnZW5lcmF0b3JzW10gPSB7CisjZGVmaW5lIFVTRV9QUk9MT0dVRV9HRU5FUkFU
T1IoZG9lc1Byb2ZpbGluZywgaXNDb25zdHJ1Y3RvciwgaGFzSHVnZUZyYW1lLCBuYW1lLCBhcml0
eUZpeHVwTmFtZSkgbmFtZSwKKyAgICAgICAgRk9SX0VBQ0hfUFJPTE9HVUVfR0VORVJBVE9SKFVT
RV9QUk9MT0dVRV9HRU5FUkFUT1IpCisjdW5kZWYgVVNFX1BST0xPR1VFX0dFTkVSQVRPUgorICAg
IH07CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBudW1iZXJPZkdlbmVyYXRvcnMgPSBz
aXplb2YoZ2VuZXJhdG9ycykgLyBzaXplb2YoZ2VuZXJhdG9yc1swXSk7CisKKyAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2spLCBjb2RlQmxvY2tHUFIpOworCisgICAgdW5zaWduZWQg
Z2VuZXJhdG9yU2VsZWN0b3IgPSBwcm9sb2d1ZUdlbmVyYXRvclNlbGVjdG9yKGRvZXNQcm9maWxp
bmcsIGlzQ29uc3RydWN0b3IsIGhhc0h1Z2VGcmFtZSk7CisgICAgUkVMRUFTRV9BU1NFUlQoZ2Vu
ZXJhdG9yU2VsZWN0b3IgPCBudW1iZXJPZkdlbmVyYXRvcnMpOworICAgIGF1dG8gZ2VuZXJhdG9y
ID0gZ2VuZXJhdG9yc1tnZW5lcmF0b3JTZWxlY3Rvcl07CisgICAgZW1pdE5ha2VkTmVhckNhbGwo
dm0oKS5nZXRDVElTdHViKGdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKKwor
ICAgIExhYmVsIGJvZHlMYWJlbCh0aGlzKTsKKyNlbmRpZiAvLyAhRU5BQkxFKEVYVFJBX0NUSV9U
SFVOS1MpCisKICAgICBSRUxFQVNFX0FTU0VSVCghSklUQ29kZTo6aXNKSVQobV9jb2RlQmxvY2st
PmppdFR5cGUoKSkpOwogCiAgICAgaWYgKFVOTElLRUxZKHNpemVNYXJrZXIpKQpAQCAtODAzLDE2
ICs4NzEsMTkgQEAgdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXppbgogICAg
ICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0RW5kT2ZTbG93UGF0aChsYWJlbCgpKTsKICAgICBtX3Bj
VG9Db2RlT3JpZ2luTWFwQnVpbGRlci5hcHBlbmRJdGVtKGxhYmVsKCksIFBDVG9Db2RlT3JpZ2lu
TWFwQnVpbGRlcjo6ZGVmYXVsdENvZGVPcmlnaW4oKSk7CiAKKyNpZiAhRU5BQkxFKEVYVFJBX0NU
SV9USFVOS1MpCiAgICAgc3RhY2tPdmVyZmxvdy5saW5rKHRoaXMpOwogICAgIG1fYnl0ZWNvZGVJ
bmRleCA9IEJ5dGVjb2RlSW5kZXgoMCk7CiAgICAgaWYgKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1Bh
dGhDYWxsKQogICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC1zdGF0aWNfY2FzdDxpbnQzMl90
PihtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCkpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7
CiAgICAgY2FsbE9wZXJhdGlvbldpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKG9wZXJh
dGlvblRocm93U3RhY2tPdmVyZmxvd0Vycm9yLCBtX2NvZGVCbG9jayk7CisjZW5kaWYKIAogICAg
IC8vIElmIHRoZSBudW1iZXIgb2YgcGFyYW1ldGVycyBpcyAxLCB3ZSBuZXZlciByZXF1aXJlIGFy
aXR5IGZpeHVwLgogICAgIGJvb2wgcmVxdWlyZXNBcml0eUZpeHVwID0gbV9jb2RlQmxvY2stPm1f
bnVtUGFyYW1ldGVycyAhPSAxOwogICAgIGlmIChtX2NvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBG
dW5jdGlvbkNvZGUgJiYgcmVxdWlyZXNBcml0eUZpeHVwKSB7CiAgICAgICAgIG1fYXJpdHlDaGVj
ayA9IGxhYmVsKCk7CisjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogICAgICAgICBzdG9y
ZTgoVHJ1c3RlZEltbTMyKDApLCAmbV9jb2RlQmxvY2stPm1fc2hvdWxkQWx3YXlzQmVJbmxpbmVk
KTsKICAgICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoKTsKICAgICAgICAgZW1pdFB1dFRvQ2Fs
bEZyYW1lSGVhZGVyKG1fY29kZUJsb2NrLCBDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spOwpAQCAt
ODMxLDE3ICs5MDIsNDIgQEAgdm9pZCBKSVQ6OmNvbXBpbGVBbmRMaW5rV2l0aG91dEZpbmFsaXpp
bgogICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwog
ICAgICAgICBlbWl0TmFrZWROZWFyQ2FsbChtX3ZtLT5nZXRDVElTdHViKGFyaXR5Rml4dXBHZW5l
cmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAKKyAgICAgICAganVtcChiZWdpbkxh
YmVsKTsKKworI2Vsc2UgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCisgICAgICAgIGVtaXRG
dW5jdGlvblByb2xvZ3VlKCk7CisKKyAgICAgICAgc3RhdGljX2Fzc2VydChjb2RlQmxvY2tHUFIg
PT0gcmVnVDcpOworICAgICAgICBBU1NFUlQoIW1fYnl0ZWNvZGVJbmRleCk7CisKKyAgICAgICAg
c3RhdGljIGNvbnN0ZXhwciBUaHVua0dlbmVyYXRvciBnZW5lcmF0b3JzW10gPSB7CisjZGVmaW5l
IFVTRV9QUk9MT0dVRV9HRU5FUkFUT1IoZG9lc1Byb2ZpbGluZywgaXNDb25zdHJ1Y3RvciwgaGFz
SHVnZUZyYW1lLCBuYW1lLCBhcml0eUZpeHVwTmFtZSkgYXJpdHlGaXh1cE5hbWUsCisgICAgICAg
ICAgICBGT1JfRUFDSF9QUk9MT0dVRV9HRU5FUkFUT1IoVVNFX1BST0xPR1VFX0dFTkVSQVRPUikK
KyN1bmRlZiBVU0VfUFJPTE9HVUVfR0VORVJBVE9SCisgICAgICAgIH07CisgICAgICAgIHN0YXRp
YyBjb25zdGV4cHIgdW5zaWduZWQgbnVtYmVyT2ZHZW5lcmF0b3JzID0gc2l6ZW9mKGdlbmVyYXRv
cnMpIC8gc2l6ZW9mKGdlbmVyYXRvcnNbMF0pOworCisgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jayksIGNvZGVCbG9ja0dQUik7CisKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQo
Z2VuZXJhdG9yU2VsZWN0b3IgPCBudW1iZXJPZkdlbmVyYXRvcnMpOworICAgICAgICBhdXRvIGdl
bmVyYXRvciA9IGdlbmVyYXRvcnNbZ2VuZXJhdG9yU2VsZWN0b3JdOworICAgICAgICBSRUxFQVNF
X0FTU0VSVChnZW5lcmF0b3IpOworICAgICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bSgpLmdldENU
SVN0dWIoZ2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOworCisgICAgICAgIGp1
bXAoYm9keUxhYmVsKTsKKyNlbmRpZiAvLyAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCisKICNp
ZiBBU1NFUlRfRU5BQkxFRAogICAgICAgICBtX2J5dGVjb2RlSW5kZXggPSBCeXRlY29kZUluZGV4
KCk7IC8vIFJlc2V0IHRoaXMsIGluIG9yZGVyIHRvIGd1YXJkIGl0cyB1c2Ugd2l0aCBBU1NFUlRz
LgogI2VuZGlmCi0KLSAgICAgICAganVtcChiZWdpbkxhYmVsKTsKICAgICB9IGVsc2UKICAgICAg
ICAgbV9hcml0eUNoZWNrID0gZW50cnlMYWJlbDsgLy8gTmV2ZXIgcmVxdWlyZSBhcml0eSBmaXh1
cC4KIAogICAgIEFTU0VSVChtX2ptcFRhYmxlLmlzRW1wdHkoKSk7CiAgICAgCisjaWYgIUVOQUJM
RShFWFRSQV9DVElfVEhVTktTKQogICAgIHByaXZhdGVDb21waWxlRXhjZXB0aW9uSGFuZGxlcnMo
KTsKKyNlbmRpZgogICAgIAogICAgIGlmIChtX2Rpc2Fzc2VtYmxlcikKICAgICAgICAgbV9kaXNh
c3NlbWJsZXItPnNldEVuZE9mQ29kZShsYWJlbCgpKTsKQEAgLTg1MSw2ICs5NDcsMjQxIEBAIHZv
aWQgSklUOjpjb21waWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW4KICAgICBsaW5rKCk7CiB9CiAK
KyNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gSklUOjpwcm9sb2d1ZUdlbmVyYXRvcihWTSYgdm0sIGJvb2wgZG9lc1Byb2Zp
bGluZywgYm9vbCBpc0NvbnN0cnVjdG9yLCBib29sIGhhc0h1Z2VGcmFtZSwgY29uc3QgY2hhciog
dGh1bmtOYW1lKQoreworICAgIC8vIFRoaXMgZnVuY3Rpb24gZ2VuZXJhdGVzIHRoZSBCYXNlbGlu
ZSBKSVQncyBwcm9sb2d1ZSBjb2RlLiBJdCBpcyBub3QgdXNlYWJsZSBieSBvdGhlciB0aWVycy4K
KyAgICBjb25zdGV4cHIgR1BSUmVnIGNvZGVCbG9ja0dQUiA9IHJlZ1Q3OyAvLyBpbmNvbWluZy4K
KworICAgIGNvbnN0ZXhwciBpbnQgdmlydHVhbFJlZ2lzdGVyU2l6ZSA9IHN0YXRpY19jYXN0PGlu
dD4oc2l6ZW9mKFJlZ2lzdGVyKSk7CisgICAgY29uc3RleHByIGludCB2aXJ0dWFsUmVnaXN0ZXJT
aXplU2hpZnQgPSAzOworICAgIHN0YXRpY19hc3NlcnQoKDEgPDwgdmlydHVhbFJlZ2lzdGVyU2l6
ZVNoaWZ0KSA9PSB2aXJ0dWFsUmVnaXN0ZXJTaXplKTsKKworICAgIHRhZ1JldHVybkFkZHJlc3Mo
KTsKKworICAgIHN0b3JlUHRyKGNvZGVCbG9ja0dQUiwgYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90
Ojpjb2RlQmxvY2spKTsKKworICAgIGxvYWQzMihBZGRyZXNzKGNvZGVCbG9ja0dQUiwgQ29kZUJs
b2NrOjpvZmZzZXRPZk51bUNhbGxlZUxvY2FscygpKSwgcmVnVDEpOworICAgIGlmIGNvbnN0ZXhw
ciAobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGxJblJlZ2lzdGVycykKKyAgICAgICAgYWRk
MzIoVHJ1c3RlZEltbTMyKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsSW5SZWdpc3RlcnMp
LCByZWdUMSk7CisgICAgbHNoaWZ0MzIoVHJ1c3RlZEltbTMyKHZpcnR1YWxSZWdpc3RlclNpemVT
aGlmdCksIHJlZ1QxKTsKKyAgICBuZWc2NChyZWdUMSk7CisjaWYgQVNTRVJUX0VOQUJMRUQKKyAg
ICBQcm9iZTo6RnVuY3Rpb24gcHJvYmVGdW5jdGlvbiA9IFtdIChQcm9iZTo6Q29udGV4dCYgY29u
dGV4dCkgeworICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNvbnRleHQuZnA8Q2FsbEZy
YW1lKj4oKS0+Y29kZUJsb2NrKCk7CisgICAgICAgIGludDY0X3QgZnJhbWVUb3BPZmZzZXQgPSBz
dGFja1BvaW50ZXJPZmZzZXRGb3IoY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3Rlcik7CisgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKGNvbnRleHQuZ3ByPGludHB0cl90PihyZWdUMSkgPT0gZnJhbWVU
b3BPZmZzZXQpOworICAgIH07CisgICAgcHJvYmUodGFnQ0Z1bmN0aW9uUHRyPEpJVFByb2JlUHRy
VGFnPihwcm9iZUZ1bmN0aW9uKSwgbnVsbHB0cik7CisjZW5kaWYKKworICAgIGFkZFB0cihjYWxs
RnJhbWVSZWdpc3RlciwgcmVnVDEpOworCisgICAgSnVtcExpc3Qgc3RhY2tPdmVyZmxvdzsKKyAg
ICBpZiAoaGFzSHVnZUZyYW1lKQorICAgICAgICBzdGFja092ZXJmbG93LmFwcGVuZChicmFuY2hQ
dHIoQWJvdmUsIHJlZ1QxLCBjYWxsRnJhbWVSZWdpc3RlcikpOworICAgIHN0YWNrT3ZlcmZsb3cu
YXBwZW5kKGJyYW5jaFB0cihBYm92ZSwgQWJzb2x1dGVBZGRyZXNzKHZtLmFkZHJlc3NPZlNvZnRT
dGFja0xpbWl0KCkpLCByZWdUMSkpOworCisgICAgLy8gV2UnbGwgYmUgaW1taW5lbnRseSByZXR1
cm5pbmcgd2l0aCBhIGByZXRhYmAgKEFSTTY0RSdzIHJldHVybiB3aXRoIGF1dGhlbnRpY2F0aW9u
CisgICAgLy8gdXNpbmcgdGhlIEIga2V5KSBpbiB0aGUgbm9ybWFsIHBhdGggKHNlZSBNYWNyb0Fz
c2VtYmxlckFSTTY0RSdzIGltcGxlbWVudGF0aW9uIG9mCisgICAgLy8gcmV0KCkpLCB3aGljaCB3
aWxsIGRvIHZhbGlkYXRpb24uIFNvLCBleHRyYSB2YWxpZGF0aW9uIGhlcmUgaXMgcmVkdW5kYW50
IGFuZCB1bm5lY2Vzc2FyeS4KKyAgICB1bnRhZ1JldHVybkFkZHJlc3NXaXRob3V0RXh0cmFWYWxp
ZGF0aW9uKCk7CisjaWYgQ1BVKFg4Nl82NCkKKyAgICBwb3AocmVnVDIpOyAvLyBTYXZlIHRoZSBy
ZXR1cm4gYWRkcmVzcy4KKyNlbmRpZgorICAgIG1vdmUocmVnVDEsIHN0YWNrUG9pbnRlclJlZ2lz
dGVyKTsKKyAgICB0YWdSZXR1cm5BZGRyZXNzKCk7CisgICAgY2hlY2tTdGFja1BvaW50ZXJBbGln
bm1lbnQoKTsKKyNpZiBDUFUoWDg2XzY0KQorICAgIHB1c2gocmVnVDIpOyAvLyBSZXN0b3JlIHRo
ZSByZXR1cm4gYWRkcmVzcy4KKyNlbmRpZgorCisgICAgZW1pdFNhdmVDYWxsZWVTYXZlc0ZvckJh
c2VsaW5lSklUKCk7CisgICAgZW1pdE1hdGVyaWFsaXplVGFnQ2hlY2tSZWdpc3RlcnMoKTsKKwor
ICAgIGlmIChkb2VzUHJvZmlsaW5nKSB7CisgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgYXJndW1l
bnRWYWx1ZVByb2ZpbGVHUFIgPSByZWdUNjsKKyAgICAgICAgY29uc3RleHByIEdQUlJlZyBudW1Q
YXJhbWV0ZXJzR1BSID0gcmVnVDU7CisgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgYXJndW1lbnRH
UFIgPSByZWdUNDsKKworICAgICAgICBsb2FkMzIoQWRkcmVzcyhjb2RlQmxvY2tHUFIsIENvZGVC
bG9jazo6b2Zmc2V0T2ZOdW1QYXJhbWV0ZXJzKCkpLCBudW1QYXJhbWV0ZXJzR1BSKTsKKyAgICAg
ICAgbG9hZFB0cihBZGRyZXNzKGNvZGVCbG9ja0dQUiwgQ29kZUJsb2NrOjpvZmZzZXRPZkFyZ3Vt
ZW50VmFsdWVQcm9maWxlcygpKSwgYXJndW1lbnRWYWx1ZVByb2ZpbGVHUFIpOworICAgICAgICBp
ZiAoaXNDb25zdHJ1Y3RvcikKKyAgICAgICAgICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc2l6ZW9m
KFZhbHVlUHJvZmlsZSkpLCBhcmd1bWVudFZhbHVlUHJvZmlsZUdQUik7CisKKyAgICAgICAgaW50
IHN0YXJ0QXJndW1lbnQgPSBDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQgKyAoaXNDb25zdHJ1
Y3RvciA/IDEgOiAwKTsKKyAgICAgICAgaW50IHN0YXJ0QXJndW1lbnRPZmZzZXQgPSBzdGFydEFy
Z3VtZW50ICogdmlydHVhbFJlZ2lzdGVyU2l6ZTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQo
c3RhcnRBcmd1bWVudE9mZnNldCksIGFyZ3VtZW50R1BSKTsKKworICAgICAgICBhZGQzMihUcnVz
dGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50PihDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQpKSwg
bnVtUGFyYW1ldGVyc0dQUik7CisgICAgICAgIGxzaGlmdDMyKFRydXN0ZWRJbW0zMih2aXJ0dWFs
UmVnaXN0ZXJTaXplU2hpZnQpLCBudW1QYXJhbWV0ZXJzR1BSKTsKKworICAgICAgICBhZGRQdHIo
Y2FsbEZyYW1lUmVnaXN0ZXIsIGFyZ3VtZW50R1BSKTsKKyAgICAgICAgYWRkUHRyKGNhbGxGcmFt
ZVJlZ2lzdGVyLCBudW1QYXJhbWV0ZXJzR1BSKTsKKworICAgICAgICBMYWJlbCBsb29wU3RhcnQo
dGhpcyk7CisgICAgICAgIEp1bXAgZG9uZSA9IGJyYW5jaFB0cihBYm92ZU9yRXF1YWwsIGFyZ3Vt
ZW50R1BSLCBudW1QYXJhbWV0ZXJzR1BSKTsKKyAgICAgICAgeworICAgICAgICAgICAgbG9hZDY0
KEFkZHJlc3MoYXJndW1lbnRHUFIpLCByZWdUMCk7CisgICAgICAgICAgICBzdG9yZTY0KHJlZ1Qw
LCBBZGRyZXNzKGFyZ3VtZW50VmFsdWVQcm9maWxlR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoVmFsdWVQ
cm9maWxlLCBtX2J1Y2tldHMpKSk7CisKKyAgICAgICAgICAgIC8vIFRoZSBhcmd1bWVudCBWYWx1
ZVByb2ZpbGVzIGFyZSBzdG9yZWQgaW4gYSBGaXhlZFZlY3Rvci4gSGVuY2UsIHRoZQorICAgICAg
ICAgICAgLy8gYWRkcmVzcyBvZiB0aGUgbmV4dCBwcm9maWxlIGNhbiBiZSB0cml2aWFsbHkgY29t
cHV0ZWQgd2l0aCBhbiBpbmNyZW1lbnQuCisgICAgICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbTMy
KHNpemVvZihWYWx1ZVByb2ZpbGUpKSwgYXJndW1lbnRWYWx1ZVByb2ZpbGVHUFIpOworICAgICAg
ICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMih2aXJ0dWFsUmVnaXN0ZXJTaXplKSwgYXJndW1lbnRH
UFIpOworICAgICAgICAgICAganVtcCgpLmxpbmtUbyhsb29wU3RhcnQsIHRoaXMpOworICAgICAg
ICB9CisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICB9CisgICAgcmV0KCk7CisKKyAgICBz
dGFja092ZXJmbG93LmxpbmsodGhpcyk7CisjaWYgQ1BVKFg4Nl82NCkKKyAgICBhZGRQdHIoVHJ1
c3RlZEltbTMyKDEgKiBzaXplb2YoQ1BVUmVnaXN0ZXIpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIp
OyAvLyBkaXNjYXJkIHJldHVybiBhZGRyZXNzLgorI2VuZGlmCisKKyAgICB1aW50MzJfdCBsb2Nh
dGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4KDApLmJpdHMoKTsKKyAgICBzdG9yZTMyKFRydXN0ZWRJ
bW0zMihsb2NhdGlvbkJpdHMpLCB0YWdGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMpKTsKKworICAgIGlmIChtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCkK
KyAgICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtc3RhdGljX2Nhc3Q8aW50MzJfdD4obWF4RnJh
bWVFeHRlbnRGb3JTbG93UGF0aENhbGwpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworCisgICAg
c2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUob3BlcmF0aW9uVGhyb3dTdGFja092ZXJmbG93RXJyb3Ip
Pihjb2RlQmxvY2tHUFIpOworICAgIHByZXBhcmVDYWxsT3BlcmF0aW9uKHZtKTsKKyAgICBNYWNy
b0Fzc2VtYmxlcjo6Q2FsbCBvcGVyYXRpb25DYWxsID0gY2FsbChPcGVyYXRpb25QdHJUYWcpOwor
ICAgIEp1bXAgaGFuZGxlRXhjZXB0aW9uSnVtcCA9IGp1bXAoKTsKKworICAgIGF1dG8gaGFuZGxl
ciA9IHZtLmdldENUSVN0dWIoaGFuZGxlRXhjZXB0aW9uV2l0aENhbGxGcmFtZVJvbGxiYWNrR2Vu
ZXJhdG9yKTsKKworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnRoaXMsIEdMT0JBTF9USFVO
S19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6RXh0cmFDVElUaHVuayk7CisgICAgcGF0Y2hCdWZm
ZXIubGluayhvcGVyYXRpb25DYWxsLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJh
dGlvblRocm93U3RhY2tPdmVyZmxvd0Vycm9yKSk7CisgICAgcGF0Y2hCdWZmZXIubGluayhoYW5k
bGVFeGNlcHRpb25KdW1wLCBDb2RlTG9jYXRpb25MYWJlbChoYW5kbGVyLnJldGFnZ2VkQ29kZTxO
b1B0clRhZz4oKSkpOworICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRU
aHVua1B0clRhZywgdGh1bmtOYW1lKTsKK30KKworc3RhdGljIGNvbnN0ZXhwciBib29sIGRvZXNQ
cm9maWxpbmcgPSB0cnVlOworc3RhdGljIGNvbnN0ZXhwciBib29sIGlzQ29uc3RydWN0b3IgPSB0
cnVlOworc3RhdGljIGNvbnN0ZXhwciBib29sIGhhc0h1Z2VGcmFtZSA9IHRydWU7CisKKyNkZWZp
bmUgREVGSU5FX1BST0dMT0dVRV9HRU5FUkFUT1IoZG9lc1Byb2ZpbGluZywgaXNDb25zdHJ1Y3Rv
ciwgaGFzSHVnZUZyYW1lLCBuYW1lLCBhcml0eUZpeHVwTmFtZSkgXAorICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpuYW1lKFZNJiB2bSkgXAorICAgIHsgXAor
ICAgICAgICBKSVQgaml0KHZtKTsgXAorICAgICAgICByZXR1cm4gaml0LnByb2xvZ3VlR2VuZXJh
dG9yKHZtLCBkb2VzUHJvZmlsaW5nLCBpc0NvbnN0cnVjdG9yLCBoYXNIdWdlRnJhbWUsICJCYXNl
bGluZTogIiAjbmFtZSk7IFwKKyAgICB9CisKK0ZPUl9FQUNIX1BST0xPR1VFX0dFTkVSQVRPUihE
RUZJTkVfUFJPR0xPR1VFX0dFTkVSQVRPUikKKyN1bmRlZiBERUZJTkVfUFJPR0xPR1VFX0dFTkVS
QVRPUgorCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6YXJpdHlG
aXh1cFByb2xvZ3VlR2VuZXJhdG9yKFZNJiB2bSwgYm9vbCBpc0NvbnN0cnVjdG9yLCBUaHVua0dl
bmVyYXRvciBub3JtYWxQcm9sb2d1ZUdlbmVyYXRvciwgY29uc3QgY2hhciogdGh1bmtOYW1lKQor
eworICAgIC8vIFRoaXMgZnVuY3Rpb24gZ2VuZXJhdGVzIHRoZSBCYXNlbGluZSBKSVQncyBwcm9s
b2d1ZSBjb2RlLiBJdCBpcyBub3QgdXNlYWJsZSBieSBvdGhlciB0aWVycy4KKyAgICBjb25zdGV4
cHIgR1BSUmVnIGNvZGVCbG9ja0dQUiA9IHJlZ1Q3OyAvLyBpbmNvbWluZy4KKyAgICBjb25zdGV4
cHIgR1BSUmVnIG51bVBhcmFtZXRlcnNHUFIgPSByZWdUNjsKKworICAgIHRhZ1JldHVybkFkZHJl
c3MoKTsKKyNpZiBDUFUoWDg2XzY0KQorICAgIHB1c2goZnJhbWVQb2ludGVyUmVnaXN0ZXIpOwor
I2VsaWYgQ1BVKEFSTTY0KQorICAgIHB1c2hQYWlyKGZyYW1lUG9pbnRlclJlZ2lzdGVyLCBsaW5r
UmVnaXN0ZXIpOworI2VuZGlmCisKKyAgICBzdG9yZVB0cihjb2RlQmxvY2tHUFIsIGFkZHJlc3NG
b3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSk7CisgICAgc3RvcmU4KFRydXN0ZWRJbW0zMigw
KSwgQWRkcmVzcyhjb2RlQmxvY2tHUFIsIENvZGVCbG9jazo6b2Zmc2V0T2ZTaG91bGRBbHdheXNC
ZUlubGluZWQoKSkpOworCisgICAgbG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpLCByZWdUMSk7CisgICAgbG9hZDMyKEFkZHJlc3MoY29k
ZUJsb2NrR1BSLCBDb2RlQmxvY2s6Om9mZnNldE9mTnVtUGFyYW1ldGVycygpKSwgbnVtUGFyYW1l
dGVyc0dQUik7CisgICAgSnVtcCBub0ZpeHVwTmVlZGVkID0gYnJhbmNoMzIoQWJvdmVPckVxdWFs
LCByZWdUMSwgbnVtUGFyYW1ldGVyc0dQUik7CisKKyAgICBpZiBjb25zdGV4cHIgKG1heEZyYW1l
RXh0ZW50Rm9yU2xvd1BhdGhDYWxsKQorICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC1zdGF0
aWNfY2FzdDxpbnQzMl90PihtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCkpLCBzdGFja1Bv
aW50ZXJSZWdpc3Rlcik7CisKKyAgICBsb2FkUHRyKEFkZHJlc3MoY29kZUJsb2NrR1BSLCBDb2Rl
QmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCBhcmd1bWVudEdQUjApOworCisgICAgc3Rh
dGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8ZGVjbHR5cGUob3BlcmF0aW9uQ29uc3RydWN0QXJpdHlD
aGVjayksIGRlY2x0eXBlKG9wZXJhdGlvbkNhbGxBcml0eUNoZWNrKT46OnZhbHVlKTsKKyAgICBz
ZXR1cEFyZ3VtZW50czxkZWNsdHlwZShvcGVyYXRpb25DYWxsQXJpdHlDaGVjayk+KGFyZ3VtZW50
R1BSMCk7CisgICAgcHJlcGFyZUNhbGxPcGVyYXRpb24odm0pOworCisgICAgTWFjcm9Bc3NlbWJs
ZXI6OkNhbGwgYXJpdHlDaGVja0NhbGwgPSBjYWxsKE9wZXJhdGlvblB0clRhZyk7CisgICAgSnVt
cCBoYW5kbGVFeGNlcHRpb25KdW1wID0gZW1pdE5vblBhdGNoYWJsZUV4Y2VwdGlvbkNoZWNrKHZt
KTsKKworICAgIGlmIGNvbnN0ZXhwciAobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpCisg
ICAgICAgIGFkZFB0cihUcnVzdGVkSW1tMzIobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwp
LCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgSnVtcCBuZWVkRml4dXAgPSBicmFuY2hUZXN0
MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpOworICAgIG5vRml4dXBOZWVkZWQubGluayh0aGlz
KTsKKworICAgIC8vIFRoZSBub3JtYWwgcHJvbG9ndWUgZXhwZWN0cyBpbmNvbWluZyBjb2RlQmxv
Y2tHUFIuCisgICAgbG9hZDY0KGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwg
Y29kZUJsb2NrR1BSKTsKKworI2lmIENQVShYODZfNjQpCisgICAgcG9wKGZyYW1lUG9pbnRlclJl
Z2lzdGVyKTsKKyNlbGlmIENQVShBUk02NCkKKyAgICBwb3BQYWlyKGZyYW1lUG9pbnRlclJlZ2lz
dGVyLCBsaW5rUmVnaXN0ZXIpOworI2VuZGlmCisgICAgdW50YWdSZXR1cm5BZGRyZXNzKCk7CisK
KyAgICBKdW1wTGlzdCBub3JtYWxQcm9sb2d1ZUp1bXA7CisgICAgbm9ybWFsUHJvbG9ndWVKdW1w
LmFwcGVuZChqdW1wKCkpOworCisgICAgbmVlZEZpeHVwLmxpbmsodGhpcyk7CisKKyAgICAvLyBS
ZXN0b3JlIHRoZSBzdGFjayBmb3IgYXJpdHkgZml4dXAsIGFuZCBwcmVzZXJ2ZSB0aGUgcmV0dXJu
IGFkZHJlc3MuCisgICAgLy8gYXJpdHlGaXh1cEdlbmVyYXRvciB3aWxsIGJlIHNoaWZ0aW5nIHRo
ZSBzdGFjay4gU28sIHdlIGNhbid0IHVzZSB0aGUgc3RhY2sgdG8KKyAgICAvLyBwcmVzZXJ2ZSB0
aGUgcmV0dXJuIGFkZHJlc3MuIFdlIGFsc28gY2FuJ3QgdXNlIGNhbGxlZSBzYXZlZCByZWdpc3Rl
cnMgYmVjYXVzZQorICAgIC8vIHRoZXkgaGF2ZW4ndCBiZWVuIHNhdmVkIHlldC4KKyAgICAvLwor
ICAgIC8vIGFyaXR5Rml4dXBHZW5lcmF0b3IgaXMgY2FyZWZ1bGx5IGNyYWZ0ZWQgdG8gb25seSB1
c2UgYTAsIGExLCBhMiwgdDMsIHQ0IGFuZCB0NS4KKyAgICAvLyBTbywgdGhlIHJldHVybiBhZGRy
ZXNzIGNhbiBiZSBwcmVzZXJ2ZWQgaW4gcmVnVDcuCisjaWYgQ1BVKFg4Nl82NCkKKyAgICBwb3Ao
YXJndW1lbnRHUFIyKTsgLy8gZGlzY2FyZC4KKyAgICBwb3AocmVnVDcpOyAvLyBzYXZlIHJldHVy
biBhZGRyZXNzLgorI2VsaWYgQ1BVKEFSTTY0KQorICAgIHBvcFBhaXIoZnJhbWVQb2ludGVyUmVn
aXN0ZXIsIGxpbmtSZWdpc3Rlcik7CisgICAgdW50YWdSZXR1cm5BZGRyZXNzKCk7CisgICAgbW92
ZShsaW5rUmVnaXN0ZXIsIHJlZ1Q3KTsKKyAgICBhdXRvIHJhbmRvbVJldHVybkFkZHJlc3NUYWcg
PSByYW5kb20oKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW0zMihyYW5kb21SZXR1cm5BZGRyZXNzVGFn
KSwgcmVnVDEpOworICAgIHRhZ1B0cihyZWdUMSwgcmVnVDcpOworI2VuZGlmCisgICAgbW92ZShy
ZXR1cm5WYWx1ZUdQUiwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICBDYWxsIGFyaXR5Rml4
dXBDYWxsID0gbmVhckNhbGwoKTsKKworI2lmIENQVShYODZfNjQpCisgICAgcHVzaChyZWdUNyk7
IC8vIHJlc3RvcmUgcmV0dXJuIGFkZHJlc3MuCisjZWxpZiBDUFUoQVJNNjQpCisgICAgbW92ZShU
cnVzdGVkSW1tMzIocmFuZG9tUmV0dXJuQWRkcmVzc1RhZyksIHJlZ1QxKTsKKyAgICB1bnRhZ1B0
cihyZWdUMSwgcmVnVDcpOworICAgIG1vdmUocmVnVDcsIGxpbmtSZWdpc3Rlcik7CisjZW5kaWYK
KworICAgIGxvYWQ2NChhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIGNvZGVC
bG9ja0dQUik7CisgICAgbm9ybWFsUHJvbG9ndWVKdW1wLmFwcGVuZChqdW1wKCkpOworCisgICAg
YXV0byBhcml0eUNoZWNrT3BlcmF0aW9uID0gaXNDb25zdHJ1Y3RvciA/IG9wZXJhdGlvbkNvbnN0
cnVjdEFyaXR5Q2hlY2sgOiBvcGVyYXRpb25DYWxsQXJpdHlDaGVjazsKKyAgICBhdXRvIGFyaXR5
Rml4dXAgPSB2bS5nZXRDVElTdHViKGFyaXR5Rml4dXBHZW5lcmF0b3IpOworICAgIGF1dG8gbm9y
bWFsUHJvbG9ndWUgPSB2bS5nZXRDVElTdHViKG5vcm1hbFByb2xvZ3VlR2VuZXJhdG9yKTsKKyAg
ICBhdXRvIGV4Y2VwdGlvbkhhbmRsZXIgPSB2bS5nZXRDVElTdHViKHBvcFRodW5rU3RhY2tQcmVz
ZXJ2ZXNBbmRIYW5kbGVFeGNlcHRpb25HZW5lcmF0b3IpOworCisgICAgTGlua0J1ZmZlciBwYXRj
aEJ1ZmZlcigqdGhpcywgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpFeHRy
YUNUSVRodW5rKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKGFyaXR5Q2hlY2tDYWxsLCBGdW5jdGlv
blB0cjxPcGVyYXRpb25QdHJUYWc+KGFyaXR5Q2hlY2tPcGVyYXRpb24pKTsKKyAgICBwYXRjaEJ1
ZmZlci5saW5rKGFyaXR5Rml4dXBDYWxsLCBGdW5jdGlvblB0cihhcml0eUZpeHVwLnJldGFnZ2Vk
Q29kZTxOb1B0clRhZz4oKSkpOworICAgIHBhdGNoQnVmZmVyLmxpbmsobm9ybWFsUHJvbG9ndWVK
dW1wLCBDb2RlTG9jYXRpb25MYWJlbChub3JtYWxQcm9sb2d1ZS5yZXRhZ2dlZENvZGU8Tm9QdHJU
YWc+KCkpKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKGhhbmRsZUV4Y2VwdGlvbkp1bXAsIENvZGVM
b2NhdGlvbkxhYmVsKGV4Y2VwdGlvbkhhbmRsZXIucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7
CisgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCB0
aHVua05hbWUpOworfQorCisjZGVmaW5lIERFRklORV9BUklUWV9QUk9HTE9HVUVfR0VORVJBVE9S
KGRvZXNQcm9maWxpbmcsIGlzQ29uc3RydWN0b3IsIGhhc0h1Z2VGcmFtZSwgbmFtZSwgYXJpdHlG
aXh1cE5hbWUpIFwKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjph
cml0eUZpeHVwTmFtZShWTSYgdm0pIFwKKyAgICB7IFwKKyAgICAgICAgSklUIGppdCh2bSk7IFwK
KyAgICAgICAgcmV0dXJuIGppdC5hcml0eUZpeHVwUHJvbG9ndWVHZW5lcmF0b3Iodm0sIGlzQ29u
c3RydWN0b3IsIG5hbWUsICJCYXNlbGluZTogIiAjYXJpdHlGaXh1cE5hbWUpOyBcCisgICAgfQor
CitGT1JfRUFDSF9QUk9MT0dVRV9HRU5FUkFUT1IoREVGSU5FX0FSSVRZX1BST0dMT0dVRV9HRU5F
UkFUT1IpCisjdW5kZWYgREVGSU5FX0FSSVRZX1BST0dMT0dVRV9HRU5FUkFUT1IKKworI2VuZGlm
IC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQorCiB2b2lkIEpJVDo6bGluaygpCiB7CiAgICAg
TGlua0J1ZmZlciYgcGF0Y2hCdWZmZXIgPSAqbV9saW5rQnVmZmVyOwpAQCAtMTA0Niw5ICsxMzc3
LDkgQEAgQ29tcGlsYXRpb25SZXN1bHQgSklUOjpwcml2YXRlQ29tcGlsZShKSQogICAgIHJldHVy
biBmaW5hbGl6ZU9uTWFpblRocmVhZCgpOwogfQogCisjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhV
TktTKQogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlRXhjZXB0aW9uSGFuZGxlcnMoKQogewotI2lm
ICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICBpZiAoIW1fZXhjZXB0aW9uQ2hlY2tzV2l0
aENhbGxGcmFtZVJvbGxiYWNrLmVtcHR5KCkpIHsKICAgICAgICAgbV9leGNlcHRpb25DaGVja3NX
aXRoQ2FsbEZyYW1lUm9sbGJhY2subGluayh0aGlzKTsKIApAQCAtMTA3Myw4ICsxNDA0LDggQEAg
dm9pZCBKSVQ6OnByaXZhdGVDb21waWxlRXhjZXB0aW9uSGFuZGxlcgogICAgICAgICBtX2ZhckNh
bGxzLmFwcGVuZChGYXJDYWxsUmVjb3JkKGNhbGwoT3BlcmF0aW9uUHRyVGFnKSwgRnVuY3Rpb25Q
dHI8T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25Mb29rdXBFeGNlcHRpb25IYW5kbGVyKSkpOwog
ICAgICAgICBqdW1wVG9FeGNlcHRpb25IYW5kbGVyKHZtKCkpOwogICAgIH0KLSNlbmRpZiAvLyBF
TkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIH0KKyNlbmRpZiAvLyAhRU5BQkxFKEVYVFJBX0NUSV9U
SFVOS1MpCiAKIHZvaWQgSklUOjpkb01haW5UaHJlYWRQcmVwYXJhdGlvbkJlZm9yZUNvbXBpbGUo
KQogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCShyZXZpc2lvbiAyNzg1NjIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMTgsNyAr
MzE4LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBtX2V4Y2VwdGlvbkNoZWNrc1dp
dGhDYWxsRnJhbWVSb2xsYmFjay5hcHBlbmQoZW1pdEV4Y2VwdGlvbkNoZWNrKHZtKCkpKTsKICAg
ICAgICAgfQogCisjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogICAgICAgICB2b2lkIHBy
aXZhdGVDb21waWxlRXhjZXB0aW9uSGFuZGxlcnMoKTsKKyNlbmRpZgogCiAgICAgICAgIHZvaWQg
YWR2YW5jZVRvTmV4dENoZWNrcG9pbnQoKTsKICAgICAgICAgdm9pZCBlbWl0SnVtcFNsb3dUb0hv
dEZvckNoZWNrcG9pbnQoSnVtcCk7CkBAIC03OTAsNiArNzkyLDI2IEBAIG5hbWVzcGFjZSBKU0Mg
ewogCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAgICAgICAgIC8vIFRodW5rIGdlbmVy
YXRvcnMuCisgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IHByb2xvZ3VlR2VuZXJhdG9yMChWTSYpOworICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBwcm9sb2d1ZUdlbmVyYXRvcjEoVk0mKTsKKyAgICAg
ICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gcHJvbG9ndWVH
ZW5lcmF0b3IyKFZNJik7CisgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHJUYWc+IHByb2xvZ3VlR2VuZXJhdG9yMyhWTSYpOworICAgICAgICBzdGF0aWMgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBwcm9sb2d1ZUdlbmVyYXRvcjQoVk0m
KTsKKyAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
cHJvbG9ndWVHZW5lcmF0b3I1KFZNJik7CisgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IHByb2xvZ3VlR2VuZXJhdG9yNihWTSYpOworICAgICAgICBz
dGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBwcm9sb2d1ZUdlbmVy
YXRvcjcoVk0mKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiBwcm9sb2d1ZUdlbmVyYXRvcihWTSYsIGJvb2wgZG9lc1Byb2ZpbGluZywgYm9vbCBpc0NvbnN0
cnVjdG9yLCBib29sIGhhc0h1Z2VGcmFtZSwgY29uc3QgY2hhciogbmFtZSk7CisKKyAgICAgICAg
c3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gYXJpdHlGaXh1cF9w
cm9sb2d1ZUdlbmVyYXRvcjAoVk0mKTsKKyAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRUaHVua1B0clRhZz4gYXJpdHlGaXh1cF9wcm9sb2d1ZUdlbmVyYXRvcjEoVk0mKTsK
KyAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gYXJp
dHlGaXh1cF9wcm9sb2d1ZUdlbmVyYXRvcjIoVk0mKTsKKyAgICAgICAgc3RhdGljIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gYXJpdHlGaXh1cF9wcm9sb2d1ZUdlbmVyYXRv
cjMoVk0mKTsKKyAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gYXJpdHlGaXh1cF9wcm9sb2d1ZUdlbmVyYXRvcjQoVk0mKTsKKyAgICAgICAgc3RhdGlj
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gYXJpdHlGaXh1cF9wcm9sb2d1
ZUdlbmVyYXRvcjUoVk0mKTsKKyAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gYXJpdHlGaXh1cF9wcm9sb2d1ZUdlbmVyYXRvcjYoVk0mKTsKKyAgICAg
ICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gYXJpdHlGaXh1
cF9wcm9sb2d1ZUdlbmVyYXRvcjcoVk0mKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFRodW5rUHRyVGFnPiBhcml0eUZpeHVwUHJvbG9ndWVHZW5lcmF0b3IoVk0mLCBib29sIGlz
Q29uc3RydWN0b3IsIFRodW5rR2VuZXJhdG9yIG5vcm1hbFByb2xvZ3VlR2VuZXJhdG9yLCBjb25z
dCBjaGFyKiBuYW1lKTsKKwogICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiBzbG93X29wX2RlbF9ieV9pZF9wcmVwYXJlQ2FsbEdlbmVyYXRvcihWTSYp
OwogICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBz
bG93X29wX2RlbF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3IoVk0mKTsKICAgICAgICAgc3Rh
dGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gc2xvd19vcF9nZXRfYnlf
aWRfcHJlcGFyZUNhbGxHZW5lcmF0b3IoVk0mKTsKQEAgLTgwNCw3ICs4MjYsMTQgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+IHNsb3dfb3BfcmVzb2x2ZV9zY29wZUdlbmVyYXRvcihWTSYpOwogCiAgICAgICAgIHN0
YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9wX2NoZWNrX3RyYXBz
X2hhbmRsZXJHZW5lcmF0b3IoVk0mKTsKLSAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRUaHVua1B0clRhZz4gb3BfZW50ZXJfaGFuZGxlckdlbmVyYXRvcihWTSYpOworCisg
ICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9wX2Vu
dGVyX2NhbkJlT3B0aW1pemVkX0dlbmVyYXRvcihWTSYpOworICAgICAgICBzdGF0aWMgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvcF9lbnRlcl9jYW5ub3RCZU9wdGltaXpl
ZF9HZW5lcmF0b3IoVk0mKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5r
UHRyVGFnPiBvcF9lbnRlcl9HZW5lcmF0b3IoVk0mLCBib29sIGNhbkJlT3B0aW1pemVkLCBjb25z
dCBjaGFyKiB0aHVua05hbWUpOworCisjaWYgRU5BQkxFKERGR19KSVQpCisgICAgICAgIHN0YXRp
YyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9wX2xvb3BfaGludF9HZW5l
cmF0b3IoVk0mKTsKKyNlbmRpZgogICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFRodW5rUHRyVGFnPiBvcF9yZXRfaGFuZGxlckdlbmVyYXRvcihWTSYpOwogICAgICAgICBz
dGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvcF90aHJvd19oYW5k
bGVyR2VuZXJhdG9yKFZNJik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5s
aW5lcy5oCShyZXZpc2lvbiAyNzg1NjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtOTEsNyArOTEsNiBAQCBBTFdBWVNfSU5MSU5F
IHZvaWQgSklUOjplbWl0TG9hZENoYXJhY3RlCiAKIEFMV0FZU19JTkxJTkUgSklUOjpDYWxsIEpJ
VDo6ZW1pdE5ha2VkTmVhckNhbGwoQ29kZVB0cjxOb1B0clRhZz4gdGFyZ2V0KQogewotICAgIEFT
U0VSVChtX2J5dGVjb2RlSW5kZXgpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxs
ZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5k
ZXggaXMgc2V0LgogICAgIENhbGwgbmFrZWRDYWxsID0gbmVhckNhbGwoKTsKICAgICBtX25lYXJD
YWxscy5hcHBlbmQoTmVhckNhbGxSZWNvcmQobmFrZWRDYWxsLCBGdW5jdGlvblB0cjxKU0ludGVy
bmFsUHRyVGFnPih0YXJnZXQucmV0YWdnZWQ8SlNJbnRlcm5hbFB0clRhZz4oKSkpKTsKICAgICBy
ZXR1cm4gbmFrZWRDYWxsOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNv
ZGVzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
T3Bjb2RlczMyXzY0LmNwcAkocmV2aXNpb24gMjc4NTYyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDY2LDcgKzEw
NjYsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnRlcihjb25zdCBJbnN0cnVjdGlvCiAgICAgLy8g
RXZlbiB0aG91Z2ggSklUIGNvZGUgZG9lc24ndCB1c2UgdGhlbSwgd2UgaW5pdGlhbGl6ZSBvdXIg
Y29uc3RhbnQKICAgICAvLyByZWdpc3RlcnMgdG8gemFwIHN0YWxlIHBvaW50ZXJzLCB0byBhdm9p
ZCB1bm5lY2Vzc2FyaWx5IHByb2xvbmdpbmcKICAgICAvLyBvYmplY3QgbGlmZXRpbWUgYW5kIGlu
Y3JlYXNpbmcgR0MgcHJlc3N1cmUuCi0gICAgZm9yIChpbnQgaSA9IENvZGVCbG9jazo6bGxpbnRC
YXNlbGluZUNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpOyBpIDwgbV9jb2RlQmxv
Y2stPm51bVZhcnMoKTsgKytpKQorICAgIGZvciAodW5zaWduZWQgaSA9IENvZGVCbG9jazo6bGxp
bnRCYXNlbGluZUNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpOyBpIDwgbV9jb2Rl
QmxvY2stPm51bVZhcnMoKTsgKytpKQogICAgICAgICBlbWl0U3RvcmUodmlydHVhbFJlZ2lzdGVy
Rm9yTG9jYWwoaSksIGpzVW5kZWZpbmVkKCkpOwogCiAgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQ
YXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF9lbnRlcik7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHJldmlzaW9uIDI3ODU2
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM3Niw3ICszNzYsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+IEpJCiAgICAgSklUIGppdCh2bSk7CiAKICAgICBqaXQuY2hlY2tTdGFja1BvaW50ZXJB
bGlnbm1lbnQoKTsKLSAgICBqaXQuZW1pdFJlc3RvcmVDYWxsZWVTYXZlc0ZvcigmUmVnaXN0ZXJB
dE9mZnNldExpc3Q6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOworICAgIGpp
dC5lbWl0UmVzdG9yZUNhbGxlZVNhdmVzRm9yQmFzZWxpbmVKSVQoKTsKICAgICBqaXQuZW1pdEZ1
bmN0aW9uRXBpbG9ndWUoKTsKICAgICBqaXQucmV0KCk7CiAKQEAgLTExODYsMTAzICsxMTg2LDEx
NSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnRlcihjb25zdCBJbnN0cnVjdGlvCiAgICAgZW1pdEVu
dGVyT3B0aW1pemF0aW9uQ2hlY2soKTsKICNlbHNlCiAgICAgQVNTRVJUKG1fYnl0ZWNvZGVJbmRl
eC5vZmZzZXQoKSA9PSAwKTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGxvY2Fsc1RvSW5pdEdQUiA9
IGFyZ3VtZW50R1BSMDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGNhbkJlT3B0aW1pemVkR1BSID0g
YXJndW1lbnRHUFI0OwotCiAgICAgdW5zaWduZWQgbG9jYWxzVG9Jbml0ID0gY291bnQgLSBDb2Rl
QmxvY2s6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKTsK
ICAgICBSRUxFQVNFX0FTU0VSVChsb2NhbHNUb0luaXQgPCBjb3VudCk7Ci0gICAgbW92ZShUcnVz
dGVkSW1tMzIobG9jYWxzVG9Jbml0ICogc2l6ZW9mKFJlZ2lzdGVyKSksIGxvY2Fsc1RvSW5pdEdQ
Uik7Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIoY2FuQmVPcHRpbWl6ZWQoKSksIGNhbkJlT3B0aW1p
emVkR1BSKTsKLSAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bSgpLmdldENUSVN0dWIob3BfZW50ZXJf
aGFuZGxlckdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKKyAgICBUaHVua0dl
bmVyYXRvciBnZW5lcmF0b3IgPSBjYW5CZU9wdGltaXplZCgpID8gb3BfZW50ZXJfY2FuQmVPcHRp
bWl6ZWRfR2VuZXJhdG9yIDogb3BfZW50ZXJfY2Fubm90QmVPcHRpbWl6ZWRfR2VuZXJhdG9yOwor
ICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtKCkuZ2V0Q1RJU3R1YihnZW5lcmF0b3IpLnJldGFnZ2Vk
Q29kZTxOb1B0clRhZz4oKSk7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiB9
CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gSklUOjpvcF9lbnRlcl9oYW5kbGVyR2VuZXJhdG9yKFZNJiB2bSkKK01h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpvcF9lbnRlcl9HZW5lcmF0
b3IoVk0mIHZtLCBib29sIGNhbkJlT3B0aW1pemVkLCBjb25zdCBjaGFyKiB0aHVua05hbWUpCiB7
Ci0gICAgSklUIGppdCh2bSk7Ci0KICNpZiBDUFUoWDg2XzY0KQotICAgIGppdC5wdXNoKFg4NlJl
Z2lzdGVyczo6ZWJwKTsKKyAgICBwdXNoKFg4NlJlZ2lzdGVyczo6ZWJwKTsKICNlbGlmIENQVShB
Uk02NCkKLSAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwotICAgIGppdC5wdXNoUGFpcihmcmFt
ZVBvaW50ZXJSZWdpc3RlciwgbGlua1JlZ2lzdGVyKTsKKyAgICB0YWdSZXR1cm5BZGRyZXNzKCk7
CisgICAgcHVzaFBhaXIoZnJhbWVQb2ludGVyUmVnaXN0ZXIsIGxpbmtSZWdpc3Rlcik7CiAjZW5k
aWYKICAgICAvLyBvcF9lbnRlciBpcyBhbHdheXMgYXQgYnl0ZWNvZGVPZmZzZXQgMC4KLSAgICBq
aXQuc3RvcmUzMihUcnVzdGVkSW1tMzIoMCksIHRhZ0ZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcykpOworICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKDApLCB0YWdG
b3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKTsKIAogICAgIGNv
bnN0ZXhwciBHUFJSZWcgbG9jYWxzVG9Jbml0R1BSID0gYXJndW1lbnRHUFIwOwogICAgIGNvbnN0
ZXhwciBHUFJSZWcgaXRlcmF0b3JHUFIgPSBhcmd1bWVudEdQUjE7CiAgICAgY29uc3RleHByIEdQ
UlJlZyBlbmRHUFIgPSBhcmd1bWVudEdQUjI7CiAgICAgY29uc3RleHByIEdQUlJlZyB1bmRlZmlu
ZWRHUFIgPSBhcmd1bWVudEdQUjM7Ci0gICAgY29uc3RleHByIEdQUlJlZyBjYW5CZU9wdGltaXpl
ZEdQUiA9IGFyZ3VtZW50R1BSNDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGNvZGVCbG9ja0dQUiA9
IGFyZ3VtZW50R1BSNDsKKworICAgIGNvbnN0ZXhwciBpbnQgdmlydHVhbFJlZ2lzdGVyU2l6ZVNo
aWZ0ID0gMzsKKyAgICBzdGF0aWNfYXNzZXJ0KCgxIDw8IHZpcnR1YWxSZWdpc3RlclNpemVTaGlm
dCkgPT0gc2l6ZW9mKFJlZ2lzdGVyKSk7CisKKyAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZy
YW1lU2xvdDo6Y29kZUJsb2NrKSwgY29kZUJsb2NrR1BSKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhj
b2RlQmxvY2tHUFIsIENvZGVCbG9jazo6b2Zmc2V0T2ZOdW1WYXJzKCkpLCBsb2NhbHNUb0luaXRH
UFIpOworICAgIHN1YjMyKFRydXN0ZWRJbW0zMihDb2RlQmxvY2s6OmxsaW50QmFzZWxpbmVDYWxs
ZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKSksIGxvY2Fsc1RvSW5pdEdQUik7CisgICAg
bHNoaWZ0MzIoVHJ1c3RlZEltbTMyKHZpcnR1YWxSZWdpc3RlclNpemVTaGlmdCksIGxvY2Fsc1Rv
SW5pdEdQUik7CiAKICAgICBzaXplX3Qgc3RhcnRMb2NhbCA9IENvZGVCbG9jazo6bGxpbnRCYXNl
bGluZUNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpOwogICAgIGludCBzdGFydE9m
ZnNldCA9IHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKHN0YXJ0TG9jYWwpLm9mZnNldCgpOwotICAg
IGppdC5tb3ZlKFRydXN0ZWRJbW02NChzdGFydE9mZnNldCAqIHNpemVvZihSZWdpc3RlcikpLCBp
dGVyYXRvckdQUik7Ci0gICAgaml0LnN1YjY0KGl0ZXJhdG9yR1BSLCBsb2NhbHNUb0luaXRHUFIs
IGVuZEdQUik7CisgICAgbW92ZShUcnVzdGVkSW1tNjQoc3RhcnRPZmZzZXQgKiBzaXplb2YoUmVn
aXN0ZXIpKSwgaXRlcmF0b3JHUFIpOworICAgIHN1YjY0KGl0ZXJhdG9yR1BSLCBsb2NhbHNUb0lu
aXRHUFIsIGVuZEdQUik7CiAKLSAgICBqaXQubW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpKSwgdW5kZWZpbmVkR1BSKTsKLSAgICBhdXRvIGluaXRMb29wID0g
aml0LmxhYmVsKCk7Ci0gICAgSnVtcCBpbml0RG9uZSA9IGppdC5icmFuY2gzMihMZXNzVGhhbk9y
RXF1YWwsIGl0ZXJhdG9yR1BSLCBlbmRHUFIpOworICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKSksIHVuZGVmaW5lZEdQUik7CisgICAgYXV0byBpbml0
TG9vcCA9IGxhYmVsKCk7CisgICAgSnVtcCBpbml0RG9uZSA9IGJyYW5jaDMyKExlc3NUaGFuT3JF
cXVhbCwgaXRlcmF0b3JHUFIsIGVuZEdQUik7CiAgICAgewotICAgICAgICBqaXQuc3RvcmU2NCh1
bmRlZmluZWRHUFIsIEJhc2VJbmRleChHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgaXRlcmF0
b3JHUFIsIFRpbWVzT25lKSk7Ci0gICAgICAgIGppdC5zdWI2NChUcnVzdGVkSW1tMzIoc2l6ZW9m
KFJlZ2lzdGVyKSksIGl0ZXJhdG9yR1BSKTsKLSAgICAgICAgaml0Lmp1bXAoaW5pdExvb3ApOwor
ICAgICAgICBzdG9yZTY0KHVuZGVmaW5lZEdQUiwgQmFzZUluZGV4KEdQUkluZm86OmNhbGxGcmFt
ZVJlZ2lzdGVyLCBpdGVyYXRvckdQUiwgVGltZXNPbmUpKTsKKyAgICAgICAgc3ViNjQoVHJ1c3Rl
ZEltbTMyKHNpemVvZihSZWdpc3RlcikpLCBpdGVyYXRvckdQUik7CisgICAgICAgIGp1bXAoaW5p
dExvb3ApOwogICAgIH0KLSAgICBpbml0RG9uZS5saW5rKCZqaXQpOworICAgIGluaXREb25lLmxp
bmsodGhpcyk7CiAKLSAgICAvLyBlbWl0V3JpdGVCYXJyaWVyKG1fY29kZUJsb2NrKS4KLSAgICBq
aXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIGFyZ3VtZW50
R1BSMSk7Ci0gICAgSnVtcCBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuID0gaml0LmJhcnJpZXJC
cmFuY2godm0sIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKKyAgICAvLyBJbXBsZW1lbnRp
bmcgZW1pdFdyaXRlQmFycmllcihtX2NvZGVCbG9jaykuCisgICAgSnVtcCBvd25lcklzUmVtZW1i
ZXJlZE9ySW5FZGVuID0gYmFycmllckJyYW5jaCh2bSwgY29kZUJsb2NrR1BSLCBhcmd1bWVudEdQ
UjIpOwogCi0gICAgaml0Lm1vdmUoY2FuQmVPcHRpbWl6ZWRHUFIsIEdQUkluZm86Om51bWJlclRh
Z1JlZ2lzdGVyKTsgLy8gc2F2ZS4KLSAgICBqaXQuc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUob3Bl
cmF0aW9uV3JpdGVCYXJyaWVyU2xvd1BhdGgpPigmdm0sIGFyZ3VtZW50R1BSMSk7Ci0gICAgaml0
LnByZXBhcmVDYWxsT3BlcmF0aW9uKHZtKTsKLSAgICBDYWxsIG9wZXJhdGlvbldyaXRlQmFycmll
ckNhbGwgPSBqaXQuY2FsbChPcGVyYXRpb25QdHJUYWcpOworICAgIHNldHVwQXJndW1lbnRzPGRl
Y2x0eXBlKG9wZXJhdGlvbldyaXRlQmFycmllclNsb3dQYXRoKT4oJnZtLCBjb2RlQmxvY2tHUFIp
OworICAgIHByZXBhcmVDYWxsT3BlcmF0aW9uKHZtKTsKKyAgICBDYWxsIG9wZXJhdGlvbldyaXRl
QmFycmllckNhbGwgPSBjYWxsKE9wZXJhdGlvblB0clRhZyk7CisKKyAgICBpZiAoY2FuQmVPcHRp
bWl6ZWQpCisgICAgICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxv
Y2spLCBjb2RlQmxvY2tHUFIpOwogCi0gICAgaml0Lm1vdmUoR1BSSW5mbzo6bnVtYmVyVGFnUmVn
aXN0ZXIsIGNhbkJlT3B0aW1pemVkR1BSKTsgLy8gcmVzdG9yZS4KLSAgICBqaXQubW92ZShUcnVz
dGVkSW1tNjQoSlNWYWx1ZTo6TnVtYmVyVGFnKSwgR1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0ZXIp
OwotICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4ubGluaygmaml0KTsKKyAgICBvd25lcklz
UmVtZW1iZXJlZE9ySW5FZGVuLmxpbmsodGhpcyk7CiAKICNpZiBFTkFCTEUoREZHX0pJVCkKKyAg
ICAvLyBJbXBsZW1lbnRpbmcgZW1pdEVudGVyT3B0aW1pemF0aW9uQ2hlY2soKS4KICAgICBDYWxs
IG9wZXJhdGlvbk9wdGltaXplQ2FsbDsKLSAgICBpZiAoT3B0aW9uczo6dXNlREZHSklUKCkpIHsK
LSAgICAgICAgLy8gZW1pdEVudGVyT3B0aW1pemF0aW9uQ2hlY2soKS4KKyAgICBpZiAoY2FuQmVP
cHRpbWl6ZWQpIHsKICAgICAgICAgSnVtcExpc3Qgc2tpcE9wdGltaXplOwogCi0gICAgICAgIHNr
aXBPcHRpbWl6ZS5hcHBlbmQoaml0LmJyYW5jaFRlc3QzMihaZXJvLCBjYW5CZU9wdGltaXplZEdQ
UikpOworICAgICAgICBza2lwT3B0aW1pemUuYXBwZW5kKGJyYW5jaEFkZDMyKFNpZ25lZCwgVHJ1
c3RlZEltbTMyKE9wdGlvbnM6OmV4ZWN1dGlvbkNvdW50ZXJJbmNyZW1lbnRGb3JFbnRyeSgpKSwg
QWRkcmVzcyhjb2RlQmxvY2tHUFIsIENvZGVCbG9jazo6b2Zmc2V0T2ZKSVRFeGVjdXRlQ291bnRl
cigpKSkpOwogCi0gICAgICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6
Y29kZUJsb2NrKSwgYXJndW1lbnRHUFIxKTsKLSAgICAgICAgc2tpcE9wdGltaXplLmFwcGVuZChq
aXQuYnJhbmNoQWRkMzIoU2lnbmVkLCBUcnVzdGVkSW1tMzIoT3B0aW9uczo6ZXhlY3V0aW9uQ291
bnRlckluY3JlbWVudEZvckVudHJ5KCkpLCBBZGRyZXNzKGFyZ3VtZW50R1BSMSwgQ29kZUJsb2Nr
OjpvZmZzZXRPZkpJVEV4ZWN1dGVDb3VudGVyKCkpKSk7CisgICAgICAgIGNvcHlMTEludEJhc2Vs
aW5lQ2FsbGVlU2F2ZXNGcm9tRnJhbWVPclJlZ2lzdGVyVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNC
dWZmZXIodm0udG9wRW50cnlGcmFtZSk7CiAKLSAgICAgICAgaml0LmNvcHlMTEludEJhc2VsaW5l
Q2FsbGVlU2F2ZXNGcm9tRnJhbWVPclJlZ2lzdGVyVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZm
ZXIodm0udG9wRW50cnlGcmFtZSk7CisgICAgICAgIHNldHVwQXJndW1lbnRzPGRlY2x0eXBlKG9w
ZXJhdGlvbk9wdGltaXplKT4oJnZtLCBUcnVzdGVkSW1tMzIoMCkpOworICAgICAgICBwcmVwYXJl
Q2FsbE9wZXJhdGlvbih2bSk7CisgICAgICAgIG9wZXJhdGlvbk9wdGltaXplQ2FsbCA9IGNhbGwo
T3BlcmF0aW9uUHRyVGFnKTsKIAotICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUo
b3BlcmF0aW9uT3B0aW1pemUpPigmdm0sIFRydXN0ZWRJbW0zMigwKSk7Ci0gICAgICAgIGppdC5w
cmVwYXJlQ2FsbE9wZXJhdGlvbih2bSk7Ci0gICAgICAgIG9wZXJhdGlvbk9wdGltaXplQ2FsbCA9
IGppdC5jYWxsKE9wZXJhdGlvblB0clRhZyk7Ci0KLSAgICAgICAgc2tpcE9wdGltaXplLmFwcGVu
ZChqaXQuYnJhbmNoVGVzdFB0cihaZXJvLCByZXR1cm5WYWx1ZUdQUikpOwotICAgICAgICBqaXQu
ZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOworICAg
ICAgICBza2lwT3B0aW1pemUuYXBwZW5kKGJyYW5jaFRlc3RQdHIoWmVybywgcmV0dXJuVmFsdWVH
UFIpKTsKKyAgICAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgR1BSSW5mbzo6Y2FsbEZyYW1l
UmVnaXN0ZXIpOwogCi0gICAgICAgIHNraXBPcHRpbWl6ZS5saW5rKCZqaXQpOworICAgICAgICBz
a2lwT3B0aW1pemUubGluayh0aGlzKTsKICAgICB9CiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQp
CiAKICNpZiBDUFUoWDg2XzY0KQotICAgIGppdC5wb3AoWDg2UmVnaXN0ZXJzOjplYnApOworICAg
IHBvcChYODZSZWdpc3RlcnM6OmVicCk7CiAjZWxpZiBDUFUoQVJNNjQpCi0gICAgaml0LnBvcFBh
aXIoZnJhbWVQb2ludGVyUmVnaXN0ZXIsIGxpbmtSZWdpc3Rlcik7CisgICAgcG9wUGFpcihmcmFt
ZVBvaW50ZXJSZWdpc3RlciwgbGlua1JlZ2lzdGVyKTsKICNlbmRpZgotICAgIGppdC5yZXQoKTsK
KyAgICByZXQoKTsKIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhV
TktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OkV4dHJhQ1RJVGh1bmspOworICAgIExpbmtCdWZm
ZXIgcGF0Y2hCdWZmZXIoKnRoaXMsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmls
ZTo6RXh0cmFDVElUaHVuayk7CiAgICAgcGF0Y2hCdWZmZXIubGluayhvcGVyYXRpb25Xcml0ZUJh
cnJpZXJDYWxsLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbldyaXRlQmFy
cmllclNsb3dQYXRoKSk7CiAjaWYgRU5BQkxFKERGR19KSVQpCi0gICAgaWYgKE9wdGlvbnM6OnVz
ZURGR0pJVCgpKQorICAgIGlmIChjYW5CZU9wdGltaXplZCkKICAgICAgICAgcGF0Y2hCdWZmZXIu
bGluayhvcGVyYXRpb25PcHRpbWl6ZUNhbGwsIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4o
b3BlcmF0aW9uT3B0aW1pemUpKTsKICNlbmRpZgotICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBh
dGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgIkJhc2VsaW5lOiBvcF9lbnRlcl9oYW5kbGVyIik7
CisgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCB0
aHVua05hbWUpOworfQorCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJ
VDo6b3BfZW50ZXJfY2FuQmVPcHRpbWl6ZWRfR2VuZXJhdG9yKFZNJiB2bSkKK3sKKyAgICBKSVQg
aml0KHZtKTsKKyAgICBjb25zdGV4cHIgYm9vbCBjYW5CZU9wdGltaXplZCA9IHRydWU7CisgICAg
cmV0dXJuIGppdC5vcF9lbnRlcl9HZW5lcmF0b3Iodm0sIGNhbkJlT3B0aW1pemVkLCAiQmFzZWxp
bmU6IG9wX2VudGVyX2NhbkJlT3B0aW1pemVkIik7Cit9CisKK01hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRUaHVua1B0clRhZz4gSklUOjpvcF9lbnRlcl9jYW5ub3RCZU9wdGltaXplZF9HZW5lcmF0
b3IoVk0mIHZtKQoreworICAgIEpJVCBqaXQodm0pOworICAgIGNvbnN0ZXhwciBib29sIGNhbkJl
T3B0aW1pemVkID0gZmFsc2U7CisgICAgcmV0dXJuIGppdC5vcF9lbnRlcl9HZW5lcmF0b3Iodm0s
IGNhbkJlT3B0aW1pemVkLCAiQmFzZWxpbmU6IG9wX2VudGVyX2Nhbm5vdEJlT3B0aW1pemVkIik7
CiB9CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKQEAgLTE0MzQsMjIgKzE0
NDYsMjcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydQogICAgICAg
ICBhZGQ2NChUcnVzdGVkSW1tMzIoMSksIHJlZ1QwKTsKICAgICAgICAgc3RvcmU2NChyZWdUMCwg
cHRyKTsKICAgICB9CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShpbnN0cnVjdGlvbik7CiAjZW5k
aWYKIAotICAgIC8vIEVtaXQgdGhlIEpJVCBvcHRpbWl6YXRpb24gY2hlY2s6IAorICAgIC8vIEVt
aXQgdGhlIEpJVCBvcHRpbWl6YXRpb24gY2hlY2s6CiAgICAgaWYgKGNhbkJlT3B0aW1pemVkKCkp
IHsKKyAgICAgICAgY29uc3RleHByIEdQUlJlZyBjb2RlQmxvY2tHUFIgPSByZWdUMDsKKyAgICAg
ICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIGNvZGVCbG9j
a0dQUik7CiAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaEFkZDMyKFBvc2l0aXZlT3JaZXJvLCBU
cnVzdGVkSW1tMzIoT3B0aW9uczo6ZXhlY3V0aW9uQ291bnRlckluY3JlbWVudEZvckxvb3AoKSks
Ci0gICAgICAgICAgICBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmFkZHJlc3NPZkpJVEV4
ZWN1dGVDb3VudGVyKCkpKSk7CisgICAgICAgICAgICBBZGRyZXNzKGNvZGVCbG9ja0dQUiwgQ29k
ZUJsb2NrOjpvZmZzZXRPZkpJVEV4ZWN1dGVDb3VudGVyKCkpKSk7CiAgICAgfQogfQogCi12b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKICNpZiBFTkFCTEUoREZH
X0pJVCkKICAgICAvLyBFbWl0IHRoZSBzbG93IHBhdGggZm9yIHRoZSBKSVQgb3B0aW1pemF0aW9u
IGNoZWNrOgogICAgIGlmIChjYW5CZU9wdGltaXplZCgpKSB7CiAgICAgICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7CiAKKyNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAgICAgICAgIGNv
cHlMTEludEJhc2VsaW5lQ2FsbGVlU2F2ZXNGcm9tRnJhbWVPclJlZ2lzdGVyVG9FbnRyeUZyYW1l
Q2FsbGVlU2F2ZXNCdWZmZXIodm0oKS50b3BFbnRyeUZyYW1lKTsKIAogICAgICAgICBjYWxsT3Bl
cmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25PcHRpbWl6ZSwgJnZtKCksIG1fYnl0ZWNv
ZGVJbmRleC5hc0JpdHMoKSk7CkBAIC0xNDYyLDEzICsxNDc5LDgxIEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9sb29wX2hpbnQoY29uc3QgSW4KICAgICAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQ
UiwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOwogICAgICAgICBub09wdGltaXplZEVudHJ5
LmxpbmsodGhpcyk7CiAKLSAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoanVtcCgpLCBjdXJyZW50
SW5zdHJ1Y3Rpb24tPnNpemUoKSk7CisjZWxzZSAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykK
KyAgICAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0
KCk7CisgICAgICAgIEFTU0VSVChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSA9PSBtX2J5
dGVjb2RlSW5kZXgpOworICAgICAgICBBU1NFUlQobV9jb2RlQmxvY2stPmluc3RydWN0aW9uQXQo
bV9ieXRlY29kZUluZGV4KSA9PSBpbnN0cnVjdGlvbik7CisKKyAgICAgICAgY29uc3RleHByIEdQ
UlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q3OworCisgICAgICAgIG1vdmUoVHJ1c3RlZElt
bTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOworICAgICAgICBlbWl0TmFr
ZWROZWFyQ2FsbCh2bSgpLmdldENUSVN0dWIob3BfbG9vcF9oaW50X0dlbmVyYXRvcikucmV0YWdn
ZWRDb2RlPE5vUHRyVGFnPigpKTsKKyNlbmRpZiAvLyAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1Mp
CiAgICAgfQotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oY3VycmVudEluc3RydWN0aW9uKTsKKyNl
bmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKICAgICBVTlVTRURfUEFSQU0oaXRlcik7CisgICAgVU5V
U0VEX1BBUkFNKGluc3RydWN0aW9uKTsKK30KKworI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktT
KQorCisjaWYgRU5BQkxFKERGR19KSVQpCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+IEpJVDo6b3BfbG9vcF9oaW50X0dlbmVyYXRvcihWTSYgdm0pCit7CisgICAgLy8gVGhl
IHRodW5rIGdlbmVyYXRlZCBieSB0aGlzIGZ1bmN0aW9uIGNhbiBvbmx5IHdvcmsgd2l0aCB0aGUg
TExJbnQgLyBCYXNlbGluZSBKSVQgYmVjYXVzZQorICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25z
IGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZy
YW1lOjpjb2RlQmxvY2soKS4KKyAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJl
bG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCisgICAg
Ly8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KKyAgICBKSVQgaml0KHZtKTsKKworICAgIGppdC50
YWdSZXR1cm5BZGRyZXNzKCk7CisKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0
R1BSID0gcmVnVDc7IC8vIGluY29taW5nLgorCisjaWYgQ1BVKFg4Nl82NCkKKyAgICBqaXQucHVz
aChmcmFtZVBvaW50ZXJSZWdpc3Rlcik7CisjZWxpZiBDUFUoQVJNNjQpCisgICAgaml0LnB1c2hQ
YWlyKGZyYW1lUG9pbnRlclJlZ2lzdGVyLCBsaW5rUmVnaXN0ZXIpOworI2VuZGlmCisKKyAgICBh
dXRvIHVzZWRSZWdpc3RlcnMgPSBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJz
KCk7CisgICAgdXNlZFJlZ2lzdGVycy5hZGQoYnl0ZWNvZGVPZmZzZXRHUFIpOworICAgIGppdC5j
b3B5TExJbnRCYXNlbGluZUNhbGxlZVNhdmVzRnJvbUZyYW1lT3JSZWdpc3RlclRvRW50cnlGcmFt
ZUNhbGxlZVNhdmVzQnVmZmVyKHZtLnRvcEVudHJ5RnJhbWUsIHVzZWRSZWdpc3RlcnMpOworCisg
ICAgaml0LnN0b3JlMzIoYnl0ZWNvZGVPZmZzZXRHUFIsIENDYWxsSGVscGVyczo6dGFnRm9yKENh
bGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSk7CisgICAgaml0LmxzaGlm
dDMyKFRydXN0ZWRJbW0zMihCeXRlY29kZUluZGV4OjpjaGVja3BvaW50U2hpZnQpLCBieXRlY29k
ZU9mZnNldEdQUik7CisgICAgaml0LnNldHVwQXJndW1lbnRzPGRlY2x0eXBlKG9wZXJhdGlvbk9w
dGltaXplKT4oVHJ1c3RlZEltbVB0cigmdm0pLCBieXRlY29kZU9mZnNldEdQUik7CisgICAgaml0
LnByZXBhcmVDYWxsT3BlcmF0aW9uKHZtKTsKKyAgICBDYWxsIG9wZXJhdGlvbkNhbGwgPSBqaXQu
Y2FsbChPcGVyYXRpb25QdHJUYWcpOworICAgIEp1bXAgaGFzT3B0aW1pemVkRW50cnkgPSBqaXQu
YnJhbmNoVGVzdFB0cihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUik7CisKKyNpZiBDUFUoWDg2XzY0
KQorICAgIGppdC5wb3AoZnJhbWVQb2ludGVyUmVnaXN0ZXIpOworI2VsaWYgQ1BVKEFSTTY0KQor
ICAgIGppdC5wb3BQYWlyKGZyYW1lUG9pbnRlclJlZ2lzdGVyLCBsaW5rUmVnaXN0ZXIpOworI2Vu
ZGlmCisgICAgaml0LnJldCgpOworCisgICAgaGFzT3B0aW1pemVkRW50cnkubGluaygmaml0KTsK
KyNpZiBDUFUoWDg2XzY0KQorICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
MzIoMiAqIHNpemVvZihDUFVSZWdpc3RlcikpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisjZWxp
ZiBDUFUoQVJNNjQpCisgICAgaml0LnBvcFBhaXIoZnJhbWVQb2ludGVyUmVnaXN0ZXIsIGxpbmtS
ZWdpc3Rlcik7CiAjZW5kaWYKKyAgICBpZiAoQVNTRVJUX0VOQUJMRUQpIHsKKyAgICAgICAgSnVt
cCBvayA9IGppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlLCByZXR1cm5WYWx1ZUdQ
UiwgVHJ1c3RlZEltbVB0cihiaXR3aXNlX2Nhc3Q8dm9pZCo+KHN0YXRpY19jYXN0PGludHB0cl90
PigxMDAwKSkpKTsKKyAgICAgICAgaml0LmFib3J0V2l0aFJlYXNvbihKSVRVbnJlYXNvbmFibGVM
b29wSGludEp1bXBUYXJnZXQpOworICAgICAgICBvay5saW5rKCZqaXQpOworICAgIH0KKworICAg
IGppdC5mYXJKdW1wKHJldHVyblZhbHVlR1BSLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7
CisKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBMaW5r
QnVmZmVyOjpQcm9maWxlOjpFeHRyYUNUSVRodW5rKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKG9w
ZXJhdGlvbkNhbGwsIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uT3B0aW1p
emUpKTsKKyAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJU
YWcsICJCYXNlbGluZTogb3BfbG9vcF9oaW50Iik7CiB9CisjZW5kaWYgLy8gRU5BQkxFKERGR19K
SVQpCisjZW5kaWYgLy8gIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9jaGVja190cmFwcyhjb25zdCBJbnN0cnVjdGlvbiopCiB7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCShyZXZpc2lvbiAyNzg1NjIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTgxLDExICs4MSw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz4gcG8KIHsKICAgICBDQ2FsbEhlbHBlcnMgaml0OwogCi0jaWYgQ1BVKFg4Nl82NCkK
LSAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDIgKiBzaXplb2YoQ1BV
UmVnaXN0ZXIpKSwgWDg2UmVnaXN0ZXJzOjplc3ApOwotI2VsaWYgQ1BVKEFSTTY0KQotICAgIGpp
dC5wb3BQYWlyKENDYWxsSGVscGVyczo6ZnJhbWVQb2ludGVyUmVnaXN0ZXIsIENDYWxsSGVscGVy
czo6bGlua1JlZ2lzdGVyKTsKLSNlbmRpZgorICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tMzIoMiAqIHNpemVvZihDUFVSZWdpc3RlcikpLCBDQ2FsbEhlbHBlcnM6OnN0YWNr
UG9pbnRlclJlZ2lzdGVyKTsKIAogICAgIENDYWxsSGVscGVyczo6SnVtcCBjb250aW51YXRpb24g
PSBqaXQuanVtcCgpOwogCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>