<?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>99154</bug_id>
          
          <creation_ts>2012-10-12 02:26:55 -0700</creation_ts>
          <short_desc>Refactor MacroAssembler interfaces to differentiate the pointer operands from the 64-bit integer operands</short_desc>
          <delta_ts>2012-10-30 14:40:36 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>99809</dependson>
          <blocked>99153</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Yuqiang Xian">yuqiang.xian</reporter>
          <assigned_to name="Yuqiang Xian">yuqiang.xian</assigned_to>
          <cc>barraclough</cc>
    
    <cc>fpizlo</cc>
    
    <cc>hausmann</cc>
    
    <cc>roger_fong</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>740748</commentid>
    <comment_count>0</comment_count>
    <who name="Yuqiang Xian">yuqiang.xian</who>
    <bug_when>2012-10-12 02:26:55 -0700</bug_when>
    <thetext>In current JavaScriptCore implementation for JSVALUE64 platform (i.e., the X64 platform), we assume that the JSValue size is same to the pointer size, and thus EncodedJSValue is simply type defined as a &quot;void*&quot;. In the JIT compiler, we also take this assumption and invoke the same macro assembler interfaces for both JSValue and pointer operands. We need to differentiate the operations on pointers from the operations on JSValues, and let them invoking different macro assembler interfaces. For example, we now use the interface of &quot;loadPtr&quot; to load either a pointer or a JSValue, and we need to switch to using &quot;loadPtr&quot; to load a pointer and some new &quot;load64&quot; interface to load a JSValue. This would help us supporting other JSVALUE64 platforms where pointer size is not necessarily 64-bits, for example x32 (bug #99153).

The major modification I made is to introduce the &quot;*64&quot; interfaces in the MacroAssembler for those operations on JSValues, keep the &quot;*Ptr&quot; interfaces for those operations on real pointers, and go through all the JIT compiler code to correct the usage.

Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>740762</commentid>
    <comment_count>1</comment_count>
      <attachid>168383</attachid>
    <who name="Yuqiang Xian">yuqiang.xian</who>
    <bug_when>2012-10-12 02:52:56 -0700</bug_when>
    <thetext>Created attachment 168383
patch

Not marking r? yet. Can you please let me know if the approach is sound enough?

Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>740766</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-12 02:55:34 -0700</bug_when>
    <thetext>Attachment 168383 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source...&quot; exit_code: 1
Source/JavaScriptCore/assembler/MacroAssemblerX86_64.h:360:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/JavaScriptCore/assembler/MacroAssemblerX86_64.h:371:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Total errors found: 2 in 33 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>741350</commentid>
    <comment_count>3</comment_count>
      <attachid>168383</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2012-10-12 17:41:36 -0700</bug_when>
    <thetext>Comment on attachment 168383
patch

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

(r-, comments to follow)

&gt; Source/JavaScriptCore/assembler/AbstractMacroAssembler.h:278
&gt; +        explicit TrustedImm64(const void* value)

Do we really need this constructor? – might be nice to try to remove it – if you have a void*, you should be creating a TrustedImmPtr.

&gt; Source/JavaScriptCore/assembler/AbstractMacroAssembler.h:286
&gt; +

Extra newline.

&gt; Source/JavaScriptCore/assembler/AbstractMacroAssembler.h:299
&gt; +

Extra newline.

&gt; Source/JavaScriptCore/jit/JITOpcodes.cpp:1333
&gt; +    move(TrustedImm64(reinterpret_cast&lt;uintptr_t&gt;(globalThis)), regT0);

I think this code is implicitly making an assumption about JSValue boxing.  I think this would be better:
    move(TrustedImm64(JSValue::encode(JSValue(globalThis))), regT0);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>741353</commentid>
    <comment_count>4</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2012-10-12 17:49:54 -0700</bug_when>
    <thetext>Hey Yuqiang,

This all looks good in principal – but:

(1) Please put up just a patch with MacroAssembler changes alone.  We should be able to refactor the MacroAssembler to support Imm64 &amp; more *64* operations separately, and then land changes to the JIT to use it.  The runtime changes necessary for x32 should be separate again.

(2) The X86_64 MacroAssembler changes duplicate a lot of functionality, in copying &amp; pasting many operations into Ptr &amp; 64 variants.  E.g. xor64, xorPtr.  Instead I think we should try to constrain the concept of Ptr sized operations to the MacroAssembler, so on X86_64 &lt;foo&gt;Ptr should be remapped to &lt;foo&gt;64, as we currently map &lt;foo&gt;Ptr to &lt;foo&gt;32 on other platforms.  Going forwards we don&apos;t want to be copying &amp; pasting all 64-bit operations to both Ptr &amp; 64 variants in the X86_64 macro assembler.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>741391</commentid>
    <comment_count>5</comment_count>
      <attachid>168533</attachid>
    <who name="Yuqiang Xian">yuqiang.xian</who>
    <bug_when>2012-10-12 19:55:46 -0700</bug_when>
    <thetext>Created attachment 168533
Split patch - part 1: only add the *64 interfaces to MacroAssembler

Gavin,

Thanks a lot for the comments.

I&apos;ve split the original patch and addressed your comments. This is the part one for only adding the *64 interfaces to the MacroAssembler. Can you please take another look?

Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>741534</commentid>
    <comment_count>6</comment_count>
      <attachid>168570</attachid>
    <who name="Yuqiang Xian">yuqiang.xian</who>
    <bug_when>2012-10-13 18:24:29 -0700</bug_when>
    <thetext>Created attachment 168570
Rebased: Split patch - part 1: only add the *64 interfaces to MacroAssembler

Re-base the patch after r131251.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>742619</commentid>
    <comment_count>7</comment_count>
      <attachid>168570</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2012-10-15 17:24:35 -0700</bug_when>
    <thetext>Comment on attachment 168570
Rebased: Split patch - part 1: only add the *64 interfaces to MacroAssembler

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

Hi Yuquiang – this basically looks good, but per my previous comments please move the *Ptr-&gt;*64 wrapper functions from MacroAssemblerX86_64.h to MacroAssembler.h
That way, the Ptr-&gt;[32/64] mapping will be done in the same place for all platforms.

&gt; Source/JavaScriptCore/assembler/MacroAssemblerX86_64.h:862
&gt; +    DataLabelPtr moveWithPatch(TrustedImm64 initialValue, RegisterID dest)

Hmmm, I need to think a little more about this – I think I&apos;d be happy to land as is &amp; fix later as necessary.
The mismatch between TrustedImm64/DataLabelPtr means I think is probably isn&apos;t correct.
We should probably either add DataLabel64, make DataLabelPtr map onto DataLabel32 or DataLabel64 as appropriate, or keep the argument to this function as TrustedImmPtr.
But we can probably land as is &amp; revisit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>742652</commentid>
    <comment_count>8</comment_count>
    <who name="Yuqiang Xian">yuqiang.xian</who>
    <bug_when>2012-10-15 17:41:57 -0700</bug_when>
    <thetext>Gavin, Thanks for the comments.

(In reply to comment #7)
&gt; (From update of attachment 168570 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=168570&amp;action=review
&gt; 
&gt; Hi Yuquiang – this basically looks good, but per my previous comments please move the *Ptr-&gt;*64 wrapper functions from MacroAssemblerX86_64.h to MacroAssembler.h
&gt; That way, the Ptr-&gt;[32/64] mapping will be done in the same place for all platforms.

Okay. Will do it.

&gt; 
&gt; &gt; Source/JavaScriptCore/assembler/MacroAssemblerX86_64.h:862
&gt; &gt; +    DataLabelPtr moveWithPatch(TrustedImm64 initialValue, RegisterID dest)
&gt; 
&gt; Hmmm, I need to think a little more about this – I think I&apos;d be happy to land as is &amp; fix later as necessary.
&gt; The mismatch between TrustedImm64/DataLabelPtr means I think is probably isn&apos;t correct.
&gt; We should probably either add DataLabel64, make DataLabelPtr map onto DataLabel32 or DataLabel64 as appropriate, or keep the argument to this function as TrustedImmPtr.
&gt; But we can probably land as is &amp; revisit.

Thanks for pointing it out. Yes I think we need to fix it in this patch. It happens to not cause any problem as there&apos;s no use for it (even in my x32 code).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>742718</commentid>
    <comment_count>9</comment_count>
      <attachid>168840</attachid>
    <who name="Yuqiang Xian">yuqiang.xian</who>
    <bug_when>2012-10-15 19:20:47 -0700</bug_when>
    <thetext>Created attachment 168840
Updated: Split patch - part1: add the*64 interfaces to MacroAssemblerX86_64

Patch updated addressing Gavin&apos;s comments.

Gavin, could you please help review it again?  Thanks for the efforts.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>742719</commentid>
    <comment_count>10</comment_count>
    <who name="Yuqiang Xian">yuqiang.xian</who>
    <bug_when>2012-10-15 19:22:18 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; Gavin, Thanks for the comments.
&gt; 
&gt; (In reply to comment #7)
&gt; &gt; (From update of attachment 168570 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=168570&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/JavaScriptCore/assembler/MacroAssemblerX86_64.h:862
&gt; &gt; &gt; +    DataLabelPtr moveWithPatch(TrustedImm64 initialValue, RegisterID dest)
&gt; &gt; 
&gt; &gt; Hmmm, I need to think a little more about this – I think I&apos;d be happy to land as is &amp; fix later as necessary.
&gt; &gt; The mismatch between TrustedImm64/DataLabelPtr means I think is probably isn&apos;t correct.
&gt; &gt; We should probably either add DataLabel64, make DataLabelPtr map onto DataLabel32 or DataLabel64 as appropriate, or keep the argument to this function as TrustedImmPtr.
&gt; &gt; But we can probably land as is &amp; revisit.
&gt; 
&gt; Thanks for pointing it out. Yes I think we need to fix it in this patch. It happens to not cause any problem as there&apos;s no use for it (even in my x32 code).

I just removed those methods in the new patch, since they&apos;re not used now (and won&apos;t be used in the near future).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>742767</commentid>
    <comment_count>11</comment_count>
      <attachid>168845</attachid>
    <who name="Yuqiang Xian">yuqiang.xian</who>
    <bug_when>2012-10-15 20:47:14 -0700</bug_when>
    <thetext>Created attachment 168845
Updated: Split patch - part1: add the*64 interfaces to MacroAssemblerX86_64

more clean-up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>742932</commentid>
    <comment_count>12</comment_count>
      <attachid>168845</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2012-10-16 01:17:16 -0700</bug_when>
    <thetext>Comment on attachment 168845
Updated: Split patch - part1: add the*64 interfaces to MacroAssemblerX86_64

Looks great Yuqiang, thanks for the cleanup.  I&apos;m out tomorrow, so you may want to cc Filip on your patches, or I&apos;ll be back Weds.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>742963</commentid>
    <comment_count>13</comment_count>
    <who name="Yuqiang Xian">yuqiang.xian</who>
    <bug_when>2012-10-16 01:44:19 -0700</bug_when>
    <thetext>Part 1 landed as http://trac.webkit.org/changeset/131426.

Thanks for the review, Gavin.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>743160</commentid>
    <comment_count>14</comment_count>
      <attachid>168951</attachid>
    <who name="Yuqiang Xian">yuqiang.xian</who>
    <bug_when>2012-10-16 08:21:47 -0700</bug_when>
    <thetext>Created attachment 168951
Split patch - part 2: let the JIT compilers use the *64 interfaces of MacroAssemblerX86_64

Patch part 2 - having the JIT compilers use the *64 interfaces for 64-bit integers, especially, the encoded JSValues which are now defined as int64_t.

Gavin/Filip, would you please take a look? Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>743807</commentid>
    <comment_count>15</comment_count>
      <attachid>169076</attachid>
    <who name="Yuqiang Xian">yuqiang.xian</who>
    <bug_when>2012-10-16 19:43:50 -0700</bug_when>
    <thetext>Created attachment 169076
Rebased: Split patch - part 2: let the JIT compilers use the *64 interfaces of MacroAssemblerX86_64

Re-base the patch part2 after r131516.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>744814</commentid>
    <comment_count>16</comment_count>
      <attachid>169306</attachid>
    <who name="Yuqiang Xian">yuqiang.xian</who>
    <bug_when>2012-10-17 17:06:44 -0700</bug_when>
    <thetext>Created attachment 169306
Another rebase: Split patch - part 2: let the JIT compilers use the *64 interfaces of MacroAssemblerX86_64</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>744851</commentid>
    <comment_count>17</comment_count>
    <who name="Yuqiang Xian">yuqiang.xian</who>
    <bug_when>2012-10-17 17:43:32 -0700</bug_when>
    <thetext>well... r131645 is rolled out again - so it means we need yet another rebase...

Gavin, what do you think? Should we wait for that patch to be fixed and merged again and then we can start this patch review, or should we go first?

Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>745802</commentid>
    <comment_count>18</comment_count>
      <attachid>169306</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2012-10-18 17:52:53 -0700</bug_when>
    <thetext>Comment on attachment 169306
Another rebase: Split patch - part 2: let the JIT compilers use the *64 interfaces of MacroAssemblerX86_64

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

Hi Yuquiang, this basically all looks good to me.  I&apos;ve really just picked up on one issue throughout, which is that the #if CPU(X86_64) all needs to be USE(JSVALUE64).
However I would like you to take the runtime changes out of this patch – this is a big refactoring, and breaking up into separate patches helps track down regression.  Please put up a new patch with just the jit &amp; assembler changes, (&amp; the review comments fixed), and then put up the runtime changes separately.  Sorry that this is a pain, but it is important if there is a problem later.

&gt; Source/JavaScriptCore/dfg/DFGAssemblyHelpers.h:102
&gt; +#if CPU(X86_64)

This is a bit unfortunate – when registers where pointer sized &apos;storePtr&apos; meant &quot;store this entire register&quot;.  Oh well.
I think this may be slightly better as:
#if USE(JSVALUE64)
And to change the storePtr in the else case to store32.

&gt; Source/JavaScriptCore/dfg/DFGAssemblyHelpers.h:180
&gt; +#if CPU(X86_64)

See comment in emitPutToCallFrameHeader - USE(JSVALUE64) &amp; store32.

&gt; Source/JavaScriptCore/dfg/DFGAssemblyHelpers.h:218
&gt; +#if CPU(X86_64)

See comment in emitPutToCallFrameHeader - USE(JSVALUE64) &amp; load32.

&gt; Source/JavaScriptCore/dfg/DFGScratchRegisterAllocator.h:131
&gt; +#if CPU(X86_64)

See comment in emitPutToCallFrameHeader - USE(JSVALUE64) &amp; store32.

&gt; Source/JavaScriptCore/dfg/DFGScratchRegisterAllocator.h:181
&gt; +#if CPU(X86_64)

See comment in emitPutToCallFrameHeader - USE(JSVALUE64) &amp; load32.

&gt; Source/JavaScriptCore/dfg/DFGSilentRegisterSavePlan.h:64
&gt;      LoadPtr,

Do we still need LoadPtr? – I&apos;m gussing that on JSVALUE64 this is equivalent to Load64, and on JSVALUE32_64 this is equivalent to Load32Payload.  Ditto for StorePtr above.  It could be good to remove these enum cases – and the associated code to handle them, and just have a #define in this header mapping LoadPtr/StorePtr appropriately.

&gt; Source/JavaScriptCore/dfg/DFGThunks.cpp:48
&gt; +#if CPU(X86_64)

See comment in emitPutToCallFrameHeader - USE(JSVALUE64) &amp; store32.

&gt; Source/JavaScriptCore/dfg/DFGThunks.cpp:80
&gt; +#if CPU(X86_64)

See comment in emitPutToCallFrameHeader - USE(JSVALUE64) &amp; load32.

&gt; Source/JavaScriptCore/dfg/DFGThunks.cpp:128
&gt; +#if CPU(X86_64)

See comment in emitPutToCallFrameHeader - #if USE(JSVALUE64).

&gt; Source/JavaScriptCore/dfg/DFGThunks.cpp:155
&gt; +#if CPU(X86_64)

See comment in emitPutToCallFrameHeader - USE(JSVALUE64) &amp; store32.

&gt; Source/JavaScriptCore/jit/JITStubCall.h:140
&gt; +#if CPU(X86_64)

See comment in emitPutToCallFrameHeader - #if USE(JSVALUE64)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>745931</commentid>
    <comment_count>19</comment_count>
    <who name="Yuqiang Xian">yuqiang.xian</who>
    <bug_when>2012-10-18 20:23:37 -0700</bug_when>
    <thetext>Gavin, Thanks for your comments.

(In reply to comment #18)
&gt; (From update of attachment 169306 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=169306&amp;action=review
&gt; 
&gt; Hi Yuquiang, this basically all looks good to me.  I&apos;ve really just picked up on one issue throughout, which is that the #if CPU(X86_64) all needs to be USE(JSVALUE64).

OK. Will do it.

&gt; However I would like you to take the runtime changes out of this patch – this is a big refactoring, and breaking up into separate patches helps track down regression.  Please put up a new patch with just the jit &amp; assembler changes, (&amp; the review comments fixed), and then put up the runtime changes separately.  Sorry that this is a pain, but it is important if there is a problem later.

I&apos;m not sure if it&apos;s doable. The only runtime changes I made is the definition of EncodedJSValue which is changed from &quot;void*&quot; to &quot;int64_t&quot;, and the subsequent changes in the related JSValue methods. This is necessary as we now use the Imm64 interfaces in the JIT compilers to deal with a JSValue constant. The Imm64 interfaces only accept a int64_t data (and that&apos;s the intention). So I don&apos;t think it should be separated from the JIT compiler changes. What do you think, any suggestions? Thanks.

&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGAssemblyHelpers.h:102
&gt; &gt; +#if CPU(X86_64)
&gt; 
&gt; This is a bit unfortunate – when registers where pointer sized &apos;storePtr&apos; meant &quot;store this entire register&quot;.  Oh well.
&gt; I think this may be slightly better as:
&gt; #if USE(JSVALUE64)
&gt; And to change the storePtr in the else case to store32.
&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGAssemblyHelpers.h:180
&gt; &gt; +#if CPU(X86_64)
&gt; 
&gt; See comment in emitPutToCallFrameHeader - USE(JSVALUE64) &amp; store32.
&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGAssemblyHelpers.h:218
&gt; &gt; +#if CPU(X86_64)
&gt; 
&gt; See comment in emitPutToCallFrameHeader - USE(JSVALUE64) &amp; load32.
&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGScratchRegisterAllocator.h:131
&gt; &gt; +#if CPU(X86_64)
&gt; 
&gt; See comment in emitPutToCallFrameHeader - USE(JSVALUE64) &amp; store32.
&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGScratchRegisterAllocator.h:181
&gt; &gt; +#if CPU(X86_64)
&gt; 
&gt; See comment in emitPutToCallFrameHeader - USE(JSVALUE64) &amp; load32.
&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGSilentRegisterSavePlan.h:64
&gt; &gt;      LoadPtr,
&gt; 
&gt; Do we still need LoadPtr? – I&apos;m gussing that on JSVALUE64 this is equivalent to Load64, and on JSVALUE32_64 this is equivalent to Load32Payload.  Ditto for StorePtr above.  It could be good to remove these enum cases – and the associated code to handle them, and just have a #define in this header mapping LoadPtr/StorePtr appropriately.
&gt; 

I think we still need the LoadPtr and StorePtr. Because we have the cases to load/store an unboxed JSCell and a Storage pointer, which are operations on the raw pointers.

&gt; &gt; Source/JavaScriptCore/dfg/DFGThunks.cpp:48
&gt; &gt; +#if CPU(X86_64)
&gt; 
&gt; See comment in emitPutToCallFrameHeader - USE(JSVALUE64) &amp; store32.
&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGThunks.cpp:80
&gt; &gt; +#if CPU(X86_64)
&gt; 
&gt; See comment in emitPutToCallFrameHeader - USE(JSVALUE64) &amp; load32.
&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGThunks.cpp:128
&gt; &gt; +#if CPU(X86_64)
&gt; 
&gt; See comment in emitPutToCallFrameHeader - #if USE(JSVALUE64).
&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGThunks.cpp:155
&gt; &gt; +#if CPU(X86_64)
&gt; 
&gt; See comment in emitPutToCallFrameHeader - USE(JSVALUE64) &amp; store32.
&gt; 
&gt; &gt; Source/JavaScriptCore/jit/JITStubCall.h:140
&gt; &gt; +#if CPU(X86_64)
&gt; 
&gt; See comment in emitPutToCallFrameHeader - #if USE(JSVALUE64)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>745958</commentid>
    <comment_count>20</comment_count>
      <attachid>169543</attachid>
    <who name="Yuqiang Xian">yuqiang.xian</who>
    <bug_when>2012-10-18 21:37:30 -0700</bug_when>
    <thetext>Created attachment 169543
Updated: Split patch - part 2: let the JIT compilers use the *64 interfaces of MacroAssemblerX86_64

Patch addressing Gavin&apos;s comments on changing the &quot;if CPU(X86_64)&quot;s to &quot;if USE(JSVALUE64)&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>745986</commentid>
    <comment_count>21</comment_count>
      <attachid>169543</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2012-10-18 22:40:55 -0700</bug_when>
    <thetext>Comment on attachment 169543
Updated: Split patch - part 2: let the JIT compilers use the *64 interfaces of MacroAssemblerX86_64

Looks good to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>746018</commentid>
    <comment_count>22</comment_count>
    <who name="Yuqiang Xian">yuqiang.xian</who>
    <bug_when>2012-10-18 23:09:43 -0700</bug_when>
    <thetext>Patch part2 landed as &lt;http://trac.webkit.org/changeset/131858&gt;.

Marking this bug as fixed as I think all the stuffs for the MacroAssembler refactoring and JIT compilers usage for the new interfaces are committed.

We still need some more work for real x32 support of the JavaScriptCore JIT compilers (but now becomes really easier), which will be tracked in bug #99153.
Also there we may want the similar work on the LLInt (the offline assembler and the LLInt implementation).

Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>754672</commentid>
    <comment_count>23</comment_count>
    <who name="Roger Fong">roger_fong</who>
    <bug_when>2012-10-30 14:40:36 -0700</bug_when>
    <thetext>This patch has caused a regression here:
https://bugs.webkit.org/show_bug.cgi?id=100789</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>168383</attachid>
            <date>2012-10-12 02:52:56 -0700</date>
            <delta_ts>2012-10-17 17:06:44 -0700</delta_ts>
            <desc>patch</desc>
            <filename>99154.0.patch</filename>
            <type>text/plain</type>
            <size>261934</size>
            <attacher name="Yuqiang Xian">yuqiang.xian</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTMxMTYyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMxNiBA
QAorMjAxMi0xMC0xMiAgWXVxaWFuZyBYaWFuICA8eXVxaWFuZy54aWFuQGludGVsLmNvbT4KKwor
ICAgICAgICBSZWZhY3RvciBNYWNyb0Fzc2VtYmxlciBpbnRlcmZhY2VzIHRvIGRpZmZlcmVudGlh
dGUgdGhlIHBvaW50ZXIgb3BlcmFuZHMgZnJvbSB0aGUgNjQtYml0IGludGVnZXIgb3BlcmFuZHMK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk5MTU0CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW4gY3VycmVu
dCBKYXZhU2NyaXB0Q29yZSBpbXBsZW1lbnRhdGlvbiBmb3IgSlNWQUxVRTY0IHBsYXRmb3JtIChp
LmUuLAorICAgICAgICB0aGUgWDY0IHBsYXRmb3JtKSwgd2UgYXNzdW1lIHRoYXQgdGhlIEpTVmFs
dWUgc2l6ZSBpcyBzYW1lIHRvIHRoZQorICAgICAgICBwb2ludGVyIHNpemUsIGFuZCB0aHVzIEVu
Y29kZWRKU1ZhbHVlIGlzIHNpbXBseSB0eXBlIGRlZmluZWQgYXMgYQorICAgICAgICAidm9pZCoi
LiBJbiB0aGUgSklUIGNvbXBpbGVyLCB3ZSBhbHNvIHRha2UgdGhpcyBhc3N1bXB0aW9uIGFuZCBp
bnZva2UKKyAgICAgICAgdGhlIHNhbWUgbWFjcm8gYXNzZW1ibGVyIGludGVyZmFjZXMgZm9yIGJv
dGggSlNWYWx1ZSBhbmQgcG9pbnRlcgorICAgICAgICBvcGVyYW5kcy4gV2UgbmVlZCB0byBkaWZm
ZXJlbnRpYXRlIHRoZSBvcGVyYXRpb25zIG9uIHBvaW50ZXJzIGZyb20gdGhlCisgICAgICAgIG9w
ZXJhdGlvbnMgb24gSlNWYWx1ZXMsIGFuZCBsZXQgdGhlbSBpbnZva2luZyBkaWZmZXJlbnQgbWFj
cm8KKyAgICAgICAgYXNzZW1ibGVyIGludGVyZmFjZXMuIEZvciBleGFtcGxlLCB3ZSBub3cgdXNl
IHRoZSBpbnRlcmZhY2Ugb2YKKyAgICAgICAgImxvYWRQdHIiIHRvIGxvYWQgZWl0aGVyIGEgcG9p
bnRlciBvciBhIEpTVmFsdWUsIGFuZCB3ZSBuZWVkIHRvIHN3aXRjaAorICAgICAgICB0byB1c2lu
ZyAibG9hZFB0ciIgdG8gbG9hZCBhIHBvaW50ZXIgYW5kIHNvbWUgbmV3ICJsb2FkNjQiIGludGVy
ZmFjZQorICAgICAgICB0byBsb2FkIGEgSlNWYWx1ZS4gVGhpcyB3b3VsZCBoZWxwIHVzIHN1cHBv
cnRpbmcgb3RoZXIgSlNWQUxVRTY0CisgICAgICAgIHBsYXRmb3JtcyB3aGVyZSBwb2ludGVyIHNp
emUgaXMgbm90IG5lY2Vzc2FyaWx5IDY0LWJpdHMsIGZvciBleGFtcGxlCisgICAgICAgIHgzMiAo
YnVnICM5OTE1MykuCisKKyAgICAgICAgVGhlIG1ham9yIG1vZGlmaWNhdGlvbiBJIG1hZGUgaXMg
dG8gaW50cm9kdWNlIHRoZSAiKjY0IiBpbnRlcmZhY2VzIGluCisgICAgICAgIHRoZSBNYWNyb0Fz
c2VtYmxlciBmb3IgdGhvc2Ugb3BlcmF0aW9ucyBvbiBKU1ZhbHVlcywga2VlcCB0aGUgIipQdHIi
CisgICAgICAgIGludGVyZmFjZXMgZm9yIHRob3NlIG9wZXJhdGlvbnMgb24gcmVhbCBwb2ludGVy
cywgYW5kIGdvIHRocm91Z2ggYWxsCisgICAgICAgIHRoZSBKSVQgY29tcGlsZXIgY29kZSB0byBj
b3JyZWN0IHRoZSB1c2FnZS4KKworICAgICAgICAqIGFzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNz
ZW1ibGVyLmg6IEFkZCB0aGUgSW1tNjQgaW50ZXJmYWNlcworICAgICAgICAoQWJzdHJhY3RNYWNy
b0Fzc2VtYmxlcik6CisgICAgICAgIChKU0M6OkFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW02NDo6VHJ1c3RlZEltbTY0KToKKyAgICAgICAgKFRydXN0ZWRJbW02NCk6CisgICAgICAg
IChKU0M6OkFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6OkltbTY0OjpJbW02NCk6CisgICAgICAgIChK
U0M6OkFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6OkltbTY0Ojphc1RydXN0ZWRJbW02NCk6CisgICAg
ICAgIChJbW02NCk6CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmg6IEFkZCBp
bnRlcmZhY2VzIGZvciBleHBsaWNpdCA2NC1iaXQgb3BlcmF0aW9ucworICAgICAgICAoTWFjcm9B
c3NlbWJsZXIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlcjo6cGVlazY0KToKKyAgICAg
ICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXI6OnBva2UpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2Vt
Ymxlcjo6cG9rZTY0KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXI6OnNob3VsZEJsaW5k
RG91YmxlKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXI6OnNob3VsZEJsaW5kKToKKyAg
ICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXI6OlJvdGF0ZWRJbW02NDo6Um90YXRlZEltbTY0KToK
KyAgICAgICAgKFJvdGF0ZWRJbW02NCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyOjpy
b3RhdGlvbkJsaW5kQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlcjo6bG9h
ZFJvdGF0aW9uQmxpbmRlZENvbnN0YW50KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXI6
Om1vdmUpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlcjo6YW5kNjQpOgorICAgICAgICAo
SlNDOjpNYWNyb0Fzc2VtYmxlcjo6c3RvcmU2NCk6CisgICAgICAgICogYXNzZW1ibGVyL01hY3Jv
QXNzZW1ibGVyWDg2Q29tbW9uLmg6IERpdHRvCisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVy
WDg2Q29tbW9uOjpzaG91bGRCbGluZEZvclNwZWNpZmljQXJjaCk6CisgICAgICAgIChNYWNyb0Fz
c2VtYmxlclg4NkNvbW1vbik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2Q29tbW9u
Ojptb3ZlKToKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaDogRGl0
dG8KKyAgICAgICAgKE1hY3JvQXNzZW1ibGVyWDg2XzY0KToKKyAgICAgICAgKEpTQzo6TWFjcm9B
c3NlbWJsZXJYODZfNjQ6OmFkZFB0cik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2
XzY0OjphbmRQdHIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4Nl82NDo6bmVnUHRy
KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJYODZfNjQ6Om9yUHRyKToKKyAgICAgICAg
KEpTQzo6TWFjcm9Bc3NlbWJsZXJYODZfNjQ6OnJvdGF0ZVJpZ2h0UHRyKToKKyAgICAgICAgKEpT
Qzo6TWFjcm9Bc3NlbWJsZXJYODZfNjQ6OnN1YlB0cik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNz
ZW1ibGVyWDg2XzY0Ojp4b3JQdHIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4Nl82
NDo6bG9hZFB0cik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0Ojpsb2FkUHRy
V2l0aEFkZHJlc3NPZmZzZXRQYXRjaCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2
XzY0Ojpsb2FkUHRyV2l0aENvbXBhY3RBZGRyZXNzT2Zmc2V0UGF0Y2gpOgorICAgICAgICAoSlND
OjpNYWNyb0Fzc2VtYmxlclg4Nl82NDo6c3RvcmVQdHIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fz
c2VtYmxlclg4Nl82NDo6c3RvcmVQdHJXaXRoQWRkcmVzc09mZnNldFBhdGNoKToKKyAgICAgICAg
KEpTQzo6TWFjcm9Bc3NlbWJsZXJYODZfNjQ6OmNvbXBhcmVQdHIpOgorICAgICAgICAoSlNDOjpN
YWNyb0Fzc2VtYmxlclg4Nl82NDo6YnJhbmNoUHRyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3Nl
bWJsZXJYODZfNjQ6OmJyYW5jaFRlc3RQdHIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxl
clg4Nl82NDo6dGVzdFB0cik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0Ojpt
b3ZlV2l0aFBhdGNoKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJYODZfNjQ6OmNvbnZl
cnRpYmxlTG9hZFB0cik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0OjpicmFu
Y2hBZGQzMik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0OjpicmFuY2hBZGRQ
dHIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4Nl82NDo6YnJhbmNoU3ViUHRyKToK
KyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJYODZfNjQ6OmJyYW5jaFB0cldpdGhQYXRjaCk6
CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0OjpzdG9yZVB0cldpdGhQYXRjaCk6
CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0OjphZGQ2NCk6CisgICAgICAgIChK
U0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0OjphbmQ2NCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNz
ZW1ibGVyWDg2XzY0OjpuZWc2NCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0
OjpvcjY0KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJYODZfNjQ6OnJvdGF0ZVJpZ2h0
NjQpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4Nl82NDo6c3ViNjQpOgorICAgICAg
ICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4Nl82NDo6eG9yNjQpOgorICAgICAgICAoSlNDOjpNYWNy
b0Fzc2VtYmxlclg4Nl82NDo6bG9hZDY0KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJY
ODZfNjQ6OmNvbnZlcnRpYmxlTG9hZDY0KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJY
ODZfNjQ6OmxvYWQ2NFdpdGhBZGRyZXNzT2Zmc2V0UGF0Y2gpOgorICAgICAgICAoSlNDOjpNYWNy
b0Fzc2VtYmxlclg4Nl82NDo6bG9hZDY0V2l0aENvbXBhY3RBZGRyZXNzT2Zmc2V0UGF0Y2gpOgor
ICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4Nl82NDo6c3RvcmU2NCk6CisgICAgICAgIChK
U0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0OjpzdG9yZTY0V2l0aEFkZHJlc3NPZmZzZXRQYXRjaCk6
CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0Ojptb3ZlNjRUb0RvdWJsZSk6Cisg
ICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0Ojptb3ZlRG91YmxlVG82NCk6CisgICAg
ICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0Ojpjb21wYXJlNjQpOgorICAgICAgICAoSlND
OjpNYWNyb0Fzc2VtYmxlclg4Nl82NDo6YnJhbmNoNjQpOgorICAgICAgICAoSlNDOjpNYWNyb0Fz
c2VtYmxlclg4Nl82NDo6YnJhbmNoVGVzdDY0KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJs
ZXJYODZfNjQ6OnRlc3Q2NCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0Ojpi
cmFuY2hBZGQ2NCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0OjpicmFuY2hT
dWI2NCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0OjpicmFuY2g2NFdpdGhQ
YXRjaCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0OjpzdG9yZTY0V2l0aFBh
dGNoKToKKyAgICAgICAgKiBhc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmg6CisgICAgICAgIChKU0M6
Olg4NkFzc2VtYmxlcjo6cm9ybF9pOHIpOgorICAgICAgICAoWDg2QXNzZW1ibGVyKToKKyAgICAg
ICAgKEpTQzo6WDg2QXNzZW1ibGVyOjp0ZXN0bF9ybSk6CisgICAgICAgIChKU0M6Olg4NkFzc2Vt
Ymxlcjo6bW92bF9tRUFYKToKKyAgICAgICAgKEpTQzo6WDg2QXNzZW1ibGVyOjptb3ZsX0VBWG0p
OgorICAgICAgICAoSlNDOjpYODZBc3NlbWJsZXI6Om1vdnFfbUVBWCk6CisgICAgICAgIChKU0M6
Olg4NkFzc2VtYmxlcjo6bW92cV9FQVhtKToKKyAgICAgICAgKiBkZmcvREZHQXNzZW1ibHlIZWxw
ZXJzLmNwcDogQ29ycmVjdCB0aGUgdXNhZ2Ugb2YgTWFjcm9Bc3NlbWJsZXIgaW50ZXJmYWNlcyB0
byBkaWZmZXJlbnRpYXRlIDY0LWJpdCBkYXRhIGFuZCBwb2ludGVycworICAgICAgICAoSlNDOjpE
Rkc6OkFzc2VtYmx5SGVscGVyczo6aml0QXNzZXJ0SXNJbnQzMik6CisgICAgICAgIChKU0M6OkRG
Rzo6QXNzZW1ibHlIZWxwZXJzOjpqaXRBc3NlcnRJc0pTSW50MzIpOgorICAgICAgICAoSlNDOjpE
Rkc6OkFzc2VtYmx5SGVscGVyczo6aml0QXNzZXJ0SXNKU051bWJlcik6CisgICAgICAgIChKU0M6
OkRGRzo6QXNzZW1ibHlIZWxwZXJzOjpqaXRBc3NlcnRJc0pTRG91YmxlKToKKyAgICAgICAgKEpT
Qzo6REZHOjpBc3NlbWJseUhlbHBlcnM6OmppdEFzc2VydElzQ2VsbCk6CisgICAgICAgICogZGZn
L0RGR0Fzc2VtYmx5SGVscGVycy5oOiAKKyAgICAgICAgKEpTQzo6REZHOjpBc3NlbWJseUhlbHBl
cnM6OmVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcik6CisgICAgICAgIChKU0M6OkRGRzo6QXNzZW1i
bHlIZWxwZXJzOjplbWl0UHV0SW1tZWRpYXRlVG9DYWxsRnJhbWVIZWFkZXIpOgorICAgICAgICAo
SlNDOjpERkc6OkFzc2VtYmx5SGVscGVyczo6YnJhbmNoSWZOb3RDZWxsKToKKyAgICAgICAgKEpT
Qzo6REZHOjpBc3NlbWJseUhlbHBlcnM6OmRlYnVnQ2FsbCk6CisgICAgICAgIChKU0M6OkRGRzo6
QXNzZW1ibHlIZWxwZXJzOjpib3hEb3VibGUpOgorICAgICAgICAoSlNDOjpERkc6OkFzc2VtYmx5
SGVscGVyczo6dW5ib3hEb3VibGUpOgorICAgICAgICAoSlNDOjpERkc6OkFzc2VtYmx5SGVscGVy
czo6ZW1pdEV4Y2VwdGlvbkNoZWNrKToKKyAgICAgICAgKiBkZmcvREZHQ0NhbGxIZWxwZXJzLmg6
CisgICAgICAgIChKU0M6OkRGRzo6Q0NhbGxIZWxwZXJzOjpzZXR1cEFyZ3VtZW50c1dpdGhFeGVj
U3RhdGUpOgorICAgICAgICAoQ0NhbGxIZWxwZXJzKToKKyAgICAgICAgKiBkZmcvREZHT1NSRXhp
dENvbXBpbGVyNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXRDb21waWxlcjo6Y29t
cGlsZUV4aXQpOgorICAgICAgICAqIGRmZy9ERkdPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKEpT
Qyk6CisgICAgICAgICogZGZnL0RGR1JlcGF0Y2guY3BwOgorICAgICAgICAoSlNDOjpERkc6Omdl
bmVyYXRlUHJvdG9DaGFpbkFjY2Vzc1N0dWIpOgorICAgICAgICAoSlNDOjpERkc6OnRyeUNhY2hl
R2V0QnlJRCk6CisgICAgICAgIChKU0M6OkRGRzo6dHJ5QnVpbGRHZXRCeUlETGlzdCk6CisgICAg
ICAgIChKU0M6OkRGRzo6ZW1pdFB1dFJlcGxhY2VTdHViKToKKyAgICAgICAgKEpTQzo6REZHOjpl
bWl0UHV0VHJhbnNpdGlvblN0dWIpOgorICAgICAgICAqIGRmZy9ERkdTY3JhdGNoUmVnaXN0ZXJB
bGxvY2F0b3IuaDoKKyAgICAgICAgKEpTQzo6REZHOjpTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6
OnByZXNlcnZlVXNlZFJlZ2lzdGVyc1RvU2NyYXRjaEJ1ZmZlcik6CisgICAgICAgIChKU0M6OkRG
Rzo6U2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpyZXN0b3JlVXNlZFJlZ2lzdGVyc0Zyb21TY3Jh
dGNoQnVmZmVyKToKKyAgICAgICAgKiBkZmcvREZHU2lsZW50UmVnaXN0ZXJTYXZlUGxhbi5oOgor
ICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmNoZWNrQXJndW1lbnRUeXBlcyk6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVWYWx1ZVRvSW50MzIpOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpjb21waWxlSW50MzJUb0RvdWJsZSk6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVJbnN0YW5jZU9mRm9yT2JqZWN0KToKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUluc3RhbmNlT2YpOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlU3RyaWN0RXFGb3JDb25zdGFudCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uQXJndW1l
bnRzKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuaDoKKyAgICAgICAgKFNwZWN1
bGF0aXZlSklUKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6c2lsZW50U2F2
ZVBsYW5Gb3JHUFIpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpzaWxlbnRT
cGlsbCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnNpbGVudEZpbGwpOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpzcGlsbCk6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnZhbHVlT2ZKU0NvbnN0YW50QXNJbW02NCk6CisgICAgICAg
IChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNhbGxPcGVyYXRpb24pOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjpicmFuY2g2NCk6CisgICAgICAgICogZGZnL0RGR1NwZWN1
bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpmaWxs
SW50ZWdlcik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZpbGxEb3VibGUp
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpmaWxsSlNWYWx1ZSk6CisgICAg
ICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlVmFsdWVUb051bWJl
cik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlVmFs
dWVUb0ludDMyKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3Vs
YXRpdmVVSW50MzJUb051bWJlcik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmNhY2hlZEdldEJ5SWQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjYWNo
ZWRQdXRCeUlkKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3Vs
YXRpdmVOb25QZWVwaG9sZUNvbXBhcmVOdWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaE51bGwpOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVBlZXBob2xlQnJhbmNoKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVOb25QZWVwaG9s
ZUNvbXBhcmUpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxh
dGl2ZVBlZXBob2xlU3RyaWN0RXEpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklU
Ojpub25TcGVjdWxhdGl2ZU5vblBlZXBob2xlU3RyaWN0RXEpOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OmZpbGxTcGVjdWxhdGVJbnRJbnRlcm5hbCk6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVEb3VibGUpOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQ2VsbCk6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVCb29sZWFuKToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6Y29udmVydFRvRG91YmxlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdEVxdWFsaXR5KToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdFRvT2JqZWN0T3JPdGhlckVxdWFsaXR5KToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlT2JqZWN0VG9P
YmplY3RPck90aGVyRXF1YWxpdHkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklU
Ojpjb21waWxlRG91YmxlQ29tcGFyZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVOb25TdHJpbmdDZWxsT3JPdGhlckxvZ2ljYWxOb3QpOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlTG9naWNhbE5vdCk6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmVtaXROb25TdHJpbmdDZWxsT3JPdGhlckJyYW5jaCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmVtaXRCcmFuY2gpOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlQ29udGlndW91c0dldEJ5VmFsKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFycmF5U3RvcmFnZUdldEJ5
VmFsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNvbnRpZ3Vv
dXNQdXRCeVZhbCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVB
cnJheVN0b3JhZ2VQdXRCeVZhbCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdUaHVua3MuY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6Om9zckV4aXRHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpERkc6
OnRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6
OkRGRzo6c2xvd1BhdGhGb3IpOgorICAgICAgICAoSlNDOjpERkc6OnZpcnR1YWxGb3JUaHVua0dl
bmVyYXRvcik6CisgICAgICAgICogaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwOgorICAgICAg
ICAoSlNDOjpJbnRlcnByZXRlcjo6ZHVtcFJlZ2lzdGVycyk6CisgICAgICAgICogaml0L0pJVC5j
cHA6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGUpOgorICAgICAgICAqIGppdC9K
SVQuaDoKKyAgICAgICAgKEpJVCk6CisgICAgICAgICogaml0L0pJVEFyaXRobWV0aWMuY3BwOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbmVnYXRlKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0U2xvd19vcF9uZWdhdGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcnNoaWZ0KToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF91cnNoaWZ0KToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF9iaXRhbmQpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVCaW5hcnlBcml0aE9wU2xvd0Nh
c2UpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZGl2KToKKyAgICAgICAgKiBqaXQvSklU
Q2FsbC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZUxvYWRWYXJhcmdzKToKKyAgICAg
ICAgKEpTQzo6SklUOjpjb21waWxlQ2FsbEV2YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBp
bGVDYWxsRXZhbFNsb3dDYXNlKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlT3BDYWxsKToK
KyAgICAgICAgKiBqaXQvSklUSW5saW5lTWV0aG9kcy5oOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRHZXRKSVRTdHViQXJnKToKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dFB1dENlbGxUb0NhbGxGcmFtZUhlYWRlcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFB1dElu
dFRvQ2FsbEZyYW1lSGVhZGVyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0UHV0VG9DYWxsRnJh
bWVIZWFkZXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRQdXRJbW1lZGlhdGVUb0NhbGxGcmFt
ZUhlYWRlcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXIz
Mik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXI2NCk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdEFsbG9jYXRlSlNBcnJheSk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEluaXRSZWdpc3Rlcik6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdEp1bXBJZkpTQ2VsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEp1bXBJZkJv
dGhKU0NlbGxzKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0SnVtcElmTm90SlNDZWxsKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0SnVtcElmSW1tZWRpYXRlSW50ZWdlcik6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdEp1bXBJZk5vdEltbWVkaWF0ZUludGVnZXIpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRKdW1wSWZOb3RJbW1lZGlhdGVJbnRlZ2Vycyk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdEZhc3RBcml0aEludFRvSW1tTm9DaGVjayk6CisgICAgICAgICogaml0L0pJVE9wY29kZXMu
Y3BwOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlQ1RJTmF0aXZlQ2FsbCk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9tb3YpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfaW5zdGFuY2VvZik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pc191bmRlZmluZWQp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaXNfYm9vbGVhbik6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9vcF9pc19udW1iZXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfbm90
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2pmYWxzZSk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9qZXFfbnVsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qbmVxX251
bGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfanRydWUpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3BfYml0eG9yKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2JpdG9yKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9wbmFtZXMpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3BfbmV4dF9wbmFtZSk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wU3Ry
aWN0RXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfY2F0Y2gpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfb3BfdGhyb3dfcmVmZXJlbmNlX2Vycm9yKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX2VxX251bGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbmVxX251bGwp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfY3JlYXRlX2FjdGl2YXRpb24pOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfY3JlYXRlX2FyZ3VtZW50cyk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9pbml0X2xhenlfcmVnKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19v
cF9jb252ZXJ0X3RoaXMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX25vdCk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfYXJndW1lbnRfYnlfdmFsKToKKyAgICAgICAg
KiBqaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
Z2V0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdENvbnRpZ3VvdXNHZXRCeVZhbCk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEFycmF5U3RvcmFnZUdldEJ5VmFsKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjpj
b21waWxlR2V0RGlyZWN0T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9i
eV9wbmFtZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdENvbnRpZ3VvdXNQdXRCeVZhbCk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdEFycmF5U3RvcmFnZVB1dEJ5VmFsKToKKyAgICAgICAgKEpT
Qzo6SklUOjpjb21waWxlR2V0QnlJZEhvdFBhdGgpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfcHV0X2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlUHV0RGlyZWN0T2Zmc2V0
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9zY29wZWRfdmFyKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX3B1dF9zY29wZWRfdmFyKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X29wX2dldF9nbG9iYWxfdmFyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9n
bG9iYWxfdmFyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9nbG9iYWxfdmFyX2No
ZWNrKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0SW50VHlwZWRBcnJheUdldEJ5VmFsKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0RmxvYXRUeXBlZEFycmF5R2V0QnlWYWwpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRGbG9hdFR5cGVkQXJyYXlQdXRCeVZhbCk6CisgICAgICAgICogaml0L0pJ
VFN0dWJDYWxsLmg6CisgICAgICAgIChKSVRTdHViQ2FsbCk6CisgICAgICAgIChKU0M6OkpJVFN0
dWJDYWxsOjpKSVRTdHViQ2FsbCk6CisgICAgICAgIChKU0M6OkpJVFN0dWJDYWxsOjphZGRBcmd1
bWVudCk6CisgICAgICAgIChKU0M6OkpJVFN0dWJDYWxsOjpjYWxsKToKKyAgICAgICAgKEpTQzo6
SklUU3R1YkNhbGw6OmNhbGxXaXRoVmFsdWVQcm9maWxpbmcpOgorICAgICAgICAqIGppdC9KSVRT
dHVicy5oOgorICAgICAgICAoSklUU3RhY2tGcmFtZSk6IHNvbWUgcG9pbnRlciAtPiBpbnQ2NCBj
aGFuZ2VzCisgICAgICAgICogaml0L0pTSW50ZXJmYWNlSklULmg6CisgICAgICAgIChKU0M6OkpT
SW50ZXJmYWNlSklUOjplbWl0SnVtcElmSW1tZWRpYXRlTnVtYmVyKToKKyAgICAgICAgKEpTQzo6
SlNJbnRlcmZhY2VKSVQ6OmVtaXRKdW1wSWZOb3RJbW1lZGlhdGVOdW1iZXIpOgorICAgICAgICAo
SlNDOjpKU0ludGVyZmFjZUpJVDo6ZW1pdExvYWRKU0NlbGwpOgorICAgICAgICAoSlNDOjpKU0lu
dGVyZmFjZUpJVDo6ZW1pdExvYWRJbnQzMik6CisgICAgICAgIChKU0M6OkpTSW50ZXJmYWNlSklU
OjplbWl0TG9hZERvdWJsZSk6CisgICAgICAgICogaml0L1NwZWNpYWxpemVkVGh1bmtKSVQuaDoK
KyAgICAgICAgKEpTQzo6U3BlY2lhbGl6ZWRUaHVua0pJVDo6cmV0dXJuRG91YmxlKToKKyAgICAg
ICAgKEpTQzo6U3BlY2lhbGl6ZWRUaHVua0pJVDo6dGFnUmV0dXJuQXNJbnQzMik6CisgICAgICAg
ICogcnVudGltZS9KU1ZhbHVlLmNwcDoKKyAgICAgICAgKEpTQzo6SlNWYWx1ZTo6ZGVzY3JpcHRp
b24pOgorICAgICAgICAqIHJ1bnRpbWUvSlNWYWx1ZS5oOiBjaGFuZ2UgSlNWQUxVRTY0IEVuY29k
ZWRKU1ZhbHVlIHR5cGUgZnJvbSAidm9pZCoiIHRvICJpbnQ2NF90Iiwgc2FtZSB0byBKU1ZBTFVF
MzJfNjQKKyAgICAgICAgKEpTQyk6CisgICAgICAgICogcnVudGltZS9KU1ZhbHVlSW5saW5lTWV0
aG9kcy5oOiBzdWJzZXF1ZW50IGNoYW5nZXMgY2F1c2VkIGJ5IEVuY29kZWRKU1ZhbHVlIHR5cGUg
ZGVmaW50aW9uIGNoYW5nZQorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6SlNWYWx1ZTo6
SlNWYWx1ZSk6CisgICAgICAgIChKU0M6OkpTVmFsdWU6Om9wZXJhdG9yIGJvb2wpOgorICAgICAg
ICAoSlNDOjpKU1ZhbHVlOjpvcGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6SlNWYWx1ZTo6b3Bl
cmF0b3IhPSk6CisgICAgICAgIChKU0M6OnJlaW50ZXJwcmV0RG91YmxlVG9JbnQ2NCk6CisgICAg
ICAgIChKU0M6OnJlaW50ZXJwcmV0SW50NjRUb0RvdWJsZSk6CisgICAgICAgIChKU0M6OkpTVmFs
dWU6OmFzRG91YmxlKToKKwogMjAxMi0xMC0xMSAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJl
cmdAYXBwbGUuY29tPgogCiAgICAgICAgIEJsb2NrQWxsb2NhdG9yIHNob3VsZCB1c2UgcmVnaW9u
cyBhcyBpdHMgVk0gYWxsb2NhdGlvbiBhYnN0cmFjdGlvbgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgJ
KHJldmlzaW9uIDEzMTE2MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJz
dHJhY3RNYWNyb0Fzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNjEsNiArMjYxLDQ0IEBA
IHB1YmxpYzoKIAogICAgIH07CiAgICAgCisgICAgLy8gVHJ1c3RlZEltbTY0OgorICAgIC8vCisg
ICAgLy8gQSA2NGJpdCBpbW1lZGlhdGUgb3BlcmFuZCB0byBhbiBpbnN0cnVjdGlvbiAtIHRoaXMg
aXMgd3JhcHBlZCBpbiBhCisgICAgLy8gY2xhc3MgcmVxdWlyaW5nIGV4cGxpY2l0IGNvbnN0cnVj
dGlvbiBpbiBvcmRlciB0byBwcmV2ZW50IFJlZ2lzdGVySURzCisgICAgLy8gKHdoaWNoIGFyZSBp
bXBsZW1lbnRlZCBhcyBhbiBlbnVtKSBmcm9tIGFjY2lkZW50YWxseSBiZWluZyBwYXNzZWQgYXMK
KyAgICAvLyBpbW1lZGlhdGUgdmFsdWVzLgorICAgIHN0cnVjdCBUcnVzdGVkSW1tNjQgeworICAg
ICAgICBUcnVzdGVkSW1tNjQoKSB7IH0KKyAgICAgICAgCisgICAgICAgIGV4cGxpY2l0IFRydXN0
ZWRJbW02NChpbnQ2NF90IHZhbHVlKQorICAgICAgICAgICAgOiBtX3ZhbHVlKHZhbHVlKQorICAg
ICAgICB7CisgICAgICAgIH0KKworICAgICAgICBleHBsaWNpdCBUcnVzdGVkSW1tNjQoY29uc3Qg
dm9pZCogdmFsdWUpCisgICAgICAgICAgICA6IG1fdmFsdWUocmVpbnRlcnByZXRfY2FzdDx1aW50
cHRyX3Q+KHZhbHVlKSkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgaW50NjRfdCBt
X3ZhbHVlOworICAgIH07CisKKworICAgIHN0cnVjdCBJbW02NCA6IAorI2lmIEVOQUJMRShKSVRf
Q09OU1RBTlRfQkxJTkRJTkcpCisgICAgICAgIHByaXZhdGUgVHJ1c3RlZEltbTY0IAorI2Vsc2UK
KyAgICAgICAgcHVibGljIFRydXN0ZWRJbW02NAorI2VuZGlmCisgICAgeworICAgICAgICBleHBs
aWNpdCBJbW02NChpbnQ2NF90IHZhbHVlKQorICAgICAgICAgICAgOiBUcnVzdGVkSW1tNjQodmFs
dWUpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICBjb25zdCBUcnVzdGVkSW1tNjQmIGFz
VHJ1c3RlZEltbTY0KCkgY29uc3QgeyByZXR1cm4gKnRoaXM7IH0KKworICAgIH07CisgICAgCiAg
ICAgLy8gU2VjdGlvbiAyOiBNYWNyb0Fzc2VtYmxlciBjb2RlIGJ1ZmZlciBoYW5kbGVzCiAgICAg
Ly8KICAgICAvLyBUaGUgZm9sbG93aW5nIHR5cGVzIGFyZSB1c2VkIHRvIHJlZmVyZW5jZSBpdGVt
cyBpbiB0aGUgY29kZSBidWZmZXIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvTWFjcm9Bc3NlbWJsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmgJKHJldmlzaW9uIDEzMTE2MikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtMTg3LDYgKzE4NywyMyBAQCBwdWJsaWM6CiAgICAgICAgIHN0b3JlUHRyKGltbSwgYWRkcmVz
c0ZvclBva2UoaW5kZXgpKTsKICAgICB9CiAKKyNpZiBDUFUoWDg2XzY0KQorICAgIHZvaWQgcGVl
azY0KFJlZ2lzdGVySUQgZGVzdCwgaW50IGluZGV4ID0gMCkKKyAgICB7CisgICAgICAgIGxvYWQ2
NChBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCAoaW5kZXggKiBzaXplb2Yodm9pZCopKSks
IGRlc3QpOworICAgIH0KKworICAgIHZvaWQgcG9rZShUcnVzdGVkSW1tNjQgdmFsdWUsIGludCBp
bmRleCA9IDApCisgICAgeworICAgICAgICBzdG9yZTY0KHZhbHVlLCBhZGRyZXNzRm9yUG9rZShp
bmRleCkpOworICAgIH0KKworICAgIHZvaWQgcG9rZTY0KFJlZ2lzdGVySUQgc3JjLCBpbnQgaW5k
ZXggPSAwKQorICAgIHsKKyAgICAgICAgc3RvcmU2NChzcmMsIGFkZHJlc3NGb3JQb2tlKGluZGV4
KSk7CisgICAgfQorI2VuZGlmCisgICAgCiAKICAgICAvLyBCYWNrd2FyZHMgYmFuY2hlcywgdGhl
c2UgYXJlIGN1cnJlbnRseSBhbGwgaW1wbGVtZW50ZWQgdXNpbmcgZXhpc3RpbmcgZm9yd2FyZHMg
YnJhbmNoIG1lY2hhbmlzbXMuCiAgICAgdm9pZCBicmFuY2hQdHIoUmVsYXRpb25hbENvbmRpdGlv
biBjb25kLCBSZWdpc3RlcklEIG9wMSwgVHJ1c3RlZEltbVB0ciBpbW0sIExhYmVsIHRhcmdldCkK
QEAgLTUzOSw5ICs1NTYsMTEgQEAgcHVibGljOgogI2lmIEVOQUJMRShKSVRfQ09OU1RBTlRfQkxJ
TkRJTkcpCiAgICAgdXNpbmcgTWFjcm9Bc3NlbWJsZXJCYXNlOjphZGRQdHI7CiAgICAgdXNpbmcg
TWFjcm9Bc3NlbWJsZXJCYXNlOjphbmRQdHI7CisgICAgdXNpbmcgTWFjcm9Bc3NlbWJsZXJCYXNl
OjphbmQ2NDsKICAgICB1c2luZyBNYWNyb0Fzc2VtYmxlckJhc2U6OmJyYW5jaFN1YlB0cjsKICAg
ICB1c2luZyBNYWNyb0Fzc2VtYmxlckJhc2U6OmNvbnZlcnRJbnQzMlRvRG91YmxlOwogICAgIHVz
aW5nIE1hY3JvQXNzZW1ibGVyQmFzZTo6c3RvcmVQdHI7CisgICAgdXNpbmcgTWFjcm9Bc3NlbWJs
ZXJCYXNlOjpzdG9yZTY0OwogICAgIHVzaW5nIE1hY3JvQXNzZW1ibGVyQmFzZTo6c3ViUHRyOwog
ICAgIHVzaW5nIE1hY3JvQXNzZW1ibGVyQmFzZTo6eG9yUHRyOwogICAgIApAQCAtNTUzLDcgKzU3
Miw3IEBAIHB1YmxpYzoKIAogICAgICAgICAvLyBUcnkgdG8gZm9yY2Ugbm9ybWFsaXNhdGlvbiwg
YW5kIGNoZWNrIHRoYXQgdGhlcmUncyBubyBjaGFuZ2UKICAgICAgICAgLy8gaW4gdGhlIGJpdCBw
YXR0ZXJuCi0gICAgICAgIGlmIChiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pih2YWx1ZSAqIDEuMCkg
IT0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4odmFsdWUpKQorICAgICAgICBpZiAoYml0d2lzZV9j
YXN0PHVpbnQ2NF90Pih2YWx1ZSAqIDEuMCkgIT0gYml0d2lzZV9jYXN0PHVpbnQ2NF90Pih2YWx1
ZSkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgICAgICB2YWx1ZSA9IGFicyh2YWx1
ZSk7CkBAIC01OTIsMTYgKzYxMSw2IEBAIHB1YmxpYzoKICAgICAgICAgZGVmYXVsdDogewogICAg
ICAgICAgICAgaWYgKHZhbHVlIDw9IDB4ZmYpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotI2lmIENQVShYODZfNjQpCi0gICAgICAgICAgICBKU1ZhbHVlIGpzVmFsdWUgPSBKU1ZhbHVl
OjpkZWNvZGUocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4odmFsdWUpKTsKLSAgICAgICAgICAgIGlm
IChqc1ZhbHVlLmlzSW50MzIoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gc2hvdWxkQmxpbmQo
SW1tMzIoanNWYWx1ZS5hc0ludDMyKCkpKTsKLSAgICAgICAgICAgIGlmIChqc1ZhbHVlLmlzRG91
YmxlKCkgJiYgIXNob3VsZEJsaW5kRG91YmxlKGpzVmFsdWUuYXNEb3VibGUoKSkpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgICAgICBpZiAoIXNob3VsZEJsaW5kRG91
YmxlKGJpdHdpc2VfY2FzdDxkb3VibGU+KHZhbHVlKSkpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotI2VuZGlmIAogICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHNo
b3VsZEJsaW5kRm9yU3BlY2lmaWNBcmNoKHZhbHVlKTsKQEAgLTYzMSw2ICs2NDAsNjcgQEAgcHVi
bGljOgogICAgICAgICByb3RhdGVSaWdodFB0cihjb25zdGFudC5yb3RhdGlvbiwgZGVzdCk7CiAg
ICAgfQogCisgICAgYm9vbCBzaG91bGRCbGluZChJbW02NCBpbW0pCisgICAgeyAKKyNpZiAhZGVm
aW5lZChOREVCVUcpCisgICAgICAgIFVOVVNFRF9QQVJBTShpbW0pOworICAgICAgICAvLyBEZWJ1
ZyBhbHdheXMgYmxpbmQgYWxsIGNvbnN0YW50cywgaWYgb25seSBzbyB3ZSBrbm93CisgICAgICAg
IC8vIGlmIHdlJ3ZlIGJyb2tlbiBibGluZGluZyBkdXJpbmcgcGF0Y2ggZGV2ZWxvcG1lbnQuCisg
ICAgICAgIHJldHVybiB0cnVlOyAgICAgICAgCisjZW5kaWYKKworICAgICAgICAvLyBGaXJzdCBv
ZmYgd2UnbGwgc3BlY2lhbCBjYXNlIGNvbW1vbiwgInNhZmUiIHZhbHVlcyB0byBhdm9pZCBodXJ0
aW5nCisgICAgICAgIC8vIHBlcmZvcm1hbmNlIHRvbyBtdWNoCisgICAgICAgIHVpbnQ2NF90IHZh
bHVlID0gaW1tLmFzVHJ1c3RlZEltbTY0KCkubV92YWx1ZTsKKyAgICAgICAgc3dpdGNoICh2YWx1
ZSkgeworICAgICAgICBjYXNlIDB4ZmZmZjoKKyAgICAgICAgY2FzZSAweGZmZmZmZjoKKyAgICAg
ICAgY2FzZSAweGZmZmZmZmZmTDoKKyAgICAgICAgY2FzZSAweGZmZmZmZmZmZmZMOgorICAgICAg
ICBjYXNlIDB4ZmZmZmZmZmZmZmZmTDoKKyAgICAgICAgY2FzZSAweGZmZmZmZmZmZmZmZmZmTDoK
KyAgICAgICAgY2FzZSAweGZmZmZmZmZmZmZmZmZmZmZMOgorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICBkZWZhdWx0OiB7CisgICAgICAgICAgICBpZiAodmFsdWUgPD0gMHhmZikK
KyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBKU1ZhbHVlIGpzVmFs
dWUgPSBKU1ZhbHVlOjpkZWNvZGUodmFsdWUpOworICAgICAgICAgICAgaWYgKGpzVmFsdWUuaXNJ
bnQzMigpKQorICAgICAgICAgICAgICAgIHJldHVybiBzaG91bGRCbGluZChJbW0zMihqc1ZhbHVl
LmFzSW50MzIoKSkpOworICAgICAgICAgICAgaWYgKGpzVmFsdWUuaXNEb3VibGUoKSAmJiAhc2hv
dWxkQmxpbmREb3VibGUoanNWYWx1ZS5hc0RvdWJsZSgpKSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICAgICAgICAgIGlmICghc2hvdWxkQmxpbmREb3VibGUoYml0d2lzZV9j
YXN0PGRvdWJsZT4odmFsdWUpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gc2hvdWxkQmxpbmRGb3JTcGVjaWZpY0Fy
Y2godmFsdWUpOworICAgIH0KKyAgICAKKyAgICBzdHJ1Y3QgUm90YXRlZEltbTY0IHsKKyAgICAg
ICAgUm90YXRlZEltbTY0KHVpbnQ2NF90IHYxLCB1aW50OF90IHYyKQorICAgICAgICAgICAgOiB2
YWx1ZSh2MSkKKyAgICAgICAgICAgICwgcm90YXRpb24odjIpCisgICAgICAgIHsKKyAgICAgICAg
fQorICAgICAgICBUcnVzdGVkSW1tNjQgdmFsdWU7CisgICAgICAgIFRydXN0ZWRJbW0zMiByb3Rh
dGlvbjsKKyAgICB9OworICAgIAorICAgIFJvdGF0ZWRJbW02NCByb3RhdGlvbkJsaW5kQ29uc3Rh
bnQoSW1tNjQgaW1tKQorICAgIHsKKyAgICAgICAgdWludDhfdCByb3RhdGlvbiA9IHJhbmRvbSgp
ICUgKHNpemVvZihpbnQ2NF90KSAqIDgpOworICAgICAgICB1aW50NjRfdCB2YWx1ZSA9IGltbS5h
c1RydXN0ZWRJbW02NCgpLm1fdmFsdWU7CisgICAgICAgIHZhbHVlID0gKHZhbHVlIDw8IHJvdGF0
aW9uKSB8ICh2YWx1ZSA+PiAoc2l6ZW9mKGludDY0X3QpICogOCAtIHJvdGF0aW9uKSk7CisgICAg
ICAgIHJldHVybiBSb3RhdGVkSW1tNjQodmFsdWUsIHJvdGF0aW9uKTsKKyAgICB9CisgICAgCisg
ICAgdm9pZCBsb2FkUm90YXRpb25CbGluZGVkQ29uc3RhbnQoUm90YXRlZEltbTY0IGNvbnN0YW50
LCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtb3ZlKGNvbnN0YW50LnZhbHVlLCBk
ZXN0KTsKKyAgICAgICAgcm90YXRlUmlnaHQ2NChjb25zdGFudC5yb3RhdGlvbiwgZGVzdCk7Cisg
ICAgfQorCiAgICAgdm9pZCBjb252ZXJ0SW50MzJUb0RvdWJsZShJbW0zMiBpbW0sIEZQUmVnaXN0
ZXJJRCBkZXN0KQogICAgIHsKICAgICAgICAgaWYgKHNob3VsZEJsaW5kKGltbSkpIHsKQEAgLTY0
OSw2ICs3MTksMjQgQEAgcHVibGljOgogICAgICAgICAgICAgbW92ZShpbW0uYXNUcnVzdGVkSW1t
UHRyKCksIGRlc3QpOwogICAgIH0KIAorICAgIHZvaWQgbW92ZShJbW02NCBpbW0sIFJlZ2lzdGVy
SUQgZGVzdCkKKyAgICB7CisgICAgICAgIGlmIChzaG91bGRCbGluZChpbW0pKQorICAgICAgICAg
ICAgbG9hZFJvdGF0aW9uQmxpbmRlZENvbnN0YW50KHJvdGF0aW9uQmxpbmRDb25zdGFudChpbW0p
LCBkZXN0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbW92ZShpbW0uYXNUcnVzdGVkSW1t
NjQoKSwgZGVzdCk7CisgICAgfQorCisgICAgdm9pZCBhbmQ2NChJbW0zMiBpbW0sIFJlZ2lzdGVy
SUQgZGVzdCkKKyAgICB7CisgICAgICAgIGlmIChzaG91bGRCbGluZChpbW0pKSB7CisgICAgICAg
ICAgICBCbGluZGVkSW1tMzIga2V5ID0gYW5kQmxpbmRlZENvbnN0YW50KGltbSk7CisgICAgICAg
ICAgICBhbmQ2NChrZXkudmFsdWUxLCBkZXN0KTsKKyAgICAgICAgICAgIGFuZDY0KGtleS52YWx1
ZTIsIGRlc3QpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGFuZDY0KGltbS5hc1RydXN0
ZWRJbW0zMigpLCBkZXN0KTsKKyAgICB9CisKICAgICBKdW1wIGJyYW5jaFB0cihSZWxhdGlvbmFs
Q29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgbGVmdCwgSW1tUHRyIHJpZ2h0KQogICAgIHsKICAg
ICAgICAgaWYgKHNob3VsZEJsaW5kKHJpZ2h0KSkgewpAQCAtNjY5LDYgKzc1NywxNiBAQCBwdWJs
aWM6CiAgICAgICAgICAgICBzdG9yZVB0cihpbW0uYXNUcnVzdGVkSW1tUHRyKCksIGRlc3QpOwog
ICAgIH0KIAorICAgIHZvaWQgc3RvcmU2NChJbW02NCBpbW0sIEFkZHJlc3MgZGVzdCkKKyAgICB7
CisgICAgICAgIGlmIChzaG91bGRCbGluZChpbW0pKSB7CisgICAgICAgICAgICBSZWdpc3RlcklE
IHNjcmF0Y2hSZWdpc3RlciA9IHNjcmF0Y2hSZWdpc3RlckZvckJsaW5kaW5nKCk7CisgICAgICAg
ICAgICBsb2FkUm90YXRpb25CbGluZGVkQ29uc3RhbnQocm90YXRpb25CbGluZENvbnN0YW50KGlt
bSksIHNjcmF0Y2hSZWdpc3Rlcik7CisgICAgICAgICAgICBzdG9yZTY0KHNjcmF0Y2hSZWdpc3Rl
ciwgZGVzdCk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgc3RvcmU2NChpbW0uYXNUcnVz
dGVkSW1tNjQoKSwgZGVzdCk7CisgICAgfQorCiAjZW5kaWYKIAogI2VuZGlmIC8vICFDUFUoWDg2
XzY0KQpAQCAtODYyLDYgKzk2MCwxMyBAQCBwdWJsaWM6CiAgICAgICAgIHN0b3JlUHRyKHZhbHVl
LCBhZGRyZXNzRm9yUG9rZShpbmRleCkpOwogICAgIH0KICAgICAKKyNpZiBDUFUoWDg2XzY0KQor
ICAgIHZvaWQgcG9rZShJbW02NCB2YWx1ZSwgaW50IGluZGV4ID0gMCkKKyAgICB7CisgICAgICAg
IHN0b3JlNjQodmFsdWUsIGFkZHJlc3NGb3JQb2tlKGluZGV4KSk7CisgICAgfQorI2VuZGlmCisg
ICAgCiAgICAgdm9pZCBzdG9yZTMyKEltbTMyIGltbSwgQWRkcmVzcyBkZXN0KQogICAgIHsKICAg
ICAgICAgaWYgKHNob3VsZEJsaW5kKGltbSkpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmgJKHJl
dmlzaW9uIDEzMTE2MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9B
c3NlbWJsZXJYODZDb21tb24uaAkod29ya2luZyBjb3B5KQpAQCAtOTcsOSArOTcsMTIgQEAgcHVi
bGljOgogI2lmIEVOQUJMRShKSVRfQ09OU1RBTlRfQkxJTkRJTkcpCiAgICAgc3RhdGljIGJvb2wg
c2hvdWxkQmxpbmRGb3JTcGVjaWZpY0FyY2godWludDMyX3QgdmFsdWUpIHsgcmV0dXJuIHZhbHVl
ID49IDB4MDBmZmZmZmY7IH0KICNpZiBDUFUoWDg2XzY0KQorICAgIHN0YXRpYyBib29sIHNob3Vs
ZEJsaW5kRm9yU3BlY2lmaWNBcmNoKHVpbnQ2NF90IHZhbHVlKSB7IHJldHVybiB2YWx1ZSA+PSAw
eDAwZmZmZmZmOyB9CisjaWYgT1MoREFSV0lOKSAvLyBPbiA2NC1iaXQgc3lzdGVtcyBvdGhlciB0
aGFuIERBUldJTiB1aW50NjRfdCBhbmQgdWludHB0cl90IGFyZSB0aGUgc2FtZSB0eXBlIHNvIG92
ZXJsb2FkIGlzIHByb2hpYml0ZWQuCiAgICAgc3RhdGljIGJvb2wgc2hvdWxkQmxpbmRGb3JTcGVj
aWZpY0FyY2godWludHB0cl90IHZhbHVlKSB7IHJldHVybiB2YWx1ZSA+PSAweDAwZmZmZmZmOyB9
CiAjZW5kaWYKICNlbmRpZgorI2VuZGlmCiAKICAgICAvLyBJbnRlZ2VyIGFyaXRobWV0aWMgb3Bl
cmF0aW9uczoKICAgICAvLwpAQCAtOTkzLDYgKzk5NiwxMSBAQCBwdWJsaWM6CiAgICAgICAgIG1f
YXNzZW1ibGVyLm1vdnFfaTY0cihpbW0uYXNJbnRwdHIoKSwgZGVzdCk7CiAgICAgfQogCisgICAg
dm9pZCBtb3ZlKFRydXN0ZWRJbW02NCBpbW0sIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAg
ICAgIG1fYXNzZW1ibGVyLm1vdnFfaTY0cihpbW0ubV92YWx1ZSwgZGVzdCk7CisgICAgfQorCiAg
ICAgdm9pZCBzd2FwKFJlZ2lzdGVySUQgcmVnMSwgUmVnaXN0ZXJJRCByZWcyKQogICAgIHsKICAg
ICAgICAgaWYgKHJlZzEgIT0gcmVnMikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0LmgJKHJldmlzaW9uIDEzMTE2
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZf
NjQuaAkod29ya2luZyBjb3B5KQpAQCAtMTU0LDcgKzE1NCw2IEBAIHB1YmxpYzoKICAgICAgICAg
cmV0dXJuIENhbGw6OmZyb21UYWlsSnVtcChuZXdKdW1wKTsKICAgICB9CiAKLQogICAgIHZvaWQg
YWRkUHRyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewogICAgICAgICBt
X2Fzc2VtYmxlci5hZGRxX3JyKHNyYywgZGVzdCk7CkBAIC0xNjUsMzEgKzE2NCwyNjQgQEAgcHVi
bGljOgogICAgICAgICBtX2Fzc2VtYmxlci5hZGRxX21yKHNyYy5vZmZzZXQsIHNyYy5iYXNlLCBk
ZXN0KTsKICAgICB9CiAKLSAgICB2b2lkIGFkZFB0cihBYnNvbHV0ZUFkZHJlc3Mgc3JjLCBSZWdp
c3RlcklEIGRlc3QpCisgICAgdm9pZCBhZGRQdHIoVHJ1c3RlZEltbTMyIGltbSwgUmVnaXN0ZXJJ
RCBzcmNEZXN0KQogICAgIHsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKHNyYy5tX3B0ciks
IHNjcmF0Y2hSZWdpc3Rlcik7Ci0gICAgICAgIGFkZFB0cihBZGRyZXNzKHNjcmF0Y2hSZWdpc3Rl
ciksIGRlc3QpOworICAgICAgICBtX2Fzc2VtYmxlci5hZGRxX2lyKGltbS5tX3ZhbHVlLCBzcmNE
ZXN0KTsKICAgICB9CiAKLSAgICB2b2lkIGFkZFB0cihUcnVzdGVkSW1tMzIgaW1tLCBSZWdpc3Rl
cklEIHNyY0Rlc3QpCisgICAgdm9pZCBhZGRQdHIoVHJ1c3RlZEltbTMyIGltbSwgUmVnaXN0ZXJJ
RCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7Ci0gICAgICAgIG1fYXNzZW1ibGVyLmFkZHFf
aXIoaW1tLm1fdmFsdWUsIHNyY0Rlc3QpOworICAgICAgICBtX2Fzc2VtYmxlci5sZWFxX21yKGlt
bS5tX3ZhbHVlLCBzcmMsIGRlc3QpOwogICAgIH0KIAotICAgIHZvaWQgYWRkUHRyKFRydXN0ZWRJ
bW1QdHIgaW1tLCBSZWdpc3RlcklEIGRlc3QpCisgICAgdm9pZCBhZGRQdHIoVHJ1c3RlZEltbTMy
IGltbSwgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuYWRkcV9p
bShpbW0ubV92YWx1ZSwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSk7CisgICAgfQorCisg
ICAgdm9pZCBhbmRQdHIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7Cisg
ICAgICAgIG1fYXNzZW1ibGVyLmFuZHFfcnIoc3JjLCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lk
IGFuZFB0cihUcnVzdGVkSW1tMzIgaW1tLCBSZWdpc3RlcklEIHNyY0Rlc3QpCisgICAgeworICAg
ICAgICBtX2Fzc2VtYmxlci5hbmRxX2lyKGltbS5tX3ZhbHVlLCBzcmNEZXN0KTsKKyAgICB9Cisg
ICAgCisgICAgdm9pZCBuZWdQdHIoUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9h
c3NlbWJsZXIubmVncV9yKGRlc3QpOworICAgIH0KKworICAgIHZvaWQgb3JQdHIoUmVnaXN0ZXJJ
RCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLm9ycV9y
cihzcmMsIGRlc3QpOworICAgIH0KKworICAgIHZvaWQgb3JQdHIoVHJ1c3RlZEltbTMyIGltbSwg
UmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIub3JxX2lyKGltbS5t
X3ZhbHVlLCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIHJvdGF0ZVJpZ2h0UHRyKFRydXN0ZWRJ
bW0zMiBpbW0sIFJlZ2lzdGVySUQgc3JjRHN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIu
cm9ycV9pOHIoaW1tLm1fdmFsdWUsIHNyY0RzdCk7CisgICAgfQorCisgICAgdm9pZCBzdWJQdHIo
UmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1i
bGVyLnN1YnFfcnIoc3JjLCBkZXN0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzdWJQdHIoVHJ1
c3RlZEltbTMyIGltbSwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJs
ZXIuc3VicV9pcihpbW0ubV92YWx1ZSwgZGVzdCk7CisgICAgfQorICAgIAorICAgIHZvaWQgeG9y
UHRyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fz
c2VtYmxlci54b3JxX3JyKHNyYywgZGVzdCk7CisgICAgfQorICAgIAorICAgIHZvaWQgeG9yUHRy
KFJlZ2lzdGVySUQgc3JjLCBBZGRyZXNzIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxl
ci54b3JxX3JtKHNyYywgZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSk7CisgICAgfQorCisgICAgdm9p
ZCB4b3JQdHIoVHJ1c3RlZEltbTMyIGltbSwgUmVnaXN0ZXJJRCBzcmNEZXN0KQorICAgIHsKKyAg
ICAgICAgbV9hc3NlbWJsZXIueG9ycV9pcihpbW0ubV92YWx1ZSwgc3JjRGVzdCk7CisgICAgfQor
CisgICAgdm9pZCBsb2FkUHRyKEltcGxpY2l0QWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklEIGRl
c3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5tb3ZxX21yKGFkZHJlc3Mub2Zmc2V0LCBh
ZGRyZXNzLmJhc2UsIGRlc3QpOworICAgIH0KKworICAgIHZvaWQgbG9hZFB0cihCYXNlSW5kZXgg
YWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubW92
cV9tcihhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNz
LnNjYWxlLCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIGxvYWRQdHIoY29uc3Qgdm9pZCogYWRk
cmVzcywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgaWYgKGRlc3QgPT0gWDg2UmVn
aXN0ZXJzOjplYXgpCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5tb3ZxX21FQVgoYWRkcmVzcyk7
CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGFkZHJlc3Mp
LCBkZXN0KTsKKyAgICAgICAgICAgIGxvYWRQdHIoZGVzdCwgZGVzdCk7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBEYXRhTGFiZWwzMiBsb2FkUHRyV2l0aEFkZHJlc3NPZmZzZXRQYXRjaChBZGRy
ZXNzIGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIHBhZEJlZm9yZVBh
dGNoKCk7CisgICAgICAgIG1fYXNzZW1ibGVyLm1vdnFfbXJfZGlzcDMyKGFkZHJlc3Mub2Zmc2V0
LCBhZGRyZXNzLmJhc2UsIGRlc3QpOworICAgICAgICByZXR1cm4gRGF0YUxhYmVsMzIodGhpcyk7
CisgICAgfQorICAgIAorICAgIERhdGFMYWJlbENvbXBhY3QgbG9hZFB0cldpdGhDb21wYWN0QWRk
cmVzc09mZnNldFBhdGNoKEFkZHJlc3MgYWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsK
KyAgICAgICAgcGFkQmVmb3JlUGF0Y2goKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubW92cV9tcl9k
aXNwOChhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlLCBkZXN0KTsKKyAgICAgICAgcmV0dXJu
IERhdGFMYWJlbENvbXBhY3QodGhpcyk7CisgICAgfQorCisgICAgdm9pZCBzdG9yZVB0cihSZWdp
c3RlcklEIHNyYywgSW1wbGljaXRBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fz
c2VtYmxlci5tb3ZxX3JtKHNyYywgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSk7CisgICAg
fQorCisgICAgdm9pZCBzdG9yZVB0cihSZWdpc3RlcklEIHNyYywgQmFzZUluZGV4IGFkZHJlc3Mp
CisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5tb3ZxX3JtKHNyYywgYWRkcmVzcy5vZmZzZXQs
IGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZSk7CisgICAgfQorICAg
IAorICAgIHZvaWQgc3RvcmVQdHIoUmVnaXN0ZXJJRCBzcmMsIHZvaWQqIGFkZHJlc3MpCisgICAg
eworICAgICAgICBpZiAoc3JjID09IFg4NlJlZ2lzdGVyczo6ZWF4KQorICAgICAgICAgICAgbV9h
c3NlbWJsZXIubW92cV9FQVhtKGFkZHJlc3MpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
IG1vdmUoVHJ1c3RlZEltbVB0cihhZGRyZXNzKSwgc2NyYXRjaFJlZ2lzdGVyKTsKKyAgICAgICAg
ICAgIHN0b3JlUHRyKHNyYywgc2NyYXRjaFJlZ2lzdGVyKTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIHZvaWQgc3RvcmVQdHIoVHJ1c3RlZEltbVB0ciBpbW0sIEJhc2VJbmRleCBhZGRyZXNzKQog
ICAgIHsKICAgICAgICAgbW92ZShpbW0sIHNjcmF0Y2hSZWdpc3Rlcik7Ci0gICAgICAgIG1fYXNz
ZW1ibGVyLmFkZHFfcnIoc2NyYXRjaFJlZ2lzdGVyLCBkZXN0KTsKKyAgICAgICAgbV9hc3NlbWJs
ZXIubW92cV9ybShzY3JhdGNoUmVnaXN0ZXIsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2Us
IGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUpOworICAgIH0KKyAgICAKKyAgICBEYXRhTGFi
ZWwzMiBzdG9yZVB0cldpdGhBZGRyZXNzT2Zmc2V0UGF0Y2goUmVnaXN0ZXJJRCBzcmMsIEFkZHJl
c3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIHBhZEJlZm9yZVBhdGNoKCk7CisgICAgICAgIG1f
YXNzZW1ibGVyLm1vdnFfcm1fZGlzcDMyKHNyYywgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFz
ZSk7CisgICAgICAgIHJldHVybiBEYXRhTGFiZWwzMih0aGlzKTsKICAgICB9CiAKLSAgICB2b2lk
IGFkZFB0cihUcnVzdGVkSW1tMzIgaW1tLCBSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0
KQorICAgIHZvaWQgY29tcGFyZVB0cihSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVy
SUQgbGVmdCwgVHJ1c3RlZEltbTMyIHJpZ2h0LCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewotICAg
ICAgICBtX2Fzc2VtYmxlci5sZWFxX21yKGltbS5tX3ZhbHVlLCBzcmMsIGRlc3QpOworICAgICAg
ICBpZiAoKChjb25kID09IEVxdWFsKSB8fCAoY29uZCA9PSBOb3RFcXVhbCkpICYmICFyaWdodC5t
X3ZhbHVlKQorICAgICAgICAgICAgbV9hc3NlbWJsZXIudGVzdHFfcnIobGVmdCwgbGVmdCk7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmNtcHFfaXIocmlnaHQubV92YWx1
ZSwgbGVmdCk7CisgICAgICAgIG1fYXNzZW1ibGVyLnNldENDX3IoeDg2Q29uZGl0aW9uKGNvbmQp
LCBkZXN0KTsKKyAgICAgICAgbV9hc3NlbWJsZXIubW92emJsX3JyKGRlc3QsIGRlc3QpOworICAg
IH0KKyAgICAKKyAgICB2b2lkIGNvbXBhcmVQdHIoUmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBS
ZWdpc3RlcklEIGxlZnQsIFJlZ2lzdGVySUQgcmlnaHQsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7
CisgICAgICAgIG1fYXNzZW1ibGVyLmNtcHFfcnIocmlnaHQsIGxlZnQpOworICAgICAgICBtX2Fz
c2VtYmxlci5zZXRDQ19yKHg4NkNvbmRpdGlvbihjb25kKSwgZGVzdCk7CisgICAgICAgIG1fYXNz
ZW1ibGVyLm1vdnpibF9ycihkZXN0LCBkZXN0KTsKKyAgICB9CisgICAgCisgICAgSnVtcCBicmFu
Y2hQdHIoUmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGxlZnQsIFJlZ2lzdGVy
SUQgcmlnaHQpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5jbXBxX3JyKHJpZ2h0LCBsZWZ0
KTsKKyAgICAgICAgcmV0dXJuIEp1bXAobV9hc3NlbWJsZXIuakNDKHg4NkNvbmRpdGlvbihjb25k
KSkpOwogICAgIH0KIAotICAgIHZvaWQgYWRkUHRyKFRydXN0ZWRJbW0zMiBpbW0sIEFkZHJlc3Mg
YWRkcmVzcykKKyAgICBKdW1wIGJyYW5jaFB0cihSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIFJl
Z2lzdGVySUQgbGVmdCwgVHJ1c3RlZEltbVB0ciByaWdodCkKICAgICB7Ci0gICAgICAgIG1fYXNz
ZW1ibGVyLmFkZHFfaW0oaW1tLm1fdmFsdWUsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2Up
OworICAgICAgICBpZiAoKChjb25kID09IEVxdWFsKSB8fCAoY29uZCA9PSBOb3RFcXVhbCkpICYm
ICFyaWdodC5tX3ZhbHVlKSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci50ZXN0cV9ycihsZWZ0
LCBsZWZ0KTsKKyAgICAgICAgICAgIHJldHVybiBKdW1wKG1fYXNzZW1ibGVyLmpDQyh4ODZDb25k
aXRpb24oY29uZCkpKTsKKyAgICAgICAgfQorICAgICAgICBtb3ZlKHJpZ2h0LCBzY3JhdGNoUmVn
aXN0ZXIpOworICAgICAgICByZXR1cm4gYnJhbmNoUHRyKGNvbmQsIGxlZnQsIHNjcmF0Y2hSZWdp
c3Rlcik7CisgICAgfQorCisgICAgSnVtcCBicmFuY2hQdHIoUmVsYXRpb25hbENvbmRpdGlvbiBj
b25kLCBSZWdpc3RlcklEIGxlZnQsIEFkZHJlc3MgcmlnaHQpCisgICAgeworICAgICAgICBtX2Fz
c2VtYmxlci5jbXBxX21yKHJpZ2h0Lm9mZnNldCwgcmlnaHQuYmFzZSwgbGVmdCk7CisgICAgICAg
IHJldHVybiBKdW1wKG1fYXNzZW1ibGVyLmpDQyh4ODZDb25kaXRpb24oY29uZCkpKTsKKyAgICB9
CisKKyAgICBKdW1wIGJyYW5jaFB0cihSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIEFkZHJlc3Mg
bGVmdCwgUmVnaXN0ZXJJRCByaWdodCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmNtcHFf
cm0ocmlnaHQsIGxlZnQub2Zmc2V0LCBsZWZ0LmJhc2UpOworICAgICAgICByZXR1cm4gSnVtcCht
X2Fzc2VtYmxlci5qQ0MoeDg2Q29uZGl0aW9uKGNvbmQpKSk7CisgICAgfQorCisgICAgSnVtcCBi
cmFuY2hUZXN0UHRyKFJlc3VsdENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIHJlZywgUmVnaXN0
ZXJJRCBtYXNrKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIudGVzdHFfcnIocmVnLCBtYXNr
KTsKKyAgICAgICAgcmV0dXJuIEp1bXAobV9hc3NlbWJsZXIuakNDKHg4NkNvbmRpdGlvbihjb25k
KSkpOworICAgIH0KKyAgICAKKyAgICBKdW1wIGJyYW5jaFRlc3RQdHIoUmVzdWx0Q29uZGl0aW9u
IGNvbmQsIFJlZ2lzdGVySUQgcmVnLCBUcnVzdGVkSW1tMzIgbWFzayA9IFRydXN0ZWRJbW0zMigt
MSkpCisgICAgeworICAgICAgICAvLyBpZiB3ZSBhcmUgb25seSBpbnRlcmVzdGVkIGluIHRoZSBs
b3cgc2V2ZW4gYml0cywgdGhpcyBjYW4gYmUgdGVzdGVkIHdpdGggYSB0ZXN0YgorICAgICAgICBp
ZiAobWFzay5tX3ZhbHVlID09IC0xKQorICAgICAgICAgICAgbV9hc3NlbWJsZXIudGVzdHFfcnIo
cmVnLCByZWcpOworICAgICAgICBlbHNlIGlmICgobWFzay5tX3ZhbHVlICYgfjB4N2YpID09IDAp
CisgICAgICAgICAgICBtX2Fzc2VtYmxlci50ZXN0Yl9pOHIobWFzay5tX3ZhbHVlLCByZWcpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2Fzc2VtYmxlci50ZXN0cV9pMzJyKG1hc2subV92
YWx1ZSwgcmVnKTsKKyAgICAgICAgcmV0dXJuIEp1bXAobV9hc3NlbWJsZXIuakNDKHg4NkNvbmRp
dGlvbihjb25kKSkpOworICAgIH0KKworICAgIHZvaWQgdGVzdFB0cihSZXN1bHRDb25kaXRpb24g
Y29uZCwgUmVnaXN0ZXJJRCByZWcsIFRydXN0ZWRJbW0zMiBtYXNrLCBSZWdpc3RlcklEIGRlc3Qp
CisgICAgeworICAgICAgICBpZiAobWFzay5tX3ZhbHVlID09IC0xKQorICAgICAgICAgICAgbV9h
c3NlbWJsZXIudGVzdHFfcnIocmVnLCByZWcpOworICAgICAgICBlbHNlIGlmICgobWFzay5tX3Zh
bHVlICYgfjB4N2YpID09IDApCisgICAgICAgICAgICBtX2Fzc2VtYmxlci50ZXN0Yl9pOHIobWFz
ay5tX3ZhbHVlLCByZWcpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2Fzc2VtYmxlci50
ZXN0cV9pMzJyKG1hc2subV92YWx1ZSwgcmVnKTsKKyAgICAgICAgc2V0MzIoeDg2Q29uZGl0aW9u
KGNvbmQpLCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIHRlc3RQdHIoUmVzdWx0Q29uZGl0aW9u
IGNvbmQsIFJlZ2lzdGVySUQgcmVnLCBSZWdpc3RlcklEIG1hc2ssIFJlZ2lzdGVySUQgZGVzdCkK
KyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnRlc3RxX3JyKHJlZywgbWFzayk7CisgICAgICAg
IHNldDMyKHg4NkNvbmRpdGlvbihjb25kKSwgZGVzdCk7CisgICAgfQorCisgICAgSnVtcCBicmFu
Y2hUZXN0UHRyKFJlc3VsdENvbmRpdGlvbiBjb25kLCBBZGRyZXNzIGFkZHJlc3MsIFRydXN0ZWRJ
bW0zMiBtYXNrID0gVHJ1c3RlZEltbTMyKC0xKSkKKyAgICB7CisgICAgICAgIGlmIChtYXNrLm1f
dmFsdWUgPT0gLTEpCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5jbXBxX2ltKDAsIGFkZHJlc3Mu
b2Zmc2V0LCBhZGRyZXNzLmJhc2UpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2Fzc2Vt
Ymxlci50ZXN0cV9pMzJtKG1hc2subV92YWx1ZSwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFz
ZSk7CisgICAgICAgIHJldHVybiBKdW1wKG1fYXNzZW1ibGVyLmpDQyh4ODZDb25kaXRpb24oY29u
ZCkpKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaFRlc3RQdHIoUmVzdWx0Q29uZGl0aW9uIGNv
bmQsIEFkZHJlc3MgYWRkcmVzcywgUmVnaXN0ZXJJRCByZWcpCisgICAgeworICAgICAgICBtX2Fz
c2VtYmxlci50ZXN0cV9ybShyZWcsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UpOworICAg
ICAgICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5qQ0MoeDg2Q29uZGl0aW9uKGNvbmQpKSk7Cisg
ICAgfQorCisgICAgSnVtcCBicmFuY2hUZXN0UHRyKFJlc3VsdENvbmRpdGlvbiBjb25kLCBCYXNl
SW5kZXggYWRkcmVzcywgVHJ1c3RlZEltbTMyIG1hc2sgPSBUcnVzdGVkSW1tMzIoLTEpKQorICAg
IHsKKyAgICAgICAgaWYgKG1hc2subV92YWx1ZSA9PSAtMSkKKyAgICAgICAgICAgIG1fYXNzZW1i
bGVyLmNtcHFfaW0oMCwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5pbmRl
eCwgYWRkcmVzcy5zY2FsZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fYXNzZW1ibGVy
LnRlc3RxX2kzMm0obWFzay5tX3ZhbHVlLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlLCBh
ZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlKTsKKyAgICAgICAgcmV0dXJuIEp1bXAobV9hc3Nl
bWJsZXIuakNDKHg4NkNvbmRpdGlvbihjb25kKSkpOworICAgIH0KKworICAgIERhdGFMYWJlbFB0
ciBtb3ZlV2l0aFBhdGNoKFRydXN0ZWRJbW1QdHIgaW5pdGlhbFZhbHVlLCBSZWdpc3RlcklEIGRl
c3QpCisgICAgeworICAgICAgICBwYWRCZWZvcmVQYXRjaCgpOworICAgICAgICBtX2Fzc2VtYmxl
ci5tb3ZxX2k2NHIoaW5pdGlhbFZhbHVlLmFzSW50cHRyKCksIGRlc3QpOworICAgICAgICByZXR1
cm4gRGF0YUxhYmVsUHRyKHRoaXMpOworICAgIH0KKworICAgIHZvaWQgYWRkUHRyKEFic29sdXRl
QWRkcmVzcyBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cihzcmMubV9wdHIpLCBzY3JhdGNoUmVnaXN0ZXIpOworICAgICAgICBhZGRQdHIoQWRk
cmVzcyhzY3JhdGNoUmVnaXN0ZXIpLCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIGFkZFB0cihU
cnVzdGVkSW1tUHRyIGltbSwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbW92ZShp
bW0sIHNjcmF0Y2hSZWdpc3Rlcik7CisgICAgICAgIGFkZFB0cihzY3JhdGNoUmVnaXN0ZXIsIGRl
c3QpOwogICAgIH0KIAogICAgIHZvaWQgYWRkUHRyKFRydXN0ZWRJbW0zMiBpbW0sIEFic29sdXRl
QWRkcmVzcyBhZGRyZXNzKQpAQCAtMTk4LDE4NyArNDMwLDMzNiBAQCBwdWJsaWM6CiAgICAgICAg
IGFkZFB0cihpbW0sIEFkZHJlc3Moc2NyYXRjaFJlZ2lzdGVyKSk7CiAgICAgfQogCisgICAgdm9p
ZCBvclB0cihUcnVzdGVkSW1tUHRyIGltbSwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAg
ICAgbW92ZShpbW0sIHNjcmF0Y2hSZWdpc3Rlcik7CisgICAgICAgIG9yUHRyKHNjcmF0Y2hSZWdp
c3RlciwgZGVzdCk7CisgICAgfQorCisgICAgdm9pZCBvclB0cihSZWdpc3RlcklEIG9wMSwgUmVn
aXN0ZXJJRCBvcDIsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIGlmIChvcDEgPT0g
b3AyKQorICAgICAgICAgICAgbW92ZShvcDEsIGRlc3QpOworICAgICAgICBlbHNlIGlmIChvcDEg
PT0gZGVzdCkKKyAgICAgICAgICAgIG9yUHRyKG9wMiwgZGVzdCk7CisgICAgICAgIGVsc2Ugewor
ICAgICAgICAgICAgbW92ZShvcDIsIGRlc3QpOworICAgICAgICAgICAgb3JQdHIob3AxLCBkZXN0
KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgb3JQdHIoVHJ1c3RlZEltbTMyIGltbSwg
UmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1vdmUoc3Jj
LCBkZXN0KTsKKyAgICAgICAgb3JQdHIoaW1tLCBkZXN0KTsKKyAgICB9CisgICAgCisgICAgdm9p
ZCBzdWJQdHIoVHJ1c3RlZEltbVB0ciBpbW0sIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAg
ICAgIG1vdmUoaW1tLCBzY3JhdGNoUmVnaXN0ZXIpOworICAgICAgICBzdWJQdHIoc2NyYXRjaFJl
Z2lzdGVyLCBkZXN0KTsKKyAgICB9CisKKyAgICBDb252ZXJ0aWJsZUxvYWRMYWJlbCBjb252ZXJ0
aWJsZUxvYWRQdHIoQWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAg
ICAgICBDb252ZXJ0aWJsZUxvYWRMYWJlbCByZXN1bHQgPSBDb252ZXJ0aWJsZUxvYWRMYWJlbCh0
aGlzKTsKKyAgICAgICAgbG9hZFB0cihhZGRyZXNzLCBkZXN0KTsKKyAgICAgICAgcmV0dXJuIHJl
c3VsdDsKKyAgICB9CisKKyAgICB2b2lkIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIgaW1tLCBJbXBs
aWNpdEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1vdmUoaW1tLCBzY3JhdGNoUmVn
aXN0ZXIpOworICAgICAgICBzdG9yZVB0cihzY3JhdGNoUmVnaXN0ZXIsIGFkZHJlc3MpOworICAg
IH0KKworICAgIEp1bXAgYnJhbmNoQWRkMzIoUmVzdWx0Q29uZGl0aW9uIGNvbmQsIFRydXN0ZWRJ
bW0zMiBzcmMsIEFic29sdXRlQWRkcmVzcyBkZXN0KQorICAgIHsKKyAgICAgICAgbW92ZShUcnVz
dGVkSW1tUHRyKGRlc3QubV9wdHIpLCBzY3JhdGNoUmVnaXN0ZXIpOworICAgICAgICBhZGQzMihz
cmMsIEFkZHJlc3Moc2NyYXRjaFJlZ2lzdGVyKSk7CisgICAgICAgIHJldHVybiBKdW1wKG1fYXNz
ZW1ibGVyLmpDQyh4ODZDb25kaXRpb24oY29uZCkpKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5j
aFB0cihSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIEFic29sdXRlQWRkcmVzcyBsZWZ0LCBSZWdp
c3RlcklEIHJpZ2h0KQorICAgIHsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGxlZnQubV9w
dHIpLCBzY3JhdGNoUmVnaXN0ZXIpOworICAgICAgICByZXR1cm4gYnJhbmNoUHRyKGNvbmQsIEFk
ZHJlc3Moc2NyYXRjaFJlZ2lzdGVyKSwgcmlnaHQpOworICAgIH0KKworICAgIEp1bXAgYnJhbmNo
UHRyKFJlbGF0aW9uYWxDb25kaXRpb24gY29uZCwgQWRkcmVzcyBsZWZ0LCBUcnVzdGVkSW1tUHRy
IHJpZ2h0KQorICAgIHsKKyAgICAgICAgbW92ZShyaWdodCwgc2NyYXRjaFJlZ2lzdGVyKTsKKyAg
ICAgICAgcmV0dXJuIGJyYW5jaFB0cihjb25kLCBsZWZ0LCBzY3JhdGNoUmVnaXN0ZXIpOworICAg
IH0KKworICAgIEp1bXAgYnJhbmNoVGVzdFB0cihSZXN1bHRDb25kaXRpb24gY29uZCwgQWJzb2x1
dGVBZGRyZXNzIGFkZHJlc3MsIFRydXN0ZWRJbW0zMiBtYXNrID0gVHJ1c3RlZEltbTMyKC0xKSkK
KyAgICB7CisgICAgICAgIGxvYWRQdHIoYWRkcmVzcy5tX3B0ciwgc2NyYXRjaFJlZ2lzdGVyKTsK
KyAgICAgICAgcmV0dXJuIGJyYW5jaFRlc3RQdHIoY29uZCwgc2NyYXRjaFJlZ2lzdGVyLCBtYXNr
KTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaEFkZFB0cihSZXN1bHRDb25kaXRpb24gY29uZCwg
VHJ1c3RlZEltbTMyIGltbSwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgYWRkUHRy
KGltbSwgZGVzdCk7CisgICAgICAgIHJldHVybiBKdW1wKG1fYXNzZW1ibGVyLmpDQyh4ODZDb25k
aXRpb24oY29uZCkpKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaEFkZFB0cihSZXN1bHRDb25k
aXRpb24gY29uZCwgUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAg
ICAgIGFkZFB0cihzcmMsIGRlc3QpOworICAgICAgICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5q
Q0MoeDg2Q29uZGl0aW9uKGNvbmQpKSk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2hTdWJQdHIo
UmVzdWx0Q29uZGl0aW9uIGNvbmQsIFRydXN0ZWRJbW0zMiBpbW0sIFJlZ2lzdGVySUQgZGVzdCkK
KyAgICB7CisgICAgICAgIHN1YlB0cihpbW0sIGRlc3QpOworICAgICAgICByZXR1cm4gSnVtcCht
X2Fzc2VtYmxlci5qQ0MoeDg2Q29uZGl0aW9uKGNvbmQpKSk7CisgICAgfQorCisgICAgSnVtcCBi
cmFuY2hTdWJQdHIoUmVzdWx0Q29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgc3JjMSwgVHJ1c3Rl
ZEltbTMyIHNyYzIsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1vdmUoc3JjMSwg
ZGVzdCk7CisgICAgICAgIHJldHVybiBicmFuY2hTdWJQdHIoY29uZCwgc3JjMiwgZGVzdCk7Cisg
ICAgfQorCisgICAgSnVtcCBicmFuY2hQdHJXaXRoUGF0Y2goUmVsYXRpb25hbENvbmRpdGlvbiBj
b25kLCBSZWdpc3RlcklEIGxlZnQsIERhdGFMYWJlbFB0ciYgZGF0YUxhYmVsLCBUcnVzdGVkSW1t
UHRyIGluaXRpYWxSaWdodFZhbHVlID0gVHJ1c3RlZEltbVB0cigwKSkKKyAgICB7CisgICAgICAg
IGRhdGFMYWJlbCA9IG1vdmVXaXRoUGF0Y2goaW5pdGlhbFJpZ2h0VmFsdWUsIHNjcmF0Y2hSZWdp
c3Rlcik7CisgICAgICAgIHJldHVybiBicmFuY2hQdHIoY29uZCwgbGVmdCwgc2NyYXRjaFJlZ2lz
dGVyKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaFB0cldpdGhQYXRjaChSZWxhdGlvbmFsQ29u
ZGl0aW9uIGNvbmQsIEFkZHJlc3MgbGVmdCwgRGF0YUxhYmVsUHRyJiBkYXRhTGFiZWwsIFRydXN0
ZWRJbW1QdHIgaW5pdGlhbFJpZ2h0VmFsdWUgPSBUcnVzdGVkSW1tUHRyKDApKQorICAgIHsKKyAg
ICAgICAgZGF0YUxhYmVsID0gbW92ZVdpdGhQYXRjaChpbml0aWFsUmlnaHRWYWx1ZSwgc2NyYXRj
aFJlZ2lzdGVyKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaFB0cihjb25kLCBsZWZ0LCBzY3JhdGNo
UmVnaXN0ZXIpOworICAgIH0KKworICAgIERhdGFMYWJlbFB0ciBzdG9yZVB0cldpdGhQYXRjaChU
cnVzdGVkSW1tUHRyIGluaXRpYWxWYWx1ZSwgSW1wbGljaXRBZGRyZXNzIGFkZHJlc3MpCisgICAg
eworICAgICAgICBEYXRhTGFiZWxQdHIgbGFiZWwgPSBtb3ZlV2l0aFBhdGNoKGluaXRpYWxWYWx1
ZSwgc2NyYXRjaFJlZ2lzdGVyKTsKKyAgICAgICAgc3RvcmVQdHIoc2NyYXRjaFJlZ2lzdGVyLCBh
ZGRyZXNzKTsKKyAgICAgICAgcmV0dXJuIGxhYmVsOworICAgIH0KKworICAgIHZvaWQgYWRkNjQo
UmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1i
bGVyLmFkZHFfcnIoc3JjLCBkZXN0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhZGQ2NChBZGRy
ZXNzIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuYWRk
cV9tcihzcmMub2Zmc2V0LCBzcmMuYmFzZSwgZGVzdCk7CisgICAgfQorCisgICAgdm9pZCBhZGQ2
NChBYnNvbHV0ZUFkZHJlc3Mgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIoc3JjLm1fcHRyKSwgc2NyYXRjaFJlZ2lzdGVyKTsKKyAgICAgICAg
YWRkNjQoQWRkcmVzcyhzY3JhdGNoUmVnaXN0ZXIpLCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lk
IGFkZDY0KFRydXN0ZWRJbW0zMiBpbW0sIFJlZ2lzdGVySUQgc3JjRGVzdCkKKyAgICB7CisgICAg
ICAgIG1fYXNzZW1ibGVyLmFkZHFfaXIoaW1tLm1fdmFsdWUsIHNyY0Rlc3QpOworICAgIH0KKwor
ICAgIHZvaWQgYWRkNjQoVHJ1c3RlZEltbTY0IGltbSwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsK
KyAgICAgICAgbW92ZShpbW0sIHNjcmF0Y2hSZWdpc3Rlcik7CisgICAgICAgIGFkZDY0KHNjcmF0
Y2hSZWdpc3RlciwgZGVzdCk7CisgICAgfQorCisgICAgdm9pZCBhZGQ2NChUcnVzdGVkSW1tMzIg
aW1tLCBSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9h
c3NlbWJsZXIubGVhcV9tcihpbW0ubV92YWx1ZSwgc3JjLCBkZXN0KTsKKyAgICB9CisKKyAgICB2
b2lkIGFkZDY0KFRydXN0ZWRJbW0zMiBpbW0sIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAg
ICAgIG1fYXNzZW1ibGVyLmFkZHFfaW0oaW1tLm1fdmFsdWUsIGFkZHJlc3Mub2Zmc2V0LCBhZGRy
ZXNzLmJhc2UpOworICAgIH0KKwogICAgIHZvaWQgYWRkNjQoVHJ1c3RlZEltbTMyIGltbSwgQWJz
b2x1dGVBZGRyZXNzIGFkZHJlc3MpCiAgICAgewotICAgICAgICBhZGRQdHIoaW1tLCBhZGRyZXNz
KTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGFkZHJlc3MubV9wdHIpLCBzY3JhdGNoUmVn
aXN0ZXIpOworICAgICAgICBhZGQ2NChpbW0sIEFkZHJlc3Moc2NyYXRjaFJlZ2lzdGVyKSk7CiAg
ICAgfQogCi0gICAgdm9pZCBhbmRQdHIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkK
KyAgICB2b2lkIGFuZDY0KFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewog
ICAgICAgICBtX2Fzc2VtYmxlci5hbmRxX3JyKHNyYywgZGVzdCk7CiAgICAgfQogCi0gICAgdm9p
ZCBhbmRQdHIoVHJ1c3RlZEltbTMyIGltbSwgUmVnaXN0ZXJJRCBzcmNEZXN0KQorICAgIHZvaWQg
YW5kNjQoVHJ1c3RlZEltbTMyIGltbSwgUmVnaXN0ZXJJRCBzcmNEZXN0KQogICAgIHsKICAgICAg
ICAgbV9hc3NlbWJsZXIuYW5kcV9pcihpbW0ubV92YWx1ZSwgc3JjRGVzdCk7CiAgICAgfQogICAg
IAotICAgIHZvaWQgbmVnUHRyKFJlZ2lzdGVySUQgZGVzdCkKKyAgICB2b2lkIG5lZzY0KFJlZ2lz
dGVySUQgZGVzdCkKICAgICB7CiAgICAgICAgIG1fYXNzZW1ibGVyLm5lZ3FfcihkZXN0KTsKICAg
ICB9CiAKLSAgICB2b2lkIG9yUHRyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisg
ICAgdm9pZCBvcjY0KFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewogICAg
ICAgICBtX2Fzc2VtYmxlci5vcnFfcnIoc3JjLCBkZXN0KTsKICAgICB9CiAKLSAgICB2b2lkIG9y
UHRyKFRydXN0ZWRJbW1QdHIgaW1tLCBSZWdpc3RlcklEIGRlc3QpCisgICAgdm9pZCBvcjY0KFRy
dXN0ZWRJbW02NCBpbW0sIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CiAgICAgICAgIG1vdmUoaW1t
LCBzY3JhdGNoUmVnaXN0ZXIpOwotICAgICAgICBtX2Fzc2VtYmxlci5vcnFfcnIoc2NyYXRjaFJl
Z2lzdGVyLCBkZXN0KTsKKyAgICAgICAgb3I2NChzY3JhdGNoUmVnaXN0ZXIsIGRlc3QpOwogICAg
IH0KIAotICAgIHZvaWQgb3JQdHIoVHJ1c3RlZEltbTMyIGltbSwgUmVnaXN0ZXJJRCBkZXN0KQor
ICAgIHZvaWQgb3I2NChUcnVzdGVkSW1tMzIgaW1tLCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewog
ICAgICAgICBtX2Fzc2VtYmxlci5vcnFfaXIoaW1tLm1fdmFsdWUsIGRlc3QpOwogICAgIH0KIAot
ICAgIHZvaWQgb3JQdHIoUmVnaXN0ZXJJRCBvcDEsIFJlZ2lzdGVySUQgb3AyLCBSZWdpc3RlcklE
IGRlc3QpCisgICAgdm9pZCBvcjY0KFJlZ2lzdGVySUQgb3AxLCBSZWdpc3RlcklEIG9wMiwgUmVn
aXN0ZXJJRCBkZXN0KQogICAgIHsKICAgICAgICAgaWYgKG9wMSA9PSBvcDIpCiAgICAgICAgICAg
ICBtb3ZlKG9wMSwgZGVzdCk7CiAgICAgICAgIGVsc2UgaWYgKG9wMSA9PSBkZXN0KQotICAgICAg
ICAgICAgb3JQdHIob3AyLCBkZXN0KTsKKyAgICAgICAgICAgIG9yNjQob3AyLCBkZXN0KTsKICAg
ICAgICAgZWxzZSB7CiAgICAgICAgICAgICBtb3ZlKG9wMiwgZGVzdCk7Ci0gICAgICAgICAgICBv
clB0cihvcDEsIGRlc3QpOworICAgICAgICAgICAgb3I2NChvcDEsIGRlc3QpOwogICAgICAgICB9
CiAgICAgfQogCi0gICAgdm9pZCBvclB0cihUcnVzdGVkSW1tMzIgaW1tLCBSZWdpc3RlcklEIHNy
YywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHZvaWQgb3I2NChUcnVzdGVkSW1tMzIgaW1tLCBSZWdp
c3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKICAgICAgICAgbW92ZShzcmMsIGRl
c3QpOwotICAgICAgICBvclB0cihpbW0sIGRlc3QpOworICAgICAgICBvcjY0KGltbSwgZGVzdCk7
CiAgICAgfQogICAgIAotICAgIHZvaWQgcm90YXRlUmlnaHRQdHIoVHJ1c3RlZEltbTMyIGltbSwg
UmVnaXN0ZXJJRCBzcmNEc3QpCisgICAgdm9pZCByb3RhdGVSaWdodDY0KFRydXN0ZWRJbW0zMiBp
bW0sIFJlZ2lzdGVySUQgc3JjRHN0KQogICAgIHsKICAgICAgICAgbV9hc3NlbWJsZXIucm9ycV9p
OHIoaW1tLm1fdmFsdWUsIHNyY0RzdCk7CiAgICAgfQogCi0gICAgdm9pZCBzdWJQdHIoUmVnaXN0
ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB2b2lkIHN1YjY0KFJlZ2lzdGVySUQgc3Jj
LCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewogICAgICAgICBtX2Fzc2VtYmxlci5zdWJxX3JyKHNy
YywgZGVzdCk7CiAgICAgfQogICAgIAotICAgIHZvaWQgc3ViUHRyKFRydXN0ZWRJbW0zMiBpbW0s
IFJlZ2lzdGVySUQgZGVzdCkKKyAgICB2b2lkIHN1YjY0KFRydXN0ZWRJbW0zMiBpbW0sIFJlZ2lz
dGVySUQgZGVzdCkKICAgICB7CiAgICAgICAgIG1fYXNzZW1ibGVyLnN1YnFfaXIoaW1tLm1fdmFs
dWUsIGRlc3QpOwogICAgIH0KICAgICAKLSAgICB2b2lkIHN1YlB0cihUcnVzdGVkSW1tUHRyIGlt
bSwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHZvaWQgc3ViNjQoVHJ1c3RlZEltbTY0IGltbSwgUmVn
aXN0ZXJJRCBkZXN0KQogICAgIHsKICAgICAgICAgbW92ZShpbW0sIHNjcmF0Y2hSZWdpc3Rlcik7
Ci0gICAgICAgIG1fYXNzZW1ibGVyLnN1YnFfcnIoc2NyYXRjaFJlZ2lzdGVyLCBkZXN0KTsKKyAg
ICAgICAgc3ViNjQoc2NyYXRjaFJlZ2lzdGVyLCBkZXN0KTsKICAgICB9CiAKLSAgICB2b2lkIHhv
clB0cihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHZvaWQgeG9yNjQoUmVn
aXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CiAgICAgICAgIG1fYXNzZW1ibGVy
LnhvcnFfcnIoc3JjLCBkZXN0KTsKICAgICB9CiAgICAgCi0gICAgdm9pZCB4b3JQdHIoUmVnaXN0
ZXJJRCBzcmMsIEFkZHJlc3MgZGVzdCkKKyAgICB2b2lkIHhvcjY0KFJlZ2lzdGVySUQgc3JjLCBB
ZGRyZXNzIGRlc3QpCiAgICAgewogICAgICAgICBtX2Fzc2VtYmxlci54b3JxX3JtKHNyYywgZGVz
dC5vZmZzZXQsIGRlc3QuYmFzZSk7CiAgICAgfQogCi0gICAgdm9pZCB4b3JQdHIoVHJ1c3RlZElt
bTMyIGltbSwgUmVnaXN0ZXJJRCBzcmNEZXN0KQorICAgIHZvaWQgeG9yNjQoVHJ1c3RlZEltbTMy
IGltbSwgUmVnaXN0ZXJJRCBzcmNEZXN0KQogICAgIHsKICAgICAgICAgbV9hc3NlbWJsZXIueG9y
cV9pcihpbW0ubV92YWx1ZSwgc3JjRGVzdCk7CiAgICAgfQogCi0gICAgdm9pZCBsb2FkUHRyKElt
cGxpY2l0QWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3QpCisgICAgdm9pZCBsb2FkNjQo
SW1wbGljaXRBZGRyZXNzIGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CiAgICAgICAg
IG1fYXNzZW1ibGVyLm1vdnFfbXIoYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSwgZGVzdCk7
CiAgICAgfQogCi0gICAgQ29udmVydGlibGVMb2FkTGFiZWwgY29udmVydGlibGVMb2FkUHRyKEFk
ZHJlc3MgYWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIENvbnZlcnRpYmxlTG9hZExhYmVs
IGNvbnZlcnRpYmxlTG9hZDY0KEFkZHJlc3MgYWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0KQogICAg
IHsKICAgICAgICAgQ29udmVydGlibGVMb2FkTGFiZWwgcmVzdWx0ID0gQ29udmVydGlibGVMb2Fk
TGFiZWwodGhpcyk7CiAgICAgICAgIG1fYXNzZW1ibGVyLm1vdnFfbXIoYWRkcmVzcy5vZmZzZXQs
IGFkZHJlc3MuYmFzZSwgZGVzdCk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCi0g
ICAgdm9pZCBsb2FkUHRyKEJhc2VJbmRleCBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3QpCisgICAg
dm9pZCBsb2FkNjQoQmFzZUluZGV4IGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CiAg
ICAgICAgIG1fYXNzZW1ibGVyLm1vdnFfbXIoYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSwg
YWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZSwgZGVzdCk7CiAgICAgfQogCi0gICAgdm9pZCBs
b2FkUHRyKGNvbnN0IHZvaWQqIGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB2b2lkIGxv
YWQ2NChjb25zdCB2b2lkKiBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewogICAgICAg
ICBpZiAoZGVzdCA9PSBYODZSZWdpc3RlcnM6OmVheCkKICAgICAgICAgICAgIG1fYXNzZW1ibGVy
Lm1vdnFfbUVBWChhZGRyZXNzKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIoYWRkcmVzcyksIGRlc3QpOwotICAgICAgICAgICAgbG9hZFB0cihkZXN0LCBk
ZXN0KTsKKyAgICAgICAgICAgIGxvYWQ2NChkZXN0LCBkZXN0KTsKICAgICAgICAgfQogICAgIH0K
IAotICAgIERhdGFMYWJlbDMyIGxvYWRQdHJXaXRoQWRkcmVzc09mZnNldFBhdGNoKEFkZHJlc3Mg
YWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIERhdGFMYWJlbDMyIGxvYWQ2NFdpdGhBZGRy
ZXNzT2Zmc2V0UGF0Y2goQWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewog
ICAgICAgICBwYWRCZWZvcmVQYXRjaCgpOwogICAgICAgICBtX2Fzc2VtYmxlci5tb3ZxX21yX2Rp
c3AzMihhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlLCBkZXN0KTsKICAgICAgICAgcmV0dXJu
IERhdGFMYWJlbDMyKHRoaXMpOwogICAgIH0KICAgICAKLSAgICBEYXRhTGFiZWxDb21wYWN0IGxv
YWRQdHJXaXRoQ29tcGFjdEFkZHJlc3NPZmZzZXRQYXRjaChBZGRyZXNzIGFkZHJlc3MsIFJlZ2lz
dGVySUQgZGVzdCkKKyAgICBEYXRhTGFiZWxDb21wYWN0IGxvYWQ2NFdpdGhDb21wYWN0QWRkcmVz
c09mZnNldFBhdGNoKEFkZHJlc3MgYWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKICAg
ICAgICAgcGFkQmVmb3JlUGF0Y2goKTsKICAgICAgICAgbV9hc3NlbWJsZXIubW92cV9tcl9kaXNw
OChhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlLCBkZXN0KTsKICAgICAgICAgcmV0dXJuIERh
dGFMYWJlbENvbXBhY3QodGhpcyk7CiAgICAgfQogCi0gICAgdm9pZCBzdG9yZVB0cihSZWdpc3Rl
cklEIHNyYywgSW1wbGljaXRBZGRyZXNzIGFkZHJlc3MpCisgICAgdm9pZCBzdG9yZTY0KFJlZ2lz
dGVySUQgc3JjLCBJbXBsaWNpdEFkZHJlc3MgYWRkcmVzcykKICAgICB7CiAgICAgICAgIG1fYXNz
ZW1ibGVyLm1vdnFfcm0oc3JjLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlKTsKICAgICB9
CiAKLSAgICB2b2lkIHN0b3JlUHRyKFJlZ2lzdGVySUQgc3JjLCBCYXNlSW5kZXggYWRkcmVzcykK
KyAgICB2b2lkIHN0b3JlNjQoUmVnaXN0ZXJJRCBzcmMsIEJhc2VJbmRleCBhZGRyZXNzKQogICAg
IHsKICAgICAgICAgbV9hc3NlbWJsZXIubW92cV9ybShzcmMsIGFkZHJlc3Mub2Zmc2V0LCBhZGRy
ZXNzLmJhc2UsIGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUpOwogICAgIH0KICAgICAKLSAg
ICB2b2lkIHN0b3JlUHRyKFJlZ2lzdGVySUQgc3JjLCB2b2lkKiBhZGRyZXNzKQorICAgIHZvaWQg
c3RvcmU2NChSZWdpc3RlcklEIHNyYywgdm9pZCogYWRkcmVzcykKICAgICB7CiAgICAgICAgIGlm
IChzcmMgPT0gWDg2UmVnaXN0ZXJzOjplYXgpCiAgICAgICAgICAgICBtX2Fzc2VtYmxlci5tb3Zx
X0VBWG0oYWRkcmVzcyk7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgbW92ZShUcnVzdGVk
SW1tUHRyKGFkZHJlc3MpLCBzY3JhdGNoUmVnaXN0ZXIpOwotICAgICAgICAgICAgc3RvcmVQdHIo
c3JjLCBzY3JhdGNoUmVnaXN0ZXIpOworICAgICAgICAgICAgc3RvcmU2NChzcmMsIHNjcmF0Y2hS
ZWdpc3Rlcik7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICB2b2lkIHN0b3JlUHRyKFRydXN0ZWRJ
bW1QdHIgaW1tLCBJbXBsaWNpdEFkZHJlc3MgYWRkcmVzcykKKyAgICB2b2lkIHN0b3JlNjQoVHJ1
c3RlZEltbTY0IGltbSwgSW1wbGljaXRBZGRyZXNzIGFkZHJlc3MpCiAgICAgewogICAgICAgICBt
b3ZlKGltbSwgc2NyYXRjaFJlZ2lzdGVyKTsKLSAgICAgICAgc3RvcmVQdHIoc2NyYXRjaFJlZ2lz
dGVyLCBhZGRyZXNzKTsKKyAgICAgICAgc3RvcmU2NChzY3JhdGNoUmVnaXN0ZXIsIGFkZHJlc3Mp
OwogICAgIH0KIAotICAgIHZvaWQgc3RvcmVQdHIoVHJ1c3RlZEltbVB0ciBpbW0sIEJhc2VJbmRl
eCBhZGRyZXNzKQorICAgIHZvaWQgc3RvcmU2NChUcnVzdGVkSW1tNjQgaW1tLCBCYXNlSW5kZXgg
YWRkcmVzcykKICAgICB7CiAgICAgICAgIG1vdmUoaW1tLCBzY3JhdGNoUmVnaXN0ZXIpOwogICAg
ICAgICBtX2Fzc2VtYmxlci5tb3ZxX3JtKHNjcmF0Y2hSZWdpc3RlciwgYWRkcmVzcy5vZmZzZXQs
IGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZSk7CiAgICAgfQogICAg
IAotICAgIERhdGFMYWJlbDMyIHN0b3JlUHRyV2l0aEFkZHJlc3NPZmZzZXRQYXRjaChSZWdpc3Rl
cklEIHNyYywgQWRkcmVzcyBhZGRyZXNzKQorICAgIERhdGFMYWJlbDMyIHN0b3JlNjRXaXRoQWRk
cmVzc09mZnNldFBhdGNoKFJlZ2lzdGVySUQgc3JjLCBBZGRyZXNzIGFkZHJlc3MpCiAgICAgewog
ICAgICAgICBwYWRCZWZvcmVQYXRjaCgpOwogICAgICAgICBtX2Fzc2VtYmxlci5tb3ZxX3JtX2Rp
c3AzMihzcmMsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UpOwogICAgICAgICByZXR1cm4g
RGF0YUxhYmVsMzIodGhpcyk7CiAgICAgfQogCi0gICAgdm9pZCBtb3ZlUHRyVG9Eb3VibGUoUmVn
aXN0ZXJJRCBzcmMsIEZQUmVnaXN0ZXJJRCBkZXN0KQorICAgIHZvaWQgbW92ZTY0VG9Eb3VibGUo
UmVnaXN0ZXJJRCBzcmMsIEZQUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKICAgICAgICAgbV9hc3Nl
bWJsZXIubW92cV9ycihzcmMsIGRlc3QpOwogICAgIH0KIAotICAgIHZvaWQgbW92ZURvdWJsZVRv
UHRyKEZQUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB2b2lkIG1vdmVEb3Vi
bGVUbzY0KEZQUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CiAgICAgICAg
IG1fYXNzZW1ibGVyLm1vdnFfcnIoc3JjLCBkZXN0KTsKICAgICB9CiAKLSAgICB2b2lkIGNvbXBh
cmVQdHIoUmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGxlZnQsIFRydXN0ZWRJ
bW0zMiByaWdodCwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHZvaWQgY29tcGFyZTY0KFJlbGF0aW9u
YWxDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBsZWZ0LCBUcnVzdGVkSW1tMzIgcmlnaHQsIFJl
Z2lzdGVySUQgZGVzdCkKICAgICB7CiAgICAgICAgIGlmICgoKGNvbmQgPT0gRXF1YWwpIHx8IChj
b25kID09IE5vdEVxdWFsKSkgJiYgIXJpZ2h0Lm1fdmFsdWUpCiAgICAgICAgICAgICBtX2Fzc2Vt
Ymxlci50ZXN0cV9ycihsZWZ0LCBsZWZ0KTsKQEAgLTM4OCw2NyArNzY5LDYwIEBAIHB1YmxpYzoK
ICAgICAgICAgbV9hc3NlbWJsZXIubW92emJsX3JyKGRlc3QsIGRlc3QpOwogICAgIH0KICAgICAK
LSAgICB2b2lkIGNvbXBhcmVQdHIoUmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklE
IGxlZnQsIFJlZ2lzdGVySUQgcmlnaHQsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB2b2lkIGNvbXBh
cmU2NChSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgbGVmdCwgUmVnaXN0ZXJJ
RCByaWdodCwgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKICAgICAgICAgbV9hc3NlbWJsZXIuY21w
cV9ycihyaWdodCwgbGVmdCk7CiAgICAgICAgIG1fYXNzZW1ibGVyLnNldENDX3IoeDg2Q29uZGl0
aW9uKGNvbmQpLCBkZXN0KTsKICAgICAgICAgbV9hc3NlbWJsZXIubW92emJsX3JyKGRlc3QsIGRl
c3QpOwogICAgIH0KICAgICAKLSAgICBKdW1wIGJyYW5jaEFkZDMyKFJlc3VsdENvbmRpdGlvbiBj
b25kLCBUcnVzdGVkSW1tMzIgc3JjLCBBYnNvbHV0ZUFkZHJlc3MgZGVzdCkKLSAgICB7Ci0gICAg
ICAgIG1vdmUoVHJ1c3RlZEltbVB0cihkZXN0Lm1fcHRyKSwgc2NyYXRjaFJlZ2lzdGVyKTsKLSAg
ICAgICAgYWRkMzIoc3JjLCBBZGRyZXNzKHNjcmF0Y2hSZWdpc3RlcikpOwotICAgICAgICByZXR1
cm4gSnVtcChtX2Fzc2VtYmxlci5qQ0MoeDg2Q29uZGl0aW9uKGNvbmQpKSk7Ci0gICAgfQotCi0g
ICAgSnVtcCBicmFuY2hQdHIoUmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGxl
ZnQsIFJlZ2lzdGVySUQgcmlnaHQpCisgICAgSnVtcCBicmFuY2g2NChSZWxhdGlvbmFsQ29uZGl0
aW9uIGNvbmQsIFJlZ2lzdGVySUQgbGVmdCwgUmVnaXN0ZXJJRCByaWdodCkKICAgICB7CiAgICAg
ICAgIG1fYXNzZW1ibGVyLmNtcHFfcnIocmlnaHQsIGxlZnQpOwogICAgICAgICByZXR1cm4gSnVt
cChtX2Fzc2VtYmxlci5qQ0MoeDg2Q29uZGl0aW9uKGNvbmQpKSk7CiAgICAgfQogCi0gICAgSnVt
cCBicmFuY2hQdHIoUmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGxlZnQsIFRy
dXN0ZWRJbW1QdHIgcmlnaHQpCisgICAgSnVtcCBicmFuY2g2NChSZWxhdGlvbmFsQ29uZGl0aW9u
IGNvbmQsIFJlZ2lzdGVySUQgbGVmdCwgVHJ1c3RlZEltbTY0IHJpZ2h0KQogICAgIHsKICAgICAg
ICAgaWYgKCgoY29uZCA9PSBFcXVhbCkgfHwgKGNvbmQgPT0gTm90RXF1YWwpKSAmJiAhcmlnaHQu
bV92YWx1ZSkgewogICAgICAgICAgICAgbV9hc3NlbWJsZXIudGVzdHFfcnIobGVmdCwgbGVmdCk7
CiAgICAgICAgICAgICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5qQ0MoeDg2Q29uZGl0aW9uKGNv
bmQpKSk7CiAgICAgICAgIH0KICAgICAgICAgbW92ZShyaWdodCwgc2NyYXRjaFJlZ2lzdGVyKTsK
LSAgICAgICAgcmV0dXJuIGJyYW5jaFB0cihjb25kLCBsZWZ0LCBzY3JhdGNoUmVnaXN0ZXIpOwor
ICAgICAgICByZXR1cm4gYnJhbmNoNjQoY29uZCwgbGVmdCwgc2NyYXRjaFJlZ2lzdGVyKTsKICAg
ICB9CiAKLSAgICBKdW1wIGJyYW5jaFB0cihSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIFJlZ2lz
dGVySUQgbGVmdCwgQWRkcmVzcyByaWdodCkKKyAgICBKdW1wIGJyYW5jaDY0KFJlbGF0aW9uYWxD
b25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBsZWZ0LCBBZGRyZXNzIHJpZ2h0KQogICAgIHsKICAg
ICAgICAgbV9hc3NlbWJsZXIuY21wcV9tcihyaWdodC5vZmZzZXQsIHJpZ2h0LmJhc2UsIGxlZnQp
OwogICAgICAgICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5qQ0MoeDg2Q29uZGl0aW9uKGNvbmQp
KSk7CiAgICAgfQogCi0gICAgSnVtcCBicmFuY2hQdHIoUmVsYXRpb25hbENvbmRpdGlvbiBjb25k
LCBBYnNvbHV0ZUFkZHJlc3MgbGVmdCwgUmVnaXN0ZXJJRCByaWdodCkKKyAgICBKdW1wIGJyYW5j
aDY0KFJlbGF0aW9uYWxDb25kaXRpb24gY29uZCwgQWJzb2x1dGVBZGRyZXNzIGxlZnQsIFJlZ2lz
dGVySUQgcmlnaHQpCiAgICAgewogICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobGVmdC5tX3B0
ciksIHNjcmF0Y2hSZWdpc3Rlcik7Ci0gICAgICAgIHJldHVybiBicmFuY2hQdHIoY29uZCwgQWRk
cmVzcyhzY3JhdGNoUmVnaXN0ZXIpLCByaWdodCk7CisgICAgICAgIHJldHVybiBicmFuY2g2NChj
b25kLCBBZGRyZXNzKHNjcmF0Y2hSZWdpc3RlciksIHJpZ2h0KTsKICAgICB9CiAKLSAgICBKdW1w
IGJyYW5jaFB0cihSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIEFkZHJlc3MgbGVmdCwgUmVnaXN0
ZXJJRCByaWdodCkKKyAgICBKdW1wIGJyYW5jaDY0KFJlbGF0aW9uYWxDb25kaXRpb24gY29uZCwg
QWRkcmVzcyBsZWZ0LCBSZWdpc3RlcklEIHJpZ2h0KQogICAgIHsKICAgICAgICAgbV9hc3NlbWJs
ZXIuY21wcV9ybShyaWdodCwgbGVmdC5vZmZzZXQsIGxlZnQuYmFzZSk7CiAgICAgICAgIHJldHVy
biBKdW1wKG1fYXNzZW1ibGVyLmpDQyh4ODZDb25kaXRpb24oY29uZCkpKTsKICAgICB9CiAKLSAg
ICBKdW1wIGJyYW5jaFB0cihSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIEFkZHJlc3MgbGVmdCwg
VHJ1c3RlZEltbVB0ciByaWdodCkKKyAgICBKdW1wIGJyYW5jaDY0KFJlbGF0aW9uYWxDb25kaXRp
b24gY29uZCwgQWRkcmVzcyBsZWZ0LCBUcnVzdGVkSW1tNjQgcmlnaHQpCiAgICAgewogICAgICAg
ICBtb3ZlKHJpZ2h0LCBzY3JhdGNoUmVnaXN0ZXIpOwotICAgICAgICByZXR1cm4gYnJhbmNoUHRy
KGNvbmQsIGxlZnQsIHNjcmF0Y2hSZWdpc3Rlcik7CisgICAgICAgIHJldHVybiBicmFuY2g2NChj
b25kLCBsZWZ0LCBzY3JhdGNoUmVnaXN0ZXIpOwogICAgIH0KIAotICAgIEp1bXAgYnJhbmNoVGVz
dFB0cihSZXN1bHRDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCByZWcsIFJlZ2lzdGVySUQgbWFz
aykKKyAgICBKdW1wIGJyYW5jaFRlc3Q2NChSZXN1bHRDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJ
RCByZWcsIFJlZ2lzdGVySUQgbWFzaykKICAgICB7CiAgICAgICAgIG1fYXNzZW1ibGVyLnRlc3Rx
X3JyKHJlZywgbWFzayk7CiAgICAgICAgIHJldHVybiBKdW1wKG1fYXNzZW1ibGVyLmpDQyh4ODZD
b25kaXRpb24oY29uZCkpKTsKICAgICB9CiAgICAgCi0gICAgSnVtcCBicmFuY2hUZXN0UHRyKFJl
c3VsdENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIHJlZywgVHJ1c3RlZEltbTMyIG1hc2sgPSBU
cnVzdGVkSW1tMzIoLTEpKQorICAgIEp1bXAgYnJhbmNoVGVzdDY0KFJlc3VsdENvbmRpdGlvbiBj
b25kLCBSZWdpc3RlcklEIHJlZywgVHJ1c3RlZEltbTMyIG1hc2sgPSBUcnVzdGVkSW1tMzIoLTEp
KQogICAgIHsKICAgICAgICAgLy8gaWYgd2UgYXJlIG9ubHkgaW50ZXJlc3RlZCBpbiB0aGUgbG93
IHNldmVuIGJpdHMsIHRoaXMgY2FuIGJlIHRlc3RlZCB3aXRoIGEgdGVzdGIKICAgICAgICAgaWYg
KG1hc2subV92YWx1ZSA9PSAtMSkKQEAgLTQ2MCw3ICs4MzQsNyBAQCBwdWJsaWM6CiAgICAgICAg
IHJldHVybiBKdW1wKG1fYXNzZW1ibGVyLmpDQyh4ODZDb25kaXRpb24oY29uZCkpKTsKICAgICB9
CiAKLSAgICB2b2lkIHRlc3RQdHIoUmVzdWx0Q29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgcmVn
LCBUcnVzdGVkSW1tMzIgbWFzaywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHZvaWQgdGVzdDY0KFJl
c3VsdENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIHJlZywgVHJ1c3RlZEltbTMyIG1hc2ssIFJl
Z2lzdGVySUQgZGVzdCkKICAgICB7CiAgICAgICAgIGlmIChtYXNrLm1fdmFsdWUgPT0gLTEpCiAg
ICAgICAgICAgICBtX2Fzc2VtYmxlci50ZXN0cV9ycihyZWcsIHJlZyk7CkBAIC00NzEsMTkgKzg0
NSwxOSBAQCBwdWJsaWM6CiAgICAgICAgIHNldDMyKHg4NkNvbmRpdGlvbihjb25kKSwgZGVzdCk7
CiAgICAgfQogCi0gICAgdm9pZCB0ZXN0UHRyKFJlc3VsdENvbmRpdGlvbiBjb25kLCBSZWdpc3Rl
cklEIHJlZywgUmVnaXN0ZXJJRCBtYXNrLCBSZWdpc3RlcklEIGRlc3QpCisgICAgdm9pZCB0ZXN0
NjQoUmVzdWx0Q29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgcmVnLCBSZWdpc3RlcklEIG1hc2ss
IFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CiAgICAgICAgIG1fYXNzZW1ibGVyLnRlc3RxX3JyKHJl
ZywgbWFzayk7CiAgICAgICAgIHNldDMyKHg4NkNvbmRpdGlvbihjb25kKSwgZGVzdCk7CiAgICAg
fQogCi0gICAgSnVtcCBicmFuY2hUZXN0UHRyKFJlc3VsdENvbmRpdGlvbiBjb25kLCBBYnNvbHV0
ZUFkZHJlc3MgYWRkcmVzcywgVHJ1c3RlZEltbTMyIG1hc2sgPSBUcnVzdGVkSW1tMzIoLTEpKQor
ICAgIEp1bXAgYnJhbmNoVGVzdDY0KFJlc3VsdENvbmRpdGlvbiBjb25kLCBBYnNvbHV0ZUFkZHJl
c3MgYWRkcmVzcywgVHJ1c3RlZEltbTMyIG1hc2sgPSBUcnVzdGVkSW1tMzIoLTEpKQogICAgIHsK
LSAgICAgICAgbG9hZFB0cihhZGRyZXNzLm1fcHRyLCBzY3JhdGNoUmVnaXN0ZXIpOwotICAgICAg
ICByZXR1cm4gYnJhbmNoVGVzdFB0cihjb25kLCBzY3JhdGNoUmVnaXN0ZXIsIG1hc2spOworICAg
ICAgICBsb2FkNjQoYWRkcmVzcy5tX3B0ciwgc2NyYXRjaFJlZ2lzdGVyKTsKKyAgICAgICAgcmV0
dXJuIGJyYW5jaFRlc3Q2NChjb25kLCBzY3JhdGNoUmVnaXN0ZXIsIG1hc2spOwogICAgIH0KIAot
ICAgIEp1bXAgYnJhbmNoVGVzdFB0cihSZXN1bHRDb25kaXRpb24gY29uZCwgQWRkcmVzcyBhZGRy
ZXNzLCBUcnVzdGVkSW1tMzIgbWFzayA9IFRydXN0ZWRJbW0zMigtMSkpCisgICAgSnVtcCBicmFu
Y2hUZXN0NjQoUmVzdWx0Q29uZGl0aW9uIGNvbmQsIEFkZHJlc3MgYWRkcmVzcywgVHJ1c3RlZElt
bTMyIG1hc2sgPSBUcnVzdGVkSW1tMzIoLTEpKQogICAgIHsKICAgICAgICAgaWYgKG1hc2subV92
YWx1ZSA9PSAtMSkKICAgICAgICAgICAgIG1fYXNzZW1ibGVyLmNtcHFfaW0oMCwgYWRkcmVzcy5v
ZmZzZXQsIGFkZHJlc3MuYmFzZSk7CkBAIC00OTIsMTMgKzg2NiwxMyBAQCBwdWJsaWM6CiAgICAg
ICAgIHJldHVybiBKdW1wKG1fYXNzZW1ibGVyLmpDQyh4ODZDb25kaXRpb24oY29uZCkpKTsKICAg
ICB9CiAKLSAgICBKdW1wIGJyYW5jaFRlc3RQdHIoUmVzdWx0Q29uZGl0aW9uIGNvbmQsIEFkZHJl
c3MgYWRkcmVzcywgUmVnaXN0ZXJJRCByZWcpCisgICAgSnVtcCBicmFuY2hUZXN0NjQoUmVzdWx0
Q29uZGl0aW9uIGNvbmQsIEFkZHJlc3MgYWRkcmVzcywgUmVnaXN0ZXJJRCByZWcpCiAgICAgewog
ICAgICAgICBtX2Fzc2VtYmxlci50ZXN0cV9ybShyZWcsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNz
LmJhc2UpOwogICAgICAgICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5qQ0MoeDg2Q29uZGl0aW9u
KGNvbmQpKSk7CiAgICAgfQogCi0gICAgSnVtcCBicmFuY2hUZXN0UHRyKFJlc3VsdENvbmRpdGlv
biBjb25kLCBCYXNlSW5kZXggYWRkcmVzcywgVHJ1c3RlZEltbTMyIG1hc2sgPSBUcnVzdGVkSW1t
MzIoLTEpKQorICAgIEp1bXAgYnJhbmNoVGVzdDY0KFJlc3VsdENvbmRpdGlvbiBjb25kLCBCYXNl
SW5kZXggYWRkcmVzcywgVHJ1c3RlZEltbTMyIG1hc2sgPSBUcnVzdGVkSW1tMzIoLTEpKQogICAg
IHsKICAgICAgICAgaWYgKG1hc2subV92YWx1ZSA9PSAtMSkKICAgICAgICAgICAgIG1fYXNzZW1i
bGVyLmNtcHFfaW0oMCwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5pbmRl
eCwgYWRkcmVzcy5zY2FsZSk7CkBAIC01MDgsNTMgKzg4Miw1MyBAQCBwdWJsaWM6CiAgICAgfQog
CiAKLSAgICBKdW1wIGJyYW5jaEFkZFB0cihSZXN1bHRDb25kaXRpb24gY29uZCwgVHJ1c3RlZElt
bTMyIGltbSwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIEp1bXAgYnJhbmNoQWRkNjQoUmVzdWx0Q29u
ZGl0aW9uIGNvbmQsIFRydXN0ZWRJbW0zMiBpbW0sIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7Ci0g
ICAgICAgIGFkZFB0cihpbW0sIGRlc3QpOworICAgICAgICBhZGQ2NChpbW0sIGRlc3QpOwogICAg
ICAgICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5qQ0MoeDg2Q29uZGl0aW9uKGNvbmQpKSk7CiAg
ICAgfQogCi0gICAgSnVtcCBicmFuY2hBZGRQdHIoUmVzdWx0Q29uZGl0aW9uIGNvbmQsIFJlZ2lz
dGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgSnVtcCBicmFuY2hBZGQ2NChSZXN1bHRD
b25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7Ci0g
ICAgICAgIGFkZFB0cihzcmMsIGRlc3QpOworICAgICAgICBhZGQ2NChzcmMsIGRlc3QpOwogICAg
ICAgICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5qQ0MoeDg2Q29uZGl0aW9uKGNvbmQpKSk7CiAg
ICAgfQogCi0gICAgSnVtcCBicmFuY2hTdWJQdHIoUmVzdWx0Q29uZGl0aW9uIGNvbmQsIFRydXN0
ZWRJbW0zMiBpbW0sIFJlZ2lzdGVySUQgZGVzdCkKKyAgICBKdW1wIGJyYW5jaFN1YjY0KFJlc3Vs
dENvbmRpdGlvbiBjb25kLCBUcnVzdGVkSW1tMzIgaW1tLCBSZWdpc3RlcklEIGRlc3QpCiAgICAg
ewotICAgICAgICBzdWJQdHIoaW1tLCBkZXN0KTsKKyAgICAgICAgc3ViNjQoaW1tLCBkZXN0KTsK
ICAgICAgICAgcmV0dXJuIEp1bXAobV9hc3NlbWJsZXIuakNDKHg4NkNvbmRpdGlvbihjb25kKSkp
OwogICAgIH0KIAotICAgIEp1bXAgYnJhbmNoU3ViUHRyKFJlc3VsdENvbmRpdGlvbiBjb25kLCBS
ZWdpc3RlcklEIHNyYzEsIFRydXN0ZWRJbW0zMiBzcmMyLCBSZWdpc3RlcklEIGRlc3QpCisgICAg
SnVtcCBicmFuY2hTdWI2NChSZXN1bHRDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBzcmMxLCBU
cnVzdGVkSW1tMzIgc3JjMiwgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKICAgICAgICAgbW92ZShz
cmMxLCBkZXN0KTsKLSAgICAgICAgcmV0dXJuIGJyYW5jaFN1YlB0cihjb25kLCBzcmMyLCBkZXN0
KTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaFN1YjY0KGNvbmQsIHNyYzIsIGRlc3QpOwogICAgIH0K
IAotICAgIERhdGFMYWJlbFB0ciBtb3ZlV2l0aFBhdGNoKFRydXN0ZWRJbW1QdHIgaW5pdGlhbFZh
bHVlLCBSZWdpc3RlcklEIGRlc3QpCisgICAgRGF0YUxhYmVsUHRyIG1vdmVXaXRoUGF0Y2goVHJ1
c3RlZEltbTY0IGluaXRpYWxWYWx1ZSwgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKICAgICAgICAg
cGFkQmVmb3JlUGF0Y2goKTsKLSAgICAgICAgbV9hc3NlbWJsZXIubW92cV9pNjRyKGluaXRpYWxW
YWx1ZS5hc0ludHB0cigpLCBkZXN0KTsKKyAgICAgICAgbV9hc3NlbWJsZXIubW92cV9pNjRyKGlu
aXRpYWxWYWx1ZS5tX3ZhbHVlLCBkZXN0KTsKICAgICAgICAgcmV0dXJuIERhdGFMYWJlbFB0cih0
aGlzKTsKICAgICB9CiAKLSAgICBKdW1wIGJyYW5jaFB0cldpdGhQYXRjaChSZWxhdGlvbmFsQ29u
ZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgbGVmdCwgRGF0YUxhYmVsUHRyJiBkYXRhTGFiZWwsIFRy
dXN0ZWRJbW1QdHIgaW5pdGlhbFJpZ2h0VmFsdWUgPSBUcnVzdGVkSW1tUHRyKDApKQorICAgIEp1
bXAgYnJhbmNoNjRXaXRoUGF0Y2goUmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklE
IGxlZnQsIERhdGFMYWJlbFB0ciYgZGF0YUxhYmVsLCBUcnVzdGVkSW1tNjQgaW5pdGlhbFJpZ2h0
VmFsdWUgPSBUcnVzdGVkSW1tNjQoKGludDY0X3QpMCkpCiAgICAgewogICAgICAgICBkYXRhTGFi
ZWwgPSBtb3ZlV2l0aFBhdGNoKGluaXRpYWxSaWdodFZhbHVlLCBzY3JhdGNoUmVnaXN0ZXIpOwot
ICAgICAgICByZXR1cm4gYnJhbmNoUHRyKGNvbmQsIGxlZnQsIHNjcmF0Y2hSZWdpc3Rlcik7Cisg
ICAgICAgIHJldHVybiBicmFuY2g2NChjb25kLCBsZWZ0LCBzY3JhdGNoUmVnaXN0ZXIpOwogICAg
IH0KIAotICAgIEp1bXAgYnJhbmNoUHRyV2l0aFBhdGNoKFJlbGF0aW9uYWxDb25kaXRpb24gY29u
ZCwgQWRkcmVzcyBsZWZ0LCBEYXRhTGFiZWxQdHImIGRhdGFMYWJlbCwgVHJ1c3RlZEltbVB0ciBp
bml0aWFsUmlnaHRWYWx1ZSA9IFRydXN0ZWRJbW1QdHIoMCkpCisgICAgSnVtcCBicmFuY2g2NFdp
dGhQYXRjaChSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIEFkZHJlc3MgbGVmdCwgRGF0YUxhYmVs
UHRyJiBkYXRhTGFiZWwsIFRydXN0ZWRJbW02NCBpbml0aWFsUmlnaHRWYWx1ZSA9IFRydXN0ZWRJ
bW02NCgoaW50NjRfdCkwKSkKICAgICB7CiAgICAgICAgIGRhdGFMYWJlbCA9IG1vdmVXaXRoUGF0
Y2goaW5pdGlhbFJpZ2h0VmFsdWUsIHNjcmF0Y2hSZWdpc3Rlcik7Ci0gICAgICAgIHJldHVybiBi
cmFuY2hQdHIoY29uZCwgbGVmdCwgc2NyYXRjaFJlZ2lzdGVyKTsKKyAgICAgICAgcmV0dXJuIGJy
YW5jaDY0KGNvbmQsIGxlZnQsIHNjcmF0Y2hSZWdpc3Rlcik7CiAgICAgfQogCi0gICAgRGF0YUxh
YmVsUHRyIHN0b3JlUHRyV2l0aFBhdGNoKFRydXN0ZWRJbW1QdHIgaW5pdGlhbFZhbHVlLCBJbXBs
aWNpdEFkZHJlc3MgYWRkcmVzcykKKyAgICBEYXRhTGFiZWxQdHIgc3RvcmU2NFdpdGhQYXRjaChU
cnVzdGVkSW1tNjQgaW5pdGlhbFZhbHVlLCBJbXBsaWNpdEFkZHJlc3MgYWRkcmVzcykKICAgICB7
CiAgICAgICAgIERhdGFMYWJlbFB0ciBsYWJlbCA9IG1vdmVXaXRoUGF0Y2goaW5pdGlhbFZhbHVl
LCBzY3JhdGNoUmVnaXN0ZXIpOwotICAgICAgICBzdG9yZVB0cihzY3JhdGNoUmVnaXN0ZXIsIGFk
ZHJlc3MpOworICAgICAgICBzdG9yZTY0KHNjcmF0Y2hSZWdpc3RlciwgYWRkcmVzcyk7CiAgICAg
ICAgIHJldHVybiBsYWJlbDsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvWDg2QXNzZW1ibGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci9YODZBc3NlbWJsZXIuaAkocmV2aXNpb24gMTMxMTYyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9YODZBc3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtNjgzLDYgKzY4MywxNiBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAgICB9CiAKKyAgICB2b2lk
IHJvcmxfaThyKGludCBpbW0sIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgaWYgKGlt
bSA9PSAxKQorICAgICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX0dST1VQMl9FdjEs
IEdST1VQMl9PUF9ST1IsIGRzdCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgbV9mb3Jt
YXR0ZXIub25lQnl0ZU9wKE9QX0dST1VQMl9FdkliLCBHUk9VUDJfT1BfUk9SLCBkc3QpOworICAg
ICAgICAgICAgbV9mb3JtYXR0ZXIuaW1tZWRpYXRlOChpbW0pOworICAgICAgICB9CisgICAgfQor
CiAjZW5kaWYKIAogICAgIHZvaWQgc2FybF9pOHIoaW50IGltbSwgUmVnaXN0ZXJJRCBkc3QpCkBA
IC0xMDA3LDYgKzEwMTcsMTEgQEAgcHVibGljOgogICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRl
T3A2NChPUF9URVNUX0V2R3YsIHNyYywgYmFzZSwgb2Zmc2V0KTsKICAgICB9CiAKKyAgICB2b2lk
IHRlc3RsX3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UpCisg
ICAgeworICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfVEVTVF9Fdkd2LCBzcmMsIGJh
c2UsIG9mZnNldCk7CisgICAgfQorCiAgICAgdm9pZCB0ZXN0cV9pMzJyKGludCBpbW0sIFJlZ2lz
dGVySUQgZHN0KQogICAgIHsKICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wNjQoT1BfR1JP
VVAzX0V2SXosIEdST1VQM19PUF9URVNULCBkc3QpOwpAQCAtMTExMSw3ICsxMTI2LDcgQEAgcHVi
bGljOgogICAgIHsKICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX01PVl9FQVhPdik7
CiAjaWYgQ1BVKFg4Nl82NCkKLSAgICAgICAgbV9mb3JtYXR0ZXIuaW1tZWRpYXRlNjQocmVpbnRl
cnByZXRfY2FzdDxpbnQ2NF90PihhZGRyKSk7CisgICAgICAgIG1fZm9ybWF0dGVyLmltbWVkaWF0
ZTY0KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihhZGRyKSk7CiAjZWxzZQogICAgICAgICBt
X2Zvcm1hdHRlci5pbW1lZGlhdGUzMihyZWludGVycHJldF9jYXN0PGludD4oYWRkcikpOwogI2Vu
ZGlmCkBAIC0xMTkzLDcgKzEyMDgsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBtX2Zvcm1h
dHRlci5vbmVCeXRlT3AoT1BfTU9WX092RUFYKTsKICNpZiBDUFUoWDg2XzY0KQotICAgICAgICBt
X2Zvcm1hdHRlci5pbW1lZGlhdGU2NChyZWludGVycHJldF9jYXN0PGludDY0X3Q+KGFkZHIpKTsK
KyAgICAgICAgbV9mb3JtYXR0ZXIuaW1tZWRpYXRlNjQocmVpbnRlcnByZXRfY2FzdDx1aW50cHRy
X3Q+KGFkZHIpKTsKICNlbHNlCiAgICAgICAgIG1fZm9ybWF0dGVyLmltbWVkaWF0ZTMyKHJlaW50
ZXJwcmV0X2Nhc3Q8aW50PihhZGRyKSk7CiAjZW5kaWYKQEAgLTEyMjMsMTMgKzEyMzgsMTMgQEAg
cHVibGljOgogICAgIHZvaWQgbW92cV9tRUFYKGNvbnN0IHZvaWQqIGFkZHIpCiAgICAgewogICAg
ICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3A2NChPUF9NT1ZfRUFYT3YpOwotICAgICAgICBtX2Zv
cm1hdHRlci5pbW1lZGlhdGU2NChyZWludGVycHJldF9jYXN0PGludDY0X3Q+KGFkZHIpKTsKKyAg
ICAgICAgbV9mb3JtYXR0ZXIuaW1tZWRpYXRlNjQocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+
KGFkZHIpKTsKICAgICB9CiAKICAgICB2b2lkIG1vdnFfRUFYbShjb25zdCB2b2lkKiBhZGRyKQog
ICAgIHsKICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wNjQoT1BfTU9WX092RUFYKTsKLSAg
ICAgICAgbV9mb3JtYXR0ZXIuaW1tZWRpYXRlNjQocmVpbnRlcnByZXRfY2FzdDxpbnQ2NF90Pihh
ZGRyKSk7CisgICAgICAgIG1fZm9ybWF0dGVyLmltbWVkaWF0ZTY0KHJlaW50ZXJwcmV0X2Nhc3Q8
dWludHB0cl90PihhZGRyKSk7CiAgICAgfQogCiAgICAgdm9pZCBtb3ZxX21yKGludCBvZmZzZXQs
IFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBkc3QpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Fzc2VtYmx5SGVscGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBc3NlbWJseUhlbHBlcnMuY3BwCShyZXZpc2lvbiAxMzExNjIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fzc2VtYmx5SGVscGVycy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTczLDcgKzczLDcgQEAgdm9pZCBBc3NlbWJseUhlbHBlcnM6OmNsZWFy
U2FtcGxpbmdGbGFnKAogdm9pZCBBc3NlbWJseUhlbHBlcnM6OmppdEFzc2VydElzSW50MzIoR1BS
UmVnIGdwcikKIHsKICNpZiBDUFUoWDg2XzY0KQotICAgIEp1bXAgY2hlY2tJbnQzMiA9IGJyYW5j
aFB0cihCZWxvd09yRXF1YWwsIGdwciwgVHJ1c3RlZEltbVB0cihyZWludGVycHJldF9jYXN0PHZv
aWQqPihzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KDB4RkZGRkZGRkZ1KSkpKTsKKyAgICBKdW1wIGNo
ZWNrSW50MzIgPSBicmFuY2g2NChCZWxvd09yRXF1YWwsIGdwciwgVHJ1c3RlZEltbTY0KHN0YXRp
Y19jYXN0PHVpbnRwdHJfdD4oMHhGRkZGRkZGRnUpKSk7CiAgICAgYnJlYWtwb2ludCgpOwogICAg
IGNoZWNrSW50MzIubGluayh0aGlzKTsKICNlbHNlCkBAIC04MywyMiArODMsMjIgQEAgdm9pZCBB
c3NlbWJseUhlbHBlcnM6OmppdEFzc2VydElzSW50MzIoRwogCiB2b2lkIEFzc2VtYmx5SGVscGVy
czo6aml0QXNzZXJ0SXNKU0ludDMyKEdQUlJlZyBncHIpCiB7Ci0gICAgSnVtcCBjaGVja0pTSW50
MzIgPSBicmFuY2hQdHIoQWJvdmVPckVxdWFsLCBncHIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJS
ZWdpc3Rlcik7CisgICAgSnVtcCBjaGVja0pTSW50MzIgPSBicmFuY2g2NChBYm92ZU9yRXF1YWws
IGdwciwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKICAgICBicmVha3BvaW50KCk7
CiAgICAgY2hlY2tKU0ludDMyLmxpbmsodGhpcyk7CiB9CiAKIHZvaWQgQXNzZW1ibHlIZWxwZXJz
OjpqaXRBc3NlcnRJc0pTTnVtYmVyKEdQUlJlZyBncHIpCiB7Ci0gICAgSnVtcCBjaGVja0pTTnVt
YmVyID0gYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgZ3ByLCBHUFJJbmZv
Ojp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOworICAgIEp1bXAgY2hlY2tKU051bWJlciA9IGJyYW5j
aFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgZ3ByLCBHUFJJbmZvOjp0YWdUeXBlTnVt
YmVyUmVnaXN0ZXIpOwogICAgIGJyZWFrcG9pbnQoKTsKICAgICBjaGVja0pTTnVtYmVyLmxpbmso
dGhpcyk7CiB9CiAKIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjpqaXRBc3NlcnRJc0pTRG91YmxlKEdQ
UlJlZyBncHIpCiB7Ci0gICAgSnVtcCBjaGVja0pTSW50MzIgPSBicmFuY2hQdHIoQWJvdmVPckVx
dWFsLCBncHIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7Ci0gICAgSnVtcCBjaGVj
a0pTTnVtYmVyID0gYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgZ3ByLCBH
UFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOworICAgIEp1bXAgY2hlY2tKU0ludDMyID0g
YnJhbmNoNjQoQWJvdmVPckVxdWFsLCBncHIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rl
cik7CisgICAgSnVtcCBjaGVja0pTTnVtYmVyID0gYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVy
OjpOb25aZXJvLCBncHIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7CiAgICAgY2hl
Y2tKU0ludDMyLmxpbmsodGhpcyk7CiAgICAgYnJlYWtwb2ludCgpOwogICAgIGNoZWNrSlNOdW1i
ZXIubGluayh0aGlzKTsKQEAgLTEwNiw3ICsxMDYsNyBAQCB2b2lkIEFzc2VtYmx5SGVscGVyczo6
aml0QXNzZXJ0SXNKU0RvdWJsCiAKIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjpqaXRBc3NlcnRJc0Nl
bGwoR1BSUmVnIGdwcikKIHsKLSAgICBKdW1wIGNoZWNrQ2VsbCA9IGJyYW5jaFRlc3RQdHIoTWFj
cm9Bc3NlbWJsZXI6Olplcm8sIGdwciwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsKKyAgICBK
dW1wIGNoZWNrQ2VsbCA9IGJyYW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6WmVybywgZ3ByLCBH
UFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpOwogICAgIGJyZWFrcG9pbnQoKTsKICAgICBjaGVja0Nl
bGwubGluayh0aGlzKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXNz
ZW1ibHlIZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBc3NlbWJseUhlbHBlcnMuaAkocmV2aXNpb24gMTMxMTYyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBc3NlbWJseUhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtOTksMTgg
Kzk5LDI2IEBAIHB1YmxpYzoKICAgICB9CiAgICAgdm9pZCBlbWl0UHV0VG9DYWxsRnJhbWVIZWFk
ZXIoR1BSUmVnIGZyb20sIEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlckVudHJ5IGVudHJ5KQogICAg
IHsKKyNpZiBDUFUoWDg2XzY0KQorICAgICAgICBzdG9yZTY0KGZyb20sIEFkZHJlc3MoR1BSSW5m
bzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGVudHJ5ICogc2l6ZW9mKFJlZ2lzdGVyKSkpOworI2Vsc2UK
ICAgICAgICAgc3RvcmVQdHIoZnJvbSwgQWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rl
ciwgZW50cnkgKiBzaXplb2YoUmVnaXN0ZXIpKSk7CisjZW5kaWYKICAgICB9CiAKICAgICB2b2lk
IGVtaXRQdXRJbW1lZGlhdGVUb0NhbGxGcmFtZUhlYWRlcih2b2lkKiB2YWx1ZSwgSlNTdGFjazo6
Q2FsbEZyYW1lSGVhZGVyRW50cnkgZW50cnkpCiAgICAgeworI2lmIENQVShYODZfNjQpCisgICAg
ICAgIHN0b3JlNjQoVHJ1c3RlZEltbTY0KHZhbHVlKSwgQWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJh
bWVSZWdpc3RlciwgZW50cnkgKiBzaXplb2YoUmVnaXN0ZXIpKSk7CisjZWxzZQogICAgICAgICBz
dG9yZVB0cihUcnVzdGVkSW1tUHRyKHZhbHVlKSwgQWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVS
ZWdpc3RlciwgZW50cnkgKiBzaXplb2YoUmVnaXN0ZXIpKSk7CisjZW5kaWYKICAgICB9CiAKICAg
ICBKdW1wIGJyYW5jaElmTm90Q2VsbChHUFJSZWcgcmVnKQogICAgIHsKICNpZiBVU0UoSlNWQUxV
RTY0KQotICAgICAgICByZXR1cm4gYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVy
bywgcmVnLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpOworICAgICAgICByZXR1cm4gYnJhbmNo
VGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCByZWcsIEdQUkluZm86OnRhZ01hc2tSZWdp
c3Rlcik7CiAjZWxzZQogICAgICAgICByZXR1cm4gYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5v
dEVxdWFsLCByZWcsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSk7CiAjZW5kaWYKQEAg
LTE3Miw4ICsxODAsMTQgQEAgcHVibGljOgogICAgICAgICBTY3JhdGNoQnVmZmVyKiBzY3JhdGNo
QnVmZmVyID0gbV9nbG9iYWxEYXRhLT5zY3JhdGNoQnVmZmVyRm9yU2l6ZShzY3JhdGNoU2l6ZSk7
CiAgICAgICAgIEVuY29kZWRKU1ZhbHVlKiBidWZmZXIgPSBzdGF0aWNfY2FzdDxFbmNvZGVkSlNW
YWx1ZSo+KHNjcmF0Y2hCdWZmZXItPmRhdGFCdWZmZXIoKSk7CiAKLSAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyArK2kpCisgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgKytp
KSB7CisjaWYgQ1BVKFg4Nl82NCkKKyAgICAgICAgICAgIHN0b3JlNjQoR1BSSW5mbzo6dG9SZWdp
c3RlcihpKSwgYnVmZmVyICsgaSk7CisjZWxzZQogICAgICAgICAgICAgc3RvcmVQdHIoR1BSSW5m
bzo6dG9SZWdpc3RlcihpKSwgYnVmZmVyICsgaSk7CisjZW5kaWYKKyAgICAgICAgfQorCiAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBGUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsg
KytpKSB7CiAgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoYnVmZmVyICsgR1BSSW5mbzo6
bnVtYmVyT2ZSZWdpc3RlcnMgKyBpKSwgR1BSSW5mbzo6cmVnVDApOwogICAgICAgICAgICAgc3Rv
cmVEb3VibGUoRlBSSW5mbzo6dG9SZWdpc3RlcihpKSwgR1BSSW5mbzo6cmVnVDApOwpAQCAtMjA0
LDggKzIxOCwxMyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoYnVm
ZmVyICsgR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMgKyBpKSwgR1BSSW5mbzo6cmVnVDApOwog
ICAgICAgICAgICAgbG9hZERvdWJsZShHUFJJbmZvOjpyZWdUMCwgRlBSSW5mbzo6dG9SZWdpc3Rl
cihpKSk7CiAgICAgICAgIH0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEdQUklu
Zm86Om51bWJlck9mUmVnaXN0ZXJzOyArK2kpCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgKytpKSB7CisjaWYgQ1BVKFg4Nl82NCkK
KyAgICAgICAgICAgIGxvYWQ2NChidWZmZXIgKyBpLCBHUFJJbmZvOjp0b1JlZ2lzdGVyKGkpKTsK
KyNlbHNlCiAgICAgICAgICAgICBsb2FkUHRyKGJ1ZmZlciArIGksIEdQUkluZm86OnRvUmVnaXN0
ZXIoaSkpOworI2VuZGlmCisgICAgICAgIH0KICAgICB9CiAKICAgICAvLyBUaGVzZSBtZXRob2Rz
IEpJVCBnZW5lcmF0ZSBkeW5hbWljLCBkZWJ1Zy1vbmx5IGNoZWNrcyAtIGFraW4gdG8gQVNTRVJU
cy4KQEAgLTIyOSwxNiArMjQ4LDE2IEBAIHB1YmxpYzoKICNpZiBVU0UoSlNWQUxVRTY0KQogICAg
IEdQUlJlZyBib3hEb3VibGUoRlBSUmVnIGZwciwgR1BSUmVnIGdwcikKICAgICB7Ci0gICAgICAg
IG1vdmVEb3VibGVUb1B0cihmcHIsIGdwcik7Ci0gICAgICAgIHN1YlB0cihHUFJJbmZvOjp0YWdU
eXBlTnVtYmVyUmVnaXN0ZXIsIGdwcik7CisgICAgICAgIG1vdmVEb3VibGVUbzY0KGZwciwgZ3By
KTsKKyAgICAgICAgc3ViNjQoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBncHIpOwog
ICAgICAgICBqaXRBc3NlcnRJc0pTRG91YmxlKGdwcik7CiAgICAgICAgIHJldHVybiBncHI7CiAg
ICAgfQogICAgIEZQUlJlZyB1bmJveERvdWJsZShHUFJSZWcgZ3ByLCBGUFJSZWcgZnByKQogICAg
IHsKICAgICAgICAgaml0QXNzZXJ0SXNKU0RvdWJsZShncHIpOwotICAgICAgICBhZGRQdHIoR1BS
SW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBncHIpOwotICAgICAgICBtb3ZlUHRyVG9Eb3Vi
bGUoZ3ByLCBmcHIpOworICAgICAgICBhZGQ2NChHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0
ZXIsIGdwcik7CisgICAgICAgIG1vdmU2NFRvRG91YmxlKGdwciwgZnByKTsKICAgICAgICAgcmV0
dXJuIGZwcjsKICAgICB9CiAjZW5kaWYKQEAgLTI1OCw3ICsyNzcsNyBAQCBwdWJsaWM6CiAgICAg
SnVtcCBlbWl0RXhjZXB0aW9uQ2hlY2soRXhjZXB0aW9uQ2hlY2tLaW5kIGtpbmQgPSBOb3JtYWxF
eGNlcHRpb25DaGVjaykKICAgICB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgcmV0dXJu
IGJyYW5jaFRlc3RQdHIoa2luZCA9PSBOb3JtYWxFeGNlcHRpb25DaGVjayA/IE5vblplcm8gOiBa
ZXJvLCBBYnNvbHV0ZUFkZHJlc3MoJmdsb2JhbERhdGEoKS0+ZXhjZXB0aW9uKSk7CisgICAgICAg
IHJldHVybiBicmFuY2hUZXN0NjQoa2luZCA9PSBOb3JtYWxFeGNlcHRpb25DaGVjayA/IE5vblpl
cm8gOiBaZXJvLCBBYnNvbHV0ZUFkZHJlc3MoJmdsb2JhbERhdGEoKS0+ZXhjZXB0aW9uKSk7CiAj
ZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQogICAgICAgICByZXR1cm4gYnJhbmNoMzIoa2luZCA9PSBO
b3JtYWxFeGNlcHRpb25DaGVjayA/IE5vdEVxdWFsIDogRXF1YWwsIEFic29sdXRlQWRkcmVzcyhy
ZWludGVycHJldF9jYXN0PGNoYXIqPigmZ2xvYmFsRGF0YSgpLT5leGNlcHRpb24pICsgT0JKRUNU
X09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
RW1wdHlWYWx1ZVRhZykpOwogI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0NDYWxsSGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ0NhbGxIZWxwZXJzLmgJKHJldmlzaW9uIDEzMTE2MikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ0NhbGxIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTU0NCw2ICs1
NDQsMTMgQEAgcHVibGljOgogICAgICAgICBtb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVy
LCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwogICAgIH0KICAgICAKKyAgICBBTFdBWVNfSU5MSU5F
IHZvaWQgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEdQUlJlZyBhcmcxLCBUcnVzdGVkSW1t
NjQgYXJnMikKKyAgICB7CisgICAgICAgIG1vdmUoYXJnMSwgR1BSSW5mbzo6YXJndW1lbnRHUFIx
KTsKKyAgICAgICAgbW92ZShhcmcyLCBHUFJJbmZvOjphcmd1bWVudEdQUjIpOworICAgICAgICBt
b3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwor
ICAgIH0KKyAgICAKICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0dXBBcmd1bWVudHNXaXRoRXhl
Y1N0YXRlKEdQUlJlZyBhcmcxLCBUcnVzdGVkSW1tMzIgYXJnMikKICAgICB7CiAgICAgICAgIG1v
dmUoYXJnMSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKQEAgLTU2NSw2ICs1NzIsMTMgQEAgcHVi
bGljOgogICAgICAgICBtb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjph
cmd1bWVudEdQUjApOwogICAgIH0KICAgICAKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0dXBB
cmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW02NCBhcmcxLCBHUFJSZWcgYXJnMikKKyAg
ICB7CisgICAgICAgIG1vdmUoYXJnMiwgR1BSSW5mbzo6YXJndW1lbnRHUFIyKTsgLy8gTW92ZSB0
aGlzIGZpcnN0LCBzbyBzZXR0aW5nIGFyZzEgZG9lcyBub3QgdHJhbXBsZSEKKyAgICAgICAgbW92
ZShhcmcxLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgICAgICBtb3ZlKEdQUkluZm86OmNh
bGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgIH0KKwogICAgIEFM
V0FZU19JTkxJTkUgdm9pZCBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbTMy
IGFyZzEsIEdQUlJlZyBhcmcyKQogICAgIHsKICAgICAgICAgbW92ZShhcmcyLCBHUFJJbmZvOjph
cmd1bWVudEdQUjIpOyAvLyBNb3ZlIHRoaXMgZmlyc3QsIHNvIHNldHRpbmcgYXJnMSBkb2VzIG5v
dCB0cmFtcGxlIQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29t
cGlsZXI2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
U1JFeGl0Q29tcGlsZXI2NC5jcHAJKHJldmlzaW9uIDEzMTE2MikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03
MywxMiArNzMsMTIgQEAgdm9pZCBPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KGNvbnN0CiAg
ICAgICAgIHN3aXRjaCAocmVjb3ZlcnktPnR5cGUoKSkgewogICAgICAgICBjYXNlIFNwZWN1bGF0
aXZlQWRkOgogICAgICAgICAgICAgbV9qaXQuc3ViMzIocmVjb3ZlcnktPnNyYygpLCByZWNvdmVy
eS0+ZGVzdCgpKTsKLSAgICAgICAgICAgIG1faml0Lm9yUHRyKEdQUkluZm86OnRhZ1R5cGVOdW1i
ZXJSZWdpc3RlciwgcmVjb3ZlcnktPmRlc3QoKSk7CisgICAgICAgICAgICBtX2ppdC5vcjY0KEdQ
UkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgcmVjb3ZlcnktPmRlc3QoKSk7CiAgICAgICAg
ICAgICBhbHJlYWR5Qm94ZWQgPSByZWNvdmVyeS0+ZGVzdCgpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBCb29sZWFuU3BlY3VsYXRpb25DaGVjazoKLSAg
ICAgICAgICAgIG1faml0LnhvclB0cihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihzdGF0
aWNfY2FzdDxpbnQzMl90PihWYWx1ZUZhbHNlKSksIHJlY292ZXJ5LT5kZXN0KCkpOworICAgICAg
ICAgICAgbV9qaXQueG9yNjQoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc3RhdGljX2Nh
c3Q8aW50MzJfdD4oVmFsdWVGYWxzZSkpLCByZWNvdmVyeS0+ZGVzdCgpKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgCiAgICAgICAgIGRlZmF1bHQ6CkBAIC05OCwxMSArOTgsMTEg
QEAgdm9pZCBPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KGNvbnN0CiAgICAgICAgIGlmIChl
eGl0Lm1fanNWYWx1ZVNvdXJjZS5pc0FkZHJlc3MoKSkgewogICAgICAgICAgICAgLy8gV2UgY2Fu
J3QgYmUgc3VyZSB0aGF0IHdlIGhhdmUgYSBzcGFyZSByZWdpc3Rlci4gU28gdXNlIHRoZSB0YWdU
eXBlTnVtYmVyUmVnaXN0ZXIsCiAgICAgICAgICAgICAvLyBzaW5jZSB3ZSBrbm93IGhvdyB0byBy
ZXN0b3JlIGl0LgotICAgICAgICAgICAgbV9qaXQubG9hZFB0cihBc3NlbWJseUhlbHBlcnM6OkFk
ZHJlc3MoZXhpdC5tX2pzVmFsdWVTb3VyY2UuYXNBZGRyZXNzKCkpLCBHUFJJbmZvOjp0YWdUeXBl
TnVtYmVyUmVnaXN0ZXIpOwotICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIoR1BSSW5mbzo6dGFn
VHlwZU51bWJlclJlZ2lzdGVyLCBidWNrZXQpOwotICAgICAgICAgICAgbV9qaXQubW92ZShBc3Nl
bWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoYml0d2lzZV9jYXN0PHZvaWQqPihUYWdUeXBlTnVt
YmVyKSksIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7CisgICAgICAgICAgICBtX2pp
dC5sb2FkNjQoQXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNzKGV4aXQubV9qc1ZhbHVlU291cmNlLmFz
QWRkcmVzcygpKSwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKKyAgICAgICAgICAg
IG1faml0LnN0b3JlNjQoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBidWNrZXQpOwor
ICAgICAgICAgICAgbV9qaXQubW92ZShBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW02NChiaXR3
aXNlX2Nhc3Q8aW50NjRfdD4oVGFnVHlwZU51bWJlcikpLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVy
UmVnaXN0ZXIpOwogICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKGV4
aXQubV9qc1ZhbHVlU291cmNlLmdwcigpLCBidWNrZXQpOworICAgICAgICAgICAgbV9qaXQuc3Rv
cmU2NChleGl0Lm1fanNWYWx1ZVNvdXJjZS5ncHIoKSwgYnVja2V0KTsKICAgICB9CiAKICAgICAv
LyA0KSBGaWd1cmUgb3V0IGhvdyBtYW55IHNjcmF0Y2ggc2xvdHMgd2UnbGwgbmVlZC4gV2UgbmVl
ZCBvbmUgZm9yIGV2ZXJ5IEdQUi9GUFIKQEAgLTIzMCw3ICsyMzAsNyBAQCB2b2lkIE9TUkV4aXRD
b21waWxlcjo6Y29tcGlsZUV4aXQoY29uc3QKICAgICAgICAgICAgIHN3aXRjaCAocmVjb3Zlcnku
dGVjaG5pcXVlKCkpIHsKICAgICAgICAgICAgIGNhc2UgVW5ib3hlZEludDMySW5HUFI6CiAgICAg
ICAgICAgICAgICAgaWYgKHJlY292ZXJ5LmdwcigpICE9IGFscmVhZHlCb3hlZCkKLSAgICAgICAg
ICAgICAgICAgICAgbV9qaXQub3JQdHIoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBy
ZWNvdmVyeS5ncHIoKSk7CisgICAgICAgICAgICAgICAgICAgIG1faml0Lm9yNjQoR1BSSW5mbzo6
dGFnVHlwZU51bWJlclJlZ2lzdGVyLCByZWNvdmVyeS5ncHIoKSk7CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIEFscmVhZHlJbkpTU3Rh
Y2tBc1VuYm94ZWRJbnQzMjoKQEAgLTI1Miw4ICsyNTIsOCBAQCB2b2lkIE9TUkV4aXRDb21waWxl
cjo6Y29tcGlsZUV4aXQoY29uc3QKICAgICAgICAgICAgICAgICBpZiAoYWRkcmVzc0dQUiA9PSBy
ZWNvdmVyeS5ncHIoKSkKICAgICAgICAgICAgICAgICAgICAgYWRkcmVzc0dQUiA9IEdQUkluZm86
OnJlZ1QxOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIG1faml0LnN0b3JlUHRy
KGFkZHJlc3NHUFIsIHNjcmF0Y2hEYXRhQnVmZmVyKTsKLSAgICAgICAgICAgICAgICBtX2ppdC5t
b3ZlKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbVB0cihzY3JhdGNoRGF0YUJ1ZmZlciArIDEp
LCBhZGRyZXNzR1BSKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTY0KGFkZHJlc3NHUFIs
IHNjcmF0Y2hEYXRhQnVmZmVyKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKEFzc2VtYmx5
SGVscGVyczo6VHJ1c3RlZEltbTY0KHNjcmF0Y2hEYXRhQnVmZmVyICsgMSksIGFkZHJlc3NHUFIp
OwogICAgICAgICAgICAgICAgIG1faml0LnN0b3JlRG91YmxlKEZQUkluZm86OmZwUmVnVDAsIGFk
ZHJlc3NHUFIpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIEFzc2VtYmx5SGVs
cGVyczo6SnVtcCBwb3NpdGl2ZSA9IG1faml0LmJyYW5jaDMyKEFzc2VtYmx5SGVscGVyczo6R3Jl
YXRlclRoYW5PckVxdWFsLCByZWNvdmVyeS5ncHIoKSwgQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVk
SW1tMzIoMCkpOwpAQCAtMjY2LDEyICsyNjYsMTIgQEAgdm9pZCBPU1JFeGl0Q29tcGlsZXI6OmNv
bXBpbGVFeGl0KGNvbnN0CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgcG9zaXRp
dmUubGluaygmbV9qaXQpOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIG1faml0
Lm9yUHRyKEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgcmVjb3ZlcnkuZ3ByKCkpOwor
ICAgICAgICAgICAgICAgIG1faml0Lm9yNjQoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVy
LCByZWNvdmVyeS5ncHIoKSk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgZG9u
ZS5saW5rKCZtX2ppdCk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgbV9qaXQu
bG9hZERvdWJsZShhZGRyZXNzR1BSLCBGUFJJbmZvOjpmcFJlZ1QwKTsKLSAgICAgICAgICAgICAg
ICBtX2ppdC5sb2FkUHRyKHNjcmF0Y2hEYXRhQnVmZmVyLCBhZGRyZXNzR1BSKTsKKyAgICAgICAg
ICAgICAgICBtX2ppdC5sb2FkNjQoc2NyYXRjaERhdGFCdWZmZXIsIGFkZHJlc3NHUFIpOwogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIApAQCAt
Mjk2LDExICsyOTYsMTEgQEAgdm9pZCBPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KGNvbnN0
CiAgICAgICAgIGNhc2UgVW5ib3hlZEludDMySW5HUFI6CiAgICAgICAgIGNhc2UgVUludDMySW5H
UFI6CiAgICAgICAgICAgICBpZiAob3BlcmFuZHMuaXNWYXJpYWJsZShpbmRleCkgJiYgcG9pc29u
ZWRWaXJ0dWFsUmVnaXN0ZXJzW29wZXJhbmRzLnZhcmlhYmxlRm9ySW5kZXgoaW5kZXgpXSkgewot
ICAgICAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKHJlY292ZXJ5LmdwcigpLCBzY3JhdGNoRGF0
YUJ1ZmZlciArIGN1cnJlbnRQb2lzb25JbmRleCk7CisgICAgICAgICAgICAgICAgbV9qaXQuc3Rv
cmU2NChyZWNvdmVyeS5ncHIoKSwgc2NyYXRjaERhdGFCdWZmZXIgKyBjdXJyZW50UG9pc29uSW5k
ZXgpOwogICAgICAgICAgICAgICAgIG1fcG9pc29uU2NyYXRjaEluZGljZXNbb3BlcmFuZHMudmFy
aWFibGVGb3JJbmRleChpbmRleCldID0gY3VycmVudFBvaXNvbkluZGV4OwogICAgICAgICAgICAg
ICAgIGN1cnJlbnRQb2lzb25JbmRleCsrOwogICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAg
ICAgICAgbV9qaXQuc3RvcmVQdHIocmVjb3ZlcnkuZ3ByKCksIEFzc2VtYmx5SGVscGVyczo6YWRk
cmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKW9wZXJhbmQpKTsKKyAgICAgICAgICAgICAgICBtX2pp
dC5zdG9yZTY0KHJlY292ZXJ5LmdwcigpLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoKFZp
cnR1YWxSZWdpc3RlcilvcGVyYW5kKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVm
YXVsdDoKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMzMwLDExICszMzAsMTEgQEAgdm9pZCBPU1JF
eGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KGNvbnN0CiAgICAgICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgICAgICBHUFJSZWcgZ3ByID0gR1BSSW5mbzo6dG9SZWdpc3RlcihGUFJJbmZvOjp0
b0luZGV4KHJlY292ZXJ5LmZwcigpKSk7CiAgICAgICAgICAgICBpZiAob3BlcmFuZHMuaXNWYXJp
YWJsZShpbmRleCkgJiYgcG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJzW29wZXJhbmRzLnZhcmlhYmxl
Rm9ySW5kZXgoaW5kZXgpXSkgewotICAgICAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKGdwciwg
c2NyYXRjaERhdGFCdWZmZXIgKyBjdXJyZW50UG9pc29uSW5kZXgpOworICAgICAgICAgICAgICAg
IG1faml0LnN0b3JlNjQoZ3ByLCBzY3JhdGNoRGF0YUJ1ZmZlciArIGN1cnJlbnRQb2lzb25JbmRl
eCk7CiAgICAgICAgICAgICAgICAgbV9wb2lzb25TY3JhdGNoSW5kaWNlc1tvcGVyYW5kcy52YXJp
YWJsZUZvckluZGV4KGluZGV4KV0gPSBjdXJyZW50UG9pc29uSW5kZXg7CiAgICAgICAgICAgICAg
ICAgY3VycmVudFBvaXNvbkluZGV4Kys7CiAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAg
ICAgICBtX2ppdC5zdG9yZVB0cihncHIsIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcigoVmly
dHVhbFJlZ2lzdGVyKW9wZXJhbmRzLm9wZXJhbmRGb3JJbmRleChpbmRleCkpKTsKKyAgICAgICAg
ICAgICAgICBtX2ppdC5zdG9yZTY0KGdwciwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKChW
aXJ0dWFsUmVnaXN0ZXIpb3BlcmFuZHMub3BlcmFuZEZvckluZGV4KGluZGV4KSkpOwogICAgICAg
ICB9CiAgICAgfQogICAgIApAQCAtMzQ4LDcgKzM0OCw3IEBAIHZvaWQgT1NSRXhpdENvbXBpbGVy
Ojpjb21waWxlRXhpdChjb25zdAogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAg
ICAgbV9qaXQubG9hZERvdWJsZShBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoKFZpcnR1YWxS
ZWdpc3RlcilvcGVyYW5kcy5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSwgRlBSSW5mbzo6ZnBSZWdU
MCk7CiAgICAgICAgICAgICBtX2ppdC5ib3hEb3VibGUoRlBSSW5mbzo6ZnBSZWdUMCwgR1BSSW5m
bzo6cmVnVDApOwotICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIoR1BSSW5mbzo6cmVnVDAsIEFz
c2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKW9wZXJhbmRzLm9wZXJh
bmRGb3JJbmRleChpbmRleCkpKTsKKyAgICAgICAgICAgIG1faml0LnN0b3JlNjQoR1BSSW5mbzo6
cmVnVDAsIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKW9wZXJh
bmRzLm9wZXJhbmRGb3JJbmRleChpbmRleCkpKTsKICAgICAgICAgfQogICAgIH0KICAgICAKQEAg
LTM2OCwyMCArMzY4LDIwIEBAIHZvaWQgT1NSRXhpdENvbXBpbGVyOjpjb21waWxlRXhpdChjb25z
dAogICAgICAgICAgICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gb3BlcmFu
ZHNbaW5kZXhdOwogICAgICAgICAgICAgICAgIHN3aXRjaCAocmVjb3ZlcnkudGVjaG5pcXVlKCkp
IHsKICAgICAgICAgICAgICAgICBjYXNlIERpc3BsYWNlZEluSlNTdGFjazoKLSAgICAgICAgICAg
ICAgICAgICAgbV9qaXQubG9hZFB0cihBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IocmVjb3Zl
cnkudmlydHVhbFJlZ2lzdGVyKCkpLCBHUFJJbmZvOjp0b1JlZ2lzdGVyKGRpc3BsYWNlbWVudElu
ZGV4KyspKTsKKyAgICAgICAgICAgICAgICAgICAgbV9qaXQubG9hZDY0KEFzc2VtYmx5SGVscGVy
czo6YWRkcmVzc0ZvcihyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSksIEdQUkluZm86OnRvUmVn
aXN0ZXIoZGlzcGxhY2VtZW50SW5kZXgrKykpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgY2FzZSBJbnQzMkRpc3BsYWNl
ZEluSlNTdGFjazogewogICAgICAgICAgICAgICAgICAgICBHUFJSZWcgZ3ByID0gR1BSSW5mbzo6
dG9SZWdpc3RlcihkaXNwbGFjZW1lbnRJbmRleCsrKTsKICAgICAgICAgICAgICAgICAgICAgbV9q
aXQubG9hZDMyKEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcihyZWNvdmVyeS52aXJ0dWFsUmVn
aXN0ZXIoKSksIGdwcik7Ci0gICAgICAgICAgICAgICAgICAgIG1faml0Lm9yUHRyKEdQUkluZm86
OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgZ3ByKTsKKyAgICAgICAgICAgICAgICAgICAgbV9qaXQu
b3I2NChHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIGdwcik7CiAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICAgICAgY2FzZSBEb3VibGVEaXNwbGFjZWRJbkpTU3RhY2s6IHsKICAgICAgICAg
ICAgICAgICAgICAgR1BSUmVnIGdwciA9IEdQUkluZm86OnRvUmVnaXN0ZXIoZGlzcGxhY2VtZW50
SW5kZXgrKyk7Ci0gICAgICAgICAgICAgICAgICAgIG1faml0LmxvYWRQdHIoQXNzZW1ibHlIZWxw
ZXJzOjphZGRyZXNzRm9yKHJlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpKSwgZ3ByKTsKLSAgICAg
ICAgICAgICAgICAgICAgbV9qaXQuc3ViUHRyKEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rl
ciwgZ3ByKTsKKyAgICAgICAgICAgICAgICAgICAgbV9qaXQubG9hZDY0KEFzc2VtYmx5SGVscGVy
czo6YWRkcmVzc0ZvcihyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSksIGdwcik7CisgICAgICAg
ICAgICAgICAgICAgIG1faml0LnN1YjY0KEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlciwg
Z3ByKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICAgICAKQEAgLTM5Nyw3ICszOTcsNyBAQCB2b2lkIE9TUkV4aXRDb21waWxl
cjo6Y29tcGlsZUV4aXQoY29uc3QKICAgICAgICAgICAgICAgICBjYXNlIERpc3BsYWNlZEluSlNT
dGFjazoKICAgICAgICAgICAgICAgICBjYXNlIEludDMyRGlzcGxhY2VkSW5KU1N0YWNrOgogICAg
ICAgICAgICAgICAgIGNhc2UgRG91YmxlRGlzcGxhY2VkSW5KU1N0YWNrOgotICAgICAgICAgICAg
ICAgICAgICBtX2ppdC5zdG9yZVB0cihHUFJJbmZvOjp0b1JlZ2lzdGVyKGRpc3BsYWNlbWVudElu
ZGV4KyspLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcilvcGVy
YW5kcy5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSk7CisgICAgICAgICAgICAgICAgICAgIG1faml0
LnN0b3JlNjQoR1BSSW5mbzo6dG9SZWdpc3RlcihkaXNwbGFjZW1lbnRJbmRleCsrKSwgQXNzZW1i
bHlIZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpb3BlcmFuZHMub3BlcmFuZEZv
ckluZGV4KGluZGV4KSkpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICAgICAgZGVmYXVsdDoKQEAgLTQyOCwyMSArNDI4LDIxIEBA
IHZvaWQgT1NSRXhpdENvbXBpbGVyOjpjb21waWxlRXhpdChjb25zdAogICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgIHN3aXRjaCAocmVjb3ZlcnkudGVjaG5pcXVlKCkpIHsKICAgICAg
ICAgICAgICAgICBjYXNlIERpc3BsYWNlZEluSlNTdGFjazoKLSAgICAgICAgICAgICAgICAgICAg
bV9qaXQubG9hZFB0cihBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IocmVjb3ZlcnkudmlydHVh
bFJlZ2lzdGVyKCkpLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgICAgICAgICAgICAgIG1faml0
LnN0b3JlUHRyKEdQUkluZm86OnJlZ1QwLCBzY3JhdGNoRGF0YUJ1ZmZlciArIHNjcmF0Y2hJbmRl
eCsrKTsKKyAgICAgICAgICAgICAgICAgICAgbV9qaXQubG9hZDY0KEFzc2VtYmx5SGVscGVyczo6
YWRkcmVzc0ZvcihyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSksIEdQUkluZm86OnJlZ1QwKTsK
KyAgICAgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmU2NChHUFJJbmZvOjpyZWdUMCwgc2NyYXRj
aERhdGFCdWZmZXIgKyBzY3JhdGNoSW5kZXgrKyk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBjYXNlIEludDMyRGlzcGxh
Y2VkSW5KU1N0YWNrOiB7CiAgICAgICAgICAgICAgICAgICAgIG1faml0LmxvYWQzMihBc3NlbWJs
eUhlbHBlcnM6OmFkZHJlc3NGb3IocmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkpLCBHUFJJbmZv
OjpyZWdUMCk7Ci0gICAgICAgICAgICAgICAgICAgIG1faml0Lm9yUHRyKEdQUkluZm86OnRhZ1R5
cGVOdW1iZXJSZWdpc3RlciwgR1BSSW5mbzo6cmVnVDApOwotICAgICAgICAgICAgICAgICAgICBt
X2ppdC5zdG9yZVB0cihHUFJJbmZvOjpyZWdUMCwgc2NyYXRjaERhdGFCdWZmZXIgKyBzY3JhdGNo
SW5kZXgrKyk7CisgICAgICAgICAgICAgICAgICAgIG1faml0Lm9yNjQoR1BSSW5mbzo6dGFnVHlw
ZU51bWJlclJlZ2lzdGVyLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAgICAgICAgICAgIG1f
aml0LnN0b3JlNjQoR1BSSW5mbzo6cmVnVDAsIHNjcmF0Y2hEYXRhQnVmZmVyICsgc2NyYXRjaElu
ZGV4KyspOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGNhc2UgRG91YmxlRGlzcGxhY2Vk
SW5KU1N0YWNrOiB7Ci0gICAgICAgICAgICAgICAgICAgIG1faml0LmxvYWRQdHIoQXNzZW1ibHlI
ZWxwZXJzOjphZGRyZXNzRm9yKHJlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpKSwgR1BSSW5mbzo6
cmVnVDApOwotICAgICAgICAgICAgICAgICAgICBtX2ppdC5zdWJQdHIoR1BSSW5mbzo6dGFnVHlw
ZU51bWJlclJlZ2lzdGVyLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgICAgICAgICAgICAgIG1f
aml0LnN0b3JlUHRyKEdQUkluZm86OnJlZ1QwLCBzY3JhdGNoRGF0YUJ1ZmZlciArIHNjcmF0Y2hJ
bmRleCsrKTsKKyAgICAgICAgICAgICAgICAgICAgbV9qaXQubG9hZDY0KEFzc2VtYmx5SGVscGVy
czo6YWRkcmVzc0ZvcihyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSksIEdQUkluZm86OnJlZ1Qw
KTsKKyAgICAgICAgICAgICAgICAgICAgbV9qaXQuc3ViNjQoR1BSSW5mbzo6dGFnVHlwZU51bWJl
clJlZ2lzdGVyLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAgICAgICAgICAgIG1faml0LnN0
b3JlNjQoR1BSSW5mbzo6cmVnVDAsIHNjcmF0Y2hEYXRhQnVmZmVyICsgc2NyYXRjaEluZGV4Kysp
OwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgICAgIApAQCAtNDU4LDggKzQ1OCw4IEBAIHZvaWQgT1NSRXhpdENvbXBpbGVyOjpj
b21waWxlRXhpdChjb25zdAogICAgICAgICAgICAgICAgIGNhc2UgRGlzcGxhY2VkSW5KU1N0YWNr
OgogICAgICAgICAgICAgICAgIGNhc2UgSW50MzJEaXNwbGFjZWRJbkpTU3RhY2s6CiAgICAgICAg
ICAgICAgICAgY2FzZSBEb3VibGVEaXNwbGFjZWRJbkpTU3RhY2s6Ci0gICAgICAgICAgICAgICAg
ICAgIG1faml0LmxvYWRQdHIoc2NyYXRjaERhdGFCdWZmZXIgKyBzY3JhdGNoSW5kZXgrKywgR1BS
SW5mbzo6cmVnVDApOwotICAgICAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZVB0cihHUFJJbmZv
OjpyZWdUMCwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpb3Bl
cmFuZHMub3BlcmFuZEZvckluZGV4KGluZGV4KSkpOworICAgICAgICAgICAgICAgICAgICBtX2pp
dC5sb2FkNjQoc2NyYXRjaERhdGFCdWZmZXIgKyBzY3JhdGNoSW5kZXgrKywgR1BSSW5mbzo6cmVn
VDApOworICAgICAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTY0KEdQUkluZm86OnJlZ1QwLCBB
c3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcilvcGVyYW5kcy5vcGVy
YW5kRm9ySW5kZXgoaW5kZXgpKSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBkZWZhdWx0OgpAQCAtNDg0LDggKzQ4NCw4
IEBAIHZvaWQgT1NSRXhpdENvbXBpbGVyOjpjb21waWxlRXhpdChjb25zdAogICAgICAgICAgICAg
Y2FzZSBVbmJveGVkSW50MzJJbkdQUjoKICAgICAgICAgICAgIGNhc2UgVUludDMySW5HUFI6CiAg
ICAgICAgICAgICBjYXNlIEluRlBSOgotICAgICAgICAgICAgICAgIG1faml0LmxvYWRQdHIoc2Ny
YXRjaERhdGFCdWZmZXIgKyBwb2lzb25JbmRleCh2aXJ0dWFsUmVnaXN0ZXIpLCBHUFJJbmZvOjpy
ZWdUMCk7Ci0gICAgICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIoR1BSSW5mbzo6cmVnVDAsIEFz
c2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKXZpcnR1YWxSZWdpc3Rl
cikpOworICAgICAgICAgICAgICAgIG1faml0LmxvYWQ2NChzY3JhdGNoRGF0YUJ1ZmZlciArIHBv
aXNvbkluZGV4KHZpcnR1YWxSZWdpc3RlciksIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAg
ICAgICBtX2ppdC5zdG9yZTY0KEdQUkluZm86OnJlZ1QwLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJl
c3NGb3IoKFZpcnR1YWxSZWdpc3Rlcil2aXJ0dWFsUmVnaXN0ZXIpKTsKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGRlZmF1bHQ6CkBAIC00OTks
MTYgKzQ5OSwxNiBAQCB2b2lkIE9TUkV4aXRDb21waWxlcjo6Y29tcGlsZUV4aXQoY29uc3QKIAog
ICAgIGlmIChoYXZlQ29uc3RhbnRzKSB7CiAgICAgICAgIGlmIChoYXZlVW5kZWZpbmVkKQotICAg
ICAgICAgICAgbV9qaXQubW92ZShBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpKSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAg
bV9qaXQubW92ZShBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSkpLCBHUFJJbmZvOjpyZWdUMCk7CiAgICAgICAgIAogICAgICAgICBmb3Ig
KHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgb3BlcmFuZHMuc2l6ZSgpOyArK2luZGV4KSB7CiAg
ICAgICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IG9wZXJhbmRzW2luZGV4
XTsKICAgICAgICAgICAgIGlmIChyZWNvdmVyeS50ZWNobmlxdWUoKSAhPSBDb25zdGFudCkKICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGlmIChyZWNvdmVyeS5jb25zdGFu
dCgpLmlzVW5kZWZpbmVkKCkpCi0gICAgICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIoR1BSSW5m
bzo6cmVnVDAsIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKW9w
ZXJhbmRzLm9wZXJhbmRGb3JJbmRleChpbmRleCkpKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5z
dG9yZTY0KEdQUkluZm86OnJlZ1QwLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoKFZpcnR1
YWxSZWdpc3RlcilvcGVyYW5kcy5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSk7CiAgICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIoQXNzZW1ibHlIZWxwZXJzOjpU
cnVzdGVkSW1tUHRyKEpTVmFsdWU6OmVuY29kZShyZWNvdmVyeS5jb25zdGFudCgpKSksIEFzc2Vt
Ymx5SGVscGVyczo6YWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKW9wZXJhbmRzLm9wZXJhbmRG
b3JJbmRleChpbmRleCkpKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTY0KEFzc2VtYmx5
SGVscGVyczo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShyZWNvdmVyeS5jb25zdGFudCgp
KSksIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKW9wZXJhbmRz
Lm9wZXJhbmRGb3JJbmRleChpbmRleCkpKTsKICAgICAgICAgfQogICAgIH0KICAgICAKQEAgLTU1
Myw3ICs1NTMsNyBAQCB2b2lkIE9TUkV4aXRDb21waWxlcjo6Y29tcGlsZUV4aXQoY29uc3QKICAg
ICAvLyAxNCkgUmVpZnkgaW5saW5lZCBjYWxsIGZyYW1lcy4KICAgICAKICAgICBBU1NFUlQobV9q
aXQuYmFzZWxpbmVDb2RlQmxvY2soKS0+Z2V0SklUVHlwZSgpID09IEpJVENvZGU6OkJhc2VsaW5l
SklUKTsKLSAgICBtX2ppdC5zdG9yZVB0cihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIo
bV9qaXQuYmFzZWxpbmVDb2RlQmxvY2soKSksIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0Zvcigo
VmlydHVhbFJlZ2lzdGVyKUpTU3RhY2s6OkNvZGVCbG9jaykpOworICAgIG1faml0LnN0b3JlNjQo
QXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tNjQobV9qaXQuYmFzZWxpbmVDb2RlQmxvY2soKSks
IEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKUpTU3RhY2s6OkNv
ZGVCbG9jaykpOwogICAgIAogICAgIGZvciAoQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gZXhpdC5t
X2NvZGVPcmlnaW47IGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lOyBjb2RlT3JpZ2luID0gY29k
ZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmNhbGxlcikgewogICAgICAgICBJbmxpbmVDYWxsRnJh
bWUqIGlubGluZUNhbGxGcmFtZSA9IGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lOwpAQCAtNTc1
LDEyICs1NzUsMTIgQEAgdm9pZCBPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KGNvbnN0CiAg
ICAgICAgIH0gZWxzZQogICAgICAgICAgICAgY2FsbGVyRnJhbWVHUFIgPSBHUFJJbmZvOjpjYWxs
RnJhbWVSZWdpc3RlcjsKICAgICAgICAgCi0gICAgICAgIG1faml0LnN0b3JlUHRyKEFzc2VtYmx5
SGVscGVyczo6VHJ1c3RlZEltbVB0cihiYXNlbGluZUNvZGVCbG9jayksIEFzc2VtYmx5SGVscGVy
czo6YWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zm
c2V0ICsgSlNTdGFjazo6Q29kZUJsb2NrKSkpOwotICAgICAgICBtX2ppdC5zdG9yZVB0cihBc3Nl
bWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoaW5saW5lQ2FsbEZyYW1lLT5jYWxsZWUtPnNjb3Bl
KCkpLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcikoaW5saW5l
Q2FsbEZyYW1lLT5zdGFja09mZnNldCArIEpTU3RhY2s6OlNjb3BlQ2hhaW4pKSk7Ci0gICAgICAg
IG1faml0LnN0b3JlUHRyKGNhbGxlckZyYW1lR1BSLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NG
b3IoKFZpcnR1YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIEpTU3Rh
Y2s6OkNhbGxlckZyYW1lKSkpOwotICAgICAgICBtX2ppdC5zdG9yZVB0cihBc3NlbWJseUhlbHBl
cnM6OlRydXN0ZWRJbW1QdHIoanVtcFRhcmdldCksIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0Zv
cigoVmlydHVhbFJlZ2lzdGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgSlNTdGFj
azo6UmV0dXJuUEMpKSk7CisgICAgICAgIG1faml0LnN0b3JlNjQoQXNzZW1ibHlIZWxwZXJzOjpU
cnVzdGVkSW1tNjQoYmFzZWxpbmVDb2RlQmxvY2spLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NG
b3IoKFZpcnR1YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIEpTU3Rh
Y2s6OkNvZGVCbG9jaykpKTsKKyAgICAgICAgbV9qaXQuc3RvcmU2NChBc3NlbWJseUhlbHBlcnM6
OlRydXN0ZWRJbW02NChpbmxpbmVDYWxsRnJhbWUtPmNhbGxlZS0+c2NvcGUoKSksIEFzc2VtYmx5
SGVscGVyczo6YWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0
YWNrT2Zmc2V0ICsgSlNTdGFjazo6U2NvcGVDaGFpbikpKTsKKyAgICAgICAgbV9qaXQuc3RvcmU2
NChjYWxsZXJGcmFtZUdQUiwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFsUmVn
aXN0ZXIpKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBKU1N0YWNrOjpDYWxsZXJGcmFt
ZSkpKTsKKyAgICAgICAgbV9qaXQuc3RvcmU2NChBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW02
NChqdW1wVGFyZ2V0KSwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0
ZXIpKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBKU1N0YWNrOjpSZXR1cm5QQykpKTsK
ICAgICAgICAgbV9qaXQuc3RvcmUzMihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihpbmxp
bmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkpLCBBc3NlbWJseUhlbHBlcnM6OnBheWxvYWRG
b3IoKFZpcnR1YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIEpTU3Rh
Y2s6OkFyZ3VtZW50Q291bnQpKSk7Ci0gICAgICAgIG1faml0LnN0b3JlUHRyKEFzc2VtYmx5SGVs
cGVyczo6VHJ1c3RlZEltbVB0cihpbmxpbmVDYWxsRnJhbWUtPmNhbGxlZS5nZXQoKSksIEFzc2Vt
Ymx5SGVscGVyczo6YWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKShpbmxpbmVDYWxsRnJhbWUt
PnN0YWNrT2Zmc2V0ICsgSlNTdGFjazo6Q2FsbGVlKSkpOworICAgICAgICBtX2ppdC5zdG9yZTY0
KEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTY0KGlubGluZUNhbGxGcmFtZS0+Y2FsbGVlLmdl
dCgpKSwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlubGlu
ZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBKU1N0YWNrOjpDYWxsZWUpKSk7CiAgICAgfQogICAg
IAogICAgIC8vIDE1KSBDcmVhdGUgYXJndW1lbnRzIGlmIG5lY2Vzc2FyeSBhbmQgcGxhY2UgdGhl
bSBpbnRvIHRoZSBhcHByb3ByaWF0ZSBhbGlhc2VkCkBAIC02MjAsMjIgKzYyMCwyMiBAQCB2b2lk
IE9TUkV4aXRDb21waWxlcjo6Y29tcGlsZUV4aXQoY29uc3QKICAgICAgICAgICAgICAgICAgICAg
ICAgIGJpdHdpc2VfY2FzdDx2b2lkKj4ob3BlcmF0aW9uQ3JlYXRlQXJndW1lbnRzKSksCiAgICAg
ICAgICAgICAgICAgICAgIEdQUkluZm86Om5vbkFyZ0dQUjApOwogICAgICAgICAgICAgICAgIG1f
aml0LmNhbGwoR1BSSW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAgICAgICAgICAgICAgbV9qaXQuc3Rv
cmVQdHIoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0Zv
cihhcmd1bWVudHNSZWdpc3RlcikpOwotICAgICAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKAor
ICAgICAgICAgICAgICAgIG1faml0LnN0b3JlNjQoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEFz
c2VtYmx5SGVscGVyczo6YWRkcmVzc0Zvcihhcmd1bWVudHNSZWdpc3RlcikpOworICAgICAgICAg
ICAgICAgIG1faml0LnN0b3JlNjQoCiAgICAgICAgICAgICAgICAgICAgIEdQUkluZm86OnJldHVy
blZhbHVlR1BSLAogICAgICAgICAgICAgICAgICAgICBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NG
b3IodW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyKGFyZ3VtZW50c1JlZ2lzdGVyKSkpOwogICAg
ICAgICAgICAgICAgIG1faml0Lm1vdmUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEdQUkluZm86
OnJlZ1QwKTsgLy8gbm8tb3AgbW92ZSBvbiBhbG1vc3QgYWxsIHBsYXRmb3Jtcy4KICAgICAgICAg
ICAgIH0KIAotICAgICAgICAgICAgbV9qaXQubG9hZFB0cihBc3NlbWJseUhlbHBlcnM6OmFkZHJl
c3NGb3IoYXJndW1lbnRzUmVnaXN0ZXIpLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgICAgICBt
X2ppdC5zdG9yZVB0cihHUFJJbmZvOjpyZWdUMCwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9y
KG9wZXJhbmQpKTsKKyAgICAgICAgICAgIG1faml0LmxvYWQ2NChBc3NlbWJseUhlbHBlcnM6OmFk
ZHJlc3NGb3IoYXJndW1lbnRzUmVnaXN0ZXIpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAg
ICBtX2ppdC5zdG9yZTY0KEdQUkluZm86OnJlZ1QwLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NG
b3Iob3BlcmFuZCkpOwogICAgICAgICB9CiAgICAgfQogICAgIAogICAgIC8vIDE2KSBMb2FkIHRo
ZSByZXN1bHQgb2YgdGhlIGxhc3QgYnl0ZWNvZGUgb3BlcmF0aW9uIGludG8gcmVnVDAuCiAgICAg
CiAgICAgaWYgKGV4aXQubV9sYXN0U2V0T3BlcmFuZCAhPSBzdGQ6Om51bWVyaWNfbGltaXRzPGlu
dD46Om1heCgpKQotICAgICAgICBtX2ppdC5sb2FkUHRyKEFzc2VtYmx5SGVscGVyczo6YWRkcmVz
c0ZvcigoVmlydHVhbFJlZ2lzdGVyKWV4aXQubV9sYXN0U2V0T3BlcmFuZCksIEdQUkluZm86OmNh
Y2hlZFJlc3VsdFJlZ2lzdGVyKTsKKyAgICAgICAgbV9qaXQubG9hZDY0KEFzc2VtYmx5SGVscGVy
czo6YWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKWV4aXQubV9sYXN0U2V0T3BlcmFuZCksIEdQ
UkluZm86OmNhY2hlZFJlc3VsdFJlZ2lzdGVyKTsKICAgICAKICAgICAvLyAxNykgQWRqdXN0IHRo
ZSBjYWxsIGZyYW1lIHBvaW50ZXIuCiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDEzMTE2MikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NTMs
NiArMTQ1Myw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAjaWYgQ09NUElMRVIoR0NDKSAmJiBDUFUo
WDg2XzY0KQogYXNtICgKKyIudGV4dCIgIlxuIiBcCiAiLmdsb2JsICIgU1lNQk9MX1NUUklORyhn
ZXRIb3N0Q2FsbFJldHVyblZhbHVlKSAiXG4iCiBISURFX1NZTUJPTChnZXRIb3N0Q2FsbFJldHVy
blZhbHVlKSAiXG4iCiBTWU1CT0xfU1RSSU5HKGdldEhvc3RDYWxsUmV0dXJuVmFsdWUpICI6IiAi
XG4iCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5jcHAJKHJldmlz
aW9uIDEzMTE2MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE5Miw3ICsxOTIsNyBAQCBzdGF0aWMgdm9pZCBnZW5lcmF0ZVBy
b3RvQ2hhaW5BY2Nlc3NTdHViCiAgICAgCiAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KG9mZnNldCkp
IHsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICBzdHViSml0LmxvYWRQdHIocHJvdG9PYmpl
Y3QtPmxvY2F0aW9uRm9yT2Zmc2V0KG9mZnNldCksIHJlc3VsdEdQUik7CisgICAgICAgIHN0dWJK
aXQubG9hZDY0KHByb3RvT2JqZWN0LT5sb2NhdGlvbkZvck9mZnNldChvZmZzZXQpLCByZXN1bHRH
UFIpOwogI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKICAgICAgICAgc3R1YkppdC5tb3ZlKE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHByb3RvT2JqZWN0LT5sb2NhdGlvbkZvck9mZnNldChv
ZmZzZXQpKSwgcmVzdWx0R1BSKTsKICAgICAgICAgc3R1YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3Jp
cHRvciwgYXNCaXRzLnRhZykpLCByZXN1bHRUYWdHUFIpOwpAQCAtMjAxLDcgKzIwMSw3IEBAIHN0
YXRpYyB2b2lkIGdlbmVyYXRlUHJvdG9DaGFpbkFjY2Vzc1N0dWIKICAgICB9IGVsc2UgewogICAg
ICAgICBzdHViSml0LmxvYWRQdHIocHJvdG9PYmplY3QtPmJ1dHRlcmZseUFkZHJlc3MoKSwgcmVz
dWx0R1BSKTsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBvZmZzZXRJbkJ1dHRlcmZseShvZmZzZXQp
ICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpLCByZXN1bHRHUFIpOworICAgICAgICBz
dHViSml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIG9mZnNldElu
QnV0dGVyZmx5KG9mZnNldCkgKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSksIHJlc3Vs
dEdQUik7CiAjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQogICAgICAgICBzdHViSml0LmxvYWQzMihN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIG9mZnNldEluQnV0dGVyZmx5KG9mZnNl
dCkgKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSArIE9CSkVDVF9PRkZTRVRPRihFbmNv
ZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSksIHJlc3VsdFRhZ0dQUik7CiAgICAgICAg
IHN0dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgb2Zmc2V0
SW5CdXR0ZXJmbHkob2Zmc2V0KSAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pICsgT0JK
RUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSksIHJl
c3VsdEdQUik7CkBAIC0yNjMsNyArMjYzLDcgQEAgc3RhdGljIGJvb2wgdHJ5Q2FjaGVHZXRCeUlE
KEV4ZWNTdGF0ZSogZQogICAgICAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKHN0dWJKaXQuYnJhbmNo
MzIoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuLCBzY3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbTMyKDApKSk7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICBzdHViSml0
Lm9yUHRyKEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlciwgc2NyYXRjaEdQUiwgcmVzdWx0
R1BSKTsKKyAgICAgICAgc3R1YkppdC5vcjY0KEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rl
ciwgc2NyYXRjaEdQUiwgcmVzdWx0R1BSKTsKICNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAg
ICAgIHN0dWJKaXQubW92ZShzY3JhdGNoR1BSLCByZXN1bHRHUFIpOwogICAgICAgICBzdHViSml0
Lm1vdmUoSklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMigweGZmZmZmZmZmKSwgcmVzdWx0VGFnR1BS
KTsgLy8gSlNWYWx1ZTo6SW50MzJUYWcKQEAgLTQyMSwxNCArNDIxLDE0IEBAIHN0YXRpYyBib29s
IHRyeUJ1aWxkR2V0QnlJRExpc3QoRXhlY1N0YXQKICAgICAgICAgICAgICAgICBBU1NFUlQoYmFz
ZUdQUiAhPSBzY3JhdGNoR1BSKTsKICAgICAgICAgICAgICAgICBpZiAoaXNJbmxpbmVPZmZzZXQo
c2xvdC5jYWNoZWRPZmZzZXQoKSkpIHsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICAgICAg
ICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwg
b2Zmc2V0UmVsYXRpdmVUb0Jhc2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkpLCBzY3JhdGNoR1BSKTsK
KyAgICAgICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkNjQoTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3MoYmFzZUdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkpLCBz
Y3JhdGNoR1BSKTsKICNlbHNlCiAgICAgICAgICAgICAgICAgICAgIHN0dWJKaXQubG9hZDMyKE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKHNsb3Qu
Y2FjaGVkT2Zmc2V0KCkpKSwgc2NyYXRjaEdQUik7CiAjZW5kaWYKICAgICAgICAgICAgICAgICB9
IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRj
aEdQUik7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgICAgICAgICAgICAgc3R1YkppdC5s
b2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIG9mZnNldFJlbGF0aXZl
VG9CYXNlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICAg
ICAgICAgIHN0dWJKaXQubG9hZDY0KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIs
IG9mZnNldFJlbGF0aXZlVG9CYXNlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpKSwgc2NyYXRjaEdQUik7
CiAjZWxzZQogICAgICAgICAgICAgICAgICAgICBzdHViSml0LmxvYWQzMihNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShzbG90LmNhY2hlZE9m
ZnNldCgpKSksIHNjcmF0Y2hHUFIpOwogI2VuZGlmCkBAIC00NjUsNyArNDY1LDcgQEAgc3RhdGlj
IGJvb2wgdHJ5QnVpbGRHZXRCeUlETGlzdChFeGVjU3RhdAogICAgICAgICB9IGVsc2UgewogICAg
ICAgICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KHNsb3QuY2FjaGVkT2Zmc2V0KCkpKSB7CiAjaWYg
VVNFKEpTVkFMVUU2NCkKLSAgICAgICAgICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uoc2xvdC5jYWNoZWRP
ZmZzZXQoKSkpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgICAgIHN0dWJKaXQubG9hZDY0KE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKHNsb3Qu
Y2FjaGVkT2Zmc2V0KCkpKSwgcmVzdWx0R1BSKTsKICNlbHNlCiAgICAgICAgICAgICAgICAgaWYg
KGJhc2VHUFIgPT0gcmVzdWx0VGFnR1BSKSB7CiAgICAgICAgICAgICAgICAgICAgIHN0dWJKaXQu
bG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIG9mZnNldFJlbGF0aXZlVG9C
YXNlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURl
c2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSksIHJlc3VsdEdQUik7CkBAIC00NzgsNyArNDc4LDcg
QEAgc3RhdGljIGJvb2wgdHJ5QnVpbGRHZXRCeUlETGlzdChFeGVjU3RhdAogICAgICAgICAgICAg
fSBlbHNlIHsKICAgICAgICAgICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVzdWx0R1BS
KTsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICAgICAgICAgIHN0dWJKaXQubG9hZFB0cihN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKHNs
b3QuY2FjaGVkT2Zmc2V0KCkpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBzdHViSml0
LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIG9mZnNldFJlbGF0aXZl
VG9CYXNlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpKSwgcmVzdWx0R1BSKTsKICNlbHNlCiAgICAgICAg
ICAgICAgICAgc3R1YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0R1BS
LCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShzbG90LmNhY2hlZE9mZnNldCgpKSArIE9CSkVDVF9PRkZT
RVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSksIHJlc3VsdFRhZ0dQUik7
CiAgICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
cmVzdWx0R1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShzbG90LmNhY2hlZE9mZnNldCgpKSArIE9C
SkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpLCBy
ZXN1bHRHUFIpOwpAQCAtNjgyLDEwICs2ODIsMTAgQEAgc3RhdGljIHZvaWQgZW1pdFB1dFJlcGxh
Y2VTdHViKAogICAgIAogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgaWYgKGlzSW5saW5lT2Zmc2V0
KHNsb3QuY2FjaGVkT2Zmc2V0KCkpKQotICAgICAgICBzdHViSml0LnN0b3JlUHRyKHZhbHVlR1BS
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxp
bmVTdG9yYWdlKCkgKyBvZmZzZXRJbklubGluZVN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkg
KiBzaXplb2YoSlNWYWx1ZSkpKTsKKyAgICAgICAgc3R1YkppdC5zdG9yZTY0KHZhbHVlR1BSLCBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVT
dG9yYWdlKCkgKyBvZmZzZXRJbklubGluZVN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBz
aXplb2YoSlNWYWx1ZSkpKTsKICAgICBlbHNlIHsKICAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQo
KSksIHNjcmF0Y2hHUFIpOwotICAgICAgICBzdHViSml0LnN0b3JlUHRyKHZhbHVlR1BSLCBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBvZmZzZXRJbkJ1dHRlcmZseShzbG90LmNh
Y2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSkpOworICAgICAgICBzdHViSml0LnN0b3Jl
NjQodmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIG9mZnNldElu
QnV0dGVyZmx5KHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpKSk7CiAgICAg
fQogI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKICAgICBpZiAoaXNJbmxpbmVPZmZzZXQoc2xvdC5j
YWNoZWRPZmZzZXQoKSkpIHsKQEAgLTg1NCwxMSArODU0LDExIEBAIHN0YXRpYyB2b2lkIGVtaXRQ
dXRUcmFuc2l0aW9uU3R1YigKICAgICBzdHViSml0LnN0b3JlUHRyKE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIs
IEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpKTsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIGlm
IChpc0lubGluZU9mZnNldChzbG90LmNhY2hlZE9mZnNldCgpKSkKLSAgICAgICAgc3R1YkppdC5z
dG9yZVB0cih2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmpl
Y3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpICsgb2Zmc2V0SW5JbmxpbmVTdG9yYWdlKHNsb3Qu
Y2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpKSk7CisgICAgICAgIHN0dWJKaXQuc3Rv
cmU2NCh2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6
Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpICsgb2Zmc2V0SW5JbmxpbmVTdG9yYWdlKHNsb3QuY2Fj
aGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpKSk7CiAgICAgZWxzZSB7CiAgICAgICAgIGlm
ICghc2NyYXRjaEdQUjFIYXNTdG9yYWdlKQogICAgICAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQo
KSksIHNjcmF0Y2hHUFIxKTsKLSAgICAgICAgc3R1YkppdC5zdG9yZVB0cih2YWx1ZUdQUiwgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUjEsIG9mZnNldEluQnV0dGVyZmx5KHNsb3Qu
Y2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpKSk7CisgICAgICAgIHN0dWJKaXQuc3Rv
cmU2NCh2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUjEsIG9mZnNl
dEluQnV0dGVyZmx5KHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpKSk7CiAg
ICAgfQogI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKICAgICBpZiAoaXNJbmxpbmVPZmZzZXQoc2xv
dC5jYWNoZWRPZmZzZXQoKSkpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaAkocmV2aXNpb24gMTMxMTYy
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0
b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMTI3LDE1ICsxMjcsMjAgQEAgcHVibGljOgogICAgIHsK
ICAgICAgICAgdW5zaWduZWQgY291bnQgPSAwOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBH
UFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgaS0tOykgewotICAgICAgICAgICAgaWYgKG1fdXNl
ZFJlZ2lzdGVycy5nZXRHUFJCeUluZGV4KGkpKQotICAgICAgICAgICAgICAgIGppdC5zdG9yZVB0
cihHUFJJbmZvOjp0b1JlZ2lzdGVyKGkpLCBzY3JhdGNoQnVmZmVyLT5tX2J1ZmZlciArIChjb3Vu
dCsrKSk7CisgICAgICAgICAgICBpZiAobV91c2VkUmVnaXN0ZXJzLmdldEdQUkJ5SW5kZXgoaSkp
IHsKKyNpZiBDUFUoWDg2XzY0KQorICAgICAgICAgICAgICAgIGppdC5zdG9yZTY0KEdQUkluZm86
OnRvUmVnaXN0ZXIoaSksIHN0YXRpY19jYXN0PEVuY29kZWRKU1ZhbHVlKj4oc2NyYXRjaEJ1ZmZl
ci0+ZGF0YUJ1ZmZlcigpKSArIChjb3VudCsrKSk7CisjZWxzZQorICAgICAgICAgICAgICAgIGpp
dC5zdG9yZVB0cihHUFJJbmZvOjp0b1JlZ2lzdGVyKGkpLCBzdGF0aWNfY2FzdDxFbmNvZGVkSlNW
YWx1ZSo+KHNjcmF0Y2hCdWZmZXItPmRhdGFCdWZmZXIoKSkgKyAoY291bnQrKykpOworI2VuZGlm
CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoc2NyYXRjaEdQUiA9PSBJbnZhbGlkR1BS
UmVnICYmICFtX2xvY2tlZFJlZ2lzdGVycy5nZXRHUFJCeUluZGV4KGkpICYmICFtX3NjcmF0Y2hS
ZWdpc3RlcnMuZ2V0R1BSQnlJbmRleChpKSkKICAgICAgICAgICAgICAgICBzY3JhdGNoR1BSID0g
R1BSSW5mbzo6dG9SZWdpc3RlcihpKTsKICAgICAgICAgfQogICAgICAgICBBU1NFUlQoc2NyYXRj
aEdQUiAhPSBJbnZhbGlkR1BSUmVnKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gRlBSSW5m
bzo6bnVtYmVyT2ZSZWdpc3RlcnM7IGktLTspIHsKICAgICAgICAgICAgIGlmIChtX3VzZWRSZWdp
c3RlcnMuZ2V0RlBSQnlJbmRleChpKSkgewotICAgICAgICAgICAgICAgIGppdC5tb3ZlKE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHNjcmF0Y2hCdWZmZXItPm1fYnVmZmVyICsgKGNvdW50
KyspKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW1QdHIoc3RhdGljX2Nhc3Q8RW5jb2RlZEpTVmFsdWUqPihzY3JhdGNoQnVm
ZmVyLT5kYXRhQnVmZmVyKCkpICsgKGNvdW50KyspKSwgc2NyYXRjaEdQUik7CiAgICAgICAgICAg
ICAgICAgaml0LnN0b3JlRG91YmxlKEZQUkluZm86OnRvUmVnaXN0ZXIoaSksIHNjcmF0Y2hHUFIp
OwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0xNjUsMTUgKzE3MCwyMCBAQCBwdWJsaWM6
CiAgICAgICAgIHVuc2lnbmVkIGNvdW50ID0gbV91c2VkUmVnaXN0ZXJzLm51bWJlck9mU2V0R1BS
cygpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBGUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVy
czsgaS0tOykgewogICAgICAgICAgICAgaWYgKG1fdXNlZFJlZ2lzdGVycy5nZXRGUFJCeUluZGV4
KGkpKSB7Ci0gICAgICAgICAgICAgICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW1QdHIoc2NyYXRjaEJ1ZmZlci0+bV9idWZmZXIgKyAoY291bnQrKykpLCBzY3JhdGNoR1BSKTsK
KyAgICAgICAgICAgICAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihz
dGF0aWNfY2FzdDxFbmNvZGVkSlNWYWx1ZSo+KHNjcmF0Y2hCdWZmZXItPmRhdGFCdWZmZXIoKSkg
KyAoY291bnQrKykpLCBzY3JhdGNoR1BSKTsKICAgICAgICAgICAgICAgICBqaXQubG9hZERvdWJs
ZShzY3JhdGNoR1BSLCBGUFJJbmZvOjp0b1JlZ2lzdGVyKGkpKTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgfQogICAgICAgICAKICAgICAgICAgY291bnQgPSAwOwogICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgaS0tOykgewotICAgICAgICAgICAg
aWYgKG1fdXNlZFJlZ2lzdGVycy5nZXRHUFJCeUluZGV4KGkpKQotICAgICAgICAgICAgICAgIGpp
dC5sb2FkUHRyKHNjcmF0Y2hCdWZmZXItPm1fYnVmZmVyICsgKGNvdW50KyspLCBHUFJJbmZvOjp0
b1JlZ2lzdGVyKGkpKTsKKyAgICAgICAgICAgIGlmIChtX3VzZWRSZWdpc3RlcnMuZ2V0R1BSQnlJ
bmRleChpKSkgeworI2lmIENQVShYODZfNjQpCisgICAgICAgICAgICAgICAgaml0LmxvYWQ2NChz
dGF0aWNfY2FzdDxFbmNvZGVkSlNWYWx1ZSo+KHNjcmF0Y2hCdWZmZXItPmRhdGFCdWZmZXIoKSkg
KyAoY291bnQrKyksIEdQUkluZm86OnRvUmVnaXN0ZXIoaSkpOworI2Vsc2UKKyAgICAgICAgICAg
ICAgICBqaXQubG9hZFB0cihzdGF0aWNfY2FzdDxFbmNvZGVkSlNWYWx1ZSo+KHNjcmF0Y2hCdWZm
ZXItPmRhdGFCdWZmZXIoKSkgKyAoY291bnQrKyksIEdQUkluZm86OnRvUmVnaXN0ZXIoaSkpOwor
I2VuZGlmCisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAgICAgCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NpbGVudFJlZ2lzdGVyU2F2ZVBsYW4uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NpbGVudFJlZ2lzdGVyU2F2ZVBs
YW4uaAkocmV2aXNpb24gMTMxMTYyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
aWxlbnRSZWdpc3RlclNhdmVQbGFuLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDYgKzQxLDcgQEAg
ZW51bSBTaWxlbnRTcGlsbEFjdGlvbiB7CiAgICAgU3RvcmUzMlRhZywKICAgICBTdG9yZTMyUGF5
bG9hZCwKICAgICBTdG9yZVB0ciwKKyAgICBTdG9yZTY0LAogICAgIFN0b3JlRG91YmxlCiB9Owog
CkBAIC02MSw2ICs2Miw3IEBAIGVudW0gU2lsZW50RmlsbEFjdGlvbiB7CiAgICAgTG9hZDMyUGF5
bG9hZCwKICAgICBMb2FkMzJQYXlsb2FkQm94SW50LAogICAgIExvYWRQdHIsCisgICAgTG9hZDY0
LAogICAgIExvYWREb3VibGUsCiAgICAgTG9hZERvdWJsZUJveERvdWJsZSwKICAgICBMb2FkSlNV
bmJveERvdWJsZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAxMzExNjIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NCwy
MSArNTQsMjEgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsSW50ZWdlcihOb2RlSQogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgaWYgKGlzTnVtYmVyQ29uc3RhbnQobm9kZUluZGV4KSkg
ewogICAgICAgICAgICAgICAgIEpTVmFsdWUganNWYWx1ZSA9IGpzTnVtYmVyKHZhbHVlT2ZOdW1i
ZXJDb25zdGFudChub2RlSW5kZXgpKTsKLSAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3Jv
QXNzZW1ibGVyOjpJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKGpzVmFsdWUpKSwgZ3ByKTsKKyAgICAg
ICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpJbW02NChKU1ZhbHVlOjplbmNv
ZGUoanNWYWx1ZSkpLCBncHIpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAg
ICBBU1NFUlQoaXNKU0NvbnN0YW50KG5vZGVJbmRleCkpOwogICAgICAgICAgICAgICAgIEpTVmFs
dWUganNWYWx1ZSA9IHZhbHVlT2ZKU0NvbnN0YW50KG5vZGVJbmRleCk7Ci0gICAgICAgICAgICAg
ICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihKU1ZhbHVlOjplbmNv
ZGUoanNWYWx1ZSkpLCBncHIpOworICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNWYWx1ZSkpLCBncHIpOwogICAg
ICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKGluZm8uc3BpbGxGb3JtYXQoKSA9PSBEYXRh
Rm9ybWF0SW50ZWdlcikgewogICAgICAgICAgICAgbV9ncHJzLnJldGFpbihncHIsIHZpcnR1YWxS
ZWdpc3RlciwgU3BpbGxPcmRlclNwaWxsZWQpOwogICAgICAgICAgICAgbV9qaXQubG9hZDMyKEpJ
VENvbXBpbGVyOjpwYXlsb2FkRm9yKHZpcnR1YWxSZWdpc3RlciksIGdwcik7CiAgICAgICAgICAg
ICAvLyBUYWcgaXQsIHNpbmNlIGZpbGxJbnRlZ2VyKCkgaXMgdXNlZCB3aGVuIHdlIHdhbnQgYSBi
b3hlZCBpbnRlZ2VyLgotICAgICAgICAgICAgbV9qaXQub3JQdHIoR1BSSW5mbzo6dGFnVHlwZU51
bWJlclJlZ2lzdGVyLCBncHIpOworICAgICAgICAgICAgbV9qaXQub3I2NChHUFJJbmZvOjp0YWdU
eXBlTnVtYmVyUmVnaXN0ZXIsIGdwcik7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBB
U1NFUlQoaW5mby5zcGlsbEZvcm1hdCgpID09IERhdGFGb3JtYXRKUyB8fCBpbmZvLnNwaWxsRm9y
bWF0KCkgPT0gRGF0YUZvcm1hdEpTSW50ZWdlcik7CiAgICAgICAgICAgICBtX2dwcnMucmV0YWlu
KGdwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyU3BpbGxlZCk7Ci0gICAgICAgICAgICBt
X2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIGdw
cik7CisgICAgICAgICAgICBtX2ppdC5sb2FkNjQoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Iodmly
dHVhbFJlZ2lzdGVyKSwgZ3ByKTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIFNpbmNlIHdlIHN0
YXRpY2FsbHkga25vdyB0aGF0IHdlJ3JlIGZpbGxpbmcgYW4gaW50ZWdlciwgYW5kIHZhbHVlcwpA
QCAtMTMyLDggKzEzMiw4IEBAIEZQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbERvdWJsZShOb2Rl
SW4KICAgICAgICAgICAgICAgICB1bmxvY2soZ3ByKTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAo
aXNOdW1iZXJDb25zdGFudChub2RlSW5kZXgpKSB7CiAgICAgICAgICAgICAgICAgRlBSUmVnIGZw
ciA9IGZwckFsbG9jYXRlKCk7Ci0gICAgICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2Vt
Ymxlcjo6SW1tUHRyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50ZXJwcmV0RG91YmxlVG9J
bnRwdHIodmFsdWVPZk51bWJlckNvbnN0YW50KG5vZGVJbmRleCkpKSksIGdwcik7Ci0gICAgICAg
ICAgICAgICAgbV9qaXQubW92ZVB0clRvRG91YmxlKGdwciwgZnByKTsKKyAgICAgICAgICAgICAg
ICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpJbW02NChyZWludGVycHJldERvdWJsZVRvSW50
NjQodmFsdWVPZk51bWJlckNvbnN0YW50KG5vZGVJbmRleCkpKSwgZ3ByKTsKKyAgICAgICAgICAg
ICAgICBtX2ppdC5tb3ZlNjRUb0RvdWJsZShncHIsIGZwcik7CiAgICAgICAgICAgICAgICAgdW5s
b2NrKGdwcik7CiAKICAgICAgICAgICAgICAgICBtX2ZwcnMucmV0YWluKGZwciwgdmlydHVhbFJl
Z2lzdGVyLCBTcGlsbE9yZGVyRG91YmxlKTsKQEAgLTE0Myw3ICsxNDMsNyBAQCBGUFJSZWcgU3Bl
Y3VsYXRpdmVKSVQ6OmZpbGxEb3VibGUoTm9kZUluCiAgICAgICAgICAgICAgICAgLy8gRklYTUU6
IHNob3VsZCBub3QgYmUgcmVhY2hhYmxlPwogICAgICAgICAgICAgICAgIEFTU0VSVChpc0pTQ29u
c3RhbnQobm9kZUluZGV4KSk7CiAgICAgICAgICAgICAgICAgSlNWYWx1ZSBqc1ZhbHVlID0gdmFs
dWVPZkpTQ29uc3RhbnQobm9kZUluZGV4KTsKLSAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKEpTVmFsdWU6OmVuY29kZShqc1ZhbHVlKSksIGdw
cik7CisgICAgICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bTY0KEpTVmFsdWU6OmVuY29kZShqc1ZhbHVlKSksIGdwcik7CiAgICAgICAgICAgICAgICAgbV9n
cHJzLnJldGFpbihncHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckNvbnN0YW50KTsKICAg
ICAgICAgICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKCptX3N0cmVhbSwgZ3ByLCBEYXRhRm9ybWF0
SlMpOwogICAgICAgICAgICAgICAgIHVubG9jayhncHIpOwpAQCAtMTc0LDcgKzE3NCw3IEBAIEZQ
UlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbERvdWJsZShOb2RlSW4KICAgICAgICAgCiAgICAgICAg
ICAgICAgICAgQVNTRVJUKHNwaWxsRm9ybWF0ICYgRGF0YUZvcm1hdEpTKTsKICAgICAgICAgICAg
ICAgICBtX2dwcnMucmV0YWluKGdwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyU3BpbGxl
ZCk7Ci0gICAgICAgICAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6YWRkcmVzc0Zv
cih2aXJ0dWFsUmVnaXN0ZXIpLCBncHIpOworICAgICAgICAgICAgICAgIG1faml0LmxvYWQ2NChK
SVRDb21waWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBncHIpOwogICAgICAgICAg
ICAgICAgIGluZm8uZmlsbEpTVmFsdWUoKm1fc3RyZWFtLCBncHIsIHNwaWxsRm9ybWF0KTsKICAg
ICAgICAgICAgICAgICB1bmxvY2soZ3ByKTsKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTE5
OSw3ICsxOTksNyBAQCBGUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxEb3VibGUoTm9kZUluCiAg
ICAgICAgIEZQUlJlZyBmcHIgPSBmcHJBbGxvY2F0ZSgpOwogICAgICAgICBHUFJSZWcgdGVtcEdw
ciA9IGFsbG9jYXRlKCk7IC8vIEZJWE1FOiBjYW4gd2Ugc2tpcCB0aGlzIGFsbG9jYXRpb24gb24g
dGhlIGxhc3QgdXNlIG9mIHRoZSB2aXJ0dWFsIHJlZ2lzdGVyPwogCi0gICAgICAgIEpJVENvbXBp
bGVyOjpKdW1wIGlzSW50ZWdlciA9IG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6QWJv
dmVPckVxdWFsLCBqc1ZhbHVlR3ByLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOwor
ICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBpc0ludGVnZXIgPSBtX2ppdC5icmFuY2g2NChNYWNy
b0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBqc1ZhbHVlR3ByLCBHUFJJbmZvOjp0YWdUeXBlTnVt
YmVyUmVnaXN0ZXIpOwogCiAgICAgICAgIG1faml0LmppdEFzc2VydElzSlNEb3VibGUoanNWYWx1
ZUdwcik7CiAKQEAgLTI3OCwxNSArMjc4LDE1IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6Zmls
bEpTVmFsdWUoTm9kZUkKICAgICAgICAgICAgIGlmIChpc0ludDMyQ29uc3RhbnQobm9kZUluZGV4
KSkgewogICAgICAgICAgICAgICAgIGluZm8uZmlsbEpTVmFsdWUoKm1fc3RyZWFtLCBncHIsIERh
dGFGb3JtYXRKU0ludGVnZXIpOwogICAgICAgICAgICAgICAgIEpTVmFsdWUganNWYWx1ZSA9IGpz
TnVtYmVyKHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGVJbmRleCkpOwotICAgICAgICAgICAgICAg
IG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OkltbVB0cihKU1ZhbHVlOjplbmNvZGUoanNWYWx1
ZSkpLCBncHIpOworICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6Oklt
bTY0KEpTVmFsdWU6OmVuY29kZShqc1ZhbHVlKSksIGdwcik7CiAgICAgICAgICAgICB9IGVsc2Ug
aWYgKGlzTnVtYmVyQ29uc3RhbnQobm9kZUluZGV4KSkgewogICAgICAgICAgICAgICAgIGluZm8u
ZmlsbEpTVmFsdWUoKm1fc3RyZWFtLCBncHIsIERhdGFGb3JtYXRKU0RvdWJsZSk7CiAgICAgICAg
ICAgICAgICAgSlNWYWx1ZSBqc1ZhbHVlKEpTVmFsdWU6OkVuY29kZUFzRG91YmxlLCB2YWx1ZU9m
TnVtYmVyQ29uc3RhbnQobm9kZUluZGV4KSk7Ci0gICAgICAgICAgICAgICAgbV9qaXQubW92ZShN
YWNyb0Fzc2VtYmxlcjo6SW1tUHRyKEpTVmFsdWU6OmVuY29kZShqc1ZhbHVlKSksIGdwcik7Cisg
ICAgICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6SW1tNjQoSlNWYWx1ZTo6
ZW5jb2RlKGpzVmFsdWUpKSwgZ3ByKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
ICAgICAgQVNTRVJUKGlzSlNDb25zdGFudChub2RlSW5kZXgpKTsKICAgICAgICAgICAgICAgICBK
U1ZhbHVlIGpzVmFsdWUgPSB2YWx1ZU9mSlNDb25zdGFudChub2RlSW5kZXgpOwotICAgICAgICAg
ICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoSlNWYWx1ZTo6
ZW5jb2RlKGpzVmFsdWUpKSwgZ3ByKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzVmFsdWUpKSwgZ3ByKTsK
ICAgICAgICAgICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKCptX3N0cmVhbSwgZ3ByLCBEYXRhRm9y
bWF0SlMpOwogICAgICAgICAgICAgfQogCkBAIC0yOTYsMTMgKzI5NiwxMyBAQCBHUFJSZWcgU3Bl
Y3VsYXRpdmVKSVQ6OmZpbGxKU1ZhbHVlKE5vZGVJCiAgICAgICAgICAgICBtX2dwcnMucmV0YWlu
KGdwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyU3BpbGxlZCk7CiAgICAgICAgICAgICBp
ZiAoc3BpbGxGb3JtYXQgPT0gRGF0YUZvcm1hdEludGVnZXIpIHsKICAgICAgICAgICAgICAgICBt
X2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSwgZ3By
KTsKLSAgICAgICAgICAgICAgICBtX2ppdC5vclB0cihHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVn
aXN0ZXIsIGdwcik7CisgICAgICAgICAgICAgICAgbV9qaXQub3I2NChHUFJJbmZvOjp0YWdUeXBl
TnVtYmVyUmVnaXN0ZXIsIGdwcik7CiAgICAgICAgICAgICAgICAgc3BpbGxGb3JtYXQgPSBEYXRh
Rm9ybWF0SlNJbnRlZ2VyOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBt
X2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIGdw
cik7CisgICAgICAgICAgICAgICAgbV9qaXQubG9hZDY0KEpJVENvbXBpbGVyOjphZGRyZXNzRm9y
KHZpcnR1YWxSZWdpc3RlciksIGdwcik7CiAgICAgICAgICAgICAgICAgaWYgKHNwaWxsRm9ybWF0
ID09IERhdGFGb3JtYXREb3VibGUpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gTmVlZCB0byBi
b3ggdGhlIGRvdWJsZSwgc2luY2Ugd2Ugd2FudCBhIEpTVmFsdWUuCi0gICAgICAgICAgICAgICAg
ICAgIG1faml0LnN1YlB0cihHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIGdwcik7Cisg
ICAgICAgICAgICAgICAgICAgIG1faml0LnN1YjY0KEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdp
c3RlciwgZ3ByKTsKICAgICAgICAgICAgICAgICAgICAgc3BpbGxGb3JtYXQgPSBEYXRhRm9ybWF0
SlNEb3VibGU7CiAgICAgICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgICAgIEFT
U0VSVChzcGlsbEZvcm1hdCAmIERhdGFGb3JtYXRKUyk7CkBAIC0zMTgsMTEgKzMxOCwxMSBAQCBH
UFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxKU1ZhbHVlKE5vZGVJCiAgICAgICAgIC8vIElmIG5v
dCwgd2UnbGwgemVybyBleHRlbmQgaW4gcGxhY2UsIHNvIG1hcmsgb24gdGhlIGluZm8gdGhhdCB0
aGlzIGlzIG5vdyB0eXBlIERhdGFGb3JtYXRJbnRlZ2VyLCBub3QgRGF0YUZvcm1hdEpTSW50ZWdl
ci4KICAgICAgICAgaWYgKG1fZ3Bycy5pc0xvY2tlZChncHIpKSB7CiAgICAgICAgICAgICBHUFJS
ZWcgcmVzdWx0ID0gYWxsb2NhdGUoKTsKLSAgICAgICAgICAgIG1faml0Lm9yUHRyKEdQUkluZm86
OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgZ3ByLCByZXN1bHQpOworICAgICAgICAgICAgbV9qaXQu
b3I2NChHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIGdwciwgcmVzdWx0KTsKICAgICAg
ICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIH0KICAgICAgICAgbV9ncHJzLmxvY2soZ3By
KTsKLSAgICAgICAgbV9qaXQub3JQdHIoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBn
cHIpOworICAgICAgICBtX2ppdC5vcjY0KEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlciwg
Z3ByKTsKICAgICAgICAgaW5mby5maWxsSlNWYWx1ZSgqbV9zdHJlYW0sIGdwciwgRGF0YUZvcm1h
dEpTSW50ZWdlcik7CiAgICAgICAgIHJldHVybiBncHI7CiAgICAgfQpAQCAtNDA3LDggKzQwNyw4
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlVmFsdWUKICAgICBHUFJSZWcg
Z3ByID0gcmVzdWx0LmdwcigpOwogICAgIG9wMS51c2UoKTsKIAotICAgIEpJVENvbXBpbGVyOjpK
dW1wIGlzSW50ZWdlciA9IG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVx
dWFsLCBqc1ZhbHVlR3ByLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOwotICAgIEpJ
VENvbXBpbGVyOjpKdW1wIG5vbk51bWVyaWMgPSBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNz
ZW1ibGVyOjpaZXJvLCBqc1ZhbHVlR3ByLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIp
OworICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzSW50ZWdlciA9IG1faml0LmJyYW5jaDY0KE1hY3Jv
QXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIGpzVmFsdWVHcHIsIEdQUkluZm86OnRhZ1R5cGVOdW1i
ZXJSZWdpc3Rlcik7CisgICAgSklUQ29tcGlsZXI6Okp1bXAgbm9uTnVtZXJpYyA9IG1faml0LmJy
YW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6WmVybywganNWYWx1ZUdwciwgR1BSSW5mbzo6dGFn
VHlwZU51bWJlclJlZ2lzdGVyKTsKIAogICAgIC8vIEZpcnN0LCBpZiB3ZSBnZXQgaGVyZSB3ZSBo
YXZlIGEgZG91YmxlIGVuY29kZWQgYXMgYSBKU1ZhbHVlCiAgICAgbV9qaXQubW92ZShqc1ZhbHVl
R3ByLCBncHIpOwpAQCAtNDE2LDcgKzQxNiw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNw
ZWN1bGF0aXZlVmFsdWUKIAogICAgIC8vIEZpbmFsbHksIGhhbmRsZSBpbnRlZ2Vycy4KICAgICBp
c0ludGVnZXIubGluaygmbV9qaXQpOwotICAgIG1faml0Lm9yUHRyKEdQUkluZm86OnRhZ1R5cGVO
dW1iZXJSZWdpc3RlciwganNWYWx1ZUdwciwgZ3ByKTsKKyAgICBtX2ppdC5vcjY0KEdQUkluZm86
OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwganNWYWx1ZUdwciwgZ3ByKTsKICAgICBoYXNVbmJveGVk
RG91YmxlLmxpbmsoJm1faml0KTsKICAgICAKICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihhZG9w
dFB0cihuZXcgVmFsdWVUb051bWJlclNsb3dQYXRoR2VuZXJhdG9yKG5vbk51bWVyaWMsIHRoaXMs
IGdwciwganNWYWx1ZUdwcikpKTsKQEAgLTQ1OCw3ICs0NTgsNyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpub25TcGVjdWxhdGl2ZVZhbHVlCiAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5n
cHIoKTsKICAgICBvcDEudXNlKCk7CiAKLSAgICBKSVRDb21waWxlcjo6SnVtcCBpc05vdEludGVn
ZXIgPSBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBqc1ZhbHVlR3ByLCBH
UFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOworICAgIEpJVENvbXBpbGVyOjpKdW1wIGlz
Tm90SW50ZWdlciA9IG1faml0LmJyYW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpCZWxvdywganNWYWx1
ZUdwciwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKIAogICAgIG1faml0Lnplcm9F
eHRlbmQzMlRvUHRyKGpzVmFsdWVHcHIsIHJlc3VsdEdQUik7CiAgICAgCkBAIC00ODUsNyArNDg1
LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVVSW50MwogICAgIAogICAg
IHBvc2l0aXZlLmxpbmsoJm1faml0KTsKICAgICAKLSAgICBtX2ppdC5vclB0cihHUFJJbmZvOjp0
YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIG9wMS5ncHIoKSwgcmVzdWx0LmdwcigpKTsKKyAgICBtX2pp
dC5vcjY0KEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlciwgb3AxLmdwcigpLCByZXN1bHQu
Z3ByKCkpOwogICAgIAogICAgIGRvbmUubGluaygmbV9qaXQpOwogICAgIApAQCAtNDk5LDcgKzQ5
OSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNhY2hlZEdldEJ5SWQoQ29kZU8KICAgICAKICAg
ICBKSVRDb21waWxlcjo6Q29udmVydGlibGVMb2FkTGFiZWwgcHJvcGVydHlTdG9yYWdlTG9hZCA9
CiAgICAgICAgIG1faml0LmNvbnZlcnRpYmxlTG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhi
YXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZXN1bHRHUFIpOwotICAgIEpJ
VENvbXBpbGVyOjpEYXRhTGFiZWxDb21wYWN0IGxvYWRXaXRoUGF0Y2ggPSBtX2ppdC5sb2FkUHRy
V2l0aENvbXBhY3RBZGRyZXNzT2Zmc2V0UGF0Y2goSklUQ29tcGlsZXI6OkFkZHJlc3MocmVzdWx0
R1BSLCAwKSwgcmVzdWx0R1BSKTsKKyAgICBKSVRDb21waWxlcjo6RGF0YUxhYmVsQ29tcGFjdCBs
b2FkV2l0aFBhdGNoID0gbV9qaXQubG9hZDY0V2l0aENvbXBhY3RBZGRyZXNzT2Zmc2V0UGF0Y2go
SklUQ29tcGlsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCAwKSwgcmVzdWx0R1BSKTsKICAgICAKICAg
ICBKSVRDb21waWxlcjo6TGFiZWwgZG9uZUxhYmVsID0gbV9qaXQubGFiZWwoKTsKIApAQCAtNTM1
LDcgKzUzNSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNhY2hlZFB1dEJ5SWQoQ29kZU8KIAog
ICAgIEpJVENvbXBpbGVyOjpDb252ZXJ0aWJsZUxvYWRMYWJlbCBwcm9wZXJ0eVN0b3JhZ2VMb2Fk
ID0KICAgICAgICAgbV9qaXQuY29udmVydGlibGVMb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNz
KGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwotICAg
IEpJVENvbXBpbGVyOjpEYXRhTGFiZWwzMiBzdG9yZVdpdGhQYXRjaCA9IG1faml0LnN0b3JlUHRy
V2l0aEFkZHJlc3NPZmZzZXRQYXRjaCh2YWx1ZUdQUiwgSklUQ29tcGlsZXI6OkFkZHJlc3Moc2Ny
YXRjaEdQUiwgMCkpOworICAgIEpJVENvbXBpbGVyOjpEYXRhTGFiZWwzMiBzdG9yZVdpdGhQYXRj
aCA9IG1faml0LnN0b3JlNjRXaXRoQWRkcmVzc09mZnNldFBhdGNoKHZhbHVlR1BSLCBKSVRDb21w
aWxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCAwKSk7CiAKICAgICBKSVRDb21waWxlcjo6TGFiZWwg
ZG9uZUxhYmVsID0gbV9qaXQubGFiZWwoKTsKICAgICAKQEAgLTU4Nyw3ICs1ODcsNyBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZU5vblBlCiAgICAgSklUQ29tcGlsZXI6Okp1
bXAgbm90Q2VsbDsKICAgICAKICAgICBpZiAoIWlzS25vd25DZWxsKG9wZXJhbmQuaW5kZXgoKSkp
Ci0gICAgICAgIG5vdENlbGwgPSBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpO
b25aZXJvLCBhcmdHUFIsIEdQUkluZm86OnRhZ01hc2tSZWdpc3Rlcik7CisgICAgICAgIG5vdENl
bGwgPSBtX2ppdC5icmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIGFyZ0dQUiwg
R1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsKICAgIAogICAgIEpJVENvbXBpbGVyOjpKdW1wIG5v
dE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQ7CiAgICAgaWYgKG1faml0LmdyYXBoKCkuZ2xvYmFsT2Jq
ZWN0Rm9yKG1faml0LmdyYXBoKClbb3BlcmFuZF0uY29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNV
bmRlZmluZWRXYXRjaHBvaW50KCktPmlzU3RpbGxWYWxpZCgpKSB7CkBAIC02MTcsOCArNjE3LDgg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVOb25QZQogICAgICAgICBub3RD
ZWxsLmxpbmsoJm1faml0KTsKICAgICAgICAgCiAgICAgICAgIG1faml0Lm1vdmUoYXJnR1BSLCBy
ZXN1bHRHUFIpOwotICAgICAgICBtX2ppdC5hbmRQdHIoSklUQ29tcGlsZXI6OlRydXN0ZWRJbW0z
Mih+VGFnQml0VW5kZWZpbmVkKSwgcmVzdWx0R1BSKTsKLSAgICAgICAgbV9qaXQuY29tcGFyZVB0
cihpbnZlcnQgPyBKSVRDb21waWxlcjo6Tm90RXF1YWwgOiBKSVRDb21waWxlcjo6RXF1YWwsIHJl
c3VsdEdQUiwgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMihWYWx1ZU51bGwpLCByZXN1bHRHUFIp
OworICAgICAgICBtX2ppdC5hbmQ2NChKSVRDb21waWxlcjo6VHJ1c3RlZEltbTMyKH5UYWdCaXRV
bmRlZmluZWQpLCByZXN1bHRHUFIpOworICAgICAgICBtX2ppdC5jb21wYXJlNjQoaW52ZXJ0ID8g
SklUQ29tcGlsZXI6Ok5vdEVxdWFsIDogSklUQ29tcGlsZXI6OkVxdWFsLCByZXN1bHRHUFIsIEpJ
VENvbXBpbGVyOjpUcnVzdGVkSW1tMzIoVmFsdWVOdWxsKSwgcmVzdWx0R1BSKTsKICAgICAgICAg
CiAgICAgICAgIGRvbmUubGluaygmbV9qaXQpOwogICAgIH0KQEAgLTY1MSw3ICs2NTEsNyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVBlZXBoCiAgICAgSklUQ29tcGlsZXI6
Okp1bXAgbm90Q2VsbDsKICAgICAKICAgICBpZiAoIWlzS25vd25DZWxsKG9wZXJhbmQuaW5kZXgo
KSkpCi0gICAgICAgIG5vdENlbGwgPSBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVy
OjpOb25aZXJvLCBhcmdHUFIsIEdQUkluZm86OnRhZ01hc2tSZWdpc3Rlcik7CisgICAgICAgIG5v
dENlbGwgPSBtX2ppdC5icmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIGFyZ0dQ
UiwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsKICAgICAKICAgICBpZiAobV9qaXQuZ3JhcGgo
KS5nbG9iYWxPYmplY3RGb3IobV9qaXQuZ3JhcGgoKVtvcGVyYW5kXS5jb2RlT3JpZ2luKS0+bWFz
cXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnQoKS0+aXNTdGlsbFZhbGlkKCkpIHsKICAgICAg
ICAgbV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3IobV9qaXQuZ3JhcGgoKVtvcGVyYW5kXS5j
b2RlT3JpZ2luKS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnQoKS0+YWRkKHNwZWN1
bGF0aW9uV2F0Y2hwb2ludCgpKTsKQEAgLTY3NSw4ICs2NzUsOCBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpub25TcGVjdWxhdGl2ZVBlZXBoCiAgICAgICAgIG5vdENlbGwubGluaygmbV9qaXQpOwog
ICAgICAgICAKICAgICAgICAgbV9qaXQubW92ZShhcmdHUFIsIHJlc3VsdEdQUik7Ci0gICAgICAg
IG1faml0LmFuZFB0cihKSVRDb21waWxlcjo6VHJ1c3RlZEltbTMyKH5UYWdCaXRVbmRlZmluZWQp
LCByZXN1bHRHUFIpOwotICAgICAgICBicmFuY2hQdHIoaW52ZXJ0ID8gSklUQ29tcGlsZXI6Ok5v
dEVxdWFsIDogSklUQ29tcGlsZXI6OkVxdWFsLCByZXN1bHRHUFIsIEpJVENvbXBpbGVyOjpUcnVz
dGVkSW1tUHRyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KFZhbHVlTnVsbCkpLCB0YWtlbik7Cisg
ICAgICAgIG1faml0LmFuZDY0KEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tMzIoflRhZ0JpdFVuZGVm
aW5lZCksIHJlc3VsdEdQUik7CisgICAgICAgIGJyYW5jaDY0KGludmVydCA/IEpJVENvbXBpbGVy
OjpOb3RFcXVhbCA6IEpJVENvbXBpbGVyOjpFcXVhbCwgcmVzdWx0R1BSLCBKSVRDb21waWxlcjo6
VHJ1c3RlZEltbTY0KFZhbHVlTnVsbCksIHRha2VuKTsKICAgICB9CiAgICAgCiAgICAganVtcChu
b3RUYWtlbik7CkBAIC03NDksOSArNzQ5LDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3Bl
Y3VsYXRpdmVQZWVwaAogICAgICAgICBhcmcyLnVzZSgpOwogICAgIAogICAgICAgICBpZiAoIWlz
S25vd25JbnRlZ2VyKG5vZGUuY2hpbGQxKCkuaW5kZXgoKSkpCi0gICAgICAgICAgICBzbG93UGF0
aC5hcHBlbmQobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgYXJnMUdQUiwg
R1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSk7CisgICAgICAgICAgICBzbG93UGF0aC5h
cHBlbmQobV9qaXQuYnJhbmNoNjQoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBhcmcxR1BSLCBHUFJJ
bmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsKICAgICAgICAgaWYgKCFpc0tub3duSW50ZWdl
cihub2RlLmNoaWxkMigpLmluZGV4KCkpKQotICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKG1f
aml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIGFyZzJHUFIsIEdQUkluZm86OnRh
Z1R5cGVOdW1iZXJSZWdpc3RlcikpOworICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKG1faml0
LmJyYW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgYXJnMkdQUiwgR1BSSW5mbzo6dGFnVHlw
ZU51bWJlclJlZ2lzdGVyKSk7CiAgICAgCiAgICAgICAgIGJyYW5jaDMyKGNvbmQsIGFyZzFHUFIs
IGFyZzJHUFIsIHRha2VuKTsKICAgICAKQEAgLTgzMiw5ICs4MzIsOSBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpub25TcGVjdWxhdGl2ZU5vblBlCiAgICAgICAgIGFyZzIudXNlKCk7CiAgICAgCiAg
ICAgICAgIGlmICghaXNLbm93bkludGVnZXIobm9kZS5jaGlsZDEoKS5pbmRleCgpKSkKLSAgICAg
ICAgICAgIHNsb3dQYXRoLmFwcGVuZChtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkJl
bG93LCBhcmcxR1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsKKyAgICAgICAg
ICAgIHNsb3dQYXRoLmFwcGVuZChtX2ppdC5icmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6QmVsb3cs
IGFyZzFHUFIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlcikpOwogICAgICAgICBpZiAo
IWlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQyKCkuaW5kZXgoKSkpCi0gICAgICAgICAgICBzbG93
UGF0aC5hcHBlbmQobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgYXJnMkdQ
UiwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSk7CisgICAgICAgICAgICBzbG93UGF0
aC5hcHBlbmQobV9qaXQuYnJhbmNoNjQoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBhcmcyR1BSLCBH
UFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsKICAgICAKICAgICAgICAgbV9qaXQuY29t
cGFyZTMyKGNvbmQsIGFyZzFHUFIsIGFyZzJHUFIsIHJlc3VsdEdQUik7CiAgICAgICAgIG1faml0
Lm9yMzIoVHJ1c3RlZEltbTMyKFZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOwpAQCAtODc4LDcgKzg3
OCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlUGVlcGgKICAgICBpZiAo
aXNLbm93bkNlbGwobm9kZS5jaGlsZDEoKS5pbmRleCgpKSAmJiBpc0tub3duQ2VsbChub2RlLmNo
aWxkMigpLmluZGV4KCkpKSB7CiAgICAgICAgIC8vIHNlZSBpZiB3ZSBnZXQgbHVja3k6IGlmIHRo
ZSBhcmd1bWVudHMgYXJlIGNlbGxzIGFuZCB0aGV5IHJlZmVyZW5jZSB0aGUgc2FtZQogICAgICAg
ICAvLyBjZWxsLCB0aGVuIHRoZXkgbXVzdCBiZSBzdHJpY3RseSBlcXVhbC4KLSAgICAgICAgYnJh
bmNoUHRyKEpJVENvbXBpbGVyOjpFcXVhbCwgYXJnMUdQUiwgYXJnMkdQUiwgaW52ZXJ0ID8gbm90
VGFrZW4gOiB0YWtlbik7CisgICAgICAgIGJyYW5jaDY0KEpJVENvbXBpbGVyOjpFcXVhbCwgYXJn
MUdQUiwgYXJnMkdQUiwgaW52ZXJ0ID8gbm90VGFrZW4gOiB0YWtlbik7CiAgICAgICAgIAogICAg
ICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHUFIpOwogICAgICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcUNlbGwsIHJlc3VsdEdQUiwgYXJnMUdQUiwg
YXJnMkdQUik7CkBAIC04ODYsMjIgKzg4NiwyMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25T
cGVjdWxhdGl2ZVBlZXBoCiAgICAgICAgIAogICAgICAgICBicmFuY2hUZXN0MzIoaW52ZXJ0ID8g
SklUQ29tcGlsZXI6Olplcm8gOiBKSVRDb21waWxlcjo6Tm9uWmVybywgcmVzdWx0R1BSLCB0YWtl
bik7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgbV9qaXQub3JQdHIoYXJnMUdQUiwgYXJnMkdQUiwg
cmVzdWx0R1BSKTsKKyAgICAgICAgbV9qaXQub3I2NChhcmcxR1BSLCBhcmcyR1BSLCByZXN1bHRH
UFIpOwogICAgICAgICAKLSAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgdHdvQ2VsbHNDYXNlID0g
bV9qaXQuYnJhbmNoVGVzdFB0cihKSVRDb21waWxlcjo6WmVybywgcmVzdWx0R1BSLCBHUFJJbmZv
Ojp0YWdNYXNrUmVnaXN0ZXIpOworICAgICAgICBKSVRDb21waWxlcjo6SnVtcCB0d29DZWxsc0Nh
c2UgPSBtX2ppdC5icmFuY2hUZXN0NjQoSklUQ29tcGlsZXI6Olplcm8sIHJlc3VsdEdQUiwgR1BS
SW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsKICAgICAgICAgCi0gICAgICAgIEpJVENvbXBpbGVyOjpK
dW1wIGxlZnRPSyA9IG1faml0LmJyYW5jaFB0cihKSVRDb21waWxlcjo6QWJvdmVPckVxdWFsLCBh
cmcxR1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOwotICAgICAgICBKSVRDb21w
aWxlcjo6SnVtcCBsZWZ0RG91YmxlID0gbV9qaXQuYnJhbmNoVGVzdFB0cihKSVRDb21waWxlcjo6
Tm9uWmVybywgYXJnMUdQUiwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKKyAgICAg
ICAgSklUQ29tcGlsZXI6Okp1bXAgbGVmdE9LID0gbV9qaXQuYnJhbmNoNjQoSklUQ29tcGlsZXI6
OkFib3ZlT3JFcXVhbCwgYXJnMUdQUiwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsK
KyAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgbGVmdERvdWJsZSA9IG1faml0LmJyYW5jaFRlc3Q2
NChKSVRDb21waWxlcjo6Tm9uWmVybywgYXJnMUdQUiwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJl
Z2lzdGVyKTsKICAgICAgICAgbGVmdE9LLmxpbmsoJm1faml0KTsKLSAgICAgICAgSklUQ29tcGls
ZXI6Okp1bXAgcmlnaHRPSyA9IG1faml0LmJyYW5jaFB0cihKSVRDb21waWxlcjo6QWJvdmVPckVx
dWFsLCBhcmcyR1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOwotICAgICAgICBK
SVRDb21waWxlcjo6SnVtcCByaWdodERvdWJsZSA9IG1faml0LmJyYW5jaFRlc3RQdHIoSklUQ29t
cGlsZXI6Ok5vblplcm8sIGFyZzJHUFIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7
CisgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIHJpZ2h0T0sgPSBtX2ppdC5icmFuY2g2NChKSVRD
b21waWxlcjo6QWJvdmVPckVxdWFsLCBhcmcyR1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVn
aXN0ZXIpOworICAgICAgICBKSVRDb21waWxlcjo6SnVtcCByaWdodERvdWJsZSA9IG1faml0LmJy
YW5jaFRlc3Q2NChKSVRDb21waWxlcjo6Tm9uWmVybywgYXJnMkdQUiwgR1BSSW5mbzo6dGFnVHlw
ZU51bWJlclJlZ2lzdGVyKTsKICAgICAgICAgcmlnaHRPSy5saW5rKCZtX2ppdCk7CiAgICAgICAg
IAotICAgICAgICBicmFuY2hQdHIoaW52ZXJ0ID8gSklUQ29tcGlsZXI6Ok5vdEVxdWFsIDogSklU
Q29tcGlsZXI6OkVxdWFsLCBhcmcxR1BSLCBhcmcyR1BSLCB0YWtlbik7CisgICAgICAgIGJyYW5j
aDY0KGludmVydCA/IEpJVENvbXBpbGVyOjpOb3RFcXVhbCA6IEpJVENvbXBpbGVyOjpFcXVhbCwg
YXJnMUdQUiwgYXJnMkdQUiwgdGFrZW4pOwogICAgICAgICBqdW1wKG5vdFRha2VuLCBGb3JjZUp1
bXApOwogICAgICAgICAKICAgICAgICAgdHdvQ2VsbHNDYXNlLmxpbmsoJm1faml0KTsKLSAgICAg
ICAgYnJhbmNoUHRyKEpJVENvbXBpbGVyOjpFcXVhbCwgYXJnMUdQUiwgYXJnMkdQUiwgaW52ZXJ0
ID8gbm90VGFrZW4gOiB0YWtlbik7CisgICAgICAgIGJyYW5jaDY0KEpJVENvbXBpbGVyOjpFcXVh
bCwgYXJnMUdQUiwgYXJnMkdQUiwgaW52ZXJ0ID8gbm90VGFrZW4gOiB0YWtlbik7CiAgICAgICAg
IAogICAgICAgICBsZWZ0RG91YmxlLmxpbmsoJm1faml0KTsKICAgICAgICAgcmlnaHREb3VibGUu
bGluaygmbV9qaXQpOwpAQCAtOTMzLDkgKzkzMyw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5v
blNwZWN1bGF0aXZlTm9uUGUKICAgICAgICAgLy8gc2VlIGlmIHdlIGdldCBsdWNreTogaWYgdGhl
IGFyZ3VtZW50cyBhcmUgY2VsbHMgYW5kIHRoZXkgcmVmZXJlbmNlIHRoZSBzYW1lCiAgICAgICAg
IC8vIGNlbGwsIHRoZW4gdGhleSBtdXN0IGJlIHN0cmljdGx5IGVxdWFsLgogICAgICAgICAvLyBG
SVhNRTogdGhpcyBzaG91bGQgZmx1c2ggcmVnaXN0ZXJzIGluc3RlYWQgb2Ygc2lsZW50IHNwaWxs
L2ZpbGwuCi0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdEVxdWFsQ2FzZSA9IG1faml0LmJy
YW5jaFB0cihKSVRDb21waWxlcjo6Tm90RXF1YWwsIGFyZzFHUFIsIGFyZzJHUFIpOworICAgICAg
ICBKSVRDb21waWxlcjo6SnVtcCBub3RFcXVhbENhc2UgPSBtX2ppdC5icmFuY2g2NChKSVRDb21w
aWxlcjo6Tm90RXF1YWwsIGFyZzFHUFIsIGFyZzJHUFIpOwogICAgICAgICAKLSAgICAgICAgbV9q
aXQubW92ZShKSVRDb21waWxlcjo6VHJ1c3RlZEltbVB0cihKU1ZhbHVlOjplbmNvZGUoanNCb29s
ZWFuKCFpbnZlcnQpKSksIHJlc3VsdEdQUik7CisgICAgICAgIG1faml0Lm1vdmUoSklUQ29tcGls
ZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKCFpbnZlcnQpKSksIHJl
c3VsdEdQUik7CiAgICAgICAgIAogICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBkb25lID0gbV9q
aXQuanVtcCgpOwogCkBAIC05NDUsMzMgKzk0NSwzMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpu
b25TcGVjdWxhdGl2ZU5vblBlCiAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFy
ZVN0cmljdEVxQ2VsbCwgcmVzdWx0R1BSLCBhcmcxR1BSLCBhcmcyR1BSKTsKICAgICAgICAgc2ls
ZW50RmlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHUFIpOwogICAgICAgICAKLSAgICAgICAgbV9qaXQu
YW5kUHRyKEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tMzIoMSksIHJlc3VsdEdQUik7CisgICAgICAg
IG1faml0LmFuZDY0KEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tMzIoMSksIHJlc3VsdEdQUik7CiAg
ICAgICAgIG1faml0Lm9yMzIoSklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMihWYWx1ZUZhbHNlKSwg
cmVzdWx0R1BSKTsKICAgICAgICAgCiAgICAgICAgIGRvbmUubGluaygmbV9qaXQpOwogICAgIH0g
ZWxzZSB7Ci0gICAgICAgIG1faml0Lm9yUHRyKGFyZzFHUFIsIGFyZzJHUFIsIHJlc3VsdEdQUik7
CisgICAgICAgIG1faml0Lm9yNjQoYXJnMUdQUiwgYXJnMkdQUiwgcmVzdWx0R1BSKTsKICAgICAg
ICAgCiAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBzbG93UGF0aENhc2VzOwogICAgICAg
ICAKLSAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgdHdvQ2VsbHNDYXNlID0gbV9qaXQuYnJhbmNo
VGVzdFB0cihKSVRDb21waWxlcjo6WmVybywgcmVzdWx0R1BSLCBHUFJJbmZvOjp0YWdNYXNrUmVn
aXN0ZXIpOworICAgICAgICBKSVRDb21waWxlcjo6SnVtcCB0d29DZWxsc0Nhc2UgPSBtX2ppdC5i
cmFuY2hUZXN0NjQoSklUQ29tcGlsZXI6Olplcm8sIHJlc3VsdEdQUiwgR1BSSW5mbzo6dGFnTWFz
a1JlZ2lzdGVyKTsKICAgICAgICAgCi0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGxlZnRPSyA9
IG1faml0LmJyYW5jaFB0cihKSVRDb21waWxlcjo6QWJvdmVPckVxdWFsLCBhcmcxR1BSLCBHUFJJ
bmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOwotICAgICAgICBzbG93UGF0aENhc2VzLmFwcGVu
ZChtX2ppdC5icmFuY2hUZXN0UHRyKEpJVENvbXBpbGVyOjpOb25aZXJvLCBhcmcxR1BSLCBHUFJJ
bmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAg
bGVmdE9LID0gbV9qaXQuYnJhbmNoNjQoSklUQ29tcGlsZXI6OkFib3ZlT3JFcXVhbCwgYXJnMUdQ
UiwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKKyAgICAgICAgc2xvd1BhdGhDYXNl
cy5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdDY0KEpJVENvbXBpbGVyOjpOb25aZXJvLCBhcmcxR1BS
LCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsKICAgICAgICAgbGVmdE9LLmxpbmso
Jm1faml0KTsKLSAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgcmlnaHRPSyA9IG1faml0LmJyYW5j
aFB0cihKSVRDb21waWxlcjo6QWJvdmVPckVxdWFsLCBhcmcyR1BSLCBHUFJJbmZvOjp0YWdUeXBl
TnVtYmVyUmVnaXN0ZXIpOwotICAgICAgICBzbG93UGF0aENhc2VzLmFwcGVuZChtX2ppdC5icmFu
Y2hUZXN0UHRyKEpJVENvbXBpbGVyOjpOb25aZXJvLCBhcmcyR1BSLCBHUFJJbmZvOjp0YWdUeXBl
TnVtYmVyUmVnaXN0ZXIpKTsKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgcmlnaHRPSyA9IG1f
aml0LmJyYW5jaDY0KEpJVENvbXBpbGVyOjpBYm92ZU9yRXF1YWwsIGFyZzJHUFIsIEdQUkluZm86
OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7CisgICAgICAgIHNsb3dQYXRoQ2FzZXMuYXBwZW5kKG1f
aml0LmJyYW5jaFRlc3Q2NChKSVRDb21waWxlcjo6Tm9uWmVybywgYXJnMkdQUiwgR1BSSW5mbzo6
dGFnVHlwZU51bWJlclJlZ2lzdGVyKSk7CiAgICAgICAgIHJpZ2h0T0subGluaygmbV9qaXQpOwog
ICAgICAgICAKLSAgICAgICAgbV9qaXQuY29tcGFyZVB0cihpbnZlcnQgPyBKSVRDb21waWxlcjo6
Tm90RXF1YWwgOiBKSVRDb21waWxlcjo6RXF1YWwsIGFyZzFHUFIsIGFyZzJHUFIsIHJlc3VsdEdQ
Uik7CisgICAgICAgIG1faml0LmNvbXBhcmU2NChpbnZlcnQgPyBKSVRDb21waWxlcjo6Tm90RXF1
YWwgOiBKSVRDb21waWxlcjo6RXF1YWwsIGFyZzFHUFIsIGFyZzJHUFIsIHJlc3VsdEdQUik7CiAg
ICAgICAgIG1faml0Lm9yMzIoSklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMihWYWx1ZUZhbHNlKSwg
cmVzdWx0R1BSKTsKICAgICAgICAgCiAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGRvbmUgPSBt
X2ppdC5qdW1wKCk7CiAgICAgICAgIAogICAgICAgICB0d29DZWxsc0Nhc2UubGluaygmbV9qaXQp
OwotICAgICAgICBzbG93UGF0aENhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hQdHIoSklUQ29tcGls
ZXI6Ok5vdEVxdWFsLCBhcmcxR1BSLCBhcmcyR1BSKSk7CisgICAgICAgIHNsb3dQYXRoQ2FzZXMu
YXBwZW5kKG1faml0LmJyYW5jaDY0KEpJVENvbXBpbGVyOjpOb3RFcXVhbCwgYXJnMUdQUiwgYXJn
MkdQUikpOwogICAgICAgICAKLSAgICAgICAgbV9qaXQubW92ZShKSVRDb21waWxlcjo6VHJ1c3Rl
ZEltbVB0cihKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKCFpbnZlcnQpKSksIHJlc3VsdEdQUik7
CisgICAgICAgIG1faml0Lm1vdmUoSklUQ29tcGlsZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjpl
bmNvZGUoanNCb29sZWFuKCFpbnZlcnQpKSksIHJlc3VsdEdQUik7CiAgICAgICAgIAogICAgICAg
ICBhZGRTbG93UGF0aEdlbmVyYXRvcigKICAgICAgICAgICAgIGFkb3B0UHRyKApAQCAtMTAwNiw4
ICsxMDA2LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSYgbm9kZQogICAg
IGludCBudW1QYXNzZWRBcmdzID0gbm9kZS5udW1DaGlsZHJlbigpIC0gMTsKICAgICAKICAgICBt
X2ppdC5zdG9yZTMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIobnVtUGFzc2VkQXJncyAr
IGR1bW15VGhpc0FyZ3VtZW50KSwgY2FsbEZyYW1lUGF5bG9hZFNsb3QoSlNTdGFjazo6QXJndW1l
bnRDb3VudCkpOwotICAgIG1faml0LnN0b3JlUHRyKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVy
LCBjYWxsRnJhbWVTbG90KEpTU3RhY2s6OkNhbGxlckZyYW1lKSk7Ci0gICAgbV9qaXQuc3RvcmVQ
dHIoY2FsbGVlR1BSLCBjYWxsRnJhbWVTbG90KEpTU3RhY2s6OkNhbGxlZSkpOworICAgIG1faml0
LnN0b3JlNjQoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGNhbGxGcmFtZVNsb3QoSlNTdGFj
azo6Q2FsbGVyRnJhbWUpKTsKKyAgICBtX2ppdC5zdG9yZTY0KGNhbGxlZUdQUiwgY2FsbEZyYW1l
U2xvdChKU1N0YWNrOjpDYWxsZWUpKTsKICAgICAKICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51
bVBhc3NlZEFyZ3M7IGkrKykgewogICAgICAgICBFZGdlIGFyZ0VkZ2UgPSBtX2ppdC5ncmFwaCgp
Lm1fdmFyQXJnQ2hpbGRyZW5bbm9kZS5maXJzdENoaWxkKCkgKyAxICsgaV07CkBAIC0xMDE1LDcg
KzEwMTUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlJiBub2RlCiAgICAg
ICAgIEdQUlJlZyBhcmdHUFIgPSBhcmcuZ3ByKCk7CiAgICAgICAgIHVzZShhcmdFZGdlKTsKICAg
ICAgICAgCi0gICAgICAgIG1faml0LnN0b3JlUHRyKGFyZ0dQUiwgYXJndW1lbnRTbG90KGkgKyBk
dW1teVRoaXNBcmd1bWVudCkpOworICAgICAgICBtX2ppdC5zdG9yZTY0KGFyZ0dQUiwgYXJndW1l
bnRTbG90KGkgKyBkdW1teVRoaXNBcmd1bWVudCkpOwogICAgIH0KIAogICAgIGZsdXNoUmVnaXN0
ZXJzKCk7CkBAIC0xMDI0LDE2ICsxMDI0LDE3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRD
YWxsKE5vZGUmIG5vZGUKICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwogCiAg
ICAgSklUQ29tcGlsZXI6OkRhdGFMYWJlbFB0ciB0YXJnZXRUb0NoZWNrOwotICAgIEpJVENvbXBp
bGVyOjpKdW1wIHNsb3dQYXRoOworICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBzbG93UGF0aDsK
IAogICAgIENhbGxCZWdpblRva2VuIHRva2VuOwogICAgIG1faml0LmJlZ2luQ2FsbChub2RlLmNv
ZGVPcmlnaW4sIHRva2VuKTsKICAgICAKICAgICBtX2ppdC5hZGRQdHIoVHJ1c3RlZEltbTMyKG1f
aml0LmNvZGVCbG9jaygpLT5tX251bUNhbGxlZVJlZ2lzdGVycyAqIHNpemVvZihSZWdpc3Rlcikp
LCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CiAgICAgCi0gICAgc2xvd1BhdGggPSBtX2pp
dC5icmFuY2hQdHJXaXRoUGF0Y2goTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBjYWxsZWVHUFIs
IHRhcmdldFRvQ2hlY2ssIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKEpTVmFsdWU6OmVu
Y29kZShKU1ZhbHVlKCkpKSk7CisgICAgc2xvd1BhdGguYXBwZW5kKG1faml0LmJyYW5jaFB0cldp
dGhQYXRjaChNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIGNhbGxlZUdQUiwgdGFyZ2V0VG9DaGVj
aywgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoMCkpKTsKKwogICAgIG1faml0LmxvYWRQ
dHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoY2FsbGVlR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoSlNG
dW5jdGlvbiwgbV9zY29wZSkpLCByZXN1bHRHUFIpOwotICAgIG1faml0LnN0b3JlUHRyKHJlc3Vs
dEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIs
IHN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKiBKU1N0YWNrOjpTY29w
ZUNoYWluKSk7CisgICAgbV9qaXQuc3RvcmU2NChyZXN1bHRHUFIsIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+
KHNpemVvZihSZWdpc3RlcikpICogSlNTdGFjazo6U2NvcGVDaGFpbikpOwogCiAgICAgQ29kZU9y
aWdpbiBjb2RlT3JpZ2luID0gYXQobV9jb21waWxlSW5kZXgpLmNvZGVPcmlnaW47CiAgICAgSklU
Q29tcGlsZXI6OkNhbGwgZmFzdENhbGwgPSBtX2ppdC5uZWFyQ2FsbCgpOwpAQCAtMTEwMywxNCAr
MTEwNCwxNCBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVJbnRJCiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICBpZiAoc3BpbGxGb3JtYXQgPT0gRGF0YUZvcm1hdEludGVn
ZXIpIHsKICAgICAgICAgICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OmFkZHJlc3NG
b3IodmlydHVhbFJlZ2lzdGVyKSwgZ3ByKTsKLSAgICAgICAgICAgICAgICBtX2ppdC5vclB0cihH
UFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIGdwcik7CisgICAgICAgICAgICAgICAgbV9q
aXQub3I2NChHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIGdwcik7CiAgICAgICAgICAg
ICB9IGVsc2UKLSAgICAgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjphZGRy
ZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIGdwcik7CisgICAgICAgICAgICAgICAgbV9qaXQubG9h
ZDY0KEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIGdwcik7CiAgICAg
ICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKCptX3N0cmVhbSwgZ3ByLCBEYXRhRm9ybWF0SlNJbnRl
Z2VyKTsKICAgICAgICAgICAgIHJldHVybkZvcm1hdCA9IERhdGFGb3JtYXRKU0ludGVnZXI7CiAg
ICAgICAgICAgICByZXR1cm4gZ3ByOwogICAgICAgICB9Ci0gICAgICAgIG1faml0LmxvYWRQdHIo
SklUQ29tcGlsZXI6OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSwgZ3ByKTsKKyAgICAgICAg
bV9qaXQubG9hZDY0KEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIGdw
cik7CiAKICAgICAgICAgLy8gRmlsbCBhcyBKU1ZhbHVlLCBhbmQgZmFsbCB0aHJvdWdoLgogICAg
ICAgICBpbmZvLmZpbGxKU1ZhbHVlKCptX3N0cmVhbSwgZ3ByLCBEYXRhRm9ybWF0SlNJbnRlZ2Vy
KTsKQEAgLTExMjIsNyArMTEyMyw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1
bGF0ZUludEkKICAgICAgICAgR1BSUmVnIGdwciA9IGluZm8uZ3ByKCk7CiAgICAgICAgIG1fZ3By
cy5sb2NrKGdwcik7CiAgICAgICAgIGlmICghaXNJbnQzMlNwZWN1bGF0aW9uKHR5cGUpKQotICAg
ICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhncHIpLCBub2Rl
SW5kZXgsIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIGdwciwgR1BSSW5m
bzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNr
KEJhZFR5cGUsIEpTVmFsdWVSZWdzKGdwciksIG5vZGVJbmRleCwgbV9qaXQuYnJhbmNoNjQoTWFj
cm9Bc3NlbWJsZXI6OkJlbG93LCBncHIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcikp
OwogICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKCptX3N0cmVhbSwgZ3ByLCBEYXRhRm9ybWF0SlNJ
bnRlZ2VyKTsKICAgICAgICAgLy8gSWYgIXN0cmljdCB3ZSdyZSBkb25lLCByZXR1cm4uCiAgICAg
ICAgIGlmICghc3RyaWN0KSB7CkBAIC0xMjIyLDggKzEyMjMsOCBAQCBGUFJSZWcgU3BlY3VsYXRp
dmVKSVQ6OmZpbGxTcGVjdWxhdGVEb3ViCiAKICAgICAgICAgICAgIGlmIChpc0ludDMyQ29uc3Rh
bnQobm9kZUluZGV4KSkgewogICAgICAgICAgICAgICAgIEZQUlJlZyBmcHIgPSBmcHJBbGxvY2F0
ZSgpOwotICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OkltbVB0cihy
ZWludGVycHJldF9jYXN0PHZvaWQqPihyZWludGVycHJldERvdWJsZVRvSW50cHRyKHN0YXRpY19j
YXN0PGRvdWJsZT4odmFsdWVPZkludDMyQ29uc3RhbnQobm9kZUluZGV4KSkpKSksIGdwcik7Ci0g
ICAgICAgICAgICAgICAgbV9qaXQubW92ZVB0clRvRG91YmxlKGdwciwgZnByKTsKKyAgICAgICAg
ICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpJbW02NChyZWludGVycHJldERvdWJs
ZVRvSW50NjQoc3RhdGljX2Nhc3Q8ZG91YmxlPih2YWx1ZU9mSW50MzJDb25zdGFudChub2RlSW5k
ZXgpKSkpLCBncHIpOworICAgICAgICAgICAgICAgIG1faml0Lm1vdmU2NFRvRG91YmxlKGdwciwg
ZnByKTsKICAgICAgICAgICAgICAgICB1bmxvY2soZ3ByKTsKIAogICAgICAgICAgICAgICAgIG1f
ZnBycy5yZXRhaW4oZnByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJEb3VibGUpOwpAQCAt
MTIzMiw4ICsxMjMzLDggQEAgRlBSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlRG91
YgogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKGlzTnVtYmVyQ29uc3RhbnQobm9kZUlu
ZGV4KSkgewogICAgICAgICAgICAgICAgIEZQUlJlZyBmcHIgPSBmcHJBbGxvY2F0ZSgpOwotICAg
ICAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OkltbVB0cihyZWludGVycHJl
dF9jYXN0PHZvaWQqPihyZWludGVycHJldERvdWJsZVRvSW50cHRyKHZhbHVlT2ZOdW1iZXJDb25z
dGFudChub2RlSW5kZXgpKSkpLCBncHIpOwotICAgICAgICAgICAgICAgIG1faml0Lm1vdmVQdHJU
b0RvdWJsZShncHIsIGZwcik7CisgICAgICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2Vt
Ymxlcjo6SW1tNjQocmVpbnRlcnByZXREb3VibGVUb0ludDY0KHZhbHVlT2ZOdW1iZXJDb25zdGFu
dChub2RlSW5kZXgpKSksIGdwcik7CisgICAgICAgICAgICAgICAgbV9qaXQubW92ZTY0VG9Eb3Vi
bGUoZ3ByLCBmcHIpOwogICAgICAgICAgICAgICAgIHVubG9jayhncHIpOwogCiAgICAgICAgICAg
ICAgICAgbV9mcHJzLnJldGFpbihmcHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckRvdWJs
ZSk7CkBAIC0xMjY5LDcgKzEyNzAsNyBAQCBGUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVj
dWxhdGVEb3ViCiAKICAgICAgICAgICAgIEFTU0VSVChzcGlsbEZvcm1hdCAmIERhdGFGb3JtYXRK
Uyk7CiAgICAgICAgICAgICBtX2dwcnMucmV0YWluKGdwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGls
bE9yZGVyU3BpbGxlZCk7Ci0gICAgICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjph
ZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIGdwcik7CisgICAgICAgICAgICBtX2ppdC5sb2Fk
NjQoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSwgZ3ByKTsKICAgICAg
ICAgICAgIGluZm8uZmlsbEpTVmFsdWUoKm1fc3RyZWFtLCBncHIsIHNwaWxsRm9ybWF0KTsKICAg
ICAgICAgICAgIHVubG9jayhncHIpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0xMjk0LDEwICsx
Mjk1LDEwIEBAIEZQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZURvdWIKICAgICAg
ICAgRlBSUmVnIGZwciA9IGZwckFsbG9jYXRlKCk7CiAgICAgICAgIEdQUlJlZyB0ZW1wR3ByID0g
YWxsb2NhdGUoKTsKIAotICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBpc0ludGVnZXIgPSBtX2pp
dC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwganNWYWx1ZUdwciwgR1BS
SW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAg
aXNJbnRlZ2VyID0gbV9qaXQuYnJhbmNoNjQoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwg
anNWYWx1ZUdwciwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKIAogICAgICAgICBp
ZiAoIWlzTnVtYmVyU3BlY3VsYXRpb24odHlwZSkpCi0gICAgICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKGpzVmFsdWVHcHIpLCBub2RlSW5kZXgsIG1faml0LmJy
YW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIGpzVmFsdWVHcHIsIEdQUkluZm86OnRh
Z1R5cGVOdW1iZXJSZWdpc3RlcikpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRU
eXBlLCBKU1ZhbHVlUmVncyhqc1ZhbHVlR3ByKSwgbm9kZUluZGV4LCBtX2ppdC5icmFuY2hUZXN0
NjQoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIGpzVmFsdWVHcHIsIEdQUkluZm86OnRhZ1R5cGVOdW1i
ZXJSZWdpc3RlcikpOwogCiAgICAgICAgIC8vIEZpcnN0LCBpZiB3ZSBnZXQgaGVyZSB3ZSBoYXZl
IGEgZG91YmxlIGVuY29kZWQgYXMgYSBKU1ZhbHVlCiAgICAgICAgIG1faml0Lm1vdmUoanNWYWx1
ZUdwciwgdGVtcEdwcik7CkBAIC0xMzgzLDcgKzEzODQsNyBAQCBHUFJSZWcgU3BlY3VsYXRpdmVK
SVQ6OmZpbGxTcGVjdWxhdGVDZWxsCiAgICAgICAgICAgICBKU1ZhbHVlIGpzVmFsdWUgPSB2YWx1
ZU9mSlNDb25zdGFudChub2RlSW5kZXgpOwogICAgICAgICAgICAgaWYgKGpzVmFsdWUuaXNDZWxs
KCkpIHsKICAgICAgICAgICAgICAgICBtX2dwcnMucmV0YWluKGdwciwgdmlydHVhbFJlZ2lzdGVy
LCBTcGlsbE9yZGVyQ29uc3RhbnQpOwotICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoanNWYWx1ZS5hc0NlbGwoKSksIGdwcik7CisgICAgICAg
ICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KGpzVmFsdWUu
YXNDZWxsKCkpLCBncHIpOwogICAgICAgICAgICAgICAgIGluZm8uZmlsbEpTVmFsdWUoKm1fc3Ry
ZWFtLCBncHIsIERhdGFGb3JtYXRKU0NlbGwpOwogICAgICAgICAgICAgICAgIHJldHVybiBncHI7
CiAgICAgICAgICAgICB9CkBAIC0xMzkyLDExICsxMzkzLDExIEBAIEdQUlJlZyBTcGVjdWxhdGl2
ZUpJVDo6ZmlsbFNwZWN1bGF0ZUNlbGwKICAgICAgICAgfQogICAgICAgICBBU1NFUlQoaW5mby5z
cGlsbEZvcm1hdCgpICYgRGF0YUZvcm1hdEpTKTsKICAgICAgICAgbV9ncHJzLnJldGFpbihncHIs
IHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlclNwaWxsZWQpOwotICAgICAgICBtX2ppdC5sb2Fk
UHRyKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIGdwcik7CisgICAg
ICAgIG1faml0LmxvYWQ2NChKSVRDb21waWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIp
LCBncHIpOwogCiAgICAgICAgIGluZm8uZmlsbEpTVmFsdWUoKm1fc3RyZWFtLCBncHIsIERhdGFG
b3JtYXRKUyk7CiAgICAgICAgIGlmICghaXNDZWxsU3BlY3VsYXRpb24odHlwZSkpCi0gICAgICAg
ICAgICBzcGVjdWxhdGlvbkNoZWNrV2l0aENvbmRpdGlvbmFsRGlyZWN0aW9uKEJhZFR5cGUsIEpT
VmFsdWVSZWdzKGdwciksIG5vZGVJbmRleCwgbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2Vt
Ymxlcjo6Tm9uWmVybywgZ3ByLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpLCBpc0ZvcndhcmRT
cGVjdWxhdGlvbik7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrV2l0aENvbmRpdGlvbmFs
RGlyZWN0aW9uKEJhZFR5cGUsIEpTVmFsdWVSZWdzKGdwciksIG5vZGVJbmRleCwgbV9qaXQuYnJh
bmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBncHIsIEdQUkluZm86OnRhZ01hc2tS
ZWdpc3RlciksIGlzRm9yd2FyZFNwZWN1bGF0aW9uKTsKICAgICAgICAgaW5mby5maWxsSlNWYWx1
ZSgqbV9zdHJlYW0sIGdwciwgRGF0YUZvcm1hdEpTQ2VsbCk7CiAgICAgICAgIHJldHVybiBncHI7
CiAgICAgfQpAQCAtMTQxMiw3ICsxNDEzLDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxs
U3BlY3VsYXRlQ2VsbAogICAgICAgICBHUFJSZWcgZ3ByID0gaW5mby5ncHIoKTsKICAgICAgICAg
bV9ncHJzLmxvY2soZ3ByKTsKICAgICAgICAgaWYgKCFpc0NlbGxTcGVjdWxhdGlvbih0eXBlKSkK
LSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2tXaXRoQ29uZGl0aW9uYWxEaXJlY3Rpb24oQmFk
VHlwZSwgSlNWYWx1ZVJlZ3MoZ3ByKSwgbm9kZUluZGV4LCBtX2ppdC5icmFuY2hUZXN0UHRyKE1h
Y3JvQXNzZW1ibGVyOjpOb25aZXJvLCBncHIsIEdQUkluZm86OnRhZ01hc2tSZWdpc3RlciksIGlz
Rm9yd2FyZFNwZWN1bGF0aW9uKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2tXaXRoQ29u
ZGl0aW9uYWxEaXJlY3Rpb24oQmFkVHlwZSwgSlNWYWx1ZVJlZ3MoZ3ByKSwgbm9kZUluZGV4LCBt
X2ppdC5icmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIGdwciwgR1BSSW5mbzo6
dGFnTWFza1JlZ2lzdGVyKSwgaXNGb3J3YXJkU3BlY3VsYXRpb24pOwogICAgICAgICBpbmZvLmZp
bGxKU1ZhbHVlKCptX3N0cmVhbSwgZ3ByLCBEYXRhRm9ybWF0SlNDZWxsKTsKICAgICAgICAgcmV0
dXJuIGdwcjsKICAgICB9CkBAIC0xNDU5LDcgKzE0NjAsNyBAQCBHUFJSZWcgU3BlY3VsYXRpdmVK
SVQ6OmZpbGxTcGVjdWxhdGVCb29sCiAgICAgICAgICAgICBKU1ZhbHVlIGpzVmFsdWUgPSB2YWx1
ZU9mSlNDb25zdGFudChub2RlSW5kZXgpOwogICAgICAgICAgICAgaWYgKGpzVmFsdWUuaXNCb29s
ZWFuKCkpIHsKICAgICAgICAgICAgICAgICBtX2dwcnMucmV0YWluKGdwciwgdmlydHVhbFJlZ2lz
dGVyLCBTcGlsbE9yZGVyQ29uc3RhbnQpOwotICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKGpzVmFsdWUpKSwgZ3By
KTsKKyAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
NjQoSlNWYWx1ZTo6ZW5jb2RlKGpzVmFsdWUpKSwgZ3ByKTsKICAgICAgICAgICAgICAgICBpbmZv
LmZpbGxKU1ZhbHVlKCptX3N0cmVhbSwgZ3ByLCBEYXRhRm9ybWF0SlNCb29sZWFuKTsKICAgICAg
ICAgICAgICAgICByZXR1cm4gZ3ByOwogICAgICAgICAgICAgfQpAQCAtMTQ2OCwxMyArMTQ2OSwx
MyBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVCb29sCiAgICAgICAgIH0K
ICAgICAgICAgQVNTRVJUKGluZm8uc3BpbGxGb3JtYXQoKSAmIERhdGFGb3JtYXRKUyk7CiAgICAg
ICAgIG1fZ3Bycy5yZXRhaW4oZ3ByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJTcGlsbGVk
KTsKLSAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFs
UmVnaXN0ZXIpLCBncHIpOworICAgICAgICBtX2ppdC5sb2FkNjQoSklUQ29tcGlsZXI6OmFkZHJl
c3NGb3IodmlydHVhbFJlZ2lzdGVyKSwgZ3ByKTsKIAogICAgICAgICBpbmZvLmZpbGxKU1ZhbHVl
KCptX3N0cmVhbSwgZ3ByLCBEYXRhRm9ybWF0SlMpOwogICAgICAgICBpZiAoIWlzQm9vbGVhblNw
ZWN1bGF0aW9uKHR5cGUpKSB7Ci0gICAgICAgICAgICBtX2ppdC54b3JQdHIoVHJ1c3RlZEltbTMy
KHN0YXRpY19jYXN0PGludDMyX3Q+KFZhbHVlRmFsc2UpKSwgZ3ByKTsKLSAgICAgICAgICAgIHNw
ZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3MoZ3ByKSwgbm9kZUluZGV4LCBtX2pp
dC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBncHIsIFRydXN0ZWRJbW0z
MihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpKSwgU3BlY3VsYXRpb25SZWNvdmVyeShCb29sZWFu
U3BlY3VsYXRpb25DaGVjaywgZ3ByLCBJbnZhbGlkR1BSUmVnKSk7Ci0gICAgICAgICAgICBtX2pp
dC54b3JQdHIoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KFZhbHVlRmFsc2UpKSwg
Z3ByKTsKKyAgICAgICAgICAgIG1faml0LnhvcjY0KFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxp
bnQzMl90PihWYWx1ZUZhbHNlKSksIGdwcik7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNr
KEJhZFR5cGUsIEpTVmFsdWVSZWdzKGdwciksIG5vZGVJbmRleCwgbV9qaXQuYnJhbmNoVGVzdDY0
KE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBncHIsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxp
bnQzMl90Pih+MSkpKSwgU3BlY3VsYXRpb25SZWNvdmVyeShCb29sZWFuU3BlY3VsYXRpb25DaGVj
aywgZ3ByLCBJbnZhbGlkR1BSUmVnKSk7CisgICAgICAgICAgICBtX2ppdC54b3I2NChUcnVzdGVk
SW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oVmFsdWVGYWxzZSkpLCBncHIpOwogICAgICAgICB9
CiAgICAgICAgIGluZm8uZmlsbEpTVmFsdWUoKm1fc3RyZWFtLCBncHIsIERhdGFGb3JtYXRKU0Jv
b2xlYW4pOwogICAgICAgICByZXR1cm4gZ3ByOwpAQCAtMTQ5MSw5ICsxNDkyLDkgQEAgR1BSUmVn
IFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQm9vbAogICAgICAgICBHUFJSZWcgZ3ByID0g
aW5mby5ncHIoKTsKICAgICAgICAgbV9ncHJzLmxvY2soZ3ByKTsKICAgICAgICAgaWYgKCFpc0Jv
b2xlYW5TcGVjdWxhdGlvbih0eXBlKSkgewotICAgICAgICAgICAgbV9qaXQueG9yUHRyKFRydXN0
ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90PihWYWx1ZUZhbHNlKSksIGdwcik7Ci0gICAgICAg
ICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKGdwciksIG5vZGVJbmRl
eCwgbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgZ3ByLCBUcnVz
dGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSksIFNwZWN1bGF0aW9uUmVjb3Zlcnko
Qm9vbGVhblNwZWN1bGF0aW9uQ2hlY2ssIGdwciwgSW52YWxpZEdQUlJlZykpOwotICAgICAgICAg
ICAgbV9qaXQueG9yUHRyKFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90PihWYWx1ZUZh
bHNlKSksIGdwcik7CisgICAgICAgICAgICBtX2ppdC54b3I2NChUcnVzdGVkSW1tMzIoc3RhdGlj
X2Nhc3Q8aW50MzJfdD4oVmFsdWVGYWxzZSkpLCBncHIpOworICAgICAgICAgICAgc3BlY3VsYXRp
b25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhncHIpLCBub2RlSW5kZXgsIG1faml0LmJyYW5j
aFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgZ3ByLCBUcnVzdGVkSW1tMzIoc3RhdGlj
X2Nhc3Q8aW50MzJfdD4ofjEpKSksIFNwZWN1bGF0aW9uUmVjb3ZlcnkoQm9vbGVhblNwZWN1bGF0
aW9uQ2hlY2ssIGdwciwgSW52YWxpZEdQUlJlZykpOworICAgICAgICAgICAgbV9qaXQueG9yNjQo
VHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KFZhbHVlRmFsc2UpKSwgZ3ByKTsKICAg
ICAgICAgfQogICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKCptX3N0cmVhbSwgZ3ByLCBEYXRhRm9y
bWF0SlNCb29sZWFuKTsKICAgICAgICAgcmV0dXJuIGdwcjsKQEAgLTE1MjAsOSArMTUyMSw5IEBA
IEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUJvb2wKIAogSklUQ29tcGlsZXI6
Okp1bXAgU3BlY3VsYXRpdmVKSVQ6OmNvbnZlcnRUb0RvdWJsZShHUFJSZWcgdmFsdWUsIEZQUlJl
ZyByZXN1bHQsIEdQUlJlZyB0bXApCiB7Ci0gICAgSklUQ29tcGlsZXI6Okp1bXAgaXNJbnRlZ2Vy
ID0gbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHZhbHVlLCBH
UFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOworICAgIEpJVENvbXBpbGVyOjpKdW1wIGlz
SW50ZWdlciA9IG1faml0LmJyYW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHZh
bHVlLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOwogICAgIAotICAgIEpJVENvbXBp
bGVyOjpKdW1wIG5vdE51bWJlciA9IG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6
Olplcm8sIHZhbHVlLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOworICAgIEpJVENv
bXBpbGVyOjpKdW1wIG5vdE51bWJlciA9IG1faml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxl
cjo6WmVybywgdmFsdWUsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7CiAgICAgCiAg
ICAgbV9qaXQubW92ZSh2YWx1ZSwgdG1wKTsKICAgICB1bmJveERvdWJsZSh0bXAsIHJlc3VsdCk7
CkBAIC0xNTg5LDcgKzE1OTAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0
RXF1YWxpCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkKSkpOwogICAgIH0KICAgICAKLSAgICBNYWNyb0Fzc2VtYmxlcjo6
SnVtcCBmYWxzZUNhc2UgPSBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFs
LCBvcDFHUFIsIG9wMkdQUik7CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZmFsc2VDYXNlID0g
bV9qaXQuYnJhbmNoNjQoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBvcDFHUFIsIG9wMkdQUik7
CiAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoVmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKICAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOwogICAgIGZhbHNlQ2Fz
ZS5saW5rKCZtX2ppdCk7CkBAIC0xNjM3LDcgKzE2MzgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlT2JqZWN0VG9PYmplCiAgICAgLy8gSXQgc2VlbXMgdGhhdCBtb3N0IG9mIHRoZSB0
aW1lIHdoZW4gcHJvZ3JhbXMgZG8gYSA9PSBiIHdoZXJlIGIgbWF5IGJlIGVpdGhlciBudWxsL3Vu
ZGVmaW5lZAogICAgIC8vIG9yIGFuIG9iamVjdCwgYiBpcyB1c3VhbGx5IGFuIG9iamVjdC4gQmFs
YW5jZSB0aGUgYnJhbmNoZXMgdG8gbWFrZSB0aGF0IGNhc2UgZmFzdC4KICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcCByaWdodE5vdENlbGwgPQotICAgICAgICBtX2ppdC5icmFuY2hUZXN0UHRyKE1h
Y3JvQXNzZW1ibGVyOjpOb25aZXJvLCBvcDJHUFIsIEdQUkluZm86OnRhZ01hc2tSZWdpc3Rlcik7
CisgICAgICAgIG1faml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgb3Ay
R1BSLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpOwogICAgIAogICAgIC8vIFdlIGtub3cgdGhh
dCB3aXRoaW4gdGhpcyBicmFuY2gsIHJpZ2h0Q2hpbGQgbXVzdCBiZSBhIGNlbGwuIAogICAgIGlm
IChtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihsZWZ0Tm9kZS5jb2RlT3JpZ2luKS0+bWFz
cXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnQoKS0+aXNTdGlsbFZhbGlkKCkpIHsgCkBAIC0x
NjY3LDcgKzE2NjgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0VG9PYmpl
CiAgICAgLy8gQXQgdGhpcyBwb2ludCB3ZSBrbm93IHRoYXQgd2UgY2FuIHBlcmZvcm0gYSBzdHJh
aWdodC1mb3J3YXJkIGVxdWFsaXR5IGNvbXBhcmlzb24gb24gcG9pbnRlcgogICAgIC8vIHZhbHVl
cyBiZWNhdXNlIGJvdGggbGVmdCBhbmQgcmlnaHQgYXJlIHBvaW50ZXJzIHRvIG9iamVjdHMgdGhh
dCBoYXZlIG5vIHNwZWNpYWwgZXF1YWxpdHkKICAgICAvLyBwcm90b2NvbHMuCi0gICAgTWFjcm9B
c3NlbWJsZXI6Okp1bXAgZmFsc2VDYXNlID0gbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVy
OjpOb3RFcXVhbCwgb3AxR1BSLCBvcDJHUFIpOworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGZh
bHNlQ2FzZSA9IG1faml0LmJyYW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgb3AxR1BS
LCBvcDJHUFIpOwogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHRydWVDYXNlID0gbV9qaXQuanVt
cCgpOwogICAgIAogICAgIHJpZ2h0Tm90Q2VsbC5saW5rKCZtX2ppdCk7CkBAIC0xNjc2LDEzICsx
Njc3LDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RUb09iamUKICAgICAv
LyBwcm92ZSB0aGF0IGl0IGlzIGVpdGhlciBudWxsIG9yIHVuZGVmaW5lZC4KICAgICBpZiAoIWlz
T3RoZXJPckVtcHR5U3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKHJpZ2h0Q2hpbGQpLm1fdHlw
ZSAmIH5TcGVjQ2VsbCkpIHsKICAgICAgICAgbV9qaXQubW92ZShvcDJHUFIsIHJlc3VsdEdQUik7
Ci0gICAgICAgIG1faml0LmFuZFB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKH5UYWdC
aXRVbmRlZmluZWQpLCByZXN1bHRHUFIpOworICAgICAgICBtX2ppdC5hbmQ2NChNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbTMyKH5UYWdCaXRVbmRlZmluZWQpLCByZXN1bHRHUFIpOwogICAgICAg
ICAKICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKICAgICAgICAgICAgIEJhZFR5cGUsIEpTVmFs
dWVSZWdzKG9wMkdQUiksIHJpZ2h0Q2hpbGQuaW5kZXgoKSwKLSAgICAgICAgICAgIG1faml0LmJy
YW5jaFB0cigKKyAgICAgICAgICAgIG1faml0LmJyYW5jaDY0KAogICAgICAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgcmVzdWx0R1BSLAotICAgICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KFZhbHVlTnVs
bCkpKSk7CisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChWYWx1
ZU51bGwpKSk7CiAgICAgfQogICAgIAogICAgIGZhbHNlQ2FzZS5saW5rKCZtX2ppdCk7CkBAIC0x
NzM2LDcgKzE3MzcsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVPYmpl
CiAgICAgLy8gSXQgc2VlbXMgdGhhdCBtb3N0IG9mIHRoZSB0aW1lIHdoZW4gcHJvZ3JhbXMgZG8g
YSA9PSBiIHdoZXJlIGIgbWF5IGJlIGVpdGhlciBudWxsL3VuZGVmaW5lZAogICAgIC8vIG9yIGFu
IG9iamVjdCwgYiBpcyB1c3VhbGx5IGFuIG9iamVjdC4gQmFsYW5jZSB0aGUgYnJhbmNoZXMgdG8g
bWFrZSB0aGF0IGNhc2UgZmFzdC4KICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCByaWdodE5vdENl
bGwgPQotICAgICAgICBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJv
LCBvcDJHUFIsIEdQUkluZm86OnRhZ01hc2tSZWdpc3Rlcik7CisgICAgICAgIG1faml0LmJyYW5j
aFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgb3AyR1BSLCBHUFJJbmZvOjp0YWdNYXNr
UmVnaXN0ZXIpOwogICAgIAogICAgIC8vIFdlIGtub3cgdGhhdCB3aXRoaW4gdGhpcyBicmFuY2gs
IHJpZ2h0Q2hpbGQgbXVzdCBiZSBhIGNlbGwuIAogICAgIGlmIChtX2ppdC5ncmFwaCgpLmdsb2Jh
bE9iamVjdEZvcihicmFuY2hOb2RlLmNvZGVPcmlnaW4pLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVk
V2F0Y2hwb2ludCgpLT5pc1N0aWxsVmFsaWQoKSkgewpAQCAtMTc2Niw3ICsxNzY3LDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlT2JqZQogICAgIC8vIEF0IHRoaXMgcG9p
bnQgd2Uga25vdyB0aGF0IHdlIGNhbiBwZXJmb3JtIGEgc3RyYWlnaHQtZm9yd2FyZCBlcXVhbGl0
eSBjb21wYXJpc29uIG9uIHBvaW50ZXIKICAgICAvLyB2YWx1ZXMgYmVjYXVzZSBib3RoIGxlZnQg
YW5kIHJpZ2h0IGFyZSBwb2ludGVycyB0byBvYmplY3RzIHRoYXQgaGF2ZSBubyBzcGVjaWFsIGVx
dWFsaXR5CiAgICAgLy8gcHJvdG9jb2xzLgotICAgIGJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6
RXF1YWwsIG9wMUdQUiwgb3AyR1BSLCB0YWtlbik7CisgICAgYnJhbmNoNjQoTWFjcm9Bc3NlbWJs
ZXI6OkVxdWFsLCBvcDFHUFIsIG9wMkdQUiwgdGFrZW4pOwogICAgIAogICAgIC8vIFdlIGtub3cg
dGhhdCB3aXRoaW4gdGhpcyBicmFuY2gsIHJpZ2h0Q2hpbGQgbXVzdCBub3QgYmUgYSBjZWxsLiBD
aGVjayBpZiB0aGF0IGlzIGVub3VnaCB0bwogICAgIC8vIHByb3ZlIHRoYXQgaXQgaXMgZWl0aGVy
IG51bGwgb3IgdW5kZWZpbmVkLgpAQCAtMTc3NywxMyArMTc3OCwxMyBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlUGVlcEhvbGVPYmplCiAgICAgICAgIAogICAgICAgICByaWdodE5vdENl
bGwubGluaygmbV9qaXQpOwogICAgICAgICBtX2ppdC5tb3ZlKG9wMkdQUiwgcmVzdWx0R1BSKTsK
LSAgICAgICAgbV9qaXQuYW5kUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoflRhZ0Jp
dFVuZGVmaW5lZCksIHJlc3VsdEdQUik7CisgICAgICAgIG1faml0LmFuZDY0KE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tMzIoflRhZ0JpdFVuZGVmaW5lZCksIHJlc3VsdEdQUik7CiAgICAgICAg
IAogICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAogICAgICAgICAgICAgQmFkVHlwZSwgSlNWYWx1
ZVJlZ3Mob3AyR1BSKSwgcmlnaHRDaGlsZC5pbmRleCgpLAotICAgICAgICAgICAgbV9qaXQuYnJh
bmNoUHRyKAorICAgICAgICAgICAgbV9qaXQuYnJhbmNoNjQoCiAgICAgICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCByZXN1bHRHUFIsCi0gICAgICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oVmFsdWVOdWxs
KSkpKTsKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KFZhbHVl
TnVsbCkpKTsKICAgICB9CiAgICAgCiAgICAganVtcChub3RUYWtlbik7CkBAIC0xODEwLDcgKzE4
MTEsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlRG91YmxlQ29tcGFyCiAgICAgCiAg
ICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoVmFsdWVUcnVlKSwgcmVzdWx0LmdwcigpKTsKICAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCB0cnVlQ2FzZSA9IG1faml0LmJyYW5jaERvdWJsZShjb25k
aXRpb24sIG9wMS5mcHIoKSwgb3AyLmZwcigpKTsKLSAgICBtX2ppdC54b3JQdHIoVHJ1c3RlZElt
bTMyKHRydWUpLCByZXN1bHQuZ3ByKCkpOworICAgIG1faml0LnhvcjY0KFRydXN0ZWRJbW0zMih0
cnVlKSwgcmVzdWx0LmdwcigpKTsKICAgICB0cnVlQ2FzZS5saW5rKCZtX2ppdCk7CiAgICAgCiAg
ICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4LCBEYXRhRm9ybWF0
SlNCb29sZWFuKTsKQEAgLTE4NDIsNyArMTg0Myw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVOb25TdHJpbmdDZWwKICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKICAg
ICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwogICAgIAotICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wIG5vdENlbGwgPSBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpO
b25aZXJvLCB2YWx1ZUdQUiwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsKKyAgICBNYWNyb0Fz
c2VtYmxlcjo6SnVtcCBub3RDZWxsID0gbV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVy
OjpOb25aZXJvLCB2YWx1ZUdQUiwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsKICAgICBpZiAo
bV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3IobV9qaXQuZ3JhcGgoKVtub2RlVXNlLmluZGV4
KCldLmNvZGVPcmlnaW4pLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludCgpLT5pc1N0
aWxsVmFsaWQoKSkgewogICAgICAgICBtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihtX2pp
dC5ncmFwaCgpW25vZGVVc2UuaW5kZXgoKV0uY29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRl
ZmluZWRXYXRjaHBvaW50KCktPmFkZChzcGVjdWxhdGlvbldhdGNocG9pbnQoKSk7CiAKQEAgLTE4
ODgsMTIgKzE4ODksMTIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU5vblN0cmluZ0Nl
bAogCiAgICAgaWYgKG5lZWRTcGVjdWxhdGlvbkNoZWNrKSB7CiAgICAgICAgIG1faml0Lm1vdmUo
dmFsdWVHUFIsIHJlc3VsdEdQUik7Ci0gICAgICAgIG1faml0LmFuZFB0cihNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbTMyKH5UYWdCaXRVbmRlZmluZWQpLCByZXN1bHRHUFIpOworICAgICAgICBt
X2ppdC5hbmQ2NChNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKH5UYWdCaXRVbmRlZmluZWQp
LCByZXN1bHRHUFIpOwogICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVS
ZWdzKHZhbHVlR1BSKSwgbm9kZVVzZSwgCi0gICAgICAgICAgICBtX2ppdC5icmFuY2hQdHIoCisg
ICAgICAgICAgICBtX2ppdC5icmFuY2g2NCgKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6Tm90RXF1YWwsIAogICAgICAgICAgICAgICAgIHJlc3VsdEdQUiwgCi0gICAgICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
VmFsdWVOdWxsKSkpKTsKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bTY0KFZhbHVlTnVsbCkpKTsKICAgICB9CiAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoVmFs
dWVUcnVlKSwgcmVzdWx0R1BSKTsKICAgICAKQEAgLTE5MzYsNyArMTkzNyw3IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVMb2dpY2FsTm90KE4KICAgICAgICAgICAgIEdQUlRlbXBvcmFy
eSByZXN1bHQodGhpcywgdmFsdWUpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBtX2ppdC5t
b3ZlKHZhbHVlLmdwcigpLCByZXN1bHQuZ3ByKCkpOwotICAgICAgICAgICAgbV9qaXQueG9yUHRy
KFRydXN0ZWRJbW0zMih0cnVlKSwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgICAgIG1faml0Lnhv
cjY0KFRydXN0ZWRJbW0zMih0cnVlKSwgcmVzdWx0LmdwcigpKTsKICAgICAgICAgICAgIAogICAg
ICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4LCBEYXRh
Rm9ybWF0SlNCb29sZWFuKTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTE5NDYsOSArMTk0Nyw5
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVMb2dpY2FsTm90KE4KICAgICAgICAgR1BS
VGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsgLy8gRklYTUU6IFdlIGNvdWxkIHJldXNlLCBidXQgb24g
c3BlY3VsYXRpb24gZmFpbCB3b3VsZCBuZWVkIHJlY292ZXJ5IHRvIHJlc3RvcmUgdGFnIChha2lu
IHRvIGFkZCkuCiAgICAgICAgIAogICAgICAgICBtX2ppdC5tb3ZlKHZhbHVlLmdwcigpLCByZXN1
bHQuZ3ByKCkpOwotICAgICAgICBtX2ppdC54b3JQdHIoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0
PGludDMyX3Q+KFZhbHVlRmFsc2UpKSwgcmVzdWx0LmdwcigpKTsKLSAgICAgICAgc3BlY3VsYXRp
b25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyh2YWx1ZS5ncHIoKSksIG5vZGUuY2hpbGQxKCks
IG1faml0LmJyYW5jaFRlc3RQdHIoSklUQ29tcGlsZXI6Ok5vblplcm8sIHJlc3VsdC5ncHIoKSwg
VHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSkpKTsKLSAgICAgICAgbV9qaXQu
eG9yUHRyKFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90PihWYWx1ZVRydWUpKSwgcmVz
dWx0LmdwcigpKTsKKyAgICAgICAgbV9qaXQueG9yNjQoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0
PGludDMyX3Q+KFZhbHVlRmFsc2UpKSwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgc3BlY3VsYXRp
b25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyh2YWx1ZS5ncHIoKSksIG5vZGUuY2hpbGQxKCks
IG1faml0LmJyYW5jaFRlc3Q2NChKSVRDb21waWxlcjo6Tm9uWmVybywgcmVzdWx0LmdwcigpLCBU
cnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSkpOworICAgICAgICBtX2ppdC54
b3I2NChUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oVmFsdWVUcnVlKSksIHJlc3Vs
dC5ncHIoKSk7CiAgICAgICAgIAogICAgICAgICAvLyBJZiB3ZSBhZGQgYSBEYXRhRm9ybWF0Qm9v
bCwgd2Ugc2hvdWxkIHVzZSBpdCBoZXJlLgogICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5n
cHIoKSwgbV9jb21waWxlSW5kZXgsIERhdGFGb3JtYXRKU0Jvb2xlYW4pOwpAQCAtMTk2NCwxMyAr
MTk2NSwxMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTG9naWNhbE5vdChOCiAgICAg
YXJnMS51c2UoKTsKICAgICAKICAgICBtX2ppdC5tb3ZlKGFyZzFHUFIsIHJlc3VsdEdQUik7Ci0g
ICAgbV9qaXQueG9yUHRyKFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90PihWYWx1ZUZh
bHNlKSksIHJlc3VsdEdQUik7Ci0gICAgSklUQ29tcGlsZXI6Okp1bXAgc2xvd0Nhc2UgPSBtX2pp
dC5icmFuY2hUZXN0UHRyKEpJVENvbXBpbGVyOjpOb25aZXJvLCByZXN1bHRHUFIsIFRydXN0ZWRJ
bW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpKTsKKyAgICBtX2ppdC54b3I2NChUcnVzdGVk
SW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oVmFsdWVGYWxzZSkpLCByZXN1bHRHUFIpOworICAg
IEpJVENvbXBpbGVyOjpKdW1wIHNsb3dDYXNlID0gbV9qaXQuYnJhbmNoVGVzdDY0KEpJVENvbXBp
bGVyOjpOb25aZXJvLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90
Pih+MSkpKTsKICAgICAKICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKICAgICAgICAgc2xvd1Bh
dGhDYWxsKHNsb3dDYXNlLCB0aGlzLCBkZmdDb252ZXJ0SlNWYWx1ZVRvQm9vbGVhbiwgcmVzdWx0
R1BSLCBhcmcxR1BSKSk7CiAgICAgCi0gICAgbV9qaXQueG9yUHRyKFRydXN0ZWRJbW0zMihzdGF0
aWNfY2FzdDxpbnQzMl90PihWYWx1ZVRydWUpKSwgcmVzdWx0R1BSKTsKKyAgICBtX2ppdC54b3I2
NChUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oVmFsdWVUcnVlKSksIHJlc3VsdEdQ
Uik7CiAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRHUFIsIG1fY29tcGlsZUluZGV4LCBEYXRhRm9y
bWF0SlNCb29sZWFuLCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOwogfQogCkBAIC0xOTgx
LDcgKzE5ODIsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Tm9uU3RyaW5nQ2VsbE9yCiAg
ICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CiAgICAgR1BSUmVnIHNjcmF0Y2hHUFIg
PSBzY3JhdGNoLmdwcigpOwogICAgIAotICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5vdENlbGwg
PSBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCB2YWx1ZUdQUiwg
R1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub3RD
ZWxsID0gbV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCB2YWx1ZUdQ
UiwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsKICAgICBpZiAobV9qaXQuZ3JhcGgoKS5nbG9i
YWxPYmplY3RGb3IobV9qaXQuZ3JhcGgoKVtub2RlVXNlLmluZGV4KCldLmNvZGVPcmlnaW4pLT5t
YXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludCgpLT5pc1N0aWxsVmFsaWQoKSkgewogICAg
ICAgICBtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihtX2ppdC5ncmFwaCgpW25vZGVVc2Uu
aW5kZXgoKV0uY29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCkt
PmFkZChzcGVjdWxhdGlvbldhdGNocG9pbnQoKSk7CiAKQEAgLTIwMTksOCArMjAyMCw4IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXROb25TdHJpbmdDZWxsT3IKICAgICAKICAgICBpZiAobmVl
ZFNwZWN1bGF0aW9uQ2hlY2spIHsKICAgICAgICAgbV9qaXQubW92ZSh2YWx1ZUdQUiwgc2NyYXRj
aEdQUik7Ci0gICAgICAgIG1faml0LmFuZFB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMy
KH5UYWdCaXRVbmRlZmluZWQpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgc3BlY3VsYXRpb25DaGVj
ayhCYWRUeXBlLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIG5vZGVVc2UuaW5kZXgoKSwgbV9qaXQu
YnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgc2NyYXRjaEdQUiwgTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW1QdHIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oVmFsdWVOdWxsKSkp
KTsKKyAgICAgICAgbV9qaXQuYW5kNjQoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMih+VGFn
Qml0VW5kZWZpbmVkKSwgc2NyYXRjaEdQUik7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFk
VHlwZSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBub2RlVXNlLmluZGV4KCksIG1faml0LmJyYW5j
aDY0KE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW02NChWYWx1ZU51bGwpKSk7CiAgICAgfQogICAgIGp1bXAobm90VGFrZW4pOwog
ICAgIApAQCAtMjA3Nyw4ICsyMDc4LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdEJyYW5j
aChOb2RlJiBubwogICAgICAgICAgICAgICAgIGJyYW5jaFRlc3QzMihjb25kaXRpb24sIHZhbHVl
R1BSLCBUcnVzdGVkSW1tMzIodHJ1ZSksIHRha2VuKTsKICAgICAgICAgICAgICAgICBqdW1wKG5v
dFRha2VuKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgYnJhbmNoUHRy
KE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgdmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tUHRyKEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oZmFsc2UpKSksIG5vdFRha2VuKTsKLSAg
ICAgICAgICAgICAgICBicmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCB2YWx1ZUdQUiwg
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0
cnVlKSkpLCB0YWtlbik7CisgICAgICAgICAgICAgICAgYnJhbmNoNjQoTWFjcm9Bc3NlbWJsZXI6
OkVxdWFsLCB2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjpl
bmNvZGUoanNCb29sZWFuKGZhbHNlKSkpLCBub3RUYWtlbik7CisgICAgICAgICAgICAgICAgYnJh
bmNoNjQoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCB2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRydWUpKSksIHRha2VuKTsKICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUs
IEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQuanVtcCgpKTsKICAg
ICAgICAgICAgIH0KQEAgLTIwODcsMTIgKzIwODgsMTIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
ZW1pdEJyYW5jaChOb2RlJiBubwogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlz
KTsKICAgICAgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CiAgICAgICAg
IAotICAgICAgICAgICAgYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgdmFsdWVHUFIs
IE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKEpTVmFsdWU6OmVuY29kZShqc051bWJlcigw
KSkpLCBub3RUYWtlbik7Ci0gICAgICAgICAgICBicmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkFi
b3ZlT3JFcXVhbCwgdmFsdWVHUFIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgdGFr
ZW4pOworICAgICAgICAgICAgYnJhbmNoNjQoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCB2YWx1ZUdQ
UiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIo
MCkpKSwgbm90VGFrZW4pOworICAgICAgICAgICAgYnJhbmNoNjQoTWFjcm9Bc3NlbWJsZXI6OkFi
b3ZlT3JFcXVhbCwgdmFsdWVHUFIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgdGFr
ZW4pOwogICAgIAogICAgICAgICAgICAgaWYgKCFwcmVkaWN0Qm9vbGVhbikgewotICAgICAgICAg
ICAgICAgIGJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHZhbHVlR1BSLCBNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbVB0cihKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGZhbHNlKSkp
LCBub3RUYWtlbik7Ci0gICAgICAgICAgICAgICAgYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpF
cXVhbCwgdmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKEpTVmFsdWU6OmVu
Y29kZShqc0Jvb2xlYW4odHJ1ZSkpKSwgdGFrZW4pOworICAgICAgICAgICAgICAgIGJyYW5jaDY0
KE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgdmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihmYWxzZSkpKSwgbm90VGFrZW4pOworICAg
ICAgICAgICAgICAgIGJyYW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgdmFsdWVHUFIsIE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0cnVl
KSkpLCB0YWtlbik7CiAgICAgICAgICAgICB9CiAgICAgCiAgICAgICAgICAgICB2YWx1ZS51c2Uo
KTsKQEAgLTIxMTQsOCArMjExNSw4IEBAIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBTcGVjdWxh
dGl2ZUpJVDoKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOwogICAgIHNs
b3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVh
bCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEJ1dHRl
cmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsKICAgICAKLSAgICBtX2ppdC5sb2FkUHRy
KE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3Jv
QXNzZW1ibGVyOjpTY2FsZVB0ciksIHJlc3VsdFJlZyk7Ci0gICAgc2xvd0Nhc2VzLmFwcGVuZCht
X2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCByZXN1bHRSZWcpKTsKKyAg
ICBtX2ppdC5sb2FkNjQoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9w
ZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQpLCByZXN1bHRSZWcpOworICAgIHNs
b3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBy
ZXN1bHRSZWcpKTsKICAgICAKICAgICByZXR1cm4gc2xvd0Nhc2VzOwogfQpAQCAtMjEyNCw4ICsy
MTI1LDggQEAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IFNwZWN1bGF0aXZlSklUOgogewogICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wIG91dE9mQm91bmRzID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9B
c3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKTsKICAg
ICAKLSAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJl
ZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwgT0JKRUNUX09GRlNFVE9G
KEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSwgcmVzdWx0UmVnKTsKLSAgICBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcCBob2xlID0gbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVy
bywgcmVzdWx0UmVnKTsKKyAgICBtX2ppdC5sb2FkNjQoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRl
eChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9C
SkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSksIHJlc3VsdFJlZyk7Cisg
ICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgaG9sZSA9IG1faml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fz
c2VtYmxlcjo6WmVybywgcmVzdWx0UmVnKTsKICAgICAKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cExpc3Qgc2xvd0Nhc2VzOwogICAgIHNsb3dDYXNlcy5hcHBlbmQob3V0T2ZCb3VuZHMpOwpAQCAt
MjE1Nyw3ICsyMTU4LDcgQEAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IFNwZWN1bGF0aXZlSklU
OgogICAgICAgICBpbkJvdW5kcy5saW5rKCZtX2ppdCk7CiAgICAgfQogCi0gICAgbV9qaXQuc3Rv
cmVQdHIodmFsdWVSZWcsIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJv
cGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0cikpOworICAgIG1faml0LnN0b3JlNjQo
dmFsdWVSZWcsIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlS
ZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0KSk7CiAgICAgCiAgICAgaWYgKGlzSW5Cb3Vu
ZHNBY2Nlc3MoYXJyYXlNb2RlKSkKICAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyOjpKdW1w
TGlzdCgpOwpAQCAtMjE4Myw5ICsyMTg0LDkgQEAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IFNw
ZWN1bGF0aXZlSklUOgogICAgICAgICAvLyBwcm9maWxpbmcuCiAgICAgICAgIHNwZWN1bGF0aW9u
Q2hlY2soCiAgICAgICAgICAgICBVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLAot
ICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVybywgTWFj
cm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3Nl
bWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3Rvclsw
XSkpKSk7CisgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Olpl
cm8sIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1h
Y3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBt
X3ZlY3RvclswXSkpKSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1
bXAgbm90SG9sZVZhbHVlID0gbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm9u
WmVybywgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywg
TWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBt
X3ZlY3RvclswXSkpKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm90SG9sZVZhbHVl
ID0gbV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBNYWNyb0Fzc2Vt
Ymxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6
VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSk7
CiAgICAgICAgIGlmIChpc1Nsb3dQdXRBY2Nlc3MoYXJyYXlNb2RlKSkgewogICAgICAgICAgICAg
Ly8gVGhpcyBpcyBzb3J0IG9mIHN0cmFuZ2UuIElmIHdlIHdhbnRlZCB0byBvcHRpbWl6ZSB0aGlz
IGNvZGUgcGF0aCwgd2Ugd291bGQgaW52ZXJ0CiAgICAgICAgICAgICAvLyB0aGUgYWJvdmUgYnJh
bmNoLiBCdXQgaXQncyBzaW1wbHkgbm90IHdvcnRoIGl0IHNpbmNlIHRoaXMgb25seSBoYXBwZW5z
IGlmIHdlJ3JlCkBAIC0yMjA1LDcgKzIyMDYsNyBAQCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qg
U3BlY3VsYXRpdmVKSVQ6CiAgICAgfQogICAgIAogICAgIC8vIFN0b3JlIHRoZSB2YWx1ZSB0byB0
aGUgYXJyYXkuCi0gICAgbV9qaXQuc3RvcmVQdHIodmFsdWVSZWcsIE1hY3JvQXNzZW1ibGVyOjpC
YXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0
ciwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSk7CisgICAgbV9q
aXQuc3RvcmU2NCh2YWx1ZVJlZywgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVn
LCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRP
RihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSkpOwogICAgIAogICAgIHJldHVybiBzbG93Q2Fz
ZXM7CiB9CkBAIC0yMjY5LDcgKzIyNzAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
KE5vZGUmIG5vZGUpCiAgICAgICAgIH0KIAogICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRo
aXMpOwotICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKG5vZGUu
bG9jYWwoKSksIHJlc3VsdC5ncHIoKSk7CisgICAgICAgIG1faml0LmxvYWQ2NChKSVRDb21waWxl
cjo6YWRkcmVzc0Zvcihub2RlLmxvY2FsKCkpLCByZXN1bHQuZ3ByKCkpOwogCiAgICAgICAgIC8v
IExpa2UganNWYWx1ZVJlc3VsdCwgYnV0IGRvbid0IHVzZUNoaWxkcmVuIC0gb3VyIGNoaWxkcmVu
IGFyZSBwaGkgbm9kZXMsCiAgICAgICAgIC8vIGFuZCBkb24ndCByZXByZXNlbnQgdmFsdWVzIHdp
dGhpbiB0aGlzIGRhdGFmbG93IHdpdGggdmlydHVhbCByZWdpc3RlcnMuCkBAIC0yMjkzLDcgKzIy
OTQsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgY2Fz
ZSBHZXRMb2NhbFVubGlua2VkOiB7CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7
CiAgICAgICAgIAotICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjphZGRyZXNzRm9y
KG5vZGUudW5saW5rZWRMb2NhbCgpKSwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgbV9qaXQubG9h
ZDY0KEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKG5vZGUudW5saW5rZWRMb2NhbCgpKSwgcmVzdWx0
LmdwcigpKTsKICAgICAgICAgCiAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0LmdwcigpLCBt
X2NvbXBpbGVJbmRleCk7CiAgICAgICAgIGJyZWFrOwpAQCAtMjM1OSwxNCArMjM2MCwxNCBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICBpZiAo
aXNDZWxsU3BlY3VsYXRpb24ocHJlZGljdGVkVHlwZSkpIHsKICAgICAgICAgICAgICAgICBTcGVj
dWxhdGVDZWxsT3BlcmFuZCBjZWxsKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICAgICAg
ICAgIEdQUlJlZyBjZWxsR1BSID0gY2VsbC5ncHIoKTsKLSAgICAgICAgICAgICAgICBtX2ppdC5z
dG9yZVB0cihjZWxsR1BSLCBKSVRDb21waWxlcjo6YWRkcmVzc0Zvcihub2RlLmxvY2FsKCkpKTsK
KyAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTY0KGNlbGxHUFIsIEpJVENvbXBpbGVyOjphZGRy
ZXNzRm9yKG5vZGUubG9jYWwoKSkpOwogICAgICAgICAgICAgICAgIG5vUmVzdWx0KG1fY29tcGls
ZUluZGV4KTsKICAgICAgICAgICAgICAgICByZWNvcmRTZXRMb2NhbChub2RlLmxvY2FsKCksIFZh
bHVlU291cmNlKENlbGxJbkpTU3RhY2spKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIGlmIChpc0Jvb2xlYW5TcGVjdWxhdGlvbihwcmVkaWN0ZWRU
eXBlKSkgewogICAgICAgICAgICAgICAgIFNwZWN1bGF0ZUJvb2xlYW5PcGVyYW5kIGJvb2xlYW4o
dGhpcywgbm9kZS5jaGlsZDEoKSk7Ci0gICAgICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIoYm9v
bGVhbi5ncHIoKSwgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Iobm9kZS5sb2NhbCgpKSk7CisgICAg
ICAgICAgICAgICAgbV9qaXQuc3RvcmU2NChib29sZWFuLmdwcigpLCBKSVRDb21waWxlcjo6YWRk
cmVzc0Zvcihub2RlLmxvY2FsKCkpKTsKICAgICAgICAgICAgICAgICBub1Jlc3VsdChtX2NvbXBp
bGVJbmRleCk7CiAgICAgICAgICAgICAgICAgcmVjb3JkU2V0TG9jYWwobm9kZS5sb2NhbCgpLCBW
YWx1ZVNvdXJjZShCb29sZWFuSW5KU1N0YWNrKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBA
IC0yMzc0LDcgKzIzNzUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5v
ZGUpCiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRo
aXMsIG5vZGUuY2hpbGQxKCkpOwotICAgICAgICBtX2ppdC5zdG9yZVB0cih2YWx1ZS5ncHIoKSwg
SklUQ29tcGlsZXI6OmFkZHJlc3NGb3Iobm9kZS5sb2NhbCgpKSk7CisgICAgICAgIG1faml0LnN0
b3JlNjQodmFsdWUuZ3ByKCksIEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKG5vZGUubG9jYWwoKSkp
OwogICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CiAKICAgICAgICAgcmVjb3JkU2V0
TG9jYWwobm9kZS5sb2NhbCgpLCBWYWx1ZVNvdXJjZShWYWx1ZUluSlNTdGFjaykpOwpAQCAtMjQ3
NCwxMCArMjQ3NSwxMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUp
CiAgICAgY2FzZSBDaGVja051bWJlcjogewogICAgICAgICBpZiAoIWlzTnVtYmVyU3BlY3VsYXRp
b24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpIHsKICAgICAgICAgICAg
IEpTVmFsdWVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKLSAgICAgICAgICAgIEpJ
VENvbXBpbGVyOjpKdW1wIGlzSW50ZWdlciA9IG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxl
cjo6QWJvdmVPckVxdWFsLCBvcDEuZ3ByKCksIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rl
cik7CisgICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBpc0ludGVnZXIgPSBtX2ppdC5icmFu
Y2g2NChNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBvcDEuZ3ByKCksIEdQUkluZm86OnRh
Z1R5cGVOdW1iZXJSZWdpc3Rlcik7CiAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAogICAg
ICAgICAgICAgICAgIEJhZFR5cGUsIEpTVmFsdWVSZWdzKG9wMS5ncHIoKSksIG5vZGUuY2hpbGQx
KCkuaW5kZXgoKSwKLSAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNz
ZW1ibGVyOjpaZXJvLCBvcDEuZ3ByKCksIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcikp
OworICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6WmVy
bywgb3AxLmdwcigpLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsKICAgICAgICAg
ICAgIGlzSW50ZWdlci5saW5rKCZtX2ppdCk7CiAgICAgICAgIH0KICAgICAgICAgbm9SZXN1bHQo
bV9jb21waWxlSW5kZXgpOwpAQCAtMjcwOSw4ICsyNzEwLDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRP
ZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2Vt
Ymxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
c3RvcmFnZVJlZywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkpOwogICAgICAg
ICAgICAgCiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwotICAgICAgICAg
ICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHBy
b3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIpLCByZXN1bHQuZ3ByKCkpOwotICAg
ICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgTm9O
b2RlLCBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCByZXN1bHQuZ3By
KCkpKTsKKyAgICAgICAgICAgIG1faml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4
KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCksIHJl
c3VsdC5ncHIoKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE91dE9mQm91bmRzLCBK
U1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6
WmVybywgcmVzdWx0LmdwcigpKSk7CiAgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5n
cHIoKSwgbV9jb21waWxlSW5kZXgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAg
LTI3NTQsOCArMjc1NSw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9k
ZSkKICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3V0T2ZCb3VuZHMsIEpTVmFsdWVSZWdz
KCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwg
cHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3Rv
cmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAg
IEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0gICAgICAgICAgICBtX2ppdC5sb2FkUHRyKE1h
Y3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNz
ZW1ibGVyOjpTY2FsZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3Jb
MF0pKSwgcmVzdWx0LmdwcigpKTsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3V0T2ZC
b3VuZHMsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fz
c2VtYmxlcjo6WmVybywgcmVzdWx0LmdwcigpKSk7CisgICAgICAgICAgICBtX2ppdC5sb2FkNjQo
TWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9B
c3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVj
dG9yWzBdKSksIHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE91
dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFRlc3Q2NChNYWNy
b0Fzc2VtYmxlcjo6WmVybywgcmVzdWx0LmdwcigpKSk7CiAgICAgICAgICAgICAKICAgICAgICAg
ICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CiAgICAgICAg
ICAgICBicmVhazsKQEAgLTI3OTksNiArMjgwMCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIAogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5
IHN0b3JhZ2UodGhpcyk7CiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwor
CiAgICAgICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CiAgICAgICAg
ICAgICBHUFJSZWcgcmVzdWx0UmVnID0gcmVzdWx0LmdwcigpOwogICAgICAgICAgICAgCkBAIC0y
OTQ3LDcgKzI5NDksNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUp
CiAgICAgICAgICAgICAgICAgLy8gU3RvcmUgdGhlIHZhbHVlIHRvIHRoZSBhcnJheS4KICAgICAg
ICAgICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKICAgICAgICAg
ICAgICAgICBHUFJSZWcgdmFsdWVSZWcgPSB2YWx1ZS5ncHIoKTsKLSAgICAgICAgICAgICAgICBt
X2ppdC5zdG9yZVB0cih2YWx1ZVJlZywgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdl
UmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyKSk7CisgICAgICAgICAg
ICAgICAgbV9qaXQuc3RvcmU2NCh2YWx1ZVJlZywgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChz
dG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQpKTsKICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7
CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0yOTk4LDcgKzMwMDAsNyBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICAgICAgLy8gU3RvcmUg
dGhlIHZhbHVlIHRvIHRoZSBhcnJheS4KICAgICAgICAgICAgICAgICBHUFJSZWcgcHJvcGVydHlS
ZWcgPSBwcm9wZXJ0eS5ncHIoKTsKICAgICAgICAgICAgICAgICBHUFJSZWcgdmFsdWVSZWcgPSB2
YWx1ZS5ncHIoKTsKLSAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZVB0cih2YWx1ZVJlZywgTWFj
cm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3Nl
bWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3Rvclsw
XSkpKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTY0KHZhbHVlUmVnLCBNYWNyb0Fzc2Vt
Ymxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6
VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSk7
CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5k
ZXgpOwogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMzExNyw3ICszMTE5LDcgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIE9CSkVDVF9PRkZTRVRPRihBcmd1bWVudHMsIG1f
cmVnaXN0ZXJzKSksCiAgICAgICAgICAgICAgICAgc2NyYXRjaFJlZyk7CiAgICAgICAgICAgICAK
LSAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKAorICAgICAgICAgICAgbV9qaXQuc3RvcmU2NCgK
ICAgICAgICAgICAgICAgICB2YWx1ZVJlZywKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6QmFzZUluZGV4KAogICAgICAgICAgICAgICAgICAgICBzY3JhdGNoUmVnLCBzY3JhdGNoMlJl
ZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsCkBAIC0zMjQzLDEwICszMjQ1LDEwIEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgY2FzZSBBcnJh
eTo6QXJyYXlXaXRoQ29udGlndW91c091dE9mQm91bmRzOiB7CiAgICAgICAgICAgICBtX2ppdC5s
b2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQnV0dGVyZmx5OjpvZmZz
ZXRPZlB1YmxpY0xlbmd0aCgpKSwgc3RvcmFnZUxlbmd0aEdQUik7CiAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcCBzbG93UGF0aCA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVy
OjpBYm92ZU9yRXF1YWwsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KHN0b3JhZ2VHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZWZWN0b3JMZW5ndGgoKSkpOwotICAgICAg
ICAgICAgbV9qaXQuc3RvcmVQdHIodmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgo
c3RvcmFnZUdQUiwgc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyKSk7
CisgICAgICAgICAgICBtX2ppdC5zdG9yZTY0KHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QmFz
ZUluZGV4KHN0b3JhZ2VHUFIsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1l
c0VpZ2h0KSk7CiAgICAgICAgICAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIHN0b3Jh
Z2VMZW5ndGhHUFIpOwogICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihzdG9yYWdlTGVuZ3RoR1BS
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9m
UHVibGljTGVuZ3RoKCkpKTsKLSAgICAgICAgICAgIG1faml0Lm9yUHRyKEdQUkluZm86OnRhZ1R5
cGVOdW1iZXJSZWdpc3Rlciwgc3RvcmFnZUxlbmd0aEdQUik7CisgICAgICAgICAgICBtX2ppdC5v
cjY0KEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlciwgc3RvcmFnZUxlbmd0aEdQUik7CiAg
ICAgICAgICAgICAKICAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAogICAgICAgICAg
ICAgICAgIHNsb3dQYXRoQ2FsbCgKQEAgLTMyNjYsMTIgKzMyNjgsMTIgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAKICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wIHNsb3dQYXRoID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6
OkFib3ZlT3JFcXVhbCwgc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
c3RvcmFnZUdQUiwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpOwogICAgICAg
ICAKLSAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6
QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpT
Y2FsZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSk7Cisg
ICAgICAgICAgICBtX2ppdC5zdG9yZTY0KHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUlu
ZGV4KHN0b3JhZ2VHUFIsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0Vp
Z2h0LCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpKTsKICAgICAg
ICAgCiAgICAgICAgICAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIHN0b3JhZ2VMZW5n
dGhHUFIpOwogICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihzdG9yYWdlTGVuZ3RoR1BSLCBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNl
dCgpKSk7CiAgICAgICAgICAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2Us
IG1fbnVtVmFsdWVzSW5WZWN0b3IpKSk7Ci0gICAgICAgICAgICBtX2ppdC5vclB0cihHUFJJbmZv
Ojp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHN0b3JhZ2VMZW5ndGhHUFIpOworICAgICAgICAgICAg
bV9qaXQub3I2NChHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHN0b3JhZ2VMZW5ndGhH
UFIpOwogICAgICAgICAKICAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAogICAgICAg
ICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKQEAgLTMzMTAsMTUgKzMzMTIsMTUgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgbV9qaXQuc3ViMzIo
VHJ1c3RlZEltbTMyKDEpLCB2YWx1ZUdQUik7CiAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKAog
ICAgICAgICAgICAgICAgIHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdl
R1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKTsKLSAgICAgICAgICAgIG1f
aml0LmxvYWRQdHIoCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChz
dG9yYWdlR1BSLCB2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyKSwKKyAgICAgICAg
ICAgIG1faml0LmxvYWQ2NCgKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QmFzZUlu
ZGV4KHN0b3JhZ2VHUFIsIHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCksCiAg
ICAgICAgICAgICAgICAgdmFsdWVHUFIpOwotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1
bXAgc2xvd0Nhc2UgPSBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCB2
YWx1ZUdQUik7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzbG93Q2FzZSA9IG1f
aml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6WmVybywgdmFsdWVHUFIpOwogCiAgICAg
ICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKICAgICAgICAgICAgICAgICBzbG93UGF0aE1v
dmUoCiAgICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZENhc2UsIHRoaXMsCi0gICAgICAgICAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKSksIHZhbHVlR1BSKSk7CisgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpKSwgdmFs
dWVHUFIpKTsKICAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAogICAgICAgICAgICAg
ICAgIHNsb3dQYXRoQ2FsbCgKICAgICAgICAgICAgICAgICAgICAgc2xvd0Nhc2UsIHRoaXMsIG9w
ZXJhdGlvbkFycmF5UG9wQW5kUmVjb3Zlckxlbmd0aCwgdmFsdWVHUFIsIGJhc2VHUFIpKTsKQEAg
LTMzNDEsMTggKzMzNDMsMTggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBu
b2RlKQogICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsKICAgICAg
ICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFi
b3ZlT3JFcXVhbCwgc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3Rv
cmFnZUdQUiwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKICAgICAgICAg
Ci0gICAgICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3Rv
cmFnZUdQUiwgc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpF
Q1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpLCB2YWx1ZUdQUik7Ci0gICAg
ICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJs
ZXI6Olplcm8sIHZhbHVlR1BSKSk7CisgICAgICAgICAgICBtX2ppdC5sb2FkNjQoTWFjcm9Bc3Nl
bWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2Vt
Ymxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3Jb
MF0pKSwgdmFsdWVHUFIpOworICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFu
Y2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHZhbHVlR1BSKSk7CiAgICAgICAgIAogICAg
ICAgICAgICAgbV9qaXQuc3RvcmUzMihzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhzdG9yYWdlR1BSLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSk7CiAgICAg
ICAgIAotICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW1QdHIoMCksIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgc3RvcmFnZUxl
bmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlT
dG9yYWdlLCBtX3ZlY3RvclswXSkpKTsKKyAgICAgICAgICAgIG1faml0LnN0b3JlNjQoTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW02NCgoaW50NjRfdCkwKSwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJ
bmRleChzdG9yYWdlR1BSLCBzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNF
aWdodCwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSk7CiAgICAg
ICAgICAgICBtX2ppdC5zdWIzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDEpLCBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9y
YWdlLCBtX251bVZhbHVlc0luVmVjdG9yKSkpOwogICAgICAgICAKICAgICAgICAgICAgIGFkZFNs
b3dQYXRoR2VuZXJhdG9yKAogICAgICAgICAgICAgICAgIHNsb3dQYXRoTW92ZSgKICAgICAgICAg
ICAgICAgICAgICAgdW5kZWZpbmVkQ2FzZSwgdGhpcywKLSAgICAgICAgICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
KSwgdmFsdWVHUFIpKTsKKyAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSkpLCB2YWx1ZUdQUikpOwogICAg
ICAgICAKICAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAogICAgICAgICAgICAgICAg
IHNsb3dQYXRoQ2FsbCgKQEAgLTM0NDUsNyArMzQ0Nyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIAogICAgICAgICAgICAgbV9qaXQubW92
ZShvcDEuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CiAgICAgICAgICAgICBpZiAob3AxLmZvcm1hdCgp
ID09IERhdGFGb3JtYXRJbnRlZ2VyKQotICAgICAgICAgICAgICAgIG1faml0Lm9yUHRyKEdQUklu
Zm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgICAgICAg
ICBtX2ppdC5vcjY0KEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgcmVzdWx0Lmdwcigp
KTsKICAgICAgICAgICAgIAogICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCks
IG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMzQ2NCw3ICszNDY2LDcg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBpZiAo
IShtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlICYgfihTcGVjTnVtYmVyIHwg
U3BlY0Jvb2xlYW4pKSkKICAgICAgICAgICAgIG1faml0Lm1vdmUob3AxR1BSLCByZXN1bHRHUFIp
OwogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGFscmVh
ZHlQcmltaXRpdmUgPSBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJv
LCBvcDFHUFIsIEdQUkluZm86OnRhZ01hc2tSZWdpc3Rlcik7CisgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6SnVtcCBhbHJlYWR5UHJpbWl0aXZlID0gbV9qaXQuYnJhbmNoVGVzdDY0KE1hY3Jv
QXNzZW1ibGVyOjpOb25aZXJvLCBvcDFHUFIsIEdQUkluZm86OnRhZ01hc2tSZWdpc3Rlcik7CiAg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub3RQcmltaXRpdmUgPSBtX2ppdC5icmFu
Y2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhv
cDFHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpOwogICAg
ICAgICAgICAgCiAgICAgICAgICAgICBhbHJlYWR5UHJpbWl0aXZlLmxpbmsoJm1faml0KTsKQEAg
LTM1MDAsNyArMzUwMiw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9k
ZSkKICAgICAgICAgICAgIEdQUlJlZyBvcEdQUiA9IG9wZXJhbmQuZ3ByKCk7CiAgICAgICAgICAg
ICBvcGVyYW5kLnVzZSgpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBtX2ppdC5zdG9yZVB0
cihvcEdQUiwgYnVmZmVyICsgb3BlcmFuZElkeCk7CisgICAgICAgICAgICBtX2ppdC5zdG9yZTY0
KG9wR1BSLCBidWZmZXIgKyBvcGVyYW5kSWR4KTsKICAgICAgICAgfQogICAgICAgICAKICAgICAg
ICAgZmx1c2hSZWdpc3RlcnMoKTsKQEAgLTM1NjIsNyArMzU2NCw3IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIEdQUlJlZyBvcEdQUiA9IG9w
ZXJhbmQuZ3ByKCk7CiAgICAgICAgICAgICBvcGVyYW5kLnVzZSgpOwogICAgICAgICAgICAgCi0g
ICAgICAgICAgICBtX2ppdC5zdG9yZVB0cihvcEdQUiwgYnVmZmVyICsgb3BlcmFuZElkeCk7Cisg
ICAgICAgICAgICBtX2ppdC5zdG9yZTY0KG9wR1BSLCBidWZmZXIgKyBvcGVyYW5kSWR4KTsKICAg
ICAgICAgfQogICAgICAgICAKICAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKQEAgLTM2MzEsOCAr
MzYzMyw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAg
ICAgICAgIAogICAgICAgICAgICAgaWYgKCFpc090aGVyU3BlY3VsYXRpb24obV9zdGF0ZS5mb3JO
b2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpIHsKICAgICAgICAgICAgICAgICBtX2ppdC5tb3Zl
KHRoaXNWYWx1ZUdQUiwgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICAgICAgbV9qaXQuYW5kUHRy
KE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoflRhZ0JpdFVuZGVmaW5lZCksIHNjcmF0Y2hH
UFIpOwotICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJl
Z3ModGhpc1ZhbHVlR1BSKSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNz
ZW1ibGVyOjpOb3RFcXVhbCwgc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1Q
dHIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oVmFsdWVOdWxsKSkpKTsKKyAgICAgICAgICAgICAg
ICBtX2ppdC5hbmQ2NChNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKH5UYWdCaXRVbmRlZmlu
ZWQpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5
cGUsIEpTVmFsdWVSZWdzKHRoaXNWYWx1ZUdQUiksIG5vZGUuY2hpbGQxKCksIG1faml0LmJyYW5j
aDY0KE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW02NChWYWx1ZU51bGwpKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAK
ICAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9q
aXQuZ2xvYmFsVGhpc09iamVjdEZvcihub2RlLmNvZGVPcmlnaW4pKSwgc2NyYXRjaEdQUik7CkBA
IC0zNzMyLDcgKzM3MzQsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5v
ZGUpCiAgICAgICAgIGlmIChjaGVja1RvcExldmVsICYmIHNraXAtLSkgewogICAgICAgICAgICAg
SklUQ29tcGlsZXI6Okp1bXAgYWN0aXZhdGlvbk5vdENyZWF0ZWQ7CiAgICAgICAgICAgICBpZiAo
Y2hlY2tUb3BMZXZlbCkKLSAgICAgICAgICAgICAgICBhY3RpdmF0aW9uTm90Q3JlYXRlZCA9IG1f
aml0LmJyYW5jaFRlc3RQdHIoSklUQ29tcGlsZXI6Olplcm8sIEpJVENvbXBpbGVyOjphZGRyZXNz
Rm9yKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4obV9qaXQuY29kZUJsb2NrKCktPmFjdGl2
YXRpb25SZWdpc3RlcigpKSkpOworICAgICAgICAgICAgICAgIGFjdGl2YXRpb25Ob3RDcmVhdGVk
ID0gbV9qaXQuYnJhbmNoVGVzdDY0KEpJVENvbXBpbGVyOjpaZXJvLCBKSVRDb21waWxlcjo6YWRk
cmVzc0ZvcihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KG1faml0LmNvZGVCbG9jaygpLT5h
Y3RpdmF0aW9uUmVnaXN0ZXIoKSkpKTsKICAgICAgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29t
cGlsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlc3Vs
dEdQUik7CiAgICAgICAgICAgICBhY3RpdmF0aW9uTm90Q3JlYXRlZC5saW5rKCZtX2ppdCk7CiAg
ICAgICAgIH0KQEAgLTM3NTgsNyArMzc2MCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGUoTm9kZSYgbm9kZSkKICAgICAgICAgR1BSUmVnIHJlZ2lzdGVyc0dQUiA9IHJlZ2lzdGVycy5n
cHIoKTsKICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKIAotICAgICAg
ICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKHJlZ2lzdGVyc0dQUiwgbm9kZS52
YXJOdW1iZXIoKSAqIHNpemVvZihSZWdpc3RlcikpLCByZXN1bHRHUFIpOworICAgICAgICBtX2pp
dC5sb2FkNjQoSklUQ29tcGlsZXI6OkFkZHJlc3MocmVnaXN0ZXJzR1BSLCBub2RlLnZhck51bWJl
cigpICogc2l6ZW9mKFJlZ2lzdGVyKSksIHJlc3VsdEdQUik7CiAgICAgICAgIGpzVmFsdWVSZXN1
bHQocmVzdWx0R1BSLCBtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAg
LTM3NzMsNyArMzc3NSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9k
ZSkKICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CiAgICAgICAgIEdQUlJl
ZyBzY3JhdGNoR1BSID0gc2NyYXRjaFJlZ2lzdGVyLmdwcigpOwogCi0gICAgICAgIG1faml0LnN0
b3JlUHRyKHZhbHVlR1BSLCBKSVRDb21waWxlcjo6QWRkcmVzcyhyZWdpc3RlcnNHUFIsIG5vZGUu
dmFyTnVtYmVyKCkgKiBzaXplb2YoUmVnaXN0ZXIpKSk7CisgICAgICAgIG1faml0LnN0b3JlNjQo
dmFsdWVHUFIsIEpJVENvbXBpbGVyOjpBZGRyZXNzKHJlZ2lzdGVyc0dQUiwgbm9kZS52YXJOdW1i
ZXIoKSAqIHNpemVvZihSZWdpc3RlcikpKTsKICAgICAgICAgd3JpdGVCYXJyaWVyKHNjb3BlR1BS
LCB2YWx1ZUdQUiwgbm9kZS5jaGlsZDMoKSwgV3JpdGVCYXJyaWVyRm9yVmFyaWFibGVBY2Nlc3Ms
IHNjcmF0Y2hHUFIpOwogICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CiAgICAgICAg
IGJyZWFrOwpAQCAtMzgwNyw3ICszODA5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZShOb2RlJiBub2RlKQogICAgICAgICAKICAgICAgICAgYmFzZS51c2UoKTsKICAgICAgICAgCi0g
ICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdENlbGwgPSBtX2ppdC5icmFuY2hUZXN0UHRyKEpJ
VENvbXBpbGVyOjpOb25aZXJvLCBiYXNlR1BSLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpOwor
ICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBub3RDZWxsID0gbV9qaXQuYnJhbmNoVGVzdDY0KEpJ
VENvbXBpbGVyOjpOb25aZXJvLCBiYXNlR1BSLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpOwog
ICAgICAgICAKICAgICAgICAgY2FjaGVkR2V0QnlJZChub2RlLmNvZGVPcmlnaW4sIGJhc2VHUFIs
IHJlc3VsdEdQUiwgbm9kZS5pZGVudGlmaWVyTnVtYmVyKCksIG5vdENlbGwpOwogICAgICAgICAK
QEAgLTM4NDksNyArMzg1MSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYg
bm9kZSkKICAgICAgICAgYmFzZS51c2UoKTsKICAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKICAg
ICAgICAgCi0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdENlbGwgPSBtX2ppdC5icmFuY2hU
ZXN0UHRyKEpJVENvbXBpbGVyOjpOb25aZXJvLCBiYXNlR1BSLCBHUFJJbmZvOjp0YWdNYXNrUmVn
aXN0ZXIpOworICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBub3RDZWxsID0gbV9qaXQuYnJhbmNo
VGVzdDY0KEpJVENvbXBpbGVyOjpOb25aZXJvLCBiYXNlR1BSLCBHUFJJbmZvOjp0YWdNYXNrUmVn
aXN0ZXIpOwogICAgICAgICAKICAgICAgICAgY2FjaGVkR2V0QnlJZChub2RlLmNvZGVPcmlnaW4s
IGJhc2VHUFIsIHJlc3VsdEdQUiwgbm9kZS5pZGVudGlmaWVyTnVtYmVyKCksIG5vdENlbGwsIERv
bnRTcGlsbCk7CiAgICAgICAgIApAQCAtMzk5Nyw3ICszOTk5LDcgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAKICAgICAgICAgU3RvcmFnZUFjY2Vz
c0RhdGEmIHN0b3JhZ2VBY2Nlc3NEYXRhID0gbV9qaXQuZ3JhcGgoKS5tX3N0b3JhZ2VBY2Nlc3NE
YXRhW25vZGUuc3RvcmFnZUFjY2Vzc0RhdGFJbmRleCgpXTsKICAgICAgICAgCi0gICAgICAgIG1f
aml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgc3RvcmFnZUFjY2Vz
c0RhdGEub2Zmc2V0ICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSksIHJlc3VsdEdQUik7CisgICAg
ICAgIG1faml0LmxvYWQ2NChKSVRDb21waWxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBzdG9yYWdl
QWNjZXNzRGF0YS5vZmZzZXQgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSwgcmVzdWx0R1BSKTsK
ICAgICAgICAgCiAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBtX2NvbXBpbGVJbmRl
eCk7CiAgICAgICAgIGJyZWFrOwpAQCAtNDAxOSw3ICs0MDIxLDcgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogCiAgICAgICAgIFN0b3JhZ2VBY2Nlc3NEYXRhJiBz
dG9yYWdlQWNjZXNzRGF0YSA9IG1faml0LmdyYXBoKCkubV9zdG9yYWdlQWNjZXNzRGF0YVtub2Rl
LnN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXgoKV07CiAgICAgICAgIAotICAgICAgICBtX2ppdC5zdG9y
ZVB0cih2YWx1ZUdQUiwgSklUQ29tcGlsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgc3RvcmFnZUFj
Y2Vzc0RhdGEub2Zmc2V0ICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkpOworICAgICAgICBtX2pp
dC5zdG9yZTY0KHZhbHVlR1BSLCBKSVRDb21waWxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBzdG9y
YWdlQWNjZXNzRGF0YS5vZmZzZXQgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7CiAgICAgICAg
IAogICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgIGJyZWFrOwpAQCAt
NDA2NCw3ICs0MDY2LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2Rl
KQogICAgIGNhc2UgR2V0R2xvYmFsVmFyOiB7CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQo
dGhpcyk7CiAKLSAgICAgICAgbV9qaXQubG9hZFB0cihub2RlLnJlZ2lzdGVyUG9pbnRlcigpLCBy
ZXN1bHQuZ3ByKCkpOworICAgICAgICBtX2ppdC5sb2FkNjQobm9kZS5yZWdpc3RlclBvaW50ZXIo
KSwgcmVzdWx0LmdwcigpKTsKIAogICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwg
bV9jb21waWxlSW5kZXgpOwogICAgICAgICBicmVhazsKQEAgLTQwODAsNyArNDA4Miw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIHdyaXRl
QmFycmllcihtX2ppdC5nbG9iYWxPYmplY3RGb3Iobm9kZS5jb2RlT3JpZ2luKSwgdmFsdWUuZ3By
KCksIG5vZGUuY2hpbGQxKCksIFdyaXRlQmFycmllckZvclZhcmlhYmxlQWNjZXNzLCBzY3JhdGNo
UmVnKTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgbV9qaXQuc3RvcmVQdHIodmFsdWUu
Z3ByKCksIG5vZGUucmVnaXN0ZXJQb2ludGVyKCkpOworICAgICAgICBtX2ppdC5zdG9yZTY0KHZh
bHVlLmdwcigpLCBub2RlLnJlZ2lzdGVyUG9pbnRlcigpKTsKIAogICAgICAgICBub1Jlc3VsdCht
X2NvbXBpbGVJbmRleCk7CiAgICAgICAgIGJyZWFrOwpAQCAtNDEwNiw3ICs0MTA4LDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgd3JpdGVC
YXJyaWVyKG1faml0Lmdsb2JhbE9iamVjdEZvcihub2RlLmNvZGVPcmlnaW4pLCB2YWx1ZS5ncHIo
KSwgbm9kZS5jaGlsZDEoKSwgV3JpdGVCYXJyaWVyRm9yVmFyaWFibGVBY2Nlc3MsIHNjcmF0Y2hS
ZWcpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBtX2ppdC5zdG9yZVB0cih2YWx1ZS5n
cHIoKSwgbm9kZS5yZWdpc3RlclBvaW50ZXIoKSk7CisgICAgICAgIG1faml0LnN0b3JlNjQodmFs
dWUuZ3ByKCksIG5vZGUucmVnaXN0ZXJQb2ludGVyKCkpOwogCiAgICAgICAgIG5vUmVzdWx0KG1f
Y29tcGlsZUluZGV4KTsKICAgICAgICAgYnJlYWs7CkBAIC00MTIwLDEwICs0MTIyLDEwIEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICNpZiBERkdfRU5BQkxFKEpJ
VF9BU1NFUlQpCiAgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwogICAgICAgICBH
UFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7Ci0gICAgICAgIG1faml0LmxvYWRQdHIo
bm9kZS5yZWdpc3RlclBvaW50ZXIoKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgIEpJVENvbXBpbGVy
OjpKdW1wIG9rID0gbV9qaXQuYnJhbmNoUHRyKAorICAgICAgICBtX2ppdC5sb2FkNjQobm9kZS5y
ZWdpc3RlclBvaW50ZXIoKSwgc2NyYXRjaEdQUik7CisgICAgICAgIEpJVENvbXBpbGVyOjpKdW1w
IG9rID0gbV9qaXQuYnJhbmNoNjQoCiAgICAgICAgICAgICBKSVRDb21waWxlcjo6RXF1YWwsIHNj
cmF0Y2hHUFIsCi0gICAgICAgICAgICBUcnVzdGVkSW1tUHRyKGJpdHdpc2VfY2FzdDx2b2lkKj4o
SlNWYWx1ZTo6ZW5jb2RlKG5vZGUucmVnaXN0ZXJQb2ludGVyKCktPmdldCgpKSkpKTsKKyAgICAg
ICAgICAgIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUobm9kZS5yZWdpc3RlclBvaW50ZXIo
KS0+Z2V0KCkpKSk7CiAgICAgICAgIG1faml0LmJyZWFrcG9pbnQoKTsKICAgICAgICAgb2subGlu
aygmbV9qaXQpOwogI2VuZGlmCkBAIC00MTUzLDkgKzQxNTUsOSBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRo
aXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwog
ICAgICAgICAKLSAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNDZWxsID0gbV9qaXQuYnJhbmNo
VGVzdFB0cihKSVRDb21waWxlcjo6WmVybywgdmFsdWUuZ3ByKCksIEdQUkluZm86OnRhZ01hc2tS
ZWdpc3Rlcik7CisgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzQ2VsbCA9IG1faml0LmJyYW5j
aFRlc3Q2NChKSVRDb21waWxlcjo6WmVybywgdmFsdWUuZ3ByKCksIEdQUkluZm86OnRhZ01hc2tS
ZWdpc3Rlcik7CiAgICAgICAgIAotICAgICAgICBtX2ppdC5jb21wYXJlUHRyKEpJVENvbXBpbGVy
OjpFcXVhbCwgdmFsdWUuZ3ByKCksIFRydXN0ZWRJbW0zMihWYWx1ZVVuZGVmaW5lZCksIHJlc3Vs
dC5ncHIoKSk7CisgICAgICAgIG1faml0LmNvbXBhcmU2NChKSVRDb21waWxlcjo6RXF1YWwsIHZh
bHVlLmdwcigpLCBUcnVzdGVkSW1tMzIoVmFsdWVVbmRlZmluZWQpLCByZXN1bHQuZ3ByKCkpOwog
ICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOwogICAgICAgICAK
ICAgICAgICAgaXNDZWxsLmxpbmsoJm1faml0KTsKQEAgLTQxOTIsOCArNDE5NCw4IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgR1BSVGVtcG9yYXJ5
IHJlc3VsdCh0aGlzLCB2YWx1ZSk7CiAgICAgICAgIAogICAgICAgICBtX2ppdC5tb3ZlKHZhbHVl
LmdwcigpLCByZXN1bHQuZ3ByKCkpOwotICAgICAgICBtX2ppdC54b3JQdHIoSklUQ29tcGlsZXI6
OlRydXN0ZWRJbW0zMihWYWx1ZUZhbHNlKSwgcmVzdWx0LmdwcigpKTsKLSAgICAgICAgbV9qaXQu
dGVzdFB0cihKSVRDb21waWxlcjo6WmVybywgcmVzdWx0LmdwcigpLCBKSVRDb21waWxlcjo6VHJ1
c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSksIHJlc3VsdC5ncHIoKSk7CisgICAg
ICAgIG1faml0LnhvcjY0KEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tMzIoVmFsdWVGYWxzZSksIHJl
c3VsdC5ncHIoKSk7CisgICAgICAgIG1faml0LnRlc3Q2NChKSVRDb21waWxlcjo6WmVybywgcmVz
dWx0LmdwcigpLCBKSVRDb21waWxlcjo6VHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+
KH4xKSksIHJlc3VsdC5ncHIoKSk7CiAgICAgICAgIG1faml0Lm9yMzIoVHJ1c3RlZEltbTMyKFZh
bHVlRmFsc2UpLCByZXN1bHQuZ3ByKCkpOwogICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5n
cHIoKSwgbV9jb21waWxlSW5kZXgsIERhdGFGb3JtYXRKU0Jvb2xlYW4pOwogICAgICAgICBicmVh
azsKQEAgLTQyMDMsNyArNDIwNSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9k
ZSYgbm9kZSkKICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS5jaGlsZDEo
KSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgdmFsdWUpOwogICAgICAgICAK
LSAgICAgICAgbV9qaXQudGVzdFB0cihKSVRDb21waWxlcjo6Tm9uWmVybywgdmFsdWUuZ3ByKCks
IEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAg
bV9qaXQudGVzdDY0KEpJVENvbXBpbGVyOjpOb25aZXJvLCB2YWx1ZS5ncHIoKSwgR1BSSW5mbzo6
dGFnVHlwZU51bWJlclJlZ2lzdGVyLCByZXN1bHQuZ3ByKCkpOwogICAgICAgICBtX2ppdC5vcjMy
KFRydXN0ZWRJbW0zMihWYWx1ZUZhbHNlKSwgcmVzdWx0LmdwcigpKTsKICAgICAgICAganNWYWx1
ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4LCBEYXRhRm9ybWF0SlNCb29sZWFu
KTsKICAgICAgICAgYnJlYWs7CkBAIC00MjEzLDcgKzQyMTUsNyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRo
aXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIHZh
bHVlKTsKICAgICAgICAgCi0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzTm90Q2VsbCA9IG1f
aml0LmJyYW5jaFRlc3RQdHIoSklUQ29tcGlsZXI6Ok5vblplcm8sIHZhbHVlLmdwcigpLCBHUFJJ
bmZvOjp0YWdNYXNrUmVnaXN0ZXIpOworICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBpc05vdENl
bGwgPSBtX2ppdC5icmFuY2hUZXN0NjQoSklUQ29tcGlsZXI6Ok5vblplcm8sIHZhbHVlLmdwcigp
LCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpOwogICAgICAgICAKICAgICAgICAgbV9qaXQubG9h
ZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyh2YWx1ZS5ncHIoKSwgSlNDZWxsOjpzdHJ1Y3R1cmVP
ZmZzZXQoKSksIHJlc3VsdC5ncHIoKSk7CiAgICAgICAgIG1faml0LmNvbXBhcmU4KEpJVENvbXBp
bGVyOjpFcXVhbCwgSklUQ29tcGlsZXI6OkFkZHJlc3MocmVzdWx0LmdwcigpLCBTdHJ1Y3R1cmU6
OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKFN0cmluZ1R5cGUpLCByZXN1bHQu
Z3ByKCkpOwpAQCAtNDMyMSw3ICs0MzIzLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZShOb2RlJiBub2RlKQogICAgICAgICBtX2ppdC5uZWczMihyZXNvbHZlSW5mb0dQUik7CiAgICAg
ICAgIG1faml0LnNpZ25FeHRlbmQzMlRvUHRyKHJlc29sdmVJbmZvR1BSLCByZXNvbHZlSW5mb0dQ
Uik7CiAgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3MoZ2xvYmFsT2Jq
ZWN0R1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZXN1bHRHUFIpOwotICAgICAg
ICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpCYXNlSW5kZXgocmVzdWx0R1BSLCByZXNvbHZl
SW5mb0dQUiwgSklUQ29tcGlsZXI6OlNjYWxlUHRyLCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAy
KSAqIHN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKEpTVmFsdWUpKSksIHJlc3VsdEdQUik7
CisgICAgICAgIG1faml0LmxvYWQ2NChKSVRDb21waWxlcjo6QmFzZUluZGV4KHJlc3VsdEdQUiwg
cmVzb2x2ZUluZm9HUFIsIEpJVENvbXBpbGVyOjpUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVP
ZmZzZXQgLSAyKSAqIHN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKEpTVmFsdWUpKSksIHJl
c3VsdEdQUik7CiAgICAgICAgIAogICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKICAgICAg
ICAgICAgIHNsb3dQYXRoQ2FsbCgKQEAgLTQzNDQsNyArNDM0Niw3IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgCiAgICAgICAgIG1faml0Lm1vdmUo
dmFsdWVHUFIsIHJlc3VsdEdQUik7CiAgICAgICAgIAotICAgICAgICBKSVRDb21waWxlcjo6SnVt
cCBub3RDcmVhdGVkID0gbV9qaXQuYnJhbmNoVGVzdFB0cihKSVRDb21waWxlcjo6WmVybywgcmVz
dWx0R1BSKTsKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgbm90Q3JlYXRlZCA9IG1faml0LmJy
YW5jaFRlc3Q2NChKSVRDb21waWxlcjo6WmVybywgcmVzdWx0R1BSKTsKICAgICAgICAgCiAgICAg
ICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAogICAgICAgICAgICAgc2xvd1BhdGhDYWxsKG5vdENy
ZWF0ZWQsIHRoaXMsIG9wZXJhdGlvbkNyZWF0ZUFjdGl2YXRpb24sIHJlc3VsdEdQUikpOwpAQCAt
NDM2Miw3ICs0MzY0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2Rl
KQogICAgICAgICAKICAgICAgICAgbV9qaXQubW92ZSh2YWx1ZUdQUiwgcmVzdWx0R1BSKTsKICAg
ICAgICAgCi0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdENyZWF0ZWQgPSBtX2ppdC5icmFu
Y2hUZXN0UHRyKEpJVENvbXBpbGVyOjpaZXJvLCByZXN1bHRHUFIpOworICAgICAgICBKSVRDb21w
aWxlcjo6SnVtcCBub3RDcmVhdGVkID0gbV9qaXQuYnJhbmNoVGVzdDY0KEpJVENvbXBpbGVyOjpa
ZXJvLCByZXN1bHRHUFIpOwogICAgICAgICAKICAgICAgICAgaWYgKG5vZGUuY29kZU9yaWdpbi5p
bmxpbmVDYWxsRnJhbWUpIHsKICAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKApAQCAt
NDM4NiwxNyArNDM4OCwxNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5v
ZGUpCiAgICAgICAgIEdQUlJlZyBhY3RpdmF0aW9uVmFsdWVHUFIgPSBhY3RpdmF0aW9uVmFsdWUu
Z3ByKCk7CiAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKIAotICAg
ICAgICBKSVRDb21waWxlcjo6SnVtcCBub3RDcmVhdGVkID0gbV9qaXQuYnJhbmNoVGVzdFB0cihK
SVRDb21waWxlcjo6WmVybywgYWN0aXZhdGlvblZhbHVlR1BSKTsKKyAgICAgICAgSklUQ29tcGls
ZXI6Okp1bXAgbm90Q3JlYXRlZCA9IG1faml0LmJyYW5jaFRlc3Q2NChKSVRDb21waWxlcjo6WmVy
bywgYWN0aXZhdGlvblZhbHVlR1BSKTsKIAogICAgICAgICBTaGFyZWRTeW1ib2xUYWJsZSogc3lt
Ym9sVGFibGUgPSBtX2ppdC5zeW1ib2xUYWJsZUZvcihub2RlLmNvZGVPcmlnaW4pOwogICAgICAg
ICBpbnQgcmVnaXN0ZXJzT2Zmc2V0ID0gSlNBY3RpdmF0aW9uOjpyZWdpc3RlcnNPZmZzZXQoc3lt
Ym9sVGFibGUpOwogCiAgICAgICAgIGludCBjYXB0dXJlRW5kID0gc3ltYm9sVGFibGUtPmNhcHR1
cmVFbmQoKTsKICAgICAgICAgZm9yIChpbnQgaSA9IHN5bWJvbFRhYmxlLT5jYXB0dXJlU3RhcnQo
KTsgaSA8IGNhcHR1cmVFbmQ7ICsraSkgewotICAgICAgICAgICAgbV9qaXQubG9hZFB0cigKKyAg
ICAgICAgICAgIG1faml0LmxvYWQ2NCgKICAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6QWRk
cmVzcygKICAgICAgICAgICAgICAgICAgICAgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGkg
KiBzaXplb2YoUmVnaXN0ZXIpKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICBtX2ppdC5zdG9y
ZVB0cigKKyAgICAgICAgICAgIG1faml0LnN0b3JlNjQoCiAgICAgICAgICAgICAgICAgc2NyYXRj
aEdQUiwgSklUQ29tcGlsZXI6OkFkZHJlc3MoCiAgICAgICAgICAgICAgICAgICAgIGFjdGl2YXRp
b25WYWx1ZUdQUiwgcmVnaXN0ZXJzT2Zmc2V0ICsgaSAqIHNpemVvZihSZWdpc3RlcikpKTsKICAg
ICAgICAgfQpAQCAtNDQxNCw3ICs0NDE2LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZShOb2RlJiBub2RlKQogICAgICAgICBHUFJSZWcgdW5tb2RpZmllZEFyZ3VtZW50c1ZhbHVlR1BS
ID0gdW5tb2RpZmllZEFyZ3VtZW50c1ZhbHVlLmdwcigpOwogICAgICAgICBHUFJSZWcgYWN0aXZh
dGlvblZhbHVlR1BSID0gYWN0aXZhdGlvblZhbHVlLmdwcigpOwogCi0gICAgICAgIEpJVENvbXBp
bGVyOjpKdW1wIGNyZWF0ZWQgPSBtX2ppdC5icmFuY2hUZXN0UHRyKEpJVENvbXBpbGVyOjpOb25a
ZXJvLCB1bm1vZGlmaWVkQXJndW1lbnRzVmFsdWVHUFIpOworICAgICAgICBKSVRDb21waWxlcjo6
SnVtcCBjcmVhdGVkID0gbV9qaXQuYnJhbmNoVGVzdDY0KEpJVENvbXBpbGVyOjpOb25aZXJvLCB1
bm1vZGlmaWVkQXJndW1lbnRzVmFsdWVHUFIpOwogCiAgICAgICAgIGlmIChub2RlLmNvZGVPcmln
aW4uaW5saW5lQ2FsbEZyYW1lKSB7CiAgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigK
QEAgLTQ0NDAsNyArNDQ0Miw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYg
bm9kZSkKICAgICAgICAgICAgICAgICAgICAgbV9qaXQuZ3JhcGgoKS5hcmd1bWVudHNSZWdpc3Rl
ckZvcihub2RlLmNvZGVPcmlnaW4pKS5tX3R5cGUpKSB7CiAgICAgICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKAogICAgICAgICAgICAgICAgIEFyZ3VtZW50c0VzY2FwZWQsIEpTVmFsdWVSZWdzKCks
IE5vTm9kZSwKLSAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0UHRyKAorICAgICAgICAg
ICAgICAgIG1faml0LmJyYW5jaFRlc3Q2NCgKICAgICAgICAgICAgICAgICAgICAgSklUQ29tcGls
ZXI6Ok5vblplcm8sCiAgICAgICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjphZGRyZXNzRm9y
KAogICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQuYXJndW1lbnRzUmVnaXN0ZXJGb3Iobm9k
ZS5jb2RlT3JpZ2luKSkpKTsKQEAgLTQ0NTcsMjIgKzQ0NTksMTkgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRo
aXMpOwogICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwogICAgICAgICAK
LSAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgY3JlYXRlZCA9IG1faml0LmJyYW5jaFRlc3RQdHIo
CisgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGNyZWF0ZWQgPSBtX2ppdC5icmFuY2hUZXN0NjQo
CiAgICAgICAgICAgICBKSVRDb21waWxlcjo6Tm9uWmVybywKICAgICAgICAgICAgIEpJVENvbXBp
bGVyOjphZGRyZXNzRm9yKAogICAgICAgICAgICAgICAgIG1faml0LmFyZ3VtZW50c1JlZ2lzdGVy
Rm9yKG5vZGUuY29kZU9yaWdpbikpKTsKICAgICAgICAgCiAgICAgICAgIGlmIChub2RlLmNvZGVP
cmlnaW4uaW5saW5lQ2FsbEZyYW1lKSB7CiAgICAgICAgICAgICBtX2ppdC5tb3ZlKAotICAgICAg
ICAgICAgICAgIEltbVB0cigKLSAgICAgICAgICAgICAgICAgICAgYml0d2lzZV9jYXN0PHZvaWQq
PigKLSAgICAgICAgICAgICAgICAgICAgICAgIEpTVmFsdWU6OmVuY29kZSgKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBqc051bWJlcihub2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1l
LT5hcmd1bWVudHMuc2l6ZSgpIC0gMSkpKSksCisgICAgICAgICAgICAgICAgSW1tNjQoSlNWYWx1
ZTo6ZW5jb2RlKGpzTnVtYmVyKG5vZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmFyZ3Vt
ZW50cy5zaXplKCkgLSAxKSkpLAogICAgICAgICAgICAgICAgIHJlc3VsdEdQUik7CiAgICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OnBheWxvYWRG
b3IoSlNTdGFjazo6QXJndW1lbnRDb3VudCksIHJlc3VsdEdQUik7CiAgICAgICAgICAgICBtX2pp
dC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlc3VsdEdQUik7Ci0gICAgICAgICAgICBtX2ppdC5v
clB0cihHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHJlc3VsdEdQUik7CisgICAgICAg
ICAgICBtX2ppdC5vcjY0KEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgcmVzdWx0R1BS
KTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgLy8gRklYTUU6IHRoZSBzbG93IHBhdGgg
Z2VuZXJhdG9yIHNob3VsZCBwZXJmb3JtIGEgZm9yd2FyZCBzcGVjdWxhdGlvbiB0aGF0IHRoZQpA
QCAtNDQ5OSw3ICs0NDk4LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBu
b2RlKQogICAgICAgICAgICAgICAgICAgICBtX2ppdC5ncmFwaCgpLmFyZ3VtZW50c1JlZ2lzdGVy
Rm9yKG5vZGUuY29kZU9yaWdpbikpLm1fdHlwZSkpIHsKICAgICAgICAgICAgIHNwZWN1bGF0aW9u
Q2hlY2soCiAgICAgICAgICAgICAgICAgQXJndW1lbnRzRXNjYXBlZCwgSlNWYWx1ZVJlZ3MoKSwg
Tm9Ob2RlLAotICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3RQdHIoCisgICAgICAgICAg
ICAgICAgbV9qaXQuYnJhbmNoVGVzdDY0KAogICAgICAgICAgICAgICAgICAgICBKSVRDb21waWxl
cjo6Tm9uWmVybywKICAgICAgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Io
CiAgICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5hcmd1bWVudHNSZWdpc3RlckZvcihub2Rl
LmNvZGVPcmlnaW4pKSkpOwpAQCAtNDUzOCw3ICs0NTM3LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgICAgICAgICBPQkpFQ1RfT0ZGU0VU
T0YoU2xvd0FyZ3VtZW50LCBpbmRleCkpLCAKICAgICAgICAgICAgICAgICByZXN1bHRHUFIpOwog
ICAgICAgICAgICAgbV9qaXQuc2lnbkV4dGVuZDMyVG9QdHIocmVzdWx0R1BSLCByZXN1bHRHUFIp
OwotICAgICAgICAgICAgbV9qaXQubG9hZFB0cigKKyAgICAgICAgICAgIG1faml0LmxvYWQ2NCgK
ICAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6QmFzZUluZGV4KAogICAgICAgICAgICAgICAg
ICAgICBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgcmVzdWx0R1BSLCBKSVRDb21waWxlcjo6
VGltZXNFaWdodCwgbV9qaXQub2Zmc2V0T2ZMb2NhbHMobm9kZS5jb2RlT3JpZ2luKSksCiAgICAg
ICAgICAgICAgICAgcmVzdWx0R1BSKTsKQEAgLTQ1NDksNyArNDU0OCw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgbV9qaXQubmVnMzIocmVzdWx0
R1BSKTsKICAgICAgICAgbV9qaXQuc2lnbkV4dGVuZDMyVG9QdHIocmVzdWx0R1BSLCByZXN1bHRH
UFIpOwogICAgICAgICAgICAgCi0gICAgICAgIG1faml0LmxvYWRQdHIoCisgICAgICAgIG1faml0
LmxvYWQ2NCgKICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpCYXNlSW5kZXgoCiAgICAgICAgICAg
ICAgICAgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHJlc3VsdEdQUiwgSklUQ29tcGlsZXI6
OlRpbWVzRWlnaHQsIG1faml0Lm9mZnNldE9mQXJndW1lbnRzSW5jbHVkaW5nVGhpcyhub2RlLmNv
ZGVPcmlnaW4pKSwKICAgICAgICAgICAgIHJlc3VsdEdQUik7CkBAIC00NTY3LDcgKzQ1NjYsNyBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIAogICAg
ICAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2xvd1BhdGg7CiAgICAgICAgIHNsb3dQYXRoLmFw
cGVuZCgKLSAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3RQdHIoCisgICAgICAgICAgICBtX2pp
dC5icmFuY2hUZXN0NjQoCiAgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6Ok5vblplcm8sCiAg
ICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3IoCiAgICAgICAgICAgICAgICAg
ICAgIG1faml0LmFyZ3VtZW50c1JlZ2lzdGVyRm9yKG5vZGUuY29kZU9yaWdpbikpKSk7CkBAIC00
NjAzLDcgKzQ2MDIsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUp
CiAgICAgICAgICAgICAgICAgICAgIE9CSkVDVF9PRkZTRVRPRihTbG93QXJndW1lbnQsIGluZGV4
KSksIAogICAgICAgICAgICAgICAgIHJlc3VsdEdQUik7CiAgICAgICAgICAgICBtX2ppdC5zaWdu
RXh0ZW5kMzJUb1B0cihyZXN1bHRHUFIsIHJlc3VsdEdQUik7Ci0gICAgICAgICAgICBtX2ppdC5s
b2FkUHRyKAorICAgICAgICAgICAgbV9qaXQubG9hZDY0KAogICAgICAgICAgICAgICAgIEpJVENv
bXBpbGVyOjpCYXNlSW5kZXgoCiAgICAgICAgICAgICAgICAgICAgIEdQUkluZm86OmNhbGxGcmFt
ZVJlZ2lzdGVyLCByZXN1bHRHUFIsIEpJVENvbXBpbGVyOjpUaW1lc0VpZ2h0LCBtX2ppdC5vZmZz
ZXRPZkxvY2Fscyhub2RlLmNvZGVPcmlnaW4pKSwKICAgICAgICAgICAgICAgICByZXN1bHRHUFIp
OwpAQCAtNDYxNCw3ICs0NjEzLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2Rl
JiBub2RlKQogICAgICAgICBtX2ppdC5uZWczMihyZXN1bHRHUFIpOwogICAgICAgICBtX2ppdC5z
aWduRXh0ZW5kMzJUb1B0cihyZXN1bHRHUFIsIHJlc3VsdEdQUik7CiAgICAgICAgIAotICAgICAg
ICBtX2ppdC5sb2FkUHRyKAorICAgICAgICBtX2ppdC5sb2FkNjQoCiAgICAgICAgICAgICBKSVRD
b21waWxlcjo6QmFzZUluZGV4KAogICAgICAgICAgICAgICAgIEdQUkluZm86OmNhbGxGcmFtZVJl
Z2lzdGVyLCByZXN1bHRHUFIsIEpJVENvbXBpbGVyOjpUaW1lc0VpZ2h0LCBtX2ppdC5vZmZzZXRP
ZkFyZ3VtZW50c0luY2x1ZGluZ1RoaXMobm9kZS5jb2RlT3JpZ2luKSksCiAgICAgICAgICAgICBy
ZXN1bHRHUFIpOwpAQCAtNDY0NSw3ICs0NjQ0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgICAgIG1faml0LmdyYXBoKCkuYXJndW1lbnRz
UmVnaXN0ZXJGb3Iobm9kZS5jb2RlT3JpZ2luKSkubV90eXBlKSk7CiAgICAgICAgIHNwZWN1bGF0
aW9uQ2hlY2soCiAgICAgICAgICAgICBBcmd1bWVudHNFc2NhcGVkLCBKU1ZhbHVlUmVncygpLCBO
b05vZGUsCi0gICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0UHRyKAorICAgICAgICAgICAgbV9q
aXQuYnJhbmNoVGVzdDY0KAogICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpOb25aZXJvLAog
ICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKAogICAgICAgICAgICAgICAg
ICAgICBtX2ppdC5hcmd1bWVudHNSZWdpc3RlckZvcihub2RlLmNvZGVPcmlnaW4pKSkpOwpAQCAt
NDY2Niw3ICs0NjY1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2Rl
KQogICAgICAgICAKICAgICAgICAgbV9qaXQubW92ZSh2YWx1ZUdQUiwgcmVzdWx0R1BSKTsKICAg
ICAgICAgCi0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdENyZWF0ZWQgPSBtX2ppdC5icmFu
Y2hUZXN0UHRyKEpJVENvbXBpbGVyOjpaZXJvLCByZXN1bHRHUFIpOworICAgICAgICBKSVRDb21w
aWxlcjo6SnVtcCBub3RDcmVhdGVkID0gbV9qaXQuYnJhbmNoVGVzdDY0KEpJVENvbXBpbGVyOjpa
ZXJvLCByZXN1bHRHUFIpOwogICAgICAgICAKICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Io
CiAgICAgICAgICAgICBzbG93UGF0aENhbGwoCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMTMxMTYyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE2NjUsMTQgKzE2NjUsMTQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2hlY2tBcmd1
bWVudFR5cGVzKAogICAgICAgICAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICBpZiAoaXNJ
bnQzMlNwZWN1bGF0aW9uKHByZWRpY3RlZFR5cGUpKQotICAgICAgICAgICAgc3BlY3VsYXRpb25D
aGVjayhCYWRUeXBlLCB2YWx1ZVNvdXJjZSwgbm9kZUluZGV4LCBtX2ppdC5icmFuY2hQdHIoTWFj
cm9Bc3NlbWJsZXI6OkJlbG93LCBKSVRDb21waWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0
ZXIpLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsKKyAgICAgICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2soQmFkVHlwZSwgdmFsdWVTb3VyY2UsIG5vZGVJbmRleCwgbV9qaXQuYnJhbmNo
NjQoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBKSVRDb21waWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFs
UmVnaXN0ZXIpLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsKICAgICAgICAgZWxz
ZSBpZiAoaXNCb29sZWFuU3BlY3VsYXRpb24ocHJlZGljdGVkVHlwZSkpIHsKICAgICAgICAgICAg
IEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOwotICAgICAgICAgICAgbV9qaXQubG9hZFB0cihKSVRD
b21waWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCB0ZW1wLmdwcigpKTsKLSAgICAg
ICAgICAgIG1faml0LnhvclB0cihUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oVmFs
dWVGYWxzZSkpLCB0ZW1wLmdwcigpKTsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFk
VHlwZSwgdmFsdWVTb3VyY2UsIG5vZGVJbmRleCwgbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fz
c2VtYmxlcjo6Tm9uWmVybywgdGVtcC5ncHIoKSwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGlu
dDMyX3Q+KH4xKSkpKTsKKyAgICAgICAgICAgIG1faml0LmxvYWQ2NChKSVRDb21waWxlcjo6YWRk
cmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCB0ZW1wLmdwcigpKTsKKyAgICAgICAgICAgIG1faml0
LnhvcjY0KFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90PihWYWx1ZUZhbHNlKSksIHRl
bXAuZ3ByKCkpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCB2YWx1ZVNv
dXJjZSwgbm9kZUluZGV4LCBtX2ppdC5icmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Ok5vblpl
cm8sIHRlbXAuZ3ByKCksIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpKSk7
CiAgICAgICAgIH0gZWxzZSBpZiAoaXNDZWxsU3BlY3VsYXRpb24ocHJlZGljdGVkVHlwZSkpCi0g
ICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIHZhbHVlU291cmNlLCBub2RlSW5k
ZXgsIG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIEpJVENvbXBp
bGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIEdQUkluZm86OnRhZ01hc2tSZWdpc3Rl
cikpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCB2YWx1ZVNvdXJjZSwg
bm9kZUluZGV4LCBtX2ppdC5icmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIEpJ
VENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIEdQUkluZm86OnRhZ01hc2tS
ZWdpc3RlcikpOwogI2Vsc2UKICAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihwcmVkaWN0
ZWRUeXBlKSkKICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgdmFsdWVTb3Vy
Y2UsIG5vZGVJbmRleCwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBK
SVRDb21waWxlcjo6dGFnRm9yKHZpcnR1YWxSZWdpc3RlciksIFRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpJbnQzMlRhZykpKTsKQEAgLTE5MzIsMTAgKzE5MzIsMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZVZhbHVlVG9JbnQzMgogICAgICAgICAgICAgRlBSVGVtcG9yYXJ5IHRlbXBGcHIo
dGhpcyk7CiAgICAgICAgICAgICBGUFJSZWcgZnByID0gdGVtcEZwci5mcHIoKTsKIAotICAgICAg
ICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNJbnRlZ2VyID0gbV9qaXQuYnJhbmNoUHRyKE1hY3Jv
QXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIGdwciwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lz
dGVyKTsKKyAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzSW50ZWdlciA9IG1faml0LmJy
YW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIGdwciwgR1BSSW5mbzo6dGFnVHlw
ZU51bWJlclJlZ2lzdGVyKTsKIAogICAgICAgICAgICAgaWYgKCFpc051bWJlclNwZWN1bGF0aW9u
KG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKQotICAgICAgICAgICAgICAg
IHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3MoZ3ByKSwgbm9kZS5jaGlsZDEo
KS5pbmRleCgpLCBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBncHIs
IEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlcikpOworICAgICAgICAgICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3MoZ3ByKSwgbm9kZS5jaGlsZDEoKS5pbmRl
eCgpLCBtX2ppdC5icmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIGdwciwgR1BSSW5m
bzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSk7CiAKICAgICAgICAgICAgIC8vIEZpcnN0LCBpZiB3
ZSBnZXQgaGVyZSB3ZSBoYXZlIGEgZG91YmxlIGVuY29kZWQgYXMgYSBKU1ZhbHVlCiAgICAgICAg
ICAgICBtX2ppdC5tb3ZlKGdwciwgcmVzdWx0R3ByKTsKQEAgLTIwNzgsOCArMjA3OCw4IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVJbnQzMlRvRG91YmwKICAgICAgICAgQVNTRVJUKGlz
SW50MzJDb25zdGFudChub2RlLmNoaWxkMSgpLmluZGV4KCkpKTsKICAgICAgICAgRlBSVGVtcG9y
YXJ5IHJlc3VsdCh0aGlzKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7Ci0gICAg
ICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OkltbVB0cihyZWludGVycHJldF9jYXN0PHZv
aWQqPihyZWludGVycHJldERvdWJsZVRvSW50cHRyKHZhbHVlT2ZOdW1iZXJDb25zdGFudChub2Rl
LmNoaWxkMSgpLmluZGV4KCkpKSkpLCB0ZW1wLmdwcigpKTsKLSAgICAgICAgbV9qaXQubW92ZVB0
clRvRG91YmxlKHRlbXAuZ3ByKCksIHJlc3VsdC5mcHIoKSk7CisgICAgICAgIG1faml0Lm1vdmUo
TWFjcm9Bc3NlbWJsZXI6OkltbTY0KHJlaW50ZXJwcmV0RG91YmxlVG9JbnQ2NCh2YWx1ZU9mTnVt
YmVyQ29uc3RhbnQobm9kZS5jaGlsZDEoKS5pbmRleCgpKSkpLCB0ZW1wLmdwcigpKTsKKyAgICAg
ICAgbV9qaXQubW92ZTY0VG9Eb3VibGUodGVtcC5ncHIoKSwgcmVzdWx0LmZwcigpKTsKICAgICAg
ICAgZG91YmxlUmVzdWx0KHJlc3VsdC5mcHIoKSwgbV9jb21waWxlSW5kZXgpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQpAQCAtMjEwMywxMyArMjEwMywxMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlSW50MzJUb0RvdWJsCiAgICAgR1BSUmVnIHRlbXBHUFIgPSB0ZW1wLmdwcigpOwog
ICAgIEZQUlJlZyByZXN1bHRGUFIgPSByZXN1bHQuZnByKCk7CiAgICAgCi0gICAgSklUQ29tcGls
ZXI6Okp1bXAgaXNJbnRlZ2VyID0gbV9qaXQuYnJhbmNoUHRyKAorICAgIEpJVENvbXBpbGVyOjpK
dW1wIGlzSW50ZWdlciA9IG1faml0LmJyYW5jaDY0KAogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
QWJvdmVPckVxdWFsLCBvcDFHUFIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7CiAg
ICAgCiAgICAgaWYgKCFpc051bWJlclNwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNo
aWxkMSgpKS5tX3R5cGUpKSB7CiAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCiAgICAgICAgICAg
ICBCYWRUeXBlLCBKU1ZhbHVlUmVncyhvcDFHUFIpLCBub2RlLmNoaWxkMSgpLAotICAgICAgICAg
ICAgbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVybywgb3AxR1BSLCBHUFJJ
bmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsKKyAgICAgICAgICAgIG1faml0LmJyYW5jaFRl
c3Q2NChNYWNyb0Fzc2VtYmxlcjo6WmVybywgb3AxR1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVy
UmVnaXN0ZXIpKTsKICAgICB9CiAgICAgCiAgICAgbV9qaXQubW92ZShvcDFHUFIsIHRlbXBHUFIp
OwpAQCAtMjQzOSwyMCArMjQzOSwxOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlSW5z
dGFuY2VPZkZvCiAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGxvb3AoJm1faml0KTsKICAgICBt
X2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hSZWcsIEpTQ2VsbDo6
c3RydWN0dXJlT2Zmc2V0KCkpLCBzY3JhdGNoUmVnKTsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAg
IG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaFJlZywgU3RydWN0
dXJlOjpwcm90b3R5cGVPZmZzZXQoKSksIHNjcmF0Y2hSZWcpOworICAgIG1faml0LmxvYWQ2NChN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoUmVnLCBTdHJ1Y3R1cmU6OnByb3RvdHlwZU9m
ZnNldCgpKSwgc2NyYXRjaFJlZyk7CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgaXNJbnN0YW5j
ZSA9IG1faml0LmJyYW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgc2NyYXRjaFJlZywgcHJv
dG90eXBlUmVnKTsKKyAgICBtX2ppdC5icmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Olplcm8s
IHNjcmF0Y2hSZWcsIEdQUkluZm86OnRhZ01hc2tSZWdpc3RlcikubGlua1RvKGxvb3AsICZtX2pp
dCk7CiAjZWxzZQogICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3Jh
dGNoUmVnLCBTdHJ1Y3R1cmU6OnByb3RvdHlwZU9mZnNldCgpICsgT0JKRUNUX09GRlNFVE9GKEpT
VmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwgc2NyYXRjaFJlZyk7Ci0jZW5kaWYKICAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcCBpc0luc3RhbmNlID0gbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1i
bGVyOjpFcXVhbCwgc2NyYXRjaFJlZywgcHJvdG90eXBlUmVnKTsKLSNpZiBVU0UoSlNWQUxVRTY0
KQotICAgIG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHNjcmF0Y2hS
ZWcsIEdQUkluZm86OnRhZ01hc2tSZWdpc3RlcikubGlua1RvKGxvb3AsICZtX2ppdCk7Ci0jZWxz
ZQogICAgIG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgc2NyYXRj
aFJlZykubGlua1RvKGxvb3AsICZtX2ppdCk7CiAjZW5kaWYKICAgICAKICAgICAvLyBObyBtYXRj
aCAtIHJlc3VsdCBpcyBmYWxzZS4KICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIG1faml0Lm1vdmUo
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihm
YWxzZSkpKSwgc2NyYXRjaFJlZyk7CisgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oZmFsc2UpKSksIHNjcmF0Y2hSZWcp
OwogI2Vsc2UKICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMCks
IHNjcmF0Y2hSZWcpOwogI2VuZGlmCkBAIC0yNDYwLDcgKzI0NTgsNyBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlSW5zdGFuY2VPZkZvCiAgICAgCiAgICAgaXNJbnN0YW5jZS5saW5rKCZt
X2ppdCk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tUHRyKEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkpKSwgc2NyYXRj
aFJlZyk7CisgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KEpTVmFs
dWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkpKSwgc2NyYXRjaFJlZyk7CiAjZWxzZQogICAgIG1f
aml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigxKSwgc2NyYXRjaFJlZyk7CiAj
ZW5kaWYKQEAgLTI0ODYsOCArMjQ4NCw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVJ
bnN0YW5jZU9mKE4KICAgICAgICAgCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAgR1BSUmVn
IHZhbHVlUmVnID0gdmFsdWUuZ3ByKCk7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGlz
Q2VsbCA9IG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHZhbHVlUmVn
LCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpOwotICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tUHRyKEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oZmFsc2UpKSks
IHNjcmF0Y2hSZWcpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBpc0NlbGwgPSBtX2pp
dC5icmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHZhbHVlUmVnLCBHUFJJbmZvOjp0
YWdNYXNrUmVnaXN0ZXIpOworICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihmYWxzZSkpKSwgc2NyYXRjaFJlZyk7
CiAjZWxzZQogICAgICAgICBHUFJSZWcgdmFsdWVUYWdSZWcgPSB2YWx1ZS50YWdHUFIoKTsKICAg
ICAgICAgR1BSUmVnIHZhbHVlUmVnID0gdmFsdWUucGF5bG9hZEdQUigpOwpAQCAtMzA1MCw3ICsz
MDQ4LDcgQEAgYm9vbCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVN0cmljdEVxRm9yQwogICAgICAg
ICB9CiAKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICBicmFuY2hQdHIoY29uZGl0aW9uLCBv
cDEuZ3ByKCksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGJpdHdpc2VfY2FzdDx2b2lk
Kj4oSlNWYWx1ZTo6ZW5jb2RlKGNvbnN0YW50KSkpLCB0YWtlbik7CisgICAgICAgIGJyYW5jaDY0
KGNvbmRpdGlvbiwgb3AxLmdwcigpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KEpTVmFs
dWU6OmVuY29kZShjb25zdGFudCkpLCB0YWtlbik7CiAjZWxzZQogICAgICAgICBHUFJSZWcgcGF5
bG9hZEdQUiA9IG9wMS5wYXlsb2FkR1BSKCk7CiAgICAgICAgIEdQUlJlZyB0YWdHUFIgPSBvcDEu
dGFnR1BSKCk7CkBAIC0zMDgwLDggKzMwNzgsOCBAQCBib29sIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlU3RyaWN0RXFGb3JDCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBHUFJSZWcgb3AxR1BSID0g
b3AxLmdwcigpOwogICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7Ci0gICAgbV9q
aXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihiaXR3aXNlX2Nhc3Q8dm9pZCo+
KFZhbHVlRmFsc2UpKSwgcmVzdWx0R1BSKTsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub3RF
cXVhbCA9IG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIG9wMUdQUiwg
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoYml0d2lzZV9jYXN0PHZvaWQqPihKU1ZhbHVl
OjplbmNvZGUoY29uc3RhbnQpKSkpOworICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW02NChWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6
SnVtcCBub3RFcXVhbCA9IG1faml0LmJyYW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwg
b3AxR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShjb25z
dGFudCkpKTsKICAgICBtX2ppdC5vcjMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMSks
IHJlc3VsdEdQUik7CiAgICAgbm90RXF1YWwubGluaygmbV9qaXQpOwogICAgIGpzVmFsdWVSZXN1
bHQocmVzdWx0R1BSLCBtX2NvbXBpbGVJbmRleCwgRGF0YUZvcm1hdEpTQm9vbGVhbik7CkBAIC0z
MjYxLDcgKzMyNTksNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkFy
CiAgICAgICAgIHJlc3VsdFJlZyk7CiAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRUYWdSZWcsIHJl
c3VsdFJlZywgbV9jb21waWxlSW5kZXgpOwogI2Vsc2UKLSAgICBtX2ppdC5sb2FkUHRyKAorICAg
IG1faml0LmxvYWQ2NCgKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleCgKICAgICAg
ICAgICAgIHNjcmF0Y2hSZWcsIHJlc3VsdFJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQs
CiAgICAgICAgICAgICBDYWxsRnJhbWU6OnRoaXNBcmd1bWVudE9mZnNldCgpICogc2l6ZW9mKFJl
Z2lzdGVyKSAtIHNpemVvZihSZWdpc3RlcikpLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24gMTMxMTYyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBA
IC03MSw2ICs3MSw4IEBAIHByaXZhdGU6CiAgICAgdHlwZWRlZiBKSVRDb21waWxlcjo6SW1tMzIg
SW1tMzI7CiAgICAgdHlwZWRlZiBKSVRDb21waWxlcjo6VHJ1c3RlZEltbVB0ciBUcnVzdGVkSW1t
UHRyOwogICAgIHR5cGVkZWYgSklUQ29tcGlsZXI6OkltbVB0ciBJbW1QdHI7CisgICAgdHlwZWRl
ZiBKSVRDb21waWxlcjo6VHJ1c3RlZEltbTY0IFRydXN0ZWRJbW02NDsKKyAgICB0eXBlZGVmIEpJ
VENvbXBpbGVyOjpJbW02NCBJbW02NDsKIAogICAgIC8vIFRoZXNlIGNvbnN0YW50cyBhcmUgdXNl
ZCB0byBzZXQgcHJpb3JpdGllcyBmb3Igc3BpbGwgb3JkZXIgZm9yCiAgICAgLy8gdGhlIHJlZ2lz
dGVyIGFsbG9jYXRvci4KQEAgLTM0Nyw5ICszNDksMTEgQEAgcHVibGljOgogICAgICAgICAgICAg
QVNTRVJUKGluZm8uZ3ByKCkgPT0gc291cmNlKTsKICAgICAgICAgICAgIGlmIChyZWdpc3RlckZv
cm1hdCA9PSBEYXRhRm9ybWF0SW50ZWdlcikKICAgICAgICAgICAgICAgICBzcGlsbEFjdGlvbiA9
IFN0b3JlMzJQYXlsb2FkOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgQVNT
RVJUKHJlZ2lzdGVyRm9ybWF0ICYgRGF0YUZvcm1hdEpTIHx8IHJlZ2lzdGVyRm9ybWF0ID09IERh
dGFGb3JtYXRDZWxsIHx8IHJlZ2lzdGVyRm9ybWF0ID09IERhdGFGb3JtYXRTdG9yYWdlKTsKKyAg
ICAgICAgICAgIGVsc2UgaWYgKHJlZ2lzdGVyRm9ybWF0ID09IERhdGFGb3JtYXRDZWxsIHx8IHJl
Z2lzdGVyRm9ybWF0ID09IERhdGFGb3JtYXRTdG9yYWdlKQogICAgICAgICAgICAgICAgIHNwaWxs
QWN0aW9uID0gU3RvcmVQdHI7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBB
U1NFUlQocmVnaXN0ZXJGb3JtYXQgJiBEYXRhRm9ybWF0SlMpOworICAgICAgICAgICAgICAgIHNw
aWxsQWN0aW9uID0gU3RvcmU2NDsKICAgICAgICAgICAgIH0KICNlbGlmIFVTRShKU1ZBTFVFMzJf
NjQpCiAgICAgICAgICAgICBpZiAocmVnaXN0ZXJGb3JtYXQgJiBEYXRhRm9ybWF0SlMpIHsKQEAg
LTQxNCw3ICs0MTgsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgQVNTRVJUKHJlZ2lzdGVy
Rm9ybWF0ID09IERhdGFGb3JtYXRKU0RvdWJsZSk7CiAgICAgICAgICAgICAgICAgZmlsbEFjdGlv
biA9IExvYWREb3VibGVCb3hEb3VibGU7CiAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAg
ICAgICBmaWxsQWN0aW9uID0gTG9hZFB0cjsKKyAgICAgICAgICAgICAgICBmaWxsQWN0aW9uID0g
TG9hZDY0OwogI2Vsc2UKICAgICAgICAgICAgIEFTU0VSVChpbmZvLnRhZ0dQUigpID09IHNvdXJj
ZSB8fCBpbmZvLnBheWxvYWRHUFIoKSA9PSBzb3VyY2UpOwogICAgICAgICAgICAgaWYgKG5vZGUu
aGFzQ29uc3RhbnQoKSkKQEAgLTUwMSw2ICs1MDUsMTEgQEAgcHVibGljOgogICAgICAgICBjYXNl
IFN0b3JlUHRyOgogICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIocGxhbi5ncHIoKSwgSklUQ29t
cGlsZXI6OmFkZHJlc3NGb3IoYXQocGxhbi5ub2RlSW5kZXgoKSkudmlydHVhbFJlZ2lzdGVyKCkp
KTsKICAgICAgICAgICAgIGJyZWFrOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIGNhc2Ug
U3RvcmU2NDoKKyAgICAgICAgICAgIG1faml0LnN0b3JlNjQocGxhbi5ncHIoKSwgSklUQ29tcGls
ZXI6OmFkZHJlc3NGb3IoYXQocGxhbi5ub2RlSW5kZXgoKSkudmlydHVhbFJlZ2lzdGVyKCkpKTsK
KyAgICAgICAgICAgIGJyZWFrOworI2VuZGlmCiAgICAgICAgIGNhc2UgU3RvcmVEb3VibGU6CiAg
ICAgICAgICAgICBtX2ppdC5zdG9yZURvdWJsZShwbGFuLmZwcigpLCBKSVRDb21waWxlcjo6YWRk
cmVzc0ZvcihhdChwbGFuLm5vZGVJbmRleCgpKS52aXJ0dWFsUmVnaXN0ZXIoKSkpOwogICAgICAg
ICAgICAgYnJlYWs7CkBAIC01MjgsMjUgKzUzNywyNSBAQCBwdWJsaWM6CiAgICAgICAgICAgICBi
cmVhazsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICBjYXNlIFNldFRydXN0ZWRKU0NvbnN0
YW50OgotICAgICAgICAgICAgbV9qaXQubW92ZSh2YWx1ZU9mSlNDb25zdGFudEFzSW1tUHRyKHBs
YW4ubm9kZUluZGV4KCkpLmFzVHJ1c3RlZEltbVB0cigpLCBwbGFuLmdwcigpKTsKKyAgICAgICAg
ICAgIG1faml0Lm1vdmUodmFsdWVPZkpTQ29uc3RhbnRBc0ltbTY0KHBsYW4ubm9kZUluZGV4KCkp
LmFzVHJ1c3RlZEltbTY0KCksIHBsYW4uZ3ByKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIGNhc2UgU2V0SlNDb25zdGFudDoKLSAgICAgICAgICAgIG1faml0Lm1vdmUodmFsdWVPZkpT
Q29uc3RhbnRBc0ltbVB0cihwbGFuLm5vZGVJbmRleCgpKSwgcGxhbi5ncHIoKSk7CisgICAgICAg
ICAgICBtX2ppdC5tb3ZlKHZhbHVlT2ZKU0NvbnN0YW50QXNJbW02NChwbGFuLm5vZGVJbmRleCgp
KSwgcGxhbi5ncHIoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBTZXREb3Vi
bGVDb25zdGFudDoKLSAgICAgICAgICAgIG1faml0Lm1vdmUoSW1tUHRyKGJpdHdpc2VfY2FzdDx2
b2lkKj4odmFsdWVPZk51bWJlckNvbnN0YW50KHBsYW4ubm9kZUluZGV4KCkpKSksIGNhblRyYW1w
bGUpOwotICAgICAgICAgICAgbV9qaXQubW92ZVB0clRvRG91YmxlKGNhblRyYW1wbGUsIHBsYW4u
ZnByKCkpOworICAgICAgICAgICAgbV9qaXQubW92ZShJbW02NCh2YWx1ZU9mTnVtYmVyQ29uc3Rh
bnQocGxhbi5ub2RlSW5kZXgoKSkpLCBjYW5UcmFtcGxlKTsKKyAgICAgICAgICAgIG1faml0Lm1v
dmU2NFRvRG91YmxlKGNhblRyYW1wbGUsIHBsYW4uZnByKCkpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgTG9hZDMyUGF5bG9hZEJveEludDoKICAgICAgICAgICAgIG1faml0Lmxv
YWQzMihKSVRDb21waWxlcjo6cGF5bG9hZEZvcihhdChwbGFuLm5vZGVJbmRleCgpKS52aXJ0dWFs
UmVnaXN0ZXIoKSksIHBsYW4uZ3ByKCkpOwotICAgICAgICAgICAgbV9qaXQub3JQdHIoR1BSSW5m
bzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBwbGFuLmdwcigpKTsKKyAgICAgICAgICAgIG1faml0
Lm9yNjQoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBwbGFuLmdwcigpKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIExvYWREb3VibGVCb3hEb3VibGU6Ci0gICAgICAg
ICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKGF0KHBsYW4ubm9kZUlu
ZGV4KCkpLnZpcnR1YWxSZWdpc3RlcigpKSwgcGxhbi5ncHIoKSk7Ci0gICAgICAgICAgICBtX2pp
dC5zdWJQdHIoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBwbGFuLmdwcigpKTsKKyAg
ICAgICAgICAgIG1faml0LmxvYWQ2NChKSVRDb21waWxlcjo6YWRkcmVzc0ZvcihhdChwbGFuLm5v
ZGVJbmRleCgpKS52aXJ0dWFsUmVnaXN0ZXIoKSksIHBsYW4uZ3ByKCkpOworICAgICAgICAgICAg
bV9qaXQuc3ViNjQoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBwbGFuLmdwcigpKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIExvYWRKU1VuYm94RG91YmxlOgotICAg
ICAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6YWRkcmVzc0ZvcihhdChwbGFuLm5v
ZGVJbmRleCgpKS52aXJ0dWFsUmVnaXN0ZXIoKSksIGNhblRyYW1wbGUpOworICAgICAgICAgICAg
bV9qaXQubG9hZDY0KEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKGF0KHBsYW4ubm9kZUluZGV4KCkp
LnZpcnR1YWxSZWdpc3RlcigpKSwgY2FuVHJhbXBsZSk7CiAgICAgICAgICAgICB1bmJveERvdWJs
ZShjYW5UcmFtcGxlLCBwbGFuLmZwcigpKTsKICAgICAgICAgICAgIGJyZWFrOwogI2Vsc2UKQEAg
LTU3OCw2ICs1ODcsMTEgQEAgcHVibGljOgogICAgICAgICBjYXNlIExvYWRQdHI6CiAgICAgICAg
ICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKGF0KHBsYW4ubm9kZUlu
ZGV4KCkpLnZpcnR1YWxSZWdpc3RlcigpKSwgcGxhbi5ncHIoKSk7CiAgICAgICAgICAgICBicmVh
azsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICBjYXNlIExvYWQ2NDoKKyAgICAgICAgICAg
IG1faml0LmxvYWQ2NChKSVRDb21waWxlcjo6YWRkcmVzc0ZvcihhdChwbGFuLm5vZGVJbmRleCgp
KS52aXJ0dWFsUmVnaXN0ZXIoKSksIHBsYW4uZ3ByKCkpOworICAgICAgICAgICAgYnJlYWs7Cisj
ZW5kaWYKICAgICAgICAgY2FzZSBMb2FkRG91YmxlOgogICAgICAgICAgICAgbV9qaXQubG9hZERv
dWJsZShKSVRDb21waWxlcjo6YWRkcmVzc0ZvcihhdChwbGFuLm5vZGVJbmRleCgpKS52aXJ0dWFs
UmVnaXN0ZXIoKSksIHBsYW4uZnByKCkpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC03NTIsMTAg
Kzc2NiwxMCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGJveCBpbnQzMiBh
bmQgY2VsbCB2YWx1ZXMgLi4uCiAgICAgICAgICAgICAvLyBidXQgb24gSlNWQUxVRTY0IGJveGlu
ZyBhIGNlbGwgaXMgYSBuby1vcCEKICAgICAgICAgICAgIGlmIChzcGlsbEZvcm1hdCA9PSBEYXRh
Rm9ybWF0SW50ZWdlcikKLSAgICAgICAgICAgICAgICBtX2ppdC5vclB0cihHUFJJbmZvOjp0YWdU
eXBlTnVtYmVyUmVnaXN0ZXIsIHJlZyk7CisgICAgICAgICAgICAgICAgbV9qaXQub3I2NChHUFJJ
bmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHJlZyk7CiAgICAgICAgICAgICAKICAgICAgICAg
ICAgIC8vIFNwaWxsIHRoZSB2YWx1ZSwgYW5kIHJlY29yZCBpdCBhcyBzcGlsbGVkIGluIGl0cyBi
b3hlZCBmb3JtLgotICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIocmVnLCBKSVRDb21waWxlcjo6
YWRkcmVzc0ZvcihzcGlsbE1lKSk7CisgICAgICAgICAgICBtX2ppdC5zdG9yZTY0KHJlZywgSklU
Q29tcGlsZXI6OmFkZHJlc3NGb3Ioc3BpbGxNZSkpOwogICAgICAgICAgICAgaW5mby5zcGlsbCgq
bV9zdHJlYW0sIHNwaWxsTWUsIChEYXRhRm9ybWF0KShzcGlsbEZvcm1hdCB8IERhdGFGb3JtYXRK
UykpOwogICAgICAgICAgICAgcmV0dXJuOwogI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKQEAgLTg2
NSw5ICs4NzksOSBAQCBwdWJsaWM6CiAjZW5kaWYKIAogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAg
TWFjcm9Bc3NlbWJsZXI6OkltbVB0ciB2YWx1ZU9mSlNDb25zdGFudEFzSW1tUHRyKE5vZGVJbmRl
eCBub2RlSW5kZXgpCisgICAgTWFjcm9Bc3NlbWJsZXI6OkltbTY0IHZhbHVlT2ZKU0NvbnN0YW50
QXNJbW02NChOb2RlSW5kZXggbm9kZUluZGV4KQogICAgIHsKLSAgICAgICAgcmV0dXJuIE1hY3Jv
QXNzZW1ibGVyOjpJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlT2ZKU0NvbnN0YW50KG5vZGVJ
bmRleCkpKTsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyOjpJbW02NChKU1ZhbHVlOjpl
bmNvZGUodmFsdWVPZkpTQ29uc3RhbnQobm9kZUluZGV4KSkpOwogICAgIH0KICNlbmRpZgogCkBA
IC0xMzM0LDYgKzEzNDgsMTEgQEAgcHVibGljOgogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50
c1dpdGhFeGVjU3RhdGUoYXJnMSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2Vw
dGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9CisgICAgSklUQ29t
cGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FSiBvcGVyYXRpb24sIEdQ
UlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxKQorICAgIHsKKyAgICAgICAgbV9qaXQuc2V0dXBBcmd1
bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEpOworICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhF
eGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CisgICAgfQogICAgIEpJ
VENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oU19ERkdPcGVyYXRpb25fRUpKIG9wZXJhdGlv
biwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQogICAgIHsKICAgICAg
ICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIpOwpAQCAtMTM0
OSwxNCArMTM2OCwxOSBAQCBwdWJsaWM6CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0
aEV4ZWNTdGF0ZShhcmcxLCBhcmcyKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhj
ZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KKyAgICBKSVRD
b21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VKSiBvcGVyYXRpb24s
IEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMikKKyAgICB7CisgICAgICAg
IG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyKTsKKyAgICAgICAg
cmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCBy
ZXN1bHQpOworICAgIH0KICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZH
T3BlcmF0aW9uX0VKSiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyIGltbSkKICAgICB7Ci0gICAgICAgIG1faml0LnNldHVw
QXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0
cihzdGF0aWNfY2FzdDxjb25zdCB2b2lkKj4oSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGltbS5t
X3ZhbHVlKSkpKSk7CisgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShh
cmcxLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bWJl
cihpbW0ubV92YWx1ZSkpKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlv
bkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9CiAgICAgSklUQ29tcGls
ZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FSkogb3BlcmF0aW9uLCBHUFJS
ZWcgcmVzdWx0LCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyIGltbSwgR1BSUmVnIGFyZzIp
CiAgICAgewotICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoc3RhdGljX2Nhc3Q8Y29uc3Qgdm9pZCo+KEpTVmFsdWU6
OmVuY29kZShqc051bWJlcihpbW0ubV92YWx1ZSkpKSksIGFyZzIpOworICAgICAgICBtX2ppdC5z
ZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChK
U1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoaW1tLm1fdmFsdWUpKSksIGFyZzIpOwogICAgICAgICBy
ZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJl
c3VsdCk7CiAgICAgfQogICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdP
cGVyYXRpb25fRUNDIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIEdQUlJl
ZyBhcmcyKQpAQCAtMjAyMCw2ICsyMDQ0LDIwIEBAIHB1YmxpYzoKICAgICAgICAgbm90VGFrZW4u
bGluaygmbV9qaXQpOwogICAgIH0KICAgICAKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+CisgICAgdm9pZCBicmFuY2g2NChKSVRDb21waWxl
cjo6UmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBUIGxlZnQsIFUgcmlnaHQsIEJsb2NrSW5kZXgg
ZGVzdGluYXRpb24pCisgICAgeworICAgICAgICBpZiAoIWhhdmVFZGdlQ29kZVRvRW1pdChkZXN0
aW5hdGlvbikpCisgICAgICAgICAgICByZXR1cm4gYWRkQnJhbmNoKG1faml0LmJyYW5jaDY0KGNv
bmQsIGxlZnQsIHJpZ2h0KSwgZGVzdGluYXRpb24pOworICAgICAgICAKKyAgICAgICAgSklUQ29t
cGlsZXI6Okp1bXAgbm90VGFrZW4gPSBtX2ppdC5icmFuY2g2NChKSVRDb21waWxlcjo6aW52ZXJ0
KGNvbmQpLCBsZWZ0LCByaWdodCk7CisgICAgICAgIGVtaXRFZGdlQ29kZShkZXN0aW5hdGlvbik7
CisgICAgICAgIGFkZEJyYW5jaChtX2ppdC5qdW1wKCksIGRlc3RpbmF0aW9uKTsKKyAgICAgICAg
bm90VGFrZW4ubGluaygmbV9qaXQpOworICAgIH0KKyNlbmRpZgorICAgIAogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+CiAgICAgdm9pZCBicmFuY2hQdHIoSklUQ29tcGlsZXI6
OlJlbGF0aW9uYWxDb25kaXRpb24gY29uZCwgVCBsZWZ0LCBVIHJpZ2h0LCBCbG9ja0luZGV4IGRl
c3RpbmF0aW9uKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1
bmtzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5r
cy5jcHAJKHJldmlzaW9uIDEzMTE2MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
VGh1bmtzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsOCArNDQsMTMgQEAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmIG9zckV4aXRHZW5lcmF0aW9uVAogICAgIFNjcmF0Y2hCdWZmZXIqIHNjcmF0Y2hC
dWZmZXIgPSBnbG9iYWxEYXRhLT5zY3JhdGNoQnVmZmVyRm9yU2l6ZShzY3JhdGNoU2l6ZSk7CiAg
ICAgRW5jb2RlZEpTVmFsdWUqIGJ1ZmZlciA9IHN0YXRpY19jYXN0PEVuY29kZWRKU1ZhbHVlKj4o
c2NyYXRjaEJ1ZmZlci0+ZGF0YUJ1ZmZlcigpKTsKICAgICAKLSAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7ICsraSkKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7ICsraSkgeworI2lmIENQ
VShYODZfNjQpCisgICAgICAgIGppdC5zdG9yZTY0KEdQUkluZm86OnRvUmVnaXN0ZXIoaSksIGJ1
ZmZlciArIGkpOworI2Vsc2UKICAgICAgICAgaml0LnN0b3JlUHRyKEdQUkluZm86OnRvUmVnaXN0
ZXIoaSksIGJ1ZmZlciArIGkpOworI2VuZGlmCisgICAgfQogICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBGUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgKytpKSB7CiAgICAgICAgIGppdC5t
b3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGJ1ZmZlciArIEdQUkluZm86Om51bWJl
ck9mUmVnaXN0ZXJzICsgaSksIEdQUkluZm86OnJlZ1QwKTsKICAgICAgICAgaml0LnN0b3JlRG91
YmxlKEZQUkluZm86OnRvUmVnaXN0ZXIoaSksIEdQUkluZm86OnJlZ1QwKTsKQEAgLTcxLDggKzc2
LDEzIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBvc3JFeGl0R2VuZXJhdGlvblQKICAgICAgICAg
aml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoYnVmZmVyICsgR1BSSW5mbzo6
bnVtYmVyT2ZSZWdpc3RlcnMgKyBpKSwgR1BSSW5mbzo6cmVnVDApOwogICAgICAgICBqaXQubG9h
ZERvdWJsZShHUFJJbmZvOjpyZWdUMCwgRlBSSW5mbzo6dG9SZWdpc3RlcihpKSk7CiAgICAgfQot
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsg
KytpKQorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBHUFJJbmZvOjpudW1iZXJPZlJlZ2lz
dGVyczsgKytpKSB7CisjaWYgQ1BVKFg4Nl82NCkKKyAgICAgICAgaml0LmxvYWQ2NChidWZmZXIg
KyBpLCBHUFJJbmZvOjp0b1JlZ2lzdGVyKGkpKTsKKyNlbHNlCiAgICAgICAgIGppdC5sb2FkUHRy
KGJ1ZmZlciArIGksIEdQUkluZm86OnRvUmVnaXN0ZXIoaSkpOworI2VuZGlmCisgICAgfQogICAg
IAogICAgIGppdC5qdW1wKE1hY3JvQXNzZW1ibGVyOjpBYnNvbHV0ZUFkZHJlc3MoJmdsb2JhbERh
dGEtPm9zckV4aXRKdW1wRGVzdGluYXRpb24pKTsKICAgICAKQEAgLTExNSw3ICsxMjUsMTEgQEAg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHRocm93RXhjZXB0aW9uRnJvbQogICAgICAgICAgICAgR1BS
SW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsCiAgICAgICAgICAgICBzdGF0aWNfY2FzdDxwdHJkaWZm
X3Q+KHNpemVvZihSZWdpc3RlcikpICogSlNTdGFjazo6Q2FsbGVyRnJhbWUpLAogICAgICAgICBH
UFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CisjaWYgQ1BVKFg4Nl82NCkKKyAgICBqaXQucGVl
azY0KEdQUkluZm86Om5vblByZXNlcnZlZE5vblJldHVybkdQUiwgSklUU1RBQ0tGUkFNRV9BUkdT
X0lOREVYKTsKKyNlbHNlCiAgICAgaml0LnBlZWsoR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0
dXJuR1BSLCBKSVRTVEFDS0ZSQU1FX0FSR1NfSU5ERVgpOworI2VuZGlmCiAgICAgaml0LnNldHVw
QXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25SZXR1cm5HUFIp
OwogICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihiaXR3aXNlX2Nhc3Q8
dm9pZCo+KGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7CiAg
ICAgZW1pdFBvaW50ZXJWYWxpZGF0aW9uKGppdCwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7CkBAIC0x
MzgsNyArMTUyLDExIEBAIHN0YXRpYyB2b2lkIHNsb3dQYXRoRm9yKAogICAgICAgICAgICAgR1BS
SW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsCiAgICAgICAgICAgICBzdGF0aWNfY2FzdDxwdHJkaWZm
X3Q+KHNpemVvZihSZWdpc3RlcikpICogSlNTdGFjazo6UmV0dXJuUEMpKTsKICAgICBqaXQuc3Rv
cmVQdHIoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsICZnbG9iYWxEYXRhLT50b3BDYWxsRnJh
bWUpOworI2lmIENQVShYODZfNjQpCisgICAgaml0LnBva2U2NChHUFJJbmZvOjpub25QcmVzZXJ2
ZWROb25SZXR1cm5HUFIsIEpJVFNUQUNLRlJBTUVfQVJHU19JTkRFWCk7CisjZWxzZQogICAgIGpp
dC5wb2tlKEdQUkluZm86Om5vblByZXNlcnZlZE5vblJldHVybkdQUiwgSklUU1RBQ0tGUkFNRV9B
UkdTX0lOREVYKTsKKyNlbmRpZgogICAgIGppdC5zZXR1cEFyZ3VtZW50c0V4ZWNTdGF0ZSgpOwog
ICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihiaXR3aXNlX2Nhc3Q8dm9p
ZCo+KHNsb3dQYXRoRnVuY3Rpb24pKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7CiAgICAgZW1pdFBv
aW50ZXJWYWxpZGF0aW9uKGppdCwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7CkBAIC0yMTEsNyArMjI5
LDcgQEAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiB2aXJ0dWFsRm9yVAogICAgIAogI2lm
IFVTRShKU1ZBTFVFNjQpCiAgICAgc2xvd0Nhc2UuYXBwZW5kKAotICAgICAgICBqaXQuYnJhbmNo
VGVzdFB0cigKKyAgICAgICAgaml0LmJyYW5jaFRlc3Q2NCgKICAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6Tm9uWmVybywgR1BSSW5mbzo6bm9uQXJnR1BSMCwgR1BSSW5mbzo6dGFnTWFza1JlZ2lz
dGVyKSk7CiAjZWxzZQogICAgIHNsb3dDYXNlLmFwcGVuZCgKQEAgLTI0NSw3ICsyNjMsNyBAQCBz
dGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHZpcnR1YWxGb3JUCiAgICAgICAgIENDYWxsSGVs
cGVyczo6QWRkcmVzcyhHUFJJbmZvOjpub25BcmdHUFIwLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZlNj
b3BlQ2hhaW4oKSksCiAgICAgICAgIEdQUkluZm86Om5vbkFyZ0dQUjEpOwogI2lmIFVTRShKU1ZB
TFVFNjQpCi0gICAgaml0LnN0b3JlUHRyKAorICAgIGppdC5zdG9yZTY0KAogICAgICAgICBHUFJJ
bmZvOjpub25BcmdHUFIxLAogICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoCiAgICAgICAg
ICAgICBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAkocmV2aXNpb24gMTMxMTYy
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzA3LDExICszMDcsNyBAQCB2b2lkIEludGVycHJldGVyOjpkdW1w
UmVnaXN0ZXJzKENhbGxGcmFtCiAgICAgICAgIEpTVmFsdWUgdiA9IGl0LT5qc1ZhbHVlKCk7CiAg
ICAgICAgIGludCByZWdpc3Rlck51bWJlciA9IGl0IC0gY2FsbEZyYW1lLT5yZWdpc3RlcnMoKTsK
ICAgICAgICAgU3RyaW5nIG5hbWUgPSBjb2RlQmxvY2stPm5hbWVGb3JSZWdpc3RlcihyZWdpc3Rl
ck51bWJlcik7Ci0jaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICAgICAgZGF0YUxvZygiW3IlIDNk
ICUxNHNdICAgICAgfCAlMTBwIHwgJS0xNnMgMHglbGx4IFxuIiwgcmVnaXN0ZXJOdW1iZXIsIG5h
bWUuYXNjaWkoKS5kYXRhKCksIGl0LCB2LmRlc2NyaXB0aW9uKCksIEpTVmFsdWU6OmVuY29kZSh2
KSk7Ci0jZWxzZQotICAgICAgICBkYXRhTG9nKCJbciUgM2QgJTE0c10gICAgICB8ICUxMHAgfCAl
LTE2cyAlcCBcbiIsIHJlZ2lzdGVyTnVtYmVyLCBuYW1lLmFzY2lpKCkuZGF0YSgpLCBpdCwgdi5k
ZXNjcmlwdGlvbigpLCBKU1ZhbHVlOjplbmNvZGUodikpOwotI2VuZGlmCisgICAgICAgIGRhdGFM
b2coIltyJSAzZCAlMTRzXSAgICAgIHwgJTEwcCB8ICUtMTZzIDB4JWxsZCBcbiIsIHJlZ2lzdGVy
TnVtYmVyLCBuYW1lLmFzY2lpKCkuZGF0YSgpLCBpdCwgdi5kZXNjcmlwdGlvbigpLCAobG9uZyBs
b25nKUpTVmFsdWU6OmVuY29kZSh2KSk7CiAgICAgICAgIGl0Kys7CiAgICAgfQogICAgIApAQCAt
MzQ2LDExICszNDIsNyBAQCB2b2lkIEludGVycHJldGVyOjpkdW1wUmVnaXN0ZXJzKENhbGxGcmFt
CiAgICAgICAgICAgICBKU1ZhbHVlIHYgPSBpdC0+anNWYWx1ZSgpOwogICAgICAgICAgICAgaW50
IHJlZ2lzdGVyTnVtYmVyID0gaXQgLSBjYWxsRnJhbWUtPnJlZ2lzdGVycygpOwogICAgICAgICAg
ICAgU3RyaW5nIG5hbWUgPSBjb2RlQmxvY2stPm5hbWVGb3JSZWdpc3RlcihyZWdpc3Rlck51bWJl
cik7Ci0jaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICAgICAgICAgIGRhdGFMb2coIltyJSAzZCAl
MTRzXSAgICAgIHwgJTEwcCB8ICUtMTZzIDB4JWxseCBcbiIsIHJlZ2lzdGVyTnVtYmVyLCBuYW1l
LmFzY2lpKCkuZGF0YSgpLCBpdCwgdi5kZXNjcmlwdGlvbigpLCBKU1ZhbHVlOjplbmNvZGUodikp
OwotI2Vsc2UKLSAgICAgICAgICAgIGRhdGFMb2coIltyJSAzZCAlMTRzXSAgICAgIHwgJTEwcCB8
ICUtMTZzICVwIFxuIiwgcmVnaXN0ZXJOdW1iZXIsIG5hbWUuYXNjaWkoKS5kYXRhKCksIGl0LCB2
LmRlc2NyaXB0aW9uKCksIEpTVmFsdWU6OmVuY29kZSh2KSk7Ci0jZW5kaWYKKyAgICAgICAgICAg
IGRhdGFMb2coIltyJSAzZCAlMTRzXSAgICAgIHwgJTEwcCB8ICUtMTZzIDB4JWxsZCBcbiIsIHJl
Z2lzdGVyTnVtYmVyLCBuYW1lLmFzY2lpKCkuZGF0YSgpLCBpdCwgdi5kZXNjcmlwdGlvbigpLCAo
bG9uZyBsb25nKUpTVmFsdWU6OmVuY29kZSh2KSk7CiAgICAgICAgICAgICArK2l0OwogICAgICAg
ICAgICAgKytyZWdpc3RlckNvdW50OwogICAgICAgICB9IHdoaWxlIChpdCAhPSBlbmQpOwpAQCAt
MzYxLDExICszNTMsNyBAQCB2b2lkIEludGVycHJldGVyOjpkdW1wUmVnaXN0ZXJzKENhbGxGcmFt
CiAgICAgaWYgKGl0ICE9IGVuZCkgewogICAgICAgICBkbyB7CiAgICAgICAgICAgICBKU1ZhbHVl
IHYgPSAoKml0KS5qc1ZhbHVlKCk7Ci0jaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICAgICAgICAg
IGRhdGFMb2coIltyJSAzZF0gICAgICAgICAgICAgICAgICAgICB8ICUxMHAgfCAlLTE2cyAweCVs
bHggXG4iLCByZWdpc3RlckNvdW50LCBpdCwgdi5kZXNjcmlwdGlvbigpLCBKU1ZhbHVlOjplbmNv
ZGUodikpOwotI2Vsc2UKLSAgICAgICAgICAgIGRhdGFMb2coIltyJSAzZF0gICAgICAgICAgICAg
ICAgICAgICB8ICUxMHAgfCAlLTE2cyAlcCBcbiIsIHJlZ2lzdGVyQ291bnQsIGl0LCB2LmRlc2Ny
aXB0aW9uKCksIEpTVmFsdWU6OmVuY29kZSh2KSk7Ci0jZW5kaWYKKyAgICAgICAgICAgIGRhdGFM
b2coIltyJSAzZF0gICAgICAgICAgICAgICAgICAgICB8ICUxMHAgfCAlLTE2cyAweCVsbGQgXG4i
LCByZWdpc3RlckNvdW50LCBpdCwgdi5kZXNjcmlwdGlvbigpLCAobG9uZyBsb25nKUpTVmFsdWU6
OmVuY29kZSh2KSk7CiAgICAgICAgICAgICArK2l0OwogICAgICAgICAgICAgKytyZWdpc3RlckNv
dW50OwogICAgICAgICB9IHdoaWxlIChpdCAhPSBlbmQpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklULmNwcAkocmV2aXNpb24gMTMxMTYyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MzYsNyArNjM2LDcgQEAgSklUQ29kZSBKSVQ6
OnByaXZhdGVDb21waWxlKENvZGVQdHIqIGZ1bgogICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgICAgICAgICBpbnQgb2Zmc2V0ID0gQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNl
dEluY2x1ZGluZ1RoaXMoYXJndW1lbnQpICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0
ZXIpKTsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVz
cyhjYWxsRnJhbWVSZWdpc3Rlciwgb2Zmc2V0KSwgcmVnVDApOworICAgICAgICAgICAgICAgIGxv
YWQ2NChBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCBvZmZzZXQpLCByZWdUMCk7CiAjZWxpZiBV
U0UoSlNWQUxVRTMyXzY0KQogICAgICAgICAgICAgICAgIGxvYWQzMihBZGRyZXNzKGNhbGxGcmFt
ZVJlZ2lzdGVyLCBvZmZzZXQgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5
bG9hZCkpLCByZWdUMCk7CiAgICAgICAgICAgICAgICAgbG9hZDMyKEFkZHJlc3MoY2FsbEZyYW1l
UmVnaXN0ZXIsIG9mZnNldCArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcp
KSwgcmVnVDEpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCShyZXZpc2lvbiAxMzExNjIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC04
NDAsNiArODQwLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdFB1dEltbWVk
aWF0ZVRvQ2FsbEZyYW1lSGVhZGVyKHZvaWQqIHZhbHVlLCBKU1N0YWNrOjpDYWxsRnJhbWVIZWFk
ZXJFbnRyeSk7CiAgICAgICAgIHZvaWQgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoSlNT
dGFjazo6Q2FsbEZyYW1lSGVhZGVyRW50cnksIFJlZ2lzdGVySUQgdG8sIFJlZ2lzdGVySUQgZnJv
bSA9IGNhbGxGcmFtZVJlZ2lzdGVyKTsKICAgICAgICAgdm9pZCBlbWl0R2V0RnJvbUNhbGxGcmFt
ZUhlYWRlcjMyKEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlckVudHJ5LCBSZWdpc3RlcklEIHRvLCBS
ZWdpc3RlcklEIGZyb20gPSBjYWxsRnJhbWVSZWdpc3Rlcik7CisjaWYgVVNFKEpTVkFMVUU2NCkK
KyAgICAgICAgdm9pZCBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlcjY0KEpTU3RhY2s6OkNhbGxG
cmFtZUhlYWRlckVudHJ5LCBSZWdpc3RlcklEIHRvLCBSZWdpc3RlcklEIGZyb20gPSBjYWxsRnJh
bWVSZWdpc3Rlcik7CisjZW5kaWYKIAogICAgICAgICBKU1ZhbHVlIGdldENvbnN0YW50T3BlcmFu
ZCh1bnNpZ25lZCBzcmMpOwogICAgICAgICBib29sIGlzT3BlcmFuZENvbnN0YW50SW1tZWRpYXRl
SW50KHVuc2lnbmVkIHNyYyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFy
aXRobWV0aWMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
QXJpdGhtZXRpYy5jcHAJKHJldmlzaW9uIDEzMTE2MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwOSw4ICsyMDksOCBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9uZWdhdGUoSW5zdHJ1Y3Rpb24qIGN1CiAgICAgc3JjTm90SW50
LmxpbmsodGhpcyk7CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tZWRpYXRlTnVtYmVyKHJl
Z1QwKTsKIAotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihyZWludGVycHJldF9jYXN0PHZvaWQqPigw
eDgwMDAwMDAwMDAwMDAwMDB1bGwpKSwgcmVnVDEpOwotICAgIHhvclB0cihyZWdUMSwgcmVnVDAp
OworICAgIG1vdmUoVHJ1c3RlZEltbTY0KChpbnQ2NF90KTB4ODAwMDAwMDAwMDAwMDAwMHVsbCks
IHJlZ1QxKTsKKyAgICB4b3I2NChyZWdUMSwgcmVnVDApOwogCiAgICAgZW5kLmxpbmsodGhpcyk7
CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwpAQCAtMjI0LDcgKzIyNCw3IEBAIHZv
aWQgSklUOjplbWl0U2xvd19vcF9uZWdhdGUoSW5zdHJ1Y3Rpb24KICAgICBsaW5rU2xvd0Nhc2Uo
aXRlcik7IC8vIGRvdWJsZSBjaGVjawogCiAgICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywg
Y3RpX29wX25lZ2F0ZSk7Ci0gICAgc3R1YkNhbGwuYWRkQXJndW1lbnQocmVnVDEsIHJlZ1QwKTsK
KyAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChyZWdUMCk7CiAgICAgc3R1YkNhbGwuY2FsbChkc3Qp
OwogfQogCkBAIC0yNzksOCArMjc5LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcnNoaWZ0KEluc3Ry
dWN0aW9uKiBjdQogICAgICAgICAgICAgSnVtcCBsaHNJc0ludCA9IGVtaXRKdW1wSWZJbW1lZGlh
dGVJbnRlZ2VyKHJlZ1QwKTsKICAgICAgICAgICAgIC8vIHN1cHBvcnRzRmxvYXRpbmdQb2ludCgp
ICYmIFVTRShKU1ZBTFVFNjQpID0+IDMgU2xvd0Nhc2VzCiAgICAgICAgICAgICBhZGRTbG93Q2Fz
ZShlbWl0SnVtcElmTm90SW1tZWRpYXRlTnVtYmVyKHJlZ1QwKSk7Ci0gICAgICAgICAgICBhZGRQ
dHIodGFnVHlwZU51bWJlclJlZ2lzdGVyLCByZWdUMCk7Ci0gICAgICAgICAgICBtb3ZlUHRyVG9E
b3VibGUocmVnVDAsIGZwUmVnVDApOworICAgICAgICAgICAgYWRkNjQodGFnVHlwZU51bWJlclJl
Z2lzdGVyLCByZWdUMCk7CisgICAgICAgICAgICBtb3ZlNjRUb0RvdWJsZShyZWdUMCwgZnBSZWdU
MCk7CiAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hUcnVuY2F0ZURvdWJsZVRvSW50MzIo
ZnBSZWdUMCwgcmVnVDApKTsKICAgICAgICAgICAgIGxoc0lzSW50LmxpbmsodGhpcyk7CiAgICAg
ICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1lZGlhdGVJbnRlZ2VyKHJlZ1QyKTsKQEAg
LTM3Nyw4ICszNzcsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdXJzaGlmdChJbnN0cnVjdGlv
CiAgICAgICAgIGlmIChzdXBwb3J0c0Zsb2F0aW5nUG9pbnRUcnVuY2F0ZSgpKSB7CiAgICAgICAg
ICAgICBKdW1wTGlzdCBmYWlsdXJlczsKICAgICAgICAgICAgIGZhaWx1cmVzLmFwcGVuZChlbWl0
SnVtcElmTm90SW1tZWRpYXRlTnVtYmVyKHJlZ1QwKSk7IC8vIG9wMSBpcyBub3QgYSBkb3VibGUK
LSAgICAgICAgICAgIGFkZFB0cih0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHJlZ1QwKTsKLSAgICAg
ICAgICAgIG1vdmVQdHJUb0RvdWJsZShyZWdUMCwgZnBSZWdUMCk7CisgICAgICAgICAgICBhZGQ2
NCh0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHJlZ1QwKTsKKyAgICAgICAgICAgIG1vdmU2NFRvRG91
YmxlKHJlZ1QwLCBmcFJlZ1QwKTsKICAgICAgICAgICAgIGZhaWx1cmVzLmFwcGVuZChicmFuY2hU
cnVuY2F0ZURvdWJsZVRvSW50MzIoZnBSZWdUMCwgcmVnVDApKTsKICAgICAgICAgICAgIGlmIChz
aGlmdCkKICAgICAgICAgICAgICAgICB1cnNoaWZ0MzIoSW1tMzIoc2hpZnQgJiAweDFmKSwgcmVn
VDApOwpAQCAtMzk5LDggKzM5OSw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF91cnNoaWZ0KElu
c3RydWN0aW8KICAgICAgICAgICAgIGlmIChzdXBwb3J0c0Zsb2F0aW5nUG9pbnRUcnVuY2F0ZSgp
KSB7CiAgICAgICAgICAgICAgICAgSnVtcExpc3QgZmFpbHVyZXM7CiAgICAgICAgICAgICAgICAg
ZmFpbHVyZXMuYXBwZW5kKGVtaXRKdW1wSWZOb3RJbW1lZGlhdGVOdW1iZXIocmVnVDApKTsgLy8g
b3AxIGlzIG5vdCBhIGRvdWJsZQotICAgICAgICAgICAgICAgIGFkZFB0cih0YWdUeXBlTnVtYmVy
UmVnaXN0ZXIsIHJlZ1QwKTsKLSAgICAgICAgICAgICAgICBtb3ZlUHRyVG9Eb3VibGUocmVnVDAs
IGZwUmVnVDApOworICAgICAgICAgICAgICAgIGFkZDY0KHRhZ1R5cGVOdW1iZXJSZWdpc3Rlciwg
cmVnVDApOworICAgICAgICAgICAgICAgIG1vdmU2NFRvRG91YmxlKHJlZ1QwLCBmcFJlZ1QwKTsK
ICAgICAgICAgICAgICAgICBmYWlsdXJlcy5hcHBlbmQoYnJhbmNoVHJ1bmNhdGVEb3VibGVUb0lu
dDMyKGZwUmVnVDAsIHJlZ1QwKSk7CiAgICAgICAgICAgICAgICAgZmFpbHVyZXMuYXBwZW5kKGVt
aXRKdW1wSWZOb3RJbW1lZGlhdGVJbnRlZ2VyKHJlZ1QxKSk7IC8vIG9wMiBpcyBub3QgYW4gaW50
CiAgICAgICAgICAgICAgICAgZW1pdEZhc3RBcml0aEltbVRvSW50KHJlZ1QxKTsKQEAgLTQ5OSw4
ICs0OTksOCBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3codW5zaWduCiAKICAg
ICAgICAgaWYgKHN1cHBvcnRzRmxvYXRpbmdQb2ludCgpKSB7CiAgICAgICAgICAgICBKdW1wIGZh
aWwxID0gZW1pdEp1bXBJZk5vdEltbWVkaWF0ZU51bWJlcihyZWdUMCk7Ci0gICAgICAgICAgICBh
ZGRQdHIodGFnVHlwZU51bWJlclJlZ2lzdGVyLCByZWdUMCk7Ci0gICAgICAgICAgICBtb3ZlUHRy
VG9Eb3VibGUocmVnVDAsIGZwUmVnVDApOworICAgICAgICAgICAgYWRkNjQodGFnVHlwZU51bWJl
clJlZ2lzdGVyLCByZWdUMCk7CisgICAgICAgICAgICBtb3ZlNjRUb0RvdWJsZShyZWdUMCwgZnBS
ZWdUMCk7CiAKICAgICAgICAgICAgIGludDMyX3Qgb3AyaW1tID0gZ2V0Q29uc3RhbnRPcGVyYW5k
KG9wMikuYXNJbnQzMigpOwogCkBAIC01MjUsOCArNTI1LDggQEAgdm9pZCBKSVQ6OmVtaXRfY29t
cGFyZUFuZEp1bXBTbG93KHVuc2lnbgogCiAgICAgICAgIGlmIChzdXBwb3J0c0Zsb2F0aW5nUG9p
bnQoKSkgewogICAgICAgICAgICAgSnVtcCBmYWlsMSA9IGVtaXRKdW1wSWZOb3RJbW1lZGlhdGVO
dW1iZXIocmVnVDEpOwotICAgICAgICAgICAgYWRkUHRyKHRhZ1R5cGVOdW1iZXJSZWdpc3Rlciwg
cmVnVDEpOwotICAgICAgICAgICAgbW92ZVB0clRvRG91YmxlKHJlZ1QxLCBmcFJlZ1QxKTsKKyAg
ICAgICAgICAgIGFkZDY0KHRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgcmVnVDEpOworICAgICAgICAg
ICAgbW92ZTY0VG9Eb3VibGUocmVnVDEsIGZwUmVnVDEpOwogCiAgICAgICAgICAgICBpbnQzMl90
IG9wMWltbSA9IGdldENvbnN0YW50T3BlcmFuZChvcDEpLmFzSW50MzIoKTsKIApAQCAtNTUyLDEw
ICs1NTIsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93KHVuc2lnbgogICAg
ICAgICAgICAgSnVtcCBmYWlsMSA9IGVtaXRKdW1wSWZOb3RJbW1lZGlhdGVOdW1iZXIocmVnVDAp
OwogICAgICAgICAgICAgSnVtcCBmYWlsMiA9IGVtaXRKdW1wSWZOb3RJbW1lZGlhdGVOdW1iZXIo
cmVnVDEpOwogICAgICAgICAgICAgSnVtcCBmYWlsMyA9IGVtaXRKdW1wSWZJbW1lZGlhdGVJbnRl
Z2VyKHJlZ1QxKTsKLSAgICAgICAgICAgIGFkZFB0cih0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHJl
Z1QwKTsKLSAgICAgICAgICAgIGFkZFB0cih0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHJlZ1QxKTsK
LSAgICAgICAgICAgIG1vdmVQdHJUb0RvdWJsZShyZWdUMCwgZnBSZWdUMCk7Ci0gICAgICAgICAg
ICBtb3ZlUHRyVG9Eb3VibGUocmVnVDEsIGZwUmVnVDEpOworICAgICAgICAgICAgYWRkNjQodGFn
VHlwZU51bWJlclJlZ2lzdGVyLCByZWdUMCk7CisgICAgICAgICAgICBhZGQ2NCh0YWdUeXBlTnVt
YmVyUmVnaXN0ZXIsIHJlZ1QxKTsKKyAgICAgICAgICAgIG1vdmU2NFRvRG91YmxlKHJlZ1QwLCBm
cFJlZ1QwKTsKKyAgICAgICAgICAgIG1vdmU2NFRvRG91YmxlKHJlZ1QxLCBmcFJlZ1QxKTsKIAog
ICAgICAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoRG91YmxlKGNvbmRpdGlvbiwgZnBS
ZWdUMCwgZnBSZWdUMSksIHRhcmdldCk7CiAKQEAgLTU4NSwxOSArNTg1LDE5IEBAIHZvaWQgSklU
OjplbWl0X29wX2JpdGFuZChJbnN0cnVjdGlvbiogY3UKICAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihvcDIsIHJlZ1QwKTsKICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tZWRp
YXRlSW50ZWdlcihyZWdUMCk7CiAgICAgICAgIGludDMyX3QgaW1tID0gZ2V0Q29uc3RhbnRPcGVy
YW5kSW1tZWRpYXRlSW50KG9wMSk7Ci0gICAgICAgIGFuZFB0cihJbW0zMihpbW0pLCByZWdUMCk7
CisgICAgICAgIGFuZDY0KEltbTMyKGltbSksIHJlZ1QwKTsKICAgICAgICAgaWYgKGltbSA+PSAw
KQogICAgICAgICAgICAgZW1pdEZhc3RBcml0aEludFRvSW1tTm9DaGVjayhyZWdUMCwgcmVnVDAp
OwogICAgIH0gZWxzZSBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbW1lZGlhdGVJbnQob3AyKSkgewog
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgcmVnVDApOwogICAgICAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RJbW1lZGlhdGVJbnRlZ2VyKHJlZ1QwKTsKICAgICAgICAgaW50MzJf
dCBpbW0gPSBnZXRDb25zdGFudE9wZXJhbmRJbW1lZGlhdGVJbnQob3AyKTsKLSAgICAgICAgYW5k
UHRyKEltbTMyKGltbSksIHJlZ1QwKTsKKyAgICAgICAgYW5kNjQoSW1tMzIoaW1tKSwgcmVnVDAp
OwogICAgICAgICBpZiAoaW1tID49IDApCiAgICAgICAgICAgICBlbWl0RmFzdEFyaXRoSW50VG9J
bW1Ob0NoZWNrKHJlZ1QwLCByZWdUMCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcnMob3AxLCByZWdUMCwgb3AyLCByZWdUMSk7Ci0gICAgICAgIGFuZFB0cihy
ZWdUMSwgcmVnVDApOworICAgICAgICBhbmQ2NChyZWdUMSwgcmVnVDApOwogICAgICAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RJbW1lZGlhdGVJbnRlZ2VyKHJlZ1QwKTsKICAgICB9CiAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQpOwpAQCAtODg3LDE2ICs4ODcsMTYgQEAgdm9pZCBK
SVQ6OmNvbXBpbGVCaW5hcnlBcml0aE9wU2xvd0Nhc2UoTwogICAgICAgICAgICAgZW1pdEp1bXBJ
Zk5vdEltbWVkaWF0ZU51bWJlcihyZWdUMCkubGlua1RvKHN0dWJGdW5jdGlvbkNhbGwsIHRoaXMp
OwogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgcmVnVDEpOwogICAgICAgICBj
b252ZXJ0SW50MzJUb0RvdWJsZShyZWdUMSwgZnBSZWdUMSk7Ci0gICAgICAgIGFkZFB0cih0YWdU
eXBlTnVtYmVyUmVnaXN0ZXIsIHJlZ1QwKTsKLSAgICAgICAgbW92ZVB0clRvRG91YmxlKHJlZ1Qw
LCBmcFJlZ1QyKTsKKyAgICAgICAgYWRkNjQodGFnVHlwZU51bWJlclJlZ2lzdGVyLCByZWdUMCk7
CisgICAgICAgIG1vdmU2NFRvRG91YmxlKHJlZ1QwLCBmcFJlZ1QyKTsKICAgICB9IGVsc2UgaWYg
KG9wMkhhc0ltbWVkaWF0ZUludEZhc3RDYXNlKSB7CiAgICAgICAgIG5vdEltbTEubGluayh0aGlz
KTsKICAgICAgICAgaWYgKCF0eXBlcy5maXJzdCgpLmRlZmluaXRlbHlJc051bWJlcigpKQogICAg
ICAgICAgICAgZW1pdEp1bXBJZk5vdEltbWVkaWF0ZU51bWJlcihyZWdUMCkubGlua1RvKHN0dWJG
dW5jdGlvbkNhbGwsIHRoaXMpOwogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwg
cmVnVDEpOwogICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShyZWdUMSwgZnBSZWdUMSk7Ci0g
ICAgICAgIGFkZFB0cih0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHJlZ1QwKTsKLSAgICAgICAgbW92
ZVB0clRvRG91YmxlKHJlZ1QwLCBmcFJlZ1QyKTsKKyAgICAgICAgYWRkNjQodGFnVHlwZU51bWJl
clJlZ2lzdGVyLCByZWdUMCk7CisgICAgICAgIG1vdmU2NFRvRG91YmxlKHJlZ1QwLCBmcFJlZ1Qy
KTsKICAgICB9IGVsc2UgewogICAgICAgICAvLyBpZiB3ZSBnZXQgaGVyZSwgZWF4IGlzIG5vdCBh
biBpbnQzMiwgZWR4IG5vdCB5ZXQgY2hlY2tlZC4KICAgICAgICAgbm90SW1tMS5saW5rKHRoaXMp
OwpAQCAtOTA0LDggKzkwNCw4IEBAIHZvaWQgSklUOjpjb21waWxlQmluYXJ5QXJpdGhPcFNsb3dD
YXNlKE8KICAgICAgICAgICAgIGVtaXRKdW1wSWZOb3RJbW1lZGlhdGVOdW1iZXIocmVnVDApLmxp
bmtUbyhzdHViRnVuY3Rpb25DYWxsLCB0aGlzKTsKICAgICAgICAgaWYgKCF0eXBlcy5zZWNvbmQo
KS5kZWZpbml0ZWx5SXNOdW1iZXIoKSkKICAgICAgICAgICAgIGVtaXRKdW1wSWZOb3RJbW1lZGlh
dGVOdW1iZXIocmVnVDEpLmxpbmtUbyhzdHViRnVuY3Rpb25DYWxsLCB0aGlzKTsKLSAgICAgICAg
YWRkUHRyKHRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgcmVnVDApOwotICAgICAgICBtb3ZlUHRyVG9E
b3VibGUocmVnVDAsIGZwUmVnVDEpOworICAgICAgICBhZGQ2NCh0YWdUeXBlTnVtYmVyUmVnaXN0
ZXIsIHJlZ1QwKTsKKyAgICAgICAgbW92ZTY0VG9Eb3VibGUocmVnVDAsIGZwUmVnVDEpOwogICAg
ICAgICBKdW1wIG9wMmlzRG91YmxlID0gZW1pdEp1bXBJZk5vdEltbWVkaWF0ZUludGVnZXIocmVn
VDEpOwogICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShyZWdUMSwgZnBSZWdUMik7CiAgICAg
ICAgIEp1bXAgb3Ayd2FzSW50ZWdlciA9IGp1bXAoKTsKQEAgLTkxNiw4ICs5MTYsOCBAQCB2b2lk
IEpJVDo6Y29tcGlsZUJpbmFyeUFyaXRoT3BTbG93Q2FzZShPCiAgICAgICAgICAgICBlbWl0SnVt
cElmTm90SW1tZWRpYXRlTnVtYmVyKHJlZ1QxKS5saW5rVG8oc3R1YkZ1bmN0aW9uQ2FsbCwgdGhp
cyk7CiAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKHJlZ1QwLCBmcFJlZ1QxKTsKICAgICAg
ICAgb3AyaXNEb3VibGUubGluayh0aGlzKTsKLSAgICAgICAgYWRkUHRyKHRhZ1R5cGVOdW1iZXJS
ZWdpc3RlciwgcmVnVDEpOwotICAgICAgICBtb3ZlUHRyVG9Eb3VibGUocmVnVDEsIGZwUmVnVDIp
OworICAgICAgICBhZGQ2NCh0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHJlZ1QxKTsKKyAgICAgICAg
bW92ZTY0VG9Eb3VibGUocmVnVDEsIGZwUmVnVDIpOwogICAgICAgICBvcDJ3YXNJbnRlZ2VyLmxp
bmsodGhpcyk7CiAgICAgfQogCkBAIC05MzEsOCArOTMxLDggQEAgdm9pZCBKSVQ6OmNvbXBpbGVC
aW5hcnlBcml0aE9wU2xvd0Nhc2UoTwogICAgICAgICBBU1NFUlQob3Bjb2RlSUQgPT0gb3BfZGl2
KTsKICAgICAgICAgZGl2RG91YmxlKGZwUmVnVDIsIGZwUmVnVDEpOwogICAgIH0KLSAgICBtb3Zl
RG91YmxlVG9QdHIoZnBSZWdUMSwgcmVnVDApOwotICAgIHN1YlB0cih0YWdUeXBlTnVtYmVyUmVn
aXN0ZXIsIHJlZ1QwKTsKKyAgICBtb3ZlRG91YmxlVG82NChmcFJlZ1QxLCByZWdUMCk7CisgICAg
c3ViNjQodGFnVHlwZU51bWJlclJlZ2lzdGVyLCByZWdUMCk7CiAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3RlcihyZXN1bHQsIHJlZ1QwKTsKIAogICAgIGVuZC5saW5rKHRoaXMpOwpAQCAtMTA0MSw4
ICsxMDQxLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGl2KEluc3RydWN0aW9uKiBjdXJyZQogCiAg
ICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW1tZWRpYXRlRG91YmxlKG9wMSkpIHsKICAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QwKTsKLSAgICAgICAgYWRkUHRyKHRhZ1R5
cGVOdW1iZXJSZWdpc3RlciwgcmVnVDApOwotICAgICAgICBtb3ZlUHRyVG9Eb3VibGUocmVnVDAs
IGZwUmVnVDApOworICAgICAgICBhZGQ2NCh0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHJlZ1QwKTsK
KyAgICAgICAgbW92ZTY0VG9Eb3VibGUocmVnVDAsIGZwUmVnVDApOwogICAgIH0gZWxzZSBpZiAo
aXNPcGVyYW5kQ29uc3RhbnRJbW1lZGlhdGVJbnQob3AxKSkgewogICAgICAgICBlbWl0TG9hZElu
dDMyVG9Eb3VibGUob3AxLCBmcFJlZ1QwKTsKICAgICB9IGVsc2UgewpAQCAtMTA1MywxNSArMTA1
MywxNSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kaXYoSW5zdHJ1Y3Rpb24qIGN1cnJlCiAgICAgICAg
IGNvbnZlcnRJbnQzMlRvRG91YmxlKHJlZ1QwLCBmcFJlZ1QwKTsKICAgICAgICAgSnVtcCBza2lw
RG91YmxlTG9hZCA9IGp1bXAoKTsKICAgICAgICAgbm90SW50LmxpbmsodGhpcyk7Ci0gICAgICAg
IGFkZFB0cih0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHJlZ1QwKTsKLSAgICAgICAgbW92ZVB0clRv
RG91YmxlKHJlZ1QwLCBmcFJlZ1QwKTsKKyAgICAgICAgYWRkNjQodGFnVHlwZU51bWJlclJlZ2lz
dGVyLCByZWdUMCk7CisgICAgICAgIG1vdmU2NFRvRG91YmxlKHJlZ1QwLCBmcFJlZ1QwKTsKICAg
ICAgICAgc2tpcERvdWJsZUxvYWQubGluayh0aGlzKTsKICAgICB9CiAKICAgICBpZiAoaXNPcGVy
YW5kQ29uc3RhbnRJbW1lZGlhdGVEb3VibGUob3AyKSkgewogICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKG9wMiwgcmVnVDEpOwotICAgICAgICBhZGRQdHIodGFnVHlwZU51bWJlclJlZ2lz
dGVyLCByZWdUMSk7Ci0gICAgICAgIG1vdmVQdHJUb0RvdWJsZShyZWdUMSwgZnBSZWdUMSk7Cisg
ICAgICAgIGFkZDY0KHRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgcmVnVDEpOworICAgICAgICBtb3Zl
NjRUb0RvdWJsZShyZWdUMSwgZnBSZWdUMSk7CiAgICAgfSBlbHNlIGlmIChpc09wZXJhbmRDb25z
dGFudEltbWVkaWF0ZUludChvcDIpKSB7CiAgICAgICAgIGVtaXRMb2FkSW50MzJUb0RvdWJsZShv
cDIsIGZwUmVnVDEpOwogICAgIH0gZWxzZSB7CkBAIC0xMDcyLDggKzEwNzIsOCBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9kaXYoSW5zdHJ1Y3Rpb24qIGN1cnJlCiAgICAgICAgIGNvbnZlcnRJbnQzMlRv
RG91YmxlKHJlZ1QxLCBmcFJlZ1QxKTsKICAgICAgICAgSnVtcCBza2lwRG91YmxlTG9hZCA9IGp1
bXAoKTsKICAgICAgICAgbm90SW50LmxpbmsodGhpcyk7Ci0gICAgICAgIGFkZFB0cih0YWdUeXBl
TnVtYmVyUmVnaXN0ZXIsIHJlZ1QxKTsKLSAgICAgICAgbW92ZVB0clRvRG91YmxlKHJlZ1QxLCBm
cFJlZ1QxKTsKKyAgICAgICAgYWRkNjQodGFnVHlwZU51bWJlclJlZ2lzdGVyLCByZWdUMSk7Cisg
ICAgICAgIG1vdmU2NFRvRG91YmxlKHJlZ1QxLCBmcFJlZ1QxKTsKICAgICAgICAgc2tpcERvdWJs
ZUxvYWQubGluayh0aGlzKTsKICAgICB9CiAgICAgZGl2RG91YmxlKGZwUmVnVDEsIGZwUmVnVDAp
OwpAQCAtMTEwMCwxMyArMTEwMCwxMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kaXYoSW5zdHJ1Y3Rp
b24qIGN1cnJlCiAgICAgSnVtcCBpc0ludGVnZXIgPSBqdW1wKCk7CiAgICAgbm90SW50ZWdlci5s
aW5rKHRoaXMpOwogICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgQWJzb2x1dGVBZGRyZXNzKCZt
X2NvZGVCbG9jay0+YWRkU3BlY2lhbEZhc3RDYXNlUHJvZmlsZShtX2J5dGVjb2RlT2Zmc2V0KS0+
bV9jb3VudGVyKSk7Ci0gICAgbW92ZURvdWJsZVRvUHRyKGZwUmVnVDAsIHJlZ1QwKTsKLSAgICBz
dWJQdHIodGFnVHlwZU51bWJlclJlZ2lzdGVyLCByZWdUMCk7CisgICAgbW92ZURvdWJsZVRvNjQo
ZnBSZWdUMCwgcmVnVDApOworICAgIHN1YjY0KHRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgcmVnVDAp
OwogICAgIGlzSW50ZWdlci5saW5rKHRoaXMpOwogI2Vsc2UKICAgICAvLyBEb3VibGUgcmVzdWx0
LgotICAgIG1vdmVEb3VibGVUb1B0cihmcFJlZ1QwLCByZWdUMCk7Ci0gICAgc3ViUHRyKHRhZ1R5
cGVOdW1iZXJSZWdpc3RlciwgcmVnVDApOworICAgIG1vdmVEb3VibGVUbzY0KGZwUmVnVDAsIHJl
Z1QwKTsKKyAgICBzdWI2NCh0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHJlZ1QwKTsKICNlbmRpZgog
CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlZ1QwKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAkocmV2aXNpb24gMTMxMTYyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzIsNyArNzIs
NyBAQCB2b2lkIEpJVDo6Y29tcGlsZUxvYWRWYXJhcmdzKEluc3RydWN0aW9uCiAKICAgICBpZiAo
Y2FuT3B0aW1pemUpIHsKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudHMs
IHJlZ1QwKTsKLSAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaFB0cihOb3RFcXVhbCwgcmVn
VDAsIFRydXN0ZWRJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSkpKSk7CisgICAgICAg
IHNsb3dDYXNlLmFwcGVuZChicmFuY2g2NChOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChK
U1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKSkpKTsKIAogICAgICAgICBlbWl0R2V0RnJvbUNhbGxG
cmFtZUhlYWRlcjMyKEpTU3RhY2s6OkFyZ3VtZW50Q291bnQsIHJlZ1QwKTsKICAgICAgICAgc2xv
d0Nhc2UuYXBwZW5kKGJyYW5jaDMyKEFib3ZlLCByZWdUMCwgVHJ1c3RlZEltbTMyKEFyZ3VtZW50
czo6TWF4QXJndW1lbnRzICsgMSkpKTsKQEAgLTkxLDE4ICs5MSwxOCBAQCB2b2lkIEpJVDo6Y29t
cGlsZUxvYWRWYXJhcmdzKEluc3RydWN0aW9uCiAKICAgICAgICAgLy8gSW5pdGlhbGl6ZSAndGhp
cycuCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodGhpc1ZhbHVlLCByZWdUMik7Ci0g
ICAgICAgIHN0b3JlUHRyKHJlZ1QyLCBBZGRyZXNzKHJlZ1QxLCBDYWxsRnJhbWU6OnRoaXNBcmd1
bWVudE9mZnNldCgpICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSkpOworICAg
ICAgICBzdG9yZTY0KHJlZ1QyLCBBZGRyZXNzKHJlZ1QxLCBDYWxsRnJhbWU6OnRoaXNBcmd1bWVu
dE9mZnNldCgpICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSkpOwogCiAgICAg
ICAgIC8vIENvcHkgYXJndW1lbnRzLgogICAgICAgICBuZWczMihyZWdUMCk7CiAgICAgICAgIHNp
Z25FeHRlbmQzMlRvUHRyKHJlZ1QwLCByZWdUMCk7Ci0gICAgICAgIGVuZC5hcHBlbmQoYnJhbmNo
QWRkUHRyKFplcm8sIFRydXN0ZWRJbW0zMigxKSwgcmVnVDApKTsKKyAgICAgICAgZW5kLmFwcGVu
ZChicmFuY2hBZGQ2NChaZXJvLCBUcnVzdGVkSW1tMzIoMSksIHJlZ1QwKSk7CiAgICAgICAgIC8v
IHJlZ1QwOiAtYXJndW1lbnRDb3VudAogCiAgICAgICAgIExhYmVsIGNvcHlMb29wID0gbGFiZWwo
KTsKLSAgICAgICAgbG9hZFB0cihCYXNlSW5kZXgoY2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1QwLCBU
aW1lc0VpZ2h0LCBDYWxsRnJhbWU6OnRoaXNBcmd1bWVudE9mZnNldCgpICogc3RhdGljX2Nhc3Q8
aW50PihzaXplb2YoUmVnaXN0ZXIpKSksIHJlZ1QyKTsKLSAgICAgICAgc3RvcmVQdHIocmVnVDIs
IEJhc2VJbmRleChyZWdUMSwgcmVnVDAsIFRpbWVzRWlnaHQsIENhbGxGcmFtZTo6dGhpc0FyZ3Vt
ZW50T2Zmc2V0KCkgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpKSk7Ci0gICAg
ICAgIGJyYW5jaEFkZFB0cihOb25aZXJvLCBUcnVzdGVkSW1tMzIoMSksIHJlZ1QwKS5saW5rVG8o
Y29weUxvb3AsIHRoaXMpOworICAgICAgICBsb2FkNjQoQmFzZUluZGV4KGNhbGxGcmFtZVJlZ2lz
dGVyLCByZWdUMCwgVGltZXNFaWdodCwgQ2FsbEZyYW1lOjp0aGlzQXJndW1lbnRPZmZzZXQoKSAq
IHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkpLCByZWdUMik7CisgICAgICAgIHN0
b3JlNjQocmVnVDIsIEJhc2VJbmRleChyZWdUMSwgcmVnVDAsIFRpbWVzRWlnaHQsIENhbGxGcmFt
ZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCkgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3Rl
cikpKSk7CisgICAgICAgIGJyYW5jaEFkZDY0KE5vblplcm8sIFRydXN0ZWRJbW0zMigxKSwgcmVn
VDApLmxpbmtUbyhjb3B5TG9vcCwgdGhpcyk7CiAKICAgICAgICAgZW5kLmFwcGVuZChqdW1wKCkp
OwogICAgIH0KQEAgLTEyNCw3ICsxMjQsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFsKCkK
IHsKICAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3BfY2FsbF9ldmFsKTsgLy8g
SW5pdGlhbGl6ZXMgU2NvcGVDaGFpbjsgUmV0dXJuUEM7IENvZGVCbG9jay4KICAgICBzdHViQ2Fs
bC5jYWxsKCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgVHJ1c3Rl
ZEltbVB0cihKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKSkpKTsKKyAgICBhZGRTbG93Q2FzZShi
cmFuY2g2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoSlNWYWx1
ZSgpKSkpKTsKICAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihKU1N0YWNrOjpDYWxs
ZXJGcmFtZSwgY2FsbEZyYW1lUmVnaXN0ZXIpOwogCiAgICAgc2FtcGxlQ29kZUJsb2NrKG1fY29k
ZUJsb2NrKTsKQEAgLTEzNCw3ICsxMzQsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFsU2xv
d0Nhc2UoVmVjdG9yCiB7CiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwogCi0gICAgZW1pdEdldEZy
b21DYWxsRnJhbWVIZWFkZXJQdHIoSlNTdGFjazo6Q2FsbGVlLCByZWdUMCk7CisgICAgZW1pdEdl
dEZyb21DYWxsRnJhbWVIZWFkZXI2NChKU1N0YWNrOjpDYWxsZWUsIHJlZ1QwKTsKICAgICBlbWl0
TmFrZWRDYWxsKG1fZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aVZpcnR1YWxDYWxsKCkpOwogCiAg
ICAgc2FtcGxlQ29kZUJsb2NrKG1fY29kZUJsb2NrKTsKQEAgLTE3OSw4ICsxNzksOCBAQCB2b2lk
IEpJVDo6Y29tcGlsZU9wQ2FsbChPcGNvZGVJRCBvcGNvZGVJCiAgICAgc3RvcmUzMihUcnVzdGVk
SW1tMzIoaW5zdHJ1Y3Rpb24gLSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKSks
IEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIEpTU3RhY2s6OkFyZ3VtZW50Q291bnQgKiBzdGF0
aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRW
YWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihjYWxsZWUsIHJlZ1QwKTsgLy8gcmVnVDAgaG9sZHMgY2FsbGVlLgogCi0gICAgc3RvcmVQdHIo
Y2FsbEZyYW1lUmVnaXN0ZXIsIEFkZHJlc3MocmVnVDEsIEpTU3RhY2s6OkNhbGxlckZyYW1lICog
c3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSkpOwotICAgIHN0b3JlUHRyKHJlZ1Qw
LCBBZGRyZXNzKHJlZ1QxLCBKU1N0YWNrOjpDYWxsZWUgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVv
ZihSZWdpc3RlcikpKSk7CisgICAgc3RvcmU2NChjYWxsRnJhbWVSZWdpc3RlciwgQWRkcmVzcyhy
ZWdUMSwgSlNTdGFjazo6Q2FsbGVyRnJhbWUgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdp
c3RlcikpKSk7CisgICAgc3RvcmU2NChyZWdUMCwgQWRkcmVzcyhyZWdUMSwgSlNTdGFjazo6Q2Fs
bGVlICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSkpOwogICAgIG1vdmUocmVn
VDEsIGNhbGxGcmFtZVJlZ2lzdGVyKTsKIAogICAgIGlmIChvcGNvZGVJRCA9PSBvcF9jYWxsX2V2
YWwpIHsKQEAgLTE5MCw3ICsxOTAsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChPcGNvZGVJ
RCBvcGNvZGVJCiAKICAgICBEYXRhTGFiZWxQdHIgYWRkcmVzc09mTGlua2VkRnVuY3Rpb25DaGVj
azsKICAgICBCRUdJTl9VTklOVEVSUlVQVEVEX1NFUVVFTkNFKHNlcXVlbmNlT3BDYWxsKTsKLSAg
ICBKdW1wIHNsb3dDYXNlID0gYnJhbmNoUHRyV2l0aFBhdGNoKE5vdEVxdWFsLCByZWdUMCwgYWRk
cmVzc09mTGlua2VkRnVuY3Rpb25DaGVjaywgVHJ1c3RlZEltbVB0cihKU1ZhbHVlOjplbmNvZGUo
SlNWYWx1ZSgpKSkpOworICAgIEp1bXAgc2xvd0Nhc2UgPSBicmFuY2hQdHJXaXRoUGF0Y2goTm90
RXF1YWwsIHJlZ1QwLCBhZGRyZXNzT2ZMaW5rZWRGdW5jdGlvbkNoZWNrLCBUcnVzdGVkSW1tUHRy
KDApKTsKICAgICBFTkRfVU5JTlRFUlJVUFRFRF9TRVFVRU5DRShzZXF1ZW5jZU9wQ2FsbCk7CiAg
ICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2UpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVElubGluZU1ldGhvZHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVElubGluZU1ldGhvZHMuaAkocmV2aXNpb24gMTMxMTYyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVNZXRob2RzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2
LDcgKzM2LDExIEBAIG5hbWVzcGFjZSBKU0MgewogQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1p
dEdldEpJVFN0dWJBcmcodW5zaWduZWQgYXJndW1lbnROdW1iZXIsIFJlZ2lzdGVySUQgZHN0KQog
ewogICAgIHVuc2lnbmVkIGFyZ3VtZW50U3RhY2tPZmZzZXQgPSAoYXJndW1lbnROdW1iZXIgKiAo
c2l6ZW9mKEpTVmFsdWUpIC8gc2l6ZW9mKHZvaWQqKSkpICsgSklUU1RBQ0tGUkFNRV9BUkdTX0lO
REVYOworI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgcGVlayhkc3QsIGFyZ3VtZW50U3RhY2tP
ZmZzZXQpOworI2Vsc2UKKyAgICBwZWVrNjQoZHN0LCBhcmd1bWVudFN0YWNrT2Zmc2V0KTsKKyNl
bmRpZgogfQogCiBBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudEltbWVk
aWF0ZURvdWJsZSh1bnNpZ25lZCBzcmMpCkBAIC01MCwyOCArNTQsNDIgQEAgQUxXQVlTX0lOTElO
RSBKU1ZhbHVlIEpJVDo6Z2V0Q29uc3RhbnRPcAogICAgIHJldHVybiBtX2NvZGVCbG9jay0+Z2V0
Q29uc3RhbnQoc3JjKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdFB1dFRvQ2Fs
bEZyYW1lSGVhZGVyKFJlZ2lzdGVySUQgZnJvbSwgSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyRW50
cnkgZW50cnkpCi17Ci0gICAgc3RvcmVQdHIoZnJvbSwgcGF5bG9hZEZvcihlbnRyeSwgY2FsbEZy
YW1lUmVnaXN0ZXIpKTsKLX0KLQogQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdFB1dENlbGxU
b0NhbGxGcmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRl
ckVudHJ5IGVudHJ5KQogewogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgc3RvcmUzMihUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIHRhZ0ZvcihlbnRyeSwgY2FsbEZyYW1lUmVnaXN0
ZXIpKTsKKyAgICBzdG9yZTMyKGZyb20sIHBheWxvYWRGb3IoZW50cnksIGNhbGxGcmFtZVJlZ2lz
dGVyKSk7CisjZWxzZQorICAgIHN0b3JlNjQoZnJvbSwgcGF5bG9hZEZvcihlbnRyeSwgY2FsbEZy
YW1lUmVnaXN0ZXIpKTsKICNlbmRpZgotICAgIHN0b3JlUHRyKGZyb20sIHBheWxvYWRGb3IoZW50
cnksIGNhbGxGcmFtZVJlZ2lzdGVyKSk7CiB9CiAKIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVt
aXRQdXRJbnRUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIEpTU3RhY2s6OkNhbGxG
cmFtZUhlYWRlckVudHJ5IGVudHJ5KQogeworI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgc3Rv
cmUzMihUcnVzdGVkSW1tMzIoSW50MzJUYWcpLCBpbnRUYWdGb3IoZW50cnksIGNhbGxGcmFtZVJl
Z2lzdGVyKSk7CiAgICAgc3RvcmUzMihmcm9tLCBpbnRQYXlsb2FkRm9yKGVudHJ5LCBjYWxsRnJh
bWVSZWdpc3RlcikpOworI2Vsc2UKKyAgICBzdG9yZTY0KGZyb20sIHBheWxvYWRGb3IoZW50cnks
IGNhbGxGcmFtZVJlZ2lzdGVyKSk7CisjZW5kaWYKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEpJ
VDo6ZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lzdGVySUQgZnJvbSwgSlNTdGFjazo6Q2Fs
bEZyYW1lSGVhZGVyRW50cnkgZW50cnkpCit7CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICBz
dG9yZVB0cihmcm9tLCBwYXlsb2FkRm9yKGVudHJ5LCBjYWxsRnJhbWVSZWdpc3RlcikpOworI2Vs
c2UKKyAgICBzdG9yZTY0KGZyb20sIHBheWxvYWRGb3IoZW50cnksIGNhbGxGcmFtZVJlZ2lzdGVy
KSk7CisjZW5kaWYKIH0KIAogQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdFB1dEltbWVkaWF0
ZVRvQ2FsbEZyYW1lSGVhZGVyKHZvaWQqIHZhbHVlLCBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJF
bnRyeSBlbnRyeSkKIHsKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQogICAgIHN0b3JlUHRyKFRydXN0
ZWRJbW1QdHIodmFsdWUpLCBBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCBlbnRyeSAqIHNpemVv
ZihSZWdpc3RlcikpKTsKKyNlbHNlCisgICAgc3RvcmU2NChUcnVzdGVkSW1tNjQodmFsdWUpLCBB
ZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCBlbnRyeSAqIHNpemVvZihSZWdpc3RlcikpKTsKKyNl
bmRpZgogfQogCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0RnJvbUNhbGxGcmFtZUhl
YWRlclB0cihKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJFbnRyeSBlbnRyeSwgUmVnaXN0ZXJJRCB0
bywgUmVnaXN0ZXJJRCBmcm9tKQpAQCAtODIsNiArMTAwLDIyIEBAIEFMV0FZU19JTkxJTkUgdm9p
ZCBKSVQ6OmVtaXRHZXRGcm9tQ2FsbEYKICNlbmRpZgogfQogCitBTFdBWVNfSU5MSU5FIHZvaWQg
SklUOjplbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlcjMyKEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRl
ckVudHJ5IGVudHJ5LCBSZWdpc3RlcklEIHRvLCBSZWdpc3RlcklEIGZyb20pCit7CisgICAgbG9h
ZDMyKEFkZHJlc3MoZnJvbSwgZW50cnkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgdG8pOworI2lmIFVT
RShKU1ZBTFVFNjQpCisgICAga2lsbExhc3RSZXN1bHRSZWdpc3RlcigpOworI2VuZGlmCit9CisK
KyNpZiBVU0UoSlNWQUxVRTY0KQorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldEZyb21D
YWxsRnJhbWVIZWFkZXI2NChKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJFbnRyeSBlbnRyeSwgUmVn
aXN0ZXJJRCB0bywgUmVnaXN0ZXJJRCBmcm9tKQoreworICAgIGxvYWQ2NChBZGRyZXNzKGZyb20s
IGVudHJ5ICogc2l6ZW9mKFJlZ2lzdGVyKSksIHRvKTsKKyAgICBraWxsTGFzdFJlc3VsdFJlZ2lz
dGVyKCk7Cit9CisjZW5kaWYKKwogQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdExvYWRDaGFy
YWN0ZXJTdHJpbmcoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0LCBKdW1wTGlzdCYgZmFp
bHVyZXMpCiB7CiAgICAgZmFpbHVyZXMuYXBwZW5kKGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVz
cyhzcmMsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tUHRyKG1fZ2xvYmFs
RGF0YS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwpAQCAtMTAxLDE0ICsxMzUsNiBAQCBBTFdB
WVNfSU5MSU5FIHZvaWQgSklUOjplbWl0TG9hZENoYXJhY3RlCiAgICAgY29udDhCaXQubGluayh0
aGlzKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldEZyb21DYWxsRnJhbWVI
ZWFkZXIzMihKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJFbnRyeSBlbnRyeSwgUmVnaXN0ZXJJRCB0
bywgUmVnaXN0ZXJJRCBmcm9tKQotewotICAgIGxvYWQzMihBZGRyZXNzKGZyb20sIGVudHJ5ICog
c2l6ZW9mKFJlZ2lzdGVyKSksIHRvKTsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGtpbGxMYXN0
UmVzdWx0UmVnaXN0ZXIoKTsKLSNlbmRpZgotfQotCiBBTFdBWVNfSU5MSU5FIEpJVDo6Q2FsbCBK
SVQ6OmVtaXROYWtlZENhbGwoQ29kZVB0ciBmdW5jdGlvbikKIHsKICAgICBBU1NFUlQobV9ieXRl
Y29kZU9mZnNldCAhPSAodW5zaWduZWQpLTEpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBi
ZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVj
b2RlT2Zmc2V0IGlzIHNldC4KQEAgLTQ3MSw4ICs0OTcsOCBAQCBpbmxpbmUgdm9pZCBKSVQ6OmVt
aXRBbGxvY2F0ZUpTQXJyYXkodW5zCiAgICAgLy8gU3RvcmUgdGhlIHZhbHVlcyB3ZSBoYXZlLgog
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogI2lmIFVTRShKU1ZB
TFVFNjQpCi0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3RlciwgKHZhbHVl
c1JlZ2lzdGVyICsgaSkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgc3RvcmFnZVB0cik7Ci0gICAgICAg
IHN0b3JlUHRyKHN0b3JhZ2VQdHIsIEFkZHJlc3Moc3RvcmFnZVJlc3VsdCwgc2l6ZW9mKFdyaXRl
QmFycmllcjxVbmtub3duPikgKiBpKSk7CisgICAgICAgIGxvYWQ2NChBZGRyZXNzKGNhbGxGcmFt
ZVJlZ2lzdGVyLCAodmFsdWVzUmVnaXN0ZXIgKyBpKSAqIHNpemVvZihSZWdpc3RlcikpLCBzdG9y
YWdlUHRyKTsKKyAgICAgICAgc3RvcmU2NChzdG9yYWdlUHRyLCBBZGRyZXNzKHN0b3JhZ2VSZXN1
bHQsIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pICogaSkpOwogI2Vsc2UKICAgICAgICAg
bG9hZDMyKEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsICh2YWx1ZXNSZWdpc3RlciArIGkpICog
c2l6ZW9mKFJlZ2lzdGVyKSksIHN0b3JhZ2VQdHIpOwogICAgICAgICBzdG9yZTMyKHN0b3JhZ2VQ
dHIsIEFkZHJlc3Moc3RvcmFnZVJlc3VsdCwgc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikg
KiBpKSk7CkBAIC00OTgsNyArNTI0LDcgQEAgaW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKAogICAgICAgICAvLyBXZSdyZSBpbiBhIHNpbXBsZSBjb25maWd1cmF0aW9uOiBv
bmx5IG9uZSBidWNrZXQsIHNvIHdlIGNhbiBqdXN0IGRvIGEgZGlyZWN0CiAgICAgICAgIC8vIHN0
b3JlLgogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIHN0b3JlUHRyKHZhbHVlLCB2YWx1ZVBy
b2ZpbGUtPm1fYnVja2V0cyk7CisgICAgICAgIHN0b3JlNjQodmFsdWUsIHZhbHVlUHJvZmlsZS0+
bV9idWNrZXRzKTsKICNlbHNlCiAgICAgICAgIEVuY29kZWRWYWx1ZURlc2NyaXB0b3IqIGRlc2Ny
aXB0b3IgPSBiaXR3aXNlX2Nhc3Q8RW5jb2RlZFZhbHVlRGVzY3JpcHRvcio+KHZhbHVlUHJvZmls
ZS0+bV9idWNrZXRzKTsKICAgICAgICAgc3RvcmUzMih2YWx1ZSwgJmRlc2NyaXB0b3ItPmFzQml0
cy5wYXlsb2FkKTsKQEAgLTUxNCw3ICs1NDAsNyBAQCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoCiAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKFZhbHVlUHJvZmlsZTo6YnVj
a2V0SW5kZXhNYXNrKSwgYnVja2V0Q291bnRlclJlZ2lzdGVyKTsKICAgICBtb3ZlKFRydXN0ZWRJ
bW1QdHIodmFsdWVQcm9maWxlLT5tX2J1Y2tldHMpLCBzY3JhdGNoKTsKICNpZiBVU0UoSlNWQUxV
RTY0KQotICAgIHN0b3JlUHRyKHZhbHVlLCBCYXNlSW5kZXgoc2NyYXRjaCwgYnVja2V0Q291bnRl
clJlZ2lzdGVyLCBUaW1lc0VpZ2h0KSk7CisgICAgc3RvcmU2NCh2YWx1ZSwgQmFzZUluZGV4KHNj
cmF0Y2gsIGJ1Y2tldENvdW50ZXJSZWdpc3RlciwgVGltZXNFaWdodCkpOwogI2VsaWYgVVNFKEpT
VkFMVUUzMl82NCkKICAgICBzdG9yZTMyKHZhbHVlLCBCYXNlSW5kZXgoc2NyYXRjaCwgYnVja2V0
Q291bnRlclJlZ2lzdGVyLCBUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5h
c0JpdHMucGF5bG9hZCkpKTsKICAgICBzdG9yZTMyKHZhbHVlVGFnLCBCYXNlSW5kZXgoc2NyYXRj
aCwgYnVja2V0Q291bnRlclJlZ2lzdGVyLCBUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoSlNW
YWx1ZSwgdS5hc0JpdHMudGFnKSkpOwpAQCAtODcyLDkgKzg5OCw5IEBAIEFMV0FZU19JTkxJTkUg
dm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFsUmUKICAgICBpZiAobV9jb2RlQmxvY2stPmlzQ29uc3Rh
bnRSZWdpc3RlckluZGV4KHNyYykpIHsKICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1fY29kZUJs
b2NrLT5nZXRDb25zdGFudChzcmMpOwogICAgICAgICBpZiAoIXZhbHVlLmlzTnVtYmVyKCkpCi0g
ICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKSksIGRz
dCk7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUodmFsdWUp
KSwgZHN0KTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgbW92ZShJbW1QdHIoSlNWYWx1ZTo6
ZW5jb2RlKHZhbHVlKSksIGRzdCk7CisgICAgICAgICAgICBtb3ZlKEltbTY0KEpTVmFsdWU6OmVu
Y29kZSh2YWx1ZSkpLCBkc3QpOwogICAgICAgICBraWxsTGFzdFJlc3VsdFJlZ2lzdGVyKCk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CkBAIC04ODcsNyArOTEzLDcgQEAgQUxXQVlTX0lOTElORSB2
b2lkIEpJVDo6ZW1pdEdldFZpcnR1YWxSZQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
bG9hZFB0cihBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCBzcmMgKiBzaXplb2YoUmVnaXN0ZXIp
KSwgZHN0KTsKKyAgICBsb2FkNjQoQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3Rlciwgc3JjICogc2l6
ZW9mKFJlZ2lzdGVyKSksIGRzdCk7CiAgICAga2lsbExhc3RSZXN1bHRSZWdpc3RlcigpOwogfQog
CkBAIC05MTQsMTkgKzk0MCwxOSBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRD
b25zdGFuCiAKIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
dW5zaWduZWQgZHN0LCBSZWdpc3RlcklEIGZyb20pCiB7Ci0gICAgc3RvcmVQdHIoZnJvbSwgQWRk
cmVzcyhjYWxsRnJhbWVSZWdpc3RlciwgZHN0ICogc2l6ZW9mKFJlZ2lzdGVyKSkpOworICAgIHN0
b3JlNjQoZnJvbSwgQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3RlciwgZHN0ICogc2l6ZW9mKFJlZ2lz
dGVyKSkpOwogICAgIG1fbGFzdFJlc3VsdEJ5dGVjb2RlUmVnaXN0ZXIgPSAoZnJvbSA9PSBjYWNo
ZWRSZXN1bHRSZWdpc3RlcikgPyBzdGF0aWNfY2FzdDxpbnQ+KGRzdCkgOiBzdGQ6Om51bWVyaWNf
bGltaXRzPGludD46Om1heCgpOwogfQogCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SW5p
dFJlZ2lzdGVyKHVuc2lnbmVkIGRzdCkKIHsKLSAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKSksIEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIs
IGRzdCAqIHNpemVvZihSZWdpc3RlcikpKTsKKyAgICBzdG9yZTY0KFRydXN0ZWRJbW02NChKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSkpLCBBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCBk
c3QgKiBzaXplb2YoUmVnaXN0ZXIpKSk7CiB9CiAKIEFMV0FZU19JTkxJTkUgSklUOjpKdW1wIEpJ
VDo6ZW1pdEp1bXBJZkpTQ2VsbChSZWdpc3RlcklEIHJlZykKIHsKICNpZiBVU0UoSlNWQUxVRTY0
KQotICAgIHJldHVybiBicmFuY2hUZXN0UHRyKFplcm8sIHJlZywgdGFnTWFza1JlZ2lzdGVyKTsK
KyAgICByZXR1cm4gYnJhbmNoVGVzdDY0KFplcm8sIHJlZywgdGFnTWFza1JlZ2lzdGVyKTsKICNl
bHNlCiAgICAgcmV0dXJuIGJyYW5jaFRlc3QzMihaZXJvLCByZWcsIFRydXN0ZWRJbW0zMihUYWdN
YXNrKSk7CiAjZW5kaWYKQEAgLTkzNSw3ICs5NjEsNyBAQCBBTFdBWVNfSU5MSU5FIEpJVDo6SnVt
cCBKSVQ6OmVtaXRKdW1wSWZKCiBBTFdBWVNfSU5MSU5FIEpJVDo6SnVtcCBKSVQ6OmVtaXRKdW1w
SWZCb3RoSlNDZWxscyhSZWdpc3RlcklEIHJlZzEsIFJlZ2lzdGVySUQgcmVnMiwgUmVnaXN0ZXJJ
RCBzY3JhdGNoKQogewogICAgIG1vdmUocmVnMSwgc2NyYXRjaCk7Ci0gICAgb3JQdHIocmVnMiwg
c2NyYXRjaCk7CisgICAgb3I2NChyZWcyLCBzY3JhdGNoKTsKICAgICByZXR1cm4gZW1pdEp1bXBJ
ZkpTQ2VsbChzY3JhdGNoKTsKIH0KIApAQCAtOTQ3LDcgKzk3Myw3IEBAIEFMV0FZU19JTkxJTkUg
dm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2UKIEFMV0FZU19JTkxJTkUgSklUOjpKdW1wIEpJVDo6
ZW1pdEp1bXBJZk5vdEpTQ2VsbChSZWdpc3RlcklEIHJlZykKIHsKICNpZiBVU0UoSlNWQUxVRTY0
KQotICAgIHJldHVybiBicmFuY2hUZXN0UHRyKE5vblplcm8sIHJlZywgdGFnTWFza1JlZ2lzdGVy
KTsKKyAgICByZXR1cm4gYnJhbmNoVGVzdDY0KE5vblplcm8sIHJlZywgdGFnTWFza1JlZ2lzdGVy
KTsKICNlbHNlCiAgICAgcmV0dXJuIGJyYW5jaFRlc3QzMihOb25aZXJvLCByZWcsIFRydXN0ZWRJ
bW0zMihUYWdNYXNrKSk7CiAjZW5kaWYKQEAgLTk4OCw3ICsxMDE0LDcgQEAgaW5saW5lIHZvaWQg
SklUOjplbWl0TG9hZEludDMyVG9Eb3VibGUoaQogQUxXQVlTX0lOTElORSBKSVQ6Okp1bXAgSklU
OjplbWl0SnVtcElmSW1tZWRpYXRlSW50ZWdlcihSZWdpc3RlcklEIHJlZykKIHsKICNpZiBVU0Uo
SlNWQUxVRTY0KQotICAgIHJldHVybiBicmFuY2hQdHIoQWJvdmVPckVxdWFsLCByZWcsIHRhZ1R5
cGVOdW1iZXJSZWdpc3Rlcik7CisgICAgcmV0dXJuIGJyYW5jaDY0KEFib3ZlT3JFcXVhbCwgcmVn
LCB0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOwogI2Vsc2UKICAgICByZXR1cm4gYnJhbmNoVGVzdDMy
KE5vblplcm8sIHJlZywgVHJ1c3RlZEltbTMyKFRhZ1R5cGVOdW1iZXIpKTsKICNlbmRpZgpAQCAt
OTk3LDcgKzEwMjMsNyBAQCBBTFdBWVNfSU5MSU5FIEpJVDo6SnVtcCBKSVQ6OmVtaXRKdW1wSWZJ
CiBBTFdBWVNfSU5MSU5FIEpJVDo6SnVtcCBKSVQ6OmVtaXRKdW1wSWZOb3RJbW1lZGlhdGVJbnRl
Z2VyKFJlZ2lzdGVySUQgcmVnKQogewogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgcmV0dXJuIGJy
YW5jaFB0cihCZWxvdywgcmVnLCB0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOworICAgIHJldHVybiBi
cmFuY2g2NChCZWxvdywgcmVnLCB0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOwogI2Vsc2UKICAgICBy
ZXR1cm4gYnJhbmNoVGVzdDMyKFplcm8sIHJlZywgVHJ1c3RlZEltbTMyKFRhZ1R5cGVOdW1iZXIp
KTsKICNlbmRpZgpAQCAtMTAwNiw3ICsxMDMyLDcgQEAgQUxXQVlTX0lOTElORSBKSVQ6Okp1bXAg
SklUOjplbWl0SnVtcElmTgogQUxXQVlTX0lOTElORSBKSVQ6Okp1bXAgSklUOjplbWl0SnVtcElm
Tm90SW1tZWRpYXRlSW50ZWdlcnMoUmVnaXN0ZXJJRCByZWcxLCBSZWdpc3RlcklEIHJlZzIsIFJl
Z2lzdGVySUQgc2NyYXRjaCkKIHsKICAgICBtb3ZlKHJlZzEsIHNjcmF0Y2gpOwotICAgIGFuZFB0
cihyZWcyLCBzY3JhdGNoKTsKKyAgICBhbmQ2NChyZWcyLCBzY3JhdGNoKTsKICAgICByZXR1cm4g
ZW1pdEp1bXBJZk5vdEltbWVkaWF0ZUludGVnZXIoc2NyYXRjaCk7CiB9CiAKQEAgLTEwNTQsNyAr
MTA4MCw3IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRGYXN0QXJpdGhJbnQKICNpZiBV
U0UoSlNWQUxVRTY0KQogICAgIGlmIChzcmMgIT0gZGVzdCkKICAgICAgICAgbW92ZShzcmMsIGRl
c3QpOwotICAgIG9yUHRyKHRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgZGVzdCk7CisgICAgb3I2NCh0
YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIGRlc3QpOwogI2Vsc2UKICAgICBzaWduRXh0ZW5kMzJUb1B0
cihzcmMsIGRlc3QpOwogICAgIGFkZFB0cihkZXN0LCBkZXN0KTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkocmV2aXNpb24gMTMxMTYyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQ4
LDE0ICsyNDgsMTQgQEAgSklUOjpMYWJlbCBKSVQ6OnByaXZhdGVDb21waWxlQ1RJTmF0aXZlQwog
ICAgIC8vIEhvc3QgZnVuY3Rpb24gc2lnbmF0dXJlOiBmKEV4ZWNTdGF0ZSopOwogICAgIG1vdmUo
Y2FsbEZyYW1lUmVnaXN0ZXIsIFg4NlJlZ2lzdGVyczo6ZWRpKTsKIAotICAgIHN1YlB0cihUcnVz
dGVkSW1tMzIoMTYgLSBzaXplb2Yodm9pZCopKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOyAvLyBB
bGlnbiBzdGFjayBhZnRlciBjYWxsLgorICAgIHN1YlB0cihUcnVzdGVkSW1tMzIoMTYgLSBzaXpl
b2YoaW50NjRfdCkpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7IC8vIEFsaWduIHN0YWNrIGFmdGVy
IGNhbGwuCiAKICAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihKU1N0YWNrOjpDYWxs
ZWUsIFg4NlJlZ2lzdGVyczo6ZXNpKTsKICAgICBsb2FkUHRyKEFkZHJlc3MoWDg2UmVnaXN0ZXJz
Ojplc2ksIE9CSkVDVF9PRkZTRVRPRihKU0Z1bmN0aW9uLCBtX2V4ZWN1dGFibGUpKSwgWDg2UmVn
aXN0ZXJzOjpyOSk7CiAgICAgbW92ZShyZWdUMCwgY2FsbEZyYW1lUmVnaXN0ZXIpOyAvLyBFYWdl
cmx5IHJlc3RvcmUgY2FsbGVyIGZyYW1lIHJlZ2lzdGVyIHRvIGF2b2lkIGxvYWRpbmcgZnJvbSBz
dGFjay4KICAgICBjYWxsKEFkZHJlc3MoWDg2UmVnaXN0ZXJzOjpyOSwgZXhlY3V0YWJsZU9mZnNl
dFRvRnVuY3Rpb24pKTsKIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoMTYgLSBzaXplb2Yodm9p
ZCopKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoMTYg
LSBzaXplb2YoaW50NjRfdCkpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAKICNlbGlmIENQVShB
Uk0pCiAgICAgLy8gTG9hZCBjYWxsZXIgZnJhbWUncyBzY29wZSBjaGFpbiBpbnRvIHRoaXMgY2Fs
bGZyYW1lIHNvIHRoYXQgd2hhdGV2ZXIgd2UgY2FsbCBjYW4KQEAgLTMxNiw4ICszMTYsOCBAQCBK
SVQ6OkxhYmVsIEpJVDo6cHJpdmF0ZUNvbXBpbGVDVElOYXRpdmVDCiAjZW5kaWYKIAogICAgIC8v
IENoZWNrIGZvciBhbiBleGNlcHRpb24KLSAgICBsb2FkUHRyKCYoZ2xvYmFsRGF0YS0+ZXhjZXB0
aW9uKSwgcmVnVDIpOwotICAgIEp1bXAgZXhjZXB0aW9uSGFuZGxlciA9IGJyYW5jaFRlc3RQdHIo
Tm9uWmVybywgcmVnVDIpOworICAgIGxvYWQ2NCgmKGdsb2JhbERhdGEtPmV4Y2VwdGlvbiksIHJl
Z1QyKTsKKyAgICBKdW1wIGV4Y2VwdGlvbkhhbmRsZXIgPSBicmFuY2hUZXN0NjQoTm9uWmVybywg
cmVnVDIpOwogCiAgICAgLy8gUmV0dXJuLgogICAgIHJldCgpOwpAQCAtMzYwLDkgKzM2MCw5IEBA
IHZvaWQgSklUOjplbWl0X29wX21vdihJbnN0cnVjdGlvbiogY3VycmUKICAgICB9IGVsc2Ugewog
ICAgICAgICBpZiAobV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KHNyYykpIHsK
ICAgICAgICAgICAgIGlmICghZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNOdW1iZXIoKSkKLSAg
ICAgICAgICAgICAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKEpTVmFsdWU6OmVuY29kZShnZXRD
b25zdGFudE9wZXJhbmQoc3JjKSkpLCBBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCBkc3QgKiBz
aXplb2YoUmVnaXN0ZXIpKSk7CisgICAgICAgICAgICAgICAgc3RvcmU2NChUcnVzdGVkSW1tNjQo
SlNWYWx1ZTo6ZW5jb2RlKGdldENvbnN0YW50T3BlcmFuZChzcmMpKSksIEFkZHJlc3MoY2FsbEZy
YW1lUmVnaXN0ZXIsIGRzdCAqIHNpemVvZihSZWdpc3RlcikpKTsKICAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICBzdG9yZVB0cihJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKGdldENvbnN0
YW50T3BlcmFuZChzcmMpKSksIEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIGRzdCAqIHNpemVv
ZihSZWdpc3RlcikpKTsKKyAgICAgICAgICAgICAgICBzdG9yZTY0KEltbTY0KEpTVmFsdWU6OmVu
Y29kZShnZXRDb25zdGFudE9wZXJhbmQoc3JjKSkpLCBBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVy
LCBkc3QgKiBzaXplb2YoUmVnaXN0ZXIpKSk7CiAgICAgICAgICAgICBpZiAoZHN0ID09IG1fbGFz
dFJlc3VsdEJ5dGVjb2RlUmVnaXN0ZXIpCiAgICAgICAgICAgICAgICAga2lsbExhc3RSZXN1bHRS
ZWdpc3RlcigpOwogICAgICAgICB9IGVsc2UgaWYgKChzcmMgPT0gbV9sYXN0UmVzdWx0Qnl0ZWNv
ZGVSZWdpc3RlcikgfHwgKGRzdCA9PSBtX2xhc3RSZXN1bHRCeXRlY29kZVJlZ2lzdGVyKSkgewpA
QCAtMzcyLDggKzM3Miw4IEBAIHZvaWQgSklUOjplbWl0X29wX21vdihJbnN0cnVjdGlvbiogY3Vy
cmUKICAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKICAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgICAgIC8vIFBlcmZvcm0gdGhlIGNvcHkgdmlhIHJlZ1QxOyBkbyBub3Qg
ZGlzdHVyYiBhbnkgbWFwcGluZyBpbiByZWdUMC4KLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVz
cyhjYWxsRnJhbWVSZWdpc3Rlciwgc3JjICogc2l6ZW9mKFJlZ2lzdGVyKSksIHJlZ1QxKTsKLSAg
ICAgICAgICAgIHN0b3JlUHRyKHJlZ1QxLCBBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCBkc3Qg
KiBzaXplb2YoUmVnaXN0ZXIpKSk7CisgICAgICAgICAgICBsb2FkNjQoQWRkcmVzcyhjYWxsRnJh
bWVSZWdpc3Rlciwgc3JjICogc2l6ZW9mKFJlZ2lzdGVyKSksIHJlZ1QxKTsKKyAgICAgICAgICAg
IHN0b3JlNjQocmVnVDEsIEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIGRzdCAqIHNpemVvZihS
ZWdpc3RlcikpKTsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTQ0MSwxOCArNDQxLDE4IEBAIHZv
aWQgSklUOjplbWl0X29wX2luc3RhbmNlb2YoSW5zdHJ1Y3Rpb24KICAgICAvLyBPcHRpbWlzdGlj
YWxseSBsb2FkIHRoZSByZXN1bHQgdHJ1ZSwgYW5kIHN0YXJ0IGxvb3BpbmcuCiAgICAgLy8gSW5p
dGlhbGx5LCByZWdUMSBzdGlsbCBjb250YWlucyBwcm90byBhbmQgcmVnVDIgc3RpbGwgY29udGFp
bnMgdmFsdWUuCiAgICAgLy8gQXMgd2UgbG9vcCByZWdUMiB3aWxsIGJlIHVwZGF0ZWQgd2l0aCBp
dHMgcHJvdG90eXBlLCByZWN1cnNpdmVseSB3YWxraW5nIHRoZSBwcm90b3R5cGUgY2hhaW4uCi0g
ICAgbW92ZShUcnVzdGVkSW1tUHRyKEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkpKSwg
cmVnVDApOworICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4o
dHJ1ZSkpKSwgcmVnVDApOwogICAgIExhYmVsIGxvb3AodGhpcyk7CiAKICAgICAvLyBMb2FkIHRo
ZSBwcm90b3R5cGUgb2YgdGhlIG9iamVjdCBpbiByZWdUMi4gIElmIHRoaXMgaXMgZXF1YWwgdG8g
cmVnVDEgLSBXSU4hCiAgICAgLy8gT3RoZXJ3aXNlLCBjaGVjayBpZiB3ZSd2ZSBoaXQgbnVsbCAt
IGlmIHdlIGhhdmUgdGhlbiBkcm9wIG91dCBvZiB0aGUgbG9vcCwgaWYgbm90IGdvIGFnYWluLgog
ICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHJl
Z1QyKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6cHJvdG90eXBlT2Zm
c2V0KCkpLCByZWdUMik7CisgICAgbG9hZDY0KEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6cHJv
dG90eXBlT2Zmc2V0KCkpLCByZWdUMik7CiAgICAgSnVtcCBpc0luc3RhbmNlID0gYnJhbmNoUHRy
KEVxdWFsLCByZWdUMiwgcmVnVDEpOwogICAgIGVtaXRKdW1wSWZKU0NlbGwocmVnVDIpLmxpbmtU
byhsb29wLCB0aGlzKTsKIAogICAgIC8vIFdlIGdldCBoZXJlIGVpdGhlciBieSBkcm9wcGluZyBv
dXQgb2YgdGhlIGxvb3AsIG9yIGlmIHZhbHVlIHdhcyBub3QgYW4gT2JqZWN0LiAgUmVzdWx0IGlz
IGZhbHNlLgotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFu
KGZhbHNlKSkpLCByZWdUMCk7CisgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2Rl
KGpzQm9vbGVhbihmYWxzZSkpKSwgcmVnVDApOwogCiAgICAgLy8gaXNJbnN0YW5jZSBqdW1wcyBy
aWdodCBkb3duIHRvIGhlcmUsIHRvIHNraXAgc2V0dGluZyB0aGUgcmVzdWx0IHRvIGZhbHNlIChp
dCBoYXMgYWxyZWFkeSBzZXQgdHJ1ZSkuCiAgICAgaXNJbnN0YW5jZS5saW5rKHRoaXMpOwpAQCAt
NDY3LDcgKzQ2Nyw3IEBAIHZvaWQgSklUOjplbWl0X29wX2lzX3VuZGVmaW5lZChJbnN0cnVjdGkK
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAgICAgSnVtcCBpc0Nl
bGwgPSBlbWl0SnVtcElmSlNDZWxsKHJlZ1QwKTsKIAotICAgIGNvbXBhcmVQdHIoRXF1YWwsIHJl
Z1QwLCBUcnVzdGVkSW1tMzIoVmFsdWVVbmRlZmluZWQpLCByZWdUMCk7CisgICAgY29tcGFyZTY0
KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKFZhbHVlVW5kZWZpbmVkKSwgcmVnVDApOwogICAg
IEp1bXAgZG9uZSA9IGp1bXAoKTsKICAgICAKICAgICBpc0NlbGwubGluayh0aGlzKTsKQEAgLTQ5
Myw4ICs0OTMsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19ib29sZWFuKEluc3RydWN0aW9uCiAg
ICAgdW5zaWduZWQgdmFsdWUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwogICAg
IAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICB4b3JQdHIo
VHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KFZhbHVlRmFsc2UpKSwgcmVnVDApOwot
ICAgIHRlc3RQdHIoWmVybywgcmVnVDAsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90
Pih+MSkpLCByZWdUMCk7CisgICAgeG9yNjQoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMy
X3Q+KFZhbHVlRmFsc2UpKSwgcmVnVDApOworICAgIHRlc3Q2NChaZXJvLCByZWdUMCwgVHJ1c3Rl
ZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSksIHJlZ1QwKTsKICAgICBlbWl0VGFnQXNC
b29sSW1tZWRpYXRlKHJlZ1QwKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9
CkBAIC01MDUsNyArNTA1LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfbnVtYmVyKEluc3RydWN0
aW9uKgogICAgIHVuc2lnbmVkIHZhbHVlID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFu
ZDsKICAgICAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAg
dGVzdFB0cihOb25aZXJvLCByZWdUMCwgdGFnVHlwZU51bWJlclJlZ2lzdGVyLCByZWdUMCk7Cisg
ICAgdGVzdDY0KE5vblplcm8sIHJlZ1QwLCB0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHJlZ1QwKTsK
ICAgICBlbWl0VGFnQXNCb29sSW1tZWRpYXRlKHJlZ1QwKTsKICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCk7CiB9CkBAIC03MjgsOSArNzI4LDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfbm90
KEluc3RydWN0aW9uKiBjdXJyZQogICAgIC8vIEludmVydCBhZ2FpbnN0IEpTVmFsdWUoZmFsc2Up
OyBpZiB0aGUgdmFsdWUgd2FzIHRhZ2dlZCBhcyBhIGJvb2xlYW4sIHRoZW4gYWxsIGJpdHMgd2ls
bCBiZQogICAgIC8vIGNsZWFyIG90aGVyIHRoYW4gdGhlIGxvdyBiaXQgKHdoaWNoIHdpbGwgYmUg
MCBvciAxIGZvciBmYWxzZSBvciB0cnVlIGlucHV0cyByZXNwZWN0aXZlbHkpLgogICAgIC8vIFRo
ZW4gaW52ZXJ0IGFnYWluc3QgSlNWYWx1ZSh0cnVlKSwgd2hpY2ggd2lsbCBhZGQgdGhlIHRhZyBi
YWNrIGluLCBhbmQgZmxpcCB0aGUgbG93IGJpdC4KLSAgICB4b3JQdHIoVHJ1c3RlZEltbTMyKHN0
YXRpY19jYXN0PGludDMyX3Q+KFZhbHVlRmFsc2UpKSwgcmVnVDApOworICAgIHhvcjY0KFRydXN0
ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90PihWYWx1ZUZhbHNlKSksIHJlZ1QwKTsKICAgICBh
ZGRTbG93Q2FzZShicmFuY2hUZXN0UHRyKE5vblplcm8sIHJlZ1QwLCBUcnVzdGVkSW1tMzIoc3Rh
dGljX2Nhc3Q8aW50MzJfdD4ofjEpKSkpOwotICAgIHhvclB0cihUcnVzdGVkSW1tMzIoc3RhdGlj
X2Nhc3Q8aW50MzJfdD4oVmFsdWVUcnVlKSksIHJlZ1QwKTsKKyAgICB4b3I2NChUcnVzdGVkSW1t
MzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oVmFsdWVUcnVlKSksIHJlZ1QwKTsKIAogICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7CiB9CkBA
IC03NDAsMTEgKzc0MCwxMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qZmFsc2UoSW5zdHJ1Y3Rpb24q
IGN1CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFu
ZDsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9w
ZXJhbmQsIHJlZ1QwKTsKIAotICAgIGFkZEp1bXAoYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgVHJ1
c3RlZEltbVB0cihKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoMCkpKSksIHRhcmdldCk7CisgICAg
YWRkSnVtcChicmFuY2g2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNv
ZGUoanNOdW1iZXIoMCkpKSksIHRhcmdldCk7CiAgICAgSnVtcCBpc05vblplcm8gPSBlbWl0SnVt
cElmSW1tZWRpYXRlSW50ZWdlcihyZWdUMCk7CiAKLSAgICBhZGRKdW1wKGJyYW5jaFB0cihFcXVh
bCwgcmVnVDAsIFRydXN0ZWRJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihmYWxzZSkp
KSksIHRhcmdldCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoUHRyKE5vdEVxdWFsLCByZWdUMCwg
VHJ1c3RlZEltbVB0cihKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRydWUpKSkpKTsKKyAgICBh
ZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29k
ZShqc0Jvb2xlYW4oZmFsc2UpKSkpLCB0YXJnZXQpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaDY0
KE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4o
dHJ1ZSkpKSkpOwogCiAgICAgaXNOb25aZXJvLmxpbmsodGhpcyk7CiB9CkBAIC03NjYsOCArNzY2
LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfamVxX251bGwoSW5zdHJ1Y3Rpb24qCiAKICAgICAvLyBO
b3cgaGFuZGxlIHRoZSBpbW1lZGlhdGUgY2FzZXMgLSB1bmRlZmluZWQgJiBudWxsCiAgICAgaXNJ
bW1lZGlhdGUubGluayh0aGlzKTsKLSAgICBhbmRQdHIoVHJ1c3RlZEltbTMyKH5UYWdCaXRVbmRl
ZmluZWQpLCByZWdUMCk7Ci0gICAgYWRkSnVtcChicmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCBUcnVz
dGVkSW1tUHRyKEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsgICAgICAgICAg
ICAKKyAgICBhbmQ2NChUcnVzdGVkSW1tMzIoflRhZ0JpdFVuZGVmaW5lZCksIHJlZ1QwKTsKKyAg
ICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVu
Y29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsgICAgICAgICAgICAKIAogICAgIGlzTm90TWFzcXVl
cmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwogICAgIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0
SXNGb3JlaWduLmxpbmsodGhpcyk7CkBAIC03ODksOCArNzg5LDggQEAgdm9pZCBKSVQ6OmVtaXRf
b3Bfam5lcV9udWxsKEluc3RydWN0aW9uKgogCiAgICAgLy8gTm93IGhhbmRsZSB0aGUgaW1tZWRp
YXRlIGNhc2VzIC0gdW5kZWZpbmVkICYgbnVsbAogICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7
Ci0gICAgYW5kUHRyKFRydXN0ZWRJbW0zMih+VGFnQml0VW5kZWZpbmVkKSwgcmVnVDApOwotICAg
IGFkZEp1bXAoYnJhbmNoUHRyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0cihKU1ZhbHVl
OjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAgICAgCisgICAgYW5kNjQoVHJ1
c3RlZEltbTMyKH5UYWdCaXRVbmRlZmluZWQpLCByZWdUMCk7CisgICAgYWRkSnVtcChicmFuY2g2
NChOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkp
KSksIHRhcmdldCk7ICAgICAgICAgICAgCiAKICAgICB3YXNOb3RJbW1lZGlhdGUubGluayh0aGlz
KTsKIH0KQEAgLTgzNSwxMSArODM1LDExIEBAIHZvaWQgSklUOjplbWl0X29wX2p0cnVlKEluc3Ry
dWN0aW9uKiBjdXIKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0u
dS5vcGVyYW5kOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9u
WzFdLnUub3BlcmFuZCwgcmVnVDApOwogCi0gICAgSnVtcCBpc1plcm8gPSBicmFuY2hQdHIoRXF1
YWwsIHJlZ1QwLCBUcnVzdGVkSW1tUHRyKEpTVmFsdWU6OmVuY29kZShqc051bWJlcigwKSkpKTsK
KyAgICBKdW1wIGlzWmVybyA9IGJyYW5jaDY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTY0KEpT
VmFsdWU6OmVuY29kZShqc051bWJlcigwKSkpKTsKICAgICBhZGRKdW1wKGVtaXRKdW1wSWZJbW1l
ZGlhdGVJbnRlZ2VyKHJlZ1QwKSwgdGFyZ2V0KTsKIAotICAgIGFkZEp1bXAoYnJhbmNoUHRyKEVx
dWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0cihKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRydWUp
KSkpLCB0YXJnZXQpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaFB0cihOb3RFcXVhbCwgcmVnVDAs
IFRydXN0ZWRJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihmYWxzZSkpKSkpOworICAg
IGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5j
b2RlKGpzQm9vbGVhbih0cnVlKSkpKSwgdGFyZ2V0KTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2g2
NChOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFu
KGZhbHNlKSkpKSk7CiAKICAgICBpc1plcm8ubGluayh0aGlzKTsKIH0KQEAgLTg1OSw3ICs4NTks
NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9iaXR4b3IoSW5zdHJ1Y3Rpb24qIGN1CiB7CiAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcnMoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCwgcmVn
VDAsIGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQsIHJlZ1QxKTsKICAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RJbW1lZGlhdGVJbnRlZ2VycyhyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKLSAg
ICB4b3JQdHIocmVnVDEsIHJlZ1QwKTsKKyAgICB4b3I2NChyZWdUMSwgcmVnVDApOwogICAgIGVt
aXRGYXN0QXJpdGhSZVRhZ0ltbWVkaWF0ZShyZWdUMCwgcmVnVDApOwogICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7CiB9CkBAIC04Njgs
NyArODY4LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfYml0b3IoSW5zdHJ1Y3Rpb24qIGN1cgogewog
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJh
bmQsIHJlZ1QwLCBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kLCByZWdUMSk7CiAgICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tZWRpYXRlSW50ZWdlcnMocmVnVDAsIHJlZ1QxLCByZWdU
Mik7Ci0gICAgb3JQdHIocmVnVDEsIHJlZ1QwKTsKKyAgICBvcjY0KHJlZ1QxLCByZWdUMCk7CiAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5k
KTsKIH0KIApAQCAtOTEwLDcgKzkxMCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9wbmFtZXMo
SW5zdHJ1Y3Rpb24KICAgICBnZXRQbmFtZXNTdHViQ2FsbC5hZGRBcmd1bWVudChyZWdUMCk7CiAg
ICAgZ2V0UG5hbWVzU3R1YkNhbGwuY2FsbChkc3QpOwogICAgIGxvYWQzMihBZGRyZXNzKHJlZ1Qw
LCBPQkpFQ1RfT0ZGU0VUT0YoSlNQcm9wZXJ0eU5hbWVJdGVyYXRvciwgbV9qc1N0cmluZ3NTaXpl
KSksIHJlZ1QzKTsKLSAgICBzdG9yZVB0cih0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHBheWxvYWRG
b3IoaSkpOworICAgIHN0b3JlNjQodGFnVHlwZU51bWJlclJlZ2lzdGVyLCBwYXlsb2FkRm9yKGkp
KTsKICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihJbnQzMlRhZyksIGludFRhZ0ZvcihzaXplKSk7
CiAgICAgc3RvcmUzMihyZWdUMywgaW50UGF5bG9hZEZvcihzaXplKSk7CiAgICAgSnVtcCBlbmQg
PSBqdW1wKCk7CkBAIC05NDcsNyArOTQ3LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV4dF9wbmFt
ZShJbnN0cnVjdGlvbgogICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihpdCksIHJlZ1QxKTsKICAgICBs
b2FkUHRyKEFkZHJlc3MocmVnVDEsIE9CSkVDVF9PRkZTRVRPRihKU1Byb3BlcnR5TmFtZUl0ZXJh
dG9yLCBtX2pzU3RyaW5ncykpLCByZWdUMik7CiAKLSAgICBsb2FkUHRyKEJhc2VJbmRleChyZWdU
MiwgcmVnVDAsIFRpbWVzRWlnaHQpLCByZWdUMik7CisgICAgbG9hZDY0KEJhc2VJbmRleChyZWdU
MiwgcmVnVDAsIFRpbWVzRWlnaHQpLCByZWdUMik7CiAKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCwgcmVnVDIpOwogCkBAIC05NjgsNyArOTY4LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
bmV4dF9wbmFtZShJbnN0cnVjdGlvbgogICAgIGFkZEp1bXAoYnJhbmNoVGVzdFB0cihaZXJvLCBB
ZGRyZXNzKHJlZ1QzKSksIHRhcmdldCk7CiAKICAgICBMYWJlbCBjaGVja1Byb3RvdHlwZSh0aGlz
KTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6cHJvdG90eXBlT2Zmc2V0
KCkpLCByZWdUMik7CisgICAgbG9hZDY0KEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6cHJvdG90
eXBlT2Zmc2V0KCkpLCByZWdUMik7CiAgICAgY2FsbEhhc1Byb3BlcnR5LmFwcGVuZChlbWl0SnVt
cElmTm90SlNDZWxsKHJlZ1QyKSk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBKU0NlbGw6
OnN0cnVjdHVyZU9mZnNldCgpKSwgcmVnVDIpOwogICAgIGNhbGxIYXNQcm9wZXJ0eS5hcHBlbmQo
YnJhbmNoUHRyKE5vdEVxdWFsLCByZWdUMiwgQWRkcmVzcyhyZWdUMykpKTsKQEAgLTEwMTYsNyAr
MTAxNiw3IEBAIHZvaWQgSklUOjpjb21waWxlT3BTdHJpY3RFcShJbnN0cnVjdGlvbioKICAgICAK
ICAgICAvLyBKdW1wIHNsb3cgaWYgYm90aCBhcmUgY2VsbHMgKHRvIGNvdmVyIHN0cmluZ3MpLgog
ICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKLSAgICBvclB0cihyZWdUMSwgcmVnVDIpOworICAgIG9y
NjQocmVnVDEsIHJlZ1QyKTsKICAgICBhZGRTbG93Q2FzZShlbWl0SnVtcElmSlNDZWxsKHJlZ1Qy
KSk7CiAgICAgCiAgICAgLy8gSnVtcCBzbG93IGlmIGVpdGhlciBpcyBhIGRvdWJsZS4gRmlyc3Qg
dGVzdCBpZiBpdCdzIGFuIGludGVnZXIsIHdoaWNoIGlzIGZpbmUsIGFuZCB0aGVuIHRlc3QKQEAg
LTEwMjksOSArMTAyOSw5IEBAIHZvaWQgSklUOjpjb21waWxlT3BTdHJpY3RFcShJbnN0cnVjdGlv
bioKICAgICByaWdodE9LLmxpbmsodGhpcyk7CiAKICAgICBpZiAodHlwZSA9PSBPcFN0cmljdEVx
KQotICAgICAgICBjb21wYXJlUHRyKEVxdWFsLCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsKKyAgICAg
ICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsKICAgICBlbHNlCi0gICAg
ICAgIGNvbXBhcmVQdHIoTm90RXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOworICAgICAgICBj
b21wYXJlNjQoTm90RXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOwogICAgIGVtaXRUYWdBc0Jv
b2xJbW1lZGlhdGUocmVnVDApOwogCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwpA
QCAtMTA3Nyw4ICsxMDc3LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goSW5zdHJ1Y3Rpb24q
IGN1cgogICAgIGtpbGxMYXN0UmVzdWx0UmVnaXN0ZXIoKTsgLy8gRklYTUU6IEltcGxpY2l0bHkg
dHJlYXQgb3BfY2F0Y2ggYXMgYSBsYWJlbGVkIHN0YXRlbWVudCwgYW5kIHJlbW92ZSB0aGlzIGxp
bmUgb2YgY29kZS4KICAgICBtb3ZlKHJlZ1QwLCBjYWxsRnJhbWVSZWdpc3Rlcik7CiAgICAgcGVl
ayhyZWdUMywgT0JKRUNUX09GRlNFVE9GKHN0cnVjdCBKSVRTdGFja0ZyYW1lLCBnbG9iYWxEYXRh
KSAvIHNpemVvZih2b2lkKikpOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgT0JKRUNUX09G
RlNFVE9GKEpTR2xvYmFsRGF0YSwgZXhjZXB0aW9uKSksIHJlZ1QwKTsKLSAgICBzdG9yZVB0cihU
cnVzdGVkSW1tUHRyKEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpKSwgQWRkcmVzcyhyZWdUMywg
T0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsRGF0YSwgZXhjZXB0aW9uKSkpOworICAgIGxvYWQ2NChB
ZGRyZXNzKHJlZ1QzLCBPQkpFQ1RfT0ZGU0VUT0YoSlNHbG9iYWxEYXRhLCBleGNlcHRpb24pKSwg
cmVnVDApOworICAgIHN0b3JlNjQoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShKU1ZhbHVl
KCkpKSwgQWRkcmVzcyhyZWdUMywgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsRGF0YSwgZXhjZXB0
aW9uKSkpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFd
LnUub3BlcmFuZCk7CiB9CiAKQEAgLTExNDcsOSArMTE0Nyw5IEBAIHZvaWQgSklUOjplbWl0X29w
X3Rocm93X3JlZmVyZW5jZV9lcnJvcigKIHsKICAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlz
LCBjdGlfb3BfdGhyb3dfcmVmZXJlbmNlX2Vycm9yKTsKICAgICBpZiAoIW1fY29kZUJsb2NrLT5n
ZXRDb25zdGFudChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKS5pc051bWJlcigpKQot
ICAgICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChUcnVzdGVkSW1tUHRyKEpTVmFsdWU6OmVuY29k
ZShtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFu
ZCkpKSk7CisgICAgICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KFRydXN0ZWRJbW02NChKU1ZhbHVl
OjplbmNvZGUobV9jb2RlQmxvY2stPmdldENvbnN0YW50KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51
Lm9wZXJhbmQpKSkpOwogICAgIGVsc2UKLSAgICAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoSW1t
UHRyKEpTVmFsdWU6OmVuY29kZShtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoY3VycmVudEluc3Ry
dWN0aW9uWzFdLnUub3BlcmFuZCkpKSk7CisgICAgICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KElt
bTY0KEpTVmFsdWU6OmVuY29kZShtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoY3VycmVudEluc3Ry
dWN0aW9uWzFdLnUub3BlcmFuZCkpKSk7CiAgICAgc3R1YkNhbGwuY2FsbCgpOwogfQogCkBAIC0x
MTg5LDggKzExODksOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lcV9udWxsKEluc3RydWN0aW9uKiBj
CiAKICAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOwogCi0gICAgYW5kUHRyKFRydXN0ZWRJbW0z
Mih+VGFnQml0VW5kZWZpbmVkKSwgcmVnVDApOwotICAgIGNvbXBhcmVQdHIoRXF1YWwsIHJlZ1Qw
LCBUcnVzdGVkSW1tMzIoVmFsdWVOdWxsKSwgcmVnVDApOworICAgIGFuZDY0KFRydXN0ZWRJbW0z
Mih+VGFnQml0VW5kZWZpbmVkKSwgcmVnVDApOworICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAs
IFRydXN0ZWRJbW0zMihWYWx1ZU51bGwpLCByZWdUMCk7CiAKICAgICB3YXNOb3RJbW1lZGlhdGUu
bGluayh0aGlzKTsKICAgICB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7
CkBAIC0xMjIxLDggKzEyMjEsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXFfbnVsbChJbnN0cnVj
dGlvbioKIAogICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7CiAKLSAgICBhbmRQdHIoVHJ1c3Rl
ZEltbTMyKH5UYWdCaXRVbmRlZmluZWQpLCByZWdUMCk7Ci0gICAgY29tcGFyZVB0cihOb3RFcXVh
bCwgcmVnVDAsIFRydXN0ZWRJbW0zMihWYWx1ZU51bGwpLCByZWdUMCk7CisgICAgYW5kNjQoVHJ1
c3RlZEltbTMyKH5UYWdCaXRVbmRlZmluZWQpLCByZWdUMCk7CisgICAgY29tcGFyZTY0KE5vdEVx
dWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKFZhbHVlTnVsbCksIHJlZ1QwKTsKIAogICAgIHdhc05v
dEltbWVkaWF0ZS5saW5rKHRoaXMpOwogICAgIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQu
bGluayh0aGlzKTsKQEAgLTEyNDcsNyArMTI0Nyw3IEBAIHZvaWQgSklUOjplbWl0X29wX2NyZWF0
ZV9hY3RpdmF0aW9uKEluc3QKIHsKICAgICB1bnNpZ25lZCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rp
b25bMV0udS5vcGVyYW5kOwogICAgIAotICAgIEp1bXAgYWN0aXZhdGlvbkNyZWF0ZWQgPSBicmFu
Y2hUZXN0UHRyKE5vblplcm8sIEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIHNpemVvZihSZWdp
c3RlcikgKiBkc3QpKTsKKyAgICBKdW1wIGFjdGl2YXRpb25DcmVhdGVkID0gYnJhbmNoVGVzdDY0
KE5vblplcm8sIEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIHNpemVvZihSZWdpc3RlcikgKiBk
c3QpKTsKICAgICBKSVRTdHViQ2FsbCh0aGlzLCBjdGlfb3BfcHVzaF9hY3RpdmF0aW9uKS5jYWxs
KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0KTsKICAgICBhY3RpdmF0aW9uQ3JlYXRlZC5saW5rKHRoaXMpOwpAQCAtMTI1Nyw3
ICsxMjU3LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX2FyZ3VtZW50cyhJbnN0cgogewog
ICAgIHVuc2lnbmVkIGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CiAKLSAg
ICBKdW1wIGFyZ3NDcmVhdGVkID0gYnJhbmNoVGVzdFB0cihOb25aZXJvLCBBZGRyZXNzKGNhbGxG
cmFtZVJlZ2lzdGVyLCBzaXplb2YoUmVnaXN0ZXIpICogZHN0KSk7CisgICAgSnVtcCBhcmdzQ3Jl
YXRlZCA9IGJyYW5jaFRlc3Q2NChOb25aZXJvLCBBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCBz
aXplb2YoUmVnaXN0ZXIpICogZHN0KSk7CiAgICAgSklUU3R1YkNhbGwodGhpcywgY3RpX29wX2Ny
ZWF0ZV9hcmd1bWVudHMpLmNhbGwoKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7
CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcih1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIo
ZHN0KSk7CkBAIC0xMjY4LDcgKzEyNjgsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbml0X2xhenlf
cmVnKEluc3RydWN0CiB7CiAgICAgdW5zaWduZWQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFd
LnUub3BlcmFuZDsKIAotICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoMCksIEFkZHJlc3MoY2Fs
bEZyYW1lUmVnaXN0ZXIsIHNpemVvZihSZWdpc3RlcikgKiBkc3QpKTsKKyAgICBzdG9yZTY0KFRy
dXN0ZWRJbW02NCgoaW50NjRfdCkwKSwgQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3Rlciwgc2l6ZW9m
KFJlZ2lzdGVyKSAqIGRzdCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9jb252ZXJ0X3RoaXMo
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEzMjcsMTYgKzEzMjcsMTYgQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2NvbnZlcnRfdGhpcyhJbnN0cgogCiAgICAgbGlua1Nsb3dD
YXNlKGl0ZXIpOwogICAgIGlmIChzaG91bGRFbWl0UHJvZmlsaW5nKCkpCi0gICAgICAgIG1vdmUo
VHJ1c3RlZEltbVB0cihiaXR3aXNlX2Nhc3Q8dm9pZCo+KEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKSkpLCByZWdUMCk7Ci0gICAgSnVtcCBpc05vdFVuZGVmaW5lZCA9IGJyYW5jaFB0cihO
b3RFcXVhbCwgcmVnVDEsIFRydXN0ZWRJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpKSk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0KChKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSkpKSwgcmVnVDApOworICAgIEp1bXAgaXNOb3RVbmRlZmluZWQgPSBicmFuY2g2NChO
b3RFcXVhbCwgcmVnVDEsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSkpKTsKICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKCk7Ci0gICAgbW92ZShUcnVzdGVkSW1t
UHRyKGdsb2JhbFRoaXMpLCByZWdUMCk7CisgICAgbW92ZShUcnVzdGVkSW1tNjQocmVpbnRlcnBy
ZXRfY2FzdDx1aW50cHRyX3Q+KGdsb2JhbFRoaXMpKSwgcmVnVDApOwogICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgcmVnVDApOwogICAg
IGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwgT1BDT0RFX0xFTkdUSChvcF9jb252ZXJ0X3RoaXMp
KTsKIAogICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKICAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGlu
ZygpKQotICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoYml0d2lzZV9jYXN0PHZvaWQqPihKU1Zh
bHVlOjplbmNvZGUobV9nbG9iYWxEYXRhLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSksIHJlZ1Qw
KTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKG1fZ2xvYmFsRGF0
YS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSksIHJlZ1QwKTsKICAgICBpc05vdFVuZGVmaW5lZC5s
aW5rKHRoaXMpOwogICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoKTsKICAgICBKSVRTdHViQ2Fs
bCBzdHViQ2FsbCh0aGlzLCBjdGlfb3BfY29udmVydF90aGlzKTsKQEAgLTEzNTYsNyArMTM1Niw3
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF90b19wcmltaXRpdmUoSW5zdHIKIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9ub3QoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7
Ci0gICAgeG9yUHRyKFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90PihWYWx1ZUZhbHNl
KSksIHJlZ1QwKTsKKyAgICB4b3I2NChUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4o
VmFsdWVGYWxzZSkpLCByZWdUMCk7CiAgICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3Rp
X29wX25vdCk7CiAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQocmVnVDApOwogICAgIHN0dWJDYWxs
LmNhbGwoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7CkBAIC0xNTQ0LDcgKzE1NDQs
NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYXJndW1lbnRfYnlfdmFsKEluCiAKICAgICBuZWcz
MihyZWdUMSk7CiAgICAgc2lnbkV4dGVuZDMyVG9QdHIocmVnVDEsIHJlZ1QxKTsKLSAgICBsb2Fk
UHRyKEJhc2VJbmRleChjYWxsRnJhbWVSZWdpc3RlciwgcmVnVDEsIFRpbWVzRWlnaHQsIENhbGxG
cmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCkgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdp
c3RlcikpKSwgcmVnVDApOworICAgIGxvYWQ2NChCYXNlSW5kZXgoY2FsbEZyYW1lUmVnaXN0ZXIs
IHJlZ1QxLCBUaW1lc0VpZ2h0LCBDYWxsRnJhbWU6OnRoaXNBcmd1bWVudE9mZnNldCgpICogc3Rh
dGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSksIHJlZ1QwKTsKICAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKCk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlZ1QwKTsK
IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nl
c3MuY3BwCShyZXZpc2lvbiAxMzExNjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFByb3BlcnR5QWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM2LDcgKzEzNiw3IEBAIHZv
aWQgSklUOjplbWl0X29wX2dldF9ieV92YWwoSW5zdHJ1Y3Rpb24KICAgICBMYWJlbCBkb25lID0g
bGFiZWwoKTsKICAgICAKICNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgSnVtcCByZXN1bHRPSyA9
IGJyYW5jaFRlc3RQdHIoTm9uWmVybywgcmVnVDApOworICAgIEp1bXAgcmVzdWx0T0sgPSBicmFu
Y2hUZXN0NjQoTm9uWmVybywgcmVnVDApOwogICAgIGJyZWFrcG9pbnQoKTsKICAgICByZXN1bHRP
Sy5saW5rKHRoaXMpOwogI2VuZGlmCkBAIC0xNTQsOCArMTU0LDggQEAgSklUOjpKdW1wTGlzdCBK
SVQ6OmVtaXRDb250aWd1b3VzR2V0QnlWYQogICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2hU
ZXN0MzIoWmVybywgcmVnVDIsIFRydXN0ZWRJbW0zMihIYXNDb250aWd1b3VzKSk7CiAgICAgbG9h
ZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMik7
CiAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBBZGRy
ZXNzKHJlZ1QyLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKSk7Ci0gICAgbG9h
ZFB0cihCYXNlSW5kZXgocmVnVDIsIHJlZ1QxLCBTY2FsZVB0ciksIHJlZ1QwKTsKLSAgICBzbG93
Q2FzZXMuYXBwZW5kKGJyYW5jaFRlc3RQdHIoWmVybywgcmVnVDApKTsKKyAgICBsb2FkNjQoQmFz
ZUluZGV4KHJlZ1QyLCByZWdUMSwgVGltZXNFaWdodCksIHJlZ1QwKTsKKyAgICBzbG93Q2FzZXMu
YXBwZW5kKGJyYW5jaFRlc3Q2NChaZXJvLCByZWdUMCkpOwogICAgIAogICAgIHJldHVybiBzbG93
Q2FzZXM7CiB9CkBAIC0xNjksOCArMTY5LDggQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRBcnJh
eVN0b3JhZ2VHZXRCeQogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRl
cmZseU9mZnNldCgpKSwgcmVnVDIpOwogICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJv
dmVPckVxdWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5n
dGhPZmZzZXQoKSkpKTsKIAotICAgIGxvYWRQdHIoQmFzZUluZGV4KHJlZ1QyLCByZWdUMSwgU2Nh
bGVQdHIsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAgc2xvd0Nh
c2VzLmFwcGVuZChicmFuY2hUZXN0UHRyKFplcm8sIHJlZ1QwKSk7CisgICAgbG9hZDY0KEJhc2VJ
bmRleChyZWdUMiwgcmVnVDEsIFRpbWVzRWlnaHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0
KCkpLCByZWdUMCk7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hUZXN0NjQoWmVybywgcmVn
VDApKTsKICAgICAKICAgICByZXR1cm4gc2xvd0Nhc2VzOwogfQpAQCAtMTg3LDcgKzE4Nyw3IEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKEluc3RydWMKICAgICBsaW5rU2xvd0Nh
c2UoaXRlcik7IC8vIGJhc2UgYXJyYXkgY2hlY2sKICAgICBKdW1wIG5vdFN0cmluZyA9IGJyYW5j
aFB0cihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSks
IFRydXN0ZWRJbW1QdHIobV9nbG9iYWxEYXRhLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKTsKICAg
ICBlbWl0TmFrZWRDYWxsKENvZGVMb2NhdGlvbkxhYmVsKG1fZ2xvYmFsRGF0YS0+Z2V0Q1RJU3R1
YihzdHJpbmdHZXRCeVZhbFN0dWJHZW5lcmF0b3IpLmNvZGUoKSkpOwotICAgIEp1bXAgZmFpbGVk
ID0gYnJhbmNoVGVzdFB0cihaZXJvLCByZWdUMCk7CisgICAgSnVtcCBmYWlsZWQgPSBicmFuY2hU
ZXN0NjQoWmVybywgcmVnVDApOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZWdU
MCk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoanVtcCgpLCBPUENPREVfTEVOR1RIKG9wX2dldF9i
eV92YWwpKTsKICAgICBmYWlsZWQubGluayh0aGlzKTsKQEAgLTIzMyw3ICsyMzMsNyBAQCB2b2lk
IEpJVDo6Y29tcGlsZUdldERpcmVjdE9mZnNldChSZWdpc3RlCiAgICAgICAgIG5lZzMyKG9mZnNl
dCk7CiAgICAgfQogICAgIHNpZ25FeHRlbmQzMlRvUHRyKG9mZnNldCwgb2Zmc2V0KTsKLSAgICBs
b2FkUHRyKEJhc2VJbmRleChzY3JhdGNoLCBvZmZzZXQsIFNjYWxlUHRyLCAoZmlyc3RPdXRPZkxp
bmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCByZXN1bHQpOworICAgIGxv
YWQ2NChCYXNlSW5kZXgoc2NyYXRjaCwgb2Zmc2V0LCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxp
bmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCByZXN1bHQpOwogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfcG5hbWUoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKQEAgLTI0Niw3ICsyNDYsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfcG5hbWUo
SW5zdHJ1Y3RpCiAgICAgdW5zaWduZWQgaSA9IGN1cnJlbnRJbnN0cnVjdGlvbls2XS51Lm9wZXJh
bmQ7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMCk7Ci0gICAg
YWRkU2xvd0Nhc2UoYnJhbmNoUHRyKE5vdEVxdWFsLCByZWdUMCwgYWRkcmVzc0ZvcihleHBlY3Rl
ZCkpKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2g2NChOb3RFcXVhbCwgcmVnVDAsIGFkZHJlc3NG
b3IoZXhwZWN0ZWQpKSk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYmFzZSwgcmVnVDAs
IGl0ZXIsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJh
c2UpOwogCkBAIC0zMzQsNyArMzM0LDcgQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRDb250aWd1
b3VzUHV0QnlWYQogCiAgICAgTGFiZWwgc3RvcmVSZXN1bHQgPSBsYWJlbCgpOwogICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QzKTsKLSAgICBzdG9yZVB0cihyZWdUMywgQmFz
ZUluZGV4KHJlZ1QyLCByZWdUMSwgU2NhbGVQdHIpKTsKKyAgICBzdG9yZTY0KHJlZ1QzLCBCYXNl
SW5kZXgocmVnVDIsIHJlZ1QxLCBUaW1lc0VpZ2h0KSk7CiAgICAgCiAgICAgSnVtcCBkb25lID0g
anVtcCgpOwogICAgIG91dE9mQm91bmRzLmxpbmsodGhpcyk7CkBAIC0zNjQsMTEgKzM2NCwxMSBA
QCBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEFycmF5U3RvcmFnZVB1dEJ5CiAgICAgbG9hZFB0cihB
ZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMik7CiAgICAg
c2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJl
Z1QyLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSkpOwogCi0gICAgSnVtcCBl
bXB0eSA9IGJyYW5jaFRlc3RQdHIoWmVybywgQmFzZUluZGV4KHJlZ1QyLCByZWdUMSwgU2NhbGVQ
dHIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSkpOworICAgIEp1
bXAgZW1wdHkgPSBicmFuY2hUZXN0NjQoWmVybywgQmFzZUluZGV4KHJlZ1QyLCByZWdUMSwgVGlt
ZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSk7CiAK
ICAgICBMYWJlbCBzdG9yZVJlc3VsdCh0aGlzKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHZhbHVlLCByZWdUMyk7Ci0gICAgc3RvcmVQdHIocmVnVDMsIEJhc2VJbmRleChyZWdUMiwgcmVn
VDEsIFNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkp
KTsKKyAgICBzdG9yZTY0KHJlZ1QzLCBCYXNlSW5kZXgocmVnVDIsIHJlZ1QxLCBUaW1lc0VpZ2h0
LCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpKTsKICAgICBKdW1w
IGVuZCA9IGp1bXAoKTsKICAgICAKICAgICBlbXB0eS5saW5rKHRoaXMpOwpAQCAtNTMyLDcgKzUz
Miw3IEBAIHZvaWQgSklUOjpjb21waWxlR2V0QnlJZEhvdFBhdGgoaW50IGJhc2UKICAgICBhZGRT
bG93Q2FzZShzdHJ1Y3R1cmVDaGVjayk7CiAKICAgICBDb252ZXJ0aWJsZUxvYWRMYWJlbCBwcm9w
ZXJ0eVN0b3JhZ2VMb2FkID0gY29udmVydGlibGVMb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2Jq
ZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QwKTsKLSAgICBEYXRhTGFiZWxDb21wYWN0IGRp
c3BsYWNlbWVudExhYmVsID0gbG9hZFB0cldpdGhDb21wYWN0QWRkcmVzc09mZnNldFBhdGNoKEFk
ZHJlc3MocmVnVDAsIHBhdGNoR2V0QnlJZERlZmF1bHRPZmZzZXQpLCByZWdUMCk7CisgICAgRGF0
YUxhYmVsQ29tcGFjdCBkaXNwbGFjZW1lbnRMYWJlbCA9IGxvYWQ2NFdpdGhDb21wYWN0QWRkcmVz
c09mZnNldFBhdGNoKEFkZHJlc3MocmVnVDAsIHBhdGNoR2V0QnlJZERlZmF1bHRPZmZzZXQpLCBy
ZWdUMCk7CiAKICAgICBMYWJlbCBwdXRSZXN1bHQodGhpcyk7CiAKQEAgLTU5OSw3ICs1OTksNyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQoSW5zdHJ1Y3Rpb24qCiAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoUHRyV2l0aFBhdGNoKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0
cnVjdHVyZU9mZnNldCgpKSwgc3RydWN0dXJlVG9Db21wYXJlLCBUcnVzdGVkSW1tUHRyKHJlaW50
ZXJwcmV0X2Nhc3Q8dm9pZCo+KHBhdGNoR2V0QnlJZERlZmF1bHRTdHJ1Y3R1cmUpKSkpOwogCiAg
ICAgQ29udmVydGlibGVMb2FkTGFiZWwgcHJvcGVydHlTdG9yYWdlTG9hZCA9IGNvbnZlcnRpYmxl
TG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdU
Mik7Ci0gICAgRGF0YUxhYmVsMzIgZGlzcGxhY2VtZW50TGFiZWwgPSBzdG9yZVB0cldpdGhBZGRy
ZXNzT2Zmc2V0UGF0Y2gocmVnVDEsIEFkZHJlc3MocmVnVDIsIHBhdGNoUHV0QnlJZERlZmF1bHRP
ZmZzZXQpKTsKKyAgICBEYXRhTGFiZWwzMiBkaXNwbGFjZW1lbnRMYWJlbCA9IHN0b3JlNjRXaXRo
QWRkcmVzc09mZnNldFBhdGNoKHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBwYXRjaFB1dEJ5SWREZWZh
dWx0T2Zmc2V0KSk7CiAKICAgICBFTkRfVU5JTlRFUlJVUFRFRF9TRVFVRU5DRShzZXF1ZW5jZVB1
dEJ5SWQpOwogCkBAIC02MzMsMzUgKzYzMywzNSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0
X2J5X2lkKEluc3RydWN0CiB2b2lkIEpJVDo6Y29tcGlsZVB1dERpcmVjdE9mZnNldChSZWdpc3Rl
cklEIGJhc2UsIFJlZ2lzdGVySUQgdmFsdWUsIFByb3BlcnR5T2Zmc2V0IGNhY2hlZE9mZnNldCkK
IHsKICAgICBpZiAoaXNJbmxpbmVPZmZzZXQoY2FjaGVkT2Zmc2V0KSkgewotICAgICAgICBzdG9y
ZVB0cih2YWx1ZSwgQWRkcmVzcyhiYXNlLCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdl
KCkgKyBzaXplb2YoSlNWYWx1ZSkgKiBvZmZzZXRJbklubGluZVN0b3JhZ2UoY2FjaGVkT2Zmc2V0
KSkpOworICAgICAgICBzdG9yZTY0KHZhbHVlLCBBZGRyZXNzKGJhc2UsIEpTT2JqZWN0OjpvZmZz
ZXRPZklubGluZVN0b3JhZ2UoKSArIHNpemVvZihKU1ZhbHVlKSAqIG9mZnNldEluSW5saW5lU3Rv
cmFnZShjYWNoZWRPZmZzZXQpKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCiAgICAg
bG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIGJhc2Up
OwotICAgIHN0b3JlUHRyKHZhbHVlLCBBZGRyZXNzKGJhc2UsIHNpemVvZihKU1ZhbHVlKSAqIG9m
ZnNldEluQnV0dGVyZmx5KGNhY2hlZE9mZnNldCkpKTsKKyAgICBzdG9yZTY0KHZhbHVlLCBBZGRy
ZXNzKGJhc2UsIHNpemVvZihKU1ZhbHVlKSAqIG9mZnNldEluQnV0dGVyZmx5KGNhY2hlZE9mZnNl
dCkpKTsKIH0KIAogLy8gQ29tcGlsZSBhIGxvYWQgZnJvbSBhbiBvYmplY3QncyBwcm9wZXJ0eSBz
dG9yYWdlLiAgTWF5IG92ZXJ3cml0ZSBiYXNlLgogdm9pZCBKSVQ6OmNvbXBpbGVHZXREaXJlY3RP
ZmZzZXQoUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIHJlc3VsdCwgUHJvcGVydHlPZmZzZXQg
Y2FjaGVkT2Zmc2V0KQogewogICAgIGlmIChpc0lubGluZU9mZnNldChjYWNoZWRPZmZzZXQpKSB7
Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVT
dG9yYWdlKCkgKyBzaXplb2YoSlNWYWx1ZSkgKiBvZmZzZXRJbklubGluZVN0b3JhZ2UoY2FjaGVk
T2Zmc2V0KSksIHJlc3VsdCk7CisgICAgICAgIGxvYWQ2NChBZGRyZXNzKGJhc2UsIEpTT2JqZWN0
OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSArIHNpemVvZihKU1ZhbHVlKSAqIG9mZnNldEluSW5s
aW5lU3RvcmFnZShjYWNoZWRPZmZzZXQpKSwgcmVzdWx0KTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KICAgICAKICAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNPYmplY3Q6OmJ1dHRlcmZseU9m
ZnNldCgpKSwgcmVzdWx0KTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0LCBzaXplb2YoSlNW
YWx1ZSkgKiBvZmZzZXRJbkJ1dHRlcmZseShjYWNoZWRPZmZzZXQpKSwgcmVzdWx0KTsKKyAgICBs
b2FkNjQoQWRkcmVzcyhyZXN1bHQsIHNpemVvZihKU1ZhbHVlKSAqIG9mZnNldEluQnV0dGVyZmx5
KGNhY2hlZE9mZnNldCkpLCByZXN1bHQpOwogfQogCiB2b2lkIEpJVDo6Y29tcGlsZUdldERpcmVj
dE9mZnNldChKU09iamVjdCogYmFzZSwgUmVnaXN0ZXJJRCByZXN1bHQsIFByb3BlcnR5T2Zmc2V0
IGNhY2hlZE9mZnNldCkKIHsKICAgICBpZiAoaXNJbmxpbmVPZmZzZXQoY2FjaGVkT2Zmc2V0KSkg
ewotICAgICAgICBsb2FkUHRyKGJhc2UtPmxvY2F0aW9uRm9yT2Zmc2V0KGNhY2hlZE9mZnNldCks
IHJlc3VsdCk7CisgICAgICAgIGxvYWQ2NChiYXNlLT5sb2NhdGlvbkZvck9mZnNldChjYWNoZWRP
ZmZzZXQpLCByZXN1bHQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAogICAgIGxvYWRQ
dHIoYmFzZS0+YnV0dGVyZmx5QWRkcmVzcygpLCByZXN1bHQpOwotICAgIGxvYWRQdHIoQWRkcmVz
cyhyZXN1bHQsIG9mZnNldEluQnV0dGVyZmx5KGNhY2hlZE9mZnNldCkgKiBzaXplb2YoV3JpdGVC
YXJyaWVyPFVua25vd24+KSksIHJlc3VsdCk7CisgICAgbG9hZDY0KEFkZHJlc3MocmVzdWx0LCBv
ZmZzZXRJbkJ1dHRlcmZseShjYWNoZWRPZmZzZXQpICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtu
b3duPikpLCByZXN1bHQpOwogfQogCiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeUlkVHJh
bnNpdGlvbihTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIFN0cnVjdHVyZSogb2xkU3RydWN0
dXJlLCBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgY2FjaGVkT2Zmc2V0
LCBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywg
Ym9vbCBkaXJlY3QpCkBAIC0xMTk3LDcgKzExOTcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRf
c2NvcGVkX3ZhcihJbnN0cnVjCiAgICAgaWYgKGNoZWNrVG9wTGV2ZWwgJiYgc2tpcC0tKSB7CiAg
ICAgICAgIEp1bXAgYWN0aXZhdGlvbk5vdENyZWF0ZWQ7CiAgICAgICAgIGlmIChjaGVja1RvcExl
dmVsKQotICAgICAgICAgICAgYWN0aXZhdGlvbk5vdENyZWF0ZWQgPSBicmFuY2hUZXN0UHRyKFpl
cm8sIGFkZHJlc3NGb3IobV9jb2RlQmxvY2stPmFjdGl2YXRpb25SZWdpc3RlcigpKSk7CisgICAg
ICAgICAgICBhY3RpdmF0aW9uTm90Q3JlYXRlZCA9IGJyYW5jaFRlc3Q2NChaZXJvLCBhZGRyZXNz
Rm9yKG1fY29kZUJsb2NrLT5hY3RpdmF0aW9uUmVnaXN0ZXIoKSkpOwogICAgICAgICBsb2FkUHRy
KEFkZHJlc3MocmVnVDAsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVnVDApOwogICAgICAg
ICBhY3RpdmF0aW9uTm90Q3JlYXRlZC5saW5rKHRoaXMpOwogICAgIH0KQEAgLTEyMDUsNyArMTIw
NSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9zY29wZWRfdmFyKEluc3RydWMKICAgICAgICAg
bG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsK
IAogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNWYXJpYWJsZU9iamVjdDo6b2Zmc2V0T2ZS
ZWdpc3RlcnMoKSksIHJlZ1QwKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIGN1cnJlbnRJ
bnN0cnVjdGlvblsyXS51Lm9wZXJhbmQgKiBzaXplb2YoUmVnaXN0ZXIpKSwgcmVnVDApOworICAg
IGxvYWQ2NChBZGRyZXNzKHJlZ1QwLCBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kICog
c2l6ZW9mKFJlZ2lzdGVyKSksIHJlZ1QwKTsKICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKCk7
CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVy
YW5kKTsKIH0KQEAgLTEyMjIsNyArMTIyMiw3IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9zY29w
ZWRfdmFyKEluc3RydWMKICAgICBpZiAoY2hlY2tUb3BMZXZlbCAmJiBza2lwLS0pIHsKICAgICAg
ICAgSnVtcCBhY3RpdmF0aW9uTm90Q3JlYXRlZDsKICAgICAgICAgaWYgKGNoZWNrVG9wTGV2ZWwp
Ci0gICAgICAgICAgICBhY3RpdmF0aW9uTm90Q3JlYXRlZCA9IGJyYW5jaFRlc3RQdHIoWmVybywg
YWRkcmVzc0ZvcihtX2NvZGVCbG9jay0+YWN0aXZhdGlvblJlZ2lzdGVyKCkpKTsKKyAgICAgICAg
ICAgIGFjdGl2YXRpb25Ob3RDcmVhdGVkID0gYnJhbmNoVGVzdDY0KFplcm8sIGFkZHJlc3NGb3Io
bV9jb2RlQmxvY2stPmFjdGl2YXRpb25SZWdpc3RlcigpKSk7CiAgICAgICAgIGxvYWRQdHIoQWRk
cmVzcyhyZWdUMSwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZWdUMSk7CiAgICAgICAgIGFj
dGl2YXRpb25Ob3RDcmVhdGVkLmxpbmsodGhpcyk7CiAgICAgfQpAQCAtMTIzMiwxMiArMTIzMiwx
MiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2NvcGVkX3ZhcihJbnN0cnVjCiAgICAgZW1pdFdy
aXRlQmFycmllcihyZWdUMSwgcmVnVDAsIHJlZ1QyLCByZWdUMywgU2hvdWxkRmlsdGVySW1tZWRp
YXRlcywgV3JpdGVCYXJyaWVyRm9yVmFyaWFibGVBY2Nlc3MpOwogCiAgICAgbG9hZFB0cihBZGRy
ZXNzKHJlZ1QxLCBKU1ZhcmlhYmxlT2JqZWN0OjpvZmZzZXRPZlJlZ2lzdGVycygpKSwgcmVnVDEp
OwotICAgIHN0b3JlUHRyKHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBjdXJyZW50SW5zdHJ1Y3Rpb25b
MV0udS5vcGVyYW5kICogc2l6ZW9mKFJlZ2lzdGVyKSkpOworICAgIHN0b3JlNjQocmVnVDAsIEFk
ZHJlc3MocmVnVDEsIGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQgKiBzaXplb2YoUmVn
aXN0ZXIpKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9nbG9iYWxfdmFyKEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgbG9hZFB0cihjdXJyZW50SW5zdHJ1Y3Rp
b25bMl0udS5yZWdpc3RlclBvaW50ZXIsIHJlZ1QwKTsKKyAgICBsb2FkNjQoY3VycmVudEluc3Ry
dWN0aW9uWzJdLnUucmVnaXN0ZXJQb2ludGVyLCByZWdUMCk7CiAgICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZSgpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9u
WzFdLnUub3BlcmFuZCk7CiB9CkBAIC0xMjQ4LDcgKzEyNDgsNyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9wdXRfZ2xvYmFsX3ZhcihJbnN0cnVjCiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGN1
cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQsIHJlZ1QwKTsKICAgICAKLSAgICBzdG9yZVB0
cihyZWdUMCwgY3VycmVudEluc3RydWN0aW9uWzFdLnUucmVnaXN0ZXJQb2ludGVyKTsKKyAgICBz
dG9yZTY0KHJlZ1QwLCBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5yZWdpc3RlclBvaW50ZXIpOwog
ICAgIGlmIChIZWFwOjppc1dyaXRlQmFycmllckVuYWJsZWQoKSkKICAgICAgICAgZW1pdFdyaXRl
QmFycmllcihnbG9iYWxPYmplY3QsIHJlZ1QwLCByZWdUMiwgU2hvdWxkRmlsdGVySW1tZWRpYXRl
cywgV3JpdGVCYXJyaWVyRm9yVmFyaWFibGVBY2Nlc3MpOwogfQpAQCAtMTI2MSw3ICsxMjYxLDcg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dsb2JhbF92YXJfY2hlY2soSQogCiAgICAgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKTsKICAg
ICAKLSAgICBzdG9yZVB0cihyZWdUMCwgY3VycmVudEluc3RydWN0aW9uWzFdLnUucmVnaXN0ZXJQ
b2ludGVyKTsKKyAgICBzdG9yZTY0KHJlZ1QwLCBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5yZWdp
c3RlclBvaW50ZXIpOwogICAgIGlmIChIZWFwOjppc1dyaXRlQmFycmllckVuYWJsZWQoKSkKICAg
ICAgICAgZW1pdFdyaXRlQmFycmllcihnbG9iYWxPYmplY3QsIHJlZ1QwLCByZWdUMiwgU2hvdWxk
RmlsdGVySW1tZWRpYXRlcywgV3JpdGVCYXJyaWVyRm9yVmFyaWFibGVBY2Nlc3MpOwogfQpAQCAt
MTU4Miw4ICsxNTgyLDggQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRJbnRUeXBlZEFycmF5R2V0
QgogICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShyZXN1bHRQYXlsb2FkLCBmcFJlZ1QwKTsK
ICAgICAgICAgYWRkRG91YmxlKEFic29sdXRlQWRkcmVzcygmdHdvVG9UaGUzMiksIGZwUmVnVDAp
OwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIG1vdmVEb3VibGVUb1B0cihmcFJlZ1QwLCBy
ZXN1bHRQYXlsb2FkKTsKLSAgICAgICAgc3ViUHRyKHRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgcmVz
dWx0UGF5bG9hZCk7CisgICAgICAgIG1vdmVEb3VibGVUbzY0KGZwUmVnVDAsIHJlc3VsdFBheWxv
YWQpOworICAgICAgICBzdWI2NCh0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHJlc3VsdFBheWxvYWQp
OwogI2Vsc2UKICAgICAgICAgbW92ZURvdWJsZVRvSW50cyhmcFJlZ1QwLCByZXN1bHRQYXlsb2Fk
LCByZXN1bHRUYWcpOwogI2VuZGlmCkBAIC0xNTkzLDcgKzE1OTMsNyBAQCBKSVQ6Okp1bXBMaXN0
IEpJVDo6ZW1pdEludFR5cGVkQXJyYXlHZXRCCiAgICAgfQogCiAjaWYgVVNFKEpTVkFMVUU2NCkK
LSAgICBvclB0cih0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHJlc3VsdFBheWxvYWQpOworICAgIG9y
NjQodGFnVHlwZU51bWJlclJlZ2lzdGVyLCByZXN1bHRQYXlsb2FkKTsKICNlbHNlCiAgICAgbW92
ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpLCByZXN1bHRUYWcpOwogI2VuZGlmCkBA
IC0xNjQyLDggKzE2NDIsOCBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEZsb2F0VHlwZWRBcnJh
eUdlCiAgICAgfQogICAgIAogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgbW92ZURvdWJsZVRvUHRy
KGZwUmVnVDAsIHJlc3VsdFBheWxvYWQpOwotICAgIHN1YlB0cih0YWdUeXBlTnVtYmVyUmVnaXN0
ZXIsIHJlc3VsdFBheWxvYWQpOworICAgIG1vdmVEb3VibGVUbzY0KGZwUmVnVDAsIHJlc3VsdFBh
eWxvYWQpOworICAgIHN1YjY0KHRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgcmVzdWx0UGF5bG9hZCk7
CiAjZWxzZQogICAgIG1vdmVEb3VibGVUb0ludHMoZnBSZWdUMCwgcmVzdWx0UGF5bG9hZCwgcmVz
dWx0VGFnKTsKICNlbmRpZgpAQCAtMTc0Myw4ICsxNzQzLDggQEAgSklUOjpKdW1wTGlzdCBKSVQ6
OmVtaXRGbG9hdFR5cGVkQXJyYXlQdQogICAgIEp1bXAgcmVhZHkgPSBqdW1wKCk7CiAgICAgZG91
YmxlQ2FzZS5saW5rKHRoaXMpOwogICAgIHNsb3dDYXNlcy5hcHBlbmQoZW1pdEp1bXBJZk5vdElt
bWVkaWF0ZU51bWJlcihlYXJseVNjcmF0Y2gpKTsKLSAgICBhZGRQdHIodGFnVHlwZU51bWJlclJl
Z2lzdGVyLCBlYXJseVNjcmF0Y2gpOwotICAgIG1vdmVQdHJUb0RvdWJsZShlYXJseVNjcmF0Y2gs
IGZwUmVnVDApOworICAgIGFkZDY0KHRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgZWFybHlTY3JhdGNo
KTsKKyAgICBtb3ZlNjRUb0RvdWJsZShlYXJseVNjcmF0Y2gsIGZwUmVnVDApOwogICAgIHJlYWR5
LmxpbmsodGhpcyk7CiAjZWxzZQogICAgIGVtaXRMb2FkKHZhbHVlLCBsYXRlU2NyYXRjaCwgZWFy
bHlTY3JhdGNoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YkNhbGwu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJDYWxsLmgJ
KHJldmlzaW9uIDEzMTE2MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YkNh
bGwuaAkod29ya2luZyBjb3B5KQpAQCAtOTQsMTUgKzk0LDE1IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICB7CiAgICAgICAgIH0KIAotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgICAgIEpJ
VFN0dWJDYWxsKEpJVCogaml0LCBFbmNvZGVkSlNWYWx1ZSAoSklUX1NUVUIgKnN0dWIpKFNUVUJf
QVJHU19ERUNMQVJBVElPTikpCiAgICAgICAgICAgICA6IG1faml0KGppdCkKICAgICAgICAgICAg
ICwgbV9zdHViKHN0dWIpCisjaWYgVVNFKEpTVkFMVUUzMl82NCkgfHwgIUFTU0VSVF9ESVNBQkxF
RAogICAgICAgICAgICAgLCBtX3JldHVyblR5cGUoVmFsdWUpCisjZW5kaWYKICAgICAgICAgICAg
ICwgbV9zdGFja0luZGV4KEpJVFNUQUNLRlJBTUVfQVJHU19JTkRFWCkKICAgICAgICAgewogICAg
ICAgICB9Ci0jZW5kaWYKIAogICAgICAgICAvLyBBcmd1bWVudHMgYXJlIGFkZGVkIGZpcnN0IHRv
IGxhc3QuCiAKQEAgLTEzNyw3ICsxMzcsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAg
dm9pZCBhZGRBcmd1bWVudChKSVQ6OlJlZ2lzdGVySUQgYXJndW1lbnQpCiAgICAgICAgIHsKKyNp
ZiBDUFUoWDg2XzY0KQorICAgICAgICAgICAgbV9qaXQtPnBva2U2NChhcmd1bWVudCwgbV9zdGFj
a0luZGV4KTsKKyNlbHNlCiAgICAgICAgICAgICBtX2ppdC0+cG9rZShhcmd1bWVudCwgbV9zdGFj
a0luZGV4KTsKKyNlbmRpZgogICAgICAgICAgICAgbV9zdGFja0luZGV4ICs9IHN0YWNrSW5kZXhT
dGVwOwogICAgICAgICB9CiAgICAgICAgIApAQCAtMTQ4LDYgKzE1MiwxOCBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgICAgIG1faml0LT5wb2tlKEpJVDo6SW1tMzIodmFsdWUudGFnKCkpLCBt
X3N0YWNrSW5kZXggKyAxKTsKICAgICAgICAgICAgIG1fc3RhY2tJbmRleCArPSBzdGFja0luZGV4
U3RlcDsKICAgICAgICAgfQorI2Vsc2UKKyAgICAgICAgdm9pZCBhZGRBcmd1bWVudChKSVQ6OlRy
dXN0ZWRJbW02NCBhcmd1bWVudCkKKyAgICAgICAgeworICAgICAgICAgICAgbV9qaXQtPnBva2Uo
YXJndW1lbnQsIG1fc3RhY2tJbmRleCk7CisgICAgICAgICAgICBtX3N0YWNrSW5kZXggKz0gc3Rh
Y2tJbmRleFN0ZXA7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGFkZEFyZ3VtZW50KEpJVDo6
SW1tNjQgYXJndW1lbnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1faml0LT5wb2tlKGFyZ3Vt
ZW50LCBtX3N0YWNrSW5kZXgpOworICAgICAgICAgICAgbV9zdGFja0luZGV4ICs9IHN0YWNrSW5k
ZXhTdGVwOworICAgICAgICB9CiAjZW5kaWYKIAogICAgICAgICB2b2lkIGFkZEFyZ3VtZW50KEpJ
VDo6UmVnaXN0ZXJJRCB0YWcsIEpJVDo6UmVnaXN0ZXJJRCBwYXlsb2FkKQpAQCAtMTc5LDkgKzE5
NSw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGFkZEFyZ3VtZW50KHVuc2lnbmVk
IHNyYywgSklUOjpSZWdpc3RlcklEIHNjcmF0Y2hSZWdpc3RlcikgLy8gc3JjIGlzIGEgdmlydHVh
bCByZWdpc3Rlci4KICAgICAgICAgewogICAgICAgICAgICAgaWYgKG1faml0LT5tX2NvZGVCbG9j
ay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoc3JjKSkKLSAgICAgICAgICAgICAgICBhZGRBcmd1
bWVudChKSVQ6OkltbVB0cihKU1ZhbHVlOjplbmNvZGUobV9qaXQtPm1fY29kZUJsb2NrLT5nZXRD
b25zdGFudChzcmMpKSkpOworICAgICAgICAgICAgICAgIGFkZEFyZ3VtZW50KEpJVDo6SW1tNjQo
SlNWYWx1ZTo6ZW5jb2RlKG1faml0LT5tX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKSkpKTsK
ICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIG1faml0LT5sb2FkUHRyKEpJVDo6
QWRkcmVzcyhKSVQ6OmNhbGxGcmFtZVJlZ2lzdGVyLCBzcmMgKiBzaXplb2YoUmVnaXN0ZXIpKSwg
c2NyYXRjaFJlZ2lzdGVyKTsKKyAgICAgICAgICAgICAgICBtX2ppdC0+bG9hZDY0KEpJVDo6QWRk
cmVzcyhKSVQ6OmNhbGxGcmFtZVJlZ2lzdGVyLCBzcmMgKiBzaXplb2YoUmVnaXN0ZXIpKSwgc2Ny
YXRjaFJlZ2lzdGVyKTsKICAgICAgICAgICAgICAgICBhZGRBcmd1bWVudChzY3JhdGNoUmVnaXN0
ZXIpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbV9qaXQtPmtpbGxMYXN0UmVzdWx0UmVn
aXN0ZXIoKTsKQEAgLTI0Miw3ICsyNTgsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICNlbHNlCiAgICAg
ICAgIEpJVDo6Q2FsbCBjYWxsKHVuc2lnbmVkIGRzdCkgLy8gZHN0IGlzIGEgdmlydHVhbCByZWdp
c3Rlci4KICAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKG1fcmV0dXJuVHlwZSA9PSBWb2lk
UHRyIHx8IG1fcmV0dXJuVHlwZSA9PSBDZWxsKTsKKyAgICAgICAgICAgIEFTU0VSVChtX3JldHVy
blR5cGUgPT0gVmFsdWUgfHwgbV9yZXR1cm5UeXBlID09IENlbGwpOwogICAgICAgICAgICAgSklU
OjpDYWxsIGNhbGwgPSB0aGlzLT5jYWxsKCk7CiAgICAgICAgICAgICBtX2ppdC0+ZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QpOwogICAgICAgICAgICAgcmV0dXJuIGNhbGw7CkBAIC0yNTAsNyAr
MjY2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIAogICAgICAgICBKSVQ6OkNhbGwgY2Fs
bFdpdGhWYWx1ZVByb2ZpbGluZyh1bnNpZ25lZCBkc3QpCiAgICAgICAgIHsKLSAgICAgICAgICAg
IEFTU0VSVChtX3JldHVyblR5cGUgPT0gVm9pZFB0ciB8fCBtX3JldHVyblR5cGUgPT0gQ2VsbCk7
CisgICAgICAgICAgICBBU1NFUlQobV9yZXR1cm5UeXBlID09IFZhbHVlIHx8IG1fcmV0dXJuVHlw
ZSA9PSBDZWxsKTsKICAgICAgICAgICAgIEpJVDo6Q2FsbCBjYWxsID0gdGhpcy0+Y2FsbCgpOwog
ICAgICAgICAgICAgQVNTRVJUKEpJVDo6cmV0dXJuVmFsdWVSZWdpc3RlciA9PSBKSVQ6OnJlZ1Qw
KTsKICAgICAgICAgICAgIG1faml0LT5lbWl0VmFsdWVQcm9maWxpbmdTaXRlKCk7CkBAIC0yNjEs
MTAgKzI3Nyw4IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIEpJVDo6Q2FsbCBjYWxsKEpJ
VDo6UmVnaXN0ZXJJRCBkc3QpIC8vIGRzdCBpcyBhIG1hY2hpbmUgcmVnaXN0ZXIuCiAgICAgICAg
IHsKLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQorI2lmIFVTRShKU1ZBTFVFMzJfNjQpIHx8ICFBU1NF
UlRfRElTQUJMRUQKICAgICAgICAgICAgIEFTU0VSVChtX3JldHVyblR5cGUgPT0gVmFsdWUgfHwg
bV9yZXR1cm5UeXBlID09IFZvaWRQdHIgfHwgbV9yZXR1cm5UeXBlID09IEludCB8fCBtX3JldHVy
blR5cGUgPT0gQ2VsbCk7Ci0jZWxzZQotICAgICAgICAgICAgQVNTRVJUKG1fcmV0dXJuVHlwZSA9
PSBWb2lkUHRyIHx8IG1fcmV0dXJuVHlwZSA9PSBJbnQgfHwgbV9yZXR1cm5UeXBlID09IENlbGwp
OwogI2VuZGlmCiAgICAgICAgICAgICBKSVQ6OkNhbGwgY2FsbCA9IHRoaXMtPmNhbGwoKTsKICAg
ICAgICAgICAgIGlmIChkc3QgIT0gSklUOjpyZXR1cm5WYWx1ZVJlZ2lzdGVyKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuaAkocmV2aXNpb24gMTMxMTYyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5oCSh3b3JraW5nIGNvcHkpCkBAIC05Niw5ICs5
Niw5IEBAIG5hbWVzcGFjZSBKU0MgewogCiAjaWYgQ1BVKFg4Nl82NCkKICAgICBzdHJ1Y3QgSklU
U3RhY2tGcmFtZSB7Ci0gICAgICAgIHZvaWQqIHJlc2VydmVkOyAvLyBVbnVzZWQKKyAgICAgICAg
aW50NjRfdCByZXNlcnZlZDsgLy8gVW51c2VkCiAgICAgICAgIEpJVFN0dWJBcmcgYXJnc1s2XTsK
LSAgICAgICAgdm9pZCogcGFkZGluZ1syXTsgLy8gTWFpbnRhaW4gMzItYnl0ZSBzdGFjayBhbGln
bm1lbnQgKHBvc3NpYmx5IG92ZXJraWxsKS4KKyAgICAgICAgdm9pZCogcGFkZGluZ1syXTsgLy8g
TWFpbnRhaW4gMzItYnl0ZSBzdGFjayBhbGlnbm1lbnQgKHBvc3NpYmx5IG92ZXJraWxsKS4gRklY
TUU6IFRoZSBjb21tZW50cyBhcmUgbm90IHZhbGlkIQogCiAgICAgICAgIHZvaWQqIGNvZGU7CiAg
ICAgICAgIEpTU3RhY2sqIHN0YWNrOwpAQCAtMTA3LDEzICsxMDcsMTMgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIHZvaWQqIHVudXNlZDI7CiAgICAgICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFs
RGF0YTsKIAotICAgICAgICB2b2lkKiBzYXZlZFJCWDsKLSAgICAgICAgdm9pZCogc2F2ZWRSMTU7
Ci0gICAgICAgIHZvaWQqIHNhdmVkUjE0OwotICAgICAgICB2b2lkKiBzYXZlZFIxMzsKLSAgICAg
ICAgdm9pZCogc2F2ZWRSMTI7Ci0gICAgICAgIHZvaWQqIHNhdmVkUkJQOwotICAgICAgICB2b2lk
KiBzYXZlZFJJUDsKKyAgICAgICAgaW50NjRfdCBzYXZlZFJCWDsKKyAgICAgICAgaW50NjRfdCBz
YXZlZFIxNTsKKyAgICAgICAgaW50NjRfdCBzYXZlZFIxNDsKKyAgICAgICAgaW50NjRfdCBzYXZl
ZFIxMzsKKyAgICAgICAgaW50NjRfdCBzYXZlZFIxMjsKKyAgICAgICAgaW50NjRfdCBzYXZlZFJC
UDsKKyAgICAgICAgaW50NjRfdCBzYXZlZFJJUDsKIAogICAgICAgICAvLyBXaGVuIEpJVCBjb2Rl
IG1ha2VzIGEgY2FsbCwgaXQgcHVzaGVzIGl0cyByZXR1cm4gYWRkcmVzcyBqdXN0IGJlbG93IHRo
ZSByZXN0IG9mIHRoZSBzdGFjay4KICAgICAgICAgUmV0dXJuQWRkcmVzc1B0ciogcmV0dXJuQWRk
cmVzc1Nsb3QoKSB7IHJldHVybiByZWludGVycHJldF9jYXN0PFJldHVybkFkZHJlc3NQdHIqPih0
aGlzKSAtIDE7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSlNJbnRlcmZhY2VK
SVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pTSW50ZXJmYWNl
SklULmgJKHJldmlzaW9uIDEzMTE2MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSlNJ
bnRlcmZhY2VKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMjcwLDM2ICsyNzAsMzYgQEAgbmFtZXNw
YWNlIEpTQyB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBBTFdBWVNfSU5MSU5FIEpTSW50ZXJm
YWNlSklUOjpKdW1wIEpTSW50ZXJmYWNlSklUOjplbWl0SnVtcElmSW1tZWRpYXRlTnVtYmVyKFJl
Z2lzdGVySUQgcmVnKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGJyYW5jaFRlc3RQdHIoTm9uWmVy
bywgcmVnLCB0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOworICAgICAgICByZXR1cm4gYnJhbmNoVGVz
dDY0KE5vblplcm8sIHJlZywgdGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKICAgICB9CiAgICAgQUxX
QVlTX0lOTElORSBKU0ludGVyZmFjZUpJVDo6SnVtcCBKU0ludGVyZmFjZUpJVDo6ZW1pdEp1bXBJ
Zk5vdEltbWVkaWF0ZU51bWJlcihSZWdpc3RlcklEIHJlZykKICAgICB7Ci0gICAgICAgIHJldHVy
biBicmFuY2hUZXN0UHRyKFplcm8sIHJlZywgdGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKKyAgICAg
ICAgcmV0dXJuIGJyYW5jaFRlc3Q2NChaZXJvLCByZWcsIHRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7
CiAgICAgfQogICAgIGlubGluZSBKU0ludGVyZmFjZUpJVDo6SnVtcCBKU0ludGVyZmFjZUpJVDo6
ZW1pdExvYWRKU0NlbGwodW5zaWduZWQgdmlydHVhbFJlZ2lzdGVySW5kZXgsIFJlZ2lzdGVySUQg
ZHN0KQogICAgIHsKLSAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3Rlcklu
ZGV4KSwgZHN0KTsKLSAgICAgICAgcmV0dXJuIGJyYW5jaFRlc3RQdHIoTm9uWmVybywgZHN0LCB0
YWdNYXNrUmVnaXN0ZXIpOworICAgICAgICBsb2FkNjQoYWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0
ZXJJbmRleCksIGRzdCk7CisgICAgICAgIHJldHVybiBicmFuY2hUZXN0NjQoTm9uWmVybywgZHN0
LCB0YWdNYXNrUmVnaXN0ZXIpOwogICAgIH0KICAgICAKICAgICBpbmxpbmUgSlNJbnRlcmZhY2VK
SVQ6Okp1bXAgSlNJbnRlcmZhY2VKSVQ6OmVtaXRMb2FkSW50MzIodW5zaWduZWQgdmlydHVhbFJl
Z2lzdGVySW5kZXgsIFJlZ2lzdGVySUQgZHN0KQogICAgIHsKLSAgICAgICAgbG9hZFB0cihhZGRy
ZXNzRm9yKHZpcnR1YWxSZWdpc3RlckluZGV4KSwgZHN0KTsKLSAgICAgICAgSnVtcCByZXN1bHQg
PSBicmFuY2hQdHIoQmVsb3csIGRzdCwgdGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKKyAgICAgICAg
bG9hZDY0KGFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVySW5kZXgpLCBkc3QpOworICAgICAgICBK
dW1wIHJlc3VsdCA9IGJyYW5jaDY0KEJlbG93LCBkc3QsIHRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7
CiAgICAgICAgIHplcm9FeHRlbmQzMlRvUHRyKGRzdCwgZHN0KTsKICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKICAgICB9CiAKICAgICBpbmxpbmUgSlNJbnRlcmZhY2VKSVQ6Okp1bXAgSlNJbnRlcmZh
Y2VKSVQ6OmVtaXRMb2FkRG91YmxlKHVuc2lnbmVkIHZpcnR1YWxSZWdpc3RlckluZGV4LCBGUFJl
Z2lzdGVySUQgZHN0LCBSZWdpc3RlcklEIHNjcmF0Y2gpCiAgICAgewotICAgICAgICBsb2FkUHRy
KGFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVySW5kZXgpLCBzY3JhdGNoKTsKKyAgICAgICAgbG9h
ZDY0KGFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVySW5kZXgpLCBzY3JhdGNoKTsKICAgICAgICAg
SnVtcCBub3ROdW1iZXIgPSBlbWl0SnVtcElmTm90SW1tZWRpYXRlTnVtYmVyKHNjcmF0Y2gpOwot
ICAgICAgICBKdW1wIG5vdEludCA9IGJyYW5jaFB0cihCZWxvdywgc2NyYXRjaCwgdGFnVHlwZU51
bWJlclJlZ2lzdGVyKTsKKyAgICAgICAgSnVtcCBub3RJbnQgPSBicmFuY2g2NChCZWxvdywgc2Ny
YXRjaCwgdGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKICAgICAgICAgY29udmVydEludDMyVG9Eb3Vi
bGUoc2NyYXRjaCwgZHN0KTsKICAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOwogICAgICAgICBu
b3RJbnQubGluayh0aGlzKTsKLSAgICAgICAgYWRkUHRyKHRhZ1R5cGVOdW1iZXJSZWdpc3Rlciwg
c2NyYXRjaCk7Ci0gICAgICAgIG1vdmVQdHJUb0RvdWJsZShzY3JhdGNoLCBkc3QpOworICAgICAg
ICBhZGQ2NCh0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHNjcmF0Y2gpOworICAgICAgICBtb3ZlNjRU
b0RvdWJsZShzY3JhdGNoLCBkc3QpOwogICAgICAgICBkb25lLmxpbmsodGhpcyk7CiAgICAgICAg
IHJldHVybiBub3ROdW1iZXI7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9TcGVjaWFsaXplZFRodW5rSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9TcGVjaWFsaXplZFRodW5rSklULmgJKHJldmlzaW9uIDEzMTE2MikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvU3BlY2lhbGl6ZWRUaHVua0pJVC5oCSh3b3JraW5nIGNvcHkp
CkBAIC05MCw5ICs5MCw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIHJldHVybkRv
dWJsZShGUFJlZ2lzdGVySUQgc3JjKQogICAgICAgICB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAg
ICAgICAgICAgIG1vdmVEb3VibGVUb1B0cihzcmMsIHJlZ1QwKTsKLSAgICAgICAgICAgIEp1bXAg
emVybyA9IGJyYW5jaFRlc3RQdHIoWmVybywgcmVnVDApOwotICAgICAgICAgICAgc3ViUHRyKHRh
Z1R5cGVOdW1iZXJSZWdpc3RlciwgcmVnVDApOworICAgICAgICAgICAgbW92ZURvdWJsZVRvNjQo
c3JjLCByZWdUMCk7CisgICAgICAgICAgICBKdW1wIHplcm8gPSBicmFuY2hUZXN0NjQoWmVybywg
cmVnVDApOworICAgICAgICAgICAgc3ViNjQodGFnVHlwZU51bWJlclJlZ2lzdGVyLCByZWdUMCk7
CiAgICAgICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAgICAgICAgICAgICB6ZXJvLmxpbmso
dGhpcyk7CiAgICAgICAgICAgICBtb3ZlKHRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgcmVnVDApOwpA
QCAtMTUxLDcgKzE1MSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIHRhZ1JldHVy
bkFzSW50MzIoKQogICAgICAgICB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgICAgIG9y
UHRyKHRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgcmVnVDApOworICAgICAgICAgICAgb3I2NCh0YWdU
eXBlTnVtYmVyUmVnaXN0ZXIsIHJlZ1QwKTsKICNlbHNlCiAgICAgICAgICAgICBtb3ZlKFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZyksIHJlZ1QxKTsKICNlbmRpZgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYWx1ZS5jcHAJKHJldmlzaW9uIDEzMTE2MikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yMDQsNyArMjA0LDcgQEAgY2hhciogSlNWYWx1ZTo6ZGVzY3JpcHRpb24oKSBjb25zdAog
ICAgICAgICBzbnByaW50ZihkZXNjcmlwdGlvbiwgc2l6ZSwgIkludDMyOiAlZCIsIGFzSW50MzIo
KSk7CiAgICAgZWxzZSBpZiAoaXNEb3VibGUoKSkgewogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAg
ICAgIHNucHJpbnRmKGRlc2NyaXB0aW9uLCBzaXplLCAiRG91YmxlOiAlbHgsICVsZiIsIHJlaW50
ZXJwcmV0RG91YmxlVG9JbnRwdHIoYXNEb3VibGUoKSksIGFzRG91YmxlKCkpOworICAgICAgICBz
bnByaW50ZihkZXNjcmlwdGlvbiwgc2l6ZSwgIkRvdWJsZTogJWxsZCwgJWxmIiwgKGxvbmcgbG9u
ZylyZWludGVycHJldERvdWJsZVRvSW50NjQoYXNEb3VibGUoKSksIGFzRG91YmxlKCkpOwogI2Vs
c2UKICAgICAgICAgdW5pb24gewogICAgICAgICAgICAgZG91YmxlIGFzRG91YmxlOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYWx1ZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVmFsdWUuaAkocmV2aXNpb24gMTMxMTYyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYWx1ZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC02OSwxMSArNjksNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBlbnVtIFByZWZlcnJlZFBy
aW1pdGl2ZVR5cGUgeyBOb1ByZWZlcmVuY2UsIFByZWZlck51bWJlciwgUHJlZmVyU3RyaW5nIH07
CiAKIAotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgdHlwZWRlZiBpbnQ2NF90IEVuY29kZWRK
U1ZhbHVlOwotI2Vsc2UKLSAgICB0eXBlZGVmIHZvaWQqIEVuY29kZWRKU1ZhbHVlOwotI2VuZGlm
CiAgICAgCiAgICAgdW5pb24gRW5jb2RlZFZhbHVlRGVzY3JpcHRvciB7CiAgICAgICAgIGludDY0
X3QgYXNJbnQ2NDsKQEAgLTM5MCw5ICszODYsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
RW5jb2RlZFZhbHVlRGVzY3JpcHRvciB1OwogICAgIH07CiAKLSNpZiBVU0UoSlNWQUxVRTMyXzY0
KQogICAgIHR5cGVkZWYgSW50SGFzaDxFbmNvZGVkSlNWYWx1ZT4gRW5jb2RlZEpTVmFsdWVIYXNo
OwogCisjaWYgVVNFKEpTVkFMVUUzMl82NCkKICAgICBzdHJ1Y3QgRW5jb2RlZEpTVmFsdWVIYXNo
VHJhaXRzIDogSGFzaFRyYWl0czxFbmNvZGVkSlNWYWx1ZT4gewogICAgICAgICBzdGF0aWMgY29u
c3QgYm9vbCBlbXB0eVZhbHVlSXNaZXJvID0gZmFsc2U7CiAgICAgICAgIHN0YXRpYyBFbmNvZGVk
SlNWYWx1ZSBlbXB0eVZhbHVlKCkgeyByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7
IH0KQEAgLTQwMCw4ICszOTYsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RhdGljIGJv
b2wgaXNEZWxldGVkVmFsdWUoRW5jb2RlZEpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIHZhbHVlID09
IEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKEpTVmFsdWU6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZSkp
OyB9CiAgICAgfTsKICNlbHNlCi0gICAgdHlwZWRlZiBQdHJIYXNoPEVuY29kZWRKU1ZhbHVlPiBF
bmNvZGVkSlNWYWx1ZUhhc2g7Ci0KICAgICBzdHJ1Y3QgRW5jb2RlZEpTVmFsdWVIYXNoVHJhaXRz
IDogSGFzaFRyYWl0czxFbmNvZGVkSlNWYWx1ZT4gewogICAgICAgICBzdGF0aWMgdm9pZCBjb25z
dHJ1Y3REZWxldGVkVmFsdWUoRW5jb2RlZEpTVmFsdWUmIHNsb3QpIHsgc2xvdCA9IEpTVmFsdWU6
OmVuY29kZShKU1ZhbHVlKEpTVmFsdWU6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZSkpOyB9CiAgICAg
ICAgIHN0YXRpYyBib29sIGlzRGVsZXRlZFZhbHVlKEVuY29kZWRKU1ZhbHVlIHZhbHVlKSB7IHJl
dHVybiB2YWx1ZSA9PSBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZShKU1ZhbHVlOjpIYXNoVGFibGVE
ZWxldGVkVmFsdWUpKTsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNW
YWx1ZUlubGluZU1ldGhvZHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1ZhbHVlSW5saW5lTWV0aG9kcy5oCShyZXZpc2lvbiAxMzExNjIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhbHVlSW5saW5lTWV0aG9kcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xNDAsNyArMTQwLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICp0aGlz
ID0gSlNWYWx1ZShzdGF0aWNfY2FzdDxpbnQzMl90PihkKSk7CiAgICAgfQogCi0jaWYgVVNFKEpT
VkFMVUUzMl82NCkKICAgICBpbmxpbmUgRW5jb2RlZEpTVmFsdWUgSlNWYWx1ZTo6ZW5jb2RlKEpT
VmFsdWUgdmFsdWUpCiAgICAgewogICAgICAgICByZXR1cm4gdmFsdWUudS5hc0ludDY0OwpAQCAt
MTUzLDYgKzE1Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICByZXR1cm4gdjsKICAgICB9
CiAKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQogICAgIGlubGluZSBKU1ZhbHVlOjpKU1ZhbHVlKCkK
ICAgICB7CiAgICAgICAgIHUuYXNCaXRzLnRhZyA9IEVtcHR5VmFsdWVUYWc7CkBAIC0zMzMsMTcg
KzMzMyw2IEBAIG5hbWVzcGFjZSBKU0MgewogCiAjZWxzZSAvLyAhVVNFKEpTVkFMVUUzMl82NCkg
aS5lLiBVU0UoSlNWQUxVRTY0KQogCi0gICAgLy8gSlNWYWx1ZSBtZW1iZXIgZnVuY3Rpb25zLgot
ICAgIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSB2YWx1ZSkK
LSAgICB7Ci0gICAgICAgIHJldHVybiB2YWx1ZS51LnB0cjsKLSAgICB9Ci0KLSAgICBpbmxpbmUg
SlNWYWx1ZSBKU1ZhbHVlOjpkZWNvZGUoRW5jb2RlZEpTVmFsdWUgcHRyKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIEpTVmFsdWUocmVpbnRlcnByZXRfY2FzdDxKU0NlbGwqPihwdHIpKTsKLSAgICB9
Ci0KICAgICAvLyAweDAgY2FuIG5ldmVyIG9jY3VyIG5hdHVyYWxseSBiZWNhdXNlIGl0IGhhcyBh
IHRhZyBvZiAwMCwgaW5kaWNhdGluZyBhIHBvaW50ZXIgdmFsdWUsIGJ1dCBhIHBheWxvYWQgb2Yg
MHgwLCB3aGljaCBpcyBpbiB0aGUgKGludmFsaWQpIHplcm8gcGFnZS4KICAgICBpbmxpbmUgSlNW
YWx1ZTo6SlNWYWx1ZSgpCiAgICAgewpAQCAtMzU4LDI3ICszNDcsMjcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAKICAgICBpbmxpbmUgSlNWYWx1ZTo6SlNWYWx1ZShKU0NlbGwqIHB0cikKICAgICB7Ci0g
ICAgICAgIHUucHRyID0gcHRyOworICAgICAgICB1LmFzSW50NjQgPSByZWludGVycHJldF9jYXN0
PHVpbnRwdHJfdD4ocHRyKTsKICAgICB9CiAKICAgICBpbmxpbmUgSlNWYWx1ZTo6SlNWYWx1ZShj
b25zdCBKU0NlbGwqIHB0cikKICAgICB7Ci0gICAgICAgIHUucHRyID0gY29uc3RfY2FzdDxKU0Nl
bGwqPihwdHIpOworICAgICAgICB1LmFzSW50NjQgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJf
dD4oY29uc3RfY2FzdDxKU0NlbGwqPihwdHIpKTsKICAgICB9CiAKICAgICBpbmxpbmUgSlNWYWx1
ZTo6b3BlcmF0b3IgYm9vbCgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gdS5wdHI7Cisg
ICAgICAgIHJldHVybiB1LmFzSW50NjQ7CiAgICAgfQogCiAgICAgaW5saW5lIGJvb2wgSlNWYWx1
ZTo6b3BlcmF0b3I9PShjb25zdCBKU1ZhbHVlJiBvdGhlcikgY29uc3QKICAgICB7Ci0gICAgICAg
IHJldHVybiB1LnB0ciA9PSBvdGhlci51LnB0cjsKKyAgICAgICAgcmV0dXJuIHUuYXNJbnQ2NCA9
PSBvdGhlci51LmFzSW50NjQ7CiAgICAgfQogCiAgICAgaW5saW5lIGJvb2wgSlNWYWx1ZTo6b3Bl
cmF0b3IhPShjb25zdCBKU1ZhbHVlJiBvdGhlcikgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVy
biB1LnB0ciAhPSBvdGhlci51LnB0cjsKKyAgICAgICAgcmV0dXJuIHUuYXNJbnQ2NCAhPSBvdGhl
ci51LmFzSW50NjQ7CiAgICAgfQogCiAgICAgaW5saW5lIGJvb2wgSlNWYWx1ZTo6aXNFbXB0eSgp
IGNvbnN0CkBAIC00NjQsMTggKzQ1MywxOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgcmV0
dXJuICh1LmFzSW50NjQgJiBUYWdUeXBlTnVtYmVyKSA9PSBUYWdUeXBlTnVtYmVyOwogICAgIH0K
IAotICAgIGlubGluZSBpbnRwdHJfdCByZWludGVycHJldERvdWJsZVRvSW50cHRyKGRvdWJsZSB2
YWx1ZSkKKyAgICBpbmxpbmUgaW50NjRfdCByZWludGVycHJldERvdWJsZVRvSW50NjQoZG91Ymxl
IHZhbHVlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4odmFs
dWUpOworICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PGludDY0X3Q+KHZhbHVlKTsKICAgICB9
Ci0gICAgaW5saW5lIGRvdWJsZSByZWludGVycHJldEludHB0clRvRG91YmxlKGludHB0cl90IHZh
bHVlKQorICAgIGlubGluZSBkb3VibGUgcmVpbnRlcnByZXRJbnQ2NFRvRG91YmxlKGludDY0X3Qg
dmFsdWUpCiAgICAgewogICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PGRvdWJsZT4odmFsdWUp
OwogICAgIH0KIAogICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZTo6SlNWYWx1ZShFbmNvZGVBc0Rv
dWJsZVRhZywgZG91YmxlIGQpCiAgICAgewotICAgICAgICB1LmFzSW50NjQgPSByZWludGVycHJl
dERvdWJsZVRvSW50cHRyKGQpICsgRG91YmxlRW5jb2RlT2Zmc2V0OworICAgICAgICB1LmFzSW50
NjQgPSByZWludGVycHJldERvdWJsZVRvSW50NjQoZCkgKyBEb3VibGVFbmNvZGVPZmZzZXQ7CiAg
ICAgfQogCiAgICAgaW5saW5lIEpTVmFsdWU6OkpTVmFsdWUoaW50IGkpCkBAIC00ODYsNyArNDc1
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgaW5saW5lIGRvdWJsZSBKU1ZhbHVlOjphc0RvdWJs
ZSgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoaXNEb3VibGUoKSk7Ci0gICAgICAgIHJl
dHVybiByZWludGVycHJldEludHB0clRvRG91YmxlKHUuYXNJbnQ2NCAtIERvdWJsZUVuY29kZU9m
ZnNldCk7CisgICAgICAgIHJldHVybiByZWludGVycHJldEludDY0VG9Eb3VibGUodS5hc0ludDY0
IC0gRG91YmxlRW5jb2RlT2Zmc2V0KTsKICAgICB9CiAKICAgICBpbmxpbmUgYm9vbCBKU1ZhbHVl
Ojppc051bWJlcigpIGNvbnN0Cg==
</data>
<flag name="review"
          id="181516"
          type_id="1"
          status="-"
          setter="barraclough"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>168533</attachid>
            <date>2012-10-12 19:55:46 -0700</date>
            <delta_ts>2012-10-13 18:24:29 -0700</delta_ts>
            <desc>Split patch - part 1: only add the *64 interfaces to MacroAssembler</desc>
            <filename>99154.1.patch</filename>
            <type>text/plain</type>
            <size>41177</size>
            <attacher name="Yuqiang Xian">yuqiang.xian</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTMxMjQ4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwOCBA
QAorMjAxMi0xMC0xMiAgWXVxaWFuZyBYaWFuICA8eXVxaWFuZy54aWFuQGludGVsLmNvbT4KKwor
ICAgICAgICBSZWZhY3RvciBNYWNyb0Fzc2VtYmxlciBpbnRlcmZhY2VzIHRvIGRpZmZlcmVudGlh
dGUgdGhlIHBvaW50ZXIgb3BlcmFuZHMgZnJvbSB0aGUgNjQtYml0IGludGVnZXIgb3BlcmFuZHMK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk5MTU0CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW4gY3VycmVu
dCBKYXZhU2NyaXB0Q29yZSBpbXBsZW1lbnRhdGlvbiBmb3IgSlNWQUxVRTY0IHBsYXRmb3JtIChp
LmUuLAorICAgICAgICB0aGUgWDY0IHBsYXRmb3JtKSwgd2UgYXNzdW1lIHRoYXQgdGhlIEpTVmFs
dWUgc2l6ZSBpcyBzYW1lIHRvIHRoZQorICAgICAgICBwb2ludGVyIHNpemUsIGFuZCB0aHVzIEVu
Y29kZWRKU1ZhbHVlIGlzIHNpbXBseSB0eXBlIGRlZmluZWQgYXMgYQorICAgICAgICAidm9pZCoi
LiBJbiB0aGUgSklUIGNvbXBpbGVyLCB3ZSBhbHNvIHRha2UgdGhpcyBhc3N1bXB0aW9uIGFuZCBp
bnZva2UKKyAgICAgICAgdGhlIHNhbWUgbWFjcm8gYXNzZW1ibGVyIGludGVyZmFjZXMgZm9yIGJv
dGggSlNWYWx1ZSBhbmQgcG9pbnRlcgorICAgICAgICBvcGVyYW5kcy4gV2UgbmVlZCB0byBkaWZm
ZXJlbnRpYXRlIHRoZSBvcGVyYXRpb25zIG9uIHBvaW50ZXJzIGZyb20gdGhlCisgICAgICAgIG9w
ZXJhdGlvbnMgb24gSlNWYWx1ZXMsIGFuZCBsZXQgdGhlbSBpbnZva2luZyBkaWZmZXJlbnQgbWFj
cm8KKyAgICAgICAgYXNzZW1ibGVyIGludGVyZmFjZXMuIEZvciBleGFtcGxlLCB3ZSBub3cgdXNl
IHRoZSBpbnRlcmZhY2Ugb2YKKyAgICAgICAgImxvYWRQdHIiIHRvIGxvYWQgZWl0aGVyIGEgcG9p
bnRlciBvciBhIEpTVmFsdWUsIGFuZCB3ZSBuZWVkIHRvIHN3aXRjaAorICAgICAgICB0byB1c2lu
ZyAibG9hZFB0ciIgdG8gbG9hZCBhIHBvaW50ZXIgYW5kIHNvbWUgbmV3ICJsb2FkNjQiIGludGVy
ZmFjZQorICAgICAgICB0byBsb2FkIGEgSlNWYWx1ZS4gVGhpcyB3b3VsZCBoZWxwIHVzIHN1cHBv
cnRpbmcgb3RoZXIgSlNWQUxVRTY0CisgICAgICAgIHBsYXRmb3JtcyB3aGVyZSBwb2ludGVyIHNp
emUgaXMgbm90IG5lY2Vzc2FyaWx5IDY0LWJpdHMsIGZvciBleGFtcGxlCisgICAgICAgIHgzMiAo
YnVnICM5OTE1MykuCisKKyAgICAgICAgVGhlIG1ham9yIG1vZGlmaWNhdGlvbiBJIG1hZGUgaXMg
dG8gaW50cm9kdWNlIHRoZSAiKjY0IiBpbnRlcmZhY2VzIGluCisgICAgICAgIHRoZSBNYWNyb0Fz
c2VtYmxlciBmb3IgdGhvc2Ugb3BlcmF0aW9ucyBvbiBKU1ZhbHVlcywga2VlcCB0aGUgIipQdHIi
CisgICAgICAgIGludGVyZmFjZXMgZm9yIHRob3NlIG9wZXJhdGlvbnMgb24gcmVhbCBwb2ludGVy
cywgYW5kIGdvIHRocm91Z2ggYWxsCisgICAgICAgIHRoZSBKSVQgY29tcGlsZXIgY29kZSB0byBj
b3JyZWN0IHRoZSB1c2FnZS4KKworICAgICAgICBUaGlzIGlzIHRoZSBmaXJzdCBwYXJ0IG9mIHRo
ZSB3b3JrLCBpLmUsIHRvIGFkZCB0aGUgKjY0IGludGVyZmFjZXMgdG8KKyAgICAgICAgdGhlIE1h
Y3JvQXNzZW1ibGVyLgorCisgICAgICAgICogYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJs
ZXIuaDogQWRkIHRoZSBJbW02NCBpbnRlcmZhY2VzLgorICAgICAgICAoQWJzdHJhY3RNYWNyb0Fz
c2VtYmxlcik6CisgICAgICAgIChKU0M6OkFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW02NDo6VHJ1c3RlZEltbTY0KToKKyAgICAgICAgKFRydXN0ZWRJbW02NCk6CisgICAgICAgIChK
U0M6OkFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6OkltbTY0OjpJbW02NCk6CisgICAgICAgIChJbW02
NCk6CisgICAgICAgIChKU0M6OkFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6OkltbTY0Ojphc1RydXN0
ZWRJbW02NCk6CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmg6IEFkZCB0aGUg
KjY0IGludGVyZmFjZXMgdG8gdGhlIE1hY3JvQXNzZW1ibGVyLgorICAgICAgICAoTWFjcm9Bc3Nl
bWJsZXIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlcjo6cGVlazY0KToKKyAgICAgICAg
KEpTQzo6TWFjcm9Bc3NlbWJsZXI6OnBva2UpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxl
cjo6cG9rZTY0KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXI6OnNob3VsZEJsaW5kRG91
YmxlKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXI6OnNob3VsZEJsaW5kKToKKyAgICAg
ICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXI6OlJvdGF0ZWRJbW02NDo6Um90YXRlZEltbTY0KToKKyAg
ICAgICAgKFJvdGF0ZWRJbW02NCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyOjpyb3Rh
dGlvbkJsaW5kQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlcjo6bG9hZFJv
dGF0aW9uQmxpbmRlZENvbnN0YW50KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXI6Om1v
dmUpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlcjo6YW5kNjQpOgorICAgICAgICAoSlND
OjpNYWNyb0Fzc2VtYmxlcjo6c3RvcmU2NCk6CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNz
ZW1ibGVyWDg2Q29tbW9uLmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2Q29tbW9u
OjpzaG91bGRCbGluZEZvclNwZWNpZmljQXJjaCk6CisgICAgICAgIChNYWNyb0Fzc2VtYmxlclg4
NkNvbW1vbik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uOjptb3ZlKToK
KyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaDoKKyAgICAgICAgKE1h
Y3JvQXNzZW1ibGVyWDg2XzY0KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJYODZfNjQ6
OmFkZFB0cik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0OjphbmRQdHIpOgor
ICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4Nl82NDo6bmVnUHRyKToKKyAgICAgICAgKEpT
Qzo6TWFjcm9Bc3NlbWJsZXJYODZfNjQ6Om9yUHRyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3Nl
bWJsZXJYODZfNjQ6OnJvdGF0ZVJpZ2h0UHRyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJs
ZXJYODZfNjQ6OnN1YlB0cik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0Ojp4
b3JQdHIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4Nl82NDo6bG9hZFB0cik6Cisg
ICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0Ojpsb2FkUHRyV2l0aEFkZHJlc3NPZmZz
ZXRQYXRjaCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0Ojpsb2FkUHRyV2l0
aENvbXBhY3RBZGRyZXNzT2Zmc2V0UGF0Y2gpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxl
clg4Nl82NDo6c3RvcmVQdHIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4Nl82NDo6
c3RvcmVQdHJXaXRoQWRkcmVzc09mZnNldFBhdGNoKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3Nl
bWJsZXJYODZfNjQ6Om1vdmVQdHJUb0RvdWJsZSk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1i
bGVyWDg2XzY0Ojptb3ZlRG91YmxlVG9QdHIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxl
clg4Nl82NDo6Y29tcGFyZVB0cik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0
OjpicmFuY2hQdHIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4Nl82NDo6YnJhbmNo
VGVzdFB0cik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0Ojp0ZXN0UHRyKToK
KyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJYODZfNjQ6Om1vdmVXaXRoUGF0Y2gpOgorICAg
ICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4Nl82NDo6Y29udmVydGlibGVMb2FkUHRyKToKKyAg
ICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJYODZfNjQ6OmJyYW5jaEFkZDMyKToKKyAgICAgICAg
KEpTQzo6TWFjcm9Bc3NlbWJsZXJYODZfNjQ6OmJyYW5jaEFkZFB0cik6CisgICAgICAgIChKU0M6
Ok1hY3JvQXNzZW1ibGVyWDg2XzY0OjpicmFuY2hTdWJQdHIpOgorICAgICAgICAoSlNDOjpNYWNy
b0Fzc2VtYmxlclg4Nl82NDo6YnJhbmNoUHRyV2l0aFBhdGNoKToKKyAgICAgICAgKEpTQzo6TWFj
cm9Bc3NlbWJsZXJYODZfNjQ6OnN0b3JlUHRyV2l0aFBhdGNoKToKKyAgICAgICAgKEpTQzo6TWFj
cm9Bc3NlbWJsZXJYODZfNjQ6OmFkZDY0KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJY
ODZfNjQ6OmFuZDY0KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJYODZfNjQ6Om5lZzY0
KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJYODZfNjQ6Om9yNjQpOgorICAgICAgICAo
SlNDOjpNYWNyb0Fzc2VtYmxlclg4Nl82NDo6cm90YXRlUmlnaHQ2NCk6CisgICAgICAgIChKU0M6
Ok1hY3JvQXNzZW1ibGVyWDg2XzY0OjpzdWI2NCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1i
bGVyWDg2XzY0Ojp4b3I2NCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0Ojps
b2FkNjQpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4Nl82NDo6Y29udmVydGlibGVM
b2FkNjQpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4Nl82NDo6bG9hZDY0V2l0aEFk
ZHJlc3NPZmZzZXRQYXRjaCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0Ojps
b2FkNjRXaXRoQ29tcGFjdEFkZHJlc3NPZmZzZXRQYXRjaCk6CisgICAgICAgIChKU0M6Ok1hY3Jv
QXNzZW1ibGVyWDg2XzY0OjpzdG9yZTY0KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJY
ODZfNjQ6OnN0b3JlNjRXaXRoQWRkcmVzc09mZnNldFBhdGNoKToKKyAgICAgICAgKEpTQzo6TWFj
cm9Bc3NlbWJsZXJYODZfNjQ6Om1vdmU2NFRvRG91YmxlKToKKyAgICAgICAgKEpTQzo6TWFjcm9B
c3NlbWJsZXJYODZfNjQ6Om1vdmVEb3VibGVUbzY0KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3Nl
bWJsZXJYODZfNjQ6OmNvbXBhcmU2NCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2
XzY0OjpicmFuY2g2NCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0OjpicmFu
Y2hUZXN0NjQpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4Nl82NDo6dGVzdDY0KToK
KyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJYODZfNjQ6OmJyYW5jaEFkZDY0KToKKyAgICAg
ICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJYODZfNjQ6OmJyYW5jaFN1YjY0KToKKyAgICAgICAgKEpT
Qzo6TWFjcm9Bc3NlbWJsZXJYODZfNjQ6OmJyYW5jaDY0V2l0aFBhdGNoKToKKyAgICAgICAgKEpT
Qzo6TWFjcm9Bc3NlbWJsZXJYODZfNjQ6OnN0b3JlNjRXaXRoUGF0Y2gpOgorCiAyMDEyLTEwLTEy
ICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CiAKICAgICAgICAgUmFj
ZSBjb25kaXRpb24gZHVyaW5nIENvcHlpbmdQaGFzZSBjYW4gbGVhZCB0byBkZWFkbG9jawpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFj
dE1hY3JvQXNzZW1ibGVyLmgJKHJldmlzaW9uIDEzMTIzOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yNjEsNiArMjYxLDM4IEBAIHB1YmxpYzoKIAogICAgIH07CiAgICAgCisgICAgLy8gVHJ1c3Rl
ZEltbTY0OgorICAgIC8vCisgICAgLy8gQSA2NGJpdCBpbW1lZGlhdGUgb3BlcmFuZCB0byBhbiBp
bnN0cnVjdGlvbiAtIHRoaXMgaXMgd3JhcHBlZCBpbiBhCisgICAgLy8gY2xhc3MgcmVxdWlyaW5n
IGV4cGxpY2l0IGNvbnN0cnVjdGlvbiBpbiBvcmRlciB0byBwcmV2ZW50IFJlZ2lzdGVySURzCisg
ICAgLy8gKHdoaWNoIGFyZSBpbXBsZW1lbnRlZCBhcyBhbiBlbnVtKSBmcm9tIGFjY2lkZW50YWxs
eSBiZWluZyBwYXNzZWQgYXMKKyAgICAvLyBpbW1lZGlhdGUgdmFsdWVzLgorICAgIHN0cnVjdCBU
cnVzdGVkSW1tNjQgeworICAgICAgICBUcnVzdGVkSW1tNjQoKSB7IH0KKyAgICAgICAgCisgICAg
ICAgIGV4cGxpY2l0IFRydXN0ZWRJbW02NChpbnQ2NF90IHZhbHVlKQorICAgICAgICAgICAgOiBt
X3ZhbHVlKHZhbHVlKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBpbnQ2NF90IG1f
dmFsdWU7CisgICAgfTsKKworICAgIHN0cnVjdCBJbW02NCA6IAorI2lmIEVOQUJMRShKSVRfQ09O
U1RBTlRfQkxJTkRJTkcpCisgICAgICAgIHByaXZhdGUgVHJ1c3RlZEltbTY0IAorI2Vsc2UKKyAg
ICAgICAgcHVibGljIFRydXN0ZWRJbW02NAorI2VuZGlmCisgICAgeworICAgICAgICBleHBsaWNp
dCBJbW02NChpbnQ2NF90IHZhbHVlKQorICAgICAgICAgICAgOiBUcnVzdGVkSW1tNjQodmFsdWUp
CisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IFRydXN0ZWRJbW02NCYgYXNU
cnVzdGVkSW1tNjQoKSBjb25zdCB7IHJldHVybiAqdGhpczsgfQorICAgIH07CisgICAgCiAgICAg
Ly8gU2VjdGlvbiAyOiBNYWNyb0Fzc2VtYmxlciBjb2RlIGJ1ZmZlciBoYW5kbGVzCiAgICAgLy8K
ICAgICAvLyBUaGUgZm9sbG93aW5nIHR5cGVzIGFyZSB1c2VkIHRvIHJlZmVyZW5jZSBpdGVtcyBp
biB0aGUgY29kZSBidWZmZXIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
TWFjcm9Bc3NlbWJsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL01hY3JvQXNzZW1ibGVyLmgJKHJldmlzaW9uIDEzMTIzOSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
MTg3LDYgKzE4NywyMyBAQCBwdWJsaWM6CiAgICAgICAgIHN0b3JlUHRyKGltbSwgYWRkcmVzc0Zv
clBva2UoaW5kZXgpKTsKICAgICB9CiAKKyNpZiBDUFUoWDg2XzY0KQorICAgIHZvaWQgcGVlazY0
KFJlZ2lzdGVySUQgZGVzdCwgaW50IGluZGV4ID0gMCkKKyAgICB7CisgICAgICAgIGxvYWQ2NChB
ZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCAoaW5kZXggKiBzaXplb2Yodm9pZCopKSksIGRl
c3QpOworICAgIH0KKworICAgIHZvaWQgcG9rZShUcnVzdGVkSW1tNjQgdmFsdWUsIGludCBpbmRl
eCA9IDApCisgICAgeworICAgICAgICBzdG9yZTY0KHZhbHVlLCBhZGRyZXNzRm9yUG9rZShpbmRl
eCkpOworICAgIH0KKworICAgIHZvaWQgcG9rZTY0KFJlZ2lzdGVySUQgc3JjLCBpbnQgaW5kZXgg
PSAwKQorICAgIHsKKyAgICAgICAgc3RvcmU2NChzcmMsIGFkZHJlc3NGb3JQb2tlKGluZGV4KSk7
CisgICAgfQorI2VuZGlmCisgICAgCiAKICAgICAvLyBCYWNrd2FyZHMgYmFuY2hlcywgdGhlc2Ug
YXJlIGN1cnJlbnRseSBhbGwgaW1wbGVtZW50ZWQgdXNpbmcgZXhpc3RpbmcgZm9yd2FyZHMgYnJh
bmNoIG1lY2hhbmlzbXMuCiAgICAgdm9pZCBicmFuY2hQdHIoUmVsYXRpb25hbENvbmRpdGlvbiBj
b25kLCBSZWdpc3RlcklEIG9wMSwgVHJ1c3RlZEltbVB0ciBpbW0sIExhYmVsIHRhcmdldCkKQEAg
LTUzOSw5ICs1NTYsMTEgQEAgcHVibGljOgogI2lmIEVOQUJMRShKSVRfQ09OU1RBTlRfQkxJTkRJ
TkcpCiAgICAgdXNpbmcgTWFjcm9Bc3NlbWJsZXJCYXNlOjphZGRQdHI7CiAgICAgdXNpbmcgTWFj
cm9Bc3NlbWJsZXJCYXNlOjphbmRQdHI7CisgICAgdXNpbmcgTWFjcm9Bc3NlbWJsZXJCYXNlOjph
bmQ2NDsKICAgICB1c2luZyBNYWNyb0Fzc2VtYmxlckJhc2U6OmJyYW5jaFN1YlB0cjsKICAgICB1
c2luZyBNYWNyb0Fzc2VtYmxlckJhc2U6OmNvbnZlcnRJbnQzMlRvRG91YmxlOwogICAgIHVzaW5n
IE1hY3JvQXNzZW1ibGVyQmFzZTo6c3RvcmVQdHI7CisgICAgdXNpbmcgTWFjcm9Bc3NlbWJsZXJC
YXNlOjpzdG9yZTY0OwogICAgIHVzaW5nIE1hY3JvQXNzZW1ibGVyQmFzZTo6c3ViUHRyOwogICAg
IHVzaW5nIE1hY3JvQXNzZW1ibGVyQmFzZTo6eG9yUHRyOwogICAgIApAQCAtNTUzLDcgKzU3Miw3
IEBAIHB1YmxpYzoKIAogICAgICAgICAvLyBUcnkgdG8gZm9yY2Ugbm9ybWFsaXNhdGlvbiwgYW5k
IGNoZWNrIHRoYXQgdGhlcmUncyBubyBjaGFuZ2UKICAgICAgICAgLy8gaW4gdGhlIGJpdCBwYXR0
ZXJuCi0gICAgICAgIGlmIChiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pih2YWx1ZSAqIDEuMCkgIT0g
Yml0d2lzZV9jYXN0PHVpbnRwdHJfdD4odmFsdWUpKQorICAgICAgICBpZiAoYml0d2lzZV9jYXN0
PHVpbnQ2NF90Pih2YWx1ZSAqIDEuMCkgIT0gYml0d2lzZV9jYXN0PHVpbnQ2NF90Pih2YWx1ZSkp
CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgICAgICB2YWx1ZSA9IGFicyh2YWx1ZSk7
CkBAIC01OTIsNyArNjExLDYgQEAgcHVibGljOgogICAgICAgICBkZWZhdWx0OiB7CiAgICAgICAg
ICAgICBpZiAodmFsdWUgPD0gMHhmZikKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0j
aWYgQ1BVKFg4Nl82NCkKICAgICAgICAgICAgIEpTVmFsdWUganNWYWx1ZSA9IEpTVmFsdWU6OmRl
Y29kZShyZWludGVycHJldF9jYXN0PHZvaWQqPih2YWx1ZSkpOwogICAgICAgICAgICAgaWYgKGpz
VmFsdWUuaXNJbnQzMigpKQogICAgICAgICAgICAgICAgIHJldHVybiBzaG91bGRCbGluZChJbW0z
Mihqc1ZhbHVlLmFzSW50MzIoKSkpOwpAQCAtNjAxLDcgKzYxOSw2IEBAIHB1YmxpYzoKIAogICAg
ICAgICAgICAgaWYgKCFzaG91bGRCbGluZERvdWJsZShiaXR3aXNlX2Nhc3Q8ZG91YmxlPih2YWx1
ZSkpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZiAKICAgICAgICAgfQog
ICAgICAgICB9CiAgICAgICAgIHJldHVybiBzaG91bGRCbGluZEZvclNwZWNpZmljQXJjaCh2YWx1
ZSk7CkBAIC02MzEsNiArNjQ4LDU5IEBAIHB1YmxpYzoKICAgICAgICAgcm90YXRlUmlnaHRQdHIo
Y29uc3RhbnQucm90YXRpb24sIGRlc3QpOwogICAgIH0KIAorICAgIGJvb2wgc2hvdWxkQmxpbmQo
SW1tNjQgaW1tKQorICAgIHsgCisjaWYgIWRlZmluZWQoTkRFQlVHKQorICAgICAgICBVTlVTRURf
UEFSQU0oaW1tKTsKKyAgICAgICAgLy8gRGVidWcgYWx3YXlzIGJsaW5kIGFsbCBjb25zdGFudHMs
IGlmIG9ubHkgc28gd2Uga25vdworICAgICAgICAvLyBpZiB3ZSd2ZSBicm9rZW4gYmxpbmRpbmcg
ZHVyaW5nIHBhdGNoIGRldmVsb3BtZW50LgorICAgICAgICByZXR1cm4gdHJ1ZTsgICAgICAgIAor
I2VuZGlmCisKKyAgICAgICAgLy8gRmlyc3Qgb2ZmIHdlJ2xsIHNwZWNpYWwgY2FzZSBjb21tb24s
ICJzYWZlIiB2YWx1ZXMgdG8gYXZvaWQgaHVydGluZworICAgICAgICAvLyBwZXJmb3JtYW5jZSB0
b28gbXVjaAorICAgICAgICB1aW50NjRfdCB2YWx1ZSA9IGltbS5hc1RydXN0ZWRJbW02NCgpLm1f
dmFsdWU7CisgICAgICAgIHN3aXRjaCAodmFsdWUpIHsKKyAgICAgICAgY2FzZSAweGZmZmY6Cisg
ICAgICAgIGNhc2UgMHhmZmZmZmY6CisgICAgICAgIGNhc2UgMHhmZmZmZmZmZkw6CisgICAgICAg
IGNhc2UgMHhmZmZmZmZmZmZmTDoKKyAgICAgICAgY2FzZSAweGZmZmZmZmZmZmZmZkw6CisgICAg
ICAgIGNhc2UgMHhmZmZmZmZmZmZmZmZmZkw6CisgICAgICAgIGNhc2UgMHhmZmZmZmZmZmZmZmZm
ZmZmTDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgZGVmYXVsdDogeworICAg
ICAgICAgICAgaWYgKHZhbHVlIDw9IDB4ZmYpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHNob3VsZEJsaW5kRm9yU3Bl
Y2lmaWNBcmNoKHZhbHVlKTsKKyAgICB9CisgICAgCisgICAgc3RydWN0IFJvdGF0ZWRJbW02NCB7
CisgICAgICAgIFJvdGF0ZWRJbW02NCh1aW50NjRfdCB2MSwgdWludDhfdCB2MikKKyAgICAgICAg
ICAgIDogdmFsdWUodjEpCisgICAgICAgICAgICAsIHJvdGF0aW9uKHYyKQorICAgICAgICB7Cisg
ICAgICAgIH0KKyAgICAgICAgVHJ1c3RlZEltbTY0IHZhbHVlOworICAgICAgICBUcnVzdGVkSW1t
MzIgcm90YXRpb247CisgICAgfTsKKyAgICAKKyAgICBSb3RhdGVkSW1tNjQgcm90YXRpb25CbGlu
ZENvbnN0YW50KEltbTY0IGltbSkKKyAgICB7CisgICAgICAgIHVpbnQ4X3Qgcm90YXRpb24gPSBy
YW5kb20oKSAlIChzaXplb2YoaW50NjRfdCkgKiA4KTsKKyAgICAgICAgdWludDY0X3QgdmFsdWUg
PSBpbW0uYXNUcnVzdGVkSW1tNjQoKS5tX3ZhbHVlOworICAgICAgICB2YWx1ZSA9ICh2YWx1ZSA8
PCByb3RhdGlvbikgfCAodmFsdWUgPj4gKHNpemVvZihpbnQ2NF90KSAqIDggLSByb3RhdGlvbikp
OworICAgICAgICByZXR1cm4gUm90YXRlZEltbTY0KHZhbHVlLCByb3RhdGlvbik7CisgICAgfQor
ICAgIAorICAgIHZvaWQgbG9hZFJvdGF0aW9uQmxpbmRlZENvbnN0YW50KFJvdGF0ZWRJbW02NCBj
b25zdGFudCwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbW92ZShjb25zdGFudC52
YWx1ZSwgZGVzdCk7CisgICAgICAgIHJvdGF0ZVJpZ2h0NjQoY29uc3RhbnQucm90YXRpb24sIGRl
c3QpOworICAgIH0KKwogICAgIHZvaWQgY29udmVydEludDMyVG9Eb3VibGUoSW1tMzIgaW1tLCBG
UFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CiAgICAgICAgIGlmIChzaG91bGRCbGluZChpbW0pKSB7
CkBAIC02NDksNiArNzE5LDI0IEBAIHB1YmxpYzoKICAgICAgICAgICAgIG1vdmUoaW1tLmFzVHJ1
c3RlZEltbVB0cigpLCBkZXN0KTsKICAgICB9CiAKKyAgICB2b2lkIG1vdmUoSW1tNjQgaW1tLCBS
ZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBpZiAoc2hvdWxkQmxpbmQoaW1tKSkKKyAg
ICAgICAgICAgIGxvYWRSb3RhdGlvbkJsaW5kZWRDb25zdGFudChyb3RhdGlvbkJsaW5kQ29uc3Rh
bnQoaW1tKSwgZGVzdCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1vdmUoaW1tLmFzVHJ1
c3RlZEltbTY0KCksIGRlc3QpOworICAgIH0KKworICAgIHZvaWQgYW5kNjQoSW1tMzIgaW1tLCBS
ZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBpZiAoc2hvdWxkQmxpbmQoaW1tKSkgewor
ICAgICAgICAgICAgQmxpbmRlZEltbTMyIGtleSA9IGFuZEJsaW5kZWRDb25zdGFudChpbW0pOwor
ICAgICAgICAgICAgYW5kNjQoa2V5LnZhbHVlMSwgZGVzdCk7CisgICAgICAgICAgICBhbmQ2NChr
ZXkudmFsdWUyLCBkZXN0KTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBhbmQ2NChpbW0u
YXNUcnVzdGVkSW1tMzIoKSwgZGVzdCk7CisgICAgfQorCiAgICAgSnVtcCBicmFuY2hQdHIoUmVs
YXRpb25hbENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGxlZnQsIEltbVB0ciByaWdodCkKICAg
ICB7CiAgICAgICAgIGlmIChzaG91bGRCbGluZChyaWdodCkpIHsKQEAgLTY2OSw2ICs3NTcsMTYg
QEAgcHVibGljOgogICAgICAgICAgICAgc3RvcmVQdHIoaW1tLmFzVHJ1c3RlZEltbVB0cigpLCBk
ZXN0KTsKICAgICB9CiAKKyAgICB2b2lkIHN0b3JlNjQoSW1tNjQgaW1tLCBBZGRyZXNzIGRlc3Qp
CisgICAgeworICAgICAgICBpZiAoc2hvdWxkQmxpbmQoaW1tKSkgeworICAgICAgICAgICAgUmVn
aXN0ZXJJRCBzY3JhdGNoUmVnaXN0ZXIgPSBzY3JhdGNoUmVnaXN0ZXJGb3JCbGluZGluZygpOwor
ICAgICAgICAgICAgbG9hZFJvdGF0aW9uQmxpbmRlZENvbnN0YW50KHJvdGF0aW9uQmxpbmRDb25z
dGFudChpbW0pLCBzY3JhdGNoUmVnaXN0ZXIpOworICAgICAgICAgICAgc3RvcmU2NChzY3JhdGNo
UmVnaXN0ZXIsIGRlc3QpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHN0b3JlNjQoaW1t
LmFzVHJ1c3RlZEltbTY0KCksIGRlc3QpOworICAgIH0KKwogI2VuZGlmCiAKICNlbmRpZiAvLyAh
Q1BVKFg4Nl82NCkKQEAgLTg2Miw2ICs5NjAsMTMgQEAgcHVibGljOgogICAgICAgICBzdG9yZVB0
cih2YWx1ZSwgYWRkcmVzc0ZvclBva2UoaW5kZXgpKTsKICAgICB9CiAgICAgCisjaWYgQ1BVKFg4
Nl82NCkKKyAgICB2b2lkIHBva2UoSW1tNjQgdmFsdWUsIGludCBpbmRleCA9IDApCisgICAgewor
ICAgICAgICBzdG9yZTY0KHZhbHVlLCBhZGRyZXNzRm9yUG9rZShpbmRleCkpOworICAgIH0KKyNl
bmRpZgorICAgIAogICAgIHZvaWQgc3RvcmUzMihJbW0zMiBpbW0sIEFkZHJlc3MgZGVzdCkKICAg
ICB7CiAgICAgICAgIGlmIChzaG91bGRCbGluZChpbW0pKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1v
bi5oCShyZXZpc2lvbiAxMzEyMzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTk3LDkgKzk3LDEy
IEBAIHB1YmxpYzoKICNpZiBFTkFCTEUoSklUX0NPTlNUQU5UX0JMSU5ESU5HKQogICAgIHN0YXRp
YyBib29sIHNob3VsZEJsaW5kRm9yU3BlY2lmaWNBcmNoKHVpbnQzMl90IHZhbHVlKSB7IHJldHVy
biB2YWx1ZSA+PSAweDAwZmZmZmZmOyB9CiAjaWYgQ1BVKFg4Nl82NCkKKyAgICBzdGF0aWMgYm9v
bCBzaG91bGRCbGluZEZvclNwZWNpZmljQXJjaCh1aW50NjRfdCB2YWx1ZSkgeyByZXR1cm4gdmFs
dWUgPj0gMHgwMGZmZmZmZjsgfQorI2lmIE9TKERBUldJTikgLy8gT24gNjQtYml0IHN5c3RlbXMg
b3RoZXIgdGhhbiBEQVJXSU4gdWludDY0X3QgYW5kIHVpbnRwdHJfdCBhcmUgdGhlIHNhbWUgdHlw
ZSBzbyBvdmVybG9hZCBpcyBwcm9oaWJpdGVkLgogICAgIHN0YXRpYyBib29sIHNob3VsZEJsaW5k
Rm9yU3BlY2lmaWNBcmNoKHVpbnRwdHJfdCB2YWx1ZSkgeyByZXR1cm4gdmFsdWUgPj0gMHgwMGZm
ZmZmZjsgfQogI2VuZGlmCiAjZW5kaWYKKyNlbmRpZgogCiAgICAgLy8gSW50ZWdlciBhcml0aG1l
dGljIG9wZXJhdGlvbnM6CiAgICAgLy8KQEAgLTk5Myw2ICs5OTYsMTEgQEAgcHVibGljOgogICAg
ICAgICBtX2Fzc2VtYmxlci5tb3ZxX2k2NHIoaW1tLmFzSW50cHRyKCksIGRlc3QpOwogICAgIH0K
IAorICAgIHZvaWQgbW92ZShUcnVzdGVkSW1tNjQgaW1tLCBSZWdpc3RlcklEIGRlc3QpCisgICAg
eworICAgICAgICBtX2Fzc2VtYmxlci5tb3ZxX2k2NHIoaW1tLm1fdmFsdWUsIGRlc3QpOworICAg
IH0KKwogICAgIHZvaWQgc3dhcChSZWdpc3RlcklEIHJlZzEsIFJlZ2lzdGVySUQgcmVnMikKICAg
ICB7CiAgICAgICAgIGlmIChyZWcxICE9IHJlZzIpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oCShyZXZpc2lv
biAxMzEyMzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1i
bGVyWDg2XzY0LmgJKHdvcmtpbmcgY29weSkKQEAgLTE1NCwxNSArMTU0LDIxNiBAQCBwdWJsaWM6
CiAgICAgICAgIHJldHVybiBDYWxsOjpmcm9tVGFpbEp1bXAobmV3SnVtcCk7CiAgICAgfQogCi0K
ICAgICB2b2lkIGFkZFB0cihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsK
LSAgICAgICAgbV9hc3NlbWJsZXIuYWRkcV9ycihzcmMsIGRlc3QpOworICAgICAgICBhZGQ2NChz
cmMsIGRlc3QpOwogICAgIH0KICAgICAKICAgICB2b2lkIGFkZFB0cihBZGRyZXNzIHNyYywgUmVn
aXN0ZXJJRCBkZXN0KQogICAgIHsKLSAgICAgICAgbV9hc3NlbWJsZXIuYWRkcV9tcihzcmMub2Zm
c2V0LCBzcmMuYmFzZSwgZGVzdCk7CisgICAgICAgIGFkZDY0KHNyYywgZGVzdCk7CisgICAgfQor
CisgICAgdm9pZCBhZGRQdHIoVHJ1c3RlZEltbTMyIGltbSwgUmVnaXN0ZXJJRCBzcmNEZXN0KQor
ICAgIHsKKyAgICAgICAgYWRkNjQoaW1tLCBzcmNEZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIGFk
ZFB0cihUcnVzdGVkSW1tMzIgaW1tLCBSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQor
ICAgIHsKKyAgICAgICAgYWRkNjQoaW1tLCBzcmMsIGRlc3QpOworICAgIH0KKworICAgIHZvaWQg
YWRkUHRyKFRydXN0ZWRJbW0zMiBpbW0sIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAg
IGFkZDY0KGltbSwgYWRkcmVzcyk7CisgICAgfQorCisgICAgdm9pZCBhbmRQdHIoUmVnaXN0ZXJJ
RCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIGFuZDY0KHNyYywgZGVzdCk7
CisgICAgfQorCisgICAgdm9pZCBhbmRQdHIoVHJ1c3RlZEltbTMyIGltbSwgUmVnaXN0ZXJJRCBz
cmNEZXN0KQorICAgIHsKKyAgICAgICAgYW5kNjQoaW1tLCBzcmNEZXN0KTsKKyAgICB9CisgICAg
CisgICAgdm9pZCBuZWdQdHIoUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbmVnNjQo
ZGVzdCk7CisgICAgfQorCisgICAgdm9pZCBvclB0cihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJ
RCBkZXN0KQorICAgIHsKKyAgICAgICAgb3I2NChzcmMsIGRlc3QpOworICAgIH0KKworICAgIHZv
aWQgb3JQdHIoVHJ1c3RlZEltbTMyIGltbSwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAg
ICAgb3I2NChpbW0sIGRlc3QpOworICAgIH0KKworICAgIHZvaWQgcm90YXRlUmlnaHRQdHIoVHJ1
c3RlZEltbTMyIGltbSwgUmVnaXN0ZXJJRCBzcmNEc3QpCisgICAgeworICAgICAgICByb3RhdGVS
aWdodDY0KGltbSwgc3JjRHN0KTsKKyAgICB9CisKKyAgICB2b2lkIHN1YlB0cihSZWdpc3RlcklE
IHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgc3ViNjQoc3JjLCBkZXN0KTsK
KyAgICB9CisgICAgCisgICAgdm9pZCBzdWJQdHIoVHJ1c3RlZEltbTMyIGltbSwgUmVnaXN0ZXJJ
RCBkZXN0KQorICAgIHsKKyAgICAgICAgc3ViNjQoaW1tLCBkZXN0KTsKKyAgICB9CisgICAgCisg
ICAgdm9pZCB4b3JQdHIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7Cisg
ICAgICAgIHhvcjY0KHNyYywgZGVzdCk7CisgICAgfQorICAgIAorICAgIHZvaWQgeG9yUHRyKFJl
Z2lzdGVySUQgc3JjLCBBZGRyZXNzIGRlc3QpCisgICAgeworICAgICAgICB4b3I2NChzcmMsIGRl
c3QpOworICAgIH0KKworICAgIHZvaWQgeG9yUHRyKFRydXN0ZWRJbW0zMiBpbW0sIFJlZ2lzdGVy
SUQgc3JjRGVzdCkKKyAgICB7CisgICAgICAgIHhvcjY0KGltbSwgc3JjRGVzdCk7CisgICAgfQor
CisgICAgdm9pZCBsb2FkUHRyKEltcGxpY2l0QWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklEIGRl
c3QpCisgICAgeworICAgICAgICBsb2FkNjQoYWRkcmVzcywgZGVzdCk7CisgICAgfQorCisgICAg
dm9pZCBsb2FkUHRyKEJhc2VJbmRleCBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3QpCisgICAgewor
ICAgICAgICBsb2FkNjQoYWRkcmVzcywgZGVzdCk7CisgICAgfQorCisgICAgdm9pZCBsb2FkUHRy
KGNvbnN0IHZvaWQqIGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIGxv
YWQ2NChhZGRyZXNzLCBkZXN0KTsKKyAgICB9CisKKyAgICBEYXRhTGFiZWwzMiBsb2FkUHRyV2l0
aEFkZHJlc3NPZmZzZXRQYXRjaChBZGRyZXNzIGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBsb2FkNjRXaXRoQWRkcmVzc09mZnNldFBhdGNoKGFkZHJlc3Ms
IGRlc3QpOworICAgIH0KKyAgICAKKyAgICBEYXRhTGFiZWxDb21wYWN0IGxvYWRQdHJXaXRoQ29t
cGFjdEFkZHJlc3NPZmZzZXRQYXRjaChBZGRyZXNzIGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkK
KyAgICB7CisgICAgICAgIHJldHVybiBsb2FkNjRXaXRoQ29tcGFjdEFkZHJlc3NPZmZzZXRQYXRj
aChhZGRyZXNzLCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIHN0b3JlUHRyKFJlZ2lzdGVySUQg
c3JjLCBJbXBsaWNpdEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIHN0b3JlNjQoc3Jj
LCBhZGRyZXNzKTsKKyAgICB9CisKKyAgICB2b2lkIHN0b3JlUHRyKFJlZ2lzdGVySUQgc3JjLCBC
YXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIHN0b3JlNjQoc3JjLCBhZGRyZXNzKTsK
KyAgICB9CisgICAgCisgICAgdm9pZCBzdG9yZVB0cihSZWdpc3RlcklEIHNyYywgdm9pZCogYWRk
cmVzcykKKyAgICB7CisgICAgICAgIHN0b3JlNjQoc3JjLCBhZGRyZXNzKTsKKyAgICB9CisKKyAg
ICBEYXRhTGFiZWwzMiBzdG9yZVB0cldpdGhBZGRyZXNzT2Zmc2V0UGF0Y2goUmVnaXN0ZXJJRCBz
cmMsIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIHJldHVybiBzdG9yZTY0V2l0aEFk
ZHJlc3NPZmZzZXRQYXRjaChzcmMsIGFkZHJlc3MpOworICAgIH0KKworICAgIHZvaWQgbW92ZVB0
clRvRG91YmxlKFJlZ2lzdGVySUQgc3JjLCBGUFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAg
ICAgIG1vdmU2NFRvRG91YmxlKHNyYywgZGVzdCk7CisgICAgfQorCisgICAgdm9pZCBtb3ZlRG91
YmxlVG9QdHIoRlBSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAg
ICAgbW92ZURvdWJsZVRvNjQoc3JjLCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIGNvbXBhcmVQ
dHIoUmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGxlZnQsIFRydXN0ZWRJbW0z
MiByaWdodCwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgY29tcGFyZTY0KGNvbmQs
IGxlZnQsIHJpZ2h0LCBkZXN0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjb21wYXJlUHRyKFJl
bGF0aW9uYWxDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBsZWZ0LCBSZWdpc3RlcklEIHJpZ2h0
LCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBjb21wYXJlNjQoY29uZCwgbGVmdCwg
cmlnaHQsIGRlc3QpOworICAgIH0KKyAgICAKKyAgICBKdW1wIGJyYW5jaFB0cihSZWxhdGlvbmFs
Q29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgbGVmdCwgUmVnaXN0ZXJJRCByaWdodCkKKyAgICB7
CisgICAgICAgIHJldHVybiBicmFuY2g2NChjb25kLCBsZWZ0LCByaWdodCk7CisgICAgfQorCisg
ICAgSnVtcCBicmFuY2hQdHIoUmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGxl
ZnQsIFRydXN0ZWRJbW1QdHIgcmlnaHQpCisgICAgeworICAgICAgICBpZiAoKChjb25kID09IEVx
dWFsKSB8fCAoY29uZCA9PSBOb3RFcXVhbCkpICYmICFyaWdodC5tX3ZhbHVlKSB7CisgICAgICAg
ICAgICBtX2Fzc2VtYmxlci50ZXN0cV9ycihsZWZ0LCBsZWZ0KTsKKyAgICAgICAgICAgIHJldHVy
biBKdW1wKG1fYXNzZW1ibGVyLmpDQyh4ODZDb25kaXRpb24oY29uZCkpKTsKKyAgICAgICAgfQor
ICAgICAgICBtb3ZlKHJpZ2h0LCBzY3JhdGNoUmVnaXN0ZXIpOworICAgICAgICByZXR1cm4gYnJh
bmNoUHRyKGNvbmQsIGxlZnQsIHNjcmF0Y2hSZWdpc3Rlcik7CisgICAgfQorCisgICAgSnVtcCBi
cmFuY2hQdHIoUmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGxlZnQsIEFkZHJl
c3MgcmlnaHQpCisgICAgeworICAgICAgICByZXR1cm4gYnJhbmNoNjQoY29uZCwgbGVmdCwgcmln
aHQpOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoUHRyKFJlbGF0aW9uYWxDb25kaXRpb24gY29u
ZCwgQWRkcmVzcyBsZWZ0LCBSZWdpc3RlcklEIHJpZ2h0KQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGJyYW5jaDY0KGNvbmQsIGxlZnQsIHJpZ2h0KTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaFRl
c3RQdHIoUmVzdWx0Q29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgcmVnLCBSZWdpc3RlcklEIG1h
c2spCisgICAgeworICAgICAgICByZXR1cm4gYnJhbmNoVGVzdDY0KGNvbmQsIHJlZywgbWFzayk7
CisgICAgfQorICAgIAorICAgIEp1bXAgYnJhbmNoVGVzdFB0cihSZXN1bHRDb25kaXRpb24gY29u
ZCwgUmVnaXN0ZXJJRCByZWcsIFRydXN0ZWRJbW0zMiBtYXNrID0gVHJ1c3RlZEltbTMyKC0xKSkK
KyAgICB7CisgICAgICAgIHJldHVybiBicmFuY2hUZXN0NjQoY29uZCwgcmVnLCBtYXNrKTsKKyAg
ICB9CisKKyAgICB2b2lkIHRlc3RQdHIoUmVzdWx0Q29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQg
cmVnLCBUcnVzdGVkSW1tMzIgbWFzaywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAg
dGVzdDY0KGNvbmQsIHJlZywgbWFzaywgZGVzdCk7CisgICAgfQorCisgICAgdm9pZCB0ZXN0UHRy
KFJlc3VsdENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIHJlZywgUmVnaXN0ZXJJRCBtYXNrLCBS
ZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICB0ZXN0NjQoY29uZCwgcmVnLCBtYXNrLCBk
ZXN0KTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaFRlc3RQdHIoUmVzdWx0Q29uZGl0aW9uIGNv
bmQsIEFkZHJlc3MgYWRkcmVzcywgVHJ1c3RlZEltbTMyIG1hc2sgPSBUcnVzdGVkSW1tMzIoLTEp
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJyYW5jaFRlc3Q2NChjb25kLCBhZGRyZXNzLCBtYXNr
KTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaFRlc3RQdHIoUmVzdWx0Q29uZGl0aW9uIGNvbmQs
IEFkZHJlc3MgYWRkcmVzcywgUmVnaXN0ZXJJRCByZWcpCisgICAgeworICAgICAgICByZXR1cm4g
YnJhbmNoVGVzdDY0KGNvbmQsIGFkZHJlc3MsIHJlZyk7CisgICAgfQorCisgICAgSnVtcCBicmFu
Y2hUZXN0UHRyKFJlc3VsdENvbmRpdGlvbiBjb25kLCBCYXNlSW5kZXggYWRkcmVzcywgVHJ1c3Rl
ZEltbTMyIG1hc2sgPSBUcnVzdGVkSW1tMzIoLTEpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJy
YW5jaFRlc3Q2NChjb25kLCBhZGRyZXNzLCBtYXNrKTsKKyAgICB9CisKKyAgICBEYXRhTGFiZWxQ
dHIgbW92ZVdpdGhQYXRjaChUcnVzdGVkSW1tUHRyIGluaXRpYWxWYWx1ZSwgUmVnaXN0ZXJJRCBk
ZXN0KQorICAgIHsKKyAgICAgICAgcGFkQmVmb3JlUGF0Y2goKTsKKyAgICAgICAgbV9hc3NlbWJs
ZXIubW92cV9pNjRyKGluaXRpYWxWYWx1ZS5hc0ludHB0cigpLCBkZXN0KTsKKyAgICAgICAgcmV0
dXJuIERhdGFMYWJlbFB0cih0aGlzKTsKICAgICB9CiAKICAgICB2b2lkIGFkZFB0cihBYnNvbHV0
ZUFkZHJlc3Mgc3JjLCBSZWdpc3RlcklEIGRlc3QpCkBAIC0xNzEsMjE0ICszNzIsMzU0IEBAIHB1
YmxpYzoKICAgICAgICAgYWRkUHRyKEFkZHJlc3Moc2NyYXRjaFJlZ2lzdGVyKSwgZGVzdCk7CiAg
ICAgfQogCi0gICAgdm9pZCBhZGRQdHIoVHJ1c3RlZEltbTMyIGltbSwgUmVnaXN0ZXJJRCBzcmNE
ZXN0KQorICAgIHZvaWQgYWRkUHRyKFRydXN0ZWRJbW1QdHIgaW1tLCBSZWdpc3RlcklEIGRlc3Qp
CiAgICAgewotICAgICAgICBtX2Fzc2VtYmxlci5hZGRxX2lyKGltbS5tX3ZhbHVlLCBzcmNEZXN0
KTsKKyAgICAgICAgbW92ZShpbW0sIHNjcmF0Y2hSZWdpc3Rlcik7CisgICAgICAgIGFkZFB0cihz
Y3JhdGNoUmVnaXN0ZXIsIGRlc3QpOwogICAgIH0KIAotICAgIHZvaWQgYWRkUHRyKFRydXN0ZWRJ
bW1QdHIgaW1tLCBSZWdpc3RlcklEIGRlc3QpCisgICAgdm9pZCBhZGRQdHIoVHJ1c3RlZEltbTMy
IGltbSwgQWJzb2x1dGVBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtb3ZlKFRydXN0
ZWRJbW1QdHIoYWRkcmVzcy5tX3B0ciksIHNjcmF0Y2hSZWdpc3Rlcik7CisgICAgICAgIGFkZFB0
cihpbW0sIEFkZHJlc3Moc2NyYXRjaFJlZ2lzdGVyKSk7CisgICAgfQorCisgICAgdm9pZCBvclB0
cihUcnVzdGVkSW1tUHRyIGltbSwgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKICAgICAgICAgbW92
ZShpbW0sIHNjcmF0Y2hSZWdpc3Rlcik7Ci0gICAgICAgIG1fYXNzZW1ibGVyLmFkZHFfcnIoc2Ny
YXRjaFJlZ2lzdGVyLCBkZXN0KTsKKyAgICAgICAgb3JQdHIoc2NyYXRjaFJlZ2lzdGVyLCBkZXN0
KTsKICAgICB9CiAKLSAgICB2b2lkIGFkZFB0cihUcnVzdGVkSW1tMzIgaW1tLCBSZWdpc3RlcklE
IHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHZvaWQgb3JQdHIoUmVnaXN0ZXJJRCBvcDEsIFJl
Z2lzdGVySUQgb3AyLCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewotICAgICAgICBtX2Fzc2VtYmxl
ci5sZWFxX21yKGltbS5tX3ZhbHVlLCBzcmMsIGRlc3QpOworICAgICAgICBpZiAob3AxID09IG9w
MikKKyAgICAgICAgICAgIG1vdmUob3AxLCBkZXN0KTsKKyAgICAgICAgZWxzZSBpZiAob3AxID09
IGRlc3QpCisgICAgICAgICAgICBvclB0cihvcDIsIGRlc3QpOworICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgIG1vdmUob3AyLCBkZXN0KTsKKyAgICAgICAgICAgIG9yUHRyKG9wMSwgZGVzdCk7
CisgICAgICAgIH0KICAgICB9CiAKLSAgICB2b2lkIGFkZFB0cihUcnVzdGVkSW1tMzIgaW1tLCBB
ZGRyZXNzIGFkZHJlc3MpCisgICAgdm9pZCBvclB0cihUcnVzdGVkSW1tMzIgaW1tLCBSZWdpc3Rl
cklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKLSAgICAgICAgbV9hc3NlbWJsZXIuYWRk
cV9pbShpbW0ubV92YWx1ZSwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSk7CisgICAgICAg
IG1vdmUoc3JjLCBkZXN0KTsKKyAgICAgICAgb3JQdHIoaW1tLCBkZXN0KTsKKyAgICB9CisgICAg
CisgICAgdm9pZCBzdWJQdHIoVHJ1c3RlZEltbVB0ciBpbW0sIFJlZ2lzdGVySUQgZGVzdCkKKyAg
ICB7CisgICAgICAgIG1vdmUoaW1tLCBzY3JhdGNoUmVnaXN0ZXIpOworICAgICAgICBzdWJQdHIo
c2NyYXRjaFJlZ2lzdGVyLCBkZXN0KTsKICAgICB9CiAKLSAgICB2b2lkIGFkZFB0cihUcnVzdGVk
SW1tMzIgaW1tLCBBYnNvbHV0ZUFkZHJlc3MgYWRkcmVzcykKKyAgICBDb252ZXJ0aWJsZUxvYWRM
YWJlbCBjb252ZXJ0aWJsZUxvYWRQdHIoQWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3Qp
CiAgICAgewotICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoYWRkcmVzcy5tX3B0ciksIHNjcmF0
Y2hSZWdpc3Rlcik7Ci0gICAgICAgIGFkZFB0cihpbW0sIEFkZHJlc3Moc2NyYXRjaFJlZ2lzdGVy
KSk7CisgICAgICAgIENvbnZlcnRpYmxlTG9hZExhYmVsIHJlc3VsdCA9IENvbnZlcnRpYmxlTG9h
ZExhYmVsKHRoaXMpOworICAgICAgICBsb2FkUHRyKGFkZHJlc3MsIGRlc3QpOworICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHZvaWQgc3RvcmVQdHIoVHJ1c3RlZEltbVB0ciBp
bW0sIEltcGxpY2l0QWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbW92ZShpbW0sIHNj
cmF0Y2hSZWdpc3Rlcik7CisgICAgICAgIHN0b3JlUHRyKHNjcmF0Y2hSZWdpc3RlciwgYWRkcmVz
cyk7CisgICAgfQorCisgICAgdm9pZCBzdG9yZVB0cihUcnVzdGVkSW1tUHRyIGltbSwgQmFzZUlu
ZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBtb3ZlKGltbSwgc2NyYXRjaFJlZ2lzdGVyKTsK
KyAgICAgICAgc3RvcmVQdHIoc2NyYXRjaFJlZ2lzdGVyLCBhZGRyZXNzKTsKKyAgICB9CisgICAg
CisgICAgSnVtcCBicmFuY2hBZGQzMihSZXN1bHRDb25kaXRpb24gY29uZCwgVHJ1c3RlZEltbTMy
IHNyYywgQWJzb2x1dGVBZGRyZXNzIGRlc3QpCisgICAgeworICAgICAgICBtb3ZlKFRydXN0ZWRJ
bW1QdHIoZGVzdC5tX3B0ciksIHNjcmF0Y2hSZWdpc3Rlcik7CisgICAgICAgIGFkZDMyKHNyYywg
QWRkcmVzcyhzY3JhdGNoUmVnaXN0ZXIpKTsKKyAgICAgICAgcmV0dXJuIEp1bXAobV9hc3NlbWJs
ZXIuakNDKHg4NkNvbmRpdGlvbihjb25kKSkpOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoUHRy
KFJlbGF0aW9uYWxDb25kaXRpb24gY29uZCwgQWJzb2x1dGVBZGRyZXNzIGxlZnQsIFJlZ2lzdGVy
SUQgcmlnaHQpCisgICAgeworICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobGVmdC5tX3B0ciks
IHNjcmF0Y2hSZWdpc3Rlcik7CisgICAgICAgIHJldHVybiBicmFuY2hQdHIoY29uZCwgQWRkcmVz
cyhzY3JhdGNoUmVnaXN0ZXIpLCByaWdodCk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2hQdHIo
UmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBBZGRyZXNzIGxlZnQsIFRydXN0ZWRJbW1QdHIgcmln
aHQpCisgICAgeworICAgICAgICBtb3ZlKHJpZ2h0LCBzY3JhdGNoUmVnaXN0ZXIpOworICAgICAg
ICByZXR1cm4gYnJhbmNoUHRyKGNvbmQsIGxlZnQsIHNjcmF0Y2hSZWdpc3Rlcik7CisgICAgfQor
CisgICAgSnVtcCBicmFuY2hUZXN0UHRyKFJlc3VsdENvbmRpdGlvbiBjb25kLCBBYnNvbHV0ZUFk
ZHJlc3MgYWRkcmVzcywgVHJ1c3RlZEltbTMyIG1hc2sgPSBUcnVzdGVkSW1tMzIoLTEpKQorICAg
IHsKKyAgICAgICAgbG9hZFB0cihhZGRyZXNzLm1fcHRyLCBzY3JhdGNoUmVnaXN0ZXIpOworICAg
ICAgICByZXR1cm4gYnJhbmNoVGVzdFB0cihjb25kLCBzY3JhdGNoUmVnaXN0ZXIsIG1hc2spOwor
ICAgIH0KKworICAgIEp1bXAgYnJhbmNoQWRkUHRyKFJlc3VsdENvbmRpdGlvbiBjb25kLCBUcnVz
dGVkSW1tMzIgaW1tLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBhZGRQdHIoaW1t
LCBkZXN0KTsKKyAgICAgICAgcmV0dXJuIEp1bXAobV9hc3NlbWJsZXIuakNDKHg4NkNvbmRpdGlv
bihjb25kKSkpOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoQWRkUHRyKFJlc3VsdENvbmRpdGlv
biBjb25kLCBSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAg
YWRkUHRyKHNyYywgZGVzdCk7CisgICAgICAgIHJldHVybiBKdW1wKG1fYXNzZW1ibGVyLmpDQyh4
ODZDb25kaXRpb24oY29uZCkpKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaFN1YlB0cihSZXN1
bHRDb25kaXRpb24gY29uZCwgVHJ1c3RlZEltbTMyIGltbSwgUmVnaXN0ZXJJRCBkZXN0KQorICAg
IHsKKyAgICAgICAgc3ViUHRyKGltbSwgZGVzdCk7CisgICAgICAgIHJldHVybiBKdW1wKG1fYXNz
ZW1ibGVyLmpDQyh4ODZDb25kaXRpb24oY29uZCkpKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5j
aFN1YlB0cihSZXN1bHRDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBzcmMxLCBUcnVzdGVkSW1t
MzIgc3JjMiwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbW92ZShzcmMxLCBkZXN0
KTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaFN1YlB0cihjb25kLCBzcmMyLCBkZXN0KTsKKyAgICB9
CisKKyAgICBKdW1wIGJyYW5jaFB0cldpdGhQYXRjaChSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQs
IFJlZ2lzdGVySUQgbGVmdCwgRGF0YUxhYmVsUHRyJiBkYXRhTGFiZWwsIFRydXN0ZWRJbW1QdHIg
aW5pdGlhbFJpZ2h0VmFsdWUgPSBUcnVzdGVkSW1tUHRyKDApKQorICAgIHsKKyAgICAgICAgZGF0
YUxhYmVsID0gbW92ZVdpdGhQYXRjaChpbml0aWFsUmlnaHRWYWx1ZSwgc2NyYXRjaFJlZ2lzdGVy
KTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaFB0cihjb25kLCBsZWZ0LCBzY3JhdGNoUmVnaXN0ZXIp
OworICAgIH0KKworICAgIEp1bXAgYnJhbmNoUHRyV2l0aFBhdGNoKFJlbGF0aW9uYWxDb25kaXRp
b24gY29uZCwgQWRkcmVzcyBsZWZ0LCBEYXRhTGFiZWxQdHImIGRhdGFMYWJlbCwgVHJ1c3RlZElt
bVB0ciBpbml0aWFsUmlnaHRWYWx1ZSA9IFRydXN0ZWRJbW1QdHIoMCkpCisgICAgeworICAgICAg
ICBkYXRhTGFiZWwgPSBtb3ZlV2l0aFBhdGNoKGluaXRpYWxSaWdodFZhbHVlLCBzY3JhdGNoUmVn
aXN0ZXIpOworICAgICAgICByZXR1cm4gYnJhbmNoUHRyKGNvbmQsIGxlZnQsIHNjcmF0Y2hSZWdp
c3Rlcik7CisgICAgfQorCisgICAgRGF0YUxhYmVsUHRyIHN0b3JlUHRyV2l0aFBhdGNoKFRydXN0
ZWRJbW1QdHIgaW5pdGlhbFZhbHVlLCBJbXBsaWNpdEFkZHJlc3MgYWRkcmVzcykKKyAgICB7Cisg
ICAgICAgIERhdGFMYWJlbFB0ciBsYWJlbCA9IG1vdmVXaXRoUGF0Y2goaW5pdGlhbFZhbHVlLCBz
Y3JhdGNoUmVnaXN0ZXIpOworICAgICAgICBzdG9yZVB0cihzY3JhdGNoUmVnaXN0ZXIsIGFkZHJl
c3MpOworICAgICAgICByZXR1cm4gbGFiZWw7CisgICAgfQorCisgICAgdm9pZCBhZGQ2NChSZWdp
c3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIu
YWRkcV9ycihzcmMsIGRlc3QpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGFkZDY0KEFkZHJlc3Mg
c3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5hZGRxX21y
KHNyYy5vZmZzZXQsIHNyYy5iYXNlLCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIGFkZDY0KEFi
c29sdXRlQWRkcmVzcyBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1vdmUo
VHJ1c3RlZEltbVB0cihzcmMubV9wdHIpLCBzY3JhdGNoUmVnaXN0ZXIpOworICAgICAgICBhZGQ2
NChBZGRyZXNzKHNjcmF0Y2hSZWdpc3RlciksIGRlc3QpOworICAgIH0KKworICAgIHZvaWQgYWRk
NjQoVHJ1c3RlZEltbTMyIGltbSwgUmVnaXN0ZXJJRCBzcmNEZXN0KQorICAgIHsKKyAgICAgICAg
bV9hc3NlbWJsZXIuYWRkcV9pcihpbW0ubV92YWx1ZSwgc3JjRGVzdCk7CisgICAgfQorCisgICAg
dm9pZCBhZGQ2NChUcnVzdGVkSW1tNjQgaW1tLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAg
ICAgICBtb3ZlKGltbSwgc2NyYXRjaFJlZ2lzdGVyKTsKKyAgICAgICAgYWRkNjQoc2NyYXRjaFJl
Z2lzdGVyLCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIGFkZDY0KFRydXN0ZWRJbW0zMiBpbW0s
IFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2Vt
Ymxlci5sZWFxX21yKGltbS5tX3ZhbHVlLCBzcmMsIGRlc3QpOworICAgIH0KKworICAgIHZvaWQg
YWRkNjQoVHJ1c3RlZEltbTMyIGltbSwgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAg
bV9hc3NlbWJsZXIuYWRkcV9pbShpbW0ubV92YWx1ZSwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3Mu
YmFzZSk7CiAgICAgfQogCiAgICAgdm9pZCBhZGQ2NChUcnVzdGVkSW1tMzIgaW1tLCBBYnNvbHV0
ZUFkZHJlc3MgYWRkcmVzcykKICAgICB7Ci0gICAgICAgIGFkZFB0cihpbW0sIGFkZHJlc3MpOwor
ICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoYWRkcmVzcy5tX3B0ciksIHNjcmF0Y2hSZWdpc3Rl
cik7CisgICAgICAgIGFkZDY0KGltbSwgQWRkcmVzcyhzY3JhdGNoUmVnaXN0ZXIpKTsKICAgICB9
CiAKLSAgICB2b2lkIGFuZFB0cihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAg
IHZvaWQgYW5kNjQoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CiAgICAg
ICAgIG1fYXNzZW1ibGVyLmFuZHFfcnIoc3JjLCBkZXN0KTsKICAgICB9CiAKLSAgICB2b2lkIGFu
ZFB0cihUcnVzdGVkSW1tMzIgaW1tLCBSZWdpc3RlcklEIHNyY0Rlc3QpCisgICAgdm9pZCBhbmQ2
NChUcnVzdGVkSW1tMzIgaW1tLCBSZWdpc3RlcklEIHNyY0Rlc3QpCiAgICAgewogICAgICAgICBt
X2Fzc2VtYmxlci5hbmRxX2lyKGltbS5tX3ZhbHVlLCBzcmNEZXN0KTsKICAgICB9CiAgICAgCi0g
ICAgdm9pZCBuZWdQdHIoUmVnaXN0ZXJJRCBkZXN0KQorICAgIHZvaWQgbmVnNjQoUmVnaXN0ZXJJ
RCBkZXN0KQogICAgIHsKICAgICAgICAgbV9hc3NlbWJsZXIubmVncV9yKGRlc3QpOwogICAgIH0K
IAotICAgIHZvaWQgb3JQdHIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB2
b2lkIG9yNjQoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CiAgICAgICAg
IG1fYXNzZW1ibGVyLm9ycV9ycihzcmMsIGRlc3QpOwogICAgIH0KIAotICAgIHZvaWQgb3JQdHIo
VHJ1c3RlZEltbVB0ciBpbW0sIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB2b2lkIG9yNjQoVHJ1c3Rl
ZEltbTY0IGltbSwgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKICAgICAgICAgbW92ZShpbW0sIHNj
cmF0Y2hSZWdpc3Rlcik7Ci0gICAgICAgIG1fYXNzZW1ibGVyLm9ycV9ycihzY3JhdGNoUmVnaXN0
ZXIsIGRlc3QpOworICAgICAgICBvcjY0KHNjcmF0Y2hSZWdpc3RlciwgZGVzdCk7CiAgICAgfQog
Ci0gICAgdm9pZCBvclB0cihUcnVzdGVkSW1tMzIgaW1tLCBSZWdpc3RlcklEIGRlc3QpCisgICAg
dm9pZCBvcjY0KFRydXN0ZWRJbW0zMiBpbW0sIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CiAgICAg
ICAgIG1fYXNzZW1ibGVyLm9ycV9pcihpbW0ubV92YWx1ZSwgZGVzdCk7CiAgICAgfQogCi0gICAg
dm9pZCBvclB0cihSZWdpc3RlcklEIG9wMSwgUmVnaXN0ZXJJRCBvcDIsIFJlZ2lzdGVySUQgZGVz
dCkKKyAgICB2b2lkIG9yNjQoUmVnaXN0ZXJJRCBvcDEsIFJlZ2lzdGVySUQgb3AyLCBSZWdpc3Rl
cklEIGRlc3QpCiAgICAgewogICAgICAgICBpZiAob3AxID09IG9wMikKICAgICAgICAgICAgIG1v
dmUob3AxLCBkZXN0KTsKICAgICAgICAgZWxzZSBpZiAob3AxID09IGRlc3QpCi0gICAgICAgICAg
ICBvclB0cihvcDIsIGRlc3QpOworICAgICAgICAgICAgb3I2NChvcDIsIGRlc3QpOwogICAgICAg
ICBlbHNlIHsKICAgICAgICAgICAgIG1vdmUob3AyLCBkZXN0KTsKLSAgICAgICAgICAgIG9yUHRy
KG9wMSwgZGVzdCk7CisgICAgICAgICAgICBvcjY0KG9wMSwgZGVzdCk7CiAgICAgICAgIH0KICAg
ICB9CiAKLSAgICB2b2lkIG9yUHRyKFRydXN0ZWRJbW0zMiBpbW0sIFJlZ2lzdGVySUQgc3JjLCBS
ZWdpc3RlcklEIGRlc3QpCisgICAgdm9pZCBvcjY0KFRydXN0ZWRJbW0zMiBpbW0sIFJlZ2lzdGVy
SUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewogICAgICAgICBtb3ZlKHNyYywgZGVzdCk7
Ci0gICAgICAgIG9yUHRyKGltbSwgZGVzdCk7CisgICAgICAgIG9yNjQoaW1tLCBkZXN0KTsKICAg
ICB9CiAgICAgCi0gICAgdm9pZCByb3RhdGVSaWdodFB0cihUcnVzdGVkSW1tMzIgaW1tLCBSZWdp
c3RlcklEIHNyY0RzdCkKKyAgICB2b2lkIHJvdGF0ZVJpZ2h0NjQoVHJ1c3RlZEltbTMyIGltbSwg
UmVnaXN0ZXJJRCBzcmNEc3QpCiAgICAgewogICAgICAgICBtX2Fzc2VtYmxlci5yb3JxX2k4cihp
bW0ubV92YWx1ZSwgc3JjRHN0KTsKICAgICB9CiAKLSAgICB2b2lkIHN1YlB0cihSZWdpc3RlcklE
IHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHZvaWQgc3ViNjQoUmVnaXN0ZXJJRCBzcmMsIFJl
Z2lzdGVySUQgZGVzdCkKICAgICB7CiAgICAgICAgIG1fYXNzZW1ibGVyLnN1YnFfcnIoc3JjLCBk
ZXN0KTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBzdWJQdHIoVHJ1c3RlZEltbTMyIGltbSwgUmVn
aXN0ZXJJRCBkZXN0KQorICAgIHZvaWQgc3ViNjQoVHJ1c3RlZEltbTMyIGltbSwgUmVnaXN0ZXJJ
RCBkZXN0KQogICAgIHsKICAgICAgICAgbV9hc3NlbWJsZXIuc3VicV9pcihpbW0ubV92YWx1ZSwg
ZGVzdCk7CiAgICAgfQogICAgIAotICAgIHZvaWQgc3ViUHRyKFRydXN0ZWRJbW1QdHIgaW1tLCBS
ZWdpc3RlcklEIGRlc3QpCisgICAgdm9pZCBzdWI2NChUcnVzdGVkSW1tNjQgaW1tLCBSZWdpc3Rl
cklEIGRlc3QpCiAgICAgewogICAgICAgICBtb3ZlKGltbSwgc2NyYXRjaFJlZ2lzdGVyKTsKLSAg
ICAgICAgbV9hc3NlbWJsZXIuc3VicV9ycihzY3JhdGNoUmVnaXN0ZXIsIGRlc3QpOworICAgICAg
ICBzdWI2NChzY3JhdGNoUmVnaXN0ZXIsIGRlc3QpOwogICAgIH0KIAotICAgIHZvaWQgeG9yUHRy
KFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgdm9pZCB4b3I2NChSZWdpc3Rl
cklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKICAgICAgICAgbV9hc3NlbWJsZXIueG9y
cV9ycihzcmMsIGRlc3QpOwogICAgIH0KICAgICAKLSAgICB2b2lkIHhvclB0cihSZWdpc3RlcklE
IHNyYywgQWRkcmVzcyBkZXN0KQorICAgIHZvaWQgeG9yNjQoUmVnaXN0ZXJJRCBzcmMsIEFkZHJl
c3MgZGVzdCkKICAgICB7CiAgICAgICAgIG1fYXNzZW1ibGVyLnhvcnFfcm0oc3JjLCBkZXN0Lm9m
ZnNldCwgZGVzdC5iYXNlKTsKICAgICB9CiAKLSAgICB2b2lkIHhvclB0cihUcnVzdGVkSW1tMzIg
aW1tLCBSZWdpc3RlcklEIHNyY0Rlc3QpCisgICAgdm9pZCB4b3I2NChUcnVzdGVkSW1tMzIgaW1t
LCBSZWdpc3RlcklEIHNyY0Rlc3QpCiAgICAgewogICAgICAgICBtX2Fzc2VtYmxlci54b3JxX2ly
KGltbS5tX3ZhbHVlLCBzcmNEZXN0KTsKICAgICB9CiAKLSAgICB2b2lkIGxvYWRQdHIoSW1wbGlj
aXRBZGRyZXNzIGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB2b2lkIGxvYWQ2NChJbXBs
aWNpdEFkZHJlc3MgYWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKICAgICAgICAgbV9h
c3NlbWJsZXIubW92cV9tcihhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlLCBkZXN0KTsKICAg
ICB9CiAKLSAgICBDb252ZXJ0aWJsZUxvYWRMYWJlbCBjb252ZXJ0aWJsZUxvYWRQdHIoQWRkcmVz
cyBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3QpCisgICAgQ29udmVydGlibGVMb2FkTGFiZWwgY29u
dmVydGlibGVMb2FkNjQoQWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewog
ICAgICAgICBDb252ZXJ0aWJsZUxvYWRMYWJlbCByZXN1bHQgPSBDb252ZXJ0aWJsZUxvYWRMYWJl
bCh0aGlzKTsKICAgICAgICAgbV9hc3NlbWJsZXIubW92cV9tcihhZGRyZXNzLm9mZnNldCwgYWRk
cmVzcy5iYXNlLCBkZXN0KTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKLSAgICB2
b2lkIGxvYWRQdHIoQmFzZUluZGV4IGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB2b2lk
IGxvYWQ2NChCYXNlSW5kZXggYWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKICAgICAg
ICAgbV9hc3NlbWJsZXIubW92cV9tcihhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlLCBhZGRy
ZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlLCBkZXN0KTsKICAgICB9CiAKLSAgICB2b2lkIGxvYWRQ
dHIoY29uc3Qgdm9pZCogYWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHZvaWQgbG9hZDY0
KGNvbnN0IHZvaWQqIGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CiAgICAgICAgIGlm
IChkZXN0ID09IFg4NlJlZ2lzdGVyczo6ZWF4KQogICAgICAgICAgICAgbV9hc3NlbWJsZXIubW92
cV9tRUFYKGFkZHJlc3MpOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cihhZGRyZXNzKSwgZGVzdCk7Ci0gICAgICAgICAgICBsb2FkUHRyKGRlc3QsIGRlc3Qp
OworICAgICAgICAgICAgbG9hZDY0KGRlc3QsIGRlc3QpOwogICAgICAgICB9CiAgICAgfQogCi0g
ICAgRGF0YUxhYmVsMzIgbG9hZFB0cldpdGhBZGRyZXNzT2Zmc2V0UGF0Y2goQWRkcmVzcyBhZGRy
ZXNzLCBSZWdpc3RlcklEIGRlc3QpCisgICAgRGF0YUxhYmVsMzIgbG9hZDY0V2l0aEFkZHJlc3NP
ZmZzZXRQYXRjaChBZGRyZXNzIGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CiAgICAg
ICAgIHBhZEJlZm9yZVBhdGNoKCk7CiAgICAgICAgIG1fYXNzZW1ibGVyLm1vdnFfbXJfZGlzcDMy
KGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UsIGRlc3QpOwogICAgICAgICByZXR1cm4gRGF0
YUxhYmVsMzIodGhpcyk7CiAgICAgfQogICAgIAotICAgIERhdGFMYWJlbENvbXBhY3QgbG9hZFB0
cldpdGhDb21wYWN0QWRkcmVzc09mZnNldFBhdGNoKEFkZHJlc3MgYWRkcmVzcywgUmVnaXN0ZXJJ
RCBkZXN0KQorICAgIERhdGFMYWJlbENvbXBhY3QgbG9hZDY0V2l0aENvbXBhY3RBZGRyZXNzT2Zm
c2V0UGF0Y2goQWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewogICAgICAg
ICBwYWRCZWZvcmVQYXRjaCgpOwogICAgICAgICBtX2Fzc2VtYmxlci5tb3ZxX21yX2Rpc3A4KGFk
ZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UsIGRlc3QpOwogICAgICAgICByZXR1cm4gRGF0YUxh
YmVsQ29tcGFjdCh0aGlzKTsKICAgICB9CiAKLSAgICB2b2lkIHN0b3JlUHRyKFJlZ2lzdGVySUQg
c3JjLCBJbXBsaWNpdEFkZHJlc3MgYWRkcmVzcykKKyAgICB2b2lkIHN0b3JlNjQoUmVnaXN0ZXJJ
RCBzcmMsIEltcGxpY2l0QWRkcmVzcyBhZGRyZXNzKQogICAgIHsKICAgICAgICAgbV9hc3NlbWJs
ZXIubW92cV9ybShzcmMsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UpOwogICAgIH0KIAot
ICAgIHZvaWQgc3RvcmVQdHIoUmVnaXN0ZXJJRCBzcmMsIEJhc2VJbmRleCBhZGRyZXNzKQorICAg
IHZvaWQgc3RvcmU2NChSZWdpc3RlcklEIHNyYywgQmFzZUluZGV4IGFkZHJlc3MpCiAgICAgewog
ICAgICAgICBtX2Fzc2VtYmxlci5tb3ZxX3JtKHNyYywgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3Mu
YmFzZSwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZSk7CiAgICAgfQogICAgIAotICAgIHZv
aWQgc3RvcmVQdHIoUmVnaXN0ZXJJRCBzcmMsIHZvaWQqIGFkZHJlc3MpCisgICAgdm9pZCBzdG9y
ZTY0KFJlZ2lzdGVySUQgc3JjLCB2b2lkKiBhZGRyZXNzKQogICAgIHsKICAgICAgICAgaWYgKHNy
YyA9PSBYODZSZWdpc3RlcnM6OmVheCkKICAgICAgICAgICAgIG1fYXNzZW1ibGVyLm1vdnFfRUFY
bShhZGRyZXNzKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1Q
dHIoYWRkcmVzcyksIHNjcmF0Y2hSZWdpc3Rlcik7Ci0gICAgICAgICAgICBzdG9yZVB0cihzcmMs
IHNjcmF0Y2hSZWdpc3Rlcik7CisgICAgICAgICAgICBzdG9yZTY0KHNyYywgc2NyYXRjaFJlZ2lz
dGVyKTsKICAgICAgICAgfQogICAgIH0KIAotICAgIHZvaWQgc3RvcmVQdHIoVHJ1c3RlZEltbVB0
ciBpbW0sIEltcGxpY2l0QWRkcmVzcyBhZGRyZXNzKQorICAgIHZvaWQgc3RvcmU2NChUcnVzdGVk
SW1tNjQgaW1tLCBJbXBsaWNpdEFkZHJlc3MgYWRkcmVzcykKICAgICB7CiAgICAgICAgIG1vdmUo
aW1tLCBzY3JhdGNoUmVnaXN0ZXIpOwotICAgICAgICBzdG9yZVB0cihzY3JhdGNoUmVnaXN0ZXIs
IGFkZHJlc3MpOworICAgICAgICBzdG9yZTY0KHNjcmF0Y2hSZWdpc3RlciwgYWRkcmVzcyk7CiAg
ICAgfQogCi0gICAgdm9pZCBzdG9yZVB0cihUcnVzdGVkSW1tUHRyIGltbSwgQmFzZUluZGV4IGFk
ZHJlc3MpCisgICAgdm9pZCBzdG9yZTY0KFRydXN0ZWRJbW02NCBpbW0sIEJhc2VJbmRleCBhZGRy
ZXNzKQogICAgIHsKICAgICAgICAgbW92ZShpbW0sIHNjcmF0Y2hSZWdpc3Rlcik7CiAgICAgICAg
IG1fYXNzZW1ibGVyLm1vdnFfcm0oc2NyYXRjaFJlZ2lzdGVyLCBhZGRyZXNzLm9mZnNldCwgYWRk
cmVzcy5iYXNlLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlKTsKICAgICB9CiAgICAgCi0g
ICAgRGF0YUxhYmVsMzIgc3RvcmVQdHJXaXRoQWRkcmVzc09mZnNldFBhdGNoKFJlZ2lzdGVySUQg
c3JjLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgRGF0YUxhYmVsMzIgc3RvcmU2NFdpdGhBZGRyZXNz
T2Zmc2V0UGF0Y2goUmVnaXN0ZXJJRCBzcmMsIEFkZHJlc3MgYWRkcmVzcykKICAgICB7CiAgICAg
ICAgIHBhZEJlZm9yZVBhdGNoKCk7CiAgICAgICAgIG1fYXNzZW1ibGVyLm1vdnFfcm1fZGlzcDMy
KHNyYywgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSk7CiAgICAgICAgIHJldHVybiBEYXRh
TGFiZWwzMih0aGlzKTsKICAgICB9CiAKLSAgICB2b2lkIG1vdmVQdHJUb0RvdWJsZShSZWdpc3Rl
cklEIHNyYywgRlBSZWdpc3RlcklEIGRlc3QpCisgICAgdm9pZCBtb3ZlNjRUb0RvdWJsZShSZWdp
c3RlcklEIHNyYywgRlBSZWdpc3RlcklEIGRlc3QpCiAgICAgewogICAgICAgICBtX2Fzc2VtYmxl
ci5tb3ZxX3JyKHNyYywgZGVzdCk7CiAgICAgfQogCi0gICAgdm9pZCBtb3ZlRG91YmxlVG9QdHIo
RlBSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHZvaWQgbW92ZURvdWJsZVRv
NjQoRlBSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKICAgICAgICAgbV9h
c3NlbWJsZXIubW92cV9ycihzcmMsIGRlc3QpOwogICAgIH0KIAotICAgIHZvaWQgY29tcGFyZVB0
cihSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgbGVmdCwgVHJ1c3RlZEltbTMy
IHJpZ2h0LCBSZWdpc3RlcklEIGRlc3QpCisgICAgdm9pZCBjb21wYXJlNjQoUmVsYXRpb25hbENv
bmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGxlZnQsIFRydXN0ZWRJbW0zMiByaWdodCwgUmVnaXN0
ZXJJRCBkZXN0KQogICAgIHsKICAgICAgICAgaWYgKCgoY29uZCA9PSBFcXVhbCkgfHwgKGNvbmQg
PT0gTm90RXF1YWwpKSAmJiAhcmlnaHQubV92YWx1ZSkKICAgICAgICAgICAgIG1fYXNzZW1ibGVy
LnRlc3RxX3JyKGxlZnQsIGxlZnQpOwpAQCAtMzg4LDY3ICs3MjksNjAgQEAgcHVibGljOgogICAg
ICAgICBtX2Fzc2VtYmxlci5tb3Z6YmxfcnIoZGVzdCwgZGVzdCk7CiAgICAgfQogICAgIAotICAg
IHZvaWQgY29tcGFyZVB0cihSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgbGVm
dCwgUmVnaXN0ZXJJRCByaWdodCwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHZvaWQgY29tcGFyZTY0
KFJlbGF0aW9uYWxDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBsZWZ0LCBSZWdpc3RlcklEIHJp
Z2h0LCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewogICAgICAgICBtX2Fzc2VtYmxlci5jbXBxX3Jy
KHJpZ2h0LCBsZWZ0KTsKICAgICAgICAgbV9hc3NlbWJsZXIuc2V0Q0Nfcih4ODZDb25kaXRpb24o
Y29uZCksIGRlc3QpOwogICAgICAgICBtX2Fzc2VtYmxlci5tb3Z6YmxfcnIoZGVzdCwgZGVzdCk7
CiAgICAgfQogICAgIAotICAgIEp1bXAgYnJhbmNoQWRkMzIoUmVzdWx0Q29uZGl0aW9uIGNvbmQs
IFRydXN0ZWRJbW0zMiBzcmMsIEFic29sdXRlQWRkcmVzcyBkZXN0KQotICAgIHsKLSAgICAgICAg
bW92ZShUcnVzdGVkSW1tUHRyKGRlc3QubV9wdHIpLCBzY3JhdGNoUmVnaXN0ZXIpOwotICAgICAg
ICBhZGQzMihzcmMsIEFkZHJlc3Moc2NyYXRjaFJlZ2lzdGVyKSk7Ci0gICAgICAgIHJldHVybiBK
dW1wKG1fYXNzZW1ibGVyLmpDQyh4ODZDb25kaXRpb24oY29uZCkpKTsKLSAgICB9Ci0KLSAgICBK
dW1wIGJyYW5jaFB0cihSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgbGVmdCwg
UmVnaXN0ZXJJRCByaWdodCkKKyAgICBKdW1wIGJyYW5jaDY0KFJlbGF0aW9uYWxDb25kaXRpb24g
Y29uZCwgUmVnaXN0ZXJJRCBsZWZ0LCBSZWdpc3RlcklEIHJpZ2h0KQogICAgIHsKICAgICAgICAg
bV9hc3NlbWJsZXIuY21wcV9ycihyaWdodCwgbGVmdCk7CiAgICAgICAgIHJldHVybiBKdW1wKG1f
YXNzZW1ibGVyLmpDQyh4ODZDb25kaXRpb24oY29uZCkpKTsKICAgICB9CiAKLSAgICBKdW1wIGJy
YW5jaFB0cihSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgbGVmdCwgVHJ1c3Rl
ZEltbVB0ciByaWdodCkKKyAgICBKdW1wIGJyYW5jaDY0KFJlbGF0aW9uYWxDb25kaXRpb24gY29u
ZCwgUmVnaXN0ZXJJRCBsZWZ0LCBUcnVzdGVkSW1tNjQgcmlnaHQpCiAgICAgewogICAgICAgICBp
ZiAoKChjb25kID09IEVxdWFsKSB8fCAoY29uZCA9PSBOb3RFcXVhbCkpICYmICFyaWdodC5tX3Zh
bHVlKSB7CiAgICAgICAgICAgICBtX2Fzc2VtYmxlci50ZXN0cV9ycihsZWZ0LCBsZWZ0KTsKICAg
ICAgICAgICAgIHJldHVybiBKdW1wKG1fYXNzZW1ibGVyLmpDQyh4ODZDb25kaXRpb24oY29uZCkp
KTsKICAgICAgICAgfQogICAgICAgICBtb3ZlKHJpZ2h0LCBzY3JhdGNoUmVnaXN0ZXIpOwotICAg
ICAgICByZXR1cm4gYnJhbmNoUHRyKGNvbmQsIGxlZnQsIHNjcmF0Y2hSZWdpc3Rlcik7CisgICAg
ICAgIHJldHVybiBicmFuY2g2NChjb25kLCBsZWZ0LCBzY3JhdGNoUmVnaXN0ZXIpOwogICAgIH0K
IAotICAgIEp1bXAgYnJhbmNoUHRyKFJlbGF0aW9uYWxDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJ
RCBsZWZ0LCBBZGRyZXNzIHJpZ2h0KQorICAgIEp1bXAgYnJhbmNoNjQoUmVsYXRpb25hbENvbmRp
dGlvbiBjb25kLCBSZWdpc3RlcklEIGxlZnQsIEFkZHJlc3MgcmlnaHQpCiAgICAgewogICAgICAg
ICBtX2Fzc2VtYmxlci5jbXBxX21yKHJpZ2h0Lm9mZnNldCwgcmlnaHQuYmFzZSwgbGVmdCk7CiAg
ICAgICAgIHJldHVybiBKdW1wKG1fYXNzZW1ibGVyLmpDQyh4ODZDb25kaXRpb24oY29uZCkpKTsK
ICAgICB9CiAKLSAgICBKdW1wIGJyYW5jaFB0cihSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIEFi
c29sdXRlQWRkcmVzcyBsZWZ0LCBSZWdpc3RlcklEIHJpZ2h0KQorICAgIEp1bXAgYnJhbmNoNjQo
UmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBBYnNvbHV0ZUFkZHJlc3MgbGVmdCwgUmVnaXN0ZXJJ
RCByaWdodCkKICAgICB7CiAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihsZWZ0Lm1fcHRyKSwg
c2NyYXRjaFJlZ2lzdGVyKTsKLSAgICAgICAgcmV0dXJuIGJyYW5jaFB0cihjb25kLCBBZGRyZXNz
KHNjcmF0Y2hSZWdpc3RlciksIHJpZ2h0KTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaDY0KGNvbmQs
IEFkZHJlc3Moc2NyYXRjaFJlZ2lzdGVyKSwgcmlnaHQpOwogICAgIH0KIAotICAgIEp1bXAgYnJh
bmNoUHRyKFJlbGF0aW9uYWxDb25kaXRpb24gY29uZCwgQWRkcmVzcyBsZWZ0LCBSZWdpc3RlcklE
IHJpZ2h0KQorICAgIEp1bXAgYnJhbmNoNjQoUmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBBZGRy
ZXNzIGxlZnQsIFJlZ2lzdGVySUQgcmlnaHQpCiAgICAgewogICAgICAgICBtX2Fzc2VtYmxlci5j
bXBxX3JtKHJpZ2h0LCBsZWZ0Lm9mZnNldCwgbGVmdC5iYXNlKTsKICAgICAgICAgcmV0dXJuIEp1
bXAobV9hc3NlbWJsZXIuakNDKHg4NkNvbmRpdGlvbihjb25kKSkpOwogICAgIH0KIAotICAgIEp1
bXAgYnJhbmNoUHRyKFJlbGF0aW9uYWxDb25kaXRpb24gY29uZCwgQWRkcmVzcyBsZWZ0LCBUcnVz
dGVkSW1tUHRyIHJpZ2h0KQorICAgIEp1bXAgYnJhbmNoNjQoUmVsYXRpb25hbENvbmRpdGlvbiBj
b25kLCBBZGRyZXNzIGxlZnQsIFRydXN0ZWRJbW02NCByaWdodCkKICAgICB7CiAgICAgICAgIG1v
dmUocmlnaHQsIHNjcmF0Y2hSZWdpc3Rlcik7Ci0gICAgICAgIHJldHVybiBicmFuY2hQdHIoY29u
ZCwgbGVmdCwgc2NyYXRjaFJlZ2lzdGVyKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaDY0KGNvbmQs
IGxlZnQsIHNjcmF0Y2hSZWdpc3Rlcik7CiAgICAgfQogCi0gICAgSnVtcCBicmFuY2hUZXN0UHRy
KFJlc3VsdENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIHJlZywgUmVnaXN0ZXJJRCBtYXNrKQor
ICAgIEp1bXAgYnJhbmNoVGVzdDY0KFJlc3VsdENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIHJl
ZywgUmVnaXN0ZXJJRCBtYXNrKQogICAgIHsKICAgICAgICAgbV9hc3NlbWJsZXIudGVzdHFfcnIo
cmVnLCBtYXNrKTsKICAgICAgICAgcmV0dXJuIEp1bXAobV9hc3NlbWJsZXIuakNDKHg4NkNvbmRp
dGlvbihjb25kKSkpOwogICAgIH0KICAgICAKLSAgICBKdW1wIGJyYW5jaFRlc3RQdHIoUmVzdWx0
Q29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgcmVnLCBUcnVzdGVkSW1tMzIgbWFzayA9IFRydXN0
ZWRJbW0zMigtMSkpCisgICAgSnVtcCBicmFuY2hUZXN0NjQoUmVzdWx0Q29uZGl0aW9uIGNvbmQs
IFJlZ2lzdGVySUQgcmVnLCBUcnVzdGVkSW1tMzIgbWFzayA9IFRydXN0ZWRJbW0zMigtMSkpCiAg
ICAgewogICAgICAgICAvLyBpZiB3ZSBhcmUgb25seSBpbnRlcmVzdGVkIGluIHRoZSBsb3cgc2V2
ZW4gYml0cywgdGhpcyBjYW4gYmUgdGVzdGVkIHdpdGggYSB0ZXN0YgogICAgICAgICBpZiAobWFz
ay5tX3ZhbHVlID09IC0xKQpAQCAtNDYwLDcgKzc5NCw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0
dXJuIEp1bXAobV9hc3NlbWJsZXIuakNDKHg4NkNvbmRpdGlvbihjb25kKSkpOwogICAgIH0KIAot
ICAgIHZvaWQgdGVzdFB0cihSZXN1bHRDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCByZWcsIFRy
dXN0ZWRJbW0zMiBtYXNrLCBSZWdpc3RlcklEIGRlc3QpCisgICAgdm9pZCB0ZXN0NjQoUmVzdWx0
Q29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgcmVnLCBUcnVzdGVkSW1tMzIgbWFzaywgUmVnaXN0
ZXJJRCBkZXN0KQogICAgIHsKICAgICAgICAgaWYgKG1hc2subV92YWx1ZSA9PSAtMSkKICAgICAg
ICAgICAgIG1fYXNzZW1ibGVyLnRlc3RxX3JyKHJlZywgcmVnKTsKQEAgLTQ3MSwxOSArODA1LDE5
IEBAIHB1YmxpYzoKICAgICAgICAgc2V0MzIoeDg2Q29uZGl0aW9uKGNvbmQpLCBkZXN0KTsKICAg
ICB9CiAKLSAgICB2b2lkIHRlc3RQdHIoUmVzdWx0Q29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQg
cmVnLCBSZWdpc3RlcklEIG1hc2ssIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB2b2lkIHRlc3Q2NChS
ZXN1bHRDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCByZWcsIFJlZ2lzdGVySUQgbWFzaywgUmVn
aXN0ZXJJRCBkZXN0KQogICAgIHsKICAgICAgICAgbV9hc3NlbWJsZXIudGVzdHFfcnIocmVnLCBt
YXNrKTsKICAgICAgICAgc2V0MzIoeDg2Q29uZGl0aW9uKGNvbmQpLCBkZXN0KTsKICAgICB9CiAK
LSAgICBKdW1wIGJyYW5jaFRlc3RQdHIoUmVzdWx0Q29uZGl0aW9uIGNvbmQsIEFic29sdXRlQWRk
cmVzcyBhZGRyZXNzLCBUcnVzdGVkSW1tMzIgbWFzayA9IFRydXN0ZWRJbW0zMigtMSkpCisgICAg
SnVtcCBicmFuY2hUZXN0NjQoUmVzdWx0Q29uZGl0aW9uIGNvbmQsIEFic29sdXRlQWRkcmVzcyBh
ZGRyZXNzLCBUcnVzdGVkSW1tMzIgbWFzayA9IFRydXN0ZWRJbW0zMigtMSkpCiAgICAgewotICAg
ICAgICBsb2FkUHRyKGFkZHJlc3MubV9wdHIsIHNjcmF0Y2hSZWdpc3Rlcik7Ci0gICAgICAgIHJl
dHVybiBicmFuY2hUZXN0UHRyKGNvbmQsIHNjcmF0Y2hSZWdpc3RlciwgbWFzayk7CisgICAgICAg
IGxvYWQ2NChhZGRyZXNzLm1fcHRyLCBzY3JhdGNoUmVnaXN0ZXIpOworICAgICAgICByZXR1cm4g
YnJhbmNoVGVzdDY0KGNvbmQsIHNjcmF0Y2hSZWdpc3RlciwgbWFzayk7CiAgICAgfQogCi0gICAg
SnVtcCBicmFuY2hUZXN0UHRyKFJlc3VsdENvbmRpdGlvbiBjb25kLCBBZGRyZXNzIGFkZHJlc3Ms
IFRydXN0ZWRJbW0zMiBtYXNrID0gVHJ1c3RlZEltbTMyKC0xKSkKKyAgICBKdW1wIGJyYW5jaFRl
c3Q2NChSZXN1bHRDb25kaXRpb24gY29uZCwgQWRkcmVzcyBhZGRyZXNzLCBUcnVzdGVkSW1tMzIg
bWFzayA9IFRydXN0ZWRJbW0zMigtMSkpCiAgICAgewogICAgICAgICBpZiAobWFzay5tX3ZhbHVl
ID09IC0xKQogICAgICAgICAgICAgbV9hc3NlbWJsZXIuY21wcV9pbSgwLCBhZGRyZXNzLm9mZnNl
dCwgYWRkcmVzcy5iYXNlKTsKQEAgLTQ5MiwxMyArODI2LDEzIEBAIHB1YmxpYzoKICAgICAgICAg
cmV0dXJuIEp1bXAobV9hc3NlbWJsZXIuakNDKHg4NkNvbmRpdGlvbihjb25kKSkpOwogICAgIH0K
IAotICAgIEp1bXAgYnJhbmNoVGVzdFB0cihSZXN1bHRDb25kaXRpb24gY29uZCwgQWRkcmVzcyBh
ZGRyZXNzLCBSZWdpc3RlcklEIHJlZykKKyAgICBKdW1wIGJyYW5jaFRlc3Q2NChSZXN1bHRDb25k
aXRpb24gY29uZCwgQWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklEIHJlZykKICAgICB7CiAgICAg
ICAgIG1fYXNzZW1ibGVyLnRlc3RxX3JtKHJlZywgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFz
ZSk7CiAgICAgICAgIHJldHVybiBKdW1wKG1fYXNzZW1ibGVyLmpDQyh4ODZDb25kaXRpb24oY29u
ZCkpKTsKICAgICB9CiAKLSAgICBKdW1wIGJyYW5jaFRlc3RQdHIoUmVzdWx0Q29uZGl0aW9uIGNv
bmQsIEJhc2VJbmRleCBhZGRyZXNzLCBUcnVzdGVkSW1tMzIgbWFzayA9IFRydXN0ZWRJbW0zMigt
MSkpCisgICAgSnVtcCBicmFuY2hUZXN0NjQoUmVzdWx0Q29uZGl0aW9uIGNvbmQsIEJhc2VJbmRl
eCBhZGRyZXNzLCBUcnVzdGVkSW1tMzIgbWFzayA9IFRydXN0ZWRJbW0zMigtMSkpCiAgICAgewog
ICAgICAgICBpZiAobWFzay5tX3ZhbHVlID09IC0xKQogICAgICAgICAgICAgbV9hc3NlbWJsZXIu
Y21wcV9pbSgwLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLmluZGV4LCBh
ZGRyZXNzLnNjYWxlKTsKQEAgLTUwOCw1MyArODQyLDUzIEBAIHB1YmxpYzoKICAgICB9CiAKIAot
ICAgIEp1bXAgYnJhbmNoQWRkUHRyKFJlc3VsdENvbmRpdGlvbiBjb25kLCBUcnVzdGVkSW1tMzIg
aW1tLCBSZWdpc3RlcklEIGRlc3QpCisgICAgSnVtcCBicmFuY2hBZGQ2NChSZXN1bHRDb25kaXRp
b24gY29uZCwgVHJ1c3RlZEltbTMyIGltbSwgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKLSAgICAg
ICAgYWRkUHRyKGltbSwgZGVzdCk7CisgICAgICAgIGFkZDY0KGltbSwgZGVzdCk7CiAgICAgICAg
IHJldHVybiBKdW1wKG1fYXNzZW1ibGVyLmpDQyh4ODZDb25kaXRpb24oY29uZCkpKTsKICAgICB9
CiAKLSAgICBKdW1wIGJyYW5jaEFkZFB0cihSZXN1bHRDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJ
RCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICBKdW1wIGJyYW5jaEFkZDY0KFJlc3VsdENvbmRp
dGlvbiBjb25kLCBSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKLSAgICAg
ICAgYWRkUHRyKHNyYywgZGVzdCk7CisgICAgICAgIGFkZDY0KHNyYywgZGVzdCk7CiAgICAgICAg
IHJldHVybiBKdW1wKG1fYXNzZW1ibGVyLmpDQyh4ODZDb25kaXRpb24oY29uZCkpKTsKICAgICB9
CiAKLSAgICBKdW1wIGJyYW5jaFN1YlB0cihSZXN1bHRDb25kaXRpb24gY29uZCwgVHJ1c3RlZElt
bTMyIGltbSwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIEp1bXAgYnJhbmNoU3ViNjQoUmVzdWx0Q29u
ZGl0aW9uIGNvbmQsIFRydXN0ZWRJbW0zMiBpbW0sIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7Ci0g
ICAgICAgIHN1YlB0cihpbW0sIGRlc3QpOworICAgICAgICBzdWI2NChpbW0sIGRlc3QpOwogICAg
ICAgICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5qQ0MoeDg2Q29uZGl0aW9uKGNvbmQpKSk7CiAg
ICAgfQogCi0gICAgSnVtcCBicmFuY2hTdWJQdHIoUmVzdWx0Q29uZGl0aW9uIGNvbmQsIFJlZ2lz
dGVySUQgc3JjMSwgVHJ1c3RlZEltbTMyIHNyYzIsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICBKdW1w
IGJyYW5jaFN1YjY0KFJlc3VsdENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIHNyYzEsIFRydXN0
ZWRJbW0zMiBzcmMyLCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewogICAgICAgICBtb3ZlKHNyYzEs
IGRlc3QpOwotICAgICAgICByZXR1cm4gYnJhbmNoU3ViUHRyKGNvbmQsIHNyYzIsIGRlc3QpOwor
ICAgICAgICByZXR1cm4gYnJhbmNoU3ViNjQoY29uZCwgc3JjMiwgZGVzdCk7CiAgICAgfQogCi0g
ICAgRGF0YUxhYmVsUHRyIG1vdmVXaXRoUGF0Y2goVHJ1c3RlZEltbVB0ciBpbml0aWFsVmFsdWUs
IFJlZ2lzdGVySUQgZGVzdCkKKyAgICBEYXRhTGFiZWxQdHIgbW92ZVdpdGhQYXRjaChUcnVzdGVk
SW1tNjQgaW5pdGlhbFZhbHVlLCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewogICAgICAgICBwYWRC
ZWZvcmVQYXRjaCgpOwotICAgICAgICBtX2Fzc2VtYmxlci5tb3ZxX2k2NHIoaW5pdGlhbFZhbHVl
LmFzSW50cHRyKCksIGRlc3QpOworICAgICAgICBtX2Fzc2VtYmxlci5tb3ZxX2k2NHIoaW5pdGlh
bFZhbHVlLm1fdmFsdWUsIGRlc3QpOwogICAgICAgICByZXR1cm4gRGF0YUxhYmVsUHRyKHRoaXMp
OwogICAgIH0KIAotICAgIEp1bXAgYnJhbmNoUHRyV2l0aFBhdGNoKFJlbGF0aW9uYWxDb25kaXRp
b24gY29uZCwgUmVnaXN0ZXJJRCBsZWZ0LCBEYXRhTGFiZWxQdHImIGRhdGFMYWJlbCwgVHJ1c3Rl
ZEltbVB0ciBpbml0aWFsUmlnaHRWYWx1ZSA9IFRydXN0ZWRJbW1QdHIoMCkpCisgICAgSnVtcCBi
cmFuY2g2NFdpdGhQYXRjaChSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgbGVm
dCwgRGF0YUxhYmVsUHRyJiBkYXRhTGFiZWwsIFRydXN0ZWRJbW02NCBpbml0aWFsUmlnaHRWYWx1
ZSA9IFRydXN0ZWRJbW02NCgoaW50NjRfdCkwKSkKICAgICB7CiAgICAgICAgIGRhdGFMYWJlbCA9
IG1vdmVXaXRoUGF0Y2goaW5pdGlhbFJpZ2h0VmFsdWUsIHNjcmF0Y2hSZWdpc3Rlcik7Ci0gICAg
ICAgIHJldHVybiBicmFuY2hQdHIoY29uZCwgbGVmdCwgc2NyYXRjaFJlZ2lzdGVyKTsKKyAgICAg
ICAgcmV0dXJuIGJyYW5jaDY0KGNvbmQsIGxlZnQsIHNjcmF0Y2hSZWdpc3Rlcik7CiAgICAgfQog
Ci0gICAgSnVtcCBicmFuY2hQdHJXaXRoUGF0Y2goUmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBB
ZGRyZXNzIGxlZnQsIERhdGFMYWJlbFB0ciYgZGF0YUxhYmVsLCBUcnVzdGVkSW1tUHRyIGluaXRp
YWxSaWdodFZhbHVlID0gVHJ1c3RlZEltbVB0cigwKSkKKyAgICBKdW1wIGJyYW5jaDY0V2l0aFBh
dGNoKFJlbGF0aW9uYWxDb25kaXRpb24gY29uZCwgQWRkcmVzcyBsZWZ0LCBEYXRhTGFiZWxQdHIm
IGRhdGFMYWJlbCwgVHJ1c3RlZEltbTY0IGluaXRpYWxSaWdodFZhbHVlID0gVHJ1c3RlZEltbTY0
KChpbnQ2NF90KTApKQogICAgIHsKICAgICAgICAgZGF0YUxhYmVsID0gbW92ZVdpdGhQYXRjaChp
bml0aWFsUmlnaHRWYWx1ZSwgc2NyYXRjaFJlZ2lzdGVyKTsKLSAgICAgICAgcmV0dXJuIGJyYW5j
aFB0cihjb25kLCBsZWZ0LCBzY3JhdGNoUmVnaXN0ZXIpOworICAgICAgICByZXR1cm4gYnJhbmNo
NjQoY29uZCwgbGVmdCwgc2NyYXRjaFJlZ2lzdGVyKTsKICAgICB9CiAKLSAgICBEYXRhTGFiZWxQ
dHIgc3RvcmVQdHJXaXRoUGF0Y2goVHJ1c3RlZEltbVB0ciBpbml0aWFsVmFsdWUsIEltcGxpY2l0
QWRkcmVzcyBhZGRyZXNzKQorICAgIERhdGFMYWJlbFB0ciBzdG9yZTY0V2l0aFBhdGNoKFRydXN0
ZWRJbW02NCBpbml0aWFsVmFsdWUsIEltcGxpY2l0QWRkcmVzcyBhZGRyZXNzKQogICAgIHsKICAg
ICAgICAgRGF0YUxhYmVsUHRyIGxhYmVsID0gbW92ZVdpdGhQYXRjaChpbml0aWFsVmFsdWUsIHNj
cmF0Y2hSZWdpc3Rlcik7Ci0gICAgICAgIHN0b3JlUHRyKHNjcmF0Y2hSZWdpc3RlciwgYWRkcmVz
cyk7CisgICAgICAgIHN0b3JlNjQoc2NyYXRjaFJlZ2lzdGVyLCBhZGRyZXNzKTsKICAgICAgICAg
cmV0dXJuIGxhYmVsOwogICAgIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>168570</attachid>
            <date>2012-10-13 18:24:29 -0700</date>
            <delta_ts>2012-10-15 19:20:47 -0700</delta_ts>
            <desc>Rebased: Split patch - part 1: only add the *64 interfaces to MacroAssembler</desc>
            <filename>99154.2.patch</filename>
            <type>text/plain</type>
            <size>40794</size>
            <attacher name="Yuqiang Xian">yuqiang.xian</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTMxMjYyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwOCBA
QAorMjAxMi0xMC0xMiAgWXVxaWFuZyBYaWFuICA8eXVxaWFuZy54aWFuQGludGVsLmNvbT4KKwor
ICAgICAgICBSZWZhY3RvciBNYWNyb0Fzc2VtYmxlciBpbnRlcmZhY2VzIHRvIGRpZmZlcmVudGlh
dGUgdGhlIHBvaW50ZXIgb3BlcmFuZHMgZnJvbSB0aGUgNjQtYml0IGludGVnZXIgb3BlcmFuZHMK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk5MTU0CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW4gY3VycmVu
dCBKYXZhU2NyaXB0Q29yZSBpbXBsZW1lbnRhdGlvbiBmb3IgSlNWQUxVRTY0IHBsYXRmb3JtIChp
LmUuLAorICAgICAgICB0aGUgWDY0IHBsYXRmb3JtKSwgd2UgYXNzdW1lIHRoYXQgdGhlIEpTVmFs
dWUgc2l6ZSBpcyBzYW1lIHRvIHRoZQorICAgICAgICBwb2ludGVyIHNpemUsIGFuZCB0aHVzIEVu
Y29kZWRKU1ZhbHVlIGlzIHNpbXBseSB0eXBlIGRlZmluZWQgYXMgYQorICAgICAgICAidm9pZCoi
LiBJbiB0aGUgSklUIGNvbXBpbGVyLCB3ZSBhbHNvIHRha2UgdGhpcyBhc3N1bXB0aW9uIGFuZCBp
bnZva2UKKyAgICAgICAgdGhlIHNhbWUgbWFjcm8gYXNzZW1ibGVyIGludGVyZmFjZXMgZm9yIGJv
dGggSlNWYWx1ZSBhbmQgcG9pbnRlcgorICAgICAgICBvcGVyYW5kcy4gV2UgbmVlZCB0byBkaWZm
ZXJlbnRpYXRlIHRoZSBvcGVyYXRpb25zIG9uIHBvaW50ZXJzIGZyb20gdGhlCisgICAgICAgIG9w
ZXJhdGlvbnMgb24gSlNWYWx1ZXMsIGFuZCBsZXQgdGhlbSBpbnZva2luZyBkaWZmZXJlbnQgbWFj
cm8KKyAgICAgICAgYXNzZW1ibGVyIGludGVyZmFjZXMuIEZvciBleGFtcGxlLCB3ZSBub3cgdXNl
IHRoZSBpbnRlcmZhY2Ugb2YKKyAgICAgICAgImxvYWRQdHIiIHRvIGxvYWQgZWl0aGVyIGEgcG9p
bnRlciBvciBhIEpTVmFsdWUsIGFuZCB3ZSBuZWVkIHRvIHN3aXRjaAorICAgICAgICB0byB1c2lu
ZyAibG9hZFB0ciIgdG8gbG9hZCBhIHBvaW50ZXIgYW5kIHNvbWUgbmV3ICJsb2FkNjQiIGludGVy
ZmFjZQorICAgICAgICB0byBsb2FkIGEgSlNWYWx1ZS4gVGhpcyB3b3VsZCBoZWxwIHVzIHN1cHBv
cnRpbmcgb3RoZXIgSlNWQUxVRTY0CisgICAgICAgIHBsYXRmb3JtcyB3aGVyZSBwb2ludGVyIHNp
emUgaXMgbm90IG5lY2Vzc2FyaWx5IDY0LWJpdHMsIGZvciBleGFtcGxlCisgICAgICAgIHgzMiAo
YnVnICM5OTE1MykuCisKKyAgICAgICAgVGhlIG1ham9yIG1vZGlmaWNhdGlvbiBJIG1hZGUgaXMg
dG8gaW50cm9kdWNlIHRoZSAiKjY0IiBpbnRlcmZhY2VzIGluCisgICAgICAgIHRoZSBNYWNyb0Fz
c2VtYmxlciBmb3IgdGhvc2Ugb3BlcmF0aW9ucyBvbiBKU1ZhbHVlcywga2VlcCB0aGUgIipQdHIi
CisgICAgICAgIGludGVyZmFjZXMgZm9yIHRob3NlIG9wZXJhdGlvbnMgb24gcmVhbCBwb2ludGVy
cywgYW5kIGdvIHRocm91Z2ggYWxsCisgICAgICAgIHRoZSBKSVQgY29tcGlsZXIgY29kZSB0byBj
b3JyZWN0IHRoZSB1c2FnZS4KKworICAgICAgICBUaGlzIGlzIHRoZSBmaXJzdCBwYXJ0IG9mIHRo
ZSB3b3JrLCBpLmUsIHRvIGFkZCB0aGUgKjY0IGludGVyZmFjZXMgdG8KKyAgICAgICAgdGhlIE1h
Y3JvQXNzZW1ibGVyLgorCisgICAgICAgICogYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJs
ZXIuaDogQWRkIHRoZSBJbW02NCBpbnRlcmZhY2VzLgorICAgICAgICAoQWJzdHJhY3RNYWNyb0Fz
c2VtYmxlcik6CisgICAgICAgIChKU0M6OkFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW02NDo6VHJ1c3RlZEltbTY0KToKKyAgICAgICAgKFRydXN0ZWRJbW02NCk6CisgICAgICAgIChK
U0M6OkFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6OkltbTY0OjpJbW02NCk6CisgICAgICAgIChJbW02
NCk6CisgICAgICAgIChKU0M6OkFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6OkltbTY0Ojphc1RydXN0
ZWRJbW02NCk6CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmg6IEFkZCB0aGUg
KjY0IGludGVyZmFjZXMgdG8gdGhlIE1hY3JvQXNzZW1ibGVyLgorICAgICAgICAoTWFjcm9Bc3Nl
bWJsZXIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlcjo6cGVlazY0KToKKyAgICAgICAg
KEpTQzo6TWFjcm9Bc3NlbWJsZXI6OnBva2UpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxl
cjo6cG9rZTY0KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXI6OnNob3VsZEJsaW5kRG91
YmxlKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXI6OnNob3VsZEJsaW5kKToKKyAgICAg
ICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXI6OlJvdGF0ZWRJbW02NDo6Um90YXRlZEltbTY0KToKKyAg
ICAgICAgKFJvdGF0ZWRJbW02NCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyOjpyb3Rh
dGlvbkJsaW5kQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlcjo6bG9hZFJv
dGF0aW9uQmxpbmRlZENvbnN0YW50KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXI6Om1v
dmUpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlcjo6YW5kNjQpOgorICAgICAgICAoSlND
OjpNYWNyb0Fzc2VtYmxlcjo6c3RvcmU2NCk6CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNz
ZW1ibGVyWDg2Q29tbW9uLmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2Q29tbW9u
OjpzaG91bGRCbGluZEZvclNwZWNpZmljQXJjaCk6CisgICAgICAgIChNYWNyb0Fzc2VtYmxlclg4
NkNvbW1vbik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uOjptb3ZlKToK
KyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaDoKKyAgICAgICAgKE1h
Y3JvQXNzZW1ibGVyWDg2XzY0KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJYODZfNjQ6
OmFkZFB0cik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0OjphbmRQdHIpOgor
ICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4Nl82NDo6bmVnUHRyKToKKyAgICAgICAgKEpT
Qzo6TWFjcm9Bc3NlbWJsZXJYODZfNjQ6Om9yUHRyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3Nl
bWJsZXJYODZfNjQ6OnJvdGF0ZVJpZ2h0UHRyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJs
ZXJYODZfNjQ6OnN1YlB0cik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0Ojp4
b3JQdHIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4Nl82NDo6bG9hZFB0cik6Cisg
ICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0Ojpsb2FkUHRyV2l0aEFkZHJlc3NPZmZz
ZXRQYXRjaCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0Ojpsb2FkUHRyV2l0
aENvbXBhY3RBZGRyZXNzT2Zmc2V0UGF0Y2gpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxl
clg4Nl82NDo6c3RvcmVQdHIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4Nl82NDo6
c3RvcmVQdHJXaXRoQWRkcmVzc09mZnNldFBhdGNoKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3Nl
bWJsZXJYODZfNjQ6Om1vdmVQdHJUb0RvdWJsZSk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1i
bGVyWDg2XzY0Ojptb3ZlRG91YmxlVG9QdHIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxl
clg4Nl82NDo6Y29tcGFyZVB0cik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0
OjpicmFuY2hQdHIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4Nl82NDo6YnJhbmNo
VGVzdFB0cik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0Ojp0ZXN0UHRyKToK
KyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJYODZfNjQ6Om1vdmVXaXRoUGF0Y2gpOgorICAg
ICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4Nl82NDo6Y29udmVydGlibGVMb2FkUHRyKToKKyAg
ICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJYODZfNjQ6OmJyYW5jaEFkZDMyKToKKyAgICAgICAg
KEpTQzo6TWFjcm9Bc3NlbWJsZXJYODZfNjQ6OmJyYW5jaEFkZFB0cik6CisgICAgICAgIChKU0M6
Ok1hY3JvQXNzZW1ibGVyWDg2XzY0OjpicmFuY2hTdWJQdHIpOgorICAgICAgICAoSlNDOjpNYWNy
b0Fzc2VtYmxlclg4Nl82NDo6YnJhbmNoUHRyV2l0aFBhdGNoKToKKyAgICAgICAgKEpTQzo6TWFj
cm9Bc3NlbWJsZXJYODZfNjQ6OnN0b3JlUHRyV2l0aFBhdGNoKToKKyAgICAgICAgKEpTQzo6TWFj
cm9Bc3NlbWJsZXJYODZfNjQ6OmFkZDY0KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJY
ODZfNjQ6OmFuZDY0KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJYODZfNjQ6Om5lZzY0
KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJYODZfNjQ6Om9yNjQpOgorICAgICAgICAo
SlNDOjpNYWNyb0Fzc2VtYmxlclg4Nl82NDo6cm90YXRlUmlnaHQ2NCk6CisgICAgICAgIChKU0M6
Ok1hY3JvQXNzZW1ibGVyWDg2XzY0OjpzdWI2NCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1i
bGVyWDg2XzY0Ojp4b3I2NCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0Ojps
b2FkNjQpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4Nl82NDo6Y29udmVydGlibGVM
b2FkNjQpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4Nl82NDo6bG9hZDY0V2l0aEFk
ZHJlc3NPZmZzZXRQYXRjaCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0Ojps
b2FkNjRXaXRoQ29tcGFjdEFkZHJlc3NPZmZzZXRQYXRjaCk6CisgICAgICAgIChKU0M6Ok1hY3Jv
QXNzZW1ibGVyWDg2XzY0OjpzdG9yZTY0KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJY
ODZfNjQ6OnN0b3JlNjRXaXRoQWRkcmVzc09mZnNldFBhdGNoKToKKyAgICAgICAgKEpTQzo6TWFj
cm9Bc3NlbWJsZXJYODZfNjQ6Om1vdmU2NFRvRG91YmxlKToKKyAgICAgICAgKEpTQzo6TWFjcm9B
c3NlbWJsZXJYODZfNjQ6Om1vdmVEb3VibGVUbzY0KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3Nl
bWJsZXJYODZfNjQ6OmNvbXBhcmU2NCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2
XzY0OjpicmFuY2g2NCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0OjpicmFu
Y2hUZXN0NjQpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4Nl82NDo6dGVzdDY0KToK
KyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJYODZfNjQ6OmJyYW5jaEFkZDY0KToKKyAgICAg
ICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJYODZfNjQ6OmJyYW5jaFN1YjY0KToKKyAgICAgICAgKEpT
Qzo6TWFjcm9Bc3NlbWJsZXJYODZfNjQ6OmJyYW5jaDY0V2l0aFBhdGNoKToKKyAgICAgICAgKEpT
Qzo6TWFjcm9Bc3NlbWJsZXJYODZfNjQ6OnN0b3JlNjRXaXRoUGF0Y2gpOgorCiAyMDEyLTEwLTEy
ICBLYW5naWwgSGFuICA8a2FuZ2lsLmhhbkBzYW1zdW5nLmNvbT4KIAogICAgICAgICBGaXggYnVp
bGQgZXJyb3Igb24gREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxl
ci5oCShyZXZpc2lvbiAxMzEyNjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjYxLDYgKzI2MSwz
OCBAQCBwdWJsaWM6CiAKICAgICB9OwogICAgIAorICAgIC8vIFRydXN0ZWRJbW02NDoKKyAgICAv
LworICAgIC8vIEEgNjRiaXQgaW1tZWRpYXRlIG9wZXJhbmQgdG8gYW4gaW5zdHJ1Y3Rpb24gLSB0
aGlzIGlzIHdyYXBwZWQgaW4gYQorICAgIC8vIGNsYXNzIHJlcXVpcmluZyBleHBsaWNpdCBjb25z
dHJ1Y3Rpb24gaW4gb3JkZXIgdG8gcHJldmVudCBSZWdpc3RlcklEcworICAgIC8vICh3aGljaCBh
cmUgaW1wbGVtZW50ZWQgYXMgYW4gZW51bSkgZnJvbSBhY2NpZGVudGFsbHkgYmVpbmcgcGFzc2Vk
IGFzCisgICAgLy8gaW1tZWRpYXRlIHZhbHVlcy4KKyAgICBzdHJ1Y3QgVHJ1c3RlZEltbTY0IHsK
KyAgICAgICAgVHJ1c3RlZEltbTY0KCkgeyB9CisgICAgICAgIAorICAgICAgICBleHBsaWNpdCBU
cnVzdGVkSW1tNjQoaW50NjRfdCB2YWx1ZSkKKyAgICAgICAgICAgIDogbV92YWx1ZSh2YWx1ZSkK
KyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgaW50NjRfdCBtX3ZhbHVlOworICAgIH07
CisKKyAgICBzdHJ1Y3QgSW1tNjQgOiAKKyNpZiBFTkFCTEUoSklUX0NPTlNUQU5UX0JMSU5ESU5H
KQorICAgICAgICBwcml2YXRlIFRydXN0ZWRJbW02NCAKKyNlbHNlCisgICAgICAgIHB1YmxpYyBU
cnVzdGVkSW1tNjQKKyNlbmRpZgorICAgIHsKKyAgICAgICAgZXhwbGljaXQgSW1tNjQoaW50NjRf
dCB2YWx1ZSkKKyAgICAgICAgICAgIDogVHJ1c3RlZEltbTY0KHZhbHVlKQorICAgICAgICB7Cisg
ICAgICAgIH0KKworICAgICAgICBjb25zdCBUcnVzdGVkSW1tNjQmIGFzVHJ1c3RlZEltbTY0KCkg
Y29uc3QgeyByZXR1cm4gKnRoaXM7IH0KKyAgICB9OworICAgIAogICAgIC8vIFNlY3Rpb24gMjog
TWFjcm9Bc3NlbWJsZXIgY29kZSBidWZmZXIgaGFuZGxlcwogICAgIC8vCiAgICAgLy8gVGhlIGZv
bGxvd2luZyB0eXBlcyBhcmUgdXNlZCB0byByZWZlcmVuY2UgaXRlbXMgaW4gdGhlIGNvZGUgYnVm
ZmVyCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fz
c2VtYmxlci5oCShyZXZpc2lvbiAxMzEyNjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL01hY3JvQXNzZW1ibGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTE4Nyw2ICsxODcsMjMg
QEAgcHVibGljOgogICAgICAgICBzdG9yZVB0cihpbW0sIGFkZHJlc3NGb3JQb2tlKGluZGV4KSk7
CiAgICAgfQogCisjaWYgQ1BVKFg4Nl82NCkKKyAgICB2b2lkIHBlZWs2NChSZWdpc3RlcklEIGRl
c3QsIGludCBpbmRleCA9IDApCisgICAgeworICAgICAgICBsb2FkNjQoQWRkcmVzcyhzdGFja1Bv
aW50ZXJSZWdpc3RlciwgKGluZGV4ICogc2l6ZW9mKHZvaWQqKSkpLCBkZXN0KTsKKyAgICB9CisK
KyAgICB2b2lkIHBva2UoVHJ1c3RlZEltbTY0IHZhbHVlLCBpbnQgaW5kZXggPSAwKQorICAgIHsK
KyAgICAgICAgc3RvcmU2NCh2YWx1ZSwgYWRkcmVzc0ZvclBva2UoaW5kZXgpKTsKKyAgICB9CisK
KyAgICB2b2lkIHBva2U2NChSZWdpc3RlcklEIHNyYywgaW50IGluZGV4ID0gMCkKKyAgICB7Cisg
ICAgICAgIHN0b3JlNjQoc3JjLCBhZGRyZXNzRm9yUG9rZShpbmRleCkpOworICAgIH0KKyNlbmRp
ZgorICAgIAogCiAgICAgLy8gQmFja3dhcmRzIGJhbmNoZXMsIHRoZXNlIGFyZSBjdXJyZW50bHkg
YWxsIGltcGxlbWVudGVkIHVzaW5nIGV4aXN0aW5nIGZvcndhcmRzIGJyYW5jaCBtZWNoYW5pc21z
LgogICAgIHZvaWQgYnJhbmNoUHRyKFJlbGF0aW9uYWxDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJ
RCBvcDEsIFRydXN0ZWRJbW1QdHIgaW1tLCBMYWJlbCB0YXJnZXQpCkBAIC01NDQsOSArNTYxLDEx
IEBAIHB1YmxpYzoKICNpZiBFTkFCTEUoSklUX0NPTlNUQU5UX0JMSU5ESU5HKQogICAgIHVzaW5n
IE1hY3JvQXNzZW1ibGVyQmFzZTo6YWRkUHRyOwogICAgIHVzaW5nIE1hY3JvQXNzZW1ibGVyQmFz
ZTo6YW5kUHRyOworICAgIHVzaW5nIE1hY3JvQXNzZW1ibGVyQmFzZTo6YW5kNjQ7CiAgICAgdXNp
bmcgTWFjcm9Bc3NlbWJsZXJCYXNlOjpicmFuY2hTdWJQdHI7CiAgICAgdXNpbmcgTWFjcm9Bc3Nl
bWJsZXJCYXNlOjpjb252ZXJ0SW50MzJUb0RvdWJsZTsKICAgICB1c2luZyBNYWNyb0Fzc2VtYmxl
ckJhc2U6OnN0b3JlUHRyOworICAgIHVzaW5nIE1hY3JvQXNzZW1ibGVyQmFzZTo6c3RvcmU2NDsK
ICAgICB1c2luZyBNYWNyb0Fzc2VtYmxlckJhc2U6OnN1YlB0cjsKICAgICB1c2luZyBNYWNyb0Fz
c2VtYmxlckJhc2U6OnhvclB0cjsKICAgICAKQEAgLTU1OCw3ICs1NzcsNyBAQCBwdWJsaWM6CiAK
ICAgICAgICAgLy8gVHJ5IHRvIGZvcmNlIG5vcm1hbGlzYXRpb24sIGFuZCBjaGVjayB0aGF0IHRo
ZXJlJ3Mgbm8gY2hhbmdlCiAgICAgICAgIC8vIGluIHRoZSBiaXQgcGF0dGVybgotICAgICAgICBp
ZiAoYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4odmFsdWUgKiAxLjApICE9IGJpdHdpc2VfY2FzdDx1
aW50cHRyX3Q+KHZhbHVlKSkKKyAgICAgICAgaWYgKGJpdHdpc2VfY2FzdDx1aW50NjRfdD4odmFs
dWUgKiAxLjApICE9IGJpdHdpc2VfY2FzdDx1aW50NjRfdD4odmFsdWUpKQogICAgICAgICAgICAg
cmV0dXJuIHRydWU7CiAKICAgICAgICAgdmFsdWUgPSBhYnModmFsdWUpOwpAQCAtNTk3LDcgKzYx
Niw2IEBAIHB1YmxpYzoKICAgICAgICAgZGVmYXVsdDogewogICAgICAgICAgICAgaWYgKHZhbHVl
IDw9IDB4ZmYpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotI2lmIENQVShYODZfNjQp
CiAgICAgICAgICAgICBKU1ZhbHVlIGpzVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUocmVpbnRlcnBy
ZXRfY2FzdDx2b2lkKj4odmFsdWUpKTsKICAgICAgICAgICAgIGlmIChqc1ZhbHVlLmlzSW50MzIo
KSkKICAgICAgICAgICAgICAgICByZXR1cm4gc2hvdWxkQmxpbmQoSW1tMzIoanNWYWx1ZS5hc0lu
dDMyKCkpKTsKQEAgLTYwNiw3ICs2MjQsNiBAQCBwdWJsaWM6CiAKICAgICAgICAgICAgIGlmICgh
c2hvdWxkQmxpbmREb3VibGUoYml0d2lzZV9jYXN0PGRvdWJsZT4odmFsdWUpKSkKICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0jZW5kaWYgCiAgICAgICAgIH0KICAgICAgICAgfQogICAg
ICAgICByZXR1cm4gc2hvdWxkQmxpbmRGb3JTcGVjaWZpY0FyY2godmFsdWUpOwpAQCAtNjM2LDYg
KzY1Myw1OSBAQCBwdWJsaWM6CiAgICAgICAgIHJvdGF0ZVJpZ2h0UHRyKGNvbnN0YW50LnJvdGF0
aW9uLCBkZXN0KTsKICAgICB9CiAKKyAgICBib29sIHNob3VsZEJsaW5kKEltbTY0IGltbSkKKyAg
ICB7IAorI2lmICFkZWZpbmVkKE5ERUJVRykKKyAgICAgICAgVU5VU0VEX1BBUkFNKGltbSk7Cisg
ICAgICAgIC8vIERlYnVnIGFsd2F5cyBibGluZCBhbGwgY29uc3RhbnRzLCBpZiBvbmx5IHNvIHdl
IGtub3cKKyAgICAgICAgLy8gaWYgd2UndmUgYnJva2VuIGJsaW5kaW5nIGR1cmluZyBwYXRjaCBk
ZXZlbG9wbWVudC4KKyAgICAgICAgcmV0dXJuIHRydWU7ICAgICAgICAKKyNlbmRpZgorCisgICAg
ICAgIC8vIEZpcnN0IG9mZiB3ZSdsbCBzcGVjaWFsIGNhc2UgY29tbW9uLCAic2FmZSIgdmFsdWVz
IHRvIGF2b2lkIGh1cnRpbmcKKyAgICAgICAgLy8gcGVyZm9ybWFuY2UgdG9vIG11Y2gKKyAgICAg
ICAgdWludDY0X3QgdmFsdWUgPSBpbW0uYXNUcnVzdGVkSW1tNjQoKS5tX3ZhbHVlOworICAgICAg
ICBzd2l0Y2ggKHZhbHVlKSB7CisgICAgICAgIGNhc2UgMHhmZmZmOgorICAgICAgICBjYXNlIDB4
ZmZmZmZmOgorICAgICAgICBjYXNlIDB4ZmZmZmZmZmZMOgorICAgICAgICBjYXNlIDB4ZmZmZmZm
ZmZmZkw6CisgICAgICAgIGNhc2UgMHhmZmZmZmZmZmZmZmZMOgorICAgICAgICBjYXNlIDB4ZmZm
ZmZmZmZmZmZmZmZMOgorICAgICAgICBjYXNlIDB4ZmZmZmZmZmZmZmZmZmZmZkw6CisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGRlZmF1bHQ6IHsKKyAgICAgICAgICAgIGlmICh2
YWx1ZSA8PSAweGZmKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQor
ICAgICAgICB9CisgICAgICAgIHJldHVybiBzaG91bGRCbGluZEZvclNwZWNpZmljQXJjaCh2YWx1
ZSk7CisgICAgfQorICAgIAorICAgIHN0cnVjdCBSb3RhdGVkSW1tNjQgeworICAgICAgICBSb3Rh
dGVkSW1tNjQodWludDY0X3QgdjEsIHVpbnQ4X3QgdjIpCisgICAgICAgICAgICA6IHZhbHVlKHYx
KQorICAgICAgICAgICAgLCByb3RhdGlvbih2MikKKyAgICAgICAgeworICAgICAgICB9CisgICAg
ICAgIFRydXN0ZWRJbW02NCB2YWx1ZTsKKyAgICAgICAgVHJ1c3RlZEltbTMyIHJvdGF0aW9uOwor
ICAgIH07CisgICAgCisgICAgUm90YXRlZEltbTY0IHJvdGF0aW9uQmxpbmRDb25zdGFudChJbW02
NCBpbW0pCisgICAgeworICAgICAgICB1aW50OF90IHJvdGF0aW9uID0gcmFuZG9tKCkgJSAoc2l6
ZW9mKGludDY0X3QpICogOCk7CisgICAgICAgIHVpbnQ2NF90IHZhbHVlID0gaW1tLmFzVHJ1c3Rl
ZEltbTY0KCkubV92YWx1ZTsKKyAgICAgICAgdmFsdWUgPSAodmFsdWUgPDwgcm90YXRpb24pIHwg
KHZhbHVlID4+IChzaXplb2YoaW50NjRfdCkgKiA4IC0gcm90YXRpb24pKTsKKyAgICAgICAgcmV0
dXJuIFJvdGF0ZWRJbW02NCh2YWx1ZSwgcm90YXRpb24pOworICAgIH0KKyAgICAKKyAgICB2b2lk
IGxvYWRSb3RhdGlvbkJsaW5kZWRDb25zdGFudChSb3RhdGVkSW1tNjQgY29uc3RhbnQsIFJlZ2lz
dGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1vdmUoY29uc3RhbnQudmFsdWUsIGRlc3QpOwor
ICAgICAgICByb3RhdGVSaWdodDY0KGNvbnN0YW50LnJvdGF0aW9uLCBkZXN0KTsKKyAgICB9CisK
ICAgICB2b2lkIGNvbnZlcnRJbnQzMlRvRG91YmxlKEltbTMyIGltbSwgRlBSZWdpc3RlcklEIGRl
c3QpCiAgICAgewogICAgICAgICBpZiAoc2hvdWxkQmxpbmQoaW1tKSkgewpAQCAtNjU0LDYgKzcy
NCwyNCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBtb3ZlKGltbS5hc1RydXN0ZWRJbW1QdHIoKSwg
ZGVzdCk7CiAgICAgfQogCisgICAgdm9pZCBtb3ZlKEltbTY0IGltbSwgUmVnaXN0ZXJJRCBkZXN0
KQorICAgIHsKKyAgICAgICAgaWYgKHNob3VsZEJsaW5kKGltbSkpCisgICAgICAgICAgICBsb2Fk
Um90YXRpb25CbGluZGVkQ29uc3RhbnQocm90YXRpb25CbGluZENvbnN0YW50KGltbSksIGRlc3Qp
OworICAgICAgICBlbHNlCisgICAgICAgICAgICBtb3ZlKGltbS5hc1RydXN0ZWRJbW02NCgpLCBk
ZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIGFuZDY0KEltbTMyIGltbSwgUmVnaXN0ZXJJRCBkZXN0
KQorICAgIHsKKyAgICAgICAgaWYgKHNob3VsZEJsaW5kKGltbSkpIHsKKyAgICAgICAgICAgIEJs
aW5kZWRJbW0zMiBrZXkgPSBhbmRCbGluZGVkQ29uc3RhbnQoaW1tKTsKKyAgICAgICAgICAgIGFu
ZDY0KGtleS52YWx1ZTEsIGRlc3QpOworICAgICAgICAgICAgYW5kNjQoa2V5LnZhbHVlMiwgZGVz
dCk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgYW5kNjQoaW1tLmFzVHJ1c3RlZEltbTMy
KCksIGRlc3QpOworICAgIH0KKwogICAgIEp1bXAgYnJhbmNoUHRyKFJlbGF0aW9uYWxDb25kaXRp
b24gY29uZCwgUmVnaXN0ZXJJRCBsZWZ0LCBJbW1QdHIgcmlnaHQpCiAgICAgewogICAgICAgICBp
ZiAoc2hvdWxkQmxpbmQocmlnaHQpKSB7CkBAIC02NzQsNiArNzYyLDE2IEBAIHB1YmxpYzoKICAg
ICAgICAgICAgIHN0b3JlUHRyKGltbS5hc1RydXN0ZWRJbW1QdHIoKSwgZGVzdCk7CiAgICAgfQog
CisgICAgdm9pZCBzdG9yZTY0KEltbTY0IGltbSwgQWRkcmVzcyBkZXN0KQorICAgIHsKKyAgICAg
ICAgaWYgKHNob3VsZEJsaW5kKGltbSkpIHsKKyAgICAgICAgICAgIFJlZ2lzdGVySUQgc2NyYXRj
aFJlZ2lzdGVyID0gc2NyYXRjaFJlZ2lzdGVyRm9yQmxpbmRpbmcoKTsKKyAgICAgICAgICAgIGxv
YWRSb3RhdGlvbkJsaW5kZWRDb25zdGFudChyb3RhdGlvbkJsaW5kQ29uc3RhbnQoaW1tKSwgc2Ny
YXRjaFJlZ2lzdGVyKTsKKyAgICAgICAgICAgIHN0b3JlNjQoc2NyYXRjaFJlZ2lzdGVyLCBkZXN0
KTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBzdG9yZTY0KGltbS5hc1RydXN0ZWRJbW02
NCgpLCBkZXN0KTsKKyAgICB9CisKICNlbmRpZgogCiAjZW5kaWYgLy8gIUNQVShYODZfNjQpCkBA
IC04NjcsNiArOTY1LDEzIEBAIHB1YmxpYzoKICAgICAgICAgc3RvcmVQdHIodmFsdWUsIGFkZHJl
c3NGb3JQb2tlKGluZGV4KSk7CiAgICAgfQogICAgIAorI2lmIENQVShYODZfNjQpCisgICAgdm9p
ZCBwb2tlKEltbTY0IHZhbHVlLCBpbnQgaW5kZXggPSAwKQorICAgIHsKKyAgICAgICAgc3RvcmU2
NCh2YWx1ZSwgYWRkcmVzc0ZvclBva2UoaW5kZXgpKTsKKyAgICB9CisjZW5kaWYKKyAgICAKICAg
ICB2b2lkIHN0b3JlMzIoSW1tMzIgaW1tLCBBZGRyZXNzIGRlc3QpCiAgICAgewogICAgICAgICBp
ZiAoc2hvdWxkQmxpbmQoaW1tKSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaAkocmV2aXNpb24g
MTMxMjYyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxl
clg4NkNvbW1vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC05Nyw5ICs5NywxMiBAQCBwdWJsaWM6CiAj
aWYgRU5BQkxFKEpJVF9DT05TVEFOVF9CTElORElORykKICAgICBzdGF0aWMgYm9vbCBzaG91bGRC
bGluZEZvclNwZWNpZmljQXJjaCh1aW50MzJfdCB2YWx1ZSkgeyByZXR1cm4gdmFsdWUgPj0gMHgw
MGZmZmZmZjsgfQogI2lmIENQVShYODZfNjQpCisgICAgc3RhdGljIGJvb2wgc2hvdWxkQmxpbmRG
b3JTcGVjaWZpY0FyY2godWludDY0X3QgdmFsdWUpIHsgcmV0dXJuIHZhbHVlID49IDB4MDBmZmZm
ZmY7IH0KKyNpZiBPUyhEQVJXSU4pIC8vIE9uIDY0LWJpdCBzeXN0ZW1zIG90aGVyIHRoYW4gREFS
V0lOIHVpbnQ2NF90IGFuZCB1aW50cHRyX3QgYXJlIHRoZSBzYW1lIHR5cGUgc28gb3ZlcmxvYWQg
aXMgcHJvaGliaXRlZC4KICAgICBzdGF0aWMgYm9vbCBzaG91bGRCbGluZEZvclNwZWNpZmljQXJj
aCh1aW50cHRyX3QgdmFsdWUpIHsgcmV0dXJuIHZhbHVlID49IDB4MDBmZmZmZmY7IH0KICNlbmRp
ZgogI2VuZGlmCisjZW5kaWYKIAogICAgIC8vIEludGVnZXIgYXJpdGhtZXRpYyBvcGVyYXRpb25z
OgogICAgIC8vCkBAIC05OTMsNiArOTk2LDExIEBAIHB1YmxpYzoKICAgICAgICAgbV9hc3NlbWJs
ZXIubW92cV9pNjRyKGltbS5hc0ludHB0cigpLCBkZXN0KTsKICAgICB9CiAKKyAgICB2b2lkIG1v
dmUoVHJ1c3RlZEltbTY0IGltbSwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9h
c3NlbWJsZXIubW92cV9pNjRyKGltbS5tX3ZhbHVlLCBkZXN0KTsKKyAgICB9CisKICAgICB2b2lk
IHN3YXAoUmVnaXN0ZXJJRCByZWcxLCBSZWdpc3RlcklEIHJlZzIpCiAgICAgewogICAgICAgICBp
ZiAocmVnMSAhPSByZWcyKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9N
YWNyb0Fzc2VtYmxlclg4Nl82NC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaAkocmV2aXNpb24gMTMxMjYyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xNTQsMjMxICsxNTQsNTU5IEBAIHB1YmxpYzoKICAgICAgICAgcmV0
dXJuIENhbGw6OmZyb21UYWlsSnVtcChuZXdKdW1wKTsKICAgICB9CiAKLQogICAgIHZvaWQgYWRk
UHRyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewotICAgICAgICBtX2Fz
c2VtYmxlci5hZGRxX3JyKHNyYywgZGVzdCk7CisgICAgICAgIGFkZDY0KHNyYywgZGVzdCk7CiAg
ICAgfQogICAgIAogICAgIHZvaWQgYWRkUHRyKEFkZHJlc3Mgc3JjLCBSZWdpc3RlcklEIGRlc3Qp
CiAgICAgewotICAgICAgICBtX2Fzc2VtYmxlci5hZGRxX21yKHNyYy5vZmZzZXQsIHNyYy5iYXNl
LCBkZXN0KTsKKyAgICAgICAgYWRkNjQoc3JjLCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIGFk
ZFB0cihUcnVzdGVkSW1tMzIgaW1tLCBSZWdpc3RlcklEIHNyY0Rlc3QpCisgICAgeworICAgICAg
ICBhZGQ2NChpbW0sIHNyY0Rlc3QpOworICAgIH0KKworICAgIHZvaWQgYWRkUHRyKFRydXN0ZWRJ
bW0zMiBpbW0sIFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAg
ICBhZGQ2NChpbW0sIHNyYywgZGVzdCk7CisgICAgfQorCisgICAgdm9pZCBhZGRQdHIoVHJ1c3Rl
ZEltbTMyIGltbSwgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgYWRkNjQoaW1tLCBh
ZGRyZXNzKTsKKyAgICB9CisKKyAgICB2b2lkIGFuZFB0cihSZWdpc3RlcklEIHNyYywgUmVnaXN0
ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgYW5kNjQoc3JjLCBkZXN0KTsKKyAgICB9CisKKyAg
ICB2b2lkIGFuZFB0cihUcnVzdGVkSW1tMzIgaW1tLCBSZWdpc3RlcklEIHNyY0Rlc3QpCisgICAg
eworICAgICAgICBhbmQ2NChpbW0sIHNyY0Rlc3QpOworICAgIH0KKyAgICAKKyAgICB2b2lkIG5l
Z1B0cihSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBuZWc2NChkZXN0KTsKKyAgICB9
CisKKyAgICB2b2lkIG9yUHRyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAg
eworICAgICAgICBvcjY0KHNyYywgZGVzdCk7CisgICAgfQorCisgICAgdm9pZCBvclB0cihUcnVz
dGVkSW1tMzIgaW1tLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBvcjY0KGltbSwg
ZGVzdCk7CisgICAgfQorCisgICAgdm9pZCByb3RhdGVSaWdodFB0cihUcnVzdGVkSW1tMzIgaW1t
LCBSZWdpc3RlcklEIHNyY0RzdCkKKyAgICB7CisgICAgICAgIHJvdGF0ZVJpZ2h0NjQoaW1tLCBz
cmNEc3QpOworICAgIH0KKworICAgIHZvaWQgc3ViUHRyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3Rl
cklEIGRlc3QpCisgICAgeworICAgICAgICBzdWI2NChzcmMsIGRlc3QpOworICAgIH0KKyAgICAK
KyAgICB2b2lkIHN1YlB0cihUcnVzdGVkSW1tMzIgaW1tLCBSZWdpc3RlcklEIGRlc3QpCisgICAg
eworICAgICAgICBzdWI2NChpbW0sIGRlc3QpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHhvclB0
cihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgeG9yNjQo
c3JjLCBkZXN0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCB4b3JQdHIoUmVnaXN0ZXJJRCBzcmMs
IEFkZHJlc3MgZGVzdCkKKyAgICB7CisgICAgICAgIHhvcjY0KHNyYywgZGVzdCk7CisgICAgfQor
CisgICAgdm9pZCB4b3JQdHIoVHJ1c3RlZEltbTMyIGltbSwgUmVnaXN0ZXJJRCBzcmNEZXN0KQor
ICAgIHsKKyAgICAgICAgeG9yNjQoaW1tLCBzcmNEZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIGxv
YWRQdHIoSW1wbGljaXRBZGRyZXNzIGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7Cisg
ICAgICAgIGxvYWQ2NChhZGRyZXNzLCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIGxvYWRQdHIo
QmFzZUluZGV4IGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIGxvYWQ2
NChhZGRyZXNzLCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIGxvYWRQdHIoY29uc3Qgdm9pZCog
YWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbG9hZDY0KGFkZHJlc3Ms
IGRlc3QpOworICAgIH0KKworICAgIERhdGFMYWJlbDMyIGxvYWRQdHJXaXRoQWRkcmVzc09mZnNl
dFBhdGNoKEFkZHJlc3MgYWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGxvYWQ2NFdpdGhBZGRyZXNzT2Zmc2V0UGF0Y2goYWRkcmVzcywgZGVzdCk7CisgICAg
fQorICAgIAorICAgIERhdGFMYWJlbENvbXBhY3QgbG9hZFB0cldpdGhDb21wYWN0QWRkcmVzc09m
ZnNldFBhdGNoKEFkZHJlc3MgYWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGxvYWQ2NFdpdGhDb21wYWN0QWRkcmVzc09mZnNldFBhdGNoKGFkZHJlc3MsIGRl
c3QpOworICAgIH0KKworICAgIHZvaWQgc3RvcmVQdHIoUmVnaXN0ZXJJRCBzcmMsIEltcGxpY2l0
QWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgc3RvcmU2NChzcmMsIGFkZHJlc3MpOwor
ICAgIH0KKworICAgIHZvaWQgc3RvcmVQdHIoUmVnaXN0ZXJJRCBzcmMsIEJhc2VJbmRleCBhZGRy
ZXNzKQorICAgIHsKKyAgICAgICAgc3RvcmU2NChzcmMsIGFkZHJlc3MpOworICAgIH0KKyAgICAK
KyAgICB2b2lkIHN0b3JlUHRyKFJlZ2lzdGVySUQgc3JjLCB2b2lkKiBhZGRyZXNzKQorICAgIHsK
KyAgICAgICAgc3RvcmU2NChzcmMsIGFkZHJlc3MpOworICAgIH0KKworICAgIERhdGFMYWJlbDMy
IHN0b3JlUHRyV2l0aEFkZHJlc3NPZmZzZXRQYXRjaChSZWdpc3RlcklEIHNyYywgQWRkcmVzcyBh
ZGRyZXNzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0b3JlNjRXaXRoQWRkcmVzc09mZnNldFBh
dGNoKHNyYywgYWRkcmVzcyk7CisgICAgfQorCisgICAgdm9pZCBtb3ZlUHRyVG9Eb3VibGUoUmVn
aXN0ZXJJRCBzcmMsIEZQUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbW92ZTY0VG9E
b3VibGUoc3JjLCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIG1vdmVEb3VibGVUb1B0cihGUFJl
Z2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtb3ZlRG91Ymxl
VG82NChzcmMsIGRlc3QpOworICAgIH0KKworICAgIHZvaWQgY29tcGFyZVB0cihSZWxhdGlvbmFs
Q29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgbGVmdCwgVHJ1c3RlZEltbTMyIHJpZ2h0LCBSZWdp
c3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBjb21wYXJlNjQoY29uZCwgbGVmdCwgcmlnaHQs
IGRlc3QpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBhcmVQdHIoUmVsYXRpb25hbENvbmRp
dGlvbiBjb25kLCBSZWdpc3RlcklEIGxlZnQsIFJlZ2lzdGVySUQgcmlnaHQsIFJlZ2lzdGVySUQg
ZGVzdCkKKyAgICB7CisgICAgICAgIGNvbXBhcmU2NChjb25kLCBsZWZ0LCByaWdodCwgZGVzdCk7
CisgICAgfQorICAgIAorICAgIEp1bXAgYnJhbmNoUHRyKFJlbGF0aW9uYWxDb25kaXRpb24gY29u
ZCwgUmVnaXN0ZXJJRCBsZWZ0LCBSZWdpc3RlcklEIHJpZ2h0KQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGJyYW5jaDY0KGNvbmQsIGxlZnQsIHJpZ2h0KTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5j
aFB0cihSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgbGVmdCwgVHJ1c3RlZElt
bVB0ciByaWdodCkKKyAgICB7CisgICAgICAgIGlmICgoKGNvbmQgPT0gRXF1YWwpIHx8IChjb25k
ID09IE5vdEVxdWFsKSkgJiYgIXJpZ2h0Lm1fdmFsdWUpIHsKKyAgICAgICAgICAgIG1fYXNzZW1i
bGVyLnRlc3RxX3JyKGxlZnQsIGxlZnQpOworICAgICAgICAgICAgcmV0dXJuIEp1bXAobV9hc3Nl
bWJsZXIuakNDKHg4NkNvbmRpdGlvbihjb25kKSkpOworICAgICAgICB9CisgICAgICAgIG1vdmUo
cmlnaHQsIHNjcmF0Y2hSZWdpc3Rlcik7CisgICAgICAgIHJldHVybiBicmFuY2hQdHIoY29uZCwg
bGVmdCwgc2NyYXRjaFJlZ2lzdGVyKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaFB0cihSZWxh
dGlvbmFsQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgbGVmdCwgQWRkcmVzcyByaWdodCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBicmFuY2g2NChjb25kLCBsZWZ0LCByaWdodCk7CisgICAgfQor
CisgICAgSnVtcCBicmFuY2hQdHIoUmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBBZGRyZXNzIGxl
ZnQsIFJlZ2lzdGVySUQgcmlnaHQpCisgICAgeworICAgICAgICByZXR1cm4gYnJhbmNoNjQoY29u
ZCwgbGVmdCwgcmlnaHQpOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoVGVzdFB0cihSZXN1bHRD
b25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCByZWcsIFJlZ2lzdGVySUQgbWFzaykKKyAgICB7Cisg
ICAgICAgIHJldHVybiBicmFuY2hUZXN0NjQoY29uZCwgcmVnLCBtYXNrKTsKKyAgICB9CisgICAg
CisgICAgSnVtcCBicmFuY2hUZXN0UHRyKFJlc3VsdENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklE
IHJlZywgVHJ1c3RlZEltbTMyIG1hc2sgPSBUcnVzdGVkSW1tMzIoLTEpKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGJyYW5jaFRlc3Q2NChjb25kLCByZWcsIG1hc2spOworICAgIH0KKworICAgIHZv
aWQgdGVzdFB0cihSZXN1bHRDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCByZWcsIFRydXN0ZWRJ
bW0zMiBtYXNrLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICB0ZXN0NjQoY29uZCwg
cmVnLCBtYXNrLCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIHRlc3RQdHIoUmVzdWx0Q29uZGl0
aW9uIGNvbmQsIFJlZ2lzdGVySUQgcmVnLCBSZWdpc3RlcklEIG1hc2ssIFJlZ2lzdGVySUQgZGVz
dCkKKyAgICB7CisgICAgICAgIHRlc3Q2NChjb25kLCByZWcsIG1hc2ssIGRlc3QpOworICAgIH0K
KworICAgIEp1bXAgYnJhbmNoVGVzdFB0cihSZXN1bHRDb25kaXRpb24gY29uZCwgQWRkcmVzcyBh
ZGRyZXNzLCBUcnVzdGVkSW1tMzIgbWFzayA9IFRydXN0ZWRJbW0zMigtMSkpCisgICAgeworICAg
ICAgICByZXR1cm4gYnJhbmNoVGVzdDY0KGNvbmQsIGFkZHJlc3MsIG1hc2spOworICAgIH0KKwor
ICAgIEp1bXAgYnJhbmNoVGVzdFB0cihSZXN1bHRDb25kaXRpb24gY29uZCwgQWRkcmVzcyBhZGRy
ZXNzLCBSZWdpc3RlcklEIHJlZykKKyAgICB7CisgICAgICAgIHJldHVybiBicmFuY2hUZXN0NjQo
Y29uZCwgYWRkcmVzcywgcmVnKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaFRlc3RQdHIoUmVz
dWx0Q29uZGl0aW9uIGNvbmQsIEJhc2VJbmRleCBhZGRyZXNzLCBUcnVzdGVkSW1tMzIgbWFzayA9
IFRydXN0ZWRJbW0zMigtMSkpCisgICAgeworICAgICAgICByZXR1cm4gYnJhbmNoVGVzdDY0KGNv
bmQsIGFkZHJlc3MsIG1hc2spOworICAgIH0KKworICAgIERhdGFMYWJlbFB0ciBtb3ZlV2l0aFBh
dGNoKFRydXN0ZWRJbW1QdHIgaW5pdGlhbFZhbHVlLCBSZWdpc3RlcklEIGRlc3QpCisgICAgewor
ICAgICAgICBwYWRCZWZvcmVQYXRjaCgpOworICAgICAgICBtX2Fzc2VtYmxlci5tb3ZxX2k2NHIo
aW5pdGlhbFZhbHVlLmFzSW50cHRyKCksIGRlc3QpOworICAgICAgICByZXR1cm4gRGF0YUxhYmVs
UHRyKHRoaXMpOwogICAgIH0KIAogICAgIHZvaWQgYWRkUHRyKEFic29sdXRlQWRkcmVzcyBzcmMs
IFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CisgICAgICAgIGFkZDY0KHNyYywgZGVzdCk7CisgICAg
fQorCisgICAgdm9pZCBhZGRQdHIoVHJ1c3RlZEltbVB0ciBpbW0sIFJlZ2lzdGVySUQgZGVzdCkK
KyAgICB7CisgICAgICAgIG1vdmUoaW1tLCBzY3JhdGNoUmVnaXN0ZXIpOworICAgICAgICBhZGRQ
dHIoc2NyYXRjaFJlZ2lzdGVyLCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIGFkZFB0cihUcnVz
dGVkSW1tMzIgaW1tLCBBYnNvbHV0ZUFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIGFk
ZDY0KGltbSwgYWRkcmVzcyk7CisgICAgfQorCisgICAgdm9pZCBvclB0cihUcnVzdGVkSW1tUHRy
IGltbSwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbW92ZShpbW0sIHNjcmF0Y2hS
ZWdpc3Rlcik7CisgICAgICAgIG9yUHRyKHNjcmF0Y2hSZWdpc3RlciwgZGVzdCk7CisgICAgfQor
CisgICAgdm9pZCBvclB0cihSZWdpc3RlcklEIG9wMSwgUmVnaXN0ZXJJRCBvcDIsIFJlZ2lzdGVy
SUQgZGVzdCkKKyAgICB7CisgICAgICAgIG9yNjQob3AxLCBvcDIsIGRlc3QpOworICAgIH0KKwor
ICAgIHZvaWQgb3JQdHIoVHJ1c3RlZEltbTMyIGltbSwgUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVy
SUQgZGVzdCkKKyAgICB7CisgICAgICAgIG9yNjQoaW1tLCBzcmMsIGRlc3QpOworICAgIH0KKyAg
ICAKKyAgICB2b2lkIHN1YlB0cihUcnVzdGVkSW1tUHRyIGltbSwgUmVnaXN0ZXJJRCBkZXN0KQor
ICAgIHsKKyAgICAgICAgbW92ZShpbW0sIHNjcmF0Y2hSZWdpc3Rlcik7CisgICAgICAgIHN1YlB0
cihzY3JhdGNoUmVnaXN0ZXIsIGRlc3QpOworICAgIH0KKworICAgIENvbnZlcnRpYmxlTG9hZExh
YmVsIGNvbnZlcnRpYmxlTG9hZFB0cihBZGRyZXNzIGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkK
KyAgICB7CisgICAgICAgIHJldHVybiBjb252ZXJ0aWJsZUxvYWQ2NChhZGRyZXNzLCBkZXN0KTsK
KyAgICB9CisKKyAgICB2b2lkIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIgaW1tLCBJbXBsaWNpdEFk
ZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1vdmUoaW1tLCBzY3JhdGNoUmVnaXN0ZXIp
OworICAgICAgICBzdG9yZVB0cihzY3JhdGNoUmVnaXN0ZXIsIGFkZHJlc3MpOworICAgIH0KKwor
ICAgIHZvaWQgc3RvcmVQdHIoVHJ1c3RlZEltbVB0ciBpbW0sIEJhc2VJbmRleCBhZGRyZXNzKQor
ICAgIHsKKyAgICAgICAgbW92ZShpbW0sIHNjcmF0Y2hSZWdpc3Rlcik7CisgICAgICAgIHN0b3Jl
UHRyKHNjcmF0Y2hSZWdpc3RlciwgYWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIEp1bXAgYnJh
bmNoQWRkMzIoUmVzdWx0Q29uZGl0aW9uIGNvbmQsIFRydXN0ZWRJbW0zMiBzcmMsIEFic29sdXRl
QWRkcmVzcyBkZXN0KQorICAgIHsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGRlc3QubV9w
dHIpLCBzY3JhdGNoUmVnaXN0ZXIpOworICAgICAgICBhZGQzMihzcmMsIEFkZHJlc3Moc2NyYXRj
aFJlZ2lzdGVyKSk7CisgICAgICAgIHJldHVybiBKdW1wKG1fYXNzZW1ibGVyLmpDQyh4ODZDb25k
aXRpb24oY29uZCkpKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaFB0cihSZWxhdGlvbmFsQ29u
ZGl0aW9uIGNvbmQsIEFic29sdXRlQWRkcmVzcyBsZWZ0LCBSZWdpc3RlcklEIHJpZ2h0KQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGJyYW5jaDY0KGNvbmQsIGxlZnQsIHJpZ2h0KTsKKyAgICB9CisK
KyAgICBKdW1wIGJyYW5jaFB0cihSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIEFkZHJlc3MgbGVm
dCwgVHJ1c3RlZEltbVB0ciByaWdodCkKKyAgICB7CisgICAgICAgIG1vdmUocmlnaHQsIHNjcmF0
Y2hSZWdpc3Rlcik7CisgICAgICAgIHJldHVybiBicmFuY2hQdHIoY29uZCwgbGVmdCwgc2NyYXRj
aFJlZ2lzdGVyKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaFRlc3RQdHIoUmVzdWx0Q29uZGl0
aW9uIGNvbmQsIEFic29sdXRlQWRkcmVzcyBhZGRyZXNzLCBUcnVzdGVkSW1tMzIgbWFzayA9IFRy
dXN0ZWRJbW0zMigtMSkpCisgICAgeworICAgICAgICByZXR1cm4gYnJhbmNoVGVzdDY0KGNvbmQs
IGFkZHJlc3MsIG1hc2spOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoQWRkUHRyKFJlc3VsdENv
bmRpdGlvbiBjb25kLCBUcnVzdGVkSW1tMzIgaW1tLCBSZWdpc3RlcklEIGRlc3QpCisgICAgewor
ICAgICAgICByZXR1cm4gYnJhbmNoQWRkNjQoY29uZCwgaW1tLCBkZXN0KTsKKyAgICB9CisKKyAg
ICBKdW1wIGJyYW5jaEFkZFB0cihSZXN1bHRDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBzcmMs
IFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIHJldHVybiBicmFuY2hBZGQ2NChjb25k
LCBzcmMsIGRlc3QpOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoU3ViUHRyKFJlc3VsdENvbmRp
dGlvbiBjb25kLCBUcnVzdGVkSW1tMzIgaW1tLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAg
ICAgICByZXR1cm4gYnJhbmNoU3ViNjQoY29uZCwgaW1tLCBkZXN0KTsKKyAgICB9CisKKyAgICBK
dW1wIGJyYW5jaFN1YlB0cihSZXN1bHRDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBzcmMsIFJl
Z2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIHJldHVybiBicmFuY2hTdWI2NChjb25kLCBz
cmMsIGRlc3QpOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoU3ViUHRyKFJlc3VsdENvbmRpdGlv
biBjb25kLCBSZWdpc3RlcklEIHNyYzEsIFRydXN0ZWRJbW0zMiBzcmMyLCBSZWdpc3RlcklEIGRl
c3QpCisgICAgeworICAgICAgICByZXR1cm4gYnJhbmNoU3ViNjQoY29uZCwgc3JjMSwgc3JjMiwg
ZGVzdCk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2hQdHJXaXRoUGF0Y2goUmVsYXRpb25hbENv
bmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGxlZnQsIERhdGFMYWJlbFB0ciYgZGF0YUxhYmVsLCBU
cnVzdGVkSW1tUHRyIGluaXRpYWxSaWdodFZhbHVlID0gVHJ1c3RlZEltbVB0cigwKSkKKyAgICB7
CisgICAgICAgIGRhdGFMYWJlbCA9IG1vdmVXaXRoUGF0Y2goaW5pdGlhbFJpZ2h0VmFsdWUsIHNj
cmF0Y2hSZWdpc3Rlcik7CisgICAgICAgIHJldHVybiBicmFuY2hQdHIoY29uZCwgbGVmdCwgc2Ny
YXRjaFJlZ2lzdGVyKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaFB0cldpdGhQYXRjaChSZWxh
dGlvbmFsQ29uZGl0aW9uIGNvbmQsIEFkZHJlc3MgbGVmdCwgRGF0YUxhYmVsUHRyJiBkYXRhTGFi
ZWwsIFRydXN0ZWRJbW1QdHIgaW5pdGlhbFJpZ2h0VmFsdWUgPSBUcnVzdGVkSW1tUHRyKDApKQor
ICAgIHsKKyAgICAgICAgZGF0YUxhYmVsID0gbW92ZVdpdGhQYXRjaChpbml0aWFsUmlnaHRWYWx1
ZSwgc2NyYXRjaFJlZ2lzdGVyKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaFB0cihjb25kLCBsZWZ0
LCBzY3JhdGNoUmVnaXN0ZXIpOworICAgIH0KKworICAgIERhdGFMYWJlbFB0ciBzdG9yZVB0cldp
dGhQYXRjaChUcnVzdGVkSW1tUHRyIGluaXRpYWxWYWx1ZSwgSW1wbGljaXRBZGRyZXNzIGFkZHJl
c3MpCisgICAgeworICAgICAgICBEYXRhTGFiZWxQdHIgbGFiZWwgPSBtb3ZlV2l0aFBhdGNoKGlu
aXRpYWxWYWx1ZSwgc2NyYXRjaFJlZ2lzdGVyKTsKKyAgICAgICAgc3RvcmVQdHIoc2NyYXRjaFJl
Z2lzdGVyLCBhZGRyZXNzKTsKKyAgICAgICAgcmV0dXJuIGxhYmVsOworICAgIH0KKworICAgIHZv
aWQgYWRkNjQoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAg
IG1fYXNzZW1ibGVyLmFkZHFfcnIoc3JjLCBkZXN0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBh
ZGQ2NChBZGRyZXNzIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3Nl
bWJsZXIuYWRkcV9tcihzcmMub2Zmc2V0LCBzcmMuYmFzZSwgZGVzdCk7CisgICAgfQorCisgICAg
dm9pZCBhZGQ2NChBYnNvbHV0ZUFkZHJlc3Mgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgewog
ICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoc3JjLm1fcHRyKSwgc2NyYXRjaFJlZ2lzdGVyKTsK
LSAgICAgICAgYWRkUHRyKEFkZHJlc3Moc2NyYXRjaFJlZ2lzdGVyKSwgZGVzdCk7CisgICAgICAg
IGFkZDY0KEFkZHJlc3Moc2NyYXRjaFJlZ2lzdGVyKSwgZGVzdCk7CiAgICAgfQogCi0gICAgdm9p
ZCBhZGRQdHIoVHJ1c3RlZEltbTMyIGltbSwgUmVnaXN0ZXJJRCBzcmNEZXN0KQorICAgIHZvaWQg
YWRkNjQoVHJ1c3RlZEltbTMyIGltbSwgUmVnaXN0ZXJJRCBzcmNEZXN0KQogICAgIHsKICAgICAg
ICAgbV9hc3NlbWJsZXIuYWRkcV9pcihpbW0ubV92YWx1ZSwgc3JjRGVzdCk7CiAgICAgfQogCi0g
ICAgdm9pZCBhZGRQdHIoVHJ1c3RlZEltbVB0ciBpbW0sIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB2
b2lkIGFkZDY0KFRydXN0ZWRJbW02NCBpbW0sIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CiAgICAg
ICAgIG1vdmUoaW1tLCBzY3JhdGNoUmVnaXN0ZXIpOwotICAgICAgICBtX2Fzc2VtYmxlci5hZGRx
X3JyKHNjcmF0Y2hSZWdpc3RlciwgZGVzdCk7CisgICAgICAgIGFkZDY0KHNjcmF0Y2hSZWdpc3Rl
ciwgZGVzdCk7CiAgICAgfQogCi0gICAgdm9pZCBhZGRQdHIoVHJ1c3RlZEltbTMyIGltbSwgUmVn
aXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB2b2lkIGFkZDY0KFRydXN0ZWRJbW0z
MiBpbW0sIFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewogICAgICAgICBt
X2Fzc2VtYmxlci5sZWFxX21yKGltbS5tX3ZhbHVlLCBzcmMsIGRlc3QpOwogICAgIH0KIAotICAg
IHZvaWQgYWRkUHRyKFRydXN0ZWRJbW0zMiBpbW0sIEFkZHJlc3MgYWRkcmVzcykKKyAgICB2b2lk
IGFkZDY0KFRydXN0ZWRJbW0zMiBpbW0sIEFkZHJlc3MgYWRkcmVzcykKICAgICB7CiAgICAgICAg
IG1fYXNzZW1ibGVyLmFkZHFfaW0oaW1tLm1fdmFsdWUsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNz
LmJhc2UpOwogICAgIH0KIAotICAgIHZvaWQgYWRkUHRyKFRydXN0ZWRJbW0zMiBpbW0sIEFic29s
dXRlQWRkcmVzcyBhZGRyZXNzKQotICAgIHsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGFk
ZHJlc3MubV9wdHIpLCBzY3JhdGNoUmVnaXN0ZXIpOwotICAgICAgICBhZGRQdHIoaW1tLCBBZGRy
ZXNzKHNjcmF0Y2hSZWdpc3RlcikpOwotICAgIH0KLQogICAgIHZvaWQgYWRkNjQoVHJ1c3RlZElt
bTMyIGltbSwgQWJzb2x1dGVBZGRyZXNzIGFkZHJlc3MpCiAgICAgewotICAgICAgICBhZGRQdHIo
aW1tLCBhZGRyZXNzKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGFkZHJlc3MubV9wdHIp
LCBzY3JhdGNoUmVnaXN0ZXIpOworICAgICAgICBhZGQ2NChpbW0sIEFkZHJlc3Moc2NyYXRjaFJl
Z2lzdGVyKSk7CiAgICAgfQogCi0gICAgdm9pZCBhbmRQdHIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lz
dGVySUQgZGVzdCkKKyAgICB2b2lkIGFuZDY0KFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRl
c3QpCiAgICAgewogICAgICAgICBtX2Fzc2VtYmxlci5hbmRxX3JyKHNyYywgZGVzdCk7CiAgICAg
fQogCi0gICAgdm9pZCBhbmRQdHIoVHJ1c3RlZEltbTMyIGltbSwgUmVnaXN0ZXJJRCBzcmNEZXN0
KQorICAgIHZvaWQgYW5kNjQoVHJ1c3RlZEltbTMyIGltbSwgUmVnaXN0ZXJJRCBzcmNEZXN0KQog
ICAgIHsKICAgICAgICAgbV9hc3NlbWJsZXIuYW5kcV9pcihpbW0ubV92YWx1ZSwgc3JjRGVzdCk7
CiAgICAgfQogICAgIAotICAgIHZvaWQgbmVnUHRyKFJlZ2lzdGVySUQgZGVzdCkKKyAgICB2b2lk
IG5lZzY0KFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CiAgICAgICAgIG1fYXNzZW1ibGVyLm5lZ3Ff
cihkZXN0KTsKICAgICB9CiAKLSAgICB2b2lkIG9yUHRyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3Rl
cklEIGRlc3QpCisgICAgdm9pZCBvcjY0KFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3Qp
CiAgICAgewogICAgICAgICBtX2Fzc2VtYmxlci5vcnFfcnIoc3JjLCBkZXN0KTsKICAgICB9CiAK
LSAgICB2b2lkIG9yUHRyKFRydXN0ZWRJbW1QdHIgaW1tLCBSZWdpc3RlcklEIGRlc3QpCisgICAg
dm9pZCBvcjY0KFRydXN0ZWRJbW02NCBpbW0sIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CiAgICAg
ICAgIG1vdmUoaW1tLCBzY3JhdGNoUmVnaXN0ZXIpOwotICAgICAgICBtX2Fzc2VtYmxlci5vcnFf
cnIoc2NyYXRjaFJlZ2lzdGVyLCBkZXN0KTsKKyAgICAgICAgb3I2NChzY3JhdGNoUmVnaXN0ZXIs
IGRlc3QpOwogICAgIH0KIAotICAgIHZvaWQgb3JQdHIoVHJ1c3RlZEltbTMyIGltbSwgUmVnaXN0
ZXJJRCBkZXN0KQorICAgIHZvaWQgb3I2NChUcnVzdGVkSW1tMzIgaW1tLCBSZWdpc3RlcklEIGRl
c3QpCiAgICAgewogICAgICAgICBtX2Fzc2VtYmxlci5vcnFfaXIoaW1tLm1fdmFsdWUsIGRlc3Qp
OwogICAgIH0KIAotICAgIHZvaWQgb3JQdHIoUmVnaXN0ZXJJRCBvcDEsIFJlZ2lzdGVySUQgb3Ay
LCBSZWdpc3RlcklEIGRlc3QpCisgICAgdm9pZCBvcjY0KFJlZ2lzdGVySUQgb3AxLCBSZWdpc3Rl
cklEIG9wMiwgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKICAgICAgICAgaWYgKG9wMSA9PSBvcDIp
CiAgICAgICAgICAgICBtb3ZlKG9wMSwgZGVzdCk7CiAgICAgICAgIGVsc2UgaWYgKG9wMSA9PSBk
ZXN0KQotICAgICAgICAgICAgb3JQdHIob3AyLCBkZXN0KTsKKyAgICAgICAgICAgIG9yNjQob3Ay
LCBkZXN0KTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBtb3ZlKG9wMiwgZGVzdCk7Ci0g
ICAgICAgICAgICBvclB0cihvcDEsIGRlc3QpOworICAgICAgICAgICAgb3I2NChvcDEsIGRlc3Qp
OwogICAgICAgICB9CiAgICAgfQogCi0gICAgdm9pZCBvclB0cihUcnVzdGVkSW1tMzIgaW1tLCBS
ZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHZvaWQgb3I2NChUcnVzdGVkSW1t
MzIgaW1tLCBSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKICAgICAgICAg
bW92ZShzcmMsIGRlc3QpOwotICAgICAgICBvclB0cihpbW0sIGRlc3QpOworICAgICAgICBvcjY0
KGltbSwgZGVzdCk7CiAgICAgfQogICAgIAotICAgIHZvaWQgcm90YXRlUmlnaHRQdHIoVHJ1c3Rl
ZEltbTMyIGltbSwgUmVnaXN0ZXJJRCBzcmNEc3QpCisgICAgdm9pZCByb3RhdGVSaWdodDY0KFRy
dXN0ZWRJbW0zMiBpbW0sIFJlZ2lzdGVySUQgc3JjRHN0KQogICAgIHsKICAgICAgICAgbV9hc3Nl
bWJsZXIucm9ycV9pOHIoaW1tLm1fdmFsdWUsIHNyY0RzdCk7CiAgICAgfQogCi0gICAgdm9pZCBz
dWJQdHIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB2b2lkIHN1YjY0KFJl
Z2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewogICAgICAgICBtX2Fzc2VtYmxl
ci5zdWJxX3JyKHNyYywgZGVzdCk7CiAgICAgfQogICAgIAotICAgIHZvaWQgc3ViUHRyKFRydXN0
ZWRJbW0zMiBpbW0sIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB2b2lkIHN1YjY0KFRydXN0ZWRJbW0z
MiBpbW0sIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CiAgICAgICAgIG1fYXNzZW1ibGVyLnN1YnFf
aXIoaW1tLm1fdmFsdWUsIGRlc3QpOwogICAgIH0KICAgICAKLSAgICB2b2lkIHN1YlB0cihUcnVz
dGVkSW1tUHRyIGltbSwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHZvaWQgc3ViNjQoVHJ1c3RlZElt
bTY0IGltbSwgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKICAgICAgICAgbW92ZShpbW0sIHNjcmF0
Y2hSZWdpc3Rlcik7Ci0gICAgICAgIG1fYXNzZW1ibGVyLnN1YnFfcnIoc2NyYXRjaFJlZ2lzdGVy
LCBkZXN0KTsKKyAgICAgICAgc3ViNjQoc2NyYXRjaFJlZ2lzdGVyLCBkZXN0KTsKICAgICB9CiAK
LSAgICB2b2lkIHhvclB0cihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHZv
aWQgeG9yNjQoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CiAgICAgICAg
IG1fYXNzZW1ibGVyLnhvcnFfcnIoc3JjLCBkZXN0KTsKICAgICB9CiAgICAgCi0gICAgdm9pZCB4
b3JQdHIoUmVnaXN0ZXJJRCBzcmMsIEFkZHJlc3MgZGVzdCkKKyAgICB2b2lkIHhvcjY0KFJlZ2lz
dGVySUQgc3JjLCBBZGRyZXNzIGRlc3QpCiAgICAgewogICAgICAgICBtX2Fzc2VtYmxlci54b3Jx
X3JtKHNyYywgZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSk7CiAgICAgfQogCi0gICAgdm9pZCB4b3JQ
dHIoVHJ1c3RlZEltbTMyIGltbSwgUmVnaXN0ZXJJRCBzcmNEZXN0KQorICAgIHZvaWQgeG9yNjQo
VHJ1c3RlZEltbTMyIGltbSwgUmVnaXN0ZXJJRCBzcmNEZXN0KQogICAgIHsKICAgICAgICAgbV9h
c3NlbWJsZXIueG9ycV9pcihpbW0ubV92YWx1ZSwgc3JjRGVzdCk7CiAgICAgfQogCi0gICAgdm9p
ZCBsb2FkUHRyKEltcGxpY2l0QWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3QpCisgICAg
dm9pZCBsb2FkNjQoSW1wbGljaXRBZGRyZXNzIGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKICAg
ICB7CiAgICAgICAgIG1fYXNzZW1ibGVyLm1vdnFfbXIoYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3Mu
YmFzZSwgZGVzdCk7CiAgICAgfQogCi0gICAgQ29udmVydGlibGVMb2FkTGFiZWwgY29udmVydGli
bGVMb2FkUHRyKEFkZHJlc3MgYWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIENvbnZlcnRp
YmxlTG9hZExhYmVsIGNvbnZlcnRpYmxlTG9hZDY0KEFkZHJlc3MgYWRkcmVzcywgUmVnaXN0ZXJJ
RCBkZXN0KQogICAgIHsKICAgICAgICAgQ29udmVydGlibGVMb2FkTGFiZWwgcmVzdWx0ID0gQ29u
dmVydGlibGVMb2FkTGFiZWwodGhpcyk7CiAgICAgICAgIG1fYXNzZW1ibGVyLm1vdnFfbXIoYWRk
cmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSwgZGVzdCk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7
CiAgICAgfQogCi0gICAgdm9pZCBsb2FkUHRyKEJhc2VJbmRleCBhZGRyZXNzLCBSZWdpc3RlcklE
IGRlc3QpCisgICAgdm9pZCBsb2FkNjQoQmFzZUluZGV4IGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVz
dCkKICAgICB7CiAgICAgICAgIG1fYXNzZW1ibGVyLm1vdnFfbXIoYWRkcmVzcy5vZmZzZXQsIGFk
ZHJlc3MuYmFzZSwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZSwgZGVzdCk7CiAgICAgfQog
Ci0gICAgdm9pZCBsb2FkUHRyKGNvbnN0IHZvaWQqIGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkK
KyAgICB2b2lkIGxvYWQ2NChjb25zdCB2b2lkKiBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3QpCiAg
ICAgewogICAgICAgICBpZiAoZGVzdCA9PSBYODZSZWdpc3RlcnM6OmVheCkKICAgICAgICAgICAg
IG1fYXNzZW1ibGVyLm1vdnFfbUVBWChhZGRyZXNzKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAg
ICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoYWRkcmVzcyksIGRlc3QpOwotICAgICAgICAgICAgbG9h
ZFB0cihkZXN0LCBkZXN0KTsKKyAgICAgICAgICAgIGxvYWQ2NChkZXN0LCBkZXN0KTsKICAgICAg
ICAgfQogICAgIH0KIAotICAgIERhdGFMYWJlbDMyIGxvYWRQdHJXaXRoQWRkcmVzc09mZnNldFBh
dGNoKEFkZHJlc3MgYWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIERhdGFMYWJlbDMyIGxv
YWQ2NFdpdGhBZGRyZXNzT2Zmc2V0UGF0Y2goQWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklEIGRl
c3QpCiAgICAgewogICAgICAgICBwYWRCZWZvcmVQYXRjaCgpOwogICAgICAgICBtX2Fzc2VtYmxl
ci5tb3ZxX21yX2Rpc3AzMihhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlLCBkZXN0KTsKICAg
ICAgICAgcmV0dXJuIERhdGFMYWJlbDMyKHRoaXMpOwogICAgIH0KICAgICAKLSAgICBEYXRhTGFi
ZWxDb21wYWN0IGxvYWRQdHJXaXRoQ29tcGFjdEFkZHJlc3NPZmZzZXRQYXRjaChBZGRyZXNzIGFk
ZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICBEYXRhTGFiZWxDb21wYWN0IGxvYWQ2NFdpdGhD
b21wYWN0QWRkcmVzc09mZnNldFBhdGNoKEFkZHJlc3MgYWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0
KQogICAgIHsKICAgICAgICAgcGFkQmVmb3JlUGF0Y2goKTsKICAgICAgICAgbV9hc3NlbWJsZXIu
bW92cV9tcl9kaXNwOChhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlLCBkZXN0KTsKICAgICAg
ICAgcmV0dXJuIERhdGFMYWJlbENvbXBhY3QodGhpcyk7CiAgICAgfQogCi0gICAgdm9pZCBzdG9y
ZVB0cihSZWdpc3RlcklEIHNyYywgSW1wbGljaXRBZGRyZXNzIGFkZHJlc3MpCisgICAgdm9pZCBz
dG9yZTY0KFJlZ2lzdGVySUQgc3JjLCBJbXBsaWNpdEFkZHJlc3MgYWRkcmVzcykKICAgICB7CiAg
ICAgICAgIG1fYXNzZW1ibGVyLm1vdnFfcm0oc3JjLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5i
YXNlKTsKICAgICB9CiAKLSAgICB2b2lkIHN0b3JlUHRyKFJlZ2lzdGVySUQgc3JjLCBCYXNlSW5k
ZXggYWRkcmVzcykKKyAgICB2b2lkIHN0b3JlNjQoUmVnaXN0ZXJJRCBzcmMsIEJhc2VJbmRleCBh
ZGRyZXNzKQogICAgIHsKICAgICAgICAgbV9hc3NlbWJsZXIubW92cV9ybShzcmMsIGFkZHJlc3Mu
b2Zmc2V0LCBhZGRyZXNzLmJhc2UsIGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUpOwogICAg
IH0KICAgICAKLSAgICB2b2lkIHN0b3JlUHRyKFJlZ2lzdGVySUQgc3JjLCB2b2lkKiBhZGRyZXNz
KQorICAgIHZvaWQgc3RvcmU2NChSZWdpc3RlcklEIHNyYywgdm9pZCogYWRkcmVzcykKICAgICB7
CiAgICAgICAgIGlmIChzcmMgPT0gWDg2UmVnaXN0ZXJzOjplYXgpCiAgICAgICAgICAgICBtX2Fz
c2VtYmxlci5tb3ZxX0VBWG0oYWRkcmVzcyk7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAg
bW92ZShUcnVzdGVkSW1tUHRyKGFkZHJlc3MpLCBzY3JhdGNoUmVnaXN0ZXIpOwotICAgICAgICAg
ICAgc3RvcmVQdHIoc3JjLCBzY3JhdGNoUmVnaXN0ZXIpOworICAgICAgICAgICAgc3RvcmU2NChz
cmMsIHNjcmF0Y2hSZWdpc3Rlcik7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICB2b2lkIHN0b3Jl
UHRyKFRydXN0ZWRJbW1QdHIgaW1tLCBJbXBsaWNpdEFkZHJlc3MgYWRkcmVzcykKKyAgICB2b2lk
IHN0b3JlNjQoVHJ1c3RlZEltbTY0IGltbSwgSW1wbGljaXRBZGRyZXNzIGFkZHJlc3MpCiAgICAg
ewogICAgICAgICBtb3ZlKGltbSwgc2NyYXRjaFJlZ2lzdGVyKTsKLSAgICAgICAgc3RvcmVQdHIo
c2NyYXRjaFJlZ2lzdGVyLCBhZGRyZXNzKTsKKyAgICAgICAgc3RvcmU2NChzY3JhdGNoUmVnaXN0
ZXIsIGFkZHJlc3MpOwogICAgIH0KIAotICAgIHZvaWQgc3RvcmVQdHIoVHJ1c3RlZEltbVB0ciBp
bW0sIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHZvaWQgc3RvcmU2NChUcnVzdGVkSW1tNjQgaW1t
LCBCYXNlSW5kZXggYWRkcmVzcykKICAgICB7CiAgICAgICAgIG1vdmUoaW1tLCBzY3JhdGNoUmVn
aXN0ZXIpOwogICAgICAgICBtX2Fzc2VtYmxlci5tb3ZxX3JtKHNjcmF0Y2hSZWdpc3RlciwgYWRk
cmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZSk7
CiAgICAgfQogICAgIAotICAgIERhdGFMYWJlbDMyIHN0b3JlUHRyV2l0aEFkZHJlc3NPZmZzZXRQ
YXRjaChSZWdpc3RlcklEIHNyYywgQWRkcmVzcyBhZGRyZXNzKQorICAgIERhdGFMYWJlbDMyIHN0
b3JlNjRXaXRoQWRkcmVzc09mZnNldFBhdGNoKFJlZ2lzdGVySUQgc3JjLCBBZGRyZXNzIGFkZHJl
c3MpCiAgICAgewogICAgICAgICBwYWRCZWZvcmVQYXRjaCgpOwogICAgICAgICBtX2Fzc2VtYmxl
ci5tb3ZxX3JtX2Rpc3AzMihzcmMsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UpOwogICAg
ICAgICByZXR1cm4gRGF0YUxhYmVsMzIodGhpcyk7CiAgICAgfQogCi0gICAgdm9pZCBtb3ZlUHRy
VG9Eb3VibGUoUmVnaXN0ZXJJRCBzcmMsIEZQUmVnaXN0ZXJJRCBkZXN0KQorICAgIHZvaWQgbW92
ZTY0VG9Eb3VibGUoUmVnaXN0ZXJJRCBzcmMsIEZQUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKICAg
ICAgICAgbV9hc3NlbWJsZXIubW92cV9ycihzcmMsIGRlc3QpOwogICAgIH0KIAotICAgIHZvaWQg
bW92ZURvdWJsZVRvUHRyKEZQUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB2
b2lkIG1vdmVEb3VibGVUbzY0KEZQUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKICAg
ICB7CiAgICAgICAgIG1fYXNzZW1ibGVyLm1vdnFfcnIoc3JjLCBkZXN0KTsKICAgICB9CiAKLSAg
ICB2b2lkIGNvbXBhcmVQdHIoUmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGxl
ZnQsIFRydXN0ZWRJbW0zMiByaWdodCwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHZvaWQgY29tcGFy
ZTY0KFJlbGF0aW9uYWxDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBsZWZ0LCBUcnVzdGVkSW1t
MzIgcmlnaHQsIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CiAgICAgICAgIGlmICgoKGNvbmQgPT0g
RXF1YWwpIHx8IChjb25kID09IE5vdEVxdWFsKSkgJiYgIXJpZ2h0Lm1fdmFsdWUpCiAgICAgICAg
ICAgICBtX2Fzc2VtYmxlci50ZXN0cV9ycihsZWZ0LCBsZWZ0KTsKQEAgLTM4OCw2NyArNzE2LDYw
IEBAIHB1YmxpYzoKICAgICAgICAgbV9hc3NlbWJsZXIubW92emJsX3JyKGRlc3QsIGRlc3QpOwog
ICAgIH0KICAgICAKLSAgICB2b2lkIGNvbXBhcmVQdHIoUmVsYXRpb25hbENvbmRpdGlvbiBjb25k
LCBSZWdpc3RlcklEIGxlZnQsIFJlZ2lzdGVySUQgcmlnaHQsIFJlZ2lzdGVySUQgZGVzdCkKKyAg
ICB2b2lkIGNvbXBhcmU2NChSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgbGVm
dCwgUmVnaXN0ZXJJRCByaWdodCwgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKICAgICAgICAgbV9h
c3NlbWJsZXIuY21wcV9ycihyaWdodCwgbGVmdCk7CiAgICAgICAgIG1fYXNzZW1ibGVyLnNldEND
X3IoeDg2Q29uZGl0aW9uKGNvbmQpLCBkZXN0KTsKICAgICAgICAgbV9hc3NlbWJsZXIubW92emJs
X3JyKGRlc3QsIGRlc3QpOwogICAgIH0KICAgICAKLSAgICBKdW1wIGJyYW5jaEFkZDMyKFJlc3Vs
dENvbmRpdGlvbiBjb25kLCBUcnVzdGVkSW1tMzIgc3JjLCBBYnNvbHV0ZUFkZHJlc3MgZGVzdCkK
LSAgICB7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihkZXN0Lm1fcHRyKSwgc2NyYXRjaFJl
Z2lzdGVyKTsKLSAgICAgICAgYWRkMzIoc3JjLCBBZGRyZXNzKHNjcmF0Y2hSZWdpc3RlcikpOwot
ICAgICAgICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5qQ0MoeDg2Q29uZGl0aW9uKGNvbmQpKSk7
Ci0gICAgfQotCi0gICAgSnVtcCBicmFuY2hQdHIoUmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBS
ZWdpc3RlcklEIGxlZnQsIFJlZ2lzdGVySUQgcmlnaHQpCisgICAgSnVtcCBicmFuY2g2NChSZWxh
dGlvbmFsQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgbGVmdCwgUmVnaXN0ZXJJRCByaWdodCkK
ICAgICB7CiAgICAgICAgIG1fYXNzZW1ibGVyLmNtcHFfcnIocmlnaHQsIGxlZnQpOwogICAgICAg
ICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5qQ0MoeDg2Q29uZGl0aW9uKGNvbmQpKSk7CiAgICAg
fQogCi0gICAgSnVtcCBicmFuY2hQdHIoUmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBSZWdpc3Rl
cklEIGxlZnQsIFRydXN0ZWRJbW1QdHIgcmlnaHQpCisgICAgSnVtcCBicmFuY2g2NChSZWxhdGlv
bmFsQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgbGVmdCwgVHJ1c3RlZEltbTY0IHJpZ2h0KQog
ICAgIHsKICAgICAgICAgaWYgKCgoY29uZCA9PSBFcXVhbCkgfHwgKGNvbmQgPT0gTm90RXF1YWwp
KSAmJiAhcmlnaHQubV92YWx1ZSkgewogICAgICAgICAgICAgbV9hc3NlbWJsZXIudGVzdHFfcnIo
bGVmdCwgbGVmdCk7CiAgICAgICAgICAgICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5qQ0MoeDg2
Q29uZGl0aW9uKGNvbmQpKSk7CiAgICAgICAgIH0KICAgICAgICAgbW92ZShyaWdodCwgc2NyYXRj
aFJlZ2lzdGVyKTsKLSAgICAgICAgcmV0dXJuIGJyYW5jaFB0cihjb25kLCBsZWZ0LCBzY3JhdGNo
UmVnaXN0ZXIpOworICAgICAgICByZXR1cm4gYnJhbmNoNjQoY29uZCwgbGVmdCwgc2NyYXRjaFJl
Z2lzdGVyKTsKICAgICB9CiAKLSAgICBKdW1wIGJyYW5jaFB0cihSZWxhdGlvbmFsQ29uZGl0aW9u
IGNvbmQsIFJlZ2lzdGVySUQgbGVmdCwgQWRkcmVzcyByaWdodCkKKyAgICBKdW1wIGJyYW5jaDY0
KFJlbGF0aW9uYWxDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBsZWZ0LCBBZGRyZXNzIHJpZ2h0
KQogICAgIHsKICAgICAgICAgbV9hc3NlbWJsZXIuY21wcV9tcihyaWdodC5vZmZzZXQsIHJpZ2h0
LmJhc2UsIGxlZnQpOwogICAgICAgICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5qQ0MoeDg2Q29u
ZGl0aW9uKGNvbmQpKSk7CiAgICAgfQogCi0gICAgSnVtcCBicmFuY2hQdHIoUmVsYXRpb25hbENv
bmRpdGlvbiBjb25kLCBBYnNvbHV0ZUFkZHJlc3MgbGVmdCwgUmVnaXN0ZXJJRCByaWdodCkKKyAg
ICBKdW1wIGJyYW5jaDY0KFJlbGF0aW9uYWxDb25kaXRpb24gY29uZCwgQWJzb2x1dGVBZGRyZXNz
IGxlZnQsIFJlZ2lzdGVySUQgcmlnaHQpCiAgICAgewogICAgICAgICBtb3ZlKFRydXN0ZWRJbW1Q
dHIobGVmdC5tX3B0ciksIHNjcmF0Y2hSZWdpc3Rlcik7Ci0gICAgICAgIHJldHVybiBicmFuY2hQ
dHIoY29uZCwgQWRkcmVzcyhzY3JhdGNoUmVnaXN0ZXIpLCByaWdodCk7CisgICAgICAgIHJldHVy
biBicmFuY2g2NChjb25kLCBBZGRyZXNzKHNjcmF0Y2hSZWdpc3RlciksIHJpZ2h0KTsKICAgICB9
CiAKLSAgICBKdW1wIGJyYW5jaFB0cihSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIEFkZHJlc3Mg
bGVmdCwgUmVnaXN0ZXJJRCByaWdodCkKKyAgICBKdW1wIGJyYW5jaDY0KFJlbGF0aW9uYWxDb25k
aXRpb24gY29uZCwgQWRkcmVzcyBsZWZ0LCBSZWdpc3RlcklEIHJpZ2h0KQogICAgIHsKICAgICAg
ICAgbV9hc3NlbWJsZXIuY21wcV9ybShyaWdodCwgbGVmdC5vZmZzZXQsIGxlZnQuYmFzZSk7CiAg
ICAgICAgIHJldHVybiBKdW1wKG1fYXNzZW1ibGVyLmpDQyh4ODZDb25kaXRpb24oY29uZCkpKTsK
ICAgICB9CiAKLSAgICBKdW1wIGJyYW5jaFB0cihSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIEFk
ZHJlc3MgbGVmdCwgVHJ1c3RlZEltbVB0ciByaWdodCkKKyAgICBKdW1wIGJyYW5jaDY0KFJlbGF0
aW9uYWxDb25kaXRpb24gY29uZCwgQWRkcmVzcyBsZWZ0LCBUcnVzdGVkSW1tNjQgcmlnaHQpCiAg
ICAgewogICAgICAgICBtb3ZlKHJpZ2h0LCBzY3JhdGNoUmVnaXN0ZXIpOwotICAgICAgICByZXR1
cm4gYnJhbmNoUHRyKGNvbmQsIGxlZnQsIHNjcmF0Y2hSZWdpc3Rlcik7CisgICAgICAgIHJldHVy
biBicmFuY2g2NChjb25kLCBsZWZ0LCBzY3JhdGNoUmVnaXN0ZXIpOwogICAgIH0KIAotICAgIEp1
bXAgYnJhbmNoVGVzdFB0cihSZXN1bHRDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCByZWcsIFJl
Z2lzdGVySUQgbWFzaykKKyAgICBKdW1wIGJyYW5jaFRlc3Q2NChSZXN1bHRDb25kaXRpb24gY29u
ZCwgUmVnaXN0ZXJJRCByZWcsIFJlZ2lzdGVySUQgbWFzaykKICAgICB7CiAgICAgICAgIG1fYXNz
ZW1ibGVyLnRlc3RxX3JyKHJlZywgbWFzayk7CiAgICAgICAgIHJldHVybiBKdW1wKG1fYXNzZW1i
bGVyLmpDQyh4ODZDb25kaXRpb24oY29uZCkpKTsKICAgICB9CiAgICAgCi0gICAgSnVtcCBicmFu
Y2hUZXN0UHRyKFJlc3VsdENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIHJlZywgVHJ1c3RlZElt
bTMyIG1hc2sgPSBUcnVzdGVkSW1tMzIoLTEpKQorICAgIEp1bXAgYnJhbmNoVGVzdDY0KFJlc3Vs
dENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIHJlZywgVHJ1c3RlZEltbTMyIG1hc2sgPSBUcnVz
dGVkSW1tMzIoLTEpKQogICAgIHsKICAgICAgICAgLy8gaWYgd2UgYXJlIG9ubHkgaW50ZXJlc3Rl
ZCBpbiB0aGUgbG93IHNldmVuIGJpdHMsIHRoaXMgY2FuIGJlIHRlc3RlZCB3aXRoIGEgdGVzdGIK
ICAgICAgICAgaWYgKG1hc2subV92YWx1ZSA9PSAtMSkKQEAgLTQ2MCw3ICs3ODEsNyBAQCBwdWJs
aWM6CiAgICAgICAgIHJldHVybiBKdW1wKG1fYXNzZW1ibGVyLmpDQyh4ODZDb25kaXRpb24oY29u
ZCkpKTsKICAgICB9CiAKLSAgICB2b2lkIHRlc3RQdHIoUmVzdWx0Q29uZGl0aW9uIGNvbmQsIFJl
Z2lzdGVySUQgcmVnLCBUcnVzdGVkSW1tMzIgbWFzaywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHZv
aWQgdGVzdDY0KFJlc3VsdENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIHJlZywgVHJ1c3RlZElt
bTMyIG1hc2ssIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CiAgICAgICAgIGlmIChtYXNrLm1fdmFs
dWUgPT0gLTEpCiAgICAgICAgICAgICBtX2Fzc2VtYmxlci50ZXN0cV9ycihyZWcsIHJlZyk7CkBA
IC00NzEsMTkgKzc5MiwxOSBAQCBwdWJsaWM6CiAgICAgICAgIHNldDMyKHg4NkNvbmRpdGlvbihj
b25kKSwgZGVzdCk7CiAgICAgfQogCi0gICAgdm9pZCB0ZXN0UHRyKFJlc3VsdENvbmRpdGlvbiBj
b25kLCBSZWdpc3RlcklEIHJlZywgUmVnaXN0ZXJJRCBtYXNrLCBSZWdpc3RlcklEIGRlc3QpCisg
ICAgdm9pZCB0ZXN0NjQoUmVzdWx0Q29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgcmVnLCBSZWdp
c3RlcklEIG1hc2ssIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CiAgICAgICAgIG1fYXNzZW1ibGVy
LnRlc3RxX3JyKHJlZywgbWFzayk7CiAgICAgICAgIHNldDMyKHg4NkNvbmRpdGlvbihjb25kKSwg
ZGVzdCk7CiAgICAgfQogCi0gICAgSnVtcCBicmFuY2hUZXN0UHRyKFJlc3VsdENvbmRpdGlvbiBj
b25kLCBBYnNvbHV0ZUFkZHJlc3MgYWRkcmVzcywgVHJ1c3RlZEltbTMyIG1hc2sgPSBUcnVzdGVk
SW1tMzIoLTEpKQorICAgIEp1bXAgYnJhbmNoVGVzdDY0KFJlc3VsdENvbmRpdGlvbiBjb25kLCBB
YnNvbHV0ZUFkZHJlc3MgYWRkcmVzcywgVHJ1c3RlZEltbTMyIG1hc2sgPSBUcnVzdGVkSW1tMzIo
LTEpKQogICAgIHsKLSAgICAgICAgbG9hZFB0cihhZGRyZXNzLm1fcHRyLCBzY3JhdGNoUmVnaXN0
ZXIpOwotICAgICAgICByZXR1cm4gYnJhbmNoVGVzdFB0cihjb25kLCBzY3JhdGNoUmVnaXN0ZXIs
IG1hc2spOworICAgICAgICBsb2FkNjQoYWRkcmVzcy5tX3B0ciwgc2NyYXRjaFJlZ2lzdGVyKTsK
KyAgICAgICAgcmV0dXJuIGJyYW5jaFRlc3Q2NChjb25kLCBzY3JhdGNoUmVnaXN0ZXIsIG1hc2sp
OwogICAgIH0KIAotICAgIEp1bXAgYnJhbmNoVGVzdFB0cihSZXN1bHRDb25kaXRpb24gY29uZCwg
QWRkcmVzcyBhZGRyZXNzLCBUcnVzdGVkSW1tMzIgbWFzayA9IFRydXN0ZWRJbW0zMigtMSkpCisg
ICAgSnVtcCBicmFuY2hUZXN0NjQoUmVzdWx0Q29uZGl0aW9uIGNvbmQsIEFkZHJlc3MgYWRkcmVz
cywgVHJ1c3RlZEltbTMyIG1hc2sgPSBUcnVzdGVkSW1tMzIoLTEpKQogICAgIHsKICAgICAgICAg
aWYgKG1hc2subV92YWx1ZSA9PSAtMSkKICAgICAgICAgICAgIG1fYXNzZW1ibGVyLmNtcHFfaW0o
MCwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSk7CkBAIC00OTIsMTMgKzgxMywxMyBAQCBw
dWJsaWM6CiAgICAgICAgIHJldHVybiBKdW1wKG1fYXNzZW1ibGVyLmpDQyh4ODZDb25kaXRpb24o
Y29uZCkpKTsKICAgICB9CiAKLSAgICBKdW1wIGJyYW5jaFRlc3RQdHIoUmVzdWx0Q29uZGl0aW9u
IGNvbmQsIEFkZHJlc3MgYWRkcmVzcywgUmVnaXN0ZXJJRCByZWcpCisgICAgSnVtcCBicmFuY2hU
ZXN0NjQoUmVzdWx0Q29uZGl0aW9uIGNvbmQsIEFkZHJlc3MgYWRkcmVzcywgUmVnaXN0ZXJJRCBy
ZWcpCiAgICAgewogICAgICAgICBtX2Fzc2VtYmxlci50ZXN0cV9ybShyZWcsIGFkZHJlc3Mub2Zm
c2V0LCBhZGRyZXNzLmJhc2UpOwogICAgICAgICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5qQ0Mo
eDg2Q29uZGl0aW9uKGNvbmQpKSk7CiAgICAgfQogCi0gICAgSnVtcCBicmFuY2hUZXN0UHRyKFJl
c3VsdENvbmRpdGlvbiBjb25kLCBCYXNlSW5kZXggYWRkcmVzcywgVHJ1c3RlZEltbTMyIG1hc2sg
PSBUcnVzdGVkSW1tMzIoLTEpKQorICAgIEp1bXAgYnJhbmNoVGVzdDY0KFJlc3VsdENvbmRpdGlv
biBjb25kLCBCYXNlSW5kZXggYWRkcmVzcywgVHJ1c3RlZEltbTMyIG1hc2sgPSBUcnVzdGVkSW1t
MzIoLTEpKQogICAgIHsKICAgICAgICAgaWYgKG1hc2subV92YWx1ZSA9PSAtMSkKICAgICAgICAg
ICAgIG1fYXNzZW1ibGVyLmNtcHFfaW0oMCwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSwg
YWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZSk7CkBAIC01MDgsNTkgKzgyOSw1OSBAQCBwdWJs
aWM6CiAgICAgfQogCiAKLSAgICBKdW1wIGJyYW5jaEFkZFB0cihSZXN1bHRDb25kaXRpb24gY29u
ZCwgVHJ1c3RlZEltbTMyIGltbSwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIEp1bXAgYnJhbmNoQWRk
NjQoUmVzdWx0Q29uZGl0aW9uIGNvbmQsIFRydXN0ZWRJbW0zMiBpbW0sIFJlZ2lzdGVySUQgZGVz
dCkKICAgICB7Ci0gICAgICAgIGFkZFB0cihpbW0sIGRlc3QpOworICAgICAgICBhZGQ2NChpbW0s
IGRlc3QpOwogICAgICAgICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5qQ0MoeDg2Q29uZGl0aW9u
KGNvbmQpKSk7CiAgICAgfQogCi0gICAgSnVtcCBicmFuY2hBZGRQdHIoUmVzdWx0Q29uZGl0aW9u
IGNvbmQsIFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgSnVtcCBicmFuY2hB
ZGQ2NChSZXN1bHRDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVz
dCkKICAgICB7Ci0gICAgICAgIGFkZFB0cihzcmMsIGRlc3QpOworICAgICAgICBhZGQ2NChzcmMs
IGRlc3QpOwogICAgICAgICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5qQ0MoeDg2Q29uZGl0aW9u
KGNvbmQpKSk7CiAgICAgfQogCi0gICAgSnVtcCBicmFuY2hTdWJQdHIoUmVzdWx0Q29uZGl0aW9u
IGNvbmQsIFRydXN0ZWRJbW0zMiBpbW0sIFJlZ2lzdGVySUQgZGVzdCkKKyAgICBKdW1wIGJyYW5j
aFN1YjY0KFJlc3VsdENvbmRpdGlvbiBjb25kLCBUcnVzdGVkSW1tMzIgaW1tLCBSZWdpc3RlcklE
IGRlc3QpCiAgICAgewotICAgICAgICBzdWJQdHIoaW1tLCBkZXN0KTsKKyAgICAgICAgc3ViNjQo
aW1tLCBkZXN0KTsKICAgICAgICAgcmV0dXJuIEp1bXAobV9hc3NlbWJsZXIuakNDKHg4NkNvbmRp
dGlvbihjb25kKSkpOwogICAgIH0KIAotICAgIEp1bXAgYnJhbmNoU3ViUHRyKFJlc3VsdENvbmRp
dGlvbiBjb25kLCBSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIEp1bXAgYnJh
bmNoU3ViNjQoUmVzdWx0Q29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklE
IGRlc3QpCiAgICAgewotICAgICAgICBzdWJQdHIoc3JjLCBkZXN0KTsKKyAgICAgICAgc3ViNjQo
c3JjLCBkZXN0KTsKICAgICAgICAgcmV0dXJuIEp1bXAobV9hc3NlbWJsZXIuakNDKHg4NkNvbmRp
dGlvbihjb25kKSkpOwogICAgIH0KIAotICAgIEp1bXAgYnJhbmNoU3ViUHRyKFJlc3VsdENvbmRp
dGlvbiBjb25kLCBSZWdpc3RlcklEIHNyYzEsIFRydXN0ZWRJbW0zMiBzcmMyLCBSZWdpc3RlcklE
IGRlc3QpCisgICAgSnVtcCBicmFuY2hTdWI2NChSZXN1bHRDb25kaXRpb24gY29uZCwgUmVnaXN0
ZXJJRCBzcmMxLCBUcnVzdGVkSW1tMzIgc3JjMiwgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKICAg
ICAgICAgbW92ZShzcmMxLCBkZXN0KTsKLSAgICAgICAgcmV0dXJuIGJyYW5jaFN1YlB0cihjb25k
LCBzcmMyLCBkZXN0KTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaFN1YjY0KGNvbmQsIHNyYzIsIGRl
c3QpOwogICAgIH0KIAotICAgIERhdGFMYWJlbFB0ciBtb3ZlV2l0aFBhdGNoKFRydXN0ZWRJbW1Q
dHIgaW5pdGlhbFZhbHVlLCBSZWdpc3RlcklEIGRlc3QpCisgICAgRGF0YUxhYmVsUHRyIG1vdmVX
aXRoUGF0Y2goVHJ1c3RlZEltbTY0IGluaXRpYWxWYWx1ZSwgUmVnaXN0ZXJJRCBkZXN0KQogICAg
IHsKICAgICAgICAgcGFkQmVmb3JlUGF0Y2goKTsKLSAgICAgICAgbV9hc3NlbWJsZXIubW92cV9p
NjRyKGluaXRpYWxWYWx1ZS5hc0ludHB0cigpLCBkZXN0KTsKKyAgICAgICAgbV9hc3NlbWJsZXIu
bW92cV9pNjRyKGluaXRpYWxWYWx1ZS5tX3ZhbHVlLCBkZXN0KTsKICAgICAgICAgcmV0dXJuIERh
dGFMYWJlbFB0cih0aGlzKTsKICAgICB9CiAKLSAgICBKdW1wIGJyYW5jaFB0cldpdGhQYXRjaChS
ZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgbGVmdCwgRGF0YUxhYmVsUHRyJiBk
YXRhTGFiZWwsIFRydXN0ZWRJbW1QdHIgaW5pdGlhbFJpZ2h0VmFsdWUgPSBUcnVzdGVkSW1tUHRy
KDApKQorICAgIEp1bXAgYnJhbmNoNjRXaXRoUGF0Y2goUmVsYXRpb25hbENvbmRpdGlvbiBjb25k
LCBSZWdpc3RlcklEIGxlZnQsIERhdGFMYWJlbFB0ciYgZGF0YUxhYmVsLCBUcnVzdGVkSW1tNjQg
aW5pdGlhbFJpZ2h0VmFsdWUgPSBUcnVzdGVkSW1tNjQoKGludDY0X3QpMCkpCiAgICAgewogICAg
ICAgICBkYXRhTGFiZWwgPSBtb3ZlV2l0aFBhdGNoKGluaXRpYWxSaWdodFZhbHVlLCBzY3JhdGNo
UmVnaXN0ZXIpOwotICAgICAgICByZXR1cm4gYnJhbmNoUHRyKGNvbmQsIGxlZnQsIHNjcmF0Y2hS
ZWdpc3Rlcik7CisgICAgICAgIHJldHVybiBicmFuY2g2NChjb25kLCBsZWZ0LCBzY3JhdGNoUmVn
aXN0ZXIpOwogICAgIH0KIAotICAgIEp1bXAgYnJhbmNoUHRyV2l0aFBhdGNoKFJlbGF0aW9uYWxD
b25kaXRpb24gY29uZCwgQWRkcmVzcyBsZWZ0LCBEYXRhTGFiZWxQdHImIGRhdGFMYWJlbCwgVHJ1
c3RlZEltbVB0ciBpbml0aWFsUmlnaHRWYWx1ZSA9IFRydXN0ZWRJbW1QdHIoMCkpCisgICAgSnVt
cCBicmFuY2g2NFdpdGhQYXRjaChSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIEFkZHJlc3MgbGVm
dCwgRGF0YUxhYmVsUHRyJiBkYXRhTGFiZWwsIFRydXN0ZWRJbW02NCBpbml0aWFsUmlnaHRWYWx1
ZSA9IFRydXN0ZWRJbW02NCgoaW50NjRfdCkwKSkKICAgICB7CiAgICAgICAgIGRhdGFMYWJlbCA9
IG1vdmVXaXRoUGF0Y2goaW5pdGlhbFJpZ2h0VmFsdWUsIHNjcmF0Y2hSZWdpc3Rlcik7Ci0gICAg
ICAgIHJldHVybiBicmFuY2hQdHIoY29uZCwgbGVmdCwgc2NyYXRjaFJlZ2lzdGVyKTsKKyAgICAg
ICAgcmV0dXJuIGJyYW5jaDY0KGNvbmQsIGxlZnQsIHNjcmF0Y2hSZWdpc3Rlcik7CiAgICAgfQog
Ci0gICAgRGF0YUxhYmVsUHRyIHN0b3JlUHRyV2l0aFBhdGNoKFRydXN0ZWRJbW1QdHIgaW5pdGlh
bFZhbHVlLCBJbXBsaWNpdEFkZHJlc3MgYWRkcmVzcykKKyAgICBEYXRhTGFiZWxQdHIgc3RvcmU2
NFdpdGhQYXRjaChUcnVzdGVkSW1tNjQgaW5pdGlhbFZhbHVlLCBJbXBsaWNpdEFkZHJlc3MgYWRk
cmVzcykKICAgICB7CiAgICAgICAgIERhdGFMYWJlbFB0ciBsYWJlbCA9IG1vdmVXaXRoUGF0Y2go
aW5pdGlhbFZhbHVlLCBzY3JhdGNoUmVnaXN0ZXIpOwotICAgICAgICBzdG9yZVB0cihzY3JhdGNo
UmVnaXN0ZXIsIGFkZHJlc3MpOworICAgICAgICBzdG9yZTY0KHNjcmF0Y2hSZWdpc3RlciwgYWRk
cmVzcyk7CiAgICAgICAgIHJldHVybiBsYWJlbDsKICAgICB9CiAK
</data>
<flag name="review"
          id="181593"
          type_id="1"
          status="-"
          setter="barraclough"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>168840</attachid>
            <date>2012-10-15 19:20:47 -0700</date>
            <delta_ts>2012-10-15 20:47:14 -0700</delta_ts>
            <desc>Updated: Split patch - part1: add the*64 interfaces to MacroAssemblerX86_64</desc>
            <filename>99154.3.patch</filename>
            <type>text/plain</type>
            <size>40516</size>
            <attacher name="Yuqiang Xian">yuqiang.xian</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTMxMzk3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwNyBA
QAorMjAxMi0xMC0xNSAgWXVxaWFuZyBYaWFuICA8eXVxaWFuZy54aWFuQGludGVsLmNvbT4KKwor
ICAgICAgICBSZWZhY3RvciBNYWNyb0Fzc2VtYmxlciBpbnRlcmZhY2VzIHRvIGRpZmZlcmVudGlh
dGUgdGhlIHBvaW50ZXIgb3BlcmFuZHMgZnJvbSB0aGUgNjQtYml0IGludGVnZXIgb3BlcmFuZHMK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk5MTU0CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW4gY3VycmVu
dCBKYXZhU2NyaXB0Q29yZSBpbXBsZW1lbnRhdGlvbiBmb3IgSlNWQUxVRTY0IHBsYXRmb3JtIChp
LmUuLAorICAgICAgICB0aGUgWDY0IHBsYXRmb3JtKSwgd2UgYXNzdW1lIHRoYXQgdGhlIEpTVmFs
dWUgc2l6ZSBpcyBzYW1lIHRvIHRoZQorICAgICAgICBwb2ludGVyIHNpemUsIGFuZCB0aHVzIEVu
Y29kZWRKU1ZhbHVlIGlzIHNpbXBseSB0eXBlIGRlZmluZWQgYXMgYQorICAgICAgICAidm9pZCoi
LiBJbiB0aGUgSklUIGNvbXBpbGVyLCB3ZSBhbHNvIHRha2UgdGhpcyBhc3N1bXB0aW9uIGFuZCBp
bnZva2UKKyAgICAgICAgdGhlIHNhbWUgbWFjcm8gYXNzZW1ibGVyIGludGVyZmFjZXMgZm9yIGJv
dGggSlNWYWx1ZSBhbmQgcG9pbnRlcgorICAgICAgICBvcGVyYW5kcy4gV2UgbmVlZCB0byBkaWZm
ZXJlbnRpYXRlIHRoZSBvcGVyYXRpb25zIG9uIHBvaW50ZXJzIGZyb20gdGhlCisgICAgICAgIG9w
ZXJhdGlvbnMgb24gSlNWYWx1ZXMsIGFuZCBsZXQgdGhlbSBpbnZva2luZyBkaWZmZXJlbnQgbWFj
cm8KKyAgICAgICAgYXNzZW1ibGVyIGludGVyZmFjZXMuIEZvciBleGFtcGxlLCB3ZSBub3cgdXNl
IHRoZSBpbnRlcmZhY2Ugb2YKKyAgICAgICAgImxvYWRQdHIiIHRvIGxvYWQgZWl0aGVyIGEgcG9p
bnRlciBvciBhIEpTVmFsdWUsIGFuZCB3ZSBuZWVkIHRvIHN3aXRjaAorICAgICAgICB0byB1c2lu
ZyAibG9hZFB0ciIgdG8gbG9hZCBhIHBvaW50ZXIgYW5kIHNvbWUgbmV3ICJsb2FkNjQiIGludGVy
ZmFjZQorICAgICAgICB0byBsb2FkIGEgSlNWYWx1ZS4gVGhpcyB3b3VsZCBoZWxwIHVzIHN1cHBv
cnRpbmcgb3RoZXIgSlNWQUxVRTY0CisgICAgICAgIHBsYXRmb3JtcyB3aGVyZSBwb2ludGVyIHNp
emUgaXMgbm90IG5lY2Vzc2FyaWx5IDY0LWJpdHMsIGZvciBleGFtcGxlCisgICAgICAgIHgzMiAo
YnVnICM5OTE1MykuCisKKyAgICAgICAgVGhlIG1ham9yIG1vZGlmaWNhdGlvbiBJIG1hZGUgaXMg
dG8gaW50cm9kdWNlIHRoZSAiKjY0IiBpbnRlcmZhY2VzIGluCisgICAgICAgIHRoZSBNYWNyb0Fz
c2VtYmxlciBmb3IgdGhvc2Ugb3BlcmF0aW9ucyBvbiBKU1ZhbHVlcywga2VlcCB0aGUgIipQdHIi
CisgICAgICAgIGludGVyZmFjZXMgZm9yIHRob3NlIG9wZXJhdGlvbnMgb24gcmVhbCBwb2ludGVy
cywgYW5kIGdvIHRocm91Z2ggYWxsCisgICAgICAgIHRoZSBKSVQgY29tcGlsZXIgY29kZSB0byBj
b3JyZWN0IHRoZSB1c2FnZS4KKworICAgICAgICBUaGlzIGlzIHRoZSBmaXJzdCBwYXJ0IG9mIHRo
ZSB3b3JrLCBpLmUsIHRvIGFkZCB0aGUgKjY0IGludGVyZmFjZXMgdG8KKyAgICAgICAgdGhlIE1h
Y3JvQXNzZW1ibGVyLgorCisgICAgICAgICogYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJs
ZXIuaDogQWRkIHRoZSBJbW02NCBpbnRlcmZhY2VzLgorICAgICAgICAoQWJzdHJhY3RNYWNyb0Fz
c2VtYmxlcik6CisgICAgICAgIChKU0M6OkFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW02NDo6VHJ1c3RlZEltbTY0KToKKyAgICAgICAgKFRydXN0ZWRJbW02NCk6CisgICAgICAgIChK
U0M6OkFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6OkltbTY0OjpJbW02NCk6CisgICAgICAgIChJbW02
NCk6CisgICAgICAgIChKU0M6OkFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6OkltbTY0Ojphc1RydXN0
ZWRJbW02NCk6CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmg6IE1hcCB0aGUg
PGZvbz5QdHIgbWV0aG9kcyB0byA8Zm9vPjY0IG1ldGhvZHMgZm9yIFg4Nl82NC4KKyAgICAgICAg
QWRkIHRoZSBCbGluZCBpbnRlcmZhY2VzIGZvciA2NC1iaXQgaW50ZWdlcnMuCisgICAgICAgIChN
YWNyb0Fzc2VtYmxlcik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyOjpwZWVrNjQpOgor
ICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlcjo6cG9rZSk6CisgICAgICAgIChKU0M6Ok1hY3Jv
QXNzZW1ibGVyOjpwb2tlNjQpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlcjo6YWRkUHRy
KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXI6OmFuZFB0cik6CisgICAgICAgIChKU0M6
Ok1hY3JvQXNzZW1ibGVyOjpuZWdQdHIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlcjo6
b3JQdHIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlcjo6cm90YXRlUmlnaHRQdHIpOgor
ICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlcjo6c3ViUHRyKToKKyAgICAgICAgKEpTQzo6TWFj
cm9Bc3NlbWJsZXI6OnhvclB0cik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyOjpsb2Fk
UHRyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXI6OmxvYWRQdHJXaXRoQWRkcmVzc09m
ZnNldFBhdGNoKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXI6OmxvYWRQdHJXaXRoQ29t
cGFjdEFkZHJlc3NPZmZzZXRQYXRjaCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyOjpz
dG9yZVB0cik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyOjpzdG9yZVB0cldpdGhBZGRy
ZXNzT2Zmc2V0UGF0Y2gpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlcjo6bW92ZVB0clRv
RG91YmxlKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXI6Om1vdmVEb3VibGVUb1B0cik6
CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyOjpjb21wYXJlUHRyKToKKyAgICAgICAgKEpT
Qzo6TWFjcm9Bc3NlbWJsZXI6OmJyYW5jaFB0cik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1i
bGVyOjpicmFuY2hUZXN0UHRyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXI6OnRlc3RQ
dHIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlcjo6Y29udmVydGlibGVMb2FkUHRyKToK
KyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXI6OmJyYW5jaEFkZFB0cik6CisgICAgICAgIChK
U0M6Ok1hY3JvQXNzZW1ibGVyOjpicmFuY2hTdWJQdHIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fz
c2VtYmxlcjo6YnJhbmNoUHRyV2l0aFBhdGNoKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJs
ZXI6OnN0b3JlUHRyV2l0aFBhdGNoKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXI6OnNo
b3VsZEJsaW5kRG91YmxlKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXI6OnNob3VsZEJs
aW5kKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXI6OlJvdGF0ZWRJbW02NDo6Um90YXRl
ZEltbTY0KToKKyAgICAgICAgKFJvdGF0ZWRJbW02NCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNz
ZW1ibGVyOjpyb3RhdGlvbkJsaW5kQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2Vt
Ymxlcjo6bG9hZFJvdGF0aW9uQmxpbmRlZENvbnN0YW50KToKKyAgICAgICAgKEpTQzo6TWFjcm9B
c3NlbWJsZXI6Om1vdmUpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlcjo6YW5kNjQpOgor
ICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlcjo6c3RvcmU2NCk6CisgICAgICAgICogYXNzZW1i
bGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1i
bGVyWDg2Q29tbW9uOjpzaG91bGRCbGluZEZvclNwZWNpZmljQXJjaCk6CisgICAgICAgIChNYWNy
b0Fzc2VtYmxlclg4NkNvbW1vbik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2Q29t
bW9uOjptb3ZlKToKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaDog
QWRkIHRoZSA8Zm9vPjY0IG1ldGhvZHMuCisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2
XzY0Ojptb3ZlV2l0aFBhdGNoKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJYODZfNjQ6
OmJyYW5jaEFkZDMyKToKKyAgICAgICAgKE1hY3JvQXNzZW1ibGVyWDg2XzY0KToKKyAgICAgICAg
KEpTQzo6TWFjcm9Bc3NlbWJsZXJYODZfNjQ6OmFkZDY0KToKKyAgICAgICAgKEpTQzo6TWFjcm9B
c3NlbWJsZXJYODZfNjQ6OmFuZDY0KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJYODZf
NjQ6Om5lZzY0KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJYODZfNjQ6Om9yNjQpOgor
ICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4Nl82NDo6cm90YXRlUmlnaHQ2NCk6CisgICAg
ICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0OjpzdWI2NCk6CisgICAgICAgIChKU0M6Ok1h
Y3JvQXNzZW1ibGVyWDg2XzY0Ojp4b3I2NCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVy
WDg2XzY0Ojpsb2FkNjQpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4Nl82NDo6Y29u
dmVydGlibGVMb2FkNjQpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4Nl82NDo6bG9h
ZDY0V2l0aEFkZHJlc3NPZmZzZXRQYXRjaCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVy
WDg2XzY0Ojpsb2FkNjRXaXRoQ29tcGFjdEFkZHJlc3NPZmZzZXRQYXRjaCk6CisgICAgICAgIChK
U0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0OjpzdG9yZTY0KToKKyAgICAgICAgKEpTQzo6TWFjcm9B
c3NlbWJsZXJYODZfNjQ6OnN0b3JlNjRXaXRoQWRkcmVzc09mZnNldFBhdGNoKToKKyAgICAgICAg
KEpTQzo6TWFjcm9Bc3NlbWJsZXJYODZfNjQ6Om1vdmU2NFRvRG91YmxlKToKKyAgICAgICAgKEpT
Qzo6TWFjcm9Bc3NlbWJsZXJYODZfNjQ6Om1vdmVEb3VibGVUbzY0KToKKyAgICAgICAgKEpTQzo6
TWFjcm9Bc3NlbWJsZXJYODZfNjQ6OmNvbXBhcmU2NCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNz
ZW1ibGVyWDg2XzY0OjpicmFuY2g2NCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2
XzY0OjpicmFuY2hUZXN0NjQpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4Nl82NDo6
dGVzdDY0KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJYODZfNjQ6OmJyYW5jaEFkZDY0
KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJYODZfNjQ6OmJyYW5jaFN1YjY0KToKKwog
MjAxMi0xMC0xNSAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgogCiAg
ICAgICAgIE1ha2UgQ29waWVkU3BhY2UgYW5kIE1hcmtlZFNwYWNlIHJlZ2lvbnMgaW5kZXBlbmRl
bnQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fz
c2VtYmxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
QWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oCShyZXZpc2lvbiAxMzEzOTYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtMjYxLDYgKzI2MSw1MCBAQCBwdWJsaWM6CiAKICAgICB9OwogICAgIAorICAgIC8v
IFRydXN0ZWRJbW02NDoKKyAgICAvLworICAgIC8vIEEgNjRiaXQgaW1tZWRpYXRlIG9wZXJhbmQg
dG8gYW4gaW5zdHJ1Y3Rpb24gLSB0aGlzIGlzIHdyYXBwZWQgaW4gYQorICAgIC8vIGNsYXNzIHJl
cXVpcmluZyBleHBsaWNpdCBjb25zdHJ1Y3Rpb24gaW4gb3JkZXIgdG8gcHJldmVudCBSZWdpc3Rl
cklEcworICAgIC8vICh3aGljaCBhcmUgaW1wbGVtZW50ZWQgYXMgYW4gZW51bSkgZnJvbSBhY2Np
ZGVudGFsbHkgYmVpbmcgcGFzc2VkIGFzCisgICAgLy8gaW1tZWRpYXRlIHZhbHVlcy4KKyAgICBz
dHJ1Y3QgVHJ1c3RlZEltbTY0IHsKKyAgICAgICAgVHJ1c3RlZEltbTY0KCkgeyB9CisgICAgICAg
IAorICAgICAgICBleHBsaWNpdCBUcnVzdGVkSW1tNjQoaW50NjRfdCB2YWx1ZSkKKyAgICAgICAg
ICAgIDogbV92YWx1ZSh2YWx1ZSkKKyAgICAgICAgeworICAgICAgICB9CisKKyNpZiBDUFUoWDg2
XzY0KQorICAgICAgICBleHBsaWNpdCBUcnVzdGVkSW1tNjQoVHJ1c3RlZEltbVB0ciBwdHIpCisg
ICAgICAgICAgICA6IG1fdmFsdWUocHRyLmFzSW50cHRyKCkpCisgICAgICAgIHsKKyAgICAgICAg
fQorI2VuZGlmCisKKyAgICAgICAgaW50NjRfdCBtX3ZhbHVlOworICAgIH07CisKKyAgICBzdHJ1
Y3QgSW1tNjQgOiAKKyNpZiBFTkFCTEUoSklUX0NPTlNUQU5UX0JMSU5ESU5HKQorICAgICAgICBw
cml2YXRlIFRydXN0ZWRJbW02NCAKKyNlbHNlCisgICAgICAgIHB1YmxpYyBUcnVzdGVkSW1tNjQK
KyNlbmRpZgorICAgIHsKKyAgICAgICAgZXhwbGljaXQgSW1tNjQoaW50NjRfdCB2YWx1ZSkKKyAg
ICAgICAgICAgIDogVHJ1c3RlZEltbTY0KHZhbHVlKQorICAgICAgICB7CisgICAgICAgIH0KKyNp
ZiBDUFUoWDg2XzY0KQorICAgICAgICBleHBsaWNpdCBJbW02NChUcnVzdGVkSW1tUHRyIHB0cikK
KyAgICAgICAgICAgIDogVHJ1c3RlZEltbTY0KHB0cikKKyAgICAgICAgeworICAgICAgICB9Cisj
ZW5kaWYKKyAgICAgICAgY29uc3QgVHJ1c3RlZEltbTY0JiBhc1RydXN0ZWRJbW02NCgpIGNvbnN0
IHsgcmV0dXJuICp0aGlzOyB9CisgICAgfTsKKyAgICAKICAgICAvLyBTZWN0aW9uIDI6IE1hY3Jv
QXNzZW1ibGVyIGNvZGUgYnVmZmVyIGhhbmRsZXMKICAgICAvLwogICAgIC8vIFRoZSBmb2xsb3dp
bmcgdHlwZXMgYXJlIHVzZWQgdG8gcmVmZXJlbmNlIGl0ZW1zIGluIHRoZSBjb2RlIGJ1ZmZlcgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJs
ZXIuaAkocmV2aXNpb24gMTMxMzk2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9NYWNyb0Fzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC03MCwxMCArNzAsNiBAQCBwdWJs
aWM6CiAgICAgdXNpbmcgTWFjcm9Bc3NlbWJsZXJCYXNlOjpwb3A7CiAgICAgdXNpbmcgTWFjcm9B
c3NlbWJsZXJCYXNlOjpqdW1wOwogICAgIHVzaW5nIE1hY3JvQXNzZW1ibGVyQmFzZTo6YnJhbmNo
MzI7Ci0jaWYgQ1BVKFg4Nl82NCkKLSAgICB1c2luZyBNYWNyb0Fzc2VtYmxlckJhc2U6OmJyYW5j
aFB0cjsKLSAgICB1c2luZyBNYWNyb0Fzc2VtYmxlckJhc2U6OmJyYW5jaFRlc3RQdHI7Ci0jZW5k
aWYKICAgICB1c2luZyBNYWNyb0Fzc2VtYmxlckJhc2U6Om1vdmU7CiAKICNpZiBFTkFCTEUoSklU
X0NPTlNUQU5UX0JMSU5ESU5HKQpAQCAtMTg3LDYgKzE4MywyMyBAQCBwdWJsaWM6CiAgICAgICAg
IHN0b3JlUHRyKGltbSwgYWRkcmVzc0ZvclBva2UoaW5kZXgpKTsKICAgICB9CiAKKyNpZiBDUFUo
WDg2XzY0KQorICAgIHZvaWQgcGVlazY0KFJlZ2lzdGVySUQgZGVzdCwgaW50IGluZGV4ID0gMCkK
KyAgICB7CisgICAgICAgIGxvYWQ2NChBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCAoaW5k
ZXggKiBzaXplb2Yodm9pZCopKSksIGRlc3QpOworICAgIH0KKworICAgIHZvaWQgcG9rZShUcnVz
dGVkSW1tNjQgdmFsdWUsIGludCBpbmRleCA9IDApCisgICAgeworICAgICAgICBzdG9yZTY0KHZh
bHVlLCBhZGRyZXNzRm9yUG9rZShpbmRleCkpOworICAgIH0KKworICAgIHZvaWQgcG9rZTY0KFJl
Z2lzdGVySUQgc3JjLCBpbnQgaW5kZXggPSAwKQorICAgIHsKKyAgICAgICAgc3RvcmU2NChzcmMs
IGFkZHJlc3NGb3JQb2tlKGluZGV4KSk7CisgICAgfQorI2VuZGlmCisgICAgCiAKICAgICAvLyBC
YWNrd2FyZHMgYmFuY2hlcywgdGhlc2UgYXJlIGN1cnJlbnRseSBhbGwgaW1wbGVtZW50ZWQgdXNp
bmcgZXhpc3RpbmcgZm9yd2FyZHMgYnJhbmNoIG1lY2hhbmlzbXMuCiAgICAgdm9pZCBicmFuY2hQ
dHIoUmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIG9wMSwgVHJ1c3RlZEltbVB0
ciBpbW0sIExhYmVsIHRhcmdldCkKQEAgLTU0NSwxNSArNTU4LDMyMyBAQCBwdWJsaWM6CiAgICAg
ICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckJhc2U6OmJyYW5jaFRlc3Q4KGNvbmQsIEFkZHJlc3Mo
YWRkcmVzcy5iYXNlLCBhZGRyZXNzLm9mZnNldCksIG1hc2spOwogICAgIH0KICNlbHNlCisgICAg
dm9pZCBhZGRQdHIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAg
ICAgIGFkZDY0KHNyYywgZGVzdCk7CisgICAgfQorICAgIAorICAgIHZvaWQgYWRkUHRyKEFkZHJl
c3Mgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBhZGQ2NChzcmMsIGRlc3Qp
OworICAgIH0KKworICAgIHZvaWQgYWRkUHRyKFRydXN0ZWRJbW0zMiBpbW0sIFJlZ2lzdGVySUQg
c3JjRGVzdCkKKyAgICB7CisgICAgICAgIGFkZDY0KGltbSwgc3JjRGVzdCk7CisgICAgfQorCisg
ICAgdm9pZCBhZGRQdHIoVHJ1c3RlZEltbTMyIGltbSwgUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVy
SUQgZGVzdCkKKyAgICB7CisgICAgICAgIGFkZDY0KGltbSwgc3JjLCBkZXN0KTsKKyAgICB9CisK
KyAgICB2b2lkIGFkZFB0cihUcnVzdGVkSW1tMzIgaW1tLCBBZGRyZXNzIGFkZHJlc3MpCisgICAg
eworICAgICAgICBhZGQ2NChpbW0sIGFkZHJlc3MpOworICAgIH0KKworICAgIHZvaWQgYW5kUHRy
KFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBhbmQ2NChz
cmMsIGRlc3QpOworICAgIH0KKworICAgIHZvaWQgYW5kUHRyKFRydXN0ZWRJbW0zMiBpbW0sIFJl
Z2lzdGVySUQgc3JjRGVzdCkKKyAgICB7CisgICAgICAgIGFuZDY0KGltbSwgc3JjRGVzdCk7Cisg
ICAgfQorICAgIAorICAgIHZvaWQgbmVnUHRyKFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAg
ICAgIG5lZzY0KGRlc3QpOworICAgIH0KKworICAgIHZvaWQgb3JQdHIoUmVnaXN0ZXJJRCBzcmMs
IFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG9yNjQoc3JjLCBkZXN0KTsKKyAgICB9
CisKKyAgICB2b2lkIG9yUHRyKFRydXN0ZWRJbW0zMiBpbW0sIFJlZ2lzdGVySUQgZGVzdCkKKyAg
ICB7CisgICAgICAgIG9yNjQoaW1tLCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIHJvdGF0ZVJp
Z2h0UHRyKFRydXN0ZWRJbW0zMiBpbW0sIFJlZ2lzdGVySUQgc3JjRHN0KQorICAgIHsKKyAgICAg
ICAgcm90YXRlUmlnaHQ2NChpbW0sIHNyY0RzdCk7CisgICAgfQorCisgICAgdm9pZCBzdWJQdHIo
UmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIHN1YjY0KHNy
YywgZGVzdCk7CisgICAgfQorICAgIAorICAgIHZvaWQgc3ViUHRyKFRydXN0ZWRJbW0zMiBpbW0s
IFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIHN1YjY0KGltbSwgZGVzdCk7CisgICAg
fQorICAgIAorICAgIHZvaWQgeG9yUHRyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3Qp
CisgICAgeworICAgICAgICB4b3I2NChzcmMsIGRlc3QpOworICAgIH0KKyAgICAKKyAgICB2b2lk
IHhvclB0cihSZWdpc3RlcklEIHNyYywgQWRkcmVzcyBkZXN0KQorICAgIHsKKyAgICAgICAgeG9y
NjQoc3JjLCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIHhvclB0cihUcnVzdGVkSW1tMzIgaW1t
LCBSZWdpc3RlcklEIHNyY0Rlc3QpCisgICAgeworICAgICAgICB4b3I2NChpbW0sIHNyY0Rlc3Qp
OworICAgIH0KKworICAgIHZvaWQgbG9hZFB0cihJbXBsaWNpdEFkZHJlc3MgYWRkcmVzcywgUmVn
aXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbG9hZDY0KGFkZHJlc3MsIGRlc3QpOworICAg
IH0KKworICAgIHZvaWQgbG9hZFB0cihCYXNlSW5kZXggYWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0
KQorICAgIHsKKyAgICAgICAgbG9hZDY0KGFkZHJlc3MsIGRlc3QpOworICAgIH0KKworICAgIHZv
aWQgbG9hZFB0cihjb25zdCB2b2lkKiBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3QpCisgICAgewor
ICAgICAgICBsb2FkNjQoYWRkcmVzcywgZGVzdCk7CisgICAgfQorCisgICAgRGF0YUxhYmVsMzIg
bG9hZFB0cldpdGhBZGRyZXNzT2Zmc2V0UGF0Y2goQWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklE
IGRlc3QpCisgICAgeworICAgICAgICByZXR1cm4gbG9hZDY0V2l0aEFkZHJlc3NPZmZzZXRQYXRj
aChhZGRyZXNzLCBkZXN0KTsKKyAgICB9CisgICAgCisgICAgRGF0YUxhYmVsQ29tcGFjdCBsb2Fk
UHRyV2l0aENvbXBhY3RBZGRyZXNzT2Zmc2V0UGF0Y2goQWRkcmVzcyBhZGRyZXNzLCBSZWdpc3Rl
cklEIGRlc3QpCisgICAgeworICAgICAgICByZXR1cm4gbG9hZDY0V2l0aENvbXBhY3RBZGRyZXNz
T2Zmc2V0UGF0Y2goYWRkcmVzcywgZGVzdCk7CisgICAgfQorCisgICAgdm9pZCBzdG9yZVB0cihS
ZWdpc3RlcklEIHNyYywgSW1wbGljaXRBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBz
dG9yZTY0KHNyYywgYWRkcmVzcyk7CisgICAgfQorCisgICAgdm9pZCBzdG9yZVB0cihSZWdpc3Rl
cklEIHNyYywgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBzdG9yZTY0KHNyYywg
YWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgc3RvcmVQdHIoUmVnaXN0ZXJJRCBzcmMs
IHZvaWQqIGFkZHJlc3MpCisgICAgeworICAgICAgICBzdG9yZTY0KHNyYywgYWRkcmVzcyk7Cisg
ICAgfQorCisgICAgRGF0YUxhYmVsMzIgc3RvcmVQdHJXaXRoQWRkcmVzc09mZnNldFBhdGNoKFJl
Z2lzdGVySUQgc3JjLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICByZXR1cm4gc3Rv
cmU2NFdpdGhBZGRyZXNzT2Zmc2V0UGF0Y2goc3JjLCBhZGRyZXNzKTsKKyAgICB9CisKKyAgICB2
b2lkIG1vdmVQdHJUb0RvdWJsZShSZWdpc3RlcklEIHNyYywgRlBSZWdpc3RlcklEIGRlc3QpCisg
ICAgeworICAgICAgICBtb3ZlNjRUb0RvdWJsZShzcmMsIGRlc3QpOworICAgIH0KKworICAgIHZv
aWQgbW92ZURvdWJsZVRvUHRyKEZQUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAg
ICB7CisgICAgICAgIG1vdmVEb3VibGVUbzY0KHNyYywgZGVzdCk7CisgICAgfQorCisgICAgdm9p
ZCBjb21wYXJlUHRyKFJlbGF0aW9uYWxDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBsZWZ0LCBU
cnVzdGVkSW1tMzIgcmlnaHQsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIGNvbXBh
cmU2NChjb25kLCBsZWZ0LCByaWdodCwgZGVzdCk7CisgICAgfQorICAgIAorICAgIHZvaWQgY29t
cGFyZVB0cihSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgbGVmdCwgUmVnaXN0
ZXJJRCByaWdodCwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgY29tcGFyZTY0KGNv
bmQsIGxlZnQsIHJpZ2h0LCBkZXN0KTsKKyAgICB9CisgICAgCisgICAgSnVtcCBicmFuY2hQdHIo
UmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGxlZnQsIFJlZ2lzdGVySUQgcmln
aHQpCisgICAgeworICAgICAgICByZXR1cm4gYnJhbmNoNjQoY29uZCwgbGVmdCwgcmlnaHQpOwor
ICAgIH0KKworICAgIEp1bXAgYnJhbmNoUHRyKFJlbGF0aW9uYWxDb25kaXRpb24gY29uZCwgUmVn
aXN0ZXJJRCBsZWZ0LCBUcnVzdGVkSW1tUHRyIHJpZ2h0KQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGJyYW5jaDY0KGNvbmQsIGxlZnQsIFRydXN0ZWRJbW02NChyaWdodCkpOworICAgIH0KKyAgICAK
KyAgICBKdW1wIGJyYW5jaFB0cihSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQg
bGVmdCwgQWRkcmVzcyByaWdodCkKKyAgICB7CisgICAgICAgIHJldHVybiBicmFuY2g2NChjb25k
LCBsZWZ0LCByaWdodCk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2hQdHIoUmVsYXRpb25hbENv
bmRpdGlvbiBjb25kLCBBZGRyZXNzIGxlZnQsIFJlZ2lzdGVySUQgcmlnaHQpCisgICAgeworICAg
ICAgICByZXR1cm4gYnJhbmNoNjQoY29uZCwgbGVmdCwgcmlnaHQpOworICAgIH0KKworICAgIEp1
bXAgYnJhbmNoVGVzdFB0cihSZXN1bHRDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCByZWcsIFJl
Z2lzdGVySUQgbWFzaykKKyAgICB7CisgICAgICAgIHJldHVybiBicmFuY2hUZXN0NjQoY29uZCwg
cmVnLCBtYXNrKTsKKyAgICB9CisgICAgCisgICAgSnVtcCBicmFuY2hUZXN0UHRyKFJlc3VsdENv
bmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIHJlZywgVHJ1c3RlZEltbTMyIG1hc2sgPSBUcnVzdGVk
SW1tMzIoLTEpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJyYW5jaFRlc3Q2NChjb25kLCByZWcs
IG1hc2spOworICAgIH0KKworICAgIHZvaWQgdGVzdFB0cihSZXN1bHRDb25kaXRpb24gY29uZCwg
UmVnaXN0ZXJJRCByZWcsIFRydXN0ZWRJbW0zMiBtYXNrLCBSZWdpc3RlcklEIGRlc3QpCisgICAg
eworICAgICAgICB0ZXN0NjQoY29uZCwgcmVnLCBtYXNrLCBkZXN0KTsKKyAgICB9CisKKyAgICB2
b2lkIHRlc3RQdHIoUmVzdWx0Q29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgcmVnLCBSZWdpc3Rl
cklEIG1hc2ssIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIHRlc3Q2NChjb25kLCBy
ZWcsIG1hc2ssIGRlc3QpOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoVGVzdFB0cihSZXN1bHRD
b25kaXRpb24gY29uZCwgQWRkcmVzcyBhZGRyZXNzLCBUcnVzdGVkSW1tMzIgbWFzayA9IFRydXN0
ZWRJbW0zMigtMSkpCisgICAgeworICAgICAgICByZXR1cm4gYnJhbmNoVGVzdDY0KGNvbmQsIGFk
ZHJlc3MsIG1hc2spOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoVGVzdFB0cihSZXN1bHRDb25k
aXRpb24gY29uZCwgQWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklEIHJlZykKKyAgICB7CisgICAg
ICAgIHJldHVybiBicmFuY2hUZXN0NjQoY29uZCwgYWRkcmVzcywgcmVnKTsKKyAgICB9CisKKyAg
ICBKdW1wIGJyYW5jaFRlc3RQdHIoUmVzdWx0Q29uZGl0aW9uIGNvbmQsIEJhc2VJbmRleCBhZGRy
ZXNzLCBUcnVzdGVkSW1tMzIgbWFzayA9IFRydXN0ZWRJbW0zMigtMSkpCisgICAgeworICAgICAg
ICByZXR1cm4gYnJhbmNoVGVzdDY0KGNvbmQsIGFkZHJlc3MsIG1hc2spOworICAgIH0KKworICAg
IHZvaWQgYWRkUHRyKEFic29sdXRlQWRkcmVzcyBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7
CisgICAgICAgIGFkZDY0KHNyYywgZGVzdCk7CisgICAgfQorCisgICAgdm9pZCBhZGRQdHIoVHJ1
c3RlZEltbVB0ciBpbW0sIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1vdmUoaW1t
LCBzY3JhdGNoUmVnaXN0ZXIpOworICAgICAgICBhZGRQdHIoc2NyYXRjaFJlZ2lzdGVyLCBkZXN0
KTsKKyAgICB9CisKKyAgICB2b2lkIGFkZFB0cihUcnVzdGVkSW1tMzIgaW1tLCBBYnNvbHV0ZUFk
ZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIGFkZDY0KGltbSwgYWRkcmVzcyk7CisgICAg
fQorCisgICAgdm9pZCBvclB0cihUcnVzdGVkSW1tUHRyIGltbSwgUmVnaXN0ZXJJRCBkZXN0KQor
ICAgIHsKKyAgICAgICAgbW92ZShpbW0sIHNjcmF0Y2hSZWdpc3Rlcik7CisgICAgICAgIG9yUHRy
KHNjcmF0Y2hSZWdpc3RlciwgZGVzdCk7CisgICAgfQorCisgICAgdm9pZCBvclB0cihSZWdpc3Rl
cklEIG9wMSwgUmVnaXN0ZXJJRCBvcDIsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAg
IG9yNjQob3AxLCBvcDIsIGRlc3QpOworICAgIH0KKworICAgIHZvaWQgb3JQdHIoVHJ1c3RlZElt
bTMyIGltbSwgUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAg
IG9yNjQoaW1tLCBzcmMsIGRlc3QpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHN1YlB0cihUcnVz
dGVkSW1tUHRyIGltbSwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbW92ZShpbW0s
IHNjcmF0Y2hSZWdpc3Rlcik7CisgICAgICAgIHN1YlB0cihzY3JhdGNoUmVnaXN0ZXIsIGRlc3Qp
OworICAgIH0KKworICAgIENvbnZlcnRpYmxlTG9hZExhYmVsIGNvbnZlcnRpYmxlTG9hZFB0cihB
ZGRyZXNzIGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIHJldHVybiBj
b252ZXJ0aWJsZUxvYWQ2NChhZGRyZXNzLCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIHN0b3Jl
UHRyKFRydXN0ZWRJbW1QdHIgaW1tLCBJbXBsaWNpdEFkZHJlc3MgYWRkcmVzcykKKyAgICB7Cisg
ICAgICAgIHN0b3JlNjQoVHJ1c3RlZEltbTY0KGltbSksIGFkZHJlc3MpOworICAgIH0KKworICAg
IHZvaWQgc3RvcmVQdHIoVHJ1c3RlZEltbVB0ciBpbW0sIEJhc2VJbmRleCBhZGRyZXNzKQorICAg
IHsKKyAgICAgICAgc3RvcmU2NChUcnVzdGVkSW1tNjQoaW1tKSwgYWRkcmVzcyk7CisgICAgfQor
CisgICAgSnVtcCBicmFuY2hQdHIoUmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBBYnNvbHV0ZUFk
ZHJlc3MgbGVmdCwgUmVnaXN0ZXJJRCByaWdodCkKKyAgICB7CisgICAgICAgIHJldHVybiBicmFu
Y2g2NChjb25kLCBsZWZ0LCByaWdodCk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2hQdHIoUmVs
YXRpb25hbENvbmRpdGlvbiBjb25kLCBBZGRyZXNzIGxlZnQsIFRydXN0ZWRJbW1QdHIgcmlnaHQp
CisgICAgeworICAgICAgICBtb3ZlKHJpZ2h0LCBzY3JhdGNoUmVnaXN0ZXIpOworICAgICAgICBy
ZXR1cm4gYnJhbmNoUHRyKGNvbmQsIGxlZnQsIHNjcmF0Y2hSZWdpc3Rlcik7CisgICAgfQorCisg
ICAgSnVtcCBicmFuY2hUZXN0UHRyKFJlc3VsdENvbmRpdGlvbiBjb25kLCBBYnNvbHV0ZUFkZHJl
c3MgYWRkcmVzcywgVHJ1c3RlZEltbTMyIG1hc2sgPSBUcnVzdGVkSW1tMzIoLTEpKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGJyYW5jaFRlc3Q2NChjb25kLCBhZGRyZXNzLCBtYXNrKTsKKyAgICB9
CisKKyAgICBKdW1wIGJyYW5jaEFkZFB0cihSZXN1bHRDb25kaXRpb24gY29uZCwgVHJ1c3RlZElt
bTMyIGltbSwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJyYW5jaEFk
ZDY0KGNvbmQsIGltbSwgZGVzdCk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2hBZGRQdHIoUmVz
dWx0Q29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAg
eworICAgICAgICByZXR1cm4gYnJhbmNoQWRkNjQoY29uZCwgc3JjLCBkZXN0KTsKKyAgICB9CisK
KyAgICBKdW1wIGJyYW5jaFN1YlB0cihSZXN1bHRDb25kaXRpb24gY29uZCwgVHJ1c3RlZEltbTMy
IGltbSwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJyYW5jaFN1YjY0
KGNvbmQsIGltbSwgZGVzdCk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2hTdWJQdHIoUmVzdWx0
Q29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgewor
ICAgICAgICByZXR1cm4gYnJhbmNoU3ViNjQoY29uZCwgc3JjLCBkZXN0KTsKKyAgICB9CisKKyAg
ICBKdW1wIGJyYW5jaFN1YlB0cihSZXN1bHRDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBzcmMx
LCBUcnVzdGVkSW1tMzIgc3JjMiwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGJyYW5jaFN1YjY0KGNvbmQsIHNyYzEsIHNyYzIsIGRlc3QpOworICAgIH0KKworICAgIEp1
bXAgYnJhbmNoUHRyV2l0aFBhdGNoKFJlbGF0aW9uYWxDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJ
RCBsZWZ0LCBEYXRhTGFiZWxQdHImIGRhdGFMYWJlbCwgVHJ1c3RlZEltbVB0ciBpbml0aWFsUmln
aHRWYWx1ZSA9IFRydXN0ZWRJbW1QdHIoMCkpCisgICAgeworICAgICAgICBkYXRhTGFiZWwgPSBt
b3ZlV2l0aFBhdGNoKGluaXRpYWxSaWdodFZhbHVlLCBzY3JhdGNoUmVnaXN0ZXIpOworICAgICAg
ICByZXR1cm4gYnJhbmNoUHRyKGNvbmQsIGxlZnQsIHNjcmF0Y2hSZWdpc3Rlcik7CisgICAgfQor
CisgICAgSnVtcCBicmFuY2hQdHJXaXRoUGF0Y2goUmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBB
ZGRyZXNzIGxlZnQsIERhdGFMYWJlbFB0ciYgZGF0YUxhYmVsLCBUcnVzdGVkSW1tUHRyIGluaXRp
YWxSaWdodFZhbHVlID0gVHJ1c3RlZEltbVB0cigwKSkKKyAgICB7CisgICAgICAgIGRhdGFMYWJl
bCA9IG1vdmVXaXRoUGF0Y2goaW5pdGlhbFJpZ2h0VmFsdWUsIHNjcmF0Y2hSZWdpc3Rlcik7Cisg
ICAgICAgIHJldHVybiBicmFuY2hQdHIoY29uZCwgbGVmdCwgc2NyYXRjaFJlZ2lzdGVyKTsKKyAg
ICB9CisKKyAgICBEYXRhTGFiZWxQdHIgc3RvcmVQdHJXaXRoUGF0Y2goVHJ1c3RlZEltbVB0ciBp
bml0aWFsVmFsdWUsIEltcGxpY2l0QWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgRGF0
YUxhYmVsUHRyIGxhYmVsID0gbW92ZVdpdGhQYXRjaChpbml0aWFsVmFsdWUsIHNjcmF0Y2hSZWdp
c3Rlcik7CisgICAgICAgIHN0b3JlUHRyKHNjcmF0Y2hSZWdpc3RlciwgYWRkcmVzcyk7CisgICAg
ICAgIHJldHVybiBsYWJlbDsKKyAgICB9CiAgICAgCiAjaWYgRU5BQkxFKEpJVF9DT05TVEFOVF9C
TElORElORykKLSAgICB1c2luZyBNYWNyb0Fzc2VtYmxlckJhc2U6OmFkZFB0cjsKLSAgICB1c2lu
ZyBNYWNyb0Fzc2VtYmxlckJhc2U6OmFuZFB0cjsKLSAgICB1c2luZyBNYWNyb0Fzc2VtYmxlckJh
c2U6OmJyYW5jaFN1YlB0cjsKKyAgICB1c2luZyBNYWNyb0Fzc2VtYmxlckJhc2U6OmFuZDY0Owog
ICAgIHVzaW5nIE1hY3JvQXNzZW1ibGVyQmFzZTo6Y29udmVydEludDMyVG9Eb3VibGU7Ci0gICAg
dXNpbmcgTWFjcm9Bc3NlbWJsZXJCYXNlOjpzdG9yZVB0cjsKLSAgICB1c2luZyBNYWNyb0Fzc2Vt
YmxlckJhc2U6OnN1YlB0cjsKLSAgICB1c2luZyBNYWNyb0Fzc2VtYmxlckJhc2U6OnhvclB0cjsK
KyAgICB1c2luZyBNYWNyb0Fzc2VtYmxlckJhc2U6OnN0b3JlNjQ7CiAgICAgCiAgICAgYm9vbCBz
aG91bGRCbGluZERvdWJsZShkb3VibGUgdmFsdWUpCiAgICAgewpAQCAtNTYzLDcgKzg4NCw3IEBA
IHB1YmxpYzoKIAogICAgICAgICAvLyBUcnkgdG8gZm9yY2Ugbm9ybWFsaXNhdGlvbiwgYW5kIGNo
ZWNrIHRoYXQgdGhlcmUncyBubyBjaGFuZ2UKICAgICAgICAgLy8gaW4gdGhlIGJpdCBwYXR0ZXJu
Ci0gICAgICAgIGlmIChiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pih2YWx1ZSAqIDEuMCkgIT0gYml0
d2lzZV9jYXN0PHVpbnRwdHJfdD4odmFsdWUpKQorICAgICAgICBpZiAoYml0d2lzZV9jYXN0PHVp
bnQ2NF90Pih2YWx1ZSAqIDEuMCkgIT0gYml0d2lzZV9jYXN0PHVpbnQ2NF90Pih2YWx1ZSkpCiAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgICAgICB2YWx1ZSA9IGFicyh2YWx1ZSk7CkBA
IC02MDIsNyArOTIzLDYgQEAgcHVibGljOgogICAgICAgICBkZWZhdWx0OiB7CiAgICAgICAgICAg
ICBpZiAodmFsdWUgPD0gMHhmZikKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0jaWYg
Q1BVKFg4Nl82NCkKICAgICAgICAgICAgIEpTVmFsdWUganNWYWx1ZSA9IEpTVmFsdWU6OmRlY29k
ZShyZWludGVycHJldF9jYXN0PHZvaWQqPih2YWx1ZSkpOwogICAgICAgICAgICAgaWYgKGpzVmFs
dWUuaXNJbnQzMigpKQogICAgICAgICAgICAgICAgIHJldHVybiBzaG91bGRCbGluZChJbW0zMihq
c1ZhbHVlLmFzSW50MzIoKSkpOwpAQCAtNjExLDcgKzkzMSw2IEBAIHB1YmxpYzoKIAogICAgICAg
ICAgICAgaWYgKCFzaG91bGRCbGluZERvdWJsZShiaXR3aXNlX2Nhc3Q8ZG91YmxlPih2YWx1ZSkp
KQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZiAKICAgICAgICAgfQogICAg
ICAgICB9CiAgICAgICAgIHJldHVybiBzaG91bGRCbGluZEZvclNwZWNpZmljQXJjaCh2YWx1ZSk7
CkBAIC02NDEsNiArOTYwLDU5IEBAIHB1YmxpYzoKICAgICAgICAgcm90YXRlUmlnaHRQdHIoY29u
c3RhbnQucm90YXRpb24sIGRlc3QpOwogICAgIH0KIAorICAgIGJvb2wgc2hvdWxkQmxpbmQoSW1t
NjQgaW1tKQorICAgIHsgCisjaWYgIWRlZmluZWQoTkRFQlVHKQorICAgICAgICBVTlVTRURfUEFS
QU0oaW1tKTsKKyAgICAgICAgLy8gRGVidWcgYWx3YXlzIGJsaW5kIGFsbCBjb25zdGFudHMsIGlm
IG9ubHkgc28gd2Uga25vdworICAgICAgICAvLyBpZiB3ZSd2ZSBicm9rZW4gYmxpbmRpbmcgZHVy
aW5nIHBhdGNoIGRldmVsb3BtZW50LgorICAgICAgICByZXR1cm4gdHJ1ZTsgICAgICAgIAorI2Vu
ZGlmCisKKyAgICAgICAgLy8gRmlyc3Qgb2ZmIHdlJ2xsIHNwZWNpYWwgY2FzZSBjb21tb24sICJz
YWZlIiB2YWx1ZXMgdG8gYXZvaWQgaHVydGluZworICAgICAgICAvLyBwZXJmb3JtYW5jZSB0b28g
bXVjaAorICAgICAgICB1aW50NjRfdCB2YWx1ZSA9IGltbS5hc1RydXN0ZWRJbW02NCgpLm1fdmFs
dWU7CisgICAgICAgIHN3aXRjaCAodmFsdWUpIHsKKyAgICAgICAgY2FzZSAweGZmZmY6CisgICAg
ICAgIGNhc2UgMHhmZmZmZmY6CisgICAgICAgIGNhc2UgMHhmZmZmZmZmZkw6CisgICAgICAgIGNh
c2UgMHhmZmZmZmZmZmZmTDoKKyAgICAgICAgY2FzZSAweGZmZmZmZmZmZmZmZkw6CisgICAgICAg
IGNhc2UgMHhmZmZmZmZmZmZmZmZmZkw6CisgICAgICAgIGNhc2UgMHhmZmZmZmZmZmZmZmZmZmZm
TDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgZGVmYXVsdDogeworICAgICAg
ICAgICAgaWYgKHZhbHVlIDw9IDB4ZmYpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHNob3VsZEJsaW5kRm9yU3BlY2lm
aWNBcmNoKHZhbHVlKTsKKyAgICB9CisgICAgCisgICAgc3RydWN0IFJvdGF0ZWRJbW02NCB7Cisg
ICAgICAgIFJvdGF0ZWRJbW02NCh1aW50NjRfdCB2MSwgdWludDhfdCB2MikKKyAgICAgICAgICAg
IDogdmFsdWUodjEpCisgICAgICAgICAgICAsIHJvdGF0aW9uKHYyKQorICAgICAgICB7CisgICAg
ICAgIH0KKyAgICAgICAgVHJ1c3RlZEltbTY0IHZhbHVlOworICAgICAgICBUcnVzdGVkSW1tMzIg
cm90YXRpb247CisgICAgfTsKKyAgICAKKyAgICBSb3RhdGVkSW1tNjQgcm90YXRpb25CbGluZENv
bnN0YW50KEltbTY0IGltbSkKKyAgICB7CisgICAgICAgIHVpbnQ4X3Qgcm90YXRpb24gPSByYW5k
b20oKSAlIChzaXplb2YoaW50NjRfdCkgKiA4KTsKKyAgICAgICAgdWludDY0X3QgdmFsdWUgPSBp
bW0uYXNUcnVzdGVkSW1tNjQoKS5tX3ZhbHVlOworICAgICAgICB2YWx1ZSA9ICh2YWx1ZSA8PCBy
b3RhdGlvbikgfCAodmFsdWUgPj4gKHNpemVvZihpbnQ2NF90KSAqIDggLSByb3RhdGlvbikpOwor
ICAgICAgICByZXR1cm4gUm90YXRlZEltbTY0KHZhbHVlLCByb3RhdGlvbik7CisgICAgfQorICAg
IAorICAgIHZvaWQgbG9hZFJvdGF0aW9uQmxpbmRlZENvbnN0YW50KFJvdGF0ZWRJbW02NCBjb25z
dGFudCwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbW92ZShjb25zdGFudC52YWx1
ZSwgZGVzdCk7CisgICAgICAgIHJvdGF0ZVJpZ2h0NjQoY29uc3RhbnQucm90YXRpb24sIGRlc3Qp
OworICAgIH0KKwogICAgIHZvaWQgY29udmVydEludDMyVG9Eb3VibGUoSW1tMzIgaW1tLCBGUFJl
Z2lzdGVySUQgZGVzdCkKICAgICB7CiAgICAgICAgIGlmIChzaG91bGRCbGluZChpbW0pKSB7CkBA
IC02NTksNiArMTAzMSwyNCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBtb3ZlKGltbS5hc1RydXN0
ZWRJbW1QdHIoKSwgZGVzdCk7CiAgICAgfQogCisgICAgdm9pZCBtb3ZlKEltbTY0IGltbSwgUmVn
aXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgaWYgKHNob3VsZEJsaW5kKGltbSkpCisgICAg
ICAgICAgICBsb2FkUm90YXRpb25CbGluZGVkQ29uc3RhbnQocm90YXRpb25CbGluZENvbnN0YW50
KGltbSksIGRlc3QpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtb3ZlKGltbS5hc1RydXN0
ZWRJbW02NCgpLCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIGFuZDY0KEltbTMyIGltbSwgUmVn
aXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgaWYgKHNob3VsZEJsaW5kKGltbSkpIHsKKyAg
ICAgICAgICAgIEJsaW5kZWRJbW0zMiBrZXkgPSBhbmRCbGluZGVkQ29uc3RhbnQoaW1tKTsKKyAg
ICAgICAgICAgIGFuZDY0KGtleS52YWx1ZTEsIGRlc3QpOworICAgICAgICAgICAgYW5kNjQoa2V5
LnZhbHVlMiwgZGVzdCk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgYW5kNjQoaW1tLmFz
VHJ1c3RlZEltbTMyKCksIGRlc3QpOworICAgIH0KKwogICAgIEp1bXAgYnJhbmNoUHRyKFJlbGF0
aW9uYWxDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBsZWZ0LCBJbW1QdHIgcmlnaHQpCiAgICAg
ewogICAgICAgICBpZiAoc2hvdWxkQmxpbmQocmlnaHQpKSB7CkBAIC02NzksNiArMTA2OSwxNiBA
QCBwdWJsaWM6CiAgICAgICAgICAgICBzdG9yZVB0cihpbW0uYXNUcnVzdGVkSW1tUHRyKCksIGRl
c3QpOwogICAgIH0KIAorICAgIHZvaWQgc3RvcmU2NChJbW02NCBpbW0sIEFkZHJlc3MgZGVzdCkK
KyAgICB7CisgICAgICAgIGlmIChzaG91bGRCbGluZChpbW0pKSB7CisgICAgICAgICAgICBSZWdp
c3RlcklEIHNjcmF0Y2hSZWdpc3RlciA9IHNjcmF0Y2hSZWdpc3RlckZvckJsaW5kaW5nKCk7Cisg
ICAgICAgICAgICBsb2FkUm90YXRpb25CbGluZGVkQ29uc3RhbnQocm90YXRpb25CbGluZENvbnN0
YW50KGltbSksIHNjcmF0Y2hSZWdpc3Rlcik7CisgICAgICAgICAgICBzdG9yZTY0KHNjcmF0Y2hS
ZWdpc3RlciwgZGVzdCk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgc3RvcmU2NChpbW0u
YXNUcnVzdGVkSW1tNjQoKSwgZGVzdCk7CisgICAgfQorCiAjZW5kaWYKIAogI2VuZGlmIC8vICFD
UFUoWDg2XzY0KQpAQCAtODcyLDYgKzEyNzIsMTMgQEAgcHVibGljOgogICAgICAgICBzdG9yZVB0
cih2YWx1ZSwgYWRkcmVzc0ZvclBva2UoaW5kZXgpKTsKICAgICB9CiAgICAgCisjaWYgQ1BVKFg4
Nl82NCkKKyAgICB2b2lkIHBva2UoSW1tNjQgdmFsdWUsIGludCBpbmRleCA9IDApCisgICAgewor
ICAgICAgICBzdG9yZTY0KHZhbHVlLCBhZGRyZXNzRm9yUG9rZShpbmRleCkpOworICAgIH0KKyNl
bmRpZgorICAgIAogICAgIHZvaWQgc3RvcmUzMihJbW0zMiBpbW0sIEFkZHJlc3MgZGVzdCkKICAg
ICB7CiAgICAgICAgIGlmIChzaG91bGRCbGluZChpbW0pKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1v
bi5oCShyZXZpc2lvbiAxMzEzOTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTk3LDkgKzk3LDEy
IEBAIHB1YmxpYzoKICNpZiBFTkFCTEUoSklUX0NPTlNUQU5UX0JMSU5ESU5HKQogICAgIHN0YXRp
YyBib29sIHNob3VsZEJsaW5kRm9yU3BlY2lmaWNBcmNoKHVpbnQzMl90IHZhbHVlKSB7IHJldHVy
biB2YWx1ZSA+PSAweDAwZmZmZmZmOyB9CiAjaWYgQ1BVKFg4Nl82NCkKKyAgICBzdGF0aWMgYm9v
bCBzaG91bGRCbGluZEZvclNwZWNpZmljQXJjaCh1aW50NjRfdCB2YWx1ZSkgeyByZXR1cm4gdmFs
dWUgPj0gMHgwMGZmZmZmZjsgfQorI2lmIE9TKERBUldJTikgLy8gT24gNjQtYml0IHN5c3RlbXMg
b3RoZXIgdGhhbiBEQVJXSU4gdWludDY0X3QgYW5kIHVpbnRwdHJfdCBhcmUgdGhlIHNhbWUgdHlw
ZSBzbyBvdmVybG9hZCBpcyBwcm9oaWJpdGVkLgogICAgIHN0YXRpYyBib29sIHNob3VsZEJsaW5k
Rm9yU3BlY2lmaWNBcmNoKHVpbnRwdHJfdCB2YWx1ZSkgeyByZXR1cm4gdmFsdWUgPj0gMHgwMGZm
ZmZmZjsgfQogI2VuZGlmCiAjZW5kaWYKKyNlbmRpZgogCiAgICAgLy8gSW50ZWdlciBhcml0aG1l
dGljIG9wZXJhdGlvbnM6CiAgICAgLy8KQEAgLTk5Myw2ICs5OTYsMTEgQEAgcHVibGljOgogICAg
ICAgICBtX2Fzc2VtYmxlci5tb3ZxX2k2NHIoaW1tLmFzSW50cHRyKCksIGRlc3QpOwogICAgIH0K
IAorICAgIHZvaWQgbW92ZShUcnVzdGVkSW1tNjQgaW1tLCBSZWdpc3RlcklEIGRlc3QpCisgICAg
eworICAgICAgICBtX2Fzc2VtYmxlci5tb3ZxX2k2NHIoaW1tLm1fdmFsdWUsIGRlc3QpOworICAg
IH0KKwogICAgIHZvaWQgc3dhcChSZWdpc3RlcklEIHJlZzEsIFJlZ2lzdGVySUQgcmVnMikKICAg
ICB7CiAgICAgICAgIGlmIChyZWcxICE9IHJlZzIpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oCShyZXZpc2lv
biAxMzEzOTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1i
bGVyWDg2XzY0LmgJKHdvcmtpbmcgY29weSkKQEAgLTE1NCwyMzEgKzE1NCwyMzkgQEAgcHVibGlj
OgogICAgICAgICByZXR1cm4gQ2FsbDo6ZnJvbVRhaWxKdW1wKG5ld0p1bXApOwogICAgIH0KIAor
ICAgIERhdGFMYWJlbFB0ciBtb3ZlV2l0aFBhdGNoKFRydXN0ZWRJbW1QdHIgaW5pdGlhbFZhbHVl
LCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBwYWRCZWZvcmVQYXRjaCgpOworICAg
ICAgICBtX2Fzc2VtYmxlci5tb3ZxX2k2NHIoaW5pdGlhbFZhbHVlLmFzSW50cHRyKCksIGRlc3Qp
OworICAgICAgICByZXR1cm4gRGF0YUxhYmVsUHRyKHRoaXMpOworICAgIH0KIAotICAgIHZvaWQg
YWRkUHRyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgSnVtcCBicmFuY2hB
ZGQzMihSZXN1bHRDb25kaXRpb24gY29uZCwgVHJ1c3RlZEltbTMyIHNyYywgQWJzb2x1dGVBZGRy
ZXNzIGRlc3QpCisgICAgeworICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZGVzdC5tX3B0ciks
IHNjcmF0Y2hSZWdpc3Rlcik7CisgICAgICAgIGFkZDMyKHNyYywgQWRkcmVzcyhzY3JhdGNoUmVn
aXN0ZXIpKTsKKyAgICAgICAgcmV0dXJuIEp1bXAobV9hc3NlbWJsZXIuakNDKHg4NkNvbmRpdGlv
bihjb25kKSkpOworICAgIH0KKworICAgIHZvaWQgYWRkNjQoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lz
dGVySUQgZGVzdCkKICAgICB7CiAgICAgICAgIG1fYXNzZW1ibGVyLmFkZHFfcnIoc3JjLCBkZXN0
KTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBhZGRQdHIoQWRkcmVzcyBzcmMsIFJlZ2lzdGVySUQg
ZGVzdCkKKyAgICB2b2lkIGFkZDY0KEFkZHJlc3Mgc3JjLCBSZWdpc3RlcklEIGRlc3QpCiAgICAg
ewogICAgICAgICBtX2Fzc2VtYmxlci5hZGRxX21yKHNyYy5vZmZzZXQsIHNyYy5iYXNlLCBkZXN0
KTsKICAgICB9CiAKLSAgICB2b2lkIGFkZFB0cihBYnNvbHV0ZUFkZHJlc3Mgc3JjLCBSZWdpc3Rl
cklEIGRlc3QpCisgICAgdm9pZCBhZGQ2NChBYnNvbHV0ZUFkZHJlc3Mgc3JjLCBSZWdpc3RlcklE
IGRlc3QpCiAgICAgewogICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoc3JjLm1fcHRyKSwgc2Ny
YXRjaFJlZ2lzdGVyKTsKLSAgICAgICAgYWRkUHRyKEFkZHJlc3Moc2NyYXRjaFJlZ2lzdGVyKSwg
ZGVzdCk7CisgICAgICAgIGFkZDY0KEFkZHJlc3Moc2NyYXRjaFJlZ2lzdGVyKSwgZGVzdCk7CiAg
ICAgfQogCi0gICAgdm9pZCBhZGRQdHIoVHJ1c3RlZEltbTMyIGltbSwgUmVnaXN0ZXJJRCBzcmNE
ZXN0KQorICAgIHZvaWQgYWRkNjQoVHJ1c3RlZEltbTMyIGltbSwgUmVnaXN0ZXJJRCBzcmNEZXN0
KQogICAgIHsKICAgICAgICAgbV9hc3NlbWJsZXIuYWRkcV9pcihpbW0ubV92YWx1ZSwgc3JjRGVz
dCk7CiAgICAgfQogCi0gICAgdm9pZCBhZGRQdHIoVHJ1c3RlZEltbVB0ciBpbW0sIFJlZ2lzdGVy
SUQgZGVzdCkKKyAgICB2b2lkIGFkZDY0KFRydXN0ZWRJbW02NCBpbW0sIFJlZ2lzdGVySUQgZGVz
dCkKICAgICB7CiAgICAgICAgIG1vdmUoaW1tLCBzY3JhdGNoUmVnaXN0ZXIpOwotICAgICAgICBt
X2Fzc2VtYmxlci5hZGRxX3JyKHNjcmF0Y2hSZWdpc3RlciwgZGVzdCk7CisgICAgICAgIGFkZDY0
KHNjcmF0Y2hSZWdpc3RlciwgZGVzdCk7CiAgICAgfQogCi0gICAgdm9pZCBhZGRQdHIoVHJ1c3Rl
ZEltbTMyIGltbSwgUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB2b2lkIGFk
ZDY0KFRydXN0ZWRJbW0zMiBpbW0sIFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCiAg
ICAgewogICAgICAgICBtX2Fzc2VtYmxlci5sZWFxX21yKGltbS5tX3ZhbHVlLCBzcmMsIGRlc3Qp
OwogICAgIH0KIAotICAgIHZvaWQgYWRkUHRyKFRydXN0ZWRJbW0zMiBpbW0sIEFkZHJlc3MgYWRk
cmVzcykKKyAgICB2b2lkIGFkZDY0KFRydXN0ZWRJbW0zMiBpbW0sIEFkZHJlc3MgYWRkcmVzcykK
ICAgICB7CiAgICAgICAgIG1fYXNzZW1ibGVyLmFkZHFfaW0oaW1tLm1fdmFsdWUsIGFkZHJlc3Mu
b2Zmc2V0LCBhZGRyZXNzLmJhc2UpOwogICAgIH0KIAotICAgIHZvaWQgYWRkUHRyKFRydXN0ZWRJ
bW0zMiBpbW0sIEFic29sdXRlQWRkcmVzcyBhZGRyZXNzKQotICAgIHsKLSAgICAgICAgbW92ZShU
cnVzdGVkSW1tUHRyKGFkZHJlc3MubV9wdHIpLCBzY3JhdGNoUmVnaXN0ZXIpOwotICAgICAgICBh
ZGRQdHIoaW1tLCBBZGRyZXNzKHNjcmF0Y2hSZWdpc3RlcikpOwotICAgIH0KLQogICAgIHZvaWQg
YWRkNjQoVHJ1c3RlZEltbTMyIGltbSwgQWJzb2x1dGVBZGRyZXNzIGFkZHJlc3MpCiAgICAgewot
ICAgICAgICBhZGRQdHIoaW1tLCBhZGRyZXNzKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRy
KGFkZHJlc3MubV9wdHIpLCBzY3JhdGNoUmVnaXN0ZXIpOworICAgICAgICBhZGQ2NChpbW0sIEFk
ZHJlc3Moc2NyYXRjaFJlZ2lzdGVyKSk7CiAgICAgfQogCi0gICAgdm9pZCBhbmRQdHIoUmVnaXN0
ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB2b2lkIGFuZDY0KFJlZ2lzdGVySUQgc3Jj
LCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewogICAgICAgICBtX2Fzc2VtYmxlci5hbmRxX3JyKHNy
YywgZGVzdCk7CiAgICAgfQogCi0gICAgdm9pZCBhbmRQdHIoVHJ1c3RlZEltbTMyIGltbSwgUmVn
aXN0ZXJJRCBzcmNEZXN0KQorICAgIHZvaWQgYW5kNjQoVHJ1c3RlZEltbTMyIGltbSwgUmVnaXN0
ZXJJRCBzcmNEZXN0KQogICAgIHsKICAgICAgICAgbV9hc3NlbWJsZXIuYW5kcV9pcihpbW0ubV92
YWx1ZSwgc3JjRGVzdCk7CiAgICAgfQogICAgIAotICAgIHZvaWQgbmVnUHRyKFJlZ2lzdGVySUQg
ZGVzdCkKKyAgICB2b2lkIG5lZzY0KFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CiAgICAgICAgIG1f
YXNzZW1ibGVyLm5lZ3FfcihkZXN0KTsKICAgICB9CiAKLSAgICB2b2lkIG9yUHRyKFJlZ2lzdGVy
SUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgdm9pZCBvcjY0KFJlZ2lzdGVySUQgc3JjLCBS
ZWdpc3RlcklEIGRlc3QpCiAgICAgewogICAgICAgICBtX2Fzc2VtYmxlci5vcnFfcnIoc3JjLCBk
ZXN0KTsKICAgICB9CiAKLSAgICB2b2lkIG9yUHRyKFRydXN0ZWRJbW1QdHIgaW1tLCBSZWdpc3Rl
cklEIGRlc3QpCisgICAgdm9pZCBvcjY0KFRydXN0ZWRJbW02NCBpbW0sIFJlZ2lzdGVySUQgZGVz
dCkKICAgICB7CiAgICAgICAgIG1vdmUoaW1tLCBzY3JhdGNoUmVnaXN0ZXIpOwotICAgICAgICBt
X2Fzc2VtYmxlci5vcnFfcnIoc2NyYXRjaFJlZ2lzdGVyLCBkZXN0KTsKKyAgICAgICAgb3I2NChz
Y3JhdGNoUmVnaXN0ZXIsIGRlc3QpOwogICAgIH0KIAotICAgIHZvaWQgb3JQdHIoVHJ1c3RlZElt
bTMyIGltbSwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHZvaWQgb3I2NChUcnVzdGVkSW1tMzIgaW1t
LCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewogICAgICAgICBtX2Fzc2VtYmxlci5vcnFfaXIoaW1t
Lm1fdmFsdWUsIGRlc3QpOwogICAgIH0KIAotICAgIHZvaWQgb3JQdHIoUmVnaXN0ZXJJRCBvcDEs
IFJlZ2lzdGVySUQgb3AyLCBSZWdpc3RlcklEIGRlc3QpCisgICAgdm9pZCBvcjY0KFJlZ2lzdGVy
SUQgb3AxLCBSZWdpc3RlcklEIG9wMiwgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKICAgICAgICAg
aWYgKG9wMSA9PSBvcDIpCiAgICAgICAgICAgICBtb3ZlKG9wMSwgZGVzdCk7CiAgICAgICAgIGVs
c2UgaWYgKG9wMSA9PSBkZXN0KQotICAgICAgICAgICAgb3JQdHIob3AyLCBkZXN0KTsKKyAgICAg
ICAgICAgIG9yNjQob3AyLCBkZXN0KTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBtb3Zl
KG9wMiwgZGVzdCk7Ci0gICAgICAgICAgICBvclB0cihvcDEsIGRlc3QpOworICAgICAgICAgICAg
b3I2NChvcDEsIGRlc3QpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgdm9pZCBvclB0cihUcnVz
dGVkSW1tMzIgaW1tLCBSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHZvaWQg
b3I2NChUcnVzdGVkSW1tMzIgaW1tLCBSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQog
ICAgIHsKICAgICAgICAgbW92ZShzcmMsIGRlc3QpOwotICAgICAgICBvclB0cihpbW0sIGRlc3Qp
OworICAgICAgICBvcjY0KGltbSwgZGVzdCk7CiAgICAgfQogICAgIAotICAgIHZvaWQgcm90YXRl
UmlnaHRQdHIoVHJ1c3RlZEltbTMyIGltbSwgUmVnaXN0ZXJJRCBzcmNEc3QpCisgICAgdm9pZCBy
b3RhdGVSaWdodDY0KFRydXN0ZWRJbW0zMiBpbW0sIFJlZ2lzdGVySUQgc3JjRHN0KQogICAgIHsK
ICAgICAgICAgbV9hc3NlbWJsZXIucm9ycV9pOHIoaW1tLm1fdmFsdWUsIHNyY0RzdCk7CiAgICAg
fQogCi0gICAgdm9pZCBzdWJQdHIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAg
ICB2b2lkIHN1YjY0KFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewogICAg
ICAgICBtX2Fzc2VtYmxlci5zdWJxX3JyKHNyYywgZGVzdCk7CiAgICAgfQogICAgIAotICAgIHZv
aWQgc3ViUHRyKFRydXN0ZWRJbW0zMiBpbW0sIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB2b2lkIHN1
YjY0KFRydXN0ZWRJbW0zMiBpbW0sIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CiAgICAgICAgIG1f
YXNzZW1ibGVyLnN1YnFfaXIoaW1tLm1fdmFsdWUsIGRlc3QpOwogICAgIH0KICAgICAKLSAgICB2
b2lkIHN1YlB0cihUcnVzdGVkSW1tUHRyIGltbSwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHZvaWQg
c3ViNjQoVHJ1c3RlZEltbTY0IGltbSwgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKICAgICAgICAg
bW92ZShpbW0sIHNjcmF0Y2hSZWdpc3Rlcik7Ci0gICAgICAgIG1fYXNzZW1ibGVyLnN1YnFfcnIo
c2NyYXRjaFJlZ2lzdGVyLCBkZXN0KTsKKyAgICAgICAgc3ViNjQoc2NyYXRjaFJlZ2lzdGVyLCBk
ZXN0KTsKICAgICB9CiAKLSAgICB2b2lkIHhvclB0cihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJ
RCBkZXN0KQorICAgIHZvaWQgeG9yNjQoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkK
ICAgICB7CiAgICAgICAgIG1fYXNzZW1ibGVyLnhvcnFfcnIoc3JjLCBkZXN0KTsKICAgICB9CiAg
ICAgCi0gICAgdm9pZCB4b3JQdHIoUmVnaXN0ZXJJRCBzcmMsIEFkZHJlc3MgZGVzdCkKKyAgICB2
b2lkIHhvcjY0KFJlZ2lzdGVySUQgc3JjLCBBZGRyZXNzIGRlc3QpCiAgICAgewogICAgICAgICBt
X2Fzc2VtYmxlci54b3JxX3JtKHNyYywgZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSk7CiAgICAgfQog
Ci0gICAgdm9pZCB4b3JQdHIoVHJ1c3RlZEltbTMyIGltbSwgUmVnaXN0ZXJJRCBzcmNEZXN0KQor
ICAgIHZvaWQgeG9yNjQoVHJ1c3RlZEltbTMyIGltbSwgUmVnaXN0ZXJJRCBzcmNEZXN0KQogICAg
IHsKICAgICAgICAgbV9hc3NlbWJsZXIueG9ycV9pcihpbW0ubV92YWx1ZSwgc3JjRGVzdCk7CiAg
ICAgfQogCi0gICAgdm9pZCBsb2FkUHRyKEltcGxpY2l0QWRkcmVzcyBhZGRyZXNzLCBSZWdpc3Rl
cklEIGRlc3QpCisgICAgdm9pZCBsb2FkNjQoSW1wbGljaXRBZGRyZXNzIGFkZHJlc3MsIFJlZ2lz
dGVySUQgZGVzdCkKICAgICB7CiAgICAgICAgIG1fYXNzZW1ibGVyLm1vdnFfbXIoYWRkcmVzcy5v
ZmZzZXQsIGFkZHJlc3MuYmFzZSwgZGVzdCk7CiAgICAgfQogCi0gICAgQ29udmVydGlibGVMb2Fk
TGFiZWwgY29udmVydGlibGVMb2FkUHRyKEFkZHJlc3MgYWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0
KQorICAgIENvbnZlcnRpYmxlTG9hZExhYmVsIGNvbnZlcnRpYmxlTG9hZDY0KEFkZHJlc3MgYWRk
cmVzcywgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKICAgICAgICAgQ29udmVydGlibGVMb2FkTGFi
ZWwgcmVzdWx0ID0gQ29udmVydGlibGVMb2FkTGFiZWwodGhpcyk7CiAgICAgICAgIG1fYXNzZW1i
bGVyLm1vdnFfbXIoYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSwgZGVzdCk7CiAgICAgICAg
IHJldHVybiByZXN1bHQ7CiAgICAgfQogCi0gICAgdm9pZCBsb2FkUHRyKEJhc2VJbmRleCBhZGRy
ZXNzLCBSZWdpc3RlcklEIGRlc3QpCisgICAgdm9pZCBsb2FkNjQoQmFzZUluZGV4IGFkZHJlc3Ms
IFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CiAgICAgICAgIG1fYXNzZW1ibGVyLm1vdnFfbXIoYWRk
cmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZSwg
ZGVzdCk7CiAgICAgfQogCi0gICAgdm9pZCBsb2FkUHRyKGNvbnN0IHZvaWQqIGFkZHJlc3MsIFJl
Z2lzdGVySUQgZGVzdCkKKyAgICB2b2lkIGxvYWQ2NChjb25zdCB2b2lkKiBhZGRyZXNzLCBSZWdp
c3RlcklEIGRlc3QpCiAgICAgewogICAgICAgICBpZiAoZGVzdCA9PSBYODZSZWdpc3RlcnM6OmVh
eCkKICAgICAgICAgICAgIG1fYXNzZW1ibGVyLm1vdnFfbUVBWChhZGRyZXNzKTsKICAgICAgICAg
ZWxzZSB7CiAgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoYWRkcmVzcyksIGRlc3QpOwot
ICAgICAgICAgICAgbG9hZFB0cihkZXN0LCBkZXN0KTsKKyAgICAgICAgICAgIGxvYWQ2NChkZXN0
LCBkZXN0KTsKICAgICAgICAgfQogICAgIH0KIAotICAgIERhdGFMYWJlbDMyIGxvYWRQdHJXaXRo
QWRkcmVzc09mZnNldFBhdGNoKEFkZHJlc3MgYWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0KQorICAg
IERhdGFMYWJlbDMyIGxvYWQ2NFdpdGhBZGRyZXNzT2Zmc2V0UGF0Y2goQWRkcmVzcyBhZGRyZXNz
LCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewogICAgICAgICBwYWRCZWZvcmVQYXRjaCgpOwogICAg
ICAgICBtX2Fzc2VtYmxlci5tb3ZxX21yX2Rpc3AzMihhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5i
YXNlLCBkZXN0KTsKICAgICAgICAgcmV0dXJuIERhdGFMYWJlbDMyKHRoaXMpOwogICAgIH0KICAg
ICAKLSAgICBEYXRhTGFiZWxDb21wYWN0IGxvYWRQdHJXaXRoQ29tcGFjdEFkZHJlc3NPZmZzZXRQ
YXRjaChBZGRyZXNzIGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICBEYXRhTGFiZWxDb21w
YWN0IGxvYWQ2NFdpdGhDb21wYWN0QWRkcmVzc09mZnNldFBhdGNoKEFkZHJlc3MgYWRkcmVzcywg
UmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKICAgICAgICAgcGFkQmVmb3JlUGF0Y2goKTsKICAgICAg
ICAgbV9hc3NlbWJsZXIubW92cV9tcl9kaXNwOChhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNl
LCBkZXN0KTsKICAgICAgICAgcmV0dXJuIERhdGFMYWJlbENvbXBhY3QodGhpcyk7CiAgICAgfQog
Ci0gICAgdm9pZCBzdG9yZVB0cihSZWdpc3RlcklEIHNyYywgSW1wbGljaXRBZGRyZXNzIGFkZHJl
c3MpCisgICAgdm9pZCBzdG9yZTY0KFJlZ2lzdGVySUQgc3JjLCBJbXBsaWNpdEFkZHJlc3MgYWRk
cmVzcykKICAgICB7CiAgICAgICAgIG1fYXNzZW1ibGVyLm1vdnFfcm0oc3JjLCBhZGRyZXNzLm9m
ZnNldCwgYWRkcmVzcy5iYXNlKTsKICAgICB9CiAKLSAgICB2b2lkIHN0b3JlUHRyKFJlZ2lzdGVy
SUQgc3JjLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB2b2lkIHN0b3JlNjQoUmVnaXN0ZXJJRCBz
cmMsIEJhc2VJbmRleCBhZGRyZXNzKQogICAgIHsKICAgICAgICAgbV9hc3NlbWJsZXIubW92cV9y
bShzcmMsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UsIGFkZHJlc3MuaW5kZXgsIGFkZHJl
c3Muc2NhbGUpOwogICAgIH0KICAgICAKLSAgICB2b2lkIHN0b3JlUHRyKFJlZ2lzdGVySUQgc3Jj
LCB2b2lkKiBhZGRyZXNzKQorICAgIHZvaWQgc3RvcmU2NChSZWdpc3RlcklEIHNyYywgdm9pZCog
YWRkcmVzcykKICAgICB7CiAgICAgICAgIGlmIChzcmMgPT0gWDg2UmVnaXN0ZXJzOjplYXgpCiAg
ICAgICAgICAgICBtX2Fzc2VtYmxlci5tb3ZxX0VBWG0oYWRkcmVzcyk7CiAgICAgICAgIGVsc2Ug
ewogICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGFkZHJlc3MpLCBzY3JhdGNoUmVnaXN0
ZXIpOwotICAgICAgICAgICAgc3RvcmVQdHIoc3JjLCBzY3JhdGNoUmVnaXN0ZXIpOworICAgICAg
ICAgICAgc3RvcmU2NChzcmMsIHNjcmF0Y2hSZWdpc3Rlcik7CiAgICAgICAgIH0KICAgICB9CiAK
LSAgICB2b2lkIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIgaW1tLCBJbXBsaWNpdEFkZHJlc3MgYWRk
cmVzcykKKyAgICB2b2lkIHN0b3JlNjQoVHJ1c3RlZEltbTY0IGltbSwgSW1wbGljaXRBZGRyZXNz
IGFkZHJlc3MpCiAgICAgewogICAgICAgICBtb3ZlKGltbSwgc2NyYXRjaFJlZ2lzdGVyKTsKLSAg
ICAgICAgc3RvcmVQdHIoc2NyYXRjaFJlZ2lzdGVyLCBhZGRyZXNzKTsKKyAgICAgICAgc3RvcmU2
NChzY3JhdGNoUmVnaXN0ZXIsIGFkZHJlc3MpOwogICAgIH0KIAotICAgIHZvaWQgc3RvcmVQdHIo
VHJ1c3RlZEltbVB0ciBpbW0sIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHZvaWQgc3RvcmU2NChU
cnVzdGVkSW1tNjQgaW1tLCBCYXNlSW5kZXggYWRkcmVzcykKICAgICB7CiAgICAgICAgIG1vdmUo
aW1tLCBzY3JhdGNoUmVnaXN0ZXIpOwogICAgICAgICBtX2Fzc2VtYmxlci5tb3ZxX3JtKHNjcmF0
Y2hSZWdpc3RlciwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5pbmRleCwg
YWRkcmVzcy5zY2FsZSk7CiAgICAgfQogICAgIAotICAgIERhdGFMYWJlbDMyIHN0b3JlUHRyV2l0
aEFkZHJlc3NPZmZzZXRQYXRjaChSZWdpc3RlcklEIHNyYywgQWRkcmVzcyBhZGRyZXNzKQorICAg
IERhdGFMYWJlbDMyIHN0b3JlNjRXaXRoQWRkcmVzc09mZnNldFBhdGNoKFJlZ2lzdGVySUQgc3Jj
LCBBZGRyZXNzIGFkZHJlc3MpCiAgICAgewogICAgICAgICBwYWRCZWZvcmVQYXRjaCgpOwogICAg
ICAgICBtX2Fzc2VtYmxlci5tb3ZxX3JtX2Rpc3AzMihzcmMsIGFkZHJlc3Mub2Zmc2V0LCBhZGRy
ZXNzLmJhc2UpOwogICAgICAgICByZXR1cm4gRGF0YUxhYmVsMzIodGhpcyk7CiAgICAgfQogCi0g
ICAgdm9pZCBtb3ZlUHRyVG9Eb3VibGUoUmVnaXN0ZXJJRCBzcmMsIEZQUmVnaXN0ZXJJRCBkZXN0
KQorICAgIHZvaWQgbW92ZTY0VG9Eb3VibGUoUmVnaXN0ZXJJRCBzcmMsIEZQUmVnaXN0ZXJJRCBk
ZXN0KQogICAgIHsKICAgICAgICAgbV9hc3NlbWJsZXIubW92cV9ycihzcmMsIGRlc3QpOwogICAg
IH0KIAotICAgIHZvaWQgbW92ZURvdWJsZVRvUHRyKEZQUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVy
SUQgZGVzdCkKKyAgICB2b2lkIG1vdmVEb3VibGVUbzY0KEZQUmVnaXN0ZXJJRCBzcmMsIFJlZ2lz
dGVySUQgZGVzdCkKICAgICB7CiAgICAgICAgIG1fYXNzZW1ibGVyLm1vdnFfcnIoc3JjLCBkZXN0
KTsKICAgICB9CiAKLSAgICB2b2lkIGNvbXBhcmVQdHIoUmVsYXRpb25hbENvbmRpdGlvbiBjb25k
LCBSZWdpc3RlcklEIGxlZnQsIFRydXN0ZWRJbW0zMiByaWdodCwgUmVnaXN0ZXJJRCBkZXN0KQor
ICAgIHZvaWQgY29tcGFyZTY0KFJlbGF0aW9uYWxDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBs
ZWZ0LCBUcnVzdGVkSW1tMzIgcmlnaHQsIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CiAgICAgICAg
IGlmICgoKGNvbmQgPT0gRXF1YWwpIHx8IChjb25kID09IE5vdEVxdWFsKSkgJiYgIXJpZ2h0Lm1f
dmFsdWUpCiAgICAgICAgICAgICBtX2Fzc2VtYmxlci50ZXN0cV9ycihsZWZ0LCBsZWZ0KTsKQEAg
LTM4OCw2NyArMzk2LDYwIEBAIHB1YmxpYzoKICAgICAgICAgbV9hc3NlbWJsZXIubW92emJsX3Jy
KGRlc3QsIGRlc3QpOwogICAgIH0KICAgICAKLSAgICB2b2lkIGNvbXBhcmVQdHIoUmVsYXRpb25h
bENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGxlZnQsIFJlZ2lzdGVySUQgcmlnaHQsIFJlZ2lz
dGVySUQgZGVzdCkKKyAgICB2b2lkIGNvbXBhcmU2NChSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQs
IFJlZ2lzdGVySUQgbGVmdCwgUmVnaXN0ZXJJRCByaWdodCwgUmVnaXN0ZXJJRCBkZXN0KQogICAg
IHsKICAgICAgICAgbV9hc3NlbWJsZXIuY21wcV9ycihyaWdodCwgbGVmdCk7CiAgICAgICAgIG1f
YXNzZW1ibGVyLnNldENDX3IoeDg2Q29uZGl0aW9uKGNvbmQpLCBkZXN0KTsKICAgICAgICAgbV9h
c3NlbWJsZXIubW92emJsX3JyKGRlc3QsIGRlc3QpOwogICAgIH0KICAgICAKLSAgICBKdW1wIGJy
YW5jaEFkZDMyKFJlc3VsdENvbmRpdGlvbiBjb25kLCBUcnVzdGVkSW1tMzIgc3JjLCBBYnNvbHV0
ZUFkZHJlc3MgZGVzdCkKLSAgICB7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihkZXN0Lm1f
cHRyKSwgc2NyYXRjaFJlZ2lzdGVyKTsKLSAgICAgICAgYWRkMzIoc3JjLCBBZGRyZXNzKHNjcmF0
Y2hSZWdpc3RlcikpOwotICAgICAgICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5qQ0MoeDg2Q29u
ZGl0aW9uKGNvbmQpKSk7Ci0gICAgfQotCi0gICAgSnVtcCBicmFuY2hQdHIoUmVsYXRpb25hbENv
bmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGxlZnQsIFJlZ2lzdGVySUQgcmlnaHQpCisgICAgSnVt
cCBicmFuY2g2NChSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgbGVmdCwgUmVn
aXN0ZXJJRCByaWdodCkKICAgICB7CiAgICAgICAgIG1fYXNzZW1ibGVyLmNtcHFfcnIocmlnaHQs
IGxlZnQpOwogICAgICAgICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5qQ0MoeDg2Q29uZGl0aW9u
KGNvbmQpKSk7CiAgICAgfQogCi0gICAgSnVtcCBicmFuY2hQdHIoUmVsYXRpb25hbENvbmRpdGlv
biBjb25kLCBSZWdpc3RlcklEIGxlZnQsIFRydXN0ZWRJbW1QdHIgcmlnaHQpCisgICAgSnVtcCBi
cmFuY2g2NChSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgbGVmdCwgVHJ1c3Rl
ZEltbTY0IHJpZ2h0KQogICAgIHsKICAgICAgICAgaWYgKCgoY29uZCA9PSBFcXVhbCkgfHwgKGNv
bmQgPT0gTm90RXF1YWwpKSAmJiAhcmlnaHQubV92YWx1ZSkgewogICAgICAgICAgICAgbV9hc3Nl
bWJsZXIudGVzdHFfcnIobGVmdCwgbGVmdCk7CiAgICAgICAgICAgICByZXR1cm4gSnVtcChtX2Fz
c2VtYmxlci5qQ0MoeDg2Q29uZGl0aW9uKGNvbmQpKSk7CiAgICAgICAgIH0KICAgICAgICAgbW92
ZShyaWdodCwgc2NyYXRjaFJlZ2lzdGVyKTsKLSAgICAgICAgcmV0dXJuIGJyYW5jaFB0cihjb25k
LCBsZWZ0LCBzY3JhdGNoUmVnaXN0ZXIpOworICAgICAgICByZXR1cm4gYnJhbmNoNjQoY29uZCwg
bGVmdCwgc2NyYXRjaFJlZ2lzdGVyKTsKICAgICB9CiAKLSAgICBKdW1wIGJyYW5jaFB0cihSZWxh
dGlvbmFsQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgbGVmdCwgQWRkcmVzcyByaWdodCkKKyAg
ICBKdW1wIGJyYW5jaDY0KFJlbGF0aW9uYWxDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBsZWZ0
LCBBZGRyZXNzIHJpZ2h0KQogICAgIHsKICAgICAgICAgbV9hc3NlbWJsZXIuY21wcV9tcihyaWdo
dC5vZmZzZXQsIHJpZ2h0LmJhc2UsIGxlZnQpOwogICAgICAgICByZXR1cm4gSnVtcChtX2Fzc2Vt
Ymxlci5qQ0MoeDg2Q29uZGl0aW9uKGNvbmQpKSk7CiAgICAgfQogCi0gICAgSnVtcCBicmFuY2hQ
dHIoUmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBBYnNvbHV0ZUFkZHJlc3MgbGVmdCwgUmVnaXN0
ZXJJRCByaWdodCkKKyAgICBKdW1wIGJyYW5jaDY0KFJlbGF0aW9uYWxDb25kaXRpb24gY29uZCwg
QWJzb2x1dGVBZGRyZXNzIGxlZnQsIFJlZ2lzdGVySUQgcmlnaHQpCiAgICAgewogICAgICAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIobGVmdC5tX3B0ciksIHNjcmF0Y2hSZWdpc3Rlcik7Ci0gICAgICAg
IHJldHVybiBicmFuY2hQdHIoY29uZCwgQWRkcmVzcyhzY3JhdGNoUmVnaXN0ZXIpLCByaWdodCk7
CisgICAgICAgIHJldHVybiBicmFuY2g2NChjb25kLCBBZGRyZXNzKHNjcmF0Y2hSZWdpc3Rlciks
IHJpZ2h0KTsKICAgICB9CiAKLSAgICBKdW1wIGJyYW5jaFB0cihSZWxhdGlvbmFsQ29uZGl0aW9u
IGNvbmQsIEFkZHJlc3MgbGVmdCwgUmVnaXN0ZXJJRCByaWdodCkKKyAgICBKdW1wIGJyYW5jaDY0
KFJlbGF0aW9uYWxDb25kaXRpb24gY29uZCwgQWRkcmVzcyBsZWZ0LCBSZWdpc3RlcklEIHJpZ2h0
KQogICAgIHsKICAgICAgICAgbV9hc3NlbWJsZXIuY21wcV9ybShyaWdodCwgbGVmdC5vZmZzZXQs
IGxlZnQuYmFzZSk7CiAgICAgICAgIHJldHVybiBKdW1wKG1fYXNzZW1ibGVyLmpDQyh4ODZDb25k
aXRpb24oY29uZCkpKTsKICAgICB9CiAKLSAgICBKdW1wIGJyYW5jaFB0cihSZWxhdGlvbmFsQ29u
ZGl0aW9uIGNvbmQsIEFkZHJlc3MgbGVmdCwgVHJ1c3RlZEltbVB0ciByaWdodCkKKyAgICBKdW1w
IGJyYW5jaDY0KFJlbGF0aW9uYWxDb25kaXRpb24gY29uZCwgQWRkcmVzcyBsZWZ0LCBUcnVzdGVk
SW1tNjQgcmlnaHQpCiAgICAgewogICAgICAgICBtb3ZlKHJpZ2h0LCBzY3JhdGNoUmVnaXN0ZXIp
OwotICAgICAgICByZXR1cm4gYnJhbmNoUHRyKGNvbmQsIGxlZnQsIHNjcmF0Y2hSZWdpc3Rlcik7
CisgICAgICAgIHJldHVybiBicmFuY2g2NChjb25kLCBsZWZ0LCBzY3JhdGNoUmVnaXN0ZXIpOwog
ICAgIH0KIAotICAgIEp1bXAgYnJhbmNoVGVzdFB0cihSZXN1bHRDb25kaXRpb24gY29uZCwgUmVn
aXN0ZXJJRCByZWcsIFJlZ2lzdGVySUQgbWFzaykKKyAgICBKdW1wIGJyYW5jaFRlc3Q2NChSZXN1
bHRDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCByZWcsIFJlZ2lzdGVySUQgbWFzaykKICAgICB7
CiAgICAgICAgIG1fYXNzZW1ibGVyLnRlc3RxX3JyKHJlZywgbWFzayk7CiAgICAgICAgIHJldHVy
biBKdW1wKG1fYXNzZW1ibGVyLmpDQyh4ODZDb25kaXRpb24oY29uZCkpKTsKICAgICB9CiAgICAg
Ci0gICAgSnVtcCBicmFuY2hUZXN0UHRyKFJlc3VsdENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklE
IHJlZywgVHJ1c3RlZEltbTMyIG1hc2sgPSBUcnVzdGVkSW1tMzIoLTEpKQorICAgIEp1bXAgYnJh
bmNoVGVzdDY0KFJlc3VsdENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIHJlZywgVHJ1c3RlZElt
bTMyIG1hc2sgPSBUcnVzdGVkSW1tMzIoLTEpKQogICAgIHsKICAgICAgICAgLy8gaWYgd2UgYXJl
IG9ubHkgaW50ZXJlc3RlZCBpbiB0aGUgbG93IHNldmVuIGJpdHMsIHRoaXMgY2FuIGJlIHRlc3Rl
ZCB3aXRoIGEgdGVzdGIKICAgICAgICAgaWYgKG1hc2subV92YWx1ZSA9PSAtMSkKQEAgLTQ2MCw3
ICs0NjEsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBKdW1wKG1fYXNzZW1ibGVyLmpDQyh4
ODZDb25kaXRpb24oY29uZCkpKTsKICAgICB9CiAKLSAgICB2b2lkIHRlc3RQdHIoUmVzdWx0Q29u
ZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgcmVnLCBUcnVzdGVkSW1tMzIgbWFzaywgUmVnaXN0ZXJJ
RCBkZXN0KQorICAgIHZvaWQgdGVzdDY0KFJlc3VsdENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklE
IHJlZywgVHJ1c3RlZEltbTMyIG1hc2ssIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CiAgICAgICAg
IGlmIChtYXNrLm1fdmFsdWUgPT0gLTEpCiAgICAgICAgICAgICBtX2Fzc2VtYmxlci50ZXN0cV9y
cihyZWcsIHJlZyk7CkBAIC00NzEsMTkgKzQ3MiwxOSBAQCBwdWJsaWM6CiAgICAgICAgIHNldDMy
KHg4NkNvbmRpdGlvbihjb25kKSwgZGVzdCk7CiAgICAgfQogCi0gICAgdm9pZCB0ZXN0UHRyKFJl
c3VsdENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIHJlZywgUmVnaXN0ZXJJRCBtYXNrLCBSZWdp
c3RlcklEIGRlc3QpCisgICAgdm9pZCB0ZXN0NjQoUmVzdWx0Q29uZGl0aW9uIGNvbmQsIFJlZ2lz
dGVySUQgcmVnLCBSZWdpc3RlcklEIG1hc2ssIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CiAgICAg
ICAgIG1fYXNzZW1ibGVyLnRlc3RxX3JyKHJlZywgbWFzayk7CiAgICAgICAgIHNldDMyKHg4NkNv
bmRpdGlvbihjb25kKSwgZGVzdCk7CiAgICAgfQogCi0gICAgSnVtcCBicmFuY2hUZXN0UHRyKFJl
c3VsdENvbmRpdGlvbiBjb25kLCBBYnNvbHV0ZUFkZHJlc3MgYWRkcmVzcywgVHJ1c3RlZEltbTMy
IG1hc2sgPSBUcnVzdGVkSW1tMzIoLTEpKQorICAgIEp1bXAgYnJhbmNoVGVzdDY0KFJlc3VsdENv
bmRpdGlvbiBjb25kLCBBYnNvbHV0ZUFkZHJlc3MgYWRkcmVzcywgVHJ1c3RlZEltbTMyIG1hc2sg
PSBUcnVzdGVkSW1tMzIoLTEpKQogICAgIHsKLSAgICAgICAgbG9hZFB0cihhZGRyZXNzLm1fcHRy
LCBzY3JhdGNoUmVnaXN0ZXIpOwotICAgICAgICByZXR1cm4gYnJhbmNoVGVzdFB0cihjb25kLCBz
Y3JhdGNoUmVnaXN0ZXIsIG1hc2spOworICAgICAgICBsb2FkNjQoYWRkcmVzcy5tX3B0ciwgc2Ny
YXRjaFJlZ2lzdGVyKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaFRlc3Q2NChjb25kLCBzY3JhdGNo
UmVnaXN0ZXIsIG1hc2spOwogICAgIH0KIAotICAgIEp1bXAgYnJhbmNoVGVzdFB0cihSZXN1bHRD
b25kaXRpb24gY29uZCwgQWRkcmVzcyBhZGRyZXNzLCBUcnVzdGVkSW1tMzIgbWFzayA9IFRydXN0
ZWRJbW0zMigtMSkpCisgICAgSnVtcCBicmFuY2hUZXN0NjQoUmVzdWx0Q29uZGl0aW9uIGNvbmQs
IEFkZHJlc3MgYWRkcmVzcywgVHJ1c3RlZEltbTMyIG1hc2sgPSBUcnVzdGVkSW1tMzIoLTEpKQog
ICAgIHsKICAgICAgICAgaWYgKG1hc2subV92YWx1ZSA9PSAtMSkKICAgICAgICAgICAgIG1fYXNz
ZW1ibGVyLmNtcHFfaW0oMCwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSk7CkBAIC00OTIs
MTMgKzQ5MywxMyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBKdW1wKG1fYXNzZW1ibGVyLmpD
Qyh4ODZDb25kaXRpb24oY29uZCkpKTsKICAgICB9CiAKLSAgICBKdW1wIGJyYW5jaFRlc3RQdHIo
UmVzdWx0Q29uZGl0aW9uIGNvbmQsIEFkZHJlc3MgYWRkcmVzcywgUmVnaXN0ZXJJRCByZWcpCisg
ICAgSnVtcCBicmFuY2hUZXN0NjQoUmVzdWx0Q29uZGl0aW9uIGNvbmQsIEFkZHJlc3MgYWRkcmVz
cywgUmVnaXN0ZXJJRCByZWcpCiAgICAgewogICAgICAgICBtX2Fzc2VtYmxlci50ZXN0cV9ybShy
ZWcsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UpOwogICAgICAgICByZXR1cm4gSnVtcCht
X2Fzc2VtYmxlci5qQ0MoeDg2Q29uZGl0aW9uKGNvbmQpKSk7CiAgICAgfQogCi0gICAgSnVtcCBi
cmFuY2hUZXN0UHRyKFJlc3VsdENvbmRpdGlvbiBjb25kLCBCYXNlSW5kZXggYWRkcmVzcywgVHJ1
c3RlZEltbTMyIG1hc2sgPSBUcnVzdGVkSW1tMzIoLTEpKQorICAgIEp1bXAgYnJhbmNoVGVzdDY0
KFJlc3VsdENvbmRpdGlvbiBjb25kLCBCYXNlSW5kZXggYWRkcmVzcywgVHJ1c3RlZEltbTMyIG1h
c2sgPSBUcnVzdGVkSW1tMzIoLTEpKQogICAgIHsKICAgICAgICAgaWYgKG1hc2subV92YWx1ZSA9
PSAtMSkKICAgICAgICAgICAgIG1fYXNzZW1ibGVyLmNtcHFfaW0oMCwgYWRkcmVzcy5vZmZzZXQs
IGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZSk7CkBAIC01MDgsNjAg
KzUwOSwzNCBAQCBwdWJsaWM6CiAgICAgfQogCiAKLSAgICBKdW1wIGJyYW5jaEFkZFB0cihSZXN1
bHRDb25kaXRpb24gY29uZCwgVHJ1c3RlZEltbTMyIGltbSwgUmVnaXN0ZXJJRCBkZXN0KQorICAg
IEp1bXAgYnJhbmNoQWRkNjQoUmVzdWx0Q29uZGl0aW9uIGNvbmQsIFRydXN0ZWRJbW0zMiBpbW0s
IFJlZ2lzdGVySUQgZGVzdCkKICAgICB7Ci0gICAgICAgIGFkZFB0cihpbW0sIGRlc3QpOworICAg
ICAgICBhZGQ2NChpbW0sIGRlc3QpOwogICAgICAgICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5q
Q0MoeDg2Q29uZGl0aW9uKGNvbmQpKSk7CiAgICAgfQogCi0gICAgSnVtcCBicmFuY2hBZGRQdHIo
UmVzdWx0Q29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisg
ICAgSnVtcCBicmFuY2hBZGQ2NChSZXN1bHRDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBzcmMs
IFJlZ2lzdGVySUQgZGVzdCkKICAgICB7Ci0gICAgICAgIGFkZFB0cihzcmMsIGRlc3QpOworICAg
ICAgICBhZGQ2NChzcmMsIGRlc3QpOwogICAgICAgICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5q
Q0MoeDg2Q29uZGl0aW9uKGNvbmQpKSk7CiAgICAgfQogCi0gICAgSnVtcCBicmFuY2hTdWJQdHIo
UmVzdWx0Q29uZGl0aW9uIGNvbmQsIFRydXN0ZWRJbW0zMiBpbW0sIFJlZ2lzdGVySUQgZGVzdCkK
KyAgICBKdW1wIGJyYW5jaFN1YjY0KFJlc3VsdENvbmRpdGlvbiBjb25kLCBUcnVzdGVkSW1tMzIg
aW1tLCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewotICAgICAgICBzdWJQdHIoaW1tLCBkZXN0KTsK
KyAgICAgICAgc3ViNjQoaW1tLCBkZXN0KTsKICAgICAgICAgcmV0dXJuIEp1bXAobV9hc3NlbWJs
ZXIuakNDKHg4NkNvbmRpdGlvbihjb25kKSkpOwogICAgIH0KIAotICAgIEp1bXAgYnJhbmNoU3Vi
UHRyKFJlc3VsdENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0
KQorICAgIEp1bXAgYnJhbmNoU3ViNjQoUmVzdWx0Q29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQg
c3JjLCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewotICAgICAgICBzdWJQdHIoc3JjLCBkZXN0KTsK
KyAgICAgICAgc3ViNjQoc3JjLCBkZXN0KTsKICAgICAgICAgcmV0dXJuIEp1bXAobV9hc3NlbWJs
ZXIuakNDKHg4NkNvbmRpdGlvbihjb25kKSkpOwogICAgIH0KIAotICAgIEp1bXAgYnJhbmNoU3Vi
UHRyKFJlc3VsdENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIHNyYzEsIFRydXN0ZWRJbW0zMiBz
cmMyLCBSZWdpc3RlcklEIGRlc3QpCisgICAgSnVtcCBicmFuY2hTdWI2NChSZXN1bHRDb25kaXRp
b24gY29uZCwgUmVnaXN0ZXJJRCBzcmMxLCBUcnVzdGVkSW1tMzIgc3JjMiwgUmVnaXN0ZXJJRCBk
ZXN0KQogICAgIHsKICAgICAgICAgbW92ZShzcmMxLCBkZXN0KTsKLSAgICAgICAgcmV0dXJuIGJy
YW5jaFN1YlB0cihjb25kLCBzcmMyLCBkZXN0KTsKLSAgICB9Ci0KLSAgICBEYXRhTGFiZWxQdHIg
bW92ZVdpdGhQYXRjaChUcnVzdGVkSW1tUHRyIGluaXRpYWxWYWx1ZSwgUmVnaXN0ZXJJRCBkZXN0
KQotICAgIHsKLSAgICAgICAgcGFkQmVmb3JlUGF0Y2goKTsKLSAgICAgICAgbV9hc3NlbWJsZXIu
bW92cV9pNjRyKGluaXRpYWxWYWx1ZS5hc0ludHB0cigpLCBkZXN0KTsKLSAgICAgICAgcmV0dXJu
IERhdGFMYWJlbFB0cih0aGlzKTsKLSAgICB9Ci0KLSAgICBKdW1wIGJyYW5jaFB0cldpdGhQYXRj
aChSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgbGVmdCwgRGF0YUxhYmVsUHRy
JiBkYXRhTGFiZWwsIFRydXN0ZWRJbW1QdHIgaW5pdGlhbFJpZ2h0VmFsdWUgPSBUcnVzdGVkSW1t
UHRyKDApKQotICAgIHsKLSAgICAgICAgZGF0YUxhYmVsID0gbW92ZVdpdGhQYXRjaChpbml0aWFs
UmlnaHRWYWx1ZSwgc2NyYXRjaFJlZ2lzdGVyKTsKLSAgICAgICAgcmV0dXJuIGJyYW5jaFB0cihj
b25kLCBsZWZ0LCBzY3JhdGNoUmVnaXN0ZXIpOwotICAgIH0KLQotICAgIEp1bXAgYnJhbmNoUHRy
V2l0aFBhdGNoKFJlbGF0aW9uYWxDb25kaXRpb24gY29uZCwgQWRkcmVzcyBsZWZ0LCBEYXRhTGFi
ZWxQdHImIGRhdGFMYWJlbCwgVHJ1c3RlZEltbVB0ciBpbml0aWFsUmlnaHRWYWx1ZSA9IFRydXN0
ZWRJbW1QdHIoMCkpCi0gICAgewotICAgICAgICBkYXRhTGFiZWwgPSBtb3ZlV2l0aFBhdGNoKGlu
aXRpYWxSaWdodFZhbHVlLCBzY3JhdGNoUmVnaXN0ZXIpOwotICAgICAgICByZXR1cm4gYnJhbmNo
UHRyKGNvbmQsIGxlZnQsIHNjcmF0Y2hSZWdpc3Rlcik7Ci0gICAgfQotCi0gICAgRGF0YUxhYmVs
UHRyIHN0b3JlUHRyV2l0aFBhdGNoKFRydXN0ZWRJbW1QdHIgaW5pdGlhbFZhbHVlLCBJbXBsaWNp
dEFkZHJlc3MgYWRkcmVzcykKLSAgICB7Ci0gICAgICAgIERhdGFMYWJlbFB0ciBsYWJlbCA9IG1v
dmVXaXRoUGF0Y2goaW5pdGlhbFZhbHVlLCBzY3JhdGNoUmVnaXN0ZXIpOwotICAgICAgICBzdG9y
ZVB0cihzY3JhdGNoUmVnaXN0ZXIsIGFkZHJlc3MpOwotICAgICAgICByZXR1cm4gbGFiZWw7Cisg
ICAgICAgIHJldHVybiBicmFuY2hTdWI2NChjb25kLCBzcmMyLCBkZXN0KTsKICAgICB9CiAKICAg
ICB1c2luZyBNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbjo6YnJhbmNoVGVzdDg7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>168845</attachid>
            <date>2012-10-15 20:47:14 -0700</date>
            <delta_ts>2012-10-16 01:17:16 -0700</delta_ts>
            <desc>Updated: Split patch - part1: add the*64 interfaces to MacroAssemblerX86_64</desc>
            <filename>99154.3-1.patch</filename>
            <type>text/plain</type>
            <size>39382</size>
            <attacher name="Yuqiang Xian">yuqiang.xian</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTMxNDAzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwNSBA
QAorMjAxMi0xMC0xNSAgWXVxaWFuZyBYaWFuICA8eXVxaWFuZy54aWFuQGludGVsLmNvbT4KKwor
ICAgICAgICBSZWZhY3RvciBNYWNyb0Fzc2VtYmxlciBpbnRlcmZhY2VzIHRvIGRpZmZlcmVudGlh
dGUgdGhlIHBvaW50ZXIgb3BlcmFuZHMgZnJvbSB0aGUgNjQtYml0IGludGVnZXIgb3BlcmFuZHMK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk5MTU0CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW4gY3VycmVu
dCBKYXZhU2NyaXB0Q29yZSBpbXBsZW1lbnRhdGlvbiBmb3IgSlNWQUxVRTY0IHBsYXRmb3JtIChp
LmUuLAorICAgICAgICB0aGUgWDY0IHBsYXRmb3JtKSwgd2UgYXNzdW1lIHRoYXQgdGhlIEpTVmFs
dWUgc2l6ZSBpcyBzYW1lIHRvIHRoZQorICAgICAgICBwb2ludGVyIHNpemUsIGFuZCB0aHVzIEVu
Y29kZWRKU1ZhbHVlIGlzIHNpbXBseSB0eXBlIGRlZmluZWQgYXMgYQorICAgICAgICAidm9pZCoi
LiBJbiB0aGUgSklUIGNvbXBpbGVyLCB3ZSBhbHNvIHRha2UgdGhpcyBhc3N1bXB0aW9uIGFuZCBp
bnZva2UKKyAgICAgICAgdGhlIHNhbWUgbWFjcm8gYXNzZW1ibGVyIGludGVyZmFjZXMgZm9yIGJv
dGggSlNWYWx1ZSBhbmQgcG9pbnRlcgorICAgICAgICBvcGVyYW5kcy4gV2UgbmVlZCB0byBkaWZm
ZXJlbnRpYXRlIHRoZSBvcGVyYXRpb25zIG9uIHBvaW50ZXJzIGZyb20gdGhlCisgICAgICAgIG9w
ZXJhdGlvbnMgb24gSlNWYWx1ZXMsIGFuZCBsZXQgdGhlbSBpbnZva2luZyBkaWZmZXJlbnQgbWFj
cm8KKyAgICAgICAgYXNzZW1ibGVyIGludGVyZmFjZXMuIEZvciBleGFtcGxlLCB3ZSBub3cgdXNl
IHRoZSBpbnRlcmZhY2Ugb2YKKyAgICAgICAgImxvYWRQdHIiIHRvIGxvYWQgZWl0aGVyIGEgcG9p
bnRlciBvciBhIEpTVmFsdWUsIGFuZCB3ZSBuZWVkIHRvIHN3aXRjaAorICAgICAgICB0byB1c2lu
ZyAibG9hZFB0ciIgdG8gbG9hZCBhIHBvaW50ZXIgYW5kIHNvbWUgbmV3ICJsb2FkNjQiIGludGVy
ZmFjZQorICAgICAgICB0byBsb2FkIGEgSlNWYWx1ZS4gVGhpcyB3b3VsZCBoZWxwIHVzIHN1cHBv
cnRpbmcgb3RoZXIgSlNWQUxVRTY0CisgICAgICAgIHBsYXRmb3JtcyB3aGVyZSBwb2ludGVyIHNp
emUgaXMgbm90IG5lY2Vzc2FyaWx5IDY0LWJpdHMsIGZvciBleGFtcGxlCisgICAgICAgIHgzMiAo
YnVnICM5OTE1MykuCisKKyAgICAgICAgVGhlIG1ham9yIG1vZGlmaWNhdGlvbiBJIG1hZGUgaXMg
dG8gaW50cm9kdWNlIHRoZSAiKjY0IiBpbnRlcmZhY2VzIGluCisgICAgICAgIHRoZSBNYWNyb0Fz
c2VtYmxlciBmb3IgdGhvc2Ugb3BlcmF0aW9ucyBvbiBKU1ZhbHVlcywga2VlcCB0aGUgIipQdHIi
CisgICAgICAgIGludGVyZmFjZXMgZm9yIHRob3NlIG9wZXJhdGlvbnMgb24gcmVhbCBwb2ludGVy
cywgYW5kIGdvIHRocm91Z2ggYWxsCisgICAgICAgIHRoZSBKSVQgY29tcGlsZXIgY29kZSB0byBj
b3JyZWN0IHRoZSB1c2FnZS4KKworICAgICAgICBUaGlzIGlzIHRoZSBmaXJzdCBwYXJ0IG9mIHRo
ZSB3b3JrLCBpLmUsIHRvIGFkZCB0aGUgKjY0IGludGVyZmFjZXMgdG8KKyAgICAgICAgdGhlIE1h
Y3JvQXNzZW1ibGVyLgorCisgICAgICAgICogYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJs
ZXIuaDogQWRkIHRoZSBJbW02NCBpbnRlcmZhY2VzLgorICAgICAgICAoQWJzdHJhY3RNYWNyb0Fz
c2VtYmxlcik6CisgICAgICAgIChKU0M6OkFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW02NDo6VHJ1c3RlZEltbTY0KToKKyAgICAgICAgKFRydXN0ZWRJbW02NCk6CisgICAgICAgIChK
U0M6OkFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6OkltbTY0OjpJbW02NCk6CisgICAgICAgIChJbW02
NCk6CisgICAgICAgIChKU0M6OkFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6OkltbTY0Ojphc1RydXN0
ZWRJbW02NCk6CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmg6IG1hcCA8Zm9v
PlB0ciBtZXRob2RzIHRvIDxmb28+NjQgZm9yIFg4Nl82NC4KKyAgICAgICAgKE1hY3JvQXNzZW1i
bGVyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXI6OnBlZWs2NCk6CisgICAgICAgIChK
U0M6Ok1hY3JvQXNzZW1ibGVyOjpwb2tlKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXI6
OnBva2U2NCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyOjphZGRQdHIpOgorICAgICAg
ICAoSlNDOjpNYWNyb0Fzc2VtYmxlcjo6YW5kUHRyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3Nl
bWJsZXI6Om5lZ1B0cik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyOjpvclB0cik6Cisg
ICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyOjpyb3RhdGVSaWdodFB0cik6CisgICAgICAgIChK
U0M6Ok1hY3JvQXNzZW1ibGVyOjpzdWJQdHIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxl
cjo6eG9yUHRyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXI6OmxvYWRQdHIpOgorICAg
ICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlcjo6bG9hZFB0cldpdGhBZGRyZXNzT2Zmc2V0UGF0Y2gp
OgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlcjo6bG9hZFB0cldpdGhDb21wYWN0QWRkcmVz
c09mZnNldFBhdGNoKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXI6OmNvbnZlcnRpYmxl
TG9hZFB0cik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyOjpzdG9yZVB0cik6CisgICAg
ICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyOjpzdG9yZVB0cldpdGhBZGRyZXNzT2Zmc2V0UGF0Y2gp
OgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlcjo6bW92ZVB0clRvRG91YmxlKToKKyAgICAg
ICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXI6Om1vdmVEb3VibGVUb1B0cik6CisgICAgICAgIChKU0M6
Ok1hY3JvQXNzZW1ibGVyOjpjb21wYXJlUHRyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJs
ZXI6OnRlc3RQdHIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlcjo6YnJhbmNoUHRyKToK
KyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXI6OmJyYW5jaFRlc3RQdHIpOgorICAgICAgICAo
SlNDOjpNYWNyb0Fzc2VtYmxlcjo6YnJhbmNoQWRkUHRyKToKKyAgICAgICAgKEpTQzo6TWFjcm9B
c3NlbWJsZXI6OmJyYW5jaFN1YlB0cik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyOjpz
aG91bGRCbGluZERvdWJsZSk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyOjpzaG91bGRC
bGluZCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyOjpSb3RhdGVkSW1tNjQ6OlJvdGF0
ZWRJbW02NCk6CisgICAgICAgIChSb3RhdGVkSW1tNjQpOgorICAgICAgICAoSlNDOjpNYWNyb0Fz
c2VtYmxlcjo6cm90YXRpb25CbGluZENvbnN0YW50KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3Nl
bWJsZXI6OmxvYWRSb3RhdGlvbkJsaW5kZWRDb25zdGFudCk6CisgICAgICAgIChKU0M6Ok1hY3Jv
QXNzZW1ibGVyOjptb3ZlKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXI6OmFuZDY0KToK
KyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXI6OnN0b3JlNjQpOgorICAgICAgICAqIGFzc2Vt
Ymxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2Vt
Ymxlclg4NkNvbW1vbjo6c2hvdWxkQmxpbmRGb3JTcGVjaWZpY0FyY2gpOgorICAgICAgICAoTWFj
cm9Bc3NlbWJsZXJYODZDb21tb24pOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4NkNv
bW1vbjo6bW92ZSk6CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0Lmg6
IEFkZCB0aGUgPGZvbz42NCBtZXRob2RzIGZvciBYODZfNjQuCisgICAgICAgIChKU0M6Ok1hY3Jv
QXNzZW1ibGVyWDg2XzY0OjpicmFuY2hBZGQzMik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1i
bGVyWDg2XzY0OjphZGQ2NCk6CisgICAgICAgIChNYWNyb0Fzc2VtYmxlclg4Nl82NCk6CisgICAg
ICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0OjphbmQ2NCk6CisgICAgICAgIChKU0M6Ok1h
Y3JvQXNzZW1ibGVyWDg2XzY0OjpuZWc2NCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVy
WDg2XzY0OjpvcjY0KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJYODZfNjQ6OnJvdGF0
ZVJpZ2h0NjQpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4Nl82NDo6c3ViNjQpOgor
ICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4Nl82NDo6eG9yNjQpOgorICAgICAgICAoSlND
OjpNYWNyb0Fzc2VtYmxlclg4Nl82NDo6bG9hZDY0KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3Nl
bWJsZXJYODZfNjQ6OmNvbnZlcnRpYmxlTG9hZDY0KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3Nl
bWJsZXJYODZfNjQ6OmxvYWQ2NFdpdGhBZGRyZXNzT2Zmc2V0UGF0Y2gpOgorICAgICAgICAoSlND
OjpNYWNyb0Fzc2VtYmxlclg4Nl82NDo6bG9hZDY0V2l0aENvbXBhY3RBZGRyZXNzT2Zmc2V0UGF0
Y2gpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4Nl82NDo6c3RvcmU2NCk6CisgICAg
ICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0OjpzdG9yZTY0V2l0aEFkZHJlc3NPZmZzZXRQ
YXRjaCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0Ojptb3ZlNjRUb0RvdWJs
ZSk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0Ojptb3ZlRG91YmxlVG82NCk6
CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0Ojpjb21wYXJlNjQpOgorICAgICAg
ICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4Nl82NDo6YnJhbmNoNjQpOgorICAgICAgICAoSlNDOjpN
YWNyb0Fzc2VtYmxlclg4Nl82NDo6YnJhbmNoVGVzdDY0KToKKyAgICAgICAgKEpTQzo6TWFjcm9B
c3NlbWJsZXJYODZfNjQ6OnRlc3Q2NCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2
XzY0OjpicmFuY2hBZGQ2NCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0Ojpi
cmFuY2hTdWI2NCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0OjpicmFuY2hQ
dHJXaXRoUGF0Y2gpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4Nl82NDo6c3RvcmVQ
dHJXaXRoUGF0Y2gpOgorCiAyMDEyLTEwLTE1ICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVy
Z0BhcHBsZS5jb20+CiAKICAgICAgICAgTWFrZSBDb3BpZWRTcGFjZSBhbmQgTWFya2VkU3BhY2Ug
cmVnaW9ucyBpbmRlcGVuZGVudApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgJKHJldmlzaW9uIDEzMTM5
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2Vt
Ymxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNjEsNiArMjYxLDUwIEBAIHB1YmxpYzoKIAogICAg
IH07CiAgICAgCisgICAgLy8gVHJ1c3RlZEltbTY0OgorICAgIC8vCisgICAgLy8gQSA2NGJpdCBp
bW1lZGlhdGUgb3BlcmFuZCB0byBhbiBpbnN0cnVjdGlvbiAtIHRoaXMgaXMgd3JhcHBlZCBpbiBh
CisgICAgLy8gY2xhc3MgcmVxdWlyaW5nIGV4cGxpY2l0IGNvbnN0cnVjdGlvbiBpbiBvcmRlciB0
byBwcmV2ZW50IFJlZ2lzdGVySURzCisgICAgLy8gKHdoaWNoIGFyZSBpbXBsZW1lbnRlZCBhcyBh
biBlbnVtKSBmcm9tIGFjY2lkZW50YWxseSBiZWluZyBwYXNzZWQgYXMKKyAgICAvLyBpbW1lZGlh
dGUgdmFsdWVzLgorICAgIHN0cnVjdCBUcnVzdGVkSW1tNjQgeworICAgICAgICBUcnVzdGVkSW1t
NjQoKSB7IH0KKyAgICAgICAgCisgICAgICAgIGV4cGxpY2l0IFRydXN0ZWRJbW02NChpbnQ2NF90
IHZhbHVlKQorICAgICAgICAgICAgOiBtX3ZhbHVlKHZhbHVlKQorICAgICAgICB7CisgICAgICAg
IH0KKworI2lmIENQVShYODZfNjQpCisgICAgICAgIGV4cGxpY2l0IFRydXN0ZWRJbW02NChUcnVz
dGVkSW1tUHRyIHB0cikKKyAgICAgICAgICAgIDogbV92YWx1ZShwdHIuYXNJbnRwdHIoKSkKKyAg
ICAgICAgeworICAgICAgICB9CisjZW5kaWYKKworICAgICAgICBpbnQ2NF90IG1fdmFsdWU7Cisg
ICAgfTsKKworICAgIHN0cnVjdCBJbW02NCA6IAorI2lmIEVOQUJMRShKSVRfQ09OU1RBTlRfQkxJ
TkRJTkcpCisgICAgICAgIHByaXZhdGUgVHJ1c3RlZEltbTY0IAorI2Vsc2UKKyAgICAgICAgcHVi
bGljIFRydXN0ZWRJbW02NAorI2VuZGlmCisgICAgeworICAgICAgICBleHBsaWNpdCBJbW02NChp
bnQ2NF90IHZhbHVlKQorICAgICAgICAgICAgOiBUcnVzdGVkSW1tNjQodmFsdWUpCisgICAgICAg
IHsKKyAgICAgICAgfQorI2lmIENQVShYODZfNjQpCisgICAgICAgIGV4cGxpY2l0IEltbTY0KFRy
dXN0ZWRJbW1QdHIgcHRyKQorICAgICAgICAgICAgOiBUcnVzdGVkSW1tNjQocHRyKQorICAgICAg
ICB7CisgICAgICAgIH0KKyNlbmRpZgorICAgICAgICBjb25zdCBUcnVzdGVkSW1tNjQmIGFzVHJ1
c3RlZEltbTY0KCkgY29uc3QgeyByZXR1cm4gKnRoaXM7IH0KKyAgICB9OworICAgIAogICAgIC8v
IFNlY3Rpb24gMjogTWFjcm9Bc3NlbWJsZXIgY29kZSBidWZmZXIgaGFuZGxlcwogICAgIC8vCiAg
ICAgLy8gVGhlIGZvbGxvd2luZyB0eXBlcyBhcmUgdXNlZCB0byByZWZlcmVuY2UgaXRlbXMgaW4g
dGhlIGNvZGUgYnVmZmVyCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01h
Y3JvQXNzZW1ibGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9NYWNyb0Fzc2VtYmxlci5oCShyZXZpc2lvbiAxMzEzOTkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTcw
LDEwICs3MCw2IEBAIHB1YmxpYzoKICAgICB1c2luZyBNYWNyb0Fzc2VtYmxlckJhc2U6OnBvcDsK
ICAgICB1c2luZyBNYWNyb0Fzc2VtYmxlckJhc2U6Omp1bXA7CiAgICAgdXNpbmcgTWFjcm9Bc3Nl
bWJsZXJCYXNlOjpicmFuY2gzMjsKLSNpZiBDUFUoWDg2XzY0KQotICAgIHVzaW5nIE1hY3JvQXNz
ZW1ibGVyQmFzZTo6YnJhbmNoUHRyOwotICAgIHVzaW5nIE1hY3JvQXNzZW1ibGVyQmFzZTo6YnJh
bmNoVGVzdFB0cjsKLSNlbmRpZgogICAgIHVzaW5nIE1hY3JvQXNzZW1ibGVyQmFzZTo6bW92ZTsK
IAogI2lmIEVOQUJMRShKSVRfQ09OU1RBTlRfQkxJTkRJTkcpCkBAIC0xODcsNiArMTgzLDIzIEBA
IHB1YmxpYzoKICAgICAgICAgc3RvcmVQdHIoaW1tLCBhZGRyZXNzRm9yUG9rZShpbmRleCkpOwog
ICAgIH0KIAorI2lmIENQVShYODZfNjQpCisgICAgdm9pZCBwZWVrNjQoUmVnaXN0ZXJJRCBkZXN0
LCBpbnQgaW5kZXggPSAwKQorICAgIHsKKyAgICAgICAgbG9hZDY0KEFkZHJlc3Moc3RhY2tQb2lu
dGVyUmVnaXN0ZXIsIChpbmRleCAqIHNpemVvZih2b2lkKikpKSwgZGVzdCk7CisgICAgfQorCisg
ICAgdm9pZCBwb2tlKFRydXN0ZWRJbW02NCB2YWx1ZSwgaW50IGluZGV4ID0gMCkKKyAgICB7Cisg
ICAgICAgIHN0b3JlNjQodmFsdWUsIGFkZHJlc3NGb3JQb2tlKGluZGV4KSk7CisgICAgfQorCisg
ICAgdm9pZCBwb2tlNjQoUmVnaXN0ZXJJRCBzcmMsIGludCBpbmRleCA9IDApCisgICAgeworICAg
ICAgICBzdG9yZTY0KHNyYywgYWRkcmVzc0ZvclBva2UoaW5kZXgpKTsKKyAgICB9CisjZW5kaWYK
KyAgICAKIAogICAgIC8vIEJhY2t3YXJkcyBiYW5jaGVzLCB0aGVzZSBhcmUgY3VycmVudGx5IGFs
bCBpbXBsZW1lbnRlZCB1c2luZyBleGlzdGluZyBmb3J3YXJkcyBicmFuY2ggbWVjaGFuaXNtcy4K
ICAgICB2b2lkIGJyYW5jaFB0cihSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQg
b3AxLCBUcnVzdGVkSW1tUHRyIGltbSwgTGFiZWwgdGFyZ2V0KQpAQCAtNTQ1LDE1ICs1NTgsMzAw
IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQmFzZTo6YnJhbmNoVGVz
dDgoY29uZCwgQWRkcmVzcyhhZGRyZXNzLmJhc2UsIGFkZHJlc3Mub2Zmc2V0KSwgbWFzayk7CiAg
ICAgfQogI2Vsc2UKKyAgICB2b2lkIGFkZFB0cihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBk
ZXN0KQorICAgIHsKKyAgICAgICAgYWRkNjQoc3JjLCBkZXN0KTsKKyAgICB9CisgICAgCisgICAg
dm9pZCBhZGRQdHIoQWRkcmVzcyBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAg
IGFkZDY0KHNyYywgZGVzdCk7CisgICAgfQorCisgICAgdm9pZCBhZGRQdHIoVHJ1c3RlZEltbTMy
IGltbSwgUmVnaXN0ZXJJRCBzcmNEZXN0KQorICAgIHsKKyAgICAgICAgYWRkNjQoaW1tLCBzcmNE
ZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIGFkZFB0cihUcnVzdGVkSW1tMzIgaW1tLCBSZWdpc3Rl
cklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgYWRkNjQoaW1tLCBzcmMs
IGRlc3QpOworICAgIH0KKworICAgIHZvaWQgYWRkUHRyKFRydXN0ZWRJbW0zMiBpbW0sIEFkZHJl
c3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIGFkZDY0KGltbSwgYWRkcmVzcyk7CisgICAgfQor
CisgICAgdm9pZCBhZGRQdHIoQWJzb2x1dGVBZGRyZXNzIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQor
ICAgIHsKKyAgICAgICAgYWRkNjQoc3JjLCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIGFkZFB0
cihUcnVzdGVkSW1tUHRyIGltbSwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgYWRk
NjQoVHJ1c3RlZEltbTY0KGltbSksIGRlc3QpOworICAgIH0KKworICAgIHZvaWQgYWRkUHRyKFRy
dXN0ZWRJbW0zMiBpbW0sIEFic29sdXRlQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAg
YWRkNjQoaW1tLCBhZGRyZXNzKTsKKyAgICB9CisKKyAgICB2b2lkIGFuZFB0cihSZWdpc3RlcklE
IHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgYW5kNjQoc3JjLCBkZXN0KTsK
KyAgICB9CisKKyAgICB2b2lkIGFuZFB0cihUcnVzdGVkSW1tMzIgaW1tLCBSZWdpc3RlcklEIHNy
Y0Rlc3QpCisgICAgeworICAgICAgICBhbmQ2NChpbW0sIHNyY0Rlc3QpOworICAgIH0KKyAgICAK
KyAgICB2b2lkIG5lZ1B0cihSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBuZWc2NChk
ZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIG9yUHRyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklE
IGRlc3QpCisgICAgeworICAgICAgICBvcjY0KHNyYywgZGVzdCk7CisgICAgfQorCisgICAgdm9p
ZCBvclB0cihUcnVzdGVkSW1tMzIgaW1tLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAg
ICBvcjY0KGltbSwgZGVzdCk7CisgICAgfQorCisgICAgdm9pZCBvclB0cihUcnVzdGVkSW1tUHRy
IGltbSwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgb3I2NChUcnVzdGVkSW1tNjQo
aW1tKSwgZGVzdCk7CisgICAgfQorCisgICAgdm9pZCBvclB0cihSZWdpc3RlcklEIG9wMSwgUmVn
aXN0ZXJJRCBvcDIsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG9yNjQob3AxLCBv
cDIsIGRlc3QpOworICAgIH0KKworICAgIHZvaWQgb3JQdHIoVHJ1c3RlZEltbTMyIGltbSwgUmVn
aXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG9yNjQoaW1tLCBz
cmMsIGRlc3QpOworICAgIH0KICAgICAKKyAgICB2b2lkIHJvdGF0ZVJpZ2h0UHRyKFRydXN0ZWRJ
bW0zMiBpbW0sIFJlZ2lzdGVySUQgc3JjRHN0KQorICAgIHsKKyAgICAgICAgcm90YXRlUmlnaHQ2
NChpbW0sIHNyY0RzdCk7CisgICAgfQorCisgICAgdm9pZCBzdWJQdHIoUmVnaXN0ZXJJRCBzcmMs
IFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIHN1YjY0KHNyYywgZGVzdCk7CisgICAg
fQorICAgIAorICAgIHZvaWQgc3ViUHRyKFRydXN0ZWRJbW0zMiBpbW0sIFJlZ2lzdGVySUQgZGVz
dCkKKyAgICB7CisgICAgICAgIHN1YjY0KGltbSwgZGVzdCk7CisgICAgfQorICAgIAorICAgIHZv
aWQgc3ViUHRyKFRydXN0ZWRJbW1QdHIgaW1tLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAg
ICAgICBzdWI2NChUcnVzdGVkSW1tNjQoaW1tKSwgZGVzdCk7CisgICAgfQorCisgICAgdm9pZCB4
b3JQdHIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIHhv
cjY0KHNyYywgZGVzdCk7CisgICAgfQorICAgIAorICAgIHZvaWQgeG9yUHRyKFJlZ2lzdGVySUQg
c3JjLCBBZGRyZXNzIGRlc3QpCisgICAgeworICAgICAgICB4b3I2NChzcmMsIGRlc3QpOworICAg
IH0KKworICAgIHZvaWQgeG9yUHRyKFRydXN0ZWRJbW0zMiBpbW0sIFJlZ2lzdGVySUQgc3JjRGVz
dCkKKyAgICB7CisgICAgICAgIHhvcjY0KGltbSwgc3JjRGVzdCk7CisgICAgfQorCisgICAgdm9p
ZCBsb2FkUHRyKEltcGxpY2l0QWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3QpCisgICAg
eworICAgICAgICBsb2FkNjQoYWRkcmVzcywgZGVzdCk7CisgICAgfQorCisgICAgdm9pZCBsb2Fk
UHRyKEJhc2VJbmRleCBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBs
b2FkNjQoYWRkcmVzcywgZGVzdCk7CisgICAgfQorCisgICAgdm9pZCBsb2FkUHRyKGNvbnN0IHZv
aWQqIGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIGxvYWQ2NChhZGRy
ZXNzLCBkZXN0KTsKKyAgICB9CisKKyAgICBEYXRhTGFiZWwzMiBsb2FkUHRyV2l0aEFkZHJlc3NP
ZmZzZXRQYXRjaChBZGRyZXNzIGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBsb2FkNjRXaXRoQWRkcmVzc09mZnNldFBhdGNoKGFkZHJlc3MsIGRlc3QpOwor
ICAgIH0KKyAgICAKKyAgICBEYXRhTGFiZWxDb21wYWN0IGxvYWRQdHJXaXRoQ29tcGFjdEFkZHJl
c3NPZmZzZXRQYXRjaChBZGRyZXNzIGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBsb2FkNjRXaXRoQ29tcGFjdEFkZHJlc3NPZmZzZXRQYXRjaChhZGRyZXNz
LCBkZXN0KTsKKyAgICB9CisKKyAgICBDb252ZXJ0aWJsZUxvYWRMYWJlbCBjb252ZXJ0aWJsZUxv
YWRQdHIoQWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBy
ZXR1cm4gY29udmVydGlibGVMb2FkNjQoYWRkcmVzcywgZGVzdCk7CisgICAgfQorCisgICAgdm9p
ZCBzdG9yZVB0cihSZWdpc3RlcklEIHNyYywgSW1wbGljaXRBZGRyZXNzIGFkZHJlc3MpCisgICAg
eworICAgICAgICBzdG9yZTY0KHNyYywgYWRkcmVzcyk7CisgICAgfQorCisgICAgdm9pZCBzdG9y
ZVB0cihSZWdpc3RlcklEIHNyYywgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBz
dG9yZTY0KHNyYywgYWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgc3RvcmVQdHIoUmVn
aXN0ZXJJRCBzcmMsIHZvaWQqIGFkZHJlc3MpCisgICAgeworICAgICAgICBzdG9yZTY0KHNyYywg
YWRkcmVzcyk7CisgICAgfQorCisgICAgdm9pZCBzdG9yZVB0cihUcnVzdGVkSW1tUHRyIGltbSwg
SW1wbGljaXRBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBzdG9yZTY0KFRydXN0ZWRJ
bW02NChpbW0pLCBhZGRyZXNzKTsKKyAgICB9CisKKyAgICB2b2lkIHN0b3JlUHRyKFRydXN0ZWRJ
bW1QdHIgaW1tLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIHN0b3JlNjQoVHJ1
c3RlZEltbTY0KGltbSksIGFkZHJlc3MpOworICAgIH0KKworICAgIERhdGFMYWJlbDMyIHN0b3Jl
UHRyV2l0aEFkZHJlc3NPZmZzZXRQYXRjaChSZWdpc3RlcklEIHNyYywgQWRkcmVzcyBhZGRyZXNz
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0b3JlNjRXaXRoQWRkcmVzc09mZnNldFBhdGNoKHNy
YywgYWRkcmVzcyk7CisgICAgfQorCisgICAgdm9pZCBtb3ZlUHRyVG9Eb3VibGUoUmVnaXN0ZXJJ
RCBzcmMsIEZQUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbW92ZTY0VG9Eb3VibGUo
c3JjLCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIG1vdmVEb3VibGVUb1B0cihGUFJlZ2lzdGVy
SUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtb3ZlRG91YmxlVG82NChz
cmMsIGRlc3QpOworICAgIH0KKworICAgIHZvaWQgY29tcGFyZVB0cihSZWxhdGlvbmFsQ29uZGl0
aW9uIGNvbmQsIFJlZ2lzdGVySUQgbGVmdCwgVHJ1c3RlZEltbTMyIHJpZ2h0LCBSZWdpc3RlcklE
IGRlc3QpCisgICAgeworICAgICAgICBjb21wYXJlNjQoY29uZCwgbGVmdCwgcmlnaHQsIGRlc3Qp
OworICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBhcmVQdHIoUmVsYXRpb25hbENvbmRpdGlvbiBj
b25kLCBSZWdpc3RlcklEIGxlZnQsIFJlZ2lzdGVySUQgcmlnaHQsIFJlZ2lzdGVySUQgZGVzdCkK
KyAgICB7CisgICAgICAgIGNvbXBhcmU2NChjb25kLCBsZWZ0LCByaWdodCwgZGVzdCk7CisgICAg
fQorICAgIAorICAgIHZvaWQgdGVzdFB0cihSZXN1bHRDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJ
RCByZWcsIFRydXN0ZWRJbW0zMiBtYXNrLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAg
ICB0ZXN0NjQoY29uZCwgcmVnLCBtYXNrLCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIHRlc3RQ
dHIoUmVzdWx0Q29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgcmVnLCBSZWdpc3RlcklEIG1hc2ss
IFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIHRlc3Q2NChjb25kLCByZWcsIG1hc2ss
IGRlc3QpOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoUHRyKFJlbGF0aW9uYWxDb25kaXRpb24g
Y29uZCwgUmVnaXN0ZXJJRCBsZWZ0LCBSZWdpc3RlcklEIHJpZ2h0KQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGJyYW5jaDY0KGNvbmQsIGxlZnQsIHJpZ2h0KTsKKyAgICB9CisKKyAgICBKdW1wIGJy
YW5jaFB0cihSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgbGVmdCwgVHJ1c3Rl
ZEltbVB0ciByaWdodCkKKyAgICB7CisgICAgICAgIHJldHVybiBicmFuY2g2NChjb25kLCBsZWZ0
LCBUcnVzdGVkSW1tNjQocmlnaHQpKTsKKyAgICB9CisgICAgCisgICAgSnVtcCBicmFuY2hQdHIo
UmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGxlZnQsIEFkZHJlc3MgcmlnaHQp
CisgICAgeworICAgICAgICByZXR1cm4gYnJhbmNoNjQoY29uZCwgbGVmdCwgcmlnaHQpOworICAg
IH0KKworICAgIEp1bXAgYnJhbmNoUHRyKFJlbGF0aW9uYWxDb25kaXRpb24gY29uZCwgQWRkcmVz
cyBsZWZ0LCBSZWdpc3RlcklEIHJpZ2h0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJyYW5jaDY0
KGNvbmQsIGxlZnQsIHJpZ2h0KTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaFB0cihSZWxhdGlv
bmFsQ29uZGl0aW9uIGNvbmQsIEFic29sdXRlQWRkcmVzcyBsZWZ0LCBSZWdpc3RlcklEIHJpZ2h0
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJyYW5jaDY0KGNvbmQsIGxlZnQsIHJpZ2h0KTsKKyAg
ICB9CisKKyAgICBKdW1wIGJyYW5jaFB0cihSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIEFkZHJl
c3MgbGVmdCwgVHJ1c3RlZEltbVB0ciByaWdodCkKKyAgICB7CisgICAgICAgIHJldHVybiBicmFu
Y2g2NChjb25kLCBsZWZ0LCBUcnVzdGVkSW1tNjQocmlnaHQpKTsKKyAgICB9CisKKyAgICBKdW1w
IGJyYW5jaFRlc3RQdHIoUmVzdWx0Q29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgcmVnLCBSZWdp
c3RlcklEIG1hc2spCisgICAgeworICAgICAgICByZXR1cm4gYnJhbmNoVGVzdDY0KGNvbmQsIHJl
ZywgbWFzayk7CisgICAgfQorICAgIAorICAgIEp1bXAgYnJhbmNoVGVzdFB0cihSZXN1bHRDb25k
aXRpb24gY29uZCwgUmVnaXN0ZXJJRCByZWcsIFRydXN0ZWRJbW0zMiBtYXNrID0gVHJ1c3RlZElt
bTMyKC0xKSkKKyAgICB7CisgICAgICAgIHJldHVybiBicmFuY2hUZXN0NjQoY29uZCwgcmVnLCBt
YXNrKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaFRlc3RQdHIoUmVzdWx0Q29uZGl0aW9uIGNv
bmQsIEFkZHJlc3MgYWRkcmVzcywgVHJ1c3RlZEltbTMyIG1hc2sgPSBUcnVzdGVkSW1tMzIoLTEp
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJyYW5jaFRlc3Q2NChjb25kLCBhZGRyZXNzLCBtYXNr
KTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaFRlc3RQdHIoUmVzdWx0Q29uZGl0aW9uIGNvbmQs
IEFkZHJlc3MgYWRkcmVzcywgUmVnaXN0ZXJJRCByZWcpCisgICAgeworICAgICAgICByZXR1cm4g
YnJhbmNoVGVzdDY0KGNvbmQsIGFkZHJlc3MsIHJlZyk7CisgICAgfQorCisgICAgSnVtcCBicmFu
Y2hUZXN0UHRyKFJlc3VsdENvbmRpdGlvbiBjb25kLCBCYXNlSW5kZXggYWRkcmVzcywgVHJ1c3Rl
ZEltbTMyIG1hc2sgPSBUcnVzdGVkSW1tMzIoLTEpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJy
YW5jaFRlc3Q2NChjb25kLCBhZGRyZXNzLCBtYXNrKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5j
aFRlc3RQdHIoUmVzdWx0Q29uZGl0aW9uIGNvbmQsIEFic29sdXRlQWRkcmVzcyBhZGRyZXNzLCBU
cnVzdGVkSW1tMzIgbWFzayA9IFRydXN0ZWRJbW0zMigtMSkpCisgICAgeworICAgICAgICByZXR1
cm4gYnJhbmNoVGVzdDY0KGNvbmQsIGFkZHJlc3MsIG1hc2spOworICAgIH0KKworICAgIEp1bXAg
YnJhbmNoQWRkUHRyKFJlc3VsdENvbmRpdGlvbiBjb25kLCBUcnVzdGVkSW1tMzIgaW1tLCBSZWdp
c3RlcklEIGRlc3QpCisgICAgeworICAgICAgICByZXR1cm4gYnJhbmNoQWRkNjQoY29uZCwgaW1t
LCBkZXN0KTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaEFkZFB0cihSZXN1bHRDb25kaXRpb24g
Y29uZCwgUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBicmFuY2hBZGQ2NChjb25kLCBzcmMsIGRlc3QpOworICAgIH0KKworICAgIEp1bXAgYnJh
bmNoU3ViUHRyKFJlc3VsdENvbmRpdGlvbiBjb25kLCBUcnVzdGVkSW1tMzIgaW1tLCBSZWdpc3Rl
cklEIGRlc3QpCisgICAgeworICAgICAgICByZXR1cm4gYnJhbmNoU3ViNjQoY29uZCwgaW1tLCBk
ZXN0KTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaFN1YlB0cihSZXN1bHRDb25kaXRpb24gY29u
ZCwgUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIHJldHVy
biBicmFuY2hTdWI2NChjb25kLCBzcmMsIGRlc3QpOworICAgIH0KKworICAgIEp1bXAgYnJhbmNo
U3ViUHRyKFJlc3VsdENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIHNyYzEsIFRydXN0ZWRJbW0z
MiBzcmMyLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICByZXR1cm4gYnJhbmNoU3Vi
NjQoY29uZCwgc3JjMSwgc3JjMiwgZGVzdCk7CisgICAgfQorCiAjaWYgRU5BQkxFKEpJVF9DT05T
VEFOVF9CTElORElORykKLSAgICB1c2luZyBNYWNyb0Fzc2VtYmxlckJhc2U6OmFkZFB0cjsKLSAg
ICB1c2luZyBNYWNyb0Fzc2VtYmxlckJhc2U6OmFuZFB0cjsKLSAgICB1c2luZyBNYWNyb0Fzc2Vt
YmxlckJhc2U6OmJyYW5jaFN1YlB0cjsKKyAgICB1c2luZyBNYWNyb0Fzc2VtYmxlckJhc2U6OmFu
ZDY0OwogICAgIHVzaW5nIE1hY3JvQXNzZW1ibGVyQmFzZTo6Y29udmVydEludDMyVG9Eb3VibGU7
Ci0gICAgdXNpbmcgTWFjcm9Bc3NlbWJsZXJCYXNlOjpzdG9yZVB0cjsKLSAgICB1c2luZyBNYWNy
b0Fzc2VtYmxlckJhc2U6OnN1YlB0cjsKLSAgICB1c2luZyBNYWNyb0Fzc2VtYmxlckJhc2U6Onhv
clB0cjsKKyAgICB1c2luZyBNYWNyb0Fzc2VtYmxlckJhc2U6OnN0b3JlNjQ7CiAgICAgCiAgICAg
Ym9vbCBzaG91bGRCbGluZERvdWJsZShkb3VibGUgdmFsdWUpCiAgICAgewpAQCAtNTYzLDcgKzg2
MSw3IEBAIHB1YmxpYzoKIAogICAgICAgICAvLyBUcnkgdG8gZm9yY2Ugbm9ybWFsaXNhdGlvbiwg
YW5kIGNoZWNrIHRoYXQgdGhlcmUncyBubyBjaGFuZ2UKICAgICAgICAgLy8gaW4gdGhlIGJpdCBw
YXR0ZXJuCi0gICAgICAgIGlmIChiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pih2YWx1ZSAqIDEuMCkg
IT0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4odmFsdWUpKQorICAgICAgICBpZiAoYml0d2lzZV9j
YXN0PHVpbnQ2NF90Pih2YWx1ZSAqIDEuMCkgIT0gYml0d2lzZV9jYXN0PHVpbnQ2NF90Pih2YWx1
ZSkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgICAgICB2YWx1ZSA9IGFicyh2YWx1
ZSk7CkBAIC02MDIsNyArOTAwLDYgQEAgcHVibGljOgogICAgICAgICBkZWZhdWx0OiB7CiAgICAg
ICAgICAgICBpZiAodmFsdWUgPD0gMHhmZikKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0jaWYgQ1BVKFg4Nl82NCkKICAgICAgICAgICAgIEpTVmFsdWUganNWYWx1ZSA9IEpTVmFsdWU6
OmRlY29kZShyZWludGVycHJldF9jYXN0PHZvaWQqPih2YWx1ZSkpOwogICAgICAgICAgICAgaWYg
KGpzVmFsdWUuaXNJbnQzMigpKQogICAgICAgICAgICAgICAgIHJldHVybiBzaG91bGRCbGluZChJ
bW0zMihqc1ZhbHVlLmFzSW50MzIoKSkpOwpAQCAtNjExLDcgKzkwOCw2IEBAIHB1YmxpYzoKIAog
ICAgICAgICAgICAgaWYgKCFzaG91bGRCbGluZERvdWJsZShiaXR3aXNlX2Nhc3Q8ZG91YmxlPih2
YWx1ZSkpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZiAKICAgICAgICAg
fQogICAgICAgICB9CiAgICAgICAgIHJldHVybiBzaG91bGRCbGluZEZvclNwZWNpZmljQXJjaCh2
YWx1ZSk7CkBAIC02NDEsNiArOTM3LDU5IEBAIHB1YmxpYzoKICAgICAgICAgcm90YXRlUmlnaHRQ
dHIoY29uc3RhbnQucm90YXRpb24sIGRlc3QpOwogICAgIH0KIAorICAgIGJvb2wgc2hvdWxkQmxp
bmQoSW1tNjQgaW1tKQorICAgIHsgCisjaWYgIWRlZmluZWQoTkRFQlVHKQorICAgICAgICBVTlVT
RURfUEFSQU0oaW1tKTsKKyAgICAgICAgLy8gRGVidWcgYWx3YXlzIGJsaW5kIGFsbCBjb25zdGFu
dHMsIGlmIG9ubHkgc28gd2Uga25vdworICAgICAgICAvLyBpZiB3ZSd2ZSBicm9rZW4gYmxpbmRp
bmcgZHVyaW5nIHBhdGNoIGRldmVsb3BtZW50LgorICAgICAgICByZXR1cm4gdHJ1ZTsgICAgICAg
IAorI2VuZGlmCisKKyAgICAgICAgLy8gRmlyc3Qgb2ZmIHdlJ2xsIHNwZWNpYWwgY2FzZSBjb21t
b24sICJzYWZlIiB2YWx1ZXMgdG8gYXZvaWQgaHVydGluZworICAgICAgICAvLyBwZXJmb3JtYW5j
ZSB0b28gbXVjaAorICAgICAgICB1aW50NjRfdCB2YWx1ZSA9IGltbS5hc1RydXN0ZWRJbW02NCgp
Lm1fdmFsdWU7CisgICAgICAgIHN3aXRjaCAodmFsdWUpIHsKKyAgICAgICAgY2FzZSAweGZmZmY6
CisgICAgICAgIGNhc2UgMHhmZmZmZmY6CisgICAgICAgIGNhc2UgMHhmZmZmZmZmZkw6CisgICAg
ICAgIGNhc2UgMHhmZmZmZmZmZmZmTDoKKyAgICAgICAgY2FzZSAweGZmZmZmZmZmZmZmZkw6Cisg
ICAgICAgIGNhc2UgMHhmZmZmZmZmZmZmZmZmZkw6CisgICAgICAgIGNhc2UgMHhmZmZmZmZmZmZm
ZmZmZmZmTDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgZGVmYXVsdDogewor
ICAgICAgICAgICAgaWYgKHZhbHVlIDw9IDB4ZmYpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHNob3VsZEJsaW5kRm9y
U3BlY2lmaWNBcmNoKHZhbHVlKTsKKyAgICB9CisgICAgCisgICAgc3RydWN0IFJvdGF0ZWRJbW02
NCB7CisgICAgICAgIFJvdGF0ZWRJbW02NCh1aW50NjRfdCB2MSwgdWludDhfdCB2MikKKyAgICAg
ICAgICAgIDogdmFsdWUodjEpCisgICAgICAgICAgICAsIHJvdGF0aW9uKHYyKQorICAgICAgICB7
CisgICAgICAgIH0KKyAgICAgICAgVHJ1c3RlZEltbTY0IHZhbHVlOworICAgICAgICBUcnVzdGVk
SW1tMzIgcm90YXRpb247CisgICAgfTsKKyAgICAKKyAgICBSb3RhdGVkSW1tNjQgcm90YXRpb25C
bGluZENvbnN0YW50KEltbTY0IGltbSkKKyAgICB7CisgICAgICAgIHVpbnQ4X3Qgcm90YXRpb24g
PSByYW5kb20oKSAlIChzaXplb2YoaW50NjRfdCkgKiA4KTsKKyAgICAgICAgdWludDY0X3QgdmFs
dWUgPSBpbW0uYXNUcnVzdGVkSW1tNjQoKS5tX3ZhbHVlOworICAgICAgICB2YWx1ZSA9ICh2YWx1
ZSA8PCByb3RhdGlvbikgfCAodmFsdWUgPj4gKHNpemVvZihpbnQ2NF90KSAqIDggLSByb3RhdGlv
bikpOworICAgICAgICByZXR1cm4gUm90YXRlZEltbTY0KHZhbHVlLCByb3RhdGlvbik7CisgICAg
fQorICAgIAorICAgIHZvaWQgbG9hZFJvdGF0aW9uQmxpbmRlZENvbnN0YW50KFJvdGF0ZWRJbW02
NCBjb25zdGFudCwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbW92ZShjb25zdGFu
dC52YWx1ZSwgZGVzdCk7CisgICAgICAgIHJvdGF0ZVJpZ2h0NjQoY29uc3RhbnQucm90YXRpb24s
IGRlc3QpOworICAgIH0KKwogICAgIHZvaWQgY29udmVydEludDMyVG9Eb3VibGUoSW1tMzIgaW1t
LCBGUFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CiAgICAgICAgIGlmIChzaG91bGRCbGluZChpbW0p
KSB7CkBAIC02NTksNiArMTAwOCwyNCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBtb3ZlKGltbS5h
c1RydXN0ZWRJbW1QdHIoKSwgZGVzdCk7CiAgICAgfQogCisgICAgdm9pZCBtb3ZlKEltbTY0IGlt
bSwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgaWYgKHNob3VsZEJsaW5kKGltbSkp
CisgICAgICAgICAgICBsb2FkUm90YXRpb25CbGluZGVkQ29uc3RhbnQocm90YXRpb25CbGluZENv
bnN0YW50KGltbSksIGRlc3QpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtb3ZlKGltbS5h
c1RydXN0ZWRJbW02NCgpLCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIGFuZDY0KEltbTMyIGlt
bSwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgaWYgKHNob3VsZEJsaW5kKGltbSkp
IHsKKyAgICAgICAgICAgIEJsaW5kZWRJbW0zMiBrZXkgPSBhbmRCbGluZGVkQ29uc3RhbnQoaW1t
KTsKKyAgICAgICAgICAgIGFuZDY0KGtleS52YWx1ZTEsIGRlc3QpOworICAgICAgICAgICAgYW5k
NjQoa2V5LnZhbHVlMiwgZGVzdCk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgYW5kNjQo
aW1tLmFzVHJ1c3RlZEltbTMyKCksIGRlc3QpOworICAgIH0KKwogICAgIEp1bXAgYnJhbmNoUHRy
KFJlbGF0aW9uYWxDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBsZWZ0LCBJbW1QdHIgcmlnaHQp
CiAgICAgewogICAgICAgICBpZiAoc2hvdWxkQmxpbmQocmlnaHQpKSB7CkBAIC02NzksNiArMTA0
NiwxNiBAQCBwdWJsaWM6CiAgICAgICAgICAgICBzdG9yZVB0cihpbW0uYXNUcnVzdGVkSW1tUHRy
KCksIGRlc3QpOwogICAgIH0KIAorICAgIHZvaWQgc3RvcmU2NChJbW02NCBpbW0sIEFkZHJlc3Mg
ZGVzdCkKKyAgICB7CisgICAgICAgIGlmIChzaG91bGRCbGluZChpbW0pKSB7CisgICAgICAgICAg
ICBSZWdpc3RlcklEIHNjcmF0Y2hSZWdpc3RlciA9IHNjcmF0Y2hSZWdpc3RlckZvckJsaW5kaW5n
KCk7CisgICAgICAgICAgICBsb2FkUm90YXRpb25CbGluZGVkQ29uc3RhbnQocm90YXRpb25CbGlu
ZENvbnN0YW50KGltbSksIHNjcmF0Y2hSZWdpc3Rlcik7CisgICAgICAgICAgICBzdG9yZTY0KHNj
cmF0Y2hSZWdpc3RlciwgZGVzdCk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgc3RvcmU2
NChpbW0uYXNUcnVzdGVkSW1tNjQoKSwgZGVzdCk7CisgICAgfQorCiAjZW5kaWYKIAogI2VuZGlm
IC8vICFDUFUoWDg2XzY0KQpAQCAtODcyLDYgKzEyNDksMTMgQEAgcHVibGljOgogICAgICAgICBz
dG9yZVB0cih2YWx1ZSwgYWRkcmVzc0ZvclBva2UoaW5kZXgpKTsKICAgICB9CiAgICAgCisjaWYg
Q1BVKFg4Nl82NCkKKyAgICB2b2lkIHBva2UoSW1tNjQgdmFsdWUsIGludCBpbmRleCA9IDApCisg
ICAgeworICAgICAgICBzdG9yZTY0KHZhbHVlLCBhZGRyZXNzRm9yUG9rZShpbmRleCkpOworICAg
IH0KKyNlbmRpZgorICAgIAogICAgIHZvaWQgc3RvcmUzMihJbW0zMiBpbW0sIEFkZHJlc3MgZGVz
dCkKICAgICB7CiAgICAgICAgIGlmIChzaG91bGRCbGluZChpbW0pKSB7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4
NkNvbW1vbi5oCShyZXZpc2lvbiAxMzEzOTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTk3LDkg
Kzk3LDEyIEBAIHB1YmxpYzoKICNpZiBFTkFCTEUoSklUX0NPTlNUQU5UX0JMSU5ESU5HKQogICAg
IHN0YXRpYyBib29sIHNob3VsZEJsaW5kRm9yU3BlY2lmaWNBcmNoKHVpbnQzMl90IHZhbHVlKSB7
IHJldHVybiB2YWx1ZSA+PSAweDAwZmZmZmZmOyB9CiAjaWYgQ1BVKFg4Nl82NCkKKyAgICBzdGF0
aWMgYm9vbCBzaG91bGRCbGluZEZvclNwZWNpZmljQXJjaCh1aW50NjRfdCB2YWx1ZSkgeyByZXR1
cm4gdmFsdWUgPj0gMHgwMGZmZmZmZjsgfQorI2lmIE9TKERBUldJTikgLy8gT24gNjQtYml0IHN5
c3RlbXMgb3RoZXIgdGhhbiBEQVJXSU4gdWludDY0X3QgYW5kIHVpbnRwdHJfdCBhcmUgdGhlIHNh
bWUgdHlwZSBzbyBvdmVybG9hZCBpcyBwcm9oaWJpdGVkLgogICAgIHN0YXRpYyBib29sIHNob3Vs
ZEJsaW5kRm9yU3BlY2lmaWNBcmNoKHVpbnRwdHJfdCB2YWx1ZSkgeyByZXR1cm4gdmFsdWUgPj0g
MHgwMGZmZmZmZjsgfQogI2VuZGlmCiAjZW5kaWYKKyNlbmRpZgogCiAgICAgLy8gSW50ZWdlciBh
cml0aG1ldGljIG9wZXJhdGlvbnM6CiAgICAgLy8KQEAgLTk5Myw2ICs5OTYsMTEgQEAgcHVibGlj
OgogICAgICAgICBtX2Fzc2VtYmxlci5tb3ZxX2k2NHIoaW1tLmFzSW50cHRyKCksIGRlc3QpOwog
ICAgIH0KIAorICAgIHZvaWQgbW92ZShUcnVzdGVkSW1tNjQgaW1tLCBSZWdpc3RlcklEIGRlc3Qp
CisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5tb3ZxX2k2NHIoaW1tLm1fdmFsdWUsIGRlc3Qp
OworICAgIH0KKwogICAgIHZvaWQgc3dhcChSZWdpc3RlcklEIHJlZzEsIFJlZ2lzdGVySUQgcmVn
MikKICAgICB7CiAgICAgICAgIGlmIChyZWcxICE9IHJlZzIpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oCShy
ZXZpc2lvbiAxMzEzOTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3Jv
QXNzZW1ibGVyWDg2XzY0LmgJKHdvcmtpbmcgY29weSkKQEAgLTE1NCwyMzEgKzE1NCwyMzIgQEAg
cHVibGljOgogICAgICAgICByZXR1cm4gQ2FsbDo6ZnJvbVRhaWxKdW1wKG5ld0p1bXApOwogICAg
IH0KIAorICAgIEp1bXAgYnJhbmNoQWRkMzIoUmVzdWx0Q29uZGl0aW9uIGNvbmQsIFRydXN0ZWRJ
bW0zMiBzcmMsIEFic29sdXRlQWRkcmVzcyBkZXN0KQorICAgIHsKKyAgICAgICAgbW92ZShUcnVz
dGVkSW1tUHRyKGRlc3QubV9wdHIpLCBzY3JhdGNoUmVnaXN0ZXIpOworICAgICAgICBhZGQzMihz
cmMsIEFkZHJlc3Moc2NyYXRjaFJlZ2lzdGVyKSk7CisgICAgICAgIHJldHVybiBKdW1wKG1fYXNz
ZW1ibGVyLmpDQyh4ODZDb25kaXRpb24oY29uZCkpKTsKKyAgICB9CiAKLSAgICB2b2lkIGFkZFB0
cihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHZvaWQgYWRkNjQoUmVnaXN0
ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CiAgICAgICAgIG1fYXNzZW1ibGVyLmFk
ZHFfcnIoc3JjLCBkZXN0KTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBhZGRQdHIoQWRkcmVzcyBz
cmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB2b2lkIGFkZDY0KEFkZHJlc3Mgc3JjLCBSZWdpc3Rl
cklEIGRlc3QpCiAgICAgewogICAgICAgICBtX2Fzc2VtYmxlci5hZGRxX21yKHNyYy5vZmZzZXQs
IHNyYy5iYXNlLCBkZXN0KTsKICAgICB9CiAKLSAgICB2b2lkIGFkZFB0cihBYnNvbHV0ZUFkZHJl
c3Mgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgdm9pZCBhZGQ2NChBYnNvbHV0ZUFkZHJlc3Mg
c3JjLCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewogICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
c3JjLm1fcHRyKSwgc2NyYXRjaFJlZ2lzdGVyKTsKLSAgICAgICAgYWRkUHRyKEFkZHJlc3Moc2Ny
YXRjaFJlZ2lzdGVyKSwgZGVzdCk7CisgICAgICAgIGFkZDY0KEFkZHJlc3Moc2NyYXRjaFJlZ2lz
dGVyKSwgZGVzdCk7CiAgICAgfQogCi0gICAgdm9pZCBhZGRQdHIoVHJ1c3RlZEltbTMyIGltbSwg
UmVnaXN0ZXJJRCBzcmNEZXN0KQorICAgIHZvaWQgYWRkNjQoVHJ1c3RlZEltbTMyIGltbSwgUmVn
aXN0ZXJJRCBzcmNEZXN0KQogICAgIHsKICAgICAgICAgbV9hc3NlbWJsZXIuYWRkcV9pcihpbW0u
bV92YWx1ZSwgc3JjRGVzdCk7CiAgICAgfQogCi0gICAgdm9pZCBhZGRQdHIoVHJ1c3RlZEltbVB0
ciBpbW0sIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB2b2lkIGFkZDY0KFRydXN0ZWRJbW02NCBpbW0s
IFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CiAgICAgICAgIG1vdmUoaW1tLCBzY3JhdGNoUmVnaXN0
ZXIpOwotICAgICAgICBtX2Fzc2VtYmxlci5hZGRxX3JyKHNjcmF0Y2hSZWdpc3RlciwgZGVzdCk7
CisgICAgICAgIGFkZDY0KHNjcmF0Y2hSZWdpc3RlciwgZGVzdCk7CiAgICAgfQogCi0gICAgdm9p
ZCBhZGRQdHIoVHJ1c3RlZEltbTMyIGltbSwgUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVz
dCkKKyAgICB2b2lkIGFkZDY0KFRydXN0ZWRJbW0zMiBpbW0sIFJlZ2lzdGVySUQgc3JjLCBSZWdp
c3RlcklEIGRlc3QpCiAgICAgewogICAgICAgICBtX2Fzc2VtYmxlci5sZWFxX21yKGltbS5tX3Zh
bHVlLCBzcmMsIGRlc3QpOwogICAgIH0KIAotICAgIHZvaWQgYWRkUHRyKFRydXN0ZWRJbW0zMiBp
bW0sIEFkZHJlc3MgYWRkcmVzcykKKyAgICB2b2lkIGFkZDY0KFRydXN0ZWRJbW0zMiBpbW0sIEFk
ZHJlc3MgYWRkcmVzcykKICAgICB7CiAgICAgICAgIG1fYXNzZW1ibGVyLmFkZHFfaW0oaW1tLm1f
dmFsdWUsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UpOwogICAgIH0KIAotICAgIHZvaWQg
YWRkUHRyKFRydXN0ZWRJbW0zMiBpbW0sIEFic29sdXRlQWRkcmVzcyBhZGRyZXNzKQotICAgIHsK
LSAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGFkZHJlc3MubV9wdHIpLCBzY3JhdGNoUmVnaXN0
ZXIpOwotICAgICAgICBhZGRQdHIoaW1tLCBBZGRyZXNzKHNjcmF0Y2hSZWdpc3RlcikpOwotICAg
IH0KLQogICAgIHZvaWQgYWRkNjQoVHJ1c3RlZEltbTMyIGltbSwgQWJzb2x1dGVBZGRyZXNzIGFk
ZHJlc3MpCiAgICAgewotICAgICAgICBhZGRQdHIoaW1tLCBhZGRyZXNzKTsKKyAgICAgICAgbW92
ZShUcnVzdGVkSW1tUHRyKGFkZHJlc3MubV9wdHIpLCBzY3JhdGNoUmVnaXN0ZXIpOworICAgICAg
ICBhZGQ2NChpbW0sIEFkZHJlc3Moc2NyYXRjaFJlZ2lzdGVyKSk7CiAgICAgfQogCi0gICAgdm9p
ZCBhbmRQdHIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB2b2lkIGFuZDY0
KFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewogICAgICAgICBtX2Fzc2Vt
Ymxlci5hbmRxX3JyKHNyYywgZGVzdCk7CiAgICAgfQogCi0gICAgdm9pZCBhbmRQdHIoVHJ1c3Rl
ZEltbTMyIGltbSwgUmVnaXN0ZXJJRCBzcmNEZXN0KQorICAgIHZvaWQgYW5kNjQoVHJ1c3RlZElt
bTMyIGltbSwgUmVnaXN0ZXJJRCBzcmNEZXN0KQogICAgIHsKICAgICAgICAgbV9hc3NlbWJsZXIu
YW5kcV9pcihpbW0ubV92YWx1ZSwgc3JjRGVzdCk7CiAgICAgfQogICAgIAotICAgIHZvaWQgbmVn
UHRyKFJlZ2lzdGVySUQgZGVzdCkKKyAgICB2b2lkIG5lZzY0KFJlZ2lzdGVySUQgZGVzdCkKICAg
ICB7CiAgICAgICAgIG1fYXNzZW1ibGVyLm5lZ3FfcihkZXN0KTsKICAgICB9CiAKLSAgICB2b2lk
IG9yUHRyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgdm9pZCBvcjY0KFJl
Z2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewogICAgICAgICBtX2Fzc2VtYmxl
ci5vcnFfcnIoc3JjLCBkZXN0KTsKICAgICB9CiAKLSAgICB2b2lkIG9yUHRyKFRydXN0ZWRJbW1Q
dHIgaW1tLCBSZWdpc3RlcklEIGRlc3QpCisgICAgdm9pZCBvcjY0KFRydXN0ZWRJbW02NCBpbW0s
IFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CiAgICAgICAgIG1vdmUoaW1tLCBzY3JhdGNoUmVnaXN0
ZXIpOwotICAgICAgICBtX2Fzc2VtYmxlci5vcnFfcnIoc2NyYXRjaFJlZ2lzdGVyLCBkZXN0KTsK
KyAgICAgICAgb3I2NChzY3JhdGNoUmVnaXN0ZXIsIGRlc3QpOwogICAgIH0KIAotICAgIHZvaWQg
b3JQdHIoVHJ1c3RlZEltbTMyIGltbSwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHZvaWQgb3I2NChU
cnVzdGVkSW1tMzIgaW1tLCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewogICAgICAgICBtX2Fzc2Vt
Ymxlci5vcnFfaXIoaW1tLm1fdmFsdWUsIGRlc3QpOwogICAgIH0KIAotICAgIHZvaWQgb3JQdHIo
UmVnaXN0ZXJJRCBvcDEsIFJlZ2lzdGVySUQgb3AyLCBSZWdpc3RlcklEIGRlc3QpCisgICAgdm9p
ZCBvcjY0KFJlZ2lzdGVySUQgb3AxLCBSZWdpc3RlcklEIG9wMiwgUmVnaXN0ZXJJRCBkZXN0KQog
ICAgIHsKICAgICAgICAgaWYgKG9wMSA9PSBvcDIpCiAgICAgICAgICAgICBtb3ZlKG9wMSwgZGVz
dCk7CiAgICAgICAgIGVsc2UgaWYgKG9wMSA9PSBkZXN0KQotICAgICAgICAgICAgb3JQdHIob3Ay
LCBkZXN0KTsKKyAgICAgICAgICAgIG9yNjQob3AyLCBkZXN0KTsKICAgICAgICAgZWxzZSB7CiAg
ICAgICAgICAgICBtb3ZlKG9wMiwgZGVzdCk7Ci0gICAgICAgICAgICBvclB0cihvcDEsIGRlc3Qp
OworICAgICAgICAgICAgb3I2NChvcDEsIGRlc3QpOwogICAgICAgICB9CiAgICAgfQogCi0gICAg
dm9pZCBvclB0cihUcnVzdGVkSW1tMzIgaW1tLCBSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBk
ZXN0KQorICAgIHZvaWQgb3I2NChUcnVzdGVkSW1tMzIgaW1tLCBSZWdpc3RlcklEIHNyYywgUmVn
aXN0ZXJJRCBkZXN0KQogICAgIHsKICAgICAgICAgbW92ZShzcmMsIGRlc3QpOwotICAgICAgICBv
clB0cihpbW0sIGRlc3QpOworICAgICAgICBvcjY0KGltbSwgZGVzdCk7CiAgICAgfQogICAgIAot
ICAgIHZvaWQgcm90YXRlUmlnaHRQdHIoVHJ1c3RlZEltbTMyIGltbSwgUmVnaXN0ZXJJRCBzcmNE
c3QpCisgICAgdm9pZCByb3RhdGVSaWdodDY0KFRydXN0ZWRJbW0zMiBpbW0sIFJlZ2lzdGVySUQg
c3JjRHN0KQogICAgIHsKICAgICAgICAgbV9hc3NlbWJsZXIucm9ycV9pOHIoaW1tLm1fdmFsdWUs
IHNyY0RzdCk7CiAgICAgfQogCi0gICAgdm9pZCBzdWJQdHIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lz
dGVySUQgZGVzdCkKKyAgICB2b2lkIHN1YjY0KFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRl
c3QpCiAgICAgewogICAgICAgICBtX2Fzc2VtYmxlci5zdWJxX3JyKHNyYywgZGVzdCk7CiAgICAg
fQogICAgIAotICAgIHZvaWQgc3ViUHRyKFRydXN0ZWRJbW0zMiBpbW0sIFJlZ2lzdGVySUQgZGVz
dCkKKyAgICB2b2lkIHN1YjY0KFRydXN0ZWRJbW0zMiBpbW0sIFJlZ2lzdGVySUQgZGVzdCkKICAg
ICB7CiAgICAgICAgIG1fYXNzZW1ibGVyLnN1YnFfaXIoaW1tLm1fdmFsdWUsIGRlc3QpOwogICAg
IH0KICAgICAKLSAgICB2b2lkIHN1YlB0cihUcnVzdGVkSW1tUHRyIGltbSwgUmVnaXN0ZXJJRCBk
ZXN0KQorICAgIHZvaWQgc3ViNjQoVHJ1c3RlZEltbTY0IGltbSwgUmVnaXN0ZXJJRCBkZXN0KQog
ICAgIHsKICAgICAgICAgbW92ZShpbW0sIHNjcmF0Y2hSZWdpc3Rlcik7Ci0gICAgICAgIG1fYXNz
ZW1ibGVyLnN1YnFfcnIoc2NyYXRjaFJlZ2lzdGVyLCBkZXN0KTsKKyAgICAgICAgc3ViNjQoc2Ny
YXRjaFJlZ2lzdGVyLCBkZXN0KTsKICAgICB9CiAKLSAgICB2b2lkIHhvclB0cihSZWdpc3RlcklE
IHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHZvaWQgeG9yNjQoUmVnaXN0ZXJJRCBzcmMsIFJl
Z2lzdGVySUQgZGVzdCkKICAgICB7CiAgICAgICAgIG1fYXNzZW1ibGVyLnhvcnFfcnIoc3JjLCBk
ZXN0KTsKICAgICB9CiAgICAgCi0gICAgdm9pZCB4b3JQdHIoUmVnaXN0ZXJJRCBzcmMsIEFkZHJl
c3MgZGVzdCkKKyAgICB2b2lkIHhvcjY0KFJlZ2lzdGVySUQgc3JjLCBBZGRyZXNzIGRlc3QpCiAg
ICAgewogICAgICAgICBtX2Fzc2VtYmxlci54b3JxX3JtKHNyYywgZGVzdC5vZmZzZXQsIGRlc3Qu
YmFzZSk7CiAgICAgfQogCi0gICAgdm9pZCB4b3JQdHIoVHJ1c3RlZEltbTMyIGltbSwgUmVnaXN0
ZXJJRCBzcmNEZXN0KQorICAgIHZvaWQgeG9yNjQoVHJ1c3RlZEltbTMyIGltbSwgUmVnaXN0ZXJJ
RCBzcmNEZXN0KQogICAgIHsKICAgICAgICAgbV9hc3NlbWJsZXIueG9ycV9pcihpbW0ubV92YWx1
ZSwgc3JjRGVzdCk7CiAgICAgfQogCi0gICAgdm9pZCBsb2FkUHRyKEltcGxpY2l0QWRkcmVzcyBh
ZGRyZXNzLCBSZWdpc3RlcklEIGRlc3QpCisgICAgdm9pZCBsb2FkNjQoSW1wbGljaXRBZGRyZXNz
IGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CiAgICAgICAgIG1fYXNzZW1ibGVyLm1v
dnFfbXIoYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSwgZGVzdCk7CiAgICAgfQogCi0gICAg
Q29udmVydGlibGVMb2FkTGFiZWwgY29udmVydGlibGVMb2FkUHRyKEFkZHJlc3MgYWRkcmVzcywg
UmVnaXN0ZXJJRCBkZXN0KQorICAgIENvbnZlcnRpYmxlTG9hZExhYmVsIGNvbnZlcnRpYmxlTG9h
ZDY0KEFkZHJlc3MgYWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKICAgICAgICAgQ29u
dmVydGlibGVMb2FkTGFiZWwgcmVzdWx0ID0gQ29udmVydGlibGVMb2FkTGFiZWwodGhpcyk7CiAg
ICAgICAgIG1fYXNzZW1ibGVyLm1vdnFfbXIoYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSwg
ZGVzdCk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCi0gICAgdm9pZCBsb2FkUHRy
KEJhc2VJbmRleCBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3QpCisgICAgdm9pZCBsb2FkNjQoQmFz
ZUluZGV4IGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CiAgICAgICAgIG1fYXNzZW1i
bGVyLm1vdnFfbXIoYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5pbmRleCwg
YWRkcmVzcy5zY2FsZSwgZGVzdCk7CiAgICAgfQogCi0gICAgdm9pZCBsb2FkUHRyKGNvbnN0IHZv
aWQqIGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB2b2lkIGxvYWQ2NChjb25zdCB2b2lk
KiBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewogICAgICAgICBpZiAoZGVzdCA9PSBY
ODZSZWdpc3RlcnM6OmVheCkKICAgICAgICAgICAgIG1fYXNzZW1ibGVyLm1vdnFfbUVBWChhZGRy
ZXNzKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoYWRk
cmVzcyksIGRlc3QpOwotICAgICAgICAgICAgbG9hZFB0cihkZXN0LCBkZXN0KTsKKyAgICAgICAg
ICAgIGxvYWQ2NChkZXN0LCBkZXN0KTsKICAgICAgICAgfQogICAgIH0KIAotICAgIERhdGFMYWJl
bDMyIGxvYWRQdHJXaXRoQWRkcmVzc09mZnNldFBhdGNoKEFkZHJlc3MgYWRkcmVzcywgUmVnaXN0
ZXJJRCBkZXN0KQorICAgIERhdGFMYWJlbDMyIGxvYWQ2NFdpdGhBZGRyZXNzT2Zmc2V0UGF0Y2go
QWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewogICAgICAgICBwYWRCZWZv
cmVQYXRjaCgpOwogICAgICAgICBtX2Fzc2VtYmxlci5tb3ZxX21yX2Rpc3AzMihhZGRyZXNzLm9m
ZnNldCwgYWRkcmVzcy5iYXNlLCBkZXN0KTsKICAgICAgICAgcmV0dXJuIERhdGFMYWJlbDMyKHRo
aXMpOwogICAgIH0KICAgICAKLSAgICBEYXRhTGFiZWxDb21wYWN0IGxvYWRQdHJXaXRoQ29tcGFj
dEFkZHJlc3NPZmZzZXRQYXRjaChBZGRyZXNzIGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKKyAg
ICBEYXRhTGFiZWxDb21wYWN0IGxvYWQ2NFdpdGhDb21wYWN0QWRkcmVzc09mZnNldFBhdGNoKEFk
ZHJlc3MgYWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKICAgICAgICAgcGFkQmVmb3Jl
UGF0Y2goKTsKICAgICAgICAgbV9hc3NlbWJsZXIubW92cV9tcl9kaXNwOChhZGRyZXNzLm9mZnNl
dCwgYWRkcmVzcy5iYXNlLCBkZXN0KTsKICAgICAgICAgcmV0dXJuIERhdGFMYWJlbENvbXBhY3Qo
dGhpcyk7CiAgICAgfQogCi0gICAgdm9pZCBzdG9yZVB0cihSZWdpc3RlcklEIHNyYywgSW1wbGlj
aXRBZGRyZXNzIGFkZHJlc3MpCisgICAgdm9pZCBzdG9yZTY0KFJlZ2lzdGVySUQgc3JjLCBJbXBs
aWNpdEFkZHJlc3MgYWRkcmVzcykKICAgICB7CiAgICAgICAgIG1fYXNzZW1ibGVyLm1vdnFfcm0o
c3JjLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlKTsKICAgICB9CiAKLSAgICB2b2lkIHN0
b3JlUHRyKFJlZ2lzdGVySUQgc3JjLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB2b2lkIHN0b3Jl
NjQoUmVnaXN0ZXJJRCBzcmMsIEJhc2VJbmRleCBhZGRyZXNzKQogICAgIHsKICAgICAgICAgbV9h
c3NlbWJsZXIubW92cV9ybShzcmMsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UsIGFkZHJl
c3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUpOwogICAgIH0KICAgICAKLSAgICB2b2lkIHN0b3JlUHRy
KFJlZ2lzdGVySUQgc3JjLCB2b2lkKiBhZGRyZXNzKQorICAgIHZvaWQgc3RvcmU2NChSZWdpc3Rl
cklEIHNyYywgdm9pZCogYWRkcmVzcykKICAgICB7CiAgICAgICAgIGlmIChzcmMgPT0gWDg2UmVn
aXN0ZXJzOjplYXgpCiAgICAgICAgICAgICBtX2Fzc2VtYmxlci5tb3ZxX0VBWG0oYWRkcmVzcyk7
CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGFkZHJlc3Mp
LCBzY3JhdGNoUmVnaXN0ZXIpOwotICAgICAgICAgICAgc3RvcmVQdHIoc3JjLCBzY3JhdGNoUmVn
aXN0ZXIpOworICAgICAgICAgICAgc3RvcmU2NChzcmMsIHNjcmF0Y2hSZWdpc3Rlcik7CiAgICAg
ICAgIH0KICAgICB9CiAKLSAgICB2b2lkIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIgaW1tLCBJbXBs
aWNpdEFkZHJlc3MgYWRkcmVzcykKKyAgICB2b2lkIHN0b3JlNjQoVHJ1c3RlZEltbTY0IGltbSwg
SW1wbGljaXRBZGRyZXNzIGFkZHJlc3MpCiAgICAgewogICAgICAgICBtb3ZlKGltbSwgc2NyYXRj
aFJlZ2lzdGVyKTsKLSAgICAgICAgc3RvcmVQdHIoc2NyYXRjaFJlZ2lzdGVyLCBhZGRyZXNzKTsK
KyAgICAgICAgc3RvcmU2NChzY3JhdGNoUmVnaXN0ZXIsIGFkZHJlc3MpOwogICAgIH0KIAotICAg
IHZvaWQgc3RvcmVQdHIoVHJ1c3RlZEltbVB0ciBpbW0sIEJhc2VJbmRleCBhZGRyZXNzKQorICAg
IHZvaWQgc3RvcmU2NChUcnVzdGVkSW1tNjQgaW1tLCBCYXNlSW5kZXggYWRkcmVzcykKICAgICB7
CiAgICAgICAgIG1vdmUoaW1tLCBzY3JhdGNoUmVnaXN0ZXIpOwogICAgICAgICBtX2Fzc2VtYmxl
ci5tb3ZxX3JtKHNjcmF0Y2hSZWdpc3RlciwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSwg
YWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZSk7CiAgICAgfQogICAgIAotICAgIERhdGFMYWJl
bDMyIHN0b3JlUHRyV2l0aEFkZHJlc3NPZmZzZXRQYXRjaChSZWdpc3RlcklEIHNyYywgQWRkcmVz
cyBhZGRyZXNzKQorICAgIERhdGFMYWJlbDMyIHN0b3JlNjRXaXRoQWRkcmVzc09mZnNldFBhdGNo
KFJlZ2lzdGVySUQgc3JjLCBBZGRyZXNzIGFkZHJlc3MpCiAgICAgewogICAgICAgICBwYWRCZWZv
cmVQYXRjaCgpOwogICAgICAgICBtX2Fzc2VtYmxlci5tb3ZxX3JtX2Rpc3AzMihzcmMsIGFkZHJl
c3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UpOwogICAgICAgICByZXR1cm4gRGF0YUxhYmVsMzIodGhp
cyk7CiAgICAgfQogCi0gICAgdm9pZCBtb3ZlUHRyVG9Eb3VibGUoUmVnaXN0ZXJJRCBzcmMsIEZQ
UmVnaXN0ZXJJRCBkZXN0KQorICAgIHZvaWQgbW92ZTY0VG9Eb3VibGUoUmVnaXN0ZXJJRCBzcmMs
IEZQUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKICAgICAgICAgbV9hc3NlbWJsZXIubW92cV9ycihz
cmMsIGRlc3QpOwogICAgIH0KIAotICAgIHZvaWQgbW92ZURvdWJsZVRvUHRyKEZQUmVnaXN0ZXJJ
RCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB2b2lkIG1vdmVEb3VibGVUbzY0KEZQUmVnaXN0
ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CiAgICAgICAgIG1fYXNzZW1ibGVyLm1v
dnFfcnIoc3JjLCBkZXN0KTsKICAgICB9CiAKLSAgICB2b2lkIGNvbXBhcmVQdHIoUmVsYXRpb25h
bENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGxlZnQsIFRydXN0ZWRJbW0zMiByaWdodCwgUmVn
aXN0ZXJJRCBkZXN0KQorICAgIHZvaWQgY29tcGFyZTY0KFJlbGF0aW9uYWxDb25kaXRpb24gY29u
ZCwgUmVnaXN0ZXJJRCBsZWZ0LCBUcnVzdGVkSW1tMzIgcmlnaHQsIFJlZ2lzdGVySUQgZGVzdCkK
ICAgICB7CiAgICAgICAgIGlmICgoKGNvbmQgPT0gRXF1YWwpIHx8IChjb25kID09IE5vdEVxdWFs
KSkgJiYgIXJpZ2h0Lm1fdmFsdWUpCiAgICAgICAgICAgICBtX2Fzc2VtYmxlci50ZXN0cV9ycihs
ZWZ0LCBsZWZ0KTsKQEAgLTM4OCw2NyArMzg5LDYwIEBAIHB1YmxpYzoKICAgICAgICAgbV9hc3Nl
bWJsZXIubW92emJsX3JyKGRlc3QsIGRlc3QpOwogICAgIH0KICAgICAKLSAgICB2b2lkIGNvbXBh
cmVQdHIoUmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGxlZnQsIFJlZ2lzdGVy
SUQgcmlnaHQsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB2b2lkIGNvbXBhcmU2NChSZWxhdGlvbmFs
Q29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgbGVmdCwgUmVnaXN0ZXJJRCByaWdodCwgUmVnaXN0
ZXJJRCBkZXN0KQogICAgIHsKICAgICAgICAgbV9hc3NlbWJsZXIuY21wcV9ycihyaWdodCwgbGVm
dCk7CiAgICAgICAgIG1fYXNzZW1ibGVyLnNldENDX3IoeDg2Q29uZGl0aW9uKGNvbmQpLCBkZXN0
KTsKICAgICAgICAgbV9hc3NlbWJsZXIubW92emJsX3JyKGRlc3QsIGRlc3QpOwogICAgIH0KICAg
ICAKLSAgICBKdW1wIGJyYW5jaEFkZDMyKFJlc3VsdENvbmRpdGlvbiBjb25kLCBUcnVzdGVkSW1t
MzIgc3JjLCBBYnNvbHV0ZUFkZHJlc3MgZGVzdCkKLSAgICB7Ci0gICAgICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cihkZXN0Lm1fcHRyKSwgc2NyYXRjaFJlZ2lzdGVyKTsKLSAgICAgICAgYWRkMzIoc3Jj
LCBBZGRyZXNzKHNjcmF0Y2hSZWdpc3RlcikpOwotICAgICAgICByZXR1cm4gSnVtcChtX2Fzc2Vt
Ymxlci5qQ0MoeDg2Q29uZGl0aW9uKGNvbmQpKSk7Ci0gICAgfQotCi0gICAgSnVtcCBicmFuY2hQ
dHIoUmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGxlZnQsIFJlZ2lzdGVySUQg
cmlnaHQpCisgICAgSnVtcCBicmFuY2g2NChSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIFJlZ2lz
dGVySUQgbGVmdCwgUmVnaXN0ZXJJRCByaWdodCkKICAgICB7CiAgICAgICAgIG1fYXNzZW1ibGVy
LmNtcHFfcnIocmlnaHQsIGxlZnQpOwogICAgICAgICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5q
Q0MoeDg2Q29uZGl0aW9uKGNvbmQpKSk7CiAgICAgfQogCi0gICAgSnVtcCBicmFuY2hQdHIoUmVs
YXRpb25hbENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGxlZnQsIFRydXN0ZWRJbW1QdHIgcmln
aHQpCisgICAgSnVtcCBicmFuY2g2NChSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVy
SUQgbGVmdCwgVHJ1c3RlZEltbTY0IHJpZ2h0KQogICAgIHsKICAgICAgICAgaWYgKCgoY29uZCA9
PSBFcXVhbCkgfHwgKGNvbmQgPT0gTm90RXF1YWwpKSAmJiAhcmlnaHQubV92YWx1ZSkgewogICAg
ICAgICAgICAgbV9hc3NlbWJsZXIudGVzdHFfcnIobGVmdCwgbGVmdCk7CiAgICAgICAgICAgICBy
ZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5qQ0MoeDg2Q29uZGl0aW9uKGNvbmQpKSk7CiAgICAgICAg
IH0KICAgICAgICAgbW92ZShyaWdodCwgc2NyYXRjaFJlZ2lzdGVyKTsKLSAgICAgICAgcmV0dXJu
IGJyYW5jaFB0cihjb25kLCBsZWZ0LCBzY3JhdGNoUmVnaXN0ZXIpOworICAgICAgICByZXR1cm4g
YnJhbmNoNjQoY29uZCwgbGVmdCwgc2NyYXRjaFJlZ2lzdGVyKTsKICAgICB9CiAKLSAgICBKdW1w
IGJyYW5jaFB0cihSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgbGVmdCwgQWRk
cmVzcyByaWdodCkKKyAgICBKdW1wIGJyYW5jaDY0KFJlbGF0aW9uYWxDb25kaXRpb24gY29uZCwg
UmVnaXN0ZXJJRCBsZWZ0LCBBZGRyZXNzIHJpZ2h0KQogICAgIHsKICAgICAgICAgbV9hc3NlbWJs
ZXIuY21wcV9tcihyaWdodC5vZmZzZXQsIHJpZ2h0LmJhc2UsIGxlZnQpOwogICAgICAgICByZXR1
cm4gSnVtcChtX2Fzc2VtYmxlci5qQ0MoeDg2Q29uZGl0aW9uKGNvbmQpKSk7CiAgICAgfQogCi0g
ICAgSnVtcCBicmFuY2hQdHIoUmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBBYnNvbHV0ZUFkZHJl
c3MgbGVmdCwgUmVnaXN0ZXJJRCByaWdodCkKKyAgICBKdW1wIGJyYW5jaDY0KFJlbGF0aW9uYWxD
b25kaXRpb24gY29uZCwgQWJzb2x1dGVBZGRyZXNzIGxlZnQsIFJlZ2lzdGVySUQgcmlnaHQpCiAg
ICAgewogICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobGVmdC5tX3B0ciksIHNjcmF0Y2hSZWdp
c3Rlcik7Ci0gICAgICAgIHJldHVybiBicmFuY2hQdHIoY29uZCwgQWRkcmVzcyhzY3JhdGNoUmVn
aXN0ZXIpLCByaWdodCk7CisgICAgICAgIHJldHVybiBicmFuY2g2NChjb25kLCBBZGRyZXNzKHNj
cmF0Y2hSZWdpc3RlciksIHJpZ2h0KTsKICAgICB9CiAKLSAgICBKdW1wIGJyYW5jaFB0cihSZWxh
dGlvbmFsQ29uZGl0aW9uIGNvbmQsIEFkZHJlc3MgbGVmdCwgUmVnaXN0ZXJJRCByaWdodCkKKyAg
ICBKdW1wIGJyYW5jaDY0KFJlbGF0aW9uYWxDb25kaXRpb24gY29uZCwgQWRkcmVzcyBsZWZ0LCBS
ZWdpc3RlcklEIHJpZ2h0KQogICAgIHsKICAgICAgICAgbV9hc3NlbWJsZXIuY21wcV9ybShyaWdo
dCwgbGVmdC5vZmZzZXQsIGxlZnQuYmFzZSk7CiAgICAgICAgIHJldHVybiBKdW1wKG1fYXNzZW1i
bGVyLmpDQyh4ODZDb25kaXRpb24oY29uZCkpKTsKICAgICB9CiAKLSAgICBKdW1wIGJyYW5jaFB0
cihSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIEFkZHJlc3MgbGVmdCwgVHJ1c3RlZEltbVB0ciBy
aWdodCkKKyAgICBKdW1wIGJyYW5jaDY0KFJlbGF0aW9uYWxDb25kaXRpb24gY29uZCwgQWRkcmVz
cyBsZWZ0LCBUcnVzdGVkSW1tNjQgcmlnaHQpCiAgICAgewogICAgICAgICBtb3ZlKHJpZ2h0LCBz
Y3JhdGNoUmVnaXN0ZXIpOwotICAgICAgICByZXR1cm4gYnJhbmNoUHRyKGNvbmQsIGxlZnQsIHNj
cmF0Y2hSZWdpc3Rlcik7CisgICAgICAgIHJldHVybiBicmFuY2g2NChjb25kLCBsZWZ0LCBzY3Jh
dGNoUmVnaXN0ZXIpOwogICAgIH0KIAotICAgIEp1bXAgYnJhbmNoVGVzdFB0cihSZXN1bHRDb25k
aXRpb24gY29uZCwgUmVnaXN0ZXJJRCByZWcsIFJlZ2lzdGVySUQgbWFzaykKKyAgICBKdW1wIGJy
YW5jaFRlc3Q2NChSZXN1bHRDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCByZWcsIFJlZ2lzdGVy
SUQgbWFzaykKICAgICB7CiAgICAgICAgIG1fYXNzZW1ibGVyLnRlc3RxX3JyKHJlZywgbWFzayk7
CiAgICAgICAgIHJldHVybiBKdW1wKG1fYXNzZW1ibGVyLmpDQyh4ODZDb25kaXRpb24oY29uZCkp
KTsKICAgICB9CiAgICAgCi0gICAgSnVtcCBicmFuY2hUZXN0UHRyKFJlc3VsdENvbmRpdGlvbiBj
b25kLCBSZWdpc3RlcklEIHJlZywgVHJ1c3RlZEltbTMyIG1hc2sgPSBUcnVzdGVkSW1tMzIoLTEp
KQorICAgIEp1bXAgYnJhbmNoVGVzdDY0KFJlc3VsdENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklE
IHJlZywgVHJ1c3RlZEltbTMyIG1hc2sgPSBUcnVzdGVkSW1tMzIoLTEpKQogICAgIHsKICAgICAg
ICAgLy8gaWYgd2UgYXJlIG9ubHkgaW50ZXJlc3RlZCBpbiB0aGUgbG93IHNldmVuIGJpdHMsIHRo
aXMgY2FuIGJlIHRlc3RlZCB3aXRoIGEgdGVzdGIKICAgICAgICAgaWYgKG1hc2subV92YWx1ZSA9
PSAtMSkKQEAgLTQ2MCw3ICs0NTQsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBKdW1wKG1f
YXNzZW1ibGVyLmpDQyh4ODZDb25kaXRpb24oY29uZCkpKTsKICAgICB9CiAKLSAgICB2b2lkIHRl
c3RQdHIoUmVzdWx0Q29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgcmVnLCBUcnVzdGVkSW1tMzIg
bWFzaywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHZvaWQgdGVzdDY0KFJlc3VsdENvbmRpdGlvbiBj
b25kLCBSZWdpc3RlcklEIHJlZywgVHJ1c3RlZEltbTMyIG1hc2ssIFJlZ2lzdGVySUQgZGVzdCkK
ICAgICB7CiAgICAgICAgIGlmIChtYXNrLm1fdmFsdWUgPT0gLTEpCiAgICAgICAgICAgICBtX2Fz
c2VtYmxlci50ZXN0cV9ycihyZWcsIHJlZyk7CkBAIC00NzEsMTkgKzQ2NSwxOSBAQCBwdWJsaWM6
CiAgICAgICAgIHNldDMyKHg4NkNvbmRpdGlvbihjb25kKSwgZGVzdCk7CiAgICAgfQogCi0gICAg
dm9pZCB0ZXN0UHRyKFJlc3VsdENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIHJlZywgUmVnaXN0
ZXJJRCBtYXNrLCBSZWdpc3RlcklEIGRlc3QpCisgICAgdm9pZCB0ZXN0NjQoUmVzdWx0Q29uZGl0
aW9uIGNvbmQsIFJlZ2lzdGVySUQgcmVnLCBSZWdpc3RlcklEIG1hc2ssIFJlZ2lzdGVySUQgZGVz
dCkKICAgICB7CiAgICAgICAgIG1fYXNzZW1ibGVyLnRlc3RxX3JyKHJlZywgbWFzayk7CiAgICAg
ICAgIHNldDMyKHg4NkNvbmRpdGlvbihjb25kKSwgZGVzdCk7CiAgICAgfQogCi0gICAgSnVtcCBi
cmFuY2hUZXN0UHRyKFJlc3VsdENvbmRpdGlvbiBjb25kLCBBYnNvbHV0ZUFkZHJlc3MgYWRkcmVz
cywgVHJ1c3RlZEltbTMyIG1hc2sgPSBUcnVzdGVkSW1tMzIoLTEpKQorICAgIEp1bXAgYnJhbmNo
VGVzdDY0KFJlc3VsdENvbmRpdGlvbiBjb25kLCBBYnNvbHV0ZUFkZHJlc3MgYWRkcmVzcywgVHJ1
c3RlZEltbTMyIG1hc2sgPSBUcnVzdGVkSW1tMzIoLTEpKQogICAgIHsKLSAgICAgICAgbG9hZFB0
cihhZGRyZXNzLm1fcHRyLCBzY3JhdGNoUmVnaXN0ZXIpOwotICAgICAgICByZXR1cm4gYnJhbmNo
VGVzdFB0cihjb25kLCBzY3JhdGNoUmVnaXN0ZXIsIG1hc2spOworICAgICAgICBsb2FkNjQoYWRk
cmVzcy5tX3B0ciwgc2NyYXRjaFJlZ2lzdGVyKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaFRlc3Q2
NChjb25kLCBzY3JhdGNoUmVnaXN0ZXIsIG1hc2spOwogICAgIH0KIAotICAgIEp1bXAgYnJhbmNo
VGVzdFB0cihSZXN1bHRDb25kaXRpb24gY29uZCwgQWRkcmVzcyBhZGRyZXNzLCBUcnVzdGVkSW1t
MzIgbWFzayA9IFRydXN0ZWRJbW0zMigtMSkpCisgICAgSnVtcCBicmFuY2hUZXN0NjQoUmVzdWx0
Q29uZGl0aW9uIGNvbmQsIEFkZHJlc3MgYWRkcmVzcywgVHJ1c3RlZEltbTMyIG1hc2sgPSBUcnVz
dGVkSW1tMzIoLTEpKQogICAgIHsKICAgICAgICAgaWYgKG1hc2subV92YWx1ZSA9PSAtMSkKICAg
ICAgICAgICAgIG1fYXNzZW1ibGVyLmNtcHFfaW0oMCwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3Mu
YmFzZSk7CkBAIC00OTIsMTMgKzQ4NiwxMyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBKdW1w
KG1fYXNzZW1ibGVyLmpDQyh4ODZDb25kaXRpb24oY29uZCkpKTsKICAgICB9CiAKLSAgICBKdW1w
IGJyYW5jaFRlc3RQdHIoUmVzdWx0Q29uZGl0aW9uIGNvbmQsIEFkZHJlc3MgYWRkcmVzcywgUmVn
aXN0ZXJJRCByZWcpCisgICAgSnVtcCBicmFuY2hUZXN0NjQoUmVzdWx0Q29uZGl0aW9uIGNvbmQs
IEFkZHJlc3MgYWRkcmVzcywgUmVnaXN0ZXJJRCByZWcpCiAgICAgewogICAgICAgICBtX2Fzc2Vt
Ymxlci50ZXN0cV9ybShyZWcsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UpOwogICAgICAg
ICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5qQ0MoeDg2Q29uZGl0aW9uKGNvbmQpKSk7CiAgICAg
fQogCi0gICAgSnVtcCBicmFuY2hUZXN0UHRyKFJlc3VsdENvbmRpdGlvbiBjb25kLCBCYXNlSW5k
ZXggYWRkcmVzcywgVHJ1c3RlZEltbTMyIG1hc2sgPSBUcnVzdGVkSW1tMzIoLTEpKQorICAgIEp1
bXAgYnJhbmNoVGVzdDY0KFJlc3VsdENvbmRpdGlvbiBjb25kLCBCYXNlSW5kZXggYWRkcmVzcywg
VHJ1c3RlZEltbTMyIG1hc2sgPSBUcnVzdGVkSW1tMzIoLTEpKQogICAgIHsKICAgICAgICAgaWYg
KG1hc2subV92YWx1ZSA9PSAtMSkKICAgICAgICAgICAgIG1fYXNzZW1ibGVyLmNtcHFfaW0oMCwg
YWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2Fs
ZSk7CkBAIC01MDgsMzQgKzUwMiwzNCBAQCBwdWJsaWM6CiAgICAgfQogCiAKLSAgICBKdW1wIGJy
YW5jaEFkZFB0cihSZXN1bHRDb25kaXRpb24gY29uZCwgVHJ1c3RlZEltbTMyIGltbSwgUmVnaXN0
ZXJJRCBkZXN0KQorICAgIEp1bXAgYnJhbmNoQWRkNjQoUmVzdWx0Q29uZGl0aW9uIGNvbmQsIFRy
dXN0ZWRJbW0zMiBpbW0sIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7Ci0gICAgICAgIGFkZFB0cihp
bW0sIGRlc3QpOworICAgICAgICBhZGQ2NChpbW0sIGRlc3QpOwogICAgICAgICByZXR1cm4gSnVt
cChtX2Fzc2VtYmxlci5qQ0MoeDg2Q29uZGl0aW9uKGNvbmQpKSk7CiAgICAgfQogCi0gICAgSnVt
cCBicmFuY2hBZGRQdHIoUmVzdWx0Q29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgc3JjLCBSZWdp
c3RlcklEIGRlc3QpCisgICAgSnVtcCBicmFuY2hBZGQ2NChSZXN1bHRDb25kaXRpb24gY29uZCwg
UmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7Ci0gICAgICAgIGFkZFB0cihz
cmMsIGRlc3QpOworICAgICAgICBhZGQ2NChzcmMsIGRlc3QpOwogICAgICAgICByZXR1cm4gSnVt
cChtX2Fzc2VtYmxlci5qQ0MoeDg2Q29uZGl0aW9uKGNvbmQpKSk7CiAgICAgfQogCi0gICAgSnVt
cCBicmFuY2hTdWJQdHIoUmVzdWx0Q29uZGl0aW9uIGNvbmQsIFRydXN0ZWRJbW0zMiBpbW0sIFJl
Z2lzdGVySUQgZGVzdCkKKyAgICBKdW1wIGJyYW5jaFN1YjY0KFJlc3VsdENvbmRpdGlvbiBjb25k
LCBUcnVzdGVkSW1tMzIgaW1tLCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewotICAgICAgICBzdWJQ
dHIoaW1tLCBkZXN0KTsKKyAgICAgICAgc3ViNjQoaW1tLCBkZXN0KTsKICAgICAgICAgcmV0dXJu
IEp1bXAobV9hc3NlbWJsZXIuakNDKHg4NkNvbmRpdGlvbihjb25kKSkpOwogICAgIH0KIAotICAg
IEp1bXAgYnJhbmNoU3ViUHRyKFJlc3VsdENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIHNyYywg
UmVnaXN0ZXJJRCBkZXN0KQorICAgIEp1bXAgYnJhbmNoU3ViNjQoUmVzdWx0Q29uZGl0aW9uIGNv
bmQsIFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewotICAgICAgICBzdWJQ
dHIoc3JjLCBkZXN0KTsKKyAgICAgICAgc3ViNjQoc3JjLCBkZXN0KTsKICAgICAgICAgcmV0dXJu
IEp1bXAobV9hc3NlbWJsZXIuakNDKHg4NkNvbmRpdGlvbihjb25kKSkpOwogICAgIH0KIAotICAg
IEp1bXAgYnJhbmNoU3ViUHRyKFJlc3VsdENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIHNyYzEs
IFRydXN0ZWRJbW0zMiBzcmMyLCBSZWdpc3RlcklEIGRlc3QpCisgICAgSnVtcCBicmFuY2hTdWI2
NChSZXN1bHRDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBzcmMxLCBUcnVzdGVkSW1tMzIgc3Jj
MiwgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKICAgICAgICAgbW92ZShzcmMxLCBkZXN0KTsKLSAg
ICAgICAgcmV0dXJuIGJyYW5jaFN1YlB0cihjb25kLCBzcmMyLCBkZXN0KTsKKyAgICAgICAgcmV0
dXJuIGJyYW5jaFN1YjY0KGNvbmQsIHNyYzIsIGRlc3QpOwogICAgIH0KIAogICAgIERhdGFMYWJl
bFB0ciBtb3ZlV2l0aFBhdGNoKFRydXN0ZWRJbW1QdHIgaW5pdGlhbFZhbHVlLCBSZWdpc3RlcklE
IGRlc3QpCkBAIC01NDgsMjIgKzU0MiwyMiBAQCBwdWJsaWM6CiAgICAgSnVtcCBicmFuY2hQdHJX
aXRoUGF0Y2goUmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGxlZnQsIERhdGFM
YWJlbFB0ciYgZGF0YUxhYmVsLCBUcnVzdGVkSW1tUHRyIGluaXRpYWxSaWdodFZhbHVlID0gVHJ1
c3RlZEltbVB0cigwKSkKICAgICB7CiAgICAgICAgIGRhdGFMYWJlbCA9IG1vdmVXaXRoUGF0Y2go
aW5pdGlhbFJpZ2h0VmFsdWUsIHNjcmF0Y2hSZWdpc3Rlcik7Ci0gICAgICAgIHJldHVybiBicmFu
Y2hQdHIoY29uZCwgbGVmdCwgc2NyYXRjaFJlZ2lzdGVyKTsKKyAgICAgICAgcmV0dXJuIGJyYW5j
aDY0KGNvbmQsIGxlZnQsIHNjcmF0Y2hSZWdpc3Rlcik7CiAgICAgfQogCiAgICAgSnVtcCBicmFu
Y2hQdHJXaXRoUGF0Y2goUmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBBZGRyZXNzIGxlZnQsIERh
dGFMYWJlbFB0ciYgZGF0YUxhYmVsLCBUcnVzdGVkSW1tUHRyIGluaXRpYWxSaWdodFZhbHVlID0g
VHJ1c3RlZEltbVB0cigwKSkKICAgICB7CiAgICAgICAgIGRhdGFMYWJlbCA9IG1vdmVXaXRoUGF0
Y2goaW5pdGlhbFJpZ2h0VmFsdWUsIHNjcmF0Y2hSZWdpc3Rlcik7Ci0gICAgICAgIHJldHVybiBi
cmFuY2hQdHIoY29uZCwgbGVmdCwgc2NyYXRjaFJlZ2lzdGVyKTsKKyAgICAgICAgcmV0dXJuIGJy
YW5jaDY0KGNvbmQsIGxlZnQsIHNjcmF0Y2hSZWdpc3Rlcik7CiAgICAgfQogCiAgICAgRGF0YUxh
YmVsUHRyIHN0b3JlUHRyV2l0aFBhdGNoKFRydXN0ZWRJbW1QdHIgaW5pdGlhbFZhbHVlLCBJbXBs
aWNpdEFkZHJlc3MgYWRkcmVzcykKICAgICB7CiAgICAgICAgIERhdGFMYWJlbFB0ciBsYWJlbCA9
IG1vdmVXaXRoUGF0Y2goaW5pdGlhbFZhbHVlLCBzY3JhdGNoUmVnaXN0ZXIpOwotICAgICAgICBz
dG9yZVB0cihzY3JhdGNoUmVnaXN0ZXIsIGFkZHJlc3MpOworICAgICAgICBzdG9yZTY0KHNjcmF0
Y2hSZWdpc3RlciwgYWRkcmVzcyk7CiAgICAgICAgIHJldHVybiBsYWJlbDsKICAgICB9Ci0KKyAg
ICAKICAgICB1c2luZyBNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbjo6YnJhbmNoVGVzdDg7CiAgICAg
SnVtcCBicmFuY2hUZXN0OChSZXN1bHRDb25kaXRpb24gY29uZCwgRXh0ZW5kZWRBZGRyZXNzIGFk
ZHJlc3MsIFRydXN0ZWRJbW0zMiBtYXNrID0gVHJ1c3RlZEltbTMyKC0xKSkKICAgICB7Cg==
</data>
<flag name="review"
          id="181942"
          type_id="1"
          status="+"
          setter="barraclough"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>168951</attachid>
            <date>2012-10-16 08:21:47 -0700</date>
            <delta_ts>2012-10-16 19:43:50 -0700</delta_ts>
            <desc>Split patch - part 2: let the JIT compilers use the *64 interfaces of MacroAssemblerX86_64</desc>
            <filename>99154.part2.0.patch</filename>
            <type>text/plain</type>
            <size>219327</size>
            <attacher name="Yuqiang Xian">yuqiang.xian</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTMxNDQ5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI0MCBA
QAorMjAxMi0xMC0xNiAgWXVxaWFuZyBYaWFuICA8eXVxaWFuZy54aWFuQGludGVsLmNvbT4KKwor
ICAgICAgICBSZWZhY3RvciBNYWNyb0Fzc2VtYmxlciBpbnRlcmZhY2VzIHRvIGRpZmZlcmVudGlh
dGUgdGhlIHBvaW50ZXIgb3BlcmFuZHMgZnJvbSB0aGUgNjQtYml0IGludGVnZXIgb3BlcmFuZHMK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk5MTU0CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW4gY3VycmVu
dCBKYXZhU2NyaXB0Q29yZSBpbXBsZW1lbnRhdGlvbiBmb3IgSlNWQUxVRTY0IHBsYXRmb3JtIChp
LmUuLAorICAgICAgICB0aGUgWDY0IHBsYXRmb3JtKSwgd2UgYXNzdW1lIHRoYXQgdGhlIEpTVmFs
dWUgc2l6ZSBpcyBzYW1lIHRvIHRoZQorICAgICAgICBwb2ludGVyIHNpemUsIGFuZCB0aHVzIEVu
Y29kZWRKU1ZhbHVlIGlzIHNpbXBseSB0eXBlIGRlZmluZWQgYXMgYQorICAgICAgICAidm9pZCoi
LiBJbiB0aGUgSklUIGNvbXBpbGVyLCB3ZSBhbHNvIHRha2UgdGhpcyBhc3N1bXB0aW9uIGFuZCBp
bnZva2UKKyAgICAgICAgdGhlIHNhbWUgbWFjcm8gYXNzZW1ibGVyIGludGVyZmFjZXMgZm9yIGJv
dGggSlNWYWx1ZSBhbmQgcG9pbnRlcgorICAgICAgICBvcGVyYW5kcy4gV2UgbmVlZCB0byBkaWZm
ZXJlbnRpYXRlIHRoZSBvcGVyYXRpb25zIG9uIHBvaW50ZXJzIGZyb20gdGhlCisgICAgICAgIG9w
ZXJhdGlvbnMgb24gSlNWYWx1ZXMsIGFuZCBsZXQgdGhlbSBpbnZva2luZyBkaWZmZXJlbnQgbWFj
cm8KKyAgICAgICAgYXNzZW1ibGVyIGludGVyZmFjZXMuIEZvciBleGFtcGxlLCB3ZSBub3cgdXNl
IHRoZSBpbnRlcmZhY2Ugb2YKKyAgICAgICAgImxvYWRQdHIiIHRvIGxvYWQgZWl0aGVyIGEgcG9p
bnRlciBvciBhIEpTVmFsdWUsIGFuZCB3ZSBuZWVkIHRvIHN3aXRjaAorICAgICAgICB0byB1c2lu
ZyAibG9hZFB0ciIgdG8gbG9hZCBhIHBvaW50ZXIgYW5kIHNvbWUgbmV3ICJsb2FkNjQiIGludGVy
ZmFjZQorICAgICAgICB0byBsb2FkIGEgSlNWYWx1ZS4gVGhpcyB3b3VsZCBoZWxwIHVzIHN1cHBv
cnRpbmcgb3RoZXIgSlNWQUxVRTY0CisgICAgICAgIHBsYXRmb3JtcyB3aGVyZSBwb2ludGVyIHNp
emUgaXMgbm90IG5lY2Vzc2FyaWx5IDY0LWJpdHMsIGZvciBleGFtcGxlCisgICAgICAgIHgzMiAo
YnVnICM5OTE1MykuCisKKyAgICAgICAgVGhlIG1ham9yIG1vZGlmaWNhdGlvbiBJIG1hZGUgaXMg
dG8gaW50cm9kdWNlIHRoZSAiKjY0IiBpbnRlcmZhY2VzIGluCisgICAgICAgIHRoZSBNYWNyb0Fz
c2VtYmxlciBmb3IgdGhvc2Ugb3BlcmF0aW9ucyBvbiBKU1ZhbHVlcywga2VlcCB0aGUgIipQdHIi
CisgICAgICAgIGludGVyZmFjZXMgZm9yIHRob3NlIG9wZXJhdGlvbnMgb24gcmVhbCBwb2ludGVy
cywgYW5kIGdvIHRocm91Z2ggYWxsCisgICAgICAgIHRoZSBKSVQgY29tcGlsZXIgY29kZSB0byBj
b3JyZWN0IHRoZSB1c2FnZS4KKworICAgICAgICBUaGlzIGlzIHRoZSBzZWNvbmQgcGFydCBvZiB0
aGUgd29yaywgaS5lLCB0byBjb3JyZWN0IHRoZSB1c2FnZSBvZiB0aGUKKyAgICAgICAgbmV3IE1h
Y3JvQXNzZW1ibGVyIGludGVyZmFjZXMgaW4gdGhlIEpJVCBjb21waWxlcnMsIHdoaWNoIGFsc28g
bWVhbnMKKyAgICAgICAgdGhhdCBub3cgRW5jb2RlZEpTVmFsdWUgaXMgZGVmaW5lZCBhcyBhIDY0
LWJpdCBpbnRlZ2VyLCBhbmQgdGhlICIqNjQiCisgICAgICAgIGludGVyZmFjZXMgYXJlIHVzZWQg
Zm9yIGl0LgorCisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmg6IEpTVmFsdWUg
aW1tZWRpYXRlcyBzaG91bGQgYmUgaW4gSW1tNjQgaW5zdGVhZCBvZiBJbW1QdHIuCisgICAgICAg
IChNYWNyb0Fzc2VtYmxlcik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyOjpzaG91bGRC
bGluZCk6CisgICAgICAgICogZGZnL0RGR0Fzc2VtYmx5SGVscGVycy5jcHA6IENvcnJlY3QgdGhl
IEpJVCBjb21waWxlcnMgdXNhZ2Ugb2YgdGhlIG5ldyBpbnRlcmZhY2VzLgorICAgICAgICAoSlND
OjpERkc6OkFzc2VtYmx5SGVscGVyczo6aml0QXNzZXJ0SXNJbnQzMik6CisgICAgICAgIChKU0M6
OkRGRzo6QXNzZW1ibHlIZWxwZXJzOjpqaXRBc3NlcnRJc0pTSW50MzIpOgorICAgICAgICAoSlND
OjpERkc6OkFzc2VtYmx5SGVscGVyczo6aml0QXNzZXJ0SXNKU051bWJlcik6CisgICAgICAgIChK
U0M6OkRGRzo6QXNzZW1ibHlIZWxwZXJzOjpqaXRBc3NlcnRJc0pTRG91YmxlKToKKyAgICAgICAg
KEpTQzo6REZHOjpBc3NlbWJseUhlbHBlcnM6OmppdEFzc2VydElzQ2VsbCk6CisgICAgICAgICog
ZGZnL0RGR0Fzc2VtYmx5SGVscGVycy5oOgorICAgICAgICAoSlNDOjpERkc6OkFzc2VtYmx5SGVs
cGVyczo6ZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKToKKyAgICAgICAgKEpTQzo6REZHOjpBc3Nl
bWJseUhlbHBlcnM6OmJyYW5jaElmTm90Q2VsbCk6CisgICAgICAgIChKU0M6OkRGRzo6QXNzZW1i
bHlIZWxwZXJzOjpkZWJ1Z0NhbGwpOgorICAgICAgICAoSlNDOjpERkc6OkFzc2VtYmx5SGVscGVy
czo6Ym94RG91YmxlKToKKyAgICAgICAgKEpTQzo6REZHOjpBc3NlbWJseUhlbHBlcnM6OnVuYm94
RG91YmxlKToKKyAgICAgICAgKEpTQzo6REZHOjpBc3NlbWJseUhlbHBlcnM6OmVtaXRFeGNlcHRp
b25DaGVjayk6CisgICAgICAgICogZGZnL0RGR0NDYWxsSGVscGVycy5oOgorICAgICAgICAoSlND
OjpERkc6OkNDYWxsSGVscGVyczo6c2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKToKKyAgICAg
ICAgKENDYWxsSGVscGVycyk6CisgICAgICAgICogZGZnL0RGR09TUkV4aXRDb21waWxlcjY0LmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KToKKyAg
ICAgICAgKiBkZmcvREZHUmVwYXRjaC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Z2VuZXJhdGVQ
cm90b0NoYWluQWNjZXNzU3R1Yik6CisgICAgICAgIChKU0M6OkRGRzo6dHJ5Q2FjaGVHZXRCeUlE
KToKKyAgICAgICAgKEpTQzo6REZHOjp0cnlCdWlsZEdldEJ5SURMaXN0KToKKyAgICAgICAgKEpT
Qzo6REZHOjplbWl0UHV0UmVwbGFjZVN0dWIpOgorICAgICAgICAoSlNDOjpERkc6OmVtaXRQdXRU
cmFuc2l0aW9uU3R1Yik6CisgICAgICAgICogZGZnL0RGR1NjcmF0Y2hSZWdpc3RlckFsbG9jYXRv
ci5oOgorICAgICAgICAoSlNDOjpERkc6OlNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6cHJlc2Vy
dmVVc2VkUmVnaXN0ZXJzVG9TY3JhdGNoQnVmZmVyKToKKyAgICAgICAgKEpTQzo6REZHOjpTY3Jh
dGNoUmVnaXN0ZXJBbGxvY2F0b3I6OnJlc3RvcmVVc2VkUmVnaXN0ZXJzRnJvbVNjcmF0Y2hCdWZm
ZXIpOgorICAgICAgICAqIGRmZy9ERkdTaWxlbnRSZWdpc3RlclNhdmVQbGFuLmg6CisgICAgICAg
ICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6Y2hlY2tBcmd1bWVudFR5cGVzKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZVZhbHVlVG9JbnQzMik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVJbnQzMlRvRG91YmxlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZUluc3RhbmNlT2ZGb3JPYmplY3QpOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlSW5zdGFuY2VPZik6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVTdHJpY3RFcUZvckNvbnN0YW50KToKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25Bcmd1bWVudHMpOgor
ICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgorICAgICAgICAoU3BlY3VsYXRpdmVK
SVQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpzaWxlbnRTYXZlUGxhbkZv
ckdQUik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnNpbGVudFNwaWxsKToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6c2lsZW50RmlsbCk6CisgICAgICAg
IChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnNwaWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6dmFsdWVPZkpTQ29uc3RhbnRBc0ltbTY0KToKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y2FsbE9wZXJhdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmJyYW5jaDY0KToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVK
SVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZpbGxJbnRlZ2Vy
KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZmlsbERvdWJsZSk6CisgICAg
ICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZpbGxKU1ZhbHVlKToKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVWYWx1ZVRvTnVtYmVyKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVWYWx1ZVRvSW50
MzIpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVVJ
bnQzMlRvTnVtYmVyKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVk
R2V0QnlJZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNhY2hlZFB1dEJ5
SWQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZU5v
blBlZXBob2xlQ29tcGFyZU51bGwpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklU
Ojpub25TcGVjdWxhdGl2ZVBlZXBob2xlQnJhbmNoTnVsbCk6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlUGVlcGhvbGVCcmFuY2gpOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZU5vblBlZXBob2xlQ29tcGFy
ZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlUGVl
cGhvbGVTdHJpY3RFcSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6Om5vblNw
ZWN1bGF0aXZlTm9uUGVlcGhvbGVTdHJpY3RFcSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRpdmVKSVQ6OmVtaXRDYWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
ZmlsbFNwZWN1bGF0ZUludEludGVybmFsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6ZmlsbFNwZWN1bGF0ZURvdWJsZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OmZpbGxTcGVjdWxhdGVDZWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6ZmlsbFNwZWN1bGF0ZUJvb2xlYW4pOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpjb252ZXJ0VG9Eb3VibGUpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZl
SklUOjpjb21waWxlT2JqZWN0RXF1YWxpdHkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpjb21waWxlT2JqZWN0VG9PYmplY3RPck90aGVyRXF1YWxpdHkpOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVPYmplY3RUb09iamVjdE9y
T3RoZXJFcXVhbGl0eSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVEb3VibGVDb21wYXJlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZU5vblN0cmluZ0NlbGxPck90aGVyTG9naWNhbE5vdCk6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVMb2dpY2FsTm90KToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6ZW1pdE5vblN0cmluZ0NlbGxPck90aGVyQnJhbmNoKToKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdEJyYW5jaCk6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDb250aWd1b3VzR2V0QnlWYWwpOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJyYXlTdG9yYWdlR2V0QnlWYWwpOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlQ29udGlndW91c1B1dEJ5
VmFsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFycmF5U3Rv
cmFnZVB1dEJ5VmFsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZSk6CisgICAgICAgICogZGZnL0RGR1RodW5rcy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6b3Ny
RXhpdEdlbmVyYXRpb25UaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkRGRzo6dGhyb3dF
eGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6REZHOjpz
bG93UGF0aEZvcik6CisgICAgICAgIChKU0M6OkRGRzo6dmlydHVhbEZvclRodW5rR2VuZXJhdG9y
KToKKyAgICAgICAgKiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHA6CisgICAgICAgIChKU0M6
OkludGVycHJldGVyOjpkdW1wUmVnaXN0ZXJzKToKKyAgICAgICAgKiBqaXQvSklULmNwcDoKKyAg
ICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZSk6CisgICAgICAgICogaml0L0pJVC5oOgor
ICAgICAgICAoSklUKToKKyAgICAgICAgKiBqaXQvSklUQXJpdGhtZXRpYy5jcHA6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF9uZWdhdGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93
X29wX25lZ2F0ZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9yc2hpZnQpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX3Vyc2hpZnQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfY29tcGFyZUFuZEp1bXBTbG93KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2JpdGFu
ZCk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZUJpbmFyeUFyaXRoT3BTbG93Q2FzZSk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9kaXYpOgorICAgICAgICAqIGppdC9KSVRDYWxsLmNw
cDoKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlTG9hZFZhcmFyZ3MpOgorICAgICAgICAoSlND
OjpKSVQ6OmNvbXBpbGVDYWxsRXZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZUNhbGxF
dmFsU2xvd0Nhc2UpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVPcENhbGwpOgorICAgICAg
ICAqIGppdC9KSVRJbmxpbmVNZXRob2RzLmg6IEhhdmUgc29tZSBjbGVhbi11cCB3b3JrIGFzIHdl
bGwuCisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRQdXRDZWxsVG9DYWxs
RnJhbWVIZWFkZXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRQdXRJbnRUb0NhbGxGcmFtZUhl
YWRlcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlcjMyKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlcjY0KToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0QWxsb2NhdGVKU0FycmF5KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0R2V0SklUU3R1YkFyZyk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcik6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdElu
aXRSZWdpc3Rlcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEp1bXBJZkpTQ2VsbCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdEp1bXBJZkJvdGhKU0NlbGxzKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0SnVtcElmTm90SlNDZWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0TG9hZEludDMy
VG9Eb3VibGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRKdW1wSWZJbW1lZGlhdGVJbnRlZ2Vy
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0SnVtcElmTm90SW1tZWRpYXRlSW50ZWdlcik6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdEp1bXBJZk5vdEltbWVkaWF0ZUludGVnZXJzKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0RmFzdEFyaXRoUmVUYWdJbW1lZGlhdGUpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRGYXN0QXJpdGhJbnRUb0ltbU5vQ2hlY2spOgorICAgICAgICAqIGppdC9KSVRP
cGNvZGVzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUNUSU5hdGl2ZUNh
bGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbW92KToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX2luc3RhbmNlb2YpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaXNfdW5k
ZWZpbmVkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2lzX2Jvb2xlYW4pOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfaXNfbnVtYmVyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX25vdCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qZmFsc2UpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfamVxX251bGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
am5lcV9udWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2p0cnVlKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX2JpdHhvcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9i
aXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfcG5hbWVzKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX25leHRfcG5hbWUpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBp
bGVPcFN0cmljdEVxKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2NhdGNoKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX3Rocm93X3JlZmVyZW5jZV9lcnJvcik6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9lcV9udWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX25l
cV9udWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2NyZWF0ZV9hY3RpdmF0aW9uKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2NyZWF0ZV9hcmd1bWVudHMpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfaW5pdF9sYXp5X3JlZyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dFNsb3dfb3BfY29udmVydF90aGlzKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9u
b3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2FyZ3VtZW50X2J5X3ZhbCk6Cisg
ICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X29wX2dldF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRDb250aWd1b3VzR2V0
QnlWYWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRBcnJheVN0b3JhZ2VHZXRCeVZhbCk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6
OkpJVDo6Y29tcGlsZUdldERpcmVjdE9mZnNldCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF9nZXRfYnlfcG5hbWUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRDb250aWd1b3VzUHV0QnlW
YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRBcnJheVN0b3JhZ2VQdXRCeVZhbCk6CisgICAg
ICAgIChKU0M6OkpJVDo6Y29tcGlsZUdldEJ5SWRIb3RQYXRoKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX3B1dF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZVB1dERpcmVj
dE9mZnNldCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfc2NvcGVkX3Zhcik6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfc2NvcGVkX3Zhcik6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9vcF9nZXRfZ2xvYmFsX3Zhcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF9wdXRfZ2xvYmFsX3Zhcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfZ2xvYmFs
X3Zhcl9jaGVjayk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEludFR5cGVkQXJyYXlHZXRCeVZh
bCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEZsb2F0VHlwZWRBcnJheUdldEJ5VmFsKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0RmxvYXRUeXBlZEFycmF5UHV0QnlWYWwpOgorICAgICAgICAq
IGppdC9KSVRTdHViQ2FsbC5oOgorICAgICAgICAoSklUU3R1YkNhbGwpOgorICAgICAgICAoSlND
OjpKSVRTdHViQ2FsbDo6SklUU3R1YkNhbGwpOgorICAgICAgICAoSlNDOjpKSVRTdHViQ2FsbDo6
YWRkQXJndW1lbnQpOgorICAgICAgICAoSlNDOjpKSVRTdHViQ2FsbDo6Y2FsbCk6CisgICAgICAg
IChKU0M6OkpJVFN0dWJDYWxsOjpjYWxsV2l0aFZhbHVlUHJvZmlsaW5nKToKKyAgICAgICAgKiBq
aXQvSlNJbnRlcmZhY2VKSVQuaDoKKyAgICAgICAgKEpTQzo6SlNJbnRlcmZhY2VKSVQ6OmVtaXRK
dW1wSWZJbW1lZGlhdGVOdW1iZXIpOgorICAgICAgICAoSlNDOjpKU0ludGVyZmFjZUpJVDo6ZW1p
dEp1bXBJZk5vdEltbWVkaWF0ZU51bWJlcik6CisgICAgICAgIChKU0M6OkpTSW50ZXJmYWNlSklU
OjplbWl0TG9hZEpTQ2VsbCk6CisgICAgICAgIChKU0M6OkpTSW50ZXJmYWNlSklUOjplbWl0TG9h
ZEludDMyKToKKyAgICAgICAgKEpTQzo6SlNJbnRlcmZhY2VKSVQ6OmVtaXRMb2FkRG91YmxlKToK
KyAgICAgICAgKiBqaXQvU3BlY2lhbGl6ZWRUaHVua0pJVC5oOgorICAgICAgICAoSlNDOjpTcGVj
aWFsaXplZFRodW5rSklUOjpyZXR1cm5Eb3VibGUpOgorICAgICAgICAoSlNDOjpTcGVjaWFsaXpl
ZFRodW5rSklUOjp0YWdSZXR1cm5Bc0ludDMyKToKKyAgICAgICAgKiBydW50aW1lL0pTVmFsdWUu
Y3BwOgorICAgICAgICAoSlNDOjpKU1ZhbHVlOjpkZXNjcmlwdGlvbik6CisgICAgICAgICogcnVu
dGltZS9KU1ZhbHVlLmg6IERlZmluZSBKU1ZBTFVFNjQgRW5jb2RlZEpTVmFsdWUgYXMgaW50NjRf
dCwgd2hpY2ggaXMgYWxzbyB1bmlmaWVkIHdpdGggSlNWQUxVRTMyXzY0LgorICAgICAgICAoSlND
KToKKyAgICAgICAgKiBydW50aW1lL0pTVmFsdWVJbmxpbmVNZXRob2RzLmg6IE5ldyBpbXBsZW1l
bnRhdGlvbiBvZiBzb21lIEpTVmFsdWUgbWV0aG9kcyB0byBtYWtlIHRoZW0gbW9yZSBjb25mb3Jt
YW50CisgICAgICAgIHdpdGggdGhlIG5ldyBydWxlIHRoYXQgIkpTVmFsdWUgaXMgYSA2NC1iaXQg
aW50ZWdlciByYXRoZXIgdGhhbiBhIHBvaW50ZXIiIGZvciBKU1ZBTFVFNjQgcGxhdGZvcm1zLgor
ICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6SlNWYWx1ZTo6SlNWYWx1ZSk6CisgICAgICAg
IChKU0M6OkpTVmFsdWU6Om9wZXJhdG9yIGJvb2wpOgorICAgICAgICAoSlNDOjpKU1ZhbHVlOjpv
cGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6SlNWYWx1ZTo6b3BlcmF0b3IhPSk6CisgICAgICAg
IChKU0M6OnJlaW50ZXJwcmV0RG91YmxlVG9JbnQ2NCk6CisgICAgICAgIChKU0M6OnJlaW50ZXJw
cmV0SW50NjRUb0RvdWJsZSk6CisgICAgICAgIChKU0M6OkpTVmFsdWU6OmFzRG91YmxlKToKKwog
MjAxMi0xMC0xNiAgQmFsYXpzIEtpbHZhZHkgIDxraWx2YWR5YkBob21lamlubmkuY29tPgogCiAg
ICAgICAgIE1JUFMgYXNzZW1ibGVyIGNvZGluZy1zdHlsZSBmaXguCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5oCShyZXZpc2lvbiAx
MzE0NDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTcyOCwxNiArNzI4LDYgQEAgcHVibGljOgogICAgICAgICBy
ZXR1cm4gc3RvcmU2NFdpdGhBZGRyZXNzT2Zmc2V0UGF0Y2goc3JjLCBhZGRyZXNzKTsKICAgICB9
CiAKLSAgICB2b2lkIG1vdmVQdHJUb0RvdWJsZShSZWdpc3RlcklEIHNyYywgRlBSZWdpc3RlcklE
IGRlc3QpCi0gICAgewotICAgICAgICBtb3ZlNjRUb0RvdWJsZShzcmMsIGRlc3QpOwotICAgIH0K
LQotICAgIHZvaWQgbW92ZURvdWJsZVRvUHRyKEZQUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQg
ZGVzdCkKLSAgICB7Ci0gICAgICAgIG1vdmVEb3VibGVUbzY0KHNyYywgZGVzdCk7Ci0gICAgfQot
CiAgICAgdm9pZCBjb21wYXJlUHRyKFJlbGF0aW9uYWxDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJ
RCBsZWZ0LCBUcnVzdGVkSW1tMzIgcmlnaHQsIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CiAgICAg
ICAgIGNvbXBhcmU2NChjb25kLCBsZWZ0LCByaWdodCwgZGVzdCk7CkBAIC04OTUsMTQgKzg4NSw2
IEBAIHB1YmxpYzoKICAgICAgICAgZGVmYXVsdDogewogICAgICAgICAgICAgaWYgKHZhbHVlIDw9
IDB4ZmYpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgSlNWYWx1
ZSBqc1ZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHZhbHVl
KSk7Ci0gICAgICAgICAgICBpZiAoanNWYWx1ZS5pc0ludDMyKCkpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIHNob3VsZEJsaW5kKEltbTMyKGpzVmFsdWUuYXNJbnQzMigpKSk7Ci0gICAgICAgICAg
ICBpZiAoanNWYWx1ZS5pc0RvdWJsZSgpICYmICFzaG91bGRCbGluZERvdWJsZShqc1ZhbHVlLmFz
RG91YmxlKCkpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAgICAg
aWYgKCFzaG91bGRCbGluZERvdWJsZShiaXR3aXNlX2Nhc3Q8ZG91YmxlPih2YWx1ZSkpKQotICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAg
IHJldHVybiBzaG91bGRCbGluZEZvclNwZWNpZmljQXJjaCh2YWx1ZSk7CkBAIC05NTYsNiArOTM4
LDE0IEBAIHB1YmxpYzoKICAgICAgICAgZGVmYXVsdDogewogICAgICAgICAgICAgaWYgKHZhbHVl
IDw9IDB4ZmYpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgSlNW
YWx1ZSBqc1ZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKHZhbHVlKTsKKyAgICAgICAgICAgIGlmIChq
c1ZhbHVlLmlzSW50MzIoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gc2hvdWxkQmxpbmQoSW1t
MzIoanNWYWx1ZS5hc0ludDMyKCkpKTsKKyAgICAgICAgICAgIGlmIChqc1ZhbHVlLmlzRG91Ymxl
KCkgJiYgIXNob3VsZEJsaW5kRG91YmxlKGpzVmFsdWUuYXNEb3VibGUoKSkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICBpZiAoIXNob3VsZEJsaW5kRG91Ymxl
KGJpdHdpc2VfY2FzdDxkb3VibGU+KHZhbHVlKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHNob3VsZEJsaW5kRm9y
U3BlY2lmaWNBcmNoKHZhbHVlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QXNzZW1ibHlIZWxwZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Fzc2VtYmx5SGVscGVycy5jcHAJKHJldmlzaW9uIDEzMTQ0OSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQXNzZW1ibHlIZWxwZXJzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNzMsNyArNzMsNyBAQCB2b2lkIEFzc2VtYmx5SGVscGVyczo6Y2xlYXJTYW1wbGluZ0ZsYWco
CiB2b2lkIEFzc2VtYmx5SGVscGVyczo6aml0QXNzZXJ0SXNJbnQzMihHUFJSZWcgZ3ByKQogewog
I2lmIENQVShYODZfNjQpCi0gICAgSnVtcCBjaGVja0ludDMyID0gYnJhbmNoUHRyKEJlbG93T3JF
cXVhbCwgZ3ByLCBUcnVzdGVkSW1tUHRyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHN0YXRpY19j
YXN0PHVpbnRwdHJfdD4oMHhGRkZGRkZGRnUpKSkpOworICAgIEp1bXAgY2hlY2tJbnQzMiA9IGJy
YW5jaDY0KEJlbG93T3JFcXVhbCwgZ3ByLCBUcnVzdGVkSW1tNjQoc3RhdGljX2Nhc3Q8dWludHB0
cl90PigweEZGRkZGRkZGdSkpKTsKICAgICBicmVha3BvaW50KCk7CiAgICAgY2hlY2tJbnQzMi5s
aW5rKHRoaXMpOwogI2Vsc2UKQEAgLTgzLDIyICs4MywyMiBAQCB2b2lkIEFzc2VtYmx5SGVscGVy
czo6aml0QXNzZXJ0SXNJbnQzMihHCiAKIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjpqaXRBc3NlcnRJ
c0pTSW50MzIoR1BSUmVnIGdwcikKIHsKLSAgICBKdW1wIGNoZWNrSlNJbnQzMiA9IGJyYW5jaFB0
cihBYm92ZU9yRXF1YWwsIGdwciwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKKyAg
ICBKdW1wIGNoZWNrSlNJbnQzMiA9IGJyYW5jaDY0KEFib3ZlT3JFcXVhbCwgZ3ByLCBHUFJJbmZv
Ojp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOwogICAgIGJyZWFrcG9pbnQoKTsKICAgICBjaGVja0pT
SW50MzIubGluayh0aGlzKTsKIH0KIAogdm9pZCBBc3NlbWJseUhlbHBlcnM6OmppdEFzc2VydElz
SlNOdW1iZXIoR1BSUmVnIGdwcikKIHsKLSAgICBKdW1wIGNoZWNrSlNOdW1iZXIgPSBicmFuY2hU
ZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBncHIsIEdQUkluZm86OnRhZ1R5cGVOdW1i
ZXJSZWdpc3Rlcik7CisgICAgSnVtcCBjaGVja0pTTnVtYmVyID0gYnJhbmNoVGVzdDY0KE1hY3Jv
QXNzZW1ibGVyOjpOb25aZXJvLCBncHIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7
CiAgICAgYnJlYWtwb2ludCgpOwogICAgIGNoZWNrSlNOdW1iZXIubGluayh0aGlzKTsKIH0KIAog
dm9pZCBBc3NlbWJseUhlbHBlcnM6OmppdEFzc2VydElzSlNEb3VibGUoR1BSUmVnIGdwcikKIHsK
LSAgICBKdW1wIGNoZWNrSlNJbnQzMiA9IGJyYW5jaFB0cihBYm92ZU9yRXF1YWwsIGdwciwgR1BS
SW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKLSAgICBKdW1wIGNoZWNrSlNOdW1iZXIgPSBi
cmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBncHIsIEdQUkluZm86OnRhZ1R5
cGVOdW1iZXJSZWdpc3Rlcik7CisgICAgSnVtcCBjaGVja0pTSW50MzIgPSBicmFuY2g2NChBYm92
ZU9yRXF1YWwsIGdwciwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKKyAgICBKdW1w
IGNoZWNrSlNOdW1iZXIgPSBicmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIGdw
ciwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKICAgICBjaGVja0pTSW50MzIubGlu
ayh0aGlzKTsKICAgICBicmVha3BvaW50KCk7CiAgICAgY2hlY2tKU051bWJlci5saW5rKHRoaXMp
OwpAQCAtMTA2LDcgKzEwNiw3IEBAIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjpqaXRBc3NlcnRJc0pT
RG91YmwKIAogdm9pZCBBc3NlbWJseUhlbHBlcnM6OmppdEFzc2VydElzQ2VsbChHUFJSZWcgZ3By
KQogewotICAgIEp1bXAgY2hlY2tDZWxsID0gYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6
WmVybywgZ3ByLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpOworICAgIEp1bXAgY2hlY2tDZWxs
ID0gYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBncHIsIEdQUkluZm86OnRhZ01h
c2tSZWdpc3Rlcik7CiAgICAgYnJlYWtwb2ludCgpOwogICAgIGNoZWNrQ2VsbC5saW5rKHRoaXMp
OwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBc3NlbWJseUhlbHBlcnMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fzc2VtYmx5SGVs
cGVycy5oCShyZXZpc2lvbiAxMzE0NDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Fzc2VtYmx5SGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC05OSw3ICs5OSwxMSBAQCBwdWJs
aWM6CiAgICAgfQogICAgIHZvaWQgZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKEdQUlJlZyBmcm9t
LCBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJFbnRyeSBlbnRyeSkKICAgICB7CisjaWYgQ1BVKFg4
Nl82NCkKKyAgICAgICAgc3RvcmU2NChmcm9tLCBBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJl
Z2lzdGVyLCBlbnRyeSAqIHNpemVvZihSZWdpc3RlcikpKTsKKyNlbHNlCiAgICAgICAgIHN0b3Jl
UHRyKGZyb20sIEFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGVudHJ5ICogc2l6
ZW9mKFJlZ2lzdGVyKSkpOworI2VuZGlmCiAgICAgfQogCiAgICAgdm9pZCBlbWl0UHV0SW1tZWRp
YXRlVG9DYWxsRnJhbWVIZWFkZXIodm9pZCogdmFsdWUsIEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRl
ckVudHJ5IGVudHJ5KQpAQCAtMTEwLDcgKzExNCw3IEBAIHB1YmxpYzoKICAgICBKdW1wIGJyYW5j
aElmTm90Q2VsbChHUFJSZWcgcmVnKQogICAgIHsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAg
ICByZXR1cm4gYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgcmVnLCBHUFJJ
bmZvOjp0YWdNYXNrUmVnaXN0ZXIpOworICAgICAgICByZXR1cm4gYnJhbmNoVGVzdDY0KE1hY3Jv
QXNzZW1ibGVyOjpOb25aZXJvLCByZWcsIEdQUkluZm86OnRhZ01hc2tSZWdpc3Rlcik7CiAjZWxz
ZQogICAgICAgICByZXR1cm4gYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCByZWcs
IFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSk7CiAjZW5kaWYKQEAgLTE3Miw4ICsxNzYs
MTQgQEAgcHVibGljOgogICAgICAgICBTY3JhdGNoQnVmZmVyKiBzY3JhdGNoQnVmZmVyID0gbV9n
bG9iYWxEYXRhLT5zY3JhdGNoQnVmZmVyRm9yU2l6ZShzY3JhdGNoU2l6ZSk7CiAgICAgICAgIEVu
Y29kZWRKU1ZhbHVlKiBidWZmZXIgPSBzdGF0aWNfY2FzdDxFbmNvZGVkSlNWYWx1ZSo+KHNjcmF0
Y2hCdWZmZXItPmRhdGFCdWZmZXIoKSk7CiAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyArK2kpCisgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgKytpKSB7CisjaWYgQ1BV
KFg4Nl82NCkKKyAgICAgICAgICAgIHN0b3JlNjQoR1BSSW5mbzo6dG9SZWdpc3RlcihpKSwgYnVm
ZmVyICsgaSk7CisjZWxzZQogICAgICAgICAgICAgc3RvcmVQdHIoR1BSSW5mbzo6dG9SZWdpc3Rl
cihpKSwgYnVmZmVyICsgaSk7CisjZW5kaWYKKyAgICAgICAgfQorCiAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBGUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgKytpKSB7CiAgICAg
ICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoYnVmZmVyICsgR1BSSW5mbzo6bnVtYmVyT2ZSZWdp
c3RlcnMgKyBpKSwgR1BSSW5mbzo6cmVnVDApOwogICAgICAgICAgICAgc3RvcmVEb3VibGUoRlBS
SW5mbzo6dG9SZWdpc3RlcihpKSwgR1BSSW5mbzo6cmVnVDApOwpAQCAtMjA0LDggKzIxNCwxMyBA
QCBwdWJsaWM6CiAgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoYnVmZmVyICsgR1BSSW5m
bzo6bnVtYmVyT2ZSZWdpc3RlcnMgKyBpKSwgR1BSSW5mbzo6cmVnVDApOwogICAgICAgICAgICAg
bG9hZERvdWJsZShHUFJJbmZvOjpyZWdUMCwgRlBSSW5mbzo6dG9SZWdpc3RlcihpKSk7CiAgICAg
ICAgIH0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEdQUkluZm86Om51bWJlck9m
UmVnaXN0ZXJzOyArK2kpCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBHUFJJbmZv
OjpudW1iZXJPZlJlZ2lzdGVyczsgKytpKSB7CisjaWYgQ1BVKFg4Nl82NCkKKyAgICAgICAgICAg
IGxvYWQ2NChidWZmZXIgKyBpLCBHUFJJbmZvOjp0b1JlZ2lzdGVyKGkpKTsKKyNlbHNlCiAgICAg
ICAgICAgICBsb2FkUHRyKGJ1ZmZlciArIGksIEdQUkluZm86OnRvUmVnaXN0ZXIoaSkpOworI2Vu
ZGlmCisgICAgICAgIH0KICAgICB9CiAKICAgICAvLyBUaGVzZSBtZXRob2RzIEpJVCBnZW5lcmF0
ZSBkeW5hbWljLCBkZWJ1Zy1vbmx5IGNoZWNrcyAtIGFraW4gdG8gQVNTRVJUcy4KQEAgLTIyOSwx
NiArMjQ0LDE2IEBAIHB1YmxpYzoKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIEdQUlJlZyBib3hE
b3VibGUoRlBSUmVnIGZwciwgR1BSUmVnIGdwcikKICAgICB7Ci0gICAgICAgIG1vdmVEb3VibGVU
b1B0cihmcHIsIGdwcik7Ci0gICAgICAgIHN1YlB0cihHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVn
aXN0ZXIsIGdwcik7CisgICAgICAgIG1vdmVEb3VibGVUbzY0KGZwciwgZ3ByKTsKKyAgICAgICAg
c3ViNjQoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBncHIpOwogICAgICAgICBqaXRB
c3NlcnRJc0pTRG91YmxlKGdwcik7CiAgICAgICAgIHJldHVybiBncHI7CiAgICAgfQogICAgIEZQ
UlJlZyB1bmJveERvdWJsZShHUFJSZWcgZ3ByLCBGUFJSZWcgZnByKQogICAgIHsKICAgICAgICAg
aml0QXNzZXJ0SXNKU0RvdWJsZShncHIpOwotICAgICAgICBhZGRQdHIoR1BSSW5mbzo6dGFnVHlw
ZU51bWJlclJlZ2lzdGVyLCBncHIpOwotICAgICAgICBtb3ZlUHRyVG9Eb3VibGUoZ3ByLCBmcHIp
OworICAgICAgICBhZGQ2NChHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIGdwcik7Cisg
ICAgICAgIG1vdmU2NFRvRG91YmxlKGdwciwgZnByKTsKICAgICAgICAgcmV0dXJuIGZwcjsKICAg
ICB9CiAjZW5kaWYKQEAgLTI1OCw3ICsyNzMsNyBAQCBwdWJsaWM6CiAgICAgSnVtcCBlbWl0RXhj
ZXB0aW9uQ2hlY2soRXhjZXB0aW9uQ2hlY2tLaW5kIGtpbmQgPSBOb3JtYWxFeGNlcHRpb25DaGVj
aykKICAgICB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgcmV0dXJuIGJyYW5jaFRlc3RQ
dHIoa2luZCA9PSBOb3JtYWxFeGNlcHRpb25DaGVjayA/IE5vblplcm8gOiBaZXJvLCBBYnNvbHV0
ZUFkZHJlc3MoJmdsb2JhbERhdGEoKS0+ZXhjZXB0aW9uKSk7CisgICAgICAgIHJldHVybiBicmFu
Y2hUZXN0NjQoa2luZCA9PSBOb3JtYWxFeGNlcHRpb25DaGVjayA/IE5vblplcm8gOiBaZXJvLCBB
YnNvbHV0ZUFkZHJlc3MoJmdsb2JhbERhdGEoKS0+ZXhjZXB0aW9uKSk7CiAjZWxpZiBVU0UoSlNW
QUxVRTMyXzY0KQogICAgICAgICByZXR1cm4gYnJhbmNoMzIoa2luZCA9PSBOb3JtYWxFeGNlcHRp
b25DaGVjayA/IE5vdEVxdWFsIDogRXF1YWwsIEFic29sdXRlQWRkcmVzcyhyZWludGVycHJldF9j
YXN0PGNoYXIqPigmZ2xvYmFsRGF0YSgpLT5leGNlcHRpb24pICsgT0JKRUNUX09GRlNFVE9GKEpT
VmFsdWUsIHUuYXNCaXRzLnRhZykpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRh
ZykpOwogI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NDYWxsSGVs
cGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0NhbGxI
ZWxwZXJzLmgJKHJldmlzaW9uIDEzMTQ0OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ0NhbGxIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTU1Miw2ICs1NTIsMTMgQEAgcHVi
bGljOgogICAgICAgICBtb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjph
cmd1bWVudEdQUjApOwogICAgIH0KICAgICAKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0dXBB
cmd1bWVudHNXaXRoRXhlY1N0YXRlKEdQUlJlZyBhcmcxLCBUcnVzdGVkSW1tNjQgYXJnMikKKyAg
ICB7CisgICAgICAgIG1vdmUoYXJnMSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICAgICAg
bW92ZShhcmcyLCBHUFJJbmZvOjphcmd1bWVudEdQUjIpOworICAgICAgICBtb3ZlKEdQUkluZm86
OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgIH0KKyAgICAK
ICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEdQUlJl
ZyBhcmcxLCBUcnVzdGVkSW1tMzIgYXJnMikKICAgICB7CiAgICAgICAgIG1vdmUoYXJnMSwgR1BS
SW5mbzo6YXJndW1lbnRHUFIxKTsKQEAgLTU3Myw2ICs1ODAsMTMgQEAgcHVibGljOgogICAgICAg
ICBtb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjAp
OwogICAgIH0KICAgICAKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0dXBBcmd1bWVudHNXaXRo
RXhlY1N0YXRlKFRydXN0ZWRJbW02NCBhcmcxLCBHUFJSZWcgYXJnMikKKyAgICB7CisgICAgICAg
IG1vdmUoYXJnMiwgR1BSSW5mbzo6YXJndW1lbnRHUFIyKTsgLy8gTW92ZSB0aGlzIGZpcnN0LCBz
byBzZXR0aW5nIGFyZzEgZG9lcyBub3QgdHJhbXBsZSEKKyAgICAgICAgbW92ZShhcmcxLCBHUFJJ
bmZvOjphcmd1bWVudEdQUjEpOworICAgICAgICBtb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lz
dGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgIH0KKwogICAgIEFMV0FZU19JTkxJTkUg
dm9pZCBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbTMyIGFyZzEsIEdQUlJl
ZyBhcmcyKQogICAgIHsKICAgICAgICAgbW92ZShhcmcyLCBHUFJJbmZvOjphcmd1bWVudEdQUjIp
OyAvLyBNb3ZlIHRoaXMgZmlyc3QsIHNvIHNldHRpbmcgYXJnMSBkb2VzIG5vdCB0cmFtcGxlIQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXI2NC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGls
ZXI2NC5jcHAJKHJldmlzaW9uIDEzMTQ0OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT1NSRXhpdENvbXBpbGVyNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MywxMiArNzMsMTIg
QEAgdm9pZCBPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KGNvbnN0CiAgICAgICAgIHN3aXRj
aCAocmVjb3ZlcnktPnR5cGUoKSkgewogICAgICAgICBjYXNlIFNwZWN1bGF0aXZlQWRkOgogICAg
ICAgICAgICAgbV9qaXQuc3ViMzIocmVjb3ZlcnktPnNyYygpLCByZWNvdmVyeS0+ZGVzdCgpKTsK
LSAgICAgICAgICAgIG1faml0Lm9yUHRyKEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlciwg
cmVjb3ZlcnktPmRlc3QoKSk7CisgICAgICAgICAgICBtX2ppdC5vcjY0KEdQUkluZm86OnRhZ1R5
cGVOdW1iZXJSZWdpc3RlciwgcmVjb3ZlcnktPmRlc3QoKSk7CiAgICAgICAgICAgICBhbHJlYWR5
Qm94ZWQgPSByZWNvdmVyeS0+ZGVzdCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAKICAgICAgICAgY2FzZSBCb29sZWFuU3BlY3VsYXRpb25DaGVjazoKLSAgICAgICAgICAgIG1f
aml0LnhvclB0cihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQz
Ml90PihWYWx1ZUZhbHNlKSksIHJlY292ZXJ5LT5kZXN0KCkpOworICAgICAgICAgICAgbV9qaXQu
eG9yNjQoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4o
VmFsdWVGYWxzZSkpLCByZWNvdmVyeS0+ZGVzdCgpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgCiAgICAgICAgIGRlZmF1bHQ6CkBAIC05OCwxMSArOTgsMTEgQEAgdm9pZCBPU1JF
eGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KGNvbnN0CiAgICAgICAgIGlmIChleGl0Lm1fanNWYWx1
ZVNvdXJjZS5pc0FkZHJlc3MoKSkgewogICAgICAgICAgICAgLy8gV2UgY2FuJ3QgYmUgc3VyZSB0
aGF0IHdlIGhhdmUgYSBzcGFyZSByZWdpc3Rlci4gU28gdXNlIHRoZSB0YWdUeXBlTnVtYmVyUmVn
aXN0ZXIsCiAgICAgICAgICAgICAvLyBzaW5jZSB3ZSBrbm93IGhvdyB0byByZXN0b3JlIGl0Lgot
ICAgICAgICAgICAgbV9qaXQubG9hZFB0cihBc3NlbWJseUhlbHBlcnM6OkFkZHJlc3MoZXhpdC5t
X2pzVmFsdWVTb3VyY2UuYXNBZGRyZXNzKCkpLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0
ZXIpOwotICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJl
Z2lzdGVyLCBidWNrZXQpOwotICAgICAgICAgICAgbV9qaXQubW92ZShBc3NlbWJseUhlbHBlcnM6
OlRydXN0ZWRJbW1QdHIoYml0d2lzZV9jYXN0PHZvaWQqPihUYWdUeXBlTnVtYmVyKSksIEdQUklu
Zm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7CisgICAgICAgICAgICBtX2ppdC5sb2FkNjQoQXNz
ZW1ibHlIZWxwZXJzOjpBZGRyZXNzKGV4aXQubV9qc1ZhbHVlU291cmNlLmFzQWRkcmVzcygpKSwg
R1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKKyAgICAgICAgICAgIG1faml0LnN0b3Jl
NjQoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBidWNrZXQpOworICAgICAgICAgICAg
bV9qaXQubW92ZShBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW02NChiaXR3aXNlX2Nhc3Q8aW50
NjRfdD4oVGFnVHlwZU51bWJlcikpLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOwog
ICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKGV4aXQubV9qc1ZhbHVl
U291cmNlLmdwcigpLCBidWNrZXQpOworICAgICAgICAgICAgbV9qaXQuc3RvcmU2NChleGl0Lm1f
anNWYWx1ZVNvdXJjZS5ncHIoKSwgYnVja2V0KTsKICAgICB9CiAKICAgICAvLyA0KSBGaWd1cmUg
b3V0IGhvdyBtYW55IHNjcmF0Y2ggc2xvdHMgd2UnbGwgbmVlZC4gV2UgbmVlZCBvbmUgZm9yIGV2
ZXJ5IEdQUi9GUFIKQEAgLTIzMCw3ICsyMzAsNyBAQCB2b2lkIE9TUkV4aXRDb21waWxlcjo6Y29t
cGlsZUV4aXQoY29uc3QKICAgICAgICAgICAgIHN3aXRjaCAocmVjb3ZlcnkudGVjaG5pcXVlKCkp
IHsKICAgICAgICAgICAgIGNhc2UgVW5ib3hlZEludDMySW5HUFI6CiAgICAgICAgICAgICAgICAg
aWYgKHJlY292ZXJ5LmdwcigpICE9IGFscmVhZHlCb3hlZCkKLSAgICAgICAgICAgICAgICAgICAg
bV9qaXQub3JQdHIoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCByZWNvdmVyeS5ncHIo
KSk7CisgICAgICAgICAgICAgICAgICAgIG1faml0Lm9yNjQoR1BSSW5mbzo6dGFnVHlwZU51bWJl
clJlZ2lzdGVyLCByZWNvdmVyeS5ncHIoKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIEFscmVhZHlJbkpTU3RhY2tBc1VuYm94ZWRJ
bnQzMjoKQEAgLTI1Miw3ICsyNTIsNyBAQCB2b2lkIE9TUkV4aXRDb21waWxlcjo6Y29tcGlsZUV4
aXQoY29uc3QKICAgICAgICAgICAgICAgICBpZiAoYWRkcmVzc0dQUiA9PSByZWNvdmVyeS5ncHIo
KSkKICAgICAgICAgICAgICAgICAgICAgYWRkcmVzc0dQUiA9IEdQUkluZm86OnJlZ1QxOwogICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKGFkZHJlc3NHUFIs
IHNjcmF0Y2hEYXRhQnVmZmVyKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTY0KGFkZHJl
c3NHUFIsIHNjcmF0Y2hEYXRhQnVmZmVyKTsKICAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKEFz
c2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbVB0cihzY3JhdGNoRGF0YUJ1ZmZlciArIDEpLCBhZGRy
ZXNzR1BSKTsKICAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZURvdWJsZShGUFJJbmZvOjpmcFJl
Z1QwLCBhZGRyZXNzR1BSKTsKICAgICAgICAgICAgICAgICAKQEAgLTI2NiwxMiArMjY2LDEyIEBA
IHZvaWQgT1NSRXhpdENvbXBpbGVyOjpjb21waWxlRXhpdChjb25zdAogICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgIHBvc2l0aXZlLmxpbmsoJm1faml0KTsKICAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICBtX2ppdC5vclB0cihHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVn
aXN0ZXIsIHJlY292ZXJ5LmdwcigpKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5vcjY0KEdQUklu
Zm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgcmVjb3ZlcnkuZ3ByKCkpOwogICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgICAgIGRvbmUubGluaygmbV9qaXQpOwogICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgIG1faml0LmxvYWREb3VibGUoYWRkcmVzc0dQUiwgRlBSSW5mbzo6
ZnBSZWdUMCk7Ci0gICAgICAgICAgICAgICAgbV9qaXQubG9hZFB0cihzY3JhdGNoRGF0YUJ1ZmZl
ciwgYWRkcmVzc0dQUik7CisgICAgICAgICAgICAgICAgbV9qaXQubG9hZDY0KHNjcmF0Y2hEYXRh
QnVmZmVyLCBhZGRyZXNzR1BSKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICAKQEAgLTI5NiwxMSArMjk2LDExIEBAIHZvaWQgT1NSRXhpdENv
bXBpbGVyOjpjb21waWxlRXhpdChjb25zdAogICAgICAgICBjYXNlIFVuYm94ZWRJbnQzMkluR1BS
OgogICAgICAgICBjYXNlIFVJbnQzMkluR1BSOgogICAgICAgICAgICAgaWYgKG9wZXJhbmRzLmlz
VmFyaWFibGUoaW5kZXgpICYmIHBvaXNvbmVkVmlydHVhbFJlZ2lzdGVyc1tvcGVyYW5kcy52YXJp
YWJsZUZvckluZGV4KGluZGV4KV0pIHsKLSAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZVB0cihy
ZWNvdmVyeS5ncHIoKSwgc2NyYXRjaERhdGFCdWZmZXIgKyBjdXJyZW50UG9pc29uSW5kZXgpOwor
ICAgICAgICAgICAgICAgIG1faml0LnN0b3JlNjQocmVjb3ZlcnkuZ3ByKCksIHNjcmF0Y2hEYXRh
QnVmZmVyICsgY3VycmVudFBvaXNvbkluZGV4KTsKICAgICAgICAgICAgICAgICBtX3BvaXNvblNj
cmF0Y2hJbmRpY2VzW29wZXJhbmRzLnZhcmlhYmxlRm9ySW5kZXgoaW5kZXgpXSA9IGN1cnJlbnRQ
b2lzb25JbmRleDsKICAgICAgICAgICAgICAgICBjdXJyZW50UG9pc29uSW5kZXgrKzsKICAgICAg
ICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKHJlY292ZXJ5Lmdw
cigpLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcilvcGVyYW5k
KSk7CisgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmU2NChyZWNvdmVyeS5ncHIoKSwgQXNzZW1i
bHlIZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpb3BlcmFuZCkpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBicmVhazsKQEAgLTMz
MCwxMSArMzMwLDExIEBAIHZvaWQgT1NSRXhpdENvbXBpbGVyOjpjb21waWxlRXhpdChjb25zdAog
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgR1BSUmVnIGdwciA9IEdQUklu
Zm86OnRvUmVnaXN0ZXIoRlBSSW5mbzo6dG9JbmRleChyZWNvdmVyeS5mcHIoKSkpOwogICAgICAg
ICAgICAgaWYgKG9wZXJhbmRzLmlzVmFyaWFibGUoaW5kZXgpICYmIHBvaXNvbmVkVmlydHVhbFJl
Z2lzdGVyc1tvcGVyYW5kcy52YXJpYWJsZUZvckluZGV4KGluZGV4KV0pIHsKLSAgICAgICAgICAg
ICAgICBtX2ppdC5zdG9yZVB0cihncHIsIHNjcmF0Y2hEYXRhQnVmZmVyICsgY3VycmVudFBvaXNv
bkluZGV4KTsKKyAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTY0KGdwciwgc2NyYXRjaERhdGFC
dWZmZXIgKyBjdXJyZW50UG9pc29uSW5kZXgpOwogICAgICAgICAgICAgICAgIG1fcG9pc29uU2Ny
YXRjaEluZGljZXNbb3BlcmFuZHMudmFyaWFibGVGb3JJbmRleChpbmRleCldID0gY3VycmVudFBv
aXNvbkluZGV4OwogICAgICAgICAgICAgICAgIGN1cnJlbnRQb2lzb25JbmRleCsrOwogICAgICAg
ICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIoZ3ByLCBBc3NlbWJs
eUhlbHBlcnM6OmFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcilvcGVyYW5kcy5vcGVyYW5kRm9y
SW5kZXgoaW5kZXgpKSk7CisgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmU2NChncHIsIEFzc2Vt
Ymx5SGVscGVyczo6YWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKW9wZXJhbmRzLm9wZXJhbmRG
b3JJbmRleChpbmRleCkpKTsKICAgICAgICAgfQogICAgIH0KICAgICAKQEAgLTM0OCw3ICszNDgs
NyBAQCB2b2lkIE9TUkV4aXRDb21waWxlcjo6Y29tcGlsZUV4aXQoY29uc3QKICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgICAgIG1faml0LmxvYWREb3VibGUoQXNzZW1ibHlIZWxw
ZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpb3BlcmFuZHMub3BlcmFuZEZvckluZGV4
KGluZGV4KSksIEZQUkluZm86OmZwUmVnVDApOwogICAgICAgICAgICAgbV9qaXQuYm94RG91Ymxl
KEZQUkluZm86OmZwUmVnVDAsIEdQUkluZm86OnJlZ1QwKTsKLSAgICAgICAgICAgIG1faml0LnN0
b3JlUHRyKEdQUkluZm86OnJlZ1QwLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoKFZpcnR1
YWxSZWdpc3RlcilvcGVyYW5kcy5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSk7CisgICAgICAgICAg
ICBtX2ppdC5zdG9yZTY0KEdQUkluZm86OnJlZ1QwLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NG
b3IoKFZpcnR1YWxSZWdpc3RlcilvcGVyYW5kcy5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSk7CiAg
ICAgICAgIH0KICAgICB9CiAgICAgCkBAIC0zNjgsMjAgKzM2OCwyMCBAQCB2b2lkIE9TUkV4aXRD
b21waWxlcjo6Y29tcGlsZUV4aXQoY29uc3QKICAgICAgICAgICAgICAgICBjb25zdCBWYWx1ZVJl
Y292ZXJ5JiByZWNvdmVyeSA9IG9wZXJhbmRzW2luZGV4XTsKICAgICAgICAgICAgICAgICBzd2l0
Y2ggKHJlY292ZXJ5LnRlY2huaXF1ZSgpKSB7CiAgICAgICAgICAgICAgICAgY2FzZSBEaXNwbGFj
ZWRJbkpTU3RhY2s6Ci0gICAgICAgICAgICAgICAgICAgIG1faml0LmxvYWRQdHIoQXNzZW1ibHlI
ZWxwZXJzOjphZGRyZXNzRm9yKHJlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpKSwgR1BSSW5mbzo6
dG9SZWdpc3RlcihkaXNwbGFjZW1lbnRJbmRleCsrKSk7CisgICAgICAgICAgICAgICAgICAgIG1f
aml0LmxvYWQ2NChBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IocmVjb3ZlcnkudmlydHVhbFJl
Z2lzdGVyKCkpLCBHUFJJbmZvOjp0b1JlZ2lzdGVyKGRpc3BsYWNlbWVudEluZGV4KyspKTsKICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgICAgIGNhc2UgSW50MzJEaXNwbGFjZWRJbkpTU3RhY2s6IHsKICAgICAgICAgICAgICAgICAg
ICAgR1BSUmVnIGdwciA9IEdQUkluZm86OnRvUmVnaXN0ZXIoZGlzcGxhY2VtZW50SW5kZXgrKyk7
CiAgICAgICAgICAgICAgICAgICAgIG1faml0LmxvYWQzMihBc3NlbWJseUhlbHBlcnM6OmFkZHJl
c3NGb3IocmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkpLCBncHIpOwotICAgICAgICAgICAgICAg
ICAgICBtX2ppdC5vclB0cihHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIGdwcik7Cisg
ICAgICAgICAgICAgICAgICAgIG1faml0Lm9yNjQoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lz
dGVyLCBncHIpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGNhc2UgRG91YmxlRGlzcGxh
Y2VkSW5KU1N0YWNrOiB7CiAgICAgICAgICAgICAgICAgICAgIEdQUlJlZyBncHIgPSBHUFJJbmZv
Ojp0b1JlZ2lzdGVyKGRpc3BsYWNlbWVudEluZGV4KyspOwotICAgICAgICAgICAgICAgICAgICBt
X2ppdC5sb2FkUHRyKEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcihyZWNvdmVyeS52aXJ0dWFs
UmVnaXN0ZXIoKSksIGdwcik7Ci0gICAgICAgICAgICAgICAgICAgIG1faml0LnN1YlB0cihHUFJJ
bmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIGdwcik7CisgICAgICAgICAgICAgICAgICAgIG1f
aml0LmxvYWQ2NChBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IocmVjb3ZlcnkudmlydHVhbFJl
Z2lzdGVyKCkpLCBncHIpOworICAgICAgICAgICAgICAgICAgICBtX2ppdC5zdWI2NChHUFJJbmZv
Ojp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIGdwcik7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCkBAIC0zOTcsNyArMzk3
LDcgQEAgdm9pZCBPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KGNvbnN0CiAgICAgICAgICAg
ICAgICAgY2FzZSBEaXNwbGFjZWRJbkpTU3RhY2s6CiAgICAgICAgICAgICAgICAgY2FzZSBJbnQz
MkRpc3BsYWNlZEluSlNTdGFjazoKICAgICAgICAgICAgICAgICBjYXNlIERvdWJsZURpc3BsYWNl
ZEluSlNTdGFjazoKLSAgICAgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIoR1BSSW5mbzo6
dG9SZWdpc3RlcihkaXNwbGFjZW1lbnRJbmRleCsrKSwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNz
Rm9yKChWaXJ0dWFsUmVnaXN0ZXIpb3BlcmFuZHMub3BlcmFuZEZvckluZGV4KGluZGV4KSkpOwor
ICAgICAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTY0KEdQUkluZm86OnRvUmVnaXN0ZXIoZGlz
cGxhY2VtZW50SW5kZXgrKyksIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcigoVmlydHVhbFJl
Z2lzdGVyKW9wZXJhbmRzLm9wZXJhbmRGb3JJbmRleChpbmRleCkpKTsKICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGRlZmF1
bHQ6CkBAIC00MjgsMjEgKzQyOCwyMSBAQCB2b2lkIE9TUkV4aXRDb21waWxlcjo6Y29tcGlsZUV4
aXQoY29uc3QKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBzd2l0Y2ggKHJlY292
ZXJ5LnRlY2huaXF1ZSgpKSB7CiAgICAgICAgICAgICAgICAgY2FzZSBEaXNwbGFjZWRJbkpTU3Rh
Y2s6Ci0gICAgICAgICAgICAgICAgICAgIG1faml0LmxvYWRQdHIoQXNzZW1ibHlIZWxwZXJzOjph
ZGRyZXNzRm9yKHJlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpKSwgR1BSSW5mbzo6cmVnVDApOwot
ICAgICAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZVB0cihHUFJJbmZvOjpyZWdUMCwgc2NyYXRj
aERhdGFCdWZmZXIgKyBzY3JhdGNoSW5kZXgrKyk7CisgICAgICAgICAgICAgICAgICAgIG1faml0
LmxvYWQ2NChBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IocmVjb3ZlcnkudmlydHVhbFJlZ2lz
dGVyKCkpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAgICAgICAgICAgIG1faml0LnN0b3Jl
NjQoR1BSSW5mbzo6cmVnVDAsIHNjcmF0Y2hEYXRhQnVmZmVyICsgc2NyYXRjaEluZGV4KyspOwog
ICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICAgICAgY2FzZSBJbnQzMkRpc3BsYWNlZEluSlNTdGFjazogewogICAgICAgICAgICAgICAg
ICAgICBtX2ppdC5sb2FkMzIoQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKHJlY292ZXJ5LnZp
cnR1YWxSZWdpc3RlcigpKSwgR1BSSW5mbzo6cmVnVDApOwotICAgICAgICAgICAgICAgICAgICBt
X2ppdC5vclB0cihHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIEdQUkluZm86OnJlZ1Qw
KTsKLSAgICAgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIoR1BSSW5mbzo6cmVnVDAsIHNj
cmF0Y2hEYXRhQnVmZmVyICsgc2NyYXRjaEluZGV4KyspOworICAgICAgICAgICAgICAgICAgICBt
X2ppdC5vcjY0KEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgR1BSSW5mbzo6cmVnVDAp
OworICAgICAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTY0KEdQUkluZm86OnJlZ1QwLCBzY3Jh
dGNoRGF0YUJ1ZmZlciArIHNjcmF0Y2hJbmRleCsrKTsKICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICBjYXNlIERvdWJsZURpc3BsYWNlZEluSlNTdGFjazogewotICAgICAgICAgICAgICAgICAg
ICBtX2ppdC5sb2FkUHRyKEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcihyZWNvdmVyeS52aXJ0
dWFsUmVnaXN0ZXIoKSksIEdQUkluZm86OnJlZ1QwKTsKLSAgICAgICAgICAgICAgICAgICAgbV9q
aXQuc3ViUHRyKEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgR1BSSW5mbzo6cmVnVDAp
OwotICAgICAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZVB0cihHUFJJbmZvOjpyZWdUMCwgc2Ny
YXRjaERhdGFCdWZmZXIgKyBzY3JhdGNoSW5kZXgrKyk7CisgICAgICAgICAgICAgICAgICAgIG1f
aml0LmxvYWQ2NChBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IocmVjb3ZlcnkudmlydHVhbFJl
Z2lzdGVyKCkpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAgICAgICAgICAgIG1faml0LnN1
YjY0KEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgR1BSSW5mbzo6cmVnVDApOworICAg
ICAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTY0KEdQUkluZm86OnJlZ1QwLCBzY3JhdGNoRGF0
YUJ1ZmZlciArIHNjcmF0Y2hJbmRleCsrKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKQEAgLTQ1OCw4ICs0NTgsOCBA
QCB2b2lkIE9TUkV4aXRDb21waWxlcjo6Y29tcGlsZUV4aXQoY29uc3QKICAgICAgICAgICAgICAg
ICBjYXNlIERpc3BsYWNlZEluSlNTdGFjazoKICAgICAgICAgICAgICAgICBjYXNlIEludDMyRGlz
cGxhY2VkSW5KU1N0YWNrOgogICAgICAgICAgICAgICAgIGNhc2UgRG91YmxlRGlzcGxhY2VkSW5K
U1N0YWNrOgotICAgICAgICAgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKHNjcmF0Y2hEYXRhQnVm
ZmVyICsgc2NyYXRjaEluZGV4KyssIEdQUkluZm86OnJlZ1QwKTsKLSAgICAgICAgICAgICAgICAg
ICAgbV9qaXQuc3RvcmVQdHIoR1BSSW5mbzo6cmVnVDAsIEFzc2VtYmx5SGVscGVyczo6YWRkcmVz
c0ZvcigoVmlydHVhbFJlZ2lzdGVyKW9wZXJhbmRzLm9wZXJhbmRGb3JJbmRleChpbmRleCkpKTsK
KyAgICAgICAgICAgICAgICAgICAgbV9qaXQubG9hZDY0KHNjcmF0Y2hEYXRhQnVmZmVyICsgc2Ny
YXRjaEluZGV4KyssIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAgICAgICAgICAgbV9qaXQu
c3RvcmU2NChHUFJJbmZvOjpyZWdUMCwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0
dWFsUmVnaXN0ZXIpb3BlcmFuZHMub3BlcmFuZEZvckluZGV4KGluZGV4KSkpOwogICAgICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
ZGVmYXVsdDoKQEAgLTQ4NCw4ICs0ODQsOCBAQCB2b2lkIE9TUkV4aXRDb21waWxlcjo6Y29tcGls
ZUV4aXQoY29uc3QKICAgICAgICAgICAgIGNhc2UgVW5ib3hlZEludDMySW5HUFI6CiAgICAgICAg
ICAgICBjYXNlIFVJbnQzMkluR1BSOgogICAgICAgICAgICAgY2FzZSBJbkZQUjoKLSAgICAgICAg
ICAgICAgICBtX2ppdC5sb2FkUHRyKHNjcmF0Y2hEYXRhQnVmZmVyICsgcG9pc29uSW5kZXgodmly
dHVhbFJlZ2lzdGVyKSwgR1BSSW5mbzo6cmVnVDApOwotICAgICAgICAgICAgICAgIG1faml0LnN0
b3JlUHRyKEdQUkluZm86OnJlZ1QwLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoKFZpcnR1
YWxSZWdpc3Rlcil2aXJ0dWFsUmVnaXN0ZXIpKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5sb2Fk
NjQoc2NyYXRjaERhdGFCdWZmZXIgKyBwb2lzb25JbmRleCh2aXJ0dWFsUmVnaXN0ZXIpLCBHUFJJ
bmZvOjpyZWdUMCk7CisgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmU2NChHUFJJbmZvOjpyZWdU
MCwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpdmlydHVhbFJl
Z2lzdGVyKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICBkZWZhdWx0OgpAQCAtNDk5LDE2ICs0OTksMTYgQEAgdm9pZCBPU1JFeGl0Q29tcGls
ZXI6OmNvbXBpbGVFeGl0KGNvbnN0CiAKICAgICBpZiAoaGF2ZUNvbnN0YW50cykgewogICAgICAg
ICBpZiAoaGF2ZVVuZGVmaW5lZCkKLSAgICAgICAgICAgIG1faml0Lm1vdmUoQXNzZW1ibHlIZWxw
ZXJzOjpUcnVzdGVkSW1tUHRyKEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKSksIEdQUklu
Zm86OnJlZ1QwKTsKKyAgICAgICAgICAgIG1faml0Lm1vdmUoQXNzZW1ibHlIZWxwZXJzOjpUcnVz
dGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpKSwgR1BSSW5mbzo6cmVnVDAp
OwogICAgICAgICAKICAgICAgICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IG9wZXJh
bmRzLnNpemUoKTsgKytpbmRleCkgewogICAgICAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYg
cmVjb3ZlcnkgPSBvcGVyYW5kc1tpbmRleF07CiAgICAgICAgICAgICBpZiAocmVjb3ZlcnkudGVj
aG5pcXVlKCkgIT0gQ29uc3RhbnQpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
ICAgICBpZiAocmVjb3ZlcnkuY29uc3RhbnQoKS5pc1VuZGVmaW5lZCgpKQotICAgICAgICAgICAg
ICAgIG1faml0LnN0b3JlUHRyKEdQUkluZm86OnJlZ1QwLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJl
c3NGb3IoKFZpcnR1YWxSZWdpc3RlcilvcGVyYW5kcy5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSk7
CisgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmU2NChHUFJJbmZvOjpyZWdUMCwgQXNzZW1ibHlI
ZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpb3BlcmFuZHMub3BlcmFuZEZvcklu
ZGV4KGluZGV4KSkpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG1faml0LnN0
b3JlUHRyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbVB0cihKU1ZhbHVlOjplbmNvZGUocmVj
b3ZlcnkuY29uc3RhbnQoKSkpLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoKFZpcnR1YWxS
ZWdpc3RlcilvcGVyYW5kcy5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSk7CisgICAgICAgICAgICAg
ICAgbV9qaXQuc3RvcmU2NChBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjpl
bmNvZGUocmVjb3ZlcnkuY29uc3RhbnQoKSkpLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3Io
KFZpcnR1YWxSZWdpc3RlcilvcGVyYW5kcy5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSk7CiAgICAg
ICAgIH0KICAgICB9CiAgICAgCkBAIC01NzYsMTEgKzU3NiwxMSBAQCB2b2lkIE9TUkV4aXRDb21w
aWxlcjo6Y29tcGlsZUV4aXQoY29uc3QKICAgICAgICAgICAgIGNhbGxlckZyYW1lR1BSID0gR1BS
SW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXI7CiAgICAgICAgIAogICAgICAgICBtX2ppdC5zdG9yZVB0
cihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoYmFzZWxpbmVDb2RlQmxvY2spLCBBc3Nl
bWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1l
LT5zdGFja09mZnNldCArIEpTU3RhY2s6OkNvZGVCbG9jaykpKTsKLSAgICAgICAgbV9qaXQuc3Rv
cmVQdHIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGlubGluZUNhbGxGcmFtZS0+Y2Fs
bGVlLT5zY29wZSgpKSwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0
ZXIpKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBKU1N0YWNrOjpTY29wZUNoYWluKSkp
OwotICAgICAgICBtX2ppdC5zdG9yZVB0cihjYWxsZXJGcmFtZUdQUiwgQXNzZW1ibHlIZWxwZXJz
OjphZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZz
ZXQgKyBKU1N0YWNrOjpDYWxsZXJGcmFtZSkpKTsKKyAgICAgICAgbV9qaXQuc3RvcmU2NChBc3Nl
bWJseUhlbHBlcnM6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZShpbmxpbmVD
YWxsRnJhbWUtPmNhbGxlZS0+c2NvcGUoKSkpKSwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9y
KChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBKU1N0YWNr
OjpTY29wZUNoYWluKSkpOworICAgICAgICBtX2ppdC5zdG9yZTY0KGNhbGxlckZyYW1lR1BSLCBB
c3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZy
YW1lLT5zdGFja09mZnNldCArIEpTU3RhY2s6OkNhbGxlckZyYW1lKSkpOwogICAgICAgICBtX2pp
dC5zdG9yZVB0cihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoanVtcFRhcmdldCksIEFz
c2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKShpbmxpbmVDYWxsRnJh
bWUtPnN0YWNrT2Zmc2V0ICsgSlNTdGFjazo6UmV0dXJuUEMpKSk7CiAgICAgICAgIG1faml0LnN0
b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIoaW5saW5lQ2FsbEZyYW1lLT5hcmd1
bWVudHMuc2l6ZSgpKSwgQXNzZW1ibHlIZWxwZXJzOjpwYXlsb2FkRm9yKChWaXJ0dWFsUmVnaXN0
ZXIpKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBKU1N0YWNrOjpBcmd1bWVudENvdW50
KSkpOwotICAgICAgICBtX2ppdC5zdG9yZVB0cihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1Q
dHIoaW5saW5lQ2FsbEZyYW1lLT5jYWxsZWUuZ2V0KCkpLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJl
c3NGb3IoKFZpcnR1YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIEpT
U3RhY2s6OkNhbGxlZSkpKTsKKyAgICAgICAgbV9qaXQuc3RvcmU2NChBc3NlbWJseUhlbHBlcnM6
OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZShpbmxpbmVDYWxsRnJhbWUtPmNh
bGxlZS5nZXQoKSkpKSwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0
ZXIpKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBKU1N0YWNrOjpDYWxsZWUpKSk7CiAg
ICAgfQogICAgIAogICAgIC8vIDE1KSBDcmVhdGUgYXJndW1lbnRzIGlmIG5lY2Vzc2FyeSBhbmQg
cGxhY2UgdGhlbSBpbnRvIHRoZSBhcHByb3ByaWF0ZSBhbGlhc2VkCkBAIC02MjAsMjIgKzYyMCwy
MiBAQCB2b2lkIE9TUkV4aXRDb21waWxlcjo6Y29tcGlsZUV4aXQoY29uc3QKICAgICAgICAgICAg
ICAgICAgICAgICAgIGJpdHdpc2VfY2FzdDx2b2lkKj4ob3BlcmF0aW9uQ3JlYXRlQXJndW1lbnRz
KSksCiAgICAgICAgICAgICAgICAgICAgIEdQUkluZm86Om5vbkFyZ0dQUjApOwogICAgICAgICAg
ICAgICAgIG1faml0LmNhbGwoR1BSSW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAgICAgICAgICAgICAg
bV9qaXQuc3RvcmVQdHIoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEFzc2VtYmx5SGVscGVyczo6
YWRkcmVzc0Zvcihhcmd1bWVudHNSZWdpc3RlcikpOwotICAgICAgICAgICAgICAgIG1faml0LnN0
b3JlUHRyKAorICAgICAgICAgICAgICAgIG1faml0LnN0b3JlNjQoR1BSSW5mbzo6cmV0dXJuVmFs
dWVHUFIsIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0Zvcihhcmd1bWVudHNSZWdpc3RlcikpOwor
ICAgICAgICAgICAgICAgIG1faml0LnN0b3JlNjQoCiAgICAgICAgICAgICAgICAgICAgIEdQUklu
Zm86OnJldHVyblZhbHVlR1BSLAogICAgICAgICAgICAgICAgICAgICBBc3NlbWJseUhlbHBlcnM6
OmFkZHJlc3NGb3IodW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyKGFyZ3VtZW50c1JlZ2lzdGVy
KSkpOwogICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIs
IEdQUkluZm86OnJlZ1QwKTsgLy8gbm8tb3AgbW92ZSBvbiBhbG1vc3QgYWxsIHBsYXRmb3Jtcy4K
ICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgbV9qaXQubG9hZFB0cihBc3NlbWJseUhlbHBl
cnM6OmFkZHJlc3NGb3IoYXJndW1lbnRzUmVnaXN0ZXIpLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAg
ICAgICAgICBtX2ppdC5zdG9yZVB0cihHUFJJbmZvOjpyZWdUMCwgQXNzZW1ibHlIZWxwZXJzOjph
ZGRyZXNzRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgICAgIG1faml0LmxvYWQ2NChBc3NlbWJseUhl
bHBlcnM6OmFkZHJlc3NGb3IoYXJndW1lbnRzUmVnaXN0ZXIpLCBHUFJJbmZvOjpyZWdUMCk7Cisg
ICAgICAgICAgICBtX2ppdC5zdG9yZTY0KEdQUkluZm86OnJlZ1QwLCBBc3NlbWJseUhlbHBlcnM6
OmFkZHJlc3NGb3Iob3BlcmFuZCkpOwogICAgICAgICB9CiAgICAgfQogICAgIAogICAgIC8vIDE2
KSBMb2FkIHRoZSByZXN1bHQgb2YgdGhlIGxhc3QgYnl0ZWNvZGUgb3BlcmF0aW9uIGludG8gcmVn
VDAuCiAgICAgCiAgICAgaWYgKGV4aXQubV9sYXN0U2V0T3BlcmFuZCAhPSBzdGQ6Om51bWVyaWNf
bGltaXRzPGludD46Om1heCgpKQotICAgICAgICBtX2ppdC5sb2FkUHRyKEFzc2VtYmx5SGVscGVy
czo6YWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKWV4aXQubV9sYXN0U2V0T3BlcmFuZCksIEdQ
UkluZm86OmNhY2hlZFJlc3VsdFJlZ2lzdGVyKTsKKyAgICAgICAgbV9qaXQubG9hZDY0KEFzc2Vt
Ymx5SGVscGVyczo6YWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKWV4aXQubV9sYXN0U2V0T3Bl
cmFuZCksIEdQUkluZm86OmNhY2hlZFJlc3VsdFJlZ2lzdGVyKTsKICAgICAKICAgICAvLyAxNykg
QWRqdXN0IHRoZSBjYWxsIGZyYW1lIHBvaW50ZXIuCiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHUmVwYXRjaC5jcHAJKHJldmlzaW9uIDEzMTQ0OSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5Miw3
ICsxOTIsNyBAQCBzdGF0aWMgdm9pZCBnZW5lcmF0ZVByb3RvQ2hhaW5BY2Nlc3NTdHViCiAgICAg
CiAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KG9mZnNldCkpIHsKICNpZiBVU0UoSlNWQUxVRTY0KQot
ICAgICAgICBzdHViSml0LmxvYWRQdHIocHJvdG9PYmplY3QtPmxvY2F0aW9uRm9yT2Zmc2V0KG9m
ZnNldCksIHJlc3VsdEdQUik7CisgICAgICAgIHN0dWJKaXQubG9hZDY0KHByb3RvT2JqZWN0LT5s
b2NhdGlvbkZvck9mZnNldChvZmZzZXQpLCByZXN1bHRHUFIpOwogI2VsaWYgVVNFKEpTVkFMVUUz
Ml82NCkKICAgICAgICAgc3R1YkppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRy
KHByb3RvT2JqZWN0LT5sb2NhdGlvbkZvck9mZnNldChvZmZzZXQpKSwgcmVzdWx0R1BSKTsKICAg
ICAgICAgc3R1YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBP
QkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpLCByZXN1
bHRUYWdHUFIpOwpAQCAtMjAxLDcgKzIwMSw3IEBAIHN0YXRpYyB2b2lkIGdlbmVyYXRlUHJvdG9D
aGFpbkFjY2Vzc1N0dWIKICAgICB9IGVsc2UgewogICAgICAgICBzdHViSml0LmxvYWRQdHIocHJv
dG9PYmplY3QtPmJ1dHRlcmZseUFkZHJlc3MoKSwgcmVzdWx0R1BSKTsKICNpZiBVU0UoSlNWQUxV
RTY0KQotICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVz
dWx0R1BSLCBvZmZzZXRJbkJ1dHRlcmZseShvZmZzZXQpICogc2l6ZW9mKFdyaXRlQmFycmllcjxV
bmtub3duPikpLCByZXN1bHRHUFIpOworICAgICAgICBzdHViSml0LmxvYWQ2NChNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIG9mZnNldEluQnV0dGVyZmx5KG9mZnNldCkgKiBzaXpl
b2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSksIHJlc3VsdEdQUik7CiAjZWxpZiBVU0UoSlNWQUxV
RTMyXzY0KQogICAgICAgICBzdHViSml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhy
ZXN1bHRHUFIsIG9mZnNldEluQnV0dGVyZmx5KG9mZnNldCkgKiBzaXplb2YoV3JpdGVCYXJyaWVy
PFVua25vd24+KSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0Jp
dHMudGFnKSksIHJlc3VsdFRhZ0dQUik7CiAgICAgICAgIHN0dWJKaXQubG9hZDMyKE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgb2Zmc2V0SW5CdXR0ZXJmbHkob2Zmc2V0KSAqIHNp
emVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1
ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSksIHJlc3VsdEdQUik7CkBAIC0yNjMsNyArMjYz
LDcgQEAgc3RhdGljIGJvb2wgdHJ5Q2FjaGVHZXRCeUlEKEV4ZWNTdGF0ZSogZQogICAgICAgICBm
YWlsdXJlQ2FzZXMuYXBwZW5kKHN0dWJKaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxlc3NU
aGFuLCBzY3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDApKSk7CiAKICNp
ZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICBzdHViSml0Lm9yUHRyKEdQUkluZm86OnRhZ1R5cGVO
dW1iZXJSZWdpc3Rlciwgc2NyYXRjaEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgc3R1YkppdC5v
cjY0KEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlciwgc2NyYXRjaEdQUiwgcmVzdWx0R1BS
KTsKICNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgICAgIHN0dWJKaXQubW92ZShzY3JhdGNo
R1BSLCByZXN1bHRHUFIpOwogICAgICAgICBzdHViSml0Lm1vdmUoSklUQ29tcGlsZXI6OlRydXN0
ZWRJbW0zMigweGZmZmZmZmZmKSwgcmVzdWx0VGFnR1BSKTsgLy8gSlNWYWx1ZTo6SW50MzJUYWcK
QEAgLTQyMSwxNCArNDIxLDE0IEBAIHN0YXRpYyBib29sIHRyeUJ1aWxkR2V0QnlJRExpc3QoRXhl
Y1N0YXQKICAgICAgICAgICAgICAgICBBU1NFUlQoYmFzZUdQUiAhPSBzY3JhdGNoR1BSKTsKICAg
ICAgICAgICAgICAgICBpZiAoaXNJbmxpbmVPZmZzZXQoc2xvdC5jYWNoZWRPZmZzZXQoKSkpIHsK
ICNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICAgICAgICAgICAgICBzdHViSml0LmxvYWRQdHIo
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uoc2xv
dC5jYWNoZWRPZmZzZXQoKSkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICAgICAgc3R1
YkppdC5sb2FkNjQoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgb2Zmc2V0UmVsYXRp
dmVUb0Jhc2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkpLCBzY3JhdGNoR1BSKTsKICNlbHNlCiAgICAg
ICAgICAgICAgICAgICAgIHN0dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJh
c2VHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpKSwgc2NyYXRj
aEdQUik7CiAjZW5kaWYKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAg
ICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNP
YmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUik7CiAjaWYgVVNFKEpTVkFMVUU2
NCkKLSAgICAgICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHNjcmF0Y2hHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKHNsb3QuY2FjaGVkT2Zmc2V0
KCkpKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgICAgIHN0dWJKaXQubG9hZDY0KE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKHNs
b3QuY2FjaGVkT2Zmc2V0KCkpKSwgc2NyYXRjaEdQUik7CiAjZWxzZQogICAgICAgICAgICAgICAg
ICAgICBzdHViSml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBv
ZmZzZXRSZWxhdGl2ZVRvQmFzZShzbG90LmNhY2hlZE9mZnNldCgpKSksIHNjcmF0Y2hHUFIpOwog
I2VuZGlmCkBAIC00NjUsNyArNDY1LDcgQEAgc3RhdGljIGJvb2wgdHJ5QnVpbGRHZXRCeUlETGlz
dChFeGVjU3RhdAogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgaWYgKGlzSW5saW5lT2Zm
c2V0KHNsb3QuY2FjaGVkT2Zmc2V0KCkpKSB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAg
ICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwg
b2Zmc2V0UmVsYXRpdmVUb0Jhc2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkpLCByZXN1bHRHUFIpOwor
ICAgICAgICAgICAgICAgIHN0dWJKaXQubG9hZDY0KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJh
c2VHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpKSwgcmVzdWx0
R1BSKTsKICNlbHNlCiAgICAgICAgICAgICAgICAgaWYgKGJhc2VHUFIgPT0gcmVzdWx0VGFnR1BS
KSB7CiAgICAgICAgICAgICAgICAgICAgIHN0dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKGJhc2VHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKHNsb3QuY2FjaGVkT2Zmc2V0KCkp
ICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2Fk
KSksIHJlc3VsdEdQUik7CkBAIC00NzgsNyArNDc4LDcgQEAgc3RhdGljIGJvb2wgdHJ5QnVpbGRH
ZXRCeUlETGlzdChFeGVjU3RhdAogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAg
ICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmpl
Y3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVzdWx0R1BSKTsKICNpZiBVU0UoSlNWQUxVRTY0KQot
ICAgICAgICAgICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhy
ZXN1bHRHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpKSwgcmVz
dWx0R1BSKTsKKyAgICAgICAgICAgICAgICBzdHViSml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhyZXN1bHRHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKHNsb3QuY2FjaGVkT2Zmc2V0
KCkpKSwgcmVzdWx0R1BSKTsKICNlbHNlCiAgICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkMzIo
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShz
bG90LmNhY2hlZE9mZnNldCgpKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlw
dG9yLCBhc0JpdHMudGFnKSksIHJlc3VsdFRhZ0dQUik7CiAgICAgICAgICAgICAgICAgc3R1Ykpp
dC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBvZmZzZXRSZWxhdGl2
ZVRvQmFzZShzbG90LmNhY2hlZE9mZnNldCgpKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFs
dWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpLCByZXN1bHRHUFIpOwpAQCAtNjgyLDEwICs2
ODIsMTAgQEAgc3RhdGljIHZvaWQgZW1pdFB1dFJlcGxhY2VTdHViKAogICAgIAogI2lmIFVTRShK
U1ZBTFVFNjQpCiAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KHNsb3QuY2FjaGVkT2Zmc2V0KCkpKQot
ICAgICAgICBzdHViSml0LnN0b3JlUHRyKHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkgKyBvZmZzZXRJbklu
bGluZVN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkpKTsKKyAg
ICAgICAgc3R1YkppdC5zdG9yZTY0KHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhi
YXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkgKyBvZmZzZXRJbklubGlu
ZVN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkpKTsKICAgICBl
bHNlIHsKICAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJh
c2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwotICAgICAg
ICBzdHViSml0LnN0b3JlUHRyKHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3Jh
dGNoR1BSLCBvZmZzZXRJbkJ1dHRlcmZseShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihK
U1ZhbHVlKSkpOworICAgICAgICBzdHViSml0LnN0b3JlNjQodmFsdWVHUFIsIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIG9mZnNldEluQnV0dGVyZmx5KHNsb3QuY2FjaGVkT2Zm
c2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpKSk7CiAgICAgfQogI2VsaWYgVVNFKEpTVkFMVUUzMl82
NCkKICAgICBpZiAoaXNJbmxpbmVPZmZzZXQoc2xvdC5jYWNoZWRPZmZzZXQoKSkpIHsKQEAgLTg1
NCwxMSArODU0LDExIEBAIHN0YXRpYyB2b2lkIGVtaXRQdXRUcmFuc2l0aW9uU3R1YigKICAgICBz
dHViSml0LnN0b3JlUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSks
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0
KCkpKTsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIGlmIChpc0lubGluZU9mZnNldChzbG90LmNh
Y2hlZE9mZnNldCgpKSkKLSAgICAgICAgc3R1YkppdC5zdG9yZVB0cih2YWx1ZUdQUiwgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFn
ZSgpICsgb2Zmc2V0SW5JbmxpbmVTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9m
KEpTVmFsdWUpKSk7CisgICAgICAgIHN0dWJKaXQuc3RvcmU2NCh2YWx1ZUdQUiwgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgp
ICsgb2Zmc2V0SW5JbmxpbmVTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpT
VmFsdWUpKSk7CiAgICAgZWxzZSB7CiAgICAgICAgIGlmICghc2NyYXRjaEdQUjFIYXNTdG9yYWdl
KQogICAgICAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJh
c2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIxKTsKLSAgICAg
ICAgc3R1YkppdC5zdG9yZVB0cih2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2Ny
YXRjaEdQUjEsIG9mZnNldEluQnV0dGVyZmx5KHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9m
KEpTVmFsdWUpKSk7CisgICAgICAgIHN0dWJKaXQuc3RvcmU2NCh2YWx1ZUdQUiwgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUjEsIG9mZnNldEluQnV0dGVyZmx5KHNsb3QuY2FjaGVk
T2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUpKSk7CiAgICAgfQogI2VsaWYgVVNFKEpTVkFMVUUz
Ml82NCkKICAgICBpZiAoaXNJbmxpbmVPZmZzZXQoc2xvdC5jYWNoZWRPZmZzZXQoKSkpIHsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9y
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTY3JhdGNoUmVn
aXN0ZXJBbGxvY2F0b3IuaAkocmV2aXNpb24gMTMxNDQ5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAt
MTI3LDE1ICsxMjcsMjAgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgdW5zaWduZWQgY291bnQg
PSAwOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVy
czsgaS0tOykgewotICAgICAgICAgICAgaWYgKG1fdXNlZFJlZ2lzdGVycy5nZXRHUFJCeUluZGV4
KGkpKQotICAgICAgICAgICAgICAgIGppdC5zdG9yZVB0cihHUFJJbmZvOjp0b1JlZ2lzdGVyKGkp
LCBzY3JhdGNoQnVmZmVyLT5tX2J1ZmZlciArIChjb3VudCsrKSk7CisgICAgICAgICAgICBpZiAo
bV91c2VkUmVnaXN0ZXJzLmdldEdQUkJ5SW5kZXgoaSkpIHsKKyNpZiBDUFUoWDg2XzY0KQorICAg
ICAgICAgICAgICAgIGppdC5zdG9yZTY0KEdQUkluZm86OnRvUmVnaXN0ZXIoaSksIHN0YXRpY19j
YXN0PEVuY29kZWRKU1ZhbHVlKj4oc2NyYXRjaEJ1ZmZlci0+ZGF0YUJ1ZmZlcigpKSArIChjb3Vu
dCsrKSk7CisjZWxzZQorICAgICAgICAgICAgICAgIGppdC5zdG9yZVB0cihHUFJJbmZvOjp0b1Jl
Z2lzdGVyKGkpLCBzdGF0aWNfY2FzdDxFbmNvZGVkSlNWYWx1ZSo+KHNjcmF0Y2hCdWZmZXItPmRh
dGFCdWZmZXIoKSkgKyAoY291bnQrKykpOworI2VuZGlmCisgICAgICAgICAgICB9CiAgICAgICAg
ICAgICBpZiAoc2NyYXRjaEdQUiA9PSBJbnZhbGlkR1BSUmVnICYmICFtX2xvY2tlZFJlZ2lzdGVy
cy5nZXRHUFJCeUluZGV4KGkpICYmICFtX3NjcmF0Y2hSZWdpc3RlcnMuZ2V0R1BSQnlJbmRleChp
KSkKICAgICAgICAgICAgICAgICBzY3JhdGNoR1BSID0gR1BSSW5mbzo6dG9SZWdpc3RlcihpKTsK
ICAgICAgICAgfQogICAgICAgICBBU1NFUlQoc2NyYXRjaEdQUiAhPSBJbnZhbGlkR1BSUmVnKTsK
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gRlBSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7IGkt
LTspIHsKICAgICAgICAgICAgIGlmIChtX3VzZWRSZWdpc3RlcnMuZ2V0RlBSQnlJbmRleChpKSkg
ewotICAgICAgICAgICAgICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRy
KHNjcmF0Y2hCdWZmZXItPm1fYnVmZmVyICsgKGNvdW50KyspKSwgc2NyYXRjaEdQUik7CisgICAg
ICAgICAgICAgICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoc3RhdGlj
X2Nhc3Q8RW5jb2RlZEpTVmFsdWUqPihzY3JhdGNoQnVmZmVyLT5kYXRhQnVmZmVyKCkpICsgKGNv
dW50KyspKSwgc2NyYXRjaEdQUik7CiAgICAgICAgICAgICAgICAgaml0LnN0b3JlRG91YmxlKEZQ
UkluZm86OnRvUmVnaXN0ZXIoaSksIHNjcmF0Y2hHUFIpOwogICAgICAgICAgICAgfQogICAgICAg
ICB9CkBAIC0xNjUsMTUgKzE3MCwyMCBAQCBwdWJsaWM6CiAgICAgICAgIHVuc2lnbmVkIGNvdW50
ID0gbV91c2VkUmVnaXN0ZXJzLm51bWJlck9mU2V0R1BScygpOwogICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSBGUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgaS0tOykgewogICAgICAgICAgICAg
aWYgKG1fdXNlZFJlZ2lzdGVycy5nZXRGUFJCeUluZGV4KGkpKSB7Ci0gICAgICAgICAgICAgICAg
aml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoc2NyYXRjaEJ1ZmZlci0+bV9i
dWZmZXIgKyAoY291bnQrKykpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICBqaXQubW92
ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihzdGF0aWNfY2FzdDxFbmNvZGVkSlNWYWx1
ZSo+KHNjcmF0Y2hCdWZmZXItPmRhdGFCdWZmZXIoKSkgKyAoY291bnQrKykpLCBzY3JhdGNoR1BS
KTsKICAgICAgICAgICAgICAgICBqaXQubG9hZERvdWJsZShzY3JhdGNoR1BSLCBGUFJJbmZvOjp0
b1JlZ2lzdGVyKGkpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICAKICAgICAg
ICAgY291bnQgPSAwOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBHUFJJbmZvOjpudW1iZXJP
ZlJlZ2lzdGVyczsgaS0tOykgewotICAgICAgICAgICAgaWYgKG1fdXNlZFJlZ2lzdGVycy5nZXRH
UFJCeUluZGV4KGkpKQotICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKHNjcmF0Y2hCdWZmZXIt
Pm1fYnVmZmVyICsgKGNvdW50KyspLCBHUFJJbmZvOjp0b1JlZ2lzdGVyKGkpKTsKKyAgICAgICAg
ICAgIGlmIChtX3VzZWRSZWdpc3RlcnMuZ2V0R1BSQnlJbmRleChpKSkgeworI2lmIENQVShYODZf
NjQpCisgICAgICAgICAgICAgICAgaml0LmxvYWQ2NChzdGF0aWNfY2FzdDxFbmNvZGVkSlNWYWx1
ZSo+KHNjcmF0Y2hCdWZmZXItPmRhdGFCdWZmZXIoKSkgKyAoY291bnQrKyksIEdQUkluZm86OnRv
UmVnaXN0ZXIoaSkpOworI2Vsc2UKKyAgICAgICAgICAgICAgICBqaXQubG9hZFB0cihzdGF0aWNf
Y2FzdDxFbmNvZGVkSlNWYWx1ZSo+KHNjcmF0Y2hCdWZmZXItPmRhdGFCdWZmZXIoKSkgKyAoY291
bnQrKyksIEdQUkluZm86OnRvUmVnaXN0ZXIoaSkpOworI2VuZGlmCisgICAgICAgICAgICB9CiAg
ICAgICAgIH0KICAgICB9CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NpbGVudFJlZ2lzdGVyU2F2ZVBsYW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NpbGVudFJlZ2lzdGVyU2F2ZVBsYW4uaAkocmV2aXNpb24gMTMxNDQ5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTaWxlbnRSZWdpc3RlclNhdmVQbGFuLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQxLDYgKzQxLDcgQEAgZW51bSBTaWxlbnRTcGlsbEFjdGlvbiB7
CiAgICAgU3RvcmUzMlRhZywKICAgICBTdG9yZTMyUGF5bG9hZCwKICAgICBTdG9yZVB0ciwKKyAg
ICBTdG9yZTY0LAogICAgIFN0b3JlRG91YmxlCiB9OwogCkBAIC02MSw2ICs2Miw3IEBAIGVudW0g
U2lsZW50RmlsbEFjdGlvbiB7CiAgICAgTG9hZDMyUGF5bG9hZCwKICAgICBMb2FkMzJQYXlsb2Fk
Qm94SW50LAogICAgIExvYWRQdHIsCisgICAgTG9hZDY0LAogICAgIExvYWREb3VibGUsCiAgICAg
TG9hZERvdWJsZUJveERvdWJsZSwKICAgICBMb2FkSlNVbmJveERvdWJsZQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZp
c2lvbiAxMzE0NDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NSwyMSArNTUsMjEgQEAgR1BSUmVnIFNwZWN1
bGF0aXZlSklUOjpmaWxsSW50ZWdlcihOb2RlSQogICAgICAgICAgICAgfQogICAgICAgICAgICAg
aWYgKGlzTnVtYmVyQ29uc3RhbnQobm9kZUluZGV4KSkgewogICAgICAgICAgICAgICAgIEpTVmFs
dWUganNWYWx1ZSA9IGpzTnVtYmVyKHZhbHVlT2ZOdW1iZXJDb25zdGFudChub2RlSW5kZXgpKTsK
LSAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpJbW1QdHIoSlNWYWx1
ZTo6ZW5jb2RlKGpzVmFsdWUpKSwgZ3ByKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1h
Y3JvQXNzZW1ibGVyOjpJbW02NChKU1ZhbHVlOjplbmNvZGUoanNWYWx1ZSkpLCBncHIpOwogICAg
ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBBU1NFUlQoaXNKU0NvbnN0YW50KG5v
ZGVJbmRleCkpOwogICAgICAgICAgICAgICAgIEpTVmFsdWUganNWYWx1ZSA9IHZhbHVlT2ZKU0Nv
bnN0YW50KG5vZGVJbmRleCk7Ci0gICAgICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbVB0cihKU1ZhbHVlOjplbmNvZGUoanNWYWx1ZSkpLCBncHIpOworICAg
ICAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChKU1Zh
bHVlOjplbmNvZGUoanNWYWx1ZSkpLCBncHIpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVs
c2UgaWYgKGluZm8uc3BpbGxGb3JtYXQoKSA9PSBEYXRhRm9ybWF0SW50ZWdlcikgewogICAgICAg
ICAgICAgbV9ncHJzLnJldGFpbihncHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlclNwaWxs
ZWQpOwogICAgICAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKHZp
cnR1YWxSZWdpc3RlciksIGdwcik7CiAgICAgICAgICAgICAvLyBUYWcgaXQsIHNpbmNlIGZpbGxJ
bnRlZ2VyKCkgaXMgdXNlZCB3aGVuIHdlIHdhbnQgYSBib3hlZCBpbnRlZ2VyLgotICAgICAgICAg
ICAgbV9qaXQub3JQdHIoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBncHIpOworICAg
ICAgICAgICAgbV9qaXQub3I2NChHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIGdwcik7
CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBBU1NFUlQoaW5mby5zcGlsbEZvcm1hdCgp
ID09IERhdGFGb3JtYXRKUyB8fCBpbmZvLnNwaWxsRm9ybWF0KCkgPT0gRGF0YUZvcm1hdEpTSW50
ZWdlcik7CiAgICAgICAgICAgICBtX2dwcnMucmV0YWluKGdwciwgdmlydHVhbFJlZ2lzdGVyLCBT
cGlsbE9yZGVyU3BpbGxlZCk7Ci0gICAgICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVy
OjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIGdwcik7CisgICAgICAgICAgICBtX2ppdC5s
b2FkNjQoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSwgZ3ByKTsKICAg
ICAgICAgfQogCiAgICAgICAgIC8vIFNpbmNlIHdlIHN0YXRpY2FsbHkga25vdyB0aGF0IHdlJ3Jl
IGZpbGxpbmcgYW4gaW50ZWdlciwgYW5kIHZhbHVlcwpAQCAtMTMzLDggKzEzMyw4IEBAIEZQUlJl
ZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbERvdWJsZShOb2RlSW4KICAgICAgICAgICAgICAgICB1bmxv
Y2soZ3ByKTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNOdW1iZXJDb25zdGFudChub2RlSW5k
ZXgpKSB7CiAgICAgICAgICAgICAgICAgRlBSUmVnIGZwciA9IGZwckFsbG9jYXRlKCk7Ci0gICAg
ICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6SW1tUHRyKHJlaW50ZXJwcmV0
X2Nhc3Q8dm9pZCo+KHJlaW50ZXJwcmV0RG91YmxlVG9JbnRwdHIodmFsdWVPZk51bWJlckNvbnN0
YW50KG5vZGVJbmRleCkpKSksIGdwcik7Ci0gICAgICAgICAgICAgICAgbV9qaXQubW92ZVB0clRv
RG91YmxlKGdwciwgZnByKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1i
bGVyOjpJbW02NChyZWludGVycHJldERvdWJsZVRvSW50NjQodmFsdWVPZk51bWJlckNvbnN0YW50
KG5vZGVJbmRleCkpKSwgZ3ByKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlNjRUb0RvdWJs
ZShncHIsIGZwcik7CiAgICAgICAgICAgICAgICAgdW5sb2NrKGdwcik7CiAKICAgICAgICAgICAg
ICAgICBtX2ZwcnMucmV0YWluKGZwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyRG91Ymxl
KTsKQEAgLTE0NCw3ICsxNDQsNyBAQCBGUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxEb3VibGUo
Tm9kZUluCiAgICAgICAgICAgICAgICAgLy8gRklYTUU6IHNob3VsZCBub3QgYmUgcmVhY2hhYmxl
PwogICAgICAgICAgICAgICAgIEFTU0VSVChpc0pTQ29uc3RhbnQobm9kZUluZGV4KSk7CiAgICAg
ICAgICAgICAgICAgSlNWYWx1ZSBqc1ZhbHVlID0gdmFsdWVPZkpTQ29uc3RhbnQobm9kZUluZGV4
KTsKLSAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
UHRyKEpTVmFsdWU6OmVuY29kZShqc1ZhbHVlKSksIGdwcik7CisgICAgICAgICAgICAgICAgbV9q
aXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc1Zh
bHVlKSksIGdwcik7CiAgICAgICAgICAgICAgICAgbV9ncHJzLnJldGFpbihncHIsIHZpcnR1YWxS
ZWdpc3RlciwgU3BpbGxPcmRlckNvbnN0YW50KTsKICAgICAgICAgICAgICAgICBpbmZvLmZpbGxK
U1ZhbHVlKCptX3N0cmVhbSwgZ3ByLCBEYXRhRm9ybWF0SlMpOwogICAgICAgICAgICAgICAgIHVu
bG9jayhncHIpOwpAQCAtMTc1LDcgKzE3NSw3IEBAIEZQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6Zmls
bERvdWJsZShOb2RlSW4KICAgICAgICAgCiAgICAgICAgICAgICAgICAgQVNTRVJUKHNwaWxsRm9y
bWF0ICYgRGF0YUZvcm1hdEpTKTsKICAgICAgICAgICAgICAgICBtX2dwcnMucmV0YWluKGdwciwg
dmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyU3BpbGxlZCk7Ci0gICAgICAgICAgICAgICAgbV9q
aXQubG9hZFB0cihKSVRDb21waWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBncHIp
OworICAgICAgICAgICAgICAgIG1faml0LmxvYWQ2NChKSVRDb21waWxlcjo6YWRkcmVzc0Zvcih2
aXJ0dWFsUmVnaXN0ZXIpLCBncHIpOwogICAgICAgICAgICAgICAgIGluZm8uZmlsbEpTVmFsdWUo
Km1fc3RyZWFtLCBncHIsIHNwaWxsRm9ybWF0KTsKICAgICAgICAgICAgICAgICB1bmxvY2soZ3By
KTsKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTIwMCw3ICsyMDAsNyBAQCBGUFJSZWcgU3Bl
Y3VsYXRpdmVKSVQ6OmZpbGxEb3VibGUoTm9kZUluCiAgICAgICAgIEZQUlJlZyBmcHIgPSBmcHJB
bGxvY2F0ZSgpOwogICAgICAgICBHUFJSZWcgdGVtcEdwciA9IGFsbG9jYXRlKCk7IC8vIEZJWE1F
OiBjYW4gd2Ugc2tpcCB0aGlzIGFsbG9jYXRpb24gb24gdGhlIGxhc3QgdXNlIG9mIHRoZSB2aXJ0
dWFsIHJlZ2lzdGVyPwogCi0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzSW50ZWdlciA9IG1f
aml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBqc1ZhbHVlR3ByLCBH
UFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOworICAgICAgICBKSVRDb21waWxlcjo6SnVt
cCBpc0ludGVnZXIgPSBtX2ppdC5icmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFs
LCBqc1ZhbHVlR3ByLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOwogCiAgICAgICAg
IG1faml0LmppdEFzc2VydElzSlNEb3VibGUoanNWYWx1ZUdwcik7CiAKQEAgLTI3OSwxNSArMjc5
LDE1IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbEpTVmFsdWUoTm9kZUkKICAgICAgICAg
ICAgIGlmIChpc0ludDMyQ29uc3RhbnQobm9kZUluZGV4KSkgewogICAgICAgICAgICAgICAgIGlu
Zm8uZmlsbEpTVmFsdWUoKm1fc3RyZWFtLCBncHIsIERhdGFGb3JtYXRKU0ludGVnZXIpOwogICAg
ICAgICAgICAgICAgIEpTVmFsdWUganNWYWx1ZSA9IGpzTnVtYmVyKHZhbHVlT2ZJbnQzMkNvbnN0
YW50KG5vZGVJbmRleCkpOwotICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJs
ZXI6OkltbVB0cihKU1ZhbHVlOjplbmNvZGUoanNWYWx1ZSkpLCBncHIpOworICAgICAgICAgICAg
ICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OkltbTY0KEpTVmFsdWU6OmVuY29kZShqc1Zh
bHVlKSksIGdwcik7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKGlzTnVtYmVyQ29uc3RhbnQobm9k
ZUluZGV4KSkgewogICAgICAgICAgICAgICAgIGluZm8uZmlsbEpTVmFsdWUoKm1fc3RyZWFtLCBn
cHIsIERhdGFGb3JtYXRKU0RvdWJsZSk7CiAgICAgICAgICAgICAgICAgSlNWYWx1ZSBqc1ZhbHVl
KEpTVmFsdWU6OkVuY29kZUFzRG91YmxlLCB2YWx1ZU9mTnVtYmVyQ29uc3RhbnQobm9kZUluZGV4
KSk7Ci0gICAgICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6SW1tUHRyKEpT
VmFsdWU6OmVuY29kZShqc1ZhbHVlKSksIGdwcik7CisgICAgICAgICAgICAgICAgbV9qaXQubW92
ZShNYWNyb0Fzc2VtYmxlcjo6SW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzVmFsdWUpKSwgZ3ByKTsK
ICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgQVNTRVJUKGlzSlNDb25zdGFu
dChub2RlSW5kZXgpKTsKICAgICAgICAgICAgICAgICBKU1ZhbHVlIGpzVmFsdWUgPSB2YWx1ZU9m
SlNDb25zdGFudChub2RlSW5kZXgpOwotICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKGpzVmFsdWUpKSwgZ3ByKTsK
KyAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQo
SlNWYWx1ZTo6ZW5jb2RlKGpzVmFsdWUpKSwgZ3ByKTsKICAgICAgICAgICAgICAgICBpbmZvLmZp
bGxKU1ZhbHVlKCptX3N0cmVhbSwgZ3ByLCBEYXRhRm9ybWF0SlMpOwogICAgICAgICAgICAgfQog
CkBAIC0yOTcsMTMgKzI5NywxMyBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxKU1ZhbHVl
KE5vZGVJCiAgICAgICAgICAgICBtX2dwcnMucmV0YWluKGdwciwgdmlydHVhbFJlZ2lzdGVyLCBT
cGlsbE9yZGVyU3BpbGxlZCk7CiAgICAgICAgICAgICBpZiAoc3BpbGxGb3JtYXQgPT0gRGF0YUZv
cm1hdEludGVnZXIpIHsKICAgICAgICAgICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6
OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSwgZ3ByKTsKLSAgICAgICAgICAgICAgICBtX2pp
dC5vclB0cihHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIGdwcik7CisgICAgICAgICAg
ICAgICAgbV9qaXQub3I2NChHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIGdwcik7CiAg
ICAgICAgICAgICAgICAgc3BpbGxGb3JtYXQgPSBEYXRhRm9ybWF0SlNJbnRlZ2VyOwogICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVy
OjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIGdwcik7CisgICAgICAgICAgICAgICAgbV9q
aXQubG9hZDY0KEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIGdwcik7
CiAgICAgICAgICAgICAgICAgaWYgKHNwaWxsRm9ybWF0ID09IERhdGFGb3JtYXREb3VibGUpIHsK
ICAgICAgICAgICAgICAgICAgICAgLy8gTmVlZCB0byBib3ggdGhlIGRvdWJsZSwgc2luY2Ugd2Ug
d2FudCBhIEpTVmFsdWUuCi0gICAgICAgICAgICAgICAgICAgIG1faml0LnN1YlB0cihHUFJJbmZv
Ojp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIGdwcik7CisgICAgICAgICAgICAgICAgICAgIG1faml0
LnN1YjY0KEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgZ3ByKTsKICAgICAgICAgICAg
ICAgICAgICAgc3BpbGxGb3JtYXQgPSBEYXRhRm9ybWF0SlNEb3VibGU7CiAgICAgICAgICAgICAg
ICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChzcGlsbEZvcm1hdCAmIERhdGFG
b3JtYXRKUyk7CkBAIC0zMTksMTEgKzMxOSwxMSBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZp
bGxKU1ZhbHVlKE5vZGVJCiAgICAgICAgIC8vIElmIG5vdCwgd2UnbGwgemVybyBleHRlbmQgaW4g
cGxhY2UsIHNvIG1hcmsgb24gdGhlIGluZm8gdGhhdCB0aGlzIGlzIG5vdyB0eXBlIERhdGFGb3Jt
YXRJbnRlZ2VyLCBub3QgRGF0YUZvcm1hdEpTSW50ZWdlci4KICAgICAgICAgaWYgKG1fZ3Bycy5p
c0xvY2tlZChncHIpKSB7CiAgICAgICAgICAgICBHUFJSZWcgcmVzdWx0ID0gYWxsb2NhdGUoKTsK
LSAgICAgICAgICAgIG1faml0Lm9yUHRyKEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlciwg
Z3ByLCByZXN1bHQpOworICAgICAgICAgICAgbV9qaXQub3I2NChHUFJJbmZvOjp0YWdUeXBlTnVt
YmVyUmVnaXN0ZXIsIGdwciwgcmVzdWx0KTsKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAg
ICAgICAgIH0KICAgICAgICAgbV9ncHJzLmxvY2soZ3ByKTsKLSAgICAgICAgbV9qaXQub3JQdHIo
R1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBncHIpOworICAgICAgICBtX2ppdC5vcjY0
KEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgZ3ByKTsKICAgICAgICAgaW5mby5maWxs
SlNWYWx1ZSgqbV9zdHJlYW0sIGdwciwgRGF0YUZvcm1hdEpTSW50ZWdlcik7CiAgICAgICAgIHJl
dHVybiBncHI7CiAgICAgfQpAQCAtNDA4LDggKzQwOCw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
Om5vblNwZWN1bGF0aXZlVmFsdWUKICAgICBHUFJSZWcgZ3ByID0gcmVzdWx0LmdwcigpOwogICAg
IG9wMS51c2UoKTsKIAotICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzSW50ZWdlciA9IG1faml0LmJy
YW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBqc1ZhbHVlR3ByLCBHUFJJbmZv
Ojp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOwotICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vbk51bWVy
aWMgPSBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBqc1ZhbHVlR3By
LCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOworICAgIEpJVENvbXBpbGVyOjpKdW1w
IGlzSW50ZWdlciA9IG1faml0LmJyYW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWws
IGpzVmFsdWVHcHIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7CisgICAgSklUQ29t
cGlsZXI6Okp1bXAgbm9uTnVtZXJpYyA9IG1faml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxl
cjo6WmVybywganNWYWx1ZUdwciwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKIAog
ICAgIC8vIEZpcnN0LCBpZiB3ZSBnZXQgaGVyZSB3ZSBoYXZlIGEgZG91YmxlIGVuY29kZWQgYXMg
YSBKU1ZhbHVlCiAgICAgbV9qaXQubW92ZShqc1ZhbHVlR3ByLCBncHIpOwpAQCAtNDE3LDcgKzQx
Nyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlVmFsdWUKIAogICAgIC8v
IEZpbmFsbHksIGhhbmRsZSBpbnRlZ2Vycy4KICAgICBpc0ludGVnZXIubGluaygmbV9qaXQpOwot
ICAgIG1faml0Lm9yUHRyKEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwganNWYWx1ZUdw
ciwgZ3ByKTsKKyAgICBtX2ppdC5vcjY0KEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlciwg
anNWYWx1ZUdwciwgZ3ByKTsKICAgICBoYXNVbmJveGVkRG91YmxlLmxpbmsoJm1faml0KTsKICAg
ICAKICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihhZG9wdFB0cihuZXcgVmFsdWVUb051bWJlclNs
b3dQYXRoR2VuZXJhdG9yKG5vbk51bWVyaWMsIHRoaXMsIGdwciwganNWYWx1ZUdwcikpKTsKQEAg
LTQ1OSw3ICs0NTksNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVZhbHVl
CiAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKICAgICBvcDEudXNlKCk7CiAK
LSAgICBKSVRDb21waWxlcjo6SnVtcCBpc05vdEludGVnZXIgPSBtX2ppdC5icmFuY2hQdHIoTWFj
cm9Bc3NlbWJsZXI6OkJlbG93LCBqc1ZhbHVlR3ByLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVn
aXN0ZXIpOworICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzTm90SW50ZWdlciA9IG1faml0LmJyYW5j
aDY0KE1hY3JvQXNzZW1ibGVyOjpCZWxvdywganNWYWx1ZUdwciwgR1BSSW5mbzo6dGFnVHlwZU51
bWJlclJlZ2lzdGVyKTsKIAogICAgIG1faml0Lnplcm9FeHRlbmQzMlRvUHRyKGpzVmFsdWVHcHIs
IHJlc3VsdEdQUik7CiAgICAgCkBAIC00ODYsNyArNDg2LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6bm9uU3BlY3VsYXRpdmVVSW50MwogICAgIAogICAgIHBvc2l0aXZlLmxpbmsoJm1faml0KTsK
ICAgICAKLSAgICBtX2ppdC5vclB0cihHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIG9w
MS5ncHIoKSwgcmVzdWx0LmdwcigpKTsKKyAgICBtX2ppdC5vcjY0KEdQUkluZm86OnRhZ1R5cGVO
dW1iZXJSZWdpc3Rlciwgb3AxLmdwcigpLCByZXN1bHQuZ3ByKCkpOwogICAgIAogICAgIGRvbmUu
bGluaygmbV9qaXQpOwogICAgIApAQCAtNTAwLDcgKzUwMCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNhY2hlZEdldEJ5SWQoQ29kZU8KICAgICAKICAgICBKSVRDb21waWxlcjo6Q29udmVydGli
bGVMb2FkTGFiZWwgcHJvcGVydHlTdG9yYWdlTG9hZCA9CiAgICAgICAgIG1faml0LmNvbnZlcnRp
YmxlTG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVy
Zmx5T2Zmc2V0KCkpLCByZXN1bHRHUFIpOwotICAgIEpJVENvbXBpbGVyOjpEYXRhTGFiZWxDb21w
YWN0IGxvYWRXaXRoUGF0Y2ggPSBtX2ppdC5sb2FkUHRyV2l0aENvbXBhY3RBZGRyZXNzT2Zmc2V0
UGF0Y2goSklUQ29tcGlsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCAwKSwgcmVzdWx0R1BSKTsKKyAg
ICBKSVRDb21waWxlcjo6RGF0YUxhYmVsQ29tcGFjdCBsb2FkV2l0aFBhdGNoID0gbV9qaXQubG9h
ZDY0V2l0aENvbXBhY3RBZGRyZXNzT2Zmc2V0UGF0Y2goSklUQ29tcGlsZXI6OkFkZHJlc3MocmVz
dWx0R1BSLCAwKSwgcmVzdWx0R1BSKTsKICAgICAKICAgICBKSVRDb21waWxlcjo6TGFiZWwgZG9u
ZUxhYmVsID0gbV9qaXQubGFiZWwoKTsKIApAQCAtNTM2LDcgKzUzNiw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNhY2hlZFB1dEJ5SWQoQ29kZU8KIAogICAgIEpJVENvbXBpbGVyOjpDb252ZXJ0
aWJsZUxvYWRMYWJlbCBwcm9wZXJ0eVN0b3JhZ2VMb2FkID0KICAgICAgICAgbV9qaXQuY29udmVy
dGlibGVMb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0
ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwotICAgIEpJVENvbXBpbGVyOjpEYXRhTGFiZWwz
MiBzdG9yZVdpdGhQYXRjaCA9IG1faml0LnN0b3JlUHRyV2l0aEFkZHJlc3NPZmZzZXRQYXRjaCh2
YWx1ZUdQUiwgSklUQ29tcGlsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgMCkpOworICAgIEpJVENv
bXBpbGVyOjpEYXRhTGFiZWwzMiBzdG9yZVdpdGhQYXRjaCA9IG1faml0LnN0b3JlNjRXaXRoQWRk
cmVzc09mZnNldFBhdGNoKHZhbHVlR1BSLCBKSVRDb21waWxlcjo6QWRkcmVzcyhzY3JhdGNoR1BS
LCAwKSk7CiAKICAgICBKSVRDb21waWxlcjo6TGFiZWwgZG9uZUxhYmVsID0gbV9qaXQubGFiZWwo
KTsKICAgICAKQEAgLTU4OCw3ICs1ODgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVj
dWxhdGl2ZU5vblBlCiAgICAgSklUQ29tcGlsZXI6Okp1bXAgbm90Q2VsbDsKICAgICAKICAgICBp
ZiAoIWlzS25vd25DZWxsKG9wZXJhbmQuaW5kZXgoKSkpCi0gICAgICAgIG5vdENlbGwgPSBtX2pp
dC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBhcmdHUFIsIEdQUkluZm86
OnRhZ01hc2tSZWdpc3Rlcik7CisgICAgICAgIG5vdENlbGwgPSBtX2ppdC5icmFuY2hUZXN0NjQo
TWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIGFyZ0dQUiwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVy
KTsKICAgIAogICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQ7
CiAgICAgaWYgKG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG1faml0LmdyYXBoKClbb3Bl
cmFuZF0uY29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCktPmlz
U3RpbGxWYWxpZCgpKSB7CkBAIC02MTgsOCArNjE4LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
bm9uU3BlY3VsYXRpdmVOb25QZQogICAgICAgICBub3RDZWxsLmxpbmsoJm1faml0KTsKICAgICAg
ICAgCiAgICAgICAgIG1faml0Lm1vdmUoYXJnR1BSLCByZXN1bHRHUFIpOwotICAgICAgICBtX2pp
dC5hbmRQdHIoSklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMih+VGFnQml0VW5kZWZpbmVkKSwgcmVz
dWx0R1BSKTsKLSAgICAgICAgbV9qaXQuY29tcGFyZVB0cihpbnZlcnQgPyBKSVRDb21waWxlcjo6
Tm90RXF1YWwgOiBKSVRDb21waWxlcjo6RXF1YWwsIHJlc3VsdEdQUiwgSklUQ29tcGlsZXI6OlRy
dXN0ZWRJbW0zMihWYWx1ZU51bGwpLCByZXN1bHRHUFIpOworICAgICAgICBtX2ppdC5hbmQ2NChK
SVRDb21waWxlcjo6VHJ1c3RlZEltbTMyKH5UYWdCaXRVbmRlZmluZWQpLCByZXN1bHRHUFIpOwor
ICAgICAgICBtX2ppdC5jb21wYXJlNjQoaW52ZXJ0ID8gSklUQ29tcGlsZXI6Ok5vdEVxdWFsIDog
SklUQ29tcGlsZXI6OkVxdWFsLCByZXN1bHRHUFIsIEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tMzIo
VmFsdWVOdWxsKSwgcmVzdWx0R1BSKTsKICAgICAgICAgCiAgICAgICAgIGRvbmUubGluaygmbV9q
aXQpOwogICAgIH0KQEAgLTY1Miw3ICs2NTIsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25T
cGVjdWxhdGl2ZVBlZXBoCiAgICAgSklUQ29tcGlsZXI6Okp1bXAgbm90Q2VsbDsKICAgICAKICAg
ICBpZiAoIWlzS25vd25DZWxsKG9wZXJhbmQuaW5kZXgoKSkpCi0gICAgICAgIG5vdENlbGwgPSBt
X2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBhcmdHUFIsIEdQUklu
Zm86OnRhZ01hc2tSZWdpc3Rlcik7CisgICAgICAgIG5vdENlbGwgPSBtX2ppdC5icmFuY2hUZXN0
NjQoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIGFyZ0dQUiwgR1BSSW5mbzo6dGFnTWFza1JlZ2lz
dGVyKTsKICAgICAKICAgICBpZiAobV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3IobV9qaXQu
Z3JhcGgoKVtvcGVyYW5kXS5jb2RlT3JpZ2luKS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNo
cG9pbnQoKS0+aXNTdGlsbFZhbGlkKCkpIHsKICAgICAgICAgbV9qaXQuZ3JhcGgoKS5nbG9iYWxP
YmplY3RGb3IobV9qaXQuZ3JhcGgoKVtvcGVyYW5kXS5jb2RlT3JpZ2luKS0+bWFzcXVlcmFkZXNB
c1VuZGVmaW5lZFdhdGNocG9pbnQoKS0+YWRkKHNwZWN1bGF0aW9uV2F0Y2hwb2ludCgpKTsKQEAg
LTY3Niw4ICs2NzYsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVBlZXBo
CiAgICAgICAgIG5vdENlbGwubGluaygmbV9qaXQpOwogICAgICAgICAKICAgICAgICAgbV9qaXQu
bW92ZShhcmdHUFIsIHJlc3VsdEdQUik7Ci0gICAgICAgIG1faml0LmFuZFB0cihKSVRDb21waWxl
cjo6VHJ1c3RlZEltbTMyKH5UYWdCaXRVbmRlZmluZWQpLCByZXN1bHRHUFIpOwotICAgICAgICBi
cmFuY2hQdHIoaW52ZXJ0ID8gSklUQ29tcGlsZXI6Ok5vdEVxdWFsIDogSklUQ29tcGlsZXI6OkVx
dWFsLCByZXN1bHRHUFIsIEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tUHRyKHJlaW50ZXJwcmV0X2Nh
c3Q8dm9pZCo+KFZhbHVlTnVsbCkpLCB0YWtlbik7CisgICAgICAgIG1faml0LmFuZDY0KEpJVENv
bXBpbGVyOjpUcnVzdGVkSW1tMzIoflRhZ0JpdFVuZGVmaW5lZCksIHJlc3VsdEdQUik7CisgICAg
ICAgIGJyYW5jaDY0KGludmVydCA/IEpJVENvbXBpbGVyOjpOb3RFcXVhbCA6IEpJVENvbXBpbGVy
OjpFcXVhbCwgcmVzdWx0R1BSLCBKSVRDb21waWxlcjo6VHJ1c3RlZEltbTY0KFZhbHVlTnVsbCks
IHRha2VuKTsKICAgICB9CiAgICAgCiAgICAganVtcChub3RUYWtlbik7CkBAIC03NTAsOSArNzUw
LDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVQZWVwaAogICAgICAgICBh
cmcyLnVzZSgpOwogICAgIAogICAgICAgICBpZiAoIWlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQx
KCkuaW5kZXgoKSkpCi0gICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQobV9qaXQuYnJhbmNoUHRy
KE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgYXJnMUdQUiwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJl
Z2lzdGVyKSk7CisgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQobV9qaXQuYnJhbmNoNjQoTWFj
cm9Bc3NlbWJsZXI6OkJlbG93LCBhcmcxR1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0
ZXIpKTsKICAgICAgICAgaWYgKCFpc0tub3duSW50ZWdlcihub2RlLmNoaWxkMigpLmluZGV4KCkp
KQotICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2Vt
Ymxlcjo6QmVsb3csIGFyZzJHUFIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlcikpOwor
ICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKG1faml0LmJyYW5jaDY0KE1hY3JvQXNzZW1ibGVy
OjpCZWxvdywgYXJnMkdQUiwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSk7CiAgICAg
CiAgICAgICAgIGJyYW5jaDMyKGNvbmQsIGFyZzFHUFIsIGFyZzJHUFIsIHRha2VuKTsKICAgICAK
QEAgLTgzMyw5ICs4MzMsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZU5v
blBlCiAgICAgICAgIGFyZzIudXNlKCk7CiAgICAgCiAgICAgICAgIGlmICghaXNLbm93bkludGVn
ZXIobm9kZS5jaGlsZDEoKS5pbmRleCgpKSkKLSAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZCht
X2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBhcmcxR1BSLCBHUFJJbmZvOjp0
YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsKKyAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChtX2pp
dC5icmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIGFyZzFHUFIsIEdQUkluZm86OnRhZ1R5
cGVOdW1iZXJSZWdpc3RlcikpOwogICAgICAgICBpZiAoIWlzS25vd25JbnRlZ2VyKG5vZGUuY2hp
bGQyKCkuaW5kZXgoKSkpCi0gICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQobV9qaXQuYnJhbmNo
UHRyKE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgYXJnMkdQUiwgR1BSSW5mbzo6dGFnVHlwZU51bWJl
clJlZ2lzdGVyKSk7CisgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQobV9qaXQuYnJhbmNoNjQo
TWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBhcmcyR1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVn
aXN0ZXIpKTsKICAgICAKICAgICAgICAgbV9qaXQuY29tcGFyZTMyKGNvbmQsIGFyZzFHUFIsIGFy
ZzJHUFIsIHJlc3VsdEdQUik7CiAgICAgICAgIG1faml0Lm9yMzIoVHJ1c3RlZEltbTMyKFZhbHVl
RmFsc2UpLCByZXN1bHRHUFIpOwpAQCAtODc5LDcgKzg3OSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6Om5vblNwZWN1bGF0aXZlUGVlcGgKICAgICBpZiAoaXNLbm93bkNlbGwobm9kZS5jaGlsZDEo
KS5pbmRleCgpKSAmJiBpc0tub3duQ2VsbChub2RlLmNoaWxkMigpLmluZGV4KCkpKSB7CiAgICAg
ICAgIC8vIHNlZSBpZiB3ZSBnZXQgbHVja3k6IGlmIHRoZSBhcmd1bWVudHMgYXJlIGNlbGxzIGFu
ZCB0aGV5IHJlZmVyZW5jZSB0aGUgc2FtZQogICAgICAgICAvLyBjZWxsLCB0aGVuIHRoZXkgbXVz
dCBiZSBzdHJpY3RseSBlcXVhbC4KLSAgICAgICAgYnJhbmNoUHRyKEpJVENvbXBpbGVyOjpFcXVh
bCwgYXJnMUdQUiwgYXJnMkdQUiwgaW52ZXJ0ID8gbm90VGFrZW4gOiB0YWtlbik7CisgICAgICAg
IGJyYW5jaDY0KEpJVENvbXBpbGVyOjpFcXVhbCwgYXJnMUdQUiwgYXJnMkdQUiwgaW52ZXJ0ID8g
bm90VGFrZW4gOiB0YWtlbik7CiAgICAgICAgIAogICAgICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lz
dGVycyhyZXN1bHRHUFIpOwogICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVT
dHJpY3RFcUNlbGwsIHJlc3VsdEdQUiwgYXJnMUdQUiwgYXJnMkdQUik7CkBAIC04ODcsMjIgKzg4
NywyMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVBlZXBoCiAgICAgICAg
IAogICAgICAgICBicmFuY2hUZXN0MzIoaW52ZXJ0ID8gSklUQ29tcGlsZXI6Olplcm8gOiBKSVRD
b21waWxlcjo6Tm9uWmVybywgcmVzdWx0R1BSLCB0YWtlbik7CiAgICAgfSBlbHNlIHsKLSAgICAg
ICAgbV9qaXQub3JQdHIoYXJnMUdQUiwgYXJnMkdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgbV9q
aXQub3I2NChhcmcxR1BSLCBhcmcyR1BSLCByZXN1bHRHUFIpOwogICAgICAgICAKLSAgICAgICAg
SklUQ29tcGlsZXI6Okp1bXAgdHdvQ2VsbHNDYXNlID0gbV9qaXQuYnJhbmNoVGVzdFB0cihKSVRD
b21waWxlcjo6WmVybywgcmVzdWx0R1BSLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpOworICAg
ICAgICBKSVRDb21waWxlcjo6SnVtcCB0d29DZWxsc0Nhc2UgPSBtX2ppdC5icmFuY2hUZXN0NjQo
SklUQ29tcGlsZXI6Olplcm8sIHJlc3VsdEdQUiwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsK
ICAgICAgICAgCi0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGxlZnRPSyA9IG1faml0LmJyYW5j
aFB0cihKSVRDb21waWxlcjo6QWJvdmVPckVxdWFsLCBhcmcxR1BSLCBHUFJJbmZvOjp0YWdUeXBl
TnVtYmVyUmVnaXN0ZXIpOwotICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBsZWZ0RG91YmxlID0g
bV9qaXQuYnJhbmNoVGVzdFB0cihKSVRDb21waWxlcjo6Tm9uWmVybywgYXJnMUdQUiwgR1BSSW5m
bzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgbGVm
dE9LID0gbV9qaXQuYnJhbmNoNjQoSklUQ29tcGlsZXI6OkFib3ZlT3JFcXVhbCwgYXJnMUdQUiwg
R1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1
bXAgbGVmdERvdWJsZSA9IG1faml0LmJyYW5jaFRlc3Q2NChKSVRDb21waWxlcjo6Tm9uWmVybywg
YXJnMUdQUiwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKICAgICAgICAgbGVmdE9L
LmxpbmsoJm1faml0KTsKLSAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgcmlnaHRPSyA9IG1faml0
LmJyYW5jaFB0cihKSVRDb21waWxlcjo6QWJvdmVPckVxdWFsLCBhcmcyR1BSLCBHUFJJbmZvOjp0
YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOwotICAgICAgICBKSVRDb21waWxlcjo6SnVtcCByaWdodERv
dWJsZSA9IG1faml0LmJyYW5jaFRlc3RQdHIoSklUQ29tcGlsZXI6Ok5vblplcm8sIGFyZzJHUFIs
IEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7CisgICAgICAgIEpJVENvbXBpbGVyOjpK
dW1wIHJpZ2h0T0sgPSBtX2ppdC5icmFuY2g2NChKSVRDb21waWxlcjo6QWJvdmVPckVxdWFsLCBh
cmcyR1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOworICAgICAgICBKSVRDb21w
aWxlcjo6SnVtcCByaWdodERvdWJsZSA9IG1faml0LmJyYW5jaFRlc3Q2NChKSVRDb21waWxlcjo6
Tm9uWmVybywgYXJnMkdQUiwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKICAgICAg
ICAgcmlnaHRPSy5saW5rKCZtX2ppdCk7CiAgICAgICAgIAotICAgICAgICBicmFuY2hQdHIoaW52
ZXJ0ID8gSklUQ29tcGlsZXI6Ok5vdEVxdWFsIDogSklUQ29tcGlsZXI6OkVxdWFsLCBhcmcxR1BS
LCBhcmcyR1BSLCB0YWtlbik7CisgICAgICAgIGJyYW5jaDY0KGludmVydCA/IEpJVENvbXBpbGVy
OjpOb3RFcXVhbCA6IEpJVENvbXBpbGVyOjpFcXVhbCwgYXJnMUdQUiwgYXJnMkdQUiwgdGFrZW4p
OwogICAgICAgICBqdW1wKG5vdFRha2VuLCBGb3JjZUp1bXApOwogICAgICAgICAKICAgICAgICAg
dHdvQ2VsbHNDYXNlLmxpbmsoJm1faml0KTsKLSAgICAgICAgYnJhbmNoUHRyKEpJVENvbXBpbGVy
OjpFcXVhbCwgYXJnMUdQUiwgYXJnMkdQUiwgaW52ZXJ0ID8gbm90VGFrZW4gOiB0YWtlbik7Cisg
ICAgICAgIGJyYW5jaDY0KEpJVENvbXBpbGVyOjpFcXVhbCwgYXJnMUdQUiwgYXJnMkdQUiwgaW52
ZXJ0ID8gbm90VGFrZW4gOiB0YWtlbik7CiAgICAgICAgIAogICAgICAgICBsZWZ0RG91YmxlLmxp
bmsoJm1faml0KTsKICAgICAgICAgcmlnaHREb3VibGUubGluaygmbV9qaXQpOwpAQCAtOTM0LDkg
KzkzNCw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlTm9uUGUKICAgICAg
ICAgLy8gc2VlIGlmIHdlIGdldCBsdWNreTogaWYgdGhlIGFyZ3VtZW50cyBhcmUgY2VsbHMgYW5k
IHRoZXkgcmVmZXJlbmNlIHRoZSBzYW1lCiAgICAgICAgIC8vIGNlbGwsIHRoZW4gdGhleSBtdXN0
IGJlIHN0cmljdGx5IGVxdWFsLgogICAgICAgICAvLyBGSVhNRTogdGhpcyBzaG91bGQgZmx1c2gg
cmVnaXN0ZXJzIGluc3RlYWQgb2Ygc2lsZW50IHNwaWxsL2ZpbGwuCi0gICAgICAgIEpJVENvbXBp
bGVyOjpKdW1wIG5vdEVxdWFsQ2FzZSA9IG1faml0LmJyYW5jaFB0cihKSVRDb21waWxlcjo6Tm90
RXF1YWwsIGFyZzFHUFIsIGFyZzJHUFIpOworICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBub3RF
cXVhbENhc2UgPSBtX2ppdC5icmFuY2g2NChKSVRDb21waWxlcjo6Tm90RXF1YWwsIGFyZzFHUFIs
IGFyZzJHUFIpOwogICAgICAgICAKLSAgICAgICAgbV9qaXQubW92ZShKSVRDb21waWxlcjo6VHJ1
c3RlZEltbVB0cihKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKCFpbnZlcnQpKSksIHJlc3VsdEdQ
Uik7CisgICAgICAgIG1faml0Lm1vdmUoSklUQ29tcGlsZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVl
OjplbmNvZGUoanNCb29sZWFuKCFpbnZlcnQpKSksIHJlc3VsdEdQUik7CiAgICAgICAgIAogICAg
ICAgICBKSVRDb21waWxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOwogCkBAIC05NDYsMzMg
Kzk0NiwzMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZU5vblBlCiAgICAg
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxQ2VsbCwgcmVzdWx0R1BS
LCBhcmcxR1BSLCBhcmcyR1BSKTsKICAgICAgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhyZXN1
bHRHUFIpOwogICAgICAgICAKLSAgICAgICAgbV9qaXQuYW5kUHRyKEpJVENvbXBpbGVyOjpUcnVz
dGVkSW1tMzIoMSksIHJlc3VsdEdQUik7CisgICAgICAgIG1faml0LmFuZDY0KEpJVENvbXBpbGVy
OjpUcnVzdGVkSW1tMzIoMSksIHJlc3VsdEdQUik7CiAgICAgICAgIG1faml0Lm9yMzIoSklUQ29t
cGlsZXI6OlRydXN0ZWRJbW0zMihWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKICAgICAgICAgCiAg
ICAgICAgIGRvbmUubGluaygmbV9qaXQpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIG1faml0Lm9y
UHRyKGFyZzFHUFIsIGFyZzJHUFIsIHJlc3VsdEdQUik7CisgICAgICAgIG1faml0Lm9yNjQoYXJn
MUdQUiwgYXJnMkdQUiwgcmVzdWx0R1BSKTsKICAgICAgICAgCiAgICAgICAgIEpJVENvbXBpbGVy
OjpKdW1wTGlzdCBzbG93UGF0aENhc2VzOwogICAgICAgICAKLSAgICAgICAgSklUQ29tcGlsZXI6
Okp1bXAgdHdvQ2VsbHNDYXNlID0gbV9qaXQuYnJhbmNoVGVzdFB0cihKSVRDb21waWxlcjo6WmVy
bywgcmVzdWx0R1BSLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpOworICAgICAgICBKSVRDb21w
aWxlcjo6SnVtcCB0d29DZWxsc0Nhc2UgPSBtX2ppdC5icmFuY2hUZXN0NjQoSklUQ29tcGlsZXI6
Olplcm8sIHJlc3VsdEdQUiwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsKICAgICAgICAgCi0g
ICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGxlZnRPSyA9IG1faml0LmJyYW5jaFB0cihKSVRDb21w
aWxlcjo6QWJvdmVPckVxdWFsLCBhcmcxR1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0
ZXIpOwotICAgICAgICBzbG93UGF0aENhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hUZXN0UHRyKEpJ
VENvbXBpbGVyOjpOb25aZXJvLCBhcmcxR1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0
ZXIpKTsKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgbGVmdE9LID0gbV9qaXQuYnJhbmNoNjQo
SklUQ29tcGlsZXI6OkFib3ZlT3JFcXVhbCwgYXJnMUdQUiwgR1BSSW5mbzo6dGFnVHlwZU51bWJl
clJlZ2lzdGVyKTsKKyAgICAgICAgc2xvd1BhdGhDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoVGVz
dDY0KEpJVENvbXBpbGVyOjpOb25aZXJvLCBhcmcxR1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVy
UmVnaXN0ZXIpKTsKICAgICAgICAgbGVmdE9LLmxpbmsoJm1faml0KTsKLSAgICAgICAgSklUQ29t
cGlsZXI6Okp1bXAgcmlnaHRPSyA9IG1faml0LmJyYW5jaFB0cihKSVRDb21waWxlcjo6QWJvdmVP
ckVxdWFsLCBhcmcyR1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOwotICAgICAg
ICBzbG93UGF0aENhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hUZXN0UHRyKEpJVENvbXBpbGVyOjpO
b25aZXJvLCBhcmcyR1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsKKyAgICAg
ICAgSklUQ29tcGlsZXI6Okp1bXAgcmlnaHRPSyA9IG1faml0LmJyYW5jaDY0KEpJVENvbXBpbGVy
OjpBYm92ZU9yRXF1YWwsIGFyZzJHUFIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7
CisgICAgICAgIHNsb3dQYXRoQ2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaFRlc3Q2NChKSVRDb21w
aWxlcjo6Tm9uWmVybywgYXJnMkdQUiwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSk7
CiAgICAgICAgIHJpZ2h0T0subGluaygmbV9qaXQpOwogICAgICAgICAKLSAgICAgICAgbV9qaXQu
Y29tcGFyZVB0cihpbnZlcnQgPyBKSVRDb21waWxlcjo6Tm90RXF1YWwgOiBKSVRDb21waWxlcjo6
RXF1YWwsIGFyZzFHUFIsIGFyZzJHUFIsIHJlc3VsdEdQUik7CisgICAgICAgIG1faml0LmNvbXBh
cmU2NChpbnZlcnQgPyBKSVRDb21waWxlcjo6Tm90RXF1YWwgOiBKSVRDb21waWxlcjo6RXF1YWws
IGFyZzFHUFIsIGFyZzJHUFIsIHJlc3VsdEdQUik7CiAgICAgICAgIG1faml0Lm9yMzIoSklUQ29t
cGlsZXI6OlRydXN0ZWRJbW0zMihWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKICAgICAgICAgCiAg
ICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7CiAgICAgICAgIAog
ICAgICAgICB0d29DZWxsc0Nhc2UubGluaygmbV9qaXQpOwotICAgICAgICBzbG93UGF0aENhc2Vz
LmFwcGVuZChtX2ppdC5icmFuY2hQdHIoSklUQ29tcGlsZXI6Ok5vdEVxdWFsLCBhcmcxR1BSLCBh
cmcyR1BSKSk7CisgICAgICAgIHNsb3dQYXRoQ2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaDY0KEpJ
VENvbXBpbGVyOjpOb3RFcXVhbCwgYXJnMUdQUiwgYXJnMkdQUikpOwogICAgICAgICAKLSAgICAg
ICAgbV9qaXQubW92ZShKSVRDb21waWxlcjo6VHJ1c3RlZEltbVB0cihKU1ZhbHVlOjplbmNvZGUo
anNCb29sZWFuKCFpbnZlcnQpKSksIHJlc3VsdEdQUik7CisgICAgICAgIG1faml0Lm1vdmUoSklU
Q29tcGlsZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKCFpbnZlcnQp
KSksIHJlc3VsdEdQUik7CiAgICAgICAgIAogICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigK
ICAgICAgICAgICAgIGFkb3B0UHRyKApAQCAtMTAwNyw4ICsxMDA3LDggQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSYgbm9kZQogICAgIGludCBudW1QYXNzZWRBcmdzID0gbm9k
ZS5udW1DaGlsZHJlbigpIC0gMTsKICAgICAKICAgICBtX2ppdC5zdG9yZTMyKE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tMzIobnVtUGFzc2VkQXJncyArIGR1bW15VGhpc0FyZ3VtZW50KSwgY2Fs
bEZyYW1lUGF5bG9hZFNsb3QoSlNTdGFjazo6QXJndW1lbnRDb3VudCkpOwotICAgIG1faml0LnN0
b3JlUHRyKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBjYWxsRnJhbWVTbG90KEpTU3RhY2s6
OkNhbGxlckZyYW1lKSk7Ci0gICAgbV9qaXQuc3RvcmVQdHIoY2FsbGVlR1BSLCBjYWxsRnJhbWVT
bG90KEpTU3RhY2s6OkNhbGxlZSkpOworICAgIG1faml0LnN0b3JlNjQoR1BSSW5mbzo6Y2FsbEZy
YW1lUmVnaXN0ZXIsIGNhbGxGcmFtZVNsb3QoSlNTdGFjazo6Q2FsbGVyRnJhbWUpKTsKKyAgICBt
X2ppdC5zdG9yZTY0KGNhbGxlZUdQUiwgY2FsbEZyYW1lU2xvdChKU1N0YWNrOjpDYWxsZWUpKTsK
ICAgICAKICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bVBhc3NlZEFyZ3M7IGkrKykgewogICAg
ICAgICBFZGdlIGFyZ0VkZ2UgPSBtX2ppdC5ncmFwaCgpLm1fdmFyQXJnQ2hpbGRyZW5bbm9kZS5m
aXJzdENoaWxkKCkgKyAxICsgaV07CkBAIC0xMDE2LDcgKzEwMTYsNyBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjplbWl0Q2FsbChOb2RlJiBub2RlCiAgICAgICAgIEdQUlJlZyBhcmdHUFIgPSBhcmcu
Z3ByKCk7CiAgICAgICAgIHVzZShhcmdFZGdlKTsKICAgICAgICAgCi0gICAgICAgIG1faml0LnN0
b3JlUHRyKGFyZ0dQUiwgYXJndW1lbnRTbG90KGkgKyBkdW1teVRoaXNBcmd1bWVudCkpOworICAg
ICAgICBtX2ppdC5zdG9yZTY0KGFyZ0dQUiwgYXJndW1lbnRTbG90KGkgKyBkdW1teVRoaXNBcmd1
bWVudCkpOwogICAgIH0KIAogICAgIGZsdXNoUmVnaXN0ZXJzKCk7CkBAIC0xMDI1LDE2ICsxMDI1
LDE3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUmIG5vZGUKICAgICBHUFJS
ZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwogCiAgICAgSklUQ29tcGlsZXI6OkRhdGFMYWJl
bFB0ciB0YXJnZXRUb0NoZWNrOwotICAgIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoOworICAg
IEpJVENvbXBpbGVyOjpKdW1wTGlzdCBzbG93UGF0aDsKIAogICAgIENhbGxCZWdpblRva2VuIHRv
a2VuOwogICAgIG1faml0LmJlZ2luQ2FsbChub2RlLmNvZGVPcmlnaW4sIHRva2VuKTsKICAgICAK
ICAgICBtX2ppdC5hZGRQdHIoVHJ1c3RlZEltbTMyKG1faml0LmNvZGVCbG9jaygpLT5tX251bUNh
bGxlZVJlZ2lzdGVycyAqIHNpemVvZihSZWdpc3RlcikpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdp
c3Rlcik7CiAgICAgCi0gICAgc2xvd1BhdGggPSBtX2ppdC5icmFuY2hQdHJXaXRoUGF0Y2goTWFj
cm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBjYWxsZWVHUFIsIHRhcmdldFRvQ2hlY2ssIE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tUHRyKEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpKSk7CisgICAg
c2xvd1BhdGguYXBwZW5kKG1faml0LmJyYW5jaFB0cldpdGhQYXRjaChNYWNyb0Fzc2VtYmxlcjo6
Tm90RXF1YWwsIGNhbGxlZUdQUiwgdGFyZ2V0VG9DaGVjaywgTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW1QdHIoMCkpKTsKKwogICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3MoY2FsbGVlR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoSlNGdW5jdGlvbiwgbV9zY29wZSkpLCByZXN1
bHRHUFIpOwotICAgIG1faml0LnN0b3JlUHRyKHJlc3VsdEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHN0YXRpY19jYXN0PHB0cmRpZmZfdD4o
c2l6ZW9mKFJlZ2lzdGVyKSkgKiBKU1N0YWNrOjpTY29wZUNoYWluKSk7CisgICAgbV9qaXQuc3Rv
cmU2NChyZXN1bHRHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFt
ZVJlZ2lzdGVyLCBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihSZWdpc3RlcikpICogSlNT
dGFjazo6U2NvcGVDaGFpbikpOwogCiAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gYXQobV9j
b21waWxlSW5kZXgpLmNvZGVPcmlnaW47CiAgICAgSklUQ29tcGlsZXI6OkNhbGwgZmFzdENhbGwg
PSBtX2ppdC5uZWFyQ2FsbCgpOwpAQCAtMTEwNCwxNCArMTEwNSwxNCBAQCBHUFJSZWcgU3BlY3Vs
YXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVJbnRJCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBp
ZiAoc3BpbGxGb3JtYXQgPT0gRGF0YUZvcm1hdEludGVnZXIpIHsKICAgICAgICAgICAgICAgICBt
X2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSwgZ3By
KTsKLSAgICAgICAgICAgICAgICBtX2ppdC5vclB0cihHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVn
aXN0ZXIsIGdwcik7CisgICAgICAgICAgICAgICAgbV9qaXQub3I2NChHUFJJbmZvOjp0YWdUeXBl
TnVtYmVyUmVnaXN0ZXIsIGdwcik7CiAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAg
ICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3Rlciks
IGdwcik7CisgICAgICAgICAgICAgICAgbV9qaXQubG9hZDY0KEpJVENvbXBpbGVyOjphZGRyZXNz
Rm9yKHZpcnR1YWxSZWdpc3RlciksIGdwcik7CiAgICAgICAgICAgICBpbmZvLmZpbGxKU1ZhbHVl
KCptX3N0cmVhbSwgZ3ByLCBEYXRhRm9ybWF0SlNJbnRlZ2VyKTsKICAgICAgICAgICAgIHJldHVy
bkZvcm1hdCA9IERhdGFGb3JtYXRKU0ludGVnZXI7CiAgICAgICAgICAgICByZXR1cm4gZ3ByOwog
ICAgICAgICB9Ci0gICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Io
dmlydHVhbFJlZ2lzdGVyKSwgZ3ByKTsKKyAgICAgICAgbV9qaXQubG9hZDY0KEpJVENvbXBpbGVy
OjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIGdwcik7CiAKICAgICAgICAgLy8gRmlsbCBh
cyBKU1ZhbHVlLCBhbmQgZmFsbCB0aHJvdWdoLgogICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKCpt
X3N0cmVhbSwgZ3ByLCBEYXRhRm9ybWF0SlNJbnRlZ2VyKTsKQEAgLTExMjMsNyArMTEyNCw3IEBA
IEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUludEkKICAgICAgICAgR1BSUmVn
IGdwciA9IGluZm8uZ3ByKCk7CiAgICAgICAgIG1fZ3Bycy5sb2NrKGdwcik7CiAgICAgICAgIGlm
ICghaXNJbnQzMlNwZWN1bGF0aW9uKHR5cGUpKQotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVj
ayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhncHIpLCBub2RlSW5kZXgsIG1faml0LmJyYW5jaFB0cihN
YWNyb0Fzc2VtYmxlcjo6QmVsb3csIGdwciwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVy
KSk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKGdw
ciksIG5vZGVJbmRleCwgbV9qaXQuYnJhbmNoNjQoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBncHIs
IEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlcikpOwogICAgICAgICBpbmZvLmZpbGxKU1Zh
bHVlKCptX3N0cmVhbSwgZ3ByLCBEYXRhRm9ybWF0SlNJbnRlZ2VyKTsKICAgICAgICAgLy8gSWYg
IXN0cmljdCB3ZSdyZSBkb25lLCByZXR1cm4uCiAgICAgICAgIGlmICghc3RyaWN0KSB7CkBAIC0x
MjIzLDggKzEyMjQsOCBAQCBGUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVEb3Vi
CiAKICAgICAgICAgICAgIGlmIChpc0ludDMyQ29uc3RhbnQobm9kZUluZGV4KSkgewogICAgICAg
ICAgICAgICAgIEZQUlJlZyBmcHIgPSBmcHJBbGxvY2F0ZSgpOwotICAgICAgICAgICAgICAgIG1f
aml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OkltbVB0cihyZWludGVycHJldF9jYXN0PHZvaWQqPihy
ZWludGVycHJldERvdWJsZVRvSW50cHRyKHN0YXRpY19jYXN0PGRvdWJsZT4odmFsdWVPZkludDMy
Q29uc3RhbnQobm9kZUluZGV4KSkpKSksIGdwcik7Ci0gICAgICAgICAgICAgICAgbV9qaXQubW92
ZVB0clRvRG91YmxlKGdwciwgZnByKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3Jv
QXNzZW1ibGVyOjpJbW02NChyZWludGVycHJldERvdWJsZVRvSW50NjQoc3RhdGljX2Nhc3Q8ZG91
YmxlPih2YWx1ZU9mSW50MzJDb25zdGFudChub2RlSW5kZXgpKSkpLCBncHIpOworICAgICAgICAg
ICAgICAgIG1faml0Lm1vdmU2NFRvRG91YmxlKGdwciwgZnByKTsKICAgICAgICAgICAgICAgICB1
bmxvY2soZ3ByKTsKIAogICAgICAgICAgICAgICAgIG1fZnBycy5yZXRhaW4oZnByLCB2aXJ0dWFs
UmVnaXN0ZXIsIFNwaWxsT3JkZXJEb3VibGUpOwpAQCAtMTIzMyw4ICsxMjM0LDggQEAgRlBSUmVn
IFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlRG91YgogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgaWYgKGlzTnVtYmVyQ29uc3RhbnQobm9kZUluZGV4KSkgewogICAgICAgICAgICAgICAg
IEZQUlJlZyBmcHIgPSBmcHJBbGxvY2F0ZSgpOwotICAgICAgICAgICAgICAgIG1faml0Lm1vdmUo
TWFjcm9Bc3NlbWJsZXI6OkltbVB0cihyZWludGVycHJldF9jYXN0PHZvaWQqPihyZWludGVycHJl
dERvdWJsZVRvSW50cHRyKHZhbHVlT2ZOdW1iZXJDb25zdGFudChub2RlSW5kZXgpKSkpLCBncHIp
OwotICAgICAgICAgICAgICAgIG1faml0Lm1vdmVQdHJUb0RvdWJsZShncHIsIGZwcik7CisgICAg
ICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6SW1tNjQocmVpbnRlcnByZXRE
b3VibGVUb0ludDY0KHZhbHVlT2ZOdW1iZXJDb25zdGFudChub2RlSW5kZXgpKSksIGdwcik7Cisg
ICAgICAgICAgICAgICAgbV9qaXQubW92ZTY0VG9Eb3VibGUoZ3ByLCBmcHIpOwogICAgICAgICAg
ICAgICAgIHVubG9jayhncHIpOwogCiAgICAgICAgICAgICAgICAgbV9mcHJzLnJldGFpbihmcHIs
IHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckRvdWJsZSk7CkBAIC0xMjcwLDcgKzEyNzEsNyBA
QCBGUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVEb3ViCiAKICAgICAgICAgICAg
IEFTU0VSVChzcGlsbEZvcm1hdCAmIERhdGFGb3JtYXRKUyk7CiAgICAgICAgICAgICBtX2dwcnMu
cmV0YWluKGdwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyU3BpbGxlZCk7Ci0gICAgICAg
ICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3Rl
ciksIGdwcik7CisgICAgICAgICAgICBtX2ppdC5sb2FkNjQoSklUQ29tcGlsZXI6OmFkZHJlc3NG
b3IodmlydHVhbFJlZ2lzdGVyKSwgZ3ByKTsKICAgICAgICAgICAgIGluZm8uZmlsbEpTVmFsdWUo
Km1fc3RyZWFtLCBncHIsIHNwaWxsRm9ybWF0KTsKICAgICAgICAgICAgIHVubG9jayhncHIpOwog
ICAgICAgICAgICAgYnJlYWs7CkBAIC0xMjk1LDEwICsxMjk2LDEwIEBAIEZQUlJlZyBTcGVjdWxh
dGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZURvdWIKICAgICAgICAgRlBSUmVnIGZwciA9IGZwckFsbG9j
YXRlKCk7CiAgICAgICAgIEdQUlJlZyB0ZW1wR3ByID0gYWxsb2NhdGUoKTsKIAotICAgICAgICBK
SVRDb21waWxlcjo6SnVtcCBpc0ludGVnZXIgPSBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJs
ZXI6OkFib3ZlT3JFcXVhbCwganNWYWx1ZUdwciwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lz
dGVyKTsKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNJbnRlZ2VyID0gbV9qaXQuYnJhbmNo
NjQoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwganNWYWx1ZUdwciwgR1BSSW5mbzo6dGFn
VHlwZU51bWJlclJlZ2lzdGVyKTsKIAogICAgICAgICBpZiAoIWlzTnVtYmVyU3BlY3VsYXRpb24o
dHlwZSkpCi0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdz
KGpzVmFsdWVHcHIpLCBub2RlSW5kZXgsIG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJs
ZXI6Olplcm8sIGpzVmFsdWVHcHIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlcikpOwor
ICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhqc1ZhbHVl
R3ByKSwgbm9kZUluZGV4LCBtX2ppdC5icmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Olplcm8s
IGpzVmFsdWVHcHIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlcikpOwogCiAgICAgICAg
IC8vIEZpcnN0LCBpZiB3ZSBnZXQgaGVyZSB3ZSBoYXZlIGEgZG91YmxlIGVuY29kZWQgYXMgYSBK
U1ZhbHVlCiAgICAgICAgIG1faml0Lm1vdmUoanNWYWx1ZUdwciwgdGVtcEdwcik7CkBAIC0xMzg0
LDcgKzEzODUsNyBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVDZWxsCiAg
ICAgICAgICAgICBKU1ZhbHVlIGpzVmFsdWUgPSB2YWx1ZU9mSlNDb25zdGFudChub2RlSW5kZXgp
OwogICAgICAgICAgICAgaWYgKGpzVmFsdWUuaXNDZWxsKCkpIHsKICAgICAgICAgICAgICAgICBt
X2dwcnMucmV0YWluKGdwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyQ29uc3RhbnQpOwot
ICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIo
anNWYWx1ZS5hc0NlbGwoKSksIGdwcik7CisgICAgICAgICAgICAgICAgbV9qaXQubW92ZShNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc1ZhbHVlKSksIGdwcik7
CiAgICAgICAgICAgICAgICAgaW5mby5maWxsSlNWYWx1ZSgqbV9zdHJlYW0sIGdwciwgRGF0YUZv
cm1hdEpTQ2VsbCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGdwcjsKICAgICAgICAgICAgIH0K
QEAgLTEzOTMsMTEgKzEzOTQsMTEgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3Vs
YXRlQ2VsbAogICAgICAgICB9CiAgICAgICAgIEFTU0VSVChpbmZvLnNwaWxsRm9ybWF0KCkgJiBE
YXRhRm9ybWF0SlMpOwogICAgICAgICBtX2dwcnMucmV0YWluKGdwciwgdmlydHVhbFJlZ2lzdGVy
LCBTcGlsbE9yZGVyU3BpbGxlZCk7Ci0gICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6
OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSwgZ3ByKTsKKyAgICAgICAgbV9qaXQubG9hZDY0
KEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIGdwcik7CiAKICAgICAg
ICAgaW5mby5maWxsSlNWYWx1ZSgqbV9zdHJlYW0sIGdwciwgRGF0YUZvcm1hdEpTKTsKICAgICAg
ICAgaWYgKCFpc0NlbGxTcGVjdWxhdGlvbih0eXBlKSkKLSAgICAgICAgICAgIHNwZWN1bGF0aW9u
Q2hlY2tXaXRoQ29uZGl0aW9uYWxEaXJlY3Rpb24oQmFkVHlwZSwgSlNWYWx1ZVJlZ3MoZ3ByKSwg
bm9kZUluZGV4LCBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBn
cHIsIEdQUkluZm86OnRhZ01hc2tSZWdpc3RlciksIGlzRm9yd2FyZFNwZWN1bGF0aW9uKTsKKyAg
ICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2tXaXRoQ29uZGl0aW9uYWxEaXJlY3Rpb24oQmFkVHlw
ZSwgSlNWYWx1ZVJlZ3MoZ3ByKSwgbm9kZUluZGV4LCBtX2ppdC5icmFuY2hUZXN0NjQoTWFjcm9B
c3NlbWJsZXI6Ok5vblplcm8sIGdwciwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKSwgaXNGb3J3
YXJkU3BlY3VsYXRpb24pOwogICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKCptX3N0cmVhbSwgZ3By
LCBEYXRhRm9ybWF0SlNDZWxsKTsKICAgICAgICAgcmV0dXJuIGdwcjsKICAgICB9CkBAIC0xNDEz
LDcgKzE0MTQsNyBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVDZWxsCiAg
ICAgICAgIEdQUlJlZyBncHIgPSBpbmZvLmdwcigpOwogICAgICAgICBtX2dwcnMubG9jayhncHIp
OwogICAgICAgICBpZiAoIWlzQ2VsbFNwZWN1bGF0aW9uKHR5cGUpKQotICAgICAgICAgICAgc3Bl
Y3VsYXRpb25DaGVja1dpdGhDb25kaXRpb25hbERpcmVjdGlvbihCYWRUeXBlLCBKU1ZhbHVlUmVn
cyhncHIpLCBub2RlSW5kZXgsIG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5v
blplcm8sIGdwciwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKSwgaXNGb3J3YXJkU3BlY3VsYXRp
b24pOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVja1dpdGhDb25kaXRpb25hbERpcmVjdGlv
bihCYWRUeXBlLCBKU1ZhbHVlUmVncyhncHIpLCBub2RlSW5kZXgsIG1faml0LmJyYW5jaFRlc3Q2
NChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgZ3ByLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIp
LCBpc0ZvcndhcmRTcGVjdWxhdGlvbik7CiAgICAgICAgIGluZm8uZmlsbEpTVmFsdWUoKm1fc3Ry
ZWFtLCBncHIsIERhdGFGb3JtYXRKU0NlbGwpOwogICAgICAgICByZXR1cm4gZ3ByOwogICAgIH0K
QEAgLTE0NjAsNyArMTQ2MSw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0
ZUJvb2wKICAgICAgICAgICAgIEpTVmFsdWUganNWYWx1ZSA9IHZhbHVlT2ZKU0NvbnN0YW50KG5v
ZGVJbmRleCk7CiAgICAgICAgICAgICBpZiAoanNWYWx1ZS5pc0Jvb2xlYW4oKSkgewogICAgICAg
ICAgICAgICAgIG1fZ3Bycy5yZXRhaW4oZ3ByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJD
b25zdGFudCk7Ci0gICAgICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbVB0cihKU1ZhbHVlOjplbmNvZGUoanNWYWx1ZSkpLCBncHIpOworICAgICAgICAgICAg
ICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNv
ZGUoanNWYWx1ZSkpLCBncHIpOwogICAgICAgICAgICAgICAgIGluZm8uZmlsbEpTVmFsdWUoKm1f
c3RyZWFtLCBncHIsIERhdGFGb3JtYXRKU0Jvb2xlYW4pOwogICAgICAgICAgICAgICAgIHJldHVy
biBncHI7CiAgICAgICAgICAgICB9CkBAIC0xNDY5LDEzICsxNDcwLDEzIEBAIEdQUlJlZyBTcGVj
dWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUJvb2wKICAgICAgICAgfQogICAgICAgICBBU1NFUlQo
aW5mby5zcGlsbEZvcm1hdCgpICYgRGF0YUZvcm1hdEpTKTsKICAgICAgICAgbV9ncHJzLnJldGFp
bihncHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlclNwaWxsZWQpOwotICAgICAgICBtX2pp
dC5sb2FkUHRyKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIGdwcik7
CisgICAgICAgIG1faml0LmxvYWQ2NChKSVRDb21waWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVn
aXN0ZXIpLCBncHIpOwogCiAgICAgICAgIGluZm8uZmlsbEpTVmFsdWUoKm1fc3RyZWFtLCBncHIs
IERhdGFGb3JtYXRKUyk7CiAgICAgICAgIGlmICghaXNCb29sZWFuU3BlY3VsYXRpb24odHlwZSkp
IHsKLSAgICAgICAgICAgIG1faml0LnhvclB0cihUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50
MzJfdD4oVmFsdWVGYWxzZSkpLCBncHIpOwotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhC
YWRUeXBlLCBKU1ZhbHVlUmVncyhncHIpLCBub2RlSW5kZXgsIG1faml0LmJyYW5jaFRlc3RQdHIo
TWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIGdwciwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGlu
dDMyX3Q+KH4xKSkpLCBTcGVjdWxhdGlvblJlY292ZXJ5KEJvb2xlYW5TcGVjdWxhdGlvbkNoZWNr
LCBncHIsIEludmFsaWRHUFJSZWcpKTsKLSAgICAgICAgICAgIG1faml0LnhvclB0cihUcnVzdGVk
SW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oVmFsdWVGYWxzZSkpLCBncHIpOworICAgICAgICAg
ICAgbV9qaXQueG9yNjQoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KFZhbHVlRmFs
c2UpKSwgZ3ByKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1
ZVJlZ3MoZ3ByKSwgbm9kZUluZGV4LCBtX2ppdC5icmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6
Ok5vblplcm8sIGdwciwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSkpLCBT
cGVjdWxhdGlvblJlY292ZXJ5KEJvb2xlYW5TcGVjdWxhdGlvbkNoZWNrLCBncHIsIEludmFsaWRH
UFJSZWcpKTsKKyAgICAgICAgICAgIG1faml0LnhvcjY0KFRydXN0ZWRJbW0zMihzdGF0aWNfY2Fz
dDxpbnQzMl90PihWYWx1ZUZhbHNlKSksIGdwcik7CiAgICAgICAgIH0KICAgICAgICAgaW5mby5m
aWxsSlNWYWx1ZSgqbV9zdHJlYW0sIGdwciwgRGF0YUZvcm1hdEpTQm9vbGVhbik7CiAgICAgICAg
IHJldHVybiBncHI7CkBAIC0xNDkyLDkgKzE0OTMsOSBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6
OmZpbGxTcGVjdWxhdGVCb29sCiAgICAgICAgIEdQUlJlZyBncHIgPSBpbmZvLmdwcigpOwogICAg
ICAgICBtX2dwcnMubG9jayhncHIpOwogICAgICAgICBpZiAoIWlzQm9vbGVhblNwZWN1bGF0aW9u
KHR5cGUpKSB7Ci0gICAgICAgICAgICBtX2ppdC54b3JQdHIoVHJ1c3RlZEltbTMyKHN0YXRpY19j
YXN0PGludDMyX3Q+KFZhbHVlRmFsc2UpKSwgZ3ByKTsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9u
Q2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3MoZ3ByKSwgbm9kZUluZGV4LCBtX2ppdC5icmFuY2hU
ZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBncHIsIFRydXN0ZWRJbW0zMihzdGF0aWNf
Y2FzdDxpbnQzMl90Pih+MSkpKSwgU3BlY3VsYXRpb25SZWNvdmVyeShCb29sZWFuU3BlY3VsYXRp
b25DaGVjaywgZ3ByLCBJbnZhbGlkR1BSUmVnKSk7Ci0gICAgICAgICAgICBtX2ppdC54b3JQdHIo
VHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KFZhbHVlRmFsc2UpKSwgZ3ByKTsKKyAg
ICAgICAgICAgIG1faml0LnhvcjY0KFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90PihW
YWx1ZUZhbHNlKSksIGdwcik7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUs
IEpTVmFsdWVSZWdzKGdwciksIG5vZGVJbmRleCwgbV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNz
ZW1ibGVyOjpOb25aZXJvLCBncHIsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+
MSkpKSwgU3BlY3VsYXRpb25SZWNvdmVyeShCb29sZWFuU3BlY3VsYXRpb25DaGVjaywgZ3ByLCBJ
bnZhbGlkR1BSUmVnKSk7CisgICAgICAgICAgICBtX2ppdC54b3I2NChUcnVzdGVkSW1tMzIoc3Rh
dGljX2Nhc3Q8aW50MzJfdD4oVmFsdWVGYWxzZSkpLCBncHIpOwogICAgICAgICB9CiAgICAgICAg
IGluZm8uZmlsbEpTVmFsdWUoKm1fc3RyZWFtLCBncHIsIERhdGFGb3JtYXRKU0Jvb2xlYW4pOwog
ICAgICAgICByZXR1cm4gZ3ByOwpAQCAtMTUyMSw5ICsxNTIyLDkgQEAgR1BSUmVnIFNwZWN1bGF0
aXZlSklUOjpmaWxsU3BlY3VsYXRlQm9vbAogCiBKSVRDb21waWxlcjo6SnVtcCBTcGVjdWxhdGl2
ZUpJVDo6Y29udmVydFRvRG91YmxlKEdQUlJlZyB2YWx1ZSwgRlBSUmVnIHJlc3VsdCwgR1BSUmVn
IHRtcCkKIHsKLSAgICBKSVRDb21waWxlcjo6SnVtcCBpc0ludGVnZXIgPSBtX2ppdC5icmFuY2hQ
dHIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgdmFsdWUsIEdQUkluZm86OnRhZ1R5cGVO
dW1iZXJSZWdpc3Rlcik7CisgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNJbnRlZ2VyID0gbV9qaXQu
YnJhbmNoNjQoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgdmFsdWUsIEdQUkluZm86OnRh
Z1R5cGVOdW1iZXJSZWdpc3Rlcik7CiAgICAgCi0gICAgSklUQ29tcGlsZXI6Okp1bXAgbm90TnVt
YmVyID0gbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVybywgdmFsdWUsIEdQ
UkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7CisgICAgSklUQ29tcGlsZXI6Okp1bXAgbm90
TnVtYmVyID0gbV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpaZXJvLCB2YWx1ZSwg
R1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKICAgICAKICAgICBtX2ppdC5tb3ZlKHZh
bHVlLCB0bXApOwogICAgIHVuYm94RG91YmxlKHRtcCwgcmVzdWx0KTsKQEAgLTE1OTAsNyArMTU5
MSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RFcXVhbGkKICAgICAgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQpKSk7CiAgICAgfQogICAgIAotICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGZhbHNlQ2FzZSA9
IG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIG9wMUdQUiwgb3AyR1BS
KTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBmYWxzZUNhc2UgPSBtX2ppdC5icmFuY2g2NChN
YWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIG9wMUdQUiwgb3AyR1BSKTsKICAgICBtX2ppdC5tb3Zl
KFRydXN0ZWRJbW0zMihWYWx1ZVRydWUpLCByZXN1bHRHUFIpOwogICAgIE1hY3JvQXNzZW1ibGVy
OjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7CiAgICAgZmFsc2VDYXNlLmxpbmsoJm1faml0KTsK
QEAgLTE2MzgsNyArMTYzOSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RU
b09iamUKICAgICAvLyBJdCBzZWVtcyB0aGF0IG1vc3Qgb2YgdGhlIHRpbWUgd2hlbiBwcm9ncmFt
cyBkbyBhID09IGIgd2hlcmUgYiBtYXkgYmUgZWl0aGVyIG51bGwvdW5kZWZpbmVkCiAgICAgLy8g
b3IgYW4gb2JqZWN0LCBiIGlzIHVzdWFsbHkgYW4gb2JqZWN0LiBCYWxhbmNlIHRoZSBicmFuY2hl
cyB0byBtYWtlIHRoYXQgY2FzZSBmYXN0LgogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHJpZ2h0
Tm90Q2VsbCA9Ci0gICAgICAgIG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5v
blplcm8sIG9wMkdQUiwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsKKyAgICAgICAgbV9qaXQu
YnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBvcDJHUFIsIEdQUkluZm86OnRh
Z01hc2tSZWdpc3Rlcik7CiAgICAgCiAgICAgLy8gV2Uga25vdyB0aGF0IHdpdGhpbiB0aGlzIGJy
YW5jaCwgcmlnaHRDaGlsZCBtdXN0IGJlIGEgY2VsbC4gCiAgICAgaWYgKG1faml0LmdyYXBoKCku
Z2xvYmFsT2JqZWN0Rm9yKGxlZnROb2RlLmNvZGVPcmlnaW4pLT5tYXNxdWVyYWRlc0FzVW5kZWZp
bmVkV2F0Y2hwb2ludCgpLT5pc1N0aWxsVmFsaWQoKSkgeyAKQEAgLTE2NjgsNyArMTY2OSw3IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RUb09iamUKICAgICAvLyBBdCB0aGlz
IHBvaW50IHdlIGtub3cgdGhhdCB3ZSBjYW4gcGVyZm9ybSBhIHN0cmFpZ2h0LWZvcndhcmQgZXF1
YWxpdHkgY29tcGFyaXNvbiBvbiBwb2ludGVyCiAgICAgLy8gdmFsdWVzIGJlY2F1c2UgYm90aCBs
ZWZ0IGFuZCByaWdodCBhcmUgcG9pbnRlcnMgdG8gb2JqZWN0cyB0aGF0IGhhdmUgbm8gc3BlY2lh
bCBlcXVhbGl0eQogICAgIC8vIHByb3RvY29scy4KLSAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBm
YWxzZUNhc2UgPSBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBvcDFH
UFIsIG9wMkdQUik7CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZmFsc2VDYXNlID0gbV9qaXQu
YnJhbmNoNjQoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBvcDFHUFIsIG9wMkdQUik7CiAgICAg
TWFjcm9Bc3NlbWJsZXI6Okp1bXAgdHJ1ZUNhc2UgPSBtX2ppdC5qdW1wKCk7CiAgICAgCiAgICAg
cmlnaHROb3RDZWxsLmxpbmsoJm1faml0KTsKQEAgLTE2NzcsMTMgKzE2NzgsMTMgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdFRvT2JqZQogICAgIC8vIHByb3ZlIHRoYXQgaXQg
aXMgZWl0aGVyIG51bGwgb3IgdW5kZWZpbmVkLgogICAgIGlmICghaXNPdGhlck9yRW1wdHlTcGVj
dWxhdGlvbihtX3N0YXRlLmZvck5vZGUocmlnaHRDaGlsZCkubV90eXBlICYgflNwZWNDZWxsKSkg
ewogICAgICAgICBtX2ppdC5tb3ZlKG9wMkdQUiwgcmVzdWx0R1BSKTsKLSAgICAgICAgbV9qaXQu
YW5kUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoflRhZ0JpdFVuZGVmaW5lZCksIHJl
c3VsdEdQUik7CisgICAgICAgIG1faml0LmFuZDY0KE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
MzIoflRhZ0JpdFVuZGVmaW5lZCksIHJlc3VsdEdQUik7CiAgICAgICAgIAogICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKAogICAgICAgICAgICAgQmFkVHlwZSwgSlNWYWx1ZVJlZ3Mob3AyR1BSKSwg
cmlnaHRDaGlsZC5pbmRleCgpLAotICAgICAgICAgICAgbV9qaXQuYnJhbmNoUHRyKAorICAgICAg
ICAgICAgbV9qaXQuYnJhbmNoNjQoCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5v
dEVxdWFsLCByZXN1bHRHUFIsCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW1QdHIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oVmFsdWVOdWxsKSkpKTsKKyAgICAgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KFZhbHVlTnVsbCkpKTsKICAgICB9
CiAgICAgCiAgICAgZmFsc2VDYXNlLmxpbmsoJm1faml0KTsKQEAgLTE3MzcsNyArMTczOCw3IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9sZU9iamUKICAgICAvLyBJdCBzZWVt
cyB0aGF0IG1vc3Qgb2YgdGhlIHRpbWUgd2hlbiBwcm9ncmFtcyBkbyBhID09IGIgd2hlcmUgYiBt
YXkgYmUgZWl0aGVyIG51bGwvdW5kZWZpbmVkCiAgICAgLy8gb3IgYW4gb2JqZWN0LCBiIGlzIHVz
dWFsbHkgYW4gb2JqZWN0LiBCYWxhbmNlIHRoZSBicmFuY2hlcyB0byBtYWtlIHRoYXQgY2FzZSBm
YXN0LgogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHJpZ2h0Tm90Q2VsbCA9Ci0gICAgICAgIG1f
aml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIG9wMkdQUiwgR1BSSW5m
bzo6dGFnTWFza1JlZ2lzdGVyKTsKKyAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNz
ZW1ibGVyOjpOb25aZXJvLCBvcDJHUFIsIEdQUkluZm86OnRhZ01hc2tSZWdpc3Rlcik7CiAgICAg
CiAgICAgLy8gV2Uga25vdyB0aGF0IHdpdGhpbiB0aGlzIGJyYW5jaCwgcmlnaHRDaGlsZCBtdXN0
IGJlIGEgY2VsbC4gCiAgICAgaWYgKG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKGJyYW5j
aE5vZGUuY29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCktPmlz
U3RpbGxWYWxpZCgpKSB7CkBAIC0xNzY3LDcgKzE3NjgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlUGVlcEhvbGVPYmplCiAgICAgLy8gQXQgdGhpcyBwb2ludCB3ZSBrbm93IHRoYXQg
d2UgY2FuIHBlcmZvcm0gYSBzdHJhaWdodC1mb3J3YXJkIGVxdWFsaXR5IGNvbXBhcmlzb24gb24g
cG9pbnRlcgogICAgIC8vIHZhbHVlcyBiZWNhdXNlIGJvdGggbGVmdCBhbmQgcmlnaHQgYXJlIHBv
aW50ZXJzIHRvIG9iamVjdHMgdGhhdCBoYXZlIG5vIHNwZWNpYWwgZXF1YWxpdHkKICAgICAvLyBw
cm90b2NvbHMuCi0gICAgYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgb3AxR1BSLCBv
cDJHUFIsIHRha2VuKTsKKyAgICBicmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIG9wMUdQ
Uiwgb3AyR1BSLCB0YWtlbik7CiAgICAgCiAgICAgLy8gV2Uga25vdyB0aGF0IHdpdGhpbiB0aGlz
IGJyYW5jaCwgcmlnaHRDaGlsZCBtdXN0IG5vdCBiZSBhIGNlbGwuIENoZWNrIGlmIHRoYXQgaXMg
ZW5vdWdoIHRvCiAgICAgLy8gcHJvdmUgdGhhdCBpdCBpcyBlaXRoZXIgbnVsbCBvciB1bmRlZmlu
ZWQuCkBAIC0xNzc4LDEzICsxNzc5LDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQ
ZWVwSG9sZU9iamUKICAgICAgICAgCiAgICAgICAgIHJpZ2h0Tm90Q2VsbC5saW5rKCZtX2ppdCk7
CiAgICAgICAgIG1faml0Lm1vdmUob3AyR1BSLCByZXN1bHRHUFIpOwotICAgICAgICBtX2ppdC5h
bmRQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMih+VGFnQml0VW5kZWZpbmVkKSwgcmVz
dWx0R1BSKTsKKyAgICAgICAgbV9qaXQuYW5kNjQoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0z
Mih+VGFnQml0VW5kZWZpbmVkKSwgcmVzdWx0R1BSKTsKICAgICAgICAgCiAgICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2soCiAgICAgICAgICAgICBCYWRUeXBlLCBKU1ZhbHVlUmVncyhvcDJHUFIpLCBy
aWdodENoaWxkLmluZGV4KCksCi0gICAgICAgICAgICBtX2ppdC5icmFuY2hQdHIoCisgICAgICAg
ICAgICBtX2ppdC5icmFuY2g2NCgKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90
RXF1YWwsIHJlc3VsdEdQUiwKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbVB0cihyZWludGVycHJldF9jYXN0PHZvaWQqPihWYWx1ZU51bGwpKSkpOworICAgICAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoVmFsdWVOdWxsKSkpOwogICAgIH0K
ICAgICAKICAgICBqdW1wKG5vdFRha2VuKTsKQEAgLTE4MTEsNyArMTgxMiw3IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVEb3VibGVDb21wYXIKICAgICAKICAgICBtX2ppdC5tb3ZlKFRy
dXN0ZWRJbW0zMihWYWx1ZVRydWUpLCByZXN1bHQuZ3ByKCkpOwogICAgIE1hY3JvQXNzZW1ibGVy
OjpKdW1wIHRydWVDYXNlID0gbV9qaXQuYnJhbmNoRG91YmxlKGNvbmRpdGlvbiwgb3AxLmZwcigp
LCBvcDIuZnByKCkpOwotICAgIG1faml0LnhvclB0cihUcnVzdGVkSW1tMzIodHJ1ZSksIHJlc3Vs
dC5ncHIoKSk7CisgICAgbV9qaXQueG9yNjQoVHJ1c3RlZEltbTMyKHRydWUpLCByZXN1bHQuZ3By
KCkpOwogICAgIHRydWVDYXNlLmxpbmsoJm1faml0KTsKICAgICAKICAgICBqc1ZhbHVlUmVzdWx0
KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgsIERhdGFGb3JtYXRKU0Jvb2xlYW4pOwpAQCAt
MTg0Myw3ICsxODQ0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU5vblN0cmluZ0Nl
bAogICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOwogICAgIEdQUlJlZyByZXN1bHRH
UFIgPSByZXN1bHQuZ3ByKCk7CiAgICAgCi0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm90Q2Vs
bCA9IG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIHZhbHVlR1BS
LCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpOworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5v
dENlbGwgPSBtX2ppdC5icmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIHZhbHVl
R1BSLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpOwogICAgIGlmIChtX2ppdC5ncmFwaCgpLmds
b2JhbE9iamVjdEZvcihtX2ppdC5ncmFwaCgpW25vZGVVc2UuaW5kZXgoKV0uY29kZU9yaWdpbikt
Pm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCktPmlzU3RpbGxWYWxpZCgpKSB7CiAg
ICAgICAgIG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG1faml0LmdyYXBoKClbbm9kZVVz
ZS5pbmRleCgpXS5jb2RlT3JpZ2luKS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnQo
KS0+YWRkKHNwZWN1bGF0aW9uV2F0Y2hwb2ludCgpKTsKIApAQCAtMTg4OSwxMiArMTg5MCwxMiBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTm9uU3RyaW5nQ2VsCiAKICAgICBpZiAobmVl
ZFNwZWN1bGF0aW9uQ2hlY2spIHsKICAgICAgICAgbV9qaXQubW92ZSh2YWx1ZUdQUiwgcmVzdWx0
R1BSKTsKLSAgICAgICAgbV9qaXQuYW5kUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIo
flRhZ0JpdFVuZGVmaW5lZCksIHJlc3VsdEdQUik7CisgICAgICAgIG1faml0LmFuZDY0KE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoflRhZ0JpdFVuZGVmaW5lZCksIHJlc3VsdEdQUik7CiAg
ICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBu
b2RlVXNlLCAKLSAgICAgICAgICAgIG1faml0LmJyYW5jaFB0cigKKyAgICAgICAgICAgIG1faml0
LmJyYW5jaDY0KAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgCiAg
ICAgICAgICAgICAgICAgcmVzdWx0R1BSLCAKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbVB0cihyZWludGVycHJldF9jYXN0PHZvaWQqPihWYWx1ZU51bGwpKSkpOwor
ICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoVmFsdWVOdWxsKSkp
OwogICAgIH0KICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMihWYWx1ZVRydWUpLCByZXN1bHRH
UFIpOwogICAgIApAQCAtMTkzNyw3ICsxOTM4LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZUxvZ2ljYWxOb3QoTgogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCB2
YWx1ZSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIG1faml0Lm1vdmUodmFsdWUuZ3ByKCks
IHJlc3VsdC5ncHIoKSk7Ci0gICAgICAgICAgICBtX2ppdC54b3JQdHIoVHJ1c3RlZEltbTMyKHRy
dWUpLCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAgbV9qaXQueG9yNjQoVHJ1c3RlZEltbTMy
KHRydWUpLCByZXN1bHQuZ3ByKCkpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBqc1ZhbHVl
UmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgsIERhdGFGb3JtYXRKU0Jvb2xlYW4p
OwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTk0Nyw5ICsxOTQ4LDkgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZUxvZ2ljYWxOb3QoTgogICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0
KHRoaXMpOyAvLyBGSVhNRTogV2UgY291bGQgcmV1c2UsIGJ1dCBvbiBzcGVjdWxhdGlvbiBmYWls
IHdvdWxkIG5lZWQgcmVjb3ZlcnkgdG8gcmVzdG9yZSB0YWcgKGFraW4gdG8gYWRkKS4KICAgICAg
ICAgCiAgICAgICAgIG1faml0Lm1vdmUodmFsdWUuZ3ByKCksIHJlc3VsdC5ncHIoKSk7Ci0gICAg
ICAgIG1faml0LnhvclB0cihUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oVmFsdWVG
YWxzZSkpLCByZXN1bHQuZ3ByKCkpOwotICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUs
IEpTVmFsdWVSZWdzKHZhbHVlLmdwcigpKSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoVGVz
dFB0cihKSVRDb21waWxlcjo6Tm9uWmVybywgcmVzdWx0LmdwcigpLCBUcnVzdGVkSW1tMzIoc3Rh
dGljX2Nhc3Q8aW50MzJfdD4ofjEpKSkpOwotICAgICAgICBtX2ppdC54b3JQdHIoVHJ1c3RlZElt
bTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KFZhbHVlVHJ1ZSkpLCByZXN1bHQuZ3ByKCkpOworICAg
ICAgICBtX2ppdC54b3I2NChUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oVmFsdWVG
YWxzZSkpLCByZXN1bHQuZ3ByKCkpOworICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUs
IEpTVmFsdWVSZWdzKHZhbHVlLmdwcigpKSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoVGVz
dDY0KEpJVENvbXBpbGVyOjpOb25aZXJvLCByZXN1bHQuZ3ByKCksIFRydXN0ZWRJbW0zMihzdGF0
aWNfY2FzdDxpbnQzMl90Pih+MSkpKSk7CisgICAgICAgIG1faml0LnhvcjY0KFRydXN0ZWRJbW0z
MihzdGF0aWNfY2FzdDxpbnQzMl90PihWYWx1ZVRydWUpKSwgcmVzdWx0LmdwcigpKTsKICAgICAg
ICAgCiAgICAgICAgIC8vIElmIHdlIGFkZCBhIERhdGFGb3JtYXRCb29sLCB3ZSBzaG91bGQgdXNl
IGl0IGhlcmUuCiAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJ
bmRleCwgRGF0YUZvcm1hdEpTQm9vbGVhbik7CkBAIC0xOTY1LDEzICsxOTY2LDEzIEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVMb2dpY2FsTm90KE4KICAgICBhcmcxLnVzZSgpOwogICAg
IAogICAgIG1faml0Lm1vdmUoYXJnMUdQUiwgcmVzdWx0R1BSKTsKLSAgICBtX2ppdC54b3JQdHIo
VHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KFZhbHVlRmFsc2UpKSwgcmVzdWx0R1BS
KTsKLSAgICBKSVRDb21waWxlcjo6SnVtcCBzbG93Q2FzZSA9IG1faml0LmJyYW5jaFRlc3RQdHIo
SklUQ29tcGlsZXI6Ok5vblplcm8sIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0
PGludDMyX3Q+KH4xKSkpOworICAgIG1faml0LnhvcjY0KFRydXN0ZWRJbW0zMihzdGF0aWNfY2Fz
dDxpbnQzMl90PihWYWx1ZUZhbHNlKSksIHJlc3VsdEdQUik7CisgICAgSklUQ29tcGlsZXI6Okp1
bXAgc2xvd0Nhc2UgPSBtX2ppdC5icmFuY2hUZXN0NjQoSklUQ29tcGlsZXI6Ok5vblplcm8sIHJl
c3VsdEdQUiwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSkpOwogICAgIAog
ICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAogICAgICAgICBzbG93UGF0aENhbGwoc2xvd0Nhc2Us
IHRoaXMsIGRmZ0NvbnZlcnRKU1ZhbHVlVG9Cb29sZWFuLCByZXN1bHRHUFIsIGFyZzFHUFIpKTsK
ICAgICAKLSAgICBtX2ppdC54b3JQdHIoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+
KFZhbHVlVHJ1ZSkpLCByZXN1bHRHUFIpOworICAgIG1faml0LnhvcjY0KFRydXN0ZWRJbW0zMihz
dGF0aWNfY2FzdDxpbnQzMl90PihWYWx1ZVRydWUpKSwgcmVzdWx0R1BSKTsKICAgICBqc1ZhbHVl
UmVzdWx0KHJlc3VsdEdQUiwgbV9jb21waWxlSW5kZXgsIERhdGFGb3JtYXRKU0Jvb2xlYW4sIFVz
ZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CiB9CiAKQEAgLTE5ODIsNyArMTk4Myw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXROb25TdHJpbmdDZWxsT3IKICAgICBHUFJSZWcgdmFsdWVH
UFIgPSB2YWx1ZS5ncHIoKTsKICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7
CiAgICAgCi0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm90Q2VsbCA9IG1faml0LmJyYW5jaFRl
c3RQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIHZhbHVlR1BSLCBHUFJJbmZvOjp0YWdNYXNr
UmVnaXN0ZXIpOworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5vdENlbGwgPSBtX2ppdC5icmFu
Y2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIHZhbHVlR1BSLCBHUFJJbmZvOjp0YWdN
YXNrUmVnaXN0ZXIpOwogICAgIGlmIChtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihtX2pp
dC5ncmFwaCgpW25vZGVVc2UuaW5kZXgoKV0uY29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRl
ZmluZWRXYXRjaHBvaW50KCktPmlzU3RpbGxWYWxpZCgpKSB7CiAgICAgICAgIG1faml0LmdyYXBo
KCkuZ2xvYmFsT2JqZWN0Rm9yKG1faml0LmdyYXBoKClbbm9kZVVzZS5pbmRleCgpXS5jb2RlT3Jp
Z2luKS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnQoKS0+YWRkKHNwZWN1bGF0aW9u
V2F0Y2hwb2ludCgpKTsKIApAQCAtMjAyMCw4ICsyMDIxLDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6ZW1pdE5vblN0cmluZ0NlbGxPcgogICAgIAogICAgIGlmIChuZWVkU3BlY3VsYXRpb25DaGVj
aykgewogICAgICAgICBtX2ppdC5tb3ZlKHZhbHVlR1BSLCBzY3JhdGNoR1BSKTsKLSAgICAgICAg
bV9qaXQuYW5kUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoflRhZ0JpdFVuZGVmaW5l
ZCksIHNjcmF0Y2hHUFIpOwotICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFs
dWVSZWdzKHZhbHVlR1BSKSwgbm9kZVVzZS5pbmRleCgpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9B
c3NlbWJsZXI6Ok5vdEVxdWFsLCBzY3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bVB0cihyZWludGVycHJldF9jYXN0PHZvaWQqPihWYWx1ZU51bGwpKSkpOworICAgICAgICBtX2pp
dC5hbmQ2NChNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKH5UYWdCaXRVbmRlZmluZWQpLCBz
Y3JhdGNoR1BSKTsKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVn
cyh2YWx1ZUdQUiksIG5vZGVVc2UuaW5kZXgoKSwgbV9qaXQuYnJhbmNoNjQoTWFjcm9Bc3NlbWJs
ZXI6Ok5vdEVxdWFsLCBzY3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KFZh
bHVlTnVsbCkpKTsKICAgICB9CiAgICAganVtcChub3RUYWtlbik7CiAgICAgCkBAIC0yMDc4LDgg
KzIwNzksOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0QnJhbmNoKE5vZGUmIG5vCiAgICAg
ICAgICAgICAgICAgYnJhbmNoVGVzdDMyKGNvbmRpdGlvbiwgdmFsdWVHUFIsIFRydXN0ZWRJbW0z
Mih0cnVlKSwgdGFrZW4pOwogICAgICAgICAgICAgICAgIGp1bXAobm90VGFrZW4pOwogICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBicmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6
OkVxdWFsLCB2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoSlNWYWx1ZTo6
ZW5jb2RlKGpzQm9vbGVhbihmYWxzZSkpKSwgbm90VGFrZW4pOwotICAgICAgICAgICAgICAgIGJy
YW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbVB0cihKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRydWUpKSksIHRha2VuKTsK
KyAgICAgICAgICAgICAgICBicmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHZhbHVlR1BS
LCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4o
ZmFsc2UpKSksIG5vdFRha2VuKTsKKyAgICAgICAgICAgICAgICBicmFuY2g2NChNYWNyb0Fzc2Vt
Ymxlcjo6RXF1YWwsIHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KEpTVmFs
dWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkpKSwgdGFrZW4pOwogICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3ModmFs
dWVHUFIpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5qdW1wKCkpOwogICAgICAgICAgICAgfQpAQCAt
MjA4OCwxMiArMjA4OSwxMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0QnJhbmNoKE5vZGUm
IG5vCiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogICAgICAgICAgICAg
R1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKICAgICAgICAgCi0gICAgICAgICAgICBi
cmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCB2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKDApKSksIG5vdFRha2VuKTsK
LSAgICAgICAgICAgIGJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCB2YWx1
ZUdQUiwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCB0YWtlbik7CisgICAgICAgICAg
ICBicmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bWJlcigwKSkpLCBub3RUYWtlbik7
CisgICAgICAgICAgICBicmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCB2YWx1
ZUdQUiwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCB0YWtlbik7CiAgICAgCiAgICAg
ICAgICAgICBpZiAoIXByZWRpY3RCb29sZWFuKSB7Ci0gICAgICAgICAgICAgICAgYnJhbmNoUHRy
KE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgdmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tUHRyKEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oZmFsc2UpKSksIG5vdFRha2VuKTsKLSAg
ICAgICAgICAgICAgICBicmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCB2YWx1ZUdQUiwg
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0
cnVlKSkpLCB0YWtlbik7CisgICAgICAgICAgICAgICAgYnJhbmNoNjQoTWFjcm9Bc3NlbWJsZXI6
OkVxdWFsLCB2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjpl
bmNvZGUoanNCb29sZWFuKGZhbHNlKSkpLCBub3RUYWtlbik7CisgICAgICAgICAgICAgICAgYnJh
bmNoNjQoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCB2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRydWUpKSksIHRha2VuKTsKICAg
ICAgICAgICAgIH0KICAgICAKICAgICAgICAgICAgIHZhbHVlLnVzZSgpOwpAQCAtMjExNSw4ICsy
MTE2LDggQEAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IFNwZWN1bGF0aXZlSklUOgogICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7CiAgICAgc2xvd0Nhc2VzLmFwcGVuZCht
X2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1
YmxpY0xlbmd0aCgpKSkpOwogICAgIAotICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6
OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlNjYWxl
UHRyKSwgcmVzdWx0UmVnKTsKLSAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaFRlc3RQ
dHIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHJlc3VsdFJlZykpOworICAgIG1faml0LmxvYWQ2NChN
YWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fz
c2VtYmxlcjo6VGltZXNFaWdodCksIHJlc3VsdFJlZyk7CisgICAgc2xvd0Nhc2VzLmFwcGVuZCht
X2ppdC5icmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHJlc3VsdFJlZykpOwogICAg
IAogICAgIHJldHVybiBzbG93Q2FzZXM7CiB9CkBAIC0yMTI1LDggKzIxMjYsOCBAQCBNYWNyb0Fz
c2VtYmxlcjo6SnVtcExpc3QgU3BlY3VsYXRpdmVKSVQ6CiB7CiAgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXAgb3V0T2ZCb3VuZHMgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVP
ckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywg
QXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpOwogICAgIAotICAgIG1faml0Lmxv
YWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywg
TWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBt
X3ZlY3RvclswXSkpLCByZXN1bHRSZWcpOwotICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGhvbGUg
PSBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCByZXN1bHRSZWcpOwor
ICAgIG1faml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHBy
b3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEFy
cmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSwgcmVzdWx0UmVnKTsKKyAgICBNYWNyb0Fzc2VtYmxl
cjo6SnVtcCBob2xlID0gbV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBy
ZXN1bHRSZWcpOwogICAgIAogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7
CiAgICAgc2xvd0Nhc2VzLmFwcGVuZChvdXRPZkJvdW5kcyk7CkBAIC0yMTU4LDcgKzIxNTksNyBA
QCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgU3BlY3VsYXRpdmVKSVQ6CiAgICAgICAgIGluQm91
bmRzLmxpbmsoJm1faml0KTsKICAgICB9CiAKLSAgICBtX2ppdC5zdG9yZVB0cih2YWx1ZVJlZywg
TWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9B
c3NlbWJsZXI6OlNjYWxlUHRyKSk7CisgICAgbV9qaXQuc3RvcmU2NCh2YWx1ZVJlZywgTWFjcm9B
c3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJs
ZXI6OlRpbWVzRWlnaHQpKTsKICAgICAKICAgICBpZiAoaXNJbkJvdW5kc0FjY2VzcyhhcnJheU1v
ZGUpKQogICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0KCk7CkBAIC0yMTg0
LDkgKzIxODUsOSBAQCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgU3BlY3VsYXRpdmVKSVQ6CiAg
ICAgICAgIC8vIHByb2ZpbGluZy4KICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKICAgICAgICAg
ICAgIFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsCi0gICAgICAgICAgICBtX2pp
dC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBNYWNyb0Fzc2VtYmxlcjo6QmFz
ZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIs
IE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSkpKTsKKyAgICAgICAg
ICAgIG1faml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6WmVybywgTWFjcm9Bc3NlbWJs
ZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRp
bWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSkpKTsK
ICAgICB9IGVsc2UgewotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub3RIb2xlVmFsdWUg
PSBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBNYWNyb0Fzc2Vt
Ymxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6
U2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSkpOwor
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub3RIb2xlVmFsdWUgPSBtX2ppdC5icmFuY2hU
ZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgo
c3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBPQkpF
Q1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpKTsKICAgICAgICAgaWYgKGlz
U2xvd1B1dEFjY2VzcyhhcnJheU1vZGUpKSB7CiAgICAgICAgICAgICAvLyBUaGlzIGlzIHNvcnQg
b2Ygc3RyYW5nZS4gSWYgd2Ugd2FudGVkIHRvIG9wdGltaXplIHRoaXMgY29kZSBwYXRoLCB3ZSB3
b3VsZCBpbnZlcnQKICAgICAgICAgICAgIC8vIHRoZSBhYm92ZSBicmFuY2guIEJ1dCBpdCdzIHNp
bXBseSBub3Qgd29ydGggaXQgc2luY2UgdGhpcyBvbmx5IGhhcHBlbnMgaWYgd2UncmUKQEAgLTIy
MDYsNyArMjIwNyw3IEBAIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBTcGVjdWxhdGl2ZUpJVDoK
ICAgICB9CiAgICAgCiAgICAgLy8gU3RvcmUgdGhlIHZhbHVlIHRvIHRoZSBhcnJheS4KLSAgICBt
X2ppdC5zdG9yZVB0cih2YWx1ZVJlZywgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdl
UmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VU
T0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpKTsKKyAgICBtX2ppdC5zdG9yZTY0KHZhbHVl
UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBN
YWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwg
bV92ZWN0b3JbMF0pKSk7CiAgICAgCiAgICAgcmV0dXJuIHNsb3dDYXNlczsKIH0KQEAgLTIyNzAs
NyArMjI3MSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAg
ICAgICAgfQogCiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0gICAgICAgIG1f
aml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Iobm9kZS5sb2NhbCgpKSwgcmVzdWx0
LmdwcigpKTsKKyAgICAgICAgbV9qaXQubG9hZDY0KEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKG5v
ZGUubG9jYWwoKSksIHJlc3VsdC5ncHIoKSk7CiAKICAgICAgICAgLy8gTGlrZSBqc1ZhbHVlUmVz
dWx0LCBidXQgZG9uJ3QgdXNlQ2hpbGRyZW4gLSBvdXIgY2hpbGRyZW4gYXJlIHBoaSBub2RlcywK
ICAgICAgICAgLy8gYW5kIGRvbid0IHJlcHJlc2VudCB2YWx1ZXMgd2l0aGluIHRoaXMgZGF0YWZs
b3cgd2l0aCB2aXJ0dWFsIHJlZ2lzdGVycy4KQEAgLTIyOTQsNyArMjI5NSw3IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICBjYXNlIEdldExvY2FsVW5saW5r
ZWQ6IHsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKICAgICAgICAgCi0gICAg
ICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Iobm9kZS51bmxpbmtlZExv
Y2FsKCkpLCByZXN1bHQuZ3ByKCkpOworICAgICAgICBtX2ppdC5sb2FkNjQoSklUQ29tcGlsZXI6
OmFkZHJlc3NGb3Iobm9kZS51bmxpbmtlZExvY2FsKCkpLCByZXN1bHQuZ3ByKCkpOwogICAgICAg
ICAKICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsK
ICAgICAgICAgYnJlYWs7CkBAIC0yMzYwLDE0ICsyMzYxLDE0IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIGlmIChpc0NlbGxTcGVjdWxhdGlv
bihwcmVkaWN0ZWRUeXBlKSkgewogICAgICAgICAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5k
IGNlbGwodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgICAgICAgICAgR1BSUmVnIGNlbGxH
UFIgPSBjZWxsLmdwcigpOwotICAgICAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKGNlbGxHUFIs
IEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKG5vZGUubG9jYWwoKSkpOworICAgICAgICAgICAgICAg
IG1faml0LnN0b3JlNjQoY2VsbEdQUiwgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Iobm9kZS5sb2Nh
bCgpKSk7CiAgICAgICAgICAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOwogICAgICAg
ICAgICAgICAgIHJlY29yZFNldExvY2FsKG5vZGUubG9jYWwoKSwgVmFsdWVTb3VyY2UoQ2VsbElu
SlNTdGFjaykpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgaWYgKGlzQm9vbGVhblNwZWN1bGF0aW9uKHByZWRpY3RlZFR5cGUpKSB7CiAgICAgICAg
ICAgICAgICAgU3BlY3VsYXRlQm9vbGVhbk9wZXJhbmQgYm9vbGVhbih0aGlzLCBub2RlLmNoaWxk
MSgpKTsKLSAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZVB0cihib29sZWFuLmdwcigpLCBKSVRD
b21waWxlcjo6YWRkcmVzc0Zvcihub2RlLmxvY2FsKCkpKTsKKyAgICAgICAgICAgICAgICBtX2pp
dC5zdG9yZTY0KGJvb2xlYW4uZ3ByKCksIEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKG5vZGUubG9j
YWwoKSkpOwogICAgICAgICAgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKICAgICAg
ICAgICAgICAgICByZWNvcmRTZXRMb2NhbChub2RlLmxvY2FsKCksIFZhbHVlU291cmNlKEJvb2xl
YW5JbkpTU3RhY2spKTsKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTIzNzUsNyArMjM3Niw3
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgfQog
ICAgICAgICAKICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS5jaGlsZDEo
KSk7Ci0gICAgICAgIG1faml0LnN0b3JlUHRyKHZhbHVlLmdwcigpLCBKSVRDb21waWxlcjo6YWRk
cmVzc0Zvcihub2RlLmxvY2FsKCkpKTsKKyAgICAgICAgbV9qaXQuc3RvcmU2NCh2YWx1ZS5ncHIo
KSwgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Iobm9kZS5sb2NhbCgpKSk7CiAgICAgICAgIG5vUmVz
dWx0KG1fY29tcGlsZUluZGV4KTsKIAogICAgICAgICByZWNvcmRTZXRMb2NhbChub2RlLmxvY2Fs
KCksIFZhbHVlU291cmNlKFZhbHVlSW5KU1N0YWNrKSk7CkBAIC0yNDc1LDEwICsyNDc2LDEwIEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICBjYXNlIENoZWNr
TnVtYmVyOiB7CiAgICAgICAgIGlmICghaXNOdW1iZXJTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5v
ZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkgewogICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQg
b3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwotICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAg
aXNJbnRlZ2VyID0gbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWws
IG9wMS5ncHIoKSwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKKyAgICAgICAgICAg
IEpJVENvbXBpbGVyOjpKdW1wIGlzSW50ZWdlciA9IG1faml0LmJyYW5jaDY0KE1hY3JvQXNzZW1i
bGVyOjpBYm92ZU9yRXF1YWwsIG9wMS5ncHIoKSwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lz
dGVyKTsKICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCiAgICAgICAgICAgICAgICAgQmFk
VHlwZSwgSlNWYWx1ZVJlZ3Mob3AxLmdwcigpKSwgbm9kZS5jaGlsZDEoKS5pbmRleCgpLAotICAg
ICAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIG9w
MS5ncHIoKSwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSk7CisgICAgICAgICAgICAg
ICAgbV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBvcDEuZ3ByKCksIEdQ
UkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlcikpOwogICAgICAgICAgICAgaXNJbnRlZ2VyLmxp
bmsoJm1faml0KTsKICAgICAgICAgfQogICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7
CkBAIC0yNzEwLDggKzI3MTEsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUm
IG5vZGUpCiAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVl
UmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1
YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBCdXR0
ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKSk7CiAgICAgICAgICAgICAKICAgICAgICAg
ICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0gICAgICAgICAgICBtX2ppdC5sb2FkUHRy
KE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3Jv
QXNzZW1ibGVyOjpTY2FsZVB0ciksIHJlc3VsdC5ncHIoKSk7Ci0gICAgICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5j
aFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHJlc3VsdC5ncHIoKSkpOworICAgICAgICAg
ICAgbV9qaXQubG9hZDY0KE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJv
cGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0KSwgcmVzdWx0LmdwcigpKTsKKyAg
ICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3V0T2ZCb3VuZHMsIEpTVmFsdWVSZWdzKCksIE5v
Tm9kZSwgbV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpaZXJvLCByZXN1bHQuZ3By
KCkpKTsKICAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJ
bmRleCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMjc1NSw4ICsyNzU2LDgg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAg
c3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2pp
dC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5n
dGhPZmZzZXQoKSkpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJl
c3VsdCh0aGlzKTsKLSAgICAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkJh
c2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRy
LCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpLCByZXN1bHQuZ3By
KCkpOwotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJl
Z3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBy
ZXN1bHQuZ3ByKCkpKTsKKyAgICAgICAgICAgIG1faml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6
QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNF
aWdodCwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSwgcmVzdWx0
LmdwcigpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3V0T2ZCb3VuZHMsIEpTVmFs
dWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpaZXJv
LCByZXN1bHQuZ3ByKCkpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAganNWYWx1ZVJlc3Vs
dChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAt
MjkwMCw3ICsyOTAxLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2Rl
KQogICAgICAgICAgICAgICAgIC8vIFN0b3JlIHRoZSB2YWx1ZSB0byB0aGUgYXJyYXkuCiAgICAg
ICAgICAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7CiAgICAgICAg
ICAgICAgICAgR1BSUmVnIHZhbHVlUmVnID0gdmFsdWUuZ3ByKCk7Ci0gICAgICAgICAgICAgICAg
bV9qaXQuc3RvcmVQdHIodmFsdWVSZWcsIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFn
ZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0cikpOworICAgICAgICAg
ICAgICAgIG1faml0LnN0b3JlNjQodmFsdWVSZWcsIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgo
c3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0KSk7CiAg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgp
OwogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjk1MSw3ICsyOTUyLDcgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgICAgIC8vIFN0b3Jl
IHRoZSB2YWx1ZSB0byB0aGUgYXJyYXkuCiAgICAgICAgICAgICAgICAgR1BSUmVnIHByb3BlcnR5
UmVnID0gcHJvcGVydHkuZ3ByKCk7CiAgICAgICAgICAgICAgICAgR1BSUmVnIHZhbHVlUmVnID0g
dmFsdWUuZ3ByKCk7Ci0gICAgICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIodmFsdWVSZWcsIE1h
Y3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNz
ZW1ibGVyOjpTY2FsZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3Jb
MF0pKSk7CisgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmU2NCh2YWx1ZVJlZywgTWFjcm9Bc3Nl
bWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6
OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSkp
OwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUlu
ZGV4KTsKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTMwMTMsNyArMzAxNCw3IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBPQkpFQ1RfT0ZGU0VUT0YoQXJndW1lbnRzLCBt
X3JlZ2lzdGVycykpLAogICAgICAgICAgICAgICAgIHNjcmF0Y2hSZWcpOwogICAgICAgICAgICAg
Ci0gICAgICAgICAgICBtX2ppdC5zdG9yZVB0cigKKyAgICAgICAgICAgIG1faml0LnN0b3JlNjQo
CiAgICAgICAgICAgICAgICAgdmFsdWVSZWcsCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkJhc2VJbmRleCgKICAgICAgICAgICAgICAgICAgICAgc2NyYXRjaFJlZywgc2NyYXRjaDJS
ZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LApAQCAtMzEzOSwxMCArMzE0MCwxMCBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIGNhc2UgQXJy
YXk6OkFycmF5V2l0aENvbnRpZ3VvdXNPdXRPZkJvdW5kczogewogICAgICAgICAgICAgbV9qaXQu
bG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEJ1dHRlcmZseTo6b2Zm
c2V0T2ZQdWJsaWNMZW5ndGgoKSksIHN0b3JhZ2VMZW5ndGhHUFIpOwogICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6Okp1bXAgc2xvd1BhdGggPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxl
cjo6QWJvdmVPckVxdWFsLCBzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhzdG9yYWdlR1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9mVmVjdG9yTGVuZ3RoKCkpKTsKLSAgICAg
ICAgICAgIG1faml0LnN0b3JlUHRyKHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4
KHN0b3JhZ2VHUFIsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0cikp
OworICAgICAgICAgICAgbV9qaXQuc3RvcmU2NCh2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkJh
c2VJbmRleChzdG9yYWdlR1BSLCBzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VGlt
ZXNFaWdodCkpOwogICAgICAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBzdG9y
YWdlTGVuZ3RoR1BSKTsKICAgICAgICAgICAgIG1faml0LnN0b3JlMzIoc3RvcmFnZUxlbmd0aEdQ
UiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQnV0dGVyZmx5OjpvZmZzZXRP
ZlB1YmxpY0xlbmd0aCgpKSk7Ci0gICAgICAgICAgICBtX2ppdC5vclB0cihHUFJJbmZvOjp0YWdU
eXBlTnVtYmVyUmVnaXN0ZXIsIHN0b3JhZ2VMZW5ndGhHUFIpOworICAgICAgICAgICAgbV9qaXQu
b3I2NChHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHN0b3JhZ2VMZW5ndGhHUFIpOwog
ICAgICAgICAgICAgCiAgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKICAgICAgICAg
ICAgICAgICBzbG93UGF0aENhbGwoCkBAIC0zMTYyLDEyICszMTYzLDEyIEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgCiAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcCBzbG93UGF0aCA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVy
OjpBYm92ZU9yRXF1YWwsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KHN0b3JhZ2VHUFIsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKTsKICAgICAg
ICAgCi0gICAgICAgICAgICBtX2ppdC5zdG9yZVB0cih2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6
OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6
U2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSkpOwor
ICAgICAgICAgICAgbV9qaXQuc3RvcmU2NCh2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJ
bmRleChzdG9yYWdlR1BSLCBzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNF
aWdodCwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSk7CiAgICAg
ICAgIAogICAgICAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBzdG9yYWdlTGVu
Z3RoR1BSKTsKICAgICAgICAgICAgIG1faml0LnN0b3JlMzIoc3RvcmFnZUxlbmd0aEdQUiwgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZz
ZXQoKSkpOwogICAgICAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdl
LCBtX251bVZhbHVlc0luVmVjdG9yKSkpOwotICAgICAgICAgICAgbV9qaXQub3JQdHIoR1BSSW5m
bzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBzdG9yYWdlTGVuZ3RoR1BSKTsKKyAgICAgICAgICAg
IG1faml0Lm9yNjQoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBzdG9yYWdlTGVuZ3Ro
R1BSKTsKICAgICAgICAgCiAgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKICAgICAg
ICAgICAgICAgICBzbG93UGF0aENhbGwoCkBAIC0zMjA2LDE1ICszMjA3LDE1IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIG1faml0LnN1YjMy
KFRydXN0ZWRJbW0zMigxKSwgdmFsdWVHUFIpOwogICAgICAgICAgICAgbV9qaXQuc3RvcmUzMigK
ICAgICAgICAgICAgICAgICB2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFn
ZUdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSk7Ci0gICAgICAgICAgICBt
X2ppdC5sb2FkUHRyKAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgo
c3RvcmFnZUdQUiwgdmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciksCisgICAgICAg
ICAgICBtX2ppdC5sb2FkNjQoCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJ
bmRleChzdG9yYWdlR1BSLCB2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQpLAog
ICAgICAgICAgICAgICAgIHZhbHVlR1BSKTsKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpK
dW1wIHNsb3dDYXNlID0gbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVybywg
dmFsdWVHUFIpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc2xvd0Nhc2UgPSBt
X2ppdC5icmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHZhbHVlR1BSKTsKIAogICAg
ICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCiAgICAgICAgICAgICAgICAgc2xvd1BhdGhN
b3ZlKAogICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWRDYXNlLCB0aGlzLAotICAgICAgICAg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSkpLCB2YWx1ZUdQUikpOworICAgICAgICAgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKSksIHZh
bHVlR1BSKSk7CiAgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKICAgICAgICAgICAg
ICAgICBzbG93UGF0aENhbGwoCiAgICAgICAgICAgICAgICAgICAgIHNsb3dDYXNlLCB0aGlzLCBv
cGVyYXRpb25BcnJheVBvcEFuZFJlY292ZXJMZW5ndGgsIHZhbHVlR1BSLCBiYXNlR1BSKSk7CkBA
IC0zMjM3LDE4ICszMjM4LDE4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYg
bm9kZSkKICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7CiAgICAg
ICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpB
Ym92ZU9yRXF1YWwsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0
b3JhZ2VHUFIsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKSk7CiAgICAgICAg
IAotICAgICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0
b3JhZ2VHUFIsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwgT0JK
RUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSwgdmFsdWVHUFIpOwotICAg
ICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1i
bGVyOjpaZXJvLCB2YWx1ZUdQUikpOworICAgICAgICAgICAgbV9qaXQubG9hZDY0KE1hY3JvQXNz
ZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3Nl
bWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9y
WzBdKSksIHZhbHVlR1BSKTsKKyAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJh
bmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpaZXJvLCB2YWx1ZUdQUikpOwogICAgICAgICAKICAg
ICAgICAgICAgIG1faml0LnN0b3JlMzIoc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSkpOwogICAg
ICAgICAKLSAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tUHRyKDApLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHN0b3JhZ2VM
ZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFycmF5
U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSk7CisgICAgICAgICAgICBtX2ppdC5zdG9yZTY0KE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoKGludDY0X3QpMCksIE1hY3JvQXNzZW1ibGVyOjpCYXNl
SW5kZXgoc3RvcmFnZUdQUiwgc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVz
RWlnaHQsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSkpOwogICAg
ICAgICAgICAgbV9qaXQuc3ViMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigxKSwgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3Rv
cmFnZSwgbV9udW1WYWx1ZXNJblZlY3RvcikpKTsKICAgICAgICAgCiAgICAgICAgICAgICBhZGRT
bG93UGF0aEdlbmVyYXRvcigKICAgICAgICAgICAgICAgICBzbG93UGF0aE1vdmUoCiAgICAgICAg
ICAgICAgICAgICAgIHVuZGVmaW5lZENhc2UsIHRoaXMsCi0gICAgICAgICAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KSksIHZhbHVlR1BSKSk7CisgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpKSwgdmFsdWVHUFIpKTsKICAg
ICAgICAgCiAgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKICAgICAgICAgICAgICAg
ICBzbG93UGF0aENhbGwoCkBAIC0zMzQxLDcgKzMzNDIsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICAKICAgICAgICAgICAgIG1faml0Lm1v
dmUob3AxLmdwcigpLCByZXN1bHQuZ3ByKCkpOwogICAgICAgICAgICAgaWYgKG9wMS5mb3JtYXQo
KSA9PSBEYXRhRm9ybWF0SW50ZWdlcikKLSAgICAgICAgICAgICAgICBtX2ppdC5vclB0cihHUFJJ
bmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAgICAg
ICAgbV9qaXQub3I2NChHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHJlc3VsdC5ncHIo
KSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0Lmdwcigp
LCBtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTMzNjAsNyArMzM2MSw3
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgaWYg
KCEobV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSAmIH4oU3BlY051bWJlciB8
IFNwZWNCb29sZWFuKSkpCiAgICAgICAgICAgICBtX2ppdC5tb3ZlKG9wMUdQUiwgcmVzdWx0R1BS
KTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBhbHJl
YWR5UHJpbWl0aXZlID0gbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVy
bywgb3AxR1BSLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpOworICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6Okp1bXAgYWxyZWFkeVByaW1pdGl2ZSA9IG1faml0LmJyYW5jaFRlc3Q2NChNYWNy
b0Fzc2VtYmxlcjo6Tm9uWmVybywgb3AxR1BSLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpOwog
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm90UHJpbWl0aXZlID0gbV9qaXQuYnJh
bmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
b3AxR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKTsKICAg
ICAgICAgICAgIAogICAgICAgICAgICAgYWxyZWFkeVByaW1pdGl2ZS5saW5rKCZtX2ppdCk7CkBA
IC0zMzk3LDcgKzMzOTgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5v
ZGUpCiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG9wZXJhbmRJZHggPSAwOyBvcGVyYW5kSWR4
IDwgbm9kZS5udW1DaGlsZHJlbigpOyArK29wZXJhbmRJZHgpIHsKICAgICAgICAgICAgICAgICBK
U1ZhbHVlT3BlcmFuZCBvcGVyYW5kKHRoaXMsIG1faml0LmdyYXBoKCkubV92YXJBcmdDaGlsZHJl
bltub2RlLmZpcnN0Q2hpbGQoKSArIG9wZXJhbmRJZHhdKTsKICAgICAgICAgICAgICAgICBHUFJS
ZWcgb3BHUFIgPSBvcGVyYW5kLmdwcigpOwotICAgICAgICAgICAgICAgIG1faml0LnN0b3JlUHRy
KG9wR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBzaXplb2YoSlNWYWx1
ZSkgKiBvcGVyYW5kSWR4KSk7CisgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmU2NChvcEdQUiwg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgc2l6ZW9mKEpTVmFsdWUpICogb3Bl
cmFuZElkeCkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICAvLyBZ
dWNrLCB3ZSBzaG91bGQgKnJlYWxseSogaGF2ZSBhIHdheSBvZiBhbHNvIHJldHVybmluZyB0aGUg
c3RvcmFnZUdQUi4gQnV0CkBAIC0zNDI4LDcgKzM0MjksNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICBHUFJSZWcgb3BHUFIgPSBvcGVyYW5k
LmdwcigpOwogICAgICAgICAgICAgb3BlcmFuZC51c2UoKTsKICAgICAgICAgICAgIAotICAgICAg
ICAgICAgbV9qaXQuc3RvcmVQdHIob3BHUFIsIGJ1ZmZlciArIG9wZXJhbmRJZHgpOworICAgICAg
ICAgICAgbV9qaXQuc3RvcmU2NChvcEdQUiwgYnVmZmVyICsgb3BlcmFuZElkeCk7CiAgICAgICAg
IH0KICAgICAgICAgCiAgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CkBAIC0zNTI4LDcgKzM1Mjks
NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAg
ICBHUFJSZWcgb3BHUFIgPSBvcGVyYW5kLmdwcigpOwogICAgICAgICAgICAgb3BlcmFuZC51c2Uo
KTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIob3BHUFIsIGJ1ZmZl
ciArIG9wZXJhbmRJZHgpOworICAgICAgICAgICAgbV9qaXQuc3RvcmU2NChvcEdQUiwgYnVmZmVy
ICsgb3BlcmFuZElkeCk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGZsdXNoUmVnaXN0
ZXJzKCk7CkBAIC0zNTczLDggKzM1NzQsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
KE5vZGUmIG5vZGUpCiAgICAgICAgICAgICAKICAgICAgICAgICAgIEpTVmFsdWUqIGRhdGEgPSBt
X2ppdC5jb2RlQmxvY2soKS0+Y29uc3RhbnRCdWZmZXIobm9kZS5zdGFydENvbnN0YW50KCkpOwog
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgbm9kZS5udW1Db25z
dGFudHMoKTsgKytpbmRleCkgewotICAgICAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKAotICAg
ICAgICAgICAgICAgICAgICBJbW1QdHIoYml0d2lzZV9jYXN0PHZvaWQqPihKU1ZhbHVlOjplbmNv
ZGUoZGF0YVtpbmRleF0pKSksCisgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmU2NCgKKyAgICAg
ICAgICAgICAgICAgICAgSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGRhdGFbaW5kZXhdKSksCiAgICAg
ICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIHNpemVv
ZihKU1ZhbHVlKSAqIGluZGV4KSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTM2
MTgsOCArMzYxOSw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkK
ICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKCFpc090aGVyU3BlY3VsYXRpb24obV9zdGF0
ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpIHsKICAgICAgICAgICAgICAgICBtX2pp
dC5tb3ZlKHRoaXNWYWx1ZUdQUiwgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICAgICAgbV9qaXQu
YW5kUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoflRhZ0JpdFVuZGVmaW5lZCksIHNj
cmF0Y2hHUFIpOwotICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNW
YWx1ZVJlZ3ModGhpc1ZhbHVlR1BSKSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoUHRyKE1h
Y3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW1QdHIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oVmFsdWVOdWxsKSkpKTsKKyAgICAgICAg
ICAgICAgICBtX2ppdC5hbmQ2NChNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKH5UYWdCaXRV
bmRlZmluZWQpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNr
KEJhZFR5cGUsIEpTVmFsdWVSZWdzKHRoaXNWYWx1ZUdQUiksIG5vZGUuY2hpbGQxKCksIG1faml0
LmJyYW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgc2NyYXRjaEdQUiwgTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW02NChWYWx1ZU51bGwpKSk7CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAKICAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1Q
dHIobV9qaXQuZ2xvYmFsVGhpc09iamVjdEZvcihub2RlLmNvZGVPcmlnaW4pKSwgc2NyYXRjaEdQ
Uik7CkBAIC0zNzE5LDcgKzM3MjAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5v
ZGUmIG5vZGUpCiAgICAgICAgIGlmIChjaGVja1RvcExldmVsICYmIHNraXAtLSkgewogICAgICAg
ICAgICAgSklUQ29tcGlsZXI6Okp1bXAgYWN0aXZhdGlvbk5vdENyZWF0ZWQ7CiAgICAgICAgICAg
ICBpZiAoY2hlY2tUb3BMZXZlbCkKLSAgICAgICAgICAgICAgICBhY3RpdmF0aW9uTm90Q3JlYXRl
ZCA9IG1faml0LmJyYW5jaFRlc3RQdHIoSklUQ29tcGlsZXI6Olplcm8sIEpJVENvbXBpbGVyOjph
ZGRyZXNzRm9yKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4obV9qaXQuY29kZUJsb2NrKCkt
PmFjdGl2YXRpb25SZWdpc3RlcigpKSkpOworICAgICAgICAgICAgICAgIGFjdGl2YXRpb25Ob3RD
cmVhdGVkID0gbV9qaXQuYnJhbmNoVGVzdDY0KEpJVENvbXBpbGVyOjpaZXJvLCBKSVRDb21waWxl
cjo6YWRkcmVzc0ZvcihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KG1faml0LmNvZGVCbG9j
aygpLT5hY3RpdmF0aW9uUmVnaXN0ZXIoKSkpKTsKICAgICAgICAgICAgIG1faml0LmxvYWRQdHIo
SklUQ29tcGlsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSks
IHJlc3VsdEdQUik7CiAgICAgICAgICAgICBhY3RpdmF0aW9uTm90Q3JlYXRlZC5saW5rKCZtX2pp
dCk7CiAgICAgICAgIH0KQEAgLTM3NDUsNyArMzc0Niw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgR1BSUmVnIHJlZ2lzdGVyc0dQUiA9IHJlZ2lz
dGVycy5ncHIoKTsKICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKIAot
ICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKHJlZ2lzdGVyc0dQUiwg
bm9kZS52YXJOdW1iZXIoKSAqIHNpemVvZihSZWdpc3RlcikpLCByZXN1bHRHUFIpOworICAgICAg
ICBtX2ppdC5sb2FkNjQoSklUQ29tcGlsZXI6OkFkZHJlc3MocmVnaXN0ZXJzR1BSLCBub2RlLnZh
ck51bWJlcigpICogc2l6ZW9mKFJlZ2lzdGVyKSksIHJlc3VsdEdQUik7CiAgICAgICAgIGpzVmFs
dWVSZXN1bHQocmVzdWx0R1BSLCBtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgIGJyZWFrOwogICAg
IH0KQEAgLTM3NjAsNyArMzc2MSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9k
ZSYgbm9kZSkKICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CiAgICAgICAg
IEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaFJlZ2lzdGVyLmdwcigpOwogCi0gICAgICAgIG1f
aml0LnN0b3JlUHRyKHZhbHVlR1BSLCBKSVRDb21waWxlcjo6QWRkcmVzcyhyZWdpc3RlcnNHUFIs
IG5vZGUudmFyTnVtYmVyKCkgKiBzaXplb2YoUmVnaXN0ZXIpKSk7CisgICAgICAgIG1faml0LnN0
b3JlNjQodmFsdWVHUFIsIEpJVENvbXBpbGVyOjpBZGRyZXNzKHJlZ2lzdGVyc0dQUiwgbm9kZS52
YXJOdW1iZXIoKSAqIHNpemVvZihSZWdpc3RlcikpKTsKICAgICAgICAgd3JpdGVCYXJyaWVyKHNj
b3BlR1BSLCB2YWx1ZUdQUiwgbm9kZS5jaGlsZDMoKSwgV3JpdGVCYXJyaWVyRm9yVmFyaWFibGVB
Y2Nlc3MsIHNjcmF0Y2hHUFIpOwogICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CiAg
ICAgICAgIGJyZWFrOwpAQCAtMzc5NCw3ICszNzk1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAKICAgICAgICAgYmFzZS51c2UoKTsKICAgICAg
ICAgCi0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdENlbGwgPSBtX2ppdC5icmFuY2hUZXN0
UHRyKEpJVENvbXBpbGVyOjpOb25aZXJvLCBiYXNlR1BSLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0
ZXIpOworICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBub3RDZWxsID0gbV9qaXQuYnJhbmNoVGVz
dDY0KEpJVENvbXBpbGVyOjpOb25aZXJvLCBiYXNlR1BSLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0
ZXIpOwogICAgICAgICAKICAgICAgICAgY2FjaGVkR2V0QnlJZChub2RlLmNvZGVPcmlnaW4sIGJh
c2VHUFIsIHJlc3VsdEdQUiwgbm9kZS5pZGVudGlmaWVyTnVtYmVyKCksIG5vdENlbGwpOwogICAg
ICAgICAKQEAgLTM4MzYsNyArMzgzNyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUo
Tm9kZSYgbm9kZSkKICAgICAgICAgYmFzZS51c2UoKTsKICAgICAgICAgZmx1c2hSZWdpc3RlcnMo
KTsKICAgICAgICAgCi0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdENlbGwgPSBtX2ppdC5i
cmFuY2hUZXN0UHRyKEpJVENvbXBpbGVyOjpOb25aZXJvLCBiYXNlR1BSLCBHUFJJbmZvOjp0YWdN
YXNrUmVnaXN0ZXIpOworICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBub3RDZWxsID0gbV9qaXQu
YnJhbmNoVGVzdDY0KEpJVENvbXBpbGVyOjpOb25aZXJvLCBiYXNlR1BSLCBHUFJJbmZvOjp0YWdN
YXNrUmVnaXN0ZXIpOwogICAgICAgICAKICAgICAgICAgY2FjaGVkR2V0QnlJZChub2RlLmNvZGVP
cmlnaW4sIGJhc2VHUFIsIHJlc3VsdEdQUiwgbm9kZS5pZGVudGlmaWVyTnVtYmVyKCksIG5vdENl
bGwsIERvbnRTcGlsbCk7CiAgICAgICAgIApAQCAtMzk4NCw3ICszOTg1LDcgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAKICAgICAgICAgU3RvcmFn
ZUFjY2Vzc0RhdGEmIHN0b3JhZ2VBY2Nlc3NEYXRhID0gbV9qaXQuZ3JhcGgoKS5tX3N0b3JhZ2VB
Y2Nlc3NEYXRhW25vZGUuc3RvcmFnZUFjY2Vzc0RhdGFJbmRleCgpXTsKICAgICAgICAgCi0gICAg
ICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgc3RvcmFn
ZUFjY2Vzc0RhdGEub2Zmc2V0ICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSksIHJlc3VsdEdQUik7
CisgICAgICAgIG1faml0LmxvYWQ2NChKSVRDb21waWxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBz
dG9yYWdlQWNjZXNzRGF0YS5vZmZzZXQgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSwgcmVzdWx0
R1BSKTsKICAgICAgICAgCiAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBtX2NvbXBp
bGVJbmRleCk7CiAgICAgICAgIGJyZWFrOwpAQCAtNDAwNiw3ICs0MDA3LDcgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogCiAgICAgICAgIFN0b3JhZ2VBY2Nlc3NE
YXRhJiBzdG9yYWdlQWNjZXNzRGF0YSA9IG1faml0LmdyYXBoKCkubV9zdG9yYWdlQWNjZXNzRGF0
YVtub2RlLnN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXgoKV07CiAgICAgICAgIAotICAgICAgICBtX2pp
dC5zdG9yZVB0cih2YWx1ZUdQUiwgSklUQ29tcGlsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgc3Rv
cmFnZUFjY2Vzc0RhdGEub2Zmc2V0ICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkpOworICAgICAg
ICBtX2ppdC5zdG9yZTY0KHZhbHVlR1BSLCBKSVRDb21waWxlcjo6QWRkcmVzcyhzdG9yYWdlR1BS
LCBzdG9yYWdlQWNjZXNzRGF0YS5vZmZzZXQgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7CiAg
ICAgICAgIAogICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgIGJyZWFr
OwpAQCAtNDA1MSw3ICs0MDUyLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2Rl
JiBub2RlKQogICAgIGNhc2UgR2V0R2xvYmFsVmFyOiB7CiAgICAgICAgIEdQUlRlbXBvcmFyeSBy
ZXN1bHQodGhpcyk7CiAKLSAgICAgICAgbV9qaXQubG9hZFB0cihub2RlLnJlZ2lzdGVyUG9pbnRl
cigpLCByZXN1bHQuZ3ByKCkpOworICAgICAgICBtX2ppdC5sb2FkNjQobm9kZS5yZWdpc3RlclBv
aW50ZXIoKSwgcmVzdWx0LmdwcigpKTsKIAogICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5n
cHIoKSwgbV9jb21waWxlSW5kZXgpOwogICAgICAgICBicmVhazsKQEAgLTQwNjcsNyArNDA2OCw3
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAg
IHdyaXRlQmFycmllcihtX2ppdC5nbG9iYWxPYmplY3RGb3Iobm9kZS5jb2RlT3JpZ2luKSwgdmFs
dWUuZ3ByKCksIG5vZGUuY2hpbGQxKCksIFdyaXRlQmFycmllckZvclZhcmlhYmxlQWNjZXNzLCBz
Y3JhdGNoUmVnKTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgbV9qaXQuc3RvcmVQdHIo
dmFsdWUuZ3ByKCksIG5vZGUucmVnaXN0ZXJQb2ludGVyKCkpOworICAgICAgICBtX2ppdC5zdG9y
ZTY0KHZhbHVlLmdwcigpLCBub2RlLnJlZ2lzdGVyUG9pbnRlcigpKTsKIAogICAgICAgICBub1Jl
c3VsdChtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgIGJyZWFrOwpAQCAtNDA5Myw3ICs0MDk0LDcg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAg
d3JpdGVCYXJyaWVyKG1faml0Lmdsb2JhbE9iamVjdEZvcihub2RlLmNvZGVPcmlnaW4pLCB2YWx1
ZS5ncHIoKSwgbm9kZS5jaGlsZDEoKSwgV3JpdGVCYXJyaWVyRm9yVmFyaWFibGVBY2Nlc3MsIHNj
cmF0Y2hSZWcpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBtX2ppdC5zdG9yZVB0cih2
YWx1ZS5ncHIoKSwgbm9kZS5yZWdpc3RlclBvaW50ZXIoKSk7CisgICAgICAgIG1faml0LnN0b3Jl
NjQodmFsdWUuZ3ByKCksIG5vZGUucmVnaXN0ZXJQb2ludGVyKCkpOwogCiAgICAgICAgIG5vUmVz
dWx0KG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgYnJlYWs7CkBAIC00MTA3LDEwICs0MTA4LDEw
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICNpZiBERkdfRU5B
QkxFKEpJVF9BU1NFUlQpCiAgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwogICAg
ICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7Ci0gICAgICAgIG1faml0Lmxv
YWRQdHIobm9kZS5yZWdpc3RlclBvaW50ZXIoKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgIEpJVENv
bXBpbGVyOjpKdW1wIG9rID0gbV9qaXQuYnJhbmNoUHRyKAorICAgICAgICBtX2ppdC5sb2FkNjQo
bm9kZS5yZWdpc3RlclBvaW50ZXIoKSwgc2NyYXRjaEdQUik7CisgICAgICAgIEpJVENvbXBpbGVy
OjpKdW1wIG9rID0gbV9qaXQuYnJhbmNoNjQoCiAgICAgICAgICAgICBKSVRDb21waWxlcjo6RXF1
YWwsIHNjcmF0Y2hHUFIsCi0gICAgICAgICAgICBUcnVzdGVkSW1tUHRyKGJpdHdpc2VfY2FzdDx2
b2lkKj4oSlNWYWx1ZTo6ZW5jb2RlKG5vZGUucmVnaXN0ZXJQb2ludGVyKCktPmdldCgpKSkpKTsK
KyAgICAgICAgICAgIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUobm9kZS5yZWdpc3RlclBv
aW50ZXIoKS0+Z2V0KCkpKSk7CiAgICAgICAgIG1faml0LmJyZWFrcG9pbnQoKTsKICAgICAgICAg
b2subGluaygmbV9qaXQpOwogI2VuZGlmCkBAIC00MTQwLDkgKzQxNDEsOSBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZh
bHVlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRo
aXMpOwogICAgICAgICAKLSAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNDZWxsID0gbV9qaXQu
YnJhbmNoVGVzdFB0cihKSVRDb21waWxlcjo6WmVybywgdmFsdWUuZ3ByKCksIEdQUkluZm86OnRh
Z01hc2tSZWdpc3Rlcik7CisgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzQ2VsbCA9IG1faml0
LmJyYW5jaFRlc3Q2NChKSVRDb21waWxlcjo6WmVybywgdmFsdWUuZ3ByKCksIEdQUkluZm86OnRh
Z01hc2tSZWdpc3Rlcik7CiAgICAgICAgIAotICAgICAgICBtX2ppdC5jb21wYXJlUHRyKEpJVENv
bXBpbGVyOjpFcXVhbCwgdmFsdWUuZ3ByKCksIFRydXN0ZWRJbW0zMihWYWx1ZVVuZGVmaW5lZCks
IHJlc3VsdC5ncHIoKSk7CisgICAgICAgIG1faml0LmNvbXBhcmU2NChKSVRDb21waWxlcjo6RXF1
YWwsIHZhbHVlLmdwcigpLCBUcnVzdGVkSW1tMzIoVmFsdWVVbmRlZmluZWQpLCByZXN1bHQuZ3By
KCkpOwogICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOwogICAg
ICAgICAKICAgICAgICAgaXNDZWxsLmxpbmsoJm1faml0KTsKQEAgLTQxNzksOCArNDE4MCw4IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgR1BSVGVt
cG9yYXJ5IHJlc3VsdCh0aGlzLCB2YWx1ZSk7CiAgICAgICAgIAogICAgICAgICBtX2ppdC5tb3Zl
KHZhbHVlLmdwcigpLCByZXN1bHQuZ3ByKCkpOwotICAgICAgICBtX2ppdC54b3JQdHIoSklUQ29t
cGlsZXI6OlRydXN0ZWRJbW0zMihWYWx1ZUZhbHNlKSwgcmVzdWx0LmdwcigpKTsKLSAgICAgICAg
bV9qaXQudGVzdFB0cihKSVRDb21waWxlcjo6WmVybywgcmVzdWx0LmdwcigpLCBKSVRDb21waWxl
cjo6VHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSksIHJlc3VsdC5ncHIoKSk7
CisgICAgICAgIG1faml0LnhvcjY0KEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tMzIoVmFsdWVGYWxz
ZSksIHJlc3VsdC5ncHIoKSk7CisgICAgICAgIG1faml0LnRlc3Q2NChKSVRDb21waWxlcjo6WmVy
bywgcmVzdWx0LmdwcigpLCBKSVRDb21waWxlcjo6VHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGlu
dDMyX3Q+KH4xKSksIHJlc3VsdC5ncHIoKSk7CiAgICAgICAgIG1faml0Lm9yMzIoVHJ1c3RlZElt
bTMyKFZhbHVlRmFsc2UpLCByZXN1bHQuZ3ByKCkpOwogICAgICAgICBqc1ZhbHVlUmVzdWx0KHJl
c3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgsIERhdGFGb3JtYXRKU0Jvb2xlYW4pOwogICAgICAg
ICBicmVhazsKQEAgLTQxOTAsNyArNDE5MSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGUoTm9kZSYgbm9kZSkKICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS5j
aGlsZDEoKSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgdmFsdWUpOwogICAg
ICAgICAKLSAgICAgICAgbV9qaXQudGVzdFB0cihKSVRDb21waWxlcjo6Tm9uWmVybywgdmFsdWUu
Z3ByKCksIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgcmVzdWx0LmdwcigpKTsKKyAg
ICAgICAgbV9qaXQudGVzdDY0KEpJVENvbXBpbGVyOjpOb25aZXJvLCB2YWx1ZS5ncHIoKSwgR1BS
SW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCByZXN1bHQuZ3ByKCkpOwogICAgICAgICBtX2pp
dC5vcjMyKFRydXN0ZWRJbW0zMihWYWx1ZUZhbHNlKSwgcmVzdWx0LmdwcigpKTsKICAgICAgICAg
anNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4LCBEYXRhRm9ybWF0SlNC
b29sZWFuKTsKICAgICAgICAgYnJlYWs7CkBAIC00MjAwLDcgKzQyMDEsNyBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZh
bHVlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRo
aXMsIHZhbHVlKTsKICAgICAgICAgCi0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzTm90Q2Vs
bCA9IG1faml0LmJyYW5jaFRlc3RQdHIoSklUQ29tcGlsZXI6Ok5vblplcm8sIHZhbHVlLmdwcigp
LCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpOworICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBp
c05vdENlbGwgPSBtX2ppdC5icmFuY2hUZXN0NjQoSklUQ29tcGlsZXI6Ok5vblplcm8sIHZhbHVl
LmdwcigpLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpOwogICAgICAgICAKICAgICAgICAgbV9q
aXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyh2YWx1ZS5ncHIoKSwgSlNDZWxsOjpzdHJ1
Y3R1cmVPZmZzZXQoKSksIHJlc3VsdC5ncHIoKSk7CiAgICAgICAgIG1faml0LmNvbXBhcmU4KEpJ
VENvbXBpbGVyOjpFcXVhbCwgSklUQ29tcGlsZXI6OkFkZHJlc3MocmVzdWx0LmdwcigpLCBTdHJ1
Y3R1cmU6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKFN0cmluZ1R5cGUpLCBy
ZXN1bHQuZ3ByKCkpOwpAQCAtNDMwOCw3ICs0MzA5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBtX2ppdC5uZWczMihyZXNvbHZlSW5mb0dQUik7
CiAgICAgICAgIG1faml0LnNpZ25FeHRlbmQzMlRvUHRyKHJlc29sdmVJbmZvR1BSLCByZXNvbHZl
SW5mb0dQUik7CiAgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3MoZ2xv
YmFsT2JqZWN0R1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZXN1bHRHUFIpOwot
ICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpCYXNlSW5kZXgocmVzdWx0R1BSLCBy
ZXNvbHZlSW5mb0dQUiwgSklUQ29tcGlsZXI6OlNjYWxlUHRyLCAoZmlyc3RPdXRPZkxpbmVPZmZz
ZXQgLSAyKSAqIHN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKEpTVmFsdWUpKSksIHJlc3Vs
dEdQUik7CisgICAgICAgIG1faml0LmxvYWQ2NChKSVRDb21waWxlcjo6QmFzZUluZGV4KHJlc3Vs
dEdQUiwgcmVzb2x2ZUluZm9HUFIsIEpJVENvbXBpbGVyOjpUaW1lc0VpZ2h0LCAoZmlyc3RPdXRP
ZkxpbmVPZmZzZXQgLSAyKSAqIHN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKEpTVmFsdWUp
KSksIHJlc3VsdEdQUik7CiAgICAgICAgIAogICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigK
ICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKQEAgLTQzMzEsNyArNDMzMiw3IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgCiAgICAgICAgIG1faml0
Lm1vdmUodmFsdWVHUFIsIHJlc3VsdEdQUik7CiAgICAgICAgIAotICAgICAgICBKSVRDb21waWxl
cjo6SnVtcCBub3RDcmVhdGVkID0gbV9qaXQuYnJhbmNoVGVzdFB0cihKSVRDb21waWxlcjo6WmVy
bywgcmVzdWx0R1BSKTsKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgbm90Q3JlYXRlZCA9IG1f
aml0LmJyYW5jaFRlc3Q2NChKSVRDb21waWxlcjo6WmVybywgcmVzdWx0R1BSKTsKICAgICAgICAg
CiAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAogICAgICAgICAgICAgc2xvd1BhdGhDYWxs
KG5vdENyZWF0ZWQsIHRoaXMsIG9wZXJhdGlvbkNyZWF0ZUFjdGl2YXRpb24sIHJlc3VsdEdQUikp
OwpAQCAtNDM0OSw3ICs0MzUwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2Rl
JiBub2RlKQogICAgICAgICAKICAgICAgICAgbV9qaXQubW92ZSh2YWx1ZUdQUiwgcmVzdWx0R1BS
KTsKICAgICAgICAgCi0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdENyZWF0ZWQgPSBtX2pp
dC5icmFuY2hUZXN0UHRyKEpJVENvbXBpbGVyOjpaZXJvLCByZXN1bHRHUFIpOworICAgICAgICBK
SVRDb21waWxlcjo6SnVtcCBub3RDcmVhdGVkID0gbV9qaXQuYnJhbmNoVGVzdDY0KEpJVENvbXBp
bGVyOjpaZXJvLCByZXN1bHRHUFIpOwogICAgICAgICAKICAgICAgICAgaWYgKG5vZGUuY29kZU9y
aWdpbi5pbmxpbmVDYWxsRnJhbWUpIHsKICAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9y
KApAQCAtNDM3MywxNyArNDM3NCwxNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5v
ZGUmIG5vZGUpCiAgICAgICAgIEdQUlJlZyBhY3RpdmF0aW9uVmFsdWVHUFIgPSBhY3RpdmF0aW9u
VmFsdWUuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsK
IAotICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBub3RDcmVhdGVkID0gbV9qaXQuYnJhbmNoVGVz
dFB0cihKSVRDb21waWxlcjo6WmVybywgYWN0aXZhdGlvblZhbHVlR1BSKTsKKyAgICAgICAgSklU
Q29tcGlsZXI6Okp1bXAgbm90Q3JlYXRlZCA9IG1faml0LmJyYW5jaFRlc3Q2NChKSVRDb21waWxl
cjo6WmVybywgYWN0aXZhdGlvblZhbHVlR1BSKTsKIAogICAgICAgICBTaGFyZWRTeW1ib2xUYWJs
ZSogc3ltYm9sVGFibGUgPSBtX2ppdC5zeW1ib2xUYWJsZUZvcihub2RlLmNvZGVPcmlnaW4pOwog
ICAgICAgICBpbnQgcmVnaXN0ZXJzT2Zmc2V0ID0gSlNBY3RpdmF0aW9uOjpyZWdpc3RlcnNPZmZz
ZXQoc3ltYm9sVGFibGUpOwogCiAgICAgICAgIGludCBjYXB0dXJlRW5kID0gc3ltYm9sVGFibGUt
PmNhcHR1cmVFbmQoKTsKICAgICAgICAgZm9yIChpbnQgaSA9IHN5bWJvbFRhYmxlLT5jYXB0dXJl
U3RhcnQoKTsgaSA8IGNhcHR1cmVFbmQ7ICsraSkgewotICAgICAgICAgICAgbV9qaXQubG9hZFB0
cigKKyAgICAgICAgICAgIG1faml0LmxvYWQ2NCgKICAgICAgICAgICAgICAgICBKSVRDb21waWxl
cjo6QWRkcmVzcygKICAgICAgICAgICAgICAgICAgICAgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0
ZXIsIGkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICBtX2pp
dC5zdG9yZVB0cigKKyAgICAgICAgICAgIG1faml0LnN0b3JlNjQoCiAgICAgICAgICAgICAgICAg
c2NyYXRjaEdQUiwgSklUQ29tcGlsZXI6OkFkZHJlc3MoCiAgICAgICAgICAgICAgICAgICAgIGFj
dGl2YXRpb25WYWx1ZUdQUiwgcmVnaXN0ZXJzT2Zmc2V0ICsgaSAqIHNpemVvZihSZWdpc3Rlcikp
KTsKICAgICAgICAgfQpAQCAtNDQwMSw3ICs0NDAyLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBHUFJSZWcgdW5tb2RpZmllZEFyZ3VtZW50c1Zh
bHVlR1BSID0gdW5tb2RpZmllZEFyZ3VtZW50c1ZhbHVlLmdwcigpOwogICAgICAgICBHUFJSZWcg
YWN0aXZhdGlvblZhbHVlR1BSID0gYWN0aXZhdGlvblZhbHVlLmdwcigpOwogCi0gICAgICAgIEpJ
VENvbXBpbGVyOjpKdW1wIGNyZWF0ZWQgPSBtX2ppdC5icmFuY2hUZXN0UHRyKEpJVENvbXBpbGVy
OjpOb25aZXJvLCB1bm1vZGlmaWVkQXJndW1lbnRzVmFsdWVHUFIpOworICAgICAgICBKSVRDb21w
aWxlcjo6SnVtcCBjcmVhdGVkID0gbV9qaXQuYnJhbmNoVGVzdDY0KEpJVENvbXBpbGVyOjpOb25a
ZXJvLCB1bm1vZGlmaWVkQXJndW1lbnRzVmFsdWVHUFIpOwogCiAgICAgICAgIGlmIChub2RlLmNv
ZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKSB7CiAgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVy
YXRvcigKQEAgLTQ0MjcsNyArNDQyOCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUo
Tm9kZSYgbm9kZSkKICAgICAgICAgICAgICAgICAgICAgbV9qaXQuZ3JhcGgoKS5hcmd1bWVudHNS
ZWdpc3RlckZvcihub2RlLmNvZGVPcmlnaW4pKS5tX3R5cGUpKSB7CiAgICAgICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKAogICAgICAgICAgICAgICAgIEFyZ3VtZW50c0VzY2FwZWQsIEpTVmFsdWVS
ZWdzKCksIE5vTm9kZSwKLSAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0UHRyKAorICAg
ICAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3Q2NCgKICAgICAgICAgICAgICAgICAgICAgSklU
Q29tcGlsZXI6Ok5vblplcm8sCiAgICAgICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjphZGRy
ZXNzRm9yKAogICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQuYXJndW1lbnRzUmVnaXN0ZXJG
b3Iobm9kZS5jb2RlT3JpZ2luKSkpKTsKQEAgLTQ0NDQsMjIgKzQ0NDUsMTkgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBHUFJUZW1wb3JhcnkgcmVz
dWx0KHRoaXMpOwogICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwogICAg
ICAgICAKLSAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgY3JlYXRlZCA9IG1faml0LmJyYW5jaFRl
c3RQdHIoCisgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGNyZWF0ZWQgPSBtX2ppdC5icmFuY2hU
ZXN0NjQoCiAgICAgICAgICAgICBKSVRDb21waWxlcjo6Tm9uWmVybywKICAgICAgICAgICAgIEpJ
VENvbXBpbGVyOjphZGRyZXNzRm9yKAogICAgICAgICAgICAgICAgIG1faml0LmFyZ3VtZW50c1Jl
Z2lzdGVyRm9yKG5vZGUuY29kZU9yaWdpbikpKTsKICAgICAgICAgCiAgICAgICAgIGlmIChub2Rl
LmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKSB7CiAgICAgICAgICAgICBtX2ppdC5tb3ZlKAot
ICAgICAgICAgICAgICAgIEltbVB0cigKLSAgICAgICAgICAgICAgICAgICAgYml0d2lzZV9jYXN0
PHZvaWQqPigKLSAgICAgICAgICAgICAgICAgICAgICAgIEpTVmFsdWU6OmVuY29kZSgKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBqc051bWJlcihub2RlLmNvZGVPcmlnaW4uaW5saW5lQ2Fs
bEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpIC0gMSkpKSksCisgICAgICAgICAgICAgICAgSW1tNjQo
SlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKG5vZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUt
PmFyZ3VtZW50cy5zaXplKCkgLSAxKSkpLAogICAgICAgICAgICAgICAgIHJlc3VsdEdQUik7CiAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OnBh
eWxvYWRGb3IoSlNTdGFjazo6QXJndW1lbnRDb3VudCksIHJlc3VsdEdQUik7CiAgICAgICAgICAg
ICBtX2ppdC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlc3VsdEdQUik7Ci0gICAgICAgICAgICBt
X2ppdC5vclB0cihHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHJlc3VsdEdQUik7Cisg
ICAgICAgICAgICBtX2ppdC5vcjY0KEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgcmVz
dWx0R1BSKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgLy8gRklYTUU6IHRoZSBzbG93
IHBhdGggZ2VuZXJhdG9yIHNob3VsZCBwZXJmb3JtIGEgZm9yd2FyZCBzcGVjdWxhdGlvbiB0aGF0
IHRoZQpAQCAtNDQ4Niw3ICs0NDg0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShO
b2RlJiBub2RlKQogICAgICAgICAgICAgICAgICAgICBtX2ppdC5ncmFwaCgpLmFyZ3VtZW50c1Jl
Z2lzdGVyRm9yKG5vZGUuY29kZU9yaWdpbikpLm1fdHlwZSkpIHsKICAgICAgICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2soCiAgICAgICAgICAgICAgICAgQXJndW1lbnRzRXNjYXBlZCwgSlNWYWx1ZVJl
Z3MoKSwgTm9Ob2RlLAotICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3RQdHIoCisgICAg
ICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDY0KAogICAgICAgICAgICAgICAgICAgICBKSVRD
b21waWxlcjo6Tm9uWmVybywKICAgICAgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6OmFkZHJl
c3NGb3IoCiAgICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5hcmd1bWVudHNSZWdpc3RlckZv
cihub2RlLmNvZGVPcmlnaW4pKSkpOwpAQCAtNDUyNSw3ICs0NTIzLDcgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgICAgICAgICBPQkpFQ1Rf
T0ZGU0VUT0YoU2xvd0FyZ3VtZW50LCBpbmRleCkpLCAKICAgICAgICAgICAgICAgICByZXN1bHRH
UFIpOwogICAgICAgICAgICAgbV9qaXQuc2lnbkV4dGVuZDMyVG9QdHIocmVzdWx0R1BSLCByZXN1
bHRHUFIpOwotICAgICAgICAgICAgbV9qaXQubG9hZFB0cigKKyAgICAgICAgICAgIG1faml0Lmxv
YWQ2NCgKICAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6QmFzZUluZGV4KAogICAgICAgICAg
ICAgICAgICAgICBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgcmVzdWx0R1BSLCBKSVRDb21w
aWxlcjo6VGltZXNFaWdodCwgbV9qaXQub2Zmc2V0T2ZMb2NhbHMobm9kZS5jb2RlT3JpZ2luKSks
CiAgICAgICAgICAgICAgICAgcmVzdWx0R1BSKTsKQEAgLTQ1MzYsNyArNDUzNCw3IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgbV9qaXQubmVnMzIo
cmVzdWx0R1BSKTsKICAgICAgICAgbV9qaXQuc2lnbkV4dGVuZDMyVG9QdHIocmVzdWx0R1BSLCBy
ZXN1bHRHUFIpOwogICAgICAgICAgICAgCi0gICAgICAgIG1faml0LmxvYWRQdHIoCisgICAgICAg
IG1faml0LmxvYWQ2NCgKICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpCYXNlSW5kZXgoCiAgICAg
ICAgICAgICAgICAgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHJlc3VsdEdQUiwgSklUQ29t
cGlsZXI6OlRpbWVzRWlnaHQsIG1faml0Lm9mZnNldE9mQXJndW1lbnRzSW5jbHVkaW5nVGhpcyhu
b2RlLmNvZGVPcmlnaW4pKSwKICAgICAgICAgICAgIHJlc3VsdEdQUik7CkBAIC00NTU0LDcgKzQ1
NTIsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAg
IAogICAgICAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2xvd1BhdGg7CiAgICAgICAgIHNsb3dQ
YXRoLmFwcGVuZCgKLSAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3RQdHIoCisgICAgICAgICAg
ICBtX2ppdC5icmFuY2hUZXN0NjQoCiAgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6Ok5vblpl
cm8sCiAgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3IoCiAgICAgICAgICAg
ICAgICAgICAgIG1faml0LmFyZ3VtZW50c1JlZ2lzdGVyRm9yKG5vZGUuY29kZU9yaWdpbikpKSk7
CkBAIC00NTkwLDcgKzQ1ODgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUm
IG5vZGUpCiAgICAgICAgICAgICAgICAgICAgIE9CSkVDVF9PRkZTRVRPRihTbG93QXJndW1lbnQs
IGluZGV4KSksIAogICAgICAgICAgICAgICAgIHJlc3VsdEdQUik7CiAgICAgICAgICAgICBtX2pp
dC5zaWduRXh0ZW5kMzJUb1B0cihyZXN1bHRHUFIsIHJlc3VsdEdQUik7Ci0gICAgICAgICAgICBt
X2ppdC5sb2FkUHRyKAorICAgICAgICAgICAgbV9qaXQubG9hZDY0KAogICAgICAgICAgICAgICAg
IEpJVENvbXBpbGVyOjpCYXNlSW5kZXgoCiAgICAgICAgICAgICAgICAgICAgIEdQUkluZm86OmNh
bGxGcmFtZVJlZ2lzdGVyLCByZXN1bHRHUFIsIEpJVENvbXBpbGVyOjpUaW1lc0VpZ2h0LCBtX2pp
dC5vZmZzZXRPZkxvY2Fscyhub2RlLmNvZGVPcmlnaW4pKSwKICAgICAgICAgICAgICAgICByZXN1
bHRHUFIpOwpAQCAtNDYwMSw3ICs0NTk5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZShOb2RlJiBub2RlKQogICAgICAgICBtX2ppdC5uZWczMihyZXN1bHRHUFIpOwogICAgICAgICBt
X2ppdC5zaWduRXh0ZW5kMzJUb1B0cihyZXN1bHRHUFIsIHJlc3VsdEdQUik7CiAgICAgICAgIAot
ICAgICAgICBtX2ppdC5sb2FkUHRyKAorICAgICAgICBtX2ppdC5sb2FkNjQoCiAgICAgICAgICAg
ICBKSVRDb21waWxlcjo6QmFzZUluZGV4KAogICAgICAgICAgICAgICAgIEdQUkluZm86OmNhbGxG
cmFtZVJlZ2lzdGVyLCByZXN1bHRHUFIsIEpJVENvbXBpbGVyOjpUaW1lc0VpZ2h0LCBtX2ppdC5v
ZmZzZXRPZkFyZ3VtZW50c0luY2x1ZGluZ1RoaXMobm9kZS5jb2RlT3JpZ2luKSksCiAgICAgICAg
ICAgICByZXN1bHRHUFIpOwpAQCAtNDYzMiw3ICs0NjMwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgICAgIG1faml0LmdyYXBoKCkuYXJn
dW1lbnRzUmVnaXN0ZXJGb3Iobm9kZS5jb2RlT3JpZ2luKSkubV90eXBlKSk7CiAgICAgICAgIHNw
ZWN1bGF0aW9uQ2hlY2soCiAgICAgICAgICAgICBBcmd1bWVudHNFc2NhcGVkLCBKU1ZhbHVlUmVn
cygpLCBOb05vZGUsCi0gICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0UHRyKAorICAgICAgICAg
ICAgbV9qaXQuYnJhbmNoVGVzdDY0KAogICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpOb25a
ZXJvLAogICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKAogICAgICAgICAg
ICAgICAgICAgICBtX2ppdC5hcmd1bWVudHNSZWdpc3RlckZvcihub2RlLmNvZGVPcmlnaW4pKSkp
OwpAQCAtNDY1Myw3ICs0NjUxLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2Rl
JiBub2RlKQogICAgICAgICAKICAgICAgICAgbV9qaXQubW92ZSh2YWx1ZUdQUiwgcmVzdWx0R1BS
KTsKICAgICAgICAgCi0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdENyZWF0ZWQgPSBtX2pp
dC5icmFuY2hUZXN0UHRyKEpJVENvbXBpbGVyOjpaZXJvLCByZXN1bHRHUFIpOworICAgICAgICBK
SVRDb21waWxlcjo6SnVtcCBub3RDcmVhdGVkID0gbV9qaXQuYnJhbmNoVGVzdDY0KEpJVENvbXBp
bGVyOjpaZXJvLCByZXN1bHRHUFIpOwogICAgICAgICAKICAgICAgICAgYWRkU2xvd1BhdGhHZW5l
cmF0b3IoCiAgICAgICAgICAgICBzbG93UGF0aENhbGwoCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMTMxNDQ5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE2ODYsMTQgKzE2ODYsMTQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2hl
Y2tBcmd1bWVudFR5cGVzKAogICAgICAgICAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICBp
ZiAoaXNJbnQzMlNwZWN1bGF0aW9uKHByZWRpY3RlZFR5cGUpKQotICAgICAgICAgICAgc3BlY3Vs
YXRpb25DaGVjayhCYWRUeXBlLCB2YWx1ZVNvdXJjZSwgbm9kZUluZGV4LCBtX2ppdC5icmFuY2hQ
dHIoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBKSVRDb21waWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFs
UmVnaXN0ZXIpLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsKKyAgICAgICAgICAg
IHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgdmFsdWVTb3VyY2UsIG5vZGVJbmRleCwgbV9qaXQu
YnJhbmNoNjQoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBKSVRDb21waWxlcjo6YWRkcmVzc0Zvcih2
aXJ0dWFsUmVnaXN0ZXIpLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsKICAgICAg
ICAgZWxzZSBpZiAoaXNCb29sZWFuU3BlY3VsYXRpb24ocHJlZGljdGVkVHlwZSkpIHsKICAgICAg
ICAgICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOwotICAgICAgICAgICAgbV9qaXQubG9hZFB0
cihKSVRDb21waWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCB0ZW1wLmdwcigpKTsK
LSAgICAgICAgICAgIG1faml0LnhvclB0cihUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJf
dD4oVmFsdWVGYWxzZSkpLCB0ZW1wLmdwcigpKTsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hl
Y2soQmFkVHlwZSwgdmFsdWVTb3VyY2UsIG5vZGVJbmRleCwgbV9qaXQuYnJhbmNoVGVzdFB0cihN
YWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgdGVtcC5ncHIoKSwgVHJ1c3RlZEltbTMyKHN0YXRpY19j
YXN0PGludDMyX3Q+KH4xKSkpKTsKKyAgICAgICAgICAgIG1faml0LmxvYWQ2NChKSVRDb21waWxl
cjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCB0ZW1wLmdwcigpKTsKKyAgICAgICAgICAg
IG1faml0LnhvcjY0KFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90PihWYWx1ZUZhbHNl
KSksIHRlbXAuZ3ByKCkpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCB2
YWx1ZVNvdXJjZSwgbm9kZUluZGV4LCBtX2ppdC5icmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6
Ok5vblplcm8sIHRlbXAuZ3ByKCksIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+
MSkpKSk7CiAgICAgICAgIH0gZWxzZSBpZiAoaXNDZWxsU3BlY3VsYXRpb24ocHJlZGljdGVkVHlw
ZSkpCi0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIHZhbHVlU291cmNlLCBu
b2RlSW5kZXgsIG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIEpJ
VENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIEdQUkluZm86OnRhZ01hc2tS
ZWdpc3RlcikpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCB2YWx1ZVNv
dXJjZSwgbm9kZUluZGV4LCBtX2ppdC5icmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Ok5vblpl
cm8sIEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIEdQUkluZm86OnRh
Z01hc2tSZWdpc3RlcikpOwogI2Vsc2UKICAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihw
cmVkaWN0ZWRUeXBlKSkKICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgdmFs
dWVTb3VyY2UsIG5vZGVJbmRleCwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVx
dWFsLCBKSVRDb21waWxlcjo6dGFnRm9yKHZpcnR1YWxSZWdpc3RlciksIFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpJbnQzMlRhZykpKTsKQEAgLTE5NTMsMTAgKzE5NTMsMTAgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZVZhbHVlVG9JbnQzMgogICAgICAgICAgICAgRlBSVGVtcG9yYXJ5IHRl
bXBGcHIodGhpcyk7CiAgICAgICAgICAgICBGUFJSZWcgZnByID0gdGVtcEZwci5mcHIoKTsKIAot
ICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNJbnRlZ2VyID0gbV9qaXQuYnJhbmNoUHRy
KE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIGdwciwgR1BSSW5mbzo6dGFnVHlwZU51bWJl
clJlZ2lzdGVyKTsKKyAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzSW50ZWdlciA9IG1f
aml0LmJyYW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIGdwciwgR1BSSW5mbzo6
dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKIAogICAgICAgICAgICAgaWYgKCFpc051bWJlclNwZWN1
bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKQotICAgICAgICAg
ICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3MoZ3ByKSwgbm9kZS5j
aGlsZDEoKS5pbmRleCgpLCBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJv
LCBncHIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlcikpOworICAgICAgICAgICAgICAg
IHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3MoZ3ByKSwgbm9kZS5jaGlsZDEo
KS5pbmRleCgpLCBtX2ppdC5icmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIGdwciwg
R1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSk7CiAKICAgICAgICAgICAgIC8vIEZpcnN0
LCBpZiB3ZSBnZXQgaGVyZSB3ZSBoYXZlIGEgZG91YmxlIGVuY29kZWQgYXMgYSBKU1ZhbHVlCiAg
ICAgICAgICAgICBtX2ppdC5tb3ZlKGdwciwgcmVzdWx0R3ByKTsKQEAgLTIwOTksOCArMjA5OSw4
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVJbnQzMlRvRG91YmwKICAgICAgICAgQVNT
RVJUKGlzSW50MzJDb25zdGFudChub2RlLmNoaWxkMSgpLmluZGV4KCkpKTsKICAgICAgICAgRlBS
VGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7
Ci0gICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OkltbVB0cihyZWludGVycHJldF9j
YXN0PHZvaWQqPihyZWludGVycHJldERvdWJsZVRvSW50cHRyKHZhbHVlT2ZOdW1iZXJDb25zdGFu
dChub2RlLmNoaWxkMSgpLmluZGV4KCkpKSkpLCB0ZW1wLmdwcigpKTsKLSAgICAgICAgbV9qaXQu
bW92ZVB0clRvRG91YmxlKHRlbXAuZ3ByKCksIHJlc3VsdC5mcHIoKSk7CisgICAgICAgIG1faml0
Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OkltbTY0KHJlaW50ZXJwcmV0RG91YmxlVG9JbnQ2NCh2YWx1
ZU9mTnVtYmVyQ29uc3RhbnQobm9kZS5jaGlsZDEoKS5pbmRleCgpKSkpLCB0ZW1wLmdwcigpKTsK
KyAgICAgICAgbV9qaXQubW92ZTY0VG9Eb3VibGUodGVtcC5ncHIoKSwgcmVzdWx0LmZwcigpKTsK
ICAgICAgICAgZG91YmxlUmVzdWx0KHJlc3VsdC5mcHIoKSwgbV9jb21waWxlSW5kZXgpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQpAQCAtMjEyNCwxMyArMjEyNCwxMyBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlSW50MzJUb0RvdWJsCiAgICAgR1BSUmVnIHRlbXBHUFIgPSB0ZW1wLmdw
cigpOwogICAgIEZQUlJlZyByZXN1bHRGUFIgPSByZXN1bHQuZnByKCk7CiAgICAgCi0gICAgSklU
Q29tcGlsZXI6Okp1bXAgaXNJbnRlZ2VyID0gbV9qaXQuYnJhbmNoUHRyKAorICAgIEpJVENvbXBp
bGVyOjpKdW1wIGlzSW50ZWdlciA9IG1faml0LmJyYW5jaDY0KAogICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6QWJvdmVPckVxdWFsLCBvcDFHUFIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rl
cik7CiAgICAgCiAgICAgaWYgKCFpc051bWJlclNwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShu
b2RlLmNoaWxkMSgpKS5tX3R5cGUpKSB7CiAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCiAgICAg
ICAgICAgICBCYWRUeXBlLCBKU1ZhbHVlUmVncyhvcDFHUFIpLCBub2RlLmNoaWxkMSgpLAotICAg
ICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVybywgb3AxR1BS
LCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsKKyAgICAgICAgICAgIG1faml0LmJy
YW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6WmVybywgb3AxR1BSLCBHUFJJbmZvOjp0YWdUeXBl
TnVtYmVyUmVnaXN0ZXIpKTsKICAgICB9CiAgICAgCiAgICAgbV9qaXQubW92ZShvcDFHUFIsIHRl
bXBHUFIpOwpAQCAtMjQ2MCwyMCArMjQ2MCwxOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlSW5zdGFuY2VPZkZvCiAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGxvb3AoJm1faml0KTsK
ICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hSZWcsIEpT
Q2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzY3JhdGNoUmVnKTsKICNpZiBVU0UoSlNWQUxVRTY0
KQotICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaFJlZywg
U3RydWN0dXJlOjpwcm90b3R5cGVPZmZzZXQoKSksIHNjcmF0Y2hSZWcpOworICAgIG1faml0Lmxv
YWQ2NChNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoUmVnLCBTdHJ1Y3R1cmU6OnByb3Rv
dHlwZU9mZnNldCgpKSwgc2NyYXRjaFJlZyk7CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgaXNJ
bnN0YW5jZSA9IG1faml0LmJyYW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgc2NyYXRjaFJl
ZywgcHJvdG90eXBlUmVnKTsKKyAgICBtX2ppdC5icmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6
Olplcm8sIHNjcmF0Y2hSZWcsIEdQUkluZm86OnRhZ01hc2tSZWdpc3RlcikubGlua1RvKGxvb3As
ICZtX2ppdCk7CiAjZWxzZQogICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhzY3JhdGNoUmVnLCBTdHJ1Y3R1cmU6OnByb3RvdHlwZU9mZnNldCgpICsgT0JKRUNUX09GRlNF
VE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwgc2NyYXRjaFJlZyk7Ci0jZW5kaWYKICAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBpc0luc3RhbmNlID0gbV9qaXQuYnJhbmNoUHRyKE1hY3Jv
QXNzZW1ibGVyOjpFcXVhbCwgc2NyYXRjaFJlZywgcHJvdG90eXBlUmVnKTsKLSNpZiBVU0UoSlNW
QUxVRTY0KQotICAgIG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHNj
cmF0Y2hSZWcsIEdQUkluZm86OnRhZ01hc2tSZWdpc3RlcikubGlua1RvKGxvb3AsICZtX2ppdCk7
Ci0jZWxzZQogICAgIG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywg
c2NyYXRjaFJlZykubGlua1RvKGxvb3AsICZtX2ppdCk7CiAjZW5kaWYKICAgICAKICAgICAvLyBO
byBtYXRjaCAtIHJlc3VsdCBpcyBmYWxzZS4KICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIG1faml0
Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9v
bGVhbihmYWxzZSkpKSwgc2NyYXRjaFJlZyk7CisgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oZmFsc2UpKSksIHNjcmF0
Y2hSZWcpOwogI2Vsc2UKICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
MzIoMCksIHNjcmF0Y2hSZWcpOwogI2VuZGlmCkBAIC0yNDgxLDcgKzI0NzksNyBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlSW5zdGFuY2VPZkZvCiAgICAgCiAgICAgaXNJbnN0YW5jZS5s
aW5rKCZtX2ppdCk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBtX2ppdC5tb3ZlKE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tUHRyKEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkpKSwg
c2NyYXRjaFJlZyk7CisgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0
KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkpKSwgc2NyYXRjaFJlZyk7CiAjZWxzZQog
ICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigxKSwgc2NyYXRjaFJl
Zyk7CiAjZW5kaWYKQEAgLTI1MDcsOCArMjUwNSw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVJbnN0YW5jZU9mKE4KICAgICAgICAgCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAg
R1BSUmVnIHZhbHVlUmVnID0gdmFsdWUuZ3ByKCk7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpK
dW1wIGlzQ2VsbCA9IG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHZh
bHVlUmVnLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpOwotICAgICAgICBtX2ppdC5tb3ZlKE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oZmFs
c2UpKSksIHNjcmF0Y2hSZWcpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBpc0NlbGwg
PSBtX2ppdC5icmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHZhbHVlUmVnLCBHUFJJ
bmZvOjp0YWdNYXNrUmVnaXN0ZXIpOworICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihmYWxzZSkpKSwgc2NyYXRj
aFJlZyk7CiAjZWxzZQogICAgICAgICBHUFJSZWcgdmFsdWVUYWdSZWcgPSB2YWx1ZS50YWdHUFIo
KTsKICAgICAgICAgR1BSUmVnIHZhbHVlUmVnID0gdmFsdWUucGF5bG9hZEdQUigpOwpAQCAtMzA3
MSw3ICszMDY5LDcgQEAgYm9vbCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVN0cmljdEVxRm9yQwog
ICAgICAgICB9CiAKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICBicmFuY2hQdHIoY29uZGl0
aW9uLCBvcDEuZ3ByKCksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGJpdHdpc2VfY2Fz
dDx2b2lkKj4oSlNWYWx1ZTo6ZW5jb2RlKGNvbnN0YW50KSkpLCB0YWtlbik7CisgICAgICAgIGJy
YW5jaDY0KGNvbmRpdGlvbiwgb3AxLmdwcigpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0
KEpTVmFsdWU6OmVuY29kZShjb25zdGFudCkpLCB0YWtlbik7CiAjZWxzZQogICAgICAgICBHUFJS
ZWcgcGF5bG9hZEdQUiA9IG9wMS5wYXlsb2FkR1BSKCk7CiAgICAgICAgIEdQUlJlZyB0YWdHUFIg
PSBvcDEudGFnR1BSKCk7CkBAIC0zMTAxLDggKzMwOTksOCBAQCBib29sIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlU3RyaWN0RXFGb3JDCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBHUFJSZWcgb3Ax
R1BSID0gb3AxLmdwcigpOwogICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7Ci0g
ICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihiaXR3aXNlX2Nhc3Q8
dm9pZCo+KFZhbHVlRmFsc2UpKSwgcmVzdWx0R1BSKTsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cCBub3RFcXVhbCA9IG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIG9w
MUdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoYml0d2lzZV9jYXN0PHZvaWQqPihK
U1ZhbHVlOjplbmNvZGUoY29uc3RhbnQpKSkpOworICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW02NChWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcCBub3RFcXVhbCA9IG1faml0LmJyYW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpOb3RF
cXVhbCwgb3AxR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29k
ZShjb25zdGFudCkpKTsKICAgICBtX2ppdC5vcjMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
MzIoMSksIHJlc3VsdEdQUik7CiAgICAgbm90RXF1YWwubGluaygmbV9qaXQpOwogICAgIGpzVmFs
dWVSZXN1bHQocmVzdWx0R1BSLCBtX2NvbXBpbGVJbmRleCwgRGF0YUZvcm1hdEpTQm9vbGVhbik7
CkBAIC0zMjgyLDcgKzMyODAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlW
YWxPbkFyCiAgICAgICAgIHJlc3VsdFJlZyk7CiAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRUYWdS
ZWcsIHJlc3VsdFJlZywgbV9jb21waWxlSW5kZXgpOwogI2Vsc2UKLSAgICBtX2ppdC5sb2FkUHRy
KAorICAgIG1faml0LmxvYWQ2NCgKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleCgK
ICAgICAgICAgICAgIHNjcmF0Y2hSZWcsIHJlc3VsdFJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVz
RWlnaHQsCiAgICAgICAgICAgICBDYWxsRnJhbWU6OnRoaXNBcmd1bWVudE9mZnNldCgpICogc2l6
ZW9mKFJlZ2lzdGVyKSAtIHNpemVvZihSZWdpc3RlcikpLApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24gMTMxNDQ5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNv
cHkpCkBAIC03MSw2ICs3MSw4IEBAIHByaXZhdGU6CiAgICAgdHlwZWRlZiBKSVRDb21waWxlcjo6
SW1tMzIgSW1tMzI7CiAgICAgdHlwZWRlZiBKSVRDb21waWxlcjo6VHJ1c3RlZEltbVB0ciBUcnVz
dGVkSW1tUHRyOwogICAgIHR5cGVkZWYgSklUQ29tcGlsZXI6OkltbVB0ciBJbW1QdHI7CisgICAg
dHlwZWRlZiBKSVRDb21waWxlcjo6VHJ1c3RlZEltbTY0IFRydXN0ZWRJbW02NDsKKyAgICB0eXBl
ZGVmIEpJVENvbXBpbGVyOjpJbW02NCBJbW02NDsKIAogICAgIC8vIFRoZXNlIGNvbnN0YW50cyBh
cmUgdXNlZCB0byBzZXQgcHJpb3JpdGllcyBmb3Igc3BpbGwgb3JkZXIgZm9yCiAgICAgLy8gdGhl
IHJlZ2lzdGVyIGFsbG9jYXRvci4KQEAgLTM0Nyw5ICszNDksMTEgQEAgcHVibGljOgogICAgICAg
ICAgICAgQVNTRVJUKGluZm8uZ3ByKCkgPT0gc291cmNlKTsKICAgICAgICAgICAgIGlmIChyZWdp
c3RlckZvcm1hdCA9PSBEYXRhRm9ybWF0SW50ZWdlcikKICAgICAgICAgICAgICAgICBzcGlsbEFj
dGlvbiA9IFN0b3JlMzJQYXlsb2FkOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgQVNTRVJUKHJlZ2lzdGVyRm9ybWF0ICYgRGF0YUZvcm1hdEpTIHx8IHJlZ2lzdGVyRm9ybWF0
ID09IERhdGFGb3JtYXRDZWxsIHx8IHJlZ2lzdGVyRm9ybWF0ID09IERhdGFGb3JtYXRTdG9yYWdl
KTsKKyAgICAgICAgICAgIGVsc2UgaWYgKHJlZ2lzdGVyRm9ybWF0ID09IERhdGFGb3JtYXRDZWxs
IHx8IHJlZ2lzdGVyRm9ybWF0ID09IERhdGFGb3JtYXRTdG9yYWdlKQogICAgICAgICAgICAgICAg
IHNwaWxsQWN0aW9uID0gU3RvcmVQdHI7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
ICAgICBBU1NFUlQocmVnaXN0ZXJGb3JtYXQgJiBEYXRhRm9ybWF0SlMpOworICAgICAgICAgICAg
ICAgIHNwaWxsQWN0aW9uID0gU3RvcmU2NDsKICAgICAgICAgICAgIH0KICNlbGlmIFVTRShKU1ZB
TFVFMzJfNjQpCiAgICAgICAgICAgICBpZiAocmVnaXN0ZXJGb3JtYXQgJiBEYXRhRm9ybWF0SlMp
IHsKQEAgLTQxNCw3ICs0MTgsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgQVNTRVJUKHJl
Z2lzdGVyRm9ybWF0ID09IERhdGFGb3JtYXRKU0RvdWJsZSk7CiAgICAgICAgICAgICAgICAgZmls
bEFjdGlvbiA9IExvYWREb3VibGVCb3hEb3VibGU7CiAgICAgICAgICAgICB9IGVsc2UKLSAgICAg
ICAgICAgICAgICBmaWxsQWN0aW9uID0gTG9hZFB0cjsKKyAgICAgICAgICAgICAgICBmaWxsQWN0
aW9uID0gTG9hZDY0OwogI2Vsc2UKICAgICAgICAgICAgIEFTU0VSVChpbmZvLnRhZ0dQUigpID09
IHNvdXJjZSB8fCBpbmZvLnBheWxvYWRHUFIoKSA9PSBzb3VyY2UpOwogICAgICAgICAgICAgaWYg
KG5vZGUuaGFzQ29uc3RhbnQoKSkKQEAgLTUwMSw2ICs1MDUsMTEgQEAgcHVibGljOgogICAgICAg
ICBjYXNlIFN0b3JlUHRyOgogICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIocGxhbi5ncHIoKSwg
SklUQ29tcGlsZXI6OmFkZHJlc3NGb3IoYXQocGxhbi5ub2RlSW5kZXgoKSkudmlydHVhbFJlZ2lz
dGVyKCkpKTsKICAgICAgICAgICAgIGJyZWFrOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAg
IGNhc2UgU3RvcmU2NDoKKyAgICAgICAgICAgIG1faml0LnN0b3JlNjQocGxhbi5ncHIoKSwgSklU
Q29tcGlsZXI6OmFkZHJlc3NGb3IoYXQocGxhbi5ub2RlSW5kZXgoKSkudmlydHVhbFJlZ2lzdGVy
KCkpKTsKKyAgICAgICAgICAgIGJyZWFrOworI2VuZGlmCiAgICAgICAgIGNhc2UgU3RvcmVEb3Vi
bGU6CiAgICAgICAgICAgICBtX2ppdC5zdG9yZURvdWJsZShwbGFuLmZwcigpLCBKSVRDb21waWxl
cjo6YWRkcmVzc0ZvcihhdChwbGFuLm5vZGVJbmRleCgpKS52aXJ0dWFsUmVnaXN0ZXIoKSkpOwog
ICAgICAgICAgICAgYnJlYWs7CkBAIC01MjgsMjUgKzUzNywyNSBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICBicmVhazsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICBjYXNlIFNldFRydXN0ZWRK
U0NvbnN0YW50OgotICAgICAgICAgICAgbV9qaXQubW92ZSh2YWx1ZU9mSlNDb25zdGFudEFzSW1t
UHRyKHBsYW4ubm9kZUluZGV4KCkpLmFzVHJ1c3RlZEltbVB0cigpLCBwbGFuLmdwcigpKTsKKyAg
ICAgICAgICAgIG1faml0Lm1vdmUodmFsdWVPZkpTQ29uc3RhbnRBc0ltbTY0KHBsYW4ubm9kZUlu
ZGV4KCkpLmFzVHJ1c3RlZEltbTY0KCksIHBsYW4uZ3ByKCkpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgU2V0SlNDb25zdGFudDoKLSAgICAgICAgICAgIG1faml0Lm1vdmUodmFs
dWVPZkpTQ29uc3RhbnRBc0ltbVB0cihwbGFuLm5vZGVJbmRleCgpKSwgcGxhbi5ncHIoKSk7Cisg
ICAgICAgICAgICBtX2ppdC5tb3ZlKHZhbHVlT2ZKU0NvbnN0YW50QXNJbW02NChwbGFuLm5vZGVJ
bmRleCgpKSwgcGxhbi5ncHIoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBT
ZXREb3VibGVDb25zdGFudDoKLSAgICAgICAgICAgIG1faml0Lm1vdmUoSW1tUHRyKGJpdHdpc2Vf
Y2FzdDx2b2lkKj4odmFsdWVPZk51bWJlckNvbnN0YW50KHBsYW4ubm9kZUluZGV4KCkpKSksIGNh
blRyYW1wbGUpOwotICAgICAgICAgICAgbV9qaXQubW92ZVB0clRvRG91YmxlKGNhblRyYW1wbGUs
IHBsYW4uZnByKCkpOworICAgICAgICAgICAgbV9qaXQubW92ZShJbW02NCh2YWx1ZU9mTnVtYmVy
Q29uc3RhbnQocGxhbi5ub2RlSW5kZXgoKSkpLCBjYW5UcmFtcGxlKTsKKyAgICAgICAgICAgIG1f
aml0Lm1vdmU2NFRvRG91YmxlKGNhblRyYW1wbGUsIHBsYW4uZnByKCkpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGNhc2UgTG9hZDMyUGF5bG9hZEJveEludDoKICAgICAgICAgICAgIG1f
aml0LmxvYWQzMihKSVRDb21waWxlcjo6cGF5bG9hZEZvcihhdChwbGFuLm5vZGVJbmRleCgpKS52
aXJ0dWFsUmVnaXN0ZXIoKSksIHBsYW4uZ3ByKCkpOwotICAgICAgICAgICAgbV9qaXQub3JQdHIo
R1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBwbGFuLmdwcigpKTsKKyAgICAgICAgICAg
IG1faml0Lm9yNjQoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBwbGFuLmdwcigpKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIExvYWREb3VibGVCb3hEb3VibGU6Ci0g
ICAgICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKGF0KHBsYW4u
bm9kZUluZGV4KCkpLnZpcnR1YWxSZWdpc3RlcigpKSwgcGxhbi5ncHIoKSk7Ci0gICAgICAgICAg
ICBtX2ppdC5zdWJQdHIoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBwbGFuLmdwcigp
KTsKKyAgICAgICAgICAgIG1faml0LmxvYWQ2NChKSVRDb21waWxlcjo6YWRkcmVzc0ZvcihhdChw
bGFuLm5vZGVJbmRleCgpKS52aXJ0dWFsUmVnaXN0ZXIoKSksIHBsYW4uZ3ByKCkpOworICAgICAg
ICAgICAgbV9qaXQuc3ViNjQoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBwbGFuLmdw
cigpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIExvYWRKU1VuYm94RG91Ymxl
OgotICAgICAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6YWRkcmVzc0ZvcihhdChw
bGFuLm5vZGVJbmRleCgpKS52aXJ0dWFsUmVnaXN0ZXIoKSksIGNhblRyYW1wbGUpOworICAgICAg
ICAgICAgbV9qaXQubG9hZDY0KEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKGF0KHBsYW4ubm9kZUlu
ZGV4KCkpLnZpcnR1YWxSZWdpc3RlcigpKSwgY2FuVHJhbXBsZSk7CiAgICAgICAgICAgICB1bmJv
eERvdWJsZShjYW5UcmFtcGxlLCBwbGFuLmZwcigpKTsKICAgICAgICAgICAgIGJyZWFrOwogI2Vs
c2UKQEAgLTU3OCw2ICs1ODcsMTEgQEAgcHVibGljOgogICAgICAgICBjYXNlIExvYWRQdHI6CiAg
ICAgICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKGF0KHBsYW4u
bm9kZUluZGV4KCkpLnZpcnR1YWxSZWdpc3RlcigpKSwgcGxhbi5ncHIoKSk7CiAgICAgICAgICAg
ICBicmVhazsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICBjYXNlIExvYWQ2NDoKKyAgICAg
ICAgICAgIG1faml0LmxvYWQ2NChKSVRDb21waWxlcjo6YWRkcmVzc0ZvcihhdChwbGFuLm5vZGVJ
bmRleCgpKS52aXJ0dWFsUmVnaXN0ZXIoKSksIHBsYW4uZ3ByKCkpOworICAgICAgICAgICAgYnJl
YWs7CisjZW5kaWYKICAgICAgICAgY2FzZSBMb2FkRG91YmxlOgogICAgICAgICAgICAgbV9qaXQu
bG9hZERvdWJsZShKSVRDb21waWxlcjo6YWRkcmVzc0ZvcihhdChwbGFuLm5vZGVJbmRleCgpKS52
aXJ0dWFsUmVnaXN0ZXIoKSksIHBsYW4uZnByKCkpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC03
NTIsMTAgKzc2NiwxMCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGJveCBp
bnQzMiBhbmQgY2VsbCB2YWx1ZXMgLi4uCiAgICAgICAgICAgICAvLyBidXQgb24gSlNWQUxVRTY0
IGJveGluZyBhIGNlbGwgaXMgYSBuby1vcCEKICAgICAgICAgICAgIGlmIChzcGlsbEZvcm1hdCA9
PSBEYXRhRm9ybWF0SW50ZWdlcikKLSAgICAgICAgICAgICAgICBtX2ppdC5vclB0cihHUFJJbmZv
Ojp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHJlZyk7CisgICAgICAgICAgICAgICAgbV9qaXQub3I2
NChHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHJlZyk7CiAgICAgICAgICAgICAKICAg
ICAgICAgICAgIC8vIFNwaWxsIHRoZSB2YWx1ZSwgYW5kIHJlY29yZCBpdCBhcyBzcGlsbGVkIGlu
IGl0cyBib3hlZCBmb3JtLgotICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIocmVnLCBKSVRDb21w
aWxlcjo6YWRkcmVzc0ZvcihzcGlsbE1lKSk7CisgICAgICAgICAgICBtX2ppdC5zdG9yZTY0KHJl
ZywgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Ioc3BpbGxNZSkpOwogICAgICAgICAgICAgaW5mby5z
cGlsbCgqbV9zdHJlYW0sIHNwaWxsTWUsIChEYXRhRm9ybWF0KShzcGlsbEZvcm1hdCB8IERhdGFG
b3JtYXRKUykpOwogICAgICAgICAgICAgcmV0dXJuOwogI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkK
QEAgLTg2NSw5ICs4NzksOSBAQCBwdWJsaWM6CiAjZW5kaWYKIAogI2lmIFVTRShKU1ZBTFVFNjQp
Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OkltbVB0ciB2YWx1ZU9mSlNDb25zdGFudEFzSW1tUHRyKE5v
ZGVJbmRleCBub2RlSW5kZXgpCisgICAgTWFjcm9Bc3NlbWJsZXI6OkltbTY0IHZhbHVlT2ZKU0Nv
bnN0YW50QXNJbW02NChOb2RlSW5kZXggbm9kZUluZGV4KQogICAgIHsKLSAgICAgICAgcmV0dXJu
IE1hY3JvQXNzZW1ibGVyOjpJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlT2ZKU0NvbnN0YW50
KG5vZGVJbmRleCkpKTsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyOjpJbW02NChKU1Zh
bHVlOjplbmNvZGUodmFsdWVPZkpTQ29uc3RhbnQobm9kZUluZGV4KSkpOwogICAgIH0KICNlbmRp
ZgogCkBAIC0xMzM5LDYgKzEzNTMsMTEgQEAgcHVibGljOgogICAgICAgICBtX2ppdC5zZXR1cEFy
Z3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0
aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9CisgICAg
SklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FSiBvcGVyYXRp
b24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxKQorICAgIHsKKyAgICAgICAgbV9qaXQuc2V0
dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEpOworICAgICAgICByZXR1cm4gYXBwZW5kQ2Fs
bFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CisgICAgfQog
ICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oU19ERkdPcGVyYXRpb25fRUpKIG9w
ZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQogICAgIHsK
ICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIpOwpA
QCAtMTM1NCwxNCArMTM3MywxOSBAQCBwdWJsaWM6CiAgICAgICAgIG1faml0LnNldHVwQXJndW1l
bnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxX
aXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KKyAg
ICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VKSiBvcGVy
YXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMikKKyAgICB7Cisg
ICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyKTsKKyAg
ICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0
aW9uLCByZXN1bHQpOworICAgIH0KICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9u
KEpfREZHT3BlcmF0aW9uX0VKSiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcx
LCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyIGltbSkKICAgICB7Ci0gICAgICAgIG1faml0
LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbVB0cihzdGF0aWNfY2FzdDxjb25zdCB2b2lkKj4oSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVy
KGltbS5tX3ZhbHVlKSkpKSk7CisgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNT
dGF0ZShhcmcxLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShq
c051bWJlcihpbW0ubV92YWx1ZSkpKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4
Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9CiAgICAgSklU
Q29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FSkogb3BlcmF0aW9u
LCBHUFJSZWcgcmVzdWx0LCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyIGltbSwgR1BSUmVn
IGFyZzIpCiAgICAgewotICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUo
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoc3RhdGljX2Nhc3Q8Y29uc3Qgdm9pZCo+KEpT
VmFsdWU6OmVuY29kZShqc051bWJlcihpbW0ubV92YWx1ZSkpKSksIGFyZzIpOworICAgICAgICBt
X2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW02NChKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoaW1tLm1fdmFsdWUpKSksIGFyZzIpOwogICAg
ICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRp
b24sIHJlc3VsdCk7CiAgICAgfQogICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24o
Sl9ERkdPcGVyYXRpb25fRUNDIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEs
IEdQUlJlZyBhcmcyKQpAQCAtMjAzMCw2ICsyMDU0LDIwIEBAIHB1YmxpYzoKICAgICAgICAgbm90
VGFrZW4ubGluaygmbV9qaXQpOwogICAgIH0KICAgICAKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+CisgICAgdm9pZCBicmFuY2g2NChKSVRD
b21waWxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBUIGxlZnQsIFUgcmlnaHQsIEJsb2Nr
SW5kZXggZGVzdGluYXRpb24pCisgICAgeworICAgICAgICBpZiAoIWhhdmVFZGdlQ29kZVRvRW1p
dChkZXN0aW5hdGlvbikpCisgICAgICAgICAgICByZXR1cm4gYWRkQnJhbmNoKG1faml0LmJyYW5j
aDY0KGNvbmQsIGxlZnQsIHJpZ2h0KSwgZGVzdGluYXRpb24pOworICAgICAgICAKKyAgICAgICAg
SklUQ29tcGlsZXI6Okp1bXAgbm90VGFrZW4gPSBtX2ppdC5icmFuY2g2NChKSVRDb21waWxlcjo6
aW52ZXJ0KGNvbmQpLCBsZWZ0LCByaWdodCk7CisgICAgICAgIGVtaXRFZGdlQ29kZShkZXN0aW5h
dGlvbik7CisgICAgICAgIGFkZEJyYW5jaChtX2ppdC5qdW1wKCksIGRlc3RpbmF0aW9uKTsKKyAg
ICAgICAgbm90VGFrZW4ubGluaygmbV9qaXQpOworICAgIH0KKyNlbmRpZgorICAgIAogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+CiAgICAgdm9pZCBicmFuY2hQdHIoSklUQ29t
cGlsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24gY29uZCwgVCBsZWZ0LCBVIHJpZ2h0LCBCbG9ja0lu
ZGV4IGRlc3RpbmF0aW9uKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHVGh1bmtzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1RodW5rcy5jcHAJKHJldmlzaW9uIDEzMTQ0OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHVGh1bmtzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsOCArNDQsMTMgQEAgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmIG9zckV4aXRHZW5lcmF0aW9uVAogICAgIFNjcmF0Y2hCdWZmZXIqIHNj
cmF0Y2hCdWZmZXIgPSBnbG9iYWxEYXRhLT5zY3JhdGNoQnVmZmVyRm9yU2l6ZShzY3JhdGNoU2l6
ZSk7CiAgICAgRW5jb2RlZEpTVmFsdWUqIGJ1ZmZlciA9IHN0YXRpY19jYXN0PEVuY29kZWRKU1Zh
bHVlKj4oc2NyYXRjaEJ1ZmZlci0+ZGF0YUJ1ZmZlcigpKTsKICAgICAKLSAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7ICsraSkKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7ICsraSkgewor
I2lmIENQVShYODZfNjQpCisgICAgICAgIGppdC5zdG9yZTY0KEdQUkluZm86OnRvUmVnaXN0ZXIo
aSksIGJ1ZmZlciArIGkpOworI2Vsc2UKICAgICAgICAgaml0LnN0b3JlUHRyKEdQUkluZm86OnRv
UmVnaXN0ZXIoaSksIGJ1ZmZlciArIGkpOworI2VuZGlmCisgICAgfQogICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBGUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgKytpKSB7CiAgICAgICAg
IGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGJ1ZmZlciArIEdQUkluZm86
Om51bWJlck9mUmVnaXN0ZXJzICsgaSksIEdQUkluZm86OnJlZ1QwKTsKICAgICAgICAgaml0LnN0
b3JlRG91YmxlKEZQUkluZm86OnRvUmVnaXN0ZXIoaSksIEdQUkluZm86OnJlZ1QwKTsKQEAgLTcx
LDggKzc2LDEzIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBvc3JFeGl0R2VuZXJhdGlvblQKICAg
ICAgICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoYnVmZmVyICsgR1BS
SW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMgKyBpKSwgR1BSSW5mbzo6cmVnVDApOwogICAgICAgICBq
aXQubG9hZERvdWJsZShHUFJJbmZvOjpyZWdUMCwgRlBSSW5mbzo6dG9SZWdpc3RlcihpKSk7CiAg
ICAgfQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBHUFJJbmZvOjpudW1iZXJPZlJlZ2lz
dGVyczsgKytpKQorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBHUFJJbmZvOjpudW1iZXJP
ZlJlZ2lzdGVyczsgKytpKSB7CisjaWYgQ1BVKFg4Nl82NCkKKyAgICAgICAgaml0LmxvYWQ2NChi
dWZmZXIgKyBpLCBHUFJJbmZvOjp0b1JlZ2lzdGVyKGkpKTsKKyNlbHNlCiAgICAgICAgIGppdC5s
b2FkUHRyKGJ1ZmZlciArIGksIEdQUkluZm86OnRvUmVnaXN0ZXIoaSkpOworI2VuZGlmCisgICAg
fQogICAgIAogICAgIGppdC5qdW1wKE1hY3JvQXNzZW1ibGVyOjpBYnNvbHV0ZUFkZHJlc3MoJmds
b2JhbERhdGEtPm9zckV4aXRKdW1wRGVzdGluYXRpb24pKTsKICAgICAKQEAgLTExNSw3ICsxMjUs
MTEgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHRocm93RXhjZXB0aW9uRnJvbQogICAgICAgICAg
ICAgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsCiAgICAgICAgICAgICBzdGF0aWNfY2FzdDxw
dHJkaWZmX3Q+KHNpemVvZihSZWdpc3RlcikpICogSlNTdGFjazo6Q2FsbGVyRnJhbWUpLAogICAg
ICAgICBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CisjaWYgQ1BVKFg4Nl82NCkKKyAgICBq
aXQucGVlazY0KEdQUkluZm86Om5vblByZXNlcnZlZE5vblJldHVybkdQUiwgSklUU1RBQ0tGUkFN
RV9BUkdTX0lOREVYKTsKKyNlbHNlCiAgICAgaml0LnBlZWsoR1BSSW5mbzo6bm9uUHJlc2VydmVk
Tm9uUmV0dXJuR1BSLCBKSVRTVEFDS0ZSQU1FX0FSR1NfSU5ERVgpOworI2VuZGlmCiAgICAgaml0
LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25SZXR1
cm5HUFIpOwogICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihiaXR3aXNl
X2Nhc3Q8dm9pZCo+KGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIpKSwgR1BSSW5mbzo6bm9uQXJnR1BS
MCk7CiAgICAgZW1pdFBvaW50ZXJWYWxpZGF0aW9uKGppdCwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7
CkBAIC0xMzgsNyArMTUyLDExIEBAIHN0YXRpYyB2b2lkIHNsb3dQYXRoRm9yKAogICAgICAgICAg
ICAgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsCiAgICAgICAgICAgICBzdGF0aWNfY2FzdDxw
dHJkaWZmX3Q+KHNpemVvZihSZWdpc3RlcikpICogSlNTdGFjazo6UmV0dXJuUEMpKTsKICAgICBq
aXQuc3RvcmVQdHIoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsICZnbG9iYWxEYXRhLT50b3BD
YWxsRnJhbWUpOworI2lmIENQVShYODZfNjQpCisgICAgaml0LnBva2U2NChHUFJJbmZvOjpub25Q
cmVzZXJ2ZWROb25SZXR1cm5HUFIsIEpJVFNUQUNLRlJBTUVfQVJHU19JTkRFWCk7CisjZWxzZQog
ICAgIGppdC5wb2tlKEdQUkluZm86Om5vblByZXNlcnZlZE5vblJldHVybkdQUiwgSklUU1RBQ0tG
UkFNRV9BUkdTX0lOREVYKTsKKyNlbmRpZgogICAgIGppdC5zZXR1cEFyZ3VtZW50c0V4ZWNTdGF0
ZSgpOwogICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihiaXR3aXNlX2Nh
c3Q8dm9pZCo+KHNsb3dQYXRoRnVuY3Rpb24pKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7CiAgICAg
ZW1pdFBvaW50ZXJWYWxpZGF0aW9uKGppdCwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7CkBAIC0yMTEs
NyArMjI5LDcgQEAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiB2aXJ0dWFsRm9yVAogICAg
IAogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgc2xvd0Nhc2UuYXBwZW5kKAotICAgICAgICBqaXQu
YnJhbmNoVGVzdFB0cigKKyAgICAgICAgaml0LmJyYW5jaFRlc3Q2NCgKICAgICAgICAgICAgIEND
YWxsSGVscGVyczo6Tm9uWmVybywgR1BSSW5mbzo6bm9uQXJnR1BSMCwgR1BSSW5mbzo6dGFnTWFz
a1JlZ2lzdGVyKSk7CiAjZWxzZQogICAgIHNsb3dDYXNlLmFwcGVuZCgKQEAgLTI0NSw3ICsyNjMs
NyBAQCBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHZpcnR1YWxGb3JUCiAgICAgICAgIEND
YWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpub25BcmdHUFIwLCBKU0Z1bmN0aW9uOjpvZmZz
ZXRPZlNjb3BlQ2hhaW4oKSksCiAgICAgICAgIEdQUkluZm86Om5vbkFyZ0dQUjEpOwogI2lmIFVT
RShKU1ZBTFVFNjQpCi0gICAgaml0LnN0b3JlUHRyKAorICAgIGppdC5zdG9yZTY0KAogICAgICAg
ICBHUFJJbmZvOjpub25BcmdHUFIxLAogICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoCiAg
ICAgICAgICAgICBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAkocmV2aXNpb24g
MTMxNDQ5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzA3LDExICszMDcsNyBAQCB2b2lkIEludGVycHJldGVy
OjpkdW1wUmVnaXN0ZXJzKENhbGxGcmFtCiAgICAgICAgIEpTVmFsdWUgdiA9IGl0LT5qc1ZhbHVl
KCk7CiAgICAgICAgIGludCByZWdpc3Rlck51bWJlciA9IGl0IC0gY2FsbEZyYW1lLT5yZWdpc3Rl
cnMoKTsKICAgICAgICAgU3RyaW5nIG5hbWUgPSBjb2RlQmxvY2stPm5hbWVGb3JSZWdpc3Rlcihy
ZWdpc3Rlck51bWJlcik7Ci0jaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICAgICAgZGF0YUxvZygi
W3IlIDNkICUxNHNdICAgICAgfCAlMTBwIHwgJS0xNnMgMHglbGx4IFxuIiwgcmVnaXN0ZXJOdW1i
ZXIsIG5hbWUuYXNjaWkoKS5kYXRhKCksIGl0LCB2LmRlc2NyaXB0aW9uKCksIEpTVmFsdWU6OmVu
Y29kZSh2KSk7Ci0jZWxzZQotICAgICAgICBkYXRhTG9nKCJbciUgM2QgJTE0c10gICAgICB8ICUx
MHAgfCAlLTE2cyAlcCBcbiIsIHJlZ2lzdGVyTnVtYmVyLCBuYW1lLmFzY2lpKCkuZGF0YSgpLCBp
dCwgdi5kZXNjcmlwdGlvbigpLCBKU1ZhbHVlOjplbmNvZGUodikpOwotI2VuZGlmCisgICAgICAg
IGRhdGFMb2coIltyJSAzZCAlMTRzXSAgICAgIHwgJTEwcCB8ICUtMTZzIDB4JWxsZCBcbiIsIHJl
Z2lzdGVyTnVtYmVyLCBuYW1lLmFzY2lpKCkuZGF0YSgpLCBpdCwgdi5kZXNjcmlwdGlvbigpLCAo
bG9uZyBsb25nKUpTVmFsdWU6OmVuY29kZSh2KSk7CiAgICAgICAgIGl0Kys7CiAgICAgfQogICAg
IApAQCAtMzQ2LDExICszNDIsNyBAQCB2b2lkIEludGVycHJldGVyOjpkdW1wUmVnaXN0ZXJzKENh
bGxGcmFtCiAgICAgICAgICAgICBKU1ZhbHVlIHYgPSBpdC0+anNWYWx1ZSgpOwogICAgICAgICAg
ICAgaW50IHJlZ2lzdGVyTnVtYmVyID0gaXQgLSBjYWxsRnJhbWUtPnJlZ2lzdGVycygpOwogICAg
ICAgICAgICAgU3RyaW5nIG5hbWUgPSBjb2RlQmxvY2stPm5hbWVGb3JSZWdpc3RlcihyZWdpc3Rl
ck51bWJlcik7Ci0jaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICAgICAgICAgIGRhdGFMb2coIlty
JSAzZCAlMTRzXSAgICAgIHwgJTEwcCB8ICUtMTZzIDB4JWxseCBcbiIsIHJlZ2lzdGVyTnVtYmVy
LCBuYW1lLmFzY2lpKCkuZGF0YSgpLCBpdCwgdi5kZXNjcmlwdGlvbigpLCBKU1ZhbHVlOjplbmNv
ZGUodikpOwotI2Vsc2UKLSAgICAgICAgICAgIGRhdGFMb2coIltyJSAzZCAlMTRzXSAgICAgIHwg
JTEwcCB8ICUtMTZzICVwIFxuIiwgcmVnaXN0ZXJOdW1iZXIsIG5hbWUuYXNjaWkoKS5kYXRhKCks
IGl0LCB2LmRlc2NyaXB0aW9uKCksIEpTVmFsdWU6OmVuY29kZSh2KSk7Ci0jZW5kaWYKKyAgICAg
ICAgICAgIGRhdGFMb2coIltyJSAzZCAlMTRzXSAgICAgIHwgJTEwcCB8ICUtMTZzIDB4JWxsZCBc
biIsIHJlZ2lzdGVyTnVtYmVyLCBuYW1lLmFzY2lpKCkuZGF0YSgpLCBpdCwgdi5kZXNjcmlwdGlv
bigpLCAobG9uZyBsb25nKUpTVmFsdWU6OmVuY29kZSh2KSk7CiAgICAgICAgICAgICArK2l0Owog
ICAgICAgICAgICAgKytyZWdpc3RlckNvdW50OwogICAgICAgICB9IHdoaWxlIChpdCAhPSBlbmQp
OwpAQCAtMzYxLDExICszNTMsNyBAQCB2b2lkIEludGVycHJldGVyOjpkdW1wUmVnaXN0ZXJzKENh
bGxGcmFtCiAgICAgaWYgKGl0ICE9IGVuZCkgewogICAgICAgICBkbyB7CiAgICAgICAgICAgICBK
U1ZhbHVlIHYgPSAoKml0KS5qc1ZhbHVlKCk7Ci0jaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICAg
ICAgICAgIGRhdGFMb2coIltyJSAzZF0gICAgICAgICAgICAgICAgICAgICB8ICUxMHAgfCAlLTE2
cyAweCVsbHggXG4iLCByZWdpc3RlckNvdW50LCBpdCwgdi5kZXNjcmlwdGlvbigpLCBKU1ZhbHVl
OjplbmNvZGUodikpOwotI2Vsc2UKLSAgICAgICAgICAgIGRhdGFMb2coIltyJSAzZF0gICAgICAg
ICAgICAgICAgICAgICB8ICUxMHAgfCAlLTE2cyAlcCBcbiIsIHJlZ2lzdGVyQ291bnQsIGl0LCB2
LmRlc2NyaXB0aW9uKCksIEpTVmFsdWU6OmVuY29kZSh2KSk7Ci0jZW5kaWYKKyAgICAgICAgICAg
IGRhdGFMb2coIltyJSAzZF0gICAgICAgICAgICAgICAgICAgICB8ICUxMHAgfCAlLTE2cyAweCVs
bGQgXG4iLCByZWdpc3RlckNvdW50LCBpdCwgdi5kZXNjcmlwdGlvbigpLCAobG9uZyBsb25nKUpT
VmFsdWU6OmVuY29kZSh2KSk7CiAgICAgICAgICAgICArK2l0OwogICAgICAgICAgICAgKytyZWdp
c3RlckNvdW50OwogICAgICAgICB9IHdoaWxlIChpdCAhPSBlbmQpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklULmNwcAkocmV2aXNpb24gMTMxNDQ5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NDQsNyArNjQ0LDcgQEAgSklUQ29k
ZSBKSVQ6OnByaXZhdGVDb21waWxlKENvZGVQdHIqIGZ1bgogICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgICAgICAgICBpbnQgb2Zmc2V0ID0gQ2FsbEZyYW1lOjphcmd1bWVu
dE9mZnNldEluY2x1ZGluZ1RoaXMoYXJndW1lbnQpICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2Yo
UmVnaXN0ZXIpKTsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICAgICAgICAgIGxvYWRQdHIo
QWRkcmVzcyhjYWxsRnJhbWVSZWdpc3Rlciwgb2Zmc2V0KSwgcmVnVDApOworICAgICAgICAgICAg
ICAgIGxvYWQ2NChBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCBvZmZzZXQpLCByZWdUMCk7CiAj
ZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQogICAgICAgICAgICAgICAgIGxvYWQzMihBZGRyZXNzKGNh
bGxGcmFtZVJlZ2lzdGVyLCBvZmZzZXQgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0Jp
dHMucGF5bG9hZCkpLCByZWdUMCk7CiAgICAgICAgICAgICAgICAgbG9hZDMyKEFkZHJlc3MoY2Fs
bEZyYW1lUmVnaXN0ZXIsIG9mZnNldCArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0
cy50YWcpKSwgcmVnVDEpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCShyZXZpc2lvbiAx
MzE0NDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3b3JraW5nIGNvcHkp
CkBAIC01OTIsNiArNTkyLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAjZW5kaWYKIAogI2Vsc2UgLy8g
VVNFKEpTVkFMVUUzMl82NCkKKyAgICAgICAgLyogVGhpcyBmdW5jdGlvbiBpcyBkZXByZWNhdGVk
LiAqLworICAgICAgICB2b2lkIGVtaXRHZXRKSVRTdHViQXJnKHVuc2lnbmVkIGFyZ3VtZW50TnVt
YmVyLCBSZWdpc3RlcklEIGRzdCk7CisKICAgICAgICAgdm9pZCBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGludCBzcmMsIFJlZ2lzdGVySUQgZHN0KTsKICAgICAgICAgdm9pZCBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVycyhpbnQgc3JjMSwgUmVnaXN0ZXJJRCBkc3QxLCBpbnQgc3JjMiwgUmVnaXN0ZXJJ
RCBkc3QyKTsKICAgICAgICAgdm9pZCBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHVuc2lnbmVkIGRz
dCwgUmVnaXN0ZXJJRCBmcm9tID0gcmVnVDApOwpAQCAtODMzLDkgKzgzNiw2IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRSaWdodFNoaWZ0KEluc3RydWN0aW9uKiwgYm9vbCBp
c1Vuc2lnbmVkKTsKICAgICAgICAgdm9pZCBlbWl0UmlnaHRTaGlmdFNsb3dDYXNlKEluc3RydWN0
aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIGJvb2wgaXNVbnNpZ25lZCk7
CiAKLSAgICAgICAgLyogVGhpcyBmdW5jdGlvbiBpcyBkZXByZWNhdGVkLiAqLwotICAgICAgICB2
b2lkIGVtaXRHZXRKSVRTdHViQXJnKHVuc2lnbmVkIGFyZ3VtZW50TnVtYmVyLCBSZWdpc3RlcklE
IGRzdCk7Ci0KICAgICAgICAgdm9pZCBlbWl0SW5pdFJlZ2lzdGVyKHVuc2lnbmVkIGRzdCk7CiAK
ICAgICAgICAgdm9pZCBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBK
U1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJFbnRyeSk7CkBAIC04NDQsNiArODQ0LDkgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdFB1dEltbWVkaWF0ZVRvQ2FsbEZyYW1lSGVhZGVy
KHZvaWQqIHZhbHVlLCBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJFbnRyeSk7CiAgICAgICAgIHZv
aWQgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVy
RW50cnksIFJlZ2lzdGVySUQgdG8sIFJlZ2lzdGVySUQgZnJvbSA9IGNhbGxGcmFtZVJlZ2lzdGVy
KTsKICAgICAgICAgdm9pZCBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlcjMyKEpTU3RhY2s6OkNh
bGxGcmFtZUhlYWRlckVudHJ5LCBSZWdpc3RlcklEIHRvLCBSZWdpc3RlcklEIGZyb20gPSBjYWxs
RnJhbWVSZWdpc3Rlcik7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgdm9pZCBlbWl0R2V0
RnJvbUNhbGxGcmFtZUhlYWRlcjY0KEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlckVudHJ5LCBSZWdp
c3RlcklEIHRvLCBSZWdpc3RlcklEIGZyb20gPSBjYWxsRnJhbWVSZWdpc3Rlcik7CisjZW5kaWYK
IAogICAgICAgICBKU1ZhbHVlIGdldENvbnN0YW50T3BlcmFuZCh1bnNpZ25lZCBzcmMpOwogICAg
ICAgICBib29sIGlzT3BlcmFuZENvbnN0YW50SW1tZWRpYXRlSW50KHVuc2lnbmVkIHNyYyk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAJKHJldmlz
aW9uIDEzMTQ0OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTIwOSw4ICsyMDksOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9u
ZWdhdGUoSW5zdHJ1Y3Rpb24qIGN1CiAgICAgc3JjTm90SW50LmxpbmsodGhpcyk7CiAgICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SW1tZWRpYXRlTnVtYmVyKHJlZ1QwKTsKIAotICAgIG1vdmUoVHJ1
c3RlZEltbVB0cihyZWludGVycHJldF9jYXN0PHZvaWQqPigweDgwMDAwMDAwMDAwMDAwMDB1bGwp
KSwgcmVnVDEpOwotICAgIHhvclB0cihyZWdUMSwgcmVnVDApOworICAgIG1vdmUoVHJ1c3RlZElt
bTY0KChpbnQ2NF90KTB4ODAwMDAwMDAwMDAwMDAwMHVsbCksIHJlZ1QxKTsKKyAgICB4b3I2NChy
ZWdUMSwgcmVnVDApOwogCiAgICAgZW5kLmxpbmsodGhpcyk7CiAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QpOwpAQCAtMjI0LDcgKzIyNCw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9u
ZWdhdGUoSW5zdHJ1Y3Rpb24KICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIGRvdWJsZSBjaGVj
awogCiAgICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wX25lZ2F0ZSk7Ci0gICAg
c3R1YkNhbGwuYWRkQXJndW1lbnQocmVnVDEsIHJlZ1QwKTsKKyAgICBzdHViQ2FsbC5hZGRBcmd1
bWVudChyZWdUMCk7CiAgICAgc3R1YkNhbGwuY2FsbChkc3QpOwogfQogCkBAIC0yNzksOCArMjc5
LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcnNoaWZ0KEluc3RydWN0aW9uKiBjdQogICAgICAgICAg
ICAgSnVtcCBsaHNJc0ludCA9IGVtaXRKdW1wSWZJbW1lZGlhdGVJbnRlZ2VyKHJlZ1QwKTsKICAg
ICAgICAgICAgIC8vIHN1cHBvcnRzRmxvYXRpbmdQb2ludCgpICYmIFVTRShKU1ZBTFVFNjQpID0+
IDMgU2xvd0Nhc2VzCiAgICAgICAgICAgICBhZGRTbG93Q2FzZShlbWl0SnVtcElmTm90SW1tZWRp
YXRlTnVtYmVyKHJlZ1QwKSk7Ci0gICAgICAgICAgICBhZGRQdHIodGFnVHlwZU51bWJlclJlZ2lz
dGVyLCByZWdUMCk7Ci0gICAgICAgICAgICBtb3ZlUHRyVG9Eb3VibGUocmVnVDAsIGZwUmVnVDAp
OworICAgICAgICAgICAgYWRkNjQodGFnVHlwZU51bWJlclJlZ2lzdGVyLCByZWdUMCk7CisgICAg
ICAgICAgICBtb3ZlNjRUb0RvdWJsZShyZWdUMCwgZnBSZWdUMCk7CiAgICAgICAgICAgICBhZGRT
bG93Q2FzZShicmFuY2hUcnVuY2F0ZURvdWJsZVRvSW50MzIoZnBSZWdUMCwgcmVnVDApKTsKICAg
ICAgICAgICAgIGxoc0lzSW50LmxpbmsodGhpcyk7CiAgICAgICAgICAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RJbW1lZGlhdGVJbnRlZ2VyKHJlZ1QyKTsKQEAgLTM3Nyw4ICszNzcsOCBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfdXJzaGlmdChJbnN0cnVjdGlvCiAgICAgICAgIGlmIChzdXBwb3J0
c0Zsb2F0aW5nUG9pbnRUcnVuY2F0ZSgpKSB7CiAgICAgICAgICAgICBKdW1wTGlzdCBmYWlsdXJl
czsKICAgICAgICAgICAgIGZhaWx1cmVzLmFwcGVuZChlbWl0SnVtcElmTm90SW1tZWRpYXRlTnVt
YmVyKHJlZ1QwKSk7IC8vIG9wMSBpcyBub3QgYSBkb3VibGUKLSAgICAgICAgICAgIGFkZFB0cih0
YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHJlZ1QwKTsKLSAgICAgICAgICAgIG1vdmVQdHJUb0RvdWJs
ZShyZWdUMCwgZnBSZWdUMCk7CisgICAgICAgICAgICBhZGQ2NCh0YWdUeXBlTnVtYmVyUmVnaXN0
ZXIsIHJlZ1QwKTsKKyAgICAgICAgICAgIG1vdmU2NFRvRG91YmxlKHJlZ1QwLCBmcFJlZ1QwKTsK
ICAgICAgICAgICAgIGZhaWx1cmVzLmFwcGVuZChicmFuY2hUcnVuY2F0ZURvdWJsZVRvSW50MzIo
ZnBSZWdUMCwgcmVnVDApKTsKICAgICAgICAgICAgIGlmIChzaGlmdCkKICAgICAgICAgICAgICAg
ICB1cnNoaWZ0MzIoSW1tMzIoc2hpZnQgJiAweDFmKSwgcmVnVDApOwpAQCAtMzk5LDggKzM5OSw4
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF91cnNoaWZ0KEluc3RydWN0aW8KICAgICAgICAgICAg
IGlmIChzdXBwb3J0c0Zsb2F0aW5nUG9pbnRUcnVuY2F0ZSgpKSB7CiAgICAgICAgICAgICAgICAg
SnVtcExpc3QgZmFpbHVyZXM7CiAgICAgICAgICAgICAgICAgZmFpbHVyZXMuYXBwZW5kKGVtaXRK
dW1wSWZOb3RJbW1lZGlhdGVOdW1iZXIocmVnVDApKTsgLy8gb3AxIGlzIG5vdCBhIGRvdWJsZQot
ICAgICAgICAgICAgICAgIGFkZFB0cih0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHJlZ1QwKTsKLSAg
ICAgICAgICAgICAgICBtb3ZlUHRyVG9Eb3VibGUocmVnVDAsIGZwUmVnVDApOworICAgICAgICAg
ICAgICAgIGFkZDY0KHRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgcmVnVDApOworICAgICAgICAgICAg
ICAgIG1vdmU2NFRvRG91YmxlKHJlZ1QwLCBmcFJlZ1QwKTsKICAgICAgICAgICAgICAgICBmYWls
dXJlcy5hcHBlbmQoYnJhbmNoVHJ1bmNhdGVEb3VibGVUb0ludDMyKGZwUmVnVDAsIHJlZ1QwKSk7
CiAgICAgICAgICAgICAgICAgZmFpbHVyZXMuYXBwZW5kKGVtaXRKdW1wSWZOb3RJbW1lZGlhdGVJ
bnRlZ2VyKHJlZ1QxKSk7IC8vIG9wMiBpcyBub3QgYW4gaW50CiAgICAgICAgICAgICAgICAgZW1p
dEZhc3RBcml0aEltbVRvSW50KHJlZ1QxKTsKQEAgLTQ5OSw4ICs0OTksOCBAQCB2b2lkIEpJVDo6
ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3codW5zaWduCiAKICAgICAgICAgaWYgKHN1cHBvcnRzRmxv
YXRpbmdQb2ludCgpKSB7CiAgICAgICAgICAgICBKdW1wIGZhaWwxID0gZW1pdEp1bXBJZk5vdElt
bWVkaWF0ZU51bWJlcihyZWdUMCk7Ci0gICAgICAgICAgICBhZGRQdHIodGFnVHlwZU51bWJlclJl
Z2lzdGVyLCByZWdUMCk7Ci0gICAgICAgICAgICBtb3ZlUHRyVG9Eb3VibGUocmVnVDAsIGZwUmVn
VDApOworICAgICAgICAgICAgYWRkNjQodGFnVHlwZU51bWJlclJlZ2lzdGVyLCByZWdUMCk7Cisg
ICAgICAgICAgICBtb3ZlNjRUb0RvdWJsZShyZWdUMCwgZnBSZWdUMCk7CiAKICAgICAgICAgICAg
IGludDMyX3Qgb3AyaW1tID0gZ2V0Q29uc3RhbnRPcGVyYW5kKG9wMikuYXNJbnQzMigpOwogCkBA
IC01MjUsOCArNTI1LDggQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93KHVuc2ln
bgogCiAgICAgICAgIGlmIChzdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSkgewogICAgICAgICAgICAg
SnVtcCBmYWlsMSA9IGVtaXRKdW1wSWZOb3RJbW1lZGlhdGVOdW1iZXIocmVnVDEpOwotICAgICAg
ICAgICAgYWRkUHRyKHRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgcmVnVDEpOwotICAgICAgICAgICAg
bW92ZVB0clRvRG91YmxlKHJlZ1QxLCBmcFJlZ1QxKTsKKyAgICAgICAgICAgIGFkZDY0KHRhZ1R5
cGVOdW1iZXJSZWdpc3RlciwgcmVnVDEpOworICAgICAgICAgICAgbW92ZTY0VG9Eb3VibGUocmVn
VDEsIGZwUmVnVDEpOwogCiAgICAgICAgICAgICBpbnQzMl90IG9wMWltbSA9IGdldENvbnN0YW50
T3BlcmFuZChvcDEpLmFzSW50MzIoKTsKIApAQCAtNTUyLDEwICs1NTIsMTAgQEAgdm9pZCBKSVQ6
OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93KHVuc2lnbgogICAgICAgICAgICAgSnVtcCBmYWlsMSA9
IGVtaXRKdW1wSWZOb3RJbW1lZGlhdGVOdW1iZXIocmVnVDApOwogICAgICAgICAgICAgSnVtcCBm
YWlsMiA9IGVtaXRKdW1wSWZOb3RJbW1lZGlhdGVOdW1iZXIocmVnVDEpOwogICAgICAgICAgICAg
SnVtcCBmYWlsMyA9IGVtaXRKdW1wSWZJbW1lZGlhdGVJbnRlZ2VyKHJlZ1QxKTsKLSAgICAgICAg
ICAgIGFkZFB0cih0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHJlZ1QwKTsKLSAgICAgICAgICAgIGFk
ZFB0cih0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHJlZ1QxKTsKLSAgICAgICAgICAgIG1vdmVQdHJU
b0RvdWJsZShyZWdUMCwgZnBSZWdUMCk7Ci0gICAgICAgICAgICBtb3ZlUHRyVG9Eb3VibGUocmVn
VDEsIGZwUmVnVDEpOworICAgICAgICAgICAgYWRkNjQodGFnVHlwZU51bWJlclJlZ2lzdGVyLCBy
ZWdUMCk7CisgICAgICAgICAgICBhZGQ2NCh0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHJlZ1QxKTsK
KyAgICAgICAgICAgIG1vdmU2NFRvRG91YmxlKHJlZ1QwLCBmcFJlZ1QwKTsKKyAgICAgICAgICAg
IG1vdmU2NFRvRG91YmxlKHJlZ1QxLCBmcFJlZ1QxKTsKIAogICAgICAgICAgICAgZW1pdEp1bXBT
bG93VG9Ib3QoYnJhbmNoRG91YmxlKGNvbmRpdGlvbiwgZnBSZWdUMCwgZnBSZWdUMSksIHRhcmdl
dCk7CiAKQEAgLTU4NSwxOSArNTg1LDE5IEBAIHZvaWQgSklUOjplbWl0X29wX2JpdGFuZChJbnN0
cnVjdGlvbiogY3UKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJlZ1QwKTsK
ICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tZWRpYXRlSW50ZWdlcihyZWdUMCk7CiAg
ICAgICAgIGludDMyX3QgaW1tID0gZ2V0Q29uc3RhbnRPcGVyYW5kSW1tZWRpYXRlSW50KG9wMSk7
Ci0gICAgICAgIGFuZFB0cihJbW0zMihpbW0pLCByZWdUMCk7CisgICAgICAgIGFuZDY0KEltbTMy
KGltbSksIHJlZ1QwKTsKICAgICAgICAgaWYgKGltbSA+PSAwKQogICAgICAgICAgICAgZW1pdEZh
c3RBcml0aEludFRvSW1tTm9DaGVjayhyZWdUMCwgcmVnVDApOwogICAgIH0gZWxzZSBpZiAoaXNP
cGVyYW5kQ29uc3RhbnRJbW1lZGlhdGVJbnQob3AyKSkgewogICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKG9wMSwgcmVnVDApOwogICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1l
ZGlhdGVJbnRlZ2VyKHJlZ1QwKTsKICAgICAgICAgaW50MzJfdCBpbW0gPSBnZXRDb25zdGFudE9w
ZXJhbmRJbW1lZGlhdGVJbnQob3AyKTsKLSAgICAgICAgYW5kUHRyKEltbTMyKGltbSksIHJlZ1Qw
KTsKKyAgICAgICAgYW5kNjQoSW1tMzIoaW1tKSwgcmVnVDApOwogICAgICAgICBpZiAoaW1tID49
IDApCiAgICAgICAgICAgICBlbWl0RmFzdEFyaXRoSW50VG9JbW1Ob0NoZWNrKHJlZ1QwLCByZWdU
MCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMob3AxLCBy
ZWdUMCwgb3AyLCByZWdUMSk7Ci0gICAgICAgIGFuZFB0cihyZWdUMSwgcmVnVDApOworICAgICAg
ICBhbmQ2NChyZWdUMSwgcmVnVDApOwogICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1l
ZGlhdGVJbnRlZ2VyKHJlZ1QwKTsKICAgICB9CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihy
ZXN1bHQpOwpAQCAtODg3LDE2ICs4ODcsMTYgQEAgdm9pZCBKSVQ6OmNvbXBpbGVCaW5hcnlBcml0
aE9wU2xvd0Nhc2UoTwogICAgICAgICAgICAgZW1pdEp1bXBJZk5vdEltbWVkaWF0ZU51bWJlcihy
ZWdUMCkubGlua1RvKHN0dWJGdW5jdGlvbkNhbGwsIHRoaXMpOwogICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKG9wMSwgcmVnVDEpOwogICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShy
ZWdUMSwgZnBSZWdUMSk7Ci0gICAgICAgIGFkZFB0cih0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHJl
Z1QwKTsKLSAgICAgICAgbW92ZVB0clRvRG91YmxlKHJlZ1QwLCBmcFJlZ1QyKTsKKyAgICAgICAg
YWRkNjQodGFnVHlwZU51bWJlclJlZ2lzdGVyLCByZWdUMCk7CisgICAgICAgIG1vdmU2NFRvRG91
YmxlKHJlZ1QwLCBmcFJlZ1QyKTsKICAgICB9IGVsc2UgaWYgKG9wMkhhc0ltbWVkaWF0ZUludEZh
c3RDYXNlKSB7CiAgICAgICAgIG5vdEltbTEubGluayh0aGlzKTsKICAgICAgICAgaWYgKCF0eXBl
cy5maXJzdCgpLmRlZmluaXRlbHlJc051bWJlcigpKQogICAgICAgICAgICAgZW1pdEp1bXBJZk5v
dEltbWVkaWF0ZU51bWJlcihyZWdUMCkubGlua1RvKHN0dWJGdW5jdGlvbkNhbGwsIHRoaXMpOwog
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmVnVDEpOwogICAgICAgICBjb252
ZXJ0SW50MzJUb0RvdWJsZShyZWdUMSwgZnBSZWdUMSk7Ci0gICAgICAgIGFkZFB0cih0YWdUeXBl
TnVtYmVyUmVnaXN0ZXIsIHJlZ1QwKTsKLSAgICAgICAgbW92ZVB0clRvRG91YmxlKHJlZ1QwLCBm
cFJlZ1QyKTsKKyAgICAgICAgYWRkNjQodGFnVHlwZU51bWJlclJlZ2lzdGVyLCByZWdUMCk7Cisg
ICAgICAgIG1vdmU2NFRvRG91YmxlKHJlZ1QwLCBmcFJlZ1QyKTsKICAgICB9IGVsc2UgewogICAg
ICAgICAvLyBpZiB3ZSBnZXQgaGVyZSwgZWF4IGlzIG5vdCBhbiBpbnQzMiwgZWR4IG5vdCB5ZXQg
Y2hlY2tlZC4KICAgICAgICAgbm90SW1tMS5saW5rKHRoaXMpOwpAQCAtOTA0LDggKzkwNCw4IEBA
IHZvaWQgSklUOjpjb21waWxlQmluYXJ5QXJpdGhPcFNsb3dDYXNlKE8KICAgICAgICAgICAgIGVt
aXRKdW1wSWZOb3RJbW1lZGlhdGVOdW1iZXIocmVnVDApLmxpbmtUbyhzdHViRnVuY3Rpb25DYWxs
LCB0aGlzKTsKICAgICAgICAgaWYgKCF0eXBlcy5zZWNvbmQoKS5kZWZpbml0ZWx5SXNOdW1iZXIo
KSkKICAgICAgICAgICAgIGVtaXRKdW1wSWZOb3RJbW1lZGlhdGVOdW1iZXIocmVnVDEpLmxpbmtU
byhzdHViRnVuY3Rpb25DYWxsLCB0aGlzKTsKLSAgICAgICAgYWRkUHRyKHRhZ1R5cGVOdW1iZXJS
ZWdpc3RlciwgcmVnVDApOwotICAgICAgICBtb3ZlUHRyVG9Eb3VibGUocmVnVDAsIGZwUmVnVDEp
OworICAgICAgICBhZGQ2NCh0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHJlZ1QwKTsKKyAgICAgICAg
bW92ZTY0VG9Eb3VibGUocmVnVDAsIGZwUmVnVDEpOwogICAgICAgICBKdW1wIG9wMmlzRG91Ymxl
ID0gZW1pdEp1bXBJZk5vdEltbWVkaWF0ZUludGVnZXIocmVnVDEpOwogICAgICAgICBjb252ZXJ0
SW50MzJUb0RvdWJsZShyZWdUMSwgZnBSZWdUMik7CiAgICAgICAgIEp1bXAgb3Ayd2FzSW50ZWdl
ciA9IGp1bXAoKTsKQEAgLTkxNiw4ICs5MTYsOCBAQCB2b2lkIEpJVDo6Y29tcGlsZUJpbmFyeUFy
aXRoT3BTbG93Q2FzZShPCiAgICAgICAgICAgICBlbWl0SnVtcElmTm90SW1tZWRpYXRlTnVtYmVy
KHJlZ1QxKS5saW5rVG8oc3R1YkZ1bmN0aW9uQ2FsbCwgdGhpcyk7CiAgICAgICAgIGNvbnZlcnRJ
bnQzMlRvRG91YmxlKHJlZ1QwLCBmcFJlZ1QxKTsKICAgICAgICAgb3AyaXNEb3VibGUubGluayh0
aGlzKTsKLSAgICAgICAgYWRkUHRyKHRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgcmVnVDEpOwotICAg
ICAgICBtb3ZlUHRyVG9Eb3VibGUocmVnVDEsIGZwUmVnVDIpOworICAgICAgICBhZGQ2NCh0YWdU
eXBlTnVtYmVyUmVnaXN0ZXIsIHJlZ1QxKTsKKyAgICAgICAgbW92ZTY0VG9Eb3VibGUocmVnVDEs
IGZwUmVnVDIpOwogICAgICAgICBvcDJ3YXNJbnRlZ2VyLmxpbmsodGhpcyk7CiAgICAgfQogCkBA
IC05MzEsOCArOTMxLDggQEAgdm9pZCBKSVQ6OmNvbXBpbGVCaW5hcnlBcml0aE9wU2xvd0Nhc2Uo
TwogICAgICAgICBBU1NFUlQob3Bjb2RlSUQgPT0gb3BfZGl2KTsKICAgICAgICAgZGl2RG91Ymxl
KGZwUmVnVDIsIGZwUmVnVDEpOwogICAgIH0KLSAgICBtb3ZlRG91YmxlVG9QdHIoZnBSZWdUMSwg
cmVnVDApOwotICAgIHN1YlB0cih0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHJlZ1QwKTsKKyAgICBt
b3ZlRG91YmxlVG82NChmcFJlZ1QxLCByZWdUMCk7CisgICAgc3ViNjQodGFnVHlwZU51bWJlclJl
Z2lzdGVyLCByZWdUMCk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQsIHJlZ1Qw
KTsKIAogICAgIGVuZC5saW5rKHRoaXMpOwpAQCAtMTA0MSw4ICsxMDQxLDggQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfZGl2KEluc3RydWN0aW9uKiBjdXJyZQogCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0
YW50SW1tZWRpYXRlRG91YmxlKG9wMSkpIHsKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihvcDEsIHJlZ1QwKTsKLSAgICAgICAgYWRkUHRyKHRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgcmVn
VDApOwotICAgICAgICBtb3ZlUHRyVG9Eb3VibGUocmVnVDAsIGZwUmVnVDApOworICAgICAgICBh
ZGQ2NCh0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHJlZ1QwKTsKKyAgICAgICAgbW92ZTY0VG9Eb3Vi
bGUocmVnVDAsIGZwUmVnVDApOwogICAgIH0gZWxzZSBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbW1l
ZGlhdGVJbnQob3AxKSkgewogICAgICAgICBlbWl0TG9hZEludDMyVG9Eb3VibGUob3AxLCBmcFJl
Z1QwKTsKICAgICB9IGVsc2UgewpAQCAtMTA1MywxNSArMTA1MywxNSBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9kaXYoSW5zdHJ1Y3Rpb24qIGN1cnJlCiAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91Ymxl
KHJlZ1QwLCBmcFJlZ1QwKTsKICAgICAgICAgSnVtcCBza2lwRG91YmxlTG9hZCA9IGp1bXAoKTsK
ICAgICAgICAgbm90SW50LmxpbmsodGhpcyk7Ci0gICAgICAgIGFkZFB0cih0YWdUeXBlTnVtYmVy
UmVnaXN0ZXIsIHJlZ1QwKTsKLSAgICAgICAgbW92ZVB0clRvRG91YmxlKHJlZ1QwLCBmcFJlZ1Qw
KTsKKyAgICAgICAgYWRkNjQodGFnVHlwZU51bWJlclJlZ2lzdGVyLCByZWdUMCk7CisgICAgICAg
IG1vdmU2NFRvRG91YmxlKHJlZ1QwLCBmcFJlZ1QwKTsKICAgICAgICAgc2tpcERvdWJsZUxvYWQu
bGluayh0aGlzKTsKICAgICB9CiAKICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbW1lZGlhdGVE
b3VibGUob3AyKSkgewogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmVnVDEp
OwotICAgICAgICBhZGRQdHIodGFnVHlwZU51bWJlclJlZ2lzdGVyLCByZWdUMSk7Ci0gICAgICAg
IG1vdmVQdHJUb0RvdWJsZShyZWdUMSwgZnBSZWdUMSk7CisgICAgICAgIGFkZDY0KHRhZ1R5cGVO
dW1iZXJSZWdpc3RlciwgcmVnVDEpOworICAgICAgICBtb3ZlNjRUb0RvdWJsZShyZWdUMSwgZnBS
ZWdUMSk7CiAgICAgfSBlbHNlIGlmIChpc09wZXJhbmRDb25zdGFudEltbWVkaWF0ZUludChvcDIp
KSB7CiAgICAgICAgIGVtaXRMb2FkSW50MzJUb0RvdWJsZShvcDIsIGZwUmVnVDEpOwogICAgIH0g
ZWxzZSB7CkBAIC0xMDcyLDggKzEwNzIsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kaXYoSW5zdHJ1
Y3Rpb24qIGN1cnJlCiAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKHJlZ1QxLCBmcFJlZ1Qx
KTsKICAgICAgICAgSnVtcCBza2lwRG91YmxlTG9hZCA9IGp1bXAoKTsKICAgICAgICAgbm90SW50
LmxpbmsodGhpcyk7Ci0gICAgICAgIGFkZFB0cih0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHJlZ1Qx
KTsKLSAgICAgICAgbW92ZVB0clRvRG91YmxlKHJlZ1QxLCBmcFJlZ1QxKTsKKyAgICAgICAgYWRk
NjQodGFnVHlwZU51bWJlclJlZ2lzdGVyLCByZWdUMSk7CisgICAgICAgIG1vdmU2NFRvRG91Ymxl
KHJlZ1QxLCBmcFJlZ1QxKTsKICAgICAgICAgc2tpcERvdWJsZUxvYWQubGluayh0aGlzKTsKICAg
ICB9CiAgICAgZGl2RG91YmxlKGZwUmVnVDEsIGZwUmVnVDApOwpAQCAtMTEwMCwxMyArMTEwMCwx
MyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kaXYoSW5zdHJ1Y3Rpb24qIGN1cnJlCiAgICAgSnVtcCBp
c0ludGVnZXIgPSBqdW1wKCk7CiAgICAgbm90SW50ZWdlci5saW5rKHRoaXMpOwogICAgIGFkZDMy
KFRydXN0ZWRJbW0zMigxKSwgQWJzb2x1dGVBZGRyZXNzKCZtX2NvZGVCbG9jay0+YWRkU3BlY2lh
bEZhc3RDYXNlUHJvZmlsZShtX2J5dGVjb2RlT2Zmc2V0KS0+bV9jb3VudGVyKSk7Ci0gICAgbW92
ZURvdWJsZVRvUHRyKGZwUmVnVDAsIHJlZ1QwKTsKLSAgICBzdWJQdHIodGFnVHlwZU51bWJlclJl
Z2lzdGVyLCByZWdUMCk7CisgICAgbW92ZURvdWJsZVRvNjQoZnBSZWdUMCwgcmVnVDApOworICAg
IHN1YjY0KHRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgcmVnVDApOwogICAgIGlzSW50ZWdlci5saW5r
KHRoaXMpOwogI2Vsc2UKICAgICAvLyBEb3VibGUgcmVzdWx0LgotICAgIG1vdmVEb3VibGVUb1B0
cihmcFJlZ1QwLCByZWdUMCk7Ci0gICAgc3ViUHRyKHRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgcmVn
VDApOworICAgIG1vdmVEb3VibGVUbzY0KGZwUmVnVDAsIHJlZ1QwKTsKKyAgICBzdWI2NCh0YWdU
eXBlTnVtYmVyUmVnaXN0ZXIsIHJlZ1QwKTsKICNlbmRpZgogCiAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QsIHJlZ1QwKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
Q2FsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxs
LmNwcAkocmV2aXNpb24gMTMxNDQ5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRD
YWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzIsNyArNzIsNyBAQCB2b2lkIEpJVDo6Y29tcGls
ZUxvYWRWYXJhcmdzKEluc3RydWN0aW9uCiAKICAgICBpZiAoY2FuT3B0aW1pemUpIHsKICAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudHMsIHJlZ1QwKTsKLSAgICAgICAgc2xv
d0Nhc2UuYXBwZW5kKGJyYW5jaFB0cihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW1QdHIoSlNW
YWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSkpKSk7CisgICAgICAgIHNsb3dDYXNlLmFwcGVuZChicmFu
Y2g2NChOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoSlNWYWx1
ZSgpKSkpKTsKIAogICAgICAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlcjMyKEpTU3RhY2s6
OkFyZ3VtZW50Q291bnQsIHJlZ1QwKTsKICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaDMy
KEFib3ZlLCByZWdUMCwgVHJ1c3RlZEltbTMyKEFyZ3VtZW50czo6TWF4QXJndW1lbnRzICsgMSkp
KTsKQEAgLTkxLDE4ICs5MSwxOCBAQCB2b2lkIEpJVDo6Y29tcGlsZUxvYWRWYXJhcmdzKEluc3Ry
dWN0aW9uCiAKICAgICAgICAgLy8gSW5pdGlhbGl6ZSAndGhpcycuCiAgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIodGhpc1ZhbHVlLCByZWdUMik7Ci0gICAgICAgIHN0b3JlUHRyKHJlZ1Qy
LCBBZGRyZXNzKHJlZ1QxLCBDYWxsRnJhbWU6OnRoaXNBcmd1bWVudE9mZnNldCgpICogc3RhdGlj
X2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSkpOworICAgICAgICBzdG9yZTY0KHJlZ1QyLCBB
ZGRyZXNzKHJlZ1QxLCBDYWxsRnJhbWU6OnRoaXNBcmd1bWVudE9mZnNldCgpICogc3RhdGljX2Nh
c3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSkpOwogCiAgICAgICAgIC8vIENvcHkgYXJndW1lbnRz
LgogICAgICAgICBuZWczMihyZWdUMCk7CiAgICAgICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1Qw
LCByZWdUMCk7Ci0gICAgICAgIGVuZC5hcHBlbmQoYnJhbmNoQWRkUHRyKFplcm8sIFRydXN0ZWRJ
bW0zMigxKSwgcmVnVDApKTsKKyAgICAgICAgZW5kLmFwcGVuZChicmFuY2hBZGQ2NChaZXJvLCBU
cnVzdGVkSW1tMzIoMSksIHJlZ1QwKSk7CiAgICAgICAgIC8vIHJlZ1QwOiAtYXJndW1lbnRDb3Vu
dAogCiAgICAgICAgIExhYmVsIGNvcHlMb29wID0gbGFiZWwoKTsKLSAgICAgICAgbG9hZFB0cihC
YXNlSW5kZXgoY2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1QwLCBUaW1lc0VpZ2h0LCBDYWxsRnJhbWU6
OnRoaXNBcmd1bWVudE9mZnNldCgpICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIp
KSksIHJlZ1QyKTsKLSAgICAgICAgc3RvcmVQdHIocmVnVDIsIEJhc2VJbmRleChyZWdUMSwgcmVn
VDAsIFRpbWVzRWlnaHQsIENhbGxGcmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCkgKiBzdGF0aWNf
Y2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpKSk7Ci0gICAgICAgIGJyYW5jaEFkZFB0cihOb25a
ZXJvLCBUcnVzdGVkSW1tMzIoMSksIHJlZ1QwKS5saW5rVG8oY29weUxvb3AsIHRoaXMpOworICAg
ICAgICBsb2FkNjQoQmFzZUluZGV4KGNhbGxGcmFtZVJlZ2lzdGVyLCByZWdUMCwgVGltZXNFaWdo
dCwgQ2FsbEZyYW1lOjp0aGlzQXJndW1lbnRPZmZzZXQoKSAqIHN0YXRpY19jYXN0PGludD4oc2l6
ZW9mKFJlZ2lzdGVyKSkpLCByZWdUMik7CisgICAgICAgIHN0b3JlNjQocmVnVDIsIEJhc2VJbmRl
eChyZWdUMSwgcmVnVDAsIFRpbWVzRWlnaHQsIENhbGxGcmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0
KCkgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpKSk7CisgICAgICAgIGJyYW5j
aEFkZDY0KE5vblplcm8sIFRydXN0ZWRJbW0zMigxKSwgcmVnVDApLmxpbmtUbyhjb3B5TG9vcCwg
dGhpcyk7CiAKICAgICAgICAgZW5kLmFwcGVuZChqdW1wKCkpOwogICAgIH0KQEAgLTEyNCw3ICsx
MjQsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFsKCkKIHsKICAgICBKSVRTdHViQ2FsbCBz
dHViQ2FsbCh0aGlzLCBjdGlfb3BfY2FsbF9ldmFsKTsgLy8gSW5pdGlhbGl6ZXMgU2NvcGVDaGFp
bjsgUmV0dXJuUEM7IENvZGVCbG9jay4KICAgICBzdHViQ2FsbC5jYWxsKCk7Ci0gICAgYWRkU2xv
d0Nhc2UoYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0cihKU1ZhbHVlOjplbmNv
ZGUoSlNWYWx1ZSgpKSkpKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2g2NChFcXVhbCwgcmVnVDAs
IFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKSkpKTsKICAgICBlbWl0R2V0
RnJvbUNhbGxGcmFtZUhlYWRlclB0cihKU1N0YWNrOjpDYWxsZXJGcmFtZSwgY2FsbEZyYW1lUmVn
aXN0ZXIpOwogCiAgICAgc2FtcGxlQ29kZUJsb2NrKG1fY29kZUJsb2NrKTsKQEAgLTEzNCw3ICsx
MzQsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoVmVjdG9yCiB7CiAgICAg
bGlua1Nsb3dDYXNlKGl0ZXIpOwogCi0gICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIo
SlNTdGFjazo6Q2FsbGVlLCByZWdUMCk7CisgICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXI2
NChKU1N0YWNrOjpDYWxsZWUsIHJlZ1QwKTsKICAgICBlbWl0TmFrZWRDYWxsKG1fZ2xvYmFsRGF0
YS0+aml0U3R1YnMtPmN0aVZpcnR1YWxDYWxsKCkpOwogCiAgICAgc2FtcGxlQ29kZUJsb2NrKG1f
Y29kZUJsb2NrKTsKQEAgLTE3OSw4ICsxNzksOCBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChP
cGNvZGVJRCBvcGNvZGVJCiAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoaW5zdHJ1Y3Rpb24gLSBt
X2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKSksIEFkZHJlc3MoY2FsbEZyYW1lUmVn
aXN0ZXIsIEpTU3RhY2s6OkFyZ3VtZW50Q291bnQgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihS
ZWdpc3RlcikpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0
cy50YWcpKSk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjYWxsZWUsIHJlZ1QwKTsgLy8g
cmVnVDAgaG9sZHMgY2FsbGVlLgogCi0gICAgc3RvcmVQdHIoY2FsbEZyYW1lUmVnaXN0ZXIsIEFk
ZHJlc3MocmVnVDEsIEpTU3RhY2s6OkNhbGxlckZyYW1lICogc3RhdGljX2Nhc3Q8aW50PihzaXpl
b2YoUmVnaXN0ZXIpKSkpOwotICAgIHN0b3JlUHRyKHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBKU1N0
YWNrOjpDYWxsZWUgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpKSk7CisgICAg
c3RvcmU2NChjYWxsRnJhbWVSZWdpc3RlciwgQWRkcmVzcyhyZWdUMSwgSlNTdGFjazo6Q2FsbGVy
RnJhbWUgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpKSk7CisgICAgc3RvcmU2
NChyZWdUMCwgQWRkcmVzcyhyZWdUMSwgSlNTdGFjazo6Q2FsbGVlICogc3RhdGljX2Nhc3Q8aW50
PihzaXplb2YoUmVnaXN0ZXIpKSkpOwogICAgIG1vdmUocmVnVDEsIGNhbGxGcmFtZVJlZ2lzdGVy
KTsKIAogICAgIGlmIChvcGNvZGVJRCA9PSBvcF9jYWxsX2V2YWwpIHsKQEAgLTE5MCw3ICsxOTAs
NyBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChPcGNvZGVJRCBvcGNvZGVJCiAKICAgICBEYXRh
TGFiZWxQdHIgYWRkcmVzc09mTGlua2VkRnVuY3Rpb25DaGVjazsKICAgICBCRUdJTl9VTklOVEVS
UlVQVEVEX1NFUVVFTkNFKHNlcXVlbmNlT3BDYWxsKTsKLSAgICBKdW1wIHNsb3dDYXNlID0gYnJh
bmNoUHRyV2l0aFBhdGNoKE5vdEVxdWFsLCByZWdUMCwgYWRkcmVzc09mTGlua2VkRnVuY3Rpb25D
aGVjaywgVHJ1c3RlZEltbVB0cihKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKSkpOworICAgIEp1
bXAgc2xvd0Nhc2UgPSBicmFuY2hQdHJXaXRoUGF0Y2goTm90RXF1YWwsIHJlZ1QwLCBhZGRyZXNz
T2ZMaW5rZWRGdW5jdGlvbkNoZWNrLCBUcnVzdGVkSW1tUHRyKDApKTsKICAgICBFTkRfVU5JTlRF
UlJVUFRFRF9TRVFVRU5DRShzZXF1ZW5jZU9wQ2FsbCk7CiAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nh
c2UpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZU1ldGhvZHMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZU1ldGhv
ZHMuaAkocmV2aXNpb24gMTMxNDQ5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJ
bmxpbmVNZXRob2RzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDE0ICszMSw2IEBACiAKIG5hbWVz
cGFjZSBKU0MgewogCi0vKiBEZXByZWNhdGVkOiBQbGVhc2UgdXNlIEpJVFN0dWJDYWxsIGluc3Rl
YWQuICovCi0KLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRKSVRTdHViQXJnKHVuc2ln
bmVkIGFyZ3VtZW50TnVtYmVyLCBSZWdpc3RlcklEIGRzdCkKLXsKLSAgICB1bnNpZ25lZCBhcmd1
bWVudFN0YWNrT2Zmc2V0ID0gKGFyZ3VtZW50TnVtYmVyICogKHNpemVvZihKU1ZhbHVlKSAvIHNp
emVvZih2b2lkKikpKSArIEpJVFNUQUNLRlJBTUVfQVJHU19JTkRFWDsKLSAgICBwZWVrKGRzdCwg
YXJndW1lbnRTdGFja09mZnNldCk7Ci19Ci0KIEFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3Bl
cmFuZENvbnN0YW50SW1tZWRpYXRlRG91YmxlKHVuc2lnbmVkIHNyYykKIHsKICAgICByZXR1cm4g
bV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KHNyYykgJiYgZ2V0Q29uc3RhbnRP
cGVyYW5kKHNyYykuaXNEb3VibGUoKTsKQEAgLTUwLDIzICs0MiwzMyBAQCBBTFdBWVNfSU5MSU5F
IEpTVmFsdWUgSklUOjpnZXRDb25zdGFudE9wCiAgICAgcmV0dXJuIG1fY29kZUJsb2NrLT5nZXRD
b25zdGFudChzcmMpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0UHV0VG9DYWxs
RnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJFbnRy
eSBlbnRyeSkKLXsKLSAgICBzdG9yZVB0cihmcm9tLCBwYXlsb2FkRm9yKGVudHJ5LCBjYWxsRnJh
bWVSZWdpc3RlcikpOwotfQotCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0UHV0Q2VsbFRv
Q2FsbEZyYW1lSGVhZGVyKFJlZ2lzdGVySUQgZnJvbSwgSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVy
RW50cnkgZW50cnkpCiB7CiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKICAgICBzdG9yZTMyKFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgdGFnRm9yKGVudHJ5LCBjYWxsRnJhbWVSZWdpc3Rl
cikpOworICAgIHN0b3JlMzIoZnJvbSwgcGF5bG9hZEZvcihlbnRyeSwgY2FsbEZyYW1lUmVnaXN0
ZXIpKTsKKyNlbHNlCisgICAgc3RvcmU2NChmcm9tLCBwYXlsb2FkRm9yKGVudHJ5LCBjYWxsRnJh
bWVSZWdpc3RlcikpOwogI2VuZGlmCi0gICAgc3RvcmVQdHIoZnJvbSwgcGF5bG9hZEZvcihlbnRy
eSwgY2FsbEZyYW1lUmVnaXN0ZXIpKTsKIH0KIAogQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1p
dFB1dEludFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lzdGVySUQgZnJvbSwgSlNTdGFjazo6Q2FsbEZy
YW1lSGVhZGVyRW50cnkgZW50cnkpCiB7CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKICAgICBzdG9y
ZTMyKFRydXN0ZWRJbW0zMihJbnQzMlRhZyksIGludFRhZ0ZvcihlbnRyeSwgY2FsbEZyYW1lUmVn
aXN0ZXIpKTsKICAgICBzdG9yZTMyKGZyb20sIGludFBheWxvYWRGb3IoZW50cnksIGNhbGxGcmFt
ZVJlZ2lzdGVyKSk7CisjZWxzZQorICAgIHN0b3JlNjQoZnJvbSwgcGF5bG9hZEZvcihlbnRyeSwg
Y2FsbEZyYW1lUmVnaXN0ZXIpKTsKKyNlbmRpZgorfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgSklU
OjplbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBKU1N0YWNrOjpDYWxs
RnJhbWVIZWFkZXJFbnRyeSBlbnRyeSkKK3sKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgIHN0
b3JlUHRyKGZyb20sIHBheWxvYWRGb3IoZW50cnksIGNhbGxGcmFtZVJlZ2lzdGVyKSk7CisjZWxz
ZQorICAgIHN0b3JlNjQoZnJvbSwgcGF5bG9hZEZvcihlbnRyeSwgY2FsbEZyYW1lUmVnaXN0ZXIp
KTsKKyNlbmRpZgogfQogCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0UHV0SW1tZWRpYXRl
VG9DYWxsRnJhbWVIZWFkZXIodm9pZCogdmFsdWUsIEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlckVu
dHJ5IGVudHJ5KQpAQCAtODIsNiArODQsMjIgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1p
dEdldEZyb21DYWxsRgogI2VuZGlmCiB9CiAKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRH
ZXRGcm9tQ2FsbEZyYW1lSGVhZGVyMzIoSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyRW50cnkgZW50
cnksIFJlZ2lzdGVySUQgdG8sIFJlZ2lzdGVySUQgZnJvbSkKK3sKKyAgICBsb2FkMzIoQWRkcmVz
cyhmcm9tLCBlbnRyeSAqIHNpemVvZihSZWdpc3RlcikpLCB0byk7CisjaWYgVVNFKEpTVkFMVUU2
NCkKKyAgICBraWxsTGFzdFJlc3VsdFJlZ2lzdGVyKCk7CisjZW5kaWYKK30KKworI2lmIFVTRShK
U1ZBTFVFNjQpCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0RnJvbUNhbGxGcmFtZUhl
YWRlcjY0KEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlckVudHJ5IGVudHJ5LCBSZWdpc3RlcklEIHRv
LCBSZWdpc3RlcklEIGZyb20pCit7CisgICAgbG9hZDY0KEFkZHJlc3MoZnJvbSwgZW50cnkgKiBz
aXplb2YoUmVnaXN0ZXIpKSwgdG8pOworICAgIGtpbGxMYXN0UmVzdWx0UmVnaXN0ZXIoKTsKK30K
KyNlbmRpZgorCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0TG9hZENoYXJhY3RlclN0cmlu
ZyhSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QsIEp1bXBMaXN0JiBmYWlsdXJlcykKIHsK
ICAgICBmYWlsdXJlcy5hcHBlbmQoYnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHNyYywgSlND
ZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIFRydXN0ZWRJbW1QdHIobV9nbG9iYWxEYXRhLT5zdHJp
bmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CkBAIC0xMDEsMTQgKzExOSw2IEBAIEFMV0FZU19JTkxJTkUg
dm9pZCBKSVQ6OmVtaXRMb2FkQ2hhcmFjdGUKICAgICBjb250OEJpdC5saW5rKHRoaXMpOwogfQog
Ci1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlcjMyKEpT
U3RhY2s6OkNhbGxGcmFtZUhlYWRlckVudHJ5IGVudHJ5LCBSZWdpc3RlcklEIHRvLCBSZWdpc3Rl
cklEIGZyb20pCi17Ci0gICAgbG9hZDMyKEFkZHJlc3MoZnJvbSwgZW50cnkgKiBzaXplb2YoUmVn
aXN0ZXIpKSwgdG8pOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAga2lsbExhc3RSZXN1bHRSZWdp
c3RlcigpOwotI2VuZGlmCi19Ci0KIEFMV0FZU19JTkxJTkUgSklUOjpDYWxsIEpJVDo6ZW1pdE5h
a2VkQ2FsbChDb2RlUHRyIGZ1bmN0aW9uKQogewogICAgIEFTU0VSVChtX2J5dGVjb2RlT2Zmc2V0
ICE9ICh1bnNpZ25lZCktMSk7IC8vIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBk
dXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVPZmZzZXQg
aXMgc2V0LgpAQCAtNDczLDggKzQ4Myw4IEBAIGlubGluZSB2b2lkIEpJVDo6ZW1pdEFsbG9jYXRl
SlNBcnJheSh1bnMKICAgICAvLyBTdG9yZSB0aGUgdmFsdWVzIHdlIGhhdmUuCiAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAg
ICAgICAgbG9hZFB0cihBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCAodmFsdWVzUmVnaXN0ZXIg
KyBpKSAqIHNpemVvZihSZWdpc3RlcikpLCBzdG9yYWdlUHRyKTsKLSAgICAgICAgc3RvcmVQdHIo
c3RvcmFnZVB0ciwgQWRkcmVzcyhzdG9yYWdlUmVzdWx0LCBzaXplb2YoV3JpdGVCYXJyaWVyPFVu
a25vd24+KSAqIGkpKTsKKyAgICAgICAgbG9hZDY0KEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIs
ICh2YWx1ZXNSZWdpc3RlciArIGkpICogc2l6ZW9mKFJlZ2lzdGVyKSksIHN0b3JhZ2VQdHIpOwor
ICAgICAgICBzdG9yZTY0KHN0b3JhZ2VQdHIsIEFkZHJlc3Moc3RvcmFnZVJlc3VsdCwgc2l6ZW9m
KFdyaXRlQmFycmllcjxVbmtub3duPikgKiBpKSk7CiAjZWxzZQogICAgICAgICBsb2FkMzIoQWRk
cmVzcyhjYWxsRnJhbWVSZWdpc3RlciwgKHZhbHVlc1JlZ2lzdGVyICsgaSkgKiBzaXplb2YoUmVn
aXN0ZXIpKSwgc3RvcmFnZVB0cik7CiAgICAgICAgIHN0b3JlMzIoc3RvcmFnZVB0ciwgQWRkcmVz
cyhzdG9yYWdlUmVzdWx0LCBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSAqIGkpKTsKQEAg
LTUwMCw3ICs1MTAsNyBAQCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
CiAgICAgICAgIC8vIFdlJ3JlIGluIGEgc2ltcGxlIGNvbmZpZ3VyYXRpb246IG9ubHkgb25lIGJ1
Y2tldCwgc28gd2UgY2FuIGp1c3QgZG8gYSBkaXJlY3QKICAgICAgICAgLy8gc3RvcmUuCiAjaWYg
VVNFKEpTVkFMVUU2NCkKLSAgICAgICAgc3RvcmVQdHIodmFsdWUsIHZhbHVlUHJvZmlsZS0+bV9i
dWNrZXRzKTsKKyAgICAgICAgc3RvcmU2NCh2YWx1ZSwgdmFsdWVQcm9maWxlLT5tX2J1Y2tldHMp
OwogI2Vsc2UKICAgICAgICAgRW5jb2RlZFZhbHVlRGVzY3JpcHRvciogZGVzY3JpcHRvciA9IGJp
dHdpc2VfY2FzdDxFbmNvZGVkVmFsdWVEZXNjcmlwdG9yKj4odmFsdWVQcm9maWxlLT5tX2J1Y2tl
dHMpOwogICAgICAgICBzdG9yZTMyKHZhbHVlLCAmZGVzY3JpcHRvci0+YXNCaXRzLnBheWxvYWQp
OwpAQCAtNTE2LDcgKzUyNiw3IEBAIGlubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZSgKICAgICBhbmQzMihUcnVzdGVkSW1tMzIoVmFsdWVQcm9maWxlOjpidWNrZXRJbmRleE1h
c2spLCBidWNrZXRDb3VudGVyUmVnaXN0ZXIpOwogICAgIG1vdmUoVHJ1c3RlZEltbVB0cih2YWx1
ZVByb2ZpbGUtPm1fYnVja2V0cyksIHNjcmF0Y2gpOwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAg
c3RvcmVQdHIodmFsdWUsIEJhc2VJbmRleChzY3JhdGNoLCBidWNrZXRDb3VudGVyUmVnaXN0ZXIs
IFRpbWVzRWlnaHQpKTsKKyAgICBzdG9yZTY0KHZhbHVlLCBCYXNlSW5kZXgoc2NyYXRjaCwgYnVj
a2V0Q291bnRlclJlZ2lzdGVyLCBUaW1lc0VpZ2h0KSk7CiAjZWxpZiBVU0UoSlNWQUxVRTMyXzY0
KQogICAgIHN0b3JlMzIodmFsdWUsIEJhc2VJbmRleChzY3JhdGNoLCBidWNrZXRDb3VudGVyUmVn
aXN0ZXIsIFRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXls
b2FkKSkpOwogICAgIHN0b3JlMzIodmFsdWVUYWcsIEJhc2VJbmRleChzY3JhdGNoLCBidWNrZXRD
b3VudGVyUmVnaXN0ZXIsIFRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFz
Qml0cy50YWcpKSk7CkBAIC04NjAsNiArODcwLDE0IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6
OmdldE9wZXJhbmRDb25zdGEKIAogI2Vsc2UgLy8gVVNFKEpTVkFMVUUzMl82NCkKIAorLyogRGVw
cmVjYXRlZDogUGxlYXNlIHVzZSBKSVRTdHViQ2FsbCBpbnN0ZWFkLiAqLworCitBTFdBWVNfSU5M
SU5FIHZvaWQgSklUOjplbWl0R2V0SklUU3R1YkFyZyh1bnNpZ25lZCBhcmd1bWVudE51bWJlciwg
UmVnaXN0ZXJJRCBkc3QpCit7CisgICAgdW5zaWduZWQgYXJndW1lbnRTdGFja09mZnNldCA9IChh
cmd1bWVudE51bWJlciAqIChzaXplb2YoSlNWYWx1ZSkgLyBzaXplb2Yodm9pZCopKSkgKyBKSVRT
VEFDS0ZSQU1FX0FSR1NfSU5ERVg7CisgICAgcGVlazY0KGRzdCwgYXJndW1lbnRTdGFja09mZnNl
dCk7Cit9CisKIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmtpbGxMYXN0UmVzdWx0UmVnaXN0ZXIo
KQogewogICAgIG1fbGFzdFJlc3VsdEJ5dGVjb2RlUmVnaXN0ZXIgPSBzdGQ6Om51bWVyaWNfbGlt
aXRzPGludD46Om1heCgpOwpAQCAtODc0LDkgKzg5Miw5IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBK
SVQ6OmVtaXRHZXRWaXJ0dWFsUmUKICAgICBpZiAobV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdp
c3RlckluZGV4KHNyYykpIHsKICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1fY29kZUJsb2NrLT5n
ZXRDb25zdGFudChzcmMpOwogICAgICAgICBpZiAoIXZhbHVlLmlzTnVtYmVyKCkpCi0gICAgICAg
ICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKSksIGRzdCk7Cisg
ICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUodmFsdWUpKSwgZHN0
KTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgbW92ZShJbW1QdHIoSlNWYWx1ZTo6ZW5jb2Rl
KHZhbHVlKSksIGRzdCk7CisgICAgICAgICAgICBtb3ZlKEltbTY0KEpTVmFsdWU6OmVuY29kZSh2
YWx1ZSkpLCBkc3QpOwogICAgICAgICBraWxsTGFzdFJlc3VsdFJlZ2lzdGVyKCk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CkBAIC04ODksNyArOTA3LDcgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJ
VDo6ZW1pdEdldFZpcnR1YWxSZQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbG9hZFB0
cihBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCBzcmMgKiBzaXplb2YoUmVnaXN0ZXIpKSwgZHN0
KTsKKyAgICBsb2FkNjQoQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3Rlciwgc3JjICogc2l6ZW9mKFJl
Z2lzdGVyKSksIGRzdCk7CiAgICAga2lsbExhc3RSZXN1bHRSZWdpc3RlcigpOwogfQogCkBAIC05
MTYsMjggKzkzNCwyNCBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFu
CiAKIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIodW5zaWdu
ZWQgZHN0LCBSZWdpc3RlcklEIGZyb20pCiB7Ci0gICAgc3RvcmVQdHIoZnJvbSwgQWRkcmVzcyhj
YWxsRnJhbWVSZWdpc3RlciwgZHN0ICogc2l6ZW9mKFJlZ2lzdGVyKSkpOworICAgIHN0b3JlNjQo
ZnJvbSwgQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3RlciwgZHN0ICogc2l6ZW9mKFJlZ2lzdGVyKSkp
OwogICAgIG1fbGFzdFJlc3VsdEJ5dGVjb2RlUmVnaXN0ZXIgPSAoZnJvbSA9PSBjYWNoZWRSZXN1
bHRSZWdpc3RlcikgPyBzdGF0aWNfY2FzdDxpbnQ+KGRzdCkgOiBzdGQ6Om51bWVyaWNfbGltaXRz
PGludD46Om1heCgpOwogfQogCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SW5pdFJlZ2lz
dGVyKHVuc2lnbmVkIGRzdCkKIHsKLSAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKSksIEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIGRzdCAq
IHNpemVvZihSZWdpc3RlcikpKTsKKyAgICBzdG9yZTY0KFRydXN0ZWRJbW02NChKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSkpLCBBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCBkc3QgKiBz
aXplb2YoUmVnaXN0ZXIpKSk7CiB9CiAKIEFMV0FZU19JTkxJTkUgSklUOjpKdW1wIEpJVDo6ZW1p
dEp1bXBJZkpTQ2VsbChSZWdpc3RlcklEIHJlZykKIHsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAg
IHJldHVybiBicmFuY2hUZXN0UHRyKFplcm8sIHJlZywgdGFnTWFza1JlZ2lzdGVyKTsKLSNlbHNl
Ci0gICAgcmV0dXJuIGJyYW5jaFRlc3QzMihaZXJvLCByZWcsIFRydXN0ZWRJbW0zMihUYWdNYXNr
KSk7Ci0jZW5kaWYKKyAgICByZXR1cm4gYnJhbmNoVGVzdDY0KFplcm8sIHJlZywgdGFnTWFza1Jl
Z2lzdGVyKTsKIH0KIAogQUxXQVlTX0lOTElORSBKSVQ6Okp1bXAgSklUOjplbWl0SnVtcElmQm90
aEpTQ2VsbHMoUmVnaXN0ZXJJRCByZWcxLCBSZWdpc3RlcklEIHJlZzIsIFJlZ2lzdGVySUQgc2Ny
YXRjaCkKIHsKICAgICBtb3ZlKHJlZzEsIHNjcmF0Y2gpOwotICAgIG9yUHRyKHJlZzIsIHNjcmF0
Y2gpOworICAgIG9yNjQocmVnMiwgc2NyYXRjaCk7CiAgICAgcmV0dXJuIGVtaXRKdW1wSWZKU0Nl
bGwoc2NyYXRjaCk7CiB9CiAKQEAgLTk0OCwxMSArOTYyLDcgQEAgQUxXQVlTX0lOTElORSB2b2lk
IEpJVDo6ZW1pdEp1bXBTbG93Q2FzZQogCiBBTFdBWVNfSU5MSU5FIEpJVDo6SnVtcCBKSVQ6OmVt
aXRKdW1wSWZOb3RKU0NlbGwoUmVnaXN0ZXJJRCByZWcpCiB7Ci0jaWYgVVNFKEpTVkFMVUU2NCkK
LSAgICByZXR1cm4gYnJhbmNoVGVzdFB0cihOb25aZXJvLCByZWcsIHRhZ01hc2tSZWdpc3Rlcik7
Ci0jZWxzZQotICAgIHJldHVybiBicmFuY2hUZXN0MzIoTm9uWmVybywgcmVnLCBUcnVzdGVkSW1t
MzIoVGFnTWFzaykpOwotI2VuZGlmCisgICAgcmV0dXJuIGJyYW5jaFRlc3Q2NChOb25aZXJvLCBy
ZWcsIHRhZ01hc2tSZWdpc3Rlcik7CiB9CiAKIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChSZWdpc3RlcklEIHJlZykKQEAgLTk2Niw4ICs5NzYsNiBA
QCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlCiAgICAgICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWcpOwogfQogCi0jaWYgVVNFKEpTVkFMVUU2NCkKLQog
aW5saW5lIHZvaWQgSklUOjplbWl0TG9hZERvdWJsZShpbnQgaW5kZXgsIEZQUmVnaXN0ZXJJRCB2
YWx1ZSkKIHsKICAgICBpZiAobV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KGlu
ZGV4KSkgewpAQCAtOTg1LDMwICs5OTMsMjEgQEAgaW5saW5lIHZvaWQgSklUOjplbWl0TG9hZElu
dDMyVG9Eb3VibGUoaQogICAgIH0gZWxzZQogICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShh
ZGRyZXNzRm9yKGluZGV4KSwgdmFsdWUpOwogfQotI2VuZGlmCiAKIEFMV0FZU19JTkxJTkUgSklU
OjpKdW1wIEpJVDo6ZW1pdEp1bXBJZkltbWVkaWF0ZUludGVnZXIoUmVnaXN0ZXJJRCByZWcpCiB7
Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICByZXR1cm4gYnJhbmNoUHRyKEFib3ZlT3JFcXVhbCwg
cmVnLCB0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOwotI2Vsc2UKLSAgICByZXR1cm4gYnJhbmNoVGVz
dDMyKE5vblplcm8sIHJlZywgVHJ1c3RlZEltbTMyKFRhZ1R5cGVOdW1iZXIpKTsKLSNlbmRpZgor
ICAgIHJldHVybiBicmFuY2g2NChBYm92ZU9yRXF1YWwsIHJlZywgdGFnVHlwZU51bWJlclJlZ2lz
dGVyKTsKIH0KIAogQUxXQVlTX0lOTElORSBKSVQ6Okp1bXAgSklUOjplbWl0SnVtcElmTm90SW1t
ZWRpYXRlSW50ZWdlcihSZWdpc3RlcklEIHJlZykKIHsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAg
IHJldHVybiBicmFuY2hQdHIoQmVsb3csIHJlZywgdGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKLSNl
bHNlCi0gICAgcmV0dXJuIGJyYW5jaFRlc3QzMihaZXJvLCByZWcsIFRydXN0ZWRJbW0zMihUYWdU
eXBlTnVtYmVyKSk7Ci0jZW5kaWYKKyAgICByZXR1cm4gYnJhbmNoNjQoQmVsb3csIHJlZywgdGFn
VHlwZU51bWJlclJlZ2lzdGVyKTsKIH0KIAogQUxXQVlTX0lOTElORSBKSVQ6Okp1bXAgSklUOjpl
bWl0SnVtcElmTm90SW1tZWRpYXRlSW50ZWdlcnMoUmVnaXN0ZXJJRCByZWcxLCBSZWdpc3RlcklE
IHJlZzIsIFJlZ2lzdGVySUQgc2NyYXRjaCkKIHsKICAgICBtb3ZlKHJlZzEsIHNjcmF0Y2gpOwot
ICAgIGFuZFB0cihyZWcyLCBzY3JhdGNoKTsKKyAgICBhbmQ2NChyZWcyLCBzY3JhdGNoKTsKICAg
ICByZXR1cm4gZW1pdEp1bXBJZk5vdEltbWVkaWF0ZUludGVnZXIoc2NyYXRjaCk7CiB9CiAKQEAg
LTEwMjcsNDEgKzEwMjYsMTcgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93
Q2FzZQogICAgIGFkZFNsb3dDYXNlKGVtaXRKdW1wSWZOb3RJbW1lZGlhdGVOdW1iZXIocmVnKSk7
CiB9CiAKLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1p
dEZhc3RBcml0aERlVGFnSW1tZWRpYXRlKFJlZ2lzdGVySUQgcmVnKQotewotICAgIHN1YlB0cihU
cnVzdGVkSW1tMzIoVGFnVHlwZU51bWJlciksIHJlZyk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgSklU
OjpKdW1wIEpJVDo6ZW1pdEZhc3RBcml0aERlVGFnSW1tZWRpYXRlSnVtcElmWmVybyhSZWdpc3Rl
cklEIHJlZykKLXsKLSAgICByZXR1cm4gYnJhbmNoU3ViUHRyKFplcm8sIFRydXN0ZWRJbW0zMihU
YWdUeXBlTnVtYmVyKSwgcmVnKTsKLX0KLSNlbmRpZgotCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklU
OjplbWl0RmFzdEFyaXRoUmVUYWdJbW1lZGlhdGUoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQg
ZGVzdCkKIHsKLSNpZiBVU0UoSlNWQUxVRTY0KQogICAgIGVtaXRGYXN0QXJpdGhJbnRUb0ltbU5v
Q2hlY2soc3JjLCBkZXN0KTsKLSNlbHNlCi0gICAgaWYgKHNyYyAhPSBkZXN0KQotICAgICAgICBt
b3ZlKHNyYywgZGVzdCk7Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihUYWdUeXBlTnVtYmVyKSwg
ZGVzdCk7Ci0jZW5kaWYKIH0KIAogLy8gb3BlcmFuZCBpcyBpbnQzMl90LCBtdXN0IGhhdmUgYmVl
biB6ZXJvLWV4dGVuZGVkIGlmIHJlZ2lzdGVyIGlzIDY0LWJpdC4KIEFMV0FZU19JTkxJTkUgdm9p
ZCBKSVQ6OmVtaXRGYXN0QXJpdGhJbnRUb0ltbU5vQ2hlY2soUmVnaXN0ZXJJRCBzcmMsIFJlZ2lz
dGVySUQgZGVzdCkKIHsKLSNpZiBVU0UoSlNWQUxVRTY0KQogICAgIGlmIChzcmMgIT0gZGVzdCkK
ICAgICAgICAgbW92ZShzcmMsIGRlc3QpOwotICAgIG9yUHRyKHRhZ1R5cGVOdW1iZXJSZWdpc3Rl
ciwgZGVzdCk7Ci0jZWxzZQotICAgIHNpZ25FeHRlbmQzMlRvUHRyKHNyYywgZGVzdCk7Ci0gICAg
YWRkUHRyKGRlc3QsIGRlc3QpOwotICAgIGVtaXRGYXN0QXJpdGhSZVRhZ0ltbWVkaWF0ZShkZXN0
LCBkZXN0KTsKLSNlbmRpZgorICAgIG9yNjQodGFnVHlwZU51bWJlclJlZ2lzdGVyLCBkZXN0KTsK
IH0KIAogQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdFRhZ0FzQm9vbEltbWVkaWF0ZShSZWdp
c3RlcklEIHJlZykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNw
cAkocmV2aXNpb24gMTMxNDQ5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNv
ZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQ4LDE0ICsyNDgsMTQgQEAgSklUOjpMYWJlbCBK
SVQ6OnByaXZhdGVDb21waWxlQ1RJTmF0aXZlQwogICAgIC8vIEhvc3QgZnVuY3Rpb24gc2lnbmF0
dXJlOiBmKEV4ZWNTdGF0ZSopOwogICAgIG1vdmUoY2FsbEZyYW1lUmVnaXN0ZXIsIFg4NlJlZ2lz
dGVyczo6ZWRpKTsKIAotICAgIHN1YlB0cihUcnVzdGVkSW1tMzIoMTYgLSBzaXplb2Yodm9pZCop
KSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOyAvLyBBbGlnbiBzdGFjayBhZnRlciBjYWxsLgorICAg
IHN1YlB0cihUcnVzdGVkSW1tMzIoMTYgLSBzaXplb2YoaW50NjRfdCkpLCBzdGFja1BvaW50ZXJS
ZWdpc3Rlcik7IC8vIEFsaWduIHN0YWNrIGFmdGVyIGNhbGwuCiAKICAgICBlbWl0R2V0RnJvbUNh
bGxGcmFtZUhlYWRlclB0cihKU1N0YWNrOjpDYWxsZWUsIFg4NlJlZ2lzdGVyczo6ZXNpKTsKICAg
ICBsb2FkUHRyKEFkZHJlc3MoWDg2UmVnaXN0ZXJzOjplc2ksIE9CSkVDVF9PRkZTRVRPRihKU0Z1
bmN0aW9uLCBtX2V4ZWN1dGFibGUpKSwgWDg2UmVnaXN0ZXJzOjpyOSk7CiAgICAgbW92ZShyZWdU
MCwgY2FsbEZyYW1lUmVnaXN0ZXIpOyAvLyBFYWdlcmx5IHJlc3RvcmUgY2FsbGVyIGZyYW1lIHJl
Z2lzdGVyIHRvIGF2b2lkIGxvYWRpbmcgZnJvbSBzdGFjay4KICAgICBjYWxsKEFkZHJlc3MoWDg2
UmVnaXN0ZXJzOjpyOSwgZXhlY3V0YWJsZU9mZnNldFRvRnVuY3Rpb24pKTsKIAotICAgIGFkZFB0
cihUcnVzdGVkSW1tMzIoMTYgLSBzaXplb2Yodm9pZCopKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIp
OworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoMTYgLSBzaXplb2YoaW50NjRfdCkpLCBzdGFja1Bv
aW50ZXJSZWdpc3Rlcik7CiAKICNlbGlmIENQVShBUk0pCiAgICAgLy8gTG9hZCBjYWxsZXIgZnJh
bWUncyBzY29wZSBjaGFpbiBpbnRvIHRoaXMgY2FsbGZyYW1lIHNvIHRoYXQgd2hhdGV2ZXIgd2Ug
Y2FsbCBjYW4KQEAgLTMxNiw4ICszMTYsOCBAQCBKSVQ6OkxhYmVsIEpJVDo6cHJpdmF0ZUNvbXBp
bGVDVElOYXRpdmVDCiAjZW5kaWYKIAogICAgIC8vIENoZWNrIGZvciBhbiBleGNlcHRpb24KLSAg
ICBsb2FkUHRyKCYoZ2xvYmFsRGF0YS0+ZXhjZXB0aW9uKSwgcmVnVDIpOwotICAgIEp1bXAgZXhj
ZXB0aW9uSGFuZGxlciA9IGJyYW5jaFRlc3RQdHIoTm9uWmVybywgcmVnVDIpOworICAgIGxvYWQ2
NCgmKGdsb2JhbERhdGEtPmV4Y2VwdGlvbiksIHJlZ1QyKTsKKyAgICBKdW1wIGV4Y2VwdGlvbkhh
bmRsZXIgPSBicmFuY2hUZXN0NjQoTm9uWmVybywgcmVnVDIpOwogCiAgICAgLy8gUmV0dXJuLgog
ICAgIHJldCgpOwpAQCAtMzYwLDkgKzM2MCw5IEBAIHZvaWQgSklUOjplbWl0X29wX21vdihJbnN0
cnVjdGlvbiogY3VycmUKICAgICB9IGVsc2UgewogICAgICAgICBpZiAobV9jb2RlQmxvY2stPmlz
Q29uc3RhbnRSZWdpc3RlckluZGV4KHNyYykpIHsKICAgICAgICAgICAgIGlmICghZ2V0Q29uc3Rh
bnRPcGVyYW5kKHNyYykuaXNOdW1iZXIoKSkKLSAgICAgICAgICAgICAgICBzdG9yZVB0cihUcnVz
dGVkSW1tUHRyKEpTVmFsdWU6OmVuY29kZShnZXRDb25zdGFudE9wZXJhbmQoc3JjKSkpLCBBZGRy
ZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCBkc3QgKiBzaXplb2YoUmVnaXN0ZXIpKSk7CisgICAgICAg
ICAgICAgICAgc3RvcmU2NChUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGdldENvbnN0YW50
T3BlcmFuZChzcmMpKSksIEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIGRzdCAqIHNpemVvZihS
ZWdpc3RlcikpKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBzdG9yZVB0cihJ
bW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKGdldENvbnN0YW50T3BlcmFuZChzcmMpKSksIEFkZHJlc3Mo
Y2FsbEZyYW1lUmVnaXN0ZXIsIGRzdCAqIHNpemVvZihSZWdpc3RlcikpKTsKKyAgICAgICAgICAg
ICAgICBzdG9yZTY0KEltbTY0KEpTVmFsdWU6OmVuY29kZShnZXRDb25zdGFudE9wZXJhbmQoc3Jj
KSkpLCBBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCBkc3QgKiBzaXplb2YoUmVnaXN0ZXIpKSk7
CiAgICAgICAgICAgICBpZiAoZHN0ID09IG1fbGFzdFJlc3VsdEJ5dGVjb2RlUmVnaXN0ZXIpCiAg
ICAgICAgICAgICAgICAga2lsbExhc3RSZXN1bHRSZWdpc3RlcigpOwogICAgICAgICB9IGVsc2Ug
aWYgKChzcmMgPT0gbV9sYXN0UmVzdWx0Qnl0ZWNvZGVSZWdpc3RlcikgfHwgKGRzdCA9PSBtX2xh
c3RSZXN1bHRCeXRlY29kZVJlZ2lzdGVyKSkgewpAQCAtMzcyLDggKzM3Miw4IEBAIHZvaWQgSklU
OjplbWl0X29wX21vdihJbnN0cnVjdGlvbiogY3VycmUKICAgICAgICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0KTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIFBlcmZv
cm0gdGhlIGNvcHkgdmlhIHJlZ1QxOyBkbyBub3QgZGlzdHVyYiBhbnkgbWFwcGluZyBpbiByZWdU
MC4KLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3Rlciwgc3JjICog
c2l6ZW9mKFJlZ2lzdGVyKSksIHJlZ1QxKTsKLSAgICAgICAgICAgIHN0b3JlUHRyKHJlZ1QxLCBB
ZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCBkc3QgKiBzaXplb2YoUmVnaXN0ZXIpKSk7CisgICAg
ICAgICAgICBsb2FkNjQoQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3Rlciwgc3JjICogc2l6ZW9mKFJl
Z2lzdGVyKSksIHJlZ1QxKTsKKyAgICAgICAgICAgIHN0b3JlNjQocmVnVDEsIEFkZHJlc3MoY2Fs
bEZyYW1lUmVnaXN0ZXIsIGRzdCAqIHNpemVvZihSZWdpc3RlcikpKTsKICAgICAgICAgfQogICAg
IH0KIH0KQEAgLTQ0MSwxOCArNDQxLDE4IEBAIHZvaWQgSklUOjplbWl0X29wX2luc3RhbmNlb2Yo
SW5zdHJ1Y3Rpb24KICAgICAvLyBPcHRpbWlzdGljYWxseSBsb2FkIHRoZSByZXN1bHQgdHJ1ZSwg
YW5kIHN0YXJ0IGxvb3BpbmcuCiAgICAgLy8gSW5pdGlhbGx5LCByZWdUMSBzdGlsbCBjb250YWlu
cyBwcm90byBhbmQgcmVnVDIgc3RpbGwgY29udGFpbnMgdmFsdWUuCiAgICAgLy8gQXMgd2UgbG9v
cCByZWdUMiB3aWxsIGJlIHVwZGF0ZWQgd2l0aCBpdHMgcHJvdG90eXBlLCByZWN1cnNpdmVseSB3
YWxraW5nIHRoZSBwcm90b3R5cGUgY2hhaW4uCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKEpTVmFs
dWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkpKSwgcmVnVDApOworICAgIG1vdmUoVHJ1c3RlZElt
bTY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkpKSwgcmVnVDApOwogICAgIExhYmVs
IGxvb3AodGhpcyk7CiAKICAgICAvLyBMb2FkIHRoZSBwcm90b3R5cGUgb2YgdGhlIG9iamVjdCBp
biByZWdUMi4gIElmIHRoaXMgaXMgZXF1YWwgdG8gcmVnVDEgLSBXSU4hCiAgICAgLy8gT3RoZXJ3
aXNlLCBjaGVjayBpZiB3ZSd2ZSBoaXQgbnVsbCAtIGlmIHdlIGhhdmUgdGhlbiBkcm9wIG91dCBv
ZiB0aGUgbG9vcCwgaWYgbm90IGdvIGFnYWluLgogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwg
SlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHJlZ1QyKTsKLSAgICBsb2FkUHRyKEFkZHJlc3Mo
cmVnVDIsIFN0cnVjdHVyZTo6cHJvdG90eXBlT2Zmc2V0KCkpLCByZWdUMik7CisgICAgbG9hZDY0
KEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6cHJvdG90eXBlT2Zmc2V0KCkpLCByZWdUMik7CiAg
ICAgSnVtcCBpc0luc3RhbmNlID0gYnJhbmNoUHRyKEVxdWFsLCByZWdUMiwgcmVnVDEpOwogICAg
IGVtaXRKdW1wSWZKU0NlbGwocmVnVDIpLmxpbmtUbyhsb29wLCB0aGlzKTsKIAogICAgIC8vIFdl
IGdldCBoZXJlIGVpdGhlciBieSBkcm9wcGluZyBvdXQgb2YgdGhlIGxvb3AsIG9yIGlmIHZhbHVl
IHdhcyBub3QgYW4gT2JqZWN0LiAgUmVzdWx0IGlzIGZhbHNlLgotICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGZhbHNlKSkpLCByZWdUMCk7CisgICAgbW92
ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihmYWxzZSkpKSwgcmVnVDAp
OwogCiAgICAgLy8gaXNJbnN0YW5jZSBqdW1wcyByaWdodCBkb3duIHRvIGhlcmUsIHRvIHNraXAg
c2V0dGluZyB0aGUgcmVzdWx0IHRvIGZhbHNlIChpdCBoYXMgYWxyZWFkeSBzZXQgdHJ1ZSkuCiAg
ICAgaXNJbnN0YW5jZS5saW5rKHRoaXMpOwpAQCAtNDY3LDcgKzQ2Nyw3IEBAIHZvaWQgSklUOjpl
bWl0X29wX2lzX3VuZGVmaW5lZChJbnN0cnVjdGkKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHZhbHVlLCByZWdUMCk7CiAgICAgSnVtcCBpc0NlbGwgPSBlbWl0SnVtcElmSlNDZWxsKHJlZ1Qw
KTsKIAotICAgIGNvbXBhcmVQdHIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoVmFsdWVVbmRl
ZmluZWQpLCByZWdUMCk7CisgICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMy
KFZhbHVlVW5kZWZpbmVkKSwgcmVnVDApOwogICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKICAgICAK
ICAgICBpc0NlbGwubGluayh0aGlzKTsKQEAgLTQ5Myw4ICs0OTMsOCBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9pc19ib29sZWFuKEluc3RydWN0aW9uCiAgICAgdW5zaWduZWQgdmFsdWUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwogICAgIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICB4b3JQdHIoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGlu
dDMyX3Q+KFZhbHVlRmFsc2UpKSwgcmVnVDApOwotICAgIHRlc3RQdHIoWmVybywgcmVnVDAsIFRy
dXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpLCByZWdUMCk7CisgICAgeG9yNjQo
VHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KFZhbHVlRmFsc2UpKSwgcmVnVDApOwor
ICAgIHRlc3Q2NChaZXJvLCByZWdUMCwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+
KH4xKSksIHJlZ1QwKTsKICAgICBlbWl0VGFnQXNCb29sSW1tZWRpYXRlKHJlZ1QwKTsKICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CkBAIC01MDUsNyArNTA1LDcgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfaXNfbnVtYmVyKEluc3RydWN0aW9uKgogICAgIHVuc2lnbmVkIHZhbHVlID0g
Y3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKICAgICAKICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgdGVzdFB0cihOb25aZXJvLCByZWdUMCwgdGFn
VHlwZU51bWJlclJlZ2lzdGVyLCByZWdUMCk7CisgICAgdGVzdDY0KE5vblplcm8sIHJlZ1QwLCB0
YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHJlZ1QwKTsKICAgICBlbWl0VGFnQXNCb29sSW1tZWRpYXRl
KHJlZ1QwKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CkBAIC03MjgsOSAr
NzI4LDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfbm90KEluc3RydWN0aW9uKiBjdXJyZQogICAgIC8v
IEludmVydCBhZ2FpbnN0IEpTVmFsdWUoZmFsc2UpOyBpZiB0aGUgdmFsdWUgd2FzIHRhZ2dlZCBh
cyBhIGJvb2xlYW4sIHRoZW4gYWxsIGJpdHMgd2lsbCBiZQogICAgIC8vIGNsZWFyIG90aGVyIHRo
YW4gdGhlIGxvdyBiaXQgKHdoaWNoIHdpbGwgYmUgMCBvciAxIGZvciBmYWxzZSBvciB0cnVlIGlu
cHV0cyByZXNwZWN0aXZlbHkpLgogICAgIC8vIFRoZW4gaW52ZXJ0IGFnYWluc3QgSlNWYWx1ZSh0
cnVlKSwgd2hpY2ggd2lsbCBhZGQgdGhlIHRhZyBiYWNrIGluLCBhbmQgZmxpcCB0aGUgbG93IGJp
dC4KLSAgICB4b3JQdHIoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KFZhbHVlRmFs
c2UpKSwgcmVnVDApOworICAgIHhvcjY0KFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90
PihWYWx1ZUZhbHNlKSksIHJlZ1QwKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0UHRyKE5v
blplcm8sIHJlZ1QwLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSkpOwot
ICAgIHhvclB0cihUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oVmFsdWVUcnVlKSks
IHJlZ1QwKTsKKyAgICB4b3I2NChUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oVmFs
dWVUcnVlKSksIHJlZ1QwKTsKIAogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudElu
c3RydWN0aW9uWzFdLnUub3BlcmFuZCk7CiB9CkBAIC03NDAsMTEgKzc0MCwxMSBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9qZmFsc2UoSW5zdHJ1Y3Rpb24qIGN1CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0g
Y3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIHJlZ1QwKTsKIAotICAgIGFkZEp1
bXAoYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0cihKU1ZhbHVlOjplbmNvZGUo
anNOdW1iZXIoMCkpKSksIHRhcmdldCk7CisgICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwgcmVn
VDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoMCkpKSksIHRhcmdldCk7
CiAgICAgSnVtcCBpc05vblplcm8gPSBlbWl0SnVtcElmSW1tZWRpYXRlSW50ZWdlcihyZWdUMCk7
CiAKLSAgICBhZGRKdW1wKGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW1QdHIoSlNW
YWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihmYWxzZSkpKSksIHRhcmdldCk7Ci0gICAgYWRkU2xvd0Nh
c2UoYnJhbmNoUHRyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0cihKU1ZhbHVlOjplbmNv
ZGUoanNCb29sZWFuKHRydWUpKSkpKTsKKyAgICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCByZWdU
MCwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oZmFsc2UpKSkpLCB0YXJn
ZXQpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaDY0KE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZElt
bTY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkpKSkpOwogCiAgICAgaXNOb25aZXJv
LmxpbmsodGhpcyk7CiB9CkBAIC03NjYsOCArNzY2LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfamVx
X251bGwoSW5zdHJ1Y3Rpb24qCiAKICAgICAvLyBOb3cgaGFuZGxlIHRoZSBpbW1lZGlhdGUgY2Fz
ZXMgLSB1bmRlZmluZWQgJiBudWxsCiAgICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsKLSAgICBh
bmRQdHIoVHJ1c3RlZEltbTMyKH5UYWdCaXRVbmRlZmluZWQpLCByZWdUMCk7Ci0gICAgYWRkSnVt
cChicmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tUHRyKEpTVmFsdWU6OmVuY29kZShq
c051bGwoKSkpKSwgdGFyZ2V0KTsgICAgICAgICAgICAKKyAgICBhbmQ2NChUcnVzdGVkSW1tMzIo
flRhZ0JpdFVuZGVmaW5lZCksIHJlZ1QwKTsKKyAgICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCBy
ZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsg
ICAgICAgICAgICAKIAogICAgIGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMp
OwogICAgIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWduLmxpbmsodGhpcyk7CkBAIC03
ODksOCArNzg5LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9udWxsKEluc3RydWN0aW9uKgog
CiAgICAgLy8gTm93IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZpbmVkICYgbnVs
bAogICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7Ci0gICAgYW5kUHRyKFRydXN0ZWRJbW0zMih+
VGFnQml0VW5kZWZpbmVkKSwgcmVnVDApOwotICAgIGFkZEp1bXAoYnJhbmNoUHRyKE5vdEVxdWFs
LCByZWdUMCwgVHJ1c3RlZEltbVB0cihKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdl
dCk7ICAgICAgICAgICAgCisgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5UYWdCaXRVbmRlZmluZWQp
LCByZWdUMCk7CisgICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJ
bW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAgICAgCiAK
ICAgICB3YXNOb3RJbW1lZGlhdGUubGluayh0aGlzKTsKIH0KQEAgLTgzNSwxMSArODM1LDExIEBA
IHZvaWQgSklUOjplbWl0X29wX2p0cnVlKEluc3RydWN0aW9uKiBjdXIKICAgICB1bnNpZ25lZCB0
YXJnZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwogICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgcmVnVDApOwogCi0g
ICAgSnVtcCBpc1plcm8gPSBicmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tUHRyKEpT
VmFsdWU6OmVuY29kZShqc051bWJlcigwKSkpKTsKKyAgICBKdW1wIGlzWmVybyA9IGJyYW5jaDY0
KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bWJlcigwKSkp
KTsKICAgICBhZGRKdW1wKGVtaXRKdW1wSWZJbW1lZGlhdGVJbnRlZ2VyKHJlZ1QwKSwgdGFyZ2V0
KTsKIAotICAgIGFkZEp1bXAoYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0cihK
U1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRydWUpKSkpLCB0YXJnZXQpOwotICAgIGFkZFNsb3dD
YXNlKGJyYW5jaFB0cihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW1QdHIoSlNWYWx1ZTo6ZW5j
b2RlKGpzQm9vbGVhbihmYWxzZSkpKSkpOworICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHJl
Z1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSkpKSwgdGFy
Z2V0KTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2g2NChOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJ
bW02NChKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGZhbHNlKSkpKSk7CiAKICAgICBpc1plcm8u
bGluayh0aGlzKTsKIH0KQEAgLTg1OSw3ICs4NTksNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9iaXR4
b3IoSW5zdHJ1Y3Rpb24qIGN1CiB7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoY3VycmVu
dEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCwgcmVnVDAsIGN1cnJlbnRJbnN0cnVjdGlvblszXS51
Lm9wZXJhbmQsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1lZGlhdGVJbnRl
Z2VycyhyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKLSAgICB4b3JQdHIocmVnVDEsIHJlZ1QwKTsKKyAg
ICB4b3I2NChyZWdUMSwgcmVnVDApOwogICAgIGVtaXRGYXN0QXJpdGhSZVRhZ0ltbWVkaWF0ZShy
ZWdUMCwgcmVnVDApOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0
aW9uWzFdLnUub3BlcmFuZCk7CiB9CkBAIC04NjgsNyArODY4LDcgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfYml0b3IoSW5zdHJ1Y3Rpb24qIGN1cgogewogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJz
KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQsIHJlZ1QwLCBjdXJyZW50SW5zdHJ1Y3Rp
b25bM10udS5vcGVyYW5kLCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tZWRp
YXRlSW50ZWdlcnMocmVnVDAsIHJlZ1QxLCByZWdUMik7Ci0gICAgb3JQdHIocmVnVDEsIHJlZ1Qw
KTsKKyAgICBvcjY0KHJlZ1QxLCByZWdUMCk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihj
dXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKIH0KIApAQCAtOTEwLDcgKzkxMCw3IEBA
IHZvaWQgSklUOjplbWl0X29wX2dldF9wbmFtZXMoSW5zdHJ1Y3Rpb24KICAgICBnZXRQbmFtZXNT
dHViQ2FsbC5hZGRBcmd1bWVudChyZWdUMCk7CiAgICAgZ2V0UG5hbWVzU3R1YkNhbGwuY2FsbChk
c3QpOwogICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBPQkpFQ1RfT0ZGU0VUT0YoSlNQcm9wZXJ0
eU5hbWVJdGVyYXRvciwgbV9qc1N0cmluZ3NTaXplKSksIHJlZ1QzKTsKLSAgICBzdG9yZVB0cih0
YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHBheWxvYWRGb3IoaSkpOworICAgIHN0b3JlNjQodGFnVHlw
ZU51bWJlclJlZ2lzdGVyLCBwYXlsb2FkRm9yKGkpKTsKICAgICBzdG9yZTMyKFRydXN0ZWRJbW0z
MihJbnQzMlRhZyksIGludFRhZ0ZvcihzaXplKSk7CiAgICAgc3RvcmUzMihyZWdUMywgaW50UGF5
bG9hZEZvcihzaXplKSk7CiAgICAgSnVtcCBlbmQgPSBqdW1wKCk7CkBAIC05NDcsNyArOTQ3LDcg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV4dF9wbmFtZShJbnN0cnVjdGlvbgogICAgIGxvYWRQdHIo
YWRkcmVzc0ZvcihpdCksIHJlZ1QxKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIE9CSkVD
VF9PRkZTRVRPRihKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLCBtX2pzU3RyaW5ncykpLCByZWdUMik7
CiAKLSAgICBsb2FkUHRyKEJhc2VJbmRleChyZWdUMiwgcmVnVDAsIFRpbWVzRWlnaHQpLCByZWdU
Mik7CisgICAgbG9hZDY0KEJhc2VJbmRleChyZWdUMiwgcmVnVDAsIFRpbWVzRWlnaHQpLCByZWdU
Mik7CiAKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVnVDIpOwogCkBAIC05Njgs
NyArOTY4LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV4dF9wbmFtZShJbnN0cnVjdGlvbgogICAg
IGFkZEp1bXAoYnJhbmNoVGVzdFB0cihaZXJvLCBBZGRyZXNzKHJlZ1QzKSksIHRhcmdldCk7CiAK
ICAgICBMYWJlbCBjaGVja1Byb3RvdHlwZSh0aGlzKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVn
VDIsIFN0cnVjdHVyZTo6cHJvdG90eXBlT2Zmc2V0KCkpLCByZWdUMik7CisgICAgbG9hZDY0KEFk
ZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6cHJvdG90eXBlT2Zmc2V0KCkpLCByZWdUMik7CiAgICAg
Y2FsbEhhc1Byb3BlcnR5LmFwcGVuZChlbWl0SnVtcElmTm90SlNDZWxsKHJlZ1QyKSk7CiAgICAg
bG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgcmVnVDIp
OwogICAgIGNhbGxIYXNQcm9wZXJ0eS5hcHBlbmQoYnJhbmNoUHRyKE5vdEVxdWFsLCByZWdUMiwg
QWRkcmVzcyhyZWdUMykpKTsKQEAgLTEwMTYsNyArMTAxNiw3IEBAIHZvaWQgSklUOjpjb21waWxl
T3BTdHJpY3RFcShJbnN0cnVjdGlvbioKICAgICAKICAgICAvLyBKdW1wIHNsb3cgaWYgYm90aCBh
cmUgY2VsbHMgKHRvIGNvdmVyIHN0cmluZ3MpLgogICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKLSAg
ICBvclB0cihyZWdUMSwgcmVnVDIpOworICAgIG9yNjQocmVnVDEsIHJlZ1QyKTsKICAgICBhZGRT
bG93Q2FzZShlbWl0SnVtcElmSlNDZWxsKHJlZ1QyKSk7CiAgICAgCiAgICAgLy8gSnVtcCBzbG93
IGlmIGVpdGhlciBpcyBhIGRvdWJsZS4gRmlyc3QgdGVzdCBpZiBpdCdzIGFuIGludGVnZXIsIHdo
aWNoIGlzIGZpbmUsIGFuZCB0aGVuIHRlc3QKQEAgLTEwMjksOSArMTAyOSw5IEBAIHZvaWQgSklU
Ojpjb21waWxlT3BTdHJpY3RFcShJbnN0cnVjdGlvbioKICAgICByaWdodE9LLmxpbmsodGhpcyk7
CiAKICAgICBpZiAodHlwZSA9PSBPcFN0cmljdEVxKQotICAgICAgICBjb21wYXJlUHRyKEVxdWFs
LCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsKKyAgICAgICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMSwg
cmVnVDAsIHJlZ1QwKTsKICAgICBlbHNlCi0gICAgICAgIGNvbXBhcmVQdHIoTm90RXF1YWwsIHJl
Z1QxLCByZWdUMCwgcmVnVDApOworICAgICAgICBjb21wYXJlNjQoTm90RXF1YWwsIHJlZ1QxLCBy
ZWdUMCwgcmVnVDApOwogICAgIGVtaXRUYWdBc0Jvb2xJbW1lZGlhdGUocmVnVDApOwogCiAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwpAQCAtMTA3Nyw4ICsxMDc3LDggQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfY2F0Y2goSW5zdHJ1Y3Rpb24qIGN1cgogICAgIGtpbGxMYXN0UmVzdWx0UmVn
aXN0ZXIoKTsgLy8gRklYTUU6IEltcGxpY2l0bHkgdHJlYXQgb3BfY2F0Y2ggYXMgYSBsYWJlbGVk
IHN0YXRlbWVudCwgYW5kIHJlbW92ZSB0aGlzIGxpbmUgb2YgY29kZS4KICAgICBtb3ZlKHJlZ1Qw
LCBjYWxsRnJhbWVSZWdpc3Rlcik7CiAgICAgcGVlayhyZWdUMywgT0JKRUNUX09GRlNFVE9GKHN0
cnVjdCBKSVRTdGFja0ZyYW1lLCBnbG9iYWxEYXRhKSAvIHNpemVvZih2b2lkKikpOwotICAgIGxv
YWRQdHIoQWRkcmVzcyhyZWdUMywgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsRGF0YSwgZXhjZXB0
aW9uKSksIHJlZ1QwKTsKLSAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKEpTVmFsdWU6OmVuY29k
ZShKU1ZhbHVlKCkpKSwgQWRkcmVzcyhyZWdUMywgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsRGF0
YSwgZXhjZXB0aW9uKSkpOworICAgIGxvYWQ2NChBZGRyZXNzKHJlZ1QzLCBPQkpFQ1RfT0ZGU0VU
T0YoSlNHbG9iYWxEYXRhLCBleGNlcHRpb24pKSwgcmVnVDApOworICAgIHN0b3JlNjQoVHJ1c3Rl
ZEltbTY0KEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpKSwgQWRkcmVzcyhyZWdUMywgT0JKRUNU
X09GRlNFVE9GKEpTR2xvYmFsRGF0YSwgZXhjZXB0aW9uKSkpOwogICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7CiB9CiAKQEAgLTExNDcs
OSArMTE0Nyw5IEBAIHZvaWQgSklUOjplbWl0X29wX3Rocm93X3JlZmVyZW5jZV9lcnJvcigKIHsK
ICAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3BfdGhyb3dfcmVmZXJlbmNlX2Vy
cm9yKTsKICAgICBpZiAoIW1fY29kZUJsb2NrLT5nZXRDb25zdGFudChjdXJyZW50SW5zdHJ1Y3Rp
b25bMV0udS5vcGVyYW5kKS5pc051bWJlcigpKQotICAgICAgICBzdHViQ2FsbC5hZGRBcmd1bWVu
dChUcnVzdGVkSW1tUHRyKEpTVmFsdWU6OmVuY29kZShtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQo
Y3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCkpKSk7CisgICAgICAgIHN0dWJDYWxsLmFk
ZEFyZ3VtZW50KFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUobV9jb2RlQmxvY2stPmdldENv
bnN0YW50KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpKSkpOwogICAgIGVsc2UKLSAg
ICAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoSW1tUHRyKEpTVmFsdWU6OmVuY29kZShtX2NvZGVC
bG9jay0+Z2V0Q29uc3RhbnQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCkpKSk7Cisg
ICAgICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KEltbTY0KEpTVmFsdWU6OmVuY29kZShtX2NvZGVC
bG9jay0+Z2V0Q29uc3RhbnQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCkpKSk7CiAg
ICAgc3R1YkNhbGwuY2FsbCgpOwogfQogCkBAIC0xMTg5LDggKzExODksOCBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9lcV9udWxsKEluc3RydWN0aW9uKiBjCiAKICAgICBpc0ltbWVkaWF0ZS5saW5rKHRo
aXMpOwogCi0gICAgYW5kUHRyKFRydXN0ZWRJbW0zMih+VGFnQml0VW5kZWZpbmVkKSwgcmVnVDAp
OwotICAgIGNvbXBhcmVQdHIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoVmFsdWVOdWxsKSwg
cmVnVDApOworICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+VGFnQml0VW5kZWZpbmVkKSwgcmVnVDAp
OworICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihWYWx1ZU51bGwpLCBy
ZWdUMCk7CiAKICAgICB3YXNOb3RJbW1lZGlhdGUubGluayh0aGlzKTsKICAgICB3YXNOb3RNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CkBAIC0xMjIxLDggKzEyMjEsOCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9uZXFfbnVsbChJbnN0cnVjdGlvbioKIAogICAgIGlzSW1tZWRpYXRlLmxp
bmsodGhpcyk7CiAKLSAgICBhbmRQdHIoVHJ1c3RlZEltbTMyKH5UYWdCaXRVbmRlZmluZWQpLCBy
ZWdUMCk7Ci0gICAgY29tcGFyZVB0cihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihWYWx1
ZU51bGwpLCByZWdUMCk7CisgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5UYWdCaXRVbmRlZmluZWQp
LCByZWdUMCk7CisgICAgY29tcGFyZTY0KE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKFZh
bHVlTnVsbCksIHJlZ1QwKTsKIAogICAgIHdhc05vdEltbWVkaWF0ZS5saW5rKHRoaXMpOwogICAg
IHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKQEAgLTEyNDcsNyArMTI0
Nyw3IEBAIHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV9hY3RpdmF0aW9uKEluc3QKIHsKICAgICB1
bnNpZ25lZCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwogICAgIAotICAg
IEp1bXAgYWN0aXZhdGlvbkNyZWF0ZWQgPSBicmFuY2hUZXN0UHRyKE5vblplcm8sIEFkZHJlc3Mo
Y2FsbEZyYW1lUmVnaXN0ZXIsIHNpemVvZihSZWdpc3RlcikgKiBkc3QpKTsKKyAgICBKdW1wIGFj
dGl2YXRpb25DcmVhdGVkID0gYnJhbmNoVGVzdDY0KE5vblplcm8sIEFkZHJlc3MoY2FsbEZyYW1l
UmVnaXN0ZXIsIHNpemVvZihSZWdpc3RlcikgKiBkc3QpKTsKICAgICBKSVRTdHViQ2FsbCh0aGlz
LCBjdGlfb3BfcHVzaF9hY3RpdmF0aW9uKS5jYWxsKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9w
ZXJhbmQpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKICAgICBhY3RpdmF0aW9u
Q3JlYXRlZC5saW5rKHRoaXMpOwpAQCAtMTI1Nyw3ICsxMjU3LDcgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfY3JlYXRlX2FyZ3VtZW50cyhJbnN0cgogewogICAgIHVuc2lnbmVkIGRzdCA9IGN1cnJlbnRJ
bnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CiAKLSAgICBKdW1wIGFyZ3NDcmVhdGVkID0gYnJhbmNo
VGVzdFB0cihOb25aZXJvLCBBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCBzaXplb2YoUmVnaXN0
ZXIpICogZHN0KSk7CisgICAgSnVtcCBhcmdzQ3JlYXRlZCA9IGJyYW5jaFRlc3Q2NChOb25aZXJv
LCBBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCBzaXplb2YoUmVnaXN0ZXIpICogZHN0KSk7CiAg
ICAgSklUU3R1YkNhbGwodGhpcywgY3RpX29wX2NyZWF0ZV9hcmd1bWVudHMpLmNhbGwoKTsKICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cih1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIoZHN0KSk7CkBAIC0xMjY4LDcgKzEyNjgsNyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9pbml0X2xhenlfcmVnKEluc3RydWN0CiB7CiAgICAgdW5zaWdu
ZWQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKIAotICAgIHN0b3JlUHRy
KFRydXN0ZWRJbW1QdHIoMCksIEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIHNpemVvZihSZWdp
c3RlcikgKiBkc3QpKTsKKyAgICBzdG9yZTY0KFRydXN0ZWRJbW02NCgoaW50NjRfdCkwKSwgQWRk
cmVzcyhjYWxsRnJhbWVSZWdpc3Rlciwgc2l6ZW9mKFJlZ2lzdGVyKSAqIGRzdCkpOwogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9jb252ZXJ0X3RoaXMoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKQEAgLTEzMjcsMTYgKzEzMjcsMTYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NvbnZl
cnRfdGhpcyhJbnN0cgogCiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwogICAgIGlmIChzaG91bGRF
bWl0UHJvZmlsaW5nKCkpCi0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihiaXR3aXNlX2Nhc3Q8
dm9pZCo+KEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKSkpLCByZWdUMCk7Ci0gICAgSnVt
cCBpc05vdFVuZGVmaW5lZCA9IGJyYW5jaFB0cihOb3RFcXVhbCwgcmVnVDEsIFRydXN0ZWRJbW1Q
dHIoSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpKSk7CisgICAgICAgIG1vdmUoVHJ1c3Rl
ZEltbTY0KChKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSkpKSwgcmVnVDApOworICAgIEp1
bXAgaXNOb3RVbmRlZmluZWQgPSBicmFuY2g2NChOb3RFcXVhbCwgcmVnVDEsIFRydXN0ZWRJbW02
NChKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSkpKTsKICAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKCk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdsb2JhbFRoaXMpLCByZWdUMCk7Cisg
ICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoc3RhdGljX2Nhc3Q8
SlNDZWxsKj4oZ2xvYmFsVGhpcykpKSksIHJlZ1QwKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIHJlZ1QwKTsKICAgICBlbWl0SnVt
cFNsb3dUb0hvdChqdW1wKCksIE9QQ09ERV9MRU5HVEgob3BfY29udmVydF90aGlzKSk7CiAKICAg
ICBsaW5rU2xvd0Nhc2UoaXRlcik7CiAgICAgaWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSkKLSAg
ICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGJpdHdpc2VfY2FzdDx2b2lkKj4oSlNWYWx1ZTo6ZW5j
b2RlKG1fZ2xvYmFsRGF0YS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpLCByZWdUMCk7CisgICAg
ICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShtX2dsb2JhbERhdGEtPnN0cmlu
Z1N0cnVjdHVyZS5nZXQoKSkpLCByZWdUMCk7CiAgICAgaXNOb3RVbmRlZmluZWQubGluayh0aGlz
KTsKICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKCk7CiAgICAgSklUU3R1YkNhbGwgc3R1YkNh
bGwodGhpcywgY3RpX29wX2NvbnZlcnRfdGhpcyk7CkBAIC0xMzU2LDcgKzEzNTYsNyBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfdG9fcHJpbWl0aXZlKEluc3RyCiB2b2lkIEpJVDo6ZW1pdFNsb3df
b3Bfbm90KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwotICAgIHhv
clB0cihUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oVmFsdWVGYWxzZSkpLCByZWdU
MCk7CisgICAgeG9yNjQoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KFZhbHVlRmFs
c2UpKSwgcmVnVDApOwogICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9ub3Qp
OwogICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KHJlZ1QwKTsKICAgICBzdHViQ2FsbC5jYWxsKGN1
cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOwpAQCAtMTU0NCw3ICsxNTQ0LDcgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfZ2V0X2FyZ3VtZW50X2J5X3ZhbChJbgogCiAgICAgbmVnMzIocmVnVDEp
OwogICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QxLCByZWdUMSk7Ci0gICAgbG9hZFB0cihCYXNl
SW5kZXgoY2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1QxLCBUaW1lc0VpZ2h0LCBDYWxsRnJhbWU6OnRo
aXNBcmd1bWVudE9mZnNldCgpICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSks
IHJlZ1QwKTsKKyAgICBsb2FkNjQoQmFzZUluZGV4KGNhbGxGcmFtZVJlZ2lzdGVyLCByZWdUMSwg
VGltZXNFaWdodCwgQ2FsbEZyYW1lOjp0aGlzQXJndW1lbnRPZmZzZXQoKSAqIHN0YXRpY19jYXN0
PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkpLCByZWdUMCk7CiAgICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZSgpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZWdUMCk7CiB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAko
cmV2aXNpb24gMTMxNDQ5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0
eUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNyw3ICsxMzcsNyBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9nZXRfYnlfdmFsKEluc3RydWN0aW9uCiAgICAgTGFiZWwgZG9uZSA9IGxhYmVsKCk7
CiAgICAgCiAjaWYgIUFTU0VSVF9ESVNBQkxFRAotICAgIEp1bXAgcmVzdWx0T0sgPSBicmFuY2hU
ZXN0UHRyKE5vblplcm8sIHJlZ1QwKTsKKyAgICBKdW1wIHJlc3VsdE9LID0gYnJhbmNoVGVzdDY0
KE5vblplcm8sIHJlZ1QwKTsKICAgICBicmVha3BvaW50KCk7CiAgICAgcmVzdWx0T0subGluayh0
aGlzKTsKICNlbmRpZgpAQCAtMTU1LDggKzE1NSw4IEBAIEpJVDo6SnVtcExpc3QgSklUOjplbWl0
Q29udGlndW91c0dldEJ5VmEKICAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoMzIoTm90RXF1
YWwsIHJlZ1QyLCBUcnVzdGVkSW1tMzIoQ29udGlndW91c1NoYXBlKSk7CiAgICAgbG9hZFB0cihB
ZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMik7CiAgICAg
c2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJl
Z1QyLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKSk7Ci0gICAgbG9hZFB0cihC
YXNlSW5kZXgocmVnVDIsIHJlZ1QxLCBTY2FsZVB0ciksIHJlZ1QwKTsKLSAgICBzbG93Q2FzZXMu
YXBwZW5kKGJyYW5jaFRlc3RQdHIoWmVybywgcmVnVDApKTsKKyAgICBsb2FkNjQoQmFzZUluZGV4
KHJlZ1QyLCByZWdUMSwgVGltZXNFaWdodCksIHJlZ1QwKTsKKyAgICBzbG93Q2FzZXMuYXBwZW5k
KGJyYW5jaFRlc3Q2NChaZXJvLCByZWdUMCkpOwogICAgIAogICAgIHJldHVybiBzbG93Q2FzZXM7
CiB9CkBAIC0xNzEsOCArMTcxLDggQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRBcnJheVN0b3Jh
Z2VHZXRCeQogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9m
ZnNldCgpKSwgcmVnVDIpOwogICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVPckVx
dWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZz
ZXQoKSkpKTsKIAotICAgIGxvYWRQdHIoQmFzZUluZGV4KHJlZ1QyLCByZWdUMSwgU2NhbGVQdHIs
IEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAgc2xvd0Nhc2VzLmFw
cGVuZChicmFuY2hUZXN0UHRyKFplcm8sIHJlZ1QwKSk7CisgICAgbG9hZDY0KEJhc2VJbmRleChy
ZWdUMiwgcmVnVDEsIFRpbWVzRWlnaHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkpLCBy
ZWdUMCk7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hUZXN0NjQoWmVybywgcmVnVDApKTsK
ICAgICAKICAgICByZXR1cm4gc2xvd0Nhc2VzOwogfQpAQCAtMTg5LDcgKzE4OSw3IEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKEluc3RydWMKICAgICBsaW5rU2xvd0Nhc2UoaXRl
cik7IC8vIGJhc2UgYXJyYXkgY2hlY2sKICAgICBKdW1wIG5vdFN0cmluZyA9IGJyYW5jaFB0cihO
b3RFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIFRydXN0
ZWRJbW1QdHIobV9nbG9iYWxEYXRhLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKTsKICAgICBlbWl0
TmFrZWRDYWxsKENvZGVMb2NhdGlvbkxhYmVsKG1fZ2xvYmFsRGF0YS0+Z2V0Q1RJU3R1YihzdHJp
bmdHZXRCeVZhbFN0dWJHZW5lcmF0b3IpLmNvZGUoKSkpOwotICAgIEp1bXAgZmFpbGVkID0gYnJh
bmNoVGVzdFB0cihaZXJvLCByZWdUMCk7CisgICAgSnVtcCBmYWlsZWQgPSBicmFuY2hUZXN0NjQo
WmVybywgcmVnVDApOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZWdUMCk7CiAg
ICAgZW1pdEp1bXBTbG93VG9Ib3QoanVtcCgpLCBPUENPREVfTEVOR1RIKG9wX2dldF9ieV92YWwp
KTsKICAgICBmYWlsZWQubGluayh0aGlzKTsKQEAgLTIzNSw3ICsyMzUsNyBAQCB2b2lkIEpJVDo6
Y29tcGlsZUdldERpcmVjdE9mZnNldChSZWdpc3RlCiAgICAgICAgIG5lZzMyKG9mZnNldCk7CiAg
ICAgfQogICAgIHNpZ25FeHRlbmQzMlRvUHRyKG9mZnNldCwgb2Zmc2V0KTsKLSAgICBsb2FkUHRy
KEJhc2VJbmRleChzY3JhdGNoLCBvZmZzZXQsIFNjYWxlUHRyLCAoZmlyc3RPdXRPZkxpbmVPZmZz
ZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCByZXN1bHQpOworICAgIGxvYWQ2NChC
YXNlSW5kZXgoc2NyYXRjaCwgb2Zmc2V0LCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZz
ZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCByZXN1bHQpOwogfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9nZXRfYnlfcG5hbWUoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
QEAgLTI0OCw3ICsyNDgsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfcG5hbWUoSW5zdHJ1
Y3RpCiAgICAgdW5zaWduZWQgaSA9IGN1cnJlbnRJbnN0cnVjdGlvbls2XS51Lm9wZXJhbmQ7CiAK
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMCk7Ci0gICAgYWRkU2xv
d0Nhc2UoYnJhbmNoUHRyKE5vdEVxdWFsLCByZWdUMCwgYWRkcmVzc0ZvcihleHBlY3RlZCkpKTsK
KyAgICBhZGRTbG93Q2FzZShicmFuY2g2NChOb3RFcXVhbCwgcmVnVDAsIGFkZHJlc3NGb3IoZXhw
ZWN0ZWQpKSk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYmFzZSwgcmVnVDAsIGl0ZXIs
IHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOwog
CkBAIC0zMzcsNyArMzM3LDcgQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRDb250aWd1b3VzUHV0
QnlWYQogCiAgICAgTGFiZWwgc3RvcmVSZXN1bHQgPSBsYWJlbCgpOwogICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QzKTsKLSAgICBzdG9yZVB0cihyZWdUMywgQmFzZUluZGV4
KHJlZ1QyLCByZWdUMSwgU2NhbGVQdHIpKTsKKyAgICBzdG9yZTY0KHJlZ1QzLCBCYXNlSW5kZXgo
cmVnVDIsIHJlZ1QxLCBUaW1lc0VpZ2h0KSk7CiAgICAgCiAgICAgSnVtcCBkb25lID0ganVtcCgp
OwogICAgIG91dE9mQm91bmRzLmxpbmsodGhpcyk7CkBAIC0zNjcsMTEgKzM2NywxMSBAQCBKSVQ6
Okp1bXBMaXN0IEpJVDo6ZW1pdEFycmF5U3RvcmFnZVB1dEJ5CiAgICAgbG9hZFB0cihBZGRyZXNz
KHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMik7CiAgICAgc2xvd0Nh
c2VzLmFwcGVuZChicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBB
cnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSkpOwogCi0gICAgSnVtcCBlbXB0eSA9
IGJyYW5jaFRlc3RQdHIoWmVybywgQmFzZUluZGV4KHJlZ1QyLCByZWdUMSwgU2NhbGVQdHIsIE9C
SkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSkpOworICAgIEp1bXAgZW1w
dHkgPSBicmFuY2hUZXN0NjQoWmVybywgQmFzZUluZGV4KHJlZ1QyLCByZWdUMSwgVGltZXNFaWdo
dCwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSk7CiAKICAgICBM
YWJlbCBzdG9yZVJlc3VsdCh0aGlzKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVl
LCByZWdUMyk7Ci0gICAgc3RvcmVQdHIocmVnVDMsIEJhc2VJbmRleChyZWdUMiwgcmVnVDEsIFNj
YWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpKTsKKyAg
ICBzdG9yZTY0KHJlZ1QzLCBCYXNlSW5kZXgocmVnVDIsIHJlZ1QxLCBUaW1lc0VpZ2h0LCBPQkpF
Q1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpKTsKICAgICBKdW1wIGVuZCA9
IGp1bXAoKTsKICAgICAKICAgICBlbXB0eS5saW5rKHRoaXMpOwpAQCAtNTM1LDcgKzUzNSw3IEBA
IHZvaWQgSklUOjpjb21waWxlR2V0QnlJZEhvdFBhdGgoaW50IGJhc2UKICAgICBhZGRTbG93Q2Fz
ZShzdHJ1Y3R1cmVDaGVjayk7CiAKICAgICBDb252ZXJ0aWJsZUxvYWRMYWJlbCBwcm9wZXJ0eVN0
b3JhZ2VMb2FkID0gY29udmVydGlibGVMb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0Ojpi
dXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QwKTsKLSAgICBEYXRhTGFiZWxDb21wYWN0IGRpc3BsYWNl
bWVudExhYmVsID0gbG9hZFB0cldpdGhDb21wYWN0QWRkcmVzc09mZnNldFBhdGNoKEFkZHJlc3Mo
cmVnVDAsIHBhdGNoR2V0QnlJZERlZmF1bHRPZmZzZXQpLCByZWdUMCk7CisgICAgRGF0YUxhYmVs
Q29tcGFjdCBkaXNwbGFjZW1lbnRMYWJlbCA9IGxvYWQ2NFdpdGhDb21wYWN0QWRkcmVzc09mZnNl
dFBhdGNoKEFkZHJlc3MocmVnVDAsIHBhdGNoR2V0QnlJZERlZmF1bHRPZmZzZXQpLCByZWdUMCk7
CiAKICAgICBMYWJlbCBwdXRSZXN1bHQodGhpcyk7CiAKQEAgLTYwMiw3ICs2MDIsNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQoSW5zdHJ1Y3Rpb24qCiAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoUHRyV2l0aFBhdGNoKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVy
ZU9mZnNldCgpKSwgc3RydWN0dXJlVG9Db21wYXJlLCBUcnVzdGVkSW1tUHRyKHJlaW50ZXJwcmV0
X2Nhc3Q8dm9pZCo+KHBhdGNoR2V0QnlJZERlZmF1bHRTdHJ1Y3R1cmUpKSkpOwogCiAgICAgQ29u
dmVydGlibGVMb2FkTGFiZWwgcHJvcGVydHlTdG9yYWdlTG9hZCA9IGNvbnZlcnRpYmxlTG9hZFB0
cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMik7Ci0g
ICAgRGF0YUxhYmVsMzIgZGlzcGxhY2VtZW50TGFiZWwgPSBzdG9yZVB0cldpdGhBZGRyZXNzT2Zm
c2V0UGF0Y2gocmVnVDEsIEFkZHJlc3MocmVnVDIsIHBhdGNoUHV0QnlJZERlZmF1bHRPZmZzZXQp
KTsKKyAgICBEYXRhTGFiZWwzMiBkaXNwbGFjZW1lbnRMYWJlbCA9IHN0b3JlNjRXaXRoQWRkcmVz
c09mZnNldFBhdGNoKHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBwYXRjaFB1dEJ5SWREZWZhdWx0T2Zm
c2V0KSk7CiAKICAgICBFTkRfVU5JTlRFUlJVUFRFRF9TRVFVRU5DRShzZXF1ZW5jZVB1dEJ5SWQp
OwogCkBAIC02MzYsMzUgKzYzNiwzNSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lk
KEluc3RydWN0CiB2b2lkIEpJVDo6Y29tcGlsZVB1dERpcmVjdE9mZnNldChSZWdpc3RlcklEIGJh
c2UsIFJlZ2lzdGVySUQgdmFsdWUsIFByb3BlcnR5T2Zmc2V0IGNhY2hlZE9mZnNldCkKIHsKICAg
ICBpZiAoaXNJbmxpbmVPZmZzZXQoY2FjaGVkT2Zmc2V0KSkgewotICAgICAgICBzdG9yZVB0cih2
YWx1ZSwgQWRkcmVzcyhiYXNlLCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkgKyBz
aXplb2YoSlNWYWx1ZSkgKiBvZmZzZXRJbklubGluZVN0b3JhZ2UoY2FjaGVkT2Zmc2V0KSkpOwor
ICAgICAgICBzdG9yZTY0KHZhbHVlLCBBZGRyZXNzKGJhc2UsIEpTT2JqZWN0OjpvZmZzZXRPZklu
bGluZVN0b3JhZ2UoKSArIHNpemVvZihKU1ZhbHVlKSAqIG9mZnNldEluSW5saW5lU3RvcmFnZShj
YWNoZWRPZmZzZXQpKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCiAgICAgbG9hZFB0
cihBZGRyZXNzKGJhc2UsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIGJhc2UpOwotICAg
IHN0b3JlUHRyKHZhbHVlLCBBZGRyZXNzKGJhc2UsIHNpemVvZihKU1ZhbHVlKSAqIG9mZnNldElu
QnV0dGVyZmx5KGNhY2hlZE9mZnNldCkpKTsKKyAgICBzdG9yZTY0KHZhbHVlLCBBZGRyZXNzKGJh
c2UsIHNpemVvZihKU1ZhbHVlKSAqIG9mZnNldEluQnV0dGVyZmx5KGNhY2hlZE9mZnNldCkpKTsK
IH0KIAogLy8gQ29tcGlsZSBhIGxvYWQgZnJvbSBhbiBvYmplY3QncyBwcm9wZXJ0eSBzdG9yYWdl
LiAgTWF5IG92ZXJ3cml0ZSBiYXNlLgogdm9pZCBKSVQ6OmNvbXBpbGVHZXREaXJlY3RPZmZzZXQo
UmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIHJlc3VsdCwgUHJvcGVydHlPZmZzZXQgY2FjaGVk
T2Zmc2V0KQogewogICAgIGlmIChpc0lubGluZU9mZnNldChjYWNoZWRPZmZzZXQpKSB7Ci0gICAg
ICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdl
KCkgKyBzaXplb2YoSlNWYWx1ZSkgKiBvZmZzZXRJbklubGluZVN0b3JhZ2UoY2FjaGVkT2Zmc2V0
KSksIHJlc3VsdCk7CisgICAgICAgIGxvYWQ2NChBZGRyZXNzKGJhc2UsIEpTT2JqZWN0OjpvZmZz
ZXRPZklubGluZVN0b3JhZ2UoKSArIHNpemVvZihKU1ZhbHVlKSAqIG9mZnNldEluSW5saW5lU3Rv
cmFnZShjYWNoZWRPZmZzZXQpKSwgcmVzdWx0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAg
ICAKICAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgp
KSwgcmVzdWx0KTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0LCBzaXplb2YoSlNWYWx1ZSkg
KiBvZmZzZXRJbkJ1dHRlcmZseShjYWNoZWRPZmZzZXQpKSwgcmVzdWx0KTsKKyAgICBsb2FkNjQo
QWRkcmVzcyhyZXN1bHQsIHNpemVvZihKU1ZhbHVlKSAqIG9mZnNldEluQnV0dGVyZmx5KGNhY2hl
ZE9mZnNldCkpLCByZXN1bHQpOwogfQogCiB2b2lkIEpJVDo6Y29tcGlsZUdldERpcmVjdE9mZnNl
dChKU09iamVjdCogYmFzZSwgUmVnaXN0ZXJJRCByZXN1bHQsIFByb3BlcnR5T2Zmc2V0IGNhY2hl
ZE9mZnNldCkKIHsKICAgICBpZiAoaXNJbmxpbmVPZmZzZXQoY2FjaGVkT2Zmc2V0KSkgewotICAg
ICAgICBsb2FkUHRyKGJhc2UtPmxvY2F0aW9uRm9yT2Zmc2V0KGNhY2hlZE9mZnNldCksIHJlc3Vs
dCk7CisgICAgICAgIGxvYWQ2NChiYXNlLT5sb2NhdGlvbkZvck9mZnNldChjYWNoZWRPZmZzZXQp
LCByZXN1bHQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAogICAgIGxvYWRQdHIoYmFz
ZS0+YnV0dGVyZmx5QWRkcmVzcygpLCByZXN1bHQpOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1
bHQsIG9mZnNldEluQnV0dGVyZmx5KGNhY2hlZE9mZnNldCkgKiBzaXplb2YoV3JpdGVCYXJyaWVy
PFVua25vd24+KSksIHJlc3VsdCk7CisgICAgbG9hZDY0KEFkZHJlc3MocmVzdWx0LCBvZmZzZXRJ
bkJ1dHRlcmZseShjYWNoZWRPZmZzZXQpICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikp
LCByZXN1bHQpOwogfQogCiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeUlkVHJhbnNpdGlv
bihTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBT
dHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgY2FjaGVkT2Zmc2V0LCBTdHJ1
Y3R1cmVDaGFpbiogY2hhaW4sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgYm9vbCBk
aXJlY3QpCkBAIC0xMjAwLDcgKzEyMDAsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfc2NvcGVk
X3ZhcihJbnN0cnVjCiAgICAgaWYgKGNoZWNrVG9wTGV2ZWwgJiYgc2tpcC0tKSB7CiAgICAgICAg
IEp1bXAgYWN0aXZhdGlvbk5vdENyZWF0ZWQ7CiAgICAgICAgIGlmIChjaGVja1RvcExldmVsKQot
ICAgICAgICAgICAgYWN0aXZhdGlvbk5vdENyZWF0ZWQgPSBicmFuY2hUZXN0UHRyKFplcm8sIGFk
ZHJlc3NGb3IobV9jb2RlQmxvY2stPmFjdGl2YXRpb25SZWdpc3RlcigpKSk7CisgICAgICAgICAg
ICBhY3RpdmF0aW9uTm90Q3JlYXRlZCA9IGJyYW5jaFRlc3Q2NChaZXJvLCBhZGRyZXNzRm9yKG1f
Y29kZUJsb2NrLT5hY3RpdmF0aW9uUmVnaXN0ZXIoKSkpOwogICAgICAgICBsb2FkUHRyKEFkZHJl
c3MocmVnVDAsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVnVDApOwogICAgICAgICBhY3Rp
dmF0aW9uTm90Q3JlYXRlZC5saW5rKHRoaXMpOwogICAgIH0KQEAgLTEyMDgsNyArMTIwOCw3IEBA
IHZvaWQgSklUOjplbWl0X29wX2dldF9zY29wZWRfdmFyKEluc3RydWMKICAgICAgICAgbG9hZFB0
cihBZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsKIAogICAg
IGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNWYXJpYWJsZU9iamVjdDo6b2Zmc2V0T2ZSZWdpc3Rl
cnMoKSksIHJlZ1QwKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIGN1cnJlbnRJbnN0cnVj
dGlvblsyXS51Lm9wZXJhbmQgKiBzaXplb2YoUmVnaXN0ZXIpKSwgcmVnVDApOworICAgIGxvYWQ2
NChBZGRyZXNzKHJlZ1QwLCBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kICogc2l6ZW9m
KFJlZ2lzdGVyKSksIHJlZ1QwKTsKICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKCk7CiAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsK
IH0KQEAgLTEyMjUsNyArMTIyNSw3IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9zY29wZWRfdmFy
KEluc3RydWMKICAgICBpZiAoY2hlY2tUb3BMZXZlbCAmJiBza2lwLS0pIHsKICAgICAgICAgSnVt
cCBhY3RpdmF0aW9uTm90Q3JlYXRlZDsKICAgICAgICAgaWYgKGNoZWNrVG9wTGV2ZWwpCi0gICAg
ICAgICAgICBhY3RpdmF0aW9uTm90Q3JlYXRlZCA9IGJyYW5jaFRlc3RQdHIoWmVybywgYWRkcmVz
c0ZvcihtX2NvZGVCbG9jay0+YWN0aXZhdGlvblJlZ2lzdGVyKCkpKTsKKyAgICAgICAgICAgIGFj
dGl2YXRpb25Ob3RDcmVhdGVkID0gYnJhbmNoVGVzdDY0KFplcm8sIGFkZHJlc3NGb3IobV9jb2Rl
QmxvY2stPmFjdGl2YXRpb25SZWdpc3RlcigpKSk7CiAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhy
ZWdUMSwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZWdUMSk7CiAgICAgICAgIGFjdGl2YXRp
b25Ob3RDcmVhdGVkLmxpbmsodGhpcyk7CiAgICAgfQpAQCAtMTIzNSwxMiArMTIzNSwxMiBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2NvcGVkX3ZhcihJbnN0cnVjCiAgICAgZW1pdFdyaXRlQmFy
cmllcihyZWdUMSwgcmVnVDAsIHJlZ1QyLCByZWdUMywgU2hvdWxkRmlsdGVySW1tZWRpYXRlcywg
V3JpdGVCYXJyaWVyRm9yVmFyaWFibGVBY2Nlc3MpOwogCiAgICAgbG9hZFB0cihBZGRyZXNzKHJl
Z1QxLCBKU1ZhcmlhYmxlT2JqZWN0OjpvZmZzZXRPZlJlZ2lzdGVycygpKSwgcmVnVDEpOwotICAg
IHN0b3JlUHRyKHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5v
cGVyYW5kICogc2l6ZW9mKFJlZ2lzdGVyKSkpOworICAgIHN0b3JlNjQocmVnVDAsIEFkZHJlc3Mo
cmVnVDEsIGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQgKiBzaXplb2YoUmVnaXN0ZXIp
KSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9nbG9iYWxfdmFyKEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgbG9hZFB0cihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0u
dS5yZWdpc3RlclBvaW50ZXIsIHJlZ1QwKTsKKyAgICBsb2FkNjQoY3VycmVudEluc3RydWN0aW9u
WzJdLnUucmVnaXN0ZXJQb2ludGVyLCByZWdUMCk7CiAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZSgpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUu
b3BlcmFuZCk7CiB9CkBAIC0xMjUxLDcgKzEyNTEsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRf
Z2xvYmFsX3ZhcihJbnN0cnVjCiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJ
bnN0cnVjdGlvblsyXS51Lm9wZXJhbmQsIHJlZ1QwKTsKICAgICAKLSAgICBzdG9yZVB0cihyZWdU
MCwgY3VycmVudEluc3RydWN0aW9uWzFdLnUucmVnaXN0ZXJQb2ludGVyKTsKKyAgICBzdG9yZTY0
KHJlZ1QwLCBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5yZWdpc3RlclBvaW50ZXIpOwogICAgIGlm
IChIZWFwOjppc1dyaXRlQmFycmllckVuYWJsZWQoKSkKICAgICAgICAgZW1pdFdyaXRlQmFycmll
cihnbG9iYWxPYmplY3QsIHJlZ1QwLCByZWdUMiwgU2hvdWxkRmlsdGVySW1tZWRpYXRlcywgV3Jp
dGVCYXJyaWVyRm9yVmFyaWFibGVBY2Nlc3MpOwogfQpAQCAtMTI2NCw3ICsxMjY0LDcgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfcHV0X2dsb2JhbF92YXJfY2hlY2soSQogCiAgICAgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCA9IG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKTsKICAgICAKLSAg
ICBzdG9yZVB0cihyZWdUMCwgY3VycmVudEluc3RydWN0aW9uWzFdLnUucmVnaXN0ZXJQb2ludGVy
KTsKKyAgICBzdG9yZTY0KHJlZ1QwLCBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5yZWdpc3RlclBv
aW50ZXIpOwogICAgIGlmIChIZWFwOjppc1dyaXRlQmFycmllckVuYWJsZWQoKSkKICAgICAgICAg
ZW1pdFdyaXRlQmFycmllcihnbG9iYWxPYmplY3QsIHJlZ1QwLCByZWdUMiwgU2hvdWxkRmlsdGVy
SW1tZWRpYXRlcywgV3JpdGVCYXJyaWVyRm9yVmFyaWFibGVBY2Nlc3MpOwogfQpAQCAtMTU4NSw4
ICsxNTg1LDggQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRJbnRUeXBlZEFycmF5R2V0QgogICAg
ICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShyZXN1bHRQYXlsb2FkLCBmcFJlZ1QwKTsKICAgICAg
ICAgYWRkRG91YmxlKEFic29sdXRlQWRkcmVzcygmdHdvVG9UaGUzMiksIGZwUmVnVDApOwogI2lm
IFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIG1vdmVEb3VibGVUb1B0cihmcFJlZ1QwLCByZXN1bHRQ
YXlsb2FkKTsKLSAgICAgICAgc3ViUHRyKHRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgcmVzdWx0UGF5
bG9hZCk7CisgICAgICAgIG1vdmVEb3VibGVUbzY0KGZwUmVnVDAsIHJlc3VsdFBheWxvYWQpOwor
ICAgICAgICBzdWI2NCh0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHJlc3VsdFBheWxvYWQpOwogI2Vs
c2UKICAgICAgICAgbW92ZURvdWJsZVRvSW50cyhmcFJlZ1QwLCByZXN1bHRQYXlsb2FkLCByZXN1
bHRUYWcpOwogI2VuZGlmCkBAIC0xNTk2LDcgKzE1OTYsNyBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6
ZW1pdEludFR5cGVkQXJyYXlHZXRCCiAgICAgfQogCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBv
clB0cih0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHJlc3VsdFBheWxvYWQpOworICAgIG9yNjQodGFn
VHlwZU51bWJlclJlZ2lzdGVyLCByZXN1bHRQYXlsb2FkKTsKICNlbHNlCiAgICAgbW92ZShUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpLCByZXN1bHRUYWcpOwogI2VuZGlmCkBAIC0xNjQ1
LDggKzE2NDUsOCBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEZsb2F0VHlwZWRBcnJheUdlCiAg
ICAgfQogICAgIAogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgbW92ZURvdWJsZVRvUHRyKGZwUmVn
VDAsIHJlc3VsdFBheWxvYWQpOwotICAgIHN1YlB0cih0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHJl
c3VsdFBheWxvYWQpOworICAgIG1vdmVEb3VibGVUbzY0KGZwUmVnVDAsIHJlc3VsdFBheWxvYWQp
OworICAgIHN1YjY0KHRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgcmVzdWx0UGF5bG9hZCk7CiAjZWxz
ZQogICAgIG1vdmVEb3VibGVUb0ludHMoZnBSZWdUMCwgcmVzdWx0UGF5bG9hZCwgcmVzdWx0VGFn
KTsKICNlbmRpZgpAQCAtMTc0Niw4ICsxNzQ2LDggQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRG
bG9hdFR5cGVkQXJyYXlQdQogICAgIEp1bXAgcmVhZHkgPSBqdW1wKCk7CiAgICAgZG91YmxlQ2Fz
ZS5saW5rKHRoaXMpOwogICAgIHNsb3dDYXNlcy5hcHBlbmQoZW1pdEp1bXBJZk5vdEltbWVkaWF0
ZU51bWJlcihlYXJseVNjcmF0Y2gpKTsKLSAgICBhZGRQdHIodGFnVHlwZU51bWJlclJlZ2lzdGVy
LCBlYXJseVNjcmF0Y2gpOwotICAgIG1vdmVQdHJUb0RvdWJsZShlYXJseVNjcmF0Y2gsIGZwUmVn
VDApOworICAgIGFkZDY0KHRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgZWFybHlTY3JhdGNoKTsKKyAg
ICBtb3ZlNjRUb0RvdWJsZShlYXJseVNjcmF0Y2gsIGZwUmVnVDApOwogICAgIHJlYWR5Lmxpbmso
dGhpcyk7CiAjZWxzZQogICAgIGVtaXRMb2FkKHZhbHVlLCBsYXRlU2NyYXRjaCwgZWFybHlTY3Jh
dGNoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YkNhbGwuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJDYWxsLmgJKHJldmlz
aW9uIDEzMTQ0OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YkNhbGwuaAko
d29ya2luZyBjb3B5KQpAQCAtOTQsMTUgKzk0LDE1IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICB7CiAgICAgICAgIH0KIAotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgICAgIEpJVFN0dWJD
YWxsKEpJVCogaml0LCBFbmNvZGVkSlNWYWx1ZSAoSklUX1NUVUIgKnN0dWIpKFNUVUJfQVJHU19E
RUNMQVJBVElPTikpCiAgICAgICAgICAgICA6IG1faml0KGppdCkKICAgICAgICAgICAgICwgbV9z
dHViKHN0dWIpCisjaWYgVVNFKEpTVkFMVUUzMl82NCkgfHwgIUFTU0VSVF9ESVNBQkxFRAogICAg
ICAgICAgICAgLCBtX3JldHVyblR5cGUoVmFsdWUpCisjZW5kaWYKICAgICAgICAgICAgICwgbV9z
dGFja0luZGV4KEpJVFNUQUNLRlJBTUVfQVJHU19JTkRFWCkKICAgICAgICAgewogICAgICAgICB9
Ci0jZW5kaWYKIAogICAgICAgICAvLyBBcmd1bWVudHMgYXJlIGFkZGVkIGZpcnN0IHRvIGxhc3Qu
CiAKQEAgLTEzNyw3ICsxMzcsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdm9pZCBh
ZGRBcmd1bWVudChKSVQ6OlJlZ2lzdGVySUQgYXJndW1lbnQpCiAgICAgICAgIHsKKyNpZiBDUFUo
WDg2XzY0KQorICAgICAgICAgICAgbV9qaXQtPnBva2U2NChhcmd1bWVudCwgbV9zdGFja0luZGV4
KTsKKyNlbHNlCiAgICAgICAgICAgICBtX2ppdC0+cG9rZShhcmd1bWVudCwgbV9zdGFja0luZGV4
KTsKKyNlbmRpZgogICAgICAgICAgICAgbV9zdGFja0luZGV4ICs9IHN0YWNrSW5kZXhTdGVwOwog
ICAgICAgICB9CiAgICAgICAgIApAQCAtMTQ4LDYgKzE1MiwxOCBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgICAgIG1faml0LT5wb2tlKEpJVDo6SW1tMzIodmFsdWUudGFnKCkpLCBtX3N0YWNr
SW5kZXggKyAxKTsKICAgICAgICAgICAgIG1fc3RhY2tJbmRleCArPSBzdGFja0luZGV4U3RlcDsK
ICAgICAgICAgfQorI2Vsc2UKKyAgICAgICAgdm9pZCBhZGRBcmd1bWVudChKSVQ6OlRydXN0ZWRJ
bW02NCBhcmd1bWVudCkKKyAgICAgICAgeworICAgICAgICAgICAgbV9qaXQtPnBva2UoYXJndW1l
bnQsIG1fc3RhY2tJbmRleCk7CisgICAgICAgICAgICBtX3N0YWNrSW5kZXggKz0gc3RhY2tJbmRl
eFN0ZXA7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGFkZEFyZ3VtZW50KEpJVDo6SW1tNjQg
YXJndW1lbnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1faml0LT5wb2tlKGFyZ3VtZW50LCBt
X3N0YWNrSW5kZXgpOworICAgICAgICAgICAgbV9zdGFja0luZGV4ICs9IHN0YWNrSW5kZXhTdGVw
OworICAgICAgICB9CiAjZW5kaWYKIAogICAgICAgICB2b2lkIGFkZEFyZ3VtZW50KEpJVDo6UmVn
aXN0ZXJJRCB0YWcsIEpJVDo6UmVnaXN0ZXJJRCBwYXlsb2FkKQpAQCAtMTc5LDkgKzE5NSw5IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGFkZEFyZ3VtZW50KHVuc2lnbmVkIHNyYywg
SklUOjpSZWdpc3RlcklEIHNjcmF0Y2hSZWdpc3RlcikgLy8gc3JjIGlzIGEgdmlydHVhbCByZWdp
c3Rlci4KICAgICAgICAgewogICAgICAgICAgICAgaWYgKG1faml0LT5tX2NvZGVCbG9jay0+aXND
b25zdGFudFJlZ2lzdGVySW5kZXgoc3JjKSkKLSAgICAgICAgICAgICAgICBhZGRBcmd1bWVudChK
SVQ6OkltbVB0cihKU1ZhbHVlOjplbmNvZGUobV9qaXQtPm1fY29kZUJsb2NrLT5nZXRDb25zdGFu
dChzcmMpKSkpOworICAgICAgICAgICAgICAgIGFkZEFyZ3VtZW50KEpJVDo6SW1tNjQoSlNWYWx1
ZTo6ZW5jb2RlKG1faml0LT5tX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKSkpKTsKICAgICAg
ICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIG1faml0LT5sb2FkUHRyKEpJVDo6QWRkcmVz
cyhKSVQ6OmNhbGxGcmFtZVJlZ2lzdGVyLCBzcmMgKiBzaXplb2YoUmVnaXN0ZXIpKSwgc2NyYXRj
aFJlZ2lzdGVyKTsKKyAgICAgICAgICAgICAgICBtX2ppdC0+bG9hZDY0KEpJVDo6QWRkcmVzcyhK
SVQ6OmNhbGxGcmFtZVJlZ2lzdGVyLCBzcmMgKiBzaXplb2YoUmVnaXN0ZXIpKSwgc2NyYXRjaFJl
Z2lzdGVyKTsKICAgICAgICAgICAgICAgICBhZGRBcmd1bWVudChzY3JhdGNoUmVnaXN0ZXIpOwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgbV9qaXQtPmtpbGxMYXN0UmVzdWx0UmVnaXN0ZXIo
KTsKQEAgLTI0Miw3ICsyNTgsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICNlbHNlCiAgICAgICAgIEpJ
VDo6Q2FsbCBjYWxsKHVuc2lnbmVkIGRzdCkgLy8gZHN0IGlzIGEgdmlydHVhbCByZWdpc3Rlci4K
ICAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKG1fcmV0dXJuVHlwZSA9PSBWb2lkUHRyIHx8
IG1fcmV0dXJuVHlwZSA9PSBDZWxsKTsKKyAgICAgICAgICAgIEFTU0VSVChtX3JldHVyblR5cGUg
PT0gVmFsdWUgfHwgbV9yZXR1cm5UeXBlID09IENlbGwpOwogICAgICAgICAgICAgSklUOjpDYWxs
IGNhbGwgPSB0aGlzLT5jYWxsKCk7CiAgICAgICAgICAgICBtX2ppdC0+ZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QpOwogICAgICAgICAgICAgcmV0dXJuIGNhbGw7CkBAIC0yNTAsNyArMjY2LDcg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIAogICAgICAgICBKSVQ6OkNhbGwgY2FsbFdpdGhW
YWx1ZVByb2ZpbGluZyh1bnNpZ25lZCBkc3QpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VS
VChtX3JldHVyblR5cGUgPT0gVm9pZFB0ciB8fCBtX3JldHVyblR5cGUgPT0gQ2VsbCk7CisgICAg
ICAgICAgICBBU1NFUlQobV9yZXR1cm5UeXBlID09IFZhbHVlIHx8IG1fcmV0dXJuVHlwZSA9PSBD
ZWxsKTsKICAgICAgICAgICAgIEpJVDo6Q2FsbCBjYWxsID0gdGhpcy0+Y2FsbCgpOwogICAgICAg
ICAgICAgQVNTRVJUKEpJVDo6cmV0dXJuVmFsdWVSZWdpc3RlciA9PSBKSVQ6OnJlZ1QwKTsKICAg
ICAgICAgICAgIG1faml0LT5lbWl0VmFsdWVQcm9maWxpbmdTaXRlKCk7CkBAIC0yNjEsMTAgKzI3
Nyw4IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIEpJVDo6Q2FsbCBjYWxsKEpJVDo6UmVn
aXN0ZXJJRCBkc3QpIC8vIGRzdCBpcyBhIG1hY2hpbmUgcmVnaXN0ZXIuCiAgICAgICAgIHsKLSNp
ZiBVU0UoSlNWQUxVRTMyXzY0KQorI2lmIFVTRShKU1ZBTFVFMzJfNjQpIHx8ICFBU1NFUlRfRElT
QUJMRUQKICAgICAgICAgICAgIEFTU0VSVChtX3JldHVyblR5cGUgPT0gVmFsdWUgfHwgbV9yZXR1
cm5UeXBlID09IFZvaWRQdHIgfHwgbV9yZXR1cm5UeXBlID09IEludCB8fCBtX3JldHVyblR5cGUg
PT0gQ2VsbCk7Ci0jZWxzZQotICAgICAgICAgICAgQVNTRVJUKG1fcmV0dXJuVHlwZSA9PSBWb2lk
UHRyIHx8IG1fcmV0dXJuVHlwZSA9PSBJbnQgfHwgbV9yZXR1cm5UeXBlID09IENlbGwpOwogI2Vu
ZGlmCiAgICAgICAgICAgICBKSVQ6OkNhbGwgY2FsbCA9IHRoaXMtPmNhbGwoKTsKICAgICAgICAg
ICAgIGlmIChkc3QgIT0gSklUOjpyZXR1cm5WYWx1ZVJlZ2lzdGVyKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KU0ludGVyZmFjZUpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSlNJbnRlcmZhY2VKSVQuaAkocmV2aXNpb24gMTMxNDQ5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KU0ludGVyZmFjZUpJVC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yNzAsMzYgKzI3MCwzNiBAQCBuYW1lc3BhY2UgSlNDIHsKICNpZiBVU0UoSlNWQUxVRTY0
KQogICAgIEFMV0FZU19JTkxJTkUgSlNJbnRlcmZhY2VKSVQ6Okp1bXAgSlNJbnRlcmZhY2VKSVQ6
OmVtaXRKdW1wSWZJbW1lZGlhdGVOdW1iZXIoUmVnaXN0ZXJJRCByZWcpCiAgICAgewotICAgICAg
ICByZXR1cm4gYnJhbmNoVGVzdFB0cihOb25aZXJvLCByZWcsIHRhZ1R5cGVOdW1iZXJSZWdpc3Rl
cik7CisgICAgICAgIHJldHVybiBicmFuY2hUZXN0NjQoTm9uWmVybywgcmVnLCB0YWdUeXBlTnVt
YmVyUmVnaXN0ZXIpOwogICAgIH0KICAgICBBTFdBWVNfSU5MSU5FIEpTSW50ZXJmYWNlSklUOjpK
dW1wIEpTSW50ZXJmYWNlSklUOjplbWl0SnVtcElmTm90SW1tZWRpYXRlTnVtYmVyKFJlZ2lzdGVy
SUQgcmVnKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGJyYW5jaFRlc3RQdHIoWmVybywgcmVnLCB0
YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOworICAgICAgICByZXR1cm4gYnJhbmNoVGVzdDY0KFplcm8s
IHJlZywgdGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKICAgICB9CiAgICAgaW5saW5lIEpTSW50ZXJm
YWNlSklUOjpKdW1wIEpTSW50ZXJmYWNlSklUOjplbWl0TG9hZEpTQ2VsbCh1bnNpZ25lZCB2aXJ0
dWFsUmVnaXN0ZXJJbmRleCwgUmVnaXN0ZXJJRCBkc3QpCiAgICAgewotICAgICAgICBsb2FkUHRy
KGFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVySW5kZXgpLCBkc3QpOwotICAgICAgICByZXR1cm4g
YnJhbmNoVGVzdFB0cihOb25aZXJvLCBkc3QsIHRhZ01hc2tSZWdpc3Rlcik7CisgICAgICAgIGxv
YWQ2NChhZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlckluZGV4KSwgZHN0KTsKKyAgICAgICAgcmV0
dXJuIGJyYW5jaFRlc3Q2NChOb25aZXJvLCBkc3QsIHRhZ01hc2tSZWdpc3Rlcik7CiAgICAgfQog
ICAgIAogICAgIGlubGluZSBKU0ludGVyZmFjZUpJVDo6SnVtcCBKU0ludGVyZmFjZUpJVDo6ZW1p
dExvYWRJbnQzMih1bnNpZ25lZCB2aXJ0dWFsUmVnaXN0ZXJJbmRleCwgUmVnaXN0ZXJJRCBkc3Qp
CiAgICAgewotICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVySW5kZXgp
LCBkc3QpOwotICAgICAgICBKdW1wIHJlc3VsdCA9IGJyYW5jaFB0cihCZWxvdywgZHN0LCB0YWdU
eXBlTnVtYmVyUmVnaXN0ZXIpOworICAgICAgICBsb2FkNjQoYWRkcmVzc0Zvcih2aXJ0dWFsUmVn
aXN0ZXJJbmRleCksIGRzdCk7CisgICAgICAgIEp1bXAgcmVzdWx0ID0gYnJhbmNoNjQoQmVsb3cs
IGRzdCwgdGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKICAgICAgICAgemVyb0V4dGVuZDMyVG9QdHIo
ZHN0LCBkc3QpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAogICAgIGlubGluZSBK
U0ludGVyZmFjZUpJVDo6SnVtcCBKU0ludGVyZmFjZUpJVDo6ZW1pdExvYWREb3VibGUodW5zaWdu
ZWQgdmlydHVhbFJlZ2lzdGVySW5kZXgsIEZQUmVnaXN0ZXJJRCBkc3QsIFJlZ2lzdGVySUQgc2Ny
YXRjaCkKICAgICB7Ci0gICAgICAgIGxvYWRQdHIoYWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXJJ
bmRleCksIHNjcmF0Y2gpOworICAgICAgICBsb2FkNjQoYWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0
ZXJJbmRleCksIHNjcmF0Y2gpOwogICAgICAgICBKdW1wIG5vdE51bWJlciA9IGVtaXRKdW1wSWZO
b3RJbW1lZGlhdGVOdW1iZXIoc2NyYXRjaCk7Ci0gICAgICAgIEp1bXAgbm90SW50ID0gYnJhbmNo
UHRyKEJlbG93LCBzY3JhdGNoLCB0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOworICAgICAgICBKdW1w
IG5vdEludCA9IGJyYW5jaDY0KEJlbG93LCBzY3JhdGNoLCB0YWdUeXBlTnVtYmVyUmVnaXN0ZXIp
OwogICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShzY3JhdGNoLCBkc3QpOwogICAgICAgICBK
dW1wIGRvbmUgPSBqdW1wKCk7CiAgICAgICAgIG5vdEludC5saW5rKHRoaXMpOwotICAgICAgICBh
ZGRQdHIodGFnVHlwZU51bWJlclJlZ2lzdGVyLCBzY3JhdGNoKTsKLSAgICAgICAgbW92ZVB0clRv
RG91YmxlKHNjcmF0Y2gsIGRzdCk7CisgICAgICAgIGFkZDY0KHRhZ1R5cGVOdW1iZXJSZWdpc3Rl
ciwgc2NyYXRjaCk7CisgICAgICAgIG1vdmU2NFRvRG91YmxlKHNjcmF0Y2gsIGRzdCk7CiAgICAg
ICAgIGRvbmUubGluayh0aGlzKTsKICAgICAgICAgcmV0dXJuIG5vdE51bWJlcjsKICAgICB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NwZWNpYWxpemVkVGh1bmtKSVQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NwZWNpYWxpemVkVGh1bmtKSVQu
aAkocmV2aXNpb24gMTMxNDQ5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TcGVjaWFs
aXplZFRodW5rSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTkwLDkgKzkwLDkgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIHZvaWQgcmV0dXJuRG91YmxlKEZQUmVnaXN0ZXJJRCBzcmMpCiAgICAg
ICAgIHsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICAgICAgbW92ZURvdWJsZVRvUHRyKHNy
YywgcmVnVDApOwotICAgICAgICAgICAgSnVtcCB6ZXJvID0gYnJhbmNoVGVzdFB0cihaZXJvLCBy
ZWdUMCk7Ci0gICAgICAgICAgICBzdWJQdHIodGFnVHlwZU51bWJlclJlZ2lzdGVyLCByZWdUMCk7
CisgICAgICAgICAgICBtb3ZlRG91YmxlVG82NChzcmMsIHJlZ1QwKTsKKyAgICAgICAgICAgIEp1
bXAgemVybyA9IGJyYW5jaFRlc3Q2NChaZXJvLCByZWdUMCk7CisgICAgICAgICAgICBzdWI2NCh0
YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHJlZ1QwKTsKICAgICAgICAgICAgIEp1bXAgZG9uZSA9IGp1
bXAoKTsKICAgICAgICAgICAgIHplcm8ubGluayh0aGlzKTsKICAgICAgICAgICAgIG1vdmUodGFn
VHlwZU51bWJlclJlZ2lzdGVyLCByZWdUMCk7CkBAIC0xNTEsNyArMTUxLDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIHZvaWQgdGFnUmV0dXJuQXNJbnQzMigpCiAgICAgICAgIHsKICNpZiBV
U0UoSlNWQUxVRTY0KQotICAgICAgICAgICAgb3JQdHIodGFnVHlwZU51bWJlclJlZ2lzdGVyLCBy
ZWdUMCk7CisgICAgICAgICAgICBvcjY0KHRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgcmVnVDApOwog
I2Vsc2UKICAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSwg
cmVnVDEpOwogI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Zh
bHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Zh
bHVlLmNwcAkocmV2aXNpb24gMTMxNDQ5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwNCw3ICsyMDQsNyBAQCBjaGFyKiBK
U1ZhbHVlOjpkZXNjcmlwdGlvbigpIGNvbnN0CiAgICAgICAgIHNucHJpbnRmKGRlc2NyaXB0aW9u
LCBzaXplLCAiSW50MzI6ICVkIiwgYXNJbnQzMigpKTsKICAgICBlbHNlIGlmIChpc0RvdWJsZSgp
KSB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgc25wcmludGYoZGVzY3JpcHRpb24sIHNp
emUsICJEb3VibGU6ICVseCwgJWxmIiwgcmVpbnRlcnByZXREb3VibGVUb0ludHB0cihhc0RvdWJs
ZSgpKSwgYXNEb3VibGUoKSk7CisgICAgICAgIHNucHJpbnRmKGRlc2NyaXB0aW9uLCBzaXplLCAi
RG91YmxlOiAlbGxkLCAlbGYiLCAobG9uZyBsb25nKXJlaW50ZXJwcmV0RG91YmxlVG9JbnQ2NChh
c0RvdWJsZSgpKSwgYXNEb3VibGUoKSk7CiAjZWxzZQogICAgICAgICB1bmlvbiB7CiAgICAgICAg
ICAgICBkb3VibGUgYXNEb3VibGU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1ZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNWYWx1ZS5oCShyZXZpc2lvbiAxMzE0NDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1ZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY5LDExICs2OSw3IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgIGVudW0gUHJlZmVycmVkUHJpbWl0aXZlVHlwZSB7IE5vUHJlZmVyZW5jZSwg
UHJlZmVyTnVtYmVyLCBQcmVmZXJTdHJpbmcgfTsKIAogCi0jaWYgVVNFKEpTVkFMVUUzMl82NCkK
ICAgICB0eXBlZGVmIGludDY0X3QgRW5jb2RlZEpTVmFsdWU7Ci0jZWxzZQotICAgIHR5cGVkZWYg
dm9pZCogRW5jb2RlZEpTVmFsdWU7Ci0jZW5kaWYKICAgICAKICAgICB1bmlvbiBFbmNvZGVkVmFs
dWVEZXNjcmlwdG9yIHsKICAgICAgICAgaW50NjRfdCBhc0ludDY0OwpAQCAtMzkwLDkgKzM4Niw5
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBFbmNvZGVkVmFsdWVEZXNjcmlwdG9yIHU7CiAg
ICAgfTsKIAotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgdHlwZWRlZiBJbnRIYXNoPEVuY29k
ZWRKU1ZhbHVlPiBFbmNvZGVkSlNWYWx1ZUhhc2g7CiAKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQog
ICAgIHN0cnVjdCBFbmNvZGVkSlNWYWx1ZUhhc2hUcmFpdHMgOiBIYXNoVHJhaXRzPEVuY29kZWRK
U1ZhbHVlPiB7CiAgICAgICAgIHN0YXRpYyBjb25zdCBib29sIGVtcHR5VmFsdWVJc1plcm8gPSBm
YWxzZTsKICAgICAgICAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIGVtcHR5VmFsdWUoKSB7IHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsgfQpAQCAtNDAwLDggKzM5Niw2IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICBzdGF0aWMgYm9vbCBpc0RlbGV0ZWRWYWx1ZShFbmNvZGVkSlNW
YWx1ZSB2YWx1ZSkgeyByZXR1cm4gdmFsdWUgPT0gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoSlNW
YWx1ZTo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlKSk7IH0KICAgICB9OwogI2Vsc2UKLSAgICB0eXBl
ZGVmIFB0ckhhc2g8RW5jb2RlZEpTVmFsdWU+IEVuY29kZWRKU1ZhbHVlSGFzaDsKLQogICAgIHN0
cnVjdCBFbmNvZGVkSlNWYWx1ZUhhc2hUcmFpdHMgOiBIYXNoVHJhaXRzPEVuY29kZWRKU1ZhbHVl
PiB7CiAgICAgICAgIHN0YXRpYyB2b2lkIGNvbnN0cnVjdERlbGV0ZWRWYWx1ZShFbmNvZGVkSlNW
YWx1ZSYgc2xvdCkgeyBzbG90ID0gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoSlNWYWx1ZTo6SGFz
aFRhYmxlRGVsZXRlZFZhbHVlKSk7IH0KICAgICAgICAgc3RhdGljIGJvb2wgaXNEZWxldGVkVmFs
dWUoRW5jb2RlZEpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIHZhbHVlID09IEpTVmFsdWU6OmVuY29k
ZShKU1ZhbHVlKEpTVmFsdWU6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZSkpOyB9CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhbHVlSW5saW5lTWV0aG9kcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVmFsdWVJbmxpbmVNZXRob2Rz
LmgJKHJldmlzaW9uIDEzMTQ0OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
VmFsdWVJbmxpbmVNZXRob2RzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0MCw3ICsxNDAsNiBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgKnRoaXMgPSBKU1ZhbHVlKHN0YXRpY19jYXN0PGludDMy
X3Q+KGQpKTsKICAgICB9CiAKLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQogICAgIGlubGluZSBFbmNv
ZGVkSlNWYWx1ZSBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSB2YWx1ZSkKICAgICB7CiAgICAgICAg
IHJldHVybiB2YWx1ZS51LmFzSW50NjQ7CkBAIC0xNTMsNiArMTUyLDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIHJldHVybiB2OwogICAgIH0KIAorI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAg
ICAgaW5saW5lIEpTVmFsdWU6OkpTVmFsdWUoKQogICAgIHsKICAgICAgICAgdS5hc0JpdHMudGFn
ID0gRW1wdHlWYWx1ZVRhZzsKQEAgLTMzMywxNyArMzMzLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAK
ICNlbHNlIC8vICFVU0UoSlNWQUxVRTMyXzY0KSBpLmUuIFVTRShKU1ZBTFVFNjQpCiAKLSAgICAv
LyBKU1ZhbHVlIG1lbWJlciBmdW5jdGlvbnMuCi0gICAgaW5saW5lIEVuY29kZWRKU1ZhbHVlIEpT
VmFsdWU6OmVuY29kZShKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHZhbHVl
LnUucHRyOwotICAgIH0KLQotICAgIGlubGluZSBKU1ZhbHVlIEpTVmFsdWU6OmRlY29kZShFbmNv
ZGVkSlNWYWx1ZSBwdHIpCi0gICAgewotICAgICAgICByZXR1cm4gSlNWYWx1ZShyZWludGVycHJl
dF9jYXN0PEpTQ2VsbCo+KHB0cikpOwotICAgIH0KLQogICAgIC8vIDB4MCBjYW4gbmV2ZXIgb2Nj
dXIgbmF0dXJhbGx5IGJlY2F1c2UgaXQgaGFzIGEgdGFnIG9mIDAwLCBpbmRpY2F0aW5nIGEgcG9p
bnRlciB2YWx1ZSwgYnV0IGEgcGF5bG9hZCBvZiAweDAsIHdoaWNoIGlzIGluIHRoZSAoaW52YWxp
ZCkgemVybyBwYWdlLgogICAgIGlubGluZSBKU1ZhbHVlOjpKU1ZhbHVlKCkKICAgICB7CkBAIC0z
NTgsMjcgKzM0NywyNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGlubGluZSBKU1ZhbHVlOjpK
U1ZhbHVlKEpTQ2VsbCogcHRyKQogICAgIHsKLSAgICAgICAgdS5wdHIgPSBwdHI7CisgICAgICAg
IHUuYXNJbnQ2NCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihwdHIpOwogICAgIH0KIAog
ICAgIGlubGluZSBKU1ZhbHVlOjpKU1ZhbHVlKGNvbnN0IEpTQ2VsbCogcHRyKQogICAgIHsKLSAg
ICAgICAgdS5wdHIgPSBjb25zdF9jYXN0PEpTQ2VsbCo+KHB0cik7CisgICAgICAgIHUuYXNJbnQ2
NCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pihjb25zdF9jYXN0PEpTQ2VsbCo+KHB0cikp
OwogICAgIH0KIAogICAgIGlubGluZSBKU1ZhbHVlOjpvcGVyYXRvciBib29sKCkgY29uc3QKICAg
ICB7Ci0gICAgICAgIHJldHVybiB1LnB0cjsKKyAgICAgICAgcmV0dXJuIHUuYXNJbnQ2NDsKICAg
ICB9CiAKICAgICBpbmxpbmUgYm9vbCBKU1ZhbHVlOjpvcGVyYXRvcj09KGNvbnN0IEpTVmFsdWUm
IG90aGVyKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIHUucHRyID09IG90aGVyLnUucHRy
OworICAgICAgICByZXR1cm4gdS5hc0ludDY0ID09IG90aGVyLnUuYXNJbnQ2NDsKICAgICB9CiAK
ICAgICBpbmxpbmUgYm9vbCBKU1ZhbHVlOjpvcGVyYXRvciE9KGNvbnN0IEpTVmFsdWUmIG90aGVy
KSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIHUucHRyICE9IG90aGVyLnUucHRyOworICAg
ICAgICByZXR1cm4gdS5hc0ludDY0ICE9IG90aGVyLnUuYXNJbnQ2NDsKICAgICB9CiAKICAgICBp
bmxpbmUgYm9vbCBKU1ZhbHVlOjppc0VtcHR5KCkgY29uc3QKQEAgLTQ2NCwxOCArNDUzLDE4IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICByZXR1cm4gKHUuYXNJbnQ2NCAmIFRhZ1R5cGVOdW1i
ZXIpID09IFRhZ1R5cGVOdW1iZXI7CiAgICAgfQogCi0gICAgaW5saW5lIGludHB0cl90IHJlaW50
ZXJwcmV0RG91YmxlVG9JbnRwdHIoZG91YmxlIHZhbHVlKQorICAgIGlubGluZSBpbnQ2NF90IHJl
aW50ZXJwcmV0RG91YmxlVG9JbnQ2NChkb3VibGUgdmFsdWUpCiAgICAgewotICAgICAgICByZXR1
cm4gYml0d2lzZV9jYXN0PGludHB0cl90Pih2YWx1ZSk7CisgICAgICAgIHJldHVybiBiaXR3aXNl
X2Nhc3Q8aW50NjRfdD4odmFsdWUpOwogICAgIH0KLSAgICBpbmxpbmUgZG91YmxlIHJlaW50ZXJw
cmV0SW50cHRyVG9Eb3VibGUoaW50cHRyX3QgdmFsdWUpCisgICAgaW5saW5lIGRvdWJsZSByZWlu
dGVycHJldEludDY0VG9Eb3VibGUoaW50NjRfdCB2YWx1ZSkKICAgICB7CiAgICAgICAgIHJldHVy
biBiaXR3aXNlX2Nhc3Q8ZG91YmxlPih2YWx1ZSk7CiAgICAgfQogCiAgICAgQUxXQVlTX0lOTElO
RSBKU1ZhbHVlOjpKU1ZhbHVlKEVuY29kZUFzRG91YmxlVGFnLCBkb3VibGUgZCkKICAgICB7Ci0g
ICAgICAgIHUuYXNJbnQ2NCA9IHJlaW50ZXJwcmV0RG91YmxlVG9JbnRwdHIoZCkgKyBEb3VibGVF
bmNvZGVPZmZzZXQ7CisgICAgICAgIHUuYXNJbnQ2NCA9IHJlaW50ZXJwcmV0RG91YmxlVG9JbnQ2
NChkKSArIERvdWJsZUVuY29kZU9mZnNldDsKICAgICB9CiAKICAgICBpbmxpbmUgSlNWYWx1ZTo6
SlNWYWx1ZShpbnQgaSkKQEAgLTQ4Niw3ICs0NzUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBp
bmxpbmUgZG91YmxlIEpTVmFsdWU6OmFzRG91YmxlKCkgY29uc3QKICAgICB7CiAgICAgICAgIEFT
U0VSVChpc0RvdWJsZSgpKTsKLSAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0SW50cHRyVG9Eb3Vi
bGUodS5hc0ludDY0IC0gRG91YmxlRW5jb2RlT2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIHJlaW50
ZXJwcmV0SW50NjRUb0RvdWJsZSh1LmFzSW50NjQgLSBEb3VibGVFbmNvZGVPZmZzZXQpOwogICAg
IH0KIAogICAgIGlubGluZSBib29sIEpTVmFsdWU6OmlzTnVtYmVyKCkgY29uc3QK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>169076</attachid>
            <date>2012-10-16 19:43:50 -0700</date>
            <delta_ts>2012-10-17 17:06:44 -0700</delta_ts>
            <desc>Rebased: Split patch - part 2: let the JIT compilers use the *64 interfaces of MacroAssemblerX86_64</desc>
            <filename>99154.part2.1.patch</filename>
            <type>text/plain</type>
            <size>221910</size>
            <attacher name="Yuqiang Xian">yuqiang.xian</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTMxNTQzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI0MCBA
QAorMjAxMi0xMC0xNiAgWXVxaWFuZyBYaWFuICA8eXVxaWFuZy54aWFuQGludGVsLmNvbT4KKwor
ICAgICAgICBSZWZhY3RvciBNYWNyb0Fzc2VtYmxlciBpbnRlcmZhY2VzIHRvIGRpZmZlcmVudGlh
dGUgdGhlIHBvaW50ZXIgb3BlcmFuZHMgZnJvbSB0aGUgNjQtYml0IGludGVnZXIgb3BlcmFuZHMK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk5MTU0CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW4gY3VycmVu
dCBKYXZhU2NyaXB0Q29yZSBpbXBsZW1lbnRhdGlvbiBmb3IgSlNWQUxVRTY0IHBsYXRmb3JtIChp
LmUuLAorICAgICAgICB0aGUgWDY0IHBsYXRmb3JtKSwgd2UgYXNzdW1lIHRoYXQgdGhlIEpTVmFs
dWUgc2l6ZSBpcyBzYW1lIHRvIHRoZQorICAgICAgICBwb2ludGVyIHNpemUsIGFuZCB0aHVzIEVu
Y29kZWRKU1ZhbHVlIGlzIHNpbXBseSB0eXBlIGRlZmluZWQgYXMgYQorICAgICAgICAidm9pZCoi
LiBJbiB0aGUgSklUIGNvbXBpbGVyLCB3ZSBhbHNvIHRha2UgdGhpcyBhc3N1bXB0aW9uIGFuZCBp
bnZva2UKKyAgICAgICAgdGhlIHNhbWUgbWFjcm8gYXNzZW1ibGVyIGludGVyZmFjZXMgZm9yIGJv
dGggSlNWYWx1ZSBhbmQgcG9pbnRlcgorICAgICAgICBvcGVyYW5kcy4gV2UgbmVlZCB0byBkaWZm
ZXJlbnRpYXRlIHRoZSBvcGVyYXRpb25zIG9uIHBvaW50ZXJzIGZyb20gdGhlCisgICAgICAgIG9w
ZXJhdGlvbnMgb24gSlNWYWx1ZXMsIGFuZCBsZXQgdGhlbSBpbnZva2luZyBkaWZmZXJlbnQgbWFj
cm8KKyAgICAgICAgYXNzZW1ibGVyIGludGVyZmFjZXMuIEZvciBleGFtcGxlLCB3ZSBub3cgdXNl
IHRoZSBpbnRlcmZhY2Ugb2YKKyAgICAgICAgImxvYWRQdHIiIHRvIGxvYWQgZWl0aGVyIGEgcG9p
bnRlciBvciBhIEpTVmFsdWUsIGFuZCB3ZSBuZWVkIHRvIHN3aXRjaAorICAgICAgICB0byB1c2lu
ZyAibG9hZFB0ciIgdG8gbG9hZCBhIHBvaW50ZXIgYW5kIHNvbWUgbmV3ICJsb2FkNjQiIGludGVy
ZmFjZQorICAgICAgICB0byBsb2FkIGEgSlNWYWx1ZS4gVGhpcyB3b3VsZCBoZWxwIHVzIHN1cHBv
cnRpbmcgb3RoZXIgSlNWQUxVRTY0CisgICAgICAgIHBsYXRmb3JtcyB3aGVyZSBwb2ludGVyIHNp
emUgaXMgbm90IG5lY2Vzc2FyaWx5IDY0LWJpdHMsIGZvciBleGFtcGxlCisgICAgICAgIHgzMiAo
YnVnICM5OTE1MykuCisKKyAgICAgICAgVGhlIG1ham9yIG1vZGlmaWNhdGlvbiBJIG1hZGUgaXMg
dG8gaW50cm9kdWNlIHRoZSAiKjY0IiBpbnRlcmZhY2VzIGluCisgICAgICAgIHRoZSBNYWNyb0Fz
c2VtYmxlciBmb3IgdGhvc2Ugb3BlcmF0aW9ucyBvbiBKU1ZhbHVlcywga2VlcCB0aGUgIipQdHIi
CisgICAgICAgIGludGVyZmFjZXMgZm9yIHRob3NlIG9wZXJhdGlvbnMgb24gcmVhbCBwb2ludGVy
cywgYW5kIGdvIHRocm91Z2ggYWxsCisgICAgICAgIHRoZSBKSVQgY29tcGlsZXIgY29kZSB0byBj
b3JyZWN0IHRoZSB1c2FnZS4KKworICAgICAgICBUaGlzIGlzIHRoZSBzZWNvbmQgcGFydCBvZiB0
aGUgd29yaywgaS5lLCB0byBjb3JyZWN0IHRoZSB1c2FnZSBvZiB0aGUKKyAgICAgICAgbmV3IE1h
Y3JvQXNzZW1ibGVyIGludGVyZmFjZXMgaW4gdGhlIEpJVCBjb21waWxlcnMsIHdoaWNoIGFsc28g
bWVhbnMKKyAgICAgICAgdGhhdCBub3cgRW5jb2RlZEpTVmFsdWUgaXMgZGVmaW5lZCBhcyBhIDY0
LWJpdCBpbnRlZ2VyLCBhbmQgdGhlICIqNjQiCisgICAgICAgIGludGVyZmFjZXMgYXJlIHVzZWQg
Zm9yIGl0LgorCisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmg6IEpTVmFsdWUg
aW1tZWRpYXRlcyBzaG91bGQgYmUgaW4gSW1tNjQgaW5zdGVhZCBvZiBJbW1QdHIuCisgICAgICAg
IChNYWNyb0Fzc2VtYmxlcik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyOjpzaG91bGRC
bGluZCk6CisgICAgICAgICogZGZnL0RGR0Fzc2VtYmx5SGVscGVycy5jcHA6IENvcnJlY3QgdGhl
IEpJVCBjb21waWxlcnMgdXNhZ2Ugb2YgdGhlIG5ldyBpbnRlcmZhY2VzLgorICAgICAgICAoSlND
OjpERkc6OkFzc2VtYmx5SGVscGVyczo6aml0QXNzZXJ0SXNJbnQzMik6CisgICAgICAgIChKU0M6
OkRGRzo6QXNzZW1ibHlIZWxwZXJzOjpqaXRBc3NlcnRJc0pTSW50MzIpOgorICAgICAgICAoSlND
OjpERkc6OkFzc2VtYmx5SGVscGVyczo6aml0QXNzZXJ0SXNKU051bWJlcik6CisgICAgICAgIChK
U0M6OkRGRzo6QXNzZW1ibHlIZWxwZXJzOjpqaXRBc3NlcnRJc0pTRG91YmxlKToKKyAgICAgICAg
KEpTQzo6REZHOjpBc3NlbWJseUhlbHBlcnM6OmppdEFzc2VydElzQ2VsbCk6CisgICAgICAgICog
ZGZnL0RGR0Fzc2VtYmx5SGVscGVycy5oOgorICAgICAgICAoSlNDOjpERkc6OkFzc2VtYmx5SGVs
cGVyczo6ZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKToKKyAgICAgICAgKEpTQzo6REZHOjpBc3Nl
bWJseUhlbHBlcnM6OmJyYW5jaElmTm90Q2VsbCk6CisgICAgICAgIChKU0M6OkRGRzo6QXNzZW1i
bHlIZWxwZXJzOjpkZWJ1Z0NhbGwpOgorICAgICAgICAoSlNDOjpERkc6OkFzc2VtYmx5SGVscGVy
czo6Ym94RG91YmxlKToKKyAgICAgICAgKEpTQzo6REZHOjpBc3NlbWJseUhlbHBlcnM6OnVuYm94
RG91YmxlKToKKyAgICAgICAgKEpTQzo6REZHOjpBc3NlbWJseUhlbHBlcnM6OmVtaXRFeGNlcHRp
b25DaGVjayk6CisgICAgICAgICogZGZnL0RGR0NDYWxsSGVscGVycy5oOgorICAgICAgICAoSlND
OjpERkc6OkNDYWxsSGVscGVyczo6c2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKToKKyAgICAg
ICAgKENDYWxsSGVscGVycyk6CisgICAgICAgICogZGZnL0RGR09TUkV4aXRDb21waWxlcjY0LmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KToKKyAg
ICAgICAgKiBkZmcvREZHUmVwYXRjaC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Z2VuZXJhdGVQ
cm90b0NoYWluQWNjZXNzU3R1Yik6CisgICAgICAgIChKU0M6OkRGRzo6dHJ5Q2FjaGVHZXRCeUlE
KToKKyAgICAgICAgKEpTQzo6REZHOjp0cnlCdWlsZEdldEJ5SURMaXN0KToKKyAgICAgICAgKEpT
Qzo6REZHOjplbWl0UHV0UmVwbGFjZVN0dWIpOgorICAgICAgICAoSlNDOjpERkc6OmVtaXRQdXRU
cmFuc2l0aW9uU3R1Yik6CisgICAgICAgICogZGZnL0RGR1NjcmF0Y2hSZWdpc3RlckFsbG9jYXRv
ci5oOgorICAgICAgICAoSlNDOjpERkc6OlNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6cHJlc2Vy
dmVVc2VkUmVnaXN0ZXJzVG9TY3JhdGNoQnVmZmVyKToKKyAgICAgICAgKEpTQzo6REZHOjpTY3Jh
dGNoUmVnaXN0ZXJBbGxvY2F0b3I6OnJlc3RvcmVVc2VkUmVnaXN0ZXJzRnJvbVNjcmF0Y2hCdWZm
ZXIpOgorICAgICAgICAqIGRmZy9ERkdTaWxlbnRSZWdpc3RlclNhdmVQbGFuLmg6CisgICAgICAg
ICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6Y2hlY2tBcmd1bWVudFR5cGVzKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZVZhbHVlVG9JbnQzMik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVJbnQzMlRvRG91YmxlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZUluc3RhbmNlT2ZGb3JPYmplY3QpOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlSW5zdGFuY2VPZik6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVTdHJpY3RFcUZvckNvbnN0YW50KToKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25Bcmd1bWVudHMpOgor
ICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgorICAgICAgICAoU3BlY3VsYXRpdmVK
SVQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpzaWxlbnRTYXZlUGxhbkZv
ckdQUik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnNpbGVudFNwaWxsKToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6c2lsZW50RmlsbCk6CisgICAgICAg
IChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnNwaWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6dmFsdWVPZkpTQ29uc3RhbnRBc0ltbTY0KToKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y2FsbE9wZXJhdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmJyYW5jaDY0KToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVK
SVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZpbGxJbnRlZ2Vy
KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZmlsbERvdWJsZSk6CisgICAg
ICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZpbGxKU1ZhbHVlKToKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVWYWx1ZVRvTnVtYmVyKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVWYWx1ZVRvSW50
MzIpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVVJ
bnQzMlRvTnVtYmVyKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVk
R2V0QnlJZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNhY2hlZFB1dEJ5
SWQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZU5v
blBlZXBob2xlQ29tcGFyZU51bGwpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklU
Ojpub25TcGVjdWxhdGl2ZVBlZXBob2xlQnJhbmNoTnVsbCk6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlUGVlcGhvbGVCcmFuY2gpOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZU5vblBlZXBob2xlQ29tcGFy
ZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlUGVl
cGhvbGVTdHJpY3RFcSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6Om5vblNw
ZWN1bGF0aXZlTm9uUGVlcGhvbGVTdHJpY3RFcSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRpdmVKSVQ6OmVtaXRDYWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
ZmlsbFNwZWN1bGF0ZUludEludGVybmFsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6ZmlsbFNwZWN1bGF0ZURvdWJsZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OmZpbGxTcGVjdWxhdGVDZWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6ZmlsbFNwZWN1bGF0ZUJvb2xlYW4pOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpjb252ZXJ0VG9Eb3VibGUpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZl
SklUOjpjb21waWxlT2JqZWN0RXF1YWxpdHkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpjb21waWxlT2JqZWN0VG9PYmplY3RPck90aGVyRXF1YWxpdHkpOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVPYmplY3RUb09iamVjdE9y
T3RoZXJFcXVhbGl0eSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVEb3VibGVDb21wYXJlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZU5vblN0cmluZ0NlbGxPck90aGVyTG9naWNhbE5vdCk6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVMb2dpY2FsTm90KToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6ZW1pdE5vblN0cmluZ0NlbGxPck90aGVyQnJhbmNoKToKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdEJyYW5jaCk6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDb250aWd1b3VzR2V0QnlWYWwpOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJyYXlTdG9yYWdlR2V0QnlWYWwpOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlQ29udGlndW91c1B1dEJ5
VmFsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFycmF5U3Rv
cmFnZVB1dEJ5VmFsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZSk6CisgICAgICAgICogZGZnL0RGR1RodW5rcy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6b3Ny
RXhpdEdlbmVyYXRpb25UaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkRGRzo6dGhyb3dF
eGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6REZHOjpz
bG93UGF0aEZvcik6CisgICAgICAgIChKU0M6OkRGRzo6dmlydHVhbEZvclRodW5rR2VuZXJhdG9y
KToKKyAgICAgICAgKiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHA6CisgICAgICAgIChKU0M6
OkludGVycHJldGVyOjpkdW1wUmVnaXN0ZXJzKToKKyAgICAgICAgKiBqaXQvSklULmNwcDoKKyAg
ICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZSk6CisgICAgICAgICogaml0L0pJVC5oOgor
ICAgICAgICAoSklUKToKKyAgICAgICAgKiBqaXQvSklUQXJpdGhtZXRpYy5jcHA6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF9uZWdhdGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93
X29wX25lZ2F0ZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9yc2hpZnQpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX3Vyc2hpZnQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfY29tcGFyZUFuZEp1bXBTbG93KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2JpdGFu
ZCk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZUJpbmFyeUFyaXRoT3BTbG93Q2FzZSk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9kaXYpOgorICAgICAgICAqIGppdC9KSVRDYWxsLmNw
cDoKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlTG9hZFZhcmFyZ3MpOgorICAgICAgICAoSlND
OjpKSVQ6OmNvbXBpbGVDYWxsRXZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZUNhbGxF
dmFsU2xvd0Nhc2UpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVPcENhbGwpOgorICAgICAg
ICAqIGppdC9KSVRJbmxpbmVNZXRob2RzLmg6IEhhdmUgc29tZSBjbGVhbi11cCB3b3JrIGFzIHdl
bGwuCisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRQdXRDZWxsVG9DYWxs
RnJhbWVIZWFkZXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRQdXRJbnRUb0NhbGxGcmFtZUhl
YWRlcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlcjMyKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlcjY0KToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0QWxsb2NhdGVKU0FycmF5KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0R2V0SklUU3R1YkFyZyk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcik6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdElu
aXRSZWdpc3Rlcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEp1bXBJZkpTQ2VsbCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdEp1bXBJZkJvdGhKU0NlbGxzKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0SnVtcElmTm90SlNDZWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0TG9hZEludDMy
VG9Eb3VibGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRKdW1wSWZJbW1lZGlhdGVJbnRlZ2Vy
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0SnVtcElmTm90SW1tZWRpYXRlSW50ZWdlcik6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdEp1bXBJZk5vdEltbWVkaWF0ZUludGVnZXJzKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0RmFzdEFyaXRoUmVUYWdJbW1lZGlhdGUpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRGYXN0QXJpdGhJbnRUb0ltbU5vQ2hlY2spOgorICAgICAgICAqIGppdC9KSVRP
cGNvZGVzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUNUSU5hdGl2ZUNh
bGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbW92KToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX2luc3RhbmNlb2YpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaXNfdW5k
ZWZpbmVkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2lzX2Jvb2xlYW4pOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfaXNfbnVtYmVyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX3RlYXJfb2ZmX2FjdGl2YXRpb24pOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfbm90
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2pmYWxzZSk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9qZXFfbnVsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qbmVxX251
bGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfanRydWUpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3BfYml0eG9yKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2JpdG9yKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9wbmFtZXMpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3BfbmV4dF9wbmFtZSk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wU3Ry
aWN0RXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfY2F0Y2gpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfb3BfdGhyb3dfcmVmZXJlbmNlX2Vycm9yKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX2VxX251bGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbmVxX251bGwp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfY3JlYXRlX2FjdGl2YXRpb24pOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfY3JlYXRlX2FyZ3VtZW50cyk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9pbml0X2xhenlfcmVnKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19v
cF9jb252ZXJ0X3RoaXMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX25vdCk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfYXJndW1lbnRfYnlfdmFsKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX3B1dF90b19iYXNlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X3Jlc29sdmVfb3BlcmF0aW9ucyk6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzLmNw
cDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9ieV92YWwpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRDb250aWd1b3VzR2V0QnlWYWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRB
cnJheVN0b3JhZ2VHZXRCeVZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0
X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZUdldERpcmVjdE9mZnNldCk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfYnlfcG5hbWUpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRDb250aWd1b3VzUHV0QnlWYWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRBcnJh
eVN0b3JhZ2VQdXRCeVZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZUdldEJ5SWRIb3RQ
YXRoKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9ieV9pZCk6CisgICAgICAgIChK
U0M6OkpJVDo6Y29tcGlsZVB1dERpcmVjdE9mZnNldCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9pbml0X2dsb2JhbF9jb25zdCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pbml0
X2dsb2JhbF9jb25zdF9jaGVjayk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEludFR5cGVkQXJy
YXlHZXRCeVZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEZsb2F0VHlwZWRBcnJheUdldEJ5
VmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0RmxvYXRUeXBlZEFycmF5UHV0QnlWYWwpOgor
ICAgICAgICAqIGppdC9KSVRTdHViQ2FsbC5oOgorICAgICAgICAoSklUU3R1YkNhbGwpOgorICAg
ICAgICAoSlNDOjpKSVRTdHViQ2FsbDo6SklUU3R1YkNhbGwpOgorICAgICAgICAoSlNDOjpKSVRT
dHViQ2FsbDo6YWRkQXJndW1lbnQpOgorICAgICAgICAoSlNDOjpKSVRTdHViQ2FsbDo6Y2FsbCk6
CisgICAgICAgIChKU0M6OkpJVFN0dWJDYWxsOjpjYWxsV2l0aFZhbHVlUHJvZmlsaW5nKToKKyAg
ICAgICAgKiBqaXQvSlNJbnRlcmZhY2VKSVQuaDoKKyAgICAgICAgKEpTQzo6SlNJbnRlcmZhY2VK
SVQ6OmVtaXRKdW1wSWZJbW1lZGlhdGVOdW1iZXIpOgorICAgICAgICAoSlNDOjpKU0ludGVyZmFj
ZUpJVDo6ZW1pdEp1bXBJZk5vdEltbWVkaWF0ZU51bWJlcik6CisgICAgICAgIChKU0M6OkpTSW50
ZXJmYWNlSklUOjplbWl0TG9hZEpTQ2VsbCk6CisgICAgICAgIChKU0M6OkpTSW50ZXJmYWNlSklU
OjplbWl0TG9hZEludDMyKToKKyAgICAgICAgKEpTQzo6SlNJbnRlcmZhY2VKSVQ6OmVtaXRMb2Fk
RG91YmxlKToKKyAgICAgICAgKiBqaXQvU3BlY2lhbGl6ZWRUaHVua0pJVC5oOgorICAgICAgICAo
SlNDOjpTcGVjaWFsaXplZFRodW5rSklUOjpyZXR1cm5Eb3VibGUpOgorICAgICAgICAoSlNDOjpT
cGVjaWFsaXplZFRodW5rSklUOjp0YWdSZXR1cm5Bc0ludDMyKToKKyAgICAgICAgKiBydW50aW1l
L0pTVmFsdWUuY3BwOgorICAgICAgICAoSlNDOjpKU1ZhbHVlOjpkZXNjcmlwdGlvbik6CisgICAg
ICAgICogcnVudGltZS9KU1ZhbHVlLmg6IERlZmluZSBKU1ZBTFVFNjQgRW5jb2RlZEpTVmFsdWUg
YXMgaW50NjRfdCwgd2hpY2ggaXMgYWxzbyB1bmlmaWVkIHdpdGggSlNWQUxVRTMyXzY0LgorICAg
ICAgICAoSlNDKToKKyAgICAgICAgKiBydW50aW1lL0pTVmFsdWVJbmxpbmVNZXRob2RzLmg6IE5l
dyBpbXBsZW1lbnRhdGlvbiBvZiBzb21lIEpTVmFsdWUgbWV0aG9kcyB0byBtYWtlIHRoZW0gbW9y
ZSBjb25mb3JtYW50CisgICAgICAgIHdpdGggdGhlIG5ldyBydWxlIHRoYXQgIkpTVmFsdWUgaXMg
YSA2NC1iaXQgaW50ZWdlciByYXRoZXIgdGhhbiBhIHBvaW50ZXIiIGZvciBKU1ZBTFVFNjQgcGxh
dGZvcm1zLgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6SlNWYWx1ZTo6SlNWYWx1ZSk6
CisgICAgICAgIChKU0M6OkpTVmFsdWU6Om9wZXJhdG9yIGJvb2wpOgorICAgICAgICAoSlNDOjpK
U1ZhbHVlOjpvcGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6SlNWYWx1ZTo6b3BlcmF0b3IhPSk6
CisgICAgICAgIChKU0M6OnJlaW50ZXJwcmV0RG91YmxlVG9JbnQ2NCk6CisgICAgICAgIChKU0M6
OnJlaW50ZXJwcmV0SW50NjRUb0RvdWJsZSk6CisgICAgICAgIChKU0M6OkpTVmFsdWU6OmFzRG91
YmxlKToKKwogMjAxMi0xMC0xNiAgSmlhbiBMaSAgPGppYW5saUBjaHJvbWl1bS5vcmc+CiAKICAg
ICAgICAgUmVuYW1lIGZlYXR1cmUgZGVmaW5lIEVOQUJMRV9XSURHRVRfUkVHSU9OIHRvIEVOQUJM
RV9EUkFHR0JBTEVfUkVHSU9OCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L01hY3JvQXNzZW1ibGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9NYWNyb0Fzc2VtYmxlci5oCShyZXZpc2lvbiAxMzE1NDMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTcyOCwxNiArNzI4LDYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gc3RvcmU2NFdpdGhBZGRy
ZXNzT2Zmc2V0UGF0Y2goc3JjLCBhZGRyZXNzKTsKICAgICB9CiAKLSAgICB2b2lkIG1vdmVQdHJU
b0RvdWJsZShSZWdpc3RlcklEIHNyYywgRlBSZWdpc3RlcklEIGRlc3QpCi0gICAgewotICAgICAg
ICBtb3ZlNjRUb0RvdWJsZShzcmMsIGRlc3QpOwotICAgIH0KLQotICAgIHZvaWQgbW92ZURvdWJs
ZVRvUHRyKEZQUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKLSAgICB7Ci0gICAgICAg
IG1vdmVEb3VibGVUbzY0KHNyYywgZGVzdCk7Ci0gICAgfQotCiAgICAgdm9pZCBjb21wYXJlUHRy
KFJlbGF0aW9uYWxDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBsZWZ0LCBUcnVzdGVkSW1tMzIg
cmlnaHQsIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CiAgICAgICAgIGNvbXBhcmU2NChjb25kLCBs
ZWZ0LCByaWdodCwgZGVzdCk7CkBAIC04OTUsMTQgKzg4NSw2IEBAIHB1YmxpYzoKICAgICAgICAg
ZGVmYXVsdDogewogICAgICAgICAgICAgaWYgKHZhbHVlIDw9IDB4ZmYpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgSlNWYWx1ZSBqc1ZhbHVlID0gSlNWYWx1ZTo6
ZGVjb2RlKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHZhbHVlKSk7Ci0gICAgICAgICAgICBpZiAo
anNWYWx1ZS5pc0ludDMyKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHNob3VsZEJsaW5kKElt
bTMyKGpzVmFsdWUuYXNJbnQzMigpKSk7Ci0gICAgICAgICAgICBpZiAoanNWYWx1ZS5pc0RvdWJs
ZSgpICYmICFzaG91bGRCbGluZERvdWJsZShqc1ZhbHVlLmFzRG91YmxlKCkpKQotICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAgICAgaWYgKCFzaG91bGRCbGluZERvdWJs
ZShiaXR3aXNlX2Nhc3Q8ZG91YmxlPih2YWx1ZSkpKQotICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIHJldHVybiBzaG91bGRCbGluZEZv
clNwZWNpZmljQXJjaCh2YWx1ZSk7CkBAIC05NTYsNiArOTM4LDE0IEBAIHB1YmxpYzoKICAgICAg
ICAgZGVmYXVsdDogewogICAgICAgICAgICAgaWYgKHZhbHVlIDw9IDB4ZmYpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgSlNWYWx1ZSBqc1ZhbHVlID0gSlNWYWx1
ZTo6ZGVjb2RlKHZhbHVlKTsKKyAgICAgICAgICAgIGlmIChqc1ZhbHVlLmlzSW50MzIoKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gc2hvdWxkQmxpbmQoSW1tMzIoanNWYWx1ZS5hc0ludDMyKCkp
KTsKKyAgICAgICAgICAgIGlmIChqc1ZhbHVlLmlzRG91YmxlKCkgJiYgIXNob3VsZEJsaW5kRG91
YmxlKGpzVmFsdWUuYXNEb3VibGUoKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgICAgICAgICBpZiAoIXNob3VsZEJsaW5kRG91YmxlKGJpdHdpc2VfY2FzdDxkb3VibGU+
KHZhbHVlKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAg
ICAgIH0KICAgICAgICAgcmV0dXJuIHNob3VsZEJsaW5kRm9yU3BlY2lmaWNBcmNoKHZhbHVlKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXNzZW1ibHlIZWxwZXJzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fzc2VtYmx5SGVscGVy
cy5jcHAJKHJldmlzaW9uIDEzMTU0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QXNzZW1ibHlIZWxwZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzMsNyArNzMsNyBAQCB2b2lk
IEFzc2VtYmx5SGVscGVyczo6Y2xlYXJTYW1wbGluZ0ZsYWcoCiB2b2lkIEFzc2VtYmx5SGVscGVy
czo6aml0QXNzZXJ0SXNJbnQzMihHUFJSZWcgZ3ByKQogewogI2lmIENQVShYODZfNjQpCi0gICAg
SnVtcCBjaGVja0ludDMyID0gYnJhbmNoUHRyKEJlbG93T3JFcXVhbCwgZ3ByLCBUcnVzdGVkSW1t
UHRyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oMHhGRkZG
RkZGRnUpKSkpOworICAgIEp1bXAgY2hlY2tJbnQzMiA9IGJyYW5jaDY0KEJlbG93T3JFcXVhbCwg
Z3ByLCBUcnVzdGVkSW1tNjQoc3RhdGljX2Nhc3Q8dWludHB0cl90PigweEZGRkZGRkZGdSkpKTsK
ICAgICBicmVha3BvaW50KCk7CiAgICAgY2hlY2tJbnQzMi5saW5rKHRoaXMpOwogI2Vsc2UKQEAg
LTgzLDIyICs4MywyMiBAQCB2b2lkIEFzc2VtYmx5SGVscGVyczo6aml0QXNzZXJ0SXNJbnQzMihH
CiAKIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjpqaXRBc3NlcnRJc0pTSW50MzIoR1BSUmVnIGdwcikK
IHsKLSAgICBKdW1wIGNoZWNrSlNJbnQzMiA9IGJyYW5jaFB0cihBYm92ZU9yRXF1YWwsIGdwciwg
R1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKKyAgICBKdW1wIGNoZWNrSlNJbnQzMiA9
IGJyYW5jaDY0KEFib3ZlT3JFcXVhbCwgZ3ByLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0
ZXIpOwogICAgIGJyZWFrcG9pbnQoKTsKICAgICBjaGVja0pTSW50MzIubGluayh0aGlzKTsKIH0K
IAogdm9pZCBBc3NlbWJseUhlbHBlcnM6OmppdEFzc2VydElzSlNOdW1iZXIoR1BSUmVnIGdwcikK
IHsKLSAgICBKdW1wIGNoZWNrSlNOdW1iZXIgPSBicmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVy
OjpOb25aZXJvLCBncHIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7CisgICAgSnVt
cCBjaGVja0pTTnVtYmVyID0gYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBn
cHIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7CiAgICAgYnJlYWtwb2ludCgpOwog
ICAgIGNoZWNrSlNOdW1iZXIubGluayh0aGlzKTsKIH0KIAogdm9pZCBBc3NlbWJseUhlbHBlcnM6
OmppdEFzc2VydElzSlNEb3VibGUoR1BSUmVnIGdwcikKIHsKLSAgICBKdW1wIGNoZWNrSlNJbnQz
MiA9IGJyYW5jaFB0cihBYm92ZU9yRXF1YWwsIGdwciwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJl
Z2lzdGVyKTsKLSAgICBKdW1wIGNoZWNrSlNOdW1iZXIgPSBicmFuY2hUZXN0UHRyKE1hY3JvQXNz
ZW1ibGVyOjpOb25aZXJvLCBncHIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7Cisg
ICAgSnVtcCBjaGVja0pTSW50MzIgPSBicmFuY2g2NChBYm92ZU9yRXF1YWwsIGdwciwgR1BSSW5m
bzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKKyAgICBKdW1wIGNoZWNrSlNOdW1iZXIgPSBicmFu
Y2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIGdwciwgR1BSSW5mbzo6dGFnVHlwZU51
bWJlclJlZ2lzdGVyKTsKICAgICBjaGVja0pTSW50MzIubGluayh0aGlzKTsKICAgICBicmVha3Bv
aW50KCk7CiAgICAgY2hlY2tKU051bWJlci5saW5rKHRoaXMpOwpAQCAtMTA2LDcgKzEwNiw3IEBA
IHZvaWQgQXNzZW1ibHlIZWxwZXJzOjpqaXRBc3NlcnRJc0pTRG91YmwKIAogdm9pZCBBc3NlbWJs
eUhlbHBlcnM6OmppdEFzc2VydElzQ2VsbChHUFJSZWcgZ3ByKQogewotICAgIEp1bXAgY2hlY2tD
ZWxsID0gYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVybywgZ3ByLCBHUFJJbmZvOjp0
YWdNYXNrUmVnaXN0ZXIpOworICAgIEp1bXAgY2hlY2tDZWxsID0gYnJhbmNoVGVzdDY0KE1hY3Jv
QXNzZW1ibGVyOjpaZXJvLCBncHIsIEdQUkluZm86OnRhZ01hc2tSZWdpc3Rlcik7CiAgICAgYnJl
YWtwb2ludCgpOwogICAgIGNoZWNrQ2VsbC5saW5rKHRoaXMpOwogfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBc3NlbWJseUhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fzc2VtYmx5SGVscGVycy5oCShyZXZpc2lvbiAxMzE1
NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fzc2VtYmx5SGVscGVycy5oCSh3
b3JraW5nIGNvcHkpCkBAIC05OSw3ICs5OSwxMSBAQCBwdWJsaWM6CiAgICAgfQogICAgIHZvaWQg
ZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKEdQUlJlZyBmcm9tLCBKU1N0YWNrOjpDYWxsRnJhbWVI
ZWFkZXJFbnRyeSBlbnRyeSkKICAgICB7CisjaWYgQ1BVKFg4Nl82NCkKKyAgICAgICAgc3RvcmU2
NChmcm9tLCBBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBlbnRyeSAqIHNpemVv
ZihSZWdpc3RlcikpKTsKKyNlbHNlCiAgICAgICAgIHN0b3JlUHRyKGZyb20sIEFkZHJlc3MoR1BS
SW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGVudHJ5ICogc2l6ZW9mKFJlZ2lzdGVyKSkpOworI2Vu
ZGlmCiAgICAgfQogCiAgICAgdm9pZCBlbWl0UHV0SW1tZWRpYXRlVG9DYWxsRnJhbWVIZWFkZXIo
dm9pZCogdmFsdWUsIEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlckVudHJ5IGVudHJ5KQpAQCAtMTEw
LDcgKzExNCw3IEBAIHB1YmxpYzoKICAgICBKdW1wIGJyYW5jaElmTm90Q2VsbChHUFJSZWcgcmVn
KQogICAgIHsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICByZXR1cm4gYnJhbmNoVGVzdFB0
cihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgcmVnLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIp
OworICAgICAgICByZXR1cm4gYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBy
ZWcsIEdQUkluZm86OnRhZ01hc2tSZWdpc3Rlcik7CiAjZWxzZQogICAgICAgICByZXR1cm4gYnJh
bmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCByZWcsIFRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpDZWxsVGFnKSk7CiAjZW5kaWYKQEAgLTE3Miw4ICsxNzYsMTQgQEAgcHVibGljOgogICAgICAg
ICBTY3JhdGNoQnVmZmVyKiBzY3JhdGNoQnVmZmVyID0gbV9nbG9iYWxEYXRhLT5zY3JhdGNoQnVm
ZmVyRm9yU2l6ZShzY3JhdGNoU2l6ZSk7CiAgICAgICAgIEVuY29kZWRKU1ZhbHVlKiBidWZmZXIg
PSBzdGF0aWNfY2FzdDxFbmNvZGVkSlNWYWx1ZSo+KHNjcmF0Y2hCdWZmZXItPmRhdGFCdWZmZXIo
KSk7CiAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEdQUkluZm86Om51bWJlck9m
UmVnaXN0ZXJzOyArK2kpCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBHUFJJbmZv
OjpudW1iZXJPZlJlZ2lzdGVyczsgKytpKSB7CisjaWYgQ1BVKFg4Nl82NCkKKyAgICAgICAgICAg
IHN0b3JlNjQoR1BSSW5mbzo6dG9SZWdpc3RlcihpKSwgYnVmZmVyICsgaSk7CisjZWxzZQogICAg
ICAgICAgICAgc3RvcmVQdHIoR1BSSW5mbzo6dG9SZWdpc3RlcihpKSwgYnVmZmVyICsgaSk7Cisj
ZW5kaWYKKyAgICAgICAgfQorCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBGUFJJ
bmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgKytpKSB7CiAgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJ
bW1QdHIoYnVmZmVyICsgR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMgKyBpKSwgR1BSSW5mbzo6
cmVnVDApOwogICAgICAgICAgICAgc3RvcmVEb3VibGUoRlBSSW5mbzo6dG9SZWdpc3RlcihpKSwg
R1BSSW5mbzo6cmVnVDApOwpAQCAtMjA0LDggKzIxNCwxMyBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICBtb3ZlKFRydXN0ZWRJbW1QdHIoYnVmZmVyICsgR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMg
KyBpKSwgR1BSSW5mbzo6cmVnVDApOwogICAgICAgICAgICAgbG9hZERvdWJsZShHUFJJbmZvOjpy
ZWdUMCwgRlBSSW5mbzo6dG9SZWdpc3RlcihpKSk7CiAgICAgICAgIH0KLSAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyArK2kpCisgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsg
KytpKSB7CisjaWYgQ1BVKFg4Nl82NCkKKyAgICAgICAgICAgIGxvYWQ2NChidWZmZXIgKyBpLCBH
UFJJbmZvOjp0b1JlZ2lzdGVyKGkpKTsKKyNlbHNlCiAgICAgICAgICAgICBsb2FkUHRyKGJ1ZmZl
ciArIGksIEdQUkluZm86OnRvUmVnaXN0ZXIoaSkpOworI2VuZGlmCisgICAgICAgIH0KICAgICB9
CiAKICAgICAvLyBUaGVzZSBtZXRob2RzIEpJVCBnZW5lcmF0ZSBkeW5hbWljLCBkZWJ1Zy1vbmx5
IGNoZWNrcyAtIGFraW4gdG8gQVNTRVJUcy4KQEAgLTIyOSwxNiArMjQ0LDE2IEBAIHB1YmxpYzoK
ICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIEdQUlJlZyBib3hEb3VibGUoRlBSUmVnIGZwciwgR1BS
UmVnIGdwcikKICAgICB7Ci0gICAgICAgIG1vdmVEb3VibGVUb1B0cihmcHIsIGdwcik7Ci0gICAg
ICAgIHN1YlB0cihHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIGdwcik7CisgICAgICAg
IG1vdmVEb3VibGVUbzY0KGZwciwgZ3ByKTsKKyAgICAgICAgc3ViNjQoR1BSSW5mbzo6dGFnVHlw
ZU51bWJlclJlZ2lzdGVyLCBncHIpOwogICAgICAgICBqaXRBc3NlcnRJc0pTRG91YmxlKGdwcik7
CiAgICAgICAgIHJldHVybiBncHI7CiAgICAgfQogICAgIEZQUlJlZyB1bmJveERvdWJsZShHUFJS
ZWcgZ3ByLCBGUFJSZWcgZnByKQogICAgIHsKICAgICAgICAgaml0QXNzZXJ0SXNKU0RvdWJsZShn
cHIpOwotICAgICAgICBhZGRQdHIoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBncHIp
OwotICAgICAgICBtb3ZlUHRyVG9Eb3VibGUoZ3ByLCBmcHIpOworICAgICAgICBhZGQ2NChHUFJJ
bmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIGdwcik7CisgICAgICAgIG1vdmU2NFRvRG91Ymxl
KGdwciwgZnByKTsKICAgICAgICAgcmV0dXJuIGZwcjsKICAgICB9CiAjZW5kaWYKQEAgLTI1OCw3
ICsyNzMsNyBAQCBwdWJsaWM6CiAgICAgSnVtcCBlbWl0RXhjZXB0aW9uQ2hlY2soRXhjZXB0aW9u
Q2hlY2tLaW5kIGtpbmQgPSBOb3JtYWxFeGNlcHRpb25DaGVjaykKICAgICB7CiAjaWYgVVNFKEpT
VkFMVUU2NCkKLSAgICAgICAgcmV0dXJuIGJyYW5jaFRlc3RQdHIoa2luZCA9PSBOb3JtYWxFeGNl
cHRpb25DaGVjayA/IE5vblplcm8gOiBaZXJvLCBBYnNvbHV0ZUFkZHJlc3MoJmdsb2JhbERhdGEo
KS0+ZXhjZXB0aW9uKSk7CisgICAgICAgIHJldHVybiBicmFuY2hUZXN0NjQoa2luZCA9PSBOb3Jt
YWxFeGNlcHRpb25DaGVjayA/IE5vblplcm8gOiBaZXJvLCBBYnNvbHV0ZUFkZHJlc3MoJmdsb2Jh
bERhdGEoKS0+ZXhjZXB0aW9uKSk7CiAjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQogICAgICAgICBy
ZXR1cm4gYnJhbmNoMzIoa2luZCA9PSBOb3JtYWxFeGNlcHRpb25DaGVjayA/IE5vdEVxdWFsIDog
RXF1YWwsIEFic29sdXRlQWRkcmVzcyhyZWludGVycHJldF9jYXN0PGNoYXIqPigmZ2xvYmFsRGF0
YSgpLT5leGNlcHRpb24pICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykp
LCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZykpOwogI2VuZGlmCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NDYWxsSGVscGVycy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0NhbGxIZWxwZXJzLmgJKHJldmlzaW9uIDEz
MTU0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0NhbGxIZWxwZXJzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTU1Miw2ICs1NTIsMTMgQEAgcHVibGljOgogICAgICAgICBtb3ZlKEdQ
UkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwogICAgIH0K
ICAgICAKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRl
KEdQUlJlZyBhcmcxLCBUcnVzdGVkSW1tNjQgYXJnMikKKyAgICB7CisgICAgICAgIG1vdmUoYXJn
MSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICAgICAgbW92ZShhcmcyLCBHUFJJbmZvOjph
cmd1bWVudEdQUjIpOworICAgICAgICBtb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBH
UFJJbmZvOjphcmd1bWVudEdQUjApOworICAgIH0KKyAgICAKICAgICBBTFdBWVNfSU5MSU5FIHZv
aWQgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEdQUlJlZyBhcmcxLCBUcnVzdGVkSW1tMzIg
YXJnMikKICAgICB7CiAgICAgICAgIG1vdmUoYXJnMSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsK
QEAgLTU3Myw2ICs1ODAsMTMgQEAgcHVibGljOgogICAgICAgICBtb3ZlKEdQUkluZm86OmNhbGxG
cmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwogICAgIH0KICAgICAKKyAgICBB
TFdBWVNfSU5MSU5FIHZvaWQgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW02
NCBhcmcxLCBHUFJSZWcgYXJnMikKKyAgICB7CisgICAgICAgIG1vdmUoYXJnMiwgR1BSSW5mbzo6
YXJndW1lbnRHUFIyKTsgLy8gTW92ZSB0aGlzIGZpcnN0LCBzbyBzZXR0aW5nIGFyZzEgZG9lcyBu
b3QgdHJhbXBsZSEKKyAgICAgICAgbW92ZShhcmcxLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOwor
ICAgICAgICBtb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVu
dEdQUjApOworICAgIH0KKwogICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXR1cEFyZ3VtZW50c1dp
dGhFeGVjU3RhdGUoVHJ1c3RlZEltbTMyIGFyZzEsIEdQUlJlZyBhcmcyKQogICAgIHsKICAgICAg
ICAgbW92ZShhcmcyLCBHUFJJbmZvOjphcmd1bWVudEdQUjIpOyAvLyBNb3ZlIHRoaXMgZmlyc3Qs
IHNvIHNldHRpbmcgYXJnMSBkb2VzIG5vdCB0cmFtcGxlIQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXI2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXI2NC5jcHAJKHJldmlzaW9uIDEz
MTU0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyNjQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MywxMiArNzMsMTIgQEAgdm9pZCBPU1JFeGl0Q29tcGls
ZXI6OmNvbXBpbGVFeGl0KGNvbnN0CiAgICAgICAgIHN3aXRjaCAocmVjb3ZlcnktPnR5cGUoKSkg
ewogICAgICAgICBjYXNlIFNwZWN1bGF0aXZlQWRkOgogICAgICAgICAgICAgbV9qaXQuc3ViMzIo
cmVjb3ZlcnktPnNyYygpLCByZWNvdmVyeS0+ZGVzdCgpKTsKLSAgICAgICAgICAgIG1faml0Lm9y
UHRyKEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgcmVjb3ZlcnktPmRlc3QoKSk7Cisg
ICAgICAgICAgICBtX2ppdC5vcjY0KEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgcmVj
b3ZlcnktPmRlc3QoKSk7CiAgICAgICAgICAgICBhbHJlYWR5Qm94ZWQgPSByZWNvdmVyeS0+ZGVz
dCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBCb29s
ZWFuU3BlY3VsYXRpb25DaGVjazoKLSAgICAgICAgICAgIG1faml0LnhvclB0cihBc3NlbWJseUhl
bHBlcnM6OlRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90PihWYWx1ZUZhbHNlKSksIHJl
Y292ZXJ5LT5kZXN0KCkpOworICAgICAgICAgICAgbV9qaXQueG9yNjQoQXNzZW1ibHlIZWxwZXJz
OjpUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oVmFsdWVGYWxzZSkpLCByZWNvdmVy
eS0+ZGVzdCgpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgICAgIGRl
ZmF1bHQ6CkBAIC05OCwxMSArOTgsMTEgQEAgdm9pZCBPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVF
eGl0KGNvbnN0CiAgICAgICAgIGlmIChleGl0Lm1fanNWYWx1ZVNvdXJjZS5pc0FkZHJlc3MoKSkg
ewogICAgICAgICAgICAgLy8gV2UgY2FuJ3QgYmUgc3VyZSB0aGF0IHdlIGhhdmUgYSBzcGFyZSBy
ZWdpc3Rlci4gU28gdXNlIHRoZSB0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsCiAgICAgICAgICAgICAv
LyBzaW5jZSB3ZSBrbm93IGhvdyB0byByZXN0b3JlIGl0LgotICAgICAgICAgICAgbV9qaXQubG9h
ZFB0cihBc3NlbWJseUhlbHBlcnM6OkFkZHJlc3MoZXhpdC5tX2pzVmFsdWVTb3VyY2UuYXNBZGRy
ZXNzKCkpLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOwotICAgICAgICAgICAgbV9q
aXQuc3RvcmVQdHIoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBidWNrZXQpOwotICAg
ICAgICAgICAgbV9qaXQubW92ZShBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoYml0d2lz
ZV9jYXN0PHZvaWQqPihUYWdUeXBlTnVtYmVyKSksIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdp
c3Rlcik7CisgICAgICAgICAgICBtX2ppdC5sb2FkNjQoQXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNz
KGV4aXQubV9qc1ZhbHVlU291cmNlLmFzQWRkcmVzcygpKSwgR1BSSW5mbzo6dGFnVHlwZU51bWJl
clJlZ2lzdGVyKTsKKyAgICAgICAgICAgIG1faml0LnN0b3JlNjQoR1BSSW5mbzo6dGFnVHlwZU51
bWJlclJlZ2lzdGVyLCBidWNrZXQpOworICAgICAgICAgICAgbV9qaXQubW92ZShBc3NlbWJseUhl
bHBlcnM6OlRydXN0ZWRJbW02NChiaXR3aXNlX2Nhc3Q8aW50NjRfdD4oVGFnVHlwZU51bWJlcikp
LCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOwogICAgICAgICB9IGVsc2UKLSAgICAg
ICAgICAgIG1faml0LnN0b3JlUHRyKGV4aXQubV9qc1ZhbHVlU291cmNlLmdwcigpLCBidWNrZXQp
OworICAgICAgICAgICAgbV9qaXQuc3RvcmU2NChleGl0Lm1fanNWYWx1ZVNvdXJjZS5ncHIoKSwg
YnVja2V0KTsKICAgICB9CiAKICAgICAvLyA0KSBGaWd1cmUgb3V0IGhvdyBtYW55IHNjcmF0Y2gg
c2xvdHMgd2UnbGwgbmVlZC4gV2UgbmVlZCBvbmUgZm9yIGV2ZXJ5IEdQUi9GUFIKQEAgLTIzMCw3
ICsyMzAsNyBAQCB2b2lkIE9TUkV4aXRDb21waWxlcjo6Y29tcGlsZUV4aXQoY29uc3QKICAgICAg
ICAgICAgIHN3aXRjaCAocmVjb3ZlcnkudGVjaG5pcXVlKCkpIHsKICAgICAgICAgICAgIGNhc2Ug
VW5ib3hlZEludDMySW5HUFI6CiAgICAgICAgICAgICAgICAgaWYgKHJlY292ZXJ5LmdwcigpICE9
IGFscmVhZHlCb3hlZCkKLSAgICAgICAgICAgICAgICAgICAgbV9qaXQub3JQdHIoR1BSSW5mbzo6
dGFnVHlwZU51bWJlclJlZ2lzdGVyLCByZWNvdmVyeS5ncHIoKSk7CisgICAgICAgICAgICAgICAg
ICAgIG1faml0Lm9yNjQoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCByZWNvdmVyeS5n
cHIoKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICBjYXNlIEFscmVhZHlJbkpTU3RhY2tBc1VuYm94ZWRJbnQzMjoKQEAgLTI1Miw3ICsyNTIs
NyBAQCB2b2lkIE9TUkV4aXRDb21waWxlcjo6Y29tcGlsZUV4aXQoY29uc3QKICAgICAgICAgICAg
ICAgICBpZiAoYWRkcmVzc0dQUiA9PSByZWNvdmVyeS5ncHIoKSkKICAgICAgICAgICAgICAgICAg
ICAgYWRkcmVzc0dQUiA9IEdQUkluZm86OnJlZ1QxOwogICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgICAgIG1faml0LnN0b3JlUHRyKGFkZHJlc3NHUFIsIHNjcmF0Y2hEYXRhQnVmZmVyKTsK
KyAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTY0KGFkZHJlc3NHUFIsIHNjcmF0Y2hEYXRhQnVm
ZmVyKTsKICAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKEFzc2VtYmx5SGVscGVyczo6VHJ1c3Rl
ZEltbVB0cihzY3JhdGNoRGF0YUJ1ZmZlciArIDEpLCBhZGRyZXNzR1BSKTsKICAgICAgICAgICAg
ICAgICBtX2ppdC5zdG9yZURvdWJsZShGUFJJbmZvOjpmcFJlZ1QwLCBhZGRyZXNzR1BSKTsKICAg
ICAgICAgICAgICAgICAKQEAgLTI2NiwxMiArMjY2LDEyIEBAIHZvaWQgT1NSRXhpdENvbXBpbGVy
Ojpjb21waWxlRXhpdChjb25zdAogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIHBv
c2l0aXZlLmxpbmsoJm1faml0KTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBt
X2ppdC5vclB0cihHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHJlY292ZXJ5Lmdwcigp
KTsKKyAgICAgICAgICAgICAgICBtX2ppdC5vcjY0KEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdp
c3RlciwgcmVjb3ZlcnkuZ3ByKCkpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAg
IGRvbmUubGluaygmbV9qaXQpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIG1f
aml0LmxvYWREb3VibGUoYWRkcmVzc0dQUiwgRlBSSW5mbzo6ZnBSZWdUMCk7Ci0gICAgICAgICAg
ICAgICAgbV9qaXQubG9hZFB0cihzY3JhdGNoRGF0YUJ1ZmZlciwgYWRkcmVzc0dQUik7CisgICAg
ICAgICAgICAgICAgbV9qaXQubG9hZDY0KHNjcmF0Y2hEYXRhQnVmZmVyLCBhZGRyZXNzR1BSKTsK
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAK
QEAgLTI5NiwxMSArMjk2LDExIEBAIHZvaWQgT1NSRXhpdENvbXBpbGVyOjpjb21waWxlRXhpdChj
b25zdAogICAgICAgICBjYXNlIFVuYm94ZWRJbnQzMkluR1BSOgogICAgICAgICBjYXNlIFVJbnQz
MkluR1BSOgogICAgICAgICAgICAgaWYgKG9wZXJhbmRzLmlzVmFyaWFibGUoaW5kZXgpICYmIHBv
aXNvbmVkVmlydHVhbFJlZ2lzdGVyc1tvcGVyYW5kcy52YXJpYWJsZUZvckluZGV4KGluZGV4KV0p
IHsKLSAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZVB0cihyZWNvdmVyeS5ncHIoKSwgc2NyYXRj
aERhdGFCdWZmZXIgKyBjdXJyZW50UG9pc29uSW5kZXgpOworICAgICAgICAgICAgICAgIG1faml0
LnN0b3JlNjQocmVjb3ZlcnkuZ3ByKCksIHNjcmF0Y2hEYXRhQnVmZmVyICsgY3VycmVudFBvaXNv
bkluZGV4KTsKICAgICAgICAgICAgICAgICBtX3BvaXNvblNjcmF0Y2hJbmRpY2VzW29wZXJhbmRz
LnZhcmlhYmxlRm9ySW5kZXgoaW5kZXgpXSA9IGN1cnJlbnRQb2lzb25JbmRleDsKICAgICAgICAg
ICAgICAgICBjdXJyZW50UG9pc29uSW5kZXgrKzsKICAgICAgICAgICAgIH0gZWxzZQotICAgICAg
ICAgICAgICAgIG1faml0LnN0b3JlUHRyKHJlY292ZXJ5LmdwcigpLCBBc3NlbWJseUhlbHBlcnM6
OmFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcilvcGVyYW5kKSk7CisgICAgICAgICAgICAgICAg
bV9qaXQuc3RvcmU2NChyZWNvdmVyeS5ncHIoKSwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9y
KChWaXJ0dWFsUmVnaXN0ZXIpb3BlcmFuZCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IGRlZmF1bHQ6CiAgICAgICAgICAgICBicmVhazsKQEAgLTMzMCwxMSArMzMwLDExIEBAIHZvaWQg
T1NSRXhpdENvbXBpbGVyOjpjb21waWxlRXhpdChjb25zdAogICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICAgICAgR1BSUmVnIGdwciA9IEdQUkluZm86OnRvUmVnaXN0ZXIoRlBSSW5m
bzo6dG9JbmRleChyZWNvdmVyeS5mcHIoKSkpOwogICAgICAgICAgICAgaWYgKG9wZXJhbmRzLmlz
VmFyaWFibGUoaW5kZXgpICYmIHBvaXNvbmVkVmlydHVhbFJlZ2lzdGVyc1tvcGVyYW5kcy52YXJp
YWJsZUZvckluZGV4KGluZGV4KV0pIHsKLSAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZVB0cihn
cHIsIHNjcmF0Y2hEYXRhQnVmZmVyICsgY3VycmVudFBvaXNvbkluZGV4KTsKKyAgICAgICAgICAg
ICAgICBtX2ppdC5zdG9yZTY0KGdwciwgc2NyYXRjaERhdGFCdWZmZXIgKyBjdXJyZW50UG9pc29u
SW5kZXgpOwogICAgICAgICAgICAgICAgIG1fcG9pc29uU2NyYXRjaEluZGljZXNbb3BlcmFuZHMu
dmFyaWFibGVGb3JJbmRleChpbmRleCldID0gY3VycmVudFBvaXNvbkluZGV4OwogICAgICAgICAg
ICAgICAgIGN1cnJlbnRQb2lzb25JbmRleCsrOwogICAgICAgICAgICAgfSBlbHNlCi0gICAgICAg
ICAgICAgICAgbV9qaXQuc3RvcmVQdHIoZ3ByLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3Io
KFZpcnR1YWxSZWdpc3RlcilvcGVyYW5kcy5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSk7CisgICAg
ICAgICAgICAgICAgbV9qaXQuc3RvcmU2NChncHIsIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0Zv
cigoVmlydHVhbFJlZ2lzdGVyKW9wZXJhbmRzLm9wZXJhbmRGb3JJbmRleChpbmRleCkpKTsKICAg
ICAgICAgfQogICAgIH0KICAgICAKQEAgLTM0OCw3ICszNDgsNyBAQCB2b2lkIE9TUkV4aXRDb21w
aWxlcjo6Y29tcGlsZUV4aXQoY29uc3QKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgICAgIG1faml0LmxvYWREb3VibGUoQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0
dWFsUmVnaXN0ZXIpb3BlcmFuZHMub3BlcmFuZEZvckluZGV4KGluZGV4KSksIEZQUkluZm86OmZw
UmVnVDApOwogICAgICAgICAgICAgbV9qaXQuYm94RG91YmxlKEZQUkluZm86OmZwUmVnVDAsIEdQ
UkluZm86OnJlZ1QwKTsKLSAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKEdQUkluZm86OnJlZ1Qw
LCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcilvcGVyYW5kcy5v
cGVyYW5kRm9ySW5kZXgoaW5kZXgpKSk7CisgICAgICAgICAgICBtX2ppdC5zdG9yZTY0KEdQUklu
Zm86OnJlZ1QwLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3Rlcilv
cGVyYW5kcy5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSk7CiAgICAgICAgIH0KICAgICB9CiAgICAg
CkBAIC0zNjgsMjAgKzM2OCwyMCBAQCB2b2lkIE9TUkV4aXRDb21waWxlcjo6Y29tcGlsZUV4aXQo
Y29uc3QKICAgICAgICAgICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IG9w
ZXJhbmRzW2luZGV4XTsKICAgICAgICAgICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5LnRlY2huaXF1
ZSgpKSB7CiAgICAgICAgICAgICAgICAgY2FzZSBEaXNwbGFjZWRJbkpTU3RhY2s6Ci0gICAgICAg
ICAgICAgICAgICAgIG1faml0LmxvYWRQdHIoQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKHJl
Y292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpKSwgR1BSSW5mbzo6dG9SZWdpc3RlcihkaXNwbGFjZW1l
bnRJbmRleCsrKSk7CisgICAgICAgICAgICAgICAgICAgIG1faml0LmxvYWQ2NChBc3NlbWJseUhl
bHBlcnM6OmFkZHJlc3NGb3IocmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkpLCBHUFJJbmZvOjp0
b1JlZ2lzdGVyKGRpc3BsYWNlbWVudEluZGV4KyspKTsKICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGNhc2UgSW50MzJEaXNw
bGFjZWRJbkpTU3RhY2s6IHsKICAgICAgICAgICAgICAgICAgICAgR1BSUmVnIGdwciA9IEdQUklu
Zm86OnRvUmVnaXN0ZXIoZGlzcGxhY2VtZW50SW5kZXgrKyk7CiAgICAgICAgICAgICAgICAgICAg
IG1faml0LmxvYWQzMihBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IocmVjb3ZlcnkudmlydHVh
bFJlZ2lzdGVyKCkpLCBncHIpOwotICAgICAgICAgICAgICAgICAgICBtX2ppdC5vclB0cihHUFJJ
bmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIGdwcik7CisgICAgICAgICAgICAgICAgICAgIG1f
aml0Lm9yNjQoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBncHIpOwogICAgICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgIGNhc2UgRG91YmxlRGlzcGxhY2VkSW5KU1N0YWNrOiB7CiAgICAg
ICAgICAgICAgICAgICAgIEdQUlJlZyBncHIgPSBHUFJJbmZvOjp0b1JlZ2lzdGVyKGRpc3BsYWNl
bWVudEluZGV4KyspOwotICAgICAgICAgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKEFzc2VtYmx5
SGVscGVyczo6YWRkcmVzc0ZvcihyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSksIGdwcik7Ci0g
ICAgICAgICAgICAgICAgICAgIG1faml0LnN1YlB0cihHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVn
aXN0ZXIsIGdwcik7CisgICAgICAgICAgICAgICAgICAgIG1faml0LmxvYWQ2NChBc3NlbWJseUhl
bHBlcnM6OmFkZHJlc3NGb3IocmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkpLCBncHIpOworICAg
ICAgICAgICAgICAgICAgICBtX2ppdC5zdWI2NChHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0
ZXIsIGdwcik7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICAgICAgCkBAIC0zOTcsNyArMzk3LDcgQEAgdm9pZCBPU1JFeGl0Q29t
cGlsZXI6OmNvbXBpbGVFeGl0KGNvbnN0CiAgICAgICAgICAgICAgICAgY2FzZSBEaXNwbGFjZWRJ
bkpTU3RhY2s6CiAgICAgICAgICAgICAgICAgY2FzZSBJbnQzMkRpc3BsYWNlZEluSlNTdGFjazoK
ICAgICAgICAgICAgICAgICBjYXNlIERvdWJsZURpc3BsYWNlZEluSlNTdGFjazoKLSAgICAgICAg
ICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIoR1BSSW5mbzo6dG9SZWdpc3RlcihkaXNwbGFjZW1l
bnRJbmRleCsrKSwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIp
b3BlcmFuZHMub3BlcmFuZEZvckluZGV4KGluZGV4KSkpOworICAgICAgICAgICAgICAgICAgICBt
X2ppdC5zdG9yZTY0KEdQUkluZm86OnRvUmVnaXN0ZXIoZGlzcGxhY2VtZW50SW5kZXgrKyksIEFz
c2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKW9wZXJhbmRzLm9wZXJh
bmRGb3JJbmRleChpbmRleCkpKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGRlZmF1bHQ6CkBAIC00MjgsMjEgKzQyOCwy
MSBAQCB2b2lkIE9TUkV4aXRDb21waWxlcjo6Y29tcGlsZUV4aXQoY29uc3QKICAgICAgICAgICAg
ICAgICAKICAgICAgICAgICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5LnRlY2huaXF1ZSgpKSB7CiAg
ICAgICAgICAgICAgICAgY2FzZSBEaXNwbGFjZWRJbkpTU3RhY2s6Ci0gICAgICAgICAgICAgICAg
ICAgIG1faml0LmxvYWRQdHIoQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKHJlY292ZXJ5LnZp
cnR1YWxSZWdpc3RlcigpKSwgR1BSSW5mbzo6cmVnVDApOwotICAgICAgICAgICAgICAgICAgICBt
X2ppdC5zdG9yZVB0cihHUFJJbmZvOjpyZWdUMCwgc2NyYXRjaERhdGFCdWZmZXIgKyBzY3JhdGNo
SW5kZXgrKyk7CisgICAgICAgICAgICAgICAgICAgIG1faml0LmxvYWQ2NChBc3NlbWJseUhlbHBl
cnM6OmFkZHJlc3NGb3IocmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkpLCBHUFJJbmZvOjpyZWdU
MCk7CisgICAgICAgICAgICAgICAgICAgIG1faml0LnN0b3JlNjQoR1BSSW5mbzo6cmVnVDAsIHNj
cmF0Y2hEYXRhQnVmZmVyICsgc2NyYXRjaEluZGV4KyspOwogICAgICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgY2FzZSBJbnQzMkRp
c3BsYWNlZEluSlNTdGFjazogewogICAgICAgICAgICAgICAgICAgICBtX2ppdC5sb2FkMzIoQXNz
ZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKHJlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpKSwgR1BS
SW5mbzo6cmVnVDApOwotICAgICAgICAgICAgICAgICAgICBtX2ppdC5vclB0cihHUFJJbmZvOjp0
YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIEdQUkluZm86OnJlZ1QwKTsKLSAgICAgICAgICAgICAgICAg
ICAgbV9qaXQuc3RvcmVQdHIoR1BSSW5mbzo6cmVnVDAsIHNjcmF0Y2hEYXRhQnVmZmVyICsgc2Ny
YXRjaEluZGV4KyspOworICAgICAgICAgICAgICAgICAgICBtX2ppdC5vcjY0KEdQUkluZm86OnRh
Z1R5cGVOdW1iZXJSZWdpc3RlciwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAgICAgICAg
ICBtX2ppdC5zdG9yZTY0KEdQUkluZm86OnJlZ1QwLCBzY3JhdGNoRGF0YUJ1ZmZlciArIHNjcmF0
Y2hJbmRleCsrKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBjYXNlIERvdWJsZURpc3Bs
YWNlZEluSlNTdGFjazogewotICAgICAgICAgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKEFzc2Vt
Ymx5SGVscGVyczo6YWRkcmVzc0ZvcihyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSksIEdQUklu
Zm86OnJlZ1QwKTsKLSAgICAgICAgICAgICAgICAgICAgbV9qaXQuc3ViUHRyKEdQUkluZm86OnRh
Z1R5cGVOdW1iZXJSZWdpc3RlciwgR1BSSW5mbzo6cmVnVDApOwotICAgICAgICAgICAgICAgICAg
ICBtX2ppdC5zdG9yZVB0cihHUFJJbmZvOjpyZWdUMCwgc2NyYXRjaERhdGFCdWZmZXIgKyBzY3Jh
dGNoSW5kZXgrKyk7CisgICAgICAgICAgICAgICAgICAgIG1faml0LmxvYWQ2NChBc3NlbWJseUhl
bHBlcnM6OmFkZHJlc3NGb3IocmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkpLCBHUFJJbmZvOjpy
ZWdUMCk7CisgICAgICAgICAgICAgICAgICAgIG1faml0LnN1YjY0KEdQUkluZm86OnRhZ1R5cGVO
dW1iZXJSZWdpc3RlciwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAgICAgICAgICBtX2pp
dC5zdG9yZTY0KEdQUkluZm86OnJlZ1QwLCBzY3JhdGNoRGF0YUJ1ZmZlciArIHNjcmF0Y2hJbmRl
eCsrKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICAgICAKQEAgLTQ1OCw4ICs0NTgsOCBAQCB2b2lkIE9TUkV4aXRDb21waWxl
cjo6Y29tcGlsZUV4aXQoY29uc3QKICAgICAgICAgICAgICAgICBjYXNlIERpc3BsYWNlZEluSlNT
dGFjazoKICAgICAgICAgICAgICAgICBjYXNlIEludDMyRGlzcGxhY2VkSW5KU1N0YWNrOgogICAg
ICAgICAgICAgICAgIGNhc2UgRG91YmxlRGlzcGxhY2VkSW5KU1N0YWNrOgotICAgICAgICAgICAg
ICAgICAgICBtX2ppdC5sb2FkUHRyKHNjcmF0Y2hEYXRhQnVmZmVyICsgc2NyYXRjaEluZGV4Kyss
IEdQUkluZm86OnJlZ1QwKTsKLSAgICAgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIoR1BS
SW5mbzo6cmVnVDAsIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVy
KW9wZXJhbmRzLm9wZXJhbmRGb3JJbmRleChpbmRleCkpKTsKKyAgICAgICAgICAgICAgICAgICAg
bV9qaXQubG9hZDY0KHNjcmF0Y2hEYXRhQnVmZmVyICsgc2NyYXRjaEluZGV4KyssIEdQUkluZm86
OnJlZ1QwKTsKKyAgICAgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmU2NChHUFJJbmZvOjpyZWdU
MCwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpb3BlcmFuZHMu
b3BlcmFuZEZvckluZGV4KGluZGV4KSkpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgZGVmYXVsdDoKQEAgLTQ4NCw4ICs0
ODQsOCBAQCB2b2lkIE9TUkV4aXRDb21waWxlcjo6Y29tcGlsZUV4aXQoY29uc3QKICAgICAgICAg
ICAgIGNhc2UgVW5ib3hlZEludDMySW5HUFI6CiAgICAgICAgICAgICBjYXNlIFVJbnQzMkluR1BS
OgogICAgICAgICAgICAgY2FzZSBJbkZQUjoKLSAgICAgICAgICAgICAgICBtX2ppdC5sb2FkUHRy
KHNjcmF0Y2hEYXRhQnVmZmVyICsgcG9pc29uSW5kZXgodmlydHVhbFJlZ2lzdGVyKSwgR1BSSW5m
bzo6cmVnVDApOwotICAgICAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKEdQUkluZm86OnJlZ1Qw
LCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3Rlcil2aXJ0dWFsUmVn
aXN0ZXIpKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5sb2FkNjQoc2NyYXRjaERhdGFCdWZmZXIg
KyBwb2lzb25JbmRleCh2aXJ0dWFsUmVnaXN0ZXIpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAg
ICAgICAgICAgbV9qaXQuc3RvcmU2NChHUFJJbmZvOjpyZWdUMCwgQXNzZW1ibHlIZWxwZXJzOjph
ZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpdmlydHVhbFJlZ2lzdGVyKSk7CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBkZWZhdWx0OgpAQCAt
NDk5LDE2ICs0OTksMTYgQEAgdm9pZCBPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KGNvbnN0
CiAKICAgICBpZiAoaGF2ZUNvbnN0YW50cykgewogICAgICAgICBpZiAoaGF2ZVVuZGVmaW5lZCkK
LSAgICAgICAgICAgIG1faml0Lm1vdmUoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKSksIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAg
ICAgIG1faml0Lm1vdmUoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpKSwgR1BSSW5mbzo6cmVnVDApOwogICAgICAgICAKICAgICAgICAg
Zm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IG9wZXJhbmRzLnNpemUoKTsgKytpbmRleCkg
ewogICAgICAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBvcGVyYW5kc1tp
bmRleF07CiAgICAgICAgICAgICBpZiAocmVjb3ZlcnkudGVjaG5pcXVlKCkgIT0gQ29uc3RhbnQp
CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBpZiAocmVjb3ZlcnkuY29u
c3RhbnQoKS5pc1VuZGVmaW5lZCgpKQotICAgICAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKEdQ
UkluZm86OnJlZ1QwLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3Rl
cilvcGVyYW5kcy5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSk7CisgICAgICAgICAgICAgICAgbV9q
aXQuc3RvcmU2NChHUFJJbmZvOjpyZWdUMCwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKChW
aXJ0dWFsUmVnaXN0ZXIpb3BlcmFuZHMub3BlcmFuZEZvckluZGV4KGluZGV4KSkpOwogICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKEFzc2VtYmx5SGVscGVy
czo6VHJ1c3RlZEltbVB0cihKU1ZhbHVlOjplbmNvZGUocmVjb3ZlcnkuY29uc3RhbnQoKSkpLCBB
c3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcilvcGVyYW5kcy5vcGVy
YW5kRm9ySW5kZXgoaW5kZXgpKSk7CisgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmU2NChBc3Nl
bWJseUhlbHBlcnM6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUocmVjb3ZlcnkuY29uc3Rh
bnQoKSkpLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcilvcGVy
YW5kcy5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgCkBA
IC01NzYsMTEgKzU3NiwxMSBAQCB2b2lkIE9TUkV4aXRDb21waWxlcjo6Y29tcGlsZUV4aXQoY29u
c3QKICAgICAgICAgICAgIGNhbGxlckZyYW1lR1BSID0gR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0
ZXI7CiAgICAgICAgIAogICAgICAgICBtX2ppdC5zdG9yZVB0cihBc3NlbWJseUhlbHBlcnM6OlRy
dXN0ZWRJbW1QdHIoYmFzZWxpbmVDb2RlQmxvY2spLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NG
b3IoKFZpcnR1YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIEpTU3Rh
Y2s6OkNvZGVCbG9jaykpKTsKLSAgICAgICAgbV9qaXQuc3RvcmVQdHIoQXNzZW1ibHlIZWxwZXJz
OjpUcnVzdGVkSW1tUHRyKGlubGluZUNhbGxGcmFtZS0+Y2FsbGVlLT5zY29wZSgpKSwgQXNzZW1i
bHlIZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxGcmFtZS0+
c3RhY2tPZmZzZXQgKyBKU1N0YWNrOjpTY29wZUNoYWluKSkpOwotICAgICAgICBtX2ppdC5zdG9y
ZVB0cihjYWxsZXJGcmFtZUdQUiwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFs
UmVnaXN0ZXIpKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBKU1N0YWNrOjpDYWxsZXJG
cmFtZSkpKTsKKyAgICAgICAgbV9qaXQuc3RvcmU2NChBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJ
bW02NChKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZShpbmxpbmVDYWxsRnJhbWUtPmNhbGxlZS0+c2Nv
cGUoKSkpKSwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlu
bGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBKU1N0YWNrOjpTY29wZUNoYWluKSkpOworICAg
ICAgICBtX2ppdC5zdG9yZTY0KGNhbGxlckZyYW1lR1BSLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJl
c3NGb3IoKFZpcnR1YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIEpT
U3RhY2s6OkNhbGxlckZyYW1lKSkpOwogICAgICAgICBtX2ppdC5zdG9yZVB0cihBc3NlbWJseUhl
bHBlcnM6OlRydXN0ZWRJbW1QdHIoanVtcFRhcmdldCksIEFzc2VtYmx5SGVscGVyczo6YWRkcmVz
c0ZvcigoVmlydHVhbFJlZ2lzdGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgSlNT
dGFjazo6UmV0dXJuUEMpKSk7CiAgICAgICAgIG1faml0LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJz
OjpUcnVzdGVkSW1tMzIoaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpKSwgQXNzZW1i
bHlIZWxwZXJzOjpwYXlsb2FkRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxGcmFtZS0+
c3RhY2tPZmZzZXQgKyBKU1N0YWNrOjpBcmd1bWVudENvdW50KSkpOwotICAgICAgICBtX2ppdC5z
dG9yZVB0cihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoaW5saW5lQ2FsbEZyYW1lLT5j
YWxsZWUuZ2V0KCkpLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3Rl
cikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIEpTU3RhY2s6OkNhbGxlZSkpKTsKKyAg
ICAgICAgbV9qaXQuc3RvcmU2NChBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW02NChKU1ZhbHVl
OjplbmNvZGUoSlNWYWx1ZShpbmxpbmVDYWxsRnJhbWUtPmNhbGxlZS5nZXQoKSkpKSwgQXNzZW1i
bHlIZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxGcmFtZS0+
c3RhY2tPZmZzZXQgKyBKU1N0YWNrOjpDYWxsZWUpKSk7CiAgICAgfQogICAgIAogICAgIC8vIDE1
KSBDcmVhdGUgYXJndW1lbnRzIGlmIG5lY2Vzc2FyeSBhbmQgcGxhY2UgdGhlbSBpbnRvIHRoZSBh
cHByb3ByaWF0ZSBhbGlhc2VkCkBAIC02MjAsMjEgKzYyMCwyMiBAQCB2b2lkIE9TUkV4aXRDb21w
aWxlcjo6Y29tcGlsZUV4aXQoY29uc3QKICAgICAgICAgICAgICAgICAgICAgICAgIGJpdHdpc2Vf
Y2FzdDx2b2lkKj4ob3BlcmF0aW9uQ3JlYXRlQXJndW1lbnRzKSksCiAgICAgICAgICAgICAgICAg
ICAgIEdQUkluZm86Om5vbkFyZ0dQUjApOwogICAgICAgICAgICAgICAgIG1faml0LmNhbGwoR1BS
SW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAgICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIoR1BSSW5m
bzo6cmV0dXJuVmFsdWVHUFIsIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0Zvcihhcmd1bWVudHNS
ZWdpc3RlcikpOwotICAgICAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKAorICAgICAgICAgICAg
ICAgIG1faml0LnN0b3JlNjQoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEFzc2VtYmx5SGVscGVy
czo6YWRkcmVzc0Zvcihhcmd1bWVudHNSZWdpc3RlcikpOworICAgICAgICAgICAgICAgIG1faml0
LnN0b3JlNjQoCiAgICAgICAgICAgICAgICAgICAgIEdQUkluZm86OnJldHVyblZhbHVlR1BSLAog
ICAgICAgICAgICAgICAgICAgICBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IodW5tb2RpZmll
ZEFyZ3VtZW50c1JlZ2lzdGVyKGFyZ3VtZW50c1JlZ2lzdGVyKSkpOwogICAgICAgICAgICAgICAg
IG1faml0Lm1vdmUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEdQUkluZm86OnJlZ1QwKTsgLy8g
bm8tb3AgbW92ZSBvbiBhbG1vc3QgYWxsIHBsYXRmb3Jtcy4KICAgICAgICAgICAgIH0KIAotICAg
ICAgICAgICAgbV9qaXQubG9hZFB0cihBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoYXJndW1l
bnRzUmVnaXN0ZXIpLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgICAgICBtX2ppdC5zdG9yZVB0
cihHUFJJbmZvOjpyZWdUMCwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKG9wZXJhbmQpKTsK
KyAgICAgICAgICAgIG1faml0LmxvYWQ2NChBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoYXJn
dW1lbnRzUmVnaXN0ZXIpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAgICBtX2ppdC5zdG9y
ZTY0KEdQUkluZm86OnJlZ1QwLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3Iob3BlcmFuZCkp
OwogICAgICAgICB9CiAgICAgfQogICAgIAogICAgIC8vIDE2KSBMb2FkIHRoZSByZXN1bHQgb2Yg
dGhlIGxhc3QgYnl0ZWNvZGUgb3BlcmF0aW9uIGludG8gcmVnVDAuCisgICAgCiAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBleGl0Lm1fc2V0T3BlcmFuZHMuc2l6ZSgpOyBpKyspCi0gICAgICAg
IG1faml0LmxvYWRQdHIoQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0
ZXIpZXhpdC5tX3NldE9wZXJhbmRzW2ldKSwgR1BSSW5mbzo6Y2FjaGVkUmVzdWx0UmVnaXN0ZXIp
OworICAgICAgICBtX2ppdC5sb2FkNjQoQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0
dWFsUmVnaXN0ZXIpZXhpdC5tX3NldE9wZXJhbmRzW2ldKSwgR1BSSW5mbzo6Y2FjaGVkUmVzdWx0
UmVnaXN0ZXIpOwogCiAgICAgLy8gMTcpIEFkanVzdCB0aGUgY2FsbCBmcmFtZSBwb2ludGVyLgog
ICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guY3BwCShyZXZp
c2lvbiAxMzE1NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xOTIsNyArMTkyLDcgQEAgc3RhdGljIHZvaWQgZ2VuZXJhdGVQ
cm90b0NoYWluQWNjZXNzU3R1YgogICAgIAogICAgIGlmIChpc0lubGluZU9mZnNldChvZmZzZXQp
KSB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgc3R1YkppdC5sb2FkUHRyKHByb3RvT2Jq
ZWN0LT5sb2NhdGlvbkZvck9mZnNldChvZmZzZXQpLCByZXN1bHRHUFIpOworICAgICAgICBzdHVi
Sml0LmxvYWQ2NChwcm90b09iamVjdC0+bG9jYXRpb25Gb3JPZmZzZXQob2Zmc2V0KSwgcmVzdWx0
R1BSKTsKICNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgICAgIHN0dWJKaXQubW92ZShNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihwcm90b09iamVjdC0+bG9jYXRpb25Gb3JPZmZzZXQo
b2Zmc2V0KSksIHJlc3VsdEdQUik7CiAgICAgICAgIHN0dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2Ny
aXB0b3IsIGFzQml0cy50YWcpKSwgcmVzdWx0VGFnR1BSKTsKQEAgLTIwMSw3ICsyMDEsNyBAQCBz
dGF0aWMgdm9pZCBnZW5lcmF0ZVByb3RvQ2hhaW5BY2Nlc3NTdHViCiAgICAgfSBlbHNlIHsKICAg
ICAgICAgc3R1YkppdC5sb2FkUHRyKHByb3RvT2JqZWN0LT5idXR0ZXJmbHlBZGRyZXNzKCksIHJl
c3VsdEdQUik7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgb2Zmc2V0SW5CdXR0ZXJmbHkob2Zmc2V0
KSAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSwgcmVzdWx0R1BSKTsKKyAgICAgICAg
c3R1YkppdC5sb2FkNjQoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBvZmZzZXRJ
bkJ1dHRlcmZseShvZmZzZXQpICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpLCByZXN1
bHRHUFIpOwogI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKICAgICAgICAgc3R1YkppdC5sb2FkMzIo
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBvZmZzZXRJbkJ1dHRlcmZseShvZmZz
ZXQpICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5j
b2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpLCByZXN1bHRUYWdHUFIpOwogICAgICAg
ICBzdHViSml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIG9mZnNl
dEluQnV0dGVyZmx5KG9mZnNldCkgKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSArIE9C
SkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpLCBy
ZXN1bHRHUFIpOwpAQCAtMjYzLDcgKzI2Myw3IEBAIHN0YXRpYyBib29sIHRyeUNhY2hlR2V0QnlJ
RChFeGVjU3RhdGUqIGUKICAgICAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChzdHViSml0LmJyYW5j
aDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwgc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW0zMigwKSkpOwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgc3R1Ykpp
dC5vclB0cihHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHNjcmF0Y2hHUFIsIHJlc3Vs
dEdQUik7CisgICAgICAgIHN0dWJKaXQub3I2NChHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0
ZXIsIHNjcmF0Y2hHUFIsIHJlc3VsdEdQUik7CiAjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQogICAg
ICAgICBzdHViSml0Lm1vdmUoc2NyYXRjaEdQUiwgcmVzdWx0R1BSKTsKICAgICAgICAgc3R1Ykpp
dC5tb3ZlKEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tMzIoMHhmZmZmZmZmZiksIHJlc3VsdFRhZ0dQ
Uik7IC8vIEpTVmFsdWU6OkludDMyVGFnCkBAIC00MjEsMTQgKzQyMSwxNCBAQCBzdGF0aWMgYm9v
bCB0cnlCdWlsZEdldEJ5SURMaXN0KEV4ZWNTdGF0CiAgICAgICAgICAgICAgICAgQVNTRVJUKGJh
c2VHUFIgIT0gc2NyYXRjaEdQUik7CiAgICAgICAgICAgICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0
KHNsb3QuY2FjaGVkT2Zmc2V0KCkpKSB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgICAg
ICAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIs
IG9mZnNldFJlbGF0aXZlVG9CYXNlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpKSwgc2NyYXRjaEdQUik7
CisgICAgICAgICAgICAgICAgICAgIHN0dWJKaXQubG9hZDY0KE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKGJhc2VHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpKSwg
c2NyYXRjaEdQUik7CiAjZWxzZQogICAgICAgICAgICAgICAgICAgICBzdHViSml0LmxvYWQzMihN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShzbG90
LmNhY2hlZE9mZnNldCgpKSksIHNjcmF0Y2hHUFIpOwogI2VuZGlmCiAgICAgICAgICAgICAgICAg
fSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0
Y2hHUFIpOwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgICAgICAgICAgICAgIHN0dWJKaXQu
bG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBvZmZzZXRSZWxhdGl2
ZVRvQmFzZShzbG90LmNhY2hlZE9mZnNldCgpKSksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAg
ICAgICAgICBzdHViSml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BS
LCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShzbG90LmNhY2hlZE9mZnNldCgpKSksIHNjcmF0Y2hHUFIp
OwogI2Vsc2UKICAgICAgICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uoc2xvdC5jYWNoZWRP
ZmZzZXQoKSkpLCBzY3JhdGNoR1BSKTsKICNlbmRpZgpAQCAtNDY1LDcgKzQ2NSw3IEBAIHN0YXRp
YyBib29sIHRyeUJ1aWxkR2V0QnlJRExpc3QoRXhlY1N0YXQKICAgICAgICAgfSBlbHNlIHsKICAg
ICAgICAgICAgIGlmIChpc0lubGluZU9mZnNldChzbG90LmNhY2hlZE9mZnNldCgpKSkgewogI2lm
IFVTRShKU1ZBTFVFNjQpCi0gICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKHNsb3QuY2FjaGVk
T2Zmc2V0KCkpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBzdHViSml0LmxvYWQ2NChN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShzbG90
LmNhY2hlZE9mZnNldCgpKSksIHJlc3VsdEdQUik7CiAjZWxzZQogICAgICAgICAgICAgICAgIGlm
IChiYXNlR1BSID09IHJlc3VsdFRhZ0dQUikgewogICAgICAgICAgICAgICAgICAgICBzdHViSml0
LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBvZmZzZXRSZWxhdGl2ZVRv
QmFzZShzbG90LmNhY2hlZE9mZnNldCgpKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVE
ZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpLCByZXN1bHRHUFIpOwpAQCAtNDc4LDcgKzQ3OCw3
IEBAIHN0YXRpYyBib29sIHRyeUJ1aWxkR2V0QnlJRExpc3QoRXhlY1N0YXQKICAgICAgICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlc3VsdEdQ
Uik7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgICAgICAgICBzdHViSml0LmxvYWRQdHIo
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShz
bG90LmNhY2hlZE9mZnNldCgpKSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgc3R1Ykpp
dC5sb2FkNjQoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBvZmZzZXRSZWxhdGl2
ZVRvQmFzZShzbG90LmNhY2hlZE9mZnNldCgpKSksIHJlc3VsdEdQUik7CiAjZWxzZQogICAgICAg
ICAgICAgICAgIHN0dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJlc3VsdEdQ
Uiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKyBPQkpFQ1RfT0ZG
U0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpLCByZXN1bHRUYWdHUFIp
OwogICAgICAgICAgICAgICAgIHN0dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KHJlc3VsdEdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKyBP
QkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSwg
cmVzdWx0R1BSKTsKQEAgLTY4MiwxMCArNjgyLDEwIEBAIHN0YXRpYyB2b2lkIGVtaXRQdXRSZXBs
YWNlU3R1YigKICAgICAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIGlmIChpc0lubGluZU9mZnNl
dChzbG90LmNhY2hlZE9mZnNldCgpKSkKLSAgICAgICAgc3R1YkppdC5zdG9yZVB0cih2YWx1ZUdQ
UiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mSW5s
aW5lU3RvcmFnZSgpICsgb2Zmc2V0SW5JbmxpbmVTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkp
ICogc2l6ZW9mKEpTVmFsdWUpKSk7CisgICAgICAgIHN0dWJKaXQuc3RvcmU2NCh2YWx1ZUdQUiwg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5l
U3RvcmFnZSgpICsgb2Zmc2V0SW5JbmxpbmVTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICog
c2l6ZW9mKEpTVmFsdWUpKSk7CiAgICAgZWxzZSB7CiAgICAgICAgIHN0dWJKaXQubG9hZFB0cihN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0
KCkpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgc3R1YkppdC5zdG9yZVB0cih2YWx1ZUdQUiwgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgb2Zmc2V0SW5CdXR0ZXJmbHkoc2xvdC5j
YWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkpKTsKKyAgICAgICAgc3R1YkppdC5zdG9y
ZTY0KHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBvZmZzZXRJ
bkJ1dHRlcmZseShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSkpOwogICAg
IH0KICNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KHNsb3Qu
Y2FjaGVkT2Zmc2V0KCkpKSB7CkBAIC04NTQsMTEgKzg1NCwxMSBAQCBzdGF0aWMgdm9pZCBlbWl0
UHV0VHJhbnNpdGlvblN0dWIoCiAgICAgc3R1YkppdC5zdG9yZVB0cihNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BS
LCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBp
ZiAoaXNJbmxpbmVPZmZzZXQoc2xvdC5jYWNoZWRPZmZzZXQoKSkpCi0gICAgICAgIHN0dWJKaXQu
c3RvcmVQdHIodmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2Jq
ZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSArIG9mZnNldEluSW5saW5lU3RvcmFnZShzbG90
LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSkpOworICAgICAgICBzdHViSml0LnN0
b3JlNjQodmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0
OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSArIG9mZnNldEluSW5saW5lU3RvcmFnZShzbG90LmNh
Y2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSkpOwogICAgIGVsc2UgewogICAgICAgICBp
ZiAoIXNjcmF0Y2hHUFIxSGFzU3RvcmFnZSkKICAgICAgICAgICAgIHN0dWJKaXQubG9hZFB0cihN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0
KCkpLCBzY3JhdGNoR1BSMSk7Ci0gICAgICAgIHN0dWJKaXQuc3RvcmVQdHIodmFsdWVHUFIsIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIxLCBvZmZzZXRJbkJ1dHRlcmZseShzbG90
LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSkpOworICAgICAgICBzdHViSml0LnN0
b3JlNjQodmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIxLCBvZmZz
ZXRJbkJ1dHRlcmZseShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSkpOwog
ICAgIH0KICNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KHNs
b3QuY2FjaGVkT2Zmc2V0KCkpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmgJKHJldmlzaW9uIDEzMTU0
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2NyYXRjaFJlZ2lzdGVyQWxsb2Nh
dG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyNywxNSArMTI3LDIwIEBAIHB1YmxpYzoKICAgICB7
CiAgICAgICAgIHVuc2lnbmVkIGNvdW50ID0gMDsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
R1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7IGktLTspIHsKLSAgICAgICAgICAgIGlmIChtX3Vz
ZWRSZWdpc3RlcnMuZ2V0R1BSQnlJbmRleChpKSkKLSAgICAgICAgICAgICAgICBqaXQuc3RvcmVQ
dHIoR1BSSW5mbzo6dG9SZWdpc3RlcihpKSwgc2NyYXRjaEJ1ZmZlci0+bV9idWZmZXIgKyAoY291
bnQrKykpOworICAgICAgICAgICAgaWYgKG1fdXNlZFJlZ2lzdGVycy5nZXRHUFJCeUluZGV4KGkp
KSB7CisjaWYgQ1BVKFg4Nl82NCkKKyAgICAgICAgICAgICAgICBqaXQuc3RvcmU2NChHUFJJbmZv
Ojp0b1JlZ2lzdGVyKGkpLCBzdGF0aWNfY2FzdDxFbmNvZGVkSlNWYWx1ZSo+KHNjcmF0Y2hCdWZm
ZXItPmRhdGFCdWZmZXIoKSkgKyAoY291bnQrKykpOworI2Vsc2UKKyAgICAgICAgICAgICAgICBq
aXQuc3RvcmVQdHIoR1BSSW5mbzo6dG9SZWdpc3RlcihpKSwgc3RhdGljX2Nhc3Q8RW5jb2RlZEpT
VmFsdWUqPihzY3JhdGNoQnVmZmVyLT5kYXRhQnVmZmVyKCkpICsgKGNvdW50KyspKTsKKyNlbmRp
ZgorICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKHNjcmF0Y2hHUFIgPT0gSW52YWxpZEdQ
UlJlZyAmJiAhbV9sb2NrZWRSZWdpc3RlcnMuZ2V0R1BSQnlJbmRleChpKSAmJiAhbV9zY3JhdGNo
UmVnaXN0ZXJzLmdldEdQUkJ5SW5kZXgoaSkpCiAgICAgICAgICAgICAgICAgc2NyYXRjaEdQUiA9
IEdQUkluZm86OnRvUmVnaXN0ZXIoaSk7CiAgICAgICAgIH0KICAgICAgICAgQVNTRVJUKHNjcmF0
Y2hHUFIgIT0gSW52YWxpZEdQUlJlZyk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IEZQUklu
Zm86Om51bWJlck9mUmVnaXN0ZXJzOyBpLS07KSB7CiAgICAgICAgICAgICBpZiAobV91c2VkUmVn
aXN0ZXJzLmdldEZQUkJ5SW5kZXgoaSkpIHsKLSAgICAgICAgICAgICAgICBqaXQubW92ZShNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihzY3JhdGNoQnVmZmVyLT5tX2J1ZmZlciArIChjb3Vu
dCsrKSksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tUHRyKHN0YXRpY19jYXN0PEVuY29kZWRKU1ZhbHVlKj4oc2NyYXRjaEJ1
ZmZlci0+ZGF0YUJ1ZmZlcigpKSArIChjb3VudCsrKSksIHNjcmF0Y2hHUFIpOwogICAgICAgICAg
ICAgICAgIGppdC5zdG9yZURvdWJsZShGUFJJbmZvOjp0b1JlZ2lzdGVyKGkpLCBzY3JhdGNoR1BS
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMTY1LDE1ICsxNzAsMjAgQEAgcHVibGlj
OgogICAgICAgICB1bnNpZ25lZCBjb3VudCA9IG1fdXNlZFJlZ2lzdGVycy5udW1iZXJPZlNldEdQ
UnMoKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gRlBSSW5mbzo6bnVtYmVyT2ZSZWdpc3Rl
cnM7IGktLTspIHsKICAgICAgICAgICAgIGlmIChtX3VzZWRSZWdpc3RlcnMuZ2V0RlBSQnlJbmRl
eChpKSkgewotICAgICAgICAgICAgICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tUHRyKHNjcmF0Y2hCdWZmZXItPm1fYnVmZmVyICsgKGNvdW50KyspKSwgc2NyYXRjaEdQUik7
CisgICAgICAgICAgICAgICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIo
c3RhdGljX2Nhc3Q8RW5jb2RlZEpTVmFsdWUqPihzY3JhdGNoQnVmZmVyLT5kYXRhQnVmZmVyKCkp
ICsgKGNvdW50KyspKSwgc2NyYXRjaEdQUik7CiAgICAgICAgICAgICAgICAgaml0LmxvYWREb3Vi
bGUoc2NyYXRjaEdQUiwgRlBSSW5mbzo6dG9SZWdpc3RlcihpKSk7CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGNvdW50ID0gMDsKICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7IGktLTspIHsKLSAgICAgICAgICAg
IGlmIChtX3VzZWRSZWdpc3RlcnMuZ2V0R1BSQnlJbmRleChpKSkKLSAgICAgICAgICAgICAgICBq
aXQubG9hZFB0cihzY3JhdGNoQnVmZmVyLT5tX2J1ZmZlciArIChjb3VudCsrKSwgR1BSSW5mbzo6
dG9SZWdpc3RlcihpKSk7CisgICAgICAgICAgICBpZiAobV91c2VkUmVnaXN0ZXJzLmdldEdQUkJ5
SW5kZXgoaSkpIHsKKyNpZiBDUFUoWDg2XzY0KQorICAgICAgICAgICAgICAgIGppdC5sb2FkNjQo
c3RhdGljX2Nhc3Q8RW5jb2RlZEpTVmFsdWUqPihzY3JhdGNoQnVmZmVyLT5kYXRhQnVmZmVyKCkp
ICsgKGNvdW50KyspLCBHUFJJbmZvOjp0b1JlZ2lzdGVyKGkpKTsKKyNlbHNlCisgICAgICAgICAg
ICAgICAgaml0LmxvYWRQdHIoc3RhdGljX2Nhc3Q8RW5jb2RlZEpTVmFsdWUqPihzY3JhdGNoQnVm
ZmVyLT5kYXRhQnVmZmVyKCkpICsgKGNvdW50KyspLCBHUFJJbmZvOjp0b1JlZ2lzdGVyKGkpKTsK
KyNlbmRpZgorICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogICAgIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTaWxlbnRSZWdpc3RlclNhdmVQbGFuLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTaWxlbnRSZWdpc3RlclNhdmVQ
bGFuLmgJKHJldmlzaW9uIDEzMTU0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U2lsZW50UmVnaXN0ZXJTYXZlUGxhbi5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw2ICs0MSw3IEBA
IGVudW0gU2lsZW50U3BpbGxBY3Rpb24gewogICAgIFN0b3JlMzJUYWcsCiAgICAgU3RvcmUzMlBh
eWxvYWQsCiAgICAgU3RvcmVQdHIsCisgICAgU3RvcmU2NCwKICAgICBTdG9yZURvdWJsZQogfTsK
IApAQCAtNjEsNiArNjIsNyBAQCBlbnVtIFNpbGVudEZpbGxBY3Rpb24gewogICAgIExvYWQzMlBh
eWxvYWQsCiAgICAgTG9hZDMyUGF5bG9hZEJveEludCwKICAgICBMb2FkUHRyLAorICAgIExvYWQ2
NCwKICAgICBMb2FkRG91YmxlLAogICAgIExvYWREb3VibGVCb3hEb3VibGUsCiAgICAgTG9hZEpT
VW5ib3hEb3VibGUKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMTMxNTQzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUs
MjEgKzU1LDIxIEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbEludGVnZXIoTm9kZUkKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChpc051bWJlckNvbnN0YW50KG5vZGVJbmRleCkp
IHsKICAgICAgICAgICAgICAgICBKU1ZhbHVlIGpzVmFsdWUgPSBqc051bWJlcih2YWx1ZU9mTnVt
YmVyQ29uc3RhbnQobm9kZUluZGV4KSk7Ci0gICAgICAgICAgICAgICAgbV9qaXQubW92ZShNYWNy
b0Fzc2VtYmxlcjo6SW1tUHRyKEpTVmFsdWU6OmVuY29kZShqc1ZhbHVlKSksIGdwcik7CisgICAg
ICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6SW1tNjQoSlNWYWx1ZTo6ZW5j
b2RlKGpzVmFsdWUpKSwgZ3ByKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAg
ICAgQVNTRVJUKGlzSlNDb25zdGFudChub2RlSW5kZXgpKTsKICAgICAgICAgICAgICAgICBKU1Zh
bHVlIGpzVmFsdWUgPSB2YWx1ZU9mSlNDb25zdGFudChub2RlSW5kZXgpOwotICAgICAgICAgICAg
ICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoSlNWYWx1ZTo6ZW5j
b2RlKGpzVmFsdWUpKSwgZ3ByKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzVmFsdWUpKSwgZ3ByKTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIGlmIChpbmZvLnNwaWxsRm9ybWF0KCkgPT0gRGF0
YUZvcm1hdEludGVnZXIpIHsKICAgICAgICAgICAgIG1fZ3Bycy5yZXRhaW4oZ3ByLCB2aXJ0dWFs
UmVnaXN0ZXIsIFNwaWxsT3JkZXJTcGlsbGVkKTsKICAgICAgICAgICAgIG1faml0LmxvYWQzMihK
SVRDb21waWxlcjo6cGF5bG9hZEZvcih2aXJ0dWFsUmVnaXN0ZXIpLCBncHIpOwogICAgICAgICAg
ICAgLy8gVGFnIGl0LCBzaW5jZSBmaWxsSW50ZWdlcigpIGlzIHVzZWQgd2hlbiB3ZSB3YW50IGEg
Ym94ZWQgaW50ZWdlci4KLSAgICAgICAgICAgIG1faml0Lm9yUHRyKEdQUkluZm86OnRhZ1R5cGVO
dW1iZXJSZWdpc3RlciwgZ3ByKTsKKyAgICAgICAgICAgIG1faml0Lm9yNjQoR1BSSW5mbzo6dGFn
VHlwZU51bWJlclJlZ2lzdGVyLCBncHIpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAg
QVNTRVJUKGluZm8uc3BpbGxGb3JtYXQoKSA9PSBEYXRhRm9ybWF0SlMgfHwgaW5mby5zcGlsbEZv
cm1hdCgpID09IERhdGFGb3JtYXRKU0ludGVnZXIpOwogICAgICAgICAgICAgbV9ncHJzLnJldGFp
bihncHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlclNwaWxsZWQpOwotICAgICAgICAgICAg
bV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBn
cHIpOworICAgICAgICAgICAgbV9qaXQubG9hZDY0KEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZp
cnR1YWxSZWdpc3RlciksIGdwcik7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBTaW5jZSB3ZSBz
dGF0aWNhbGx5IGtub3cgdGhhdCB3ZSdyZSBmaWxsaW5nIGFuIGludGVnZXIsIGFuZCB2YWx1ZXMK
QEAgLTEzMyw4ICsxMzMsOCBAQCBGUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxEb3VibGUoTm9k
ZUluCiAgICAgICAgICAgICAgICAgdW5sb2NrKGdwcik7CiAgICAgICAgICAgICB9IGVsc2UgaWYg
KGlzTnVtYmVyQ29uc3RhbnQobm9kZUluZGV4KSkgewogICAgICAgICAgICAgICAgIEZQUlJlZyBm
cHIgPSBmcHJBbGxvY2F0ZSgpOwotICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3Nl
bWJsZXI6OkltbVB0cihyZWludGVycHJldF9jYXN0PHZvaWQqPihyZWludGVycHJldERvdWJsZVRv
SW50cHRyKHZhbHVlT2ZOdW1iZXJDb25zdGFudChub2RlSW5kZXgpKSkpLCBncHIpOwotICAgICAg
ICAgICAgICAgIG1faml0Lm1vdmVQdHJUb0RvdWJsZShncHIsIGZwcik7CisgICAgICAgICAgICAg
ICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6SW1tNjQocmVpbnRlcnByZXREb3VibGVUb0lu
dDY0KHZhbHVlT2ZOdW1iZXJDb25zdGFudChub2RlSW5kZXgpKSksIGdwcik7CisgICAgICAgICAg
ICAgICAgbV9qaXQubW92ZTY0VG9Eb3VibGUoZ3ByLCBmcHIpOwogICAgICAgICAgICAgICAgIHVu
bG9jayhncHIpOwogCiAgICAgICAgICAgICAgICAgbV9mcHJzLnJldGFpbihmcHIsIHZpcnR1YWxS
ZWdpc3RlciwgU3BpbGxPcmRlckRvdWJsZSk7CkBAIC0xNDQsNyArMTQ0LDcgQEAgRlBSUmVnIFNw
ZWN1bGF0aXZlSklUOjpmaWxsRG91YmxlKE5vZGVJbgogICAgICAgICAgICAgICAgIC8vIEZJWE1F
OiBzaG91bGQgbm90IGJlIHJlYWNoYWJsZT8KICAgICAgICAgICAgICAgICBBU1NFUlQoaXNKU0Nv
bnN0YW50KG5vZGVJbmRleCkpOwogICAgICAgICAgICAgICAgIEpTVmFsdWUganNWYWx1ZSA9IHZh
bHVlT2ZKU0NvbnN0YW50KG5vZGVJbmRleCk7Ci0gICAgICAgICAgICAgICAgbV9qaXQubW92ZShN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihKU1ZhbHVlOjplbmNvZGUoanNWYWx1ZSkpLCBn
cHIpOworICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW02NChKU1ZhbHVlOjplbmNvZGUoanNWYWx1ZSkpLCBncHIpOwogICAgICAgICAgICAgICAgIG1f
Z3Bycy5yZXRhaW4oZ3ByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJDb25zdGFudCk7CiAg
ICAgICAgICAgICAgICAgaW5mby5maWxsSlNWYWx1ZSgqbV9zdHJlYW0sIGdwciwgRGF0YUZvcm1h
dEpTKTsKICAgICAgICAgICAgICAgICB1bmxvY2soZ3ByKTsKQEAgLTE3NSw3ICsxNzUsNyBAQCBG
UFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxEb3VibGUoTm9kZUluCiAgICAgICAgIAogICAgICAg
ICAgICAgICAgIEFTU0VSVChzcGlsbEZvcm1hdCAmIERhdGFGb3JtYXRKUyk7CiAgICAgICAgICAg
ICAgICAgbV9ncHJzLnJldGFpbihncHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlclNwaWxs
ZWQpOwotICAgICAgICAgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OmFkZHJlc3NG
b3IodmlydHVhbFJlZ2lzdGVyKSwgZ3ByKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5sb2FkNjQo
SklUQ29tcGlsZXI6OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSwgZ3ByKTsKICAgICAgICAg
ICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKCptX3N0cmVhbSwgZ3ByLCBzcGlsbEZvcm1hdCk7CiAg
ICAgICAgICAgICAgICAgdW5sb2NrKGdwcik7CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0y
MDAsNyArMjAwLDcgQEAgRlBSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsRG91YmxlKE5vZGVJbgog
ICAgICAgICBGUFJSZWcgZnByID0gZnByQWxsb2NhdGUoKTsKICAgICAgICAgR1BSUmVnIHRlbXBH
cHIgPSBhbGxvY2F0ZSgpOyAvLyBGSVhNRTogY2FuIHdlIHNraXAgdGhpcyBhbGxvY2F0aW9uIG9u
IHRoZSBsYXN0IHVzZSBvZiB0aGUgdmlydHVhbCByZWdpc3Rlcj8KIAotICAgICAgICBKSVRDb21w
aWxlcjo6SnVtcCBpc0ludGVnZXIgPSBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkFi
b3ZlT3JFcXVhbCwganNWYWx1ZUdwciwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsK
KyAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNJbnRlZ2VyID0gbV9qaXQuYnJhbmNoNjQoTWFj
cm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwganNWYWx1ZUdwciwgR1BSSW5mbzo6dGFnVHlwZU51
bWJlclJlZ2lzdGVyKTsKIAogICAgICAgICBtX2ppdC5qaXRBc3NlcnRJc0pTRG91YmxlKGpzVmFs
dWVHcHIpOwogCkBAIC0yNzksMTUgKzI3OSwxNSBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZp
bGxKU1ZhbHVlKE5vZGVJCiAgICAgICAgICAgICBpZiAoaXNJbnQzMkNvbnN0YW50KG5vZGVJbmRl
eCkpIHsKICAgICAgICAgICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKCptX3N0cmVhbSwgZ3ByLCBE
YXRhRm9ybWF0SlNJbnRlZ2VyKTsKICAgICAgICAgICAgICAgICBKU1ZhbHVlIGpzVmFsdWUgPSBq
c051bWJlcih2YWx1ZU9mSW50MzJDb25zdGFudChub2RlSW5kZXgpKTsKLSAgICAgICAgICAgICAg
ICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKGpzVmFs
dWUpKSwgZ3ByKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpJ
bW02NChKU1ZhbHVlOjplbmNvZGUoanNWYWx1ZSkpLCBncHIpOwogICAgICAgICAgICAgfSBlbHNl
IGlmIChpc051bWJlckNvbnN0YW50KG5vZGVJbmRleCkpIHsKICAgICAgICAgICAgICAgICBpbmZv
LmZpbGxKU1ZhbHVlKCptX3N0cmVhbSwgZ3ByLCBEYXRhRm9ybWF0SlNEb3VibGUpOwogICAgICAg
ICAgICAgICAgIEpTVmFsdWUganNWYWx1ZShKU1ZhbHVlOjpFbmNvZGVBc0RvdWJsZSwgdmFsdWVP
Zk51bWJlckNvbnN0YW50KG5vZGVJbmRleCkpOwotICAgICAgICAgICAgICAgIG1faml0Lm1vdmUo
TWFjcm9Bc3NlbWJsZXI6OkltbVB0cihKU1ZhbHVlOjplbmNvZGUoanNWYWx1ZSkpLCBncHIpOwor
ICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OkltbTY0KEpTVmFsdWU6
OmVuY29kZShqc1ZhbHVlKSksIGdwcik7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAg
ICAgICAgIEFTU0VSVChpc0pTQ29uc3RhbnQobm9kZUluZGV4KSk7CiAgICAgICAgICAgICAgICAg
SlNWYWx1ZSBqc1ZhbHVlID0gdmFsdWVPZkpTQ29uc3RhbnQobm9kZUluZGV4KTsKLSAgICAgICAg
ICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKEpTVmFsdWU6
OmVuY29kZShqc1ZhbHVlKSksIGdwcik7CisgICAgICAgICAgICAgICAgbV9qaXQubW92ZShNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc1ZhbHVlKSksIGdwcik7
CiAgICAgICAgICAgICAgICAgaW5mby5maWxsSlNWYWx1ZSgqbV9zdHJlYW0sIGdwciwgRGF0YUZv
cm1hdEpTKTsKICAgICAgICAgICAgIH0KIApAQCAtMjk3LDEzICsyOTcsMTMgQEAgR1BSUmVnIFNw
ZWN1bGF0aXZlSklUOjpmaWxsSlNWYWx1ZShOb2RlSQogICAgICAgICAgICAgbV9ncHJzLnJldGFp
bihncHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlclNwaWxsZWQpOwogICAgICAgICAgICAg
aWYgKHNwaWxsRm9ybWF0ID09IERhdGFGb3JtYXRJbnRlZ2VyKSB7CiAgICAgICAgICAgICAgICAg
bV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIGdw
cik7Ci0gICAgICAgICAgICAgICAgbV9qaXQub3JQdHIoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJl
Z2lzdGVyLCBncHIpOworICAgICAgICAgICAgICAgIG1faml0Lm9yNjQoR1BSSW5mbzo6dGFnVHlw
ZU51bWJlclJlZ2lzdGVyLCBncHIpOwogICAgICAgICAgICAgICAgIHNwaWxsRm9ybWF0ID0gRGF0
YUZvcm1hdEpTSW50ZWdlcjsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
bV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBn
cHIpOworICAgICAgICAgICAgICAgIG1faml0LmxvYWQ2NChKSVRDb21waWxlcjo6YWRkcmVzc0Zv
cih2aXJ0dWFsUmVnaXN0ZXIpLCBncHIpOwogICAgICAgICAgICAgICAgIGlmIChzcGlsbEZvcm1h
dCA9PSBEYXRhRm9ybWF0RG91YmxlKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIE5lZWQgdG8g
Ym94IHRoZSBkb3VibGUsIHNpbmNlIHdlIHdhbnQgYSBKU1ZhbHVlLgotICAgICAgICAgICAgICAg
ICAgICBtX2ppdC5zdWJQdHIoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBncHIpOwor
ICAgICAgICAgICAgICAgICAgICBtX2ppdC5zdWI2NChHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVn
aXN0ZXIsIGdwcik7CiAgICAgICAgICAgICAgICAgICAgIHNwaWxsRm9ybWF0ID0gRGF0YUZvcm1h
dEpTRG91YmxlOwogICAgICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgICAgICBB
U1NFUlQoc3BpbGxGb3JtYXQgJiBEYXRhRm9ybWF0SlMpOwpAQCAtMzE5LDExICszMTksMTEgQEAg
R1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsSlNWYWx1ZShOb2RlSQogICAgICAgICAvLyBJZiBu
b3QsIHdlJ2xsIHplcm8gZXh0ZW5kIGluIHBsYWNlLCBzbyBtYXJrIG9uIHRoZSBpbmZvIHRoYXQg
dGhpcyBpcyBub3cgdHlwZSBEYXRhRm9ybWF0SW50ZWdlciwgbm90IERhdGFGb3JtYXRKU0ludGVn
ZXIuCiAgICAgICAgIGlmIChtX2dwcnMuaXNMb2NrZWQoZ3ByKSkgewogICAgICAgICAgICAgR1BS
UmVnIHJlc3VsdCA9IGFsbG9jYXRlKCk7Ci0gICAgICAgICAgICBtX2ppdC5vclB0cihHUFJJbmZv
Ojp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIGdwciwgcmVzdWx0KTsKKyAgICAgICAgICAgIG1faml0
Lm9yNjQoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBncHIsIHJlc3VsdCk7CiAgICAg
ICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICB9CiAgICAgICAgIG1fZ3Bycy5sb2NrKGdw
cik7Ci0gICAgICAgIG1faml0Lm9yUHRyKEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlciwg
Z3ByKTsKKyAgICAgICAgbV9qaXQub3I2NChHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIs
IGdwcik7CiAgICAgICAgIGluZm8uZmlsbEpTVmFsdWUoKm1fc3RyZWFtLCBncHIsIERhdGFGb3Jt
YXRKU0ludGVnZXIpOwogICAgICAgICByZXR1cm4gZ3ByOwogICAgIH0KQEAgLTQwOCw4ICs0MDgs
OCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVZhbHVlCiAgICAgR1BSUmVn
IGdwciA9IHJlc3VsdC5ncHIoKTsKICAgICBvcDEudXNlKCk7CiAKLSAgICBKSVRDb21waWxlcjo6
SnVtcCBpc0ludGVnZXIgPSBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JF
cXVhbCwganNWYWx1ZUdwciwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKLSAgICBK
SVRDb21waWxlcjo6SnVtcCBub25OdW1lcmljID0gbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fz
c2VtYmxlcjo6WmVybywganNWYWx1ZUdwciwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVy
KTsKKyAgICBKSVRDb21waWxlcjo6SnVtcCBpc0ludGVnZXIgPSBtX2ppdC5icmFuY2g2NChNYWNy
b0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBqc1ZhbHVlR3ByLCBHUFJJbmZvOjp0YWdUeXBlTnVt
YmVyUmVnaXN0ZXIpOworICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vbk51bWVyaWMgPSBtX2ppdC5i
cmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIGpzVmFsdWVHcHIsIEdQUkluZm86OnRh
Z1R5cGVOdW1iZXJSZWdpc3Rlcik7CiAKICAgICAvLyBGaXJzdCwgaWYgd2UgZ2V0IGhlcmUgd2Ug
aGF2ZSBhIGRvdWJsZSBlbmNvZGVkIGFzIGEgSlNWYWx1ZQogICAgIG1faml0Lm1vdmUoanNWYWx1
ZUdwciwgZ3ByKTsKQEAgLTQxNyw3ICs0MTcsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25T
cGVjdWxhdGl2ZVZhbHVlCiAKICAgICAvLyBGaW5hbGx5LCBoYW5kbGUgaW50ZWdlcnMuCiAgICAg
aXNJbnRlZ2VyLmxpbmsoJm1faml0KTsKLSAgICBtX2ppdC5vclB0cihHUFJJbmZvOjp0YWdUeXBl
TnVtYmVyUmVnaXN0ZXIsIGpzVmFsdWVHcHIsIGdwcik7CisgICAgbV9qaXQub3I2NChHUFJJbmZv
Ojp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIGpzVmFsdWVHcHIsIGdwcik7CiAgICAgaGFzVW5ib3hl
ZERvdWJsZS5saW5rKCZtX2ppdCk7CiAgICAgCiAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoYWRv
cHRQdHIobmV3IFZhbHVlVG9OdW1iZXJTbG93UGF0aEdlbmVyYXRvcihub25OdW1lcmljLCB0aGlz
LCBncHIsIGpzVmFsdWVHcHIpKSk7CkBAIC00NTksNyArNDU5LDcgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6bm9uU3BlY3VsYXRpdmVWYWx1ZQogICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQu
Z3ByKCk7CiAgICAgb3AxLnVzZSgpOwogCi0gICAgSklUQ29tcGlsZXI6Okp1bXAgaXNOb3RJbnRl
Z2VyID0gbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpCZWxvdywganNWYWx1ZUdwciwg
R1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKKyAgICBKSVRDb21waWxlcjo6SnVtcCBp
c05vdEludGVnZXIgPSBtX2ppdC5icmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIGpzVmFs
dWVHcHIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7CiAKICAgICBtX2ppdC56ZXJv
RXh0ZW5kMzJUb1B0cihqc1ZhbHVlR3ByLCByZXN1bHRHUFIpOwogICAgIApAQCAtNDg2LDcgKzQ4
Niw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlVUludDMKICAgICAKICAg
ICBwb3NpdGl2ZS5saW5rKCZtX2ppdCk7CiAgICAgCi0gICAgbV9qaXQub3JQdHIoR1BSSW5mbzo6
dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBvcDEuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CisgICAgbV9q
aXQub3I2NChHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIG9wMS5ncHIoKSwgcmVzdWx0
LmdwcigpKTsKICAgICAKICAgICBkb25lLmxpbmsoJm1faml0KTsKICAgICAKQEAgLTUwMCw3ICs1
MDAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjYWNoZWRHZXRCeUlkKENvZGVPCiAgICAgCiAg
ICAgSklUQ29tcGlsZXI6OkNvbnZlcnRpYmxlTG9hZExhYmVsIHByb3BlcnR5U3RvcmFnZUxvYWQg
PQogICAgICAgICBtX2ppdC5jb252ZXJ0aWJsZUxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3Mo
YmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVzdWx0R1BSKTsKLSAgICBK
SVRDb21waWxlcjo6RGF0YUxhYmVsQ29tcGFjdCBsb2FkV2l0aFBhdGNoID0gbV9qaXQubG9hZFB0
cldpdGhDb21wYWN0QWRkcmVzc09mZnNldFBhdGNoKEpJVENvbXBpbGVyOjpBZGRyZXNzKHJlc3Vs
dEdQUiwgMCksIHJlc3VsdEdQUik7CisgICAgSklUQ29tcGlsZXI6OkRhdGFMYWJlbENvbXBhY3Qg
bG9hZFdpdGhQYXRjaCA9IG1faml0LmxvYWQ2NFdpdGhDb21wYWN0QWRkcmVzc09mZnNldFBhdGNo
KEpJVENvbXBpbGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgMCksIHJlc3VsdEdQUik7CiAgICAgCiAg
ICAgSklUQ29tcGlsZXI6OkxhYmVsIGRvbmVMYWJlbCA9IG1faml0LmxhYmVsKCk7CiAKQEAgLTUz
Niw3ICs1MzYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjYWNoZWRQdXRCeUlkKENvZGVPCiAK
ICAgICBKSVRDb21waWxlcjo6Q29udmVydGlibGVMb2FkTGFiZWwgcHJvcGVydHlTdG9yYWdlTG9h
ZCA9CiAgICAgICAgIG1faml0LmNvbnZlcnRpYmxlTG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVz
cyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKLSAg
ICBKSVRDb21waWxlcjo6RGF0YUxhYmVsMzIgc3RvcmVXaXRoUGF0Y2ggPSBtX2ppdC5zdG9yZVB0
cldpdGhBZGRyZXNzT2Zmc2V0UGF0Y2godmFsdWVHUFIsIEpJVENvbXBpbGVyOjpBZGRyZXNzKHNj
cmF0Y2hHUFIsIDApKTsKKyAgICBKSVRDb21waWxlcjo6RGF0YUxhYmVsMzIgc3RvcmVXaXRoUGF0
Y2ggPSBtX2ppdC5zdG9yZTY0V2l0aEFkZHJlc3NPZmZzZXRQYXRjaCh2YWx1ZUdQUiwgSklUQ29t
cGlsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgMCkpOwogCiAgICAgSklUQ29tcGlsZXI6OkxhYmVs
IGRvbmVMYWJlbCA9IG1faml0LmxhYmVsKCk7CiAgICAgCkBAIC01ODgsNyArNTg4LDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVOb25QZQogICAgIEpJVENvbXBpbGVyOjpK
dW1wIG5vdENlbGw7CiAgICAgCiAgICAgaWYgKCFpc0tub3duQ2VsbChvcGVyYW5kLmluZGV4KCkp
KQotICAgICAgICBub3RDZWxsID0gbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6
Tm9uWmVybywgYXJnR1BSLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpOworICAgICAgICBub3RD
ZWxsID0gbV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBhcmdHUFIs
IEdQUkluZm86OnRhZ01hc2tSZWdpc3Rlcik7CiAgICAKICAgICBKSVRDb21waWxlcjo6SnVtcCBu
b3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkOwogICAgIGlmIChtX2ppdC5ncmFwaCgpLmdsb2JhbE9i
amVjdEZvcihtX2ppdC5ncmFwaCgpW29wZXJhbmRdLmNvZGVPcmlnaW4pLT5tYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkV2F0Y2hwb2ludCgpLT5pc1N0aWxsVmFsaWQoKSkgewpAQCAtNjE4LDggKzYxOCw4
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlTm9uUGUKICAgICAgICAgbm90
Q2VsbC5saW5rKCZtX2ppdCk7CiAgICAgICAgIAogICAgICAgICBtX2ppdC5tb3ZlKGFyZ0dQUiwg
cmVzdWx0R1BSKTsKLSAgICAgICAgbV9qaXQuYW5kUHRyKEpJVENvbXBpbGVyOjpUcnVzdGVkSW1t
MzIoflRhZ0JpdFVuZGVmaW5lZCksIHJlc3VsdEdQUik7Ci0gICAgICAgIG1faml0LmNvbXBhcmVQ
dHIoaW52ZXJ0ID8gSklUQ29tcGlsZXI6Ok5vdEVxdWFsIDogSklUQ29tcGlsZXI6OkVxdWFsLCBy
ZXN1bHRHUFIsIEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tMzIoVmFsdWVOdWxsKSwgcmVzdWx0R1BS
KTsKKyAgICAgICAgbV9qaXQuYW5kNjQoSklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMih+VGFnQml0
VW5kZWZpbmVkKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgbV9qaXQuY29tcGFyZTY0KGludmVydCA/
IEpJVENvbXBpbGVyOjpOb3RFcXVhbCA6IEpJVENvbXBpbGVyOjpFcXVhbCwgcmVzdWx0R1BSLCBK
SVRDb21waWxlcjo6VHJ1c3RlZEltbTMyKFZhbHVlTnVsbCksIHJlc3VsdEdQUik7CiAgICAgICAg
IAogICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKICAgICB9CkBAIC02NTIsNyArNjUyLDcgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVQZWVwaAogICAgIEpJVENvbXBpbGVy
OjpKdW1wIG5vdENlbGw7CiAgICAgCiAgICAgaWYgKCFpc0tub3duQ2VsbChvcGVyYW5kLmluZGV4
KCkpKQotICAgICAgICBub3RDZWxsID0gbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxl
cjo6Tm9uWmVybywgYXJnR1BSLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpOworICAgICAgICBu
b3RDZWxsID0gbV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBhcmdH
UFIsIEdQUkluZm86OnRhZ01hc2tSZWdpc3Rlcik7CiAgICAgCiAgICAgaWYgKG1faml0LmdyYXBo
KCkuZ2xvYmFsT2JqZWN0Rm9yKG1faml0LmdyYXBoKClbb3BlcmFuZF0uY29kZU9yaWdpbiktPm1h
c3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCktPmlzU3RpbGxWYWxpZCgpKSB7CiAgICAg
ICAgIG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG1faml0LmdyYXBoKClbb3BlcmFuZF0u
Y29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCktPmFkZChzcGVj
dWxhdGlvbldhdGNocG9pbnQoKSk7CkBAIC02NzYsOCArNjc2LDggQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6bm9uU3BlY3VsYXRpdmVQZWVwaAogICAgICAgICBub3RDZWxsLmxpbmsoJm1faml0KTsK
ICAgICAgICAgCiAgICAgICAgIG1faml0Lm1vdmUoYXJnR1BSLCByZXN1bHRHUFIpOwotICAgICAg
ICBtX2ppdC5hbmRQdHIoSklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMih+VGFnQml0VW5kZWZpbmVk
KSwgcmVzdWx0R1BSKTsKLSAgICAgICAgYnJhbmNoUHRyKGludmVydCA/IEpJVENvbXBpbGVyOjpO
b3RFcXVhbCA6IEpJVENvbXBpbGVyOjpFcXVhbCwgcmVzdWx0R1BSLCBKSVRDb21waWxlcjo6VHJ1
c3RlZEltbVB0cihyZWludGVycHJldF9jYXN0PHZvaWQqPihWYWx1ZU51bGwpKSwgdGFrZW4pOwor
ICAgICAgICBtX2ppdC5hbmQ2NChKSVRDb21waWxlcjo6VHJ1c3RlZEltbTMyKH5UYWdCaXRVbmRl
ZmluZWQpLCByZXN1bHRHUFIpOworICAgICAgICBicmFuY2g2NChpbnZlcnQgPyBKSVRDb21waWxl
cjo6Tm90RXF1YWwgOiBKSVRDb21waWxlcjo6RXF1YWwsIHJlc3VsdEdQUiwgSklUQ29tcGlsZXI6
OlRydXN0ZWRJbW02NChWYWx1ZU51bGwpLCB0YWtlbik7CiAgICAgfQogICAgIAogICAgIGp1bXAo
bm90VGFrZW4pOwpAQCAtNzUwLDkgKzc1MCw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNw
ZWN1bGF0aXZlUGVlcGgKICAgICAgICAgYXJnMi51c2UoKTsKICAgICAKICAgICAgICAgaWYgKCFp
c0tub3duSW50ZWdlcihub2RlLmNoaWxkMSgpLmluZGV4KCkpKQotICAgICAgICAgICAgc2xvd1Bh
dGguYXBwZW5kKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIGFyZzFHUFIs
IEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlcikpOworICAgICAgICAgICAgc2xvd1BhdGgu
YXBwZW5kKG1faml0LmJyYW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgYXJnMUdQUiwgR1BS
SW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSk7CiAgICAgICAgIGlmICghaXNLbm93bkludGVn
ZXIobm9kZS5jaGlsZDIoKS5pbmRleCgpKSkKLSAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZCht
X2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBhcmcyR1BSLCBHUFJJbmZvOjp0
YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsKKyAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChtX2pp
dC5icmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIGFyZzJHUFIsIEdQUkluZm86OnRhZ1R5
cGVOdW1iZXJSZWdpc3RlcikpOwogICAgIAogICAgICAgICBicmFuY2gzMihjb25kLCBhcmcxR1BS
LCBhcmcyR1BSLCB0YWtlbik7CiAgICAgCkBAIC04MzMsOSArODMzLDkgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVOb25QZQogICAgICAgICBhcmcyLnVzZSgpOwogICAgIAog
ICAgICAgICBpZiAoIWlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQxKCkuaW5kZXgoKSkpCi0gICAg
ICAgICAgICBzbG93UGF0aC5hcHBlbmQobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpC
ZWxvdywgYXJnMUdQUiwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSk7CisgICAgICAg
ICAgICBzbG93UGF0aC5hcHBlbmQobV9qaXQuYnJhbmNoNjQoTWFjcm9Bc3NlbWJsZXI6OkJlbG93
LCBhcmcxR1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsKICAgICAgICAgaWYg
KCFpc0tub3duSW50ZWdlcihub2RlLmNoaWxkMigpLmluZGV4KCkpKQotICAgICAgICAgICAgc2xv
d1BhdGguYXBwZW5kKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIGFyZzJH
UFIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlcikpOworICAgICAgICAgICAgc2xvd1Bh
dGguYXBwZW5kKG1faml0LmJyYW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgYXJnMkdQUiwg
R1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSk7CiAgICAgCiAgICAgICAgIG1faml0LmNv
bXBhcmUzMihjb25kLCBhcmcxR1BSLCBhcmcyR1BSLCByZXN1bHRHUFIpOwogICAgICAgICBtX2pp
dC5vcjMyKFRydXN0ZWRJbW0zMihWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKQEAgLTg3OSw3ICs4
NzksNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVBlZXBoCiAgICAgaWYg
KGlzS25vd25DZWxsKG5vZGUuY2hpbGQxKCkuaW5kZXgoKSkgJiYgaXNLbm93bkNlbGwobm9kZS5j
aGlsZDIoKS5pbmRleCgpKSkgewogICAgICAgICAvLyBzZWUgaWYgd2UgZ2V0IGx1Y2t5OiBpZiB0
aGUgYXJndW1lbnRzIGFyZSBjZWxscyBhbmQgdGhleSByZWZlcmVuY2UgdGhlIHNhbWUKICAgICAg
ICAgLy8gY2VsbCwgdGhlbiB0aGV5IG11c3QgYmUgc3RyaWN0bHkgZXF1YWwuCi0gICAgICAgIGJy
YW5jaFB0cihKSVRDb21waWxlcjo6RXF1YWwsIGFyZzFHUFIsIGFyZzJHUFIsIGludmVydCA/IG5v
dFRha2VuIDogdGFrZW4pOworICAgICAgICBicmFuY2g2NChKSVRDb21waWxlcjo6RXF1YWwsIGFy
ZzFHUFIsIGFyZzJHUFIsIGludmVydCA/IG5vdFRha2VuIDogdGFrZW4pOwogICAgICAgICAKICAg
ICAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMocmVzdWx0R1BSKTsKICAgICAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXFDZWxsLCByZXN1bHRHUFIsIGFyZzFHUFIs
IGFyZzJHUFIpOwpAQCAtODg3LDIyICs4ODcsMjIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9u
U3BlY3VsYXRpdmVQZWVwaAogICAgICAgICAKICAgICAgICAgYnJhbmNoVGVzdDMyKGludmVydCA/
IEpJVENvbXBpbGVyOjpaZXJvIDogSklUQ29tcGlsZXI6Ok5vblplcm8sIHJlc3VsdEdQUiwgdGFr
ZW4pOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIG1faml0Lm9yUHRyKGFyZzFHUFIsIGFyZzJHUFIs
IHJlc3VsdEdQUik7CisgICAgICAgIG1faml0Lm9yNjQoYXJnMUdQUiwgYXJnMkdQUiwgcmVzdWx0
R1BSKTsKICAgICAgICAgCi0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIHR3b0NlbGxzQ2FzZSA9
IG1faml0LmJyYW5jaFRlc3RQdHIoSklUQ29tcGlsZXI6Olplcm8sIHJlc3VsdEdQUiwgR1BSSW5m
bzo6dGFnTWFza1JlZ2lzdGVyKTsKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgdHdvQ2VsbHND
YXNlID0gbV9qaXQuYnJhbmNoVGVzdDY0KEpJVENvbXBpbGVyOjpaZXJvLCByZXN1bHRHUFIsIEdQ
UkluZm86OnRhZ01hc2tSZWdpc3Rlcik7CiAgICAgICAgIAotICAgICAgICBKSVRDb21waWxlcjo6
SnVtcCBsZWZ0T0sgPSBtX2ppdC5icmFuY2hQdHIoSklUQ29tcGlsZXI6OkFib3ZlT3JFcXVhbCwg
YXJnMUdQUiwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKLSAgICAgICAgSklUQ29t
cGlsZXI6Okp1bXAgbGVmdERvdWJsZSA9IG1faml0LmJyYW5jaFRlc3RQdHIoSklUQ29tcGlsZXI6
Ok5vblplcm8sIGFyZzFHUFIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7CisgICAg
ICAgIEpJVENvbXBpbGVyOjpKdW1wIGxlZnRPSyA9IG1faml0LmJyYW5jaDY0KEpJVENvbXBpbGVy
OjpBYm92ZU9yRXF1YWwsIGFyZzFHUFIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7
CisgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGxlZnREb3VibGUgPSBtX2ppdC5icmFuY2hUZXN0
NjQoSklUQ29tcGlsZXI6Ok5vblplcm8sIGFyZzFHUFIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJS
ZWdpc3Rlcik7CiAgICAgICAgIGxlZnRPSy5saW5rKCZtX2ppdCk7Ci0gICAgICAgIEpJVENvbXBp
bGVyOjpKdW1wIHJpZ2h0T0sgPSBtX2ppdC5icmFuY2hQdHIoSklUQ29tcGlsZXI6OkFib3ZlT3JF
cXVhbCwgYXJnMkdQUiwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKLSAgICAgICAg
SklUQ29tcGlsZXI6Okp1bXAgcmlnaHREb3VibGUgPSBtX2ppdC5icmFuY2hUZXN0UHRyKEpJVENv
bXBpbGVyOjpOb25aZXJvLCBhcmcyR1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIp
OworICAgICAgICBKSVRDb21waWxlcjo6SnVtcCByaWdodE9LID0gbV9qaXQuYnJhbmNoNjQoSklU
Q29tcGlsZXI6OkFib3ZlT3JFcXVhbCwgYXJnMkdQUiwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJl
Z2lzdGVyKTsKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgcmlnaHREb3VibGUgPSBtX2ppdC5i
cmFuY2hUZXN0NjQoSklUQ29tcGlsZXI6Ok5vblplcm8sIGFyZzJHUFIsIEdQUkluZm86OnRhZ1R5
cGVOdW1iZXJSZWdpc3Rlcik7CiAgICAgICAgIHJpZ2h0T0subGluaygmbV9qaXQpOwogICAgICAg
ICAKLSAgICAgICAgYnJhbmNoUHRyKGludmVydCA/IEpJVENvbXBpbGVyOjpOb3RFcXVhbCA6IEpJ
VENvbXBpbGVyOjpFcXVhbCwgYXJnMUdQUiwgYXJnMkdQUiwgdGFrZW4pOworICAgICAgICBicmFu
Y2g2NChpbnZlcnQgPyBKSVRDb21waWxlcjo6Tm90RXF1YWwgOiBKSVRDb21waWxlcjo6RXF1YWws
IGFyZzFHUFIsIGFyZzJHUFIsIHRha2VuKTsKICAgICAgICAganVtcChub3RUYWtlbiwgRm9yY2VK
dW1wKTsKICAgICAgICAgCiAgICAgICAgIHR3b0NlbGxzQ2FzZS5saW5rKCZtX2ppdCk7Ci0gICAg
ICAgIGJyYW5jaFB0cihKSVRDb21waWxlcjo6RXF1YWwsIGFyZzFHUFIsIGFyZzJHUFIsIGludmVy
dCA/IG5vdFRha2VuIDogdGFrZW4pOworICAgICAgICBicmFuY2g2NChKSVRDb21waWxlcjo6RXF1
YWwsIGFyZzFHUFIsIGFyZzJHUFIsIGludmVydCA/IG5vdFRha2VuIDogdGFrZW4pOwogICAgICAg
ICAKICAgICAgICAgbGVmdERvdWJsZS5saW5rKCZtX2ppdCk7CiAgICAgICAgIHJpZ2h0RG91Ymxl
LmxpbmsoJm1faml0KTsKQEAgLTkzNCw5ICs5MzQsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpu
b25TcGVjdWxhdGl2ZU5vblBlCiAgICAgICAgIC8vIHNlZSBpZiB3ZSBnZXQgbHVja3k6IGlmIHRo
ZSBhcmd1bWVudHMgYXJlIGNlbGxzIGFuZCB0aGV5IHJlZmVyZW5jZSB0aGUgc2FtZQogICAgICAg
ICAvLyBjZWxsLCB0aGVuIHRoZXkgbXVzdCBiZSBzdHJpY3RseSBlcXVhbC4KICAgICAgICAgLy8g
RklYTUU6IHRoaXMgc2hvdWxkIGZsdXNoIHJlZ2lzdGVycyBpbnN0ZWFkIG9mIHNpbGVudCBzcGls
bC9maWxsLgotICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBub3RFcXVhbENhc2UgPSBtX2ppdC5i
cmFuY2hQdHIoSklUQ29tcGlsZXI6Ok5vdEVxdWFsLCBhcmcxR1BSLCBhcmcyR1BSKTsKKyAgICAg
ICAgSklUQ29tcGlsZXI6Okp1bXAgbm90RXF1YWxDYXNlID0gbV9qaXQuYnJhbmNoNjQoSklUQ29t
cGlsZXI6Ok5vdEVxdWFsLCBhcmcxR1BSLCBhcmcyR1BSKTsKICAgICAgICAgCi0gICAgICAgIG1f
aml0Lm1vdmUoSklUQ29tcGlsZXI6OlRydXN0ZWRJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9v
bGVhbighaW52ZXJ0KSkpLCByZXN1bHRHUFIpOworICAgICAgICBtX2ppdC5tb3ZlKEpJVENvbXBp
bGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbighaW52ZXJ0KSkpLCBy
ZXN1bHRHUFIpOwogICAgICAgICAKICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgZG9uZSA9IG1f
aml0Lmp1bXAoKTsKIApAQCAtOTQ2LDMzICs5NDYsMzMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
bm9uU3BlY3VsYXRpdmVOb25QZQogICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBh
cmVTdHJpY3RFcUNlbGwsIHJlc3VsdEdQUiwgYXJnMUdQUiwgYXJnMkdQUik7CiAgICAgICAgIHNp
bGVudEZpbGxBbGxSZWdpc3RlcnMocmVzdWx0R1BSKTsKICAgICAgICAgCi0gICAgICAgIG1faml0
LmFuZFB0cihKSVRDb21waWxlcjo6VHJ1c3RlZEltbTMyKDEpLCByZXN1bHRHUFIpOworICAgICAg
ICBtX2ppdC5hbmQ2NChKSVRDb21waWxlcjo6VHJ1c3RlZEltbTMyKDEpLCByZXN1bHRHUFIpOwog
ICAgICAgICBtX2ppdC5vcjMyKEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tMzIoVmFsdWVGYWxzZSks
IHJlc3VsdEdQUik7CiAgICAgICAgIAogICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKICAgICB9
IGVsc2UgewotICAgICAgICBtX2ppdC5vclB0cihhcmcxR1BSLCBhcmcyR1BSLCByZXN1bHRHUFIp
OworICAgICAgICBtX2ppdC5vcjY0KGFyZzFHUFIsIGFyZzJHUFIsIHJlc3VsdEdQUik7CiAgICAg
ICAgIAogICAgICAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2xvd1BhdGhDYXNlczsKICAgICAg
ICAgCi0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIHR3b0NlbGxzQ2FzZSA9IG1faml0LmJyYW5j
aFRlc3RQdHIoSklUQ29tcGlsZXI6Olplcm8sIHJlc3VsdEdQUiwgR1BSSW5mbzo6dGFnTWFza1Jl
Z2lzdGVyKTsKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgdHdvQ2VsbHNDYXNlID0gbV9qaXQu
YnJhbmNoVGVzdDY0KEpJVENvbXBpbGVyOjpaZXJvLCByZXN1bHRHUFIsIEdQUkluZm86OnRhZ01h
c2tSZWdpc3Rlcik7CiAgICAgICAgIAotICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBsZWZ0T0sg
PSBtX2ppdC5icmFuY2hQdHIoSklUQ29tcGlsZXI6OkFib3ZlT3JFcXVhbCwgYXJnMUdQUiwgR1BS
SW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKLSAgICAgICAgc2xvd1BhdGhDYXNlcy5hcHBl
bmQobV9qaXQuYnJhbmNoVGVzdFB0cihKSVRDb21waWxlcjo6Tm9uWmVybywgYXJnMUdQUiwgR1BS
SW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSk7CisgICAgICAgIEpJVENvbXBpbGVyOjpKdW1w
IGxlZnRPSyA9IG1faml0LmJyYW5jaDY0KEpJVENvbXBpbGVyOjpBYm92ZU9yRXF1YWwsIGFyZzFH
UFIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7CisgICAgICAgIHNsb3dQYXRoQ2Fz
ZXMuYXBwZW5kKG1faml0LmJyYW5jaFRlc3Q2NChKSVRDb21waWxlcjo6Tm9uWmVybywgYXJnMUdQ
UiwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSk7CiAgICAgICAgIGxlZnRPSy5saW5r
KCZtX2ppdCk7Ci0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIHJpZ2h0T0sgPSBtX2ppdC5icmFu
Y2hQdHIoSklUQ29tcGlsZXI6OkFib3ZlT3JFcXVhbCwgYXJnMkdQUiwgR1BSSW5mbzo6dGFnVHlw
ZU51bWJlclJlZ2lzdGVyKTsKLSAgICAgICAgc2xvd1BhdGhDYXNlcy5hcHBlbmQobV9qaXQuYnJh
bmNoVGVzdFB0cihKSVRDb21waWxlcjo6Tm9uWmVybywgYXJnMkdQUiwgR1BSSW5mbzo6dGFnVHlw
ZU51bWJlclJlZ2lzdGVyKSk7CisgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIHJpZ2h0T0sgPSBt
X2ppdC5icmFuY2g2NChKSVRDb21waWxlcjo6QWJvdmVPckVxdWFsLCBhcmcyR1BSLCBHUFJJbmZv
Ojp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOworICAgICAgICBzbG93UGF0aENhc2VzLmFwcGVuZCht
X2ppdC5icmFuY2hUZXN0NjQoSklUQ29tcGlsZXI6Ok5vblplcm8sIGFyZzJHUFIsIEdQUkluZm86
OnRhZ1R5cGVOdW1iZXJSZWdpc3RlcikpOwogICAgICAgICByaWdodE9LLmxpbmsoJm1faml0KTsK
ICAgICAgICAgCi0gICAgICAgIG1faml0LmNvbXBhcmVQdHIoaW52ZXJ0ID8gSklUQ29tcGlsZXI6
Ok5vdEVxdWFsIDogSklUQ29tcGlsZXI6OkVxdWFsLCBhcmcxR1BSLCBhcmcyR1BSLCByZXN1bHRH
UFIpOworICAgICAgICBtX2ppdC5jb21wYXJlNjQoaW52ZXJ0ID8gSklUQ29tcGlsZXI6Ok5vdEVx
dWFsIDogSklUQ29tcGlsZXI6OkVxdWFsLCBhcmcxR1BSLCBhcmcyR1BSLCByZXN1bHRHUFIpOwog
ICAgICAgICBtX2ppdC5vcjMyKEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tMzIoVmFsdWVGYWxzZSks
IHJlc3VsdEdQUik7CiAgICAgICAgIAogICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBkb25lID0g
bV9qaXQuanVtcCgpOwogICAgICAgICAKICAgICAgICAgdHdvQ2VsbHNDYXNlLmxpbmsoJm1faml0
KTsKLSAgICAgICAgc2xvd1BhdGhDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoUHRyKEpJVENvbXBp
bGVyOjpOb3RFcXVhbCwgYXJnMUdQUiwgYXJnMkdQUikpOworICAgICAgICBzbG93UGF0aENhc2Vz
LmFwcGVuZChtX2ppdC5icmFuY2g2NChKSVRDb21waWxlcjo6Tm90RXF1YWwsIGFyZzFHUFIsIGFy
ZzJHUFIpKTsKICAgICAgICAgCi0gICAgICAgIG1faml0Lm1vdmUoSklUQ29tcGlsZXI6OlRydXN0
ZWRJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbighaW52ZXJ0KSkpLCByZXN1bHRHUFIp
OworICAgICAgICBtX2ppdC5tb3ZlKEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6
ZW5jb2RlKGpzQm9vbGVhbighaW52ZXJ0KSkpLCByZXN1bHRHUFIpOwogICAgICAgICAKICAgICAg
ICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCiAgICAgICAgICAgICBhZG9wdFB0cigKQEAgLTEwMDcs
OCArMTAwNyw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUmIG5vZGUKICAg
ICBpbnQgbnVtUGFzc2VkQXJncyA9IG5vZGUubnVtQ2hpbGRyZW4oKSAtIDE7CiAgICAgCiAgICAg
bV9qaXQuc3RvcmUzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKG51bVBhc3NlZEFyZ3Mg
KyBkdW1teVRoaXNBcmd1bWVudCksIGNhbGxGcmFtZVBheWxvYWRTbG90KEpTU3RhY2s6OkFyZ3Vt
ZW50Q291bnQpKTsKLSAgICBtX2ppdC5zdG9yZVB0cihHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rl
ciwgY2FsbEZyYW1lU2xvdChKU1N0YWNrOjpDYWxsZXJGcmFtZSkpOwotICAgIG1faml0LnN0b3Jl
UHRyKGNhbGxlZUdQUiwgY2FsbEZyYW1lU2xvdChKU1N0YWNrOjpDYWxsZWUpKTsKKyAgICBtX2pp
dC5zdG9yZTY0KEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBjYWxsRnJhbWVTbG90KEpTU3Rh
Y2s6OkNhbGxlckZyYW1lKSk7CisgICAgbV9qaXQuc3RvcmU2NChjYWxsZWVHUFIsIGNhbGxGcmFt
ZVNsb3QoSlNTdGFjazo6Q2FsbGVlKSk7CiAgICAgCiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBu
dW1QYXNzZWRBcmdzOyBpKyspIHsKICAgICAgICAgRWRnZSBhcmdFZGdlID0gbV9qaXQuZ3JhcGgo
KS5tX3ZhckFyZ0NoaWxkcmVuW25vZGUuZmlyc3RDaGlsZCgpICsgMSArIGldOwpAQCAtMTAxNiw3
ICsxMDE2LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSYgbm9kZQogICAg
ICAgICBHUFJSZWcgYXJnR1BSID0gYXJnLmdwcigpOwogICAgICAgICB1c2UoYXJnRWRnZSk7CiAg
ICAgICAgIAotICAgICAgICBtX2ppdC5zdG9yZVB0cihhcmdHUFIsIGFyZ3VtZW50U2xvdChpICsg
ZHVtbXlUaGlzQXJndW1lbnQpKTsKKyAgICAgICAgbV9qaXQuc3RvcmU2NChhcmdHUFIsIGFyZ3Vt
ZW50U2xvdChpICsgZHVtbXlUaGlzQXJndW1lbnQpKTsKICAgICB9CiAKICAgICBmbHVzaFJlZ2lz
dGVycygpOwpAQCAtMTAyNSwxNiArMTAyNSwxNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0
Q2FsbChOb2RlJiBub2RlCiAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKIAog
ICAgIEpJVENvbXBpbGVyOjpEYXRhTGFiZWxQdHIgdGFyZ2V0VG9DaGVjazsKLSAgICBKSVRDb21w
aWxlcjo6SnVtcCBzbG93UGF0aDsKKyAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2xvd1BhdGg7
CiAKICAgICBDYWxsQmVnaW5Ub2tlbiB0b2tlbjsKICAgICBtX2ppdC5iZWdpbkNhbGwobm9kZS5j
b2RlT3JpZ2luLCB0b2tlbik7CiAgICAgCiAgICAgbV9qaXQuYWRkUHRyKFRydXN0ZWRJbW0zMiht
X2ppdC5jb2RlQmxvY2soKS0+bV9udW1DYWxsZWVSZWdpc3RlcnMgKiBzaXplb2YoUmVnaXN0ZXIp
KSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOwogICAgIAotICAgIHNsb3dQYXRoID0gbV9q
aXQuYnJhbmNoUHRyV2l0aFBhdGNoKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgY2FsbGVlR1BS
LCB0YXJnZXRUb0NoZWNrLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihKU1ZhbHVlOjpl
bmNvZGUoSlNWYWx1ZSgpKSkpOworICAgIHNsb3dQYXRoLmFwcGVuZChtX2ppdC5icmFuY2hQdHJX
aXRoUGF0Y2goTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBjYWxsZWVHUFIsIHRhcmdldFRvQ2hl
Y2ssIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKDApKSk7CisKICAgICBtX2ppdC5sb2Fk
UHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGNhbGxlZUdQUiwgT0JKRUNUX09GRlNFVE9GKEpT
RnVuY3Rpb24sIG1fc2NvcGUpKSwgcmVzdWx0R1BSKTsKLSAgICBtX2ppdC5zdG9yZVB0cihyZXN1
bHRHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVy
LCBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihSZWdpc3RlcikpICogSlNTdGFjazo6U2Nv
cGVDaGFpbikpOworICAgIG1faml0LnN0b3JlNjQocmVzdWx0R1BSLCBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwgc3RhdGljX2Nhc3Q8cHRyZGlmZl90
PihzaXplb2YoUmVnaXN0ZXIpKSAqIEpTU3RhY2s6OlNjb3BlQ2hhaW4pKTsKIAogICAgIENvZGVP
cmlnaW4gY29kZU9yaWdpbiA9IGF0KG1fY29tcGlsZUluZGV4KS5jb2RlT3JpZ2luOwogICAgIEpJ
VENvbXBpbGVyOjpDYWxsIGZhc3RDYWxsID0gbV9qaXQubmVhckNhbGwoKTsKQEAgLTExMDQsMTQg
KzExMDUsMTQgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50SQogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgaWYgKHNwaWxsRm9ybWF0ID09IERhdGFGb3JtYXRJbnRl
Z2VyKSB7CiAgICAgICAgICAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjphZGRyZXNz
Rm9yKHZpcnR1YWxSZWdpc3RlciksIGdwcik7Ci0gICAgICAgICAgICAgICAgbV9qaXQub3JQdHIo
R1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBncHIpOworICAgICAgICAgICAgICAgIG1f
aml0Lm9yNjQoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBncHIpOwogICAgICAgICAg
ICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6YWRk
cmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBncHIpOworICAgICAgICAgICAgICAgIG1faml0Lmxv
YWQ2NChKSVRDb21waWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBncHIpOwogICAg
ICAgICAgICAgaW5mby5maWxsSlNWYWx1ZSgqbV9zdHJlYW0sIGdwciwgRGF0YUZvcm1hdEpTSW50
ZWdlcik7CiAgICAgICAgICAgICByZXR1cm5Gb3JtYXQgPSBEYXRhRm9ybWF0SlNJbnRlZ2VyOwog
ICAgICAgICAgICAgcmV0dXJuIGdwcjsKICAgICAgICAgfQotICAgICAgICBtX2ppdC5sb2FkUHRy
KEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIGdwcik7CisgICAgICAg
IG1faml0LmxvYWQ2NChKSVRDb21waWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBn
cHIpOwogCiAgICAgICAgIC8vIEZpbGwgYXMgSlNWYWx1ZSwgYW5kIGZhbGwgdGhyb3VnaC4KICAg
ICAgICAgaW5mby5maWxsSlNWYWx1ZSgqbV9zdHJlYW0sIGdwciwgRGF0YUZvcm1hdEpTSW50ZWdl
cik7CkBAIC0xMTIzLDcgKzExMjQsNyBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVj
dWxhdGVJbnRJCiAgICAgICAgIEdQUlJlZyBncHIgPSBpbmZvLmdwcigpOwogICAgICAgICBtX2dw
cnMubG9jayhncHIpOwogICAgICAgICBpZiAoIWlzSW50MzJTcGVjdWxhdGlvbih0eXBlKSkKLSAg
ICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3MoZ3ByKSwgbm9k
ZUluZGV4LCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBncHIsIEdQUklu
Zm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlcikpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVj
ayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhncHIpLCBub2RlSW5kZXgsIG1faml0LmJyYW5jaDY0KE1h
Y3JvQXNzZW1ibGVyOjpCZWxvdywgZ3ByLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIp
KTsKICAgICAgICAgaW5mby5maWxsSlNWYWx1ZSgqbV9zdHJlYW0sIGdwciwgRGF0YUZvcm1hdEpT
SW50ZWdlcik7CiAgICAgICAgIC8vIElmICFzdHJpY3Qgd2UncmUgZG9uZSwgcmV0dXJuLgogICAg
ICAgICBpZiAoIXN0cmljdCkgewpAQCAtMTIyMyw4ICsxMjI0LDggQEAgRlBSUmVnIFNwZWN1bGF0
aXZlSklUOjpmaWxsU3BlY3VsYXRlRG91YgogCiAgICAgICAgICAgICBpZiAoaXNJbnQzMkNvbnN0
YW50KG5vZGVJbmRleCkpIHsKICAgICAgICAgICAgICAgICBGUFJSZWcgZnByID0gZnByQWxsb2Nh
dGUoKTsKLSAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpJbW1QdHIo
cmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXREb3VibGVUb0ludHB0cihzdGF0aWNf
Y2FzdDxkb3VibGU+KHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGVJbmRleCkpKSkpLCBncHIpOwot
ICAgICAgICAgICAgICAgIG1faml0Lm1vdmVQdHJUb0RvdWJsZShncHIsIGZwcik7CisgICAgICAg
ICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6SW1tNjQocmVpbnRlcnByZXREb3Vi
bGVUb0ludDY0KHN0YXRpY19jYXN0PGRvdWJsZT4odmFsdWVPZkludDMyQ29uc3RhbnQobm9kZUlu
ZGV4KSkpKSwgZ3ByKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlNjRUb0RvdWJsZShncHIs
IGZwcik7CiAgICAgICAgICAgICAgICAgdW5sb2NrKGdwcik7CiAKICAgICAgICAgICAgICAgICBt
X2ZwcnMucmV0YWluKGZwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyRG91YmxlKTsKQEAg
LTEyMzMsOCArMTIzNCw4IEBAIEZQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZURv
dWIKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChpc051bWJlckNvbnN0YW50KG5vZGVJ
bmRleCkpIHsKICAgICAgICAgICAgICAgICBGUFJSZWcgZnByID0gZnByQWxsb2NhdGUoKTsKLSAg
ICAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpJbW1QdHIocmVpbnRlcnBy
ZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXREb3VibGVUb0ludHB0cih2YWx1ZU9mTnVtYmVyQ29u
c3RhbnQobm9kZUluZGV4KSkpKSwgZ3ByKTsKLSAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlUHRy
VG9Eb3VibGUoZ3ByLCBmcHIpOworICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3Nl
bWJsZXI6OkltbTY0KHJlaW50ZXJwcmV0RG91YmxlVG9JbnQ2NCh2YWx1ZU9mTnVtYmVyQ29uc3Rh
bnQobm9kZUluZGV4KSkpLCBncHIpOworICAgICAgICAgICAgICAgIG1faml0Lm1vdmU2NFRvRG91
YmxlKGdwciwgZnByKTsKICAgICAgICAgICAgICAgICB1bmxvY2soZ3ByKTsKIAogICAgICAgICAg
ICAgICAgIG1fZnBycy5yZXRhaW4oZnByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJEb3Vi
bGUpOwpAQCAtMTI3MCw3ICsxMjcxLDcgQEAgRlBSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3Bl
Y3VsYXRlRG91YgogCiAgICAgICAgICAgICBBU1NFUlQoc3BpbGxGb3JtYXQgJiBEYXRhRm9ybWF0
SlMpOwogICAgICAgICAgICAgbV9ncHJzLnJldGFpbihncHIsIHZpcnR1YWxSZWdpc3RlciwgU3Bp
bGxPcmRlclNwaWxsZWQpOwotICAgICAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6
YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBncHIpOworICAgICAgICAgICAgbV9qaXQubG9h
ZDY0KEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIGdwcik7CiAgICAg
ICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKCptX3N0cmVhbSwgZ3ByLCBzcGlsbEZvcm1hdCk7CiAg
ICAgICAgICAgICB1bmxvY2soZ3ByKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTI5NSwxMCAr
MTI5NiwxMCBAQCBGUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVEb3ViCiAgICAg
ICAgIEZQUlJlZyBmcHIgPSBmcHJBbGxvY2F0ZSgpOwogICAgICAgICBHUFJSZWcgdGVtcEdwciA9
IGFsbG9jYXRlKCk7CiAKLSAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNJbnRlZ2VyID0gbV9q
aXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIGpzVmFsdWVHcHIsIEdQ
UkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7CisgICAgICAgIEpJVENvbXBpbGVyOjpKdW1w
IGlzSW50ZWdlciA9IG1faml0LmJyYW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWws
IGpzVmFsdWVHcHIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7CiAKICAgICAgICAg
aWYgKCFpc051bWJlclNwZWN1bGF0aW9uKHR5cGUpKQotICAgICAgICAgICAgc3BlY3VsYXRpb25D
aGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhqc1ZhbHVlR3ByKSwgbm9kZUluZGV4LCBtX2ppdC5i
cmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBqc1ZhbHVlR3ByLCBHUFJJbmZvOjp0
YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFk
VHlwZSwgSlNWYWx1ZVJlZ3MoanNWYWx1ZUdwciksIG5vZGVJbmRleCwgbV9qaXQuYnJhbmNoVGVz
dDY0KE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBqc1ZhbHVlR3ByLCBHUFJJbmZvOjp0YWdUeXBlTnVt
YmVyUmVnaXN0ZXIpKTsKIAogICAgICAgICAvLyBGaXJzdCwgaWYgd2UgZ2V0IGhlcmUgd2UgaGF2
ZSBhIGRvdWJsZSBlbmNvZGVkIGFzIGEgSlNWYWx1ZQogICAgICAgICBtX2ppdC5tb3ZlKGpzVmFs
dWVHcHIsIHRlbXBHcHIpOwpAQCAtMTM4NCw3ICsxMzg1LDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZl
SklUOjpmaWxsU3BlY3VsYXRlQ2VsbAogICAgICAgICAgICAgSlNWYWx1ZSBqc1ZhbHVlID0gdmFs
dWVPZkpTQ29uc3RhbnQobm9kZUluZGV4KTsKICAgICAgICAgICAgIGlmIChqc1ZhbHVlLmlzQ2Vs
bCgpKSB7CiAgICAgICAgICAgICAgICAgbV9ncHJzLnJldGFpbihncHIsIHZpcnR1YWxSZWdpc3Rl
ciwgU3BpbGxPcmRlckNvbnN0YW50KTsKLSAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGpzVmFsdWUuYXNDZWxsKCkpLCBncHIpOworICAgICAg
ICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVl
OjplbmNvZGUoanNWYWx1ZSkpLCBncHIpOwogICAgICAgICAgICAgICAgIGluZm8uZmlsbEpTVmFs
dWUoKm1fc3RyZWFtLCBncHIsIERhdGFGb3JtYXRKU0NlbGwpOwogICAgICAgICAgICAgICAgIHJl
dHVybiBncHI7CiAgICAgICAgICAgICB9CkBAIC0xMzkzLDExICsxMzk0LDExIEBAIEdQUlJlZyBT
cGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUNlbGwKICAgICAgICAgfQogICAgICAgICBBU1NF
UlQoaW5mby5zcGlsbEZvcm1hdCgpICYgRGF0YUZvcm1hdEpTKTsKICAgICAgICAgbV9ncHJzLnJl
dGFpbihncHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlclNwaWxsZWQpOwotICAgICAgICBt
X2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIGdw
cik7CisgICAgICAgIG1faml0LmxvYWQ2NChKSVRDb21waWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFs
UmVnaXN0ZXIpLCBncHIpOwogCiAgICAgICAgIGluZm8uZmlsbEpTVmFsdWUoKm1fc3RyZWFtLCBn
cHIsIERhdGFGb3JtYXRKUyk7CiAgICAgICAgIGlmICghaXNDZWxsU3BlY3VsYXRpb24odHlwZSkp
Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrV2l0aENvbmRpdGlvbmFsRGlyZWN0aW9uKEJh
ZFR5cGUsIEpTVmFsdWVSZWdzKGdwciksIG5vZGVJbmRleCwgbV9qaXQuYnJhbmNoVGVzdFB0cihN
YWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgZ3ByLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpLCBp
c0ZvcndhcmRTcGVjdWxhdGlvbik7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrV2l0aENv
bmRpdGlvbmFsRGlyZWN0aW9uKEJhZFR5cGUsIEpTVmFsdWVSZWdzKGdwciksIG5vZGVJbmRleCwg
bV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBncHIsIEdQUkluZm86
OnRhZ01hc2tSZWdpc3RlciksIGlzRm9yd2FyZFNwZWN1bGF0aW9uKTsKICAgICAgICAgaW5mby5m
aWxsSlNWYWx1ZSgqbV9zdHJlYW0sIGdwciwgRGF0YUZvcm1hdEpTQ2VsbCk7CiAgICAgICAgIHJl
dHVybiBncHI7CiAgICAgfQpAQCAtMTQxMyw3ICsxNDE0LDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZl
SklUOjpmaWxsU3BlY3VsYXRlQ2VsbAogICAgICAgICBHUFJSZWcgZ3ByID0gaW5mby5ncHIoKTsK
ICAgICAgICAgbV9ncHJzLmxvY2soZ3ByKTsKICAgICAgICAgaWYgKCFpc0NlbGxTcGVjdWxhdGlv
bih0eXBlKSkKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2tXaXRoQ29uZGl0aW9uYWxEaXJl
Y3Rpb24oQmFkVHlwZSwgSlNWYWx1ZVJlZ3MoZ3ByKSwgbm9kZUluZGV4LCBtX2ppdC5icmFuY2hU
ZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBncHIsIEdQUkluZm86OnRhZ01hc2tSZWdp
c3RlciksIGlzRm9yd2FyZFNwZWN1bGF0aW9uKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hl
Y2tXaXRoQ29uZGl0aW9uYWxEaXJlY3Rpb24oQmFkVHlwZSwgSlNWYWx1ZVJlZ3MoZ3ByKSwgbm9k
ZUluZGV4LCBtX2ppdC5icmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIGdwciwg
R1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKSwgaXNGb3J3YXJkU3BlY3VsYXRpb24pOwogICAgICAg
ICBpbmZvLmZpbGxKU1ZhbHVlKCptX3N0cmVhbSwgZ3ByLCBEYXRhRm9ybWF0SlNDZWxsKTsKICAg
ICAgICAgcmV0dXJuIGdwcjsKICAgICB9CkBAIC0xNDYwLDcgKzE0NjEsNyBAQCBHUFJSZWcgU3Bl
Y3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVCb29sCiAgICAgICAgICAgICBKU1ZhbHVlIGpzVmFs
dWUgPSB2YWx1ZU9mSlNDb25zdGFudChub2RlSW5kZXgpOwogICAgICAgICAgICAgaWYgKGpzVmFs
dWUuaXNCb29sZWFuKCkpIHsKICAgICAgICAgICAgICAgICBtX2dwcnMucmV0YWluKGdwciwgdmly
dHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyQ29uc3RhbnQpOwotICAgICAgICAgICAgICAgIG1faml0
Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKGpzVmFs
dWUpKSwgZ3ByKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzVmFsdWUpKSwgZ3ByKTsKICAgICAgICAgICAg
ICAgICBpbmZvLmZpbGxKU1ZhbHVlKCptX3N0cmVhbSwgZ3ByLCBEYXRhRm9ybWF0SlNCb29sZWFu
KTsKICAgICAgICAgICAgICAgICByZXR1cm4gZ3ByOwogICAgICAgICAgICAgfQpAQCAtMTQ2OSwx
MyArMTQ3MCwxMyBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVCb29sCiAg
ICAgICAgIH0KICAgICAgICAgQVNTRVJUKGluZm8uc3BpbGxGb3JtYXQoKSAmIERhdGFGb3JtYXRK
Uyk7CiAgICAgICAgIG1fZ3Bycy5yZXRhaW4oZ3ByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3Jk
ZXJTcGlsbGVkKTsKLSAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6YWRkcmVzc0Zv
cih2aXJ0dWFsUmVnaXN0ZXIpLCBncHIpOworICAgICAgICBtX2ppdC5sb2FkNjQoSklUQ29tcGls
ZXI6OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSwgZ3ByKTsKIAogICAgICAgICBpbmZvLmZp
bGxKU1ZhbHVlKCptX3N0cmVhbSwgZ3ByLCBEYXRhRm9ybWF0SlMpOwogICAgICAgICBpZiAoIWlz
Qm9vbGVhblNwZWN1bGF0aW9uKHR5cGUpKSB7Ci0gICAgICAgICAgICBtX2ppdC54b3JQdHIoVHJ1
c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KFZhbHVlRmFsc2UpKSwgZ3ByKTsKLSAgICAg
ICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3MoZ3ByKSwgbm9kZUlu
ZGV4LCBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBncHIsIFRy
dXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpKSwgU3BlY3VsYXRpb25SZWNvdmVy
eShCb29sZWFuU3BlY3VsYXRpb25DaGVjaywgZ3ByLCBJbnZhbGlkR1BSUmVnKSk7Ci0gICAgICAg
ICAgICBtX2ppdC54b3JQdHIoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KFZhbHVl
RmFsc2UpKSwgZ3ByKTsKKyAgICAgICAgICAgIG1faml0LnhvcjY0KFRydXN0ZWRJbW0zMihzdGF0
aWNfY2FzdDxpbnQzMl90PihWYWx1ZUZhbHNlKSksIGdwcik7CisgICAgICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKGdwciksIG5vZGVJbmRleCwgbV9qaXQuYnJh
bmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBncHIsIFRydXN0ZWRJbW0zMihzdGF0
aWNfY2FzdDxpbnQzMl90Pih+MSkpKSwgU3BlY3VsYXRpb25SZWNvdmVyeShCb29sZWFuU3BlY3Vs
YXRpb25DaGVjaywgZ3ByLCBJbnZhbGlkR1BSUmVnKSk7CisgICAgICAgICAgICBtX2ppdC54b3I2
NChUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oVmFsdWVGYWxzZSkpLCBncHIpOwog
ICAgICAgICB9CiAgICAgICAgIGluZm8uZmlsbEpTVmFsdWUoKm1fc3RyZWFtLCBncHIsIERhdGFG
b3JtYXRKU0Jvb2xlYW4pOwogICAgICAgICByZXR1cm4gZ3ByOwpAQCAtMTQ5Miw5ICsxNDkzLDkg
QEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQm9vbAogICAgICAgICBHUFJS
ZWcgZ3ByID0gaW5mby5ncHIoKTsKICAgICAgICAgbV9ncHJzLmxvY2soZ3ByKTsKICAgICAgICAg
aWYgKCFpc0Jvb2xlYW5TcGVjdWxhdGlvbih0eXBlKSkgewotICAgICAgICAgICAgbV9qaXQueG9y
UHRyKFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90PihWYWx1ZUZhbHNlKSksIGdwcik7
Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKGdwciks
IG5vZGVJbmRleCwgbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywg
Z3ByLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSksIFNwZWN1bGF0aW9u
UmVjb3ZlcnkoQm9vbGVhblNwZWN1bGF0aW9uQ2hlY2ssIGdwciwgSW52YWxpZEdQUlJlZykpOwot
ICAgICAgICAgICAgbV9qaXQueG9yUHRyKFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90
PihWYWx1ZUZhbHNlKSksIGdwcik7CisgICAgICAgICAgICBtX2ppdC54b3I2NChUcnVzdGVkSW1t
MzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oVmFsdWVGYWxzZSkpLCBncHIpOworICAgICAgICAgICAg
c3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhncHIpLCBub2RlSW5kZXgsIG1f
aml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgZ3ByLCBUcnVzdGVkSW1t
MzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSksIFNwZWN1bGF0aW9uUmVjb3ZlcnkoQm9vbGVh
blNwZWN1bGF0aW9uQ2hlY2ssIGdwciwgSW52YWxpZEdQUlJlZykpOworICAgICAgICAgICAgbV9q
aXQueG9yNjQoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KFZhbHVlRmFsc2UpKSwg
Z3ByKTsKICAgICAgICAgfQogICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKCptX3N0cmVhbSwgZ3By
LCBEYXRhRm9ybWF0SlNCb29sZWFuKTsKICAgICAgICAgcmV0dXJuIGdwcjsKQEAgLTE1MjEsOSAr
MTUyMiw5IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUJvb2wKIAogSklU
Q29tcGlsZXI6Okp1bXAgU3BlY3VsYXRpdmVKSVQ6OmNvbnZlcnRUb0RvdWJsZShHUFJSZWcgdmFs
dWUsIEZQUlJlZyByZXN1bHQsIEdQUlJlZyB0bXApCiB7Ci0gICAgSklUQ29tcGlsZXI6Okp1bXAg
aXNJbnRlZ2VyID0gbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWws
IHZhbHVlLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOworICAgIEpJVENvbXBpbGVy
OjpKdW1wIGlzSW50ZWdlciA9IG1faml0LmJyYW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9y
RXF1YWwsIHZhbHVlLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOwogICAgIAotICAg
IEpJVENvbXBpbGVyOjpKdW1wIG5vdE51bWJlciA9IG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9B
c3NlbWJsZXI6Olplcm8sIHZhbHVlLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOwor
ICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdE51bWJlciA9IG1faml0LmJyYW5jaFRlc3Q2NChNYWNy
b0Fzc2VtYmxlcjo6WmVybywgdmFsdWUsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7
CiAgICAgCiAgICAgbV9qaXQubW92ZSh2YWx1ZSwgdG1wKTsKICAgICB1bmJveERvdWJsZSh0bXAs
IHJlc3VsdCk7CkBAIC0xNTkwLDcgKzE1OTEsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlT2JqZWN0RXF1YWxpCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSkpOwogICAgIH0KICAgICAKLSAgICBNYWNyb0Fz
c2VtYmxlcjo6SnVtcCBmYWxzZUNhc2UgPSBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6
Ok5vdEVxdWFsLCBvcDFHUFIsIG9wMkdQUik7CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZmFs
c2VDYXNlID0gbV9qaXQuYnJhbmNoNjQoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBvcDFHUFIs
IG9wMkdQUik7CiAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoVmFsdWVUcnVlKSwgcmVzdWx0
R1BSKTsKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOwogICAg
IGZhbHNlQ2FzZS5saW5rKCZtX2ppdCk7CkBAIC0xNjM4LDcgKzE2MzksNyBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlT2JqZWN0VG9PYmplCiAgICAgLy8gSXQgc2VlbXMgdGhhdCBtb3N0
IG9mIHRoZSB0aW1lIHdoZW4gcHJvZ3JhbXMgZG8gYSA9PSBiIHdoZXJlIGIgbWF5IGJlIGVpdGhl
ciBudWxsL3VuZGVmaW5lZAogICAgIC8vIG9yIGFuIG9iamVjdCwgYiBpcyB1c3VhbGx5IGFuIG9i
amVjdC4gQmFsYW5jZSB0aGUgYnJhbmNoZXMgdG8gbWFrZSB0aGF0IGNhc2UgZmFzdC4KICAgICBN
YWNyb0Fzc2VtYmxlcjo6SnVtcCByaWdodE5vdENlbGwgPQotICAgICAgICBtX2ppdC5icmFuY2hU
ZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBvcDJHUFIsIEdQUkluZm86OnRhZ01hc2tS
ZWdpc3Rlcik7CisgICAgICAgIG1faml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6Tm9u
WmVybywgb3AyR1BSLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpOwogICAgIAogICAgIC8vIFdl
IGtub3cgdGhhdCB3aXRoaW4gdGhpcyBicmFuY2gsIHJpZ2h0Q2hpbGQgbXVzdCBiZSBhIGNlbGwu
IAogICAgIGlmIChtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihsZWZ0Tm9kZS5jb2RlT3Jp
Z2luKS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnQoKS0+aXNTdGlsbFZhbGlkKCkp
IHsgCkBAIC0xNjY4LDcgKzE2NjksNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2Jq
ZWN0VG9PYmplCiAgICAgLy8gQXQgdGhpcyBwb2ludCB3ZSBrbm93IHRoYXQgd2UgY2FuIHBlcmZv
cm0gYSBzdHJhaWdodC1mb3J3YXJkIGVxdWFsaXR5IGNvbXBhcmlzb24gb24gcG9pbnRlcgogICAg
IC8vIHZhbHVlcyBiZWNhdXNlIGJvdGggbGVmdCBhbmQgcmlnaHQgYXJlIHBvaW50ZXJzIHRvIG9i
amVjdHMgdGhhdCBoYXZlIG5vIHNwZWNpYWwgZXF1YWxpdHkKICAgICAvLyBwcm90b2NvbHMuCi0g
ICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZmFsc2VDYXNlID0gbV9qaXQuYnJhbmNoUHRyKE1hY3Jv
QXNzZW1ibGVyOjpOb3RFcXVhbCwgb3AxR1BSLCBvcDJHUFIpOworICAgIE1hY3JvQXNzZW1ibGVy
OjpKdW1wIGZhbHNlQ2FzZSA9IG1faml0LmJyYW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVh
bCwgb3AxR1BSLCBvcDJHUFIpOwogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHRydWVDYXNlID0g
bV9qaXQuanVtcCgpOwogICAgIAogICAgIHJpZ2h0Tm90Q2VsbC5saW5rKCZtX2ppdCk7CkBAIC0x
Njc3LDEzICsxNjc4LDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RUb09i
amUKICAgICAvLyBwcm92ZSB0aGF0IGl0IGlzIGVpdGhlciBudWxsIG9yIHVuZGVmaW5lZC4KICAg
ICBpZiAoIWlzT3RoZXJPckVtcHR5U3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKHJpZ2h0Q2hp
bGQpLm1fdHlwZSAmIH5TcGVjQ2VsbCkpIHsKICAgICAgICAgbV9qaXQubW92ZShvcDJHUFIsIHJl
c3VsdEdQUik7Ci0gICAgICAgIG1faml0LmFuZFB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bTMyKH5UYWdCaXRVbmRlZmluZWQpLCByZXN1bHRHUFIpOworICAgICAgICBtX2ppdC5hbmQ2NChN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKH5UYWdCaXRVbmRlZmluZWQpLCByZXN1bHRHUFIp
OwogICAgICAgICAKICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKICAgICAgICAgICAgIEJhZFR5
cGUsIEpTVmFsdWVSZWdzKG9wMkdQUiksIHJpZ2h0Q2hpbGQuaW5kZXgoKSwKLSAgICAgICAgICAg
IG1faml0LmJyYW5jaFB0cigKKyAgICAgICAgICAgIG1faml0LmJyYW5jaDY0KAogICAgICAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgcmVzdWx0R1BSLAotICAgICAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+
KFZhbHVlTnVsbCkpKSk7CisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW02NChWYWx1ZU51bGwpKSk7CiAgICAgfQogICAgIAogICAgIGZhbHNlQ2FzZS5saW5rKCZtX2pp
dCk7CkBAIC0xNzM3LDcgKzE3MzgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUGVl
cEhvbGVPYmplCiAgICAgLy8gSXQgc2VlbXMgdGhhdCBtb3N0IG9mIHRoZSB0aW1lIHdoZW4gcHJv
Z3JhbXMgZG8gYSA9PSBiIHdoZXJlIGIgbWF5IGJlIGVpdGhlciBudWxsL3VuZGVmaW5lZAogICAg
IC8vIG9yIGFuIG9iamVjdCwgYiBpcyB1c3VhbGx5IGFuIG9iamVjdC4gQmFsYW5jZSB0aGUgYnJh
bmNoZXMgdG8gbWFrZSB0aGF0IGNhc2UgZmFzdC4KICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBy
aWdodE5vdENlbGwgPQotICAgICAgICBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVy
OjpOb25aZXJvLCBvcDJHUFIsIEdQUkluZm86OnRhZ01hc2tSZWdpc3Rlcik7CisgICAgICAgIG1f
aml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgb3AyR1BSLCBHUFJJbmZv
Ojp0YWdNYXNrUmVnaXN0ZXIpOwogICAgIAogICAgIC8vIFdlIGtub3cgdGhhdCB3aXRoaW4gdGhp
cyBicmFuY2gsIHJpZ2h0Q2hpbGQgbXVzdCBiZSBhIGNlbGwuIAogICAgIGlmIChtX2ppdC5ncmFw
aCgpLmdsb2JhbE9iamVjdEZvcihicmFuY2hOb2RlLmNvZGVPcmlnaW4pLT5tYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkV2F0Y2hwb2ludCgpLT5pc1N0aWxsVmFsaWQoKSkgewpAQCAtMTc2Nyw3ICsxNzY4
LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlT2JqZQogICAgIC8vIEF0
IHRoaXMgcG9pbnQgd2Uga25vdyB0aGF0IHdlIGNhbiBwZXJmb3JtIGEgc3RyYWlnaHQtZm9yd2Fy
ZCBlcXVhbGl0eSBjb21wYXJpc29uIG9uIHBvaW50ZXIKICAgICAvLyB2YWx1ZXMgYmVjYXVzZSBi
b3RoIGxlZnQgYW5kIHJpZ2h0IGFyZSBwb2ludGVycyB0byBvYmplY3RzIHRoYXQgaGF2ZSBubyBz
cGVjaWFsIGVxdWFsaXR5CiAgICAgLy8gcHJvdG9jb2xzLgotICAgIGJyYW5jaFB0cihNYWNyb0Fz
c2VtYmxlcjo6RXF1YWwsIG9wMUdQUiwgb3AyR1BSLCB0YWtlbik7CisgICAgYnJhbmNoNjQoTWFj
cm9Bc3NlbWJsZXI6OkVxdWFsLCBvcDFHUFIsIG9wMkdQUiwgdGFrZW4pOwogICAgIAogICAgIC8v
IFdlIGtub3cgdGhhdCB3aXRoaW4gdGhpcyBicmFuY2gsIHJpZ2h0Q2hpbGQgbXVzdCBub3QgYmUg
YSBjZWxsLiBDaGVjayBpZiB0aGF0IGlzIGVub3VnaCB0bwogICAgIC8vIHByb3ZlIHRoYXQgaXQg
aXMgZWl0aGVyIG51bGwgb3IgdW5kZWZpbmVkLgpAQCAtMTc3OCwxMyArMTc3OSwxMyBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVPYmplCiAgICAgICAgIAogICAgICAgICBy
aWdodE5vdENlbGwubGluaygmbV9qaXQpOwogICAgICAgICBtX2ppdC5tb3ZlKG9wMkdQUiwgcmVz
dWx0R1BSKTsKLSAgICAgICAgbV9qaXQuYW5kUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
MzIoflRhZ0JpdFVuZGVmaW5lZCksIHJlc3VsdEdQUik7CisgICAgICAgIG1faml0LmFuZDY0KE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoflRhZ0JpdFVuZGVmaW5lZCksIHJlc3VsdEdQUik7
CiAgICAgICAgIAogICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAogICAgICAgICAgICAgQmFkVHlw
ZSwgSlNWYWx1ZVJlZ3Mob3AyR1BSKSwgcmlnaHRDaGlsZC5pbmRleCgpLAotICAgICAgICAgICAg
bV9qaXQuYnJhbmNoUHRyKAorICAgICAgICAgICAgbV9qaXQuYnJhbmNoNjQoCiAgICAgICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCByZXN1bHRHUFIsCi0gICAgICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
VmFsdWVOdWxsKSkpKTsKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bTY0KFZhbHVlTnVsbCkpKTsKICAgICB9CiAgICAgCiAgICAganVtcChub3RUYWtlbik7CkBAIC0x
ODExLDcgKzE4MTIsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlRG91YmxlQ29tcGFy
CiAgICAgCiAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoVmFsdWVUcnVlKSwgcmVzdWx0Lmdw
cigpKTsKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCB0cnVlQ2FzZSA9IG1faml0LmJyYW5jaERv
dWJsZShjb25kaXRpb24sIG9wMS5mcHIoKSwgb3AyLmZwcigpKTsKLSAgICBtX2ppdC54b3JQdHIo
VHJ1c3RlZEltbTMyKHRydWUpLCByZXN1bHQuZ3ByKCkpOworICAgIG1faml0LnhvcjY0KFRydXN0
ZWRJbW0zMih0cnVlKSwgcmVzdWx0LmdwcigpKTsKICAgICB0cnVlQ2FzZS5saW5rKCZtX2ppdCk7
CiAgICAgCiAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4LCBE
YXRhRm9ybWF0SlNCb29sZWFuKTsKQEAgLTE4NDMsNyArMTg0NCw3IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVOb25TdHJpbmdDZWwKICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5n
cHIoKTsKICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwogICAgIAotICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wIG5vdENlbGwgPSBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNz
ZW1ibGVyOjpOb25aZXJvLCB2YWx1ZUdQUiwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsKKyAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub3RDZWxsID0gbV9qaXQuYnJhbmNoVGVzdDY0KE1hY3Jv
QXNzZW1ibGVyOjpOb25aZXJvLCB2YWx1ZUdQUiwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsK
ICAgICBpZiAobV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3IobV9qaXQuZ3JhcGgoKVtub2Rl
VXNlLmluZGV4KCldLmNvZGVPcmlnaW4pLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2lu
dCgpLT5pc1N0aWxsVmFsaWQoKSkgewogICAgICAgICBtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVj
dEZvcihtX2ppdC5ncmFwaCgpW25vZGVVc2UuaW5kZXgoKV0uY29kZU9yaWdpbiktPm1hc3F1ZXJh
ZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCktPmFkZChzcGVjdWxhdGlvbldhdGNocG9pbnQoKSk7
CiAKQEAgLTE4ODksMTIgKzE4OTAsMTIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU5v
blN0cmluZ0NlbAogCiAgICAgaWYgKG5lZWRTcGVjdWxhdGlvbkNoZWNrKSB7CiAgICAgICAgIG1f
aml0Lm1vdmUodmFsdWVHUFIsIHJlc3VsdEdQUik7Ci0gICAgICAgIG1faml0LmFuZFB0cihNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKH5UYWdCaXRVbmRlZmluZWQpLCByZXN1bHRHUFIpOwor
ICAgICAgICBtX2ppdC5hbmQ2NChNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKH5UYWdCaXRV
bmRlZmluZWQpLCByZXN1bHRHUFIpOwogICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUs
IEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgbm9kZVVzZSwgCi0gICAgICAgICAgICBtX2ppdC5icmFu
Y2hQdHIoCisgICAgICAgICAgICBtX2ppdC5icmFuY2g2NCgKICAgICAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6Tm90RXF1YWwsIAogICAgICAgICAgICAgICAgIHJlc3VsdEdQUiwgCi0gICAg
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIocmVpbnRlcnByZXRfY2Fz
dDx2b2lkKj4oVmFsdWVOdWxsKSkpKTsKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbTY0KFZhbHVlTnVsbCkpKTsKICAgICB9CiAgICAgbV9qaXQubW92ZShUcnVzdGVk
SW1tMzIoVmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKICAgICAKQEAgLTE5MzcsNyArMTkzOCw3IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVMb2dpY2FsTm90KE4KICAgICAgICAgICAgIEdQ
UlRlbXBvcmFyeSByZXN1bHQodGhpcywgdmFsdWUpOwogICAgICAgICAgICAgCiAgICAgICAgICAg
ICBtX2ppdC5tb3ZlKHZhbHVlLmdwcigpLCByZXN1bHQuZ3ByKCkpOwotICAgICAgICAgICAgbV9q
aXQueG9yUHRyKFRydXN0ZWRJbW0zMih0cnVlKSwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgICAg
IG1faml0LnhvcjY0KFRydXN0ZWRJbW0zMih0cnVlKSwgcmVzdWx0LmdwcigpKTsKICAgICAgICAg
ICAgIAogICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUlu
ZGV4LCBEYXRhRm9ybWF0SlNCb29sZWFuKTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTE5NDcs
OSArMTk0OCw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVMb2dpY2FsTm90KE4KICAg
ICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsgLy8gRklYTUU6IFdlIGNvdWxkIHJldXNl
LCBidXQgb24gc3BlY3VsYXRpb24gZmFpbCB3b3VsZCBuZWVkIHJlY292ZXJ5IHRvIHJlc3RvcmUg
dGFnIChha2luIHRvIGFkZCkuCiAgICAgICAgIAogICAgICAgICBtX2ppdC5tb3ZlKHZhbHVlLmdw
cigpLCByZXN1bHQuZ3ByKCkpOwotICAgICAgICBtX2ppdC54b3JQdHIoVHJ1c3RlZEltbTMyKHN0
YXRpY19jYXN0PGludDMyX3Q+KFZhbHVlRmFsc2UpKSwgcmVzdWx0LmdwcigpKTsKLSAgICAgICAg
c3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyh2YWx1ZS5ncHIoKSksIG5vZGUu
Y2hpbGQxKCksIG1faml0LmJyYW5jaFRlc3RQdHIoSklUQ29tcGlsZXI6Ok5vblplcm8sIHJlc3Vs
dC5ncHIoKSwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSkpKTsKLSAgICAg
ICAgbV9qaXQueG9yUHRyKFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90PihWYWx1ZVRy
dWUpKSwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgbV9qaXQueG9yNjQoVHJ1c3RlZEltbTMyKHN0
YXRpY19jYXN0PGludDMyX3Q+KFZhbHVlRmFsc2UpKSwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAg
c3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyh2YWx1ZS5ncHIoKSksIG5vZGUu
Y2hpbGQxKCksIG1faml0LmJyYW5jaFRlc3Q2NChKSVRDb21waWxlcjo6Tm9uWmVybywgcmVzdWx0
LmdwcigpLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSkpOworICAgICAg
ICBtX2ppdC54b3I2NChUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oVmFsdWVUcnVl
KSksIHJlc3VsdC5ncHIoKSk7CiAgICAgICAgIAogICAgICAgICAvLyBJZiB3ZSBhZGQgYSBEYXRh
Rm9ybWF0Qm9vbCwgd2Ugc2hvdWxkIHVzZSBpdCBoZXJlLgogICAgICAgICBqc1ZhbHVlUmVzdWx0
KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgsIERhdGFGb3JtYXRKU0Jvb2xlYW4pOwpAQCAt
MTk2NSwxMyArMTk2NiwxMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTG9naWNhbE5v
dChOCiAgICAgYXJnMS51c2UoKTsKICAgICAKICAgICBtX2ppdC5tb3ZlKGFyZzFHUFIsIHJlc3Vs
dEdQUik7Ci0gICAgbV9qaXQueG9yUHRyKFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90
PihWYWx1ZUZhbHNlKSksIHJlc3VsdEdQUik7Ci0gICAgSklUQ29tcGlsZXI6Okp1bXAgc2xvd0Nh
c2UgPSBtX2ppdC5icmFuY2hUZXN0UHRyKEpJVENvbXBpbGVyOjpOb25aZXJvLCByZXN1bHRHUFIs
IFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpKTsKKyAgICBtX2ppdC54b3I2
NChUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oVmFsdWVGYWxzZSkpLCByZXN1bHRH
UFIpOworICAgIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dDYXNlID0gbV9qaXQuYnJhbmNoVGVzdDY0
KEpJVENvbXBpbGVyOjpOb25aZXJvLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2Fz
dDxpbnQzMl90Pih+MSkpKTsKICAgICAKICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKICAgICAg
ICAgc2xvd1BhdGhDYWxsKHNsb3dDYXNlLCB0aGlzLCBkZmdDb252ZXJ0SlNWYWx1ZVRvQm9vbGVh
biwgcmVzdWx0R1BSLCBhcmcxR1BSKSk7CiAgICAgCi0gICAgbV9qaXQueG9yUHRyKFRydXN0ZWRJ
bW0zMihzdGF0aWNfY2FzdDxpbnQzMl90PihWYWx1ZVRydWUpKSwgcmVzdWx0R1BSKTsKKyAgICBt
X2ppdC54b3I2NChUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oVmFsdWVUcnVlKSks
IHJlc3VsdEdQUik7CiAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRHUFIsIG1fY29tcGlsZUluZGV4
LCBEYXRhRm9ybWF0SlNCb29sZWFuLCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOwogfQog
CkBAIC0xOTgyLDcgKzE5ODMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Tm9uU3RyaW5n
Q2VsbE9yCiAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CiAgICAgR1BSUmVnIHNj
cmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOwogICAgIAotICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1w
IG5vdENlbGwgPSBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCB2
YWx1ZUdQUiwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6
SnVtcCBub3RDZWxsID0gbV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpOb25aZXJv
LCB2YWx1ZUdQUiwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsKICAgICBpZiAobV9qaXQuZ3Jh
cGgoKS5nbG9iYWxPYmplY3RGb3IobV9qaXQuZ3JhcGgoKVtub2RlVXNlLmluZGV4KCldLmNvZGVP
cmlnaW4pLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludCgpLT5pc1N0aWxsVmFsaWQo
KSkgewogICAgICAgICBtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihtX2ppdC5ncmFwaCgp
W25vZGVVc2UuaW5kZXgoKV0uY29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRj
aHBvaW50KCktPmFkZChzcGVjdWxhdGlvbldhdGNocG9pbnQoKSk7CiAKQEAgLTIwMjAsOCArMjAy
MSw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXROb25TdHJpbmdDZWxsT3IKICAgICAKICAg
ICBpZiAobmVlZFNwZWN1bGF0aW9uQ2hlY2spIHsKICAgICAgICAgbV9qaXQubW92ZSh2YWx1ZUdQ
Uiwgc2NyYXRjaEdQUik7Ci0gICAgICAgIG1faml0LmFuZFB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbTMyKH5UYWdCaXRVbmRlZmluZWQpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgc3BlY3Vs
YXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIG5vZGVVc2UuaW5kZXgo
KSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgc2NyYXRjaEdQUiwg
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oVmFs
dWVOdWxsKSkpKTsKKyAgICAgICAgbV9qaXQuYW5kNjQoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW0zMih+VGFnQml0VW5kZWZpbmVkKSwgc2NyYXRjaEdQUik7CisgICAgICAgIHNwZWN1bGF0aW9u
Q2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBub2RlVXNlLmluZGV4KCksIG1f
aml0LmJyYW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgc2NyYXRjaEdQUiwgTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW02NChWYWx1ZU51bGwpKSk7CiAgICAgfQogICAgIGp1bXAobm90
VGFrZW4pOwogICAgIApAQCAtMjA3OCw4ICsyMDc5LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
ZW1pdEJyYW5jaChOb2RlJiBubwogICAgICAgICAgICAgICAgIGJyYW5jaFRlc3QzMihjb25kaXRp
b24sIHZhbHVlR1BSLCBUcnVzdGVkSW1tMzIodHJ1ZSksIHRha2VuKTsKICAgICAgICAgICAgICAg
ICBqdW1wKG5vdFRha2VuKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
YnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgdmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tUHRyKEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oZmFsc2UpKSksIG5vdFRh
a2VuKTsKLSAgICAgICAgICAgICAgICBicmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCB2
YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKGpz
Qm9vbGVhbih0cnVlKSkpLCB0YWtlbik7CisgICAgICAgICAgICAgICAgYnJhbmNoNjQoTWFjcm9B
c3NlbWJsZXI6OkVxdWFsLCB2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChK
U1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGZhbHNlKSkpLCBub3RUYWtlbik7CisgICAgICAgICAg
ICAgICAgYnJhbmNoNjQoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCB2YWx1ZUdQUiwgTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRydWUpKSksIHRh
a2VuKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNr
KEJhZFR5cGUsIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQuanVt
cCgpKTsKICAgICAgICAgICAgIH0KQEAgLTIwODgsMTIgKzIwODksMTIgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6ZW1pdEJyYW5jaChOb2RlJiBubwogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJl
c3VsdCh0aGlzKTsKICAgICAgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7
CiAgICAgICAgIAotICAgICAgICAgICAgYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwg
dmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKEpTVmFsdWU6OmVuY29kZShq
c051bWJlcigwKSkpLCBub3RUYWtlbik7Ci0gICAgICAgICAgICBicmFuY2hQdHIoTWFjcm9Bc3Nl
bWJsZXI6OkFib3ZlT3JFcXVhbCwgdmFsdWVHUFIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdp
c3RlciwgdGFrZW4pOworICAgICAgICAgICAgYnJhbmNoNjQoTWFjcm9Bc3NlbWJsZXI6OkVxdWFs
LCB2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUo
anNOdW1iZXIoMCkpKSwgbm90VGFrZW4pOworICAgICAgICAgICAgYnJhbmNoNjQoTWFjcm9Bc3Nl
bWJsZXI6OkFib3ZlT3JFcXVhbCwgdmFsdWVHUFIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdp
c3RlciwgdGFrZW4pOwogICAgIAogICAgICAgICAgICAgaWYgKCFwcmVkaWN0Qm9vbGVhbikgewot
ICAgICAgICAgICAgICAgIGJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHZhbHVlR1BS
LCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFu
KGZhbHNlKSkpLCBub3RUYWtlbik7Ci0gICAgICAgICAgICAgICAgYnJhbmNoUHRyKE1hY3JvQXNz
ZW1ibGVyOjpFcXVhbCwgdmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKEpT
VmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkpKSwgdGFrZW4pOworICAgICAgICAgICAgICAg
IGJyYW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgdmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihmYWxzZSkpKSwgbm90VGFr
ZW4pOworICAgICAgICAgICAgICAgIGJyYW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgdmFs
dWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9v
bGVhbih0cnVlKSkpLCB0YWtlbik7CiAgICAgICAgICAgICB9CiAgICAgCiAgICAgICAgICAgICB2
YWx1ZS51c2UoKTsKQEAgLTIxMTUsOCArMjExNiw4IEBAIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlz
dCBTcGVjdWxhdGl2ZUpJVDoKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nhc2Vz
OwogICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFi
b3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VS
ZWcsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsKICAgICAKLSAgICBtX2pp
dC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlS
ZWcsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciksIHJlc3VsdFJlZyk7Ci0gICAgc2xvd0Nhc2Vz
LmFwcGVuZChtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCByZXN1bHRS
ZWcpKTsKKyAgICBtX2ppdC5sb2FkNjQoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdl
UmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQpLCByZXN1bHRSZWcp
OworICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVy
OjpaZXJvLCByZXN1bHRSZWcpKTsKICAgICAKICAgICByZXR1cm4gc2xvd0Nhc2VzOwogfQpAQCAt
MjEyNSw4ICsyMTI2LDggQEAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IFNwZWN1bGF0aXZlSklU
OgogewogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG91dE9mQm91bmRzID0gbV9qaXQuYnJhbmNo
MzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0
KCkpKTsKICAgICAKLSAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgo
c3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwgT0JKRUNU
X09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSwgcmVzdWx0UmVnKTsKLSAgICBN
YWNyb0Fzc2VtYmxlcjo6SnVtcCBob2xlID0gbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2Vt
Ymxlcjo6WmVybywgcmVzdWx0UmVnKTsKKyAgICBtX2ppdC5sb2FkNjQoTWFjcm9Bc3NlbWJsZXI6
OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVz
RWlnaHQsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSksIHJlc3Vs
dFJlZyk7CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgaG9sZSA9IG1faml0LmJyYW5jaFRlc3Q2
NChNYWNyb0Fzc2VtYmxlcjo6WmVybywgcmVzdWx0UmVnKTsKICAgICAKICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOwogICAgIHNsb3dDYXNlcy5hcHBlbmQob3V0T2ZCb3Vu
ZHMpOwpAQCAtMjE1OCw3ICsyMTU5LDcgQEAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IFNwZWN1
bGF0aXZlSklUOgogICAgICAgICBpbkJvdW5kcy5saW5rKCZtX2ppdCk7CiAgICAgfQogCi0gICAg
bV9qaXQuc3RvcmVQdHIodmFsdWVSZWcsIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFn
ZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0cikpOworICAgIG1faml0
LnN0b3JlNjQodmFsdWVSZWcsIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywg
cHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0KSk7CiAgICAgCiAgICAgaWYg
KGlzSW5Cb3VuZHNBY2Nlc3MoYXJyYXlNb2RlKSkKICAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1i
bGVyOjpKdW1wTGlzdCgpOwpAQCAtMjE4NCw5ICsyMTg1LDkgQEAgTWFjcm9Bc3NlbWJsZXI6Okp1
bXBMaXN0IFNwZWN1bGF0aXZlSklUOgogICAgICAgICAvLyBwcm9maWxpbmcuCiAgICAgICAgIHNw
ZWN1bGF0aW9uQ2hlY2soCiAgICAgICAgICAgICBVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwg
Tm9Ob2RlLAotICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6
WmVybywgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywg
TWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBt
X3ZlY3RvclswXSkpKSk7CisgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0NjQoTWFjcm9Bc3Nl
bWJsZXI6Olplcm8sIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVy
dHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlT
dG9yYWdlLCBtX3ZlY3RvclswXSkpKSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXAgbm90SG9sZVZhbHVlID0gbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2Vt
Ymxlcjo6Tm9uWmVybywgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9w
ZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlT
dG9yYWdlLCBtX3ZlY3RvclswXSkpKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm90
SG9sZVZhbHVlID0gbV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBN
YWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fz
c2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0
b3JbMF0pKSk7CiAgICAgICAgIGlmIChpc1Nsb3dQdXRBY2Nlc3MoYXJyYXlNb2RlKSkgewogICAg
ICAgICAgICAgLy8gVGhpcyBpcyBzb3J0IG9mIHN0cmFuZ2UuIElmIHdlIHdhbnRlZCB0byBvcHRp
bWl6ZSB0aGlzIGNvZGUgcGF0aCwgd2Ugd291bGQgaW52ZXJ0CiAgICAgICAgICAgICAvLyB0aGUg
YWJvdmUgYnJhbmNoLiBCdXQgaXQncyBzaW1wbHkgbm90IHdvcnRoIGl0IHNpbmNlIHRoaXMgb25s
eSBoYXBwZW5zIGlmIHdlJ3JlCkBAIC0yMjA2LDcgKzIyMDcsNyBAQCBNYWNyb0Fzc2VtYmxlcjo6
SnVtcExpc3QgU3BlY3VsYXRpdmVKSVQ6CiAgICAgfQogICAgIAogICAgIC8vIFN0b3JlIHRoZSB2
YWx1ZSB0byB0aGUgYXJyYXkuCi0gICAgbV9qaXQuc3RvcmVQdHIodmFsdWVSZWcsIE1hY3JvQXNz
ZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVy
OjpTY2FsZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSk7
CisgICAgbV9qaXQuc3RvcmU2NCh2YWx1ZVJlZywgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChz
dG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVD
VF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSkpOwogICAgIAogICAgIHJldHVy
biBzbG93Q2FzZXM7CiB9CkBAIC0yMjcwLDcgKzIyNzEsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIH0KIAogICAgICAgICBHUFJUZW1wb3Jhcnkg
cmVzdWx0KHRoaXMpOwotICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjphZGRyZXNz
Rm9yKG5vZGUubG9jYWwoKSksIHJlc3VsdC5ncHIoKSk7CisgICAgICAgIG1faml0LmxvYWQ2NChK
SVRDb21waWxlcjo6YWRkcmVzc0Zvcihub2RlLmxvY2FsKCkpLCByZXN1bHQuZ3ByKCkpOwogCiAg
ICAgICAgIC8vIExpa2UganNWYWx1ZVJlc3VsdCwgYnV0IGRvbid0IHVzZUNoaWxkcmVuIC0gb3Vy
IGNoaWxkcmVuIGFyZSBwaGkgbm9kZXMsCiAgICAgICAgIC8vIGFuZCBkb24ndCByZXByZXNlbnQg
dmFsdWVzIHdpdGhpbiB0aGlzIGRhdGFmbG93IHdpdGggdmlydHVhbCByZWdpc3RlcnMuCkBAIC0y
Mjk0LDcgKzIyOTUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUp
CiAgICAgY2FzZSBHZXRMb2NhbFVubGlua2VkOiB7CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1
bHQodGhpcyk7CiAgICAgICAgIAotICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjph
ZGRyZXNzRm9yKG5vZGUudW5saW5rZWRMb2NhbCgpKSwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAg
bV9qaXQubG9hZDY0KEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKG5vZGUudW5saW5rZWRMb2NhbCgp
KSwgcmVzdWx0LmdwcigpKTsKICAgICAgICAgCiAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0
LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgIGJyZWFrOwpAQCAtMjM2MCwxNCArMjM2
MSwxNCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAg
ICAgICBpZiAoaXNDZWxsU3BlY3VsYXRpb24ocHJlZGljdGVkVHlwZSkpIHsKICAgICAgICAgICAg
ICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBjZWxsKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAg
ICAgICAgICAgICAgIEdQUlJlZyBjZWxsR1BSID0gY2VsbC5ncHIoKTsKLSAgICAgICAgICAgICAg
ICBtX2ppdC5zdG9yZVB0cihjZWxsR1BSLCBKSVRDb21waWxlcjo6YWRkcmVzc0Zvcihub2RlLmxv
Y2FsKCkpKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTY0KGNlbGxHUFIsIEpJVENvbXBp
bGVyOjphZGRyZXNzRm9yKG5vZGUubG9jYWwoKSkpOwogICAgICAgICAgICAgICAgIG5vUmVzdWx0
KG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgICAgICAgICByZWNvcmRTZXRMb2NhbChub2RlLmxv
Y2FsKCksIFZhbHVlU291cmNlKENlbGxJbkpTU3RhY2spKTsKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChpc0Jvb2xlYW5TcGVjdWxhdGlvbihw
cmVkaWN0ZWRUeXBlKSkgewogICAgICAgICAgICAgICAgIFNwZWN1bGF0ZUJvb2xlYW5PcGVyYW5k
IGJvb2xlYW4odGhpcywgbm9kZS5jaGlsZDEoKSk7Ci0gICAgICAgICAgICAgICAgbV9qaXQuc3Rv
cmVQdHIoYm9vbGVhbi5ncHIoKSwgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Iobm9kZS5sb2NhbCgp
KSk7CisgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmU2NChib29sZWFuLmdwcigpLCBKSVRDb21w
aWxlcjo6YWRkcmVzc0Zvcihub2RlLmxvY2FsKCkpKTsKICAgICAgICAgICAgICAgICBub1Jlc3Vs
dChtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgICAgICAgICAgcmVjb3JkU2V0TG9jYWwobm9kZS5s
b2NhbCgpLCBWYWx1ZVNvdXJjZShCb29sZWFuSW5KU1N0YWNrKSk7CiAgICAgICAgICAgICAgICAg
YnJlYWs7CkBAIC0yMzc1LDcgKzIzNzYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
KE5vZGUmIG5vZGUpCiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIEpTVmFsdWVPcGVyYW5k
IHZhbHVlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwotICAgICAgICBtX2ppdC5zdG9yZVB0cih2YWx1
ZS5ncHIoKSwgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Iobm9kZS5sb2NhbCgpKSk7CisgICAgICAg
IG1faml0LnN0b3JlNjQodmFsdWUuZ3ByKCksIEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKG5vZGUu
bG9jYWwoKSkpOwogICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CiAKICAgICAgICAg
cmVjb3JkU2V0TG9jYWwobm9kZS5sb2NhbCgpLCBWYWx1ZVNvdXJjZShWYWx1ZUluSlNTdGFjaykp
OwpAQCAtMjQ3NSwxMCArMjQ3NiwxMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5v
ZGUmIG5vZGUpCiAgICAgY2FzZSBDaGVja051bWJlcjogewogICAgICAgICBpZiAoIWlzTnVtYmVy
U3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpIHsKICAg
ICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKLSAgICAg
ICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzSW50ZWdlciA9IG1faml0LmJyYW5jaFB0cihNYWNy
b0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBvcDEuZ3ByKCksIEdQUkluZm86OnRhZ1R5cGVOdW1i
ZXJSZWdpc3Rlcik7CisgICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBpc0ludGVnZXIgPSBt
X2ppdC5icmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBvcDEuZ3ByKCksIEdQ
UkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7CiAgICAgICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKAogICAgICAgICAgICAgICAgIEJhZFR5cGUsIEpTVmFsdWVSZWdzKG9wMS5ncHIoKSksIG5v
ZGUuY2hpbGQxKCkuaW5kZXgoKSwKLSAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0UHRy
KE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBvcDEuZ3ByKCksIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJS
ZWdpc3RlcikpOworICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2Vt
Ymxlcjo6WmVybywgb3AxLmdwcigpLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsK
ICAgICAgICAgICAgIGlzSW50ZWdlci5saW5rKCZtX2ppdCk7CiAgICAgICAgIH0KICAgICAgICAg
bm9SZXN1bHQobV9jb21waWxlSW5kZXgpOwpAQCAtMjcxMCw4ICsyNzExLDggQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgc3BlY3VsYXRpb25D
aGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihN
YWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3Moc3RvcmFnZVJlZywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkp
OwogICAgICAgICAgICAgCiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwot
ICAgICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3Jh
Z2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIpLCByZXN1bHQuZ3By
KCkpOwotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJl
Z3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBy
ZXN1bHQuZ3ByKCkpKTsKKyAgICAgICAgICAgIG1faml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6
QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNF
aWdodCksIHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE91dE9m
Qm91bmRzLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fz
c2VtYmxlcjo6WmVybywgcmVzdWx0LmdwcigpKSk7CiAgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0
KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KQEAgLTI3NTUsOCArMjc1Niw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUo
Tm9kZSYgbm9kZSkKICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3V0T2ZCb3VuZHMsIEpT
VmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3Zl
T3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcs
IEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKSk7CiAgICAgICAgICAgICAKICAg
ICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0gICAgICAgICAgICBtX2ppdC5s
b2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcs
IE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwg
bV92ZWN0b3JbMF0pKSwgcmVzdWx0LmdwcigpKTsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hl
Y2soT3V0T2ZCb3VuZHMsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoVGVzdFB0
cihNYWNyb0Fzc2VtYmxlcjo6WmVybywgcmVzdWx0LmdwcigpKSk7CisgICAgICAgICAgICBtX2pp
dC5sb2FkNjQoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJl
ZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3Jh
Z2UsIG1fdmVjdG9yWzBdKSksIHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFRl
c3Q2NChNYWNyb0Fzc2VtYmxlcjo6WmVybywgcmVzdWx0LmdwcigpKSk7CiAgICAgICAgICAgICAK
ICAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7
CiAgICAgICAgICAgICBicmVhazsKQEAgLTI5MDAsNyArMjkwMSw3IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgICAgICAvLyBTdG9yZSB0aGUg
dmFsdWUgdG8gdGhlIGFycmF5LgogICAgICAgICAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9
IHByb3BlcnR5LmdwcigpOwogICAgICAgICAgICAgICAgIEdQUlJlZyB2YWx1ZVJlZyA9IHZhbHVl
LmdwcigpOwotICAgICAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKHZhbHVlUmVnLCBNYWNyb0Fz
c2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxl
cjo6U2NhbGVQdHIpKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTY0KHZhbHVlUmVnLCBN
YWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fz
c2VtYmxlcjo6VGltZXNFaWdodCkpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAg
IG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTI5
NTEsNyArMjk1Miw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkK
ICAgICAgICAgICAgICAgICAvLyBTdG9yZSB0aGUgdmFsdWUgdG8gdGhlIGFycmF5LgogICAgICAg
ICAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwogICAgICAgICAg
ICAgICAgIEdQUlJlZyB2YWx1ZVJlZyA9IHZhbHVlLmdwcigpOwotICAgICAgICAgICAgICAgIG1f
aml0LnN0b3JlUHRyKHZhbHVlUmVnLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VS
ZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRP
RihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSkpOworICAgICAgICAgICAgICAgIG1faml0LnN0
b3JlNjQodmFsdWVSZWcsIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJv
cGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoQXJy
YXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBA
IC0zMDEzLDcgKzMwMTQsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5v
ZGUpCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgT0JK
RUNUX09GRlNFVE9GKEFyZ3VtZW50cywgbV9yZWdpc3RlcnMpKSwKICAgICAgICAgICAgICAgICBz
Y3JhdGNoUmVnKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIoCisg
ICAgICAgICAgICBtX2ppdC5zdG9yZTY0KAogICAgICAgICAgICAgICAgIHZhbHVlUmVnLAogICAg
ICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoCiAgICAgICAgICAgICAgICAg
ICAgIHNjcmF0Y2hSZWcsIHNjcmF0Y2gyUmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwK
QEAgLTMxMzksMTAgKzMxNDAsMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2Rl
JiBub2RlKQogICAgICAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhDb250aWd1b3VzT3V0T2ZCb3Vu
ZHM6IHsKICAgICAgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhz
dG9yYWdlR1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpLCBzdG9yYWdlTGVu
Z3RoR1BSKTsKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHNsb3dQYXRoID0gbV9q
aXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgc3RvcmFnZUxlbmd0aEdQ
UiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQnV0dGVyZmx5OjpvZmZzZXRP
ZlZlY3Rvckxlbmd0aCgpKSk7Ci0gICAgICAgICAgICBtX2ppdC5zdG9yZVB0cih2YWx1ZUdQUiwg
TWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzdG9yYWdlTGVuZ3RoR1BSLCBN
YWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIpKTsKKyAgICAgICAgICAgIG1faml0LnN0b3JlNjQodmFs
dWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgc3RvcmFnZUxlbmd0
aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQpKTsKICAgICAgICAgICAgIG1faml0LmFk
ZDMyKFRydXN0ZWRJbW0zMigxKSwgc3RvcmFnZUxlbmd0aEdQUik7CiAgICAgICAgICAgICBtX2pp
dC5zdG9yZTMyKHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3Jh
Z2VHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpOwotICAgICAgICAgICAg
bV9qaXQub3JQdHIoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBzdG9yYWdlTGVuZ3Ro
R1BSKTsKKyAgICAgICAgICAgIG1faml0Lm9yNjQoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lz
dGVyLCBzdG9yYWdlTGVuZ3RoR1BSKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgYWRkU2xv
d1BhdGhHZW5lcmF0b3IoCiAgICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsKApAQCAtMzE2Miwx
MiArMzE2MywxMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAg
ICAgICAgIAogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc2xvd1BhdGggPSBtX2pp
dC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBzdG9yYWdlTGVuZ3RoR1BS
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBBcnJheVN0b3JhZ2U6OnZlY3Rv
ckxlbmd0aE9mZnNldCgpKSk7CiAgICAgICAgIAotICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIo
dmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgc3RvcmFnZUxl
bmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlT
dG9yYWdlLCBtX3ZlY3RvclswXSkpKTsKKyAgICAgICAgICAgIG1faml0LnN0b3JlNjQodmFsdWVH
UFIsIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgc3RvcmFnZUxlbmd0aEdQ
UiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3Jh
Z2UsIG1fdmVjdG9yWzBdKSkpOwogICAgICAgICAKICAgICAgICAgICAgIG1faml0LmFkZDMyKFRy
dXN0ZWRJbW0zMigxKSwgc3RvcmFnZUxlbmd0aEdQUik7CiAgICAgICAgICAgICBtX2ppdC5zdG9y
ZTMyKHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIs
IEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpKTsKICAgICAgICAgICAgIG1faml0LmFkZDMy
KFRydXN0ZWRJbW0zMigxKSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgT0JK
RUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9udW1WYWx1ZXNJblZlY3RvcikpKTsKLSAgICAg
ICAgICAgIG1faml0Lm9yUHRyKEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlciwgc3RvcmFn
ZUxlbmd0aEdQUik7CisgICAgICAgICAgICBtX2ppdC5vcjY0KEdQUkluZm86OnRhZ1R5cGVOdW1i
ZXJSZWdpc3Rlciwgc3RvcmFnZUxlbmd0aEdQUik7CiAgICAgICAgIAogICAgICAgICAgICAgYWRk
U2xvd1BhdGhHZW5lcmF0b3IoCiAgICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsKApAQCAtMzIw
NiwxNSArMzIwNywxNSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUp
CiAgICAgICAgICAgICBtX2ppdC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIHZhbHVlR1BSKTsKICAg
ICAgICAgICAgIG1faml0LnN0b3JlMzIoCiAgICAgICAgICAgICAgICAgdmFsdWVHUFIsIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNM
ZW5ndGgoKSkpOwotICAgICAgICAgICAgbV9qaXQubG9hZFB0cigKLSAgICAgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHZhbHVlR1BSLCBNYWNyb0Fzc2Vt
Ymxlcjo6U2NhbGVQdHIpLAorICAgICAgICAgICAgbV9qaXQubG9hZDY0KAorICAgICAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgdmFsdWVHUFIsIE1hY3Jv
QXNzZW1ibGVyOjpUaW1lc0VpZ2h0KSwKICAgICAgICAgICAgICAgICB2YWx1ZUdQUik7Ci0gICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzbG93Q2FzZSA9IG1faml0LmJyYW5jaFRlc3RQ
dHIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHZhbHVlR1BSKTsKKyAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wIHNsb3dDYXNlID0gbV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVy
OjpaZXJvLCB2YWx1ZUdQUik7CiAKICAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAog
ICAgICAgICAgICAgICAgIHNsb3dQYXRoTW92ZSgKICAgICAgICAgICAgICAgICAgICAgdW5kZWZp
bmVkQ2FzZSwgdGhpcywKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpKSwgdmFsdWVHUFIpKTsKKyAg
ICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSkpLCB2YWx1ZUdQUikpOwogICAgICAgICAgICAgYWRkU2xvd1Bh
dGhHZW5lcmF0b3IoCiAgICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAogICAgICAgICAgICAg
ICAgICAgICBzbG93Q2FzZSwgdGhpcywgb3BlcmF0aW9uQXJyYXlQb3BBbmRSZWNvdmVyTGVuZ3Ro
LCB2YWx1ZUdQUiwgYmFzZUdQUikpOwpAQCAtMzIzNywxOCArMzIzOCwxOCBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICBKSVRDb21waWxlcjo6
SnVtcExpc3Qgc2xvd0Nhc2VzOwogICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5i
cmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBzdG9yYWdlTGVuZ3RoR1BSLCBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxl
bmd0aE9mZnNldCgpKSkpOwogICAgICAgICAKLSAgICAgICAgICAgIG1faml0LmxvYWRQdHIoTWFj
cm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzdG9yYWdlTGVuZ3RoR1BSLCBNYWNy
b0Fzc2VtYmxlcjo6U2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVj
dG9yWzBdKSksIHZhbHVlR1BSKTsKLSAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQu
YnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVybywgdmFsdWVHUFIpKTsKKyAgICAgICAg
ICAgIG1faml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHN0
b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VU
T0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpLCB2YWx1ZUdQUik7CisgICAgICAgICAgICBz
bG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6WmVybywg
dmFsdWVHUFIpKTsKICAgICAgICAgCiAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKHN0b3JhZ2VM
ZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEFycmF5U3RvcmFn
ZTo6bGVuZ3RoT2Zmc2V0KCkpKTsKICAgICAgICAgCi0gICAgICAgICAgICBtX2ppdC5zdG9yZVB0
cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cigwKSwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJ
bmRleChzdG9yYWdlR1BSLCBzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQ
dHIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSkpOworICAgICAg
ICAgICAgbV9qaXQuc3RvcmU2NChNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KChpbnQ2NF90
KTApLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHN0b3JhZ2VMZW5ndGhH
UFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9y
YWdlLCBtX3ZlY3RvclswXSkpKTsKICAgICAgICAgICAgIG1faml0LnN1YjMyKE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tMzIoMSksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIs
IE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbnVtVmFsdWVzSW5WZWN0b3IpKSk7CiAg
ICAgICAgIAogICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCiAgICAgICAgICAgICAg
ICAgc2xvd1BhdGhNb3ZlKAogICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWRDYXNlLCB0aGlz
LAotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSkpLCB2YWx1ZUdQUikpOworICAgICAgICAgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKSksIHZhbHVlR1BSKSk7CiAgICAgICAgIAogICAgICAgICAgICAgYWRkU2xvd1BhdGhH
ZW5lcmF0b3IoCiAgICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsKApAQCAtMzM0MSw3ICszMzQy
LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAg
ICAgCiAgICAgICAgICAgICBtX2ppdC5tb3ZlKG9wMS5ncHIoKSwgcmVzdWx0LmdwcigpKTsKICAg
ICAgICAgICAgIGlmIChvcDEuZm9ybWF0KCkgPT0gRGF0YUZvcm1hdEludGVnZXIpCi0gICAgICAg
ICAgICAgICAgbV9qaXQub3JQdHIoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCByZXN1
bHQuZ3ByKCkpOworICAgICAgICAgICAgICAgIG1faml0Lm9yNjQoR1BSSW5mbzo6dGFnVHlwZU51
bWJlclJlZ2lzdGVyLCByZXN1bHQuZ3ByKCkpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBq
c1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOwogICAgICAgICAgICAg
YnJlYWs7CkBAIC0zMzYwLDcgKzMzNjEsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
KE5vZGUmIG5vZGUpCiAgICAgICAgIGlmICghKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgp
KS5tX3R5cGUgJiB+KFNwZWNOdW1iZXIgfCBTcGVjQm9vbGVhbikpKQogICAgICAgICAgICAgbV9q
aXQubW92ZShvcDFHUFIsIHJlc3VsdEdQUik7CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6Okp1bXAgYWxyZWFkeVByaW1pdGl2ZSA9IG1faml0LmJyYW5jaFRlc3RQ
dHIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIG9wMUdQUiwgR1BSSW5mbzo6dGFnTWFza1JlZ2lz
dGVyKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGFscmVhZHlQcmltaXRpdmUg
PSBtX2ppdC5icmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIG9wMUdQUiwgR1BS
SW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1w
IG5vdFByaW1pdGl2ZSA9IG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWws
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQo
KSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+c3Ry
aW5nU3RydWN0dXJlLmdldCgpKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGFscmVhZHlQ
cmltaXRpdmUubGluaygmbV9qaXQpOwpAQCAtMzM5Nyw3ICszMzk4LDcgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBv
cGVyYW5kSWR4ID0gMDsgb3BlcmFuZElkeCA8IG5vZGUubnVtQ2hpbGRyZW4oKTsgKytvcGVyYW5k
SWR4KSB7CiAgICAgICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgb3BlcmFuZCh0aGlzLCBtX2pp
dC5ncmFwaCgpLm1fdmFyQXJnQ2hpbGRyZW5bbm9kZS5maXJzdENoaWxkKCkgKyBvcGVyYW5kSWR4
XSk7CiAgICAgICAgICAgICAgICAgR1BSUmVnIG9wR1BSID0gb3BlcmFuZC5ncHIoKTsKLSAgICAg
ICAgICAgICAgICBtX2ppdC5zdG9yZVB0cihvcEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
c3RvcmFnZUdQUiwgc2l6ZW9mKEpTVmFsdWUpICogb3BlcmFuZElkeCkpOworICAgICAgICAgICAg
ICAgIG1faml0LnN0b3JlNjQob3BHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VH
UFIsIHNpemVvZihKU1ZhbHVlKSAqIG9wZXJhbmRJZHgpKTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIAogICAgICAgICAgICAgLy8gWXVjaywgd2Ugc2hvdWxkICpyZWFsbHkqIGhhdmUgYSB3
YXkgb2YgYWxzbyByZXR1cm5pbmcgdGhlIHN0b3JhZ2VHUFIuIEJ1dApAQCAtMzQyOCw3ICszNDI5
LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAg
ICAgR1BSUmVnIG9wR1BSID0gb3BlcmFuZC5ncHIoKTsKICAgICAgICAgICAgIG9wZXJhbmQudXNl
KCk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKG9wR1BSLCBidWZm
ZXIgKyBvcGVyYW5kSWR4KTsKKyAgICAgICAgICAgIG1faml0LnN0b3JlNjQob3BHUFIsIGJ1ZmZl
ciArIG9wZXJhbmRJZHgpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBmbHVzaFJlZ2lz
dGVycygpOwpAQCAtMzUyOCw3ICszNTI5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZShOb2RlJiBub2RlKQogICAgICAgICAgICAgR1BSUmVnIG9wR1BSID0gb3BlcmFuZC5ncHIoKTsK
ICAgICAgICAgICAgIG9wZXJhbmQudXNlKCk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIG1f
aml0LnN0b3JlUHRyKG9wR1BSLCBidWZmZXIgKyBvcGVyYW5kSWR4KTsKKyAgICAgICAgICAgIG1f
aml0LnN0b3JlNjQob3BHUFIsIGJ1ZmZlciArIG9wZXJhbmRJZHgpOwogICAgICAgICB9CiAgICAg
ICAgIAogICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwpAQCAtMzU3Myw4ICszNTc0LDggQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgCiAgICAg
ICAgICAgICBKU1ZhbHVlKiBkYXRhID0gbV9qaXQuY29kZUJsb2NrKCktPmNvbnN0YW50QnVmZmVy
KG5vZGUuc3RhcnRDb25zdGFudCgpKTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXgg
PSAwOyBpbmRleCA8IG5vZGUubnVtQ29uc3RhbnRzKCk7ICsraW5kZXgpIHsKLSAgICAgICAgICAg
ICAgICBtX2ppdC5zdG9yZVB0cigKLSAgICAgICAgICAgICAgICAgICAgSW1tUHRyKGJpdHdpc2Vf
Y2FzdDx2b2lkKj4oSlNWYWx1ZTo6ZW5jb2RlKGRhdGFbaW5kZXhdKSkpLAorICAgICAgICAgICAg
ICAgIG1faml0LnN0b3JlNjQoCisgICAgICAgICAgICAgICAgICAgIEltbTY0KEpTVmFsdWU6OmVu
Y29kZShkYXRhW2luZGV4XSkpLAogICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhzdG9yYWdlR1BSLCBzaXplb2YoSlNWYWx1ZSkgKiBpbmRleCkpOwogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgCkBAIC0zNjE4LDggKzM2MTksOCBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmICgh
aXNPdGhlclNwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUp
KSB7CiAgICAgICAgICAgICAgICAgbV9qaXQubW92ZSh0aGlzVmFsdWVHUFIsIHNjcmF0Y2hHUFIp
OwotICAgICAgICAgICAgICAgIG1faml0LmFuZFB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bTMyKH5UYWdCaXRVbmRlZmluZWQpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKHRoaXNWYWx1ZUdQUiksIG5vZGUuY2hp
bGQxKCksIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHNjcmF0Y2hH
UFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+
KFZhbHVlTnVsbCkpKSk7CisgICAgICAgICAgICAgICAgbV9qaXQuYW5kNjQoTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW0zMih+VGFnQml0VW5kZWZpbmVkKSwgc2NyYXRjaEdQUik7CisgICAgICAg
ICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyh0aGlzVmFsdWVH
UFIpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5icmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1
YWwsIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoVmFsdWVOdWxsKSkp
OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbFRoaXNPYmplY3RGb3Iobm9k
ZS5jb2RlT3JpZ2luKSksIHNjcmF0Y2hHUFIpOwpAQCAtMzcxOSw3ICszNzIwLDcgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBpZiAoY2hlY2tUb3BM
ZXZlbCAmJiBza2lwLS0pIHsKICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGFjdGl2YXRp
b25Ob3RDcmVhdGVkOwogICAgICAgICAgICAgaWYgKGNoZWNrVG9wTGV2ZWwpCi0gICAgICAgICAg
ICAgICAgYWN0aXZhdGlvbk5vdENyZWF0ZWQgPSBtX2ppdC5icmFuY2hUZXN0UHRyKEpJVENvbXBp
bGVyOjpaZXJvLCBKSVRDb21waWxlcjo6YWRkcmVzc0ZvcihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVn
aXN0ZXI+KG1faml0LmNvZGVCbG9jaygpLT5hY3RpdmF0aW9uUmVnaXN0ZXIoKSkpKTsKKyAgICAg
ICAgICAgICAgICBhY3RpdmF0aW9uTm90Q3JlYXRlZCA9IG1faml0LmJyYW5jaFRlc3Q2NChKSVRD
b21waWxlcjo6WmVybywgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Ioc3RhdGljX2Nhc3Q8VmlydHVh
bFJlZ2lzdGVyPihtX2ppdC5jb2RlQmxvY2soKS0+YWN0aXZhdGlvblJlZ2lzdGVyKCkpKSk7CiAg
ICAgICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwg
SlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZXN1bHRHUFIpOwogICAgICAgICAgICAgYWN0aXZh
dGlvbk5vdENyZWF0ZWQubGluaygmbV9qaXQpOwogICAgICAgICB9CkBAIC0zNzQ1LDcgKzM3NDYs
NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIEdQ
UlJlZyByZWdpc3RlcnNHUFIgPSByZWdpc3RlcnMuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyByZXN1
bHRHUFIgPSByZXN1bHQuZ3ByKCk7CiAKLSAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxl
cjo6QWRkcmVzcyhyZWdpc3RlcnNHUFIsIG5vZGUudmFyTnVtYmVyKCkgKiBzaXplb2YoUmVnaXN0
ZXIpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgbV9qaXQubG9hZDY0KEpJVENvbXBpbGVyOjpBZGRy
ZXNzKHJlZ2lzdGVyc0dQUiwgbm9kZS52YXJOdW1iZXIoKSAqIHNpemVvZihSZWdpc3RlcikpLCBy
ZXN1bHRHUFIpOwogICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbV9jb21waWxlSW5k
ZXgpOwogICAgICAgICBicmVhazsKICAgICB9CkBAIC0zNzYwLDcgKzM3NjEsNyBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIEdQUlJlZyB2YWx1ZUdQ
UiA9IHZhbHVlLmdwcigpOwogICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2hSZWdp
c3Rlci5ncHIoKTsKIAotICAgICAgICBtX2ppdC5zdG9yZVB0cih2YWx1ZUdQUiwgSklUQ29tcGls
ZXI6OkFkZHJlc3MocmVnaXN0ZXJzR1BSLCBub2RlLnZhck51bWJlcigpICogc2l6ZW9mKFJlZ2lz
dGVyKSkpOworICAgICAgICBtX2ppdC5zdG9yZTY0KHZhbHVlR1BSLCBKSVRDb21waWxlcjo6QWRk
cmVzcyhyZWdpc3RlcnNHUFIsIG5vZGUudmFyTnVtYmVyKCkgKiBzaXplb2YoUmVnaXN0ZXIpKSk7
CiAgICAgICAgIHdyaXRlQmFycmllcihzY29wZUdQUiwgdmFsdWVHUFIsIG5vZGUuY2hpbGQzKCks
IFdyaXRlQmFycmllckZvclZhcmlhYmxlQWNjZXNzLCBzY3JhdGNoR1BSKTsKICAgICAgICAgbm9S
ZXN1bHQobV9jb21waWxlSW5kZXgpOwogICAgICAgICBicmVhazsKQEAgLTM3OTQsNyArMzc5NSw3
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgCiAg
ICAgICAgIGJhc2UudXNlKCk7CiAgICAgICAgIAotICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBu
b3RDZWxsID0gbV9qaXQuYnJhbmNoVGVzdFB0cihKSVRDb21waWxlcjo6Tm9uWmVybywgYmFzZUdQ
UiwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAg
bm90Q2VsbCA9IG1faml0LmJyYW5jaFRlc3Q2NChKSVRDb21waWxlcjo6Tm9uWmVybywgYmFzZUdQ
UiwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsKICAgICAgICAgCiAgICAgICAgIGNhY2hlZEdl
dEJ5SWQobm9kZS5jb2RlT3JpZ2luLCBiYXNlR1BSLCByZXN1bHRHUFIsIG5vZGUuaWRlbnRpZmll
ck51bWJlcigpLCBub3RDZWxsKTsKICAgICAgICAgCkBAIC0zODM2LDcgKzM4MzcsNyBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIGJhc2UudXNlKCk7
CiAgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CiAgICAgICAgIAotICAgICAgICBKSVRDb21waWxl
cjo6SnVtcCBub3RDZWxsID0gbV9qaXQuYnJhbmNoVGVzdFB0cihKSVRDb21waWxlcjo6Tm9uWmVy
bywgYmFzZUdQUiwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsKKyAgICAgICAgSklUQ29tcGls
ZXI6Okp1bXAgbm90Q2VsbCA9IG1faml0LmJyYW5jaFRlc3Q2NChKSVRDb21waWxlcjo6Tm9uWmVy
bywgYmFzZUdQUiwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsKICAgICAgICAgCiAgICAgICAg
IGNhY2hlZEdldEJ5SWQobm9kZS5jb2RlT3JpZ2luLCBiYXNlR1BSLCByZXN1bHRHUFIsIG5vZGUu
aWRlbnRpZmllck51bWJlcigpLCBub3RDZWxsLCBEb250U3BpbGwpOwogICAgICAgICAKQEAgLTM5
ODQsNyArMzk4NSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkK
ICAgICAgICAgCiAgICAgICAgIFN0b3JhZ2VBY2Nlc3NEYXRhJiBzdG9yYWdlQWNjZXNzRGF0YSA9
IG1faml0LmdyYXBoKCkubV9zdG9yYWdlQWNjZXNzRGF0YVtub2RlLnN0b3JhZ2VBY2Nlc3NEYXRh
SW5kZXgoKV07CiAgICAgICAgIAotICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpB
ZGRyZXNzKHN0b3JhZ2VHUFIsIHN0b3JhZ2VBY2Nlc3NEYXRhLm9mZnNldCAqIHNpemVvZihFbmNv
ZGVkSlNWYWx1ZSkpLCByZXN1bHRHUFIpOworICAgICAgICBtX2ppdC5sb2FkNjQoSklUQ29tcGls
ZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgc3RvcmFnZUFjY2Vzc0RhdGEub2Zmc2V0ICogc2l6ZW9m
KEVuY29kZWRKU1ZhbHVlKSksIHJlc3VsdEdQUik7CiAgICAgICAgIAogICAgICAgICBqc1ZhbHVl
UmVzdWx0KHJlc3VsdEdQUiwgbV9jb21waWxlSW5kZXgpOwogICAgICAgICBicmVhazsKQEAgLTQw
MDYsNyArNDAwNyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkK
IAogICAgICAgICBTdG9yYWdlQWNjZXNzRGF0YSYgc3RvcmFnZUFjY2Vzc0RhdGEgPSBtX2ppdC5n
cmFwaCgpLm1fc3RvcmFnZUFjY2Vzc0RhdGFbbm9kZS5zdG9yYWdlQWNjZXNzRGF0YUluZGV4KCld
OwogICAgICAgICAKLSAgICAgICAgbV9qaXQuc3RvcmVQdHIodmFsdWVHUFIsIEpJVENvbXBpbGVy
OjpBZGRyZXNzKHN0b3JhZ2VHUFIsIHN0b3JhZ2VBY2Nlc3NEYXRhLm9mZnNldCAqIHNpemVvZihF
bmNvZGVkSlNWYWx1ZSkpKTsKKyAgICAgICAgbV9qaXQuc3RvcmU2NCh2YWx1ZUdQUiwgSklUQ29t
cGlsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgc3RvcmFnZUFjY2Vzc0RhdGEub2Zmc2V0ICogc2l6
ZW9mKEVuY29kZWRKU1ZhbHVlKSkpOwogICAgICAgICAKICAgICAgICAgbm9SZXN1bHQobV9jb21w
aWxlSW5kZXgpOwogICAgICAgICBicmVhazsKQEAgLTQwNTEsNyArNDA1Miw3IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICBjYXNlIEdldEdsb2JhbFZhcjog
ewogICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogCi0gICAgICAgIG1faml0Lmxv
YWRQdHIobm9kZS5yZWdpc3RlclBvaW50ZXIoKSwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgbV9q
aXQubG9hZDY0KG5vZGUucmVnaXN0ZXJQb2ludGVyKCksIHJlc3VsdC5ncHIoKSk7CiAKICAgICAg
ICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKICAgICAgICAg
YnJlYWs7CkBAIC00MDY3LDcgKzQwNjgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
KE5vZGUmIG5vZGUpCiAgICAgICAgICAgICB3cml0ZUJhcnJpZXIobV9qaXQuZ2xvYmFsT2JqZWN0
Rm9yKG5vZGUuY29kZU9yaWdpbiksIHZhbHVlLmdwcigpLCBub2RlLmNoaWxkMSgpLCBXcml0ZUJh
cnJpZXJGb3JWYXJpYWJsZUFjY2Vzcywgc2NyYXRjaFJlZyk7CiAgICAgICAgIH0KICAgICAgICAg
Ci0gICAgICAgIG1faml0LnN0b3JlUHRyKHZhbHVlLmdwcigpLCBub2RlLnJlZ2lzdGVyUG9pbnRl
cigpKTsKKyAgICAgICAgbV9qaXQuc3RvcmU2NCh2YWx1ZS5ncHIoKSwgbm9kZS5yZWdpc3RlclBv
aW50ZXIoKSk7CiAKICAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOwogICAgICAgICBi
cmVhazsKQEAgLTQwOTMsNyArNDA5NCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUo
Tm9kZSYgbm9kZSkKICAgICAgICAgICAgIHdyaXRlQmFycmllcihtX2ppdC5nbG9iYWxPYmplY3RG
b3Iobm9kZS5jb2RlT3JpZ2luKSwgdmFsdWUuZ3ByKCksIG5vZGUuY2hpbGQxKCksIFdyaXRlQmFy
cmllckZvclZhcmlhYmxlQWNjZXNzLCBzY3JhdGNoUmVnKTsKICAgICAgICAgfQogICAgICAgICAK
LSAgICAgICAgbV9qaXQuc3RvcmVQdHIodmFsdWUuZ3ByKCksIG5vZGUucmVnaXN0ZXJQb2ludGVy
KCkpOworICAgICAgICBtX2ppdC5zdG9yZTY0KHZhbHVlLmdwcigpLCBub2RlLnJlZ2lzdGVyUG9p
bnRlcigpKTsKIAogICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgIGJy
ZWFrOwpAQCAtNDEwNywxMCArNDEwOCwxMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
KE5vZGUmIG5vZGUpCiAjaWYgREZHX0VOQUJMRShKSVRfQVNTRVJUKQogICAgICAgICBHUFJUZW1w
b3Jhcnkgc2NyYXRjaCh0aGlzKTsKICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNo
LmdwcigpOwotICAgICAgICBtX2ppdC5sb2FkUHRyKG5vZGUucmVnaXN0ZXJQb2ludGVyKCksIHNj
cmF0Y2hHUFIpOwotICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBvayA9IG1faml0LmJyYW5jaFB0
cigKKyAgICAgICAgbV9qaXQubG9hZDY0KG5vZGUucmVnaXN0ZXJQb2ludGVyKCksIHNjcmF0Y2hH
UFIpOworICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBvayA9IG1faml0LmJyYW5jaDY0KAogICAg
ICAgICAgICAgSklUQ29tcGlsZXI6OkVxdWFsLCBzY3JhdGNoR1BSLAotICAgICAgICAgICAgVHJ1
c3RlZEltbVB0cihiaXR3aXNlX2Nhc3Q8dm9pZCo+KEpTVmFsdWU6OmVuY29kZShub2RlLnJlZ2lz
dGVyUG9pbnRlcigpLT5nZXQoKSkpKSk7CisgICAgICAgICAgICBUcnVzdGVkSW1tNjQoSlNWYWx1
ZTo6ZW5jb2RlKG5vZGUucmVnaXN0ZXJQb2ludGVyKCktPmdldCgpKSkpOwogICAgICAgICBtX2pp
dC5icmVha3BvaW50KCk7CiAgICAgICAgIG9rLmxpbmsoJm1faml0KTsKICNlbmRpZgpAQCAtNDE0
MCw5ICs0MTQxLDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQog
ICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAg
ICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKICAgICAgICAgCi0gICAgICAgIEpJVENvbXBp
bGVyOjpKdW1wIGlzQ2VsbCA9IG1faml0LmJyYW5jaFRlc3RQdHIoSklUQ29tcGlsZXI6Olplcm8s
IHZhbHVlLmdwcigpLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpOworICAgICAgICBKSVRDb21w
aWxlcjo6SnVtcCBpc0NlbGwgPSBtX2ppdC5icmFuY2hUZXN0NjQoSklUQ29tcGlsZXI6Olplcm8s
IHZhbHVlLmdwcigpLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpOwogICAgICAgICAKLSAgICAg
ICAgbV9qaXQuY29tcGFyZVB0cihKSVRDb21waWxlcjo6RXF1YWwsIHZhbHVlLmdwcigpLCBUcnVz
dGVkSW1tMzIoVmFsdWVVbmRlZmluZWQpLCByZXN1bHQuZ3ByKCkpOworICAgICAgICBtX2ppdC5j
b21wYXJlNjQoSklUQ29tcGlsZXI6OkVxdWFsLCB2YWx1ZS5ncHIoKSwgVHJ1c3RlZEltbTMyKFZh
bHVlVW5kZWZpbmVkKSwgcmVzdWx0LmdwcigpKTsKICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAg
ZG9uZSA9IG1faml0Lmp1bXAoKTsKICAgICAgICAgCiAgICAgICAgIGlzQ2VsbC5saW5rKCZtX2pp
dCk7CkBAIC00MTc5LDggKzQxODAsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5v
ZGUmIG5vZGUpCiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgdmFsdWUpOwogICAg
ICAgICAKICAgICAgICAgbV9qaXQubW92ZSh2YWx1ZS5ncHIoKSwgcmVzdWx0LmdwcigpKTsKLSAg
ICAgICAgbV9qaXQueG9yUHRyKEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tMzIoVmFsdWVGYWxzZSks
IHJlc3VsdC5ncHIoKSk7Ci0gICAgICAgIG1faml0LnRlc3RQdHIoSklUQ29tcGlsZXI6Olplcm8s
IHJlc3VsdC5ncHIoKSwgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQz
Ml90Pih+MSkpLCByZXN1bHQuZ3ByKCkpOworICAgICAgICBtX2ppdC54b3I2NChKSVRDb21waWxl
cjo6VHJ1c3RlZEltbTMyKFZhbHVlRmFsc2UpLCByZXN1bHQuZ3ByKCkpOworICAgICAgICBtX2pp
dC50ZXN0NjQoSklUQ29tcGlsZXI6Olplcm8sIHJlc3VsdC5ncHIoKSwgSklUQ29tcGlsZXI6OlRy
dXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpLCByZXN1bHQuZ3ByKCkpOwogICAg
ICAgICBtX2ppdC5vcjMyKFRydXN0ZWRJbW0zMihWYWx1ZUZhbHNlKSwgcmVzdWx0LmdwcigpKTsK
ICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4LCBEYXRh
Rm9ybWF0SlNCb29sZWFuKTsKICAgICAgICAgYnJlYWs7CkBAIC00MTkwLDcgKzQxOTEsNyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIEpTVmFsdWVP
cGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICBHUFJUZW1wb3Jhcnkg
cmVzdWx0KHRoaXMsIHZhbHVlKTsKICAgICAgICAgCi0gICAgICAgIG1faml0LnRlc3RQdHIoSklU
Q29tcGlsZXI6Ok5vblplcm8sIHZhbHVlLmdwcigpLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVn
aXN0ZXIsIHJlc3VsdC5ncHIoKSk7CisgICAgICAgIG1faml0LnRlc3Q2NChKSVRDb21waWxlcjo6
Tm9uWmVybywgdmFsdWUuZ3ByKCksIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgcmVz
dWx0LmdwcigpKTsKICAgICAgICAgbV9qaXQub3IzMihUcnVzdGVkSW1tMzIoVmFsdWVGYWxzZSks
IHJlc3VsdC5ncHIoKSk7CiAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0LmdwcigpLCBtX2Nv
bXBpbGVJbmRleCwgRGF0YUZvcm1hdEpTQm9vbGVhbik7CiAgICAgICAgIGJyZWFrOwpAQCAtNDIw
MCw3ICs0MjAxLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQog
ICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAg
ICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCB2YWx1ZSk7CiAgICAgICAgIAotICAgICAgICBK
SVRDb21waWxlcjo6SnVtcCBpc05vdENlbGwgPSBtX2ppdC5icmFuY2hUZXN0UHRyKEpJVENvbXBp
bGVyOjpOb25aZXJvLCB2YWx1ZS5ncHIoKSwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsKKyAg
ICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNOb3RDZWxsID0gbV9qaXQuYnJhbmNoVGVzdDY0KEpJ
VENvbXBpbGVyOjpOb25aZXJvLCB2YWx1ZS5ncHIoKSwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVy
KTsKICAgICAgICAgCiAgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3Mo
dmFsdWUuZ3ByKCksIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCByZXN1bHQuZ3ByKCkpOwog
ICAgICAgICBtX2ppdC5jb21wYXJlOChKSVRDb21waWxlcjo6RXF1YWwsIEpJVENvbXBpbGVyOjpB
ZGRyZXNzKHJlc3VsdC5ncHIoKSwgU3RydWN0dXJlOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRy
dXN0ZWRJbW0zMihTdHJpbmdUeXBlKSwgcmVzdWx0LmdwcigpKTsKQEAgLTQzMTEsNyArNDMxMiw3
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgbV9q
aXQubmVnMzIocmVzb2x2ZUluZm9HUFIpOwogICAgICAgICBtX2ppdC5zaWduRXh0ZW5kMzJUb1B0
cihyZXNvbHZlSW5mb0dQUiwgcmVzb2x2ZUluZm9HUFIpOwogICAgICAgICBtX2ppdC5sb2FkUHRy
KEpJVENvbXBpbGVyOjpBZGRyZXNzKGdsb2JhbE9iamVjdEdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZs
eU9mZnNldCgpKSwgcmVzdWx0R1BSKTsKLSAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxl
cjo6QmFzZUluZGV4KHJlc3VsdEdQUiwgcmVzb2x2ZUluZm9HUFIsIEpJVENvbXBpbGVyOjpTY2Fs
ZVB0ciwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+
KHNpemVvZihKU1ZhbHVlKSkpLCByZXN1bHRHUFIpOworICAgICAgICBtX2ppdC5sb2FkNjQoSklU
Q29tcGlsZXI6OkJhc2VJbmRleChyZXN1bHRHUFIsIHJlc29sdmVJbmZvR1BSLCBKSVRDb21waWxl
cjo6VGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzdGF0aWNfY2FzdDxw
dHJkaWZmX3Q+KHNpemVvZihKU1ZhbHVlKSkpLCByZXN1bHRHUFIpOwogICAgICAgICAKICAgICAg
ICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCiAgICAgICAgICAgICBzbG93UGF0aENhbGwoCkBAIC00
MzM0LDcgKzQzMzUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUp
CiAgICAgICAgIAogICAgICAgICBtX2ppdC5tb3ZlKHZhbHVlR1BSLCByZXN1bHRHUFIpOwogICAg
ICAgICAKLSAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgbm90Q3JlYXRlZCA9IG1faml0LmJyYW5j
aFRlc3RQdHIoSklUQ29tcGlsZXI6Olplcm8sIHJlc3VsdEdQUik7CisgICAgICAgIEpJVENvbXBp
bGVyOjpKdW1wIG5vdENyZWF0ZWQgPSBtX2ppdC5icmFuY2hUZXN0NjQoSklUQ29tcGlsZXI6Olpl
cm8sIHJlc3VsdEdQUik7CiAgICAgICAgIAogICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigK
ICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbChub3RDcmVhdGVkLCB0aGlzLCBvcGVyYXRpb25DcmVh
dGVBY3RpdmF0aW9uLCByZXN1bHRHUFIpKTsKQEAgLTQzNTIsNyArNDM1Myw3IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgCiAgICAgICAgIG1faml0
Lm1vdmUodmFsdWVHUFIsIHJlc3VsdEdQUik7CiAgICAgICAgIAotICAgICAgICBKSVRDb21waWxl
cjo6SnVtcCBub3RDcmVhdGVkID0gbV9qaXQuYnJhbmNoVGVzdFB0cihKSVRDb21waWxlcjo6WmVy
bywgcmVzdWx0R1BSKTsKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgbm90Q3JlYXRlZCA9IG1f
aml0LmJyYW5jaFRlc3Q2NChKSVRDb21waWxlcjo6WmVybywgcmVzdWx0R1BSKTsKICAgICAgICAg
CiAgICAgICAgIGlmIChub2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKSB7CiAgICAgICAg
ICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKQEAgLTQzNzYsMTcgKzQzNzcsMTcgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBHUFJSZWcgYWN0aXZh
dGlvblZhbHVlR1BSID0gYWN0aXZhdGlvblZhbHVlLmdwcigpOwogICAgICAgICBHUFJSZWcgc2Ny
YXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CiAKLSAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgbm90
Q3JlYXRlZCA9IG1faml0LmJyYW5jaFRlc3RQdHIoSklUQ29tcGlsZXI6Olplcm8sIGFjdGl2YXRp
b25WYWx1ZUdQUik7CisgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdENyZWF0ZWQgPSBtX2pp
dC5icmFuY2hUZXN0NjQoSklUQ29tcGlsZXI6Olplcm8sIGFjdGl2YXRpb25WYWx1ZUdQUik7CiAK
ICAgICAgICAgU2hhcmVkU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlID0gbV9qaXQuc3ltYm9sVGFi
bGVGb3Iobm9kZS5jb2RlT3JpZ2luKTsKICAgICAgICAgaW50IHJlZ2lzdGVyc09mZnNldCA9IEpT
QWN0aXZhdGlvbjo6cmVnaXN0ZXJzT2Zmc2V0KHN5bWJvbFRhYmxlKTsKIAogICAgICAgICBpbnQg
Y2FwdHVyZUVuZCA9IHN5bWJvbFRhYmxlLT5jYXB0dXJlRW5kKCk7CiAgICAgICAgIGZvciAoaW50
IGkgPSBzeW1ib2xUYWJsZS0+Y2FwdHVyZVN0YXJ0KCk7IGkgPCBjYXB0dXJlRW5kOyArK2kpIHsK
LSAgICAgICAgICAgIG1faml0LmxvYWRQdHIoCisgICAgICAgICAgICBtX2ppdC5sb2FkNjQoCiAg
ICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6OkFkZHJlc3MoCiAgICAgICAgICAgICAgICAgICAg
IEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBpICogc2l6ZW9mKFJlZ2lzdGVyKSksIHNjcmF0
Y2hHUFIpOwotICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIoCisgICAgICAgICAgICBtX2ppdC5z
dG9yZTY0KAogICAgICAgICAgICAgICAgIHNjcmF0Y2hHUFIsIEpJVENvbXBpbGVyOjpBZGRyZXNz
KAogICAgICAgICAgICAgICAgICAgICBhY3RpdmF0aW9uVmFsdWVHUFIsIHJlZ2lzdGVyc09mZnNl
dCArIGkgKiBzaXplb2YoUmVnaXN0ZXIpKSk7CiAgICAgICAgIH0KQEAgLTQ0MDQsNyArNDQwNSw3
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgR1BS
UmVnIHVubW9kaWZpZWRBcmd1bWVudHNWYWx1ZUdQUiA9IHVubW9kaWZpZWRBcmd1bWVudHNWYWx1
ZS5ncHIoKTsKICAgICAgICAgR1BSUmVnIGFjdGl2YXRpb25WYWx1ZUdQUiA9IGFjdGl2YXRpb25W
YWx1ZS5ncHIoKTsKIAotICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBjcmVhdGVkID0gbV9qaXQu
YnJhbmNoVGVzdFB0cihKSVRDb21waWxlcjo6Tm9uWmVybywgdW5tb2RpZmllZEFyZ3VtZW50c1Zh
bHVlR1BSKTsKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgY3JlYXRlZCA9IG1faml0LmJyYW5j
aFRlc3Q2NChKSVRDb21waWxlcjo6Tm9uWmVybywgdW5tb2RpZmllZEFyZ3VtZW50c1ZhbHVlR1BS
KTsKIAogICAgICAgICBpZiAobm9kZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkgewogICAg
ICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCkBAIC00NDMwLDcgKzQ0MzEsNyBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICAgICAgICAg
IG1faml0LmdyYXBoKCkuYXJndW1lbnRzUmVnaXN0ZXJGb3Iobm9kZS5jb2RlT3JpZ2luKSkubV90
eXBlKSkgewogICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKICAgICAgICAgICAgICAgICBB
cmd1bWVudHNFc2NhcGVkLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsCi0gICAgICAgICAgICAgICAg
bV9qaXQuYnJhbmNoVGVzdFB0cigKKyAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0NjQo
CiAgICAgICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpOb25aZXJvLAogICAgICAgICAgICAg
ICAgICAgICBKSVRDb21waWxlcjo6YWRkcmVzc0ZvcigKICAgICAgICAgICAgICAgICAgICAgICAg
IG1faml0LmFyZ3VtZW50c1JlZ2lzdGVyRm9yKG5vZGUuY29kZU9yaWdpbikpKSk7CkBAIC00NDQ3
LDIyICs0NDQ4LDE5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkK
ICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKICAgICAgICAgR1BSUmVnIHJlc3Vs
dEdQUiA9IHJlc3VsdC5ncHIoKTsKICAgICAgICAgCi0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1w
IGNyZWF0ZWQgPSBtX2ppdC5icmFuY2hUZXN0UHRyKAorICAgICAgICBKSVRDb21waWxlcjo6SnVt
cCBjcmVhdGVkID0gbV9qaXQuYnJhbmNoVGVzdDY0KAogICAgICAgICAgICAgSklUQ29tcGlsZXI6
Ok5vblplcm8sCiAgICAgICAgICAgICBKSVRDb21waWxlcjo6YWRkcmVzc0ZvcigKICAgICAgICAg
ICAgICAgICBtX2ppdC5hcmd1bWVudHNSZWdpc3RlckZvcihub2RlLmNvZGVPcmlnaW4pKSk7CiAg
ICAgICAgIAogICAgICAgICBpZiAobm9kZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkgewog
ICAgICAgICAgICAgbV9qaXQubW92ZSgKLSAgICAgICAgICAgICAgICBJbW1QdHIoCi0gICAgICAg
ICAgICAgICAgICAgIGJpdHdpc2VfY2FzdDx2b2lkKj4oCi0gICAgICAgICAgICAgICAgICAgICAg
ICBKU1ZhbHVlOjplbmNvZGUoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAganNOdW1iZXIo
bm9kZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKSAtIDEpKSkp
LAorICAgICAgICAgICAgICAgIEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bWJlcihub2RlLmNv
ZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpIC0gMSkpKSwKICAgICAg
ICAgICAgICAgICByZXN1bHRHUFIpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgbV9q
aXQubG9hZDMyKEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKEpTU3RhY2s6OkFyZ3VtZW50Q291bnQp
LCByZXN1bHRHUFIpOwogICAgICAgICAgICAgbV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBy
ZXN1bHRHUFIpOwotICAgICAgICAgICAgbV9qaXQub3JQdHIoR1BSSW5mbzo6dGFnVHlwZU51bWJl
clJlZ2lzdGVyLCByZXN1bHRHUFIpOworICAgICAgICAgICAgbV9qaXQub3I2NChHUFJJbmZvOjp0
YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHJlc3VsdEdQUik7CiAgICAgICAgIH0KICAgICAgICAgCiAg
ICAgICAgIC8vIEZJWE1FOiB0aGUgc2xvdyBwYXRoIGdlbmVyYXRvciBzaG91bGQgcGVyZm9ybSBh
IGZvcndhcmQgc3BlY3VsYXRpb24gdGhhdCB0aGUKQEAgLTQ0ODksNyArNDQ4Nyw3IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgICAgICAgICAg
bV9qaXQuZ3JhcGgoKS5hcmd1bWVudHNSZWdpc3RlckZvcihub2RlLmNvZGVPcmlnaW4pKS5tX3R5
cGUpKSB7CiAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAogICAgICAgICAgICAgICAgIEFy
Z3VtZW50c0VzY2FwZWQsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwKLSAgICAgICAgICAgICAgICBt
X2ppdC5icmFuY2hUZXN0UHRyKAorICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3Q2NCgK
ICAgICAgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6Ok5vblplcm8sCiAgICAgICAgICAgICAg
ICAgICAgIEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKAogICAgICAgICAgICAgICAgICAgICAgICAg
bV9qaXQuYXJndW1lbnRzUmVnaXN0ZXJGb3Iobm9kZS5jb2RlT3JpZ2luKSkpKTsKQEAgLTQ1Mjgs
NyArNDUyNiw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAg
ICAgICAgICAgICAgICAgICAgT0JKRUNUX09GRlNFVE9GKFNsb3dBcmd1bWVudCwgaW5kZXgpKSwg
CiAgICAgICAgICAgICAgICAgcmVzdWx0R1BSKTsKICAgICAgICAgICAgIG1faml0LnNpZ25FeHRl
bmQzMlRvUHRyKHJlc3VsdEdQUiwgcmVzdWx0R1BSKTsKLSAgICAgICAgICAgIG1faml0LmxvYWRQ
dHIoCisgICAgICAgICAgICBtX2ppdC5sb2FkNjQoCiAgICAgICAgICAgICAgICAgSklUQ29tcGls
ZXI6OkJhc2VJbmRleCgKICAgICAgICAgICAgICAgICAgICAgR1BSSW5mbzo6Y2FsbEZyYW1lUmVn
aXN0ZXIsIHJlc3VsdEdQUiwgSklUQ29tcGlsZXI6OlRpbWVzRWlnaHQsIG1faml0Lm9mZnNldE9m
TG9jYWxzKG5vZGUuY29kZU9yaWdpbikpLAogICAgICAgICAgICAgICAgIHJlc3VsdEdQUik7CkBA
IC00NTM5LDcgKzQ1MzcsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5v
ZGUpCiAgICAgICAgIG1faml0Lm5lZzMyKHJlc3VsdEdQUik7CiAgICAgICAgIG1faml0LnNpZ25F
eHRlbmQzMlRvUHRyKHJlc3VsdEdQUiwgcmVzdWx0R1BSKTsKICAgICAgICAgICAgIAotICAgICAg
ICBtX2ppdC5sb2FkUHRyKAorICAgICAgICBtX2ppdC5sb2FkNjQoCiAgICAgICAgICAgICBKSVRD
b21waWxlcjo6QmFzZUluZGV4KAogICAgICAgICAgICAgICAgIEdQUkluZm86OmNhbGxGcmFtZVJl
Z2lzdGVyLCByZXN1bHRHUFIsIEpJVENvbXBpbGVyOjpUaW1lc0VpZ2h0LCBtX2ppdC5vZmZzZXRP
ZkFyZ3VtZW50c0luY2x1ZGluZ1RoaXMobm9kZS5jb2RlT3JpZ2luKSksCiAgICAgICAgICAgICBy
ZXN1bHRHUFIpOwpAQCAtNDU1Nyw3ICs0NTU1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZShOb2RlJiBub2RlKQogICAgICAgICAKICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0
IHNsb3dQYXRoOwogICAgICAgICBzbG93UGF0aC5hcHBlbmQoCi0gICAgICAgICAgICBtX2ppdC5i
cmFuY2hUZXN0UHRyKAorICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDY0KAogICAgICAgICAg
ICAgICAgIEpJVENvbXBpbGVyOjpOb25aZXJvLAogICAgICAgICAgICAgICAgIEpJVENvbXBpbGVy
OjphZGRyZXNzRm9yKAogICAgICAgICAgICAgICAgICAgICBtX2ppdC5hcmd1bWVudHNSZWdpc3Rl
ckZvcihub2RlLmNvZGVPcmlnaW4pKSkpOwpAQCAtNDU5Myw3ICs0NTkxLDcgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgICAgICAgICBPQkpF
Q1RfT0ZGU0VUT0YoU2xvd0FyZ3VtZW50LCBpbmRleCkpLCAKICAgICAgICAgICAgICAgICByZXN1
bHRHUFIpOwogICAgICAgICAgICAgbV9qaXQuc2lnbkV4dGVuZDMyVG9QdHIocmVzdWx0R1BSLCBy
ZXN1bHRHUFIpOwotICAgICAgICAgICAgbV9qaXQubG9hZFB0cigKKyAgICAgICAgICAgIG1faml0
LmxvYWQ2NCgKICAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6QmFzZUluZGV4KAogICAgICAg
ICAgICAgICAgICAgICBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgcmVzdWx0R1BSLCBKSVRD
b21waWxlcjo6VGltZXNFaWdodCwgbV9qaXQub2Zmc2V0T2ZMb2NhbHMobm9kZS5jb2RlT3JpZ2lu
KSksCiAgICAgICAgICAgICAgICAgcmVzdWx0R1BSKTsKQEAgLTQ2MDQsNyArNDYwMiw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgbV9qaXQubmVn
MzIocmVzdWx0R1BSKTsKICAgICAgICAgbV9qaXQuc2lnbkV4dGVuZDMyVG9QdHIocmVzdWx0R1BS
LCByZXN1bHRHUFIpOwogICAgICAgICAKLSAgICAgICAgbV9qaXQubG9hZFB0cigKKyAgICAgICAg
bV9qaXQubG9hZDY0KAogICAgICAgICAgICAgSklUQ29tcGlsZXI6OkJhc2VJbmRleCgKICAgICAg
ICAgICAgICAgICBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgcmVzdWx0R1BSLCBKSVRDb21w
aWxlcjo6VGltZXNFaWdodCwgbV9qaXQub2Zmc2V0T2ZBcmd1bWVudHNJbmNsdWRpbmdUaGlzKG5v
ZGUuY29kZU9yaWdpbikpLAogICAgICAgICAgICAgcmVzdWx0R1BSKTsKQEAgLTQ2MzUsNyArNDYz
Myw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAg
ICAgICAgICBtX2ppdC5ncmFwaCgpLmFyZ3VtZW50c1JlZ2lzdGVyRm9yKG5vZGUuY29kZU9yaWdp
bikpLm1fdHlwZSkpOwogICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAogICAgICAgICAgICAgQXJn
dW1lbnRzRXNjYXBlZCwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLAotICAgICAgICAgICAgbV9qaXQu
YnJhbmNoVGVzdFB0cigKKyAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3Q2NCgKICAgICAgICAg
ICAgICAgICBKSVRDb21waWxlcjo6Tm9uWmVybywKICAgICAgICAgICAgICAgICBKSVRDb21waWxl
cjo6YWRkcmVzc0ZvcigKICAgICAgICAgICAgICAgICAgICAgbV9qaXQuYXJndW1lbnRzUmVnaXN0
ZXJGb3Iobm9kZS5jb2RlT3JpZ2luKSkpKTsKQEAgLTQ2NTYsNyArNDY1NCw3IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgCiAgICAgICAgIG1faml0
Lm1vdmUodmFsdWVHUFIsIHJlc3VsdEdQUik7CiAgICAgICAgIAotICAgICAgICBKSVRDb21waWxl
cjo6SnVtcCBub3RDcmVhdGVkID0gbV9qaXQuYnJhbmNoVGVzdFB0cihKSVRDb21waWxlcjo6WmVy
bywgcmVzdWx0R1BSKTsKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgbm90Q3JlYXRlZCA9IG1f
aml0LmJyYW5jaFRlc3Q2NChKSVRDb21waWxlcjo6WmVybywgcmVzdWx0R1BSKTsKICAgICAgICAg
CiAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAogICAgICAgICAgICAgc2xvd1BhdGhDYWxs
KApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5jcHAJKHJldmlzaW9uIDEzMTU0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzA3LDE0ICsxNzA3LDE0IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNoZWNrQXJndW1lbnRUeXBlcygKICAgICAgICAgCiAjaWYg
VVNFKEpTVkFMVUU2NCkKICAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihwcmVkaWN0ZWRU
eXBlKSkKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgdmFsdWVTb3VyY2Us
IG5vZGVJbmRleCwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgSklUQ29t
cGlsZXI6OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSwgR1BSSW5mbzo6dGFnVHlwZU51bWJl
clJlZ2lzdGVyKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIHZhbHVl
U291cmNlLCBub2RlSW5kZXgsIG1faml0LmJyYW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpCZWxvdywg
SklUQ29tcGlsZXI6OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSwgR1BSSW5mbzo6dGFnVHlw
ZU51bWJlclJlZ2lzdGVyKSk7CiAgICAgICAgIGVsc2UgaWYgKGlzQm9vbGVhblNwZWN1bGF0aW9u
KHByZWRpY3RlZFR5cGUpKSB7CiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsK
LSAgICAgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3IodmlydHVh
bFJlZ2lzdGVyKSwgdGVtcC5ncHIoKSk7Ci0gICAgICAgICAgICBtX2ppdC54b3JQdHIoVHJ1c3Rl
ZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KFZhbHVlRmFsc2UpKSwgdGVtcC5ncHIoKSk7Ci0g
ICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIHZhbHVlU291cmNlLCBub2RlSW5k
ZXgsIG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIHRlbXAuZ3By
KCksIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpKSk7CisgICAgICAgICAg
ICBtX2ppdC5sb2FkNjQoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSwg
dGVtcC5ncHIoKSk7CisgICAgICAgICAgICBtX2ppdC54b3I2NChUcnVzdGVkSW1tMzIoc3RhdGlj
X2Nhc3Q8aW50MzJfdD4oVmFsdWVGYWxzZSkpLCB0ZW1wLmdwcigpKTsKKyAgICAgICAgICAgIHNw
ZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgdmFsdWVTb3VyY2UsIG5vZGVJbmRleCwgbV9qaXQuYnJh
bmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCB0ZW1wLmdwcigpLCBUcnVzdGVkSW1t
MzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSkpOwogICAgICAgICB9IGVsc2UgaWYgKGlzQ2Vs
bFNwZWN1bGF0aW9uKHByZWRpY3RlZFR5cGUpKQotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVj
ayhCYWRUeXBlLCB2YWx1ZVNvdXJjZSwgbm9kZUluZGV4LCBtX2ppdC5icmFuY2hUZXN0UHRyKE1h
Y3JvQXNzZW1ibGVyOjpOb25aZXJvLCBKSVRDb21waWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVn
aXN0ZXIpLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0
aW9uQ2hlY2soQmFkVHlwZSwgdmFsdWVTb3VyY2UsIG5vZGVJbmRleCwgbV9qaXQuYnJhbmNoVGVz
dDY0KE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBKSVRDb21waWxlcjo6YWRkcmVzc0Zvcih2aXJ0
dWFsUmVnaXN0ZXIpLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpKTsKICNlbHNlCiAgICAgICAg
IGlmIChpc0ludDMyU3BlY3VsYXRpb24ocHJlZGljdGVkVHlwZSkpCiAgICAgICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKEJhZFR5cGUsIHZhbHVlU291cmNlLCBub2RlSW5kZXgsIG1faml0LmJyYW5j
aDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgSklUQ29tcGlsZXI6OnRhZ0Zvcih2aXJ0dWFs
UmVnaXN0ZXIpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpKSk7CkBAIC0xOTc0LDEw
ICsxOTc0LDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVWYWx1ZVRvSW50MzIKICAg
ICAgICAgICAgIEZQUlRlbXBvcmFyeSB0ZW1wRnByKHRoaXMpOwogICAgICAgICAgICAgRlBSUmVn
IGZwciA9IHRlbXBGcHIuZnByKCk7CiAKLSAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGlz
SW50ZWdlciA9IG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBn
cHIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7CisgICAgICAgICAgICBKSVRDb21w
aWxlcjo6SnVtcCBpc0ludGVnZXIgPSBtX2ppdC5icmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6QWJv
dmVPckVxdWFsLCBncHIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7CiAKICAgICAg
ICAgICAgIGlmICghaXNOdW1iZXJTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGls
ZDEoKSkubV90eXBlKSkKLSAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUs
IEpTVmFsdWVSZWdzKGdwciksIG5vZGUuY2hpbGQxKCkuaW5kZXgoKSwgbV9qaXQuYnJhbmNoVGVz
dFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVybywgZ3ByLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVn
aXN0ZXIpKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFs
dWVSZWdzKGdwciksIG5vZGUuY2hpbGQxKCkuaW5kZXgoKSwgbV9qaXQuYnJhbmNoVGVzdDY0KE1h
Y3JvQXNzZW1ibGVyOjpaZXJvLCBncHIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcikp
OwogCiAgICAgICAgICAgICAvLyBGaXJzdCwgaWYgd2UgZ2V0IGhlcmUgd2UgaGF2ZSBhIGRvdWJs
ZSBlbmNvZGVkIGFzIGEgSlNWYWx1ZQogICAgICAgICAgICAgbV9qaXQubW92ZShncHIsIHJlc3Vs
dEdwcik7CkBAIC0yMTIwLDggKzIxMjAsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
SW50MzJUb0RvdWJsCiAgICAgICAgIEFTU0VSVChpc0ludDMyQ29uc3RhbnQobm9kZS5jaGlsZDEo
KS5pbmRleCgpKSk7CiAgICAgICAgIEZQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAgICAgICAg
IEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOwotICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1i
bGVyOjpJbW1QdHIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXREb3VibGVUb0lu
dHB0cih2YWx1ZU9mTnVtYmVyQ29uc3RhbnQobm9kZS5jaGlsZDEoKS5pbmRleCgpKSkpKSwgdGVt
cC5ncHIoKSk7Ci0gICAgICAgIG1faml0Lm1vdmVQdHJUb0RvdWJsZSh0ZW1wLmdwcigpLCByZXN1
bHQuZnByKCkpOworICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpJbW02NChyZWlu
dGVycHJldERvdWJsZVRvSW50NjQodmFsdWVPZk51bWJlckNvbnN0YW50KG5vZGUuY2hpbGQxKCku
aW5kZXgoKSkpKSwgdGVtcC5ncHIoKSk7CisgICAgICAgIG1faml0Lm1vdmU2NFRvRG91YmxlKHRl
bXAuZ3ByKCksIHJlc3VsdC5mcHIoKSk7CiAgICAgICAgIGRvdWJsZVJlc3VsdChyZXN1bHQuZnBy
KCksIG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTIxNDUsMTMg
KzIxNDUsMTMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUludDMyVG9Eb3VibAogICAg
IEdQUlJlZyB0ZW1wR1BSID0gdGVtcC5ncHIoKTsKICAgICBGUFJSZWcgcmVzdWx0RlBSID0gcmVz
dWx0LmZwcigpOwogICAgIAotICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzSW50ZWdlciA9IG1faml0
LmJyYW5jaFB0cigKKyAgICBKSVRDb21waWxlcjo6SnVtcCBpc0ludGVnZXIgPSBtX2ppdC5icmFu
Y2g2NCgKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgb3AxR1BSLCBHUFJJ
bmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOwogICAgIAogICAgIGlmICghaXNOdW1iZXJTcGVj
dWxhdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkgewogICAgICAg
ICBzcGVjdWxhdGlvbkNoZWNrKAogICAgICAgICAgICAgQmFkVHlwZSwgSlNWYWx1ZVJlZ3Mob3Ax
R1BSKSwgbm9kZS5jaGlsZDEoKSwKLSAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3RQdHIoTWFj
cm9Bc3NlbWJsZXI6Olplcm8sIG9wMUdQUiwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVy
KSk7CisgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Olplcm8s
IG9wMUdQUiwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSk7CiAgICAgfQogICAgIAog
ICAgIG1faml0Lm1vdmUob3AxR1BSLCB0ZW1wR1BSKTsKQEAgLTI0ODEsMjAgKzI0ODEsMTggQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUluc3RhbmNlT2ZGbwogICAgIE1hY3JvQXNzZW1i
bGVyOjpMYWJlbCBsb29wKCZtX2ppdCk7CiAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhzY3JhdGNoUmVnLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc2NyYXRj
aFJlZyk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKHNjcmF0Y2hSZWcsIFN0cnVjdHVyZTo6cHJvdG90eXBlT2Zmc2V0KCkpLCBz
Y3JhdGNoUmVnKTsKKyAgICBtX2ppdC5sb2FkNjQoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2Ny
YXRjaFJlZywgU3RydWN0dXJlOjpwcm90b3R5cGVPZmZzZXQoKSksIHNjcmF0Y2hSZWcpOworICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wIGlzSW5zdGFuY2UgPSBtX2ppdC5icmFuY2g2NChNYWNyb0Fz
c2VtYmxlcjo6RXF1YWwsIHNjcmF0Y2hSZWcsIHByb3RvdHlwZVJlZyk7CisgICAgbV9qaXQuYnJh
bmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBzY3JhdGNoUmVnLCBHUFJJbmZvOjp0YWdN
YXNrUmVnaXN0ZXIpLmxpbmtUbyhsb29wLCAmbV9qaXQpOwogI2Vsc2UKICAgICBtX2ppdC5sb2Fk
MzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaFJlZywgU3RydWN0dXJlOjpwcm90b3R5
cGVPZmZzZXQoKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSks
IHNjcmF0Y2hSZWcpOwotI2VuZGlmCiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgaXNJbnN0YW5j
ZSA9IG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHNjcmF0Y2hSZWcsIHBy
b3RvdHlwZVJlZyk7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBtX2ppdC5icmFuY2hUZXN0UHRy
KE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBzY3JhdGNoUmVnLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0
ZXIpLmxpbmtUbyhsb29wLCAmbV9qaXQpOwotI2Vsc2UKICAgICBtX2ppdC5icmFuY2hUZXN0MzIo
TWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIHNjcmF0Y2hSZWcpLmxpbmtUbyhsb29wLCAmbV9qaXQp
OwogI2VuZGlmCiAgICAgCiAgICAgLy8gTm8gbWF0Y2ggLSByZXN1bHQgaXMgZmFsc2UuCiAjaWYg
VVNFKEpTVkFMVUU2NCkKLSAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
UHRyKEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oZmFsc2UpKSksIHNjcmF0Y2hSZWcpOworICAg
IG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUo
anNCb29sZWFuKGZhbHNlKSkpLCBzY3JhdGNoUmVnKTsKICNlbHNlCiAgICAgbV9qaXQubW92ZShN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDApLCBzY3JhdGNoUmVnKTsKICNlbmRpZgpAQCAt
MjUwMiw3ICsyNTAwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUluc3RhbmNlT2ZG
bwogICAgIAogICAgIGlzSW5zdGFuY2UubGluaygmbV9qaXQpOwogI2lmIFVTRShKU1ZBTFVFNjQp
Ci0gICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihKU1ZhbHVlOjpl
bmNvZGUoanNCb29sZWFuKHRydWUpKSksIHNjcmF0Y2hSZWcpOworICAgIG1faml0Lm1vdmUoTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRydWUp
KSksIHNjcmF0Y2hSZWcpOwogI2Vsc2UKICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tMzIoMSksIHNjcmF0Y2hSZWcpOwogI2VuZGlmCkBAIC0yNTI4LDggKzI1MjYsOCBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlSW5zdGFuY2VPZihOCiAgICAgICAgIAogI2lm
IFVTRShKU1ZBTFVFNjQpCiAgICAgICAgIEdQUlJlZyB2YWx1ZVJlZyA9IHZhbHVlLmdwcigpOwot
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBpc0NlbGwgPSBtX2ppdC5icmFuY2hUZXN0UHRy
KE1hY3JvQXNzZW1ibGVyOjpaZXJvLCB2YWx1ZVJlZywgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVy
KTsKLSAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihKU1Zh
bHVlOjplbmNvZGUoanNCb29sZWFuKGZhbHNlKSkpLCBzY3JhdGNoUmVnKTsKKyAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6Okp1bXAgaXNDZWxsID0gbV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1i
bGVyOjpaZXJvLCB2YWx1ZVJlZywgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsKKyAgICAgICAg
bV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShq
c0Jvb2xlYW4oZmFsc2UpKSksIHNjcmF0Y2hSZWcpOwogI2Vsc2UKICAgICAgICAgR1BSUmVnIHZh
bHVlVGFnUmVnID0gdmFsdWUudGFnR1BSKCk7CiAgICAgICAgIEdQUlJlZyB2YWx1ZVJlZyA9IHZh
bHVlLnBheWxvYWRHUFIoKTsKQEAgLTMwOTIsNyArMzA5MCw3IEBAIGJvb2wgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVTdHJpY3RFcUZvckMKICAgICAgICAgfQogCiAjaWYgVVNFKEpTVkFMVUU2NCkK
LSAgICAgICAgYnJhbmNoUHRyKGNvbmRpdGlvbiwgb3AxLmdwcigpLCBNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbVB0cihiaXR3aXNlX2Nhc3Q8dm9pZCo+KEpTVmFsdWU6OmVuY29kZShjb25zdGFu
dCkpKSwgdGFrZW4pOworICAgICAgICBicmFuY2g2NChjb25kaXRpb24sIG9wMS5ncHIoKSwgTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoY29uc3RhbnQpKSwgdGFr
ZW4pOwogI2Vsc2UKICAgICAgICAgR1BSUmVnIHBheWxvYWRHUFIgPSBvcDEucGF5bG9hZEdQUigp
OwogICAgICAgICBHUFJSZWcgdGFnR1BSID0gb3AxLnRhZ0dQUigpOwpAQCAtMzEyMiw4ICszMTIw
LDggQEAgYm9vbCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVN0cmljdEVxRm9yQwogI2lmIFVTRShK
U1ZBTFVFNjQpCiAgICAgR1BSUmVnIG9wMUdQUiA9IG9wMS5ncHIoKTsKICAgICBHUFJSZWcgcmVz
dWx0R1BSID0gcmVzdWx0LmdwcigpOwotICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW1QdHIoYml0d2lzZV9jYXN0PHZvaWQqPihWYWx1ZUZhbHNlKSksIHJlc3VsdEdQUik7
Ci0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm90RXF1YWwgPSBtX2ppdC5icmFuY2hQdHIoTWFj
cm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBvcDFHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
UHRyKGJpdHdpc2VfY2FzdDx2b2lkKj4oSlNWYWx1ZTo6ZW5jb2RlKGNvbnN0YW50KSkpKTsKKyAg
ICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoVmFsdWVGYWxzZSksIHJl
c3VsdEdQUik7CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm90RXF1YWwgPSBtX2ppdC5icmFu
Y2g2NChNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIG9wMUdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoY29uc3RhbnQpKSk7CiAgICAgbV9qaXQub3IzMihN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDEpLCByZXN1bHRHUFIpOwogICAgIG5vdEVxdWFs
LmxpbmsoJm1faml0KTsKICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbV9jb21waWxlSW5k
ZXgsIERhdGFGb3JtYXRKU0Jvb2xlYW4pOwpAQCAtMzMwMyw3ICszMzAxLDcgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25BcgogICAgICAgICByZXN1bHRSZWcpOwogICAg
IGpzVmFsdWVSZXN1bHQocmVzdWx0VGFnUmVnLCByZXN1bHRSZWcsIG1fY29tcGlsZUluZGV4KTsK
ICNlbHNlCi0gICAgbV9qaXQubG9hZFB0cigKKyAgICBtX2ppdC5sb2FkNjQoCiAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoCiAgICAgICAgICAgICBzY3JhdGNoUmVnLCByZXN1bHRS
ZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LAogICAgICAgICAgICAgQ2FsbEZyYW1lOjp0
aGlzQXJndW1lbnRPZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikgLSBzaXplb2YoUmVnaXN0ZXIp
KSwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmgJKHJldmlzaW9uIDEzMTU0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtNzEsNiArNzEsOCBAQCBwcml2YXRlOgog
ICAgIHR5cGVkZWYgSklUQ29tcGlsZXI6OkltbTMyIEltbTMyOwogICAgIHR5cGVkZWYgSklUQ29t
cGlsZXI6OlRydXN0ZWRJbW1QdHIgVHJ1c3RlZEltbVB0cjsKICAgICB0eXBlZGVmIEpJVENvbXBp
bGVyOjpJbW1QdHIgSW1tUHRyOworICAgIHR5cGVkZWYgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW02
NCBUcnVzdGVkSW1tNjQ7CisgICAgdHlwZWRlZiBKSVRDb21waWxlcjo6SW1tNjQgSW1tNjQ7CiAK
ICAgICAvLyBUaGVzZSBjb25zdGFudHMgYXJlIHVzZWQgdG8gc2V0IHByaW9yaXRpZXMgZm9yIHNw
aWxsIG9yZGVyIGZvcgogICAgIC8vIHRoZSByZWdpc3RlciBhbGxvY2F0b3IuCkBAIC0zNDcsOSAr
MzQ5LDExIEBAIHB1YmxpYzoKICAgICAgICAgICAgIEFTU0VSVChpbmZvLmdwcigpID09IHNvdXJj
ZSk7CiAgICAgICAgICAgICBpZiAocmVnaXN0ZXJGb3JtYXQgPT0gRGF0YUZvcm1hdEludGVnZXIp
CiAgICAgICAgICAgICAgICAgc3BpbGxBY3Rpb24gPSBTdG9yZTMyUGF5bG9hZDsKLSAgICAgICAg
ICAgIGVsc2UgewotICAgICAgICAgICAgICAgIEFTU0VSVChyZWdpc3RlckZvcm1hdCAmIERhdGFG
b3JtYXRKUyB8fCByZWdpc3RlckZvcm1hdCA9PSBEYXRhRm9ybWF0Q2VsbCB8fCByZWdpc3RlckZv
cm1hdCA9PSBEYXRhRm9ybWF0U3RvcmFnZSk7CisgICAgICAgICAgICBlbHNlIGlmIChyZWdpc3Rl
ckZvcm1hdCA9PSBEYXRhRm9ybWF0Q2VsbCB8fCByZWdpc3RlckZvcm1hdCA9PSBEYXRhRm9ybWF0
U3RvcmFnZSkKICAgICAgICAgICAgICAgICBzcGlsbEFjdGlvbiA9IFN0b3JlUHRyOworICAgICAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKHJlZ2lzdGVyRm9ybWF0ICYgRGF0
YUZvcm1hdEpTKTsKKyAgICAgICAgICAgICAgICBzcGlsbEFjdGlvbiA9IFN0b3JlNjQ7CiAgICAg
ICAgICAgICB9CiAjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQogICAgICAgICAgICAgaWYgKHJlZ2lz
dGVyRm9ybWF0ICYgRGF0YUZvcm1hdEpTKSB7CkBAIC00MTQsNyArNDE4LDcgQEAgcHVibGljOgog
ICAgICAgICAgICAgICAgIEFTU0VSVChyZWdpc3RlckZvcm1hdCA9PSBEYXRhRm9ybWF0SlNEb3Vi
bGUpOwogICAgICAgICAgICAgICAgIGZpbGxBY3Rpb24gPSBMb2FkRG91YmxlQm94RG91YmxlOwog
ICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgZmlsbEFjdGlvbiA9IExvYWRQdHI7
CisgICAgICAgICAgICAgICAgZmlsbEFjdGlvbiA9IExvYWQ2NDsKICNlbHNlCiAgICAgICAgICAg
ICBBU1NFUlQoaW5mby50YWdHUFIoKSA9PSBzb3VyY2UgfHwgaW5mby5wYXlsb2FkR1BSKCkgPT0g
c291cmNlKTsKICAgICAgICAgICAgIGlmIChub2RlLmhhc0NvbnN0YW50KCkpCkBAIC01MDEsNiAr
NTA1LDExIEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBTdG9yZVB0cjoKICAgICAgICAgICAgIG1f
aml0LnN0b3JlUHRyKHBsYW4uZ3ByKCksIEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKGF0KHBsYW4u
bm9kZUluZGV4KCkpLnZpcnR1YWxSZWdpc3RlcigpKSk7CiAgICAgICAgICAgICBicmVhazsKKyNp
ZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICBjYXNlIFN0b3JlNjQ6CisgICAgICAgICAgICBtX2pp
dC5zdG9yZTY0KHBsYW4uZ3ByKCksIEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKGF0KHBsYW4ubm9k
ZUluZGV4KCkpLnZpcnR1YWxSZWdpc3RlcigpKSk7CisgICAgICAgICAgICBicmVhazsKKyNlbmRp
ZgogICAgICAgICBjYXNlIFN0b3JlRG91YmxlOgogICAgICAgICAgICAgbV9qaXQuc3RvcmVEb3Vi
bGUocGxhbi5mcHIoKSwgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3IoYXQocGxhbi5ub2RlSW5kZXgo
KSkudmlydHVhbFJlZ2lzdGVyKCkpKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtNTI4LDI1ICs1
MzcsMjUgQEAgcHVibGljOgogICAgICAgICAgICAgYnJlYWs7CiAjaWYgVVNFKEpTVkFMVUU2NCkK
ICAgICAgICAgY2FzZSBTZXRUcnVzdGVkSlNDb25zdGFudDoKLSAgICAgICAgICAgIG1faml0Lm1v
dmUodmFsdWVPZkpTQ29uc3RhbnRBc0ltbVB0cihwbGFuLm5vZGVJbmRleCgpKS5hc1RydXN0ZWRJ
bW1QdHIoKSwgcGxhbi5ncHIoKSk7CisgICAgICAgICAgICBtX2ppdC5tb3ZlKHZhbHVlT2ZKU0Nv
bnN0YW50QXNJbW02NChwbGFuLm5vZGVJbmRleCgpKS5hc1RydXN0ZWRJbW02NCgpLCBwbGFuLmdw
cigpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFNldEpTQ29uc3RhbnQ6Ci0g
ICAgICAgICAgICBtX2ppdC5tb3ZlKHZhbHVlT2ZKU0NvbnN0YW50QXNJbW1QdHIocGxhbi5ub2Rl
SW5kZXgoKSksIHBsYW4uZ3ByKCkpOworICAgICAgICAgICAgbV9qaXQubW92ZSh2YWx1ZU9mSlND
b25zdGFudEFzSW1tNjQocGxhbi5ub2RlSW5kZXgoKSksIHBsYW4uZ3ByKCkpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIGNhc2UgU2V0RG91YmxlQ29uc3RhbnQ6Ci0gICAgICAgICAgICBt
X2ppdC5tb3ZlKEltbVB0cihiaXR3aXNlX2Nhc3Q8dm9pZCo+KHZhbHVlT2ZOdW1iZXJDb25zdGFu
dChwbGFuLm5vZGVJbmRleCgpKSkpLCBjYW5UcmFtcGxlKTsKLSAgICAgICAgICAgIG1faml0Lm1v
dmVQdHJUb0RvdWJsZShjYW5UcmFtcGxlLCBwbGFuLmZwcigpKTsKKyAgICAgICAgICAgIG1faml0
Lm1vdmUoSW1tNjQodmFsdWVPZk51bWJlckNvbnN0YW50KHBsYW4ubm9kZUluZGV4KCkpKSwgY2Fu
VHJhbXBsZSk7CisgICAgICAgICAgICBtX2ppdC5tb3ZlNjRUb0RvdWJsZShjYW5UcmFtcGxlLCBw
bGFuLmZwcigpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIExvYWQzMlBheWxv
YWRCb3hJbnQ6CiAgICAgICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OnBheWxvYWRG
b3IoYXQocGxhbi5ub2RlSW5kZXgoKSkudmlydHVhbFJlZ2lzdGVyKCkpLCBwbGFuLmdwcigpKTsK
LSAgICAgICAgICAgIG1faml0Lm9yUHRyKEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlciwg
cGxhbi5ncHIoKSk7CisgICAgICAgICAgICBtX2ppdC5vcjY0KEdQUkluZm86OnRhZ1R5cGVOdW1i
ZXJSZWdpc3RlciwgcGxhbi5ncHIoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2Fz
ZSBMb2FkRG91YmxlQm94RG91YmxlOgotICAgICAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21w
aWxlcjo6YWRkcmVzc0ZvcihhdChwbGFuLm5vZGVJbmRleCgpKS52aXJ0dWFsUmVnaXN0ZXIoKSks
IHBsYW4uZ3ByKCkpOwotICAgICAgICAgICAgbV9qaXQuc3ViUHRyKEdQUkluZm86OnRhZ1R5cGVO
dW1iZXJSZWdpc3RlciwgcGxhbi5ncHIoKSk7CisgICAgICAgICAgICBtX2ppdC5sb2FkNjQoSklU
Q29tcGlsZXI6OmFkZHJlc3NGb3IoYXQocGxhbi5ub2RlSW5kZXgoKSkudmlydHVhbFJlZ2lzdGVy
KCkpLCBwbGFuLmdwcigpKTsKKyAgICAgICAgICAgIG1faml0LnN1YjY0KEdQUkluZm86OnRhZ1R5
cGVOdW1iZXJSZWdpc3RlciwgcGxhbi5ncHIoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgY2FzZSBMb2FkSlNVbmJveERvdWJsZToKLSAgICAgICAgICAgIG1faml0LmxvYWRQdHIoSklU
Q29tcGlsZXI6OmFkZHJlc3NGb3IoYXQocGxhbi5ub2RlSW5kZXgoKSkudmlydHVhbFJlZ2lzdGVy
KCkpLCBjYW5UcmFtcGxlKTsKKyAgICAgICAgICAgIG1faml0LmxvYWQ2NChKSVRDb21waWxlcjo6
YWRkcmVzc0ZvcihhdChwbGFuLm5vZGVJbmRleCgpKS52aXJ0dWFsUmVnaXN0ZXIoKSksIGNhblRy
YW1wbGUpOwogICAgICAgICAgICAgdW5ib3hEb3VibGUoY2FuVHJhbXBsZSwgcGxhbi5mcHIoKSk7
CiAgICAgICAgICAgICBicmVhazsKICNlbHNlCkBAIC01NzgsNiArNTg3LDExIEBAIHB1YmxpYzoK
ICAgICAgICAgY2FzZSBMb2FkUHRyOgogICAgICAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21w
aWxlcjo6YWRkcmVzc0ZvcihhdChwbGFuLm5vZGVJbmRleCgpKS52aXJ0dWFsUmVnaXN0ZXIoKSks
IHBsYW4uZ3ByKCkpOwogICAgICAgICAgICAgYnJlYWs7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAg
ICAgICAgY2FzZSBMb2FkNjQ6CisgICAgICAgICAgICBtX2ppdC5sb2FkNjQoSklUQ29tcGlsZXI6
OmFkZHJlc3NGb3IoYXQocGxhbi5ub2RlSW5kZXgoKSkudmlydHVhbFJlZ2lzdGVyKCkpLCBwbGFu
LmdwcigpKTsKKyAgICAgICAgICAgIGJyZWFrOworI2VuZGlmCiAgICAgICAgIGNhc2UgTG9hZERv
dWJsZToKICAgICAgICAgICAgIG1faml0LmxvYWREb3VibGUoSklUQ29tcGlsZXI6OmFkZHJlc3NG
b3IoYXQocGxhbi5ub2RlSW5kZXgoKSkudmlydHVhbFJlZ2lzdGVyKCkpLCBwbGFuLmZwcigpKTsK
ICAgICAgICAgICAgIGJyZWFrOwpAQCAtNzUyLDEwICs3NjYsMTAgQEAgcHVibGljOgogICAgICAg
ICAgICAgLy8gV2UgbmVlZCB0byBib3ggaW50MzIgYW5kIGNlbGwgdmFsdWVzIC4uLgogICAgICAg
ICAgICAgLy8gYnV0IG9uIEpTVkFMVUU2NCBib3hpbmcgYSBjZWxsIGlzIGEgbm8tb3AhCiAgICAg
ICAgICAgICBpZiAoc3BpbGxGb3JtYXQgPT0gRGF0YUZvcm1hdEludGVnZXIpCi0gICAgICAgICAg
ICAgICAgbV9qaXQub3JQdHIoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCByZWcpOwor
ICAgICAgICAgICAgICAgIG1faml0Lm9yNjQoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVy
LCByZWcpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICAvLyBTcGlsbCB0aGUgdmFsdWUsIGFu
ZCByZWNvcmQgaXQgYXMgc3BpbGxlZCBpbiBpdHMgYm94ZWQgZm9ybS4KLSAgICAgICAgICAgIG1f
aml0LnN0b3JlUHRyKHJlZywgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Ioc3BpbGxNZSkpOworICAg
ICAgICAgICAgbV9qaXQuc3RvcmU2NChyZWcsIEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHNwaWxs
TWUpKTsKICAgICAgICAgICAgIGluZm8uc3BpbGwoKm1fc3RyZWFtLCBzcGlsbE1lLCAoRGF0YUZv
cm1hdCkoc3BpbGxGb3JtYXQgfCBEYXRhRm9ybWF0SlMpKTsKICAgICAgICAgICAgIHJldHVybjsK
ICNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCkBAIC04NzUsOSArODg5LDkgQEAgcHVibGljOgogI2Vu
ZGlmCiAKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIE1hY3JvQXNzZW1ibGVyOjpJbW1QdHIgdmFs
dWVPZkpTQ29uc3RhbnRBc0ltbVB0cihOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIE1hY3JvQXNz
ZW1ibGVyOjpJbW02NCB2YWx1ZU9mSlNDb25zdGFudEFzSW1tNjQoTm9kZUluZGV4IG5vZGVJbmRl
eCkKICAgICB7Ci0gICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlcjo6SW1tUHRyKEpTVmFsdWU6
OmVuY29kZSh2YWx1ZU9mSlNDb25zdGFudChub2RlSW5kZXgpKSk7CisgICAgICAgIHJldHVybiBN
YWNyb0Fzc2VtYmxlcjo6SW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlT2ZKU0NvbnN0YW50KG5v
ZGVJbmRleCkpKTsKICAgICB9CiAjZW5kaWYKIApAQCAtMTM1OSw2ICsxMzczLDExIEBAIHB1Ymxp
YzoKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEpOwogICAg
ICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRp
b24sIHJlc3VsdCk7CiAgICAgfQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24o
Sl9ERkdPcGVyYXRpb25fRUogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSkK
KyAgICB7CisgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxKTsK
KyAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3Bl
cmF0aW9uLCByZXN1bHQpOworICAgIH0KICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0
aW9uKFNfREZHT3BlcmF0aW9uX0VKSiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBh
cmcxLCBHUFJSZWcgYXJnMikKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0
aEV4ZWNTdGF0ZShhcmcxLCBhcmcyKTsKQEAgLTEzNzQsMTQgKzEzOTMsMTkgQEAgcHVibGljOgog
ICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMik7CiAg
ICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJh
dGlvbiwgcmVzdWx0KTsKICAgICB9CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlv
bihKX0RGR09wZXJhdGlvbl9FSkogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJn
MSwgR1BSUmVnIGFyZzIpCisgICAgeworICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhF
eGVjU3RhdGUoYXJnMSwgYXJnMik7CisgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2Vw
dGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKKyAgICB9CiAgICAgSklUQ29t
cGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FSkogb3BlcmF0aW9uLCBH
UFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMiBp
bW0pCiAgICAgewotICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJn
MSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoc3RhdGljX2Nhc3Q8Y29uc3Qgdm9pZCo+
KEpTVmFsdWU6OmVuY29kZShqc051bWJlcihpbW0ubV92YWx1ZSkpKSkpOworICAgICAgICBtX2pp
dC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoaW1tLm1fdmFsdWUpKSkpOwogICAgICAg
ICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24s
IHJlc3VsdCk7CiAgICAgfQogICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9E
RkdPcGVyYXRpb25fRUpKIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW0zMiBpbW0sIEdQUlJlZyBhcmcyKQogICAgIHsKLSAgICAgICAgbV9qaXQuc2V0
dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHN0
YXRpY19jYXN0PGNvbnN0IHZvaWQqPihKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoaW1tLm1fdmFs
dWUpKSkpLCBhcmcyKTsKKyAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRl
KE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGlt
bS5tX3ZhbHVlKSkpLCBhcmcyKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0
aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KICAgICBKSVRDb21w
aWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VDQyBvcGVyYXRpb24sIEdQ
UlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMikKQEAgLTIwNjMsNiArMjA4Nywy
MCBAQCBwdWJsaWM6CiAgICAgICAgIG5vdFRha2VuLmxpbmsoJm1faml0KTsKICAgICB9CiAgICAg
CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBV
PgorICAgIHZvaWQgYnJhbmNoNjQoSklUQ29tcGlsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24gY29u
ZCwgVCBsZWZ0LCBVIHJpZ2h0LCBCbG9ja0luZGV4IGRlc3RpbmF0aW9uKQorICAgIHsKKyAgICAg
ICAgaWYgKCFoYXZlRWRnZUNvZGVUb0VtaXQoZGVzdGluYXRpb24pKQorICAgICAgICAgICAgcmV0
dXJuIGFkZEJyYW5jaChtX2ppdC5icmFuY2g2NChjb25kLCBsZWZ0LCByaWdodCksIGRlc3RpbmF0
aW9uKTsKKyAgICAgICAgCisgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdFRha2VuID0gbV9q
aXQuYnJhbmNoNjQoSklUQ29tcGlsZXI6OmludmVydChjb25kKSwgbGVmdCwgcmlnaHQpOworICAg
ICAgICBlbWl0RWRnZUNvZGUoZGVzdGluYXRpb24pOworICAgICAgICBhZGRCcmFuY2gobV9qaXQu
anVtcCgpLCBkZXN0aW5hdGlvbik7CisgICAgICAgIG5vdFRha2VuLmxpbmsoJm1faml0KTsKKyAg
ICB9CisjZW5kaWYKKyAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPgog
ICAgIHZvaWQgYnJhbmNoUHRyKEpJVENvbXBpbGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQs
IFQgbGVmdCwgVSByaWdodCwgQmxvY2tJbmRleCBkZXN0aW5hdGlvbikKICAgICB7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaHVua3MuY3BwCShyZXZpc2lvbiAxMzE1NDMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQ0LDggKzQ0LDEzIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBvc3JFeGl0R2VuZXJhdGlv
blQKICAgICBTY3JhdGNoQnVmZmVyKiBzY3JhdGNoQnVmZmVyID0gZ2xvYmFsRGF0YS0+c2NyYXRj
aEJ1ZmZlckZvclNpemUoc2NyYXRjaFNpemUpOwogICAgIEVuY29kZWRKU1ZhbHVlKiBidWZmZXIg
PSBzdGF0aWNfY2FzdDxFbmNvZGVkSlNWYWx1ZSo+KHNjcmF0Y2hCdWZmZXItPmRhdGFCdWZmZXIo
KSk7CiAgICAgCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEdQUkluZm86Om51bWJlck9m
UmVnaXN0ZXJzOyArK2kpCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEdQUkluZm86Om51
bWJlck9mUmVnaXN0ZXJzOyArK2kpIHsKKyNpZiBDUFUoWDg2XzY0KQorICAgICAgICBqaXQuc3Rv
cmU2NChHUFJJbmZvOjp0b1JlZ2lzdGVyKGkpLCBidWZmZXIgKyBpKTsKKyNlbHNlCiAgICAgICAg
IGppdC5zdG9yZVB0cihHUFJJbmZvOjp0b1JlZ2lzdGVyKGkpLCBidWZmZXIgKyBpKTsKKyNlbmRp
ZgorICAgIH0KICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgRlBSSW5mbzo6bnVtYmVyT2ZS
ZWdpc3RlcnM7ICsraSkgewogICAgICAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbVB0cihidWZmZXIgKyBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycyArIGkpLCBHUFJJbmZv
OjpyZWdUMCk7CiAgICAgICAgIGppdC5zdG9yZURvdWJsZShGUFJJbmZvOjp0b1JlZ2lzdGVyKGkp
LCBHUFJJbmZvOjpyZWdUMCk7CkBAIC03MSw4ICs3NiwxMyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYgb3NyRXhpdEdlbmVyYXRpb25UCiAgICAgICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tUHRyKGJ1ZmZlciArIEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzICsgaSksIEdQ
UkluZm86OnJlZ1QwKTsKICAgICAgICAgaml0LmxvYWREb3VibGUoR1BSSW5mbzo6cmVnVDAsIEZQ
UkluZm86OnRvUmVnaXN0ZXIoaSkpOwogICAgIH0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7ICsraSkKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7ICsraSkgeworI2lmIENQVShYODZf
NjQpCisgICAgICAgIGppdC5sb2FkNjQoYnVmZmVyICsgaSwgR1BSSW5mbzo6dG9SZWdpc3Rlcihp
KSk7CisjZWxzZQogICAgICAgICBqaXQubG9hZFB0cihidWZmZXIgKyBpLCBHUFJJbmZvOjp0b1Jl
Z2lzdGVyKGkpKTsKKyNlbmRpZgorICAgIH0KICAgICAKICAgICBqaXQuanVtcChNYWNyb0Fzc2Vt
Ymxlcjo6QWJzb2x1dGVBZGRyZXNzKCZnbG9iYWxEYXRhLT5vc3JFeGl0SnVtcERlc3RpbmF0aW9u
KSk7CiAgICAgCkBAIC0xMTUsNyArMTI1LDExIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiB0aHJv
d0V4Y2VwdGlvbkZyb20KICAgICAgICAgICAgIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLAog
ICAgICAgICAgICAgc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoUmVnaXN0ZXIpKSAqIEpT
U3RhY2s6OkNhbGxlckZyYW1lKSwKICAgICAgICAgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIp
OworI2lmIENQVShYODZfNjQpCisgICAgaml0LnBlZWs2NChHUFJJbmZvOjpub25QcmVzZXJ2ZWRO
b25SZXR1cm5HUFIsIEpJVFNUQUNLRlJBTUVfQVJHU19JTkRFWCk7CisjZWxzZQogICAgIGppdC5w
ZWVrKEdQUkluZm86Om5vblByZXNlcnZlZE5vblJldHVybkdQUiwgSklUU1RBQ0tGUkFNRV9BUkdT
X0lOREVYKTsKKyNlbmRpZgogICAgIGppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoR1BS
SW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSKTsKICAgICBqaXQubW92ZShDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW1QdHIoYml0d2lzZV9jYXN0PHZvaWQqPihsb29rdXBFeGNlcHRpb25IYW5k
bGVyKSksIEdQUkluZm86Om5vbkFyZ0dQUjApOwogICAgIGVtaXRQb2ludGVyVmFsaWRhdGlvbihq
aXQsIEdQUkluZm86Om5vbkFyZ0dQUjApOwpAQCAtMTM4LDcgKzE1MiwxMSBAQCBzdGF0aWMgdm9p
ZCBzbG93UGF0aEZvcigKICAgICAgICAgICAgIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLAog
ICAgICAgICAgICAgc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoUmVnaXN0ZXIpKSAqIEpT
U3RhY2s6OlJldHVyblBDKSk7CiAgICAgaml0LnN0b3JlUHRyKEdQUkluZm86OmNhbGxGcmFtZVJl
Z2lzdGVyLCAmZ2xvYmFsRGF0YS0+dG9wQ2FsbEZyYW1lKTsKKyNpZiBDUFUoWDg2XzY0KQorICAg
IGppdC5wb2tlNjQoR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSLCBKSVRTVEFDS0ZS
QU1FX0FSR1NfSU5ERVgpOworI2Vsc2UKICAgICBqaXQucG9rZShHUFJJbmZvOjpub25QcmVzZXJ2
ZWROb25SZXR1cm5HUFIsIEpJVFNUQUNLRlJBTUVfQVJHU19JTkRFWCk7CisjZW5kaWYKICAgICBq
aXQuc2V0dXBBcmd1bWVudHNFeGVjU3RhdGUoKTsKICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW1QdHIoYml0d2lzZV9jYXN0PHZvaWQqPihzbG93UGF0aEZ1bmN0aW9uKSksIEdQ
UkluZm86Om5vbkFyZ0dQUjApOwogICAgIGVtaXRQb2ludGVyVmFsaWRhdGlvbihqaXQsIEdQUklu
Zm86Om5vbkFyZ0dQUjApOwpAQCAtMjExLDcgKzIyOSw3IEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWYgdmlydHVhbEZvclQKICAgICAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIHNsb3dD
YXNlLmFwcGVuZCgKLSAgICAgICAgaml0LmJyYW5jaFRlc3RQdHIoCisgICAgICAgIGppdC5icmFu
Y2hUZXN0NjQoCiAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vblplcm8sIEdQUkluZm86Om5v
bkFyZ0dQUjAsIEdQUkluZm86OnRhZ01hc2tSZWdpc3RlcikpOwogI2Vsc2UKICAgICBzbG93Q2Fz
ZS5hcHBlbmQoCkBAIC0yNDUsNyArMjYzLDcgQEAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZiB2aXJ0dWFsRm9yVAogICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6bm9u
QXJnR1BSMCwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZTY29wZUNoYWluKCkpLAogICAgICAgICBHUFJJ
bmZvOjpub25BcmdHUFIxKTsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGppdC5zdG9yZVB0cigK
KyAgICBqaXQuc3RvcmU2NCgKICAgICAgICAgR1BSSW5mbzo6bm9uQXJnR1BSMSwKICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpBZGRyZXNzKAogICAgICAgICAgICAgR1BSSW5mbzo6Y2FsbEZyYW1lUmVn
aXN0ZXIsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9J
bnRlcnByZXRlci5jcHAJKHJldmlzaW9uIDEzMTU0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwNywxMSAr
MzA3LDcgQEAgdm9pZCBJbnRlcnByZXRlcjo6ZHVtcFJlZ2lzdGVycyhDYWxsRnJhbQogICAgICAg
ICBKU1ZhbHVlIHYgPSBpdC0+anNWYWx1ZSgpOwogICAgICAgICBpbnQgcmVnaXN0ZXJOdW1iZXIg
PSBpdCAtIGNhbGxGcmFtZS0+cmVnaXN0ZXJzKCk7CiAgICAgICAgIFN0cmluZyBuYW1lID0gY29k
ZUJsb2NrLT5uYW1lRm9yUmVnaXN0ZXIocmVnaXN0ZXJOdW1iZXIpOwotI2lmIFVTRShKU1ZBTFVF
MzJfNjQpCi0gICAgICAgIGRhdGFMb2coIltyJSAzZCAlMTRzXSAgICAgIHwgJTEwcCB8ICUtMTZz
IDB4JWxseCBcbiIsIHJlZ2lzdGVyTnVtYmVyLCBuYW1lLmFzY2lpKCkuZGF0YSgpLCBpdCwgdi5k
ZXNjcmlwdGlvbigpLCBKU1ZhbHVlOjplbmNvZGUodikpOwotI2Vsc2UKLSAgICAgICAgZGF0YUxv
ZygiW3IlIDNkICUxNHNdICAgICAgfCAlMTBwIHwgJS0xNnMgJXAgXG4iLCByZWdpc3Rlck51bWJl
ciwgbmFtZS5hc2NpaSgpLmRhdGEoKSwgaXQsIHYuZGVzY3JpcHRpb24oKSwgSlNWYWx1ZTo6ZW5j
b2RlKHYpKTsKLSNlbmRpZgorICAgICAgICBkYXRhTG9nKCJbciUgM2QgJTE0c10gICAgICB8ICUx
MHAgfCAlLTE2cyAweCVsbGQgXG4iLCByZWdpc3Rlck51bWJlciwgbmFtZS5hc2NpaSgpLmRhdGEo
KSwgaXQsIHYuZGVzY3JpcHRpb24oKSwgKGxvbmcgbG9uZylKU1ZhbHVlOjplbmNvZGUodikpOwog
ICAgICAgICBpdCsrOwogICAgIH0KICAgICAKQEAgLTM0NiwxMSArMzQyLDcgQEAgdm9pZCBJbnRl
cnByZXRlcjo6ZHVtcFJlZ2lzdGVycyhDYWxsRnJhbQogICAgICAgICAgICAgSlNWYWx1ZSB2ID0g
aXQtPmpzVmFsdWUoKTsKICAgICAgICAgICAgIGludCByZWdpc3Rlck51bWJlciA9IGl0IC0gY2Fs
bEZyYW1lLT5yZWdpc3RlcnMoKTsKICAgICAgICAgICAgIFN0cmluZyBuYW1lID0gY29kZUJsb2Nr
LT5uYW1lRm9yUmVnaXN0ZXIocmVnaXN0ZXJOdW1iZXIpOwotI2lmIFVTRShKU1ZBTFVFMzJfNjQp
Ci0gICAgICAgICAgICBkYXRhTG9nKCJbciUgM2QgJTE0c10gICAgICB8ICUxMHAgfCAlLTE2cyAw
eCVsbHggXG4iLCByZWdpc3Rlck51bWJlciwgbmFtZS5hc2NpaSgpLmRhdGEoKSwgaXQsIHYuZGVz
Y3JpcHRpb24oKSwgSlNWYWx1ZTo6ZW5jb2RlKHYpKTsKLSNlbHNlCi0gICAgICAgICAgICBkYXRh
TG9nKCJbciUgM2QgJTE0c10gICAgICB8ICUxMHAgfCAlLTE2cyAlcCBcbiIsIHJlZ2lzdGVyTnVt
YmVyLCBuYW1lLmFzY2lpKCkuZGF0YSgpLCBpdCwgdi5kZXNjcmlwdGlvbigpLCBKU1ZhbHVlOjpl
bmNvZGUodikpOwotI2VuZGlmCisgICAgICAgICAgICBkYXRhTG9nKCJbciUgM2QgJTE0c10gICAg
ICB8ICUxMHAgfCAlLTE2cyAweCVsbGQgXG4iLCByZWdpc3Rlck51bWJlciwgbmFtZS5hc2NpaSgp
LmRhdGEoKSwgaXQsIHYuZGVzY3JpcHRpb24oKSwgKGxvbmcgbG9uZylKU1ZhbHVlOjplbmNvZGUo
dikpOwogICAgICAgICAgICAgKytpdDsKICAgICAgICAgICAgICsrcmVnaXN0ZXJDb3VudDsKICAg
ICAgICAgfSB3aGlsZSAoaXQgIT0gZW5kKTsKQEAgLTM2MSwxMSArMzUzLDcgQEAgdm9pZCBJbnRl
cnByZXRlcjo6ZHVtcFJlZ2lzdGVycyhDYWxsRnJhbQogICAgIGlmIChpdCAhPSBlbmQpIHsKICAg
ICAgICAgZG8gewogICAgICAgICAgICAgSlNWYWx1ZSB2ID0gKCppdCkuanNWYWx1ZSgpOwotI2lm
IFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAgICAgICBkYXRhTG9nKCJbciUgM2RdICAgICAgICAg
ICAgICAgICAgICAgfCAlMTBwIHwgJS0xNnMgMHglbGx4IFxuIiwgcmVnaXN0ZXJDb3VudCwgaXQs
IHYuZGVzY3JpcHRpb24oKSwgSlNWYWx1ZTo6ZW5jb2RlKHYpKTsKLSNlbHNlCi0gICAgICAgICAg
ICBkYXRhTG9nKCJbciUgM2RdICAgICAgICAgICAgICAgICAgICAgfCAlMTBwIHwgJS0xNnMgJXAg
XG4iLCByZWdpc3RlckNvdW50LCBpdCwgdi5kZXNjcmlwdGlvbigpLCBKU1ZhbHVlOjplbmNvZGUo
dikpOwotI2VuZGlmCisgICAgICAgICAgICBkYXRhTG9nKCJbciUgM2RdICAgICAgICAgICAgICAg
ICAgICAgfCAlMTBwIHwgJS0xNnMgMHglbGxkIFxuIiwgcmVnaXN0ZXJDb3VudCwgaXQsIHYuZGVz
Y3JpcHRpb24oKSwgKGxvbmcgbG9uZylKU1ZhbHVlOjplbmNvZGUodikpOwogICAgICAgICAgICAg
KytpdDsKICAgICAgICAgICAgICsrcmVnaXN0ZXJDb3VudDsKICAgICAgICAgfSB3aGlsZSAoaXQg
IT0gZW5kKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDEzMTU0
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjY2LDcgKzY2Niw3IEBAIEpJVENvZGUgSklUOjpwcml2YXRlQ29tcGlsZShDb2RlUHRyKiBm
dW4KICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgaW50IG9m
ZnNldCA9IENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXRJbmNsdWRpbmdUaGlzKGFyZ3VtZW50KSAq
IHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSk7CiAjaWYgVVNFKEpTVkFMVUU2NCkK
LSAgICAgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIG9mZnNl
dCksIHJlZ1QwKTsKKyAgICAgICAgICAgICAgICBsb2FkNjQoQWRkcmVzcyhjYWxsRnJhbWVSZWdp
c3Rlciwgb2Zmc2V0KSwgcmVnVDApOwogI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKICAgICAgICAg
ICAgICAgICBsb2FkMzIoQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3Rlciwgb2Zmc2V0ICsgT0JKRUNU
X09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwgcmVnVDApOwogICAgICAgICAg
ICAgICAgIGxvYWQzMihBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCBvZmZzZXQgKyBPQkpFQ1Rf
T0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksIHJlZ1QxKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVQuaAkocmV2aXNpb24gMTMxNTQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVQuaAkod29ya2luZyBjb3B5KQpAQCAtNTkyLDYgKzU5Miw5IEBAIG5hbWVzcGFjZSBK
U0MgewogI2VuZGlmCiAKICNlbHNlIC8vIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgICAgIC8qIFRo
aXMgZnVuY3Rpb24gaXMgZGVwcmVjYXRlZC4gKi8KKyAgICAgICAgdm9pZCBlbWl0R2V0SklUU3R1
YkFyZyh1bnNpZ25lZCBhcmd1bWVudE51bWJlciwgUmVnaXN0ZXJJRCBkc3QpOworCiAgICAgICAg
IHZvaWQgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbnQgc3JjLCBSZWdpc3RlcklEIGRzdCk7CiAg
ICAgICAgIHZvaWQgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoaW50IHNyYzEsIFJlZ2lzdGVySUQg
ZHN0MSwgaW50IHNyYzIsIFJlZ2lzdGVySUQgZHN0Mik7CiAgICAgICAgIHZvaWQgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcih1bnNpZ25lZCBkc3QsIFJlZ2lzdGVySUQgZnJvbSA9IHJlZ1QwKTsKQEAg
LTgzMyw5ICs4MzYsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0UmlnaHRT
aGlmdChJbnN0cnVjdGlvbiosIGJvb2wgaXNVbnNpZ25lZCk7CiAgICAgICAgIHZvaWQgZW1pdFJp
Z2h0U2hpZnRTbG93Q2FzZShJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImLCBib29sIGlzVW5zaWduZWQpOwogCi0gICAgICAgIC8qIFRoaXMgZnVuY3Rpb24gaXMg
ZGVwcmVjYXRlZC4gKi8KLSAgICAgICAgdm9pZCBlbWl0R2V0SklUU3R1YkFyZyh1bnNpZ25lZCBh
cmd1bWVudE51bWJlciwgUmVnaXN0ZXJJRCBkc3QpOwotCiAgICAgICAgIHZvaWQgZW1pdEluaXRS
ZWdpc3Rlcih1bnNpZ25lZCBkc3QpOwogCiAgICAgICAgIHZvaWQgZW1pdFB1dFRvQ2FsbEZyYW1l
SGVhZGVyKFJlZ2lzdGVySUQgZnJvbSwgSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyRW50cnkpOwpA
QCAtODQ0LDYgKzg0NCw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRQdXRJ
bW1lZGlhdGVUb0NhbGxGcmFtZUhlYWRlcih2b2lkKiB2YWx1ZSwgSlNTdGFjazo6Q2FsbEZyYW1l
SGVhZGVyRW50cnkpOwogICAgICAgICB2b2lkIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRy
KEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlckVudHJ5LCBSZWdpc3RlcklEIHRvLCBSZWdpc3RlcklE
IGZyb20gPSBjYWxsRnJhbWVSZWdpc3Rlcik7CiAgICAgICAgIHZvaWQgZW1pdEdldEZyb21DYWxs
RnJhbWVIZWFkZXIzMihKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJFbnRyeSwgUmVnaXN0ZXJJRCB0
bywgUmVnaXN0ZXJJRCBmcm9tID0gY2FsbEZyYW1lUmVnaXN0ZXIpOworI2lmIFVTRShKU1ZBTFVF
NjQpCisgICAgICAgIHZvaWQgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXI2NChKU1N0YWNrOjpD
YWxsRnJhbWVIZWFkZXJFbnRyeSwgUmVnaXN0ZXJJRCB0bywgUmVnaXN0ZXJJRCBmcm9tID0gY2Fs
bEZyYW1lUmVnaXN0ZXIpOworI2VuZGlmCiAKICAgICAgICAgSlNWYWx1ZSBnZXRDb25zdGFudE9w
ZXJhbmQodW5zaWduZWQgc3JjKTsKICAgICAgICAgYm9vbCBpc09wZXJhbmRDb25zdGFudEltbWVk
aWF0ZUludCh1bnNpZ25lZCBzcmMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRBcml0aG1ldGljLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVEFyaXRobWV0aWMuY3BwCShyZXZpc2lvbiAxMzE1NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDksOCArMjA5
LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmVnYXRlKEluc3RydWN0aW9uKiBjdQogICAgIHNyY05v
dEludC5saW5rKHRoaXMpOwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbWVkaWF0ZU51bWJl
cihyZWdUMCk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIocmVpbnRlcnByZXRfY2FzdDx2b2lk
Kj4oMHg4MDAwMDAwMDAwMDAwMDAwdWxsKSksIHJlZ1QxKTsKLSAgICB4b3JQdHIocmVnVDEsIHJl
Z1QwKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW02NCgoaW50NjRfdCkweDgwMDAwMDAwMDAwMDAwMDB1
bGwpLCByZWdUMSk7CisgICAgeG9yNjQocmVnVDEsIHJlZ1QwKTsKIAogICAgIGVuZC5saW5rKHRo
aXMpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKQEAgLTIyNCw3ICsyMjQsNyBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmVnYXRlKEluc3RydWN0aW9uCiAgICAgbGlua1Nsb3dD
YXNlKGl0ZXIpOyAvLyBkb3VibGUgY2hlY2sKIAogICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRo
aXMsIGN0aV9vcF9uZWdhdGUpOwotICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KHJlZ1QxLCByZWdU
MCk7CisgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQocmVnVDApOwogICAgIHN0dWJDYWxsLmNhbGwo
ZHN0KTsKIH0KIApAQCAtMjc5LDggKzI3OSw4IEBAIHZvaWQgSklUOjplbWl0X29wX3JzaGlmdChJ
bnN0cnVjdGlvbiogY3UKICAgICAgICAgICAgIEp1bXAgbGhzSXNJbnQgPSBlbWl0SnVtcElmSW1t
ZWRpYXRlSW50ZWdlcihyZWdUMCk7CiAgICAgICAgICAgICAvLyBzdXBwb3J0c0Zsb2F0aW5nUG9p
bnQoKSAmJiBVU0UoSlNWQUxVRTY0KSA9PiAzIFNsb3dDYXNlcwogICAgICAgICAgICAgYWRkU2xv
d0Nhc2UoZW1pdEp1bXBJZk5vdEltbWVkaWF0ZU51bWJlcihyZWdUMCkpOwotICAgICAgICAgICAg
YWRkUHRyKHRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgcmVnVDApOwotICAgICAgICAgICAgbW92ZVB0
clRvRG91YmxlKHJlZ1QwLCBmcFJlZ1QwKTsKKyAgICAgICAgICAgIGFkZDY0KHRhZ1R5cGVOdW1i
ZXJSZWdpc3RlciwgcmVnVDApOworICAgICAgICAgICAgbW92ZTY0VG9Eb3VibGUocmVnVDAsIGZw
UmVnVDApOwogICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVHJ1bmNhdGVEb3VibGVUb0lu
dDMyKGZwUmVnVDAsIHJlZ1QwKSk7CiAgICAgICAgICAgICBsaHNJc0ludC5saW5rKHRoaXMpOwog
ICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tZWRpYXRlSW50ZWdlcihyZWdUMik7
CkBAIC0zNzcsOCArMzc3LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3Vyc2hpZnQoSW5zdHJ1
Y3RpbwogICAgICAgICBpZiAoc3VwcG9ydHNGbG9hdGluZ1BvaW50VHJ1bmNhdGUoKSkgewogICAg
ICAgICAgICAgSnVtcExpc3QgZmFpbHVyZXM7CiAgICAgICAgICAgICBmYWlsdXJlcy5hcHBlbmQo
ZW1pdEp1bXBJZk5vdEltbWVkaWF0ZU51bWJlcihyZWdUMCkpOyAvLyBvcDEgaXMgbm90IGEgZG91
YmxlCi0gICAgICAgICAgICBhZGRQdHIodGFnVHlwZU51bWJlclJlZ2lzdGVyLCByZWdUMCk7Ci0g
ICAgICAgICAgICBtb3ZlUHRyVG9Eb3VibGUocmVnVDAsIGZwUmVnVDApOworICAgICAgICAgICAg
YWRkNjQodGFnVHlwZU51bWJlclJlZ2lzdGVyLCByZWdUMCk7CisgICAgICAgICAgICBtb3ZlNjRU
b0RvdWJsZShyZWdUMCwgZnBSZWdUMCk7CiAgICAgICAgICAgICBmYWlsdXJlcy5hcHBlbmQoYnJh
bmNoVHJ1bmNhdGVEb3VibGVUb0ludDMyKGZwUmVnVDAsIHJlZ1QwKSk7CiAgICAgICAgICAgICBp
ZiAoc2hpZnQpCiAgICAgICAgICAgICAgICAgdXJzaGlmdDMyKEltbTMyKHNoaWZ0ICYgMHgxZiks
IHJlZ1QwKTsKQEAgLTM5OSw4ICszOTksOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdXJzaGlm
dChJbnN0cnVjdGlvCiAgICAgICAgICAgICBpZiAoc3VwcG9ydHNGbG9hdGluZ1BvaW50VHJ1bmNh
dGUoKSkgewogICAgICAgICAgICAgICAgIEp1bXBMaXN0IGZhaWx1cmVzOwogICAgICAgICAgICAg
ICAgIGZhaWx1cmVzLmFwcGVuZChlbWl0SnVtcElmTm90SW1tZWRpYXRlTnVtYmVyKHJlZ1QwKSk7
IC8vIG9wMSBpcyBub3QgYSBkb3VibGUKLSAgICAgICAgICAgICAgICBhZGRQdHIodGFnVHlwZU51
bWJlclJlZ2lzdGVyLCByZWdUMCk7Ci0gICAgICAgICAgICAgICAgbW92ZVB0clRvRG91YmxlKHJl
Z1QwLCBmcFJlZ1QwKTsKKyAgICAgICAgICAgICAgICBhZGQ2NCh0YWdUeXBlTnVtYmVyUmVnaXN0
ZXIsIHJlZ1QwKTsKKyAgICAgICAgICAgICAgICBtb3ZlNjRUb0RvdWJsZShyZWdUMCwgZnBSZWdU
MCk7CiAgICAgICAgICAgICAgICAgZmFpbHVyZXMuYXBwZW5kKGJyYW5jaFRydW5jYXRlRG91Ymxl
VG9JbnQzMihmcFJlZ1QwLCByZWdUMCkpOwogICAgICAgICAgICAgICAgIGZhaWx1cmVzLmFwcGVu
ZChlbWl0SnVtcElmTm90SW1tZWRpYXRlSW50ZWdlcihyZWdUMSkpOyAvLyBvcDIgaXMgbm90IGFu
IGludAogICAgICAgICAgICAgICAgIGVtaXRGYXN0QXJpdGhJbW1Ub0ludChyZWdUMSk7CkBAIC00
OTksOCArNDk5LDggQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93KHVuc2lnbgog
CiAgICAgICAgIGlmIChzdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSkgewogICAgICAgICAgICAgSnVt
cCBmYWlsMSA9IGVtaXRKdW1wSWZOb3RJbW1lZGlhdGVOdW1iZXIocmVnVDApOwotICAgICAgICAg
ICAgYWRkUHRyKHRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgcmVnVDApOwotICAgICAgICAgICAgbW92
ZVB0clRvRG91YmxlKHJlZ1QwLCBmcFJlZ1QwKTsKKyAgICAgICAgICAgIGFkZDY0KHRhZ1R5cGVO
dW1iZXJSZWdpc3RlciwgcmVnVDApOworICAgICAgICAgICAgbW92ZTY0VG9Eb3VibGUocmVnVDAs
IGZwUmVnVDApOwogCiAgICAgICAgICAgICBpbnQzMl90IG9wMmltbSA9IGdldENvbnN0YW50T3Bl
cmFuZChvcDIpLmFzSW50MzIoKTsKIApAQCAtNTI1LDggKzUyNSw4IEBAIHZvaWQgSklUOjplbWl0
X2NvbXBhcmVBbmRKdW1wU2xvdyh1bnNpZ24KIAogICAgICAgICBpZiAoc3VwcG9ydHNGbG9hdGlu
Z1BvaW50KCkpIHsKICAgICAgICAgICAgIEp1bXAgZmFpbDEgPSBlbWl0SnVtcElmTm90SW1tZWRp
YXRlTnVtYmVyKHJlZ1QxKTsKLSAgICAgICAgICAgIGFkZFB0cih0YWdUeXBlTnVtYmVyUmVnaXN0
ZXIsIHJlZ1QxKTsKLSAgICAgICAgICAgIG1vdmVQdHJUb0RvdWJsZShyZWdUMSwgZnBSZWdUMSk7
CisgICAgICAgICAgICBhZGQ2NCh0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHJlZ1QxKTsKKyAgICAg
ICAgICAgIG1vdmU2NFRvRG91YmxlKHJlZ1QxLCBmcFJlZ1QxKTsKIAogICAgICAgICAgICAgaW50
MzJfdCBvcDFpbW0gPSBnZXRDb25zdGFudE9wZXJhbmQob3AxKS5hc0ludDMyKCk7CiAKQEAgLTU1
MiwxMCArNTUyLDEwIEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyh1bnNpZ24K
ICAgICAgICAgICAgIEp1bXAgZmFpbDEgPSBlbWl0SnVtcElmTm90SW1tZWRpYXRlTnVtYmVyKHJl
Z1QwKTsKICAgICAgICAgICAgIEp1bXAgZmFpbDIgPSBlbWl0SnVtcElmTm90SW1tZWRpYXRlTnVt
YmVyKHJlZ1QxKTsKICAgICAgICAgICAgIEp1bXAgZmFpbDMgPSBlbWl0SnVtcElmSW1tZWRpYXRl
SW50ZWdlcihyZWdUMSk7Ci0gICAgICAgICAgICBhZGRQdHIodGFnVHlwZU51bWJlclJlZ2lzdGVy
LCByZWdUMCk7Ci0gICAgICAgICAgICBhZGRQdHIodGFnVHlwZU51bWJlclJlZ2lzdGVyLCByZWdU
MSk7Ci0gICAgICAgICAgICBtb3ZlUHRyVG9Eb3VibGUocmVnVDAsIGZwUmVnVDApOwotICAgICAg
ICAgICAgbW92ZVB0clRvRG91YmxlKHJlZ1QxLCBmcFJlZ1QxKTsKKyAgICAgICAgICAgIGFkZDY0
KHRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgcmVnVDApOworICAgICAgICAgICAgYWRkNjQodGFnVHlw
ZU51bWJlclJlZ2lzdGVyLCByZWdUMSk7CisgICAgICAgICAgICBtb3ZlNjRUb0RvdWJsZShyZWdU
MCwgZnBSZWdUMCk7CisgICAgICAgICAgICBtb3ZlNjRUb0RvdWJsZShyZWdUMSwgZnBSZWdUMSk7
CiAKICAgICAgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaERvdWJsZShjb25kaXRpb24s
IGZwUmVnVDAsIGZwUmVnVDEpLCB0YXJnZXQpOwogCkBAIC01ODUsMTkgKzU4NSwxOSBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9iaXRhbmQoSW5zdHJ1Y3Rpb24qIGN1CiAgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIob3AyLCByZWdUMCk7CiAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdElt
bWVkaWF0ZUludGVnZXIocmVnVDApOwogICAgICAgICBpbnQzMl90IGltbSA9IGdldENvbnN0YW50
T3BlcmFuZEltbWVkaWF0ZUludChvcDEpOwotICAgICAgICBhbmRQdHIoSW1tMzIoaW1tKSwgcmVn
VDApOworICAgICAgICBhbmQ2NChJbW0zMihpbW0pLCByZWdUMCk7CiAgICAgICAgIGlmIChpbW0g
Pj0gMCkKICAgICAgICAgICAgIGVtaXRGYXN0QXJpdGhJbnRUb0ltbU5vQ2hlY2socmVnVDAsIHJl
Z1QwKTsKICAgICB9IGVsc2UgaWYgKGlzT3BlcmFuZENvbnN0YW50SW1tZWRpYXRlSW50KG9wMikp
IHsKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QwKTsKICAgICAgICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tZWRpYXRlSW50ZWdlcihyZWdUMCk7CiAgICAgICAgIGlu
dDMyX3QgaW1tID0gZ2V0Q29uc3RhbnRPcGVyYW5kSW1tZWRpYXRlSW50KG9wMik7Ci0gICAgICAg
IGFuZFB0cihJbW0zMihpbW0pLCByZWdUMCk7CisgICAgICAgIGFuZDY0KEltbTMyKGltbSksIHJl
Z1QwKTsKICAgICAgICAgaWYgKGltbSA+PSAwKQogICAgICAgICAgICAgZW1pdEZhc3RBcml0aElu
dFRvSW1tTm9DaGVjayhyZWdUMCwgcmVnVDApOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXJzKG9wMSwgcmVnVDAsIG9wMiwgcmVnVDEpOwotICAgICAgICBhbmRQ
dHIocmVnVDEsIHJlZ1QwKTsKKyAgICAgICAgYW5kNjQocmVnVDEsIHJlZ1QwKTsKICAgICAgICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tZWRpYXRlSW50ZWdlcihyZWdUMCk7CiAgICAgfQogICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0KTsKQEAgLTg4NywxNiArODg3LDE2IEBAIHZv
aWQgSklUOjpjb21waWxlQmluYXJ5QXJpdGhPcFNsb3dDYXNlKE8KICAgICAgICAgICAgIGVtaXRK
dW1wSWZOb3RJbW1lZGlhdGVOdW1iZXIocmVnVDApLmxpbmtUbyhzdHViRnVuY3Rpb25DYWxsLCB0
aGlzKTsKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QxKTsKICAgICAg
ICAgY29udmVydEludDMyVG9Eb3VibGUocmVnVDEsIGZwUmVnVDEpOwotICAgICAgICBhZGRQdHIo
dGFnVHlwZU51bWJlclJlZ2lzdGVyLCByZWdUMCk7Ci0gICAgICAgIG1vdmVQdHJUb0RvdWJsZShy
ZWdUMCwgZnBSZWdUMik7CisgICAgICAgIGFkZDY0KHRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgcmVn
VDApOworICAgICAgICBtb3ZlNjRUb0RvdWJsZShyZWdUMCwgZnBSZWdUMik7CiAgICAgfSBlbHNl
IGlmIChvcDJIYXNJbW1lZGlhdGVJbnRGYXN0Q2FzZSkgewogICAgICAgICBub3RJbW0xLmxpbmso
dGhpcyk7CiAgICAgICAgIGlmICghdHlwZXMuZmlyc3QoKS5kZWZpbml0ZWx5SXNOdW1iZXIoKSkK
ICAgICAgICAgICAgIGVtaXRKdW1wSWZOb3RJbW1lZGlhdGVOdW1iZXIocmVnVDApLmxpbmtUbyhz
dHViRnVuY3Rpb25DYWxsLCB0aGlzKTsKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihv
cDIsIHJlZ1QxKTsKICAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUocmVnVDEsIGZwUmVnVDEp
OwotICAgICAgICBhZGRQdHIodGFnVHlwZU51bWJlclJlZ2lzdGVyLCByZWdUMCk7Ci0gICAgICAg
IG1vdmVQdHJUb0RvdWJsZShyZWdUMCwgZnBSZWdUMik7CisgICAgICAgIGFkZDY0KHRhZ1R5cGVO
dW1iZXJSZWdpc3RlciwgcmVnVDApOworICAgICAgICBtb3ZlNjRUb0RvdWJsZShyZWdUMCwgZnBS
ZWdUMik7CiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gaWYgd2UgZ2V0IGhlcmUsIGVheCBpcyBu
b3QgYW4gaW50MzIsIGVkeCBub3QgeWV0IGNoZWNrZWQuCiAgICAgICAgIG5vdEltbTEubGluayh0
aGlzKTsKQEAgLTkwNCw4ICs5MDQsOCBAQCB2b2lkIEpJVDo6Y29tcGlsZUJpbmFyeUFyaXRoT3BT
bG93Q2FzZShPCiAgICAgICAgICAgICBlbWl0SnVtcElmTm90SW1tZWRpYXRlTnVtYmVyKHJlZ1Qw
KS5saW5rVG8oc3R1YkZ1bmN0aW9uQ2FsbCwgdGhpcyk7CiAgICAgICAgIGlmICghdHlwZXMuc2Vj
b25kKCkuZGVmaW5pdGVseUlzTnVtYmVyKCkpCiAgICAgICAgICAgICBlbWl0SnVtcElmTm90SW1t
ZWRpYXRlTnVtYmVyKHJlZ1QxKS5saW5rVG8oc3R1YkZ1bmN0aW9uQ2FsbCwgdGhpcyk7Ci0gICAg
ICAgIGFkZFB0cih0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHJlZ1QwKTsKLSAgICAgICAgbW92ZVB0
clRvRG91YmxlKHJlZ1QwLCBmcFJlZ1QxKTsKKyAgICAgICAgYWRkNjQodGFnVHlwZU51bWJlclJl
Z2lzdGVyLCByZWdUMCk7CisgICAgICAgIG1vdmU2NFRvRG91YmxlKHJlZ1QwLCBmcFJlZ1QxKTsK
ICAgICAgICAgSnVtcCBvcDJpc0RvdWJsZSA9IGVtaXRKdW1wSWZOb3RJbW1lZGlhdGVJbnRlZ2Vy
KHJlZ1QxKTsKICAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUocmVnVDEsIGZwUmVnVDIpOwog
ICAgICAgICBKdW1wIG9wMndhc0ludGVnZXIgPSBqdW1wKCk7CkBAIC05MTYsOCArOTE2LDggQEAg
dm9pZCBKSVQ6OmNvbXBpbGVCaW5hcnlBcml0aE9wU2xvd0Nhc2UoTwogICAgICAgICAgICAgZW1p
dEp1bXBJZk5vdEltbWVkaWF0ZU51bWJlcihyZWdUMSkubGlua1RvKHN0dWJGdW5jdGlvbkNhbGws
IHRoaXMpOwogICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShyZWdUMCwgZnBSZWdUMSk7CiAg
ICAgICAgIG9wMmlzRG91YmxlLmxpbmsodGhpcyk7Ci0gICAgICAgIGFkZFB0cih0YWdUeXBlTnVt
YmVyUmVnaXN0ZXIsIHJlZ1QxKTsKLSAgICAgICAgbW92ZVB0clRvRG91YmxlKHJlZ1QxLCBmcFJl
Z1QyKTsKKyAgICAgICAgYWRkNjQodGFnVHlwZU51bWJlclJlZ2lzdGVyLCByZWdUMSk7CisgICAg
ICAgIG1vdmU2NFRvRG91YmxlKHJlZ1QxLCBmcFJlZ1QyKTsKICAgICAgICAgb3Ayd2FzSW50ZWdl
ci5saW5rKHRoaXMpOwogICAgIH0KIApAQCAtOTMxLDggKzkzMSw4IEBAIHZvaWQgSklUOjpjb21w
aWxlQmluYXJ5QXJpdGhPcFNsb3dDYXNlKE8KICAgICAgICAgQVNTRVJUKG9wY29kZUlEID09IG9w
X2Rpdik7CiAgICAgICAgIGRpdkRvdWJsZShmcFJlZ1QyLCBmcFJlZ1QxKTsKICAgICB9Ci0gICAg
bW92ZURvdWJsZVRvUHRyKGZwUmVnVDEsIHJlZ1QwKTsKLSAgICBzdWJQdHIodGFnVHlwZU51bWJl
clJlZ2lzdGVyLCByZWdUMCk7CisgICAgbW92ZURvdWJsZVRvNjQoZnBSZWdUMSwgcmVnVDApOwor
ICAgIHN1YjY0KHRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgcmVnVDApOwogICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIocmVzdWx0LCByZWdUMCk7CiAKICAgICBlbmQubGluayh0aGlzKTsKQEAgLTEw
NDEsOCArMTA0MSw4IEBAIHZvaWQgSklUOjplbWl0X29wX2RpdihJbnN0cnVjdGlvbiogY3VycmUK
IAogICAgIGlmIChpc09wZXJhbmRDb25zdGFudEltbWVkaWF0ZURvdWJsZShvcDEpKSB7CiAgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByZWdUMCk7Ci0gICAgICAgIGFkZFB0cih0
YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHJlZ1QwKTsKLSAgICAgICAgbW92ZVB0clRvRG91YmxlKHJl
Z1QwLCBmcFJlZ1QwKTsKKyAgICAgICAgYWRkNjQodGFnVHlwZU51bWJlclJlZ2lzdGVyLCByZWdU
MCk7CisgICAgICAgIG1vdmU2NFRvRG91YmxlKHJlZ1QwLCBmcFJlZ1QwKTsKICAgICB9IGVsc2Ug
aWYgKGlzT3BlcmFuZENvbnN0YW50SW1tZWRpYXRlSW50KG9wMSkpIHsKICAgICAgICAgZW1pdExv
YWRJbnQzMlRvRG91YmxlKG9wMSwgZnBSZWdUMCk7CiAgICAgfSBlbHNlIHsKQEAgLTEwNTMsMTUg
KzEwNTMsMTUgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGl2KEluc3RydWN0aW9uKiBjdXJyZQogICAg
ICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShyZWdUMCwgZnBSZWdUMCk7CiAgICAgICAgIEp1bXAg
c2tpcERvdWJsZUxvYWQgPSBqdW1wKCk7CiAgICAgICAgIG5vdEludC5saW5rKHRoaXMpOwotICAg
ICAgICBhZGRQdHIodGFnVHlwZU51bWJlclJlZ2lzdGVyLCByZWdUMCk7Ci0gICAgICAgIG1vdmVQ
dHJUb0RvdWJsZShyZWdUMCwgZnBSZWdUMCk7CisgICAgICAgIGFkZDY0KHRhZ1R5cGVOdW1iZXJS
ZWdpc3RlciwgcmVnVDApOworICAgICAgICBtb3ZlNjRUb0RvdWJsZShyZWdUMCwgZnBSZWdUMCk7
CiAgICAgICAgIHNraXBEb3VibGVMb2FkLmxpbmsodGhpcyk7CiAgICAgfQogCiAgICAgaWYgKGlz
T3BlcmFuZENvbnN0YW50SW1tZWRpYXRlRG91YmxlKG9wMikpIHsKICAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihvcDIsIHJlZ1QxKTsKLSAgICAgICAgYWRkUHRyKHRhZ1R5cGVOdW1iZXJS
ZWdpc3RlciwgcmVnVDEpOwotICAgICAgICBtb3ZlUHRyVG9Eb3VibGUocmVnVDEsIGZwUmVnVDEp
OworICAgICAgICBhZGQ2NCh0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHJlZ1QxKTsKKyAgICAgICAg
bW92ZTY0VG9Eb3VibGUocmVnVDEsIGZwUmVnVDEpOwogICAgIH0gZWxzZSBpZiAoaXNPcGVyYW5k
Q29uc3RhbnRJbW1lZGlhdGVJbnQob3AyKSkgewogICAgICAgICBlbWl0TG9hZEludDMyVG9Eb3Vi
bGUob3AyLCBmcFJlZ1QxKTsKICAgICB9IGVsc2UgewpAQCAtMTA3Miw4ICsxMDcyLDggQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfZGl2KEluc3RydWN0aW9uKiBjdXJyZQogICAgICAgICBjb252ZXJ0SW50
MzJUb0RvdWJsZShyZWdUMSwgZnBSZWdUMSk7CiAgICAgICAgIEp1bXAgc2tpcERvdWJsZUxvYWQg
PSBqdW1wKCk7CiAgICAgICAgIG5vdEludC5saW5rKHRoaXMpOwotICAgICAgICBhZGRQdHIodGFn
VHlwZU51bWJlclJlZ2lzdGVyLCByZWdUMSk7Ci0gICAgICAgIG1vdmVQdHJUb0RvdWJsZShyZWdU
MSwgZnBSZWdUMSk7CisgICAgICAgIGFkZDY0KHRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgcmVnVDEp
OworICAgICAgICBtb3ZlNjRUb0RvdWJsZShyZWdUMSwgZnBSZWdUMSk7CiAgICAgICAgIHNraXBE
b3VibGVMb2FkLmxpbmsodGhpcyk7CiAgICAgfQogICAgIGRpdkRvdWJsZShmcFJlZ1QxLCBmcFJl
Z1QwKTsKQEAgLTExMDAsMTMgKzExMDAsMTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGl2KEluc3Ry
dWN0aW9uKiBjdXJyZQogICAgIEp1bXAgaXNJbnRlZ2VyID0ganVtcCgpOwogICAgIG5vdEludGVn
ZXIubGluayh0aGlzKTsKICAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIEFic29sdXRlQWRkcmVz
cygmbV9jb2RlQmxvY2stPmFkZFNwZWNpYWxGYXN0Q2FzZVByb2ZpbGUobV9ieXRlY29kZU9mZnNl
dCktPm1fY291bnRlcikpOwotICAgIG1vdmVEb3VibGVUb1B0cihmcFJlZ1QwLCByZWdUMCk7Ci0g
ICAgc3ViUHRyKHRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgcmVnVDApOworICAgIG1vdmVEb3VibGVU
bzY0KGZwUmVnVDAsIHJlZ1QwKTsKKyAgICBzdWI2NCh0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHJl
Z1QwKTsKICAgICBpc0ludGVnZXIubGluayh0aGlzKTsKICNlbHNlCiAgICAgLy8gRG91YmxlIHJl
c3VsdC4KLSAgICBtb3ZlRG91YmxlVG9QdHIoZnBSZWdUMCwgcmVnVDApOwotICAgIHN1YlB0cih0
YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHJlZ1QwKTsKKyAgICBtb3ZlRG91YmxlVG82NChmcFJlZ1Qw
LCByZWdUMCk7CisgICAgc3ViNjQodGFnVHlwZU51bWJlclJlZ2lzdGVyLCByZWdUMCk7CiAjZW5k
aWYKIAogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZWdUMCk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAJKHJldmlzaW9uIDEzMTU0MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcyLDcg
KzcyLDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVMb2FkVmFyYXJncyhJbnN0cnVjdGlvbgogCiAgICAg
aWYgKGNhbk9wdGltaXplKSB7CiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJndW1l
bnRzLCByZWdUMCk7Ci0gICAgICAgIHNsb3dDYXNlLmFwcGVuZChicmFuY2hQdHIoTm90RXF1YWws
IHJlZ1QwLCBUcnVzdGVkSW1tUHRyKEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpKSkpOworICAg
ICAgICBzbG93Q2FzZS5hcHBlbmQoYnJhbmNoNjQoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1t
NjQoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSkpKSk7CiAKICAgICAgICAgZW1pdEdldEZyb21D
YWxsRnJhbWVIZWFkZXIzMihKU1N0YWNrOjpBcmd1bWVudENvdW50LCByZWdUMCk7CiAgICAgICAg
IHNsb3dDYXNlLmFwcGVuZChicmFuY2gzMihBYm92ZSwgcmVnVDAsIFRydXN0ZWRJbW0zMihBcmd1
bWVudHM6Ok1heEFyZ3VtZW50cyArIDEpKSk7CkBAIC05MSwxOCArOTEsMTggQEAgdm9pZCBKSVQ6
OmNvbXBpbGVMb2FkVmFyYXJncyhJbnN0cnVjdGlvbgogCiAgICAgICAgIC8vIEluaXRpYWxpemUg
J3RoaXMnLgogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHRoaXNWYWx1ZSwgcmVnVDIp
OwotICAgICAgICBzdG9yZVB0cihyZWdUMiwgQWRkcmVzcyhyZWdUMSwgQ2FsbEZyYW1lOjp0aGlz
QXJndW1lbnRPZmZzZXQoKSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkpKTsK
KyAgICAgICAgc3RvcmU2NChyZWdUMiwgQWRkcmVzcyhyZWdUMSwgQ2FsbEZyYW1lOjp0aGlzQXJn
dW1lbnRPZmZzZXQoKSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkpKTsKIAog
ICAgICAgICAvLyBDb3B5IGFyZ3VtZW50cy4KICAgICAgICAgbmVnMzIocmVnVDApOwogICAgICAg
ICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMCwgcmVnVDApOwotICAgICAgICBlbmQuYXBwZW5kKGJy
YW5jaEFkZFB0cihaZXJvLCBUcnVzdGVkSW1tMzIoMSksIHJlZ1QwKSk7CisgICAgICAgIGVuZC5h
cHBlbmQoYnJhbmNoQWRkNjQoWmVybywgVHJ1c3RlZEltbTMyKDEpLCByZWdUMCkpOwogICAgICAg
ICAvLyByZWdUMDogLWFyZ3VtZW50Q291bnQKIAogICAgICAgICBMYWJlbCBjb3B5TG9vcCA9IGxh
YmVsKCk7Ci0gICAgICAgIGxvYWRQdHIoQmFzZUluZGV4KGNhbGxGcmFtZVJlZ2lzdGVyLCByZWdU
MCwgVGltZXNFaWdodCwgQ2FsbEZyYW1lOjp0aGlzQXJndW1lbnRPZmZzZXQoKSAqIHN0YXRpY19j
YXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkpLCByZWdUMik7Ci0gICAgICAgIHN0b3JlUHRyKHJl
Z1QyLCBCYXNlSW5kZXgocmVnVDEsIHJlZ1QwLCBUaW1lc0VpZ2h0LCBDYWxsRnJhbWU6OnRoaXNB
cmd1bWVudE9mZnNldCgpICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSkpOwot
ICAgICAgICBicmFuY2hBZGRQdHIoTm9uWmVybywgVHJ1c3RlZEltbTMyKDEpLCByZWdUMCkubGlu
a1RvKGNvcHlMb29wLCB0aGlzKTsKKyAgICAgICAgbG9hZDY0KEJhc2VJbmRleChjYWxsRnJhbWVS
ZWdpc3RlciwgcmVnVDAsIFRpbWVzRWlnaHQsIENhbGxGcmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0
KCkgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpKSwgcmVnVDIpOworICAgICAg
ICBzdG9yZTY0KHJlZ1QyLCBCYXNlSW5kZXgocmVnVDEsIHJlZ1QwLCBUaW1lc0VpZ2h0LCBDYWxs
RnJhbWU6OnRoaXNBcmd1bWVudE9mZnNldCgpICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVn
aXN0ZXIpKSkpOworICAgICAgICBicmFuY2hBZGQ2NChOb25aZXJvLCBUcnVzdGVkSW1tMzIoMSks
IHJlZ1QwKS5saW5rVG8oY29weUxvb3AsIHRoaXMpOwogCiAgICAgICAgIGVuZC5hcHBlbmQoanVt
cCgpKTsKICAgICB9CkBAIC0xMjQsNyArMTI0LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZh
bCgpCiB7CiAgICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wX2NhbGxfZXZhbCk7
IC8vIEluaXRpYWxpemVzIFNjb3BlQ2hhaW47IFJldHVyblBDOyBDb2RlQmxvY2suCiAgICAgc3R1
YkNhbGwuY2FsbCgpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIFRy
dXN0ZWRJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSkpKSk7CisgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKEpT
VmFsdWUoKSkpKSk7CiAgICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoSlNTdGFjazo6
Q2FsbGVyRnJhbWUsIGNhbGxGcmFtZVJlZ2lzdGVyKTsKIAogICAgIHNhbXBsZUNvZGVCbG9jayht
X2NvZGVCbG9jayk7CkBAIC0xMzQsNyArMTM0LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZh
bFNsb3dDYXNlKFZlY3RvcgogewogICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKIAotICAgIGVtaXRH
ZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKEpTU3RhY2s6OkNhbGxlZSwgcmVnVDApOworICAgIGVt
aXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyNjQoSlNTdGFjazo6Q2FsbGVlLCByZWdUMCk7CiAgICAg
ZW1pdE5ha2VkQ2FsbChtX2dsb2JhbERhdGEtPmppdFN0dWJzLT5jdGlWaXJ0dWFsQ2FsbCgpKTsK
IAogICAgIHNhbXBsZUNvZGVCbG9jayhtX2NvZGVCbG9jayk7CkBAIC0xNzksOCArMTc5LDggQEAg
dm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoT3Bjb2RlSUQgb3Bjb2RlSQogICAgIHN0b3JlMzIoVHJ1
c3RlZEltbTMyKGluc3RydWN0aW9uIC0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmJlZ2lu
KCkpLCBBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCBKU1N0YWNrOjpBcmd1bWVudENvdW50ICog
c3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSArIE9CSkVDVF9PRkZTRVRPRihFbmNv
ZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSkpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoY2FsbGVlLCByZWdUMCk7IC8vIHJlZ1QwIGhvbGRzIGNhbGxlZS4KIAotICAgIHN0b3Jl
UHRyKGNhbGxGcmFtZVJlZ2lzdGVyLCBBZGRyZXNzKHJlZ1QxLCBKU1N0YWNrOjpDYWxsZXJGcmFt
ZSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkpKTsKLSAgICBzdG9yZVB0cihy
ZWdUMCwgQWRkcmVzcyhyZWdUMSwgSlNTdGFjazo6Q2FsbGVlICogc3RhdGljX2Nhc3Q8aW50Pihz
aXplb2YoUmVnaXN0ZXIpKSkpOworICAgIHN0b3JlNjQoY2FsbEZyYW1lUmVnaXN0ZXIsIEFkZHJl
c3MocmVnVDEsIEpTU3RhY2s6OkNhbGxlckZyYW1lICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2Yo
UmVnaXN0ZXIpKSkpOworICAgIHN0b3JlNjQocmVnVDAsIEFkZHJlc3MocmVnVDEsIEpTU3RhY2s6
OkNhbGxlZSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkpKTsKICAgICBtb3Zl
KHJlZ1QxLCBjYWxsRnJhbWVSZWdpc3Rlcik7CiAKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfY2Fs
bF9ldmFsKSB7CkBAIC0xOTAsNyArMTkwLDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoT3Bj
b2RlSUQgb3Bjb2RlSQogCiAgICAgRGF0YUxhYmVsUHRyIGFkZHJlc3NPZkxpbmtlZEZ1bmN0aW9u
Q2hlY2s7CiAgICAgQkVHSU5fVU5JTlRFUlJVUFRFRF9TRVFVRU5DRShzZXF1ZW5jZU9wQ2FsbCk7
Ci0gICAgSnVtcCBzbG93Q2FzZSA9IGJyYW5jaFB0cldpdGhQYXRjaChOb3RFcXVhbCwgcmVnVDAs
IGFkZHJlc3NPZkxpbmtlZEZ1bmN0aW9uQ2hlY2ssIFRydXN0ZWRJbW1QdHIoSlNWYWx1ZTo6ZW5j
b2RlKEpTVmFsdWUoKSkpKTsKKyAgICBKdW1wIHNsb3dDYXNlID0gYnJhbmNoUHRyV2l0aFBhdGNo
KE5vdEVxdWFsLCByZWdUMCwgYWRkcmVzc09mTGlua2VkRnVuY3Rpb25DaGVjaywgVHJ1c3RlZElt
bVB0cigwKSk7CiAgICAgRU5EX1VOSU5URVJSVVBURURfU0VRVUVOQ0Uoc2VxdWVuY2VPcENhbGwp
OwogICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRJbmxpbmVNZXRob2RzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRJbmxpbmVNZXRob2RzLmgJKHJldmlzaW9uIDEzMTU0MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lTWV0aG9kcy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zMSwxNCArMzEsNiBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotLyogRGVwcmVjYXRlZDogUGxl
YXNlIHVzZSBKSVRTdHViQ2FsbCBpbnN0ZWFkLiAqLwotCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklU
OjplbWl0R2V0SklUU3R1YkFyZyh1bnNpZ25lZCBhcmd1bWVudE51bWJlciwgUmVnaXN0ZXJJRCBk
c3QpCi17Ci0gICAgdW5zaWduZWQgYXJndW1lbnRTdGFja09mZnNldCA9IChhcmd1bWVudE51bWJl
ciAqIChzaXplb2YoSlNWYWx1ZSkgLyBzaXplb2Yodm9pZCopKSkgKyBKSVRTVEFDS0ZSQU1FX0FS
R1NfSU5ERVg7Ci0gICAgcGVlayhkc3QsIGFyZ3VtZW50U3RhY2tPZmZzZXQpOwotfQotCiBBTFdB
WVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudEltbWVkaWF0ZURvdWJsZSh1bnNp
Z25lZCBzcmMpCiB7CiAgICAgcmV0dXJuIG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJ
bmRleChzcmMpICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzRG91YmxlKCk7CkBAIC01MCwy
MyArNDIsMzMgQEAgQUxXQVlTX0lOTElORSBKU1ZhbHVlIEpJVDo6Z2V0Q29uc3RhbnRPcAogICAg
IHJldHVybiBtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKIH0KIAotQUxXQVlTX0lOTElO
RSB2b2lkIEpJVDo6ZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lzdGVySUQgZnJvbSwgSlNT
dGFjazo6Q2FsbEZyYW1lSGVhZGVyRW50cnkgZW50cnkpCi17Ci0gICAgc3RvcmVQdHIoZnJvbSwg
cGF5bG9hZEZvcihlbnRyeSwgY2FsbEZyYW1lUmVnaXN0ZXIpKTsKLX0KLQogQUxXQVlTX0lOTElO
RSB2b2lkIEpJVDo6ZW1pdFB1dENlbGxUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20s
IEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlckVudHJ5IGVudHJ5KQogewogI2lmIFVTRShKU1ZBTFVF
MzJfNjQpCiAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIHRhZ0Zv
cihlbnRyeSwgY2FsbEZyYW1lUmVnaXN0ZXIpKTsKKyAgICBzdG9yZTMyKGZyb20sIHBheWxvYWRG
b3IoZW50cnksIGNhbGxGcmFtZVJlZ2lzdGVyKSk7CisjZWxzZQorICAgIHN0b3JlNjQoZnJvbSwg
YWRkcmVzc0ZvcihlbnRyeSwgY2FsbEZyYW1lUmVnaXN0ZXIpKTsKICNlbmRpZgotICAgIHN0b3Jl
UHRyKGZyb20sIHBheWxvYWRGb3IoZW50cnksIGNhbGxGcmFtZVJlZ2lzdGVyKSk7CiB9CiAKIEFM
V0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRJbnRUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3Rl
cklEIGZyb20sIEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlckVudHJ5IGVudHJ5KQogeworI2lmIFVT
RShKU1ZBTFVFMzJfNjQpCiAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoSW50MzJUYWcpLCBpbnRU
YWdGb3IoZW50cnksIGNhbGxGcmFtZVJlZ2lzdGVyKSk7CiAgICAgc3RvcmUzMihmcm9tLCBpbnRQ
YXlsb2FkRm9yKGVudHJ5LCBjYWxsRnJhbWVSZWdpc3RlcikpOworI2Vsc2UKKyAgICBzdG9yZTY0
KGZyb20sIGFkZHJlc3NGb3IoZW50cnksIGNhbGxGcmFtZVJlZ2lzdGVyKSk7CisjZW5kaWYKK30K
KworQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lz
dGVySUQgZnJvbSwgSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyRW50cnkgZW50cnkpCit7CisjaWYg
VVNFKEpTVkFMVUUzMl82NCkKKyAgICBzdG9yZVB0cihmcm9tLCBwYXlsb2FkRm9yKGVudHJ5LCBj
YWxsRnJhbWVSZWdpc3RlcikpOworI2Vsc2UKKyAgICBzdG9yZTY0KGZyb20sIGFkZHJlc3NGb3Io
ZW50cnksIGNhbGxGcmFtZVJlZ2lzdGVyKSk7CisjZW5kaWYKIH0KIAogQUxXQVlTX0lOTElORSB2
b2lkIEpJVDo6ZW1pdFB1dEltbWVkaWF0ZVRvQ2FsbEZyYW1lSGVhZGVyKHZvaWQqIHZhbHVlLCBK
U1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJFbnRyeSBlbnRyeSkKQEAgLTgyLDYgKzg0LDIyIEBAIEFM
V0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRGcm9tQ2FsbEYKICNlbmRpZgogfQogCitBTFdB
WVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlcjMyKEpTU3RhY2s6
OkNhbGxGcmFtZUhlYWRlckVudHJ5IGVudHJ5LCBSZWdpc3RlcklEIHRvLCBSZWdpc3RlcklEIGZy
b20pCit7CisgICAgbG9hZDMyKEFkZHJlc3MoZnJvbSwgZW50cnkgKiBzaXplb2YoUmVnaXN0ZXIp
KSwgdG8pOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAga2lsbExhc3RSZXN1bHRSZWdpc3Rlcigp
OworI2VuZGlmCit9CisKKyNpZiBVU0UoSlNWQUxVRTY0KQorQUxXQVlTX0lOTElORSB2b2lkIEpJ
VDo6ZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXI2NChKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJF
bnRyeSBlbnRyeSwgUmVnaXN0ZXJJRCB0bywgUmVnaXN0ZXJJRCBmcm9tKQoreworICAgIGxvYWQ2
NChBZGRyZXNzKGZyb20sIGVudHJ5ICogc2l6ZW9mKFJlZ2lzdGVyKSksIHRvKTsKKyAgICBraWxs
TGFzdFJlc3VsdFJlZ2lzdGVyKCk7Cit9CisjZW5kaWYKKwogQUxXQVlTX0lOTElORSB2b2lkIEpJ
VDo6ZW1pdExvYWRDaGFyYWN0ZXJTdHJpbmcoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0
LCBKdW1wTGlzdCYgZmFpbHVyZXMpCiB7CiAgICAgZmFpbHVyZXMuYXBwZW5kKGJyYW5jaFB0cihO
b3RFcXVhbCwgQWRkcmVzcyhzcmMsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBUcnVzdGVk
SW1tUHRyKG1fZ2xvYmFsRGF0YS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwpAQCAtMTAxLDE0
ICsxMTksNiBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0TG9hZENoYXJhY3RlCiAgICAg
Y29udDhCaXQubGluayh0aGlzKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdl
dEZyb21DYWxsRnJhbWVIZWFkZXIzMihKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJFbnRyeSBlbnRy
eSwgUmVnaXN0ZXJJRCB0bywgUmVnaXN0ZXJJRCBmcm9tKQotewotICAgIGxvYWQzMihBZGRyZXNz
KGZyb20sIGVudHJ5ICogc2l6ZW9mKFJlZ2lzdGVyKSksIHRvKTsKLSNpZiBVU0UoSlNWQUxVRTY0
KQotICAgIGtpbGxMYXN0UmVzdWx0UmVnaXN0ZXIoKTsKLSNlbmRpZgotfQotCiBBTFdBWVNfSU5M
SU5FIEpJVDo6Q2FsbCBKSVQ6OmVtaXROYWtlZENhbGwoQ29kZVB0ciBmdW5jdGlvbikKIHsKICAg
ICBBU1NFUlQobV9ieXRlY29kZU9mZnNldCAhPSAodW5zaWduZWQpLTEpOyAvLyBUaGlzIG1ldGhv
ZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwg
c28gdGhhdCBtX2J5dGVjb2RlT2Zmc2V0IGlzIHNldC4KQEAgLTQ3Myw4ICs0ODMsOCBAQCBpbmxp
bmUgdm9pZCBKSVQ6OmVtaXRBbGxvY2F0ZUpTQXJyYXkodW5zCiAgICAgLy8gU3RvcmUgdGhlIHZh
bHVlcyB3ZSBoYXZlLgogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykg
ewogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhjYWxsRnJhbWVS
ZWdpc3RlciwgKHZhbHVlc1JlZ2lzdGVyICsgaSkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgc3RvcmFn
ZVB0cik7Ci0gICAgICAgIHN0b3JlUHRyKHN0b3JhZ2VQdHIsIEFkZHJlc3Moc3RvcmFnZVJlc3Vs
dCwgc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikgKiBpKSk7CisgICAgICAgIGxvYWQ2NChB
ZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCAodmFsdWVzUmVnaXN0ZXIgKyBpKSAqIHNpemVvZihS
ZWdpc3RlcikpLCBzdG9yYWdlUHRyKTsKKyAgICAgICAgc3RvcmU2NChzdG9yYWdlUHRyLCBBZGRy
ZXNzKHN0b3JhZ2VSZXN1bHQsIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pICogaSkpOwog
I2Vsc2UKICAgICAgICAgbG9hZDMyKEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsICh2YWx1ZXNS
ZWdpc3RlciArIGkpICogc2l6ZW9mKFJlZ2lzdGVyKSksIHN0b3JhZ2VQdHIpOwogICAgICAgICBz
dG9yZTMyKHN0b3JhZ2VQdHIsIEFkZHJlc3Moc3RvcmFnZVJlc3VsdCwgc2l6ZW9mKFdyaXRlQmFy
cmllcjxVbmtub3duPikgKiBpKSk7CkBAIC01MDAsNyArNTEwLDcgQEAgaW5saW5lIHZvaWQgSklU
OjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKAogICAgICAgICAvLyBXZSdyZSBpbiBhIHNpbXBsZSBj
b25maWd1cmF0aW9uOiBvbmx5IG9uZSBidWNrZXQsIHNvIHdlIGNhbiBqdXN0IGRvIGEgZGlyZWN0
CiAgICAgICAgIC8vIHN0b3JlLgogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIHN0b3JlUHRy
KHZhbHVlLCB2YWx1ZVByb2ZpbGUtPm1fYnVja2V0cyk7CisgICAgICAgIHN0b3JlNjQodmFsdWUs
IHZhbHVlUHJvZmlsZS0+bV9idWNrZXRzKTsKICNlbHNlCiAgICAgICAgIEVuY29kZWRWYWx1ZURl
c2NyaXB0b3IqIGRlc2NyaXB0b3IgPSBiaXR3aXNlX2Nhc3Q8RW5jb2RlZFZhbHVlRGVzY3JpcHRv
cio+KHZhbHVlUHJvZmlsZS0+bV9idWNrZXRzKTsKICAgICAgICAgc3RvcmUzMih2YWx1ZSwgJmRl
c2NyaXB0b3ItPmFzQml0cy5wYXlsb2FkKTsKQEAgLTUxNiw3ICs1MjYsNyBAQCBpbmxpbmUgdm9p
ZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoCiAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKFZh
bHVlUHJvZmlsZTo6YnVja2V0SW5kZXhNYXNrKSwgYnVja2V0Q291bnRlclJlZ2lzdGVyKTsKICAg
ICBtb3ZlKFRydXN0ZWRJbW1QdHIodmFsdWVQcm9maWxlLT5tX2J1Y2tldHMpLCBzY3JhdGNoKTsK
ICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIHN0b3JlUHRyKHZhbHVlLCBCYXNlSW5kZXgoc2NyYXRj
aCwgYnVja2V0Q291bnRlclJlZ2lzdGVyLCBUaW1lc0VpZ2h0KSk7CisgICAgc3RvcmU2NCh2YWx1
ZSwgQmFzZUluZGV4KHNjcmF0Y2gsIGJ1Y2tldENvdW50ZXJSZWdpc3RlciwgVGltZXNFaWdodCkp
OwogI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKICAgICBzdG9yZTMyKHZhbHVlLCBCYXNlSW5kZXgo
c2NyYXRjaCwgYnVja2V0Q291bnRlclJlZ2lzdGVyLCBUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VU
T0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpKTsKICAgICBzdG9yZTMyKHZhbHVlVGFnLCBC
YXNlSW5kZXgoc2NyYXRjaCwgYnVja2V0Q291bnRlclJlZ2lzdGVyLCBUaW1lc0VpZ2h0LCBPQkpF
Q1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSkpOwpAQCAtODYwLDYgKzg3MCwxNCBA
QCBBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjpnZXRPcGVyYW5kQ29uc3RhCiAKICNlbHNlIC8vIFVT
RShKU1ZBTFVFMzJfNjQpCiAKKy8qIERlcHJlY2F0ZWQ6IFBsZWFzZSB1c2UgSklUU3R1YkNhbGwg
aW5zdGVhZC4gKi8KKworQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldEpJVFN0dWJBcmco
dW5zaWduZWQgYXJndW1lbnROdW1iZXIsIFJlZ2lzdGVySUQgZHN0KQoreworICAgIHVuc2lnbmVk
IGFyZ3VtZW50U3RhY2tPZmZzZXQgPSAoYXJndW1lbnROdW1iZXIgKiAoc2l6ZW9mKEpTVmFsdWUp
IC8gc2l6ZW9mKHZvaWQqKSkpICsgSklUU1RBQ0tGUkFNRV9BUkdTX0lOREVYOworICAgIHBlZWs2
NChkc3QsIGFyZ3VtZW50U3RhY2tPZmZzZXQpOworfQorCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklU
OjpraWxsTGFzdFJlc3VsdFJlZ2lzdGVyKCkKIHsKICAgICBtX2xhc3RSZXN1bHRCeXRlY29kZVJl
Z2lzdGVyID0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKTsKQEAgLTg3NCw5ICs4OTIs
OSBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJlCiAgICAgaWYgKG1f
Y29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChzcmMpKSB7CiAgICAgICAgIEpTVmFs
dWUgdmFsdWUgPSBtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKICAgICAgICAgaWYgKCF2
YWx1ZS5pc051bWJlcigpKQotICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKEpTVmFsdWU6
OmVuY29kZSh2YWx1ZSkpLCBkc3QpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNW
YWx1ZTo6ZW5jb2RlKHZhbHVlKSksIGRzdCk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1v
dmUoSW1tUHRyKEpTVmFsdWU6OmVuY29kZSh2YWx1ZSkpLCBkc3QpOworICAgICAgICAgICAgbW92
ZShJbW02NChKU1ZhbHVlOjplbmNvZGUodmFsdWUpKSwgZHN0KTsKICAgICAgICAga2lsbExhc3RS
ZXN1bHRSZWdpc3RlcigpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtODg5LDcgKzkwNyw3
IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFsUmUKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAotICAgIGxvYWRQdHIoQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3Rlciwgc3Jj
ICogc2l6ZW9mKFJlZ2lzdGVyKSksIGRzdCk7CisgICAgbG9hZDY0KEFkZHJlc3MoY2FsbEZyYW1l
UmVnaXN0ZXIsIHNyYyAqIHNpemVvZihSZWdpc3RlcikpLCBkc3QpOwogICAgIGtpbGxMYXN0UmVz
dWx0UmVnaXN0ZXIoKTsKIH0KIApAQCAtOTE2LDI4ICs5MzQsMjQgQEAgQUxXQVlTX0lOTElORSBi
b29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbgogCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKHVuc2lnbmVkIGRzdCwgUmVnaXN0ZXJJRCBmcm9tKQogewotICAg
IHN0b3JlUHRyKGZyb20sIEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIGRzdCAqIHNpemVvZihS
ZWdpc3RlcikpKTsKKyAgICBzdG9yZTY0KGZyb20sIEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIs
IGRzdCAqIHNpemVvZihSZWdpc3RlcikpKTsKICAgICBtX2xhc3RSZXN1bHRCeXRlY29kZVJlZ2lz
dGVyID0gKGZyb20gPT0gY2FjaGVkUmVzdWx0UmVnaXN0ZXIpID8gc3RhdGljX2Nhc3Q8aW50Pihk
c3QpIDogc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKTsKIH0KIAogQUxXQVlTX0lOTElO
RSB2b2lkIEpJVDo6ZW1pdEluaXRSZWdpc3Rlcih1bnNpZ25lZCBkc3QpCiB7Ci0gICAgc3RvcmVQ
dHIoVHJ1c3RlZEltbVB0cihKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSkpLCBBZGRyZXNz
KGNhbGxGcmFtZVJlZ2lzdGVyLCBkc3QgKiBzaXplb2YoUmVnaXN0ZXIpKSk7CisgICAgc3RvcmU2
NChUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpKSwgQWRkcmVzcyhj
YWxsRnJhbWVSZWdpc3RlciwgZHN0ICogc2l6ZW9mKFJlZ2lzdGVyKSkpOwogfQogCiBBTFdBWVNf
SU5MSU5FIEpJVDo6SnVtcCBKSVQ6OmVtaXRKdW1wSWZKU0NlbGwoUmVnaXN0ZXJJRCByZWcpCiB7
Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICByZXR1cm4gYnJhbmNoVGVzdFB0cihaZXJvLCByZWcs
IHRhZ01hc2tSZWdpc3Rlcik7Ci0jZWxzZQotICAgIHJldHVybiBicmFuY2hUZXN0MzIoWmVybywg
cmVnLCBUcnVzdGVkSW1tMzIoVGFnTWFzaykpOwotI2VuZGlmCisgICAgcmV0dXJuIGJyYW5jaFRl
c3Q2NChaZXJvLCByZWcsIHRhZ01hc2tSZWdpc3Rlcik7CiB9CiAKIEFMV0FZU19JTkxJTkUgSklU
OjpKdW1wIEpJVDo6ZW1pdEp1bXBJZkJvdGhKU0NlbGxzKFJlZ2lzdGVySUQgcmVnMSwgUmVnaXN0
ZXJJRCByZWcyLCBSZWdpc3RlcklEIHNjcmF0Y2gpCiB7CiAgICAgbW92ZShyZWcxLCBzY3JhdGNo
KTsKLSAgICBvclB0cihyZWcyLCBzY3JhdGNoKTsKKyAgICBvcjY0KHJlZzIsIHNjcmF0Y2gpOwog
ICAgIHJldHVybiBlbWl0SnVtcElmSlNDZWxsKHNjcmF0Y2gpOwogfQogCkBAIC05NDgsMTEgKzk2
Miw3IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2UKIAogQUxXQVlT
X0lOTElORSBKSVQ6Okp1bXAgSklUOjplbWl0SnVtcElmTm90SlNDZWxsKFJlZ2lzdGVySUQgcmVn
KQogewotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgcmV0dXJuIGJyYW5jaFRlc3RQdHIoTm9uWmVy
bywgcmVnLCB0YWdNYXNrUmVnaXN0ZXIpOwotI2Vsc2UKLSAgICByZXR1cm4gYnJhbmNoVGVzdDMy
KE5vblplcm8sIHJlZywgVHJ1c3RlZEltbTMyKFRhZ01hc2spKTsKLSNlbmRpZgorICAgIHJldHVy
biBicmFuY2hUZXN0NjQoTm9uWmVybywgcmVnLCB0YWdNYXNrUmVnaXN0ZXIpOwogfQogCiBBTFdB
WVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoUmVnaXN0ZXJJ
RCByZWcpCkBAIC05NjYsOCArOTc2LDYgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEp1
bXBTbG93Q2FzZQogICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnKTsKIH0K
IAotI2lmIFVTRShKU1ZBTFVFNjQpCi0KIGlubGluZSB2b2lkIEpJVDo6ZW1pdExvYWREb3VibGUo
aW50IGluZGV4LCBGUFJlZ2lzdGVySUQgdmFsdWUpCiB7CiAgICAgaWYgKG1fY29kZUJsb2NrLT5p
c0NvbnN0YW50UmVnaXN0ZXJJbmRleChpbmRleCkpIHsKQEAgLTk4NSwzMCArOTkzLDIxIEBAIGlu
bGluZSB2b2lkIEpJVDo6ZW1pdExvYWRJbnQzMlRvRG91YmxlKGkKICAgICB9IGVsc2UKICAgICAg
ICAgY29udmVydEludDMyVG9Eb3VibGUoYWRkcmVzc0ZvcihpbmRleCksIHZhbHVlKTsKIH0KLSNl
bmRpZgogCiBBTFdBWVNfSU5MSU5FIEpJVDo6SnVtcCBKSVQ6OmVtaXRKdW1wSWZJbW1lZGlhdGVJ
bnRlZ2VyKFJlZ2lzdGVySUQgcmVnKQogewotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgcmV0dXJu
IGJyYW5jaFB0cihBYm92ZU9yRXF1YWwsIHJlZywgdGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKLSNl
bHNlCi0gICAgcmV0dXJuIGJyYW5jaFRlc3QzMihOb25aZXJvLCByZWcsIFRydXN0ZWRJbW0zMihU
YWdUeXBlTnVtYmVyKSk7Ci0jZW5kaWYKKyAgICByZXR1cm4gYnJhbmNoNjQoQWJvdmVPckVxdWFs
LCByZWcsIHRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7CiB9CiAKIEFMV0FZU19JTkxJTkUgSklUOjpK
dW1wIEpJVDo6ZW1pdEp1bXBJZk5vdEltbWVkaWF0ZUludGVnZXIoUmVnaXN0ZXJJRCByZWcpCiB7
Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICByZXR1cm4gYnJhbmNoUHRyKEJlbG93LCByZWcsIHRh
Z1R5cGVOdW1iZXJSZWdpc3Rlcik7Ci0jZWxzZQotICAgIHJldHVybiBicmFuY2hUZXN0MzIoWmVy
bywgcmVnLCBUcnVzdGVkSW1tMzIoVGFnVHlwZU51bWJlcikpOwotI2VuZGlmCisgICAgcmV0dXJu
IGJyYW5jaDY0KEJlbG93LCByZWcsIHRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7CiB9CiAKIEFMV0FZ
U19JTkxJTkUgSklUOjpKdW1wIEpJVDo6ZW1pdEp1bXBJZk5vdEltbWVkaWF0ZUludGVnZXJzKFJl
Z2lzdGVySUQgcmVnMSwgUmVnaXN0ZXJJRCByZWcyLCBSZWdpc3RlcklEIHNjcmF0Y2gpCiB7CiAg
ICAgbW92ZShyZWcxLCBzY3JhdGNoKTsKLSAgICBhbmRQdHIocmVnMiwgc2NyYXRjaCk7CisgICAg
YW5kNjQocmVnMiwgc2NyYXRjaCk7CiAgICAgcmV0dXJuIGVtaXRKdW1wSWZOb3RJbW1lZGlhdGVJ
bnRlZ2VyKHNjcmF0Y2gpOwogfQogCkBAIC0xMDI3LDQxICsxMDI2LDE3IEBAIEFMV0FZU19JTkxJ
TkUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2UKICAgICBhZGRTbG93Q2FzZShlbWl0SnVtcElm
Tm90SW1tZWRpYXRlTnVtYmVyKHJlZykpOwogfQogCi0jaWYgVVNFKEpTVkFMVUUzMl82NCkKLUFM
V0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRGYXN0QXJpdGhEZVRhZ0ltbWVkaWF0ZShSZWdpc3Rl
cklEIHJlZykKLXsKLSAgICBzdWJQdHIoVHJ1c3RlZEltbTMyKFRhZ1R5cGVOdW1iZXIpLCByZWcp
OwotfQotCi1BTFdBWVNfSU5MSU5FIEpJVDo6SnVtcCBKSVQ6OmVtaXRGYXN0QXJpdGhEZVRhZ0lt
bWVkaWF0ZUp1bXBJZlplcm8oUmVnaXN0ZXJJRCByZWcpCi17Ci0gICAgcmV0dXJuIGJyYW5jaFN1
YlB0cihaZXJvLCBUcnVzdGVkSW1tMzIoVGFnVHlwZU51bWJlciksIHJlZyk7Ci19Ci0jZW5kaWYK
LQogQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEZhc3RBcml0aFJlVGFnSW1tZWRpYXRlKFJl
Z2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCiB7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKICAg
ICBlbWl0RmFzdEFyaXRoSW50VG9JbW1Ob0NoZWNrKHNyYywgZGVzdCk7Ci0jZWxzZQotICAgIGlm
IChzcmMgIT0gZGVzdCkKLSAgICAgICAgbW92ZShzcmMsIGRlc3QpOwotICAgIGFkZFB0cihUcnVz
dGVkSW1tMzIoVGFnVHlwZU51bWJlciksIGRlc3QpOwotI2VuZGlmCiB9CiAKIC8vIG9wZXJhbmQg
aXMgaW50MzJfdCwgbXVzdCBoYXZlIGJlZW4gemVyby1leHRlbmRlZCBpZiByZWdpc3RlciBpcyA2
NC1iaXQuCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0RmFzdEFyaXRoSW50VG9JbW1Ob0No
ZWNrKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCiB7Ci0jaWYgVVNFKEpTVkFMVUU2
NCkKICAgICBpZiAoc3JjICE9IGRlc3QpCiAgICAgICAgIG1vdmUoc3JjLCBkZXN0KTsKLSAgICBv
clB0cih0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIGRlc3QpOwotI2Vsc2UKLSAgICBzaWduRXh0ZW5k
MzJUb1B0cihzcmMsIGRlc3QpOwotICAgIGFkZFB0cihkZXN0LCBkZXN0KTsKLSAgICBlbWl0RmFz
dEFyaXRoUmVUYWdJbW1lZGlhdGUoZGVzdCwgZGVzdCk7Ci0jZW5kaWYKKyAgICBvcjY0KHRhZ1R5
cGVOdW1iZXJSZWdpc3RlciwgZGVzdCk7CiB9CiAKIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVt
aXRUYWdBc0Jvb2xJbW1lZGlhdGUoUmVnaXN0ZXJJRCByZWcpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHJldmlzaW9uIDEzMTU0MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0OCwx
NCArMjQ4LDE0IEBAIEpJVDo6TGFiZWwgSklUOjpwcml2YXRlQ29tcGlsZUNUSU5hdGl2ZUMKICAg
ICAvLyBIb3N0IGZ1bmN0aW9uIHNpZ25hdHVyZTogZihFeGVjU3RhdGUqKTsKICAgICBtb3ZlKGNh
bGxGcmFtZVJlZ2lzdGVyLCBYODZSZWdpc3RlcnM6OmVkaSk7CiAKLSAgICBzdWJQdHIoVHJ1c3Rl
ZEltbTMyKDE2IC0gc2l6ZW9mKHZvaWQqKSksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsgLy8gQWxp
Z24gc3RhY2sgYWZ0ZXIgY2FsbC4KKyAgICBzdWJQdHIoVHJ1c3RlZEltbTMyKDE2IC0gc2l6ZW9m
KGludDY0X3QpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOyAvLyBBbGlnbiBzdGFjayBhZnRlciBj
YWxsLgogCiAgICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoSlNTdGFjazo6Q2FsbGVl
LCBYODZSZWdpc3RlcnM6OmVzaSk7CiAgICAgbG9hZFB0cihBZGRyZXNzKFg4NlJlZ2lzdGVyczo6
ZXNpLCBPQkpFQ1RfT0ZGU0VUT0YoSlNGdW5jdGlvbiwgbV9leGVjdXRhYmxlKSksIFg4NlJlZ2lz
dGVyczo6cjkpOwogICAgIG1vdmUocmVnVDAsIGNhbGxGcmFtZVJlZ2lzdGVyKTsgLy8gRWFnZXJs
eSByZXN0b3JlIGNhbGxlciBmcmFtZSByZWdpc3RlciB0byBhdm9pZCBsb2FkaW5nIGZyb20gc3Rh
Y2suCiAgICAgY2FsbChBZGRyZXNzKFg4NlJlZ2lzdGVyczo6cjksIGV4ZWN1dGFibGVPZmZzZXRU
b0Z1bmN0aW9uKSk7CiAKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKDE2IC0gc2l6ZW9mKHZvaWQq
KSksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKDE2IC0g
c2l6ZW9mKGludDY0X3QpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogCiAjZWxpZiBDUFUoQVJN
KQogICAgIC8vIExvYWQgY2FsbGVyIGZyYW1lJ3Mgc2NvcGUgY2hhaW4gaW50byB0aGlzIGNhbGxm
cmFtZSBzbyB0aGF0IHdoYXRldmVyIHdlIGNhbGwgY2FuCkBAIC0zMTYsOCArMzE2LDggQEAgSklU
OjpMYWJlbCBKSVQ6OnByaXZhdGVDb21waWxlQ1RJTmF0aXZlQwogI2VuZGlmCiAKICAgICAvLyBD
aGVjayBmb3IgYW4gZXhjZXB0aW9uCi0gICAgbG9hZFB0cigmKGdsb2JhbERhdGEtPmV4Y2VwdGlv
biksIHJlZ1QyKTsKLSAgICBKdW1wIGV4Y2VwdGlvbkhhbmRsZXIgPSBicmFuY2hUZXN0UHRyKE5v
blplcm8sIHJlZ1QyKTsKKyAgICBsb2FkNjQoJihnbG9iYWxEYXRhLT5leGNlcHRpb24pLCByZWdU
Mik7CisgICAgSnVtcCBleGNlcHRpb25IYW5kbGVyID0gYnJhbmNoVGVzdDY0KE5vblplcm8sIHJl
Z1QyKTsKIAogICAgIC8vIFJldHVybi4KICAgICByZXQoKTsKQEAgLTM2MCw5ICszNjAsOSBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9tb3YoSW5zdHJ1Y3Rpb24qIGN1cnJlCiAgICAgfSBlbHNlIHsKICAg
ICAgICAgaWYgKG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChzcmMpKSB7CiAg
ICAgICAgICAgICBpZiAoIWdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzTnVtYmVyKCkpCi0gICAg
ICAgICAgICAgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihKU1ZhbHVlOjplbmNvZGUoZ2V0Q29u
c3RhbnRPcGVyYW5kKHNyYykpKSwgQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3RlciwgZHN0ICogc2l6
ZW9mKFJlZ2lzdGVyKSkpOworICAgICAgICAgICAgICAgIHN0b3JlNjQoVHJ1c3RlZEltbTY0KEpT
VmFsdWU6OmVuY29kZShnZXRDb25zdGFudE9wZXJhbmQoc3JjKSkpLCBBZGRyZXNzKGNhbGxGcmFt
ZVJlZ2lzdGVyLCBkc3QgKiBzaXplb2YoUmVnaXN0ZXIpKSk7CiAgICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgc3RvcmVQdHIoSW1tUHRyKEpTVmFsdWU6OmVuY29kZShnZXRDb25zdGFu
dE9wZXJhbmQoc3JjKSkpLCBBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCBkc3QgKiBzaXplb2Yo
UmVnaXN0ZXIpKSk7CisgICAgICAgICAgICAgICAgc3RvcmU2NChJbW02NChKU1ZhbHVlOjplbmNv
ZGUoZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykpKSwgQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3Rlciwg
ZHN0ICogc2l6ZW9mKFJlZ2lzdGVyKSkpOwogICAgICAgICAgICAgaWYgKGRzdCA9PSBtX2xhc3RS
ZXN1bHRCeXRlY29kZVJlZ2lzdGVyKQogICAgICAgICAgICAgICAgIGtpbGxMYXN0UmVzdWx0UmVn
aXN0ZXIoKTsKICAgICAgICAgfSBlbHNlIGlmICgoc3JjID09IG1fbGFzdFJlc3VsdEJ5dGVjb2Rl
UmVnaXN0ZXIpIHx8IChkc3QgPT0gbV9sYXN0UmVzdWx0Qnl0ZWNvZGVSZWdpc3RlcikpIHsKQEAg
LTM3Miw4ICszNzIsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9tb3YoSW5zdHJ1Y3Rpb24qIGN1cnJl
CiAgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiAgICAgICAgIH0gZWxz
ZSB7CiAgICAgICAgICAgICAvLyBQZXJmb3JtIHRoZSBjb3B5IHZpYSByZWdUMTsgZG8gbm90IGRp
c3R1cmIgYW55IG1hcHBpbmcgaW4gcmVnVDAuCi0gICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3Mo
Y2FsbEZyYW1lUmVnaXN0ZXIsIHNyYyAqIHNpemVvZihSZWdpc3RlcikpLCByZWdUMSk7Ci0gICAg
ICAgICAgICBzdG9yZVB0cihyZWdUMSwgQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3RlciwgZHN0ICog
c2l6ZW9mKFJlZ2lzdGVyKSkpOworICAgICAgICAgICAgbG9hZDY0KEFkZHJlc3MoY2FsbEZyYW1l
UmVnaXN0ZXIsIHNyYyAqIHNpemVvZihSZWdpc3RlcikpLCByZWdUMSk7CisgICAgICAgICAgICBz
dG9yZTY0KHJlZ1QxLCBBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCBkc3QgKiBzaXplb2YoUmVn
aXN0ZXIpKSk7CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC00NDEsMTggKzQ0MSwxOCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mKEluc3RydWN0aW9uCiAgICAgLy8gT3B0aW1pc3RpY2Fs
bHkgbG9hZCB0aGUgcmVzdWx0IHRydWUsIGFuZCBzdGFydCBsb29waW5nLgogICAgIC8vIEluaXRp
YWxseSwgcmVnVDEgc3RpbGwgY29udGFpbnMgcHJvdG8gYW5kIHJlZ1QyIHN0aWxsIGNvbnRhaW5z
IHZhbHVlLgogICAgIC8vIEFzIHdlIGxvb3AgcmVnVDIgd2lsbCBiZSB1cGRhdGVkIHdpdGggaXRz
IHByb3RvdHlwZSwgcmVjdXJzaXZlbHkgd2Fsa2luZyB0aGUgcHJvdG90eXBlIGNoYWluLgotICAg
IG1vdmUoVHJ1c3RlZEltbVB0cihKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRydWUpKSksIHJl
Z1QwKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRy
dWUpKSksIHJlZ1QwKTsKICAgICBMYWJlbCBsb29wKHRoaXMpOwogCiAgICAgLy8gTG9hZCB0aGUg
cHJvdG90eXBlIG9mIHRoZSBvYmplY3QgaW4gcmVnVDIuICBJZiB0aGlzIGlzIGVxdWFsIHRvIHJl
Z1QxIC0gV0lOIQogICAgIC8vIE90aGVyd2lzZSwgY2hlY2sgaWYgd2UndmUgaGl0IG51bGwgLSBp
ZiB3ZSBoYXZlIHRoZW4gZHJvcCBvdXQgb2YgdGhlIGxvb3AsIGlmIG5vdCBnbyBhZ2Fpbi4KICAg
ICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCByZWdU
Mik7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6OnByb3RvdHlwZU9mZnNl
dCgpKSwgcmVnVDIpOworICAgIGxvYWQ2NChBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6OnByb3Rv
dHlwZU9mZnNldCgpKSwgcmVnVDIpOwogICAgIEp1bXAgaXNJbnN0YW5jZSA9IGJyYW5jaFB0cihF
cXVhbCwgcmVnVDIsIHJlZ1QxKTsKICAgICBlbWl0SnVtcElmSlNDZWxsKHJlZ1QyKS5saW5rVG8o
bG9vcCwgdGhpcyk7CiAKICAgICAvLyBXZSBnZXQgaGVyZSBlaXRoZXIgYnkgZHJvcHBpbmcgb3V0
IG9mIHRoZSBsb29wLCBvciBpZiB2YWx1ZSB3YXMgbm90IGFuIE9iamVjdC4gIFJlc3VsdCBpcyBm
YWxzZS4KLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihm
YWxzZSkpKSwgcmVnVDApOworICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShq
c0Jvb2xlYW4oZmFsc2UpKSksIHJlZ1QwKTsKIAogICAgIC8vIGlzSW5zdGFuY2UganVtcHMgcmln
aHQgZG93biB0byBoZXJlLCB0byBza2lwIHNldHRpbmcgdGhlIHJlc3VsdCB0byBmYWxzZSAoaXQg
aGFzIGFscmVhZHkgc2V0IHRydWUpLgogICAgIGlzSW5zdGFuY2UubGluayh0aGlzKTsKQEAgLTQ2
Nyw3ICs0NjcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc191bmRlZmluZWQoSW5zdHJ1Y3RpCiAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwogICAgIEp1bXAgaXNDZWxs
ID0gZW1pdEp1bXBJZkpTQ2VsbChyZWdUMCk7CiAKLSAgICBjb21wYXJlUHRyKEVxdWFsLCByZWdU
MCwgVHJ1c3RlZEltbTMyKFZhbHVlVW5kZWZpbmVkKSwgcmVnVDApOworICAgIGNvbXBhcmU2NChF
cXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihWYWx1ZVVuZGVmaW5lZCksIHJlZ1QwKTsKICAgICBK
dW1wIGRvbmUgPSBqdW1wKCk7CiAgICAgCiAgICAgaXNDZWxsLmxpbmsodGhpcyk7CkBAIC00OTMs
OCArNDkzLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfYm9vbGVhbihJbnN0cnVjdGlvbgogICAg
IHVuc2lnbmVkIHZhbHVlID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKICAgICAK
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgeG9yUHRyKFRy
dXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90PihWYWx1ZUZhbHNlKSksIHJlZ1QwKTsKLSAg
ICB0ZXN0UHRyKFplcm8sIHJlZ1QwLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4o
fjEpKSwgcmVnVDApOworICAgIHhvcjY0KFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90
PihWYWx1ZUZhbHNlKSksIHJlZ1QwKTsKKyAgICB0ZXN0NjQoWmVybywgcmVnVDAsIFRydXN0ZWRJ
bW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpLCByZWdUMCk7CiAgICAgZW1pdFRhZ0FzQm9v
bEltbWVkaWF0ZShyZWdUMCk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQpA
QCAtNTA1LDcgKzUwNSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2lzX251bWJlcihJbnN0cnVjdGlv
bioKICAgICB1bnNpZ25lZCB2YWx1ZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7
CiAgICAgCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIHRl
c3RQdHIoTm9uWmVybywgcmVnVDAsIHRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgcmVnVDApOworICAg
IHRlc3Q2NChOb25aZXJvLCByZWdUMCwgdGFnVHlwZU51bWJlclJlZ2lzdGVyLCByZWdUMCk7CiAg
ICAgZW1pdFRhZ0FzQm9vbEltbWVkaWF0ZShyZWdUMCk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QpOwogfQpAQCAtNTUzLDcgKzU1Myw3IEBAIHZvaWQgSklUOjplbWl0X29wX2NvbnN0
cnVjdChJbnN0cnVjdGlvbioKIHZvaWQgSklUOjplbWl0X29wX3RlYXJfb2ZmX2FjdGl2YXRpb24o
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBpbnQgYWN0aXZhdGlvbiA9
IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgSnVtcCBhY3RpdmF0aW9uTm90
Q3JlYXRlZCA9IGJyYW5jaFRlc3RQdHIoWmVybywgYWRkcmVzc0ZvcihhY3RpdmF0aW9uKSk7Cisg
ICAgSnVtcCBhY3RpdmF0aW9uTm90Q3JlYXRlZCA9IGJyYW5jaFRlc3Q2NChaZXJvLCBhZGRyZXNz
Rm9yKGFjdGl2YXRpb24pKTsKICAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3Bf
dGVhcl9vZmZfYWN0aXZhdGlvbik7CiAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoYWN0aXZhdGlv
biwgcmVnVDIpOwogICAgIHN0dWJDYWxsLmNhbGwoKTsKQEAgLTY3MCw5ICs2NzAsOSBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9ub3QoSW5zdHJ1Y3Rpb24qIGN1cnJlCiAgICAgLy8gSW52ZXJ0IGFnYWlu
c3QgSlNWYWx1ZShmYWxzZSk7IGlmIHRoZSB2YWx1ZSB3YXMgdGFnZ2VkIGFzIGEgYm9vbGVhbiwg
dGhlbiBhbGwgYml0cyB3aWxsIGJlCiAgICAgLy8gY2xlYXIgb3RoZXIgdGhhbiB0aGUgbG93IGJp
dCAod2hpY2ggd2lsbCBiZSAwIG9yIDEgZm9yIGZhbHNlIG9yIHRydWUgaW5wdXRzIHJlc3BlY3Rp
dmVseSkuCiAgICAgLy8gVGhlbiBpbnZlcnQgYWdhaW5zdCBKU1ZhbHVlKHRydWUpLCB3aGljaCB3
aWxsIGFkZCB0aGUgdGFnIGJhY2sgaW4sIGFuZCBmbGlwIHRoZSBsb3cgYml0LgotICAgIHhvclB0
cihUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oVmFsdWVGYWxzZSkpLCByZWdUMCk7
CisgICAgeG9yNjQoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KFZhbHVlRmFsc2Up
KSwgcmVnVDApOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoTm9uWmVybywgcmVnVDAs
IFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpKSk7Ci0gICAgeG9yUHRyKFRy
dXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90PihWYWx1ZVRydWUpKSwgcmVnVDApOworICAg
IHhvcjY0KFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90PihWYWx1ZVRydWUpKSwgcmVn
VDApOwogCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0u
dS5vcGVyYW5kKTsKIH0KQEAgLTY4MiwxMSArNjgyLDExIEBAIHZvaWQgSklUOjplbWl0X29wX2pm
YWxzZShJbnN0cnVjdGlvbiogY3UKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBjdXJyZW50SW5zdHJ1
Y3Rpb25bMl0udS5vcGVyYW5kOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudElu
c3RydWN0aW9uWzFdLnUub3BlcmFuZCwgcmVnVDApOwogCi0gICAgYWRkSnVtcChicmFuY2hQdHIo
RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tUHRyKEpTVmFsdWU6OmVuY29kZShqc051bWJlcigwKSkp
KSwgdGFyZ2V0KTsKKyAgICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZElt
bTY0KEpTVmFsdWU6OmVuY29kZShqc051bWJlcigwKSkpKSwgdGFyZ2V0KTsKICAgICBKdW1wIGlz
Tm9uWmVybyA9IGVtaXRKdW1wSWZJbW1lZGlhdGVJbnRlZ2VyKHJlZ1QwKTsKIAotICAgIGFkZEp1
bXAoYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0cihKU1ZhbHVlOjplbmNvZGUo
anNCb29sZWFuKGZhbHNlKSkpKSwgdGFyZ2V0KTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hQdHIo
Tm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tUHRyKEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4o
dHJ1ZSkpKSkpOworICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1t
NjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihmYWxzZSkpKSksIHRhcmdldCk7CisgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoNjQoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6
ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSkpKSk7CiAKICAgICBpc05vblplcm8ubGluayh0aGlzKTsK
IH0KQEAgLTcwOCw4ICs3MDgsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qZXFfbnVsbChJbnN0cnVj
dGlvbioKIAogICAgIC8vIE5vdyBoYW5kbGUgdGhlIGltbWVkaWF0ZSBjYXNlcyAtIHVuZGVmaW5l
ZCAmIG51bGwKICAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOwotICAgIGFuZFB0cihUcnVzdGVk
SW1tMzIoflRhZ0JpdFVuZGVmaW5lZCksIHJlZ1QwKTsKLSAgICBhZGRKdW1wKGJyYW5jaFB0cihF
cXVhbCwgcmVnVDAsIFRydXN0ZWRJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0
YXJnZXQpOyAgICAgICAgICAgIAorICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+VGFnQml0VW5kZWZp
bmVkKSwgcmVnVDApOworICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVk
SW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOyAgICAgICAgICAgIAog
CiAgICAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CiAgICAgbWFzcXVl
cmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24ubGluayh0aGlzKTsKQEAgLTczMSw4ICs3MzEsOCBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX251bGwoSW5zdHJ1Y3Rpb24qCiAKICAgICAvLyBOb3cg
aGFuZGxlIHRoZSBpbW1lZGlhdGUgY2FzZXMgLSB1bmRlZmluZWQgJiBudWxsCiAgICAgaXNJbW1l
ZGlhdGUubGluayh0aGlzKTsKLSAgICBhbmRQdHIoVHJ1c3RlZEltbTMyKH5UYWdCaXRVbmRlZmlu
ZWQpLCByZWdUMCk7Ci0gICAgYWRkSnVtcChicmFuY2hQdHIoTm90RXF1YWwsIHJlZ1QwLCBUcnVz
dGVkSW1tUHRyKEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsgICAgICAgICAg
ICAKKyAgICBhbmQ2NChUcnVzdGVkSW1tMzIoflRhZ0JpdFVuZGVmaW5lZCksIHJlZ1QwKTsKKyAg
ICBhZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6
OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsgICAgICAgICAgICAKIAogICAgIHdhc05vdElt
bWVkaWF0ZS5saW5rKHRoaXMpOwogfQpAQCAtNzYxLDExICs3NjEsMTEgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfanRydWUoSW5zdHJ1Y3Rpb24qIGN1cgogICAgIHVuc2lnbmVkIHRhcmdldCA9IGN1cnJl
bnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihj
dXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCByZWdUMCk7CiAKLSAgICBKdW1wIGlzWmVy
byA9IGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW1QdHIoSlNWYWx1ZTo6ZW5jb2Rl
KGpzTnVtYmVyKDApKSkpOworICAgIEp1bXAgaXNaZXJvID0gYnJhbmNoNjQoRXF1YWwsIHJlZ1Qw
LCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKDApKSkpOwogICAgIGFkZEp1
bXAoZW1pdEp1bXBJZkltbWVkaWF0ZUludGVnZXIocmVnVDApLCB0YXJnZXQpOwogCi0gICAgYWRk
SnVtcChicmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tUHRyKEpTVmFsdWU6OmVuY29k
ZShqc0Jvb2xlYW4odHJ1ZSkpKSksIHRhcmdldCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoUHRy
KE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0cihKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFu
KGZhbHNlKSkpKSk7CisgICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJ
bW02NChKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRydWUpKSkpLCB0YXJnZXQpOworICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaDY0KE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6
OmVuY29kZShqc0Jvb2xlYW4oZmFsc2UpKSkpKTsKIAogICAgIGlzWmVyby5saW5rKHRoaXMpOwog
fQpAQCAtNzg1LDcgKzc4NSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2JpdHhvcihJbnN0cnVjdGlv
biogY3UKIHsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhjdXJyZW50SW5zdHJ1Y3Rpb25b
Ml0udS5vcGVyYW5kLCByZWdUMCwgY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCwgcmVn
VDEpOwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbWVkaWF0ZUludGVnZXJzKHJlZ1QwLCBy
ZWdUMSwgcmVnVDIpOwotICAgIHhvclB0cihyZWdUMSwgcmVnVDApOworICAgIHhvcjY0KHJlZ1Qx
LCByZWdUMCk7CiAgICAgZW1pdEZhc3RBcml0aFJlVGFnSW1tZWRpYXRlKHJlZ1QwLCByZWdUMCk7
CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVy
YW5kKTsKIH0KQEAgLTc5NCw3ICs3OTQsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9iaXRvcihJbnN0
cnVjdGlvbiogY3VyCiB7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoY3VycmVudEluc3Ry
dWN0aW9uWzJdLnUub3BlcmFuZCwgcmVnVDAsIGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJh
bmQsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1lZGlhdGVJbnRlZ2Vycyhy
ZWdUMCwgcmVnVDEsIHJlZ1QyKTsKLSAgICBvclB0cihyZWdUMSwgcmVnVDApOworICAgIG9yNjQo
cmVnVDEsIHJlZ1QwKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVj
dGlvblsxXS51Lm9wZXJhbmQpOwogfQogCkBAIC04MzYsNyArODM2LDcgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfZ2V0X3BuYW1lcyhJbnN0cnVjdGlvbgogICAgIGdldFBuYW1lc1N0dWJDYWxsLmFkZEFy
Z3VtZW50KHJlZ1QwKTsKICAgICBnZXRQbmFtZXNTdHViQ2FsbC5jYWxsKGRzdCk7CiAgICAgbG9h
ZDMyKEFkZHJlc3MocmVnVDAsIE9CSkVDVF9PRkZTRVRPRihKU1Byb3BlcnR5TmFtZUl0ZXJhdG9y
LCBtX2pzU3RyaW5nc1NpemUpKSwgcmVnVDMpOwotICAgIHN0b3JlUHRyKHRhZ1R5cGVOdW1iZXJS
ZWdpc3RlciwgcGF5bG9hZEZvcihpKSk7CisgICAgc3RvcmU2NCh0YWdUeXBlTnVtYmVyUmVnaXN0
ZXIsIGFkZHJlc3NGb3IoaSkpOwogICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKEludDMyVGFnKSwg
aW50VGFnRm9yKHNpemUpKTsKICAgICBzdG9yZTMyKHJlZ1QzLCBpbnRQYXlsb2FkRm9yKHNpemUp
KTsKICAgICBKdW1wIGVuZCA9IGp1bXAoKTsKQEAgLTg3Myw3ICs4NzMsNyBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9uZXh0X3BuYW1lKEluc3RydWN0aW9uCiAgICAgbG9hZFB0cihhZGRyZXNzRm9yKGl0
KSwgcmVnVDEpOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgT0JKRUNUX09GRlNFVE9GKEpT
UHJvcGVydHlOYW1lSXRlcmF0b3IsIG1fanNTdHJpbmdzKSksIHJlZ1QyKTsKIAotICAgIGxvYWRQ
dHIoQmFzZUluZGV4KHJlZ1QyLCByZWdUMCwgVGltZXNFaWdodCksIHJlZ1QyKTsKKyAgICBsb2Fk
NjQoQmFzZUluZGV4KHJlZ1QyLCByZWdUMCwgVGltZXNFaWdodCksIHJlZ1QyKTsKIAogICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZWdUMik7CiAKQEAgLTg5NCw3ICs4OTQsNyBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9uZXh0X3BuYW1lKEluc3RydWN0aW9uCiAgICAgYWRkSnVtcChicmFu
Y2hUZXN0UHRyKFplcm8sIEFkZHJlc3MocmVnVDMpKSwgdGFyZ2V0KTsKIAogICAgIExhYmVsIGNo
ZWNrUHJvdG90eXBlKHRoaXMpOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJl
Ojpwcm90b3R5cGVPZmZzZXQoKSksIHJlZ1QyKTsKKyAgICBsb2FkNjQoQWRkcmVzcyhyZWdUMiwg
U3RydWN0dXJlOjpwcm90b3R5cGVPZmZzZXQoKSksIHJlZ1QyKTsKICAgICBjYWxsSGFzUHJvcGVy
dHkuYXBwZW5kKGVtaXRKdW1wSWZOb3RKU0NlbGwocmVnVDIpKTsKICAgICBsb2FkUHRyKEFkZHJl
c3MocmVnVDIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCByZWdUMik7CiAgICAgY2FsbEhh
c1Byb3BlcnR5LmFwcGVuZChicmFuY2hQdHIoTm90RXF1YWwsIHJlZ1QyLCBBZGRyZXNzKHJlZ1Qz
KSkpOwpAQCAtOTQyLDcgKzk0Miw3IEBAIHZvaWQgSklUOjpjb21waWxlT3BTdHJpY3RFcShJbnN0
cnVjdGlvbioKICAgICAKICAgICAvLyBKdW1wIHNsb3cgaWYgYm90aCBhcmUgY2VsbHMgKHRvIGNv
dmVyIHN0cmluZ3MpLgogICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKLSAgICBvclB0cihyZWdUMSwg
cmVnVDIpOworICAgIG9yNjQocmVnVDEsIHJlZ1QyKTsKICAgICBhZGRTbG93Q2FzZShlbWl0SnVt
cElmSlNDZWxsKHJlZ1QyKSk7CiAgICAgCiAgICAgLy8gSnVtcCBzbG93IGlmIGVpdGhlciBpcyBh
IGRvdWJsZS4gRmlyc3QgdGVzdCBpZiBpdCdzIGFuIGludGVnZXIsIHdoaWNoIGlzIGZpbmUsIGFu
ZCB0aGVuIHRlc3QKQEAgLTk1NSw5ICs5NTUsOSBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wU3RyaWN0
RXEoSW5zdHJ1Y3Rpb24qCiAgICAgcmlnaHRPSy5saW5rKHRoaXMpOwogCiAgICAgaWYgKHR5cGUg
PT0gT3BTdHJpY3RFcSkKLSAgICAgICAgY29tcGFyZVB0cihFcXVhbCwgcmVnVDEsIHJlZ1QwLCBy
ZWdUMCk7CisgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7CiAg
ICAgZWxzZQotICAgICAgICBjb21wYXJlUHRyKE5vdEVxdWFsLCByZWdUMSwgcmVnVDAsIHJlZ1Qw
KTsKKyAgICAgICAgY29tcGFyZTY0KE5vdEVxdWFsLCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsKICAg
ICBlbWl0VGFnQXNCb29sSW1tZWRpYXRlKHJlZ1QwKTsKIAogICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0KTsKQEAgLTEwMDMsOCArMTAwMyw4IEBAIHZvaWQgSklUOjplbWl0X29wX2NhdGNo
KEluc3RydWN0aW9uKiBjdXIKICAgICBraWxsTGFzdFJlc3VsdFJlZ2lzdGVyKCk7IC8vIEZJWE1F
OiBJbXBsaWNpdGx5IHRyZWF0IG9wX2NhdGNoIGFzIGEgbGFiZWxlZCBzdGF0ZW1lbnQsIGFuZCBy
ZW1vdmUgdGhpcyBsaW5lIG9mIGNvZGUuCiAgICAgbW92ZShyZWdUMCwgY2FsbEZyYW1lUmVnaXN0
ZXIpOwogICAgIHBlZWsocmVnVDMsIE9CSkVDVF9PRkZTRVRPRihzdHJ1Y3QgSklUU3RhY2tGcmFt
ZSwgZ2xvYmFsRGF0YSkgLyBzaXplb2Yodm9pZCopKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVn
VDMsIE9CSkVDVF9PRkZTRVRPRihKU0dsb2JhbERhdGEsIGV4Y2VwdGlvbikpLCByZWdUMCk7Ci0g
ICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKSksIEFk
ZHJlc3MocmVnVDMsIE9CSkVDVF9PRkZTRVRPRihKU0dsb2JhbERhdGEsIGV4Y2VwdGlvbikpKTsK
KyAgICBsb2FkNjQoQWRkcmVzcyhyZWdUMywgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsRGF0YSwg
ZXhjZXB0aW9uKSksIHJlZ1QwKTsKKyAgICBzdG9yZTY0KFRydXN0ZWRJbW02NChKU1ZhbHVlOjpl
bmNvZGUoSlNWYWx1ZSgpKSksIEFkZHJlc3MocmVnVDMsIE9CSkVDVF9PRkZTRVRPRihKU0dsb2Jh
bERhdGEsIGV4Y2VwdGlvbikpKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJ
bnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOwogfQogCkBAIC0xMDczLDkgKzEwNzMsOSBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF90aHJvd19yZWZlcmVuY2VfZXJyb3IoCiB7CiAgICAgSklUU3R1YkNhbGwg
c3R1YkNhbGwodGhpcywgY3RpX29wX3Rocm93X3JlZmVyZW5jZV9lcnJvcik7CiAgICAgaWYgKCFt
X2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCku
aXNOdW1iZXIoKSkKLSAgICAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZEltbVB0cihK
U1ZhbHVlOjplbmNvZGUobV9jb2RlQmxvY2stPmdldENvbnN0YW50KGN1cnJlbnRJbnN0cnVjdGlv
blsxXS51Lm9wZXJhbmQpKSkpOworICAgICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChUcnVzdGVk
SW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChjdXJyZW50SW5z
dHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSkpKTsKICAgICBlbHNlCi0gICAgICAgIHN0dWJDYWxsLmFk
ZEFyZ3VtZW50KEltbVB0cihKU1ZhbHVlOjplbmNvZGUobV9jb2RlQmxvY2stPmdldENvbnN0YW50
KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpKSkpOworICAgICAgICBzdHViQ2FsbC5h
ZGRBcmd1bWVudChJbW02NChKU1ZhbHVlOjplbmNvZGUobV9jb2RlQmxvY2stPmdldENvbnN0YW50
KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpKSkpOwogICAgIHN0dWJDYWxsLmNhbGwo
KTsKIH0KIApAQCAtMTExNSw4ICsxMTE1LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZXFfbnVsbChJ
bnN0cnVjdGlvbiogYwogCiAgICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsKIAotICAgIGFuZFB0
cihUcnVzdGVkSW1tMzIoflRhZ0JpdFVuZGVmaW5lZCksIHJlZ1QwKTsKLSAgICBjb21wYXJlUHRy
KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKFZhbHVlTnVsbCksIHJlZ1QwKTsKKyAgICBhbmQ2
NChUcnVzdGVkSW1tMzIoflRhZ0JpdFVuZGVmaW5lZCksIHJlZ1QwKTsKKyAgICBjb21wYXJlNjQo
RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoVmFsdWVOdWxsKSwgcmVnVDApOwogCiAgICAgd2Fz
Tm90SW1tZWRpYXRlLmxpbmsodGhpcyk7CiAgICAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZC5saW5rKHRoaXMpOwpAQCAtMTE0Nyw4ICsxMTQ3LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmVx
X251bGwoSW5zdHJ1Y3Rpb24qCiAKICAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOwogCi0gICAg
YW5kUHRyKFRydXN0ZWRJbW0zMih+VGFnQml0VW5kZWZpbmVkKSwgcmVnVDApOwotICAgIGNvbXBh
cmVQdHIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoVmFsdWVOdWxsKSwgcmVnVDApOwor
ICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+VGFnQml0VW5kZWZpbmVkKSwgcmVnVDApOworICAgIGNv
bXBhcmU2NChOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihWYWx1ZU51bGwpLCByZWdUMCk7
CiAKICAgICB3YXNOb3RJbW1lZGlhdGUubGluayh0aGlzKTsKICAgICB3YXNOb3RNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CkBAIC0xMTczLDcgKzExNzMsNyBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9jcmVhdGVfYWN0aXZhdGlvbihJbnN0CiB7CiAgICAgdW5zaWduZWQgZHN0ID0gY3Vy
cmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKICAgICAKLSAgICBKdW1wIGFjdGl2YXRpb25D
cmVhdGVkID0gYnJhbmNoVGVzdFB0cihOb25aZXJvLCBBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVy
LCBzaXplb2YoUmVnaXN0ZXIpICogZHN0KSk7CisgICAgSnVtcCBhY3RpdmF0aW9uQ3JlYXRlZCA9
IGJyYW5jaFRlc3Q2NChOb25aZXJvLCBBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCBzaXplb2Yo
UmVnaXN0ZXIpICogZHN0KSk7CiAgICAgSklUU3R1YkNhbGwodGhpcywgY3RpX29wX3B1c2hfYWN0
aXZhdGlvbikuY2FsbChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiAgICAgYWN0aXZhdGlvbkNyZWF0ZWQubGluayh0aGlz
KTsKQEAgLTExODMsNyArMTE4Myw3IEBAIHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV9hcmd1bWVu
dHMoSW5zdHIKIHsKICAgICB1bnNpZ25lZCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5v
cGVyYW5kOwogCi0gICAgSnVtcCBhcmdzQ3JlYXRlZCA9IGJyYW5jaFRlc3RQdHIoTm9uWmVybywg
QWRkcmVzcyhjYWxsRnJhbWVSZWdpc3Rlciwgc2l6ZW9mKFJlZ2lzdGVyKSAqIGRzdCkpOworICAg
IEp1bXAgYXJnc0NyZWF0ZWQgPSBicmFuY2hUZXN0NjQoTm9uWmVybywgQWRkcmVzcyhjYWxsRnJh
bWVSZWdpc3Rlciwgc2l6ZW9mKFJlZ2lzdGVyKSAqIGRzdCkpOwogICAgIEpJVFN0dWJDYWxsKHRo
aXMsIGN0aV9vcF9jcmVhdGVfYXJndW1lbnRzKS5jYWxsKCk7CiAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIodW5tb2RpZmllZEFyZ3Vt
ZW50c1JlZ2lzdGVyKGRzdCkpOwpAQCAtMTE5NCw3ICsxMTk0LDcgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfaW5pdF9sYXp5X3JlZyhJbnN0cnVjdAogewogICAgIHVuc2lnbmVkIGRzdCA9IGN1cnJlbnRJ
bnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CiAKLSAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKDAp
LCBBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCBzaXplb2YoUmVnaXN0ZXIpICogZHN0KSk7Cisg
ICAgc3RvcmU2NChUcnVzdGVkSW1tNjQoKGludDY0X3QpMCksIEFkZHJlc3MoY2FsbEZyYW1lUmVn
aXN0ZXIsIHNpemVvZihSZWdpc3RlcikgKiBkc3QpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
Y29udmVydF90aGlzKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMjUzLDE2
ICsxMjUzLDE2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9jb252ZXJ0X3RoaXMoSW5zdHIKIAog
ICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKICAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKQot
ICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoYml0d2lzZV9jYXN0PHZvaWQqPihKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSkpKSwgcmVnVDApOwotICAgIEp1bXAgaXNOb3RVbmRlZmluZWQg
PSBicmFuY2hQdHIoTm90RXF1YWwsIHJlZ1QxLCBUcnVzdGVkSW1tUHRyKEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKSkpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NCgoSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpKSksIHJlZ1QwKTsKKyAgICBKdW1wIGlzTm90VW5kZWZpbmVk
ID0gYnJhbmNoNjQoTm90RXF1YWwsIHJlZ1QxLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpKSk7CiAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSgpOwotICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihnbG9iYWxUaGlzKSwgcmVnVDApOworICAgIG1vdmUoVHJ1c3RlZElt
bTY0KEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKHN0YXRpY19jYXN0PEpTQ2VsbCo+KGdsb2JhbFRo
aXMpKSkpLCByZWdUMCk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1
Y3Rpb25bMV0udS5vcGVyYW5kLCByZWdUMCk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoanVtcCgp
LCBPUENPREVfTEVOR1RIKG9wX2NvbnZlcnRfdGhpcykpOwogCiAgICAgbGlua1Nsb3dDYXNlKGl0
ZXIpOwogICAgIGlmIChzaG91bGRFbWl0UHJvZmlsaW5nKCkpCi0gICAgICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cihiaXR3aXNlX2Nhc3Q8dm9pZCo+KEpTVmFsdWU6OmVuY29kZShtX2dsb2JhbERhdGEt
PnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKSwgcmVnVDApOworICAgICAgICBtb3ZlKFRydXN0ZWRJ
bW02NChKU1ZhbHVlOjplbmNvZGUobV9nbG9iYWxEYXRhLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkp
KSwgcmVnVDApOwogICAgIGlzTm90VW5kZWZpbmVkLmxpbmsodGhpcyk7CiAgICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZSgpOwogICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9j
b252ZXJ0X3RoaXMpOwpAQCAtMTI4Miw3ICsxMjgyLDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X3RvX3ByaW1pdGl2ZShJbnN0cgogdm9pZCBKSVQ6OmVtaXRTbG93X29wX25vdChJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQogewogICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKLSAgICB4b3JQdHIoVHJ1c3RlZEltbTMy
KHN0YXRpY19jYXN0PGludDMyX3Q+KFZhbHVlRmFsc2UpKSwgcmVnVDApOworICAgIHhvcjY0KFRy
dXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90PihWYWx1ZUZhbHNlKSksIHJlZ1QwKTsKICAg
ICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3Bfbm90KTsKICAgICBzdHViQ2FsbC5h
ZGRBcmd1bWVudChyZWdUMCk7CiAgICAgc3R1YkNhbGwuY2FsbChjdXJyZW50SW5zdHJ1Y3Rpb25b
MV0udS5vcGVyYW5kKTsKQEAgLTE0NzAsNyArMTQ3MCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dl
dF9hcmd1bWVudF9ieV92YWwoSW4KIAogICAgIG5lZzMyKHJlZ1QxKTsKICAgICBzaWduRXh0ZW5k
MzJUb1B0cihyZWdUMSwgcmVnVDEpOwotICAgIGxvYWRQdHIoQmFzZUluZGV4KGNhbGxGcmFtZVJl
Z2lzdGVyLCByZWdUMSwgVGltZXNFaWdodCwgQ2FsbEZyYW1lOjp0aGlzQXJndW1lbnRPZmZzZXQo
KSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkpLCByZWdUMCk7CisgICAgbG9h
ZDY0KEJhc2VJbmRleChjYWxsRnJhbWVSZWdpc3RlciwgcmVnVDEsIFRpbWVzRWlnaHQsIENhbGxG
cmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCkgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdp
c3RlcikpKSwgcmVnVDApOwogICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoKTsKICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVnVDApOwogfQpAQCAtMTUxNCw3ICsxNTE0LDcgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX2Jhc2UoSW5zdHJ1Y3RpbwogICAgICAgICAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoUHRyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0cihnbG9iYWxP
YmplY3QpKSk7CiAgICAgICAgIH0KICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1
ZSwgcmVnVDApOwotICAgICAgICBzdG9yZVB0cihyZWdUMCwgb3BlcmF0aW9uLT5tX3JlZ2lzdGVy
QWRkcmVzcyk7CisgICAgICAgIHN0b3JlNjQocmVnVDAsIG9wZXJhdGlvbi0+bV9yZWdpc3RlckFk
ZHJlc3MpOwogICAgICAgICBpZiAoSGVhcDo6aXNXcml0ZUJhcnJpZXJFbmFibGVkKCkpCiAgICAg
ICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKGdsb2JhbE9iamVjdCwgcmVnVDAsIHJlZ1QyLCBTaG91
bGRGaWx0ZXJJbW1lZGlhdGVzLCBXcml0ZUJhcnJpZXJGb3JWYXJpYWJsZUFjY2Vzcyk7CiAgICAg
ICAgIHJldHVybjsKQEAgLTE1MjIsNyArMTUyMiw3IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90
b19iYXNlKEluc3RydWN0aW8KICAgICBjYXNlIFB1dFRvQmFzZU9wZXJhdGlvbjo6VmFyaWFibGVQ
dXQ6IHsKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYmFzZSwgcmVnVDAsIHZhbHVl
LCByZWdUMSk7CiAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNWYXJpYWJsZU9iamVj
dDo6b2Zmc2V0T2ZSZWdpc3RlcnMoKSksIHJlZ1QyKTsKLSAgICAgICAgc3RvcmVQdHIocmVnVDEs
IEFkZHJlc3MocmVnVDIsIG9wZXJhdGlvbi0+bV9vZmZzZXQgKiBzaXplb2YoUmVnaXN0ZXIpKSk7
CisgICAgICAgIHN0b3JlNjQocmVnVDEsIEFkZHJlc3MocmVnVDIsIG9wZXJhdGlvbi0+bV9vZmZz
ZXQgKiBzaXplb2YoUmVnaXN0ZXIpKSk7CiAgICAgICAgIGlmIChIZWFwOjppc1dyaXRlQmFycmll
ckVuYWJsZWQoKSkKICAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIocmVnVDAsIHJlZ1QxLCBy
ZWdUMiwgcmVnVDMsIFNob3VsZEZpbHRlckltbWVkaWF0ZXMsIFdyaXRlQmFycmllckZvclZhcmlh
YmxlQWNjZXNzKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMTUzNiw3ICsxNTM2LDcgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfcHV0X3RvX2Jhc2UoSW5zdHJ1Y3RpbwogICAgICAgICBsb2FkUHRyKEFkZHJl
c3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QyKTsKICAgICAgICAg
bG9hZDMyKCZvcGVyYXRpb24tPm1fb2Zmc2V0SW5CdXR0ZXJmbHksIHJlZ1QzKTsKICAgICAgICAg
c2lnbkV4dGVuZDMyVG9QdHIocmVnVDMsIHJlZ1QzKTsKLSAgICAgICAgc3RvcmVQdHIocmVnVDEs
IEJhc2VJbmRleChyZWdUMiwgcmVnVDMsIFRpbWVzRWlnaHQpKTsKKyAgICAgICAgc3RvcmU2NChy
ZWdUMSwgQmFzZUluZGV4KHJlZ1QyLCByZWdUMywgVGltZXNFaWdodCkpOwogICAgICAgICBpZiAo
SGVhcDo6aXNXcml0ZUJhcnJpZXJFbmFibGVkKCkpCiAgICAgICAgICAgICBlbWl0V3JpdGVCYXJy
aWVyKHJlZ1QwLCByZWdUMSwgcmVnVDIsIHJlZ1QzLCBTaG91bGRGaWx0ZXJJbW1lZGlhdGVzLCBX
cml0ZUJhcnJpZXJGb3JWYXJpYWJsZUFjY2Vzcyk7CiAgICAgICAgIHJldHVybjsKQEAgLTE2MDYs
NyArMTYwNiw3IEBAIHZvaWQgSklUOjplbWl0X3Jlc29sdmVfb3BlcmF0aW9ucyhSZXNvbHYKICAg
ICAgICAgICAgIEFTU0VSVChiYXNlVlIpOwogICAgICAgICAgICAgc2V0QmFzZSA9IHRydWU7CiAj
aWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihiaXR3aXNl
X2Nhc3Q8dm9pZCo+KEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKSkpLCBzY3JhdGNoKTsK
KyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKSksIHNjcmF0Y2gpOwogICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcigqYmFz
ZVZSLCBzY3JhdGNoKTsKICNlbHNlCiAgICAgICAgICAgICBlbWl0U3RvcmUoKmJhc2VWUiwganNV
bmRlZmluZWQoKSk7CkBAIC0xNjMyLDcgKzE2MzIsMTEgQEAgdm9pZCBKSVQ6OmVtaXRfcmVzb2x2
ZV9vcGVyYXRpb25zKFJlc29sdgogICAgICAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSgp
OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBjYXNlIFJlc29sdmVPcGVyYXRpb246OlNr
aXBUb3BTY29wZU5vZGU6IHsKLSAgICAgICAgICAgIEp1bXAgYWN0aXZhdGlvbk5vdENyZWF0ZWQg
PSBicmFuY2hUZXN0UHRyKFplcm8sIHBheWxvYWRGb3IobV9jb2RlQmxvY2stPmFjdGl2YXRpb25S
ZWdpc3RlcigpKSk7CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICAgICAgICAgIEp1bXAgYWN0
aXZhdGlvbk5vdENyZWF0ZWQgPSBicmFuY2gzMihFcXVhbCwgdGFnRm9yKG1fY29kZUJsb2NrLT5h
Y3RpdmF0aW9uUmVnaXN0ZXIoKSksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpFbXB0eVZhbHVlVGFn
KSk7CisjZWxzZQorICAgICAgICAgICAgSnVtcCBhY3RpdmF0aW9uTm90Q3JlYXRlZCA9IGJyYW5j
aFRlc3Q2NChaZXJvLCBhZGRyZXNzRm9yKG1fY29kZUJsb2NrLT5hY3RpdmF0aW9uUmVnaXN0ZXIo
KSkpOworI2VuZGlmCiAgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3Moc2NvcGUsIEpTU2NvcGU6
Om9mZnNldE9mTmV4dCgpKSwgc2NvcGUpOwogICAgICAgICAgICAgYWN0aXZhdGlvbk5vdENyZWF0
ZWQubGluayh0aGlzKTsKICAgICAgICAgICAgICsrcGM7CkBAIC0xNjk1LDE3ICsxNjk5LDIxIEBA
IHZvaWQgSklUOjplbWl0X3Jlc29sdmVfb3BlcmF0aW9ucyhSZXNvbHYKICAgICBjYXNlIFJlc29s
dmVPcGVyYXRpb246OkdldEFuZFJldHVybkdsb2JhbFZhcldhdGNoYWJsZToKICAgICBjYXNlIFJl
c29sdmVPcGVyYXRpb246OkdldEFuZFJldHVybkdsb2JhbFZhcjogewogI2lmIFVTRShKU1ZBTFVF
MzJfNjQpCi0gICAgICAgIGxvYWRQdHIocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ocGMtPm1fcmVn
aXN0ZXJBZGRyZXNzKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpLCB2
YWx1ZVRhZyk7CisgICAgICAgIGxvYWQzMihyZWludGVycHJldF9jYXN0PGNoYXIqPihwYy0+bV9y
ZWdpc3RlckFkZHJlc3MpICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZyks
IHZhbHVlVGFnKTsKKyAgICAgICAgbG9hZDMyKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHBjLT5t
X3JlZ2lzdGVyQWRkcmVzcykgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5
bG9hZCksIHZhbHVlKTsKKyNlbHNlCisgICAgICAgIGxvYWQ2NChyZWludGVycHJldF9jYXN0PGNo
YXIqPihwYy0+bV9yZWdpc3RlckFkZHJlc3MpLCB2YWx1ZSk7CiAjZW5kaWYKLSAgICAgICAgbG9h
ZFB0cihyZWludGVycHJldF9jYXN0PGNoYXIqPihwYy0+bV9yZWdpc3RlckFkZHJlc3MpICsgT0JK
RUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpLCB2YWx1ZSk7CiAgICAgICAg
IGJyZWFrOwogICAgIH0KICAgICBjYXNlIFJlc29sdmVPcGVyYXRpb246OkdldEFuZFJldHVyblNj
b3BlZFZhcjogewogICAgICAgICBsb2FkUHRyKEFkZHJlc3Moc2NvcGUsIEpTVmFyaWFibGVPYmpl
Y3Q6Om9mZnNldE9mUmVnaXN0ZXJzKCkpLCBzY29wZSk7CiAjaWYgVVNFKEpTVkFMVUUzMl82NCkK
LSAgICAgICAgbG9hZFB0cihBZGRyZXNzKHNjb3BlLCBwYy0+bV9vZmZzZXQgKiBzaXplb2YoUmVn
aXN0ZXIpICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCB2YWx1ZVRh
Zyk7CisgICAgICAgIGxvYWQzMihBZGRyZXNzKHNjb3BlLCBwYy0+bV9vZmZzZXQgKiBzaXplb2Yo
UmVnaXN0ZXIpICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCB2YWx1
ZVRhZyk7CisgICAgICAgIGxvYWQzMihBZGRyZXNzKHNjb3BlLCBwYy0+bV9vZmZzZXQgKiBzaXpl
b2YoUmVnaXN0ZXIpICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQp
KSwgdmFsdWUpOworI2Vsc2UKKyAgICAgICAgbG9hZDY0KEFkZHJlc3Moc2NvcGUsIHBjLT5tX29m
ZnNldCAqIHNpemVvZihSZWdpc3RlcikpLCB2YWx1ZSk7CiAjZW5kaWYKLSAgICAgICAgbG9hZFB0
cihBZGRyZXNzKHNjb3BlLCBwYy0+bV9vZmZzZXQgKiBzaXplb2YoUmVnaXN0ZXIpICsgT0JKRUNU
X09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwgdmFsdWUpOwogICAgICAgICBi
cmVhazsKICAgICB9CiAgICAgZGVmYXVsdDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCShyZXZpc2lvbiAxMzE1NDMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTM3LDcgKzEzNyw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV92YWwoSW5zdHJ1
Y3Rpb24KICAgICBMYWJlbCBkb25lID0gbGFiZWwoKTsKICAgICAKICNpZiAhQVNTRVJUX0RJU0FC
TEVECi0gICAgSnVtcCByZXN1bHRPSyA9IGJyYW5jaFRlc3RQdHIoTm9uWmVybywgcmVnVDApOwor
ICAgIEp1bXAgcmVzdWx0T0sgPSBicmFuY2hUZXN0NjQoTm9uWmVybywgcmVnVDApOwogICAgIGJy
ZWFrcG9pbnQoKTsKICAgICByZXN1bHRPSy5saW5rKHRoaXMpOwogI2VuZGlmCkBAIC0xNTUsOCAr
MTU1LDggQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRDb250aWd1b3VzR2V0QnlWYQogICAgIGJh
ZFR5cGUgPSBwYXRjaGFibGVCcmFuY2gzMihOb3RFcXVhbCwgcmVnVDIsIFRydXN0ZWRJbW0zMihD
b250aWd1b3VzU2hhcGUpKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0Ojpi
dXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QyKTsKICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMy
KEFib3ZlT3JFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQ
dWJsaWNMZW5ndGgoKSkpKTsKLSAgICBsb2FkUHRyKEJhc2VJbmRleChyZWdUMiwgcmVnVDEsIFNj
YWxlUHRyKSwgcmVnVDApOwotICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoVGVzdFB0cihaZXJv
LCByZWdUMCkpOworICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDIsIHJlZ1QxLCBUaW1lc0VpZ2h0
KSwgcmVnVDApOworICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoVGVzdDY0KFplcm8sIHJlZ1Qw
KSk7CiAgICAgCiAgICAgcmV0dXJuIHNsb3dDYXNlczsKIH0KQEAgLTE3MSw4ICsxNzEsOCBAQCBK
SVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEFycmF5U3RvcmFnZUdldEJ5CiAgICAgbG9hZFB0cihBZGRy
ZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMik7CiAgICAgc2xv
d0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1Qy
LCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSkpOwogCi0gICAgbG9hZFB0cihC
YXNlSW5kZXgocmVnVDIsIHJlZ1QxLCBTY2FsZVB0ciwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZz
ZXQoKSksIHJlZ1QwKTsKLSAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaFRlc3RQdHIoWmVybywg
cmVnVDApKTsKKyAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QyLCByZWdUMSwgVGltZXNFaWdodCwg
QXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSksIHJlZ1QwKTsKKyAgICBzbG93Q2FzZXMuYXBw
ZW5kKGJyYW5jaFRlc3Q2NChaZXJvLCByZWdUMCkpOwogICAgIAogICAgIHJldHVybiBzbG93Q2Fz
ZXM7CiB9CkBAIC0xODksNyArMTg5LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92
YWwoSW5zdHJ1YwogICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gYmFzZSBhcnJheSBjaGVjawog
ICAgIEp1bXAgbm90U3RyaW5nID0gYnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBK
U0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgVHJ1c3RlZEltbVB0cihtX2dsb2JhbERhdGEtPnN0
cmluZ1N0cnVjdHVyZS5nZXQoKSkpOwogICAgIGVtaXROYWtlZENhbGwoQ29kZUxvY2F0aW9uTGFi
ZWwobV9nbG9iYWxEYXRhLT5nZXRDVElTdHViKHN0cmluZ0dldEJ5VmFsU3R1YkdlbmVyYXRvciku
Y29kZSgpKSk7Ci0gICAgSnVtcCBmYWlsZWQgPSBicmFuY2hUZXN0UHRyKFplcm8sIHJlZ1QwKTsK
KyAgICBKdW1wIGZhaWxlZCA9IGJyYW5jaFRlc3Q2NChaZXJvLCByZWdUMCk7CiAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlZ1QwKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChqdW1w
KCksIE9QQ09ERV9MRU5HVEgob3BfZ2V0X2J5X3ZhbCkpOwogICAgIGZhaWxlZC5saW5rKHRoaXMp
OwpAQCAtMjM1LDcgKzIzNSw3IEBAIHZvaWQgSklUOjpjb21waWxlR2V0RGlyZWN0T2Zmc2V0KFJl
Z2lzdGUKICAgICAgICAgbmVnMzIob2Zmc2V0KTsKICAgICB9CiAgICAgc2lnbkV4dGVuZDMyVG9Q
dHIob2Zmc2V0LCBvZmZzZXQpOwotICAgIGxvYWRQdHIoQmFzZUluZGV4KHNjcmF0Y2gsIG9mZnNl
dCwgU2NhbGVQdHIsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRK
U1ZhbHVlKSksIHJlc3VsdCk7CisgICAgbG9hZDY0KEJhc2VJbmRleChzY3JhdGNoLCBvZmZzZXQs
IFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRK
U1ZhbHVlKSksIHJlc3VsdCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9wbmFtZShJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMjQ4LDcgKzI0OCw3IEBAIHZvaWQg
SklUOjplbWl0X29wX2dldF9ieV9wbmFtZShJbnN0cnVjdGkKICAgICB1bnNpZ25lZCBpID0gY3Vy
cmVudEluc3RydWN0aW9uWzZdLnUub3BlcmFuZDsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIocHJvcGVydHksIHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hQdHIoTm90RXF1YWws
IHJlZ1QwLCBhZGRyZXNzRm9yKGV4cGVjdGVkKSkpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaDY0
KE5vdEVxdWFsLCByZWdUMCwgYWRkcmVzc0ZvcihleHBlY3RlZCkpKTsKICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVycyhiYXNlLCByZWdUMCwgaXRlciwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CiAKQEAgLTMzNyw3ICszMzcsNyBAQCBKSVQ6
Okp1bXBMaXN0IEpJVDo6ZW1pdENvbnRpZ3VvdXNQdXRCeVZhCiAKICAgICBMYWJlbCBzdG9yZVJl
c3VsdCA9IGxhYmVsKCk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDMp
OwotICAgIHN0b3JlUHRyKHJlZ1QzLCBCYXNlSW5kZXgocmVnVDIsIHJlZ1QxLCBTY2FsZVB0cikp
OworICAgIHN0b3JlNjQocmVnVDMsIEJhc2VJbmRleChyZWdUMiwgcmVnVDEsIFRpbWVzRWlnaHQp
KTsKICAgICAKICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAgICAgb3V0T2ZCb3VuZHMubGluayh0
aGlzKTsKQEAgLTM2NywxMSArMzY3LDExIEBAIEpJVDo6SnVtcExpc3QgSklUOjplbWl0QXJyYXlT
dG9yYWdlUHV0QnkKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJm
bHlPZmZzZXQoKSksIHJlZ1QyKTsKICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEFib3Zl
T3JFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3Ro
T2Zmc2V0KCkpKSk7CiAKLSAgICBKdW1wIGVtcHR5ID0gYnJhbmNoVGVzdFB0cihaZXJvLCBCYXNl
SW5kZXgocmVnVDIsIHJlZ1QxLCBTY2FsZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFn
ZSwgbV92ZWN0b3JbMF0pKSk7CisgICAgSnVtcCBlbXB0eSA9IGJyYW5jaFRlc3Q2NChaZXJvLCBC
YXNlSW5kZXgocmVnVDIsIHJlZ1QxLCBUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlT
dG9yYWdlLCBtX3ZlY3RvclswXSkpKTsKIAogICAgIExhYmVsIHN0b3JlUmVzdWx0KHRoaXMpOwog
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QzKTsKLSAgICBzdG9yZVB0cihy
ZWdUMywgQmFzZUluZGV4KHJlZ1QyLCByZWdUMSwgU2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRPRihB
cnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSkpOworICAgIHN0b3JlNjQocmVnVDMsIEJhc2VJbmRl
eChyZWdUMiwgcmVnVDEsIFRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2Us
IG1fdmVjdG9yWzBdKSkpOwogICAgIEp1bXAgZW5kID0ganVtcCgpOwogICAgIAogICAgIGVtcHR5
LmxpbmsodGhpcyk7CkBAIC01MzUsNyArNTM1LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVHZXRCeUlk
SG90UGF0aChpbnQgYmFzZQogICAgIGFkZFNsb3dDYXNlKHN0cnVjdHVyZUNoZWNrKTsKIAogICAg
IENvbnZlcnRpYmxlTG9hZExhYmVsIHByb3BlcnR5U3RvcmFnZUxvYWQgPSBjb252ZXJ0aWJsZUxv
YWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDAp
OwotICAgIERhdGFMYWJlbENvbXBhY3QgZGlzcGxhY2VtZW50TGFiZWwgPSBsb2FkUHRyV2l0aENv
bXBhY3RBZGRyZXNzT2Zmc2V0UGF0Y2goQWRkcmVzcyhyZWdUMCwgcGF0Y2hHZXRCeUlkRGVmYXVs
dE9mZnNldCksIHJlZ1QwKTsKKyAgICBEYXRhTGFiZWxDb21wYWN0IGRpc3BsYWNlbWVudExhYmVs
ID0gbG9hZDY0V2l0aENvbXBhY3RBZGRyZXNzT2Zmc2V0UGF0Y2goQWRkcmVzcyhyZWdUMCwgcGF0
Y2hHZXRCeUlkRGVmYXVsdE9mZnNldCksIHJlZ1QwKTsKIAogICAgIExhYmVsIHB1dFJlc3VsdCh0
aGlzKTsKIApAQCAtNjAyLDcgKzYwMiw3IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV9pZChJ
bnN0cnVjdGlvbioKICAgICBhZGRTbG93Q2FzZShicmFuY2hQdHJXaXRoUGF0Y2goTm90RXF1YWws
IEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzdHJ1Y3R1cmVUb0Nv
bXBhcmUsIFRydXN0ZWRJbW1QdHIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocGF0Y2hHZXRCeUlk
RGVmYXVsdFN0cnVjdHVyZSkpKSk7CiAKICAgICBDb252ZXJ0aWJsZUxvYWRMYWJlbCBwcm9wZXJ0
eVN0b3JhZ2VMb2FkID0gY29udmVydGlibGVMb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0
OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QyKTsKLSAgICBEYXRhTGFiZWwzMiBkaXNwbGFjZW1l
bnRMYWJlbCA9IHN0b3JlUHRyV2l0aEFkZHJlc3NPZmZzZXRQYXRjaChyZWdUMSwgQWRkcmVzcyhy
ZWdUMiwgcGF0Y2hQdXRCeUlkRGVmYXVsdE9mZnNldCkpOworICAgIERhdGFMYWJlbDMyIGRpc3Bs
YWNlbWVudExhYmVsID0gc3RvcmU2NFdpdGhBZGRyZXNzT2Zmc2V0UGF0Y2gocmVnVDEsIEFkZHJl
c3MocmVnVDIsIHBhdGNoUHV0QnlJZERlZmF1bHRPZmZzZXQpKTsKIAogICAgIEVORF9VTklOVEVS
UlVQVEVEX1NFUVVFTkNFKHNlcXVlbmNlUHV0QnlJZCk7CiAKQEAgLTYzNiwzNSArNjM2LDM1IEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQoSW5zdHJ1Y3QKIHZvaWQgSklUOjpjb21w
aWxlUHV0RGlyZWN0T2Zmc2V0KFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCB2YWx1ZSwgUHJv
cGVydHlPZmZzZXQgY2FjaGVkT2Zmc2V0KQogewogICAgIGlmIChpc0lubGluZU9mZnNldChjYWNo
ZWRPZmZzZXQpKSB7Ci0gICAgICAgIHN0b3JlUHRyKHZhbHVlLCBBZGRyZXNzKGJhc2UsIEpTT2Jq
ZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSArIHNpemVvZihKU1ZhbHVlKSAqIG9mZnNldElu
SW5saW5lU3RvcmFnZShjYWNoZWRPZmZzZXQpKSk7CisgICAgICAgIHN0b3JlNjQodmFsdWUsIEFk
ZHJlc3MoYmFzZSwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpICsgc2l6ZW9mKEpT
VmFsdWUpICogb2Zmc2V0SW5JbmxpbmVTdG9yYWdlKGNhY2hlZE9mZnNldCkpKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KICAgICAKICAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNPYmplY3Q6
OmJ1dHRlcmZseU9mZnNldCgpKSwgYmFzZSk7Ci0gICAgc3RvcmVQdHIodmFsdWUsIEFkZHJlc3Mo
YmFzZSwgc2l6ZW9mKEpTVmFsdWUpICogb2Zmc2V0SW5CdXR0ZXJmbHkoY2FjaGVkT2Zmc2V0KSkp
OworICAgIHN0b3JlNjQodmFsdWUsIEFkZHJlc3MoYmFzZSwgc2l6ZW9mKEpTVmFsdWUpICogb2Zm
c2V0SW5CdXR0ZXJmbHkoY2FjaGVkT2Zmc2V0KSkpOwogfQogCiAvLyBDb21waWxlIGEgbG9hZCBm
cm9tIGFuIG9iamVjdCdzIHByb3BlcnR5IHN0b3JhZ2UuICBNYXkgb3ZlcndyaXRlIGJhc2UuCiB2
b2lkIEpJVDo6Y29tcGlsZUdldERpcmVjdE9mZnNldChSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVy
SUQgcmVzdWx0LCBQcm9wZXJ0eU9mZnNldCBjYWNoZWRPZmZzZXQpCiB7CiAgICAgaWYgKGlzSW5s
aW5lT2Zmc2V0KGNhY2hlZE9mZnNldCkpIHsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKGJhc2Us
IEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSArIHNpemVvZihKU1ZhbHVlKSAqIG9m
ZnNldEluSW5saW5lU3RvcmFnZShjYWNoZWRPZmZzZXQpKSwgcmVzdWx0KTsKKyAgICAgICAgbG9h
ZDY0KEFkZHJlc3MoYmFzZSwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpICsgc2l6
ZW9mKEpTVmFsdWUpICogb2Zmc2V0SW5JbmxpbmVTdG9yYWdlKGNhY2hlZE9mZnNldCkpLCByZXN1
bHQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAogICAgIGxvYWRQdHIoQWRkcmVzcyhi
YXNlLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZXN1bHQpOwotICAgIGxvYWRQdHIo
QWRkcmVzcyhyZXN1bHQsIHNpemVvZihKU1ZhbHVlKSAqIG9mZnNldEluQnV0dGVyZmx5KGNhY2hl
ZE9mZnNldCkpLCByZXN1bHQpOworICAgIGxvYWQ2NChBZGRyZXNzKHJlc3VsdCwgc2l6ZW9mKEpT
VmFsdWUpICogb2Zmc2V0SW5CdXR0ZXJmbHkoY2FjaGVkT2Zmc2V0KSksIHJlc3VsdCk7CiB9CiAK
IHZvaWQgSklUOjpjb21waWxlR2V0RGlyZWN0T2Zmc2V0KEpTT2JqZWN0KiBiYXNlLCBSZWdpc3Rl
cklEIHJlc3VsdCwgUHJvcGVydHlPZmZzZXQgY2FjaGVkT2Zmc2V0KQogewogICAgIGlmIChpc0lu
bGluZU9mZnNldChjYWNoZWRPZmZzZXQpKSB7Ci0gICAgICAgIGxvYWRQdHIoYmFzZS0+bG9jYXRp
b25Gb3JPZmZzZXQoY2FjaGVkT2Zmc2V0KSwgcmVzdWx0KTsKKyAgICAgICAgbG9hZDY0KGJhc2Ut
PmxvY2F0aW9uRm9yT2Zmc2V0KGNhY2hlZE9mZnNldCksIHJlc3VsdCk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAgICAgCiAgICAgbG9hZFB0cihiYXNlLT5idXR0ZXJmbHlBZGRyZXNzKCksIHJl
c3VsdCk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdCwgb2Zmc2V0SW5CdXR0ZXJmbHkoY2Fj
aGVkT2Zmc2V0KSAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSwgcmVzdWx0KTsKKyAg
ICBsb2FkNjQoQWRkcmVzcyhyZXN1bHQsIG9mZnNldEluQnV0dGVyZmx5KGNhY2hlZE9mZnNldCkg
KiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSksIHJlc3VsdCk7CiB9CiAKIHZvaWQgSklU
Ojpwcml2YXRlQ29tcGlsZVB1dEJ5SWRUcmFuc2l0aW9uKFN0cnVjdHVyZVN0dWJJbmZvKiBzdHVi
SW5mbywgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlLCBQ
cm9wZXJ0eU9mZnNldCBjYWNoZWRPZmZzZXQsIFN0cnVjdHVyZUNoYWluKiBjaGFpbiwgUmV0dXJu
QWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBib29sIGRpcmVjdCkKQEAgLTExOTYsNyArMTE5Niw3
IEBAIHZvaWQgSklUOjplbWl0X29wX2luaXRfZ2xvYmFsX2NvbnN0KEluc3QKIAogICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCwgcmVnVDAp
OwogCi0gICAgc3RvcmVQdHIocmVnVDAsIGN1cnJlbnRJbnN0cnVjdGlvblsxXS51LnJlZ2lzdGVy
UG9pbnRlcik7CisgICAgc3RvcmU2NChyZWdUMCwgY3VycmVudEluc3RydWN0aW9uWzFdLnUucmVn
aXN0ZXJQb2ludGVyKTsKICAgICBpZiAoSGVhcDo6aXNXcml0ZUJhcnJpZXJFbmFibGVkKCkpCiAg
ICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoZ2xvYmFsT2JqZWN0LCByZWdUMCwgcmVnVDIsIFNob3Vs
ZEZpbHRlckltbWVkaWF0ZXMsIFdyaXRlQmFycmllckZvclZhcmlhYmxlQWNjZXNzKTsKIH0KQEAg
LTEyMDksNyArMTIwOSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2luaXRfZ2xvYmFsX2NvbnN0X2No
ZWMKIAogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCk7CiAKLSAgICBzdG9yZVB0cihyZWdUMCwgY3VycmVudEluc3RydWN0aW9uWzFd
LnUucmVnaXN0ZXJQb2ludGVyKTsKKyAgICBzdG9yZTY0KHJlZ1QwLCBjdXJyZW50SW5zdHJ1Y3Rp
b25bMV0udS5yZWdpc3RlclBvaW50ZXIpOwogICAgIGlmIChIZWFwOjppc1dyaXRlQmFycmllckVu
YWJsZWQoKSkKICAgICAgICAgZW1pdFdyaXRlQmFycmllcihnbG9iYWxPYmplY3QsIHJlZ1QwLCBy
ZWdUMiwgU2hvdWxkRmlsdGVySW1tZWRpYXRlcywgV3JpdGVCYXJyaWVyRm9yVmFyaWFibGVBY2Nl
c3MpOwogfQpAQCAtMTUzMCw4ICsxNTMwLDggQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRJbnRU
eXBlZEFycmF5R2V0QgogICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShyZXN1bHRQYXlsb2Fk
LCBmcFJlZ1QwKTsKICAgICAgICAgYWRkRG91YmxlKEFic29sdXRlQWRkcmVzcygmdHdvVG9UaGUz
MiksIGZwUmVnVDApOwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIG1vdmVEb3VibGVUb1B0
cihmcFJlZ1QwLCByZXN1bHRQYXlsb2FkKTsKLSAgICAgICAgc3ViUHRyKHRhZ1R5cGVOdW1iZXJS
ZWdpc3RlciwgcmVzdWx0UGF5bG9hZCk7CisgICAgICAgIG1vdmVEb3VibGVUbzY0KGZwUmVnVDAs
IHJlc3VsdFBheWxvYWQpOworICAgICAgICBzdWI2NCh0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHJl
c3VsdFBheWxvYWQpOwogI2Vsc2UKICAgICAgICAgbW92ZURvdWJsZVRvSW50cyhmcFJlZ1QwLCBy
ZXN1bHRQYXlsb2FkLCByZXN1bHRUYWcpOwogI2VuZGlmCkBAIC0xNTQxLDcgKzE1NDEsNyBAQCBK
SVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEludFR5cGVkQXJyYXlHZXRCCiAgICAgfQogCiAjaWYgVVNF
KEpTVkFMVUU2NCkKLSAgICBvclB0cih0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHJlc3VsdFBheWxv
YWQpOworICAgIG9yNjQodGFnVHlwZU51bWJlclJlZ2lzdGVyLCByZXN1bHRQYXlsb2FkKTsKICNl
bHNlCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpLCByZXN1bHRUYWcp
OwogI2VuZGlmCkBAIC0xNTkwLDggKzE1OTAsOCBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEZs
b2F0VHlwZWRBcnJheUdlCiAgICAgfQogICAgIAogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgbW92
ZURvdWJsZVRvUHRyKGZwUmVnVDAsIHJlc3VsdFBheWxvYWQpOwotICAgIHN1YlB0cih0YWdUeXBl
TnVtYmVyUmVnaXN0ZXIsIHJlc3VsdFBheWxvYWQpOworICAgIG1vdmVEb3VibGVUbzY0KGZwUmVn
VDAsIHJlc3VsdFBheWxvYWQpOworICAgIHN1YjY0KHRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgcmVz
dWx0UGF5bG9hZCk7CiAjZWxzZQogICAgIG1vdmVEb3VibGVUb0ludHMoZnBSZWdUMCwgcmVzdWx0
UGF5bG9hZCwgcmVzdWx0VGFnKTsKICNlbmRpZgpAQCAtMTY5MSw4ICsxNjkxLDggQEAgSklUOjpK
dW1wTGlzdCBKSVQ6OmVtaXRGbG9hdFR5cGVkQXJyYXlQdQogICAgIEp1bXAgcmVhZHkgPSBqdW1w
KCk7CiAgICAgZG91YmxlQ2FzZS5saW5rKHRoaXMpOwogICAgIHNsb3dDYXNlcy5hcHBlbmQoZW1p
dEp1bXBJZk5vdEltbWVkaWF0ZU51bWJlcihlYXJseVNjcmF0Y2gpKTsKLSAgICBhZGRQdHIodGFn
VHlwZU51bWJlclJlZ2lzdGVyLCBlYXJseVNjcmF0Y2gpOwotICAgIG1vdmVQdHJUb0RvdWJsZShl
YXJseVNjcmF0Y2gsIGZwUmVnVDApOworICAgIGFkZDY0KHRhZ1R5cGVOdW1iZXJSZWdpc3Rlciwg
ZWFybHlTY3JhdGNoKTsKKyAgICBtb3ZlNjRUb0RvdWJsZShlYXJseVNjcmF0Y2gsIGZwUmVnVDAp
OwogICAgIHJlYWR5LmxpbmsodGhpcyk7CiAjZWxzZQogICAgIGVtaXRMb2FkKHZhbHVlLCBsYXRl
U2NyYXRjaCwgZWFybHlTY3JhdGNoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUU3R1YkNhbGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFN0dWJDYWxsLmgJKHJldmlzaW9uIDEzMTU0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUU3R1YkNhbGwuaAkod29ya2luZyBjb3B5KQpAQCAtOTQsMTUgKzk0LDE1IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICB7CiAgICAgICAgIH0KIAotI2lmIFVTRShKU1ZBTFVFMzJfNjQp
CiAgICAgICAgIEpJVFN0dWJDYWxsKEpJVCogaml0LCBFbmNvZGVkSlNWYWx1ZSAoSklUX1NUVUIg
KnN0dWIpKFNUVUJfQVJHU19ERUNMQVJBVElPTikpCiAgICAgICAgICAgICA6IG1faml0KGppdCkK
ICAgICAgICAgICAgICwgbV9zdHViKHN0dWIpCisjaWYgVVNFKEpTVkFMVUUzMl82NCkgfHwgIUFT
U0VSVF9ESVNBQkxFRAogICAgICAgICAgICAgLCBtX3JldHVyblR5cGUoVmFsdWUpCisjZW5kaWYK
ICAgICAgICAgICAgICwgbV9zdGFja0luZGV4KEpJVFNUQUNLRlJBTUVfQVJHU19JTkRFWCkKICAg
ICAgICAgewogICAgICAgICB9Ci0jZW5kaWYKIAogICAgICAgICAvLyBBcmd1bWVudHMgYXJlIGFk
ZGVkIGZpcnN0IHRvIGxhc3QuCiAKQEAgLTEzNyw3ICsxMzcsMTEgQEAgbmFtZXNwYWNlIEpTQyB7
CiAKICAgICAgICAgdm9pZCBhZGRBcmd1bWVudChKSVQ6OlJlZ2lzdGVySUQgYXJndW1lbnQpCiAg
ICAgICAgIHsKKyNpZiBDUFUoWDg2XzY0KQorICAgICAgICAgICAgbV9qaXQtPnBva2U2NChhcmd1
bWVudCwgbV9zdGFja0luZGV4KTsKKyNlbHNlCiAgICAgICAgICAgICBtX2ppdC0+cG9rZShhcmd1
bWVudCwgbV9zdGFja0luZGV4KTsKKyNlbmRpZgogICAgICAgICAgICAgbV9zdGFja0luZGV4ICs9
IHN0YWNrSW5kZXhTdGVwOwogICAgICAgICB9CiAgICAgICAgIApAQCAtMTQ4LDYgKzE1MiwxOCBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIG1faml0LT5wb2tlKEpJVDo6SW1tMzIodmFs
dWUudGFnKCkpLCBtX3N0YWNrSW5kZXggKyAxKTsKICAgICAgICAgICAgIG1fc3RhY2tJbmRleCAr
PSBzdGFja0luZGV4U3RlcDsKICAgICAgICAgfQorI2Vsc2UKKyAgICAgICAgdm9pZCBhZGRBcmd1
bWVudChKSVQ6OlRydXN0ZWRJbW02NCBhcmd1bWVudCkKKyAgICAgICAgeworICAgICAgICAgICAg
bV9qaXQtPnBva2UoYXJndW1lbnQsIG1fc3RhY2tJbmRleCk7CisgICAgICAgICAgICBtX3N0YWNr
SW5kZXggKz0gc3RhY2tJbmRleFN0ZXA7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGFkZEFy
Z3VtZW50KEpJVDo6SW1tNjQgYXJndW1lbnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1faml0
LT5wb2tlKGFyZ3VtZW50LCBtX3N0YWNrSW5kZXgpOworICAgICAgICAgICAgbV9zdGFja0luZGV4
ICs9IHN0YWNrSW5kZXhTdGVwOworICAgICAgICB9CiAjZW5kaWYKIAogICAgICAgICB2b2lkIGFk
ZEFyZ3VtZW50KEpJVDo6UmVnaXN0ZXJJRCB0YWcsIEpJVDo6UmVnaXN0ZXJJRCBwYXlsb2FkKQpA
QCAtMTc5LDkgKzE5NSw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGFkZEFyZ3Vt
ZW50KHVuc2lnbmVkIHNyYywgSklUOjpSZWdpc3RlcklEIHNjcmF0Y2hSZWdpc3RlcikgLy8gc3Jj
IGlzIGEgdmlydHVhbCByZWdpc3Rlci4KICAgICAgICAgewogICAgICAgICAgICAgaWYgKG1faml0
LT5tX2NvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoc3JjKSkKLSAgICAgICAgICAg
ICAgICBhZGRBcmd1bWVudChKSVQ6OkltbVB0cihKU1ZhbHVlOjplbmNvZGUobV9qaXQtPm1fY29k
ZUJsb2NrLT5nZXRDb25zdGFudChzcmMpKSkpOworICAgICAgICAgICAgICAgIGFkZEFyZ3VtZW50
KEpJVDo6SW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKG1faml0LT5tX2NvZGVCbG9jay0+Z2V0Q29uc3Rh
bnQoc3JjKSkpKTsKICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIG1faml0LT5s
b2FkUHRyKEpJVDo6QWRkcmVzcyhKSVQ6OmNhbGxGcmFtZVJlZ2lzdGVyLCBzcmMgKiBzaXplb2Yo
UmVnaXN0ZXIpKSwgc2NyYXRjaFJlZ2lzdGVyKTsKKyAgICAgICAgICAgICAgICBtX2ppdC0+bG9h
ZDY0KEpJVDo6QWRkcmVzcyhKSVQ6OmNhbGxGcmFtZVJlZ2lzdGVyLCBzcmMgKiBzaXplb2YoUmVn
aXN0ZXIpKSwgc2NyYXRjaFJlZ2lzdGVyKTsKICAgICAgICAgICAgICAgICBhZGRBcmd1bWVudChz
Y3JhdGNoUmVnaXN0ZXIpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbV9qaXQtPmtpbGxM
YXN0UmVzdWx0UmVnaXN0ZXIoKTsKQEAgLTI0Miw3ICsyNTgsNyBAQCBuYW1lc3BhY2UgSlNDIHsK
ICNlbHNlCiAgICAgICAgIEpJVDo6Q2FsbCBjYWxsKHVuc2lnbmVkIGRzdCkgLy8gZHN0IGlzIGEg
dmlydHVhbCByZWdpc3Rlci4KICAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKG1fcmV0dXJu
VHlwZSA9PSBWb2lkUHRyIHx8IG1fcmV0dXJuVHlwZSA9PSBDZWxsKTsKKyAgICAgICAgICAgIEFT
U0VSVChtX3JldHVyblR5cGUgPT0gVmFsdWUgfHwgbV9yZXR1cm5UeXBlID09IENlbGwpOwogICAg
ICAgICAgICAgSklUOjpDYWxsIGNhbGwgPSB0aGlzLT5jYWxsKCk7CiAgICAgICAgICAgICBtX2pp
dC0+ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogICAgICAgICAgICAgcmV0dXJuIGNhbGw7
CkBAIC0yNTAsNyArMjY2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIAogICAgICAgICBK
SVQ6OkNhbGwgY2FsbFdpdGhWYWx1ZVByb2ZpbGluZyh1bnNpZ25lZCBkc3QpCiAgICAgICAgIHsK
LSAgICAgICAgICAgIEFTU0VSVChtX3JldHVyblR5cGUgPT0gVm9pZFB0ciB8fCBtX3JldHVyblR5
cGUgPT0gQ2VsbCk7CisgICAgICAgICAgICBBU1NFUlQobV9yZXR1cm5UeXBlID09IFZhbHVlIHx8
IG1fcmV0dXJuVHlwZSA9PSBDZWxsKTsKICAgICAgICAgICAgIEpJVDo6Q2FsbCBjYWxsID0gdGhp
cy0+Y2FsbCgpOwogICAgICAgICAgICAgQVNTRVJUKEpJVDo6cmV0dXJuVmFsdWVSZWdpc3RlciA9
PSBKSVQ6OnJlZ1QwKTsKICAgICAgICAgICAgIG1faml0LT5lbWl0VmFsdWVQcm9maWxpbmdTaXRl
KCk7CkBAIC0yNjEsMTAgKzI3Nyw4IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIEpJVDo6
Q2FsbCBjYWxsKEpJVDo6UmVnaXN0ZXJJRCBkc3QpIC8vIGRzdCBpcyBhIG1hY2hpbmUgcmVnaXN0
ZXIuCiAgICAgICAgIHsKLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQorI2lmIFVTRShKU1ZBTFVFMzJf
NjQpIHx8ICFBU1NFUlRfRElTQUJMRUQKICAgICAgICAgICAgIEFTU0VSVChtX3JldHVyblR5cGUg
PT0gVmFsdWUgfHwgbV9yZXR1cm5UeXBlID09IFZvaWRQdHIgfHwgbV9yZXR1cm5UeXBlID09IElu
dCB8fCBtX3JldHVyblR5cGUgPT0gQ2VsbCk7Ci0jZWxzZQotICAgICAgICAgICAgQVNTRVJUKG1f
cmV0dXJuVHlwZSA9PSBWb2lkUHRyIHx8IG1fcmV0dXJuVHlwZSA9PSBJbnQgfHwgbV9yZXR1cm5U
eXBlID09IENlbGwpOwogI2VuZGlmCiAgICAgICAgICAgICBKSVQ6OkNhbGwgY2FsbCA9IHRoaXMt
PmNhbGwoKTsKICAgICAgICAgICAgIGlmIChkc3QgIT0gSklUOjpyZXR1cm5WYWx1ZVJlZ2lzdGVy
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KU0ludGVyZmFjZUpJVC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSlNJbnRlcmZhY2VKSVQuaAkocmV2
aXNpb24gMTMxNTQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KU0ludGVyZmFjZUpJ
VC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNzAsMzYgKzI3MCwzNiBAQCBuYW1lc3BhY2UgSlNDIHsK
ICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIEFMV0FZU19JTkxJTkUgSlNJbnRlcmZhY2VKSVQ6Okp1
bXAgSlNJbnRlcmZhY2VKSVQ6OmVtaXRKdW1wSWZJbW1lZGlhdGVOdW1iZXIoUmVnaXN0ZXJJRCBy
ZWcpCiAgICAgewotICAgICAgICByZXR1cm4gYnJhbmNoVGVzdFB0cihOb25aZXJvLCByZWcsIHRh
Z1R5cGVOdW1iZXJSZWdpc3Rlcik7CisgICAgICAgIHJldHVybiBicmFuY2hUZXN0NjQoTm9uWmVy
bywgcmVnLCB0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOwogICAgIH0KICAgICBBTFdBWVNfSU5MSU5F
IEpTSW50ZXJmYWNlSklUOjpKdW1wIEpTSW50ZXJmYWNlSklUOjplbWl0SnVtcElmTm90SW1tZWRp
YXRlTnVtYmVyKFJlZ2lzdGVySUQgcmVnKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGJyYW5jaFRl
c3RQdHIoWmVybywgcmVnLCB0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOworICAgICAgICByZXR1cm4g
YnJhbmNoVGVzdDY0KFplcm8sIHJlZywgdGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKICAgICB9CiAg
ICAgaW5saW5lIEpTSW50ZXJmYWNlSklUOjpKdW1wIEpTSW50ZXJmYWNlSklUOjplbWl0TG9hZEpT
Q2VsbCh1bnNpZ25lZCB2aXJ0dWFsUmVnaXN0ZXJJbmRleCwgUmVnaXN0ZXJJRCBkc3QpCiAgICAg
ewotICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVySW5kZXgpLCBkc3Qp
OwotICAgICAgICByZXR1cm4gYnJhbmNoVGVzdFB0cihOb25aZXJvLCBkc3QsIHRhZ01hc2tSZWdp
c3Rlcik7CisgICAgICAgIGxvYWQ2NChhZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlckluZGV4KSwg
ZHN0KTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaFRlc3Q2NChOb25aZXJvLCBkc3QsIHRhZ01hc2tS
ZWdpc3Rlcik7CiAgICAgfQogICAgIAogICAgIGlubGluZSBKU0ludGVyZmFjZUpJVDo6SnVtcCBK
U0ludGVyZmFjZUpJVDo6ZW1pdExvYWRJbnQzMih1bnNpZ25lZCB2aXJ0dWFsUmVnaXN0ZXJJbmRl
eCwgUmVnaXN0ZXJJRCBkc3QpCiAgICAgewotICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3Iodmly
dHVhbFJlZ2lzdGVySW5kZXgpLCBkc3QpOwotICAgICAgICBKdW1wIHJlc3VsdCA9IGJyYW5jaFB0
cihCZWxvdywgZHN0LCB0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOworICAgICAgICBsb2FkNjQoYWRk
cmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXJJbmRleCksIGRzdCk7CisgICAgICAgIEp1bXAgcmVzdWx0
ID0gYnJhbmNoNjQoQmVsb3csIGRzdCwgdGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKICAgICAgICAg
emVyb0V4dGVuZDMyVG9QdHIoZHN0LCBkc3QpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAg
IH0KIAogICAgIGlubGluZSBKU0ludGVyZmFjZUpJVDo6SnVtcCBKU0ludGVyZmFjZUpJVDo6ZW1p
dExvYWREb3VibGUodW5zaWduZWQgdmlydHVhbFJlZ2lzdGVySW5kZXgsIEZQUmVnaXN0ZXJJRCBk
c3QsIFJlZ2lzdGVySUQgc2NyYXRjaCkKICAgICB7Ci0gICAgICAgIGxvYWRQdHIoYWRkcmVzc0Zv
cih2aXJ0dWFsUmVnaXN0ZXJJbmRleCksIHNjcmF0Y2gpOworICAgICAgICBsb2FkNjQoYWRkcmVz
c0Zvcih2aXJ0dWFsUmVnaXN0ZXJJbmRleCksIHNjcmF0Y2gpOwogICAgICAgICBKdW1wIG5vdE51
bWJlciA9IGVtaXRKdW1wSWZOb3RJbW1lZGlhdGVOdW1iZXIoc2NyYXRjaCk7Ci0gICAgICAgIEp1
bXAgbm90SW50ID0gYnJhbmNoUHRyKEJlbG93LCBzY3JhdGNoLCB0YWdUeXBlTnVtYmVyUmVnaXN0
ZXIpOworICAgICAgICBKdW1wIG5vdEludCA9IGJyYW5jaDY0KEJlbG93LCBzY3JhdGNoLCB0YWdU
eXBlTnVtYmVyUmVnaXN0ZXIpOwogICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShzY3JhdGNo
LCBkc3QpOwogICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAgICAgICAgIG5vdEludC5saW5r
KHRoaXMpOwotICAgICAgICBhZGRQdHIodGFnVHlwZU51bWJlclJlZ2lzdGVyLCBzY3JhdGNoKTsK
LSAgICAgICAgbW92ZVB0clRvRG91YmxlKHNjcmF0Y2gsIGRzdCk7CisgICAgICAgIGFkZDY0KHRh
Z1R5cGVOdW1iZXJSZWdpc3Rlciwgc2NyYXRjaCk7CisgICAgICAgIG1vdmU2NFRvRG91YmxlKHNj
cmF0Y2gsIGRzdCk7CiAgICAgICAgIGRvbmUubGluayh0aGlzKTsKICAgICAgICAgcmV0dXJuIG5v
dE51bWJlcjsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NwZWNpYWxp
emVkVGh1bmtKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Nw
ZWNpYWxpemVkVGh1bmtKSVQuaAkocmV2aXNpb24gMTMxNTQzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9TcGVjaWFsaXplZFRodW5rSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTkwLDkg
KzkwLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgcmV0dXJuRG91YmxlKEZQUmVn
aXN0ZXJJRCBzcmMpCiAgICAgICAgIHsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICAgICAg
bW92ZURvdWJsZVRvUHRyKHNyYywgcmVnVDApOwotICAgICAgICAgICAgSnVtcCB6ZXJvID0gYnJh
bmNoVGVzdFB0cihaZXJvLCByZWdUMCk7Ci0gICAgICAgICAgICBzdWJQdHIodGFnVHlwZU51bWJl
clJlZ2lzdGVyLCByZWdUMCk7CisgICAgICAgICAgICBtb3ZlRG91YmxlVG82NChzcmMsIHJlZ1Qw
KTsKKyAgICAgICAgICAgIEp1bXAgemVybyA9IGJyYW5jaFRlc3Q2NChaZXJvLCByZWdUMCk7Cisg
ICAgICAgICAgICBzdWI2NCh0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHJlZ1QwKTsKICAgICAgICAg
ICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKICAgICAgICAgICAgIHplcm8ubGluayh0aGlzKTsKICAg
ICAgICAgICAgIG1vdmUodGFnVHlwZU51bWJlclJlZ2lzdGVyLCByZWdUMCk7CkBAIC0xNTEsNyAr
MTUxLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgdGFnUmV0dXJuQXNJbnQzMigp
CiAgICAgICAgIHsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICAgICAgb3JQdHIodGFnVHlw
ZU51bWJlclJlZ2lzdGVyLCByZWdUMCk7CisgICAgICAgICAgICBvcjY0KHRhZ1R5cGVOdW1iZXJS
ZWdpc3RlciwgcmVnVDApOwogI2Vsc2UKICAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OkludDMyVGFnKSwgcmVnVDEpOwogI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1ZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1ZhbHVlLmNwcAkocmV2aXNpb24gMTMxNTQzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwNCw3
ICsyMDQsNyBAQCBjaGFyKiBKU1ZhbHVlOjpkZXNjcmlwdGlvbigpIGNvbnN0CiAgICAgICAgIHNu
cHJpbnRmKGRlc2NyaXB0aW9uLCBzaXplLCAiSW50MzI6ICVkIiwgYXNJbnQzMigpKTsKICAgICBl
bHNlIGlmIChpc0RvdWJsZSgpKSB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgc25wcmlu
dGYoZGVzY3JpcHRpb24sIHNpemUsICJEb3VibGU6ICVseCwgJWxmIiwgcmVpbnRlcnByZXREb3Vi
bGVUb0ludHB0cihhc0RvdWJsZSgpKSwgYXNEb3VibGUoKSk7CisgICAgICAgIHNucHJpbnRmKGRl
c2NyaXB0aW9uLCBzaXplLCAiRG91YmxlOiAlbGxkLCAlbGYiLCAobG9uZyBsb25nKXJlaW50ZXJw
cmV0RG91YmxlVG9JbnQ2NChhc0RvdWJsZSgpKSwgYXNEb3VibGUoKSk7CiAjZWxzZQogICAgICAg
ICB1bmlvbiB7CiAgICAgICAgICAgICBkb3VibGUgYXNEb3VibGU7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNWYWx1ZS5oCShyZXZpc2lvbiAxMzE1NDMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY5LDEx
ICs2OSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGVudW0gUHJlZmVycmVkUHJpbWl0aXZlVHlw
ZSB7IE5vUHJlZmVyZW5jZSwgUHJlZmVyTnVtYmVyLCBQcmVmZXJTdHJpbmcgfTsKIAogCi0jaWYg
VVNFKEpTVkFMVUUzMl82NCkKICAgICB0eXBlZGVmIGludDY0X3QgRW5jb2RlZEpTVmFsdWU7Ci0j
ZWxzZQotICAgIHR5cGVkZWYgdm9pZCogRW5jb2RlZEpTVmFsdWU7Ci0jZW5kaWYKICAgICAKICAg
ICB1bmlvbiBFbmNvZGVkVmFsdWVEZXNjcmlwdG9yIHsKICAgICAgICAgaW50NjRfdCBhc0ludDY0
OwpAQCAtMzkwLDkgKzM4Niw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBFbmNvZGVkVmFs
dWVEZXNjcmlwdG9yIHU7CiAgICAgfTsKIAotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgdHlw
ZWRlZiBJbnRIYXNoPEVuY29kZWRKU1ZhbHVlPiBFbmNvZGVkSlNWYWx1ZUhhc2g7CiAKKyNpZiBV
U0UoSlNWQUxVRTMyXzY0KQogICAgIHN0cnVjdCBFbmNvZGVkSlNWYWx1ZUhhc2hUcmFpdHMgOiBI
YXNoVHJhaXRzPEVuY29kZWRKU1ZhbHVlPiB7CiAgICAgICAgIHN0YXRpYyBjb25zdCBib29sIGVt
cHR5VmFsdWVJc1plcm8gPSBmYWxzZTsKICAgICAgICAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIGVt
cHR5VmFsdWUoKSB7IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsgfQpAQCAtNDAw
LDggKzM5Niw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdGF0aWMgYm9vbCBpc0RlbGV0
ZWRWYWx1ZShFbmNvZGVkSlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gdmFsdWUgPT0gSlNWYWx1ZTo6
ZW5jb2RlKEpTVmFsdWUoSlNWYWx1ZTo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlKSk7IH0KICAgICB9
OwogI2Vsc2UKLSAgICB0eXBlZGVmIFB0ckhhc2g8RW5jb2RlZEpTVmFsdWU+IEVuY29kZWRKU1Zh
bHVlSGFzaDsKLQogICAgIHN0cnVjdCBFbmNvZGVkSlNWYWx1ZUhhc2hUcmFpdHMgOiBIYXNoVHJh
aXRzPEVuY29kZWRKU1ZhbHVlPiB7CiAgICAgICAgIHN0YXRpYyB2b2lkIGNvbnN0cnVjdERlbGV0
ZWRWYWx1ZShFbmNvZGVkSlNWYWx1ZSYgc2xvdCkgeyBzbG90ID0gSlNWYWx1ZTo6ZW5jb2RlKEpT
VmFsdWUoSlNWYWx1ZTo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlKSk7IH0KICAgICAgICAgc3RhdGlj
IGJvb2wgaXNEZWxldGVkVmFsdWUoRW5jb2RlZEpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIHZhbHVl
ID09IEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKEpTVmFsdWU6Okhhc2hUYWJsZURlbGV0ZWRWYWx1
ZSkpOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhbHVlSW5saW5l
TWV0aG9kcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
VmFsdWVJbmxpbmVNZXRob2RzLmgJKHJldmlzaW9uIDEzMTU0MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTVmFsdWVJbmxpbmVNZXRob2RzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTE0MCw3ICsxNDAsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgKnRoaXMgPSBKU1ZhbHVl
KHN0YXRpY19jYXN0PGludDMyX3Q+KGQpKTsKICAgICB9CiAKLSNpZiBVU0UoSlNWQUxVRTMyXzY0
KQogICAgIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSB2YWx1
ZSkKICAgICB7CiAgICAgICAgIHJldHVybiB2YWx1ZS51LmFzSW50NjQ7CkBAIC0xNTMsNiArMTUy
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHJldHVybiB2OwogICAgIH0KIAorI2lmIFVT
RShKU1ZBTFVFMzJfNjQpCiAgICAgaW5saW5lIEpTVmFsdWU6OkpTVmFsdWUoKQogICAgIHsKICAg
ICAgICAgdS5hc0JpdHMudGFnID0gRW1wdHlWYWx1ZVRhZzsKQEAgLTMzMywxNyArMzMzLDYgQEAg
bmFtZXNwYWNlIEpTQyB7CiAKICNlbHNlIC8vICFVU0UoSlNWQUxVRTMyXzY0KSBpLmUuIFVTRShK
U1ZBTFVFNjQpCiAKLSAgICAvLyBKU1ZhbHVlIG1lbWJlciBmdW5jdGlvbnMuCi0gICAgaW5saW5l
IEVuY29kZWRKU1ZhbHVlIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIHZhbHVlLnUucHRyOwotICAgIH0KLQotICAgIGlubGluZSBKU1ZhbHVlIEpT
VmFsdWU6OmRlY29kZShFbmNvZGVkSlNWYWx1ZSBwdHIpCi0gICAgewotICAgICAgICByZXR1cm4g
SlNWYWx1ZShyZWludGVycHJldF9jYXN0PEpTQ2VsbCo+KHB0cikpOwotICAgIH0KLQogICAgIC8v
IDB4MCBjYW4gbmV2ZXIgb2NjdXIgbmF0dXJhbGx5IGJlY2F1c2UgaXQgaGFzIGEgdGFnIG9mIDAw
LCBpbmRpY2F0aW5nIGEgcG9pbnRlciB2YWx1ZSwgYnV0IGEgcGF5bG9hZCBvZiAweDAsIHdoaWNo
IGlzIGluIHRoZSAoaW52YWxpZCkgemVybyBwYWdlLgogICAgIGlubGluZSBKU1ZhbHVlOjpKU1Zh
bHVlKCkKICAgICB7CkBAIC0zNTgsMjcgKzM0NywyNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAg
IGlubGluZSBKU1ZhbHVlOjpKU1ZhbHVlKEpTQ2VsbCogcHRyKQogICAgIHsKLSAgICAgICAgdS5w
dHIgPSBwdHI7CisgICAgICAgIHUuYXNJbnQ2NCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90
PihwdHIpOwogICAgIH0KIAogICAgIGlubGluZSBKU1ZhbHVlOjpKU1ZhbHVlKGNvbnN0IEpTQ2Vs
bCogcHRyKQogICAgIHsKLSAgICAgICAgdS5wdHIgPSBjb25zdF9jYXN0PEpTQ2VsbCo+KHB0cik7
CisgICAgICAgIHUuYXNJbnQ2NCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pihjb25zdF9j
YXN0PEpTQ2VsbCo+KHB0cikpOwogICAgIH0KIAogICAgIGlubGluZSBKU1ZhbHVlOjpvcGVyYXRv
ciBib29sKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiB1LnB0cjsKKyAgICAgICAgcmV0
dXJuIHUuYXNJbnQ2NDsKICAgICB9CiAKICAgICBpbmxpbmUgYm9vbCBKU1ZhbHVlOjpvcGVyYXRv
cj09KGNvbnN0IEpTVmFsdWUmIG90aGVyKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIHUu
cHRyID09IG90aGVyLnUucHRyOworICAgICAgICByZXR1cm4gdS5hc0ludDY0ID09IG90aGVyLnUu
YXNJbnQ2NDsKICAgICB9CiAKICAgICBpbmxpbmUgYm9vbCBKU1ZhbHVlOjpvcGVyYXRvciE9KGNv
bnN0IEpTVmFsdWUmIG90aGVyKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIHUucHRyICE9
IG90aGVyLnUucHRyOworICAgICAgICByZXR1cm4gdS5hc0ludDY0ICE9IG90aGVyLnUuYXNJbnQ2
NDsKICAgICB9CiAKICAgICBpbmxpbmUgYm9vbCBKU1ZhbHVlOjppc0VtcHR5KCkgY29uc3QKQEAg
LTQ2NCwxOCArNDUzLDE4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICByZXR1cm4gKHUuYXNJ
bnQ2NCAmIFRhZ1R5cGVOdW1iZXIpID09IFRhZ1R5cGVOdW1iZXI7CiAgICAgfQogCi0gICAgaW5s
aW5lIGludHB0cl90IHJlaW50ZXJwcmV0RG91YmxlVG9JbnRwdHIoZG91YmxlIHZhbHVlKQorICAg
IGlubGluZSBpbnQ2NF90IHJlaW50ZXJwcmV0RG91YmxlVG9JbnQ2NChkb3VibGUgdmFsdWUpCiAg
ICAgewotICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PGludHB0cl90Pih2YWx1ZSk7CisgICAg
ICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8aW50NjRfdD4odmFsdWUpOwogICAgIH0KLSAgICBpbmxp
bmUgZG91YmxlIHJlaW50ZXJwcmV0SW50cHRyVG9Eb3VibGUoaW50cHRyX3QgdmFsdWUpCisgICAg
aW5saW5lIGRvdWJsZSByZWludGVycHJldEludDY0VG9Eb3VibGUoaW50NjRfdCB2YWx1ZSkKICAg
ICB7CiAgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8ZG91YmxlPih2YWx1ZSk7CiAgICAgfQog
CiAgICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlOjpKU1ZhbHVlKEVuY29kZUFzRG91YmxlVGFnLCBk
b3VibGUgZCkKICAgICB7Ci0gICAgICAgIHUuYXNJbnQ2NCA9IHJlaW50ZXJwcmV0RG91YmxlVG9J
bnRwdHIoZCkgKyBEb3VibGVFbmNvZGVPZmZzZXQ7CisgICAgICAgIHUuYXNJbnQ2NCA9IHJlaW50
ZXJwcmV0RG91YmxlVG9JbnQ2NChkKSArIERvdWJsZUVuY29kZU9mZnNldDsKICAgICB9CiAKICAg
ICBpbmxpbmUgSlNWYWx1ZTo6SlNWYWx1ZShpbnQgaSkKQEAgLTQ4Niw3ICs0NzUsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICBpbmxpbmUgZG91YmxlIEpTVmFsdWU6OmFzRG91YmxlKCkgY29uc3QK
ICAgICB7CiAgICAgICAgIEFTU0VSVChpc0RvdWJsZSgpKTsKLSAgICAgICAgcmV0dXJuIHJlaW50
ZXJwcmV0SW50cHRyVG9Eb3VibGUodS5hc0ludDY0IC0gRG91YmxlRW5jb2RlT2Zmc2V0KTsKKyAg
ICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0SW50NjRUb0RvdWJsZSh1LmFzSW50NjQgLSBEb3VibGVF
bmNvZGVPZmZzZXQpOwogICAgIH0KIAogICAgIGlubGluZSBib29sIEpTVmFsdWU6OmlzTnVtYmVy
KCkgY29uc3QK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>169306</attachid>
            <date>2012-10-17 17:06:44 -0700</date>
            <delta_ts>2012-10-18 21:37:30 -0700</delta_ts>
            <desc>Another rebase: Split patch - part 2: let the JIT compilers use the *64 interfaces of MacroAssemblerX86_64</desc>
            <filename>99154.part2.2.patch</filename>
            <type>text/plain</type>
            <size>223233</size>
            <attacher name="Yuqiang Xian">yuqiang.xian</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTMxNjYzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI0MCBA
QAorMjAxMi0xMC0xNiAgWXVxaWFuZyBYaWFuICA8eXVxaWFuZy54aWFuQGludGVsLmNvbT4KKwor
ICAgICAgICBSZWZhY3RvciBNYWNyb0Fzc2VtYmxlciBpbnRlcmZhY2VzIHRvIGRpZmZlcmVudGlh
dGUgdGhlIHBvaW50ZXIgb3BlcmFuZHMgZnJvbSB0aGUgNjQtYml0IGludGVnZXIgb3BlcmFuZHMK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk5MTU0CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW4gY3VycmVu
dCBKYXZhU2NyaXB0Q29yZSBpbXBsZW1lbnRhdGlvbiBmb3IgSlNWQUxVRTY0IHBsYXRmb3JtIChp
LmUuLAorICAgICAgICB0aGUgWDY0IHBsYXRmb3JtKSwgd2UgYXNzdW1lIHRoYXQgdGhlIEpTVmFs
dWUgc2l6ZSBpcyBzYW1lIHRvIHRoZQorICAgICAgICBwb2ludGVyIHNpemUsIGFuZCB0aHVzIEVu
Y29kZWRKU1ZhbHVlIGlzIHNpbXBseSB0eXBlIGRlZmluZWQgYXMgYQorICAgICAgICAidm9pZCoi
LiBJbiB0aGUgSklUIGNvbXBpbGVyLCB3ZSBhbHNvIHRha2UgdGhpcyBhc3N1bXB0aW9uIGFuZCBp
bnZva2UKKyAgICAgICAgdGhlIHNhbWUgbWFjcm8gYXNzZW1ibGVyIGludGVyZmFjZXMgZm9yIGJv
dGggSlNWYWx1ZSBhbmQgcG9pbnRlcgorICAgICAgICBvcGVyYW5kcy4gV2UgbmVlZCB0byBkaWZm
ZXJlbnRpYXRlIHRoZSBvcGVyYXRpb25zIG9uIHBvaW50ZXJzIGZyb20gdGhlCisgICAgICAgIG9w
ZXJhdGlvbnMgb24gSlNWYWx1ZXMsIGFuZCBsZXQgdGhlbSBpbnZva2luZyBkaWZmZXJlbnQgbWFj
cm8KKyAgICAgICAgYXNzZW1ibGVyIGludGVyZmFjZXMuIEZvciBleGFtcGxlLCB3ZSBub3cgdXNl
IHRoZSBpbnRlcmZhY2Ugb2YKKyAgICAgICAgImxvYWRQdHIiIHRvIGxvYWQgZWl0aGVyIGEgcG9p
bnRlciBvciBhIEpTVmFsdWUsIGFuZCB3ZSBuZWVkIHRvIHN3aXRjaAorICAgICAgICB0byB1c2lu
ZyAibG9hZFB0ciIgdG8gbG9hZCBhIHBvaW50ZXIgYW5kIHNvbWUgbmV3ICJsb2FkNjQiIGludGVy
ZmFjZQorICAgICAgICB0byBsb2FkIGEgSlNWYWx1ZS4gVGhpcyB3b3VsZCBoZWxwIHVzIHN1cHBv
cnRpbmcgb3RoZXIgSlNWQUxVRTY0CisgICAgICAgIHBsYXRmb3JtcyB3aGVyZSBwb2ludGVyIHNp
emUgaXMgbm90IG5lY2Vzc2FyaWx5IDY0LWJpdHMsIGZvciBleGFtcGxlCisgICAgICAgIHgzMiAo
YnVnICM5OTE1MykuCisKKyAgICAgICAgVGhlIG1ham9yIG1vZGlmaWNhdGlvbiBJIG1hZGUgaXMg
dG8gaW50cm9kdWNlIHRoZSAiKjY0IiBpbnRlcmZhY2VzIGluCisgICAgICAgIHRoZSBNYWNyb0Fz
c2VtYmxlciBmb3IgdGhvc2Ugb3BlcmF0aW9ucyBvbiBKU1ZhbHVlcywga2VlcCB0aGUgIipQdHIi
CisgICAgICAgIGludGVyZmFjZXMgZm9yIHRob3NlIG9wZXJhdGlvbnMgb24gcmVhbCBwb2ludGVy
cywgYW5kIGdvIHRocm91Z2ggYWxsCisgICAgICAgIHRoZSBKSVQgY29tcGlsZXIgY29kZSB0byBj
b3JyZWN0IHRoZSB1c2FnZS4KKworICAgICAgICBUaGlzIGlzIHRoZSBzZWNvbmQgcGFydCBvZiB0
aGUgd29yaywgaS5lLCB0byBjb3JyZWN0IHRoZSB1c2FnZSBvZiB0aGUKKyAgICAgICAgbmV3IE1h
Y3JvQXNzZW1ibGVyIGludGVyZmFjZXMgaW4gdGhlIEpJVCBjb21waWxlcnMsIHdoaWNoIGFsc28g
bWVhbnMKKyAgICAgICAgdGhhdCBub3cgRW5jb2RlZEpTVmFsdWUgaXMgZGVmaW5lZCBhcyBhIDY0
LWJpdCBpbnRlZ2VyLCBhbmQgdGhlICIqNjQiCisgICAgICAgIGludGVyZmFjZXMgYXJlIHVzZWQg
Zm9yIGl0LgorCisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmg6IEpTVmFsdWUg
aW1tZWRpYXRlcyBzaG91bGQgYmUgaW4gSW1tNjQgaW5zdGVhZCBvZiBJbW1QdHIuCisgICAgICAg
IChNYWNyb0Fzc2VtYmxlcik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyOjpzaG91bGRC
bGluZCk6CisgICAgICAgICogZGZnL0RGR0Fzc2VtYmx5SGVscGVycy5jcHA6IENvcnJlY3QgdGhl
IEpJVCBjb21waWxlcnMgdXNhZ2Ugb2YgdGhlIG5ldyBpbnRlcmZhY2VzLgorICAgICAgICAoSlND
OjpERkc6OkFzc2VtYmx5SGVscGVyczo6aml0QXNzZXJ0SXNJbnQzMik6CisgICAgICAgIChKU0M6
OkRGRzo6QXNzZW1ibHlIZWxwZXJzOjpqaXRBc3NlcnRJc0pTSW50MzIpOgorICAgICAgICAoSlND
OjpERkc6OkFzc2VtYmx5SGVscGVyczo6aml0QXNzZXJ0SXNKU051bWJlcik6CisgICAgICAgIChK
U0M6OkRGRzo6QXNzZW1ibHlIZWxwZXJzOjpqaXRBc3NlcnRJc0pTRG91YmxlKToKKyAgICAgICAg
KEpTQzo6REZHOjpBc3NlbWJseUhlbHBlcnM6OmppdEFzc2VydElzQ2VsbCk6CisgICAgICAgICog
ZGZnL0RGR0Fzc2VtYmx5SGVscGVycy5oOgorICAgICAgICAoSlNDOjpERkc6OkFzc2VtYmx5SGVs
cGVyczo6ZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKToKKyAgICAgICAgKEpTQzo6REZHOjpBc3Nl
bWJseUhlbHBlcnM6OmJyYW5jaElmTm90Q2VsbCk6CisgICAgICAgIChKU0M6OkRGRzo6QXNzZW1i
bHlIZWxwZXJzOjpkZWJ1Z0NhbGwpOgorICAgICAgICAoSlNDOjpERkc6OkFzc2VtYmx5SGVscGVy
czo6Ym94RG91YmxlKToKKyAgICAgICAgKEpTQzo6REZHOjpBc3NlbWJseUhlbHBlcnM6OnVuYm94
RG91YmxlKToKKyAgICAgICAgKEpTQzo6REZHOjpBc3NlbWJseUhlbHBlcnM6OmVtaXRFeGNlcHRp
b25DaGVjayk6CisgICAgICAgICogZGZnL0RGR0NDYWxsSGVscGVycy5oOgorICAgICAgICAoSlND
OjpERkc6OkNDYWxsSGVscGVyczo6c2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKToKKyAgICAg
ICAgKENDYWxsSGVscGVycyk6CisgICAgICAgICogZGZnL0RGR09TUkV4aXRDb21waWxlcjY0LmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KToKKyAg
ICAgICAgKiBkZmcvREZHUmVwYXRjaC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Z2VuZXJhdGVQ
cm90b0NoYWluQWNjZXNzU3R1Yik6CisgICAgICAgIChKU0M6OkRGRzo6dHJ5Q2FjaGVHZXRCeUlE
KToKKyAgICAgICAgKEpTQzo6REZHOjp0cnlCdWlsZEdldEJ5SURMaXN0KToKKyAgICAgICAgKEpT
Qzo6REZHOjplbWl0UHV0UmVwbGFjZVN0dWIpOgorICAgICAgICAoSlNDOjpERkc6OmVtaXRQdXRU
cmFuc2l0aW9uU3R1Yik6CisgICAgICAgICogZGZnL0RGR1NjcmF0Y2hSZWdpc3RlckFsbG9jYXRv
ci5oOgorICAgICAgICAoSlNDOjpERkc6OlNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6cHJlc2Vy
dmVVc2VkUmVnaXN0ZXJzVG9TY3JhdGNoQnVmZmVyKToKKyAgICAgICAgKEpTQzo6REZHOjpTY3Jh
dGNoUmVnaXN0ZXJBbGxvY2F0b3I6OnJlc3RvcmVVc2VkUmVnaXN0ZXJzRnJvbVNjcmF0Y2hCdWZm
ZXIpOgorICAgICAgICAqIGRmZy9ERkdTaWxlbnRSZWdpc3RlclNhdmVQbGFuLmg6CisgICAgICAg
ICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6Y2hlY2tBcmd1bWVudFR5cGVzKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZVZhbHVlVG9JbnQzMik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVJbnQzMlRvRG91YmxlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZUluc3RhbmNlT2ZGb3JPYmplY3QpOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlSW5zdGFuY2VPZik6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVTdHJpY3RFcUZvckNvbnN0YW50KToKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25Bcmd1bWVudHMpOgor
ICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgorICAgICAgICAoU3BlY3VsYXRpdmVK
SVQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpzaWxlbnRTYXZlUGxhbkZv
ckdQUik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnNpbGVudFNwaWxsKToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6c2lsZW50RmlsbCk6CisgICAgICAg
IChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnNwaWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6dmFsdWVPZkpTQ29uc3RhbnRBc0ltbTY0KToKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y2FsbE9wZXJhdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmJyYW5jaDY0KToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVK
SVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZpbGxJbnRlZ2Vy
KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZmlsbERvdWJsZSk6CisgICAg
ICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZpbGxKU1ZhbHVlKToKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVWYWx1ZVRvTnVtYmVyKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVWYWx1ZVRvSW50
MzIpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVVJ
bnQzMlRvTnVtYmVyKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVk
R2V0QnlJZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNhY2hlZFB1dEJ5
SWQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZU5v
blBlZXBob2xlQ29tcGFyZU51bGwpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklU
Ojpub25TcGVjdWxhdGl2ZVBlZXBob2xlQnJhbmNoTnVsbCk6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlUGVlcGhvbGVCcmFuY2gpOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZU5vblBlZXBob2xlQ29tcGFy
ZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlUGVl
cGhvbGVTdHJpY3RFcSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6Om5vblNw
ZWN1bGF0aXZlTm9uUGVlcGhvbGVTdHJpY3RFcSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRpdmVKSVQ6OmVtaXRDYWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
ZmlsbFNwZWN1bGF0ZUludEludGVybmFsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6ZmlsbFNwZWN1bGF0ZURvdWJsZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OmZpbGxTcGVjdWxhdGVDZWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6ZmlsbFNwZWN1bGF0ZUJvb2xlYW4pOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpjb252ZXJ0VG9Eb3VibGUpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZl
SklUOjpjb21waWxlT2JqZWN0RXF1YWxpdHkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpjb21waWxlT2JqZWN0VG9PYmplY3RPck90aGVyRXF1YWxpdHkpOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVPYmplY3RUb09iamVjdE9y
T3RoZXJFcXVhbGl0eSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVEb3VibGVDb21wYXJlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZU5vblN0cmluZ0NlbGxPck90aGVyTG9naWNhbE5vdCk6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVMb2dpY2FsTm90KToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6ZW1pdE5vblN0cmluZ0NlbGxPck90aGVyQnJhbmNoKToKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdEJyYW5jaCk6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDb250aWd1b3VzR2V0QnlWYWwpOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJyYXlTdG9yYWdlR2V0QnlWYWwpOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlQ29udGlndW91c1B1dEJ5
VmFsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFycmF5U3Rv
cmFnZVB1dEJ5VmFsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZSk6CisgICAgICAgICogZGZnL0RGR1RodW5rcy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6b3Ny
RXhpdEdlbmVyYXRpb25UaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkRGRzo6dGhyb3dF
eGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6REZHOjpz
bG93UGF0aEZvcik6CisgICAgICAgIChKU0M6OkRGRzo6dmlydHVhbEZvclRodW5rR2VuZXJhdG9y
KToKKyAgICAgICAgKiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHA6CisgICAgICAgIChKU0M6
OkludGVycHJldGVyOjpkdW1wUmVnaXN0ZXJzKToKKyAgICAgICAgKiBqaXQvSklULmNwcDoKKyAg
ICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZSk6CisgICAgICAgICogaml0L0pJVC5oOgor
ICAgICAgICAoSklUKToKKyAgICAgICAgKiBqaXQvSklUQXJpdGhtZXRpYy5jcHA6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF9uZWdhdGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93
X29wX25lZ2F0ZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9yc2hpZnQpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX3Vyc2hpZnQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfY29tcGFyZUFuZEp1bXBTbG93KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2JpdGFu
ZCk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZUJpbmFyeUFyaXRoT3BTbG93Q2FzZSk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9kaXYpOgorICAgICAgICAqIGppdC9KSVRDYWxsLmNw
cDoKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlTG9hZFZhcmFyZ3MpOgorICAgICAgICAoSlND
OjpKSVQ6OmNvbXBpbGVDYWxsRXZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZUNhbGxF
dmFsU2xvd0Nhc2UpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVPcENhbGwpOgorICAgICAg
ICAqIGppdC9KSVRJbmxpbmVNZXRob2RzLmg6IEhhdmUgc29tZSBjbGVhbi11cCB3b3JrIGFzIHdl
bGwuCisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRQdXRDZWxsVG9DYWxs
RnJhbWVIZWFkZXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRQdXRJbnRUb0NhbGxGcmFtZUhl
YWRlcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlcjMyKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlcjY0KToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0QWxsb2NhdGVKU0FycmF5KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0R2V0SklUU3R1YkFyZyk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcik6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdElu
aXRSZWdpc3Rlcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEp1bXBJZkpTQ2VsbCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdEp1bXBJZkJvdGhKU0NlbGxzKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0SnVtcElmTm90SlNDZWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0TG9hZEludDMy
VG9Eb3VibGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRKdW1wSWZJbW1lZGlhdGVJbnRlZ2Vy
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0SnVtcElmTm90SW1tZWRpYXRlSW50ZWdlcik6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdEp1bXBJZk5vdEltbWVkaWF0ZUludGVnZXJzKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0RmFzdEFyaXRoUmVUYWdJbW1lZGlhdGUpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRGYXN0QXJpdGhJbnRUb0ltbU5vQ2hlY2spOgorICAgICAgICAqIGppdC9KSVRP
cGNvZGVzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUNUSU5hdGl2ZUNh
bGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbW92KToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX2luc3RhbmNlb2YpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaXNfdW5k
ZWZpbmVkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2lzX2Jvb2xlYW4pOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfaXNfbnVtYmVyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX3RlYXJfb2ZmX2FjdGl2YXRpb24pOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfbm90
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2pmYWxzZSk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9qZXFfbnVsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qbmVxX251
bGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfanRydWUpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3BfYml0eG9yKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2JpdG9yKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9wbmFtZXMpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3BfbmV4dF9wbmFtZSk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wU3Ry
aWN0RXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfY2F0Y2gpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfb3BfdGhyb3dfcmVmZXJlbmNlX2Vycm9yKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX2VxX251bGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbmVxX251bGwp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfY3JlYXRlX2FjdGl2YXRpb24pOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfY3JlYXRlX2FyZ3VtZW50cyk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9pbml0X2xhenlfcmVnKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19v
cF9jb252ZXJ0X3RoaXMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX25vdCk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfYXJndW1lbnRfYnlfdmFsKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX3B1dF90b19iYXNlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X3Jlc29sdmVfb3BlcmF0aW9ucyk6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzLmNw
cDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9ieV92YWwpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRDb250aWd1b3VzR2V0QnlWYWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRB
cnJheVN0b3JhZ2VHZXRCeVZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0
X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZUdldERpcmVjdE9mZnNldCk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfYnlfcG5hbWUpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRDb250aWd1b3VzUHV0QnlWYWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRBcnJh
eVN0b3JhZ2VQdXRCeVZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZUdldEJ5SWRIb3RQ
YXRoKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9ieV9pZCk6CisgICAgICAgIChK
U0M6OkpJVDo6Y29tcGlsZVB1dERpcmVjdE9mZnNldCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9pbml0X2dsb2JhbF9jb25zdCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pbml0
X2dsb2JhbF9jb25zdF9jaGVjayk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEludFR5cGVkQXJy
YXlHZXRCeVZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEZsb2F0VHlwZWRBcnJheUdldEJ5
VmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0RmxvYXRUeXBlZEFycmF5UHV0QnlWYWwpOgor
ICAgICAgICAqIGppdC9KSVRTdHViQ2FsbC5oOgorICAgICAgICAoSklUU3R1YkNhbGwpOgorICAg
ICAgICAoSlNDOjpKSVRTdHViQ2FsbDo6SklUU3R1YkNhbGwpOgorICAgICAgICAoSlNDOjpKSVRT
dHViQ2FsbDo6YWRkQXJndW1lbnQpOgorICAgICAgICAoSlNDOjpKSVRTdHViQ2FsbDo6Y2FsbCk6
CisgICAgICAgIChKU0M6OkpJVFN0dWJDYWxsOjpjYWxsV2l0aFZhbHVlUHJvZmlsaW5nKToKKyAg
ICAgICAgKiBqaXQvSlNJbnRlcmZhY2VKSVQuaDoKKyAgICAgICAgKEpTQzo6SlNJbnRlcmZhY2VK
SVQ6OmVtaXRKdW1wSWZJbW1lZGlhdGVOdW1iZXIpOgorICAgICAgICAoSlNDOjpKU0ludGVyZmFj
ZUpJVDo6ZW1pdEp1bXBJZk5vdEltbWVkaWF0ZU51bWJlcik6CisgICAgICAgIChKU0M6OkpTSW50
ZXJmYWNlSklUOjplbWl0TG9hZEpTQ2VsbCk6CisgICAgICAgIChKU0M6OkpTSW50ZXJmYWNlSklU
OjplbWl0TG9hZEludDMyKToKKyAgICAgICAgKEpTQzo6SlNJbnRlcmZhY2VKSVQ6OmVtaXRMb2Fk
RG91YmxlKToKKyAgICAgICAgKiBqaXQvU3BlY2lhbGl6ZWRUaHVua0pJVC5oOgorICAgICAgICAo
SlNDOjpTcGVjaWFsaXplZFRodW5rSklUOjpyZXR1cm5Eb3VibGUpOgorICAgICAgICAoSlNDOjpT
cGVjaWFsaXplZFRodW5rSklUOjp0YWdSZXR1cm5Bc0ludDMyKToKKyAgICAgICAgKiBydW50aW1l
L0pTVmFsdWUuY3BwOgorICAgICAgICAoSlNDOjpKU1ZhbHVlOjpkZXNjcmlwdGlvbik6CisgICAg
ICAgICogcnVudGltZS9KU1ZhbHVlLmg6IERlZmluZSBKU1ZBTFVFNjQgRW5jb2RlZEpTVmFsdWUg
YXMgaW50NjRfdCwgd2hpY2ggaXMgYWxzbyB1bmlmaWVkIHdpdGggSlNWQUxVRTMyXzY0LgorICAg
ICAgICAoSlNDKToKKyAgICAgICAgKiBydW50aW1lL0pTVmFsdWVJbmxpbmVNZXRob2RzLmg6IE5l
dyBpbXBsZW1lbnRhdGlvbiBvZiBzb21lIEpTVmFsdWUgbWV0aG9kcyB0byBtYWtlIHRoZW0gbW9y
ZSBjb25mb3JtYW50CisgICAgICAgIHdpdGggdGhlIG5ldyBydWxlIHRoYXQgIkpTVmFsdWUgaXMg
YSA2NC1iaXQgaW50ZWdlciByYXRoZXIgdGhhbiBhIHBvaW50ZXIiIGZvciBKU1ZBTFVFNjQgcGxh
dGZvcm1zLgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6SlNWYWx1ZTo6SlNWYWx1ZSk6
CisgICAgICAgIChKU0M6OkpTVmFsdWU6Om9wZXJhdG9yIGJvb2wpOgorICAgICAgICAoSlNDOjpK
U1ZhbHVlOjpvcGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6SlNWYWx1ZTo6b3BlcmF0b3IhPSk6
CisgICAgICAgIChKU0M6OnJlaW50ZXJwcmV0RG91YmxlVG9JbnQ2NCk6CisgICAgICAgIChKU0M6
OnJlaW50ZXJwcmV0SW50NjRUb0RvdWJsZSk6CisgICAgICAgIChKU0M6OkpTVmFsdWU6OmFzRG91
YmxlKToKKwogMjAxMi0xMC0xNyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAg
ICAgICAgIFJFR1JFU1NJT04gKHIxMzA4MjYgb3IgcjEzMDgyOCk6IFR3aXR0ZXIgdG9wIGJhciBp
cyBkeXNmdW5jdGlvbmFsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01h
Y3JvQXNzZW1ibGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9NYWNyb0Fzc2VtYmxlci5oCShyZXZpc2lvbiAxMzE2NjMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTcy
OCwxNiArNzI4LDYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gc3RvcmU2NFdpdGhBZGRyZXNz
T2Zmc2V0UGF0Y2goc3JjLCBhZGRyZXNzKTsKICAgICB9CiAKLSAgICB2b2lkIG1vdmVQdHJUb0Rv
dWJsZShSZWdpc3RlcklEIHNyYywgRlBSZWdpc3RlcklEIGRlc3QpCi0gICAgewotICAgICAgICBt
b3ZlNjRUb0RvdWJsZShzcmMsIGRlc3QpOwotICAgIH0KLQotICAgIHZvaWQgbW92ZURvdWJsZVRv
UHRyKEZQUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKLSAgICB7Ci0gICAgICAgIG1v
dmVEb3VibGVUbzY0KHNyYywgZGVzdCk7Ci0gICAgfQotCiAgICAgdm9pZCBjb21wYXJlUHRyKFJl
bGF0aW9uYWxDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBsZWZ0LCBUcnVzdGVkSW1tMzIgcmln
aHQsIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CiAgICAgICAgIGNvbXBhcmU2NChjb25kLCBsZWZ0
LCByaWdodCwgZGVzdCk7CkBAIC04OTUsMTQgKzg4NSw2IEBAIHB1YmxpYzoKICAgICAgICAgZGVm
YXVsdDogewogICAgICAgICAgICAgaWYgKHZhbHVlIDw9IDB4ZmYpCiAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgSlNWYWx1ZSBqc1ZhbHVlID0gSlNWYWx1ZTo6ZGVj
b2RlKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHZhbHVlKSk7Ci0gICAgICAgICAgICBpZiAoanNW
YWx1ZS5pc0ludDMyKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHNob3VsZEJsaW5kKEltbTMy
KGpzVmFsdWUuYXNJbnQzMigpKSk7Ci0gICAgICAgICAgICBpZiAoanNWYWx1ZS5pc0RvdWJsZSgp
ICYmICFzaG91bGRCbGluZERvdWJsZShqc1ZhbHVlLmFzRG91YmxlKCkpKQotICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAgICAgaWYgKCFzaG91bGRCbGluZERvdWJsZShi
aXR3aXNlX2Nhc3Q8ZG91YmxlPih2YWx1ZSkpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIHJldHVybiBzaG91bGRCbGluZEZvclNw
ZWNpZmljQXJjaCh2YWx1ZSk7CkBAIC05NTYsNiArOTM4LDE0IEBAIHB1YmxpYzoKICAgICAgICAg
ZGVmYXVsdDogewogICAgICAgICAgICAgaWYgKHZhbHVlIDw9IDB4ZmYpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgSlNWYWx1ZSBqc1ZhbHVlID0gSlNWYWx1ZTo6
ZGVjb2RlKHZhbHVlKTsKKyAgICAgICAgICAgIGlmIChqc1ZhbHVlLmlzSW50MzIoKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gc2hvdWxkQmxpbmQoSW1tMzIoanNWYWx1ZS5hc0ludDMyKCkpKTsK
KyAgICAgICAgICAgIGlmIChqc1ZhbHVlLmlzRG91YmxlKCkgJiYgIXNob3VsZEJsaW5kRG91Ymxl
KGpzVmFsdWUuYXNEb3VibGUoKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgICAgICAgICBpZiAoIXNob3VsZEJsaW5kRG91YmxlKGJpdHdpc2VfY2FzdDxkb3VibGU+KHZh
bHVlKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAg
IH0KICAgICAgICAgcmV0dXJuIHNob3VsZEJsaW5kRm9yU3BlY2lmaWNBcmNoKHZhbHVlKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXNzZW1ibHlIZWxwZXJzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fzc2VtYmx5SGVscGVycy5j
cHAJKHJldmlzaW9uIDEzMTY2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXNz
ZW1ibHlIZWxwZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzMsNyArNzMsNyBAQCB2b2lkIEFz
c2VtYmx5SGVscGVyczo6Y2xlYXJTYW1wbGluZ0ZsYWcoCiB2b2lkIEFzc2VtYmx5SGVscGVyczo6
aml0QXNzZXJ0SXNJbnQzMihHUFJSZWcgZ3ByKQogewogI2lmIENQVShYODZfNjQpCi0gICAgSnVt
cCBjaGVja0ludDMyID0gYnJhbmNoUHRyKEJlbG93T3JFcXVhbCwgZ3ByLCBUcnVzdGVkSW1tUHRy
KHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oMHhGRkZGRkZG
RnUpKSkpOworICAgIEp1bXAgY2hlY2tJbnQzMiA9IGJyYW5jaDY0KEJlbG93T3JFcXVhbCwgZ3By
LCBUcnVzdGVkSW1tNjQoc3RhdGljX2Nhc3Q8dWludHB0cl90PigweEZGRkZGRkZGdSkpKTsKICAg
ICBicmVha3BvaW50KCk7CiAgICAgY2hlY2tJbnQzMi5saW5rKHRoaXMpOwogI2Vsc2UKQEAgLTgz
LDIyICs4MywyMiBAQCB2b2lkIEFzc2VtYmx5SGVscGVyczo6aml0QXNzZXJ0SXNJbnQzMihHCiAK
IHZvaWQgQXNzZW1ibHlIZWxwZXJzOjpqaXRBc3NlcnRJc0pTSW50MzIoR1BSUmVnIGdwcikKIHsK
LSAgICBKdW1wIGNoZWNrSlNJbnQzMiA9IGJyYW5jaFB0cihBYm92ZU9yRXF1YWwsIGdwciwgR1BS
SW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKKyAgICBKdW1wIGNoZWNrSlNJbnQzMiA9IGJy
YW5jaDY0KEFib3ZlT3JFcXVhbCwgZ3ByLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIp
OwogICAgIGJyZWFrcG9pbnQoKTsKICAgICBjaGVja0pTSW50MzIubGluayh0aGlzKTsKIH0KIAog
dm9pZCBBc3NlbWJseUhlbHBlcnM6OmppdEFzc2VydElzSlNOdW1iZXIoR1BSUmVnIGdwcikKIHsK
LSAgICBKdW1wIGNoZWNrSlNOdW1iZXIgPSBicmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpO
b25aZXJvLCBncHIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7CisgICAgSnVtcCBj
aGVja0pTTnVtYmVyID0gYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBncHIs
IEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7CiAgICAgYnJlYWtwb2ludCgpOwogICAg
IGNoZWNrSlNOdW1iZXIubGluayh0aGlzKTsKIH0KIAogdm9pZCBBc3NlbWJseUhlbHBlcnM6Ompp
dEFzc2VydElzSlNEb3VibGUoR1BSUmVnIGdwcikKIHsKLSAgICBKdW1wIGNoZWNrSlNJbnQzMiA9
IGJyYW5jaFB0cihBYm92ZU9yRXF1YWwsIGdwciwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lz
dGVyKTsKLSAgICBKdW1wIGNoZWNrSlNOdW1iZXIgPSBicmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1i
bGVyOjpOb25aZXJvLCBncHIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7CisgICAg
SnVtcCBjaGVja0pTSW50MzIgPSBicmFuY2g2NChBYm92ZU9yRXF1YWwsIGdwciwgR1BSSW5mbzo6
dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKKyAgICBKdW1wIGNoZWNrSlNOdW1iZXIgPSBicmFuY2hU
ZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIGdwciwgR1BSSW5mbzo6dGFnVHlwZU51bWJl
clJlZ2lzdGVyKTsKICAgICBjaGVja0pTSW50MzIubGluayh0aGlzKTsKICAgICBicmVha3BvaW50
KCk7CiAgICAgY2hlY2tKU051bWJlci5saW5rKHRoaXMpOwpAQCAtMTA2LDcgKzEwNiw3IEBAIHZv
aWQgQXNzZW1ibHlIZWxwZXJzOjpqaXRBc3NlcnRJc0pTRG91YmwKIAogdm9pZCBBc3NlbWJseUhl
bHBlcnM6OmppdEFzc2VydElzQ2VsbChHUFJSZWcgZ3ByKQogewotICAgIEp1bXAgY2hlY2tDZWxs
ID0gYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVybywgZ3ByLCBHUFJJbmZvOjp0YWdN
YXNrUmVnaXN0ZXIpOworICAgIEp1bXAgY2hlY2tDZWxsID0gYnJhbmNoVGVzdDY0KE1hY3JvQXNz
ZW1ibGVyOjpaZXJvLCBncHIsIEdQUkluZm86OnRhZ01hc2tSZWdpc3Rlcik7CiAgICAgYnJlYWtw
b2ludCgpOwogICAgIGNoZWNrQ2VsbC5saW5rKHRoaXMpOwogfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBc3NlbWJseUhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fzc2VtYmx5SGVscGVycy5oCShyZXZpc2lvbiAxMzE2NjMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fzc2VtYmx5SGVscGVycy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC05OSw3ICs5OSwxMSBAQCBwdWJsaWM6CiAgICAgfQogICAgIHZvaWQgZW1p
dFB1dFRvQ2FsbEZyYW1lSGVhZGVyKEdQUlJlZyBmcm9tLCBKU1N0YWNrOjpDYWxsRnJhbWVIZWFk
ZXJFbnRyeSBlbnRyeSkKICAgICB7CisjaWYgQ1BVKFg4Nl82NCkKKyAgICAgICAgc3RvcmU2NChm
cm9tLCBBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBlbnRyeSAqIHNpemVvZihS
ZWdpc3RlcikpKTsKKyNlbHNlCiAgICAgICAgIHN0b3JlUHRyKGZyb20sIEFkZHJlc3MoR1BSSW5m
bzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGVudHJ5ICogc2l6ZW9mKFJlZ2lzdGVyKSkpOworI2VuZGlm
CiAgICAgfQogCiAgICAgdm9pZCBlbWl0UHV0SW1tZWRpYXRlVG9DYWxsRnJhbWVIZWFkZXIodm9p
ZCogdmFsdWUsIEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlckVudHJ5IGVudHJ5KQpAQCAtMTEwLDcg
KzExNCw3IEBAIHB1YmxpYzoKICAgICBKdW1wIGJyYW5jaElmTm90Q2VsbChHUFJSZWcgcmVnKQog
ICAgIHsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICByZXR1cm4gYnJhbmNoVGVzdFB0cihN
YWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgcmVnLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpOwor
ICAgICAgICByZXR1cm4gYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCByZWcs
IEdQUkluZm86OnRhZ01hc2tSZWdpc3Rlcik7CiAjZWxzZQogICAgICAgICByZXR1cm4gYnJhbmNo
MzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCByZWcsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpD
ZWxsVGFnKSk7CiAjZW5kaWYKQEAgLTE3Miw4ICsxNzYsMTQgQEAgcHVibGljOgogICAgICAgICBT
Y3JhdGNoQnVmZmVyKiBzY3JhdGNoQnVmZmVyID0gbV9nbG9iYWxEYXRhLT5zY3JhdGNoQnVmZmVy
Rm9yU2l6ZShzY3JhdGNoU2l6ZSk7CiAgICAgICAgIEVuY29kZWRKU1ZhbHVlKiBidWZmZXIgPSBz
dGF0aWNfY2FzdDxFbmNvZGVkSlNWYWx1ZSo+KHNjcmF0Y2hCdWZmZXItPmRhdGFCdWZmZXIoKSk7
CiAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEdQUkluZm86Om51bWJlck9mUmVn
aXN0ZXJzOyArK2kpCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBHUFJJbmZvOjpu
dW1iZXJPZlJlZ2lzdGVyczsgKytpKSB7CisjaWYgQ1BVKFg4Nl82NCkKKyAgICAgICAgICAgIHN0
b3JlNjQoR1BSSW5mbzo6dG9SZWdpc3RlcihpKSwgYnVmZmVyICsgaSk7CisjZWxzZQogICAgICAg
ICAgICAgc3RvcmVQdHIoR1BSSW5mbzo6dG9SZWdpc3RlcihpKSwgYnVmZmVyICsgaSk7CisjZW5k
aWYKKyAgICAgICAgfQorCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBGUFJJbmZv
OjpudW1iZXJPZlJlZ2lzdGVyczsgKytpKSB7CiAgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1Q
dHIoYnVmZmVyICsgR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMgKyBpKSwgR1BSSW5mbzo6cmVn
VDApOwogICAgICAgICAgICAgc3RvcmVEb3VibGUoRlBSSW5mbzo6dG9SZWdpc3RlcihpKSwgR1BS
SW5mbzo6cmVnVDApOwpAQCAtMjA0LDggKzIxNCwxMyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIoYnVmZmVyICsgR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMgKyBp
KSwgR1BSSW5mbzo6cmVnVDApOwogICAgICAgICAgICAgbG9hZERvdWJsZShHUFJJbmZvOjpyZWdU
MCwgRlBSSW5mbzo6dG9SZWdpc3RlcihpKSk7CiAgICAgICAgIH0KLSAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyArK2kpCisgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgKytp
KSB7CisjaWYgQ1BVKFg4Nl82NCkKKyAgICAgICAgICAgIGxvYWQ2NChidWZmZXIgKyBpLCBHUFJJ
bmZvOjp0b1JlZ2lzdGVyKGkpKTsKKyNlbHNlCiAgICAgICAgICAgICBsb2FkUHRyKGJ1ZmZlciAr
IGksIEdQUkluZm86OnRvUmVnaXN0ZXIoaSkpOworI2VuZGlmCisgICAgICAgIH0KICAgICB9CiAK
ICAgICAvLyBUaGVzZSBtZXRob2RzIEpJVCBnZW5lcmF0ZSBkeW5hbWljLCBkZWJ1Zy1vbmx5IGNo
ZWNrcyAtIGFraW4gdG8gQVNTRVJUcy4KQEAgLTIyOSwxNiArMjQ0LDE2IEBAIHB1YmxpYzoKICNp
ZiBVU0UoSlNWQUxVRTY0KQogICAgIEdQUlJlZyBib3hEb3VibGUoRlBSUmVnIGZwciwgR1BSUmVn
IGdwcikKICAgICB7Ci0gICAgICAgIG1vdmVEb3VibGVUb1B0cihmcHIsIGdwcik7Ci0gICAgICAg
IHN1YlB0cihHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIGdwcik7CisgICAgICAgIG1v
dmVEb3VibGVUbzY0KGZwciwgZ3ByKTsKKyAgICAgICAgc3ViNjQoR1BSSW5mbzo6dGFnVHlwZU51
bWJlclJlZ2lzdGVyLCBncHIpOwogICAgICAgICBqaXRBc3NlcnRJc0pTRG91YmxlKGdwcik7CiAg
ICAgICAgIHJldHVybiBncHI7CiAgICAgfQogICAgIEZQUlJlZyB1bmJveERvdWJsZShHUFJSZWcg
Z3ByLCBGUFJSZWcgZnByKQogICAgIHsKICAgICAgICAgaml0QXNzZXJ0SXNKU0RvdWJsZShncHIp
OwotICAgICAgICBhZGRQdHIoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBncHIpOwot
ICAgICAgICBtb3ZlUHRyVG9Eb3VibGUoZ3ByLCBmcHIpOworICAgICAgICBhZGQ2NChHUFJJbmZv
Ojp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIGdwcik7CisgICAgICAgIG1vdmU2NFRvRG91YmxlKGdw
ciwgZnByKTsKICAgICAgICAgcmV0dXJuIGZwcjsKICAgICB9CiAjZW5kaWYKQEAgLTI1OCw3ICsy
NzMsNyBAQCBwdWJsaWM6CiAgICAgSnVtcCBlbWl0RXhjZXB0aW9uQ2hlY2soRXhjZXB0aW9uQ2hl
Y2tLaW5kIGtpbmQgPSBOb3JtYWxFeGNlcHRpb25DaGVjaykKICAgICB7CiAjaWYgVVNFKEpTVkFM
VUU2NCkKLSAgICAgICAgcmV0dXJuIGJyYW5jaFRlc3RQdHIoa2luZCA9PSBOb3JtYWxFeGNlcHRp
b25DaGVjayA/IE5vblplcm8gOiBaZXJvLCBBYnNvbHV0ZUFkZHJlc3MoJmdsb2JhbERhdGEoKS0+
ZXhjZXB0aW9uKSk7CisgICAgICAgIHJldHVybiBicmFuY2hUZXN0NjQoa2luZCA9PSBOb3JtYWxF
eGNlcHRpb25DaGVjayA/IE5vblplcm8gOiBaZXJvLCBBYnNvbHV0ZUFkZHJlc3MoJmdsb2JhbERh
dGEoKS0+ZXhjZXB0aW9uKSk7CiAjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQogICAgICAgICByZXR1
cm4gYnJhbmNoMzIoa2luZCA9PSBOb3JtYWxFeGNlcHRpb25DaGVjayA/IE5vdEVxdWFsIDogRXF1
YWwsIEFic29sdXRlQWRkcmVzcyhyZWludGVycHJldF9jYXN0PGNoYXIqPigmZ2xvYmFsRGF0YSgp
LT5leGNlcHRpb24pICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCBU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZykpOwogI2VuZGlmCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NDYWxsSGVscGVycy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0NhbGxIZWxwZXJzLmgJKHJldmlzaW9uIDEzMTY2
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0NhbGxIZWxwZXJzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTU1Miw2ICs1NTIsMTMgQEAgcHVibGljOgogICAgICAgICBtb3ZlKEdQUklu
Zm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwogICAgIH0KICAg
ICAKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEdQ
UlJlZyBhcmcxLCBUcnVzdGVkSW1tNjQgYXJnMikKKyAgICB7CisgICAgICAgIG1vdmUoYXJnMSwg
R1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICAgICAgbW92ZShhcmcyLCBHUFJJbmZvOjphcmd1
bWVudEdQUjIpOworICAgICAgICBtb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJ
bmZvOjphcmd1bWVudEdQUjApOworICAgIH0KKyAgICAKICAgICBBTFdBWVNfSU5MSU5FIHZvaWQg
c2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEdQUlJlZyBhcmcxLCBUcnVzdGVkSW1tMzIgYXJn
MikKICAgICB7CiAgICAgICAgIG1vdmUoYXJnMSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKQEAg
LTU3Myw2ICs1ODAsMTMgQEAgcHVibGljOgogICAgICAgICBtb3ZlKEdQUkluZm86OmNhbGxGcmFt
ZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwogICAgIH0KICAgICAKKyAgICBBTFdB
WVNfSU5MSU5FIHZvaWQgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW02NCBh
cmcxLCBHUFJSZWcgYXJnMikKKyAgICB7CisgICAgICAgIG1vdmUoYXJnMiwgR1BSSW5mbzo6YXJn
dW1lbnRHUFIyKTsgLy8gTW92ZSB0aGlzIGZpcnN0LCBzbyBzZXR0aW5nIGFyZzEgZG9lcyBub3Qg
dHJhbXBsZSEKKyAgICAgICAgbW92ZShhcmcxLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAg
ICAgICBtb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQ
UjApOworICAgIH0KKwogICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXR1cEFyZ3VtZW50c1dpdGhF
eGVjU3RhdGUoVHJ1c3RlZEltbTMyIGFyZzEsIEdQUlJlZyBhcmcyKQogICAgIHsKICAgICAgICAg
bW92ZShhcmcyLCBHUFJJbmZvOjphcmd1bWVudEdQUjIpOyAvLyBNb3ZlIHRoaXMgZmlyc3QsIHNv
IHNldHRpbmcgYXJnMSBkb2VzIG5vdCB0cmFtcGxlIQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXI2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXI2NC5jcHAJKHJldmlzaW9uIDEzMTY2
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyNjQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC03MywxMiArNzMsMTIgQEAgdm9pZCBPU1JFeGl0Q29tcGlsZXI6
OmNvbXBpbGVFeGl0KGNvbnN0CiAgICAgICAgIHN3aXRjaCAocmVjb3ZlcnktPnR5cGUoKSkgewog
ICAgICAgICBjYXNlIFNwZWN1bGF0aXZlQWRkOgogICAgICAgICAgICAgbV9qaXQuc3ViMzIocmVj
b3ZlcnktPnNyYygpLCByZWNvdmVyeS0+ZGVzdCgpKTsKLSAgICAgICAgICAgIG1faml0Lm9yUHRy
KEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgcmVjb3ZlcnktPmRlc3QoKSk7CisgICAg
ICAgICAgICBtX2ppdC5vcjY0KEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgcmVjb3Zl
cnktPmRlc3QoKSk7CiAgICAgICAgICAgICBhbHJlYWR5Qm94ZWQgPSByZWNvdmVyeS0+ZGVzdCgp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBCb29sZWFu
U3BlY3VsYXRpb25DaGVjazoKLSAgICAgICAgICAgIG1faml0LnhvclB0cihBc3NlbWJseUhlbHBl
cnM6OlRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90PihWYWx1ZUZhbHNlKSksIHJlY292
ZXJ5LT5kZXN0KCkpOworICAgICAgICAgICAgbV9qaXQueG9yNjQoQXNzZW1ibHlIZWxwZXJzOjpU
cnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oVmFsdWVGYWxzZSkpLCByZWNvdmVyeS0+
ZGVzdCgpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgICAgIGRlZmF1
bHQ6CkBAIC05OCwxMSArOTgsMTEgQEAgdm9pZCBPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0
KGNvbnN0CiAgICAgICAgIGlmIChleGl0Lm1fanNWYWx1ZVNvdXJjZS5pc0FkZHJlc3MoKSkgewog
ICAgICAgICAgICAgLy8gV2UgY2FuJ3QgYmUgc3VyZSB0aGF0IHdlIGhhdmUgYSBzcGFyZSByZWdp
c3Rlci4gU28gdXNlIHRoZSB0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsCiAgICAgICAgICAgICAvLyBz
aW5jZSB3ZSBrbm93IGhvdyB0byByZXN0b3JlIGl0LgotICAgICAgICAgICAgbV9qaXQubG9hZFB0
cihBc3NlbWJseUhlbHBlcnM6OkFkZHJlc3MoZXhpdC5tX2pzVmFsdWVTb3VyY2UuYXNBZGRyZXNz
KCkpLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOwotICAgICAgICAgICAgbV9qaXQu
c3RvcmVQdHIoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBidWNrZXQpOwotICAgICAg
ICAgICAgbV9qaXQubW92ZShBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoYml0d2lzZV9j
YXN0PHZvaWQqPihUYWdUeXBlTnVtYmVyKSksIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rl
cik7CisgICAgICAgICAgICBtX2ppdC5sb2FkNjQoQXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNzKGV4
aXQubV9qc1ZhbHVlU291cmNlLmFzQWRkcmVzcygpKSwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJl
Z2lzdGVyKTsKKyAgICAgICAgICAgIG1faml0LnN0b3JlNjQoR1BSSW5mbzo6dGFnVHlwZU51bWJl
clJlZ2lzdGVyLCBidWNrZXQpOworICAgICAgICAgICAgbV9qaXQubW92ZShBc3NlbWJseUhlbHBl
cnM6OlRydXN0ZWRJbW02NChiaXR3aXNlX2Nhc3Q8aW50NjRfdD4oVGFnVHlwZU51bWJlcikpLCBH
UFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOwogICAgICAgICB9IGVsc2UKLSAgICAgICAg
ICAgIG1faml0LnN0b3JlUHRyKGV4aXQubV9qc1ZhbHVlU291cmNlLmdwcigpLCBidWNrZXQpOwor
ICAgICAgICAgICAgbV9qaXQuc3RvcmU2NChleGl0Lm1fanNWYWx1ZVNvdXJjZS5ncHIoKSwgYnVj
a2V0KTsKICAgICB9CiAKICAgICAvLyA0KSBGaWd1cmUgb3V0IGhvdyBtYW55IHNjcmF0Y2ggc2xv
dHMgd2UnbGwgbmVlZC4gV2UgbmVlZCBvbmUgZm9yIGV2ZXJ5IEdQUi9GUFIKQEAgLTIzMCw3ICsy
MzAsNyBAQCB2b2lkIE9TUkV4aXRDb21waWxlcjo6Y29tcGlsZUV4aXQoY29uc3QKICAgICAgICAg
ICAgIHN3aXRjaCAocmVjb3ZlcnkudGVjaG5pcXVlKCkpIHsKICAgICAgICAgICAgIGNhc2UgVW5i
b3hlZEludDMySW5HUFI6CiAgICAgICAgICAgICAgICAgaWYgKHJlY292ZXJ5LmdwcigpICE9IGFs
cmVhZHlCb3hlZCkKLSAgICAgICAgICAgICAgICAgICAgbV9qaXQub3JQdHIoR1BSSW5mbzo6dGFn
VHlwZU51bWJlclJlZ2lzdGVyLCByZWNvdmVyeS5ncHIoKSk7CisgICAgICAgICAgICAgICAgICAg
IG1faml0Lm9yNjQoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCByZWNvdmVyeS5ncHIo
KSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICBjYXNlIEFscmVhZHlJbkpTU3RhY2tBc1VuYm94ZWRJbnQzMjoKQEAgLTI1Miw3ICsyNTIsNyBA
QCB2b2lkIE9TUkV4aXRDb21waWxlcjo6Y29tcGlsZUV4aXQoY29uc3QKICAgICAgICAgICAgICAg
ICBpZiAoYWRkcmVzc0dQUiA9PSByZWNvdmVyeS5ncHIoKSkKICAgICAgICAgICAgICAgICAgICAg
YWRkcmVzc0dQUiA9IEdQUkluZm86OnJlZ1QxOwogICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgIG1faml0LnN0b3JlUHRyKGFkZHJlc3NHUFIsIHNjcmF0Y2hEYXRhQnVmZmVyKTsKKyAg
ICAgICAgICAgICAgICBtX2ppdC5zdG9yZTY0KGFkZHJlc3NHUFIsIHNjcmF0Y2hEYXRhQnVmZmVy
KTsKICAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZElt
bVB0cihzY3JhdGNoRGF0YUJ1ZmZlciArIDEpLCBhZGRyZXNzR1BSKTsKICAgICAgICAgICAgICAg
ICBtX2ppdC5zdG9yZURvdWJsZShGUFJJbmZvOjpmcFJlZ1QwLCBhZGRyZXNzR1BSKTsKICAgICAg
ICAgICAgICAgICAKQEAgLTI2NiwxMiArMjY2LDEyIEBAIHZvaWQgT1NSRXhpdENvbXBpbGVyOjpj
b21waWxlRXhpdChjb25zdAogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIHBvc2l0
aXZlLmxpbmsoJm1faml0KTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBtX2pp
dC5vclB0cihHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHJlY292ZXJ5LmdwcigpKTsK
KyAgICAgICAgICAgICAgICBtX2ppdC5vcjY0KEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rl
ciwgcmVjb3ZlcnkuZ3ByKCkpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGRv
bmUubGluaygmbV9qaXQpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIG1faml0
LmxvYWREb3VibGUoYWRkcmVzc0dQUiwgRlBSSW5mbzo6ZnBSZWdUMCk7Ci0gICAgICAgICAgICAg
ICAgbV9qaXQubG9hZFB0cihzY3JhdGNoRGF0YUJ1ZmZlciwgYWRkcmVzc0dQUik7CisgICAgICAg
ICAgICAgICAgbV9qaXQubG9hZDY0KHNjcmF0Y2hEYXRhQnVmZmVyLCBhZGRyZXNzR1BSKTsKICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKQEAg
LTI5NiwxMSArMjk2LDExIEBAIHZvaWQgT1NSRXhpdENvbXBpbGVyOjpjb21waWxlRXhpdChjb25z
dAogICAgICAgICBjYXNlIFVuYm94ZWRJbnQzMkluR1BSOgogICAgICAgICBjYXNlIFVJbnQzMklu
R1BSOgogICAgICAgICAgICAgaWYgKG9wZXJhbmRzLmlzVmFyaWFibGUoaW5kZXgpICYmIHBvaXNv
bmVkVmlydHVhbFJlZ2lzdGVyc1tvcGVyYW5kcy52YXJpYWJsZUZvckluZGV4KGluZGV4KV0pIHsK
LSAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZVB0cihyZWNvdmVyeS5ncHIoKSwgc2NyYXRjaERh
dGFCdWZmZXIgKyBjdXJyZW50UG9pc29uSW5kZXgpOworICAgICAgICAgICAgICAgIG1faml0LnN0
b3JlNjQocmVjb3ZlcnkuZ3ByKCksIHNjcmF0Y2hEYXRhQnVmZmVyICsgY3VycmVudFBvaXNvbklu
ZGV4KTsKICAgICAgICAgICAgICAgICBtX3BvaXNvblNjcmF0Y2hJbmRpY2VzW29wZXJhbmRzLnZh
cmlhYmxlRm9ySW5kZXgoaW5kZXgpXSA9IGN1cnJlbnRQb2lzb25JbmRleDsKICAgICAgICAgICAg
ICAgICBjdXJyZW50UG9pc29uSW5kZXgrKzsKICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAg
ICAgICAgIG1faml0LnN0b3JlUHRyKHJlY292ZXJ5LmdwcigpLCBBc3NlbWJseUhlbHBlcnM6OmFk
ZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcilvcGVyYW5kKSk7CisgICAgICAgICAgICAgICAgbV9q
aXQuc3RvcmU2NChyZWNvdmVyeS5ncHIoKSwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKChW
aXJ0dWFsUmVnaXN0ZXIpb3BlcmFuZCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRl
ZmF1bHQ6CiAgICAgICAgICAgICBicmVhazsKQEAgLTMzMCwxMSArMzMwLDExIEBAIHZvaWQgT1NS
RXhpdENvbXBpbGVyOjpjb21waWxlRXhpdChjb25zdAogICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICAgICAgR1BSUmVnIGdwciA9IEdQUkluZm86OnRvUmVnaXN0ZXIoRlBSSW5mbzo6
dG9JbmRleChyZWNvdmVyeS5mcHIoKSkpOwogICAgICAgICAgICAgaWYgKG9wZXJhbmRzLmlzVmFy
aWFibGUoaW5kZXgpICYmIHBvaXNvbmVkVmlydHVhbFJlZ2lzdGVyc1tvcGVyYW5kcy52YXJpYWJs
ZUZvckluZGV4KGluZGV4KV0pIHsKLSAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZVB0cihncHIs
IHNjcmF0Y2hEYXRhQnVmZmVyICsgY3VycmVudFBvaXNvbkluZGV4KTsKKyAgICAgICAgICAgICAg
ICBtX2ppdC5zdG9yZTY0KGdwciwgc2NyYXRjaERhdGFCdWZmZXIgKyBjdXJyZW50UG9pc29uSW5k
ZXgpOwogICAgICAgICAgICAgICAgIG1fcG9pc29uU2NyYXRjaEluZGljZXNbb3BlcmFuZHMudmFy
aWFibGVGb3JJbmRleChpbmRleCldID0gY3VycmVudFBvaXNvbkluZGV4OwogICAgICAgICAgICAg
ICAgIGN1cnJlbnRQb2lzb25JbmRleCsrOwogICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAg
ICAgICAgbV9qaXQuc3RvcmVQdHIoZ3ByLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoKFZp
cnR1YWxSZWdpc3RlcilvcGVyYW5kcy5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSk7CisgICAgICAg
ICAgICAgICAgbV9qaXQuc3RvcmU2NChncHIsIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0Zvcigo
VmlydHVhbFJlZ2lzdGVyKW9wZXJhbmRzLm9wZXJhbmRGb3JJbmRleChpbmRleCkpKTsKICAgICAg
ICAgfQogICAgIH0KICAgICAKQEAgLTM0OCw3ICszNDgsNyBAQCB2b2lkIE9TUkV4aXRDb21waWxl
cjo6Y29tcGlsZUV4aXQoY29uc3QKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
ICAgIG1faml0LmxvYWREb3VibGUoQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFs
UmVnaXN0ZXIpb3BlcmFuZHMub3BlcmFuZEZvckluZGV4KGluZGV4KSksIEZQUkluZm86OmZwUmVn
VDApOwogICAgICAgICAgICAgbV9qaXQuYm94RG91YmxlKEZQUkluZm86OmZwUmVnVDAsIEdQUklu
Zm86OnJlZ1QwKTsKLSAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKEdQUkluZm86OnJlZ1QwLCBB
c3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcilvcGVyYW5kcy5vcGVy
YW5kRm9ySW5kZXgoaW5kZXgpKSk7CisgICAgICAgICAgICBtX2ppdC5zdG9yZTY0KEdQUkluZm86
OnJlZ1QwLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcilvcGVy
YW5kcy5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgCkBA
IC0zNjgsMjAgKzM2OCwyMCBAQCB2b2lkIE9TUkV4aXRDb21waWxlcjo6Y29tcGlsZUV4aXQoY29u
c3QKICAgICAgICAgICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IG9wZXJh
bmRzW2luZGV4XTsKICAgICAgICAgICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5LnRlY2huaXF1ZSgp
KSB7CiAgICAgICAgICAgICAgICAgY2FzZSBEaXNwbGFjZWRJbkpTU3RhY2s6Ci0gICAgICAgICAg
ICAgICAgICAgIG1faml0LmxvYWRQdHIoQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKHJlY292
ZXJ5LnZpcnR1YWxSZWdpc3RlcigpKSwgR1BSSW5mbzo6dG9SZWdpc3RlcihkaXNwbGFjZW1lbnRJ
bmRleCsrKSk7CisgICAgICAgICAgICAgICAgICAgIG1faml0LmxvYWQ2NChBc3NlbWJseUhlbHBl
cnM6OmFkZHJlc3NGb3IocmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkpLCBHUFJJbmZvOjp0b1Jl
Z2lzdGVyKGRpc3BsYWNlbWVudEluZGV4KyspKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGNhc2UgSW50MzJEaXNwbGFj
ZWRJbkpTU3RhY2s6IHsKICAgICAgICAgICAgICAgICAgICAgR1BSUmVnIGdwciA9IEdQUkluZm86
OnRvUmVnaXN0ZXIoZGlzcGxhY2VtZW50SW5kZXgrKyk7CiAgICAgICAgICAgICAgICAgICAgIG1f
aml0LmxvYWQzMihBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IocmVjb3ZlcnkudmlydHVhbFJl
Z2lzdGVyKCkpLCBncHIpOwotICAgICAgICAgICAgICAgICAgICBtX2ppdC5vclB0cihHUFJJbmZv
Ojp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIGdwcik7CisgICAgICAgICAgICAgICAgICAgIG1faml0
Lm9yNjQoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBncHIpOwogICAgICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgIGNhc2UgRG91YmxlRGlzcGxhY2VkSW5KU1N0YWNrOiB7CiAgICAgICAg
ICAgICAgICAgICAgIEdQUlJlZyBncHIgPSBHUFJJbmZvOjp0b1JlZ2lzdGVyKGRpc3BsYWNlbWVu
dEluZGV4KyspOwotICAgICAgICAgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKEFzc2VtYmx5SGVs
cGVyczo6YWRkcmVzc0ZvcihyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSksIGdwcik7Ci0gICAg
ICAgICAgICAgICAgICAgIG1faml0LnN1YlB0cihHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0
ZXIsIGdwcik7CisgICAgICAgICAgICAgICAgICAgIG1faml0LmxvYWQ2NChBc3NlbWJseUhlbHBl
cnM6OmFkZHJlc3NGb3IocmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkpLCBncHIpOworICAgICAg
ICAgICAgICAgICAgICBtX2ppdC5zdWI2NChHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIs
IGdwcik7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAgICAgCkBAIC0zOTcsNyArMzk3LDcgQEAgdm9pZCBPU1JFeGl0Q29tcGls
ZXI6OmNvbXBpbGVFeGl0KGNvbnN0CiAgICAgICAgICAgICAgICAgY2FzZSBEaXNwbGFjZWRJbkpT
U3RhY2s6CiAgICAgICAgICAgICAgICAgY2FzZSBJbnQzMkRpc3BsYWNlZEluSlNTdGFjazoKICAg
ICAgICAgICAgICAgICBjYXNlIERvdWJsZURpc3BsYWNlZEluSlNTdGFjazoKLSAgICAgICAgICAg
ICAgICAgICAgbV9qaXQuc3RvcmVQdHIoR1BSSW5mbzo6dG9SZWdpc3RlcihkaXNwbGFjZW1lbnRJ
bmRleCsrKSwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpb3Bl
cmFuZHMub3BlcmFuZEZvckluZGV4KGluZGV4KSkpOworICAgICAgICAgICAgICAgICAgICBtX2pp
dC5zdG9yZTY0KEdQUkluZm86OnRvUmVnaXN0ZXIoZGlzcGxhY2VtZW50SW5kZXgrKyksIEFzc2Vt
Ymx5SGVscGVyczo6YWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKW9wZXJhbmRzLm9wZXJhbmRG
b3JJbmRleChpbmRleCkpKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgIGRlZmF1bHQ6CkBAIC00MjgsMjEgKzQyOCwyMSBA
QCB2b2lkIE9TUkV4aXRDb21waWxlcjo6Y29tcGlsZUV4aXQoY29uc3QKICAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5LnRlY2huaXF1ZSgpKSB7CiAgICAg
ICAgICAgICAgICAgY2FzZSBEaXNwbGFjZWRJbkpTU3RhY2s6Ci0gICAgICAgICAgICAgICAgICAg
IG1faml0LmxvYWRQdHIoQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKHJlY292ZXJ5LnZpcnR1
YWxSZWdpc3RlcigpKSwgR1BSSW5mbzo6cmVnVDApOwotICAgICAgICAgICAgICAgICAgICBtX2pp
dC5zdG9yZVB0cihHUFJJbmZvOjpyZWdUMCwgc2NyYXRjaERhdGFCdWZmZXIgKyBzY3JhdGNoSW5k
ZXgrKyk7CisgICAgICAgICAgICAgICAgICAgIG1faml0LmxvYWQ2NChBc3NlbWJseUhlbHBlcnM6
OmFkZHJlc3NGb3IocmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkpLCBHUFJJbmZvOjpyZWdUMCk7
CisgICAgICAgICAgICAgICAgICAgIG1faml0LnN0b3JlNjQoR1BSSW5mbzo6cmVnVDAsIHNjcmF0
Y2hEYXRhQnVmZmVyICsgc2NyYXRjaEluZGV4KyspOwogICAgICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgY2FzZSBJbnQzMkRpc3Bs
YWNlZEluSlNTdGFjazogewogICAgICAgICAgICAgICAgICAgICBtX2ppdC5sb2FkMzIoQXNzZW1i
bHlIZWxwZXJzOjphZGRyZXNzRm9yKHJlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpKSwgR1BSSW5m
bzo6cmVnVDApOwotICAgICAgICAgICAgICAgICAgICBtX2ppdC5vclB0cihHUFJJbmZvOjp0YWdU
eXBlTnVtYmVyUmVnaXN0ZXIsIEdQUkluZm86OnJlZ1QwKTsKLSAgICAgICAgICAgICAgICAgICAg
bV9qaXQuc3RvcmVQdHIoR1BSSW5mbzo6cmVnVDAsIHNjcmF0Y2hEYXRhQnVmZmVyICsgc2NyYXRj
aEluZGV4KyspOworICAgICAgICAgICAgICAgICAgICBtX2ppdC5vcjY0KEdQUkluZm86OnRhZ1R5
cGVOdW1iZXJSZWdpc3RlciwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAgICAgICAgICBt
X2ppdC5zdG9yZTY0KEdQUkluZm86OnJlZ1QwLCBzY3JhdGNoRGF0YUJ1ZmZlciArIHNjcmF0Y2hJ
bmRleCsrKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBjYXNlIERvdWJsZURpc3BsYWNl
ZEluSlNTdGFjazogewotICAgICAgICAgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKEFzc2VtYmx5
SGVscGVyczo6YWRkcmVzc0ZvcihyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSksIEdQUkluZm86
OnJlZ1QwKTsKLSAgICAgICAgICAgICAgICAgICAgbV9qaXQuc3ViUHRyKEdQUkluZm86OnRhZ1R5
cGVOdW1iZXJSZWdpc3RlciwgR1BSSW5mbzo6cmVnVDApOwotICAgICAgICAgICAgICAgICAgICBt
X2ppdC5zdG9yZVB0cihHUFJJbmZvOjpyZWdUMCwgc2NyYXRjaERhdGFCdWZmZXIgKyBzY3JhdGNo
SW5kZXgrKyk7CisgICAgICAgICAgICAgICAgICAgIG1faml0LmxvYWQ2NChBc3NlbWJseUhlbHBl
cnM6OmFkZHJlc3NGb3IocmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkpLCBHUFJJbmZvOjpyZWdU
MCk7CisgICAgICAgICAgICAgICAgICAgIG1faml0LnN1YjY0KEdQUkluZm86OnRhZ1R5cGVOdW1i
ZXJSZWdpc3RlciwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAgICAgICAgICBtX2ppdC5z
dG9yZTY0KEdQUkluZm86OnJlZ1QwLCBzY3JhdGNoRGF0YUJ1ZmZlciArIHNjcmF0Y2hJbmRleCsr
KTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgICAgICAKQEAgLTQ1OCw4ICs0NTgsOCBAQCB2b2lkIE9TUkV4aXRDb21waWxlcjo6
Y29tcGlsZUV4aXQoY29uc3QKICAgICAgICAgICAgICAgICBjYXNlIERpc3BsYWNlZEluSlNTdGFj
azoKICAgICAgICAgICAgICAgICBjYXNlIEludDMyRGlzcGxhY2VkSW5KU1N0YWNrOgogICAgICAg
ICAgICAgICAgIGNhc2UgRG91YmxlRGlzcGxhY2VkSW5KU1N0YWNrOgotICAgICAgICAgICAgICAg
ICAgICBtX2ppdC5sb2FkUHRyKHNjcmF0Y2hEYXRhQnVmZmVyICsgc2NyYXRjaEluZGV4KyssIEdQ
UkluZm86OnJlZ1QwKTsKLSAgICAgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIoR1BSSW5m
bzo6cmVnVDAsIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKW9w
ZXJhbmRzLm9wZXJhbmRGb3JJbmRleChpbmRleCkpKTsKKyAgICAgICAgICAgICAgICAgICAgbV9q
aXQubG9hZDY0KHNjcmF0Y2hEYXRhQnVmZmVyICsgc2NyYXRjaEluZGV4KyssIEdQUkluZm86OnJl
Z1QwKTsKKyAgICAgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmU2NChHUFJJbmZvOjpyZWdUMCwg
QXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpb3BlcmFuZHMub3Bl
cmFuZEZvckluZGV4KGluZGV4KSkpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgZGVmYXVsdDoKQEAgLTQ4NCw4ICs0ODQs
OCBAQCB2b2lkIE9TUkV4aXRDb21waWxlcjo6Y29tcGlsZUV4aXQoY29uc3QKICAgICAgICAgICAg
IGNhc2UgVW5ib3hlZEludDMySW5HUFI6CiAgICAgICAgICAgICBjYXNlIFVJbnQzMkluR1BSOgog
ICAgICAgICAgICAgY2FzZSBJbkZQUjoKLSAgICAgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKHNj
cmF0Y2hEYXRhQnVmZmVyICsgcG9pc29uSW5kZXgodmlydHVhbFJlZ2lzdGVyKSwgR1BSSW5mbzo6
cmVnVDApOwotICAgICAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKEdQUkluZm86OnJlZ1QwLCBB
c3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3Rlcil2aXJ0dWFsUmVnaXN0
ZXIpKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5sb2FkNjQoc2NyYXRjaERhdGFCdWZmZXIgKyBw
b2lzb25JbmRleCh2aXJ0dWFsUmVnaXN0ZXIpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAg
ICAgICAgbV9qaXQuc3RvcmU2NChHUFJJbmZvOjpyZWdUMCwgQXNzZW1ibHlIZWxwZXJzOjphZGRy
ZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpdmlydHVhbFJlZ2lzdGVyKSk7CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBkZWZhdWx0OgpAQCAtNDk5
LDE2ICs0OTksMTYgQEAgdm9pZCBPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KGNvbnN0CiAK
ICAgICBpZiAoaGF2ZUNvbnN0YW50cykgewogICAgICAgICBpZiAoaGF2ZVVuZGVmaW5lZCkKLSAg
ICAgICAgICAgIG1faml0Lm1vdmUoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKSksIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAg
IG1faml0Lm1vdmUoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpKSwgR1BSSW5mbzo6cmVnVDApOwogICAgICAgICAKICAgICAgICAgZm9y
IChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IG9wZXJhbmRzLnNpemUoKTsgKytpbmRleCkgewog
ICAgICAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBvcGVyYW5kc1tpbmRl
eF07CiAgICAgICAgICAgICBpZiAocmVjb3ZlcnkudGVjaG5pcXVlKCkgIT0gQ29uc3RhbnQpCiAg
ICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBpZiAocmVjb3ZlcnkuY29uc3Rh
bnQoKS5pc1VuZGVmaW5lZCgpKQotICAgICAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKEdQUklu
Zm86OnJlZ1QwLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3Rlcilv
cGVyYW5kcy5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSk7CisgICAgICAgICAgICAgICAgbV9qaXQu
c3RvcmU2NChHUFJJbmZvOjpyZWdUMCwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0
dWFsUmVnaXN0ZXIpb3BlcmFuZHMub3BlcmFuZEZvckluZGV4KGluZGV4KSkpOwogICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKEFzc2VtYmx5SGVscGVyczo6
VHJ1c3RlZEltbVB0cihKU1ZhbHVlOjplbmNvZGUocmVjb3ZlcnkuY29uc3RhbnQoKSkpLCBBc3Nl
bWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcilvcGVyYW5kcy5vcGVyYW5k
Rm9ySW5kZXgoaW5kZXgpKSk7CisgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmU2NChBc3NlbWJs
eUhlbHBlcnM6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUocmVjb3ZlcnkuY29uc3RhbnQo
KSkpLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcilvcGVyYW5k
cy5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgCkBAIC01
NzYsMTEgKzU3NiwxMSBAQCB2b2lkIE9TUkV4aXRDb21waWxlcjo6Y29tcGlsZUV4aXQoY29uc3QK
ICAgICAgICAgICAgIGNhbGxlckZyYW1lR1BSID0gR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXI7
CiAgICAgICAgIAogICAgICAgICBtX2ppdC5zdG9yZVB0cihBc3NlbWJseUhlbHBlcnM6OlRydXN0
ZWRJbW1QdHIoYmFzZWxpbmVDb2RlQmxvY2spLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3Io
KFZpcnR1YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIEpTU3RhY2s6
OkNvZGVCbG9jaykpKTsKLSAgICAgICAgbV9qaXQuc3RvcmVQdHIoQXNzZW1ibHlIZWxwZXJzOjpU
cnVzdGVkSW1tUHRyKGlubGluZUNhbGxGcmFtZS0+Y2FsbGVlLT5zY29wZSgpKSwgQXNzZW1ibHlI
ZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxGcmFtZS0+c3Rh
Y2tPZmZzZXQgKyBKU1N0YWNrOjpTY29wZUNoYWluKSkpOwotICAgICAgICBtX2ppdC5zdG9yZVB0
cihjYWxsZXJGcmFtZUdQUiwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFsUmVn
aXN0ZXIpKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBKU1N0YWNrOjpDYWxsZXJGcmFt
ZSkpKTsKKyAgICAgICAgbV9qaXQuc3RvcmU2NChBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW02
NChKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZShpbmxpbmVDYWxsRnJhbWUtPmNhbGxlZS0+c2NvcGUo
KSkpKSwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlubGlu
ZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBKU1N0YWNrOjpTY29wZUNoYWluKSkpOworICAgICAg
ICBtX2ppdC5zdG9yZTY0KGNhbGxlckZyYW1lR1BSLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NG
b3IoKFZpcnR1YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIEpTU3Rh
Y2s6OkNhbGxlckZyYW1lKSkpOwogICAgICAgICBtX2ppdC5zdG9yZVB0cihBc3NlbWJseUhlbHBl
cnM6OlRydXN0ZWRJbW1QdHIoanVtcFRhcmdldCksIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0Zv
cigoVmlydHVhbFJlZ2lzdGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgSlNTdGFj
azo6UmV0dXJuUEMpKSk7CiAgICAgICAgIG1faml0LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpU
cnVzdGVkSW1tMzIoaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpKSwgQXNzZW1ibHlI
ZWxwZXJzOjpwYXlsb2FkRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxGcmFtZS0+c3Rh
Y2tPZmZzZXQgKyBKU1N0YWNrOjpBcmd1bWVudENvdW50KSkpOwotICAgICAgICBtX2ppdC5zdG9y
ZVB0cihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoaW5saW5lQ2FsbEZyYW1lLT5jYWxs
ZWUuZ2V0KCkpLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3Rlciko
aW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIEpTU3RhY2s6OkNhbGxlZSkpKTsKKyAgICAg
ICAgbV9qaXQuc3RvcmU2NChBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjpl
bmNvZGUoSlNWYWx1ZShpbmxpbmVDYWxsRnJhbWUtPmNhbGxlZS5nZXQoKSkpKSwgQXNzZW1ibHlI
ZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxGcmFtZS0+c3Rh
Y2tPZmZzZXQgKyBKU1N0YWNrOjpDYWxsZWUpKSk7CiAgICAgfQogICAgIAogICAgIC8vIDE1KSBD
cmVhdGUgYXJndW1lbnRzIGlmIG5lY2Vzc2FyeSBhbmQgcGxhY2UgdGhlbSBpbnRvIHRoZSBhcHBy
b3ByaWF0ZSBhbGlhc2VkCkBAIC02MjAsMjEgKzYyMCwyMiBAQCB2b2lkIE9TUkV4aXRDb21waWxl
cjo6Y29tcGlsZUV4aXQoY29uc3QKICAgICAgICAgICAgICAgICAgICAgICAgIGJpdHdpc2VfY2Fz
dDx2b2lkKj4ob3BlcmF0aW9uQ3JlYXRlQXJndW1lbnRzKSksCiAgICAgICAgICAgICAgICAgICAg
IEdQUkluZm86Om5vbkFyZ0dQUjApOwogICAgICAgICAgICAgICAgIG1faml0LmNhbGwoR1BSSW5m
bzo6bm9uQXJnR1BSMCk7Ci0gICAgICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIoR1BSSW5mbzo6
cmV0dXJuVmFsdWVHUFIsIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0Zvcihhcmd1bWVudHNSZWdp
c3RlcikpOwotICAgICAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKAorICAgICAgICAgICAgICAg
IG1faml0LnN0b3JlNjQoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEFzc2VtYmx5SGVscGVyczo6
YWRkcmVzc0Zvcihhcmd1bWVudHNSZWdpc3RlcikpOworICAgICAgICAgICAgICAgIG1faml0LnN0
b3JlNjQoCiAgICAgICAgICAgICAgICAgICAgIEdQUkluZm86OnJldHVyblZhbHVlR1BSLAogICAg
ICAgICAgICAgICAgICAgICBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IodW5tb2RpZmllZEFy
Z3VtZW50c1JlZ2lzdGVyKGFyZ3VtZW50c1JlZ2lzdGVyKSkpOwogICAgICAgICAgICAgICAgIG1f
aml0Lm1vdmUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEdQUkluZm86OnJlZ1QwKTsgLy8gbm8t
b3AgbW92ZSBvbiBhbG1vc3QgYWxsIHBsYXRmb3Jtcy4KICAgICAgICAgICAgIH0KIAotICAgICAg
ICAgICAgbV9qaXQubG9hZFB0cihBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoYXJndW1lbnRz
UmVnaXN0ZXIpLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgICAgICBtX2ppdC5zdG9yZVB0cihH
UFJJbmZvOjpyZWdUMCwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKG9wZXJhbmQpKTsKKyAg
ICAgICAgICAgIG1faml0LmxvYWQ2NChBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoYXJndW1l
bnRzUmVnaXN0ZXIpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAgICBtX2ppdC5zdG9yZTY0
KEdQUkluZm86OnJlZ1QwLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3Iob3BlcmFuZCkpOwog
ICAgICAgICB9CiAgICAgfQogICAgIAogICAgIC8vIDE2KSBMb2FkIHRoZSByZXN1bHQgb2YgdGhl
IGxhc3QgYnl0ZWNvZGUgb3BlcmF0aW9uIGludG8gcmVnVDAuCisgICAgCiAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBleGl0Lm1fc2V0T3BlcmFuZHMuc2l6ZSgpOyBpKyspCi0gICAgICAgIG1f
aml0LmxvYWRQdHIoQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIp
ZXhpdC5tX3NldE9wZXJhbmRzW2ldKSwgR1BSSW5mbzo6Y2FjaGVkUmVzdWx0UmVnaXN0ZXIpOwor
ICAgICAgICBtX2ppdC5sb2FkNjQoQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFs
UmVnaXN0ZXIpZXhpdC5tX3NldE9wZXJhbmRzW2ldKSwgR1BSSW5mbzo6Y2FjaGVkUmVzdWx0UmVn
aXN0ZXIpOwogCiAgICAgLy8gMTcpIEFkanVzdCB0aGUgY2FsbCBmcmFtZSBwb2ludGVyLgogICAg
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guY3BwCShyZXZpc2lv
biAxMzE2NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xOTIsNyArMTkyLDcgQEAgc3RhdGljIHZvaWQgZ2VuZXJhdGVQcm90
b0NoYWluQWNjZXNzU3R1YgogICAgIAogICAgIGlmIChpc0lubGluZU9mZnNldChvZmZzZXQpKSB7
CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgc3R1YkppdC5sb2FkUHRyKHByb3RvT2JqZWN0
LT5sb2NhdGlvbkZvck9mZnNldChvZmZzZXQpLCByZXN1bHRHUFIpOworICAgICAgICBzdHViSml0
LmxvYWQ2NChwcm90b09iamVjdC0+bG9jYXRpb25Gb3JPZmZzZXQob2Zmc2V0KSwgcmVzdWx0R1BS
KTsKICNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgICAgIHN0dWJKaXQubW92ZShNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbVB0cihwcm90b09iamVjdC0+bG9jYXRpb25Gb3JPZmZzZXQob2Zm
c2V0KSksIHJlc3VsdEdQUik7CiAgICAgICAgIHN0dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHJlc3VsdEdQUiwgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0
b3IsIGFzQml0cy50YWcpKSwgcmVzdWx0VGFnR1BSKTsKQEAgLTIwMSw3ICsyMDEsNyBAQCBzdGF0
aWMgdm9pZCBnZW5lcmF0ZVByb3RvQ2hhaW5BY2Nlc3NTdHViCiAgICAgfSBlbHNlIHsKICAgICAg
ICAgc3R1YkppdC5sb2FkUHRyKHByb3RvT2JqZWN0LT5idXR0ZXJmbHlBZGRyZXNzKCksIHJlc3Vs
dEdQUik7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgb2Zmc2V0SW5CdXR0ZXJmbHkob2Zmc2V0KSAq
IHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgc3R1
YkppdC5sb2FkNjQoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBvZmZzZXRJbkJ1
dHRlcmZseShvZmZzZXQpICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpLCByZXN1bHRH
UFIpOwogI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKICAgICAgICAgc3R1YkppdC5sb2FkMzIoTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBvZmZzZXRJbkJ1dHRlcmZseShvZmZzZXQp
ICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2Rl
ZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpLCByZXN1bHRUYWdHUFIpOwogICAgICAgICBz
dHViSml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIG9mZnNldElu
QnV0dGVyZmx5KG9mZnNldCkgKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSArIE9CSkVD
VF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpLCByZXN1
bHRHUFIpOwpAQCAtMjYzLDcgKzI2Myw3IEBAIHN0YXRpYyBib29sIHRyeUNhY2hlR2V0QnlJRChF
eGVjU3RhdGUqIGUKICAgICAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChzdHViSml0LmJyYW5jaDMy
KE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwgc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW0zMigwKSkpOwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgc3R1YkppdC5v
clB0cihHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHNjcmF0Y2hHUFIsIHJlc3VsdEdQ
Uik7CisgICAgICAgIHN0dWJKaXQub3I2NChHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIs
IHNjcmF0Y2hHUFIsIHJlc3VsdEdQUik7CiAjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQogICAgICAg
ICBzdHViSml0Lm1vdmUoc2NyYXRjaEdQUiwgcmVzdWx0R1BSKTsKICAgICAgICAgc3R1YkppdC5t
b3ZlKEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tMzIoMHhmZmZmZmZmZiksIHJlc3VsdFRhZ0dQUik7
IC8vIEpTVmFsdWU6OkludDMyVGFnCkBAIC00MjEsMTQgKzQyMSwxNCBAQCBzdGF0aWMgYm9vbCB0
cnlCdWlsZEdldEJ5SURMaXN0KEV4ZWNTdGF0CiAgICAgICAgICAgICAgICAgQVNTRVJUKGJhc2VH
UFIgIT0gc2NyYXRjaEdQUik7CiAgICAgICAgICAgICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KHNs
b3QuY2FjaGVkT2Zmc2V0KCkpKSB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgICAgICAg
ICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIG9m
ZnNldFJlbGF0aXZlVG9CYXNlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpKSwgc2NyYXRjaEdQUik7Cisg
ICAgICAgICAgICAgICAgICAgIHN0dWJKaXQubG9hZDY0KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KGJhc2VHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpKSwgc2Ny
YXRjaEdQUik7CiAjZWxzZQogICAgICAgICAgICAgICAgICAgICBzdHViSml0LmxvYWQzMihNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShzbG90LmNh
Y2hlZE9mZnNldCgpKSksIHNjcmF0Y2hHUFIpOwogI2VuZGlmCiAgICAgICAgICAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hH
UFIpOwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgICAgICAgICAgICAgIHN0dWJKaXQubG9h
ZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBvZmZzZXRSZWxhdGl2ZVRv
QmFzZShzbG90LmNhY2hlZE9mZnNldCgpKSksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgICAg
ICAgICBzdHViSml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBv
ZmZzZXRSZWxhdGl2ZVRvQmFzZShzbG90LmNhY2hlZE9mZnNldCgpKSksIHNjcmF0Y2hHUFIpOwog
I2Vsc2UKICAgICAgICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3Moc2NyYXRjaEdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uoc2xvdC5jYWNoZWRPZmZz
ZXQoKSkpLCBzY3JhdGNoR1BSKTsKICNlbmRpZgpAQCAtNDY1LDcgKzQ2NSw3IEBAIHN0YXRpYyBi
b29sIHRyeUJ1aWxkR2V0QnlJRExpc3QoRXhlY1N0YXQKICAgICAgICAgfSBlbHNlIHsKICAgICAg
ICAgICAgIGlmIChpc0lubGluZU9mZnNldChzbG90LmNhY2hlZE9mZnNldCgpKSkgewogI2lmIFVT
RShKU1ZBTFVFNjQpCi0gICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKGJhc2VHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKHNsb3QuY2FjaGVkT2Zm
c2V0KCkpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgICAgICBzdHViSml0LmxvYWQ2NChNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShzbG90LmNh
Y2hlZE9mZnNldCgpKSksIHJlc3VsdEdQUik7CiAjZWxzZQogICAgICAgICAgICAgICAgIGlmIChi
YXNlR1BSID09IHJlc3VsdFRhZ0dQUikgewogICAgICAgICAgICAgICAgICAgICBzdHViSml0Lmxv
YWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFz
ZShzbG90LmNhY2hlZE9mZnNldCgpKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNj
cmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpLCByZXN1bHRHUFIpOwpAQCAtNDc4LDcgKzQ3OCw3IEBA
IHN0YXRpYyBib29sIHRyeUJ1aWxkR2V0QnlJRExpc3QoRXhlY1N0YXQKICAgICAgICAgICAgIH0g
ZWxzZSB7CiAgICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlc3VsdEdQUik7
CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShzbG90
LmNhY2hlZE9mZnNldCgpKSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICAgICAgc3R1YkppdC5s
b2FkNjQoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBvZmZzZXRSZWxhdGl2ZVRv
QmFzZShzbG90LmNhY2hlZE9mZnNldCgpKSksIHJlc3VsdEdQUik7CiAjZWxzZQogICAgICAgICAg
ICAgICAgIHN0dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwg
b2Zmc2V0UmVsYXRpdmVUb0Jhc2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKyBPQkpFQ1RfT0ZGU0VU
T0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpLCByZXN1bHRUYWdHUFIpOwog
ICAgICAgICAgICAgICAgIHN0dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJl
c3VsdEdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKyBPQkpF
Q1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSwgcmVz
dWx0R1BSKTsKQEAgLTY4MiwxMCArNjgyLDEwIEBAIHN0YXRpYyB2b2lkIGVtaXRQdXRSZXBsYWNl
U3R1YigKICAgICAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIGlmIChpc0lubGluZU9mZnNldChz
bG90LmNhY2hlZE9mZnNldCgpKSkKLSAgICAgICAgc3R1YkppdC5zdG9yZVB0cih2YWx1ZUdQUiwg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5l
U3RvcmFnZSgpICsgb2Zmc2V0SW5JbmxpbmVTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICog
c2l6ZW9mKEpTVmFsdWUpKSk7CisgICAgICAgIHN0dWJKaXQuc3RvcmU2NCh2YWx1ZUdQUiwgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3Rv
cmFnZSgpICsgb2Zmc2V0SW5JbmxpbmVTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6
ZW9mKEpTVmFsdWUpKSk7CiAgICAgZWxzZSB7CiAgICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkp
LCBzY3JhdGNoR1BSKTsKLSAgICAgICAgc3R1YkppdC5zdG9yZVB0cih2YWx1ZUdQUiwgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgb2Zmc2V0SW5CdXR0ZXJmbHkoc2xvdC5jYWNo
ZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkpKTsKKyAgICAgICAgc3R1YkppdC5zdG9yZTY0
KHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBvZmZzZXRJbkJ1
dHRlcmZseShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSkpOwogICAgIH0K
ICNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KHNsb3QuY2Fj
aGVkT2Zmc2V0KCkpKSB7CkBAIC04NTQsMTEgKzg1NCwxMSBAQCBzdGF0aWMgdm9pZCBlbWl0UHV0
VHJhbnNpdGlvblN0dWIoCiAgICAgc3R1YkppdC5zdG9yZVB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBK
U0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBpZiAo
aXNJbmxpbmVPZmZzZXQoc2xvdC5jYWNoZWRPZmZzZXQoKSkpCi0gICAgICAgIHN0dWJKaXQuc3Rv
cmVQdHIodmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0
OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSArIG9mZnNldEluSW5saW5lU3RvcmFnZShzbG90LmNh
Y2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSkpOworICAgICAgICBzdHViSml0LnN0b3Jl
NjQodmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0Ojpv
ZmZzZXRPZklubGluZVN0b3JhZ2UoKSArIG9mZnNldEluSW5saW5lU3RvcmFnZShzbG90LmNhY2hl
ZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSkpOwogICAgIGVsc2UgewogICAgICAgICBpZiAo
IXNjcmF0Y2hHUFIxSGFzU3RvcmFnZSkKICAgICAgICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkp
LCBzY3JhdGNoR1BSMSk7Ci0gICAgICAgIHN0dWJKaXQuc3RvcmVQdHIodmFsdWVHUFIsIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIxLCBvZmZzZXRJbkJ1dHRlcmZseShzbG90LmNh
Y2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSkpOworICAgICAgICBzdHViSml0LnN0b3Jl
NjQodmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIxLCBvZmZzZXRJ
bkJ1dHRlcmZseShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSkpOwogICAg
IH0KICNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KHNsb3Qu
Y2FjaGVkT2Zmc2V0KCkpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nj
cmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmgJKHJldmlzaW9uIDEzMTY2MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9y
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEyNywxNSArMTI3LDIwIEBAIHB1YmxpYzoKICAgICB7CiAg
ICAgICAgIHVuc2lnbmVkIGNvdW50ID0gMDsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gR1BS
SW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7IGktLTspIHsKLSAgICAgICAgICAgIGlmIChtX3VzZWRS
ZWdpc3RlcnMuZ2V0R1BSQnlJbmRleChpKSkKLSAgICAgICAgICAgICAgICBqaXQuc3RvcmVQdHIo
R1BSSW5mbzo6dG9SZWdpc3RlcihpKSwgc2NyYXRjaEJ1ZmZlci0+bV9idWZmZXIgKyAoY291bnQr
KykpOworICAgICAgICAgICAgaWYgKG1fdXNlZFJlZ2lzdGVycy5nZXRHUFJCeUluZGV4KGkpKSB7
CisjaWYgQ1BVKFg4Nl82NCkKKyAgICAgICAgICAgICAgICBqaXQuc3RvcmU2NChHUFJJbmZvOjp0
b1JlZ2lzdGVyKGkpLCBzdGF0aWNfY2FzdDxFbmNvZGVkSlNWYWx1ZSo+KHNjcmF0Y2hCdWZmZXIt
PmRhdGFCdWZmZXIoKSkgKyAoY291bnQrKykpOworI2Vsc2UKKyAgICAgICAgICAgICAgICBqaXQu
c3RvcmVQdHIoR1BSSW5mbzo6dG9SZWdpc3RlcihpKSwgc3RhdGljX2Nhc3Q8RW5jb2RlZEpTVmFs
dWUqPihzY3JhdGNoQnVmZmVyLT5kYXRhQnVmZmVyKCkpICsgKGNvdW50KyspKTsKKyNlbmRpZgor
ICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKHNjcmF0Y2hHUFIgPT0gSW52YWxpZEdQUlJl
ZyAmJiAhbV9sb2NrZWRSZWdpc3RlcnMuZ2V0R1BSQnlJbmRleChpKSAmJiAhbV9zY3JhdGNoUmVn
aXN0ZXJzLmdldEdQUkJ5SW5kZXgoaSkpCiAgICAgICAgICAgICAgICAgc2NyYXRjaEdQUiA9IEdQ
UkluZm86OnRvUmVnaXN0ZXIoaSk7CiAgICAgICAgIH0KICAgICAgICAgQVNTRVJUKHNjcmF0Y2hH
UFIgIT0gSW52YWxpZEdQUlJlZyk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IEZQUkluZm86
Om51bWJlck9mUmVnaXN0ZXJzOyBpLS07KSB7CiAgICAgICAgICAgICBpZiAobV91c2VkUmVnaXN0
ZXJzLmdldEZQUkJ5SW5kZXgoaSkpIHsKLSAgICAgICAgICAgICAgICBqaXQubW92ZShNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbVB0cihzY3JhdGNoQnVmZmVyLT5tX2J1ZmZlciArIChjb3VudCsr
KSksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tUHRyKHN0YXRpY19jYXN0PEVuY29kZWRKU1ZhbHVlKj4oc2NyYXRjaEJ1ZmZl
ci0+ZGF0YUJ1ZmZlcigpKSArIChjb3VudCsrKSksIHNjcmF0Y2hHUFIpOwogICAgICAgICAgICAg
ICAgIGppdC5zdG9yZURvdWJsZShGUFJJbmZvOjp0b1JlZ2lzdGVyKGkpLCBzY3JhdGNoR1BSKTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMTY1LDE1ICsxNzAsMjAgQEAgcHVibGljOgog
ICAgICAgICB1bnNpZ25lZCBjb3VudCA9IG1fdXNlZFJlZ2lzdGVycy5udW1iZXJPZlNldEdQUnMo
KTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gRlBSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7
IGktLTspIHsKICAgICAgICAgICAgIGlmIChtX3VzZWRSZWdpc3RlcnMuZ2V0RlBSQnlJbmRleChp
KSkgewotICAgICAgICAgICAgICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
UHRyKHNjcmF0Y2hCdWZmZXItPm1fYnVmZmVyICsgKGNvdW50KyspKSwgc2NyYXRjaEdQUik7Cisg
ICAgICAgICAgICAgICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoc3Rh
dGljX2Nhc3Q8RW5jb2RlZEpTVmFsdWUqPihzY3JhdGNoQnVmZmVyLT5kYXRhQnVmZmVyKCkpICsg
KGNvdW50KyspKSwgc2NyYXRjaEdQUik7CiAgICAgICAgICAgICAgICAgaml0LmxvYWREb3VibGUo
c2NyYXRjaEdQUiwgRlBSSW5mbzo6dG9SZWdpc3RlcihpKSk7CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KICAgICAgICAgCiAgICAgICAgIGNvdW50ID0gMDsKICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7IGktLTspIHsKLSAgICAgICAgICAgIGlm
IChtX3VzZWRSZWdpc3RlcnMuZ2V0R1BSQnlJbmRleChpKSkKLSAgICAgICAgICAgICAgICBqaXQu
bG9hZFB0cihzY3JhdGNoQnVmZmVyLT5tX2J1ZmZlciArIChjb3VudCsrKSwgR1BSSW5mbzo6dG9S
ZWdpc3RlcihpKSk7CisgICAgICAgICAgICBpZiAobV91c2VkUmVnaXN0ZXJzLmdldEdQUkJ5SW5k
ZXgoaSkpIHsKKyNpZiBDUFUoWDg2XzY0KQorICAgICAgICAgICAgICAgIGppdC5sb2FkNjQoc3Rh
dGljX2Nhc3Q8RW5jb2RlZEpTVmFsdWUqPihzY3JhdGNoQnVmZmVyLT5kYXRhQnVmZmVyKCkpICsg
KGNvdW50KyspLCBHUFJJbmZvOjp0b1JlZ2lzdGVyKGkpKTsKKyNlbHNlCisgICAgICAgICAgICAg
ICAgaml0LmxvYWRQdHIoc3RhdGljX2Nhc3Q8RW5jb2RlZEpTVmFsdWUqPihzY3JhdGNoQnVmZmVy
LT5kYXRhQnVmZmVyKCkpICsgKGNvdW50KyspLCBHUFJJbmZvOjp0b1JlZ2lzdGVyKGkpKTsKKyNl
bmRpZgorICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogICAgIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTaWxlbnRSZWdpc3RlclNhdmVQbGFuLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTaWxlbnRSZWdpc3RlclNhdmVQbGFu
LmgJKHJldmlzaW9uIDEzMTY2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2ls
ZW50UmVnaXN0ZXJTYXZlUGxhbi5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw2ICs0MSw3IEBAIGVu
dW0gU2lsZW50U3BpbGxBY3Rpb24gewogICAgIFN0b3JlMzJUYWcsCiAgICAgU3RvcmUzMlBheWxv
YWQsCiAgICAgU3RvcmVQdHIsCisgICAgU3RvcmU2NCwKICAgICBTdG9yZURvdWJsZQogfTsKIApA
QCAtNjEsNiArNjIsNyBAQCBlbnVtIFNpbGVudEZpbGxBY3Rpb24gewogICAgIExvYWQzMlBheWxv
YWQsCiAgICAgTG9hZDMyUGF5bG9hZEJveEludCwKICAgICBMb2FkUHRyLAorICAgIExvYWQ2NCwK
ICAgICBMb2FkRG91YmxlLAogICAgIExvYWREb3VibGVCb3hEb3VibGUsCiAgICAgTG9hZEpTVW5i
b3hEb3VibGUKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMTMxNjYzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUsMjEg
KzU1LDIxIEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbEludGVnZXIoTm9kZUkKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIGlmIChpc051bWJlckNvbnN0YW50KG5vZGVJbmRleCkpIHsK
ICAgICAgICAgICAgICAgICBKU1ZhbHVlIGpzVmFsdWUgPSBqc051bWJlcih2YWx1ZU9mTnVtYmVy
Q29uc3RhbnQobm9kZUluZGV4KSk7Ci0gICAgICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fz
c2VtYmxlcjo6SW1tUHRyKEpTVmFsdWU6OmVuY29kZShqc1ZhbHVlKSksIGdwcik7CisgICAgICAg
ICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6SW1tNjQoSlNWYWx1ZTo6ZW5jb2Rl
KGpzVmFsdWUpKSwgZ3ByKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAg
QVNTRVJUKGlzSlNDb25zdGFudChub2RlSW5kZXgpKTsKICAgICAgICAgICAgICAgICBKU1ZhbHVl
IGpzVmFsdWUgPSB2YWx1ZU9mSlNDb25zdGFudChub2RlSW5kZXgpOwotICAgICAgICAgICAgICAg
IG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoSlNWYWx1ZTo6ZW5jb2Rl
KGpzVmFsdWUpKSwgZ3ByKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzVmFsdWUpKSwgZ3ByKTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfSBlbHNlIGlmIChpbmZvLnNwaWxsRm9ybWF0KCkgPT0gRGF0YUZv
cm1hdEludGVnZXIpIHsKICAgICAgICAgICAgIG1fZ3Bycy5yZXRhaW4oZ3ByLCB2aXJ0dWFsUmVn
aXN0ZXIsIFNwaWxsT3JkZXJTcGlsbGVkKTsKICAgICAgICAgICAgIG1faml0LmxvYWQzMihKSVRD
b21waWxlcjo6cGF5bG9hZEZvcih2aXJ0dWFsUmVnaXN0ZXIpLCBncHIpOwogICAgICAgICAgICAg
Ly8gVGFnIGl0LCBzaW5jZSBmaWxsSW50ZWdlcigpIGlzIHVzZWQgd2hlbiB3ZSB3YW50IGEgYm94
ZWQgaW50ZWdlci4KLSAgICAgICAgICAgIG1faml0Lm9yUHRyKEdQUkluZm86OnRhZ1R5cGVOdW1i
ZXJSZWdpc3RlciwgZ3ByKTsKKyAgICAgICAgICAgIG1faml0Lm9yNjQoR1BSSW5mbzo6dGFnVHlw
ZU51bWJlclJlZ2lzdGVyLCBncHIpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgQVNT
RVJUKGluZm8uc3BpbGxGb3JtYXQoKSA9PSBEYXRhRm9ybWF0SlMgfHwgaW5mby5zcGlsbEZvcm1h
dCgpID09IERhdGFGb3JtYXRKU0ludGVnZXIpOwogICAgICAgICAgICAgbV9ncHJzLnJldGFpbihn
cHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlclNwaWxsZWQpOwotICAgICAgICAgICAgbV9q
aXQubG9hZFB0cihKSVRDb21waWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBncHIp
OworICAgICAgICAgICAgbV9qaXQubG9hZDY0KEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1
YWxSZWdpc3RlciksIGdwcik7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBTaW5jZSB3ZSBzdGF0
aWNhbGx5IGtub3cgdGhhdCB3ZSdyZSBmaWxsaW5nIGFuIGludGVnZXIsIGFuZCB2YWx1ZXMKQEAg
LTEzMyw4ICsxMzMsOCBAQCBGUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxEb3VibGUoTm9kZUlu
CiAgICAgICAgICAgICAgICAgdW5sb2NrKGdwcik7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKGlz
TnVtYmVyQ29uc3RhbnQobm9kZUluZGV4KSkgewogICAgICAgICAgICAgICAgIEZQUlJlZyBmcHIg
PSBmcHJBbGxvY2F0ZSgpOwotICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJs
ZXI6OkltbVB0cihyZWludGVycHJldF9jYXN0PHZvaWQqPihyZWludGVycHJldERvdWJsZVRvSW50
cHRyKHZhbHVlT2ZOdW1iZXJDb25zdGFudChub2RlSW5kZXgpKSkpLCBncHIpOwotICAgICAgICAg
ICAgICAgIG1faml0Lm1vdmVQdHJUb0RvdWJsZShncHIsIGZwcik7CisgICAgICAgICAgICAgICAg
bV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6SW1tNjQocmVpbnRlcnByZXREb3VibGVUb0ludDY0
KHZhbHVlT2ZOdW1iZXJDb25zdGFudChub2RlSW5kZXgpKSksIGdwcik7CisgICAgICAgICAgICAg
ICAgbV9qaXQubW92ZTY0VG9Eb3VibGUoZ3ByLCBmcHIpOwogICAgICAgICAgICAgICAgIHVubG9j
ayhncHIpOwogCiAgICAgICAgICAgICAgICAgbV9mcHJzLnJldGFpbihmcHIsIHZpcnR1YWxSZWdp
c3RlciwgU3BpbGxPcmRlckRvdWJsZSk7CkBAIC0xNDQsNyArMTQ0LDcgQEAgRlBSUmVnIFNwZWN1
bGF0aXZlSklUOjpmaWxsRG91YmxlKE5vZGVJbgogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBz
aG91bGQgbm90IGJlIHJlYWNoYWJsZT8KICAgICAgICAgICAgICAgICBBU1NFUlQoaXNKU0NvbnN0
YW50KG5vZGVJbmRleCkpOwogICAgICAgICAgICAgICAgIEpTVmFsdWUganNWYWx1ZSA9IHZhbHVl
T2ZKU0NvbnN0YW50KG5vZGVJbmRleCk7Ci0gICAgICAgICAgICAgICAgbV9qaXQubW92ZShNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihKU1ZhbHVlOjplbmNvZGUoanNWYWx1ZSkpLCBncHIp
OworICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02
NChKU1ZhbHVlOjplbmNvZGUoanNWYWx1ZSkpLCBncHIpOwogICAgICAgICAgICAgICAgIG1fZ3By
cy5yZXRhaW4oZ3ByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJDb25zdGFudCk7CiAgICAg
ICAgICAgICAgICAgaW5mby5maWxsSlNWYWx1ZSgqbV9zdHJlYW0sIGdwciwgRGF0YUZvcm1hdEpT
KTsKICAgICAgICAgICAgICAgICB1bmxvY2soZ3ByKTsKQEAgLTE3NSw3ICsxNzUsNyBAQCBGUFJS
ZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxEb3VibGUoTm9kZUluCiAgICAgICAgIAogICAgICAgICAg
ICAgICAgIEFTU0VSVChzcGlsbEZvcm1hdCAmIERhdGFGb3JtYXRKUyk7CiAgICAgICAgICAgICAg
ICAgbV9ncHJzLnJldGFpbihncHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlclNwaWxsZWQp
OwotICAgICAgICAgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Io
dmlydHVhbFJlZ2lzdGVyKSwgZ3ByKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5sb2FkNjQoSklU
Q29tcGlsZXI6OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSwgZ3ByKTsKICAgICAgICAgICAg
ICAgICBpbmZvLmZpbGxKU1ZhbHVlKCptX3N0cmVhbSwgZ3ByLCBzcGlsbEZvcm1hdCk7CiAgICAg
ICAgICAgICAgICAgdW5sb2NrKGdwcik7CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0yMDAs
NyArMjAwLDcgQEAgRlBSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsRG91YmxlKE5vZGVJbgogICAg
ICAgICBGUFJSZWcgZnByID0gZnByQWxsb2NhdGUoKTsKICAgICAgICAgR1BSUmVnIHRlbXBHcHIg
PSBhbGxvY2F0ZSgpOyAvLyBGSVhNRTogY2FuIHdlIHNraXAgdGhpcyBhbGxvY2F0aW9uIG9uIHRo
ZSBsYXN0IHVzZSBvZiB0aGUgdmlydHVhbCByZWdpc3Rlcj8KIAotICAgICAgICBKSVRDb21waWxl
cjo6SnVtcCBpc0ludGVnZXIgPSBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkFib3Zl
T3JFcXVhbCwganNWYWx1ZUdwciwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKKyAg
ICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNJbnRlZ2VyID0gbV9qaXQuYnJhbmNoNjQoTWFjcm9B
c3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwganNWYWx1ZUdwciwgR1BSSW5mbzo6dGFnVHlwZU51bWJl
clJlZ2lzdGVyKTsKIAogICAgICAgICBtX2ppdC5qaXRBc3NlcnRJc0pTRG91YmxlKGpzVmFsdWVH
cHIpOwogCkBAIC0yNzksMTUgKzI3OSwxNSBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxK
U1ZhbHVlKE5vZGVJCiAgICAgICAgICAgICBpZiAoaXNJbnQzMkNvbnN0YW50KG5vZGVJbmRleCkp
IHsKICAgICAgICAgICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKCptX3N0cmVhbSwgZ3ByLCBEYXRh
Rm9ybWF0SlNJbnRlZ2VyKTsKICAgICAgICAgICAgICAgICBKU1ZhbHVlIGpzVmFsdWUgPSBqc051
bWJlcih2YWx1ZU9mSW50MzJDb25zdGFudChub2RlSW5kZXgpKTsKLSAgICAgICAgICAgICAgICBt
X2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKGpzVmFsdWUp
KSwgZ3ByKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpJbW02
NChKU1ZhbHVlOjplbmNvZGUoanNWYWx1ZSkpLCBncHIpOwogICAgICAgICAgICAgfSBlbHNlIGlm
IChpc051bWJlckNvbnN0YW50KG5vZGVJbmRleCkpIHsKICAgICAgICAgICAgICAgICBpbmZvLmZp
bGxKU1ZhbHVlKCptX3N0cmVhbSwgZ3ByLCBEYXRhRm9ybWF0SlNEb3VibGUpOwogICAgICAgICAg
ICAgICAgIEpTVmFsdWUganNWYWx1ZShKU1ZhbHVlOjpFbmNvZGVBc0RvdWJsZSwgdmFsdWVPZk51
bWJlckNvbnN0YW50KG5vZGVJbmRleCkpOwotICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoTWFj
cm9Bc3NlbWJsZXI6OkltbVB0cihKU1ZhbHVlOjplbmNvZGUoanNWYWx1ZSkpLCBncHIpOworICAg
ICAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OkltbTY0KEpTVmFsdWU6OmVu
Y29kZShqc1ZhbHVlKSksIGdwcik7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAg
ICAgIEFTU0VSVChpc0pTQ29uc3RhbnQobm9kZUluZGV4KSk7CiAgICAgICAgICAgICAgICAgSlNW
YWx1ZSBqc1ZhbHVlID0gdmFsdWVPZkpTQ29uc3RhbnQobm9kZUluZGV4KTsKLSAgICAgICAgICAg
ICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKEpTVmFsdWU6OmVu
Y29kZShqc1ZhbHVlKSksIGdwcik7CisgICAgICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc1ZhbHVlKSksIGdwcik7CiAg
ICAgICAgICAgICAgICAgaW5mby5maWxsSlNWYWx1ZSgqbV9zdHJlYW0sIGdwciwgRGF0YUZvcm1h
dEpTKTsKICAgICAgICAgICAgIH0KIApAQCAtMjk3LDEzICsyOTcsMTMgQEAgR1BSUmVnIFNwZWN1
bGF0aXZlSklUOjpmaWxsSlNWYWx1ZShOb2RlSQogICAgICAgICAgICAgbV9ncHJzLnJldGFpbihn
cHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlclNwaWxsZWQpOwogICAgICAgICAgICAgaWYg
KHNwaWxsRm9ybWF0ID09IERhdGFGb3JtYXRJbnRlZ2VyKSB7CiAgICAgICAgICAgICAgICAgbV9q
aXQubG9hZDMyKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIGdwcik7
Ci0gICAgICAgICAgICAgICAgbV9qaXQub3JQdHIoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lz
dGVyLCBncHIpOworICAgICAgICAgICAgICAgIG1faml0Lm9yNjQoR1BSSW5mbzo6dGFnVHlwZU51
bWJlclJlZ2lzdGVyLCBncHIpOwogICAgICAgICAgICAgICAgIHNwaWxsRm9ybWF0ID0gRGF0YUZv
cm1hdEpTSW50ZWdlcjsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgbV9q
aXQubG9hZFB0cihKSVRDb21waWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBncHIp
OworICAgICAgICAgICAgICAgIG1faml0LmxvYWQ2NChKSVRDb21waWxlcjo6YWRkcmVzc0Zvcih2
aXJ0dWFsUmVnaXN0ZXIpLCBncHIpOwogICAgICAgICAgICAgICAgIGlmIChzcGlsbEZvcm1hdCA9
PSBEYXRhRm9ybWF0RG91YmxlKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIE5lZWQgdG8gYm94
IHRoZSBkb3VibGUsIHNpbmNlIHdlIHdhbnQgYSBKU1ZhbHVlLgotICAgICAgICAgICAgICAgICAg
ICBtX2ppdC5zdWJQdHIoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBncHIpOworICAg
ICAgICAgICAgICAgICAgICBtX2ppdC5zdWI2NChHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0
ZXIsIGdwcik7CiAgICAgICAgICAgICAgICAgICAgIHNwaWxsRm9ybWF0ID0gRGF0YUZvcm1hdEpT
RG91YmxlOwogICAgICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgICAgICBBU1NF
UlQoc3BpbGxGb3JtYXQgJiBEYXRhRm9ybWF0SlMpOwpAQCAtMzE5LDExICszMTksMTEgQEAgR1BS
UmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsSlNWYWx1ZShOb2RlSQogICAgICAgICAvLyBJZiBub3Qs
IHdlJ2xsIHplcm8gZXh0ZW5kIGluIHBsYWNlLCBzbyBtYXJrIG9uIHRoZSBpbmZvIHRoYXQgdGhp
cyBpcyBub3cgdHlwZSBEYXRhRm9ybWF0SW50ZWdlciwgbm90IERhdGFGb3JtYXRKU0ludGVnZXIu
CiAgICAgICAgIGlmIChtX2dwcnMuaXNMb2NrZWQoZ3ByKSkgewogICAgICAgICAgICAgR1BSUmVn
IHJlc3VsdCA9IGFsbG9jYXRlKCk7Ci0gICAgICAgICAgICBtX2ppdC5vclB0cihHUFJJbmZvOjp0
YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIGdwciwgcmVzdWx0KTsKKyAgICAgICAgICAgIG1faml0Lm9y
NjQoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBncHIsIHJlc3VsdCk7CiAgICAgICAg
ICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICB9CiAgICAgICAgIG1fZ3Bycy5sb2NrKGdwcik7
Ci0gICAgICAgIG1faml0Lm9yUHRyKEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgZ3By
KTsKKyAgICAgICAgbV9qaXQub3I2NChHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIGdw
cik7CiAgICAgICAgIGluZm8uZmlsbEpTVmFsdWUoKm1fc3RyZWFtLCBncHIsIERhdGFGb3JtYXRK
U0ludGVnZXIpOwogICAgICAgICByZXR1cm4gZ3ByOwogICAgIH0KQEAgLTQwOCw4ICs0MDgsOCBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVZhbHVlCiAgICAgR1BSUmVnIGdw
ciA9IHJlc3VsdC5ncHIoKTsKICAgICBvcDEudXNlKCk7CiAKLSAgICBKSVRDb21waWxlcjo6SnVt
cCBpc0ludGVnZXIgPSBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVh
bCwganNWYWx1ZUdwciwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKLSAgICBKSVRD
b21waWxlcjo6SnVtcCBub25OdW1lcmljID0gbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2Vt
Ymxlcjo6WmVybywganNWYWx1ZUdwciwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsK
KyAgICBKSVRDb21waWxlcjo6SnVtcCBpc0ludGVnZXIgPSBtX2ppdC5icmFuY2g2NChNYWNyb0Fz
c2VtYmxlcjo6QWJvdmVPckVxdWFsLCBqc1ZhbHVlR3ByLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVy
UmVnaXN0ZXIpOworICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vbk51bWVyaWMgPSBtX2ppdC5icmFu
Y2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIGpzVmFsdWVHcHIsIEdQUkluZm86OnRhZ1R5
cGVOdW1iZXJSZWdpc3Rlcik7CiAKICAgICAvLyBGaXJzdCwgaWYgd2UgZ2V0IGhlcmUgd2UgaGF2
ZSBhIGRvdWJsZSBlbmNvZGVkIGFzIGEgSlNWYWx1ZQogICAgIG1faml0Lm1vdmUoanNWYWx1ZUdw
ciwgZ3ByKTsKQEAgLTQxNyw3ICs0MTcsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVj
dWxhdGl2ZVZhbHVlCiAKICAgICAvLyBGaW5hbGx5LCBoYW5kbGUgaW50ZWdlcnMuCiAgICAgaXNJ
bnRlZ2VyLmxpbmsoJm1faml0KTsKLSAgICBtX2ppdC5vclB0cihHUFJJbmZvOjp0YWdUeXBlTnVt
YmVyUmVnaXN0ZXIsIGpzVmFsdWVHcHIsIGdwcik7CisgICAgbV9qaXQub3I2NChHUFJJbmZvOjp0
YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIGpzVmFsdWVHcHIsIGdwcik7CiAgICAgaGFzVW5ib3hlZERv
dWJsZS5saW5rKCZtX2ppdCk7CiAgICAgCiAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoYWRvcHRQ
dHIobmV3IFZhbHVlVG9OdW1iZXJTbG93UGF0aEdlbmVyYXRvcihub25OdW1lcmljLCB0aGlzLCBn
cHIsIGpzVmFsdWVHcHIpKSk7CkBAIC00NTksNyArNDU5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6bm9uU3BlY3VsYXRpdmVWYWx1ZQogICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3By
KCk7CiAgICAgb3AxLnVzZSgpOwogCi0gICAgSklUQ29tcGlsZXI6Okp1bXAgaXNOb3RJbnRlZ2Vy
ID0gbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpCZWxvdywganNWYWx1ZUdwciwgR1BS
SW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKKyAgICBKSVRDb21waWxlcjo6SnVtcCBpc05v
dEludGVnZXIgPSBtX2ppdC5icmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIGpzVmFsdWVH
cHIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7CiAKICAgICBtX2ppdC56ZXJvRXh0
ZW5kMzJUb1B0cihqc1ZhbHVlR3ByLCByZXN1bHRHUFIpOwogICAgIApAQCAtNDg2LDcgKzQ4Niw3
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlVUludDMKICAgICAKICAgICBw
b3NpdGl2ZS5saW5rKCZtX2ppdCk7CiAgICAgCi0gICAgbV9qaXQub3JQdHIoR1BSSW5mbzo6dGFn
VHlwZU51bWJlclJlZ2lzdGVyLCBvcDEuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CisgICAgbV9qaXQu
b3I2NChHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIG9wMS5ncHIoKSwgcmVzdWx0Lmdw
cigpKTsKICAgICAKICAgICBkb25lLmxpbmsoJm1faml0KTsKICAgICAKQEAgLTUwMCw3ICs1MDAs
NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjYWNoZWRHZXRCeUlkKENvZGVPCiAgICAgCiAgICAg
SklUQ29tcGlsZXI6OkNvbnZlcnRpYmxlTG9hZExhYmVsIHByb3BlcnR5U3RvcmFnZUxvYWQgPQog
ICAgICAgICBtX2ppdC5jb252ZXJ0aWJsZUxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3MoYmFz
ZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVzdWx0R1BSKTsKLSAgICBKSVRD
b21waWxlcjo6RGF0YUxhYmVsQ29tcGFjdCBsb2FkV2l0aFBhdGNoID0gbV9qaXQubG9hZFB0cldp
dGhDb21wYWN0QWRkcmVzc09mZnNldFBhdGNoKEpJVENvbXBpbGVyOjpBZGRyZXNzKHJlc3VsdEdQ
UiwgMCksIHJlc3VsdEdQUik7CisgICAgSklUQ29tcGlsZXI6OkRhdGFMYWJlbENvbXBhY3QgbG9h
ZFdpdGhQYXRjaCA9IG1faml0LmxvYWQ2NFdpdGhDb21wYWN0QWRkcmVzc09mZnNldFBhdGNoKEpJ
VENvbXBpbGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgMCksIHJlc3VsdEdQUik7CiAgICAgCiAgICAg
SklUQ29tcGlsZXI6OkxhYmVsIGRvbmVMYWJlbCA9IG1faml0LmxhYmVsKCk7CiAKQEAgLTUzNiw3
ICs1MzYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjYWNoZWRQdXRCeUlkKENvZGVPCiAKICAg
ICBKSVRDb21waWxlcjo6Q29udmVydGlibGVMb2FkTGFiZWwgcHJvcGVydHlTdG9yYWdlTG9hZCA9
CiAgICAgICAgIG1faml0LmNvbnZlcnRpYmxlTG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhi
YXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKLSAgICBK
SVRDb21waWxlcjo6RGF0YUxhYmVsMzIgc3RvcmVXaXRoUGF0Y2ggPSBtX2ppdC5zdG9yZVB0cldp
dGhBZGRyZXNzT2Zmc2V0UGF0Y2godmFsdWVHUFIsIEpJVENvbXBpbGVyOjpBZGRyZXNzKHNjcmF0
Y2hHUFIsIDApKTsKKyAgICBKSVRDb21waWxlcjo6RGF0YUxhYmVsMzIgc3RvcmVXaXRoUGF0Y2gg
PSBtX2ppdC5zdG9yZTY0V2l0aEFkZHJlc3NPZmZzZXRQYXRjaCh2YWx1ZUdQUiwgSklUQ29tcGls
ZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgMCkpOwogCiAgICAgSklUQ29tcGlsZXI6OkxhYmVsIGRv
bmVMYWJlbCA9IG1faml0LmxhYmVsKCk7CiAgICAgCkBAIC01ODgsNyArNTg4LDcgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVOb25QZQogICAgIEpJVENvbXBpbGVyOjpKdW1w
IG5vdENlbGw7CiAgICAgCiAgICAgaWYgKCFpc0tub3duQ2VsbChvcGVyYW5kLmluZGV4KCkpKQot
ICAgICAgICBub3RDZWxsID0gbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm9u
WmVybywgYXJnR1BSLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpOworICAgICAgICBub3RDZWxs
ID0gbV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBhcmdHUFIsIEdQ
UkluZm86OnRhZ01hc2tSZWdpc3Rlcik7CiAgICAKICAgICBKSVRDb21waWxlcjo6SnVtcCBub3RN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkOwogICAgIGlmIChtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVj
dEZvcihtX2ppdC5ncmFwaCgpW29wZXJhbmRdLmNvZGVPcmlnaW4pLT5tYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkV2F0Y2hwb2ludCgpLT5pc1N0aWxsVmFsaWQoKSkgewpAQCAtNjE4LDggKzYxOCw4IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlTm9uUGUKICAgICAgICAgbm90Q2Vs
bC5saW5rKCZtX2ppdCk7CiAgICAgICAgIAogICAgICAgICBtX2ppdC5tb3ZlKGFyZ0dQUiwgcmVz
dWx0R1BSKTsKLSAgICAgICAgbV9qaXQuYW5kUHRyKEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tMzIo
flRhZ0JpdFVuZGVmaW5lZCksIHJlc3VsdEdQUik7Ci0gICAgICAgIG1faml0LmNvbXBhcmVQdHIo
aW52ZXJ0ID8gSklUQ29tcGlsZXI6Ok5vdEVxdWFsIDogSklUQ29tcGlsZXI6OkVxdWFsLCByZXN1
bHRHUFIsIEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tMzIoVmFsdWVOdWxsKSwgcmVzdWx0R1BSKTsK
KyAgICAgICAgbV9qaXQuYW5kNjQoSklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMih+VGFnQml0VW5k
ZWZpbmVkKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgbV9qaXQuY29tcGFyZTY0KGludmVydCA/IEpJ
VENvbXBpbGVyOjpOb3RFcXVhbCA6IEpJVENvbXBpbGVyOjpFcXVhbCwgcmVzdWx0R1BSLCBKSVRD
b21waWxlcjo6VHJ1c3RlZEltbTMyKFZhbHVlTnVsbCksIHJlc3VsdEdQUik7CiAgICAgICAgIAog
ICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKICAgICB9CkBAIC02NTIsNyArNjUyLDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVQZWVwaAogICAgIEpJVENvbXBpbGVyOjpK
dW1wIG5vdENlbGw7CiAgICAgCiAgICAgaWYgKCFpc0tub3duQ2VsbChvcGVyYW5kLmluZGV4KCkp
KQotICAgICAgICBub3RDZWxsID0gbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6
Tm9uWmVybywgYXJnR1BSLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpOworICAgICAgICBub3RD
ZWxsID0gbV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBhcmdHUFIs
IEdQUkluZm86OnRhZ01hc2tSZWdpc3Rlcik7CiAgICAgCiAgICAgaWYgKG1faml0LmdyYXBoKCku
Z2xvYmFsT2JqZWN0Rm9yKG1faml0LmdyYXBoKClbb3BlcmFuZF0uY29kZU9yaWdpbiktPm1hc3F1
ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCktPmlzU3RpbGxWYWxpZCgpKSB7CiAgICAgICAg
IG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG1faml0LmdyYXBoKClbb3BlcmFuZF0uY29k
ZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCktPmFkZChzcGVjdWxh
dGlvbldhdGNocG9pbnQoKSk7CkBAIC02NzYsOCArNjc2LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6bm9uU3BlY3VsYXRpdmVQZWVwaAogICAgICAgICBub3RDZWxsLmxpbmsoJm1faml0KTsKICAg
ICAgICAgCiAgICAgICAgIG1faml0Lm1vdmUoYXJnR1BSLCByZXN1bHRHUFIpOwotICAgICAgICBt
X2ppdC5hbmRQdHIoSklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMih+VGFnQml0VW5kZWZpbmVkKSwg
cmVzdWx0R1BSKTsKLSAgICAgICAgYnJhbmNoUHRyKGludmVydCA/IEpJVENvbXBpbGVyOjpOb3RF
cXVhbCA6IEpJVENvbXBpbGVyOjpFcXVhbCwgcmVzdWx0R1BSLCBKSVRDb21waWxlcjo6VHJ1c3Rl
ZEltbVB0cihyZWludGVycHJldF9jYXN0PHZvaWQqPihWYWx1ZU51bGwpKSwgdGFrZW4pOworICAg
ICAgICBtX2ppdC5hbmQ2NChKSVRDb21waWxlcjo6VHJ1c3RlZEltbTMyKH5UYWdCaXRVbmRlZmlu
ZWQpLCByZXN1bHRHUFIpOworICAgICAgICBicmFuY2g2NChpbnZlcnQgPyBKSVRDb21waWxlcjo6
Tm90RXF1YWwgOiBKSVRDb21waWxlcjo6RXF1YWwsIHJlc3VsdEdQUiwgSklUQ29tcGlsZXI6OlRy
dXN0ZWRJbW02NChWYWx1ZU51bGwpLCB0YWtlbik7CiAgICAgfQogICAgIAogICAgIGp1bXAobm90
VGFrZW4pOwpAQCAtNzUwLDkgKzc1MCw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1
bGF0aXZlUGVlcGgKICAgICAgICAgYXJnMi51c2UoKTsKICAgICAKICAgICAgICAgaWYgKCFpc0tu
b3duSW50ZWdlcihub2RlLmNoaWxkMSgpLmluZGV4KCkpKQotICAgICAgICAgICAgc2xvd1BhdGgu
YXBwZW5kKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIGFyZzFHUFIsIEdQ
UkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlcikpOworICAgICAgICAgICAgc2xvd1BhdGguYXBw
ZW5kKG1faml0LmJyYW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgYXJnMUdQUiwgR1BSSW5m
bzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSk7CiAgICAgICAgIGlmICghaXNLbm93bkludGVnZXIo
bm9kZS5jaGlsZDIoKS5pbmRleCgpKSkKLSAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChtX2pp
dC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBhcmcyR1BSLCBHUFJJbmZvOjp0YWdU
eXBlTnVtYmVyUmVnaXN0ZXIpKTsKKyAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChtX2ppdC5i
cmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIGFyZzJHUFIsIEdQUkluZm86OnRhZ1R5cGVO
dW1iZXJSZWdpc3RlcikpOwogICAgIAogICAgICAgICBicmFuY2gzMihjb25kLCBhcmcxR1BSLCBh
cmcyR1BSLCB0YWtlbik7CiAgICAgCkBAIC04MzMsOSArODMzLDkgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6bm9uU3BlY3VsYXRpdmVOb25QZQogICAgICAgICBhcmcyLnVzZSgpOwogICAgIAogICAg
ICAgICBpZiAoIWlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQxKCkuaW5kZXgoKSkpCi0gICAgICAg
ICAgICBzbG93UGF0aC5hcHBlbmQobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpCZWxv
dywgYXJnMUdQUiwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSk7CisgICAgICAgICAg
ICBzbG93UGF0aC5hcHBlbmQobV9qaXQuYnJhbmNoNjQoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBh
cmcxR1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsKICAgICAgICAgaWYgKCFp
c0tub3duSW50ZWdlcihub2RlLmNoaWxkMigpLmluZGV4KCkpKQotICAgICAgICAgICAgc2xvd1Bh
dGguYXBwZW5kKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIGFyZzJHUFIs
IEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlcikpOworICAgICAgICAgICAgc2xvd1BhdGgu
YXBwZW5kKG1faml0LmJyYW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgYXJnMkdQUiwgR1BS
SW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSk7CiAgICAgCiAgICAgICAgIG1faml0LmNvbXBh
cmUzMihjb25kLCBhcmcxR1BSLCBhcmcyR1BSLCByZXN1bHRHUFIpOwogICAgICAgICBtX2ppdC5v
cjMyKFRydXN0ZWRJbW0zMihWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKQEAgLTg3OSw3ICs4Nzks
NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVBlZXBoCiAgICAgaWYgKGlz
S25vd25DZWxsKG5vZGUuY2hpbGQxKCkuaW5kZXgoKSkgJiYgaXNLbm93bkNlbGwobm9kZS5jaGls
ZDIoKS5pbmRleCgpKSkgewogICAgICAgICAvLyBzZWUgaWYgd2UgZ2V0IGx1Y2t5OiBpZiB0aGUg
YXJndW1lbnRzIGFyZSBjZWxscyBhbmQgdGhleSByZWZlcmVuY2UgdGhlIHNhbWUKICAgICAgICAg
Ly8gY2VsbCwgdGhlbiB0aGV5IG11c3QgYmUgc3RyaWN0bHkgZXF1YWwuCi0gICAgICAgIGJyYW5j
aFB0cihKSVRDb21waWxlcjo6RXF1YWwsIGFyZzFHUFIsIGFyZzJHUFIsIGludmVydCA/IG5vdFRh
a2VuIDogdGFrZW4pOworICAgICAgICBicmFuY2g2NChKSVRDb21waWxlcjo6RXF1YWwsIGFyZzFH
UFIsIGFyZzJHUFIsIGludmVydCA/IG5vdFRha2VuIDogdGFrZW4pOwogICAgICAgICAKICAgICAg
ICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMocmVzdWx0R1BSKTsKICAgICAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXFDZWxsLCByZXN1bHRHUFIsIGFyZzFHUFIsIGFy
ZzJHUFIpOwpAQCAtODg3LDIyICs4ODcsMjIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3Bl
Y3VsYXRpdmVQZWVwaAogICAgICAgICAKICAgICAgICAgYnJhbmNoVGVzdDMyKGludmVydCA/IEpJ
VENvbXBpbGVyOjpaZXJvIDogSklUQ29tcGlsZXI6Ok5vblplcm8sIHJlc3VsdEdQUiwgdGFrZW4p
OwogICAgIH0gZWxzZSB7Ci0gICAgICAgIG1faml0Lm9yUHRyKGFyZzFHUFIsIGFyZzJHUFIsIHJl
c3VsdEdQUik7CisgICAgICAgIG1faml0Lm9yNjQoYXJnMUdQUiwgYXJnMkdQUiwgcmVzdWx0R1BS
KTsKICAgICAgICAgCi0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIHR3b0NlbGxzQ2FzZSA9IG1f
aml0LmJyYW5jaFRlc3RQdHIoSklUQ29tcGlsZXI6Olplcm8sIHJlc3VsdEdQUiwgR1BSSW5mbzo6
dGFnTWFza1JlZ2lzdGVyKTsKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgdHdvQ2VsbHNDYXNl
ID0gbV9qaXQuYnJhbmNoVGVzdDY0KEpJVENvbXBpbGVyOjpaZXJvLCByZXN1bHRHUFIsIEdQUklu
Zm86OnRhZ01hc2tSZWdpc3Rlcik7CiAgICAgICAgIAotICAgICAgICBKSVRDb21waWxlcjo6SnVt
cCBsZWZ0T0sgPSBtX2ppdC5icmFuY2hQdHIoSklUQ29tcGlsZXI6OkFib3ZlT3JFcXVhbCwgYXJn
MUdQUiwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKLSAgICAgICAgSklUQ29tcGls
ZXI6Okp1bXAgbGVmdERvdWJsZSA9IG1faml0LmJyYW5jaFRlc3RQdHIoSklUQ29tcGlsZXI6Ok5v
blplcm8sIGFyZzFHUFIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7CisgICAgICAg
IEpJVENvbXBpbGVyOjpKdW1wIGxlZnRPSyA9IG1faml0LmJyYW5jaDY0KEpJVENvbXBpbGVyOjpB
Ym92ZU9yRXF1YWwsIGFyZzFHUFIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7Cisg
ICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGxlZnREb3VibGUgPSBtX2ppdC5icmFuY2hUZXN0NjQo
SklUQ29tcGlsZXI6Ok5vblplcm8sIGFyZzFHUFIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdp
c3Rlcik7CiAgICAgICAgIGxlZnRPSy5saW5rKCZtX2ppdCk7Ci0gICAgICAgIEpJVENvbXBpbGVy
OjpKdW1wIHJpZ2h0T0sgPSBtX2ppdC5icmFuY2hQdHIoSklUQ29tcGlsZXI6OkFib3ZlT3JFcXVh
bCwgYXJnMkdQUiwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKLSAgICAgICAgSklU
Q29tcGlsZXI6Okp1bXAgcmlnaHREb3VibGUgPSBtX2ppdC5icmFuY2hUZXN0UHRyKEpJVENvbXBp
bGVyOjpOb25aZXJvLCBhcmcyR1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOwor
ICAgICAgICBKSVRDb21waWxlcjo6SnVtcCByaWdodE9LID0gbV9qaXQuYnJhbmNoNjQoSklUQ29t
cGlsZXI6OkFib3ZlT3JFcXVhbCwgYXJnMkdQUiwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lz
dGVyKTsKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgcmlnaHREb3VibGUgPSBtX2ppdC5icmFu
Y2hUZXN0NjQoSklUQ29tcGlsZXI6Ok5vblplcm8sIGFyZzJHUFIsIEdQUkluZm86OnRhZ1R5cGVO
dW1iZXJSZWdpc3Rlcik7CiAgICAgICAgIHJpZ2h0T0subGluaygmbV9qaXQpOwogICAgICAgICAK
LSAgICAgICAgYnJhbmNoUHRyKGludmVydCA/IEpJVENvbXBpbGVyOjpOb3RFcXVhbCA6IEpJVENv
bXBpbGVyOjpFcXVhbCwgYXJnMUdQUiwgYXJnMkdQUiwgdGFrZW4pOworICAgICAgICBicmFuY2g2
NChpbnZlcnQgPyBKSVRDb21waWxlcjo6Tm90RXF1YWwgOiBKSVRDb21waWxlcjo6RXF1YWwsIGFy
ZzFHUFIsIGFyZzJHUFIsIHRha2VuKTsKICAgICAgICAganVtcChub3RUYWtlbiwgRm9yY2VKdW1w
KTsKICAgICAgICAgCiAgICAgICAgIHR3b0NlbGxzQ2FzZS5saW5rKCZtX2ppdCk7Ci0gICAgICAg
IGJyYW5jaFB0cihKSVRDb21waWxlcjo6RXF1YWwsIGFyZzFHUFIsIGFyZzJHUFIsIGludmVydCA/
IG5vdFRha2VuIDogdGFrZW4pOworICAgICAgICBicmFuY2g2NChKSVRDb21waWxlcjo6RXF1YWws
IGFyZzFHUFIsIGFyZzJHUFIsIGludmVydCA/IG5vdFRha2VuIDogdGFrZW4pOwogICAgICAgICAK
ICAgICAgICAgbGVmdERvdWJsZS5saW5rKCZtX2ppdCk7CiAgICAgICAgIHJpZ2h0RG91YmxlLmxp
bmsoJm1faml0KTsKQEAgLTkzNCw5ICs5MzQsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25T
cGVjdWxhdGl2ZU5vblBlCiAgICAgICAgIC8vIHNlZSBpZiB3ZSBnZXQgbHVja3k6IGlmIHRoZSBh
cmd1bWVudHMgYXJlIGNlbGxzIGFuZCB0aGV5IHJlZmVyZW5jZSB0aGUgc2FtZQogICAgICAgICAv
LyBjZWxsLCB0aGVuIHRoZXkgbXVzdCBiZSBzdHJpY3RseSBlcXVhbC4KICAgICAgICAgLy8gRklY
TUU6IHRoaXMgc2hvdWxkIGZsdXNoIHJlZ2lzdGVycyBpbnN0ZWFkIG9mIHNpbGVudCBzcGlsbC9m
aWxsLgotICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBub3RFcXVhbENhc2UgPSBtX2ppdC5icmFu
Y2hQdHIoSklUQ29tcGlsZXI6Ok5vdEVxdWFsLCBhcmcxR1BSLCBhcmcyR1BSKTsKKyAgICAgICAg
SklUQ29tcGlsZXI6Okp1bXAgbm90RXF1YWxDYXNlID0gbV9qaXQuYnJhbmNoNjQoSklUQ29tcGls
ZXI6Ok5vdEVxdWFsLCBhcmcxR1BSLCBhcmcyR1BSKTsKICAgICAgICAgCi0gICAgICAgIG1faml0
Lm1vdmUoSklUQ29tcGlsZXI6OlRydXN0ZWRJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVh
bighaW52ZXJ0KSkpLCByZXN1bHRHUFIpOworICAgICAgICBtX2ppdC5tb3ZlKEpJVENvbXBpbGVy
OjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbighaW52ZXJ0KSkpLCByZXN1
bHRHUFIpOwogICAgICAgICAKICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgZG9uZSA9IG1faml0
Lmp1bXAoKTsKIApAQCAtOTQ2LDMzICs5NDYsMzMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9u
U3BlY3VsYXRpdmVOb25QZQogICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVT
dHJpY3RFcUNlbGwsIHJlc3VsdEdQUiwgYXJnMUdQUiwgYXJnMkdQUik7CiAgICAgICAgIHNpbGVu
dEZpbGxBbGxSZWdpc3RlcnMocmVzdWx0R1BSKTsKICAgICAgICAgCi0gICAgICAgIG1faml0LmFu
ZFB0cihKSVRDb21waWxlcjo6VHJ1c3RlZEltbTMyKDEpLCByZXN1bHRHUFIpOworICAgICAgICBt
X2ppdC5hbmQ2NChKSVRDb21waWxlcjo6VHJ1c3RlZEltbTMyKDEpLCByZXN1bHRHUFIpOwogICAg
ICAgICBtX2ppdC5vcjMyKEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tMzIoVmFsdWVGYWxzZSksIHJl
c3VsdEdQUik7CiAgICAgICAgIAogICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKICAgICB9IGVs
c2UgewotICAgICAgICBtX2ppdC5vclB0cihhcmcxR1BSLCBhcmcyR1BSLCByZXN1bHRHUFIpOwor
ICAgICAgICBtX2ppdC5vcjY0KGFyZzFHUFIsIGFyZzJHUFIsIHJlc3VsdEdQUik7CiAgICAgICAg
IAogICAgICAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2xvd1BhdGhDYXNlczsKICAgICAgICAg
Ci0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIHR3b0NlbGxzQ2FzZSA9IG1faml0LmJyYW5jaFRl
c3RQdHIoSklUQ29tcGlsZXI6Olplcm8sIHJlc3VsdEdQUiwgR1BSSW5mbzo6dGFnTWFza1JlZ2lz
dGVyKTsKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgdHdvQ2VsbHNDYXNlID0gbV9qaXQuYnJh
bmNoVGVzdDY0KEpJVENvbXBpbGVyOjpaZXJvLCByZXN1bHRHUFIsIEdQUkluZm86OnRhZ01hc2tS
ZWdpc3Rlcik7CiAgICAgICAgIAotICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBsZWZ0T0sgPSBt
X2ppdC5icmFuY2hQdHIoSklUQ29tcGlsZXI6OkFib3ZlT3JFcXVhbCwgYXJnMUdQUiwgR1BSSW5m
bzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKLSAgICAgICAgc2xvd1BhdGhDYXNlcy5hcHBlbmQo
bV9qaXQuYnJhbmNoVGVzdFB0cihKSVRDb21waWxlcjo6Tm9uWmVybywgYXJnMUdQUiwgR1BSSW5m
bzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSk7CisgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGxl
ZnRPSyA9IG1faml0LmJyYW5jaDY0KEpJVENvbXBpbGVyOjpBYm92ZU9yRXF1YWwsIGFyZzFHUFIs
IEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7CisgICAgICAgIHNsb3dQYXRoQ2FzZXMu
YXBwZW5kKG1faml0LmJyYW5jaFRlc3Q2NChKSVRDb21waWxlcjo6Tm9uWmVybywgYXJnMUdQUiwg
R1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSk7CiAgICAgICAgIGxlZnRPSy5saW5rKCZt
X2ppdCk7Ci0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIHJpZ2h0T0sgPSBtX2ppdC5icmFuY2hQ
dHIoSklUQ29tcGlsZXI6OkFib3ZlT3JFcXVhbCwgYXJnMkdQUiwgR1BSSW5mbzo6dGFnVHlwZU51
bWJlclJlZ2lzdGVyKTsKLSAgICAgICAgc2xvd1BhdGhDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNo
VGVzdFB0cihKSVRDb21waWxlcjo6Tm9uWmVybywgYXJnMkdQUiwgR1BSSW5mbzo6dGFnVHlwZU51
bWJlclJlZ2lzdGVyKSk7CisgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIHJpZ2h0T0sgPSBtX2pp
dC5icmFuY2g2NChKSVRDb21waWxlcjo6QWJvdmVPckVxdWFsLCBhcmcyR1BSLCBHUFJJbmZvOjp0
YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOworICAgICAgICBzbG93UGF0aENhc2VzLmFwcGVuZChtX2pp
dC5icmFuY2hUZXN0NjQoSklUQ29tcGlsZXI6Ok5vblplcm8sIGFyZzJHUFIsIEdQUkluZm86OnRh
Z1R5cGVOdW1iZXJSZWdpc3RlcikpOwogICAgICAgICByaWdodE9LLmxpbmsoJm1faml0KTsKICAg
ICAgICAgCi0gICAgICAgIG1faml0LmNvbXBhcmVQdHIoaW52ZXJ0ID8gSklUQ29tcGlsZXI6Ok5v
dEVxdWFsIDogSklUQ29tcGlsZXI6OkVxdWFsLCBhcmcxR1BSLCBhcmcyR1BSLCByZXN1bHRHUFIp
OworICAgICAgICBtX2ppdC5jb21wYXJlNjQoaW52ZXJ0ID8gSklUQ29tcGlsZXI6Ok5vdEVxdWFs
IDogSklUQ29tcGlsZXI6OkVxdWFsLCBhcmcxR1BSLCBhcmcyR1BSLCByZXN1bHRHUFIpOwogICAg
ICAgICBtX2ppdC5vcjMyKEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tMzIoVmFsdWVGYWxzZSksIHJl
c3VsdEdQUik7CiAgICAgICAgIAogICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBkb25lID0gbV9q
aXQuanVtcCgpOwogICAgICAgICAKICAgICAgICAgdHdvQ2VsbHNDYXNlLmxpbmsoJm1faml0KTsK
LSAgICAgICAgc2xvd1BhdGhDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoUHRyKEpJVENvbXBpbGVy
OjpOb3RFcXVhbCwgYXJnMUdQUiwgYXJnMkdQUikpOworICAgICAgICBzbG93UGF0aENhc2VzLmFw
cGVuZChtX2ppdC5icmFuY2g2NChKSVRDb21waWxlcjo6Tm90RXF1YWwsIGFyZzFHUFIsIGFyZzJH
UFIpKTsKICAgICAgICAgCi0gICAgICAgIG1faml0Lm1vdmUoSklUQ29tcGlsZXI6OlRydXN0ZWRJ
bW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbighaW52ZXJ0KSkpLCByZXN1bHRHUFIpOwor
ICAgICAgICBtX2ppdC5tb3ZlKEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5j
b2RlKGpzQm9vbGVhbighaW52ZXJ0KSkpLCByZXN1bHRHUFIpOwogICAgICAgICAKICAgICAgICAg
YWRkU2xvd1BhdGhHZW5lcmF0b3IoCiAgICAgICAgICAgICBhZG9wdFB0cigKQEAgLTEwMDcsOCAr
MTAwNyw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUmIG5vZGUKICAgICBp
bnQgbnVtUGFzc2VkQXJncyA9IG5vZGUubnVtQ2hpbGRyZW4oKSAtIDE7CiAgICAgCiAgICAgbV9q
aXQuc3RvcmUzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKG51bVBhc3NlZEFyZ3MgKyBk
dW1teVRoaXNBcmd1bWVudCksIGNhbGxGcmFtZVBheWxvYWRTbG90KEpTU3RhY2s6OkFyZ3VtZW50
Q291bnQpKTsKLSAgICBtX2ppdC5zdG9yZVB0cihHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwg
Y2FsbEZyYW1lU2xvdChKU1N0YWNrOjpDYWxsZXJGcmFtZSkpOwotICAgIG1faml0LnN0b3JlUHRy
KGNhbGxlZUdQUiwgY2FsbEZyYW1lU2xvdChKU1N0YWNrOjpDYWxsZWUpKTsKKyAgICBtX2ppdC5z
dG9yZTY0KEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBjYWxsRnJhbWVTbG90KEpTU3RhY2s6
OkNhbGxlckZyYW1lKSk7CisgICAgbV9qaXQuc3RvcmU2NChjYWxsZWVHUFIsIGNhbGxGcmFtZVNs
b3QoSlNTdGFjazo6Q2FsbGVlKSk7CiAgICAgCiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1Q
YXNzZWRBcmdzOyBpKyspIHsKICAgICAgICAgRWRnZSBhcmdFZGdlID0gbV9qaXQuZ3JhcGgoKS5t
X3ZhckFyZ0NoaWxkcmVuW25vZGUuZmlyc3RDaGlsZCgpICsgMSArIGldOwpAQCAtMTAxNiw3ICsx
MDE2LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSYgbm9kZQogICAgICAg
ICBHUFJSZWcgYXJnR1BSID0gYXJnLmdwcigpOwogICAgICAgICB1c2UoYXJnRWRnZSk7CiAgICAg
ICAgIAotICAgICAgICBtX2ppdC5zdG9yZVB0cihhcmdHUFIsIGFyZ3VtZW50U2xvdChpICsgZHVt
bXlUaGlzQXJndW1lbnQpKTsKKyAgICAgICAgbV9qaXQuc3RvcmU2NChhcmdHUFIsIGFyZ3VtZW50
U2xvdChpICsgZHVtbXlUaGlzQXJndW1lbnQpKTsKICAgICB9CiAKICAgICBmbHVzaFJlZ2lzdGVy
cygpOwpAQCAtMTAyNSwxNiArMTAyNSwxNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2Fs
bChOb2RlJiBub2RlCiAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKIAogICAg
IEpJVENvbXBpbGVyOjpEYXRhTGFiZWxQdHIgdGFyZ2V0VG9DaGVjazsKLSAgICBKSVRDb21waWxl
cjo6SnVtcCBzbG93UGF0aDsKKyAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2xvd1BhdGg7CiAK
ICAgICBDYWxsQmVnaW5Ub2tlbiB0b2tlbjsKICAgICBtX2ppdC5iZWdpbkNhbGwobm9kZS5jb2Rl
T3JpZ2luLCB0b2tlbik7CiAgICAgCiAgICAgbV9qaXQuYWRkUHRyKFRydXN0ZWRJbW0zMihtX2pp
dC5jb2RlQmxvY2soKS0+bV9udW1DYWxsZWVSZWdpc3RlcnMgKiBzaXplb2YoUmVnaXN0ZXIpKSwg
R1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOwogICAgIAotICAgIHNsb3dQYXRoID0gbV9qaXQu
YnJhbmNoUHRyV2l0aFBhdGNoKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgY2FsbGVlR1BSLCB0
YXJnZXRUb0NoZWNrLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihKU1ZhbHVlOjplbmNv
ZGUoSlNWYWx1ZSgpKSkpOworICAgIHNsb3dQYXRoLmFwcGVuZChtX2ppdC5icmFuY2hQdHJXaXRo
UGF0Y2goTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBjYWxsZWVHUFIsIHRhcmdldFRvQ2hlY2ss
IE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKDApKSk7CisKICAgICBtX2ppdC5sb2FkUHRy
KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGNhbGxlZUdQUiwgT0JKRUNUX09GRlNFVE9GKEpTRnVu
Y3Rpb24sIG1fc2NvcGUpKSwgcmVzdWx0R1BSKTsKLSAgICBtX2ppdC5zdG9yZVB0cihyZXN1bHRH
UFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBz
dGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihSZWdpc3RlcikpICogSlNTdGFjazo6U2NvcGVD
aGFpbikpOworICAgIG1faml0LnN0b3JlNjQocmVzdWx0R1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwgc3RhdGljX2Nhc3Q8cHRyZGlmZl90Pihz
aXplb2YoUmVnaXN0ZXIpKSAqIEpTU3RhY2s6OlNjb3BlQ2hhaW4pKTsKIAogICAgIENvZGVPcmln
aW4gY29kZU9yaWdpbiA9IGF0KG1fY29tcGlsZUluZGV4KS5jb2RlT3JpZ2luOwogICAgIEpJVENv
bXBpbGVyOjpDYWxsIGZhc3RDYWxsID0gbV9qaXQubmVhckNhbGwoKTsKQEAgLTExMDQsMTQgKzEx
MDUsMTQgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50SQogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgaWYgKHNwaWxsRm9ybWF0ID09IERhdGFGb3JtYXRJbnRlZ2Vy
KSB7CiAgICAgICAgICAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjphZGRyZXNzRm9y
KHZpcnR1YWxSZWdpc3RlciksIGdwcik7Ci0gICAgICAgICAgICAgICAgbV9qaXQub3JQdHIoR1BS
SW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBncHIpOworICAgICAgICAgICAgICAgIG1faml0
Lm9yNjQoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBncHIpOwogICAgICAgICAgICAg
fSBlbHNlCi0gICAgICAgICAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6YWRkcmVz
c0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBncHIpOworICAgICAgICAgICAgICAgIG1faml0LmxvYWQ2
NChKSVRDb21waWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBncHIpOwogICAgICAg
ICAgICAgaW5mby5maWxsSlNWYWx1ZSgqbV9zdHJlYW0sIGdwciwgRGF0YUZvcm1hdEpTSW50ZWdl
cik7CiAgICAgICAgICAgICByZXR1cm5Gb3JtYXQgPSBEYXRhRm9ybWF0SlNJbnRlZ2VyOwogICAg
ICAgICAgICAgcmV0dXJuIGdwcjsKICAgICAgICAgfQotICAgICAgICBtX2ppdC5sb2FkUHRyKEpJ
VENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIGdwcik7CisgICAgICAgIG1f
aml0LmxvYWQ2NChKSVRDb21waWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBncHIp
OwogCiAgICAgICAgIC8vIEZpbGwgYXMgSlNWYWx1ZSwgYW5kIGZhbGwgdGhyb3VnaC4KICAgICAg
ICAgaW5mby5maWxsSlNWYWx1ZSgqbV9zdHJlYW0sIGdwciwgRGF0YUZvcm1hdEpTSW50ZWdlcik7
CkBAIC0xMTIzLDcgKzExMjQsNyBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxh
dGVJbnRJCiAgICAgICAgIEdQUlJlZyBncHIgPSBpbmZvLmdwcigpOwogICAgICAgICBtX2dwcnMu
bG9jayhncHIpOwogICAgICAgICBpZiAoIWlzSW50MzJTcGVjdWxhdGlvbih0eXBlKSkKLSAgICAg
ICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3MoZ3ByKSwgbm9kZUlu
ZGV4LCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBncHIsIEdQUkluZm86
OnRhZ1R5cGVOdW1iZXJSZWdpc3RlcikpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhC
YWRUeXBlLCBKU1ZhbHVlUmVncyhncHIpLCBub2RlSW5kZXgsIG1faml0LmJyYW5jaDY0KE1hY3Jv
QXNzZW1ibGVyOjpCZWxvdywgZ3ByLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsK
ICAgICAgICAgaW5mby5maWxsSlNWYWx1ZSgqbV9zdHJlYW0sIGdwciwgRGF0YUZvcm1hdEpTSW50
ZWdlcik7CiAgICAgICAgIC8vIElmICFzdHJpY3Qgd2UncmUgZG9uZSwgcmV0dXJuLgogICAgICAg
ICBpZiAoIXN0cmljdCkgewpAQCAtMTIyMyw4ICsxMjI0LDggQEAgRlBSUmVnIFNwZWN1bGF0aXZl
SklUOjpmaWxsU3BlY3VsYXRlRG91YgogCiAgICAgICAgICAgICBpZiAoaXNJbnQzMkNvbnN0YW50
KG5vZGVJbmRleCkpIHsKICAgICAgICAgICAgICAgICBGUFJSZWcgZnByID0gZnByQWxsb2NhdGUo
KTsKLSAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpJbW1QdHIocmVp
bnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXREb3VibGVUb0ludHB0cihzdGF0aWNfY2Fz
dDxkb3VibGU+KHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGVJbmRleCkpKSkpLCBncHIpOwotICAg
ICAgICAgICAgICAgIG1faml0Lm1vdmVQdHJUb0RvdWJsZShncHIsIGZwcik7CisgICAgICAgICAg
ICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6SW1tNjQocmVpbnRlcnByZXREb3VibGVU
b0ludDY0KHN0YXRpY19jYXN0PGRvdWJsZT4odmFsdWVPZkludDMyQ29uc3RhbnQobm9kZUluZGV4
KSkpKSwgZ3ByKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlNjRUb0RvdWJsZShncHIsIGZw
cik7CiAgICAgICAgICAgICAgICAgdW5sb2NrKGdwcik7CiAKICAgICAgICAgICAgICAgICBtX2Zw
cnMucmV0YWluKGZwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyRG91YmxlKTsKQEAgLTEy
MzMsOCArMTIzNCw4IEBAIEZQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZURvdWIK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChpc051bWJlckNvbnN0YW50KG5vZGVJbmRl
eCkpIHsKICAgICAgICAgICAgICAgICBGUFJSZWcgZnByID0gZnByQWxsb2NhdGUoKTsKLSAgICAg
ICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpJbW1QdHIocmVpbnRlcnByZXRf
Y2FzdDx2b2lkKj4ocmVpbnRlcnByZXREb3VibGVUb0ludHB0cih2YWx1ZU9mTnVtYmVyQ29uc3Rh
bnQobm9kZUluZGV4KSkpKSwgZ3ByKTsKLSAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlUHRyVG9E
b3VibGUoZ3ByLCBmcHIpOworICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJs
ZXI6OkltbTY0KHJlaW50ZXJwcmV0RG91YmxlVG9JbnQ2NCh2YWx1ZU9mTnVtYmVyQ29uc3RhbnQo
bm9kZUluZGV4KSkpLCBncHIpOworICAgICAgICAgICAgICAgIG1faml0Lm1vdmU2NFRvRG91Ymxl
KGdwciwgZnByKTsKICAgICAgICAgICAgICAgICB1bmxvY2soZ3ByKTsKIAogICAgICAgICAgICAg
ICAgIG1fZnBycy5yZXRhaW4oZnByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJEb3VibGUp
OwpAQCAtMTI3MCw3ICsxMjcxLDcgQEAgRlBSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3Vs
YXRlRG91YgogCiAgICAgICAgICAgICBBU1NFUlQoc3BpbGxGb3JtYXQgJiBEYXRhRm9ybWF0SlMp
OwogICAgICAgICAgICAgbV9ncHJzLnJldGFpbihncHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxP
cmRlclNwaWxsZWQpOwotICAgICAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6YWRk
cmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBncHIpOworICAgICAgICAgICAgbV9qaXQubG9hZDY0
KEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIGdwcik7CiAgICAgICAg
ICAgICBpbmZvLmZpbGxKU1ZhbHVlKCptX3N0cmVhbSwgZ3ByLCBzcGlsbEZvcm1hdCk7CiAgICAg
ICAgICAgICB1bmxvY2soZ3ByKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTI5NSwxMCArMTI5
NiwxMCBAQCBGUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVEb3ViCiAgICAgICAg
IEZQUlJlZyBmcHIgPSBmcHJBbGxvY2F0ZSgpOwogICAgICAgICBHUFJSZWcgdGVtcEdwciA9IGFs
bG9jYXRlKCk7CiAKLSAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNJbnRlZ2VyID0gbV9qaXQu
YnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIGpzVmFsdWVHcHIsIEdQUklu
Zm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7CisgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGlz
SW50ZWdlciA9IG1faml0LmJyYW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIGpz
VmFsdWVHcHIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7CiAKICAgICAgICAgaWYg
KCFpc051bWJlclNwZWN1bGF0aW9uKHR5cGUpKQotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVj
ayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhqc1ZhbHVlR3ByKSwgbm9kZUluZGV4LCBtX2ppdC5icmFu
Y2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBqc1ZhbHVlR3ByLCBHUFJJbmZvOjp0YWdU
eXBlTnVtYmVyUmVnaXN0ZXIpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlw
ZSwgSlNWYWx1ZVJlZ3MoanNWYWx1ZUdwciksIG5vZGVJbmRleCwgbV9qaXQuYnJhbmNoVGVzdDY0
KE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBqc1ZhbHVlR3ByLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVy
UmVnaXN0ZXIpKTsKIAogICAgICAgICAvLyBGaXJzdCwgaWYgd2UgZ2V0IGhlcmUgd2UgaGF2ZSBh
IGRvdWJsZSBlbmNvZGVkIGFzIGEgSlNWYWx1ZQogICAgICAgICBtX2ppdC5tb3ZlKGpzVmFsdWVH
cHIsIHRlbXBHcHIpOwpAQCAtMTM4NCw3ICsxMzg1LDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklU
OjpmaWxsU3BlY3VsYXRlQ2VsbAogICAgICAgICAgICAgSlNWYWx1ZSBqc1ZhbHVlID0gdmFsdWVP
ZkpTQ29uc3RhbnQobm9kZUluZGV4KTsKICAgICAgICAgICAgIGlmIChqc1ZhbHVlLmlzQ2VsbCgp
KSB7CiAgICAgICAgICAgICAgICAgbV9ncHJzLnJldGFpbihncHIsIHZpcnR1YWxSZWdpc3Rlciwg
U3BpbGxPcmRlckNvbnN0YW50KTsKLSAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGpzVmFsdWUuYXNDZWxsKCkpLCBncHIpOworICAgICAgICAg
ICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjpl
bmNvZGUoanNWYWx1ZSkpLCBncHIpOwogICAgICAgICAgICAgICAgIGluZm8uZmlsbEpTVmFsdWUo
Km1fc3RyZWFtLCBncHIsIERhdGFGb3JtYXRKU0NlbGwpOwogICAgICAgICAgICAgICAgIHJldHVy
biBncHI7CiAgICAgICAgICAgICB9CkBAIC0xMzkzLDExICsxMzk0LDExIEBAIEdQUlJlZyBTcGVj
dWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUNlbGwKICAgICAgICAgfQogICAgICAgICBBU1NFUlQo
aW5mby5zcGlsbEZvcm1hdCgpICYgRGF0YUZvcm1hdEpTKTsKICAgICAgICAgbV9ncHJzLnJldGFp
bihncHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlclNwaWxsZWQpOwotICAgICAgICBtX2pp
dC5sb2FkUHRyKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIGdwcik7
CisgICAgICAgIG1faml0LmxvYWQ2NChKSVRDb21waWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVn
aXN0ZXIpLCBncHIpOwogCiAgICAgICAgIGluZm8uZmlsbEpTVmFsdWUoKm1fc3RyZWFtLCBncHIs
IERhdGFGb3JtYXRKUyk7CiAgICAgICAgIGlmICghaXNDZWxsU3BlY3VsYXRpb24odHlwZSkpCi0g
ICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrV2l0aENvbmRpdGlvbmFsRGlyZWN0aW9uKEJhZFR5
cGUsIEpTVmFsdWVSZWdzKGdwciksIG5vZGVJbmRleCwgbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNy
b0Fzc2VtYmxlcjo6Tm9uWmVybywgZ3ByLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpLCBpc0Zv
cndhcmRTcGVjdWxhdGlvbik7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrV2l0aENvbmRp
dGlvbmFsRGlyZWN0aW9uKEJhZFR5cGUsIEpTVmFsdWVSZWdzKGdwciksIG5vZGVJbmRleCwgbV9q
aXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBncHIsIEdQUkluZm86OnRh
Z01hc2tSZWdpc3RlciksIGlzRm9yd2FyZFNwZWN1bGF0aW9uKTsKICAgICAgICAgaW5mby5maWxs
SlNWYWx1ZSgqbV9zdHJlYW0sIGdwciwgRGF0YUZvcm1hdEpTQ2VsbCk7CiAgICAgICAgIHJldHVy
biBncHI7CiAgICAgfQpAQCAtMTQxMyw3ICsxNDE0LDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklU
OjpmaWxsU3BlY3VsYXRlQ2VsbAogICAgICAgICBHUFJSZWcgZ3ByID0gaW5mby5ncHIoKTsKICAg
ICAgICAgbV9ncHJzLmxvY2soZ3ByKTsKICAgICAgICAgaWYgKCFpc0NlbGxTcGVjdWxhdGlvbih0
eXBlKSkKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2tXaXRoQ29uZGl0aW9uYWxEaXJlY3Rp
b24oQmFkVHlwZSwgSlNWYWx1ZVJlZ3MoZ3ByKSwgbm9kZUluZGV4LCBtX2ppdC5icmFuY2hUZXN0
UHRyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBncHIsIEdQUkluZm86OnRhZ01hc2tSZWdpc3Rl
ciksIGlzRm9yd2FyZFNwZWN1bGF0aW9uKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2tX
aXRoQ29uZGl0aW9uYWxEaXJlY3Rpb24oQmFkVHlwZSwgSlNWYWx1ZVJlZ3MoZ3ByKSwgbm9kZUlu
ZGV4LCBtX2ppdC5icmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIGdwciwgR1BS
SW5mbzo6dGFnTWFza1JlZ2lzdGVyKSwgaXNGb3J3YXJkU3BlY3VsYXRpb24pOwogICAgICAgICBp
bmZvLmZpbGxKU1ZhbHVlKCptX3N0cmVhbSwgZ3ByLCBEYXRhRm9ybWF0SlNDZWxsKTsKICAgICAg
ICAgcmV0dXJuIGdwcjsKICAgICB9CkBAIC0xNDYwLDcgKzE0NjEsNyBAQCBHUFJSZWcgU3BlY3Vs
YXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVCb29sCiAgICAgICAgICAgICBKU1ZhbHVlIGpzVmFsdWUg
PSB2YWx1ZU9mSlNDb25zdGFudChub2RlSW5kZXgpOwogICAgICAgICAgICAgaWYgKGpzVmFsdWUu
aXNCb29sZWFuKCkpIHsKICAgICAgICAgICAgICAgICBtX2dwcnMucmV0YWluKGdwciwgdmlydHVh
bFJlZ2lzdGVyLCBTcGlsbE9yZGVyQ29uc3RhbnQpOwotICAgICAgICAgICAgICAgIG1faml0Lm1v
dmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKGpzVmFsdWUp
KSwgZ3ByKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzVmFsdWUpKSwgZ3ByKTsKICAgICAgICAgICAgICAg
ICBpbmZvLmZpbGxKU1ZhbHVlKCptX3N0cmVhbSwgZ3ByLCBEYXRhRm9ybWF0SlNCb29sZWFuKTsK
ICAgICAgICAgICAgICAgICByZXR1cm4gZ3ByOwogICAgICAgICAgICAgfQpAQCAtMTQ2OSwxMyAr
MTQ3MCwxMyBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVCb29sCiAgICAg
ICAgIH0KICAgICAgICAgQVNTRVJUKGluZm8uc3BpbGxGb3JtYXQoKSAmIERhdGFGb3JtYXRKUyk7
CiAgICAgICAgIG1fZ3Bycy5yZXRhaW4oZ3ByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJT
cGlsbGVkKTsKLSAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6YWRkcmVzc0Zvcih2
aXJ0dWFsUmVnaXN0ZXIpLCBncHIpOworICAgICAgICBtX2ppdC5sb2FkNjQoSklUQ29tcGlsZXI6
OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSwgZ3ByKTsKIAogICAgICAgICBpbmZvLmZpbGxK
U1ZhbHVlKCptX3N0cmVhbSwgZ3ByLCBEYXRhRm9ybWF0SlMpOwogICAgICAgICBpZiAoIWlzQm9v
bGVhblNwZWN1bGF0aW9uKHR5cGUpKSB7Ci0gICAgICAgICAgICBtX2ppdC54b3JQdHIoVHJ1c3Rl
ZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KFZhbHVlRmFsc2UpKSwgZ3ByKTsKLSAgICAgICAg
ICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3MoZ3ByKSwgbm9kZUluZGV4
LCBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBncHIsIFRydXN0
ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpKSwgU3BlY3VsYXRpb25SZWNvdmVyeShC
b29sZWFuU3BlY3VsYXRpb25DaGVjaywgZ3ByLCBJbnZhbGlkR1BSUmVnKSk7Ci0gICAgICAgICAg
ICBtX2ppdC54b3JQdHIoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KFZhbHVlRmFs
c2UpKSwgZ3ByKTsKKyAgICAgICAgICAgIG1faml0LnhvcjY0KFRydXN0ZWRJbW0zMihzdGF0aWNf
Y2FzdDxpbnQzMl90PihWYWx1ZUZhbHNlKSksIGdwcik7CisgICAgICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKGdwciksIG5vZGVJbmRleCwgbV9qaXQuYnJhbmNo
VGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBncHIsIFRydXN0ZWRJbW0zMihzdGF0aWNf
Y2FzdDxpbnQzMl90Pih+MSkpKSwgU3BlY3VsYXRpb25SZWNvdmVyeShCb29sZWFuU3BlY3VsYXRp
b25DaGVjaywgZ3ByLCBJbnZhbGlkR1BSUmVnKSk7CisgICAgICAgICAgICBtX2ppdC54b3I2NChU
cnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oVmFsdWVGYWxzZSkpLCBncHIpOwogICAg
ICAgICB9CiAgICAgICAgIGluZm8uZmlsbEpTVmFsdWUoKm1fc3RyZWFtLCBncHIsIERhdGFGb3Jt
YXRKU0Jvb2xlYW4pOwogICAgICAgICByZXR1cm4gZ3ByOwpAQCAtMTQ5Miw5ICsxNDkzLDkgQEAg
R1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQm9vbAogICAgICAgICBHUFJSZWcg
Z3ByID0gaW5mby5ncHIoKTsKICAgICAgICAgbV9ncHJzLmxvY2soZ3ByKTsKICAgICAgICAgaWYg
KCFpc0Jvb2xlYW5TcGVjdWxhdGlvbih0eXBlKSkgewotICAgICAgICAgICAgbV9qaXQueG9yUHRy
KFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90PihWYWx1ZUZhbHNlKSksIGdwcik7Ci0g
ICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKGdwciksIG5v
ZGVJbmRleCwgbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgZ3By
LCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSksIFNwZWN1bGF0aW9uUmVj
b3ZlcnkoQm9vbGVhblNwZWN1bGF0aW9uQ2hlY2ssIGdwciwgSW52YWxpZEdQUlJlZykpOwotICAg
ICAgICAgICAgbV9qaXQueG9yUHRyKFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90PihW
YWx1ZUZhbHNlKSksIGdwcik7CisgICAgICAgICAgICBtX2ppdC54b3I2NChUcnVzdGVkSW1tMzIo
c3RhdGljX2Nhc3Q8aW50MzJfdD4oVmFsdWVGYWxzZSkpLCBncHIpOworICAgICAgICAgICAgc3Bl
Y3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhncHIpLCBub2RlSW5kZXgsIG1faml0
LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgZ3ByLCBUcnVzdGVkSW1tMzIo
c3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSksIFNwZWN1bGF0aW9uUmVjb3ZlcnkoQm9vbGVhblNw
ZWN1bGF0aW9uQ2hlY2ssIGdwciwgSW52YWxpZEdQUlJlZykpOworICAgICAgICAgICAgbV9qaXQu
eG9yNjQoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KFZhbHVlRmFsc2UpKSwgZ3By
KTsKICAgICAgICAgfQogICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKCptX3N0cmVhbSwgZ3ByLCBE
YXRhRm9ybWF0SlNCb29sZWFuKTsKICAgICAgICAgcmV0dXJuIGdwcjsKQEAgLTE1MjEsOSArMTUy
Miw5IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUJvb2wKIAogSklUQ29t
cGlsZXI6Okp1bXAgU3BlY3VsYXRpdmVKSVQ6OmNvbnZlcnRUb0RvdWJsZShHUFJSZWcgdmFsdWUs
IEZQUlJlZyByZXN1bHQsIEdQUlJlZyB0bXApCiB7Ci0gICAgSklUQ29tcGlsZXI6Okp1bXAgaXNJ
bnRlZ2VyID0gbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHZh
bHVlLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOworICAgIEpJVENvbXBpbGVyOjpK
dW1wIGlzSW50ZWdlciA9IG1faml0LmJyYW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1
YWwsIHZhbHVlLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOwogICAgIAotICAgIEpJ
VENvbXBpbGVyOjpKdW1wIG5vdE51bWJlciA9IG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3Nl
bWJsZXI6Olplcm8sIHZhbHVlLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOworICAg
IEpJVENvbXBpbGVyOjpKdW1wIG5vdE51bWJlciA9IG1faml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fz
c2VtYmxlcjo6WmVybywgdmFsdWUsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7CiAg
ICAgCiAgICAgbV9qaXQubW92ZSh2YWx1ZSwgdG1wKTsKICAgICB1bmJveERvdWJsZSh0bXAsIHJl
c3VsdCk7CkBAIC0xNTkwLDcgKzE1OTEsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
T2JqZWN0RXF1YWxpCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0z
MihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSkpOwogICAgIH0KICAgICAKLSAgICBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcCBmYWxzZUNhc2UgPSBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5v
dEVxdWFsLCBvcDFHUFIsIG9wMkdQUik7CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZmFsc2VD
YXNlID0gbV9qaXQuYnJhbmNoNjQoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBvcDFHUFIsIG9w
MkdQUik7CiAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoVmFsdWVUcnVlKSwgcmVzdWx0R1BS
KTsKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOwogICAgIGZh
bHNlQ2FzZS5saW5rKCZtX2ppdCk7CkBAIC0xNjM4LDcgKzE2MzksNyBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlT2JqZWN0VG9PYmplCiAgICAgLy8gSXQgc2VlbXMgdGhhdCBtb3N0IG9m
IHRoZSB0aW1lIHdoZW4gcHJvZ3JhbXMgZG8gYSA9PSBiIHdoZXJlIGIgbWF5IGJlIGVpdGhlciBu
dWxsL3VuZGVmaW5lZAogICAgIC8vIG9yIGFuIG9iamVjdCwgYiBpcyB1c3VhbGx5IGFuIG9iamVj
dC4gQmFsYW5jZSB0aGUgYnJhbmNoZXMgdG8gbWFrZSB0aGF0IGNhc2UgZmFzdC4KICAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcCByaWdodE5vdENlbGwgPQotICAgICAgICBtX2ppdC5icmFuY2hUZXN0
UHRyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBvcDJHUFIsIEdQUkluZm86OnRhZ01hc2tSZWdp
c3Rlcik7CisgICAgICAgIG1faml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVy
bywgb3AyR1BSLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpOwogICAgIAogICAgIC8vIFdlIGtu
b3cgdGhhdCB3aXRoaW4gdGhpcyBicmFuY2gsIHJpZ2h0Q2hpbGQgbXVzdCBiZSBhIGNlbGwuIAog
ICAgIGlmIChtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihsZWZ0Tm9kZS5jb2RlT3JpZ2lu
KS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnQoKS0+aXNTdGlsbFZhbGlkKCkpIHsg
CkBAIC0xNjY4LDcgKzE2NjksNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0
VG9PYmplCiAgICAgLy8gQXQgdGhpcyBwb2ludCB3ZSBrbm93IHRoYXQgd2UgY2FuIHBlcmZvcm0g
YSBzdHJhaWdodC1mb3J3YXJkIGVxdWFsaXR5IGNvbXBhcmlzb24gb24gcG9pbnRlcgogICAgIC8v
IHZhbHVlcyBiZWNhdXNlIGJvdGggbGVmdCBhbmQgcmlnaHQgYXJlIHBvaW50ZXJzIHRvIG9iamVj
dHMgdGhhdCBoYXZlIG5vIHNwZWNpYWwgZXF1YWxpdHkKICAgICAvLyBwcm90b2NvbHMuCi0gICAg
TWFjcm9Bc3NlbWJsZXI6Okp1bXAgZmFsc2VDYXNlID0gbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNz
ZW1ibGVyOjpOb3RFcXVhbCwgb3AxR1BSLCBvcDJHUFIpOworICAgIE1hY3JvQXNzZW1ibGVyOjpK
dW1wIGZhbHNlQ2FzZSA9IG1faml0LmJyYW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwg
b3AxR1BSLCBvcDJHUFIpOwogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHRydWVDYXNlID0gbV9q
aXQuanVtcCgpOwogICAgIAogICAgIHJpZ2h0Tm90Q2VsbC5saW5rKCZtX2ppdCk7CkBAIC0xNjc3
LDEzICsxNjc4LDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RUb09iamUK
ICAgICAvLyBwcm92ZSB0aGF0IGl0IGlzIGVpdGhlciBudWxsIG9yIHVuZGVmaW5lZC4KICAgICBp
ZiAoIWlzT3RoZXJPckVtcHR5U3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKHJpZ2h0Q2hpbGQp
Lm1fdHlwZSAmIH5TcGVjQ2VsbCkpIHsKICAgICAgICAgbV9qaXQubW92ZShvcDJHUFIsIHJlc3Vs
dEdQUik7Ci0gICAgICAgIG1faml0LmFuZFB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMy
KH5UYWdCaXRVbmRlZmluZWQpLCByZXN1bHRHUFIpOworICAgICAgICBtX2ppdC5hbmQ2NChNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKH5UYWdCaXRVbmRlZmluZWQpLCByZXN1bHRHUFIpOwog
ICAgICAgICAKICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKICAgICAgICAgICAgIEJhZFR5cGUs
IEpTVmFsdWVSZWdzKG9wMkdQUiksIHJpZ2h0Q2hpbGQuaW5kZXgoKSwKLSAgICAgICAgICAgIG1f
aml0LmJyYW5jaFB0cigKKyAgICAgICAgICAgIG1faml0LmJyYW5jaDY0KAogICAgICAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgcmVzdWx0R1BSLAotICAgICAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KFZh
bHVlTnVsbCkpKSk7CisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02
NChWYWx1ZU51bGwpKSk7CiAgICAgfQogICAgIAogICAgIGZhbHNlQ2FzZS5saW5rKCZtX2ppdCk7
CkBAIC0xNzM3LDcgKzE3MzgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhv
bGVPYmplCiAgICAgLy8gSXQgc2VlbXMgdGhhdCBtb3N0IG9mIHRoZSB0aW1lIHdoZW4gcHJvZ3Jh
bXMgZG8gYSA9PSBiIHdoZXJlIGIgbWF5IGJlIGVpdGhlciBudWxsL3VuZGVmaW5lZAogICAgIC8v
IG9yIGFuIG9iamVjdCwgYiBpcyB1c3VhbGx5IGFuIG9iamVjdC4gQmFsYW5jZSB0aGUgYnJhbmNo
ZXMgdG8gbWFrZSB0aGF0IGNhc2UgZmFzdC4KICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCByaWdo
dE5vdENlbGwgPQotICAgICAgICBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpO
b25aZXJvLCBvcDJHUFIsIEdQUkluZm86OnRhZ01hc2tSZWdpc3Rlcik7CisgICAgICAgIG1faml0
LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgb3AyR1BSLCBHUFJJbmZvOjp0
YWdNYXNrUmVnaXN0ZXIpOwogICAgIAogICAgIC8vIFdlIGtub3cgdGhhdCB3aXRoaW4gdGhpcyBi
cmFuY2gsIHJpZ2h0Q2hpbGQgbXVzdCBiZSBhIGNlbGwuIAogICAgIGlmIChtX2ppdC5ncmFwaCgp
Lmdsb2JhbE9iamVjdEZvcihicmFuY2hOb2RlLmNvZGVPcmlnaW4pLT5tYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkV2F0Y2hwb2ludCgpLT5pc1N0aWxsVmFsaWQoKSkgewpAQCAtMTc2Nyw3ICsxNzY4LDcg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlT2JqZQogICAgIC8vIEF0IHRo
aXMgcG9pbnQgd2Uga25vdyB0aGF0IHdlIGNhbiBwZXJmb3JtIGEgc3RyYWlnaHQtZm9yd2FyZCBl
cXVhbGl0eSBjb21wYXJpc29uIG9uIHBvaW50ZXIKICAgICAvLyB2YWx1ZXMgYmVjYXVzZSBib3Ro
IGxlZnQgYW5kIHJpZ2h0IGFyZSBwb2ludGVycyB0byBvYmplY3RzIHRoYXQgaGF2ZSBubyBzcGVj
aWFsIGVxdWFsaXR5CiAgICAgLy8gcHJvdG9jb2xzLgotICAgIGJyYW5jaFB0cihNYWNyb0Fzc2Vt
Ymxlcjo6RXF1YWwsIG9wMUdQUiwgb3AyR1BSLCB0YWtlbik7CisgICAgYnJhbmNoNjQoTWFjcm9B
c3NlbWJsZXI6OkVxdWFsLCBvcDFHUFIsIG9wMkdQUiwgdGFrZW4pOwogICAgIAogICAgIC8vIFdl
IGtub3cgdGhhdCB3aXRoaW4gdGhpcyBicmFuY2gsIHJpZ2h0Q2hpbGQgbXVzdCBub3QgYmUgYSBj
ZWxsLiBDaGVjayBpZiB0aGF0IGlzIGVub3VnaCB0bwogICAgIC8vIHByb3ZlIHRoYXQgaXQgaXMg
ZWl0aGVyIG51bGwgb3IgdW5kZWZpbmVkLgpAQCAtMTc3OCwxMyArMTc3OSwxMyBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVPYmplCiAgICAgICAgIAogICAgICAgICByaWdo
dE5vdENlbGwubGluaygmbV9qaXQpOwogICAgICAgICBtX2ppdC5tb3ZlKG9wMkdQUiwgcmVzdWx0
R1BSKTsKLSAgICAgICAgbV9qaXQuYW5kUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIo
flRhZ0JpdFVuZGVmaW5lZCksIHJlc3VsdEdQUik7CisgICAgICAgIG1faml0LmFuZDY0KE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoflRhZ0JpdFVuZGVmaW5lZCksIHJlc3VsdEdQUik7CiAg
ICAgICAgIAogICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAogICAgICAgICAgICAgQmFkVHlwZSwg
SlNWYWx1ZVJlZ3Mob3AyR1BSKSwgcmlnaHRDaGlsZC5pbmRleCgpLAotICAgICAgICAgICAgbV9q
aXQuYnJhbmNoUHRyKAorICAgICAgICAgICAgbV9qaXQuYnJhbmNoNjQoCiAgICAgICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCByZXN1bHRHUFIsCi0gICAgICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oVmFs
dWVOdWxsKSkpKTsKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0
KFZhbHVlTnVsbCkpKTsKICAgICB9CiAgICAgCiAgICAganVtcChub3RUYWtlbik7CkBAIC0xODEx
LDcgKzE4MTIsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlRG91YmxlQ29tcGFyCiAg
ICAgCiAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoVmFsdWVUcnVlKSwgcmVzdWx0Lmdwcigp
KTsKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCB0cnVlQ2FzZSA9IG1faml0LmJyYW5jaERvdWJs
ZShjb25kaXRpb24sIG9wMS5mcHIoKSwgb3AyLmZwcigpKTsKLSAgICBtX2ppdC54b3JQdHIoVHJ1
c3RlZEltbTMyKHRydWUpLCByZXN1bHQuZ3ByKCkpOworICAgIG1faml0LnhvcjY0KFRydXN0ZWRJ
bW0zMih0cnVlKSwgcmVzdWx0LmdwcigpKTsKICAgICB0cnVlQ2FzZS5saW5rKCZtX2ppdCk7CiAg
ICAgCiAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4LCBEYXRh
Rm9ybWF0SlNCb29sZWFuKTsKQEAgLTE4NDMsNyArMTg0NCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVOb25TdHJpbmdDZWwKICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIo
KTsKICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwogICAgIAotICAgIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wIG5vdENlbGwgPSBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1i
bGVyOjpOb25aZXJvLCB2YWx1ZUdQUiwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsKKyAgICBN
YWNyb0Fzc2VtYmxlcjo6SnVtcCBub3RDZWxsID0gbV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNz
ZW1ibGVyOjpOb25aZXJvLCB2YWx1ZUdQUiwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsKICAg
ICBpZiAobV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3IobV9qaXQuZ3JhcGgoKVtub2RlVXNl
LmluZGV4KCldLmNvZGVPcmlnaW4pLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludCgp
LT5pc1N0aWxsVmFsaWQoKSkgewogICAgICAgICBtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZv
cihtX2ppdC5ncmFwaCgpW25vZGVVc2UuaW5kZXgoKV0uY29kZU9yaWdpbiktPm1hc3F1ZXJhZGVz
QXNVbmRlZmluZWRXYXRjaHBvaW50KCktPmFkZChzcGVjdWxhdGlvbldhdGNocG9pbnQoKSk7CiAK
QEAgLTE4ODksMTIgKzE4OTAsMTIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU5vblN0
cmluZ0NlbAogCiAgICAgaWYgKG5lZWRTcGVjdWxhdGlvbkNoZWNrKSB7CiAgICAgICAgIG1faml0
Lm1vdmUodmFsdWVHUFIsIHJlc3VsdEdQUik7Ci0gICAgICAgIG1faml0LmFuZFB0cihNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbTMyKH5UYWdCaXRVbmRlZmluZWQpLCByZXN1bHRHUFIpOworICAg
ICAgICBtX2ppdC5hbmQ2NChNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKH5UYWdCaXRVbmRl
ZmluZWQpLCByZXN1bHRHUFIpOwogICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpT
VmFsdWVSZWdzKHZhbHVlR1BSKSwgbm9kZVVzZSwgCi0gICAgICAgICAgICBtX2ppdC5icmFuY2hQ
dHIoCisgICAgICAgICAgICBtX2ppdC5icmFuY2g2NCgKICAgICAgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6Tm90RXF1YWwsIAogICAgICAgICAgICAgICAgIHJlc3VsdEdQUiwgCi0gICAgICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIocmVpbnRlcnByZXRfY2FzdDx2
b2lkKj4oVmFsdWVOdWxsKSkpKTsKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbTY0KFZhbHVlTnVsbCkpKTsKICAgICB9CiAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1t
MzIoVmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKICAgICAKQEAgLTE5MzcsNyArMTkzOCw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVMb2dpY2FsTm90KE4KICAgICAgICAgICAgIEdQUlRl
bXBvcmFyeSByZXN1bHQodGhpcywgdmFsdWUpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBt
X2ppdC5tb3ZlKHZhbHVlLmdwcigpLCByZXN1bHQuZ3ByKCkpOwotICAgICAgICAgICAgbV9qaXQu
eG9yUHRyKFRydXN0ZWRJbW0zMih0cnVlKSwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgICAgIG1f
aml0LnhvcjY0KFRydXN0ZWRJbW0zMih0cnVlKSwgcmVzdWx0LmdwcigpKTsKICAgICAgICAgICAg
IAogICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4
LCBEYXRhRm9ybWF0SlNCb29sZWFuKTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTE5NDcsOSAr
MTk0OCw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVMb2dpY2FsTm90KE4KICAgICAg
ICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsgLy8gRklYTUU6IFdlIGNvdWxkIHJldXNlLCBi
dXQgb24gc3BlY3VsYXRpb24gZmFpbCB3b3VsZCBuZWVkIHJlY292ZXJ5IHRvIHJlc3RvcmUgdGFn
IChha2luIHRvIGFkZCkuCiAgICAgICAgIAogICAgICAgICBtX2ppdC5tb3ZlKHZhbHVlLmdwcigp
LCByZXN1bHQuZ3ByKCkpOwotICAgICAgICBtX2ppdC54b3JQdHIoVHJ1c3RlZEltbTMyKHN0YXRp
Y19jYXN0PGludDMyX3Q+KFZhbHVlRmFsc2UpKSwgcmVzdWx0LmdwcigpKTsKLSAgICAgICAgc3Bl
Y3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyh2YWx1ZS5ncHIoKSksIG5vZGUuY2hp
bGQxKCksIG1faml0LmJyYW5jaFRlc3RQdHIoSklUQ29tcGlsZXI6Ok5vblplcm8sIHJlc3VsdC5n
cHIoKSwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSkpKTsKLSAgICAgICAg
bV9qaXQueG9yUHRyKFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90PihWYWx1ZVRydWUp
KSwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgbV9qaXQueG9yNjQoVHJ1c3RlZEltbTMyKHN0YXRp
Y19jYXN0PGludDMyX3Q+KFZhbHVlRmFsc2UpKSwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgc3Bl
Y3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyh2YWx1ZS5ncHIoKSksIG5vZGUuY2hp
bGQxKCksIG1faml0LmJyYW5jaFRlc3Q2NChKSVRDb21waWxlcjo6Tm9uWmVybywgcmVzdWx0Lmdw
cigpLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSkpOworICAgICAgICBt
X2ppdC54b3I2NChUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oVmFsdWVUcnVlKSks
IHJlc3VsdC5ncHIoKSk7CiAgICAgICAgIAogICAgICAgICAvLyBJZiB3ZSBhZGQgYSBEYXRhRm9y
bWF0Qm9vbCwgd2Ugc2hvdWxkIHVzZSBpdCBoZXJlLgogICAgICAgICBqc1ZhbHVlUmVzdWx0KHJl
c3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgsIERhdGFGb3JtYXRKU0Jvb2xlYW4pOwpAQCAtMTk2
NSwxMyArMTk2NiwxMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTG9naWNhbE5vdChO
CiAgICAgYXJnMS51c2UoKTsKICAgICAKICAgICBtX2ppdC5tb3ZlKGFyZzFHUFIsIHJlc3VsdEdQ
Uik7Ci0gICAgbV9qaXQueG9yUHRyKFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90PihW
YWx1ZUZhbHNlKSksIHJlc3VsdEdQUik7Ci0gICAgSklUQ29tcGlsZXI6Okp1bXAgc2xvd0Nhc2Ug
PSBtX2ppdC5icmFuY2hUZXN0UHRyKEpJVENvbXBpbGVyOjpOb25aZXJvLCByZXN1bHRHUFIsIFRy
dXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpKTsKKyAgICBtX2ppdC54b3I2NChU
cnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oVmFsdWVGYWxzZSkpLCByZXN1bHRHUFIp
OworICAgIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dDYXNlID0gbV9qaXQuYnJhbmNoVGVzdDY0KEpJ
VENvbXBpbGVyOjpOb25aZXJvLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxp
bnQzMl90Pih+MSkpKTsKICAgICAKICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKICAgICAgICAg
c2xvd1BhdGhDYWxsKHNsb3dDYXNlLCB0aGlzLCBkZmdDb252ZXJ0SlNWYWx1ZVRvQm9vbGVhbiwg
cmVzdWx0R1BSLCBhcmcxR1BSKSk7CiAgICAgCi0gICAgbV9qaXQueG9yUHRyKFRydXN0ZWRJbW0z
MihzdGF0aWNfY2FzdDxpbnQzMl90PihWYWx1ZVRydWUpKSwgcmVzdWx0R1BSKTsKKyAgICBtX2pp
dC54b3I2NChUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oVmFsdWVUcnVlKSksIHJl
c3VsdEdQUik7CiAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRHUFIsIG1fY29tcGlsZUluZGV4LCBE
YXRhRm9ybWF0SlNCb29sZWFuLCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOwogfQogCkBA
IC0xOTgyLDcgKzE5ODMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Tm9uU3RyaW5nQ2Vs
bE9yCiAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CiAgICAgR1BSUmVnIHNjcmF0
Y2hHUFIgPSBzY3JhdGNoLmdwcigpOwogICAgIAotICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5v
dENlbGwgPSBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCB2YWx1
ZUdQUiwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cCBub3RDZWxsID0gbV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCB2
YWx1ZUdQUiwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsKICAgICBpZiAobV9qaXQuZ3JhcGgo
KS5nbG9iYWxPYmplY3RGb3IobV9qaXQuZ3JhcGgoKVtub2RlVXNlLmluZGV4KCldLmNvZGVPcmln
aW4pLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludCgpLT5pc1N0aWxsVmFsaWQoKSkg
ewogICAgICAgICBtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihtX2ppdC5ncmFwaCgpW25v
ZGVVc2UuaW5kZXgoKV0uY29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBv
aW50KCktPmFkZChzcGVjdWxhdGlvbldhdGNocG9pbnQoKSk7CiAKQEAgLTIwMjAsOCArMjAyMSw4
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXROb25TdHJpbmdDZWxsT3IKICAgICAKICAgICBp
ZiAobmVlZFNwZWN1bGF0aW9uQ2hlY2spIHsKICAgICAgICAgbV9qaXQubW92ZSh2YWx1ZUdQUiwg
c2NyYXRjaEdQUik7Ci0gICAgICAgIG1faml0LmFuZFB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbTMyKH5UYWdCaXRVbmRlZmluZWQpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgc3BlY3VsYXRp
b25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIG5vZGVVc2UuaW5kZXgoKSwg
bV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgc2NyYXRjaEdQUiwgTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oVmFsdWVO
dWxsKSkpKTsKKyAgICAgICAgbV9qaXQuYW5kNjQoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0z
Mih+VGFnQml0VW5kZWZpbmVkKSwgc2NyYXRjaEdQUik7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hl
Y2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBub2RlVXNlLmluZGV4KCksIG1faml0
LmJyYW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgc2NyYXRjaEdQUiwgTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW02NChWYWx1ZU51bGwpKSk7CiAgICAgfQogICAgIGp1bXAobm90VGFr
ZW4pOwogICAgIApAQCAtMjA3OCw4ICsyMDc5LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1p
dEJyYW5jaChOb2RlJiBubwogICAgICAgICAgICAgICAgIGJyYW5jaFRlc3QzMihjb25kaXRpb24s
IHZhbHVlR1BSLCBUcnVzdGVkSW1tMzIodHJ1ZSksIHRha2VuKTsKICAgICAgICAgICAgICAgICBq
dW1wKG5vdFRha2VuKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgYnJh
bmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgdmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tUHRyKEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oZmFsc2UpKSksIG5vdFRha2Vu
KTsKLSAgICAgICAgICAgICAgICBicmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCB2YWx1
ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9v
bGVhbih0cnVlKSkpLCB0YWtlbik7CisgICAgICAgICAgICAgICAgYnJhbmNoNjQoTWFjcm9Bc3Nl
bWJsZXI6OkVxdWFsLCB2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChKU1Zh
bHVlOjplbmNvZGUoanNCb29sZWFuKGZhbHNlKSkpLCBub3RUYWtlbik7CisgICAgICAgICAgICAg
ICAgYnJhbmNoNjQoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCB2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRydWUpKSksIHRha2Vu
KTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJh
ZFR5cGUsIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQuanVtcCgp
KTsKICAgICAgICAgICAgIH0KQEAgLTIwODgsMTIgKzIwODksMTIgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6ZW1pdEJyYW5jaChOb2RlJiBubwogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3Vs
dCh0aGlzKTsKICAgICAgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CiAg
ICAgICAgIAotICAgICAgICAgICAgYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgdmFs
dWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKEpTVmFsdWU6OmVuY29kZShqc051
bWJlcigwKSkpLCBub3RUYWtlbik7Ci0gICAgICAgICAgICBicmFuY2hQdHIoTWFjcm9Bc3NlbWJs
ZXI6OkFib3ZlT3JFcXVhbCwgdmFsdWVHUFIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rl
ciwgdGFrZW4pOworICAgICAgICAgICAgYnJhbmNoNjQoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCB2
YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNO
dW1iZXIoMCkpKSwgbm90VGFrZW4pOworICAgICAgICAgICAgYnJhbmNoNjQoTWFjcm9Bc3NlbWJs
ZXI6OkFib3ZlT3JFcXVhbCwgdmFsdWVHUFIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rl
ciwgdGFrZW4pOwogICAgIAogICAgICAgICAgICAgaWYgKCFwcmVkaWN0Qm9vbGVhbikgewotICAg
ICAgICAgICAgICAgIGJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHZhbHVlR1BSLCBN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGZh
bHNlKSkpLCBub3RUYWtlbik7Ci0gICAgICAgICAgICAgICAgYnJhbmNoUHRyKE1hY3JvQXNzZW1i
bGVyOjpFcXVhbCwgdmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKEpTVmFs
dWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkpKSwgdGFrZW4pOworICAgICAgICAgICAgICAgIGJy
YW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgdmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihmYWxzZSkpKSwgbm90VGFrZW4p
OworICAgICAgICAgICAgICAgIGJyYW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgdmFsdWVH
UFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVh
bih0cnVlKSkpLCB0YWtlbik7CiAgICAgICAgICAgICB9CiAgICAgCiAgICAgICAgICAgICB2YWx1
ZS51c2UoKTsKQEAgLTIxMTUsOCArMjExNiw4IEBAIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBT
cGVjdWxhdGl2ZUpJVDoKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOwog
ICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3Zl
T3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcs
IEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsKICAgICAKLSAgICBtX2ppdC5s
b2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcs
IE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciksIHJlc3VsdFJlZyk7Ci0gICAgc2xvd0Nhc2VzLmFw
cGVuZChtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCByZXN1bHRSZWcp
KTsKKyAgICBtX2ppdC5sb2FkNjQoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVn
LCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQpLCByZXN1bHRSZWcpOwor
ICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpa
ZXJvLCByZXN1bHRSZWcpKTsKICAgICAKICAgICByZXR1cm4gc2xvd0Nhc2VzOwogfQpAQCAtMjEy
NSw4ICsyMTI2LDggQEAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IFNwZWN1bGF0aXZlSklUOgog
ewogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG91dE9mQm91bmRzID0gbV9qaXQuYnJhbmNoMzIo
TWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkp
KTsKICAgICAKLSAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3Rv
cmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwgT0JKRUNUX09G
RlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSwgcmVzdWx0UmVnKTsKLSAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcCBob2xlID0gbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxl
cjo6WmVybywgcmVzdWx0UmVnKTsKKyAgICBtX2ppdC5sb2FkNjQoTWFjcm9Bc3NlbWJsZXI6OkJh
c2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWln
aHQsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSksIHJlc3VsdFJl
Zyk7CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgaG9sZSA9IG1faml0LmJyYW5jaFRlc3Q2NChN
YWNyb0Fzc2VtYmxlcjo6WmVybywgcmVzdWx0UmVnKTsKICAgICAKICAgICBNYWNyb0Fzc2VtYmxl
cjo6SnVtcExpc3Qgc2xvd0Nhc2VzOwogICAgIHNsb3dDYXNlcy5hcHBlbmQob3V0T2ZCb3VuZHMp
OwpAQCAtMjE1OCw3ICsyMTU5LDcgQEAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IFNwZWN1bGF0
aXZlSklUOgogICAgICAgICBpbkJvdW5kcy5saW5rKCZtX2ppdCk7CiAgICAgfQogCi0gICAgbV9q
aXQuc3RvcmVQdHIodmFsdWVSZWcsIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJl
ZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0cikpOworICAgIG1faml0LnN0
b3JlNjQodmFsdWVSZWcsIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJv
cGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0KSk7CiAgICAgCiAgICAgaWYgKGlz
SW5Cb3VuZHNBY2Nlc3MoYXJyYXlNb2RlKSkKICAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVy
OjpKdW1wTGlzdCgpOwpAQCAtMjE4NCw5ICsyMTg1LDkgQEAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBM
aXN0IFNwZWN1bGF0aXZlSklUOgogICAgICAgICAvLyBwcm9maWxpbmcuCiAgICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2soCiAgICAgICAgICAgICBVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9O
b2RlLAotICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVy
bywgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFj
cm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3Zl
Y3RvclswXSkpKSk7CisgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJs
ZXI6Olplcm8sIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlS
ZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9y
YWdlLCBtX3ZlY3RvclswXSkpKSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXAgbm90SG9sZVZhbHVlID0gbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxl
cjo6Tm9uWmVybywgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0
eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9y
YWdlLCBtX3ZlY3RvclswXSkpKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm90SG9s
ZVZhbHVlID0gbV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBNYWNy
b0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2Vt
Ymxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3Jb
MF0pKSk7CiAgICAgICAgIGlmIChpc1Nsb3dQdXRBY2Nlc3MoYXJyYXlNb2RlKSkgewogICAgICAg
ICAgICAgLy8gVGhpcyBpcyBzb3J0IG9mIHN0cmFuZ2UuIElmIHdlIHdhbnRlZCB0byBvcHRpbWl6
ZSB0aGlzIGNvZGUgcGF0aCwgd2Ugd291bGQgaW52ZXJ0CiAgICAgICAgICAgICAvLyB0aGUgYWJv
dmUgYnJhbmNoLiBCdXQgaXQncyBzaW1wbHkgbm90IHdvcnRoIGl0IHNpbmNlIHRoaXMgb25seSBo
YXBwZW5zIGlmIHdlJ3JlCkBAIC0yMjA2LDcgKzIyMDcsNyBAQCBNYWNyb0Fzc2VtYmxlcjo6SnVt
cExpc3QgU3BlY3VsYXRpdmVKSVQ6CiAgICAgfQogICAgIAogICAgIC8vIFN0b3JlIHRoZSB2YWx1
ZSB0byB0aGUgYXJyYXkuCi0gICAgbV9qaXQuc3RvcmVQdHIodmFsdWVSZWcsIE1hY3JvQXNzZW1i
bGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpT
Y2FsZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSk7Cisg
ICAgbV9qaXQuc3RvcmU2NCh2YWx1ZVJlZywgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9y
YWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9P
RkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSkpOwogICAgIAogICAgIHJldHVybiBz
bG93Q2FzZXM7CiB9CkBAIC0yMjcwLDcgKzIyNzEsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIH0KIAogICAgICAgICBHUFJUZW1wb3JhcnkgcmVz
dWx0KHRoaXMpOwotICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjphZGRyZXNzRm9y
KG5vZGUubG9jYWwoKSksIHJlc3VsdC5ncHIoKSk7CisgICAgICAgIG1faml0LmxvYWQ2NChKSVRD
b21waWxlcjo6YWRkcmVzc0Zvcihub2RlLmxvY2FsKCkpLCByZXN1bHQuZ3ByKCkpOwogCiAgICAg
ICAgIC8vIExpa2UganNWYWx1ZVJlc3VsdCwgYnV0IGRvbid0IHVzZUNoaWxkcmVuIC0gb3VyIGNo
aWxkcmVuIGFyZSBwaGkgbm9kZXMsCiAgICAgICAgIC8vIGFuZCBkb24ndCByZXByZXNlbnQgdmFs
dWVzIHdpdGhpbiB0aGlzIGRhdGFmbG93IHdpdGggdmlydHVhbCByZWdpc3RlcnMuCkBAIC0yMjk0
LDcgKzIyOTUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAg
ICAgY2FzZSBHZXRMb2NhbFVubGlua2VkOiB7CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQo
dGhpcyk7CiAgICAgICAgIAotICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjphZGRy
ZXNzRm9yKG5vZGUudW5saW5rZWRMb2NhbCgpKSwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgbV9q
aXQubG9hZDY0KEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKG5vZGUudW5saW5rZWRMb2NhbCgpKSwg
cmVzdWx0LmdwcigpKTsKICAgICAgICAgCiAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0Lmdw
cigpLCBtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgIGJyZWFrOwpAQCAtMjM2MCwxNCArMjM2MSwx
NCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAg
ICBpZiAoaXNDZWxsU3BlY3VsYXRpb24ocHJlZGljdGVkVHlwZSkpIHsKICAgICAgICAgICAgICAg
ICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBjZWxsKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAg
ICAgICAgICAgIEdQUlJlZyBjZWxsR1BSID0gY2VsbC5ncHIoKTsKLSAgICAgICAgICAgICAgICBt
X2ppdC5zdG9yZVB0cihjZWxsR1BSLCBKSVRDb21waWxlcjo6YWRkcmVzc0Zvcihub2RlLmxvY2Fs
KCkpKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTY0KGNlbGxHUFIsIEpJVENvbXBpbGVy
OjphZGRyZXNzRm9yKG5vZGUubG9jYWwoKSkpOwogICAgICAgICAgICAgICAgIG5vUmVzdWx0KG1f
Y29tcGlsZUluZGV4KTsKICAgICAgICAgICAgICAgICByZWNvcmRTZXRMb2NhbChub2RlLmxvY2Fs
KCksIFZhbHVlU291cmNlKENlbGxJbkpTU3RhY2spKTsKICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChpc0Jvb2xlYW5TcGVjdWxhdGlvbihwcmVk
aWN0ZWRUeXBlKSkgewogICAgICAgICAgICAgICAgIFNwZWN1bGF0ZUJvb2xlYW5PcGVyYW5kIGJv
b2xlYW4odGhpcywgbm9kZS5jaGlsZDEoKSk7Ci0gICAgICAgICAgICAgICAgbV9qaXQuc3RvcmVQ
dHIoYm9vbGVhbi5ncHIoKSwgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Iobm9kZS5sb2NhbCgpKSk7
CisgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmU2NChib29sZWFuLmdwcigpLCBKSVRDb21waWxl
cjo6YWRkcmVzc0Zvcihub2RlLmxvY2FsKCkpKTsKICAgICAgICAgICAgICAgICBub1Jlc3VsdCht
X2NvbXBpbGVJbmRleCk7CiAgICAgICAgICAgICAgICAgcmVjb3JkU2V0TG9jYWwobm9kZS5sb2Nh
bCgpLCBWYWx1ZVNvdXJjZShCb29sZWFuSW5KU1N0YWNrKSk7CiAgICAgICAgICAgICAgICAgYnJl
YWs7CkBAIC0yMzc1LDcgKzIzNzYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5v
ZGUmIG5vZGUpCiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZh
bHVlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwotICAgICAgICBtX2ppdC5zdG9yZVB0cih2YWx1ZS5n
cHIoKSwgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Iobm9kZS5sb2NhbCgpKSk7CisgICAgICAgIG1f
aml0LnN0b3JlNjQodmFsdWUuZ3ByKCksIEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKG5vZGUubG9j
YWwoKSkpOwogICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CiAKICAgICAgICAgcmVj
b3JkU2V0TG9jYWwobm9kZS5sb2NhbCgpLCBWYWx1ZVNvdXJjZShWYWx1ZUluSlNTdGFjaykpOwpA
QCAtMjQ3NSwxMCArMjQ3NiwxMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUm
IG5vZGUpCiAgICAgY2FzZSBDaGVja051bWJlcjogewogICAgICAgICBpZiAoIWlzTnVtYmVyU3Bl
Y3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpIHsKICAgICAg
ICAgICAgIEpTVmFsdWVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKLSAgICAgICAg
ICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzSW50ZWdlciA9IG1faml0LmJyYW5jaFB0cihNYWNyb0Fz
c2VtYmxlcjo6QWJvdmVPckVxdWFsLCBvcDEuZ3ByKCksIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJS
ZWdpc3Rlcik7CisgICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBpc0ludGVnZXIgPSBtX2pp
dC5icmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBvcDEuZ3ByKCksIEdQUklu
Zm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7CiAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNr
KAogICAgICAgICAgICAgICAgIEJhZFR5cGUsIEpTVmFsdWVSZWdzKG9wMS5ncHIoKSksIG5vZGUu
Y2hpbGQxKCkuaW5kZXgoKSwKLSAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0UHRyKE1h
Y3JvQXNzZW1ibGVyOjpaZXJvLCBvcDEuZ3ByKCksIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdp
c3RlcikpOworICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxl
cjo6WmVybywgb3AxLmdwcigpLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsKICAg
ICAgICAgICAgIGlzSW50ZWdlci5saW5rKCZtX2ppdCk7CiAgICAgICAgIH0KICAgICAgICAgbm9S
ZXN1bHQobV9jb21waWxlSW5kZXgpOwpAQCAtMjcxMCw4ICsyNzExLDggQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVj
ayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihNYWNy
b0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3Moc3RvcmFnZVJlZywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkpOwog
ICAgICAgICAgICAgCiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwotICAg
ICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VS
ZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIpLCByZXN1bHQuZ3ByKCkp
OwotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3Mo
KSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCByZXN1
bHQuZ3ByKCkpKTsKKyAgICAgICAgICAgIG1faml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6QmFz
ZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdo
dCksIHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE91dE9mQm91
bmRzLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2Vt
Ymxlcjo6WmVybywgcmVzdWx0LmdwcigpKSk7CiAgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJl
c3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KQEAgLTI3NTUsOCArMjc1Niw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9k
ZSYgbm9kZSkKICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3V0T2ZCb3VuZHMsIEpTVmFs
dWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JF
cXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFy
cmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKSk7CiAgICAgICAgICAgICAKICAgICAg
ICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0gICAgICAgICAgICBtX2ppdC5sb2Fk
UHRyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1h
Y3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92
ZWN0b3JbMF0pKSwgcmVzdWx0LmdwcigpKTsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2so
T3V0T2ZCb3VuZHMsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoVGVzdFB0cihN
YWNyb0Fzc2VtYmxlcjo6WmVybywgcmVzdWx0LmdwcigpKSk7CisgICAgICAgICAgICBtX2ppdC5s
b2FkNjQoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywg
TWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2Us
IG1fdmVjdG9yWzBdKSksIHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFRlc3Q2
NChNYWNyb0Fzc2VtYmxlcjo6WmVybywgcmVzdWx0LmdwcigpKSk7CiAgICAgICAgICAgICAKICAg
ICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CiAg
ICAgICAgICAgICBicmVhazsKQEAgLTI5MDAsNyArMjkwMSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgICAgICAvLyBTdG9yZSB0aGUgdmFs
dWUgdG8gdGhlIGFycmF5LgogICAgICAgICAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHBy
b3BlcnR5LmdwcigpOwogICAgICAgICAgICAgICAgIEdQUlJlZyB2YWx1ZVJlZyA9IHZhbHVlLmdw
cigpOwotICAgICAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKHZhbHVlUmVnLCBNYWNyb0Fzc2Vt
Ymxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6
U2NhbGVQdHIpKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTY0KHZhbHVlUmVnLCBNYWNy
b0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2Vt
Ymxlcjo6VGltZXNFaWdodCkpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIG5v
UmVzdWx0KG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTI5NTEs
NyArMjk1Miw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAg
ICAgICAgICAgICAgICAvLyBTdG9yZSB0aGUgdmFsdWUgdG8gdGhlIGFycmF5LgogICAgICAgICAg
ICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwogICAgICAgICAgICAg
ICAgIEdQUlJlZyB2YWx1ZVJlZyA9IHZhbHVlLmdwcigpOwotICAgICAgICAgICAgICAgIG1faml0
LnN0b3JlUHRyKHZhbHVlUmVnLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcs
IHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRPRihB
cnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSkpOworICAgICAgICAgICAgICAgIG1faml0LnN0b3Jl
NjQodmFsdWVSZWcsIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVy
dHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlT
dG9yYWdlLCBtX3ZlY3RvclswXSkpKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0z
MDEzLDcgKzMwMTQsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUp
CiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgT0JKRUNU
X09GRlNFVE9GKEFyZ3VtZW50cywgbV9yZWdpc3RlcnMpKSwKICAgICAgICAgICAgICAgICBzY3Jh
dGNoUmVnKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIoCisgICAg
ICAgICAgICBtX2ppdC5zdG9yZTY0KAogICAgICAgICAgICAgICAgIHZhbHVlUmVnLAogICAgICAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoCiAgICAgICAgICAgICAgICAgICAg
IHNjcmF0Y2hSZWcsIHNjcmF0Y2gyUmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwKQEAg
LTMxMzksMTAgKzMxNDAsMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBu
b2RlKQogICAgICAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhDb250aWd1b3VzT3V0T2ZCb3VuZHM6
IHsKICAgICAgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9y
YWdlR1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpLCBzdG9yYWdlTGVuZ3Ro
R1BSKTsKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHNsb3dQYXRoID0gbV9qaXQu
YnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgc3RvcmFnZUxlbmd0aEdQUiwg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlZl
Y3Rvckxlbmd0aCgpKSk7Ci0gICAgICAgICAgICBtX2ppdC5zdG9yZVB0cih2YWx1ZUdQUiwgTWFj
cm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzdG9yYWdlTGVuZ3RoR1BSLCBNYWNy
b0Fzc2VtYmxlcjo6U2NhbGVQdHIpKTsKKyAgICAgICAgICAgIG1faml0LnN0b3JlNjQodmFsdWVH
UFIsIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgc3RvcmFnZUxlbmd0aEdQ
UiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQpKTsKICAgICAgICAgICAgIG1faml0LmFkZDMy
KFRydXN0ZWRJbW0zMigxKSwgc3RvcmFnZUxlbmd0aEdQUik7CiAgICAgICAgICAgICBtX2ppdC5z
dG9yZTMyKHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VH
UFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpOwotICAgICAgICAgICAgbV9q
aXQub3JQdHIoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBzdG9yYWdlTGVuZ3RoR1BS
KTsKKyAgICAgICAgICAgIG1faml0Lm9yNjQoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVy
LCBzdG9yYWdlTGVuZ3RoR1BSKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgYWRkU2xvd1Bh
dGhHZW5lcmF0b3IoCiAgICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsKApAQCAtMzE2MiwxMiAr
MzE2MywxMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAg
ICAgIAogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc2xvd1BhdGggPSBtX2ppdC5i
cmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBzdG9yYWdlTGVuZ3RoR1BSLCBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxl
bmd0aE9mZnNldCgpKSk7CiAgICAgICAgIAotICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIodmFs
dWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgc3RvcmFnZUxlbmd0
aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9y
YWdlLCBtX3ZlY3RvclswXSkpKTsKKyAgICAgICAgICAgIG1faml0LnN0b3JlNjQodmFsdWVHUFIs
IE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgc3RvcmFnZUxlbmd0aEdQUiwg
TWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2Us
IG1fdmVjdG9yWzBdKSkpOwogICAgICAgICAKICAgICAgICAgICAgIG1faml0LmFkZDMyKFRydXN0
ZWRJbW0zMigxKSwgc3RvcmFnZUxlbmd0aEdQUik7CiAgICAgICAgICAgICBtX2ppdC5zdG9yZTMy
KHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEFy
cmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpKTsKICAgICAgICAgICAgIG1faml0LmFkZDMyKFRy
dXN0ZWRJbW0zMigxKSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgT0JKRUNU
X09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9udW1WYWx1ZXNJblZlY3RvcikpKTsKLSAgICAgICAg
ICAgIG1faml0Lm9yUHRyKEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlciwgc3RvcmFnZUxl
bmd0aEdQUik7CisgICAgICAgICAgICBtX2ppdC5vcjY0KEdQUkluZm86OnRhZ1R5cGVOdW1iZXJS
ZWdpc3Rlciwgc3RvcmFnZUxlbmd0aEdQUik7CiAgICAgICAgIAogICAgICAgICAgICAgYWRkU2xv
d1BhdGhHZW5lcmF0b3IoCiAgICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsKApAQCAtMzIwOCwx
OSArMzIwOSwxOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAg
ICAgICAgICAgICBtX2ppdC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIHN0b3JhZ2VMZW5ndGhHUFIp
OwogICAgICAgICAgICAgbV9qaXQuc3RvcmUzMigKICAgICAgICAgICAgICAgICBzdG9yYWdlTGVu
Z3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBCdXR0ZXJmbHk6Om9m
ZnNldE9mUHVibGljTGVuZ3RoKCkpKTsKLSAgICAgICAgICAgIG1faml0LmxvYWRQdHIoCi0gICAg
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzdG9yYWdl
TGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIpLAorICAgICAgICAgICAgbV9qaXQu
bG9hZDY0KAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFn
ZUdQUiwgc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQpLAogICAg
ICAgICAgICAgICAgIHZhbHVlR1BSKTsKICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIHdvdWxk
IG5vdCBoYXZlIHRvIGJlIGhlcmUgaWYgY2hhbmdpbmcgdGhlIHB1YmxpY0xlbmd0aCBhbHNvIHpl
cm9lZCB0aGUgdmFsdWVzIGJldHdlZW4gdGhlIG9sZAogICAgICAgICAgICAgLy8gbGVuZ3RoIGFu
ZCB0aGUgbmV3IGxlbmd0aC4KLSAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKAotICAgICAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKDApLCBNYWNyb0Fzc2VtYmxlcjo6
QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpT
Y2FsZVB0cikpOwotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc2xvd0Nhc2UgPSBt
X2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCB2YWx1ZUdQUik7CisgICAg
ICAgICAgICBtX2ppdC5zdG9yZTY0KAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tNjQoKGludDY0X3QpMCksIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFn
ZUdQUiwgc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQpKTsKKyAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHNsb3dDYXNlID0gbV9qaXQuYnJhbmNoVGVz
dDY0KE1hY3JvQXNzZW1ibGVyOjpaZXJvLCB2YWx1ZUdQUik7CiAKICAgICAgICAgICAgIGFkZFNs
b3dQYXRoR2VuZXJhdG9yKAogICAgICAgICAgICAgICAgIHNsb3dQYXRoTW92ZSgKICAgICAgICAg
ICAgICAgICAgICAgdW5kZWZpbmVkQ2FzZSwgdGhpcywKLSAgICAgICAgICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
KSwgdmFsdWVHUFIpKTsKKyAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSkpLCB2YWx1ZUdQUikpOwogICAg
ICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCiAgICAgICAgICAgICAgICAgc2xvd1BhdGhD
YWxsKAogICAgICAgICAgICAgICAgICAgICBzbG93Q2FzZSwgdGhpcywgb3BlcmF0aW9uQXJyYXlQ
b3BBbmRSZWNvdmVyTGVuZ3RoLCB2YWx1ZUdQUiwgYmFzZUdQUikpOwpAQCAtMzI0MSwxOCArMzI0
MiwxOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAg
ICAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOwogICAgICAgICAgICAgc2xvd0Nh
c2VzLmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBz
dG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBBcnJh
eVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSkpOwogICAgICAgICAKLSAgICAgICAgICAg
IG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzdG9y
YWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRPRihB
cnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSksIHZhbHVlR1BSKTsKLSAgICAgICAgICAgIHNsb3dD
YXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVybywgdmFs
dWVHUFIpKTsKKyAgICAgICAgICAgIG1faml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6QmFzZUlu
ZGV4KHN0b3JhZ2VHUFIsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0Vp
Z2h0LCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpLCB2YWx1ZUdQ
Uik7CisgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaFRlc3Q2NChNYWNy
b0Fzc2VtYmxlcjo6WmVybywgdmFsdWVHUFIpKTsKICAgICAgICAgCiAgICAgICAgICAgICBtX2pp
dC5zdG9yZTMyKHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3Jh
Z2VHUFIsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpKTsKICAgICAgICAgCi0gICAgICAg
ICAgICBtX2ppdC5zdG9yZVB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cigwKSwgTWFj
cm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzdG9yYWdlTGVuZ3RoR1BSLCBNYWNy
b0Fzc2VtYmxlcjo6U2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVj
dG9yWzBdKSkpOworICAgICAgICAgICAgbV9qaXQuc3RvcmU2NChNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbTY0KChpbnQ2NF90KTApLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VH
UFIsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBPQkpFQ1Rf
T0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpKTsKICAgICAgICAgICAgIG1faml0
LnN1YjMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMSksIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHN0b3JhZ2VHUFIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbnVtVmFs
dWVzSW5WZWN0b3IpKSk7CiAgICAgICAgIAogICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0
b3IoCiAgICAgICAgICAgICAgICAgc2xvd1BhdGhNb3ZlKAogICAgICAgICAgICAgICAgICAgICB1
bmRlZmluZWRDYXNlLCB0aGlzLAotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbVB0cihKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSkpLCB2YWx1ZUdQUikp
OworICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKSksIHZhbHVlR1BSKSk7CiAgICAgICAgIAogICAgICAg
ICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCiAgICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxs
KApAQCAtMzM0NSw3ICszMzQ2LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2Rl
JiBub2RlKQogICAgICAgICAgICAgCiAgICAgICAgICAgICBtX2ppdC5tb3ZlKG9wMS5ncHIoKSwg
cmVzdWx0LmdwcigpKTsKICAgICAgICAgICAgIGlmIChvcDEuZm9ybWF0KCkgPT0gRGF0YUZvcm1h
dEludGVnZXIpCi0gICAgICAgICAgICAgICAgbV9qaXQub3JQdHIoR1BSSW5mbzo6dGFnVHlwZU51
bWJlclJlZ2lzdGVyLCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAgICAgIG1faml0Lm9yNjQo
R1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCByZXN1bHQuZ3ByKCkpOwogICAgICAgICAg
ICAgCiAgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5k
ZXgpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0zMzY0LDcgKzMzNjUsNyBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIGlmICghKG1fc3RhdGUuZm9y
Tm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUgJiB+KFNwZWNOdW1iZXIgfCBTcGVjQm9vbGVhbikp
KQogICAgICAgICAgICAgbV9qaXQubW92ZShvcDFHUFIsIHJlc3VsdEdQUik7CiAgICAgICAgIGVs
c2UgewotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgYWxyZWFkeVByaW1pdGl2ZSA9
IG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIG9wMUdQUiwgR1BS
SW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1w
IGFscmVhZHlQcmltaXRpdmUgPSBtX2ppdC5icmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Ok5v
blplcm8sIG9wMUdQUiwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsKICAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wIG5vdFByaW1pdGl2ZSA9IG1faml0LmJyYW5jaFB0cihNYWNyb0Fz
c2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMUdQUiwgSlNDZWxs
OjpzdHJ1Y3R1cmVPZmZzZXQoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0
Lmdsb2JhbERhdGEoKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSk7CiAgICAgICAgICAgICAKICAg
ICAgICAgICAgIGFscmVhZHlQcmltaXRpdmUubGluaygmbV9qaXQpOwpAQCAtMzQwMSw3ICszNDAy
LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBvcGVyYW5kSWR4ID0gMDsgb3BlcmFuZElkeCA8IG5vZGUubnVtQ2hp
bGRyZW4oKTsgKytvcGVyYW5kSWR4KSB7CiAgICAgICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQg
b3BlcmFuZCh0aGlzLCBtX2ppdC5ncmFwaCgpLm1fdmFyQXJnQ2hpbGRyZW5bbm9kZS5maXJzdENo
aWxkKCkgKyBvcGVyYW5kSWR4XSk7CiAgICAgICAgICAgICAgICAgR1BSUmVnIG9wR1BSID0gb3Bl
cmFuZC5ncHIoKTsKLSAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZVB0cihvcEdQUiwgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgc2l6ZW9mKEpTVmFsdWUpICogb3BlcmFuZElk
eCkpOworICAgICAgICAgICAgICAgIG1faml0LnN0b3JlNjQob3BHUFIsIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHN0b3JhZ2VHUFIsIHNpemVvZihKU1ZhbHVlKSAqIG9wZXJhbmRJZHgpKTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgLy8gWXVjaywgd2Ugc2hvdWxk
ICpyZWFsbHkqIGhhdmUgYSB3YXkgb2YgYWxzbyByZXR1cm5pbmcgdGhlIHN0b3JhZ2VHUFIuIEJ1
dApAQCAtMzQzMiw3ICszNDMzLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2Rl
JiBub2RlKQogICAgICAgICAgICAgR1BSUmVnIG9wR1BSID0gb3BlcmFuZC5ncHIoKTsKICAgICAg
ICAgICAgIG9wZXJhbmQudXNlKCk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIG1faml0LnN0
b3JlUHRyKG9wR1BSLCBidWZmZXIgKyBvcGVyYW5kSWR4KTsKKyAgICAgICAgICAgIG1faml0LnN0
b3JlNjQob3BHUFIsIGJ1ZmZlciArIG9wZXJhbmRJZHgpOwogICAgICAgICB9CiAgICAgICAgIAog
ICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwpAQCAtMzUzMiw3ICszNTMzLDcgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgR1BSUmVnIG9wR1BS
ID0gb3BlcmFuZC5ncHIoKTsKICAgICAgICAgICAgIG9wZXJhbmQudXNlKCk7CiAgICAgICAgICAg
ICAKLSAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKG9wR1BSLCBidWZmZXIgKyBvcGVyYW5kSWR4
KTsKKyAgICAgICAgICAgIG1faml0LnN0b3JlNjQob3BHUFIsIGJ1ZmZlciArIG9wZXJhbmRJZHgp
OwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwpAQCAtMzU3
Nyw4ICszNTc4LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQog
ICAgICAgICAgICAgCiAgICAgICAgICAgICBKU1ZhbHVlKiBkYXRhID0gbV9qaXQuY29kZUJsb2Nr
KCktPmNvbnN0YW50QnVmZmVyKG5vZGUuc3RhcnRDb25zdGFudCgpKTsKICAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IG5vZGUubnVtQ29uc3RhbnRzKCk7ICsraW5k
ZXgpIHsKLSAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZVB0cigKLSAgICAgICAgICAgICAgICAg
ICAgSW1tUHRyKGJpdHdpc2VfY2FzdDx2b2lkKj4oSlNWYWx1ZTo6ZW5jb2RlKGRhdGFbaW5kZXhd
KSkpLAorICAgICAgICAgICAgICAgIG1faml0LnN0b3JlNjQoCisgICAgICAgICAgICAgICAgICAg
IEltbTY0KEpTVmFsdWU6OmVuY29kZShkYXRhW2luZGV4XSkpLAogICAgICAgICAgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBzaXplb2YoSlNWYWx1ZSkgKiBp
bmRleCkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCkBAIC0zNjIyLDggKzM2MjMsOCBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICAK
ICAgICAgICAgICAgIGlmICghaXNPdGhlclNwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShub2Rl
LmNoaWxkMSgpKS5tX3R5cGUpKSB7CiAgICAgICAgICAgICAgICAgbV9qaXQubW92ZSh0aGlzVmFs
dWVHUFIsIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgICAgIG1faml0LmFuZFB0cihNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbTMyKH5UYWdCaXRVbmRlZmluZWQpLCBzY3JhdGNoR1BSKTsKLSAg
ICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKHRoaXNW
YWx1ZUdQUiksIG5vZGUuY2hpbGQxKCksIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6
Tm90RXF1YWwsIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHJlaW50
ZXJwcmV0X2Nhc3Q8dm9pZCo+KFZhbHVlTnVsbCkpKSk7CisgICAgICAgICAgICAgICAgbV9qaXQu
YW5kNjQoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMih+VGFnQml0VW5kZWZpbmVkKSwgc2Ny
YXRjaEdQUik7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1Zh
bHVlUmVncyh0aGlzVmFsdWVHUFIpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5icmFuY2g2NChNYWNy
b0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tNjQoVmFsdWVOdWxsKSkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAg
ICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2Jh
bFRoaXNPYmplY3RGb3Iobm9kZS5jb2RlT3JpZ2luKSksIHNjcmF0Y2hHUFIpOwpAQCAtMzcyMyw3
ICszNzI0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAg
ICAgICBpZiAoY2hlY2tUb3BMZXZlbCAmJiBza2lwLS0pIHsKICAgICAgICAgICAgIEpJVENvbXBp
bGVyOjpKdW1wIGFjdGl2YXRpb25Ob3RDcmVhdGVkOwogICAgICAgICAgICAgaWYgKGNoZWNrVG9w
TGV2ZWwpCi0gICAgICAgICAgICAgICAgYWN0aXZhdGlvbk5vdENyZWF0ZWQgPSBtX2ppdC5icmFu
Y2hUZXN0UHRyKEpJVENvbXBpbGVyOjpaZXJvLCBKSVRDb21waWxlcjo6YWRkcmVzc0ZvcihzdGF0
aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KG1faml0LmNvZGVCbG9jaygpLT5hY3RpdmF0aW9uUmVn
aXN0ZXIoKSkpKTsKKyAgICAgICAgICAgICAgICBhY3RpdmF0aW9uTm90Q3JlYXRlZCA9IG1faml0
LmJyYW5jaFRlc3Q2NChKSVRDb21waWxlcjo6WmVybywgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Io
c3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihtX2ppdC5jb2RlQmxvY2soKS0+YWN0aXZhdGlv
blJlZ2lzdGVyKCkpKSk7CiAgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpB
ZGRyZXNzKHJlc3VsdEdQUiwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZXN1bHRHUFIpOwog
ICAgICAgICAgICAgYWN0aXZhdGlvbk5vdENyZWF0ZWQubGluaygmbV9qaXQpOwogICAgICAgICB9
CkBAIC0zNzQ5LDcgKzM3NTAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUm
IG5vZGUpCiAgICAgICAgIEdQUlJlZyByZWdpc3RlcnNHUFIgPSByZWdpc3RlcnMuZ3ByKCk7CiAg
ICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CiAKLSAgICAgICAgbV9qaXQu
bG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhyZWdpc3RlcnNHUFIsIG5vZGUudmFyTnVtYmVy
KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgbV9qaXQubG9hZDY0
KEpJVENvbXBpbGVyOjpBZGRyZXNzKHJlZ2lzdGVyc0dQUiwgbm9kZS52YXJOdW1iZXIoKSAqIHNp
emVvZihSZWdpc3RlcikpLCByZXN1bHRHUFIpOwogICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3Vs
dEdQUiwgbV9jb21waWxlSW5kZXgpOwogICAgICAgICBicmVhazsKICAgICB9CkBAIC0zNzY0LDcg
KzM3NjUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAg
ICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOwogICAgICAgICBHUFJSZWcgc2NyYXRj
aEdQUiA9IHNjcmF0Y2hSZWdpc3Rlci5ncHIoKTsKIAotICAgICAgICBtX2ppdC5zdG9yZVB0cih2
YWx1ZUdQUiwgSklUQ29tcGlsZXI6OkFkZHJlc3MocmVnaXN0ZXJzR1BSLCBub2RlLnZhck51bWJl
cigpICogc2l6ZW9mKFJlZ2lzdGVyKSkpOworICAgICAgICBtX2ppdC5zdG9yZTY0KHZhbHVlR1BS
LCBKSVRDb21waWxlcjo6QWRkcmVzcyhyZWdpc3RlcnNHUFIsIG5vZGUudmFyTnVtYmVyKCkgKiBz
aXplb2YoUmVnaXN0ZXIpKSk7CiAgICAgICAgIHdyaXRlQmFycmllcihzY29wZUdQUiwgdmFsdWVH
UFIsIG5vZGUuY2hpbGQzKCksIFdyaXRlQmFycmllckZvclZhcmlhYmxlQWNjZXNzLCBzY3JhdGNo
R1BSKTsKICAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOwogICAgICAgICBicmVhazsK
QEAgLTM3OTgsNyArMzc5OSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYg
bm9kZSkKICAgICAgICAgCiAgICAgICAgIGJhc2UudXNlKCk7CiAgICAgICAgIAotICAgICAgICBK
SVRDb21waWxlcjo6SnVtcCBub3RDZWxsID0gbV9qaXQuYnJhbmNoVGVzdFB0cihKSVRDb21waWxl
cjo6Tm9uWmVybywgYmFzZUdQUiwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsKKyAgICAgICAg
SklUQ29tcGlsZXI6Okp1bXAgbm90Q2VsbCA9IG1faml0LmJyYW5jaFRlc3Q2NChKSVRDb21waWxl
cjo6Tm9uWmVybywgYmFzZUdQUiwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsKICAgICAgICAg
CiAgICAgICAgIGNhY2hlZEdldEJ5SWQobm9kZS5jb2RlT3JpZ2luLCBiYXNlR1BSLCByZXN1bHRH
UFIsIG5vZGUuaWRlbnRpZmllck51bWJlcigpLCBub3RDZWxsKTsKICAgICAgICAgCkBAIC0zODQw
LDcgKzM4NDEsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAg
ICAgICAgIGJhc2UudXNlKCk7CiAgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CiAgICAgICAgIAot
ICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBub3RDZWxsID0gbV9qaXQuYnJhbmNoVGVzdFB0cihK
SVRDb21waWxlcjo6Tm9uWmVybywgYmFzZUdQUiwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsK
KyAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgbm90Q2VsbCA9IG1faml0LmJyYW5jaFRlc3Q2NChK
SVRDb21waWxlcjo6Tm9uWmVybywgYmFzZUdQUiwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsK
ICAgICAgICAgCiAgICAgICAgIGNhY2hlZEdldEJ5SWQobm9kZS5jb2RlT3JpZ2luLCBiYXNlR1BS
LCByZXN1bHRHUFIsIG5vZGUuaWRlbnRpZmllck51bWJlcigpLCBub3RDZWxsLCBEb250U3BpbGwp
OwogICAgICAgICAKQEAgLTM5ODgsNyArMzk4OSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgCiAgICAgICAgIFN0b3JhZ2VBY2Nlc3NEYXRhJiBz
dG9yYWdlQWNjZXNzRGF0YSA9IG1faml0LmdyYXBoKCkubV9zdG9yYWdlQWNjZXNzRGF0YVtub2Rl
LnN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXgoKV07CiAgICAgICAgIAotICAgICAgICBtX2ppdC5sb2Fk
UHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIHN0b3JhZ2VBY2Nlc3NEYXRhLm9m
ZnNldCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCByZXN1bHRHUFIpOworICAgICAgICBtX2pp
dC5sb2FkNjQoSklUQ29tcGlsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgc3RvcmFnZUFjY2Vzc0Rh
dGEub2Zmc2V0ICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSksIHJlc3VsdEdQUik7CiAgICAgICAg
IAogICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbV9jb21waWxlSW5kZXgpOwogICAg
ICAgICBicmVhazsKQEAgLTQwMTAsNyArNDAxMSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUoTm9kZSYgbm9kZSkKIAogICAgICAgICBTdG9yYWdlQWNjZXNzRGF0YSYgc3RvcmFnZUFj
Y2Vzc0RhdGEgPSBtX2ppdC5ncmFwaCgpLm1fc3RvcmFnZUFjY2Vzc0RhdGFbbm9kZS5zdG9yYWdl
QWNjZXNzRGF0YUluZGV4KCldOwogICAgICAgICAKLSAgICAgICAgbV9qaXQuc3RvcmVQdHIodmFs
dWVHUFIsIEpJVENvbXBpbGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIHN0b3JhZ2VBY2Nlc3NEYXRh
Lm9mZnNldCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKTsKKyAgICAgICAgbV9qaXQuc3RvcmU2
NCh2YWx1ZUdQUiwgSklUQ29tcGlsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgc3RvcmFnZUFjY2Vz
c0RhdGEub2Zmc2V0ICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkpOwogICAgICAgICAKICAgICAg
ICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOwogICAgICAgICBicmVhazsKQEAgLTQwNTUsNyAr
NDA1Niw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICBj
YXNlIEdldEdsb2JhbFZhcjogewogICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwog
Ci0gICAgICAgIG1faml0LmxvYWRQdHIobm9kZS5yZWdpc3RlclBvaW50ZXIoKSwgcmVzdWx0Lmdw
cigpKTsKKyAgICAgICAgbV9qaXQubG9hZDY0KG5vZGUucmVnaXN0ZXJQb2ludGVyKCksIHJlc3Vs
dC5ncHIoKSk7CiAKICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGls
ZUluZGV4KTsKICAgICAgICAgYnJlYWs7CkBAIC00MDcxLDcgKzQwNzIsNyBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICB3cml0ZUJhcnJpZXIo
bV9qaXQuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUuY29kZU9yaWdpbiksIHZhbHVlLmdwcigpLCBub2Rl
LmNoaWxkMSgpLCBXcml0ZUJhcnJpZXJGb3JWYXJpYWJsZUFjY2Vzcywgc2NyYXRjaFJlZyk7CiAg
ICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIG1faml0LnN0b3JlUHRyKHZhbHVlLmdwcigpLCBu
b2RlLnJlZ2lzdGVyUG9pbnRlcigpKTsKKyAgICAgICAgbV9qaXQuc3RvcmU2NCh2YWx1ZS5ncHIo
KSwgbm9kZS5yZWdpc3RlclBvaW50ZXIoKSk7CiAKICAgICAgICAgbm9SZXN1bHQobV9jb21waWxl
SW5kZXgpOwogICAgICAgICBicmVhazsKQEAgLTQwOTcsNyArNDA5OCw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIHdyaXRlQmFycmllciht
X2ppdC5nbG9iYWxPYmplY3RGb3Iobm9kZS5jb2RlT3JpZ2luKSwgdmFsdWUuZ3ByKCksIG5vZGUu
Y2hpbGQxKCksIFdyaXRlQmFycmllckZvclZhcmlhYmxlQWNjZXNzLCBzY3JhdGNoUmVnKTsKICAg
ICAgICAgfQogICAgICAgICAKLSAgICAgICAgbV9qaXQuc3RvcmVQdHIodmFsdWUuZ3ByKCksIG5v
ZGUucmVnaXN0ZXJQb2ludGVyKCkpOworICAgICAgICBtX2ppdC5zdG9yZTY0KHZhbHVlLmdwcigp
LCBub2RlLnJlZ2lzdGVyUG9pbnRlcigpKTsKIAogICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJ
bmRleCk7CiAgICAgICAgIGJyZWFrOwpAQCAtNDExMSwxMCArNDExMiwxMCBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAjaWYgREZHX0VOQUJMRShKSVRfQVNTRVJU
KQogICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKICAgICAgICAgR1BSUmVnIHNj
cmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOwotICAgICAgICBtX2ppdC5sb2FkUHRyKG5vZGUucmVn
aXN0ZXJQb2ludGVyKCksIHNjcmF0Y2hHUFIpOwotICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBv
ayA9IG1faml0LmJyYW5jaFB0cigKKyAgICAgICAgbV9qaXQubG9hZDY0KG5vZGUucmVnaXN0ZXJQ
b2ludGVyKCksIHNjcmF0Y2hHUFIpOworICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBvayA9IG1f
aml0LmJyYW5jaDY0KAogICAgICAgICAgICAgSklUQ29tcGlsZXI6OkVxdWFsLCBzY3JhdGNoR1BS
LAotICAgICAgICAgICAgVHJ1c3RlZEltbVB0cihiaXR3aXNlX2Nhc3Q8dm9pZCo+KEpTVmFsdWU6
OmVuY29kZShub2RlLnJlZ2lzdGVyUG9pbnRlcigpLT5nZXQoKSkpKSk7CisgICAgICAgICAgICBU
cnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKG5vZGUucmVnaXN0ZXJQb2ludGVyKCktPmdldCgp
KSkpOwogICAgICAgICBtX2ppdC5icmVha3BvaW50KCk7CiAgICAgICAgIG9rLmxpbmsoJm1faml0
KTsKICNlbmRpZgpAQCAtNDE0NCw5ICs0MTQ1LDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZShOb2RlJiBub2RlKQogICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2Rl
LmNoaWxkMSgpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKICAgICAgICAg
Ci0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzQ2VsbCA9IG1faml0LmJyYW5jaFRlc3RQdHIo
SklUQ29tcGlsZXI6Olplcm8sIHZhbHVlLmdwcigpLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIp
OworICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBpc0NlbGwgPSBtX2ppdC5icmFuY2hUZXN0NjQo
SklUQ29tcGlsZXI6Olplcm8sIHZhbHVlLmdwcigpLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIp
OwogICAgICAgICAKLSAgICAgICAgbV9qaXQuY29tcGFyZVB0cihKSVRDb21waWxlcjo6RXF1YWws
IHZhbHVlLmdwcigpLCBUcnVzdGVkSW1tMzIoVmFsdWVVbmRlZmluZWQpLCByZXN1bHQuZ3ByKCkp
OworICAgICAgICBtX2ppdC5jb21wYXJlNjQoSklUQ29tcGlsZXI6OkVxdWFsLCB2YWx1ZS5ncHIo
KSwgVHJ1c3RlZEltbTMyKFZhbHVlVW5kZWZpbmVkKSwgcmVzdWx0LmdwcigpKTsKICAgICAgICAg
SklUQ29tcGlsZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKICAgICAgICAgCiAgICAgICAg
IGlzQ2VsbC5saW5rKCZtX2ppdCk7CkBAIC00MTgzLDggKzQxODQsOCBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQo
dGhpcywgdmFsdWUpOwogICAgICAgICAKICAgICAgICAgbV9qaXQubW92ZSh2YWx1ZS5ncHIoKSwg
cmVzdWx0LmdwcigpKTsKLSAgICAgICAgbV9qaXQueG9yUHRyKEpJVENvbXBpbGVyOjpUcnVzdGVk
SW1tMzIoVmFsdWVGYWxzZSksIHJlc3VsdC5ncHIoKSk7Ci0gICAgICAgIG1faml0LnRlc3RQdHIo
SklUQ29tcGlsZXI6Olplcm8sIHJlc3VsdC5ncHIoKSwgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW0z
MihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpLCByZXN1bHQuZ3ByKCkpOworICAgICAgICBtX2pp
dC54b3I2NChKSVRDb21waWxlcjo6VHJ1c3RlZEltbTMyKFZhbHVlRmFsc2UpLCByZXN1bHQuZ3By
KCkpOworICAgICAgICBtX2ppdC50ZXN0NjQoSklUQ29tcGlsZXI6Olplcm8sIHJlc3VsdC5ncHIo
KSwgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpLCBy
ZXN1bHQuZ3ByKCkpOwogICAgICAgICBtX2ppdC5vcjMyKFRydXN0ZWRJbW0zMihWYWx1ZUZhbHNl
KSwgcmVzdWx0LmdwcigpKTsKICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG1f
Y29tcGlsZUluZGV4LCBEYXRhRm9ybWF0SlNCb29sZWFuKTsKICAgICAgICAgYnJlYWs7CkBAIC00
MTk0LDcgKzQxOTUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUp
CiAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAg
ICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIHZhbHVlKTsKICAgICAgICAgCi0gICAgICAg
IG1faml0LnRlc3RQdHIoSklUQ29tcGlsZXI6Ok5vblplcm8sIHZhbHVlLmdwcigpLCBHUFJJbmZv
Ojp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHJlc3VsdC5ncHIoKSk7CisgICAgICAgIG1faml0LnRl
c3Q2NChKSVRDb21waWxlcjo6Tm9uWmVybywgdmFsdWUuZ3ByKCksIEdQUkluZm86OnRhZ1R5cGVO
dW1iZXJSZWdpc3RlciwgcmVzdWx0LmdwcigpKTsKICAgICAgICAgbV9qaXQub3IzMihUcnVzdGVk
SW1tMzIoVmFsdWVGYWxzZSksIHJlc3VsdC5ncHIoKSk7CiAgICAgICAgIGpzVmFsdWVSZXN1bHQo
cmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCwgRGF0YUZvcm1hdEpTQm9vbGVhbik7CiAgICAg
ICAgIGJyZWFrOwpAQCAtNDIwNCw3ICs0MjA1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZShOb2RlJiBub2RlKQogICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2Rl
LmNoaWxkMSgpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCB2YWx1ZSk7CiAg
ICAgICAgIAotICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBpc05vdENlbGwgPSBtX2ppdC5icmFu
Y2hUZXN0UHRyKEpJVENvbXBpbGVyOjpOb25aZXJvLCB2YWx1ZS5ncHIoKSwgR1BSSW5mbzo6dGFn
TWFza1JlZ2lzdGVyKTsKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNOb3RDZWxsID0gbV9q
aXQuYnJhbmNoVGVzdDY0KEpJVENvbXBpbGVyOjpOb25aZXJvLCB2YWx1ZS5ncHIoKSwgR1BSSW5m
bzo6dGFnTWFza1JlZ2lzdGVyKTsKICAgICAgICAgCiAgICAgICAgIG1faml0LmxvYWRQdHIoSklU
Q29tcGlsZXI6OkFkZHJlc3ModmFsdWUuZ3ByKCksIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkp
LCByZXN1bHQuZ3ByKCkpOwogICAgICAgICBtX2ppdC5jb21wYXJlOChKSVRDb21waWxlcjo6RXF1
YWwsIEpJVENvbXBpbGVyOjpBZGRyZXNzKHJlc3VsdC5ncHIoKSwgU3RydWN0dXJlOjp0eXBlSW5m
b1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihTdHJpbmdUeXBlKSwgcmVzdWx0LmdwcigpKTsK
QEAgLTQzMTUsNyArNDMxNiw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYg
bm9kZSkKICAgICAgICAgbV9qaXQubmVnMzIocmVzb2x2ZUluZm9HUFIpOwogICAgICAgICBtX2pp
dC5zaWduRXh0ZW5kMzJUb1B0cihyZXNvbHZlSW5mb0dQUiwgcmVzb2x2ZUluZm9HUFIpOwogICAg
ICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKGdsb2JhbE9iamVjdEdQUiwg
SlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVzdWx0R1BSKTsKLSAgICAgICAgbV9qaXQu
bG9hZFB0cihKSVRDb21waWxlcjo6QmFzZUluZGV4KHJlc3VsdEdQUiwgcmVzb2x2ZUluZm9HUFIs
IEpJVENvbXBpbGVyOjpTY2FsZVB0ciwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzdGF0
aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihKU1ZhbHVlKSkpLCByZXN1bHRHUFIpOworICAgICAg
ICBtX2ppdC5sb2FkNjQoSklUQ29tcGlsZXI6OkJhc2VJbmRleChyZXN1bHRHUFIsIHJlc29sdmVJ
bmZvR1BSLCBKSVRDb21waWxlcjo6VGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0g
MikgKiBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihKU1ZhbHVlKSkpLCByZXN1bHRHUFIp
OwogICAgICAgICAKICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCiAgICAgICAgICAgICBz
bG93UGF0aENhbGwoCkBAIC00MzM4LDcgKzQzMzksNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIAogICAgICAgICBtX2ppdC5tb3ZlKHZhbHVlR1BS
LCByZXN1bHRHUFIpOwogICAgICAgICAKLSAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgbm90Q3Jl
YXRlZCA9IG1faml0LmJyYW5jaFRlc3RQdHIoSklUQ29tcGlsZXI6Olplcm8sIHJlc3VsdEdQUik7
CisgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdENyZWF0ZWQgPSBtX2ppdC5icmFuY2hUZXN0
NjQoSklUQ29tcGlsZXI6Olplcm8sIHJlc3VsdEdQUik7CiAgICAgICAgIAogICAgICAgICBhZGRT
bG93UGF0aEdlbmVyYXRvcigKICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbChub3RDcmVhdGVkLCB0
aGlzLCBvcGVyYXRpb25DcmVhdGVBY3RpdmF0aW9uLCByZXN1bHRHUFIpKTsKQEAgLTQzNTYsNyAr
NDM1Nyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAg
ICAgCiAgICAgICAgIG1faml0Lm1vdmUodmFsdWVHUFIsIHJlc3VsdEdQUik7CiAgICAgICAgIAot
ICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBub3RDcmVhdGVkID0gbV9qaXQuYnJhbmNoVGVzdFB0
cihKSVRDb21waWxlcjo6WmVybywgcmVzdWx0R1BSKTsKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1
bXAgbm90Q3JlYXRlZCA9IG1faml0LmJyYW5jaFRlc3Q2NChKSVRDb21waWxlcjo6WmVybywgcmVz
dWx0R1BSKTsKICAgICAgICAgCiAgICAgICAgIGlmIChub2RlLmNvZGVPcmlnaW4uaW5saW5lQ2Fs
bEZyYW1lKSB7CiAgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKQEAgLTQzODAsMTcg
KzQzODEsMTcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAg
ICAgICBHUFJSZWcgYWN0aXZhdGlvblZhbHVlR1BSID0gYWN0aXZhdGlvblZhbHVlLmdwcigpOwog
ICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CiAKLSAgICAgICAgSklU
Q29tcGlsZXI6Okp1bXAgbm90Q3JlYXRlZCA9IG1faml0LmJyYW5jaFRlc3RQdHIoSklUQ29tcGls
ZXI6Olplcm8sIGFjdGl2YXRpb25WYWx1ZUdQUik7CisgICAgICAgIEpJVENvbXBpbGVyOjpKdW1w
IG5vdENyZWF0ZWQgPSBtX2ppdC5icmFuY2hUZXN0NjQoSklUQ29tcGlsZXI6Olplcm8sIGFjdGl2
YXRpb25WYWx1ZUdQUik7CiAKICAgICAgICAgU2hhcmVkU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxl
ID0gbV9qaXQuc3ltYm9sVGFibGVGb3Iobm9kZS5jb2RlT3JpZ2luKTsKICAgICAgICAgaW50IHJl
Z2lzdGVyc09mZnNldCA9IEpTQWN0aXZhdGlvbjo6cmVnaXN0ZXJzT2Zmc2V0KHN5bWJvbFRhYmxl
KTsKIAogICAgICAgICBpbnQgY2FwdHVyZUVuZCA9IHN5bWJvbFRhYmxlLT5jYXB0dXJlRW5kKCk7
CiAgICAgICAgIGZvciAoaW50IGkgPSBzeW1ib2xUYWJsZS0+Y2FwdHVyZVN0YXJ0KCk7IGkgPCBj
YXB0dXJlRW5kOyArK2kpIHsKLSAgICAgICAgICAgIG1faml0LmxvYWRQdHIoCisgICAgICAgICAg
ICBtX2ppdC5sb2FkNjQoCiAgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6OkFkZHJlc3MoCiAg
ICAgICAgICAgICAgICAgICAgIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBpICogc2l6ZW9m
KFJlZ2lzdGVyKSksIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIoCisg
ICAgICAgICAgICBtX2ppdC5zdG9yZTY0KAogICAgICAgICAgICAgICAgIHNjcmF0Y2hHUFIsIEpJ
VENvbXBpbGVyOjpBZGRyZXNzKAogICAgICAgICAgICAgICAgICAgICBhY3RpdmF0aW9uVmFsdWVH
UFIsIHJlZ2lzdGVyc09mZnNldCArIGkgKiBzaXplb2YoUmVnaXN0ZXIpKSk7CiAgICAgICAgIH0K
QEAgLTQ0MDgsNyArNDQwOSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYg
bm9kZSkKICAgICAgICAgR1BSUmVnIHVubW9kaWZpZWRBcmd1bWVudHNWYWx1ZUdQUiA9IHVubW9k
aWZpZWRBcmd1bWVudHNWYWx1ZS5ncHIoKTsKICAgICAgICAgR1BSUmVnIGFjdGl2YXRpb25WYWx1
ZUdQUiA9IGFjdGl2YXRpb25WYWx1ZS5ncHIoKTsKIAotICAgICAgICBKSVRDb21waWxlcjo6SnVt
cCBjcmVhdGVkID0gbV9qaXQuYnJhbmNoVGVzdFB0cihKSVRDb21waWxlcjo6Tm9uWmVybywgdW5t
b2RpZmllZEFyZ3VtZW50c1ZhbHVlR1BSKTsKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgY3Jl
YXRlZCA9IG1faml0LmJyYW5jaFRlc3Q2NChKSVRDb21waWxlcjo6Tm9uWmVybywgdW5tb2RpZmll
ZEFyZ3VtZW50c1ZhbHVlR1BSKTsKIAogICAgICAgICBpZiAobm9kZS5jb2RlT3JpZ2luLmlubGlu
ZUNhbGxGcmFtZSkgewogICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCkBAIC00NDM0
LDcgKzQ0MzUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAg
ICAgICAgICAgICAgICAgICAgIG1faml0LmdyYXBoKCkuYXJndW1lbnRzUmVnaXN0ZXJGb3Iobm9k
ZS5jb2RlT3JpZ2luKSkubV90eXBlKSkgewogICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygK
ICAgICAgICAgICAgICAgICBBcmd1bWVudHNFc2NhcGVkLCBKU1ZhbHVlUmVncygpLCBOb05vZGUs
Ci0gICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdFB0cigKKyAgICAgICAgICAgICAgICBt
X2ppdC5icmFuY2hUZXN0NjQoCiAgICAgICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpOb25a
ZXJvLAogICAgICAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6YWRkcmVzc0ZvcigKICAgICAg
ICAgICAgICAgICAgICAgICAgIG1faml0LmFyZ3VtZW50c1JlZ2lzdGVyRm9yKG5vZGUuY29kZU9y
aWdpbikpKSk7CkBAIC00NDUxLDIyICs0NDUyLDE5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKICAg
ICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKICAgICAgICAgCi0gICAgICAg
IEpJVENvbXBpbGVyOjpKdW1wIGNyZWF0ZWQgPSBtX2ppdC5icmFuY2hUZXN0UHRyKAorICAgICAg
ICBKSVRDb21waWxlcjo6SnVtcCBjcmVhdGVkID0gbV9qaXQuYnJhbmNoVGVzdDY0KAogICAgICAg
ICAgICAgSklUQ29tcGlsZXI6Ok5vblplcm8sCiAgICAgICAgICAgICBKSVRDb21waWxlcjo6YWRk
cmVzc0ZvcigKICAgICAgICAgICAgICAgICBtX2ppdC5hcmd1bWVudHNSZWdpc3RlckZvcihub2Rl
LmNvZGVPcmlnaW4pKSk7CiAgICAgICAgIAogICAgICAgICBpZiAobm9kZS5jb2RlT3JpZ2luLmlu
bGluZUNhbGxGcmFtZSkgewogICAgICAgICAgICAgbV9qaXQubW92ZSgKLSAgICAgICAgICAgICAg
ICBJbW1QdHIoCi0gICAgICAgICAgICAgICAgICAgIGJpdHdpc2VfY2FzdDx2b2lkKj4oCi0gICAg
ICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlOjplbmNvZGUoCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAganNOdW1iZXIobm9kZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+YXJndW1l
bnRzLnNpemUoKSAtIDEpKSkpLAorICAgICAgICAgICAgICAgIEltbTY0KEpTVmFsdWU6OmVuY29k
ZShqc051bWJlcihub2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6
ZSgpIC0gMSkpKSwKICAgICAgICAgICAgICAgICByZXN1bHRHUFIpOwogICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKEpTU3Rh
Y2s6OkFyZ3VtZW50Q291bnQpLCByZXN1bHRHUFIpOwogICAgICAgICAgICAgbV9qaXQuc3ViMzIo
VHJ1c3RlZEltbTMyKDEpLCByZXN1bHRHUFIpOwotICAgICAgICAgICAgbV9qaXQub3JQdHIoR1BS
SW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCByZXN1bHRHUFIpOworICAgICAgICAgICAgbV9q
aXQub3I2NChHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHJlc3VsdEdQUik7CiAgICAg
ICAgIH0KICAgICAgICAgCiAgICAgICAgIC8vIEZJWE1FOiB0aGUgc2xvdyBwYXRoIGdlbmVyYXRv
ciBzaG91bGQgcGVyZm9ybSBhIGZvcndhcmQgc3BlY3VsYXRpb24gdGhhdCB0aGUKQEAgLTQ0OTMs
NyArNDQ5MSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAg
ICAgICAgICAgICAgICAgICAgbV9qaXQuZ3JhcGgoKS5hcmd1bWVudHNSZWdpc3RlckZvcihub2Rl
LmNvZGVPcmlnaW4pKS5tX3R5cGUpKSB7CiAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAog
ICAgICAgICAgICAgICAgIEFyZ3VtZW50c0VzY2FwZWQsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwK
LSAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0UHRyKAorICAgICAgICAgICAgICAgIG1f
aml0LmJyYW5jaFRlc3Q2NCgKICAgICAgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6Ok5vblpl
cm8sCiAgICAgICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKAogICAgICAg
ICAgICAgICAgICAgICAgICAgbV9qaXQuYXJndW1lbnRzUmVnaXN0ZXJGb3Iobm9kZS5jb2RlT3Jp
Z2luKSkpKTsKQEAgLTQ1MzIsNyArNDUzMCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgICAgICAgICAgT0JKRUNUX09GRlNFVE9GKFNsb3dB
cmd1bWVudCwgaW5kZXgpKSwgCiAgICAgICAgICAgICAgICAgcmVzdWx0R1BSKTsKICAgICAgICAg
ICAgIG1faml0LnNpZ25FeHRlbmQzMlRvUHRyKHJlc3VsdEdQUiwgcmVzdWx0R1BSKTsKLSAgICAg
ICAgICAgIG1faml0LmxvYWRQdHIoCisgICAgICAgICAgICBtX2ppdC5sb2FkNjQoCiAgICAgICAg
ICAgICAgICAgSklUQ29tcGlsZXI6OkJhc2VJbmRleCgKICAgICAgICAgICAgICAgICAgICAgR1BS
SW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHJlc3VsdEdQUiwgSklUQ29tcGlsZXI6OlRpbWVzRWln
aHQsIG1faml0Lm9mZnNldE9mTG9jYWxzKG5vZGUuY29kZU9yaWdpbikpLAogICAgICAgICAgICAg
ICAgIHJlc3VsdEdQUik7CkBAIC00NTQzLDcgKzQ1NDEsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIG1faml0Lm5lZzMyKHJlc3VsdEdQUik7CiAg
ICAgICAgIG1faml0LnNpZ25FeHRlbmQzMlRvUHRyKHJlc3VsdEdQUiwgcmVzdWx0R1BSKTsKICAg
ICAgICAgICAgIAotICAgICAgICBtX2ppdC5sb2FkUHRyKAorICAgICAgICBtX2ppdC5sb2FkNjQo
CiAgICAgICAgICAgICBKSVRDb21waWxlcjo6QmFzZUluZGV4KAogICAgICAgICAgICAgICAgIEdQ
UkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCByZXN1bHRHUFIsIEpJVENvbXBpbGVyOjpUaW1lc0Vp
Z2h0LCBtX2ppdC5vZmZzZXRPZkFyZ3VtZW50c0luY2x1ZGluZ1RoaXMobm9kZS5jb2RlT3JpZ2lu
KSksCiAgICAgICAgICAgICByZXN1bHRHUFIpOwpAQCAtNDU2MSw3ICs0NTU5LDcgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAKICAgICAgICAgSklU
Q29tcGlsZXI6Okp1bXBMaXN0IHNsb3dQYXRoOwogICAgICAgICBzbG93UGF0aC5hcHBlbmQoCi0g
ICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0UHRyKAorICAgICAgICAgICAgbV9qaXQuYnJhbmNo
VGVzdDY0KAogICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpOb25aZXJvLAogICAgICAgICAg
ICAgICAgIEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKAogICAgICAgICAgICAgICAgICAgICBtX2pp
dC5hcmd1bWVudHNSZWdpc3RlckZvcihub2RlLmNvZGVPcmlnaW4pKSkpOwpAQCAtNDU5Nyw3ICs0
NTk1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAg
ICAgICAgICAgICAgICBPQkpFQ1RfT0ZGU0VUT0YoU2xvd0FyZ3VtZW50LCBpbmRleCkpLCAKICAg
ICAgICAgICAgICAgICByZXN1bHRHUFIpOwogICAgICAgICAgICAgbV9qaXQuc2lnbkV4dGVuZDMy
VG9QdHIocmVzdWx0R1BSLCByZXN1bHRHUFIpOwotICAgICAgICAgICAgbV9qaXQubG9hZFB0cigK
KyAgICAgICAgICAgIG1faml0LmxvYWQ2NCgKICAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6
QmFzZUluZGV4KAogICAgICAgICAgICAgICAgICAgICBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rl
ciwgcmVzdWx0R1BSLCBKSVRDb21waWxlcjo6VGltZXNFaWdodCwgbV9qaXQub2Zmc2V0T2ZMb2Nh
bHMobm9kZS5jb2RlT3JpZ2luKSksCiAgICAgICAgICAgICAgICAgcmVzdWx0R1BSKTsKQEAgLTQ2
MDgsNyArNDYwNiw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkK
ICAgICAgICAgbV9qaXQubmVnMzIocmVzdWx0R1BSKTsKICAgICAgICAgbV9qaXQuc2lnbkV4dGVu
ZDMyVG9QdHIocmVzdWx0R1BSLCByZXN1bHRHUFIpOwogICAgICAgICAKLSAgICAgICAgbV9qaXQu
bG9hZFB0cigKKyAgICAgICAgbV9qaXQubG9hZDY0KAogICAgICAgICAgICAgSklUQ29tcGlsZXI6
OkJhc2VJbmRleCgKICAgICAgICAgICAgICAgICBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwg
cmVzdWx0R1BSLCBKSVRDb21waWxlcjo6VGltZXNFaWdodCwgbV9qaXQub2Zmc2V0T2ZBcmd1bWVu
dHNJbmNsdWRpbmdUaGlzKG5vZGUuY29kZU9yaWdpbikpLAogICAgICAgICAgICAgcmVzdWx0R1BS
KTsKQEAgLTQ2MzksNyArNDYzNyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9k
ZSYgbm9kZSkKICAgICAgICAgICAgICAgICBtX2ppdC5ncmFwaCgpLmFyZ3VtZW50c1JlZ2lzdGVy
Rm9yKG5vZGUuY29kZU9yaWdpbikpLm1fdHlwZSkpOwogICAgICAgICBzcGVjdWxhdGlvbkNoZWNr
KAogICAgICAgICAgICAgQXJndW1lbnRzRXNjYXBlZCwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLAot
ICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdFB0cigKKyAgICAgICAgICAgIG1faml0LmJyYW5j
aFRlc3Q2NCgKICAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6Tm9uWmVybywKICAgICAgICAg
ICAgICAgICBKSVRDb21waWxlcjo6YWRkcmVzc0ZvcigKICAgICAgICAgICAgICAgICAgICAgbV9q
aXQuYXJndW1lbnRzUmVnaXN0ZXJGb3Iobm9kZS5jb2RlT3JpZ2luKSkpKTsKQEAgLTQ2NjAsNyAr
NDY1OCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAg
ICAgCiAgICAgICAgIG1faml0Lm1vdmUodmFsdWVHUFIsIHJlc3VsdEdQUik7CiAgICAgICAgIAot
ICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBub3RDcmVhdGVkID0gbV9qaXQuYnJhbmNoVGVzdFB0
cihKSVRDb21waWxlcjo6WmVybywgcmVzdWx0R1BSKTsKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1
bXAgbm90Q3JlYXRlZCA9IG1faml0LmJyYW5jaFRlc3Q2NChKSVRDb21waWxlcjo6WmVybywgcmVz
dWx0R1BSKTsKICAgICAgICAgCiAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAogICAgICAg
ICAgICAgc2xvd1BhdGhDYWxsKApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDEzMTY2MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NzA3LDE0ICsxNzA3LDE0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNoZWNrQXJndW1lbnRUeXBl
cygKICAgICAgICAgCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAgaWYgKGlzSW50MzJTcGVj
dWxhdGlvbihwcmVkaWN0ZWRUeXBlKSkKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFk
VHlwZSwgdmFsdWVTb3VyY2UsIG5vZGVJbmRleCwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1i
bGVyOjpCZWxvdywgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSwgR1BS
SW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKEJhZFR5cGUsIHZhbHVlU291cmNlLCBub2RlSW5kZXgsIG1faml0LmJyYW5jaDY0KE1hY3Jv
QXNzZW1ibGVyOjpCZWxvdywgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVy
KSwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSk7CiAgICAgICAgIGVsc2UgaWYgKGlz
Qm9vbGVhblNwZWN1bGF0aW9uKHByZWRpY3RlZFR5cGUpKSB7CiAgICAgICAgICAgICBHUFJUZW1w
b3JhcnkgdGVtcCh0aGlzKTsKLSAgICAgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6
OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSwgdGVtcC5ncHIoKSk7Ci0gICAgICAgICAgICBt
X2ppdC54b3JQdHIoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KFZhbHVlRmFsc2Up
KSwgdGVtcC5ncHIoKSk7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIHZh
bHVlU291cmNlLCBub2RlSW5kZXgsIG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6
Ok5vblplcm8sIHRlbXAuZ3ByKCksIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+
MSkpKSk7CisgICAgICAgICAgICBtX2ppdC5sb2FkNjQoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Io
dmlydHVhbFJlZ2lzdGVyKSwgdGVtcC5ncHIoKSk7CisgICAgICAgICAgICBtX2ppdC54b3I2NChU
cnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oVmFsdWVGYWxzZSkpLCB0ZW1wLmdwcigp
KTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgdmFsdWVTb3VyY2UsIG5v
ZGVJbmRleCwgbV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCB0ZW1w
LmdwcigpLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSkpOwogICAgICAg
ICB9IGVsc2UgaWYgKGlzQ2VsbFNwZWN1bGF0aW9uKHByZWRpY3RlZFR5cGUpKQotICAgICAgICAg
ICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCB2YWx1ZVNvdXJjZSwgbm9kZUluZGV4LCBtX2pp
dC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBKSVRDb21waWxlcjo6YWRk
cmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpKTsKKyAg
ICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgdmFsdWVTb3VyY2UsIG5vZGVJbmRl
eCwgbV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBKSVRDb21waWxl
cjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIp
KTsKICNlbHNlCiAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24ocHJlZGljdGVkVHlwZSkp
CiAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIHZhbHVlU291cmNlLCBub2Rl
SW5kZXgsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgSklUQ29tcGls
ZXI6OnRhZ0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJU
YWcpKSk7CkBAIC0xOTc0LDEwICsxOTc0LDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVWYWx1ZVRvSW50MzIKICAgICAgICAgICAgIEZQUlRlbXBvcmFyeSB0ZW1wRnByKHRoaXMpOwog
ICAgICAgICAgICAgRlBSUmVnIGZwciA9IHRlbXBGcHIuZnByKCk7CiAKLSAgICAgICAgICAgIEpJ
VENvbXBpbGVyOjpKdW1wIGlzSW50ZWdlciA9IG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxl
cjo6QWJvdmVPckVxdWFsLCBncHIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7Cisg
ICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBpc0ludGVnZXIgPSBtX2ppdC5icmFuY2g2NChN
YWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBncHIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJS
ZWdpc3Rlcik7CiAKICAgICAgICAgICAgIGlmICghaXNOdW1iZXJTcGVjdWxhdGlvbihtX3N0YXRl
LmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkKLSAgICAgICAgICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKGdwciksIG5vZGUuY2hpbGQxKCkuaW5kZXgo
KSwgbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVybywgZ3ByLCBHUFJJbmZv
Ojp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKGdwciksIG5vZGUuY2hpbGQxKCkuaW5kZXgoKSwgbV9q
aXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBncHIsIEdQUkluZm86OnRhZ1R5
cGVOdW1iZXJSZWdpc3RlcikpOwogCiAgICAgICAgICAgICAvLyBGaXJzdCwgaWYgd2UgZ2V0IGhl
cmUgd2UgaGF2ZSBhIGRvdWJsZSBlbmNvZGVkIGFzIGEgSlNWYWx1ZQogICAgICAgICAgICAgbV9q
aXQubW92ZShncHIsIHJlc3VsdEdwcik7CkBAIC0yMTIwLDggKzIxMjAsOCBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlSW50MzJUb0RvdWJsCiAgICAgICAgIEFTU0VSVChpc0ludDMyQ29u
c3RhbnQobm9kZS5jaGlsZDEoKS5pbmRleCgpKSk7CiAgICAgICAgIEZQUlRlbXBvcmFyeSByZXN1
bHQodGhpcyk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOwotICAgICAgICBtX2pp
dC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpJbW1QdHIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVp
bnRlcnByZXREb3VibGVUb0ludHB0cih2YWx1ZU9mTnVtYmVyQ29uc3RhbnQobm9kZS5jaGlsZDEo
KS5pbmRleCgpKSkpKSwgdGVtcC5ncHIoKSk7Ci0gICAgICAgIG1faml0Lm1vdmVQdHJUb0RvdWJs
ZSh0ZW1wLmdwcigpLCByZXN1bHQuZnByKCkpOworICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNz
ZW1ibGVyOjpJbW02NChyZWludGVycHJldERvdWJsZVRvSW50NjQodmFsdWVPZk51bWJlckNvbnN0
YW50KG5vZGUuY2hpbGQxKCkuaW5kZXgoKSkpKSwgdGVtcC5ncHIoKSk7CisgICAgICAgIG1faml0
Lm1vdmU2NFRvRG91YmxlKHRlbXAuZ3ByKCksIHJlc3VsdC5mcHIoKSk7CiAgICAgICAgIGRvdWJs
ZVJlc3VsdChyZXN1bHQuZnByKCksIG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KQEAgLTIxNDUsMTMgKzIxNDUsMTMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZUludDMyVG9Eb3VibAogICAgIEdQUlJlZyB0ZW1wR1BSID0gdGVtcC5ncHIoKTsKICAgICBGUFJS
ZWcgcmVzdWx0RlBSID0gcmVzdWx0LmZwcigpOwogICAgIAotICAgIEpJVENvbXBpbGVyOjpKdW1w
IGlzSW50ZWdlciA9IG1faml0LmJyYW5jaFB0cigKKyAgICBKSVRDb21waWxlcjo6SnVtcCBpc0lu
dGVnZXIgPSBtX2ppdC5icmFuY2g2NCgKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JF
cXVhbCwgb3AxR1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOwogICAgIAogICAg
IGlmICghaXNOdW1iZXJTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSku
bV90eXBlKSkgewogICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAogICAgICAgICAgICAgQmFkVHlw
ZSwgSlNWYWx1ZVJlZ3Mob3AxR1BSKSwgbm9kZS5jaGlsZDEoKSwKLSAgICAgICAgICAgIG1faml0
LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIG9wMUdQUiwgR1BSSW5mbzo6dGFn
VHlwZU51bWJlclJlZ2lzdGVyKSk7CisgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0NjQoTWFj
cm9Bc3NlbWJsZXI6Olplcm8sIG9wMUdQUiwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVy
KSk7CiAgICAgfQogICAgIAogICAgIG1faml0Lm1vdmUob3AxR1BSLCB0ZW1wR1BSKTsKQEAgLTI0
ODEsMjAgKzI0ODEsMTggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUluc3RhbmNlT2ZG
bwogICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBsb29wKCZtX2ppdCk7CiAgICAgbV9qaXQubG9h
ZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoUmVnLCBKU0NlbGw6OnN0cnVjdHVy
ZU9mZnNldCgpKSwgc2NyYXRjaFJlZyk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBtX2ppdC5s
b2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hSZWcsIFN0cnVjdHVyZTo6cHJv
dG90eXBlT2Zmc2V0KCkpLCBzY3JhdGNoUmVnKTsKKyAgICBtX2ppdC5sb2FkNjQoTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3Moc2NyYXRjaFJlZywgU3RydWN0dXJlOjpwcm90b3R5cGVPZmZzZXQoKSks
IHNjcmF0Y2hSZWcpOworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGlzSW5zdGFuY2UgPSBtX2pp
dC5icmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHNjcmF0Y2hSZWcsIHByb3RvdHlwZVJl
Zyk7CisgICAgbV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBzY3JhdGNo
UmVnLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpLmxpbmtUbyhsb29wLCAmbV9qaXQpOwogI2Vs
c2UKICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaFJlZywg
U3RydWN0dXJlOjpwcm90b3R5cGVPZmZzZXQoKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1
LmFzQml0cy5wYXlsb2FkKSksIHNjcmF0Y2hSZWcpOwotI2VuZGlmCiAgICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXAgaXNJbnN0YW5jZSA9IG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6RXF1
YWwsIHNjcmF0Y2hSZWcsIHByb3RvdHlwZVJlZyk7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBt
X2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBzY3JhdGNoUmVnLCBHUFJJ
bmZvOjp0YWdNYXNrUmVnaXN0ZXIpLmxpbmtUbyhsb29wLCAmbV9qaXQpOwotI2Vsc2UKICAgICBt
X2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIHNjcmF0Y2hSZWcpLmxp
bmtUbyhsb29wLCAmbV9qaXQpOwogI2VuZGlmCiAgICAgCiAgICAgLy8gTm8gbWF0Y2ggLSByZXN1
bHQgaXMgZmFsc2UuCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBtX2ppdC5tb3ZlKE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tUHRyKEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oZmFsc2UpKSks
IHNjcmF0Y2hSZWcpOworICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02
NChKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGZhbHNlKSkpLCBzY3JhdGNoUmVnKTsKICNlbHNl
CiAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDApLCBzY3JhdGNo
UmVnKTsKICNlbmRpZgpAQCAtMjUwMiw3ICsyNTAwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZUluc3RhbmNlT2ZGbwogICAgIAogICAgIGlzSW5zdGFuY2UubGluaygmbV9qaXQpOwog
I2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbVB0cihKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRydWUpKSksIHNjcmF0Y2hSZWcpOwor
ICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNv
ZGUoanNCb29sZWFuKHRydWUpKSksIHNjcmF0Y2hSZWcpOwogI2Vsc2UKICAgICBtX2ppdC5tb3Zl
KE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMSksIHNjcmF0Y2hSZWcpOwogI2VuZGlmCkBA
IC0yNTI4LDggKzI1MjYsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlSW5zdGFuY2VP
ZihOCiAgICAgICAgIAogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgICAgIEdQUlJlZyB2YWx1ZVJl
ZyA9IHZhbHVlLmdwcigpOwotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBpc0NlbGwgPSBt
X2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCB2YWx1ZVJlZywgR1BSSW5m
bzo6dGFnTWFza1JlZ2lzdGVyKTsKLSAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbVB0cihKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGZhbHNlKSkpLCBzY3JhdGNo
UmVnKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgaXNDZWxsID0gbV9qaXQuYnJhbmNo
VGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpaZXJvLCB2YWx1ZVJlZywgR1BSSW5mbzo6dGFnTWFza1Jl
Z2lzdGVyKTsKKyAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0
KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oZmFsc2UpKSksIHNjcmF0Y2hSZWcpOwogI2Vsc2UK
ICAgICAgICAgR1BSUmVnIHZhbHVlVGFnUmVnID0gdmFsdWUudGFnR1BSKCk7CiAgICAgICAgIEdQ
UlJlZyB2YWx1ZVJlZyA9IHZhbHVlLnBheWxvYWRHUFIoKTsKQEAgLTMwOTIsNyArMzA5MCw3IEBA
IGJvb2wgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVTdHJpY3RFcUZvckMKICAgICAgICAgfQogCiAj
aWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgYnJhbmNoUHRyKGNvbmRpdGlvbiwgb3AxLmdwcigp
LCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihiaXR3aXNlX2Nhc3Q8dm9pZCo+KEpTVmFs
dWU6OmVuY29kZShjb25zdGFudCkpKSwgdGFrZW4pOworICAgICAgICBicmFuY2g2NChjb25kaXRp
b24sIG9wMS5ncHIoKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNv
ZGUoY29uc3RhbnQpKSwgdGFrZW4pOwogI2Vsc2UKICAgICAgICAgR1BSUmVnIHBheWxvYWRHUFIg
PSBvcDEucGF5bG9hZEdQUigpOwogICAgICAgICBHUFJSZWcgdGFnR1BSID0gb3AxLnRhZ0dQUigp
OwpAQCAtMzEyMiw4ICszMTIwLDggQEAgYm9vbCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVN0cmlj
dEVxRm9yQwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgR1BSUmVnIG9wMUdQUiA9IG9wMS5ncHIo
KTsKICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwotICAgIG1faml0Lm1vdmUo
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoYml0d2lzZV9jYXN0PHZvaWQqPihWYWx1ZUZh
bHNlKSksIHJlc3VsdEdQUik7Ci0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm90RXF1YWwgPSBt
X2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBvcDFHUFIsIE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGJpdHdpc2VfY2FzdDx2b2lkKj4oSlNWYWx1ZTo6ZW5jb2Rl
KGNvbnN0YW50KSkpKTsKKyAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
NjQoVmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm90
RXF1YWwgPSBtX2ppdC5icmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIG9wMUdQUiwg
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoY29uc3RhbnQpKSk7
CiAgICAgbV9qaXQub3IzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDEpLCByZXN1bHRH
UFIpOwogICAgIG5vdEVxdWFsLmxpbmsoJm1faml0KTsKICAgICBqc1ZhbHVlUmVzdWx0KHJlc3Vs
dEdQUiwgbV9jb21waWxlSW5kZXgsIERhdGFGb3JtYXRKU0Jvb2xlYW4pOwpAQCAtMzMwMyw3ICsz
MzAxLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25BcgogICAgICAg
ICByZXN1bHRSZWcpOwogICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0VGFnUmVnLCByZXN1bHRSZWcs
IG1fY29tcGlsZUluZGV4KTsKICNlbHNlCi0gICAgbV9qaXQubG9hZFB0cigKKyAgICBtX2ppdC5s
b2FkNjQoCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoCiAgICAgICAgICAgICBz
Y3JhdGNoUmVnLCByZXN1bHRSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LAogICAgICAg
ICAgICAgQ2FsbEZyYW1lOjp0aGlzQXJndW1lbnRPZmZzZXQoKSAqIHNpemVvZihSZWdpc3Rlcikg
LSBzaXplb2YoUmVnaXN0ZXIpKSwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklULmgJKHJldmlzaW9uIDEzMTY2MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtNzEsNiAr
NzEsOCBAQCBwcml2YXRlOgogICAgIHR5cGVkZWYgSklUQ29tcGlsZXI6OkltbTMyIEltbTMyOwog
ICAgIHR5cGVkZWYgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW1QdHIgVHJ1c3RlZEltbVB0cjsKICAg
ICB0eXBlZGVmIEpJVENvbXBpbGVyOjpJbW1QdHIgSW1tUHRyOworICAgIHR5cGVkZWYgSklUQ29t
cGlsZXI6OlRydXN0ZWRJbW02NCBUcnVzdGVkSW1tNjQ7CisgICAgdHlwZWRlZiBKSVRDb21waWxl
cjo6SW1tNjQgSW1tNjQ7CiAKICAgICAvLyBUaGVzZSBjb25zdGFudHMgYXJlIHVzZWQgdG8gc2V0
IHByaW9yaXRpZXMgZm9yIHNwaWxsIG9yZGVyIGZvcgogICAgIC8vIHRoZSByZWdpc3RlciBhbGxv
Y2F0b3IuCkBAIC0zNDcsOSArMzQ5LDExIEBAIHB1YmxpYzoKICAgICAgICAgICAgIEFTU0VSVChp
bmZvLmdwcigpID09IHNvdXJjZSk7CiAgICAgICAgICAgICBpZiAocmVnaXN0ZXJGb3JtYXQgPT0g
RGF0YUZvcm1hdEludGVnZXIpCiAgICAgICAgICAgICAgICAgc3BpbGxBY3Rpb24gPSBTdG9yZTMy
UGF5bG9hZDsKLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIEFTU0VSVChyZWdp
c3RlckZvcm1hdCAmIERhdGFGb3JtYXRKUyB8fCByZWdpc3RlckZvcm1hdCA9PSBEYXRhRm9ybWF0
Q2VsbCB8fCByZWdpc3RlckZvcm1hdCA9PSBEYXRhRm9ybWF0U3RvcmFnZSk7CisgICAgICAgICAg
ICBlbHNlIGlmIChyZWdpc3RlckZvcm1hdCA9PSBEYXRhRm9ybWF0Q2VsbCB8fCByZWdpc3RlckZv
cm1hdCA9PSBEYXRhRm9ybWF0U3RvcmFnZSkKICAgICAgICAgICAgICAgICBzcGlsbEFjdGlvbiA9
IFN0b3JlUHRyOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKHJl
Z2lzdGVyRm9ybWF0ICYgRGF0YUZvcm1hdEpTKTsKKyAgICAgICAgICAgICAgICBzcGlsbEFjdGlv
biA9IFN0b3JlNjQ7CiAgICAgICAgICAgICB9CiAjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQogICAg
ICAgICAgICAgaWYgKHJlZ2lzdGVyRm9ybWF0ICYgRGF0YUZvcm1hdEpTKSB7CkBAIC00MTQsNyAr
NDE4LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIEFTU0VSVChyZWdpc3RlckZvcm1hdCA9
PSBEYXRhRm9ybWF0SlNEb3VibGUpOwogICAgICAgICAgICAgICAgIGZpbGxBY3Rpb24gPSBMb2Fk
RG91YmxlQm94RG91YmxlOwogICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgZmls
bEFjdGlvbiA9IExvYWRQdHI7CisgICAgICAgICAgICAgICAgZmlsbEFjdGlvbiA9IExvYWQ2NDsK
ICNlbHNlCiAgICAgICAgICAgICBBU1NFUlQoaW5mby50YWdHUFIoKSA9PSBzb3VyY2UgfHwgaW5m
by5wYXlsb2FkR1BSKCkgPT0gc291cmNlKTsKICAgICAgICAgICAgIGlmIChub2RlLmhhc0NvbnN0
YW50KCkpCkBAIC01MDEsNiArNTA1LDExIEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBTdG9yZVB0
cjoKICAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKHBsYW4uZ3ByKCksIEpJVENvbXBpbGVyOjph
ZGRyZXNzRm9yKGF0KHBsYW4ubm9kZUluZGV4KCkpLnZpcnR1YWxSZWdpc3RlcigpKSk7CiAgICAg
ICAgICAgICBicmVhazsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICBjYXNlIFN0b3JlNjQ6
CisgICAgICAgICAgICBtX2ppdC5zdG9yZTY0KHBsYW4uZ3ByKCksIEpJVENvbXBpbGVyOjphZGRy
ZXNzRm9yKGF0KHBsYW4ubm9kZUluZGV4KCkpLnZpcnR1YWxSZWdpc3RlcigpKSk7CisgICAgICAg
ICAgICBicmVhazsKKyNlbmRpZgogICAgICAgICBjYXNlIFN0b3JlRG91YmxlOgogICAgICAgICAg
ICAgbV9qaXQuc3RvcmVEb3VibGUocGxhbi5mcHIoKSwgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Io
YXQocGxhbi5ub2RlSW5kZXgoKSkudmlydHVhbFJlZ2lzdGVyKCkpKTsKICAgICAgICAgICAgIGJy
ZWFrOwpAQCAtNTI4LDI1ICs1MzcsMjUgQEAgcHVibGljOgogICAgICAgICAgICAgYnJlYWs7CiAj
aWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAgY2FzZSBTZXRUcnVzdGVkSlNDb25zdGFudDoKLSAg
ICAgICAgICAgIG1faml0Lm1vdmUodmFsdWVPZkpTQ29uc3RhbnRBc0ltbVB0cihwbGFuLm5vZGVJ
bmRleCgpKS5hc1RydXN0ZWRJbW1QdHIoKSwgcGxhbi5ncHIoKSk7CisgICAgICAgICAgICBtX2pp
dC5tb3ZlKHZhbHVlT2ZKU0NvbnN0YW50QXNJbW02NChwbGFuLm5vZGVJbmRleCgpKS5hc1RydXN0
ZWRJbW02NCgpLCBwbGFuLmdwcigpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNl
IFNldEpTQ29uc3RhbnQ6Ci0gICAgICAgICAgICBtX2ppdC5tb3ZlKHZhbHVlT2ZKU0NvbnN0YW50
QXNJbW1QdHIocGxhbi5ub2RlSW5kZXgoKSksIHBsYW4uZ3ByKCkpOworICAgICAgICAgICAgbV9q
aXQubW92ZSh2YWx1ZU9mSlNDb25zdGFudEFzSW1tNjQocGxhbi5ub2RlSW5kZXgoKSksIHBsYW4u
Z3ByKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgU2V0RG91YmxlQ29uc3Rh
bnQ6Ci0gICAgICAgICAgICBtX2ppdC5tb3ZlKEltbVB0cihiaXR3aXNlX2Nhc3Q8dm9pZCo+KHZh
bHVlT2ZOdW1iZXJDb25zdGFudChwbGFuLm5vZGVJbmRleCgpKSkpLCBjYW5UcmFtcGxlKTsKLSAg
ICAgICAgICAgIG1faml0Lm1vdmVQdHJUb0RvdWJsZShjYW5UcmFtcGxlLCBwbGFuLmZwcigpKTsK
KyAgICAgICAgICAgIG1faml0Lm1vdmUoSW1tNjQodmFsdWVPZk51bWJlckNvbnN0YW50KHBsYW4u
bm9kZUluZGV4KCkpKSwgY2FuVHJhbXBsZSk7CisgICAgICAgICAgICBtX2ppdC5tb3ZlNjRUb0Rv
dWJsZShjYW5UcmFtcGxlLCBwbGFuLmZwcigpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBjYXNlIExvYWQzMlBheWxvYWRCb3hJbnQ6CiAgICAgICAgICAgICBtX2ppdC5sb2FkMzIoSklU
Q29tcGlsZXI6OnBheWxvYWRGb3IoYXQocGxhbi5ub2RlSW5kZXgoKSkudmlydHVhbFJlZ2lzdGVy
KCkpLCBwbGFuLmdwcigpKTsKLSAgICAgICAgICAgIG1faml0Lm9yUHRyKEdQUkluZm86OnRhZ1R5
cGVOdW1iZXJSZWdpc3RlciwgcGxhbi5ncHIoKSk7CisgICAgICAgICAgICBtX2ppdC5vcjY0KEdQ
UkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgcGxhbi5ncHIoKSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgY2FzZSBMb2FkRG91YmxlQm94RG91YmxlOgotICAgICAgICAgICAgbV9q
aXQubG9hZFB0cihKSVRDb21waWxlcjo6YWRkcmVzc0ZvcihhdChwbGFuLm5vZGVJbmRleCgpKS52
aXJ0dWFsUmVnaXN0ZXIoKSksIHBsYW4uZ3ByKCkpOwotICAgICAgICAgICAgbV9qaXQuc3ViUHRy
KEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgcGxhbi5ncHIoKSk7CisgICAgICAgICAg
ICBtX2ppdC5sb2FkNjQoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3IoYXQocGxhbi5ub2RlSW5kZXgo
KSkudmlydHVhbFJlZ2lzdGVyKCkpLCBwbGFuLmdwcigpKTsKKyAgICAgICAgICAgIG1faml0LnN1
YjY0KEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgcGxhbi5ncHIoKSk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgY2FzZSBMb2FkSlNVbmJveERvdWJsZToKLSAgICAgICAgICAg
IG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3IoYXQocGxhbi5ub2RlSW5kZXgo
KSkudmlydHVhbFJlZ2lzdGVyKCkpLCBjYW5UcmFtcGxlKTsKKyAgICAgICAgICAgIG1faml0Lmxv
YWQ2NChKSVRDb21waWxlcjo6YWRkcmVzc0ZvcihhdChwbGFuLm5vZGVJbmRleCgpKS52aXJ0dWFs
UmVnaXN0ZXIoKSksIGNhblRyYW1wbGUpOwogICAgICAgICAgICAgdW5ib3hEb3VibGUoY2FuVHJh
bXBsZSwgcGxhbi5mcHIoKSk7CiAgICAgICAgICAgICBicmVhazsKICNlbHNlCkBAIC01NzgsNiAr
NTg3LDExIEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBMb2FkUHRyOgogICAgICAgICAgICAgbV9q
aXQubG9hZFB0cihKSVRDb21waWxlcjo6YWRkcmVzc0ZvcihhdChwbGFuLm5vZGVJbmRleCgpKS52
aXJ0dWFsUmVnaXN0ZXIoKSksIHBsYW4uZ3ByKCkpOwogICAgICAgICAgICAgYnJlYWs7CisjaWYg
VVNFKEpTVkFMVUU2NCkKKyAgICAgICAgY2FzZSBMb2FkNjQ6CisgICAgICAgICAgICBtX2ppdC5s
b2FkNjQoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3IoYXQocGxhbi5ub2RlSW5kZXgoKSkudmlydHVh
bFJlZ2lzdGVyKCkpLCBwbGFuLmdwcigpKTsKKyAgICAgICAgICAgIGJyZWFrOworI2VuZGlmCiAg
ICAgICAgIGNhc2UgTG9hZERvdWJsZToKICAgICAgICAgICAgIG1faml0LmxvYWREb3VibGUoSklU
Q29tcGlsZXI6OmFkZHJlc3NGb3IoYXQocGxhbi5ub2RlSW5kZXgoKSkudmlydHVhbFJlZ2lzdGVy
KCkpLCBwbGFuLmZwcigpKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtNzUyLDEwICs3NjYsMTAg
QEAgcHVibGljOgogICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBib3ggaW50MzIgYW5kIGNlbGwg
dmFsdWVzIC4uLgogICAgICAgICAgICAgLy8gYnV0IG9uIEpTVkFMVUU2NCBib3hpbmcgYSBjZWxs
IGlzIGEgbm8tb3AhCiAgICAgICAgICAgICBpZiAoc3BpbGxGb3JtYXQgPT0gRGF0YUZvcm1hdElu
dGVnZXIpCi0gICAgICAgICAgICAgICAgbV9qaXQub3JQdHIoR1BSSW5mbzo6dGFnVHlwZU51bWJl
clJlZ2lzdGVyLCByZWcpOworICAgICAgICAgICAgICAgIG1faml0Lm9yNjQoR1BSSW5mbzo6dGFn
VHlwZU51bWJlclJlZ2lzdGVyLCByZWcpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICAvLyBT
cGlsbCB0aGUgdmFsdWUsIGFuZCByZWNvcmQgaXQgYXMgc3BpbGxlZCBpbiBpdHMgYm94ZWQgZm9y
bS4KLSAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKHJlZywgSklUQ29tcGlsZXI6OmFkZHJlc3NG
b3Ioc3BpbGxNZSkpOworICAgICAgICAgICAgbV9qaXQuc3RvcmU2NChyZWcsIEpJVENvbXBpbGVy
OjphZGRyZXNzRm9yKHNwaWxsTWUpKTsKICAgICAgICAgICAgIGluZm8uc3BpbGwoKm1fc3RyZWFt
LCBzcGlsbE1lLCAoRGF0YUZvcm1hdCkoc3BpbGxGb3JtYXQgfCBEYXRhRm9ybWF0SlMpKTsKICAg
ICAgICAgICAgIHJldHVybjsKICNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCkBAIC04NzUsOSArODg5
LDkgQEAgcHVibGljOgogI2VuZGlmCiAKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIE1hY3JvQXNz
ZW1ibGVyOjpJbW1QdHIgdmFsdWVPZkpTQ29uc3RhbnRBc0ltbVB0cihOb2RlSW5kZXggbm9kZUlu
ZGV4KQorICAgIE1hY3JvQXNzZW1ibGVyOjpJbW02NCB2YWx1ZU9mSlNDb25zdGFudEFzSW1tNjQo
Tm9kZUluZGV4IG5vZGVJbmRleCkKICAgICB7Ci0gICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxl
cjo6SW1tUHRyKEpTVmFsdWU6OmVuY29kZSh2YWx1ZU9mSlNDb25zdGFudChub2RlSW5kZXgpKSk7
CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlcjo6SW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKHZh
bHVlT2ZKU0NvbnN0YW50KG5vZGVJbmRleCkpKTsKICAgICB9CiAjZW5kaWYKIApAQCAtMTM1OSw2
ICsxMzczLDExIEBAIHB1YmxpYzoKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhl
Y1N0YXRlKGFyZzEpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVj
a1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQorICAgIEpJVENvbXBpbGVyOjpD
YWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRUogb3BlcmF0aW9uLCBHUFJSZWcgcmVz
dWx0LCBHUFJSZWcgYXJnMSkKKyAgICB7CisgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0
aEV4ZWNTdGF0ZShhcmcxKTsKKyAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9u
Q2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOworICAgIH0KICAgICBKSVRDb21waWxl
cjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFNfREZHT3BlcmF0aW9uX0VKSiBvcGVyYXRpb24sIEdQUlJl
ZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMikKICAgICB7CiAgICAgICAgIG1faml0
LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyKTsKQEAgLTEzNzQsMTQgKzEz
OTMsMTkgQEAgcHVibGljOgogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3Rh
dGUoYXJnMSwgYXJnMik7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNo
ZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9CisgICAgSklUQ29tcGlsZXI6
OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FSkogb3BlcmF0aW9uLCBHUFJSZWcg
cmVzdWx0LCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIpCisgICAgeworICAgICAgICBtX2ppdC5z
ZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMik7CisgICAgICAgIHJldHVybiBh
cHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsK
KyAgICB9CiAgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlv
bl9FSkogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW0zMiBpbW0pCiAgICAgewotICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50
c1dpdGhFeGVjU3RhdGUoYXJnMSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoc3RhdGlj
X2Nhc3Q8Y29uc3Qgdm9pZCo+KEpTVmFsdWU6OmVuY29kZShqc051bWJlcihpbW0ubV92YWx1ZSkp
KSkpOworICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoaW1tLm1f
dmFsdWUpKSkpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1Nl
dFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQogICAgIEpJVENvbXBpbGVyOjpDYWxs
IGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRUpKIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3Vs
dCwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMiBpbW0sIEdQUlJlZyBhcmcyKQogICAgIHsK
LSAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tUHRyKHN0YXRpY19jYXN0PGNvbnN0IHZvaWQqPihKU1ZhbHVlOjplbmNvZGUo
anNOdW1iZXIoaW1tLm1fdmFsdWUpKSkpLCBhcmcyKTsKKyAgICAgICAgbV9qaXQuc2V0dXBBcmd1
bWVudHNXaXRoRXhlY1N0YXRlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6
ZW5jb2RlKGpzTnVtYmVyKGltbS5tX3ZhbHVlKSkpLCBhcmcyKTsKICAgICAgICAgcmV0dXJuIGFw
cGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwog
ICAgIH0KICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9u
X0VDQyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMikK
QEAgLTIwNjMsNiArMjA4NywyMCBAQCBwdWJsaWM6CiAgICAgICAgIG5vdFRha2VuLmxpbmsoJm1f
aml0KTsKICAgICB9CiAgICAgCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBULCB0eXBlbmFtZSBVPgorICAgIHZvaWQgYnJhbmNoNjQoSklUQ29tcGlsZXI6OlJlbGF0
aW9uYWxDb25kaXRpb24gY29uZCwgVCBsZWZ0LCBVIHJpZ2h0LCBCbG9ja0luZGV4IGRlc3RpbmF0
aW9uKQorICAgIHsKKyAgICAgICAgaWYgKCFoYXZlRWRnZUNvZGVUb0VtaXQoZGVzdGluYXRpb24p
KQorICAgICAgICAgICAgcmV0dXJuIGFkZEJyYW5jaChtX2ppdC5icmFuY2g2NChjb25kLCBsZWZ0
LCByaWdodCksIGRlc3RpbmF0aW9uKTsKKyAgICAgICAgCisgICAgICAgIEpJVENvbXBpbGVyOjpK
dW1wIG5vdFRha2VuID0gbV9qaXQuYnJhbmNoNjQoSklUQ29tcGlsZXI6OmludmVydChjb25kKSwg
bGVmdCwgcmlnaHQpOworICAgICAgICBlbWl0RWRnZUNvZGUoZGVzdGluYXRpb24pOworICAgICAg
ICBhZGRCcmFuY2gobV9qaXQuanVtcCgpLCBkZXN0aW5hdGlvbik7CisgICAgICAgIG5vdFRha2Vu
LmxpbmsoJm1faml0KTsKKyAgICB9CisjZW5kaWYKKyAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBVPgogICAgIHZvaWQgYnJhbmNoUHRyKEpJVENvbXBpbGVyOjpSZWxhdGlv
bmFsQ29uZGl0aW9uIGNvbmQsIFQgbGVmdCwgVSByaWdodCwgQmxvY2tJbmRleCBkZXN0aW5hdGlv
bikKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaHVua3MuY3BwCShy
ZXZpc2lvbiAxMzE2NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDggKzQ0LDEzIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZiBvc3JFeGl0R2VuZXJhdGlvblQKICAgICBTY3JhdGNoQnVmZmVyKiBzY3JhdGNoQnVmZmVyID0g
Z2xvYmFsRGF0YS0+c2NyYXRjaEJ1ZmZlckZvclNpemUoc2NyYXRjaFNpemUpOwogICAgIEVuY29k
ZWRKU1ZhbHVlKiBidWZmZXIgPSBzdGF0aWNfY2FzdDxFbmNvZGVkSlNWYWx1ZSo+KHNjcmF0Y2hC
dWZmZXItPmRhdGFCdWZmZXIoKSk7CiAgICAgCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyArK2kpCisgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyArK2kpIHsKKyNpZiBDUFUoWDg2XzY0
KQorICAgICAgICBqaXQuc3RvcmU2NChHUFJJbmZvOjp0b1JlZ2lzdGVyKGkpLCBidWZmZXIgKyBp
KTsKKyNlbHNlCiAgICAgICAgIGppdC5zdG9yZVB0cihHUFJJbmZvOjp0b1JlZ2lzdGVyKGkpLCBi
dWZmZXIgKyBpKTsKKyNlbmRpZgorICAgIH0KICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
RlBSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7ICsraSkgewogICAgICAgICBqaXQubW92ZShNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihidWZmZXIgKyBHUFJJbmZvOjpudW1iZXJPZlJlZ2lz
dGVycyArIGkpLCBHUFJJbmZvOjpyZWdUMCk7CiAgICAgICAgIGppdC5zdG9yZURvdWJsZShGUFJJ
bmZvOjp0b1JlZ2lzdGVyKGkpLCBHUFJJbmZvOjpyZWdUMCk7CkBAIC03MSw4ICs3NiwxMyBAQCBN
YWNyb0Fzc2VtYmxlckNvZGVSZWYgb3NyRXhpdEdlbmVyYXRpb25UCiAgICAgICAgIGppdC5tb3Zl
KE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGJ1ZmZlciArIEdQUkluZm86Om51bWJlck9m
UmVnaXN0ZXJzICsgaSksIEdQUkluZm86OnJlZ1QwKTsKICAgICAgICAgaml0LmxvYWREb3VibGUo
R1BSSW5mbzo6cmVnVDAsIEZQUkluZm86OnRvUmVnaXN0ZXIoaSkpOwogICAgIH0KLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7ICsraSkKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7ICsr
aSkgeworI2lmIENQVShYODZfNjQpCisgICAgICAgIGppdC5sb2FkNjQoYnVmZmVyICsgaSwgR1BS
SW5mbzo6dG9SZWdpc3RlcihpKSk7CisjZWxzZQogICAgICAgICBqaXQubG9hZFB0cihidWZmZXIg
KyBpLCBHUFJJbmZvOjp0b1JlZ2lzdGVyKGkpKTsKKyNlbmRpZgorICAgIH0KICAgICAKICAgICBq
aXQuanVtcChNYWNyb0Fzc2VtYmxlcjo6QWJzb2x1dGVBZGRyZXNzKCZnbG9iYWxEYXRhLT5vc3JF
eGl0SnVtcERlc3RpbmF0aW9uKSk7CiAgICAgCkBAIC0xMTUsNyArMTI1LDExIEBAIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZiB0aHJvd0V4Y2VwdGlvbkZyb20KICAgICAgICAgICAgIEdQUkluZm86OmNh
bGxGcmFtZVJlZ2lzdGVyLAogICAgICAgICAgICAgc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXpl
b2YoUmVnaXN0ZXIpKSAqIEpTU3RhY2s6OkNhbGxlckZyYW1lKSwKICAgICAgICAgR1BSSW5mbzo6
Y2FsbEZyYW1lUmVnaXN0ZXIpOworI2lmIENQVShYODZfNjQpCisgICAgaml0LnBlZWs2NChHUFJJ
bmZvOjpub25QcmVzZXJ2ZWROb25SZXR1cm5HUFIsIEpJVFNUQUNLRlJBTUVfQVJHU19JTkRFWCk7
CisjZWxzZQogICAgIGppdC5wZWVrKEdQUkluZm86Om5vblByZXNlcnZlZE5vblJldHVybkdQUiwg
SklUU1RBQ0tGUkFNRV9BUkdTX0lOREVYKTsKKyNlbmRpZgogICAgIGppdC5zZXR1cEFyZ3VtZW50
c1dpdGhFeGVjU3RhdGUoR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSKTsKICAgICBq
aXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoYml0d2lzZV9jYXN0PHZvaWQqPihs
b29rdXBFeGNlcHRpb25IYW5kbGVyKSksIEdQUkluZm86Om5vbkFyZ0dQUjApOwogICAgIGVtaXRQ
b2ludGVyVmFsaWRhdGlvbihqaXQsIEdQUkluZm86Om5vbkFyZ0dQUjApOwpAQCAtMTM4LDcgKzE1
MiwxMSBAQCBzdGF0aWMgdm9pZCBzbG93UGF0aEZvcigKICAgICAgICAgICAgIEdQUkluZm86OmNh
bGxGcmFtZVJlZ2lzdGVyLAogICAgICAgICAgICAgc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXpl
b2YoUmVnaXN0ZXIpKSAqIEpTU3RhY2s6OlJldHVyblBDKSk7CiAgICAgaml0LnN0b3JlUHRyKEdQ
UkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCAmZ2xvYmFsRGF0YS0+dG9wQ2FsbEZyYW1lKTsKKyNp
ZiBDUFUoWDg2XzY0KQorICAgIGppdC5wb2tlNjQoR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0
dXJuR1BSLCBKSVRTVEFDS0ZSQU1FX0FSR1NfSU5ERVgpOworI2Vsc2UKICAgICBqaXQucG9rZShH
UFJJbmZvOjpub25QcmVzZXJ2ZWROb25SZXR1cm5HUFIsIEpJVFNUQUNLRlJBTUVfQVJHU19JTkRF
WCk7CisjZW5kaWYKICAgICBqaXQuc2V0dXBBcmd1bWVudHNFeGVjU3RhdGUoKTsKICAgICBqaXQu
bW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoYml0d2lzZV9jYXN0PHZvaWQqPihzbG93
UGF0aEZ1bmN0aW9uKSksIEdQUkluZm86Om5vbkFyZ0dQUjApOwogICAgIGVtaXRQb2ludGVyVmFs
aWRhdGlvbihqaXQsIEdQUkluZm86Om5vbkFyZ0dQUjApOwpAQCAtMjExLDcgKzIyOSw3IEBAIHN0
YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgdmlydHVhbEZvclQKICAgICAKICNpZiBVU0UoSlNW
QUxVRTY0KQogICAgIHNsb3dDYXNlLmFwcGVuZCgKLSAgICAgICAgaml0LmJyYW5jaFRlc3RQdHIo
CisgICAgICAgIGppdC5icmFuY2hUZXN0NjQoCiAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5v
blplcm8sIEdQUkluZm86Om5vbkFyZ0dQUjAsIEdQUkluZm86OnRhZ01hc2tSZWdpc3RlcikpOwog
I2Vsc2UKICAgICBzbG93Q2FzZS5hcHBlbmQoCkBAIC0yNDUsNyArMjYzLDcgQEAgc3RhdGljIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZiB2aXJ0dWFsRm9yVAogICAgICAgICBDQ2FsbEhlbHBlcnM6OkFk
ZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZTY29wZUNoYWlu
KCkpLAogICAgICAgICBHUFJJbmZvOjpub25BcmdHUFIxKTsKICNpZiBVU0UoSlNWQUxVRTY0KQot
ICAgIGppdC5zdG9yZVB0cigKKyAgICBqaXQuc3RvcmU2NCgKICAgICAgICAgR1BSSW5mbzo6bm9u
QXJnR1BSMSwKICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKAogICAgICAgICAgICAgR1BS
SW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50
ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAJKHJldmlzaW9uIDEzMTY2MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMwNywxMSArMzA3LDcgQEAgdm9pZCBJbnRlcnByZXRlcjo6ZHVtcFJlZ2lzdGVy
cyhDYWxsRnJhbQogICAgICAgICBKU1ZhbHVlIHYgPSBpdC0+anNWYWx1ZSgpOwogICAgICAgICBp
bnQgcmVnaXN0ZXJOdW1iZXIgPSBpdCAtIGNhbGxGcmFtZS0+cmVnaXN0ZXJzKCk7CiAgICAgICAg
IFN0cmluZyBuYW1lID0gY29kZUJsb2NrLT5uYW1lRm9yUmVnaXN0ZXIocmVnaXN0ZXJOdW1iZXIp
OwotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAgIGRhdGFMb2coIltyJSAzZCAlMTRzXSAg
ICAgIHwgJTEwcCB8ICUtMTZzIDB4JWxseCBcbiIsIHJlZ2lzdGVyTnVtYmVyLCBuYW1lLmFzY2lp
KCkuZGF0YSgpLCBpdCwgdi5kZXNjcmlwdGlvbigpLCBKU1ZhbHVlOjplbmNvZGUodikpOwotI2Vs
c2UKLSAgICAgICAgZGF0YUxvZygiW3IlIDNkICUxNHNdICAgICAgfCAlMTBwIHwgJS0xNnMgJXAg
XG4iLCByZWdpc3Rlck51bWJlciwgbmFtZS5hc2NpaSgpLmRhdGEoKSwgaXQsIHYuZGVzY3JpcHRp
b24oKSwgSlNWYWx1ZTo6ZW5jb2RlKHYpKTsKLSNlbmRpZgorICAgICAgICBkYXRhTG9nKCJbciUg
M2QgJTE0c10gICAgICB8ICUxMHAgfCAlLTE2cyAweCVsbGQgXG4iLCByZWdpc3Rlck51bWJlciwg
bmFtZS5hc2NpaSgpLmRhdGEoKSwgaXQsIHYuZGVzY3JpcHRpb24oKSwgKGxvbmcgbG9uZylKU1Zh
bHVlOjplbmNvZGUodikpOwogICAgICAgICBpdCsrOwogICAgIH0KICAgICAKQEAgLTM0NiwxMSAr
MzQyLDcgQEAgdm9pZCBJbnRlcnByZXRlcjo6ZHVtcFJlZ2lzdGVycyhDYWxsRnJhbQogICAgICAg
ICAgICAgSlNWYWx1ZSB2ID0gaXQtPmpzVmFsdWUoKTsKICAgICAgICAgICAgIGludCByZWdpc3Rl
ck51bWJlciA9IGl0IC0gY2FsbEZyYW1lLT5yZWdpc3RlcnMoKTsKICAgICAgICAgICAgIFN0cmlu
ZyBuYW1lID0gY29kZUJsb2NrLT5uYW1lRm9yUmVnaXN0ZXIocmVnaXN0ZXJOdW1iZXIpOwotI2lm
IFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAgICAgICBkYXRhTG9nKCJbciUgM2QgJTE0c10gICAg
ICB8ICUxMHAgfCAlLTE2cyAweCVsbHggXG4iLCByZWdpc3Rlck51bWJlciwgbmFtZS5hc2NpaSgp
LmRhdGEoKSwgaXQsIHYuZGVzY3JpcHRpb24oKSwgSlNWYWx1ZTo6ZW5jb2RlKHYpKTsKLSNlbHNl
Ci0gICAgICAgICAgICBkYXRhTG9nKCJbciUgM2QgJTE0c10gICAgICB8ICUxMHAgfCAlLTE2cyAl
cCBcbiIsIHJlZ2lzdGVyTnVtYmVyLCBuYW1lLmFzY2lpKCkuZGF0YSgpLCBpdCwgdi5kZXNjcmlw
dGlvbigpLCBKU1ZhbHVlOjplbmNvZGUodikpOwotI2VuZGlmCisgICAgICAgICAgICBkYXRhTG9n
KCJbciUgM2QgJTE0c10gICAgICB8ICUxMHAgfCAlLTE2cyAweCVsbGQgXG4iLCByZWdpc3Rlck51
bWJlciwgbmFtZS5hc2NpaSgpLmRhdGEoKSwgaXQsIHYuZGVzY3JpcHRpb24oKSwgKGxvbmcgbG9u
ZylKU1ZhbHVlOjplbmNvZGUodikpOwogICAgICAgICAgICAgKytpdDsKICAgICAgICAgICAgICsr
cmVnaXN0ZXJDb3VudDsKICAgICAgICAgfSB3aGlsZSAoaXQgIT0gZW5kKTsKQEAgLTM2MSwxMSAr
MzUzLDcgQEAgdm9pZCBJbnRlcnByZXRlcjo6ZHVtcFJlZ2lzdGVycyhDYWxsRnJhbQogICAgIGlm
IChpdCAhPSBlbmQpIHsKICAgICAgICAgZG8gewogICAgICAgICAgICAgSlNWYWx1ZSB2ID0gKCpp
dCkuanNWYWx1ZSgpOwotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAgICAgICBkYXRhTG9n
KCJbciUgM2RdICAgICAgICAgICAgICAgICAgICAgfCAlMTBwIHwgJS0xNnMgMHglbGx4IFxuIiwg
cmVnaXN0ZXJDb3VudCwgaXQsIHYuZGVzY3JpcHRpb24oKSwgSlNWYWx1ZTo6ZW5jb2RlKHYpKTsK
LSNlbHNlCi0gICAgICAgICAgICBkYXRhTG9nKCJbciUgM2RdICAgICAgICAgICAgICAgICAgICAg
fCAlMTBwIHwgJS0xNnMgJXAgXG4iLCByZWdpc3RlckNvdW50LCBpdCwgdi5kZXNjcmlwdGlvbigp
LCBKU1ZhbHVlOjplbmNvZGUodikpOwotI2VuZGlmCisgICAgICAgICAgICBkYXRhTG9nKCJbciUg
M2RdICAgICAgICAgICAgICAgICAgICAgfCAlMTBwIHwgJS0xNnMgMHglbGxkIFxuIiwgcmVnaXN0
ZXJDb3VudCwgaXQsIHYuZGVzY3JpcHRpb24oKSwgKGxvbmcgbG9uZylKU1ZhbHVlOjplbmNvZGUo
dikpOwogICAgICAgICAgICAgKytpdDsKICAgICAgICAgICAgICsrcmVnaXN0ZXJDb3VudDsKICAg
ICAgICAgfSB3aGlsZSAoaXQgIT0gZW5kKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5j
cHAJKHJldmlzaW9uIDEzMTY2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNjY3LDcgKzY2Nyw3IEBAIEpJVENvZGUgSklUOjpwcml2YXRl
Q29tcGlsZShDb2RlUHRyKiBmdW4KICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgICAgICAgICAgaW50IG9mZnNldCA9IENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXRJbmNsdWRp
bmdUaGlzKGFyZ3VtZW50KSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSk7CiAj
aWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MoY2FsbEZy
YW1lUmVnaXN0ZXIsIG9mZnNldCksIHJlZ1QwKTsKKyAgICAgICAgICAgICAgICBsb2FkNjQoQWRk
cmVzcyhjYWxsRnJhbWVSZWdpc3Rlciwgb2Zmc2V0KSwgcmVnVDApOwogI2VsaWYgVVNFKEpTVkFM
VUUzMl82NCkKICAgICAgICAgICAgICAgICBsb2FkMzIoQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3Rl
ciwgb2Zmc2V0ICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwg
cmVnVDApOwogICAgICAgICAgICAgICAgIGxvYWQzMihBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVy
LCBvZmZzZXQgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksIHJlZ1Qx
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkocmV2aXNpb24gMTMxNjYzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkod29ya2luZyBjb3B5KQpAQCAtNTkyLDYgKzU5
Miw5IEBAIG5hbWVzcGFjZSBKU0MgewogI2VuZGlmCiAKICNlbHNlIC8vIFVTRShKU1ZBTFVFMzJf
NjQpCisgICAgICAgIC8qIFRoaXMgZnVuY3Rpb24gaXMgZGVwcmVjYXRlZC4gKi8KKyAgICAgICAg
dm9pZCBlbWl0R2V0SklUU3R1YkFyZyh1bnNpZ25lZCBhcmd1bWVudE51bWJlciwgUmVnaXN0ZXJJ
RCBkc3QpOworCiAgICAgICAgIHZvaWQgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbnQgc3JjLCBS
ZWdpc3RlcklEIGRzdCk7CiAgICAgICAgIHZvaWQgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoaW50
IHNyYzEsIFJlZ2lzdGVySUQgZHN0MSwgaW50IHNyYzIsIFJlZ2lzdGVySUQgZHN0Mik7CiAgICAg
ICAgIHZvaWQgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcih1bnNpZ25lZCBkc3QsIFJlZ2lzdGVySUQg
ZnJvbSA9IHJlZ1QwKTsKQEAgLTgzNCw5ICs4MzcsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgdm9pZCBlbWl0UmlnaHRTaGlmdChJbnN0cnVjdGlvbiosIGJvb2wgaXNVbnNpZ25lZCk7CiAg
ICAgICAgIHZvaWQgZW1pdFJpZ2h0U2hpZnRTbG93Q2FzZShJbnN0cnVjdGlvbiosIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBib29sIGlzVW5zaWduZWQpOwogCi0gICAgICAgIC8q
IFRoaXMgZnVuY3Rpb24gaXMgZGVwcmVjYXRlZC4gKi8KLSAgICAgICAgdm9pZCBlbWl0R2V0SklU
U3R1YkFyZyh1bnNpZ25lZCBhcmd1bWVudE51bWJlciwgUmVnaXN0ZXJJRCBkc3QpOwotCiAgICAg
ICAgIHZvaWQgZW1pdEluaXRSZWdpc3Rlcih1bnNpZ25lZCBkc3QpOwogCiAgICAgICAgIHZvaWQg
ZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lzdGVySUQgZnJvbSwgSlNTdGFjazo6Q2FsbEZy
YW1lSGVhZGVyRW50cnkpOwpAQCAtODQ1LDYgKzg0NSw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICB2b2lkIGVtaXRQdXRJbW1lZGlhdGVUb0NhbGxGcmFtZUhlYWRlcih2b2lkKiB2YWx1ZSwg
SlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyRW50cnkpOwogICAgICAgICB2b2lkIGVtaXRHZXRGcm9t
Q2FsbEZyYW1lSGVhZGVyUHRyKEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlckVudHJ5LCBSZWdpc3Rl
cklEIHRvLCBSZWdpc3RlcklEIGZyb20gPSBjYWxsRnJhbWVSZWdpc3Rlcik7CiAgICAgICAgIHZv
aWQgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXIzMihKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJF
bnRyeSwgUmVnaXN0ZXJJRCB0bywgUmVnaXN0ZXJJRCBmcm9tID0gY2FsbEZyYW1lUmVnaXN0ZXIp
OworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIHZvaWQgZW1pdEdldEZyb21DYWxsRnJhbWVI
ZWFkZXI2NChKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJFbnRyeSwgUmVnaXN0ZXJJRCB0bywgUmVn
aXN0ZXJJRCBmcm9tID0gY2FsbEZyYW1lUmVnaXN0ZXIpOworI2VuZGlmCiAKICAgICAgICAgSlNW
YWx1ZSBnZXRDb25zdGFudE9wZXJhbmQodW5zaWduZWQgc3JjKTsKICAgICAgICAgYm9vbCBpc09w
ZXJhbmRDb25zdGFudEltbWVkaWF0ZUludCh1bnNpZ25lZCBzcmMpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCShyZXZpc2lvbiAxMzE2NjMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMDksOCArMjA5LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmVnYXRlKEluc3RydWN0
aW9uKiBjdQogICAgIHNyY05vdEludC5saW5rKHRoaXMpOwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEltbWVkaWF0ZU51bWJlcihyZWdUMCk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIocmVp
bnRlcnByZXRfY2FzdDx2b2lkKj4oMHg4MDAwMDAwMDAwMDAwMDAwdWxsKSksIHJlZ1QxKTsKLSAg
ICB4b3JQdHIocmVnVDEsIHJlZ1QwKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW02NCgoaW50NjRfdCkw
eDgwMDAwMDAwMDAwMDAwMDB1bGwpLCByZWdUMSk7CisgICAgeG9yNjQocmVnVDEsIHJlZ1QwKTsK
IAogICAgIGVuZC5saW5rKHRoaXMpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsK
QEAgLTIyNCw3ICsyMjQsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmVnYXRlKEluc3RydWN0
aW9uCiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBkb3VibGUgY2hlY2sKIAogICAgIEpJVFN0
dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9uZWdhdGUpOwotICAgIHN0dWJDYWxsLmFkZEFy
Z3VtZW50KHJlZ1QxLCByZWdUMCk7CisgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQocmVnVDApOwog
ICAgIHN0dWJDYWxsLmNhbGwoZHN0KTsKIH0KIApAQCAtMjc5LDggKzI3OSw4IEBAIHZvaWQgSklU
OjplbWl0X29wX3JzaGlmdChJbnN0cnVjdGlvbiogY3UKICAgICAgICAgICAgIEp1bXAgbGhzSXNJ
bnQgPSBlbWl0SnVtcElmSW1tZWRpYXRlSW50ZWdlcihyZWdUMCk7CiAgICAgICAgICAgICAvLyBz
dXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSAmJiBVU0UoSlNWQUxVRTY0KSA9PiAzIFNsb3dDYXNlcwog
ICAgICAgICAgICAgYWRkU2xvd0Nhc2UoZW1pdEp1bXBJZk5vdEltbWVkaWF0ZU51bWJlcihyZWdU
MCkpOwotICAgICAgICAgICAgYWRkUHRyKHRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgcmVnVDApOwot
ICAgICAgICAgICAgbW92ZVB0clRvRG91YmxlKHJlZ1QwLCBmcFJlZ1QwKTsKKyAgICAgICAgICAg
IGFkZDY0KHRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgcmVnVDApOworICAgICAgICAgICAgbW92ZTY0
VG9Eb3VibGUocmVnVDAsIGZwUmVnVDApOwogICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
VHJ1bmNhdGVEb3VibGVUb0ludDMyKGZwUmVnVDAsIHJlZ1QwKSk7CiAgICAgICAgICAgICBsaHNJ
c0ludC5saW5rKHRoaXMpOwogICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tZWRp
YXRlSW50ZWdlcihyZWdUMik7CkBAIC0zNzcsOCArMzc3LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93
X29wX3Vyc2hpZnQoSW5zdHJ1Y3RpbwogICAgICAgICBpZiAoc3VwcG9ydHNGbG9hdGluZ1BvaW50
VHJ1bmNhdGUoKSkgewogICAgICAgICAgICAgSnVtcExpc3QgZmFpbHVyZXM7CiAgICAgICAgICAg
ICBmYWlsdXJlcy5hcHBlbmQoZW1pdEp1bXBJZk5vdEltbWVkaWF0ZU51bWJlcihyZWdUMCkpOyAv
LyBvcDEgaXMgbm90IGEgZG91YmxlCi0gICAgICAgICAgICBhZGRQdHIodGFnVHlwZU51bWJlclJl
Z2lzdGVyLCByZWdUMCk7Ci0gICAgICAgICAgICBtb3ZlUHRyVG9Eb3VibGUocmVnVDAsIGZwUmVn
VDApOworICAgICAgICAgICAgYWRkNjQodGFnVHlwZU51bWJlclJlZ2lzdGVyLCByZWdUMCk7Cisg
ICAgICAgICAgICBtb3ZlNjRUb0RvdWJsZShyZWdUMCwgZnBSZWdUMCk7CiAgICAgICAgICAgICBm
YWlsdXJlcy5hcHBlbmQoYnJhbmNoVHJ1bmNhdGVEb3VibGVUb0ludDMyKGZwUmVnVDAsIHJlZ1Qw
KSk7CiAgICAgICAgICAgICBpZiAoc2hpZnQpCiAgICAgICAgICAgICAgICAgdXJzaGlmdDMyKElt
bTMyKHNoaWZ0ICYgMHgxZiksIHJlZ1QwKTsKQEAgLTM5OSw4ICszOTksOCBAQCB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfdXJzaGlmdChJbnN0cnVjdGlvCiAgICAgICAgICAgICBpZiAoc3VwcG9ydHNG
bG9hdGluZ1BvaW50VHJ1bmNhdGUoKSkgewogICAgICAgICAgICAgICAgIEp1bXBMaXN0IGZhaWx1
cmVzOwogICAgICAgICAgICAgICAgIGZhaWx1cmVzLmFwcGVuZChlbWl0SnVtcElmTm90SW1tZWRp
YXRlTnVtYmVyKHJlZ1QwKSk7IC8vIG9wMSBpcyBub3QgYSBkb3VibGUKLSAgICAgICAgICAgICAg
ICBhZGRQdHIodGFnVHlwZU51bWJlclJlZ2lzdGVyLCByZWdUMCk7Ci0gICAgICAgICAgICAgICAg
bW92ZVB0clRvRG91YmxlKHJlZ1QwLCBmcFJlZ1QwKTsKKyAgICAgICAgICAgICAgICBhZGQ2NCh0
YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHJlZ1QwKTsKKyAgICAgICAgICAgICAgICBtb3ZlNjRUb0Rv
dWJsZShyZWdUMCwgZnBSZWdUMCk7CiAgICAgICAgICAgICAgICAgZmFpbHVyZXMuYXBwZW5kKGJy
YW5jaFRydW5jYXRlRG91YmxlVG9JbnQzMihmcFJlZ1QwLCByZWdUMCkpOwogICAgICAgICAgICAg
ICAgIGZhaWx1cmVzLmFwcGVuZChlbWl0SnVtcElmTm90SW1tZWRpYXRlSW50ZWdlcihyZWdUMSkp
OyAvLyBvcDIgaXMgbm90IGFuIGludAogICAgICAgICAgICAgICAgIGVtaXRGYXN0QXJpdGhJbW1U
b0ludChyZWdUMSk7CkBAIC00OTksOCArNDk5LDggQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFu
ZEp1bXBTbG93KHVuc2lnbgogCiAgICAgICAgIGlmIChzdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSkg
ewogICAgICAgICAgICAgSnVtcCBmYWlsMSA9IGVtaXRKdW1wSWZOb3RJbW1lZGlhdGVOdW1iZXIo
cmVnVDApOwotICAgICAgICAgICAgYWRkUHRyKHRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgcmVnVDAp
OwotICAgICAgICAgICAgbW92ZVB0clRvRG91YmxlKHJlZ1QwLCBmcFJlZ1QwKTsKKyAgICAgICAg
ICAgIGFkZDY0KHRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgcmVnVDApOworICAgICAgICAgICAgbW92
ZTY0VG9Eb3VibGUocmVnVDAsIGZwUmVnVDApOwogCiAgICAgICAgICAgICBpbnQzMl90IG9wMmlt
bSA9IGdldENvbnN0YW50T3BlcmFuZChvcDIpLmFzSW50MzIoKTsKIApAQCAtNTI1LDggKzUyNSw4
IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyh1bnNpZ24KIAogICAgICAgICBp
ZiAoc3VwcG9ydHNGbG9hdGluZ1BvaW50KCkpIHsKICAgICAgICAgICAgIEp1bXAgZmFpbDEgPSBl
bWl0SnVtcElmTm90SW1tZWRpYXRlTnVtYmVyKHJlZ1QxKTsKLSAgICAgICAgICAgIGFkZFB0cih0
YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHJlZ1QxKTsKLSAgICAgICAgICAgIG1vdmVQdHJUb0RvdWJs
ZShyZWdUMSwgZnBSZWdUMSk7CisgICAgICAgICAgICBhZGQ2NCh0YWdUeXBlTnVtYmVyUmVnaXN0
ZXIsIHJlZ1QxKTsKKyAgICAgICAgICAgIG1vdmU2NFRvRG91YmxlKHJlZ1QxLCBmcFJlZ1QxKTsK
IAogICAgICAgICAgICAgaW50MzJfdCBvcDFpbW0gPSBnZXRDb25zdGFudE9wZXJhbmQob3AxKS5h
c0ludDMyKCk7CiAKQEAgLTU1MiwxMCArNTUyLDEwIEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVB
bmRKdW1wU2xvdyh1bnNpZ24KICAgICAgICAgICAgIEp1bXAgZmFpbDEgPSBlbWl0SnVtcElmTm90
SW1tZWRpYXRlTnVtYmVyKHJlZ1QwKTsKICAgICAgICAgICAgIEp1bXAgZmFpbDIgPSBlbWl0SnVt
cElmTm90SW1tZWRpYXRlTnVtYmVyKHJlZ1QxKTsKICAgICAgICAgICAgIEp1bXAgZmFpbDMgPSBl
bWl0SnVtcElmSW1tZWRpYXRlSW50ZWdlcihyZWdUMSk7Ci0gICAgICAgICAgICBhZGRQdHIodGFn
VHlwZU51bWJlclJlZ2lzdGVyLCByZWdUMCk7Ci0gICAgICAgICAgICBhZGRQdHIodGFnVHlwZU51
bWJlclJlZ2lzdGVyLCByZWdUMSk7Ci0gICAgICAgICAgICBtb3ZlUHRyVG9Eb3VibGUocmVnVDAs
IGZwUmVnVDApOwotICAgICAgICAgICAgbW92ZVB0clRvRG91YmxlKHJlZ1QxLCBmcFJlZ1QxKTsK
KyAgICAgICAgICAgIGFkZDY0KHRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgcmVnVDApOworICAgICAg
ICAgICAgYWRkNjQodGFnVHlwZU51bWJlclJlZ2lzdGVyLCByZWdUMSk7CisgICAgICAgICAgICBt
b3ZlNjRUb0RvdWJsZShyZWdUMCwgZnBSZWdUMCk7CisgICAgICAgICAgICBtb3ZlNjRUb0RvdWJs
ZShyZWdUMSwgZnBSZWdUMSk7CiAKICAgICAgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5j
aERvdWJsZShjb25kaXRpb24sIGZwUmVnVDAsIGZwUmVnVDEpLCB0YXJnZXQpOwogCkBAIC01ODUs
MTkgKzU4NSwxOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9iaXRhbmQoSW5zdHJ1Y3Rpb24qIGN1CiAg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByZWdUMCk7CiAgICAgICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEltbWVkaWF0ZUludGVnZXIocmVnVDApOwogICAgICAgICBpbnQzMl90
IGltbSA9IGdldENvbnN0YW50T3BlcmFuZEltbWVkaWF0ZUludChvcDEpOwotICAgICAgICBhbmRQ
dHIoSW1tMzIoaW1tKSwgcmVnVDApOworICAgICAgICBhbmQ2NChJbW0zMihpbW0pLCByZWdUMCk7
CiAgICAgICAgIGlmIChpbW0gPj0gMCkKICAgICAgICAgICAgIGVtaXRGYXN0QXJpdGhJbnRUb0lt
bU5vQ2hlY2socmVnVDAsIHJlZ1QwKTsKICAgICB9IGVsc2UgaWYgKGlzT3BlcmFuZENvbnN0YW50
SW1tZWRpYXRlSW50KG9wMikpIHsKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEs
IHJlZ1QwKTsKICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tZWRpYXRlSW50ZWdlcihy
ZWdUMCk7CiAgICAgICAgIGludDMyX3QgaW1tID0gZ2V0Q29uc3RhbnRPcGVyYW5kSW1tZWRpYXRl
SW50KG9wMik7Ci0gICAgICAgIGFuZFB0cihJbW0zMihpbW0pLCByZWdUMCk7CisgICAgICAgIGFu
ZDY0KEltbTMyKGltbSksIHJlZ1QwKTsKICAgICAgICAgaWYgKGltbSA+PSAwKQogICAgICAgICAg
ICAgZW1pdEZhc3RBcml0aEludFRvSW1tTm9DaGVjayhyZWdUMCwgcmVnVDApOwogICAgIH0gZWxz
ZSB7CiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKG9wMSwgcmVnVDAsIG9wMiwgcmVn
VDEpOwotICAgICAgICBhbmRQdHIocmVnVDEsIHJlZ1QwKTsKKyAgICAgICAgYW5kNjQocmVnVDEs
IHJlZ1QwKTsKICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tZWRpYXRlSW50ZWdlcihy
ZWdUMCk7CiAgICAgfQogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0KTsKQEAgLTg4
NywxNiArODg3LDE2IEBAIHZvaWQgSklUOjpjb21waWxlQmluYXJ5QXJpdGhPcFNsb3dDYXNlKE8K
ICAgICAgICAgICAgIGVtaXRKdW1wSWZOb3RJbW1lZGlhdGVOdW1iZXIocmVnVDApLmxpbmtUbyhz
dHViRnVuY3Rpb25DYWxsLCB0aGlzKTsKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihv
cDEsIHJlZ1QxKTsKICAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUocmVnVDEsIGZwUmVnVDEp
OwotICAgICAgICBhZGRQdHIodGFnVHlwZU51bWJlclJlZ2lzdGVyLCByZWdUMCk7Ci0gICAgICAg
IG1vdmVQdHJUb0RvdWJsZShyZWdUMCwgZnBSZWdUMik7CisgICAgICAgIGFkZDY0KHRhZ1R5cGVO
dW1iZXJSZWdpc3RlciwgcmVnVDApOworICAgICAgICBtb3ZlNjRUb0RvdWJsZShyZWdUMCwgZnBS
ZWdUMik7CiAgICAgfSBlbHNlIGlmIChvcDJIYXNJbW1lZGlhdGVJbnRGYXN0Q2FzZSkgewogICAg
ICAgICBub3RJbW0xLmxpbmsodGhpcyk7CiAgICAgICAgIGlmICghdHlwZXMuZmlyc3QoKS5kZWZp
bml0ZWx5SXNOdW1iZXIoKSkKICAgICAgICAgICAgIGVtaXRKdW1wSWZOb3RJbW1lZGlhdGVOdW1i
ZXIocmVnVDApLmxpbmtUbyhzdHViRnVuY3Rpb25DYWxsLCB0aGlzKTsKICAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihvcDIsIHJlZ1QxKTsKICAgICAgICAgY29udmVydEludDMyVG9Eb3Vi
bGUocmVnVDEsIGZwUmVnVDEpOwotICAgICAgICBhZGRQdHIodGFnVHlwZU51bWJlclJlZ2lzdGVy
LCByZWdUMCk7Ci0gICAgICAgIG1vdmVQdHJUb0RvdWJsZShyZWdUMCwgZnBSZWdUMik7CisgICAg
ICAgIGFkZDY0KHRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgcmVnVDApOworICAgICAgICBtb3ZlNjRU
b0RvdWJsZShyZWdUMCwgZnBSZWdUMik7CiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gaWYgd2Ug
Z2V0IGhlcmUsIGVheCBpcyBub3QgYW4gaW50MzIsIGVkeCBub3QgeWV0IGNoZWNrZWQuCiAgICAg
ICAgIG5vdEltbTEubGluayh0aGlzKTsKQEAgLTkwNCw4ICs5MDQsOCBAQCB2b2lkIEpJVDo6Y29t
cGlsZUJpbmFyeUFyaXRoT3BTbG93Q2FzZShPCiAgICAgICAgICAgICBlbWl0SnVtcElmTm90SW1t
ZWRpYXRlTnVtYmVyKHJlZ1QwKS5saW5rVG8oc3R1YkZ1bmN0aW9uQ2FsbCwgdGhpcyk7CiAgICAg
ICAgIGlmICghdHlwZXMuc2Vjb25kKCkuZGVmaW5pdGVseUlzTnVtYmVyKCkpCiAgICAgICAgICAg
ICBlbWl0SnVtcElmTm90SW1tZWRpYXRlTnVtYmVyKHJlZ1QxKS5saW5rVG8oc3R1YkZ1bmN0aW9u
Q2FsbCwgdGhpcyk7Ci0gICAgICAgIGFkZFB0cih0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHJlZ1Qw
KTsKLSAgICAgICAgbW92ZVB0clRvRG91YmxlKHJlZ1QwLCBmcFJlZ1QxKTsKKyAgICAgICAgYWRk
NjQodGFnVHlwZU51bWJlclJlZ2lzdGVyLCByZWdUMCk7CisgICAgICAgIG1vdmU2NFRvRG91Ymxl
KHJlZ1QwLCBmcFJlZ1QxKTsKICAgICAgICAgSnVtcCBvcDJpc0RvdWJsZSA9IGVtaXRKdW1wSWZO
b3RJbW1lZGlhdGVJbnRlZ2VyKHJlZ1QxKTsKICAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUo
cmVnVDEsIGZwUmVnVDIpOwogICAgICAgICBKdW1wIG9wMndhc0ludGVnZXIgPSBqdW1wKCk7CkBA
IC05MTYsOCArOTE2LDggQEAgdm9pZCBKSVQ6OmNvbXBpbGVCaW5hcnlBcml0aE9wU2xvd0Nhc2Uo
TwogICAgICAgICAgICAgZW1pdEp1bXBJZk5vdEltbWVkaWF0ZU51bWJlcihyZWdUMSkubGlua1Rv
KHN0dWJGdW5jdGlvbkNhbGwsIHRoaXMpOwogICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShy
ZWdUMCwgZnBSZWdUMSk7CiAgICAgICAgIG9wMmlzRG91YmxlLmxpbmsodGhpcyk7Ci0gICAgICAg
IGFkZFB0cih0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHJlZ1QxKTsKLSAgICAgICAgbW92ZVB0clRv
RG91YmxlKHJlZ1QxLCBmcFJlZ1QyKTsKKyAgICAgICAgYWRkNjQodGFnVHlwZU51bWJlclJlZ2lz
dGVyLCByZWdUMSk7CisgICAgICAgIG1vdmU2NFRvRG91YmxlKHJlZ1QxLCBmcFJlZ1QyKTsKICAg
ICAgICAgb3Ayd2FzSW50ZWdlci5saW5rKHRoaXMpOwogICAgIH0KIApAQCAtOTMxLDggKzkzMSw4
IEBAIHZvaWQgSklUOjpjb21waWxlQmluYXJ5QXJpdGhPcFNsb3dDYXNlKE8KICAgICAgICAgQVNT
RVJUKG9wY29kZUlEID09IG9wX2Rpdik7CiAgICAgICAgIGRpdkRvdWJsZShmcFJlZ1QyLCBmcFJl
Z1QxKTsKICAgICB9Ci0gICAgbW92ZURvdWJsZVRvUHRyKGZwUmVnVDEsIHJlZ1QwKTsKLSAgICBz
dWJQdHIodGFnVHlwZU51bWJlclJlZ2lzdGVyLCByZWdUMCk7CisgICAgbW92ZURvdWJsZVRvNjQo
ZnBSZWdUMSwgcmVnVDApOworICAgIHN1YjY0KHRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgcmVnVDAp
OwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZWdUMCk7CiAKICAgICBlbmQu
bGluayh0aGlzKTsKQEAgLTEwNDEsOCArMTA0MSw4IEBAIHZvaWQgSklUOjplbWl0X29wX2RpdihJ
bnN0cnVjdGlvbiogY3VycmUKIAogICAgIGlmIChpc09wZXJhbmRDb25zdGFudEltbWVkaWF0ZURv
dWJsZShvcDEpKSB7CiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByZWdUMCk7
Ci0gICAgICAgIGFkZFB0cih0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHJlZ1QwKTsKLSAgICAgICAg
bW92ZVB0clRvRG91YmxlKHJlZ1QwLCBmcFJlZ1QwKTsKKyAgICAgICAgYWRkNjQodGFnVHlwZU51
bWJlclJlZ2lzdGVyLCByZWdUMCk7CisgICAgICAgIG1vdmU2NFRvRG91YmxlKHJlZ1QwLCBmcFJl
Z1QwKTsKICAgICB9IGVsc2UgaWYgKGlzT3BlcmFuZENvbnN0YW50SW1tZWRpYXRlSW50KG9wMSkp
IHsKICAgICAgICAgZW1pdExvYWRJbnQzMlRvRG91YmxlKG9wMSwgZnBSZWdUMCk7CiAgICAgfSBl
bHNlIHsKQEAgLTEwNTMsMTUgKzEwNTMsMTUgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGl2KEluc3Ry
dWN0aW9uKiBjdXJyZQogICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShyZWdUMCwgZnBSZWdU
MCk7CiAgICAgICAgIEp1bXAgc2tpcERvdWJsZUxvYWQgPSBqdW1wKCk7CiAgICAgICAgIG5vdElu
dC5saW5rKHRoaXMpOwotICAgICAgICBhZGRQdHIodGFnVHlwZU51bWJlclJlZ2lzdGVyLCByZWdU
MCk7Ci0gICAgICAgIG1vdmVQdHJUb0RvdWJsZShyZWdUMCwgZnBSZWdUMCk7CisgICAgICAgIGFk
ZDY0KHRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgcmVnVDApOworICAgICAgICBtb3ZlNjRUb0RvdWJs
ZShyZWdUMCwgZnBSZWdUMCk7CiAgICAgICAgIHNraXBEb3VibGVMb2FkLmxpbmsodGhpcyk7CiAg
ICAgfQogCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW1tZWRpYXRlRG91YmxlKG9wMikpIHsK
ICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJlZ1QxKTsKLSAgICAgICAgYWRk
UHRyKHRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgcmVnVDEpOwotICAgICAgICBtb3ZlUHRyVG9Eb3Vi
bGUocmVnVDEsIGZwUmVnVDEpOworICAgICAgICBhZGQ2NCh0YWdUeXBlTnVtYmVyUmVnaXN0ZXIs
IHJlZ1QxKTsKKyAgICAgICAgbW92ZTY0VG9Eb3VibGUocmVnVDEsIGZwUmVnVDEpOwogICAgIH0g
ZWxzZSBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbW1lZGlhdGVJbnQob3AyKSkgewogICAgICAgICBl
bWl0TG9hZEludDMyVG9Eb3VibGUob3AyLCBmcFJlZ1QxKTsKICAgICB9IGVsc2UgewpAQCAtMTA3
Miw4ICsxMDcyLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGl2KEluc3RydWN0aW9uKiBjdXJyZQog
ICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShyZWdUMSwgZnBSZWdUMSk7CiAgICAgICAgIEp1
bXAgc2tpcERvdWJsZUxvYWQgPSBqdW1wKCk7CiAgICAgICAgIG5vdEludC5saW5rKHRoaXMpOwot
ICAgICAgICBhZGRQdHIodGFnVHlwZU51bWJlclJlZ2lzdGVyLCByZWdUMSk7Ci0gICAgICAgIG1v
dmVQdHJUb0RvdWJsZShyZWdUMSwgZnBSZWdUMSk7CisgICAgICAgIGFkZDY0KHRhZ1R5cGVOdW1i
ZXJSZWdpc3RlciwgcmVnVDEpOworICAgICAgICBtb3ZlNjRUb0RvdWJsZShyZWdUMSwgZnBSZWdU
MSk7CiAgICAgICAgIHNraXBEb3VibGVMb2FkLmxpbmsodGhpcyk7CiAgICAgfQogICAgIGRpdkRv
dWJsZShmcFJlZ1QxLCBmcFJlZ1QwKTsKQEAgLTExMDAsMTMgKzExMDAsMTMgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfZGl2KEluc3RydWN0aW9uKiBjdXJyZQogICAgIEp1bXAgaXNJbnRlZ2VyID0ganVt
cCgpOwogICAgIG5vdEludGVnZXIubGluayh0aGlzKTsKICAgICBhZGQzMihUcnVzdGVkSW1tMzIo
MSksIEFic29sdXRlQWRkcmVzcygmbV9jb2RlQmxvY2stPmFkZFNwZWNpYWxGYXN0Q2FzZVByb2Zp
bGUobV9ieXRlY29kZU9mZnNldCktPm1fY291bnRlcikpOwotICAgIG1vdmVEb3VibGVUb1B0cihm
cFJlZ1QwLCByZWdUMCk7Ci0gICAgc3ViUHRyKHRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgcmVnVDAp
OworICAgIG1vdmVEb3VibGVUbzY0KGZwUmVnVDAsIHJlZ1QwKTsKKyAgICBzdWI2NCh0YWdUeXBl
TnVtYmVyUmVnaXN0ZXIsIHJlZ1QwKTsKICAgICBpc0ludGVnZXIubGluayh0aGlzKTsKICNlbHNl
CiAgICAgLy8gRG91YmxlIHJlc3VsdC4KLSAgICBtb3ZlRG91YmxlVG9QdHIoZnBSZWdUMCwgcmVn
VDApOwotICAgIHN1YlB0cih0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHJlZ1QwKTsKKyAgICBtb3Zl
RG91YmxlVG82NChmcFJlZ1QwLCByZWdUMCk7CisgICAgc3ViNjQodGFnVHlwZU51bWJlclJlZ2lz
dGVyLCByZWdUMCk7CiAjZW5kaWYKIAogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBy
ZWdUMCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAJKHJldmlzaW9u
IDEzMTY2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTcyLDcgKzcyLDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVMb2FkVmFyYXJncyhJ
bnN0cnVjdGlvbgogCiAgICAgaWYgKGNhbk9wdGltaXplKSB7CiAgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYXJndW1lbnRzLCByZWdUMCk7Ci0gICAgICAgIHNsb3dDYXNlLmFwcGVuZChi
cmFuY2hQdHIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tUHRyKEpTVmFsdWU6OmVuY29kZShK
U1ZhbHVlKCkpKSkpOworICAgICAgICBzbG93Q2FzZS5hcHBlbmQoYnJhbmNoNjQoTm90RXF1YWws
IHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSkpKSk7CiAKICAg
ICAgICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXIzMihKU1N0YWNrOjpBcmd1bWVudENvdW50
LCByZWdUMCk7CiAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChicmFuY2gzMihBYm92ZSwgcmVnVDAs
IFRydXN0ZWRJbW0zMihBcmd1bWVudHM6Ok1heEFyZ3VtZW50cyArIDEpKSk7CkBAIC05MSwxOCAr
OTEsMTggQEAgdm9pZCBKSVQ6OmNvbXBpbGVMb2FkVmFyYXJncyhJbnN0cnVjdGlvbgogCiAgICAg
ICAgIC8vIEluaXRpYWxpemUgJ3RoaXMnLgogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHRoaXNWYWx1ZSwgcmVnVDIpOwotICAgICAgICBzdG9yZVB0cihyZWdUMiwgQWRkcmVzcyhyZWdU
MSwgQ2FsbEZyYW1lOjp0aGlzQXJndW1lbnRPZmZzZXQoKSAqIHN0YXRpY19jYXN0PGludD4oc2l6
ZW9mKFJlZ2lzdGVyKSkpKTsKKyAgICAgICAgc3RvcmU2NChyZWdUMiwgQWRkcmVzcyhyZWdUMSwg
Q2FsbEZyYW1lOjp0aGlzQXJndW1lbnRPZmZzZXQoKSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9m
KFJlZ2lzdGVyKSkpKTsKIAogICAgICAgICAvLyBDb3B5IGFyZ3VtZW50cy4KICAgICAgICAgbmVn
MzIocmVnVDApOwogICAgICAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMCwgcmVnVDApOwotICAg
ICAgICBlbmQuYXBwZW5kKGJyYW5jaEFkZFB0cihaZXJvLCBUcnVzdGVkSW1tMzIoMSksIHJlZ1Qw
KSk7CisgICAgICAgIGVuZC5hcHBlbmQoYnJhbmNoQWRkNjQoWmVybywgVHJ1c3RlZEltbTMyKDEp
LCByZWdUMCkpOwogICAgICAgICAvLyByZWdUMDogLWFyZ3VtZW50Q291bnQKIAogICAgICAgICBM
YWJlbCBjb3B5TG9vcCA9IGxhYmVsKCk7Ci0gICAgICAgIGxvYWRQdHIoQmFzZUluZGV4KGNhbGxG
cmFtZVJlZ2lzdGVyLCByZWdUMCwgVGltZXNFaWdodCwgQ2FsbEZyYW1lOjp0aGlzQXJndW1lbnRP
ZmZzZXQoKSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkpLCByZWdUMik7Ci0g
ICAgICAgIHN0b3JlUHRyKHJlZ1QyLCBCYXNlSW5kZXgocmVnVDEsIHJlZ1QwLCBUaW1lc0VpZ2h0
LCBDYWxsRnJhbWU6OnRoaXNBcmd1bWVudE9mZnNldCgpICogc3RhdGljX2Nhc3Q8aW50PihzaXpl
b2YoUmVnaXN0ZXIpKSkpOwotICAgICAgICBicmFuY2hBZGRQdHIoTm9uWmVybywgVHJ1c3RlZElt
bTMyKDEpLCByZWdUMCkubGlua1RvKGNvcHlMb29wLCB0aGlzKTsKKyAgICAgICAgbG9hZDY0KEJh
c2VJbmRleChjYWxsRnJhbWVSZWdpc3RlciwgcmVnVDAsIFRpbWVzRWlnaHQsIENhbGxGcmFtZTo6
dGhpc0FyZ3VtZW50T2Zmc2V0KCkgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3Rlcikp
KSwgcmVnVDIpOworICAgICAgICBzdG9yZTY0KHJlZ1QyLCBCYXNlSW5kZXgocmVnVDEsIHJlZ1Qw
LCBUaW1lc0VpZ2h0LCBDYWxsRnJhbWU6OnRoaXNBcmd1bWVudE9mZnNldCgpICogc3RhdGljX2Nh
c3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSkpOworICAgICAgICBicmFuY2hBZGQ2NChOb25aZXJv
LCBUcnVzdGVkSW1tMzIoMSksIHJlZ1QwKS5saW5rVG8oY29weUxvb3AsIHRoaXMpOwogCiAgICAg
ICAgIGVuZC5hcHBlbmQoanVtcCgpKTsKICAgICB9CkBAIC0xMjQsNyArMTI0LDcgQEAgdm9pZCBK
SVQ6OmNvbXBpbGVDYWxsRXZhbCgpCiB7CiAgICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywg
Y3RpX29wX2NhbGxfZXZhbCk7IC8vIEluaXRpYWxpemVzIFNjb3BlQ2hhaW47IFJldHVyblBDOyBD
b2RlQmxvY2suCiAgICAgc3R1YkNhbGwuY2FsbCgpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaFB0
cihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSkp
KSk7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQo
SlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSkpKSk7CiAgICAgZW1pdEdldEZyb21DYWxsRnJhbWVI
ZWFkZXJQdHIoSlNTdGFjazo6Q2FsbGVyRnJhbWUsIGNhbGxGcmFtZVJlZ2lzdGVyKTsKIAogICAg
IHNhbXBsZUNvZGVCbG9jayhtX2NvZGVCbG9jayk7CkBAIC0xMzQsNyArMTM0LDcgQEAgdm9pZCBK
SVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKFZlY3RvcgogewogICAgIGxpbmtTbG93Q2FzZShp
dGVyKTsKIAotICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKEpTU3RhY2s6OkNhbGxl
ZSwgcmVnVDApOworICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyNjQoSlNTdGFjazo6Q2Fs
bGVlLCByZWdUMCk7CiAgICAgZW1pdE5ha2VkQ2FsbChtX2dsb2JhbERhdGEtPmppdFN0dWJzLT5j
dGlWaXJ0dWFsQ2FsbCgpKTsKIAogICAgIHNhbXBsZUNvZGVCbG9jayhtX2NvZGVCbG9jayk7CkBA
IC0xNzksOCArMTc5LDggQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoT3Bjb2RlSUQgb3Bjb2Rl
SQogICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKGluc3RydWN0aW9uIC0gbV9jb2RlQmxvY2stPmlu
c3RydWN0aW9ucygpLmJlZ2luKCkpLCBBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCBKU1N0YWNr
OjpBcmd1bWVudENvdW50ICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSArIE9C
SkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSkpOwogICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY2FsbGVlLCByZWdUMCk7IC8vIHJlZ1QwIGhvbGRzIGNh
bGxlZS4KIAotICAgIHN0b3JlUHRyKGNhbGxGcmFtZVJlZ2lzdGVyLCBBZGRyZXNzKHJlZ1QxLCBK
U1N0YWNrOjpDYWxsZXJGcmFtZSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkp
KTsKLSAgICBzdG9yZVB0cihyZWdUMCwgQWRkcmVzcyhyZWdUMSwgSlNTdGFjazo6Q2FsbGVlICog
c3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSkpOworICAgIHN0b3JlNjQoY2FsbEZy
YW1lUmVnaXN0ZXIsIEFkZHJlc3MocmVnVDEsIEpTU3RhY2s6OkNhbGxlckZyYW1lICogc3RhdGlj
X2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSkpOworICAgIHN0b3JlNjQocmVnVDAsIEFkZHJl
c3MocmVnVDEsIEpTU3RhY2s6OkNhbGxlZSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lz
dGVyKSkpKTsKICAgICBtb3ZlKHJlZ1QxLCBjYWxsRnJhbWVSZWdpc3Rlcik7CiAKICAgICBpZiAo
b3Bjb2RlSUQgPT0gb3BfY2FsbF9ldmFsKSB7CkBAIC0xOTAsNyArMTkwLDcgQEAgdm9pZCBKSVQ6
OmNvbXBpbGVPcENhbGwoT3Bjb2RlSUQgb3Bjb2RlSQogCiAgICAgRGF0YUxhYmVsUHRyIGFkZHJl
c3NPZkxpbmtlZEZ1bmN0aW9uQ2hlY2s7CiAgICAgQkVHSU5fVU5JTlRFUlJVUFRFRF9TRVFVRU5D
RShzZXF1ZW5jZU9wQ2FsbCk7Ci0gICAgSnVtcCBzbG93Q2FzZSA9IGJyYW5jaFB0cldpdGhQYXRj
aChOb3RFcXVhbCwgcmVnVDAsIGFkZHJlc3NPZkxpbmtlZEZ1bmN0aW9uQ2hlY2ssIFRydXN0ZWRJ
bW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSkpKTsKKyAgICBKdW1wIHNsb3dDYXNlID0g
YnJhbmNoUHRyV2l0aFBhdGNoKE5vdEVxdWFsLCByZWdUMCwgYWRkcmVzc09mTGlua2VkRnVuY3Rp
b25DaGVjaywgVHJ1c3RlZEltbVB0cigwKSk7CiAgICAgRU5EX1VOSU5URVJSVVBURURfU0VRVUVO
Q0Uoc2VxdWVuY2VPcENhbGwpOwogICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlKTsKIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVNZXRob2RzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVNZXRob2RzLmgJKHJldmlzaW9u
IDEzMTY2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lTWV0aG9kcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxNCArMzEsNiBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAot
LyogRGVwcmVjYXRlZDogUGxlYXNlIHVzZSBKSVRTdHViQ2FsbCBpbnN0ZWFkLiAqLwotCi1BTFdB
WVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0SklUU3R1YkFyZyh1bnNpZ25lZCBhcmd1bWVudE51
bWJlciwgUmVnaXN0ZXJJRCBkc3QpCi17Ci0gICAgdW5zaWduZWQgYXJndW1lbnRTdGFja09mZnNl
dCA9IChhcmd1bWVudE51bWJlciAqIChzaXplb2YoSlNWYWx1ZSkgLyBzaXplb2Yodm9pZCopKSkg
KyBKSVRTVEFDS0ZSQU1FX0FSR1NfSU5ERVg7Ci0gICAgcGVlayhkc3QsIGFyZ3VtZW50U3RhY2tP
ZmZzZXQpOwotfQotCiBBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudElt
bWVkaWF0ZURvdWJsZSh1bnNpZ25lZCBzcmMpCiB7CiAgICAgcmV0dXJuIG1fY29kZUJsb2NrLT5p
c0NvbnN0YW50UmVnaXN0ZXJJbmRleChzcmMpICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlz
RG91YmxlKCk7CkBAIC01MCwyMyArNDIsMzMgQEAgQUxXQVlTX0lOTElORSBKU1ZhbHVlIEpJVDo6
Z2V0Q29uc3RhbnRPcAogICAgIHJldHVybiBtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsK
IH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKFJl
Z2lzdGVySUQgZnJvbSwgSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyRW50cnkgZW50cnkpCi17Ci0g
ICAgc3RvcmVQdHIoZnJvbSwgcGF5bG9hZEZvcihlbnRyeSwgY2FsbEZyYW1lUmVnaXN0ZXIpKTsK
LX0KLQogQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdFB1dENlbGxUb0NhbGxGcmFtZUhlYWRl
cihSZWdpc3RlcklEIGZyb20sIEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlckVudHJ5IGVudHJ5KQog
ewogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoSlNWYWx1
ZTo6Q2VsbFRhZyksIHRhZ0ZvcihlbnRyeSwgY2FsbEZyYW1lUmVnaXN0ZXIpKTsKKyAgICBzdG9y
ZTMyKGZyb20sIHBheWxvYWRGb3IoZW50cnksIGNhbGxGcmFtZVJlZ2lzdGVyKSk7CisjZWxzZQor
ICAgIHN0b3JlNjQoZnJvbSwgYWRkcmVzc0ZvcihlbnRyeSwgY2FsbEZyYW1lUmVnaXN0ZXIpKTsK
ICNlbmRpZgotICAgIHN0b3JlUHRyKGZyb20sIHBheWxvYWRGb3IoZW50cnksIGNhbGxGcmFtZVJl
Z2lzdGVyKSk7CiB9CiAKIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRJbnRUb0NhbGxG
cmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlckVudHJ5
IGVudHJ5KQogeworI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgc3RvcmUzMihUcnVzdGVkSW1t
MzIoSW50MzJUYWcpLCBpbnRUYWdGb3IoZW50cnksIGNhbGxGcmFtZVJlZ2lzdGVyKSk7CiAgICAg
c3RvcmUzMihmcm9tLCBpbnRQYXlsb2FkRm9yKGVudHJ5LCBjYWxsRnJhbWVSZWdpc3RlcikpOwor
I2Vsc2UKKyAgICBzdG9yZTY0KGZyb20sIGFkZHJlc3NGb3IoZW50cnksIGNhbGxGcmFtZVJlZ2lz
dGVyKSk7CisjZW5kaWYKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdFB1dFRvQ2Fs
bEZyYW1lSGVhZGVyKFJlZ2lzdGVySUQgZnJvbSwgSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyRW50
cnkgZW50cnkpCit7CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICBzdG9yZVB0cihmcm9tLCBw
YXlsb2FkRm9yKGVudHJ5LCBjYWxsRnJhbWVSZWdpc3RlcikpOworI2Vsc2UKKyAgICBzdG9yZTY0
KGZyb20sIGFkZHJlc3NGb3IoZW50cnksIGNhbGxGcmFtZVJlZ2lzdGVyKSk7CisjZW5kaWYKIH0K
IAogQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdFB1dEltbWVkaWF0ZVRvQ2FsbEZyYW1lSGVh
ZGVyKHZvaWQqIHZhbHVlLCBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJFbnRyeSBlbnRyeSkKQEAg
LTgyLDYgKzg0LDIyIEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRGcm9tQ2FsbEYK
ICNlbmRpZgogfQogCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0RnJvbUNhbGxGcmFt
ZUhlYWRlcjMyKEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlckVudHJ5IGVudHJ5LCBSZWdpc3RlcklE
IHRvLCBSZWdpc3RlcklEIGZyb20pCit7CisgICAgbG9hZDMyKEFkZHJlc3MoZnJvbSwgZW50cnkg
KiBzaXplb2YoUmVnaXN0ZXIpKSwgdG8pOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAga2lsbExh
c3RSZXN1bHRSZWdpc3RlcigpOworI2VuZGlmCit9CisKKyNpZiBVU0UoSlNWQUxVRTY0KQorQUxX
QVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXI2NChKU1N0YWNr
OjpDYWxsRnJhbWVIZWFkZXJFbnRyeSBlbnRyeSwgUmVnaXN0ZXJJRCB0bywgUmVnaXN0ZXJJRCBm
cm9tKQoreworICAgIGxvYWQ2NChBZGRyZXNzKGZyb20sIGVudHJ5ICogc2l6ZW9mKFJlZ2lzdGVy
KSksIHRvKTsKKyAgICBraWxsTGFzdFJlc3VsdFJlZ2lzdGVyKCk7Cit9CisjZW5kaWYKKwogQUxX
QVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdExvYWRDaGFyYWN0ZXJTdHJpbmcoUmVnaXN0ZXJJRCBz
cmMsIFJlZ2lzdGVySUQgZHN0LCBKdW1wTGlzdCYgZmFpbHVyZXMpCiB7CiAgICAgZmFpbHVyZXMu
YXBwZW5kKGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhzcmMsIEpTQ2VsbDo6c3RydWN0dXJl
T2Zmc2V0KCkpLCBUcnVzdGVkSW1tUHRyKG1fZ2xvYmFsRGF0YS0+c3RyaW5nU3RydWN0dXJlLmdl
dCgpKSkpOwpAQCAtMTAxLDE0ICsxMTksNiBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0
TG9hZENoYXJhY3RlCiAgICAgY29udDhCaXQubGluayh0aGlzKTsKIH0KIAotQUxXQVlTX0lOTElO
RSB2b2lkIEpJVDo6ZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXIzMihKU1N0YWNrOjpDYWxsRnJh
bWVIZWFkZXJFbnRyeSBlbnRyeSwgUmVnaXN0ZXJJRCB0bywgUmVnaXN0ZXJJRCBmcm9tKQotewot
ICAgIGxvYWQzMihBZGRyZXNzKGZyb20sIGVudHJ5ICogc2l6ZW9mKFJlZ2lzdGVyKSksIHRvKTsK
LSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGtpbGxMYXN0UmVzdWx0UmVnaXN0ZXIoKTsKLSNlbmRp
ZgotfQotCiBBTFdBWVNfSU5MSU5FIEpJVDo6Q2FsbCBKSVQ6OmVtaXROYWtlZENhbGwoQ29kZVB0
ciBmdW5jdGlvbikKIHsKICAgICBBU1NFUlQobV9ieXRlY29kZU9mZnNldCAhPSAodW5zaWduZWQp
LTEpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xk
IHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlT2Zmc2V0IGlzIHNldC4KQEAgLTQ3
Myw4ICs0ODMsOCBAQCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRBbGxvY2F0ZUpTQXJyYXkodW5zCiAg
ICAgLy8gU3RvcmUgdGhlIHZhbHVlcyB3ZSBoYXZlLgogICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBsZW5ndGg7IGkrKykgewogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIGxvYWRQdHIo
QWRkcmVzcyhjYWxsRnJhbWVSZWdpc3RlciwgKHZhbHVlc1JlZ2lzdGVyICsgaSkgKiBzaXplb2Yo
UmVnaXN0ZXIpKSwgc3RvcmFnZVB0cik7Ci0gICAgICAgIHN0b3JlUHRyKHN0b3JhZ2VQdHIsIEFk
ZHJlc3Moc3RvcmFnZVJlc3VsdCwgc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikgKiBpKSk7
CisgICAgICAgIGxvYWQ2NChBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCAodmFsdWVzUmVnaXN0
ZXIgKyBpKSAqIHNpemVvZihSZWdpc3RlcikpLCBzdG9yYWdlUHRyKTsKKyAgICAgICAgc3RvcmU2
NChzdG9yYWdlUHRyLCBBZGRyZXNzKHN0b3JhZ2VSZXN1bHQsIHNpemVvZihXcml0ZUJhcnJpZXI8
VW5rbm93bj4pICogaSkpOwogI2Vsc2UKICAgICAgICAgbG9hZDMyKEFkZHJlc3MoY2FsbEZyYW1l
UmVnaXN0ZXIsICh2YWx1ZXNSZWdpc3RlciArIGkpICogc2l6ZW9mKFJlZ2lzdGVyKSksIHN0b3Jh
Z2VQdHIpOwogICAgICAgICBzdG9yZTMyKHN0b3JhZ2VQdHIsIEFkZHJlc3Moc3RvcmFnZVJlc3Vs
dCwgc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikgKiBpKSk7CkBAIC01MDAsNyArNTEwLDcg
QEAgaW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKAogICAgICAgICAvLyBX
ZSdyZSBpbiBhIHNpbXBsZSBjb25maWd1cmF0aW9uOiBvbmx5IG9uZSBidWNrZXQsIHNvIHdlIGNh
biBqdXN0IGRvIGEgZGlyZWN0CiAgICAgICAgIC8vIHN0b3JlLgogI2lmIFVTRShKU1ZBTFVFNjQp
Ci0gICAgICAgIHN0b3JlUHRyKHZhbHVlLCB2YWx1ZVByb2ZpbGUtPm1fYnVja2V0cyk7CisgICAg
ICAgIHN0b3JlNjQodmFsdWUsIHZhbHVlUHJvZmlsZS0+bV9idWNrZXRzKTsKICNlbHNlCiAgICAg
ICAgIEVuY29kZWRWYWx1ZURlc2NyaXB0b3IqIGRlc2NyaXB0b3IgPSBiaXR3aXNlX2Nhc3Q8RW5j
b2RlZFZhbHVlRGVzY3JpcHRvcio+KHZhbHVlUHJvZmlsZS0+bV9idWNrZXRzKTsKICAgICAgICAg
c3RvcmUzMih2YWx1ZSwgJmRlc2NyaXB0b3ItPmFzQml0cy5wYXlsb2FkKTsKQEAgLTUxNiw3ICs1
MjYsNyBAQCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoCiAgICAgYW5k
MzIoVHJ1c3RlZEltbTMyKFZhbHVlUHJvZmlsZTo6YnVja2V0SW5kZXhNYXNrKSwgYnVja2V0Q291
bnRlclJlZ2lzdGVyKTsKICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIodmFsdWVQcm9maWxlLT5tX2J1
Y2tldHMpLCBzY3JhdGNoKTsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIHN0b3JlUHRyKHZhbHVl
LCBCYXNlSW5kZXgoc2NyYXRjaCwgYnVja2V0Q291bnRlclJlZ2lzdGVyLCBUaW1lc0VpZ2h0KSk7
CisgICAgc3RvcmU2NCh2YWx1ZSwgQmFzZUluZGV4KHNjcmF0Y2gsIGJ1Y2tldENvdW50ZXJSZWdp
c3RlciwgVGltZXNFaWdodCkpOwogI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKICAgICBzdG9yZTMy
KHZhbHVlLCBCYXNlSW5kZXgoc2NyYXRjaCwgYnVja2V0Q291bnRlclJlZ2lzdGVyLCBUaW1lc0Vp
Z2h0LCBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpKTsKICAgICBz
dG9yZTMyKHZhbHVlVGFnLCBCYXNlSW5kZXgoc2NyYXRjaCwgYnVja2V0Q291bnRlclJlZ2lzdGVy
LCBUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSkpOwpA
QCAtODYwLDYgKzg3MCwxNCBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjpnZXRPcGVyYW5kQ29u
c3RhCiAKICNlbHNlIC8vIFVTRShKU1ZBTFVFMzJfNjQpCiAKKy8qIERlcHJlY2F0ZWQ6IFBsZWFz
ZSB1c2UgSklUU3R1YkNhbGwgaW5zdGVhZC4gKi8KKworQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6
ZW1pdEdldEpJVFN0dWJBcmcodW5zaWduZWQgYXJndW1lbnROdW1iZXIsIFJlZ2lzdGVySUQgZHN0
KQoreworICAgIHVuc2lnbmVkIGFyZ3VtZW50U3RhY2tPZmZzZXQgPSAoYXJndW1lbnROdW1iZXIg
KiAoc2l6ZW9mKEpTVmFsdWUpIC8gc2l6ZW9mKHZvaWQqKSkpICsgSklUU1RBQ0tGUkFNRV9BUkdT
X0lOREVYOworICAgIHBlZWs2NChkc3QsIGFyZ3VtZW50U3RhY2tPZmZzZXQpOworfQorCiBBTFdB
WVNfSU5MSU5FIHZvaWQgSklUOjpraWxsTGFzdFJlc3VsdFJlZ2lzdGVyKCkKIHsKICAgICBtX2xh
c3RSZXN1bHRCeXRlY29kZVJlZ2lzdGVyID0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgo
KTsKQEAgLTg3NCw5ICs4OTIsOSBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0Vmly
dHVhbFJlCiAgICAgaWYgKG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChzcmMp
KSB7CiAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3Jj
KTsKICAgICAgICAgaWYgKCF2YWx1ZS5pc051bWJlcigpKQotICAgICAgICAgICAgbW92ZShUcnVz
dGVkSW1tUHRyKEpTVmFsdWU6OmVuY29kZSh2YWx1ZSkpLCBkc3QpOworICAgICAgICAgICAgbW92
ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKSksIGRzdCk7CiAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgIG1vdmUoSW1tUHRyKEpTVmFsdWU6OmVuY29kZSh2YWx1ZSkpLCBkc3Qp
OworICAgICAgICAgICAgbW92ZShJbW02NChKU1ZhbHVlOjplbmNvZGUodmFsdWUpKSwgZHN0KTsK
ICAgICAgICAga2lsbExhc3RSZXN1bHRSZWdpc3RlcigpOwogICAgICAgICByZXR1cm47CiAgICAg
fQpAQCAtODg5LDcgKzkwNyw3IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0
dWFsUmUKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGxvYWRQdHIoQWRkcmVzcyhjYWxs
RnJhbWVSZWdpc3Rlciwgc3JjICogc2l6ZW9mKFJlZ2lzdGVyKSksIGRzdCk7CisgICAgbG9hZDY0
KEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIHNyYyAqIHNpemVvZihSZWdpc3RlcikpLCBkc3Qp
OwogICAgIGtpbGxMYXN0UmVzdWx0UmVnaXN0ZXIoKTsKIH0KIApAQCAtOTE2LDI4ICs5MzQsMjQg
QEAgQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbgogCiBBTFdBWVNfSU5M
SU5FIHZvaWQgSklUOjplbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHVuc2lnbmVkIGRzdCwgUmVnaXN0
ZXJJRCBmcm9tKQogewotICAgIHN0b3JlUHRyKGZyb20sIEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0
ZXIsIGRzdCAqIHNpemVvZihSZWdpc3RlcikpKTsKKyAgICBzdG9yZTY0KGZyb20sIEFkZHJlc3Mo
Y2FsbEZyYW1lUmVnaXN0ZXIsIGRzdCAqIHNpemVvZihSZWdpc3RlcikpKTsKICAgICBtX2xhc3RS
ZXN1bHRCeXRlY29kZVJlZ2lzdGVyID0gKGZyb20gPT0gY2FjaGVkUmVzdWx0UmVnaXN0ZXIpID8g
c3RhdGljX2Nhc3Q8aW50Pihkc3QpIDogc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKTsK
IH0KIAogQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEluaXRSZWdpc3Rlcih1bnNpZ25lZCBk
c3QpCiB7Ci0gICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSkpLCBBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCBkc3QgKiBzaXplb2YoUmVnaXN0
ZXIpKSk7CisgICAgc3RvcmU2NChUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpKSwgQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3RlciwgZHN0ICogc2l6ZW9mKFJlZ2lzdGVy
KSkpOwogfQogCiBBTFdBWVNfSU5MSU5FIEpJVDo6SnVtcCBKSVQ6OmVtaXRKdW1wSWZKU0NlbGwo
UmVnaXN0ZXJJRCByZWcpCiB7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICByZXR1cm4gYnJhbmNo
VGVzdFB0cihaZXJvLCByZWcsIHRhZ01hc2tSZWdpc3Rlcik7Ci0jZWxzZQotICAgIHJldHVybiBi
cmFuY2hUZXN0MzIoWmVybywgcmVnLCBUcnVzdGVkSW1tMzIoVGFnTWFzaykpOwotI2VuZGlmCisg
ICAgcmV0dXJuIGJyYW5jaFRlc3Q2NChaZXJvLCByZWcsIHRhZ01hc2tSZWdpc3Rlcik7CiB9CiAK
IEFMV0FZU19JTkxJTkUgSklUOjpKdW1wIEpJVDo6ZW1pdEp1bXBJZkJvdGhKU0NlbGxzKFJlZ2lz
dGVySUQgcmVnMSwgUmVnaXN0ZXJJRCByZWcyLCBSZWdpc3RlcklEIHNjcmF0Y2gpCiB7CiAgICAg
bW92ZShyZWcxLCBzY3JhdGNoKTsKLSAgICBvclB0cihyZWcyLCBzY3JhdGNoKTsKKyAgICBvcjY0
KHJlZzIsIHNjcmF0Y2gpOwogICAgIHJldHVybiBlbWl0SnVtcElmSlNDZWxsKHNjcmF0Y2gpOwog
fQogCkBAIC05NDgsMTEgKzk2Miw3IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRKdW1w
U2xvd0Nhc2UKIAogQUxXQVlTX0lOTElORSBKSVQ6Okp1bXAgSklUOjplbWl0SnVtcElmTm90SlND
ZWxsKFJlZ2lzdGVySUQgcmVnKQogewotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgcmV0dXJuIGJy
YW5jaFRlc3RQdHIoTm9uWmVybywgcmVnLCB0YWdNYXNrUmVnaXN0ZXIpOwotI2Vsc2UKLSAgICBy
ZXR1cm4gYnJhbmNoVGVzdDMyKE5vblplcm8sIHJlZywgVHJ1c3RlZEltbTMyKFRhZ01hc2spKTsK
LSNlbmRpZgorICAgIHJldHVybiBicmFuY2hUZXN0NjQoTm9uWmVybywgcmVnLCB0YWdNYXNrUmVn
aXN0ZXIpOwogfQogCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwoUmVnaXN0ZXJJRCByZWcpCkBAIC05NjYsOCArOTc2LDYgQEAgQUxXQVlTX0lOTElO
RSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZQogICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwocmVnKTsKIH0KIAotI2lmIFVTRShKU1ZBTFVFNjQpCi0KIGlubGluZSB2b2lkIEpJ
VDo6ZW1pdExvYWREb3VibGUoaW50IGluZGV4LCBGUFJlZ2lzdGVySUQgdmFsdWUpCiB7CiAgICAg
aWYgKG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChpbmRleCkpIHsKQEAgLTk4
NSwzMCArOTkzLDIxIEBAIGlubGluZSB2b2lkIEpJVDo6ZW1pdExvYWRJbnQzMlRvRG91YmxlKGkK
ICAgICB9IGVsc2UKICAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUoYWRkcmVzc0ZvcihpbmRl
eCksIHZhbHVlKTsKIH0KLSNlbmRpZgogCiBBTFdBWVNfSU5MSU5FIEpJVDo6SnVtcCBKSVQ6OmVt
aXRKdW1wSWZJbW1lZGlhdGVJbnRlZ2VyKFJlZ2lzdGVySUQgcmVnKQogewotI2lmIFVTRShKU1ZB
TFVFNjQpCi0gICAgcmV0dXJuIGJyYW5jaFB0cihBYm92ZU9yRXF1YWwsIHJlZywgdGFnVHlwZU51
bWJlclJlZ2lzdGVyKTsKLSNlbHNlCi0gICAgcmV0dXJuIGJyYW5jaFRlc3QzMihOb25aZXJvLCBy
ZWcsIFRydXN0ZWRJbW0zMihUYWdUeXBlTnVtYmVyKSk7Ci0jZW5kaWYKKyAgICByZXR1cm4gYnJh
bmNoNjQoQWJvdmVPckVxdWFsLCByZWcsIHRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7CiB9CiAKIEFM
V0FZU19JTkxJTkUgSklUOjpKdW1wIEpJVDo6ZW1pdEp1bXBJZk5vdEltbWVkaWF0ZUludGVnZXIo
UmVnaXN0ZXJJRCByZWcpCiB7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICByZXR1cm4gYnJhbmNo
UHRyKEJlbG93LCByZWcsIHRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7Ci0jZWxzZQotICAgIHJldHVy
biBicmFuY2hUZXN0MzIoWmVybywgcmVnLCBUcnVzdGVkSW1tMzIoVGFnVHlwZU51bWJlcikpOwot
I2VuZGlmCisgICAgcmV0dXJuIGJyYW5jaDY0KEJlbG93LCByZWcsIHRhZ1R5cGVOdW1iZXJSZWdp
c3Rlcik7CiB9CiAKIEFMV0FZU19JTkxJTkUgSklUOjpKdW1wIEpJVDo6ZW1pdEp1bXBJZk5vdElt
bWVkaWF0ZUludGVnZXJzKFJlZ2lzdGVySUQgcmVnMSwgUmVnaXN0ZXJJRCByZWcyLCBSZWdpc3Rl
cklEIHNjcmF0Y2gpCiB7CiAgICAgbW92ZShyZWcxLCBzY3JhdGNoKTsKLSAgICBhbmRQdHIocmVn
Miwgc2NyYXRjaCk7CisgICAgYW5kNjQocmVnMiwgc2NyYXRjaCk7CiAgICAgcmV0dXJuIGVtaXRK
dW1wSWZOb3RJbW1lZGlhdGVJbnRlZ2VyKHNjcmF0Y2gpOwogfQogCkBAIC0xMDI3LDQxICsxMDI2
LDE3IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2UKICAgICBhZGRT
bG93Q2FzZShlbWl0SnVtcElmTm90SW1tZWRpYXRlTnVtYmVyKHJlZykpOwogfQogCi0jaWYgVVNF
KEpTVkFMVUUzMl82NCkKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRGYXN0QXJpdGhEZVRh
Z0ltbWVkaWF0ZShSZWdpc3RlcklEIHJlZykKLXsKLSAgICBzdWJQdHIoVHJ1c3RlZEltbTMyKFRh
Z1R5cGVOdW1iZXIpLCByZWcpOwotfQotCi1BTFdBWVNfSU5MSU5FIEpJVDo6SnVtcCBKSVQ6OmVt
aXRGYXN0QXJpdGhEZVRhZ0ltbWVkaWF0ZUp1bXBJZlplcm8oUmVnaXN0ZXJJRCByZWcpCi17Ci0g
ICAgcmV0dXJuIGJyYW5jaFN1YlB0cihaZXJvLCBUcnVzdGVkSW1tMzIoVGFnVHlwZU51bWJlciks
IHJlZyk7Ci19Ci0jZW5kaWYKLQogQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEZhc3RBcml0
aFJlVGFnSW1tZWRpYXRlKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCiB7Ci0jaWYg
VVNFKEpTVkFMVUU2NCkKICAgICBlbWl0RmFzdEFyaXRoSW50VG9JbW1Ob0NoZWNrKHNyYywgZGVz
dCk7Ci0jZWxzZQotICAgIGlmIChzcmMgIT0gZGVzdCkKLSAgICAgICAgbW92ZShzcmMsIGRlc3Qp
OwotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoVGFnVHlwZU51bWJlciksIGRlc3QpOwotI2VuZGlm
CiB9CiAKIC8vIG9wZXJhbmQgaXMgaW50MzJfdCwgbXVzdCBoYXZlIGJlZW4gemVyby1leHRlbmRl
ZCBpZiByZWdpc3RlciBpcyA2NC1iaXQuCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0RmFz
dEFyaXRoSW50VG9JbW1Ob0NoZWNrKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCiB7
Ci0jaWYgVVNFKEpTVkFMVUU2NCkKICAgICBpZiAoc3JjICE9IGRlc3QpCiAgICAgICAgIG1vdmUo
c3JjLCBkZXN0KTsKLSAgICBvclB0cih0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIGRlc3QpOwotI2Vs
c2UKLSAgICBzaWduRXh0ZW5kMzJUb1B0cihzcmMsIGRlc3QpOwotICAgIGFkZFB0cihkZXN0LCBk
ZXN0KTsKLSAgICBlbWl0RmFzdEFyaXRoUmVUYWdJbW1lZGlhdGUoZGVzdCwgZGVzdCk7Ci0jZW5k
aWYKKyAgICBvcjY0KHRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgZGVzdCk7CiB9CiAKIEFMV0FZU19J
TkxJTkUgdm9pZCBKSVQ6OmVtaXRUYWdBc0Jvb2xJbW1lZGlhdGUoUmVnaXN0ZXJJRCByZWcpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHJldmlzaW9uIDEz
MTY2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI0OCwxNCArMjQ4LDE0IEBAIEpJVDo6TGFiZWwgSklUOjpwcml2YXRlQ29t
cGlsZUNUSU5hdGl2ZUMKICAgICAvLyBIb3N0IGZ1bmN0aW9uIHNpZ25hdHVyZTogZihFeGVjU3Rh
dGUqKTsKICAgICBtb3ZlKGNhbGxGcmFtZVJlZ2lzdGVyLCBYODZSZWdpc3RlcnM6OmVkaSk7CiAK
LSAgICBzdWJQdHIoVHJ1c3RlZEltbTMyKDE2IC0gc2l6ZW9mKHZvaWQqKSksIHN0YWNrUG9pbnRl
clJlZ2lzdGVyKTsgLy8gQWxpZ24gc3RhY2sgYWZ0ZXIgY2FsbC4KKyAgICBzdWJQdHIoVHJ1c3Rl
ZEltbTMyKDE2IC0gc2l6ZW9mKGludDY0X3QpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOyAvLyBB
bGlnbiBzdGFjayBhZnRlciBjYWxsLgogCiAgICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQ
dHIoSlNTdGFjazo6Q2FsbGVlLCBYODZSZWdpc3RlcnM6OmVzaSk7CiAgICAgbG9hZFB0cihBZGRy
ZXNzKFg4NlJlZ2lzdGVyczo6ZXNpLCBPQkpFQ1RfT0ZGU0VUT0YoSlNGdW5jdGlvbiwgbV9leGVj
dXRhYmxlKSksIFg4NlJlZ2lzdGVyczo6cjkpOwogICAgIG1vdmUocmVnVDAsIGNhbGxGcmFtZVJl
Z2lzdGVyKTsgLy8gRWFnZXJseSByZXN0b3JlIGNhbGxlciBmcmFtZSByZWdpc3RlciB0byBhdm9p
ZCBsb2FkaW5nIGZyb20gc3RhY2suCiAgICAgY2FsbChBZGRyZXNzKFg4NlJlZ2lzdGVyczo6cjks
IGV4ZWN1dGFibGVPZmZzZXRUb0Z1bmN0aW9uKSk7CiAKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMy
KDE2IC0gc2l6ZW9mKHZvaWQqKSksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBhZGRQdHIo
VHJ1c3RlZEltbTMyKDE2IC0gc2l6ZW9mKGludDY0X3QpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIp
OwogCiAjZWxpZiBDUFUoQVJNKQogICAgIC8vIExvYWQgY2FsbGVyIGZyYW1lJ3Mgc2NvcGUgY2hh
aW4gaW50byB0aGlzIGNhbGxmcmFtZSBzbyB0aGF0IHdoYXRldmVyIHdlIGNhbGwgY2FuCkBAIC0z
MTYsOCArMzE2LDggQEAgSklUOjpMYWJlbCBKSVQ6OnByaXZhdGVDb21waWxlQ1RJTmF0aXZlQwog
I2VuZGlmCiAKICAgICAvLyBDaGVjayBmb3IgYW4gZXhjZXB0aW9uCi0gICAgbG9hZFB0cigmKGds
b2JhbERhdGEtPmV4Y2VwdGlvbiksIHJlZ1QyKTsKLSAgICBKdW1wIGV4Y2VwdGlvbkhhbmRsZXIg
PSBicmFuY2hUZXN0UHRyKE5vblplcm8sIHJlZ1QyKTsKKyAgICBsb2FkNjQoJihnbG9iYWxEYXRh
LT5leGNlcHRpb24pLCByZWdUMik7CisgICAgSnVtcCBleGNlcHRpb25IYW5kbGVyID0gYnJhbmNo
VGVzdDY0KE5vblplcm8sIHJlZ1QyKTsKIAogICAgIC8vIFJldHVybi4KICAgICByZXQoKTsKQEAg
LTM2MCw5ICszNjAsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9tb3YoSW5zdHJ1Y3Rpb24qIGN1cnJl
CiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0
ZXJJbmRleChzcmMpKSB7CiAgICAgICAgICAgICBpZiAoIWdldENvbnN0YW50T3BlcmFuZChzcmMp
LmlzTnVtYmVyKCkpCi0gICAgICAgICAgICAgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihKU1Zh
bHVlOjplbmNvZGUoZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykpKSwgQWRkcmVzcyhjYWxsRnJhbWVS
ZWdpc3RlciwgZHN0ICogc2l6ZW9mKFJlZ2lzdGVyKSkpOworICAgICAgICAgICAgICAgIHN0b3Jl
NjQoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShnZXRDb25zdGFudE9wZXJhbmQoc3JjKSkp
LCBBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCBkc3QgKiBzaXplb2YoUmVnaXN0ZXIpKSk7CiAg
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgc3RvcmVQdHIoSW1tUHRyKEpTVmFsdWU6
OmVuY29kZShnZXRDb25zdGFudE9wZXJhbmQoc3JjKSkpLCBBZGRyZXNzKGNhbGxGcmFtZVJlZ2lz
dGVyLCBkc3QgKiBzaXplb2YoUmVnaXN0ZXIpKSk7CisgICAgICAgICAgICAgICAgc3RvcmU2NChJ
bW02NChKU1ZhbHVlOjplbmNvZGUoZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykpKSwgQWRkcmVzcyhj
YWxsRnJhbWVSZWdpc3RlciwgZHN0ICogc2l6ZW9mKFJlZ2lzdGVyKSkpOwogICAgICAgICAgICAg
aWYgKGRzdCA9PSBtX2xhc3RSZXN1bHRCeXRlY29kZVJlZ2lzdGVyKQogICAgICAgICAgICAgICAg
IGtpbGxMYXN0UmVzdWx0UmVnaXN0ZXIoKTsKICAgICAgICAgfSBlbHNlIGlmICgoc3JjID09IG1f
bGFzdFJlc3VsdEJ5dGVjb2RlUmVnaXN0ZXIpIHx8IChkc3QgPT0gbV9sYXN0UmVzdWx0Qnl0ZWNv
ZGVSZWdpc3RlcikpIHsKQEAgLTM3Miw4ICszNzIsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9tb3Yo
SW5zdHJ1Y3Rpb24qIGN1cnJlCiAgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBQZXJmb3JtIHRoZSBjb3B5IHZp
YSByZWdUMTsgZG8gbm90IGRpc3R1cmIgYW55IG1hcHBpbmcgaW4gcmVnVDAuCi0gICAgICAgICAg
ICBsb2FkUHRyKEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIHNyYyAqIHNpemVvZihSZWdpc3Rl
cikpLCByZWdUMSk7Ci0gICAgICAgICAgICBzdG9yZVB0cihyZWdUMSwgQWRkcmVzcyhjYWxsRnJh
bWVSZWdpc3RlciwgZHN0ICogc2l6ZW9mKFJlZ2lzdGVyKSkpOworICAgICAgICAgICAgbG9hZDY0
KEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIHNyYyAqIHNpemVvZihSZWdpc3RlcikpLCByZWdU
MSk7CisgICAgICAgICAgICBzdG9yZTY0KHJlZ1QxLCBBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVy
LCBkc3QgKiBzaXplb2YoUmVnaXN0ZXIpKSk7CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC00NDEs
MTggKzQ0MSwxOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mKEluc3RydWN0aW9uCiAg
ICAgLy8gT3B0aW1pc3RpY2FsbHkgbG9hZCB0aGUgcmVzdWx0IHRydWUsIGFuZCBzdGFydCBsb29w
aW5nLgogICAgIC8vIEluaXRpYWxseSwgcmVnVDEgc3RpbGwgY29udGFpbnMgcHJvdG8gYW5kIHJl
Z1QyIHN0aWxsIGNvbnRhaW5zIHZhbHVlLgogICAgIC8vIEFzIHdlIGxvb3AgcmVnVDIgd2lsbCBi
ZSB1cGRhdGVkIHdpdGggaXRzIHByb3RvdHlwZSwgcmVjdXJzaXZlbHkgd2Fsa2luZyB0aGUgcHJv
dG90eXBlIGNoYWluLgotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihKU1ZhbHVlOjplbmNvZGUoanNC
b29sZWFuKHRydWUpKSksIHJlZ1QwKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpl
bmNvZGUoanNCb29sZWFuKHRydWUpKSksIHJlZ1QwKTsKICAgICBMYWJlbCBsb29wKHRoaXMpOwog
CiAgICAgLy8gTG9hZCB0aGUgcHJvdG90eXBlIG9mIHRoZSBvYmplY3QgaW4gcmVnVDIuICBJZiB0
aGlzIGlzIGVxdWFsIHRvIHJlZ1QxIC0gV0lOIQogICAgIC8vIE90aGVyd2lzZSwgY2hlY2sgaWYg
d2UndmUgaGl0IG51bGwgLSBpZiB3ZSBoYXZlIHRoZW4gZHJvcCBvdXQgb2YgdGhlIGxvb3AsIGlm
IG5vdCBnbyBhZ2Fpbi4KICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIEpTQ2VsbDo6c3RydWN0
dXJlT2Zmc2V0KCkpLCByZWdUMik7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1
cmU6OnByb3RvdHlwZU9mZnNldCgpKSwgcmVnVDIpOworICAgIGxvYWQ2NChBZGRyZXNzKHJlZ1Qy
LCBTdHJ1Y3R1cmU6OnByb3RvdHlwZU9mZnNldCgpKSwgcmVnVDIpOwogICAgIEp1bXAgaXNJbnN0
YW5jZSA9IGJyYW5jaFB0cihFcXVhbCwgcmVnVDIsIHJlZ1QxKTsKICAgICBlbWl0SnVtcElmSlND
ZWxsKHJlZ1QyKS5saW5rVG8obG9vcCwgdGhpcyk7CiAKICAgICAvLyBXZSBnZXQgaGVyZSBlaXRo
ZXIgYnkgZHJvcHBpbmcgb3V0IG9mIHRoZSBsb29wLCBvciBpZiB2YWx1ZSB3YXMgbm90IGFuIE9i
amVjdC4gIFJlc3VsdCBpcyBmYWxzZS4KLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoSlNWYWx1ZTo6
ZW5jb2RlKGpzQm9vbGVhbihmYWxzZSkpKSwgcmVnVDApOworICAgIG1vdmUoVHJ1c3RlZEltbTY0
KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oZmFsc2UpKSksIHJlZ1QwKTsKIAogICAgIC8vIGlz
SW5zdGFuY2UganVtcHMgcmlnaHQgZG93biB0byBoZXJlLCB0byBza2lwIHNldHRpbmcgdGhlIHJl
c3VsdCB0byBmYWxzZSAoaXQgaGFzIGFscmVhZHkgc2V0IHRydWUpLgogICAgIGlzSW5zdGFuY2Uu
bGluayh0aGlzKTsKQEAgLTQ2Nyw3ICs0NjcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc191bmRl
ZmluZWQoSW5zdHJ1Y3RpCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDAp
OwogICAgIEp1bXAgaXNDZWxsID0gZW1pdEp1bXBJZkpTQ2VsbChyZWdUMCk7CiAKLSAgICBjb21w
YXJlUHRyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKFZhbHVlVW5kZWZpbmVkKSwgcmVnVDAp
OworICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihWYWx1ZVVuZGVmaW5l
ZCksIHJlZ1QwKTsKICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAgICAgCiAgICAgaXNDZWxsLmxp
bmsodGhpcyk7CkBAIC00OTMsOCArNDkzLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfYm9vbGVh
bihJbnN0cnVjdGlvbgogICAgIHVuc2lnbmVkIHZhbHVlID0gY3VycmVudEluc3RydWN0aW9uWzJd
LnUub3BlcmFuZDsKICAgICAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdU
MCk7Ci0gICAgeG9yUHRyKFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90PihWYWx1ZUZh
bHNlKSksIHJlZ1QwKTsKLSAgICB0ZXN0UHRyKFplcm8sIHJlZ1QwLCBUcnVzdGVkSW1tMzIoc3Rh
dGljX2Nhc3Q8aW50MzJfdD4ofjEpKSwgcmVnVDApOworICAgIHhvcjY0KFRydXN0ZWRJbW0zMihz
dGF0aWNfY2FzdDxpbnQzMl90PihWYWx1ZUZhbHNlKSksIHJlZ1QwKTsKKyAgICB0ZXN0NjQoWmVy
bywgcmVnVDAsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpLCByZWdUMCk7
CiAgICAgZW1pdFRhZ0FzQm9vbEltbWVkaWF0ZShyZWdUMCk7CiAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QpOwogfQpAQCAtNTA1LDcgKzUwNSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2lz
X251bWJlcihJbnN0cnVjdGlvbioKICAgICB1bnNpZ25lZCB2YWx1ZSA9IGN1cnJlbnRJbnN0cnVj
dGlvblsyXS51Lm9wZXJhbmQ7CiAgICAgCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1
ZSwgcmVnVDApOwotICAgIHRlc3RQdHIoTm9uWmVybywgcmVnVDAsIHRhZ1R5cGVOdW1iZXJSZWdp
c3RlciwgcmVnVDApOworICAgIHRlc3Q2NChOb25aZXJvLCByZWdUMCwgdGFnVHlwZU51bWJlclJl
Z2lzdGVyLCByZWdUMCk7CiAgICAgZW1pdFRhZ0FzQm9vbEltbWVkaWF0ZShyZWdUMCk7CiAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQpAQCAtNTUzLDcgKzU1Myw3IEBAIHZvaWQg
SklUOjplbWl0X29wX2NvbnN0cnVjdChJbnN0cnVjdGlvbioKIHZvaWQgSklUOjplbWl0X29wX3Rl
YXJfb2ZmX2FjdGl2YXRpb24oSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAg
ICBpbnQgYWN0aXZhdGlvbiA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAg
SnVtcCBhY3RpdmF0aW9uTm90Q3JlYXRlZCA9IGJyYW5jaFRlc3RQdHIoWmVybywgYWRkcmVzc0Zv
cihhY3RpdmF0aW9uKSk7CisgICAgSnVtcCBhY3RpdmF0aW9uTm90Q3JlYXRlZCA9IGJyYW5jaFRl
c3Q2NChaZXJvLCBhZGRyZXNzRm9yKGFjdGl2YXRpb24pKTsKICAgICBKSVRTdHViQ2FsbCBzdHVi
Q2FsbCh0aGlzLCBjdGlfb3BfdGVhcl9vZmZfYWN0aXZhdGlvbik7CiAgICAgc3R1YkNhbGwuYWRk
QXJndW1lbnQoYWN0aXZhdGlvbiwgcmVnVDIpOwogICAgIHN0dWJDYWxsLmNhbGwoKTsKQEAgLTY3
MCw5ICs2NzAsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9ub3QoSW5zdHJ1Y3Rpb24qIGN1cnJlCiAg
ICAgLy8gSW52ZXJ0IGFnYWluc3QgSlNWYWx1ZShmYWxzZSk7IGlmIHRoZSB2YWx1ZSB3YXMgdGFn
Z2VkIGFzIGEgYm9vbGVhbiwgdGhlbiBhbGwgYml0cyB3aWxsIGJlCiAgICAgLy8gY2xlYXIgb3Ro
ZXIgdGhhbiB0aGUgbG93IGJpdCAod2hpY2ggd2lsbCBiZSAwIG9yIDEgZm9yIGZhbHNlIG9yIHRy
dWUgaW5wdXRzIHJlc3BlY3RpdmVseSkuCiAgICAgLy8gVGhlbiBpbnZlcnQgYWdhaW5zdCBKU1Zh
bHVlKHRydWUpLCB3aGljaCB3aWxsIGFkZCB0aGUgdGFnIGJhY2sgaW4sIGFuZCBmbGlwIHRoZSBs
b3cgYml0LgotICAgIHhvclB0cihUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oVmFs
dWVGYWxzZSkpLCByZWdUMCk7CisgICAgeG9yNjQoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGlu
dDMyX3Q+KFZhbHVlRmFsc2UpKSwgcmVnVDApOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQ
dHIoTm9uWmVybywgcmVnVDAsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkp
KSk7Ci0gICAgeG9yUHRyKFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90PihWYWx1ZVRy
dWUpKSwgcmVnVDApOworICAgIHhvcjY0KFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90
PihWYWx1ZVRydWUpKSwgcmVnVDApOwogCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihjdXJy
ZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKIH0KQEAgLTY4MiwxMSArNjgyLDExIEBAIHZv
aWQgSklUOjplbWl0X29wX2pmYWxzZShJbnN0cnVjdGlvbiogY3UKICAgICB1bnNpZ25lZCB0YXJn
ZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwogICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgcmVnVDApOwogCi0gICAg
YWRkSnVtcChicmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tUHRyKEpTVmFsdWU6OmVu
Y29kZShqc051bWJlcigwKSkpKSwgdGFyZ2V0KTsKKyAgICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFs
LCByZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bWJlcigwKSkpKSwgdGFy
Z2V0KTsKICAgICBKdW1wIGlzTm9uWmVybyA9IGVtaXRKdW1wSWZJbW1lZGlhdGVJbnRlZ2VyKHJl
Z1QwKTsKIAotICAgIGFkZEp1bXAoYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0
cihKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGZhbHNlKSkpKSwgdGFyZ2V0KTsKLSAgICBhZGRT
bG93Q2FzZShicmFuY2hQdHIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tUHRyKEpTVmFsdWU6
OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkpKSkpOworICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1YWws
IHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihmYWxzZSkpKSks
IHRhcmdldCk7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoNjQoTm90RXF1YWwsIHJlZ1QwLCBUcnVz
dGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSkpKSk7CiAKICAgICBpc05v
blplcm8ubGluayh0aGlzKTsKIH0KQEAgLTcwOCw4ICs3MDgsOCBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9qZXFfbnVsbChJbnN0cnVjdGlvbioKIAogICAgIC8vIE5vdyBoYW5kbGUgdGhlIGltbWVkaWF0
ZSBjYXNlcyAtIHVuZGVmaW5lZCAmIG51bGwKICAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOwot
ICAgIGFuZFB0cihUcnVzdGVkSW1tMzIoflRhZ0JpdFVuZGVmaW5lZCksIHJlZ1QwKTsKLSAgICBh
ZGRKdW1wKGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW1QdHIoSlNWYWx1ZTo6ZW5j
b2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOyAgICAgICAgICAgIAorICAgIGFuZDY0KFRydXN0ZWRJ
bW0zMih+VGFnQml0VW5kZWZpbmVkKSwgcmVnVDApOworICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1
YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJn
ZXQpOyAgICAgICAgICAgIAogCiAgICAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmso
dGhpcyk7CiAgICAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24ubGluayh0aGlzKTsK
QEAgLTczMSw4ICs3MzEsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX251bGwoSW5zdHJ1Y3Rp
b24qCiAKICAgICAvLyBOb3cgaGFuZGxlIHRoZSBpbW1lZGlhdGUgY2FzZXMgLSB1bmRlZmluZWQg
JiBudWxsCiAgICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsKLSAgICBhbmRQdHIoVHJ1c3RlZElt
bTMyKH5UYWdCaXRVbmRlZmluZWQpLCByZWdUMCk7Ci0gICAgYWRkSnVtcChicmFuY2hQdHIoTm90
RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tUHRyKEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwg
dGFyZ2V0KTsgICAgICAgICAgICAKKyAgICBhbmQ2NChUcnVzdGVkSW1tMzIoflRhZ0JpdFVuZGVm
aW5lZCksIHJlZ1QwKTsKKyAgICBhZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFsLCByZWdUMCwgVHJ1
c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsgICAgICAgICAg
ICAKIAogICAgIHdhc05vdEltbWVkaWF0ZS5saW5rKHRoaXMpOwogfQpAQCAtNzYxLDExICs3NjEs
MTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfanRydWUoSW5zdHJ1Y3Rpb24qIGN1cgogICAgIHVuc2ln
bmVkIHRhcmdldCA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CiAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCByZWdUMCk7
CiAKLSAgICBKdW1wIGlzWmVybyA9IGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW1Q
dHIoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKDApKSkpOworICAgIEp1bXAgaXNaZXJvID0gYnJh
bmNoNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVy
KDApKSkpOwogICAgIGFkZEp1bXAoZW1pdEp1bXBJZkltbWVkaWF0ZUludGVnZXIocmVnVDApLCB0
YXJnZXQpOwogCi0gICAgYWRkSnVtcChicmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1t
UHRyKEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkpKSksIHRhcmdldCk7Ci0gICAgYWRk
U2xvd0Nhc2UoYnJhbmNoUHRyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0cihKU1ZhbHVl
OjplbmNvZGUoanNCb29sZWFuKGZhbHNlKSkpKSk7CisgICAgYWRkSnVtcChicmFuY2g2NChFcXVh
bCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRydWUpKSkp
LCB0YXJnZXQpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaDY0KE5vdEVxdWFsLCByZWdUMCwgVHJ1
c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oZmFsc2UpKSkpKTsKIAogICAgIGlz
WmVyby5saW5rKHRoaXMpOwogfQpAQCAtNzg1LDcgKzc4NSw3IEBAIHZvaWQgSklUOjplbWl0X29w
X2JpdHhvcihJbnN0cnVjdGlvbiogY3UKIHsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhj
dXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kLCByZWdUMCwgY3VycmVudEluc3RydWN0aW9u
WzNdLnUub3BlcmFuZCwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbWVkaWF0
ZUludGVnZXJzKHJlZ1QwLCByZWdUMSwgcmVnVDIpOwotICAgIHhvclB0cihyZWdUMSwgcmVnVDAp
OworICAgIHhvcjY0KHJlZ1QxLCByZWdUMCk7CiAgICAgZW1pdEZhc3RBcml0aFJlVGFnSW1tZWRp
YXRlKHJlZ1QwLCByZWdUMCk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5z
dHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKIH0KQEAgLTc5NCw3ICs3OTQsNyBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9iaXRvcihJbnN0cnVjdGlvbiogY3VyCiB7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcnMoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCwgcmVnVDAsIGN1cnJlbnRJbnN0
cnVjdGlvblszXS51Lm9wZXJhbmQsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJ
bW1lZGlhdGVJbnRlZ2VycyhyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKLSAgICBvclB0cihyZWdUMSwg
cmVnVDApOworICAgIG9yNjQocmVnVDEsIHJlZ1QwKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOwogfQogCkBAIC04MzYsNyArODM2
LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3BuYW1lcyhJbnN0cnVjdGlvbgogICAgIGdldFBu
YW1lc1N0dWJDYWxsLmFkZEFyZ3VtZW50KHJlZ1QwKTsKICAgICBnZXRQbmFtZXNTdHViQ2FsbC5j
YWxsKGRzdCk7CiAgICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIE9CSkVDVF9PRkZTRVRPRihKU1By
b3BlcnR5TmFtZUl0ZXJhdG9yLCBtX2pzU3RyaW5nc1NpemUpKSwgcmVnVDMpOwotICAgIHN0b3Jl
UHRyKHRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgcGF5bG9hZEZvcihpKSk7CisgICAgc3RvcmU2NCh0
YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIGFkZHJlc3NGb3IoaSkpOwogICAgIHN0b3JlMzIoVHJ1c3Rl
ZEltbTMyKEludDMyVGFnKSwgaW50VGFnRm9yKHNpemUpKTsKICAgICBzdG9yZTMyKHJlZ1QzLCBp
bnRQYXlsb2FkRm9yKHNpemUpKTsKICAgICBKdW1wIGVuZCA9IGp1bXAoKTsKQEAgLTg3Myw3ICs4
NzMsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXh0X3BuYW1lKEluc3RydWN0aW9uCiAgICAgbG9h
ZFB0cihhZGRyZXNzRm9yKGl0KSwgcmVnVDEpOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwg
T0JKRUNUX09GRlNFVE9GKEpTUHJvcGVydHlOYW1lSXRlcmF0b3IsIG1fanNTdHJpbmdzKSksIHJl
Z1QyKTsKIAotICAgIGxvYWRQdHIoQmFzZUluZGV4KHJlZ1QyLCByZWdUMCwgVGltZXNFaWdodCks
IHJlZ1QyKTsKKyAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QyLCByZWdUMCwgVGltZXNFaWdodCks
IHJlZ1QyKTsKIAogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZWdUMik7CiAKQEAg
LTg5NCw3ICs4OTQsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXh0X3BuYW1lKEluc3RydWN0aW9u
CiAgICAgYWRkSnVtcChicmFuY2hUZXN0UHRyKFplcm8sIEFkZHJlc3MocmVnVDMpKSwgdGFyZ2V0
KTsKIAogICAgIExhYmVsIGNoZWNrUHJvdG90eXBlKHRoaXMpOwotICAgIGxvYWRQdHIoQWRkcmVz
cyhyZWdUMiwgU3RydWN0dXJlOjpwcm90b3R5cGVPZmZzZXQoKSksIHJlZ1QyKTsKKyAgICBsb2Fk
NjQoQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpwcm90b3R5cGVPZmZzZXQoKSksIHJlZ1QyKTsK
ICAgICBjYWxsSGFzUHJvcGVydHkuYXBwZW5kKGVtaXRKdW1wSWZOb3RKU0NlbGwocmVnVDIpKTsK
ICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBy
ZWdUMik7CiAgICAgY2FsbEhhc1Byb3BlcnR5LmFwcGVuZChicmFuY2hQdHIoTm90RXF1YWwsIHJl
Z1QyLCBBZGRyZXNzKHJlZ1QzKSkpOwpAQCAtOTQyLDcgKzk0Miw3IEBAIHZvaWQgSklUOjpjb21w
aWxlT3BTdHJpY3RFcShJbnN0cnVjdGlvbioKICAgICAKICAgICAvLyBKdW1wIHNsb3cgaWYgYm90
aCBhcmUgY2VsbHMgKHRvIGNvdmVyIHN0cmluZ3MpLgogICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsK
LSAgICBvclB0cihyZWdUMSwgcmVnVDIpOworICAgIG9yNjQocmVnVDEsIHJlZ1QyKTsKICAgICBh
ZGRTbG93Q2FzZShlbWl0SnVtcElmSlNDZWxsKHJlZ1QyKSk7CiAgICAgCiAgICAgLy8gSnVtcCBz
bG93IGlmIGVpdGhlciBpcyBhIGRvdWJsZS4gRmlyc3QgdGVzdCBpZiBpdCdzIGFuIGludGVnZXIs
IHdoaWNoIGlzIGZpbmUsIGFuZCB0aGVuIHRlc3QKQEAgLTk1NSw5ICs5NTUsOSBAQCB2b2lkIEpJ
VDo6Y29tcGlsZU9wU3RyaWN0RXEoSW5zdHJ1Y3Rpb24qCiAgICAgcmlnaHRPSy5saW5rKHRoaXMp
OwogCiAgICAgaWYgKHR5cGUgPT0gT3BTdHJpY3RFcSkKLSAgICAgICAgY29tcGFyZVB0cihFcXVh
bCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7CisgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDEs
IHJlZ1QwLCByZWdUMCk7CiAgICAgZWxzZQotICAgICAgICBjb21wYXJlUHRyKE5vdEVxdWFsLCBy
ZWdUMSwgcmVnVDAsIHJlZ1QwKTsKKyAgICAgICAgY29tcGFyZTY0KE5vdEVxdWFsLCByZWdUMSwg
cmVnVDAsIHJlZ1QwKTsKICAgICBlbWl0VGFnQXNCb29sSW1tZWRpYXRlKHJlZ1QwKTsKIAogICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKQEAgLTEwMDMsOCArMTAwMyw4IEBAIHZvaWQg
SklUOjplbWl0X29wX2NhdGNoKEluc3RydWN0aW9uKiBjdXIKICAgICBraWxsTGFzdFJlc3VsdFJl
Z2lzdGVyKCk7IC8vIEZJWE1FOiBJbXBsaWNpdGx5IHRyZWF0IG9wX2NhdGNoIGFzIGEgbGFiZWxl
ZCBzdGF0ZW1lbnQsIGFuZCByZW1vdmUgdGhpcyBsaW5lIG9mIGNvZGUuCiAgICAgbW92ZShyZWdU
MCwgY2FsbEZyYW1lUmVnaXN0ZXIpOwogICAgIHBlZWsocmVnVDMsIE9CSkVDVF9PRkZTRVRPRihz
dHJ1Y3QgSklUU3RhY2tGcmFtZSwgZ2xvYmFsRGF0YSkgLyBzaXplb2Yodm9pZCopKTsKLSAgICBs
b2FkUHRyKEFkZHJlc3MocmVnVDMsIE9CSkVDVF9PRkZTRVRPRihKU0dsb2JhbERhdGEsIGV4Y2Vw
dGlvbikpLCByZWdUMCk7Ci0gICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihKU1ZhbHVlOjplbmNv
ZGUoSlNWYWx1ZSgpKSksIEFkZHJlc3MocmVnVDMsIE9CSkVDVF9PRkZTRVRPRihKU0dsb2JhbERh
dGEsIGV4Y2VwdGlvbikpKTsKKyAgICBsb2FkNjQoQWRkcmVzcyhyZWdUMywgT0JKRUNUX09GRlNF
VE9GKEpTR2xvYmFsRGF0YSwgZXhjZXB0aW9uKSksIHJlZ1QwKTsKKyAgICBzdG9yZTY0KFRydXN0
ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKSksIEFkZHJlc3MocmVnVDMsIE9CSkVD
VF9PRkZTRVRPRihKU0dsb2JhbERhdGEsIGV4Y2VwdGlvbikpKTsKICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOwogfQogCkBAIC0xMDcz
LDkgKzEwNzMsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90aHJvd19yZWZlcmVuY2VfZXJyb3IoCiB7
CiAgICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wX3Rocm93X3JlZmVyZW5jZV9l
cnJvcik7CiAgICAgaWYgKCFtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoY3VycmVudEluc3RydWN0
aW9uWzFdLnUub3BlcmFuZCkuaXNOdW1iZXIoKSkKLSAgICAgICAgc3R1YkNhbGwuYWRkQXJndW1l
bnQoVHJ1c3RlZEltbVB0cihKU1ZhbHVlOjplbmNvZGUobV9jb2RlQmxvY2stPmdldENvbnN0YW50
KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpKSkpOworICAgICAgICBzdHViQ2FsbC5h
ZGRBcmd1bWVudChUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKG1fY29kZUJsb2NrLT5nZXRD
b25zdGFudChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSkpKTsKICAgICBlbHNlCi0g
ICAgICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KEltbVB0cihKU1ZhbHVlOjplbmNvZGUobV9jb2Rl
QmxvY2stPmdldENvbnN0YW50KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpKSkpOwor
ICAgICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChJbW02NChKU1ZhbHVlOjplbmNvZGUobV9jb2Rl
QmxvY2stPmdldENvbnN0YW50KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpKSkpOwog
ICAgIHN0dWJDYWxsLmNhbGwoKTsKIH0KIApAQCAtMTExNSw4ICsxMTE1LDggQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfZXFfbnVsbChJbnN0cnVjdGlvbiogYwogCiAgICAgaXNJbW1lZGlhdGUubGluayh0
aGlzKTsKIAotICAgIGFuZFB0cihUcnVzdGVkSW1tMzIoflRhZ0JpdFVuZGVmaW5lZCksIHJlZ1Qw
KTsKLSAgICBjb21wYXJlUHRyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKFZhbHVlTnVsbCks
IHJlZ1QwKTsKKyAgICBhbmQ2NChUcnVzdGVkSW1tMzIoflRhZ0JpdFVuZGVmaW5lZCksIHJlZ1Qw
KTsKKyAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoVmFsdWVOdWxsKSwg
cmVnVDApOwogCiAgICAgd2FzTm90SW1tZWRpYXRlLmxpbmsodGhpcyk7CiAgICAgd2FzTm90TWFz
cXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwpAQCAtMTE0Nyw4ICsxMTQ3LDggQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfbmVxX251bGwoSW5zdHJ1Y3Rpb24qCiAKICAgICBpc0ltbWVkaWF0ZS5s
aW5rKHRoaXMpOwogCi0gICAgYW5kUHRyKFRydXN0ZWRJbW0zMih+VGFnQml0VW5kZWZpbmVkKSwg
cmVnVDApOwotICAgIGNvbXBhcmVQdHIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoVmFs
dWVOdWxsKSwgcmVnVDApOworICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+VGFnQml0VW5kZWZpbmVk
KSwgcmVnVDApOworICAgIGNvbXBhcmU2NChOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihW
YWx1ZU51bGwpLCByZWdUMCk7CiAKICAgICB3YXNOb3RJbW1lZGlhdGUubGluayh0aGlzKTsKICAg
ICB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CkBAIC0xMTczLDcgKzEx
NzMsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfYWN0aXZhdGlvbihJbnN0CiB7CiAgICAg
dW5zaWduZWQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKICAgICAKLSAg
ICBKdW1wIGFjdGl2YXRpb25DcmVhdGVkID0gYnJhbmNoVGVzdFB0cihOb25aZXJvLCBBZGRyZXNz
KGNhbGxGcmFtZVJlZ2lzdGVyLCBzaXplb2YoUmVnaXN0ZXIpICogZHN0KSk7CisgICAgSnVtcCBh
Y3RpdmF0aW9uQ3JlYXRlZCA9IGJyYW5jaFRlc3Q2NChOb25aZXJvLCBBZGRyZXNzKGNhbGxGcmFt
ZVJlZ2lzdGVyLCBzaXplb2YoUmVnaXN0ZXIpICogZHN0KSk7CiAgICAgSklUU3R1YkNhbGwodGhp
cywgY3RpX29wX3B1c2hfYWN0aXZhdGlvbikuY2FsbChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5v
cGVyYW5kKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiAgICAgYWN0aXZhdGlv
bkNyZWF0ZWQubGluayh0aGlzKTsKQEAgLTExODMsNyArMTE4Myw3IEBAIHZvaWQgSklUOjplbWl0
X29wX2NyZWF0ZV9hcmd1bWVudHMoSW5zdHIKIHsKICAgICB1bnNpZ25lZCBkc3QgPSBjdXJyZW50
SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwogCi0gICAgSnVtcCBhcmdzQ3JlYXRlZCA9IGJyYW5j
aFRlc3RQdHIoTm9uWmVybywgQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3Rlciwgc2l6ZW9mKFJlZ2lz
dGVyKSAqIGRzdCkpOworICAgIEp1bXAgYXJnc0NyZWF0ZWQgPSBicmFuY2hUZXN0NjQoTm9uWmVy
bywgQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3Rlciwgc2l6ZW9mKFJlZ2lzdGVyKSAqIGRzdCkpOwog
ICAgIEpJVFN0dWJDYWxsKHRoaXMsIGN0aV9vcF9jcmVhdGVfYXJndW1lbnRzKS5jYWxsKCk7CiAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIodW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyKGRzdCkpOwpAQCAtMTE5NCw3ICsxMTk0LDcg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5pdF9sYXp5X3JlZyhJbnN0cnVjdAogewogICAgIHVuc2ln
bmVkIGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CiAKLSAgICBzdG9yZVB0
cihUcnVzdGVkSW1tUHRyKDApLCBBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCBzaXplb2YoUmVn
aXN0ZXIpICogZHN0KSk7CisgICAgc3RvcmU2NChUcnVzdGVkSW1tNjQoKGludDY0X3QpMCksIEFk
ZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIHNpemVvZihSZWdpc3RlcikgKiBkc3QpKTsKIH0KIAog
dm9pZCBKSVQ6OmVtaXRfb3BfY29udmVydF90aGlzKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCkBAIC0xMjUzLDE2ICsxMjUzLDE2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9jb252
ZXJ0X3RoaXMoSW5zdHIKIAogICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKICAgICBpZiAoc2hvdWxk
RW1pdFByb2ZpbGluZygpKQotICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoYml0d2lzZV9jYXN0
PHZvaWQqPihKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSkpKSwgcmVnVDApOwotICAgIEp1
bXAgaXNOb3RVbmRlZmluZWQgPSBicmFuY2hQdHIoTm90RXF1YWwsIHJlZ1QxLCBUcnVzdGVkSW1t
UHRyKEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKSkpOworICAgICAgICBtb3ZlKFRydXN0
ZWRJbW02NCgoSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpKSksIHJlZ1QwKTsKKyAgICBK
dW1wIGlzTm90VW5kZWZpbmVkID0gYnJhbmNoNjQoTm90RXF1YWwsIHJlZ1QxLCBUcnVzdGVkSW1t
NjQoSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpKSk7CiAgICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZSgpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnbG9iYWxUaGlzKSwgcmVnVDApOwor
ICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKHN0YXRpY19jYXN0
PEpTQ2VsbCo+KGdsb2JhbFRoaXMpKSkpLCByZWdUMCk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCByZWdUMCk7CiAgICAgZW1pdEp1
bXBTbG93VG9Ib3QoanVtcCgpLCBPUENPREVfTEVOR1RIKG9wX2NvbnZlcnRfdGhpcykpOwogCiAg
ICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwogICAgIGlmIChzaG91bGRFbWl0UHJvZmlsaW5nKCkpCi0g
ICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihiaXR3aXNlX2Nhc3Q8dm9pZCo+KEpTVmFsdWU6OmVu
Y29kZShtX2dsb2JhbERhdGEtPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKSwgcmVnVDApOworICAg
ICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUobV9nbG9iYWxEYXRhLT5zdHJp
bmdTdHJ1Y3R1cmUuZ2V0KCkpKSwgcmVnVDApOwogICAgIGlzTm90VW5kZWZpbmVkLmxpbmsodGhp
cyk7CiAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSgpOwogICAgIEpJVFN0dWJDYWxsIHN0dWJD
YWxsKHRoaXMsIGN0aV9vcF9jb252ZXJ0X3RoaXMpOwpAQCAtMTI4Miw3ICsxMjgyLDcgQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX3RvX3ByaW1pdGl2ZShJbnN0cgogdm9pZCBKSVQ6OmVtaXRTbG93
X29wX25vdChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewogICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKLSAgICB4
b3JQdHIoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KFZhbHVlRmFsc2UpKSwgcmVn
VDApOworICAgIHhvcjY0KFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90PihWYWx1ZUZh
bHNlKSksIHJlZ1QwKTsKICAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3Bfbm90
KTsKICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChyZWdUMCk7CiAgICAgc3R1YkNhbGwuY2FsbChj
dXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKQEAgLTE0MzQsNyArMTQzNCw3IEBAIHZv
aWQgSklUOjplbWl0X29wX2dldF9hcmd1bWVudHNfbGVuZ3RoKEkKIHsKICAgICBpbnQgZHN0ID0g
Y3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKICAgICBpbnQgYXJndW1lbnRzUmVnaXN0
ZXIgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotICAgIGFkZFNsb3dDYXNlKGJy
YW5jaFRlc3RQdHIoTm9uWmVybywgYWRkcmVzc0Zvcihhcmd1bWVudHNSZWdpc3RlcikpKTsKKyAg
ICBhZGRTbG93Q2FzZShicmFuY2hUZXN0NjQoTm9uWmVybywgYWRkcmVzc0Zvcihhcmd1bWVudHNS
ZWdpc3RlcikpKTsKICAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlcjMyKEpTU3RhY2s6OkFy
Z3VtZW50Q291bnQsIHJlZ1QwKTsKICAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QwKTsK
ICAgICBlbWl0RmFzdEFyaXRoUmVUYWdJbW1lZGlhdGUocmVnVDAsIHJlZ1QwKTsKQEAgLTE0NzAs
NyArMTQ3MCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9hcmd1bWVudF9ieV92YWwoSW4KIAog
ICAgIG5lZzMyKHJlZ1QxKTsKICAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMSwgcmVnVDEpOwot
ICAgIGxvYWRQdHIoQmFzZUluZGV4KGNhbGxGcmFtZVJlZ2lzdGVyLCByZWdUMSwgVGltZXNFaWdo
dCwgQ2FsbEZyYW1lOjp0aGlzQXJndW1lbnRPZmZzZXQoKSAqIHN0YXRpY19jYXN0PGludD4oc2l6
ZW9mKFJlZ2lzdGVyKSkpLCByZWdUMCk7CisgICAgbG9hZDY0KEJhc2VJbmRleChjYWxsRnJhbWVS
ZWdpc3RlciwgcmVnVDEsIFRpbWVzRWlnaHQsIENhbGxGcmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0
KCkgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpKSwgcmVnVDApOwogICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwg
cmVnVDApOwogfQpAQCAtMTUxNCw3ICsxNTE0LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3Rv
X2Jhc2UoSW5zdHJ1Y3RpbwogICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoUHRyKE5vdEVx
dWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0cihnbG9iYWxPYmplY3QpKSk7CiAgICAgICAgIH0KICAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgICAgICBzdG9y
ZVB0cihyZWdUMCwgb3BlcmF0aW9uLT5tX3JlZ2lzdGVyQWRkcmVzcyk7CisgICAgICAgIHN0b3Jl
NjQocmVnVDAsIG9wZXJhdGlvbi0+bV9yZWdpc3RlckFkZHJlc3MpOwogICAgICAgICBpZiAoSGVh
cDo6aXNXcml0ZUJhcnJpZXJFbmFibGVkKCkpCiAgICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVy
KGdsb2JhbE9iamVjdCwgcmVnVDAsIHJlZ1QyLCBTaG91bGRGaWx0ZXJJbW1lZGlhdGVzLCBXcml0
ZUJhcnJpZXJGb3JWYXJpYWJsZUFjY2Vzcyk7CiAgICAgICAgIHJldHVybjsKQEAgLTE1MjIsNyAr
MTUyMiw3IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19iYXNlKEluc3RydWN0aW8KICAgICBj
YXNlIFB1dFRvQmFzZU9wZXJhdGlvbjo6VmFyaWFibGVQdXQ6IHsKICAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcnMoYmFzZSwgcmVnVDAsIHZhbHVlLCByZWdUMSk7CiAgICAgICAgIGxvYWRQ
dHIoQWRkcmVzcyhyZWdUMCwgSlNWYXJpYWJsZU9iamVjdDo6b2Zmc2V0T2ZSZWdpc3RlcnMoKSks
IHJlZ1QyKTsKLSAgICAgICAgc3RvcmVQdHIocmVnVDEsIEFkZHJlc3MocmVnVDIsIG9wZXJhdGlv
bi0+bV9vZmZzZXQgKiBzaXplb2YoUmVnaXN0ZXIpKSk7CisgICAgICAgIHN0b3JlNjQocmVnVDEs
IEFkZHJlc3MocmVnVDIsIG9wZXJhdGlvbi0+bV9vZmZzZXQgKiBzaXplb2YoUmVnaXN0ZXIpKSk7
CiAgICAgICAgIGlmIChIZWFwOjppc1dyaXRlQmFycmllckVuYWJsZWQoKSkKICAgICAgICAgICAg
IGVtaXRXcml0ZUJhcnJpZXIocmVnVDAsIHJlZ1QxLCByZWdUMiwgcmVnVDMsIFNob3VsZEZpbHRl
ckltbWVkaWF0ZXMsIFdyaXRlQmFycmllckZvclZhcmlhYmxlQWNjZXNzKTsKICAgICAgICAgcmV0
dXJuOwpAQCAtMTUzNiw3ICsxNTM2LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX2Jhc2Uo
SW5zdHJ1Y3RpbwogICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0
ZXJmbHlPZmZzZXQoKSksIHJlZ1QyKTsKICAgICAgICAgbG9hZDMyKCZvcGVyYXRpb24tPm1fb2Zm
c2V0SW5CdXR0ZXJmbHksIHJlZ1QzKTsKICAgICAgICAgc2lnbkV4dGVuZDMyVG9QdHIocmVnVDMs
IHJlZ1QzKTsKLSAgICAgICAgc3RvcmVQdHIocmVnVDEsIEJhc2VJbmRleChyZWdUMiwgcmVnVDMs
IFRpbWVzRWlnaHQpKTsKKyAgICAgICAgc3RvcmU2NChyZWdUMSwgQmFzZUluZGV4KHJlZ1QyLCBy
ZWdUMywgVGltZXNFaWdodCkpOwogICAgICAgICBpZiAoSGVhcDo6aXNXcml0ZUJhcnJpZXJFbmFi
bGVkKCkpCiAgICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKHJlZ1QwLCByZWdUMSwgcmVnVDIs
IHJlZ1QzLCBTaG91bGRGaWx0ZXJJbW1lZGlhdGVzLCBXcml0ZUJhcnJpZXJGb3JWYXJpYWJsZUFj
Y2Vzcyk7CiAgICAgICAgIHJldHVybjsKQEAgLTE2MDYsNyArMTYwNiw3IEBAIHZvaWQgSklUOjpl
bWl0X3Jlc29sdmVfb3BlcmF0aW9ucyhSZXNvbHYKICAgICAgICAgICAgIEFTU0VSVChiYXNlVlIp
OwogICAgICAgICAgICAgc2V0QmFzZSA9IHRydWU7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAg
ICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihiaXR3aXNlX2Nhc3Q8dm9pZCo+KEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKSkpLCBzY3JhdGNoKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3Rl
ZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKSksIHNjcmF0Y2gpOwogICAgICAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcigqYmFzZVZSLCBzY3JhdGNoKTsKICNlbHNlCiAg
ICAgICAgICAgICBlbWl0U3RvcmUoKmJhc2VWUiwganNVbmRlZmluZWQoKSk7CkBAIC0xNjMyLDcg
KzE2MzIsMTEgQEAgdm9pZCBKSVQ6OmVtaXRfcmVzb2x2ZV9vcGVyYXRpb25zKFJlc29sdgogICAg
ICAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSgpOwogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICBjYXNlIFJlc29sdmVPcGVyYXRpb246OlNraXBUb3BTY29wZU5vZGU6IHsKLSAgICAg
ICAgICAgIEp1bXAgYWN0aXZhdGlvbk5vdENyZWF0ZWQgPSBicmFuY2hUZXN0UHRyKFplcm8sIHBh
eWxvYWRGb3IobV9jb2RlQmxvY2stPmFjdGl2YXRpb25SZWdpc3RlcigpKSk7CisjaWYgVVNFKEpT
VkFMVUUzMl82NCkKKyAgICAgICAgICAgIEp1bXAgYWN0aXZhdGlvbk5vdENyZWF0ZWQgPSBicmFu
Y2gzMihFcXVhbCwgdGFnRm9yKG1fY29kZUJsb2NrLT5hY3RpdmF0aW9uUmVnaXN0ZXIoKSksIFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpFbXB0eVZhbHVlVGFnKSk7CisjZWxzZQorICAgICAgICAgICAg
SnVtcCBhY3RpdmF0aW9uTm90Q3JlYXRlZCA9IGJyYW5jaFRlc3Q2NChaZXJvLCBhZGRyZXNzRm9y
KG1fY29kZUJsb2NrLT5hY3RpdmF0aW9uUmVnaXN0ZXIoKSkpOworI2VuZGlmCiAgICAgICAgICAg
ICBsb2FkUHRyKEFkZHJlc3Moc2NvcGUsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgc2NvcGUp
OwogICAgICAgICAgICAgYWN0aXZhdGlvbk5vdENyZWF0ZWQubGluayh0aGlzKTsKICAgICAgICAg
ICAgICsrcGM7CkBAIC0xNjk1LDE3ICsxNjk5LDIxIEBAIHZvaWQgSklUOjplbWl0X3Jlc29sdmVf
b3BlcmF0aW9ucyhSZXNvbHYKICAgICBjYXNlIFJlc29sdmVPcGVyYXRpb246OkdldEFuZFJldHVy
bkdsb2JhbFZhcldhdGNoYWJsZToKICAgICBjYXNlIFJlc29sdmVPcGVyYXRpb246OkdldEFuZFJl
dHVybkdsb2JhbFZhcjogewogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAgIGxvYWRQdHIo
cmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ocGMtPm1fcmVnaXN0ZXJBZGRyZXNzKSArIE9CSkVDVF9P
RkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpLCB2YWx1ZVRhZyk7CisgICAgICAgIGxvYWQz
MihyZWludGVycHJldF9jYXN0PGNoYXIqPihwYy0+bV9yZWdpc3RlckFkZHJlc3MpICsgT0JKRUNU
X09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZyksIHZhbHVlVGFnKTsKKyAgICAgICAgbG9h
ZDMyKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHBjLT5tX3JlZ2lzdGVyQWRkcmVzcykgKyBPQkpF
Q1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCksIHZhbHVlKTsKKyNlbHNlCisg
ICAgICAgIGxvYWQ2NChyZWludGVycHJldF9jYXN0PGNoYXIqPihwYy0+bV9yZWdpc3RlckFkZHJl
c3MpLCB2YWx1ZSk7CiAjZW5kaWYKLSAgICAgICAgbG9hZFB0cihyZWludGVycHJldF9jYXN0PGNo
YXIqPihwYy0+bV9yZWdpc3RlckFkZHJlc3MpICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUu
YXNCaXRzLnBheWxvYWQpLCB2YWx1ZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNl
IFJlc29sdmVPcGVyYXRpb246OkdldEFuZFJldHVyblNjb3BlZFZhcjogewogICAgICAgICBsb2Fk
UHRyKEFkZHJlc3Moc2NvcGUsIEpTVmFyaWFibGVPYmplY3Q6Om9mZnNldE9mUmVnaXN0ZXJzKCkp
LCBzY29wZSk7CiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICAgICAgbG9hZFB0cihBZGRyZXNz
KHNjb3BlLCBwYy0+bV9vZmZzZXQgKiBzaXplb2YoUmVnaXN0ZXIpICsgT0JKRUNUX09GRlNFVE9G
KEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCB2YWx1ZVRhZyk7CisgICAgICAgIGxvYWQzMihBZGRy
ZXNzKHNjb3BlLCBwYy0+bV9vZmZzZXQgKiBzaXplb2YoUmVnaXN0ZXIpICsgT0JKRUNUX09GRlNF
VE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCB2YWx1ZVRhZyk7CisgICAgICAgIGxvYWQzMihB
ZGRyZXNzKHNjb3BlLCBwYy0+bV9vZmZzZXQgKiBzaXplb2YoUmVnaXN0ZXIpICsgT0JKRUNUX09G
RlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwgdmFsdWUpOworI2Vsc2UKKyAgICAg
ICAgbG9hZDY0KEFkZHJlc3Moc2NvcGUsIHBjLT5tX29mZnNldCAqIHNpemVvZihSZWdpc3Rlcikp
LCB2YWx1ZSk7CiAjZW5kaWYKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKHNjb3BlLCBwYy0+bV9v
ZmZzZXQgKiBzaXplb2YoUmVnaXN0ZXIpICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNC
aXRzLnBheWxvYWQpKSwgdmFsdWUpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgZGVmYXVs
dDoKQEAgLTE5MTMsNyArMTkyMSw3IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19mdW5jKEluc3Ry
dWN0aW9uKgogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgICAgIGxhenlKdW1wID0gYnJhbmNo
MzIoTm90RXF1YWwsIHRhZ0Zvcihkc3QpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1
ZVRhZykpOwogI2Vsc2UKLSAgICAgICAgbGF6eUp1bXAgPSBicmFuY2hUZXN0UHRyKE5vblplcm8s
IGFkZHJlc3NGb3IoZHN0KSk7CisgICAgICAgIGxhenlKdW1wID0gYnJhbmNoVGVzdDY0KE5vblpl
cm8sIGFkZHJlc3NGb3IoZHN0KSk7CiAjZW5kaWYKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCShyZXZpc2lvbiAxMzE2
NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTM3LDcgKzEzNyw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9i
eV92YWwoSW5zdHJ1Y3Rpb24KICAgICBMYWJlbCBkb25lID0gbGFiZWwoKTsKICAgICAKICNpZiAh
QVNTRVJUX0RJU0FCTEVECi0gICAgSnVtcCByZXN1bHRPSyA9IGJyYW5jaFRlc3RQdHIoTm9uWmVy
bywgcmVnVDApOworICAgIEp1bXAgcmVzdWx0T0sgPSBicmFuY2hUZXN0NjQoTm9uWmVybywgcmVn
VDApOwogICAgIGJyZWFrcG9pbnQoKTsKICAgICByZXN1bHRPSy5saW5rKHRoaXMpOwogI2VuZGlm
CkBAIC0xNTUsOCArMTU1LDggQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRDb250aWd1b3VzR2V0
QnlWYQogICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2gzMihOb3RFcXVhbCwgcmVnVDIsIFRy
dXN0ZWRJbW0zMihDb250aWd1b3VzU2hhcGUpKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAs
IEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QyKTsKICAgICBzbG93Q2FzZXMuYXBw
ZW5kKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEJ1dHRlcmZs
eTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsKLSAgICBsb2FkUHRyKEJhc2VJbmRleChyZWdU
MiwgcmVnVDEsIFNjYWxlUHRyKSwgcmVnVDApOwotICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNo
VGVzdFB0cihaZXJvLCByZWdUMCkpOworICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDIsIHJlZ1Qx
LCBUaW1lc0VpZ2h0KSwgcmVnVDApOworICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoVGVzdDY0
KFplcm8sIHJlZ1QwKSk7CiAgICAgCiAgICAgcmV0dXJuIHNsb3dDYXNlczsKIH0KQEAgLTE3MSw4
ICsxNzEsOCBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEFycmF5U3RvcmFnZUdldEJ5CiAgICAg
bG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdU
Mik7CiAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBB
ZGRyZXNzKHJlZ1QyLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSkpOwogCi0g
ICAgbG9hZFB0cihCYXNlSW5kZXgocmVnVDIsIHJlZ1QxLCBTY2FsZVB0ciwgQXJyYXlTdG9yYWdl
Ojp2ZWN0b3JPZmZzZXQoKSksIHJlZ1QwKTsKLSAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaFRl
c3RQdHIoWmVybywgcmVnVDApKTsKKyAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QyLCByZWdUMSwg
VGltZXNFaWdodCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSksIHJlZ1QwKTsKKyAgICBz
bG93Q2FzZXMuYXBwZW5kKGJyYW5jaFRlc3Q2NChaZXJvLCByZWdUMCkpOwogICAgIAogICAgIHJl
dHVybiBzbG93Q2FzZXM7CiB9CkBAIC0xODksNyArMTg5LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2dldF9ieV92YWwoSW5zdHJ1YwogICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gYmFzZSBh
cnJheSBjaGVjawogICAgIEp1bXAgbm90U3RyaW5nID0gYnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRy
ZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgVHJ1c3RlZEltbVB0cihtX2ds
b2JhbERhdGEtPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpOwogICAgIGVtaXROYWtlZENhbGwoQ29k
ZUxvY2F0aW9uTGFiZWwobV9nbG9iYWxEYXRhLT5nZXRDVElTdHViKHN0cmluZ0dldEJ5VmFsU3R1
YkdlbmVyYXRvcikuY29kZSgpKSk7Ci0gICAgSnVtcCBmYWlsZWQgPSBicmFuY2hUZXN0UHRyKFpl
cm8sIHJlZ1QwKTsKKyAgICBKdW1wIGZhaWxlZCA9IGJyYW5jaFRlc3Q2NChaZXJvLCByZWdUMCk7
CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlZ1QwKTsKICAgICBlbWl0SnVtcFNs
b3dUb0hvdChqdW1wKCksIE9QQ09ERV9MRU5HVEgob3BfZ2V0X2J5X3ZhbCkpOwogICAgIGZhaWxl
ZC5saW5rKHRoaXMpOwpAQCAtMjM1LDcgKzIzNSw3IEBAIHZvaWQgSklUOjpjb21waWxlR2V0RGly
ZWN0T2Zmc2V0KFJlZ2lzdGUKICAgICAgICAgbmVnMzIob2Zmc2V0KTsKICAgICB9CiAgICAgc2ln
bkV4dGVuZDMyVG9QdHIob2Zmc2V0LCBvZmZzZXQpOwotICAgIGxvYWRQdHIoQmFzZUluZGV4KHNj
cmF0Y2gsIG9mZnNldCwgU2NhbGVQdHIsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6
ZW9mKEVuY29kZWRKU1ZhbHVlKSksIHJlc3VsdCk7CisgICAgbG9hZDY0KEJhc2VJbmRleChzY3Jh
dGNoLCBvZmZzZXQsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6
ZW9mKEVuY29kZWRKU1ZhbHVlKSksIHJlc3VsdCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dl
dF9ieV9wbmFtZShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMjQ4LDcgKzI0
OCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9wbmFtZShJbnN0cnVjdGkKICAgICB1bnNp
Z25lZCBpID0gY3VycmVudEluc3RydWN0aW9uWzZdLnUub3BlcmFuZDsKIAogICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hQ
dHIoTm90RXF1YWwsIHJlZ1QwLCBhZGRyZXNzRm9yKGV4cGVjdGVkKSkpOworICAgIGFkZFNsb3dD
YXNlKGJyYW5jaDY0KE5vdEVxdWFsLCByZWdUMCwgYWRkcmVzc0ZvcihleHBlY3RlZCkpKTsKICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhiYXNlLCByZWdUMCwgaXRlciwgcmVnVDEpOwogICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CiAKQEAgLTMzNyw3ICsz
MzcsNyBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdENvbnRpZ3VvdXNQdXRCeVZhCiAKICAgICBM
YWJlbCBzdG9yZVJlc3VsdCA9IGxhYmVsKCk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2
YWx1ZSwgcmVnVDMpOwotICAgIHN0b3JlUHRyKHJlZ1QzLCBCYXNlSW5kZXgocmVnVDIsIHJlZ1Qx
LCBTY2FsZVB0cikpOworICAgIHN0b3JlNjQocmVnVDMsIEJhc2VJbmRleChyZWdUMiwgcmVnVDEs
IFRpbWVzRWlnaHQpKTsKICAgICAKICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAgICAgb3V0T2ZC
b3VuZHMubGluayh0aGlzKTsKQEAgLTM2NywxMSArMzY3LDExIEBAIEpJVDo6SnVtcExpc3QgSklU
OjplbWl0QXJyYXlTdG9yYWdlUHV0QnkKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2Jq
ZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QyKTsKICAgICBzbG93Q2FzZXMuYXBwZW5kKGJy
YW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEFycmF5U3RvcmFnZTo6
dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKSk7CiAKLSAgICBKdW1wIGVtcHR5ID0gYnJhbmNoVGVzdFB0
cihaZXJvLCBCYXNlSW5kZXgocmVnVDIsIHJlZ1QxLCBTY2FsZVB0ciwgT0JKRUNUX09GRlNFVE9G
KEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSk7CisgICAgSnVtcCBlbXB0eSA9IGJyYW5jaFRl
c3Q2NChaZXJvLCBCYXNlSW5kZXgocmVnVDIsIHJlZ1QxLCBUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZG
U0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpKTsKIAogICAgIExhYmVsIHN0b3JlUmVz
dWx0KHRoaXMpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QzKTsKLSAg
ICBzdG9yZVB0cihyZWdUMywgQmFzZUluZGV4KHJlZ1QyLCByZWdUMSwgU2NhbGVQdHIsIE9CSkVD
VF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSkpOworICAgIHN0b3JlNjQocmVn
VDMsIEJhc2VJbmRleChyZWdUMiwgcmVnVDEsIFRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihB
cnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSkpOwogICAgIEp1bXAgZW5kID0ganVtcCgpOwogICAg
IAogICAgIGVtcHR5LmxpbmsodGhpcyk7CkBAIC01MzUsNyArNTM1LDcgQEAgdm9pZCBKSVQ6OmNv
bXBpbGVHZXRCeUlkSG90UGF0aChpbnQgYmFzZQogICAgIGFkZFNsb3dDYXNlKHN0cnVjdHVyZUNo
ZWNrKTsKIAogICAgIENvbnZlcnRpYmxlTG9hZExhYmVsIHByb3BlcnR5U3RvcmFnZUxvYWQgPSBj
b252ZXJ0aWJsZUxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNl
dCgpKSwgcmVnVDApOwotICAgIERhdGFMYWJlbENvbXBhY3QgZGlzcGxhY2VtZW50TGFiZWwgPSBs
b2FkUHRyV2l0aENvbXBhY3RBZGRyZXNzT2Zmc2V0UGF0Y2goQWRkcmVzcyhyZWdUMCwgcGF0Y2hH
ZXRCeUlkRGVmYXVsdE9mZnNldCksIHJlZ1QwKTsKKyAgICBEYXRhTGFiZWxDb21wYWN0IGRpc3Bs
YWNlbWVudExhYmVsID0gbG9hZDY0V2l0aENvbXBhY3RBZGRyZXNzT2Zmc2V0UGF0Y2goQWRkcmVz
cyhyZWdUMCwgcGF0Y2hHZXRCeUlkRGVmYXVsdE9mZnNldCksIHJlZ1QwKTsKIAogICAgIExhYmVs
IHB1dFJlc3VsdCh0aGlzKTsKIApAQCAtNjAyLDcgKzYwMiw3IEBAIHZvaWQgSklUOjplbWl0X29w
X3B1dF9ieV9pZChJbnN0cnVjdGlvbioKICAgICBhZGRTbG93Q2FzZShicmFuY2hQdHJXaXRoUGF0
Y2goTm90RXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBz
dHJ1Y3R1cmVUb0NvbXBhcmUsIFRydXN0ZWRJbW1QdHIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
cGF0Y2hHZXRCeUlkRGVmYXVsdFN0cnVjdHVyZSkpKSk7CiAKICAgICBDb252ZXJ0aWJsZUxvYWRM
YWJlbCBwcm9wZXJ0eVN0b3JhZ2VMb2FkID0gY29udmVydGlibGVMb2FkUHRyKEFkZHJlc3MocmVn
VDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QyKTsKLSAgICBEYXRhTGFiZWwz
MiBkaXNwbGFjZW1lbnRMYWJlbCA9IHN0b3JlUHRyV2l0aEFkZHJlc3NPZmZzZXRQYXRjaChyZWdU
MSwgQWRkcmVzcyhyZWdUMiwgcGF0Y2hQdXRCeUlkRGVmYXVsdE9mZnNldCkpOworICAgIERhdGFM
YWJlbDMyIGRpc3BsYWNlbWVudExhYmVsID0gc3RvcmU2NFdpdGhBZGRyZXNzT2Zmc2V0UGF0Y2go
cmVnVDEsIEFkZHJlc3MocmVnVDIsIHBhdGNoUHV0QnlJZERlZmF1bHRPZmZzZXQpKTsKIAogICAg
IEVORF9VTklOVEVSUlVQVEVEX1NFUVVFTkNFKHNlcXVlbmNlUHV0QnlJZCk7CiAKQEAgLTYzNiwz
NSArNjM2LDM1IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQoSW5zdHJ1Y3QKIHZv
aWQgSklUOjpjb21waWxlUHV0RGlyZWN0T2Zmc2V0KFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJ
RCB2YWx1ZSwgUHJvcGVydHlPZmZzZXQgY2FjaGVkT2Zmc2V0KQogewogICAgIGlmIChpc0lubGlu
ZU9mZnNldChjYWNoZWRPZmZzZXQpKSB7Ci0gICAgICAgIHN0b3JlUHRyKHZhbHVlLCBBZGRyZXNz
KGJhc2UsIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSArIHNpemVvZihKU1ZhbHVl
KSAqIG9mZnNldEluSW5saW5lU3RvcmFnZShjYWNoZWRPZmZzZXQpKSk7CisgICAgICAgIHN0b3Jl
NjQodmFsdWUsIEFkZHJlc3MoYmFzZSwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgp
ICsgc2l6ZW9mKEpTVmFsdWUpICogb2Zmc2V0SW5JbmxpbmVTdG9yYWdlKGNhY2hlZE9mZnNldCkp
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKICAgICBsb2FkUHRyKEFkZHJlc3MoYmFz
ZSwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgYmFzZSk7Ci0gICAgc3RvcmVQdHIodmFs
dWUsIEFkZHJlc3MoYmFzZSwgc2l6ZW9mKEpTVmFsdWUpICogb2Zmc2V0SW5CdXR0ZXJmbHkoY2Fj
aGVkT2Zmc2V0KSkpOworICAgIHN0b3JlNjQodmFsdWUsIEFkZHJlc3MoYmFzZSwgc2l6ZW9mKEpT
VmFsdWUpICogb2Zmc2V0SW5CdXR0ZXJmbHkoY2FjaGVkT2Zmc2V0KSkpOwogfQogCiAvLyBDb21w
aWxlIGEgbG9hZCBmcm9tIGFuIG9iamVjdCdzIHByb3BlcnR5IHN0b3JhZ2UuICBNYXkgb3Zlcndy
aXRlIGJhc2UuCiB2b2lkIEpJVDo6Y29tcGlsZUdldERpcmVjdE9mZnNldChSZWdpc3RlcklEIGJh
c2UsIFJlZ2lzdGVySUQgcmVzdWx0LCBQcm9wZXJ0eU9mZnNldCBjYWNoZWRPZmZzZXQpCiB7CiAg
ICAgaWYgKGlzSW5saW5lT2Zmc2V0KGNhY2hlZE9mZnNldCkpIHsKLSAgICAgICAgbG9hZFB0cihB
ZGRyZXNzKGJhc2UsIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSArIHNpemVvZihK
U1ZhbHVlKSAqIG9mZnNldEluSW5saW5lU3RvcmFnZShjYWNoZWRPZmZzZXQpKSwgcmVzdWx0KTsK
KyAgICAgICAgbG9hZDY0KEFkZHJlc3MoYmFzZSwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3Rv
cmFnZSgpICsgc2l6ZW9mKEpTVmFsdWUpICogb2Zmc2V0SW5JbmxpbmVTdG9yYWdlKGNhY2hlZE9m
ZnNldCkpLCByZXN1bHQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAogICAgIGxvYWRQ
dHIoQWRkcmVzcyhiYXNlLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZXN1bHQpOwot
ICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1bHQsIHNpemVvZihKU1ZhbHVlKSAqIG9mZnNldEluQnV0
dGVyZmx5KGNhY2hlZE9mZnNldCkpLCByZXN1bHQpOworICAgIGxvYWQ2NChBZGRyZXNzKHJlc3Vs
dCwgc2l6ZW9mKEpTVmFsdWUpICogb2Zmc2V0SW5CdXR0ZXJmbHkoY2FjaGVkT2Zmc2V0KSksIHJl
c3VsdCk7CiB9CiAKIHZvaWQgSklUOjpjb21waWxlR2V0RGlyZWN0T2Zmc2V0KEpTT2JqZWN0KiBi
YXNlLCBSZWdpc3RlcklEIHJlc3VsdCwgUHJvcGVydHlPZmZzZXQgY2FjaGVkT2Zmc2V0KQogewog
ICAgIGlmIChpc0lubGluZU9mZnNldChjYWNoZWRPZmZzZXQpKSB7Ci0gICAgICAgIGxvYWRQdHIo
YmFzZS0+bG9jYXRpb25Gb3JPZmZzZXQoY2FjaGVkT2Zmc2V0KSwgcmVzdWx0KTsKKyAgICAgICAg
bG9hZDY0KGJhc2UtPmxvY2F0aW9uRm9yT2Zmc2V0KGNhY2hlZE9mZnNldCksIHJlc3VsdCk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCiAgICAgbG9hZFB0cihiYXNlLT5idXR0ZXJmbHlB
ZGRyZXNzKCksIHJlc3VsdCk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdCwgb2Zmc2V0SW5C
dXR0ZXJmbHkoY2FjaGVkT2Zmc2V0KSAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSwg
cmVzdWx0KTsKKyAgICBsb2FkNjQoQWRkcmVzcyhyZXN1bHQsIG9mZnNldEluQnV0dGVyZmx5KGNh
Y2hlZE9mZnNldCkgKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSksIHJlc3VsdCk7CiB9
CiAKIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5SWRUcmFuc2l0aW9uKFN0cnVjdHVyZVN0
dWJJbmZvKiBzdHViSW5mbywgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIFN0cnVjdHVyZSogbmV3
U3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBjYWNoZWRPZmZzZXQsIFN0cnVjdHVyZUNoYWluKiBj
aGFpbiwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBib29sIGRpcmVjdCkKQEAgLTEx
OTYsNyArMTE5Niw3IEBAIHZvaWQgSklUOjplbWl0X29wX2luaXRfZ2xvYmFsX2NvbnN0KEluc3QK
IAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3Bl
cmFuZCwgcmVnVDApOwogCi0gICAgc3RvcmVQdHIocmVnVDAsIGN1cnJlbnRJbnN0cnVjdGlvblsx
XS51LnJlZ2lzdGVyUG9pbnRlcik7CisgICAgc3RvcmU2NChyZWdUMCwgY3VycmVudEluc3RydWN0
aW9uWzFdLnUucmVnaXN0ZXJQb2ludGVyKTsKICAgICBpZiAoSGVhcDo6aXNXcml0ZUJhcnJpZXJF
bmFibGVkKCkpCiAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoZ2xvYmFsT2JqZWN0LCByZWdUMCwg
cmVnVDIsIFNob3VsZEZpbHRlckltbWVkaWF0ZXMsIFdyaXRlQmFycmllckZvclZhcmlhYmxlQWNj
ZXNzKTsKIH0KQEAgLTEyMDksNyArMTIwOSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2luaXRfZ2xv
YmFsX2NvbnN0X2NoZWMKIAogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCk7CiAKLSAgICBzdG9yZVB0cihyZWdUMCwgY3VycmVudElu
c3RydWN0aW9uWzFdLnUucmVnaXN0ZXJQb2ludGVyKTsKKyAgICBzdG9yZTY0KHJlZ1QwLCBjdXJy
ZW50SW5zdHJ1Y3Rpb25bMV0udS5yZWdpc3RlclBvaW50ZXIpOwogICAgIGlmIChIZWFwOjppc1dy
aXRlQmFycmllckVuYWJsZWQoKSkKICAgICAgICAgZW1pdFdyaXRlQmFycmllcihnbG9iYWxPYmpl
Y3QsIHJlZ1QwLCByZWdUMiwgU2hvdWxkRmlsdGVySW1tZWRpYXRlcywgV3JpdGVCYXJyaWVyRm9y
VmFyaWFibGVBY2Nlc3MpOwogfQpAQCAtMTUzMCw4ICsxNTMwLDggQEAgSklUOjpKdW1wTGlzdCBK
SVQ6OmVtaXRJbnRUeXBlZEFycmF5R2V0QgogICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShy
ZXN1bHRQYXlsb2FkLCBmcFJlZ1QwKTsKICAgICAgICAgYWRkRG91YmxlKEFic29sdXRlQWRkcmVz
cygmdHdvVG9UaGUzMiksIGZwUmVnVDApOwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIG1v
dmVEb3VibGVUb1B0cihmcFJlZ1QwLCByZXN1bHRQYXlsb2FkKTsKLSAgICAgICAgc3ViUHRyKHRh
Z1R5cGVOdW1iZXJSZWdpc3RlciwgcmVzdWx0UGF5bG9hZCk7CisgICAgICAgIG1vdmVEb3VibGVU
bzY0KGZwUmVnVDAsIHJlc3VsdFBheWxvYWQpOworICAgICAgICBzdWI2NCh0YWdUeXBlTnVtYmVy
UmVnaXN0ZXIsIHJlc3VsdFBheWxvYWQpOwogI2Vsc2UKICAgICAgICAgbW92ZURvdWJsZVRvSW50
cyhmcFJlZ1QwLCByZXN1bHRQYXlsb2FkLCByZXN1bHRUYWcpOwogI2VuZGlmCkBAIC0xNTQxLDcg
KzE1NDEsNyBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEludFR5cGVkQXJyYXlHZXRCCiAgICAg
fQogCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBvclB0cih0YWdUeXBlTnVtYmVyUmVnaXN0ZXIs
IHJlc3VsdFBheWxvYWQpOworICAgIG9yNjQodGFnVHlwZU51bWJlclJlZ2lzdGVyLCByZXN1bHRQ
YXlsb2FkKTsKICNlbHNlCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcp
LCByZXN1bHRUYWcpOwogI2VuZGlmCkBAIC0xNTkwLDggKzE1OTAsOCBAQCBKSVQ6Okp1bXBMaXN0
IEpJVDo6ZW1pdEZsb2F0VHlwZWRBcnJheUdlCiAgICAgfQogICAgIAogI2lmIFVTRShKU1ZBTFVF
NjQpCi0gICAgbW92ZURvdWJsZVRvUHRyKGZwUmVnVDAsIHJlc3VsdFBheWxvYWQpOwotICAgIHN1
YlB0cih0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHJlc3VsdFBheWxvYWQpOworICAgIG1vdmVEb3Vi
bGVUbzY0KGZwUmVnVDAsIHJlc3VsdFBheWxvYWQpOworICAgIHN1YjY0KHRhZ1R5cGVOdW1iZXJS
ZWdpc3RlciwgcmVzdWx0UGF5bG9hZCk7CiAjZWxzZQogICAgIG1vdmVEb3VibGVUb0ludHMoZnBS
ZWdUMCwgcmVzdWx0UGF5bG9hZCwgcmVzdWx0VGFnKTsKICNlbmRpZgpAQCAtMTY5MSw4ICsxNjkx
LDggQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRGbG9hdFR5cGVkQXJyYXlQdQogICAgIEp1bXAg
cmVhZHkgPSBqdW1wKCk7CiAgICAgZG91YmxlQ2FzZS5saW5rKHRoaXMpOwogICAgIHNsb3dDYXNl
cy5hcHBlbmQoZW1pdEp1bXBJZk5vdEltbWVkaWF0ZU51bWJlcihlYXJseVNjcmF0Y2gpKTsKLSAg
ICBhZGRQdHIodGFnVHlwZU51bWJlclJlZ2lzdGVyLCBlYXJseVNjcmF0Y2gpOwotICAgIG1vdmVQ
dHJUb0RvdWJsZShlYXJseVNjcmF0Y2gsIGZwUmVnVDApOworICAgIGFkZDY0KHRhZ1R5cGVOdW1i
ZXJSZWdpc3RlciwgZWFybHlTY3JhdGNoKTsKKyAgICBtb3ZlNjRUb0RvdWJsZShlYXJseVNjcmF0
Y2gsIGZwUmVnVDApOwogICAgIHJlYWR5LmxpbmsodGhpcyk7CiAjZWxzZQogICAgIGVtaXRMb2Fk
KHZhbHVlLCBsYXRlU2NyYXRjaCwgZWFybHlTY3JhdGNoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUU3R1YkNhbGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFN0dWJDYWxsLmgJKHJldmlzaW9uIDEzMTY2MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUU3R1YkNhbGwuaAkod29ya2luZyBjb3B5KQpAQCAtOTQsMTUgKzk0
LDE1IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB7CiAgICAgICAgIH0KIAotI2lmIFVTRShK
U1ZBTFVFMzJfNjQpCiAgICAgICAgIEpJVFN0dWJDYWxsKEpJVCogaml0LCBFbmNvZGVkSlNWYWx1
ZSAoSklUX1NUVUIgKnN0dWIpKFNUVUJfQVJHU19ERUNMQVJBVElPTikpCiAgICAgICAgICAgICA6
IG1faml0KGppdCkKICAgICAgICAgICAgICwgbV9zdHViKHN0dWIpCisjaWYgVVNFKEpTVkFMVUUz
Ml82NCkgfHwgIUFTU0VSVF9ESVNBQkxFRAogICAgICAgICAgICAgLCBtX3JldHVyblR5cGUoVmFs
dWUpCisjZW5kaWYKICAgICAgICAgICAgICwgbV9zdGFja0luZGV4KEpJVFNUQUNLRlJBTUVfQVJH
U19JTkRFWCkKICAgICAgICAgewogICAgICAgICB9Ci0jZW5kaWYKIAogICAgICAgICAvLyBBcmd1
bWVudHMgYXJlIGFkZGVkIGZpcnN0IHRvIGxhc3QuCiAKQEAgLTEzNyw3ICsxMzcsMTEgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdm9pZCBhZGRBcmd1bWVudChKSVQ6OlJlZ2lzdGVySUQg
YXJndW1lbnQpCiAgICAgICAgIHsKKyNpZiBDUFUoWDg2XzY0KQorICAgICAgICAgICAgbV9qaXQt
PnBva2U2NChhcmd1bWVudCwgbV9zdGFja0luZGV4KTsKKyNlbHNlCiAgICAgICAgICAgICBtX2pp
dC0+cG9rZShhcmd1bWVudCwgbV9zdGFja0luZGV4KTsKKyNlbmRpZgogICAgICAgICAgICAgbV9z
dGFja0luZGV4ICs9IHN0YWNrSW5kZXhTdGVwOwogICAgICAgICB9CiAgICAgICAgIApAQCAtMTQ4
LDYgKzE1MiwxOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIG1faml0LT5wb2tlKEpJ
VDo6SW1tMzIodmFsdWUudGFnKCkpLCBtX3N0YWNrSW5kZXggKyAxKTsKICAgICAgICAgICAgIG1f
c3RhY2tJbmRleCArPSBzdGFja0luZGV4U3RlcDsKICAgICAgICAgfQorI2Vsc2UKKyAgICAgICAg
dm9pZCBhZGRBcmd1bWVudChKSVQ6OlRydXN0ZWRJbW02NCBhcmd1bWVudCkKKyAgICAgICAgewor
ICAgICAgICAgICAgbV9qaXQtPnBva2UoYXJndW1lbnQsIG1fc3RhY2tJbmRleCk7CisgICAgICAg
ICAgICBtX3N0YWNrSW5kZXggKz0gc3RhY2tJbmRleFN0ZXA7CisgICAgICAgIH0KKworICAgICAg
ICB2b2lkIGFkZEFyZ3VtZW50KEpJVDo6SW1tNjQgYXJndW1lbnQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIG1faml0LT5wb2tlKGFyZ3VtZW50LCBtX3N0YWNrSW5kZXgpOworICAgICAgICAgICAg
bV9zdGFja0luZGV4ICs9IHN0YWNrSW5kZXhTdGVwOworICAgICAgICB9CiAjZW5kaWYKIAogICAg
ICAgICB2b2lkIGFkZEFyZ3VtZW50KEpJVDo6UmVnaXN0ZXJJRCB0YWcsIEpJVDo6UmVnaXN0ZXJJ
RCBwYXlsb2FkKQpAQCAtMTc5LDkgKzE5NSw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2
b2lkIGFkZEFyZ3VtZW50KHVuc2lnbmVkIHNyYywgSklUOjpSZWdpc3RlcklEIHNjcmF0Y2hSZWdp
c3RlcikgLy8gc3JjIGlzIGEgdmlydHVhbCByZWdpc3Rlci4KICAgICAgICAgewogICAgICAgICAg
ICAgaWYgKG1faml0LT5tX2NvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoc3JjKSkK
LSAgICAgICAgICAgICAgICBhZGRBcmd1bWVudChKSVQ6OkltbVB0cihKU1ZhbHVlOjplbmNvZGUo
bV9qaXQtPm1fY29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpKSkpOworICAgICAgICAgICAgICAg
IGFkZEFyZ3VtZW50KEpJVDo6SW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKG1faml0LT5tX2NvZGVCbG9j
ay0+Z2V0Q29uc3RhbnQoc3JjKSkpKTsKICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAg
ICAgIG1faml0LT5sb2FkUHRyKEpJVDo6QWRkcmVzcyhKSVQ6OmNhbGxGcmFtZVJlZ2lzdGVyLCBz
cmMgKiBzaXplb2YoUmVnaXN0ZXIpKSwgc2NyYXRjaFJlZ2lzdGVyKTsKKyAgICAgICAgICAgICAg
ICBtX2ppdC0+bG9hZDY0KEpJVDo6QWRkcmVzcyhKSVQ6OmNhbGxGcmFtZVJlZ2lzdGVyLCBzcmMg
KiBzaXplb2YoUmVnaXN0ZXIpKSwgc2NyYXRjaFJlZ2lzdGVyKTsKICAgICAgICAgICAgICAgICBh
ZGRBcmd1bWVudChzY3JhdGNoUmVnaXN0ZXIpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAg
bV9qaXQtPmtpbGxMYXN0UmVzdWx0UmVnaXN0ZXIoKTsKQEAgLTI0Miw3ICsyNTgsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKICNlbHNlCiAgICAgICAgIEpJVDo6Q2FsbCBjYWxsKHVuc2lnbmVkIGRzdCkg
Ly8gZHN0IGlzIGEgdmlydHVhbCByZWdpc3Rlci4KICAgICAgICAgewotICAgICAgICAgICAgQVNT
RVJUKG1fcmV0dXJuVHlwZSA9PSBWb2lkUHRyIHx8IG1fcmV0dXJuVHlwZSA9PSBDZWxsKTsKKyAg
ICAgICAgICAgIEFTU0VSVChtX3JldHVyblR5cGUgPT0gVmFsdWUgfHwgbV9yZXR1cm5UeXBlID09
IENlbGwpOwogICAgICAgICAgICAgSklUOjpDYWxsIGNhbGwgPSB0aGlzLT5jYWxsKCk7CiAgICAg
ICAgICAgICBtX2ppdC0+ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogICAgICAgICAgICAg
cmV0dXJuIGNhbGw7CkBAIC0yNTAsNyArMjY2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IAogICAgICAgICBKSVQ6OkNhbGwgY2FsbFdpdGhWYWx1ZVByb2ZpbGluZyh1bnNpZ25lZCBkc3Qp
CiAgICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChtX3JldHVyblR5cGUgPT0gVm9pZFB0ciB8
fCBtX3JldHVyblR5cGUgPT0gQ2VsbCk7CisgICAgICAgICAgICBBU1NFUlQobV9yZXR1cm5UeXBl
ID09IFZhbHVlIHx8IG1fcmV0dXJuVHlwZSA9PSBDZWxsKTsKICAgICAgICAgICAgIEpJVDo6Q2Fs
bCBjYWxsID0gdGhpcy0+Y2FsbCgpOwogICAgICAgICAgICAgQVNTRVJUKEpJVDo6cmV0dXJuVmFs
dWVSZWdpc3RlciA9PSBKSVQ6OnJlZ1QwKTsKICAgICAgICAgICAgIG1faml0LT5lbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKCk7CkBAIC0yNjEsMTAgKzI3Nyw4IEBAIG5hbWVzcGFjZSBKU0MgewogCiAg
ICAgICAgIEpJVDo6Q2FsbCBjYWxsKEpJVDo6UmVnaXN0ZXJJRCBkc3QpIC8vIGRzdCBpcyBhIG1h
Y2hpbmUgcmVnaXN0ZXIuCiAgICAgICAgIHsKLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQorI2lmIFVT
RShKU1ZBTFVFMzJfNjQpIHx8ICFBU1NFUlRfRElTQUJMRUQKICAgICAgICAgICAgIEFTU0VSVCht
X3JldHVyblR5cGUgPT0gVmFsdWUgfHwgbV9yZXR1cm5UeXBlID09IFZvaWRQdHIgfHwgbV9yZXR1
cm5UeXBlID09IEludCB8fCBtX3JldHVyblR5cGUgPT0gQ2VsbCk7Ci0jZWxzZQotICAgICAgICAg
ICAgQVNTRVJUKG1fcmV0dXJuVHlwZSA9PSBWb2lkUHRyIHx8IG1fcmV0dXJuVHlwZSA9PSBJbnQg
fHwgbV9yZXR1cm5UeXBlID09IENlbGwpOwogI2VuZGlmCiAgICAgICAgICAgICBKSVQ6OkNhbGwg
Y2FsbCA9IHRoaXMtPmNhbGwoKTsKICAgICAgICAgICAgIGlmIChkc3QgIT0gSklUOjpyZXR1cm5W
YWx1ZVJlZ2lzdGVyKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KU0ludGVyZmFj
ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSlNJbnRlcmZh
Y2VKSVQuaAkocmV2aXNpb24gMTMxNjYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
U0ludGVyZmFjZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNzAsMzYgKzI3MCwzNiBAQCBuYW1l
c3BhY2UgSlNDIHsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIEFMV0FZU19JTkxJTkUgSlNJbnRl
cmZhY2VKSVQ6Okp1bXAgSlNJbnRlcmZhY2VKSVQ6OmVtaXRKdW1wSWZJbW1lZGlhdGVOdW1iZXIo
UmVnaXN0ZXJJRCByZWcpCiAgICAgewotICAgICAgICByZXR1cm4gYnJhbmNoVGVzdFB0cihOb25a
ZXJvLCByZWcsIHRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7CisgICAgICAgIHJldHVybiBicmFuY2hU
ZXN0NjQoTm9uWmVybywgcmVnLCB0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOwogICAgIH0KICAgICBB
TFdBWVNfSU5MSU5FIEpTSW50ZXJmYWNlSklUOjpKdW1wIEpTSW50ZXJmYWNlSklUOjplbWl0SnVt
cElmTm90SW1tZWRpYXRlTnVtYmVyKFJlZ2lzdGVySUQgcmVnKQogICAgIHsKLSAgICAgICAgcmV0
dXJuIGJyYW5jaFRlc3RQdHIoWmVybywgcmVnLCB0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOworICAg
ICAgICByZXR1cm4gYnJhbmNoVGVzdDY0KFplcm8sIHJlZywgdGFnVHlwZU51bWJlclJlZ2lzdGVy
KTsKICAgICB9CiAgICAgaW5saW5lIEpTSW50ZXJmYWNlSklUOjpKdW1wIEpTSW50ZXJmYWNlSklU
OjplbWl0TG9hZEpTQ2VsbCh1bnNpZ25lZCB2aXJ0dWFsUmVnaXN0ZXJJbmRleCwgUmVnaXN0ZXJJ
RCBkc3QpCiAgICAgewotICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVy
SW5kZXgpLCBkc3QpOwotICAgICAgICByZXR1cm4gYnJhbmNoVGVzdFB0cihOb25aZXJvLCBkc3Qs
IHRhZ01hc2tSZWdpc3Rlcik7CisgICAgICAgIGxvYWQ2NChhZGRyZXNzRm9yKHZpcnR1YWxSZWdp
c3RlckluZGV4KSwgZHN0KTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaFRlc3Q2NChOb25aZXJvLCBk
c3QsIHRhZ01hc2tSZWdpc3Rlcik7CiAgICAgfQogICAgIAogICAgIGlubGluZSBKU0ludGVyZmFj
ZUpJVDo6SnVtcCBKU0ludGVyZmFjZUpJVDo6ZW1pdExvYWRJbnQzMih1bnNpZ25lZCB2aXJ0dWFs
UmVnaXN0ZXJJbmRleCwgUmVnaXN0ZXJJRCBkc3QpCiAgICAgewotICAgICAgICBsb2FkUHRyKGFk
ZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVySW5kZXgpLCBkc3QpOwotICAgICAgICBKdW1wIHJlc3Vs
dCA9IGJyYW5jaFB0cihCZWxvdywgZHN0LCB0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOworICAgICAg
ICBsb2FkNjQoYWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXJJbmRleCksIGRzdCk7CisgICAgICAg
IEp1bXAgcmVzdWx0ID0gYnJhbmNoNjQoQmVsb3csIGRzdCwgdGFnVHlwZU51bWJlclJlZ2lzdGVy
KTsKICAgICAgICAgemVyb0V4dGVuZDMyVG9QdHIoZHN0LCBkc3QpOwogICAgICAgICByZXR1cm4g
cmVzdWx0OwogICAgIH0KIAogICAgIGlubGluZSBKU0ludGVyZmFjZUpJVDo6SnVtcCBKU0ludGVy
ZmFjZUpJVDo6ZW1pdExvYWREb3VibGUodW5zaWduZWQgdmlydHVhbFJlZ2lzdGVySW5kZXgsIEZQ
UmVnaXN0ZXJJRCBkc3QsIFJlZ2lzdGVySUQgc2NyYXRjaCkKICAgICB7Ci0gICAgICAgIGxvYWRQ
dHIoYWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXJJbmRleCksIHNjcmF0Y2gpOworICAgICAgICBs
b2FkNjQoYWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXJJbmRleCksIHNjcmF0Y2gpOwogICAgICAg
ICBKdW1wIG5vdE51bWJlciA9IGVtaXRKdW1wSWZOb3RJbW1lZGlhdGVOdW1iZXIoc2NyYXRjaCk7
Ci0gICAgICAgIEp1bXAgbm90SW50ID0gYnJhbmNoUHRyKEJlbG93LCBzY3JhdGNoLCB0YWdUeXBl
TnVtYmVyUmVnaXN0ZXIpOworICAgICAgICBKdW1wIG5vdEludCA9IGJyYW5jaDY0KEJlbG93LCBz
Y3JhdGNoLCB0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOwogICAgICAgICBjb252ZXJ0SW50MzJUb0Rv
dWJsZShzY3JhdGNoLCBkc3QpOwogICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAgICAgICAg
IG5vdEludC5saW5rKHRoaXMpOwotICAgICAgICBhZGRQdHIodGFnVHlwZU51bWJlclJlZ2lzdGVy
LCBzY3JhdGNoKTsKLSAgICAgICAgbW92ZVB0clRvRG91YmxlKHNjcmF0Y2gsIGRzdCk7CisgICAg
ICAgIGFkZDY0KHRhZ1R5cGVOdW1iZXJSZWdpc3Rlciwgc2NyYXRjaCk7CisgICAgICAgIG1vdmU2
NFRvRG91YmxlKHNjcmF0Y2gsIGRzdCk7CiAgICAgICAgIGRvbmUubGluayh0aGlzKTsKICAgICAg
ICAgcmV0dXJuIG5vdE51bWJlcjsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L1NwZWNpYWxpemVkVGh1bmtKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L1NwZWNpYWxpemVkVGh1bmtKSVQuaAkocmV2aXNpb24gMTMxNjYzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TcGVjaWFsaXplZFRodW5rSklULmgJKHdvcmtpbmcgY29w
eSkKQEAgLTkwLDkgKzkwLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgcmV0dXJu
RG91YmxlKEZQUmVnaXN0ZXJJRCBzcmMpCiAgICAgICAgIHsKICNpZiBVU0UoSlNWQUxVRTY0KQot
ICAgICAgICAgICAgbW92ZURvdWJsZVRvUHRyKHNyYywgcmVnVDApOwotICAgICAgICAgICAgSnVt
cCB6ZXJvID0gYnJhbmNoVGVzdFB0cihaZXJvLCByZWdUMCk7Ci0gICAgICAgICAgICBzdWJQdHIo
dGFnVHlwZU51bWJlclJlZ2lzdGVyLCByZWdUMCk7CisgICAgICAgICAgICBtb3ZlRG91YmxlVG82
NChzcmMsIHJlZ1QwKTsKKyAgICAgICAgICAgIEp1bXAgemVybyA9IGJyYW5jaFRlc3Q2NChaZXJv
LCByZWdUMCk7CisgICAgICAgICAgICBzdWI2NCh0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHJlZ1Qw
KTsKICAgICAgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKICAgICAgICAgICAgIHplcm8ubGlu
ayh0aGlzKTsKICAgICAgICAgICAgIG1vdmUodGFnVHlwZU51bWJlclJlZ2lzdGVyLCByZWdUMCk7
CkBAIC0xNTEsNyArMTUxLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgdGFnUmV0
dXJuQXNJbnQzMigpCiAgICAgICAgIHsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICAgICAg
b3JQdHIodGFnVHlwZU51bWJlclJlZ2lzdGVyLCByZWdUMCk7CisgICAgICAgICAgICBvcjY0KHRh
Z1R5cGVOdW1iZXJSZWdpc3RlciwgcmVnVDApOwogI2Vsc2UKICAgICAgICAgICAgIG1vdmUoVHJ1
c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSwgcmVnVDEpOwogI2VuZGlmCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhbHVlLmNwcAkocmV2aXNpb24gMTMxNjYzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYWx1ZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIwNCw3ICsyMDQsNyBAQCBjaGFyKiBKU1ZhbHVlOjpkZXNjcmlwdGlvbigpIGNvbnN0
CiAgICAgICAgIHNucHJpbnRmKGRlc2NyaXB0aW9uLCBzaXplLCAiSW50MzI6ICVkIiwgYXNJbnQz
MigpKTsKICAgICBlbHNlIGlmIChpc0RvdWJsZSgpKSB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAg
ICAgICAgc25wcmludGYoZGVzY3JpcHRpb24sIHNpemUsICJEb3VibGU6ICVseCwgJWxmIiwgcmVp
bnRlcnByZXREb3VibGVUb0ludHB0cihhc0RvdWJsZSgpKSwgYXNEb3VibGUoKSk7CisgICAgICAg
IHNucHJpbnRmKGRlc2NyaXB0aW9uLCBzaXplLCAiRG91YmxlOiAlbGxkLCAlbGYiLCAobG9uZyBs
b25nKXJlaW50ZXJwcmV0RG91YmxlVG9JbnQ2NChhc0RvdWJsZSgpKSwgYXNEb3VibGUoKSk7CiAj
ZWxzZQogICAgICAgICB1bmlvbiB7CiAgICAgICAgICAgICBkb3VibGUgYXNEb3VibGU7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhbHVlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYWx1ZS5oCShyZXZpc2lvbiAxMzE2NjMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhbHVlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTY5LDExICs2OSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGVudW0gUHJlZmVycmVk
UHJpbWl0aXZlVHlwZSB7IE5vUHJlZmVyZW5jZSwgUHJlZmVyTnVtYmVyLCBQcmVmZXJTdHJpbmcg
fTsKIAogCi0jaWYgVVNFKEpTVkFMVUUzMl82NCkKICAgICB0eXBlZGVmIGludDY0X3QgRW5jb2Rl
ZEpTVmFsdWU7Ci0jZWxzZQotICAgIHR5cGVkZWYgdm9pZCogRW5jb2RlZEpTVmFsdWU7Ci0jZW5k
aWYKICAgICAKICAgICB1bmlvbiBFbmNvZGVkVmFsdWVEZXNjcmlwdG9yIHsKICAgICAgICAgaW50
NjRfdCBhc0ludDY0OwpAQCAtMzkwLDkgKzM4Niw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICBFbmNvZGVkVmFsdWVEZXNjcmlwdG9yIHU7CiAgICAgfTsKIAotI2lmIFVTRShKU1ZBTFVFMzJf
NjQpCiAgICAgdHlwZWRlZiBJbnRIYXNoPEVuY29kZWRKU1ZhbHVlPiBFbmNvZGVkSlNWYWx1ZUhh
c2g7CiAKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQogICAgIHN0cnVjdCBFbmNvZGVkSlNWYWx1ZUhh
c2hUcmFpdHMgOiBIYXNoVHJhaXRzPEVuY29kZWRKU1ZhbHVlPiB7CiAgICAgICAgIHN0YXRpYyBj
b25zdCBib29sIGVtcHR5VmFsdWVJc1plcm8gPSBmYWxzZTsKICAgICAgICAgc3RhdGljIEVuY29k
ZWRKU1ZhbHVlIGVtcHR5VmFsdWUoKSB7IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgp
KTsgfQpAQCAtNDAwLDggKzM5Niw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdGF0aWMg
Ym9vbCBpc0RlbGV0ZWRWYWx1ZShFbmNvZGVkSlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gdmFsdWUg
PT0gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoSlNWYWx1ZTo6SGFzaFRhYmxlRGVsZXRlZFZhbHVl
KSk7IH0KICAgICB9OwogI2Vsc2UKLSAgICB0eXBlZGVmIFB0ckhhc2g8RW5jb2RlZEpTVmFsdWU+
IEVuY29kZWRKU1ZhbHVlSGFzaDsKLQogICAgIHN0cnVjdCBFbmNvZGVkSlNWYWx1ZUhhc2hUcmFp
dHMgOiBIYXNoVHJhaXRzPEVuY29kZWRKU1ZhbHVlPiB7CiAgICAgICAgIHN0YXRpYyB2b2lkIGNv
bnN0cnVjdERlbGV0ZWRWYWx1ZShFbmNvZGVkSlNWYWx1ZSYgc2xvdCkgeyBzbG90ID0gSlNWYWx1
ZTo6ZW5jb2RlKEpTVmFsdWUoSlNWYWx1ZTo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlKSk7IH0KICAg
ICAgICAgc3RhdGljIGJvb2wgaXNEZWxldGVkVmFsdWUoRW5jb2RlZEpTVmFsdWUgdmFsdWUpIHsg
cmV0dXJuIHZhbHVlID09IEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKEpTVmFsdWU6Okhhc2hUYWJs
ZURlbGV0ZWRWYWx1ZSkpOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1ZhbHVlSW5saW5lTWV0aG9kcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTVmFsdWVJbmxpbmVNZXRob2RzLmgJKHJldmlzaW9uIDEzMTY2MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVmFsdWVJbmxpbmVNZXRob2RzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTE0MCw3ICsxNDAsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgKnRo
aXMgPSBKU1ZhbHVlKHN0YXRpY19jYXN0PGludDMyX3Q+KGQpKTsKICAgICB9CiAKLSNpZiBVU0Uo
SlNWQUxVRTMyXzY0KQogICAgIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBKU1ZhbHVlOjplbmNvZGUo
SlNWYWx1ZSB2YWx1ZSkKICAgICB7CiAgICAgICAgIHJldHVybiB2YWx1ZS51LmFzSW50NjQ7CkBA
IC0xNTMsNiArMTUyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHJldHVybiB2OwogICAg
IH0KIAorI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgaW5saW5lIEpTVmFsdWU6OkpTVmFsdWUo
KQogICAgIHsKICAgICAgICAgdS5hc0JpdHMudGFnID0gRW1wdHlWYWx1ZVRhZzsKQEAgLTMzMywx
NyArMzMzLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICNlbHNlIC8vICFVU0UoSlNWQUxVRTMyXzY0
KSBpLmUuIFVTRShKU1ZBTFVFNjQpCiAKLSAgICAvLyBKU1ZhbHVlIG1lbWJlciBmdW5jdGlvbnMu
Ci0gICAgaW5saW5lIEVuY29kZWRKU1ZhbHVlIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlIHZhbHVl
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIHZhbHVlLnUucHRyOwotICAgIH0KLQotICAgIGlubGlu
ZSBKU1ZhbHVlIEpTVmFsdWU6OmRlY29kZShFbmNvZGVkSlNWYWx1ZSBwdHIpCi0gICAgewotICAg
ICAgICByZXR1cm4gSlNWYWx1ZShyZWludGVycHJldF9jYXN0PEpTQ2VsbCo+KHB0cikpOwotICAg
IH0KLQogICAgIC8vIDB4MCBjYW4gbmV2ZXIgb2NjdXIgbmF0dXJhbGx5IGJlY2F1c2UgaXQgaGFz
IGEgdGFnIG9mIDAwLCBpbmRpY2F0aW5nIGEgcG9pbnRlciB2YWx1ZSwgYnV0IGEgcGF5bG9hZCBv
ZiAweDAsIHdoaWNoIGlzIGluIHRoZSAoaW52YWxpZCkgemVybyBwYWdlLgogICAgIGlubGluZSBK
U1ZhbHVlOjpKU1ZhbHVlKCkKICAgICB7CkBAIC0zNTgsMjcgKzM0NywyNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKIAogICAgIGlubGluZSBKU1ZhbHVlOjpKU1ZhbHVlKEpTQ2VsbCogcHRyKQogICAgIHsK
LSAgICAgICAgdS5wdHIgPSBwdHI7CisgICAgICAgIHUuYXNJbnQ2NCA9IHJlaW50ZXJwcmV0X2Nh
c3Q8dWludHB0cl90PihwdHIpOwogICAgIH0KIAogICAgIGlubGluZSBKU1ZhbHVlOjpKU1ZhbHVl
KGNvbnN0IEpTQ2VsbCogcHRyKQogICAgIHsKLSAgICAgICAgdS5wdHIgPSBjb25zdF9jYXN0PEpT
Q2VsbCo+KHB0cik7CisgICAgICAgIHUuYXNJbnQ2NCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0
cl90Pihjb25zdF9jYXN0PEpTQ2VsbCo+KHB0cikpOwogICAgIH0KIAogICAgIGlubGluZSBKU1Zh
bHVlOjpvcGVyYXRvciBib29sKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiB1LnB0cjsK
KyAgICAgICAgcmV0dXJuIHUuYXNJbnQ2NDsKICAgICB9CiAKICAgICBpbmxpbmUgYm9vbCBKU1Zh
bHVlOjpvcGVyYXRvcj09KGNvbnN0IEpTVmFsdWUmIG90aGVyKSBjb25zdAogICAgIHsKLSAgICAg
ICAgcmV0dXJuIHUucHRyID09IG90aGVyLnUucHRyOworICAgICAgICByZXR1cm4gdS5hc0ludDY0
ID09IG90aGVyLnUuYXNJbnQ2NDsKICAgICB9CiAKICAgICBpbmxpbmUgYm9vbCBKU1ZhbHVlOjpv
cGVyYXRvciE9KGNvbnN0IEpTVmFsdWUmIG90aGVyKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0
dXJuIHUucHRyICE9IG90aGVyLnUucHRyOworICAgICAgICByZXR1cm4gdS5hc0ludDY0ICE9IG90
aGVyLnUuYXNJbnQ2NDsKICAgICB9CiAKICAgICBpbmxpbmUgYm9vbCBKU1ZhbHVlOjppc0VtcHR5
KCkgY29uc3QKQEAgLTQ2NCwxOCArNDUzLDE4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBy
ZXR1cm4gKHUuYXNJbnQ2NCAmIFRhZ1R5cGVOdW1iZXIpID09IFRhZ1R5cGVOdW1iZXI7CiAgICAg
fQogCi0gICAgaW5saW5lIGludHB0cl90IHJlaW50ZXJwcmV0RG91YmxlVG9JbnRwdHIoZG91Ymxl
IHZhbHVlKQorICAgIGlubGluZSBpbnQ2NF90IHJlaW50ZXJwcmV0RG91YmxlVG9JbnQ2NChkb3Vi
bGUgdmFsdWUpCiAgICAgewotICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PGludHB0cl90Pih2
YWx1ZSk7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8aW50NjRfdD4odmFsdWUpOwogICAg
IH0KLSAgICBpbmxpbmUgZG91YmxlIHJlaW50ZXJwcmV0SW50cHRyVG9Eb3VibGUoaW50cHRyX3Qg
dmFsdWUpCisgICAgaW5saW5lIGRvdWJsZSByZWludGVycHJldEludDY0VG9Eb3VibGUoaW50NjRf
dCB2YWx1ZSkKICAgICB7CiAgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8ZG91YmxlPih2YWx1
ZSk7CiAgICAgfQogCiAgICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlOjpKU1ZhbHVlKEVuY29kZUFz
RG91YmxlVGFnLCBkb3VibGUgZCkKICAgICB7Ci0gICAgICAgIHUuYXNJbnQ2NCA9IHJlaW50ZXJw
cmV0RG91YmxlVG9JbnRwdHIoZCkgKyBEb3VibGVFbmNvZGVPZmZzZXQ7CisgICAgICAgIHUuYXNJ
bnQ2NCA9IHJlaW50ZXJwcmV0RG91YmxlVG9JbnQ2NChkKSArIERvdWJsZUVuY29kZU9mZnNldDsK
ICAgICB9CiAKICAgICBpbmxpbmUgSlNWYWx1ZTo6SlNWYWx1ZShpbnQgaSkKQEAgLTQ4Niw3ICs0
NzUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBpbmxpbmUgZG91YmxlIEpTVmFsdWU6OmFzRG91
YmxlKCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChpc0RvdWJsZSgpKTsKLSAgICAgICAg
cmV0dXJuIHJlaW50ZXJwcmV0SW50cHRyVG9Eb3VibGUodS5hc0ludDY0IC0gRG91YmxlRW5jb2Rl
T2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0SW50NjRUb0RvdWJsZSh1LmFzSW50
NjQgLSBEb3VibGVFbmNvZGVPZmZzZXQpOwogICAgIH0KIAogICAgIGlubGluZSBib29sIEpTVmFs
dWU6OmlzTnVtYmVyKCkgY29uc3QK
</data>
<flag name="review"
          id="182553"
          type_id="1"
          status="-"
          setter="barraclough"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>169543</attachid>
            <date>2012-10-18 21:37:30 -0700</date>
            <delta_ts>2012-10-18 22:40:54 -0700</delta_ts>
            <desc>Updated: Split patch - part 2: let the JIT compilers use the *64 interfaces of MacroAssemblerX86_64</desc>
            <filename>99154.part2.3.patch</filename>
            <type>text/plain</type>
            <size>224703</size>
            <attacher name="Yuqiang Xian">yuqiang.xian</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTMxODUwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI0MCBA
QAorMjAxMi0xMC0xOCAgWXVxaWFuZyBYaWFuICA8eXVxaWFuZy54aWFuQGludGVsLmNvbT4KKwor
ICAgICAgICBSZWZhY3RvciBNYWNyb0Fzc2VtYmxlciBpbnRlcmZhY2VzIHRvIGRpZmZlcmVudGlh
dGUgdGhlIHBvaW50ZXIgb3BlcmFuZHMgZnJvbSB0aGUgNjQtYml0IGludGVnZXIgb3BlcmFuZHMK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk5MTU0CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW4gY3VycmVu
dCBKYXZhU2NyaXB0Q29yZSBpbXBsZW1lbnRhdGlvbiBmb3IgSlNWQUxVRTY0IHBsYXRmb3JtIChp
LmUuLAorICAgICAgICB0aGUgWDY0IHBsYXRmb3JtKSwgd2UgYXNzdW1lIHRoYXQgdGhlIEpTVmFs
dWUgc2l6ZSBpcyBzYW1lIHRvIHRoZQorICAgICAgICBwb2ludGVyIHNpemUsIGFuZCB0aHVzIEVu
Y29kZWRKU1ZhbHVlIGlzIHNpbXBseSB0eXBlIGRlZmluZWQgYXMgYQorICAgICAgICAidm9pZCoi
LiBJbiB0aGUgSklUIGNvbXBpbGVyLCB3ZSBhbHNvIHRha2UgdGhpcyBhc3N1bXB0aW9uIGFuZCBp
bnZva2UKKyAgICAgICAgdGhlIHNhbWUgbWFjcm8gYXNzZW1ibGVyIGludGVyZmFjZXMgZm9yIGJv
dGggSlNWYWx1ZSBhbmQgcG9pbnRlcgorICAgICAgICBvcGVyYW5kcy4gV2UgbmVlZCB0byBkaWZm
ZXJlbnRpYXRlIHRoZSBvcGVyYXRpb25zIG9uIHBvaW50ZXJzIGZyb20gdGhlCisgICAgICAgIG9w
ZXJhdGlvbnMgb24gSlNWYWx1ZXMsIGFuZCBsZXQgdGhlbSBpbnZva2luZyBkaWZmZXJlbnQgbWFj
cm8KKyAgICAgICAgYXNzZW1ibGVyIGludGVyZmFjZXMuIEZvciBleGFtcGxlLCB3ZSBub3cgdXNl
IHRoZSBpbnRlcmZhY2Ugb2YKKyAgICAgICAgImxvYWRQdHIiIHRvIGxvYWQgZWl0aGVyIGEgcG9p
bnRlciBvciBhIEpTVmFsdWUsIGFuZCB3ZSBuZWVkIHRvIHN3aXRjaAorICAgICAgICB0byB1c2lu
ZyAibG9hZFB0ciIgdG8gbG9hZCBhIHBvaW50ZXIgYW5kIHNvbWUgbmV3ICJsb2FkNjQiIGludGVy
ZmFjZQorICAgICAgICB0byBsb2FkIGEgSlNWYWx1ZS4gVGhpcyB3b3VsZCBoZWxwIHVzIHN1cHBv
cnRpbmcgb3RoZXIgSlNWQUxVRTY0CisgICAgICAgIHBsYXRmb3JtcyB3aGVyZSBwb2ludGVyIHNp
emUgaXMgbm90IG5lY2Vzc2FyaWx5IDY0LWJpdHMsIGZvciBleGFtcGxlCisgICAgICAgIHgzMiAo
YnVnICM5OTE1MykuCisKKyAgICAgICAgVGhlIG1ham9yIG1vZGlmaWNhdGlvbiBJIG1hZGUgaXMg
dG8gaW50cm9kdWNlIHRoZSAiKjY0IiBpbnRlcmZhY2VzIGluCisgICAgICAgIHRoZSBNYWNyb0Fz
c2VtYmxlciBmb3IgdGhvc2Ugb3BlcmF0aW9ucyBvbiBKU1ZhbHVlcywga2VlcCB0aGUgIipQdHIi
CisgICAgICAgIGludGVyZmFjZXMgZm9yIHRob3NlIG9wZXJhdGlvbnMgb24gcmVhbCBwb2ludGVy
cywgYW5kIGdvIHRocm91Z2ggYWxsCisgICAgICAgIHRoZSBKSVQgY29tcGlsZXIgY29kZSB0byBj
b3JyZWN0IHRoZSB1c2FnZS4KKworICAgICAgICBUaGlzIGlzIHRoZSBzZWNvbmQgcGFydCBvZiB0
aGUgd29yaywgaS5lLCB0byBjb3JyZWN0IHRoZSB1c2FnZSBvZiB0aGUKKyAgICAgICAgbmV3IE1h
Y3JvQXNzZW1ibGVyIGludGVyZmFjZXMgaW4gdGhlIEpJVCBjb21waWxlcnMsIHdoaWNoIGFsc28g
bWVhbnMKKyAgICAgICAgdGhhdCBub3cgRW5jb2RlZEpTVmFsdWUgaXMgZGVmaW5lZCBhcyBhIDY0
LWJpdCBpbnRlZ2VyLCBhbmQgdGhlICIqNjQiCisgICAgICAgIGludGVyZmFjZXMgYXJlIHVzZWQg
Zm9yIGl0LgorCisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmg6IEpTVmFsdWUg
aW1tZWRpYXRlcyBzaG91bGQgYmUgaW4gSW1tNjQgaW5zdGVhZCBvZiBJbW1QdHIuCisgICAgICAg
IChNYWNyb0Fzc2VtYmxlcik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyOjpzaG91bGRC
bGluZCk6CisgICAgICAgICogZGZnL0RGR0Fzc2VtYmx5SGVscGVycy5jcHA6IENvcnJlY3QgdGhl
IEpJVCBjb21waWxlcnMgdXNhZ2Ugb2YgdGhlIG5ldyBpbnRlcmZhY2VzLgorICAgICAgICAoSlND
OjpERkc6OkFzc2VtYmx5SGVscGVyczo6aml0QXNzZXJ0SXNJbnQzMik6CisgICAgICAgIChKU0M6
OkRGRzo6QXNzZW1ibHlIZWxwZXJzOjpqaXRBc3NlcnRJc0pTSW50MzIpOgorICAgICAgICAoSlND
OjpERkc6OkFzc2VtYmx5SGVscGVyczo6aml0QXNzZXJ0SXNKU051bWJlcik6CisgICAgICAgIChK
U0M6OkRGRzo6QXNzZW1ibHlIZWxwZXJzOjpqaXRBc3NlcnRJc0pTRG91YmxlKToKKyAgICAgICAg
KEpTQzo6REZHOjpBc3NlbWJseUhlbHBlcnM6OmppdEFzc2VydElzQ2VsbCk6CisgICAgICAgICog
ZGZnL0RGR0Fzc2VtYmx5SGVscGVycy5oOgorICAgICAgICAoSlNDOjpERkc6OkFzc2VtYmx5SGVs
cGVyczo6ZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKToKKyAgICAgICAgKEpTQzo6REZHOjpBc3Nl
bWJseUhlbHBlcnM6OmJyYW5jaElmTm90Q2VsbCk6CisgICAgICAgIChKU0M6OkRGRzo6QXNzZW1i
bHlIZWxwZXJzOjpkZWJ1Z0NhbGwpOgorICAgICAgICAoSlNDOjpERkc6OkFzc2VtYmx5SGVscGVy
czo6Ym94RG91YmxlKToKKyAgICAgICAgKEpTQzo6REZHOjpBc3NlbWJseUhlbHBlcnM6OnVuYm94
RG91YmxlKToKKyAgICAgICAgKEpTQzo6REZHOjpBc3NlbWJseUhlbHBlcnM6OmVtaXRFeGNlcHRp
b25DaGVjayk6CisgICAgICAgICogZGZnL0RGR0NDYWxsSGVscGVycy5oOgorICAgICAgICAoSlND
OjpERkc6OkNDYWxsSGVscGVyczo6c2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKToKKyAgICAg
ICAgKENDYWxsSGVscGVycyk6CisgICAgICAgICogZGZnL0RGR09TUkV4aXRDb21waWxlcjY0LmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KToKKyAg
ICAgICAgKiBkZmcvREZHUmVwYXRjaC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Z2VuZXJhdGVQ
cm90b0NoYWluQWNjZXNzU3R1Yik6CisgICAgICAgIChKU0M6OkRGRzo6dHJ5Q2FjaGVHZXRCeUlE
KToKKyAgICAgICAgKEpTQzo6REZHOjp0cnlCdWlsZEdldEJ5SURMaXN0KToKKyAgICAgICAgKEpT
Qzo6REZHOjplbWl0UHV0UmVwbGFjZVN0dWIpOgorICAgICAgICAoSlNDOjpERkc6OmVtaXRQdXRU
cmFuc2l0aW9uU3R1Yik6CisgICAgICAgICogZGZnL0RGR1NjcmF0Y2hSZWdpc3RlckFsbG9jYXRv
ci5oOgorICAgICAgICAoSlNDOjpERkc6OlNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6cHJlc2Vy
dmVVc2VkUmVnaXN0ZXJzVG9TY3JhdGNoQnVmZmVyKToKKyAgICAgICAgKEpTQzo6REZHOjpTY3Jh
dGNoUmVnaXN0ZXJBbGxvY2F0b3I6OnJlc3RvcmVVc2VkUmVnaXN0ZXJzRnJvbVNjcmF0Y2hCdWZm
ZXIpOgorICAgICAgICAqIGRmZy9ERkdTaWxlbnRSZWdpc3RlclNhdmVQbGFuLmg6CisgICAgICAg
ICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6Y2hlY2tBcmd1bWVudFR5cGVzKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZVZhbHVlVG9JbnQzMik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVJbnQzMlRvRG91YmxlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZUluc3RhbmNlT2ZGb3JPYmplY3QpOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlSW5zdGFuY2VPZik6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVTdHJpY3RFcUZvckNvbnN0YW50KToKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25Bcmd1bWVudHMpOgor
ICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgorICAgICAgICAoU3BlY3VsYXRpdmVK
SVQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpzaWxlbnRTYXZlUGxhbkZv
ckdQUik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnNpbGVudFNwaWxsKToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6c2lsZW50RmlsbCk6CisgICAgICAg
IChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnNwaWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6dmFsdWVPZkpTQ29uc3RhbnRBc0ltbTY0KToKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y2FsbE9wZXJhdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmJyYW5jaDY0KToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVK
SVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZpbGxJbnRlZ2Vy
KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZmlsbERvdWJsZSk6CisgICAg
ICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZpbGxKU1ZhbHVlKToKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVWYWx1ZVRvTnVtYmVyKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVWYWx1ZVRvSW50
MzIpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVVJ
bnQzMlRvTnVtYmVyKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVk
R2V0QnlJZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNhY2hlZFB1dEJ5
SWQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZU5v
blBlZXBob2xlQ29tcGFyZU51bGwpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklU
Ojpub25TcGVjdWxhdGl2ZVBlZXBob2xlQnJhbmNoTnVsbCk6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlUGVlcGhvbGVCcmFuY2gpOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZU5vblBlZXBob2xlQ29tcGFy
ZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlUGVl
cGhvbGVTdHJpY3RFcSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6Om5vblNw
ZWN1bGF0aXZlTm9uUGVlcGhvbGVTdHJpY3RFcSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRpdmVKSVQ6OmVtaXRDYWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
ZmlsbFNwZWN1bGF0ZUludEludGVybmFsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6ZmlsbFNwZWN1bGF0ZURvdWJsZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OmZpbGxTcGVjdWxhdGVDZWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6ZmlsbFNwZWN1bGF0ZUJvb2xlYW4pOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpjb252ZXJ0VG9Eb3VibGUpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZl
SklUOjpjb21waWxlT2JqZWN0RXF1YWxpdHkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpjb21waWxlT2JqZWN0VG9PYmplY3RPck90aGVyRXF1YWxpdHkpOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVPYmplY3RUb09iamVjdE9y
T3RoZXJFcXVhbGl0eSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVEb3VibGVDb21wYXJlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZU5vblN0cmluZ0NlbGxPck90aGVyTG9naWNhbE5vdCk6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVMb2dpY2FsTm90KToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6ZW1pdE5vblN0cmluZ0NlbGxPck90aGVyQnJhbmNoKToKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdEJyYW5jaCk6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDb250aWd1b3VzR2V0QnlWYWwpOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJyYXlTdG9yYWdlR2V0QnlWYWwpOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlQ29udGlndW91c1B1dEJ5
VmFsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFycmF5U3Rv
cmFnZVB1dEJ5VmFsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZSk6CisgICAgICAgICogZGZnL0RGR1RodW5rcy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6b3Ny
RXhpdEdlbmVyYXRpb25UaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkRGRzo6dGhyb3dF
eGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6REZHOjpz
bG93UGF0aEZvcik6CisgICAgICAgIChKU0M6OkRGRzo6dmlydHVhbEZvclRodW5rR2VuZXJhdG9y
KToKKyAgICAgICAgKiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHA6CisgICAgICAgIChKU0M6
OkludGVycHJldGVyOjpkdW1wUmVnaXN0ZXJzKToKKyAgICAgICAgKiBqaXQvSklULmNwcDoKKyAg
ICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZSk6CisgICAgICAgICogaml0L0pJVC5oOgor
ICAgICAgICAoSklUKToKKyAgICAgICAgKiBqaXQvSklUQXJpdGhtZXRpYy5jcHA6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF9uZWdhdGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93
X29wX25lZ2F0ZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9yc2hpZnQpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX3Vyc2hpZnQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfY29tcGFyZUFuZEp1bXBTbG93KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2JpdGFu
ZCk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZUJpbmFyeUFyaXRoT3BTbG93Q2FzZSk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9kaXYpOgorICAgICAgICAqIGppdC9KSVRDYWxsLmNw
cDoKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlTG9hZFZhcmFyZ3MpOgorICAgICAgICAoSlND
OjpKSVQ6OmNvbXBpbGVDYWxsRXZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZUNhbGxF
dmFsU2xvd0Nhc2UpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVPcENhbGwpOgorICAgICAg
ICAqIGppdC9KSVRJbmxpbmVNZXRob2RzLmg6IEhhdmUgc29tZSBjbGVhbi11cCB3b3JrIGFzIHdl
bGwuCisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRQdXRDZWxsVG9DYWxs
RnJhbWVIZWFkZXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRQdXRJbnRUb0NhbGxGcmFtZUhl
YWRlcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlcjMyKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlcjY0KToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0QWxsb2NhdGVKU0FycmF5KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0R2V0SklUU3R1YkFyZyk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcik6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdElu
aXRSZWdpc3Rlcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEp1bXBJZkpTQ2VsbCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdEp1bXBJZkJvdGhKU0NlbGxzKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0SnVtcElmTm90SlNDZWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0TG9hZEludDMy
VG9Eb3VibGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRKdW1wSWZJbW1lZGlhdGVJbnRlZ2Vy
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0SnVtcElmTm90SW1tZWRpYXRlSW50ZWdlcik6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdEp1bXBJZk5vdEltbWVkaWF0ZUludGVnZXJzKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0RmFzdEFyaXRoUmVUYWdJbW1lZGlhdGUpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRGYXN0QXJpdGhJbnRUb0ltbU5vQ2hlY2spOgorICAgICAgICAqIGppdC9KSVRP
cGNvZGVzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUNUSU5hdGl2ZUNh
bGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbW92KToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX2luc3RhbmNlb2YpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaXNfdW5k
ZWZpbmVkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2lzX2Jvb2xlYW4pOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfaXNfbnVtYmVyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX3RlYXJfb2ZmX2FjdGl2YXRpb24pOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfbm90
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2pmYWxzZSk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9qZXFfbnVsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qbmVxX251
bGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfanRydWUpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3BfYml0eG9yKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2JpdG9yKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9wbmFtZXMpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3BfbmV4dF9wbmFtZSk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wU3Ry
aWN0RXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfY2F0Y2gpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfb3BfdGhyb3dfcmVmZXJlbmNlX2Vycm9yKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX2VxX251bGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbmVxX251bGwp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfY3JlYXRlX2FjdGl2YXRpb24pOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfY3JlYXRlX2FyZ3VtZW50cyk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9pbml0X2xhenlfcmVnKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19v
cF9jb252ZXJ0X3RoaXMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX25vdCk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfYXJndW1lbnRfYnlfdmFsKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX3B1dF90b19iYXNlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X3Jlc29sdmVfb3BlcmF0aW9ucyk6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzLmNw
cDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9ieV92YWwpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRDb250aWd1b3VzR2V0QnlWYWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRB
cnJheVN0b3JhZ2VHZXRCeVZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0
X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZUdldERpcmVjdE9mZnNldCk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfYnlfcG5hbWUpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRDb250aWd1b3VzUHV0QnlWYWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRBcnJh
eVN0b3JhZ2VQdXRCeVZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZUdldEJ5SWRIb3RQ
YXRoKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9ieV9pZCk6CisgICAgICAgIChK
U0M6OkpJVDo6Y29tcGlsZVB1dERpcmVjdE9mZnNldCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9pbml0X2dsb2JhbF9jb25zdCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pbml0
X2dsb2JhbF9jb25zdF9jaGVjayk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEludFR5cGVkQXJy
YXlHZXRCeVZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEZsb2F0VHlwZWRBcnJheUdldEJ5
VmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0RmxvYXRUeXBlZEFycmF5UHV0QnlWYWwpOgor
ICAgICAgICAqIGppdC9KSVRTdHViQ2FsbC5oOgorICAgICAgICAoSklUU3R1YkNhbGwpOgorICAg
ICAgICAoSlNDOjpKSVRTdHViQ2FsbDo6SklUU3R1YkNhbGwpOgorICAgICAgICAoSlNDOjpKSVRT
dHViQ2FsbDo6YWRkQXJndW1lbnQpOgorICAgICAgICAoSlNDOjpKSVRTdHViQ2FsbDo6Y2FsbCk6
CisgICAgICAgIChKU0M6OkpJVFN0dWJDYWxsOjpjYWxsV2l0aFZhbHVlUHJvZmlsaW5nKToKKyAg
ICAgICAgKiBqaXQvSlNJbnRlcmZhY2VKSVQuaDoKKyAgICAgICAgKEpTQzo6SlNJbnRlcmZhY2VK
SVQ6OmVtaXRKdW1wSWZJbW1lZGlhdGVOdW1iZXIpOgorICAgICAgICAoSlNDOjpKU0ludGVyZmFj
ZUpJVDo6ZW1pdEp1bXBJZk5vdEltbWVkaWF0ZU51bWJlcik6CisgICAgICAgIChKU0M6OkpTSW50
ZXJmYWNlSklUOjplbWl0TG9hZEpTQ2VsbCk6CisgICAgICAgIChKU0M6OkpTSW50ZXJmYWNlSklU
OjplbWl0TG9hZEludDMyKToKKyAgICAgICAgKEpTQzo6SlNJbnRlcmZhY2VKSVQ6OmVtaXRMb2Fk
RG91YmxlKToKKyAgICAgICAgKiBqaXQvU3BlY2lhbGl6ZWRUaHVua0pJVC5oOgorICAgICAgICAo
SlNDOjpTcGVjaWFsaXplZFRodW5rSklUOjpyZXR1cm5Eb3VibGUpOgorICAgICAgICAoSlNDOjpT
cGVjaWFsaXplZFRodW5rSklUOjp0YWdSZXR1cm5Bc0ludDMyKToKKyAgICAgICAgKiBydW50aW1l
L0pTVmFsdWUuY3BwOgorICAgICAgICAoSlNDOjpKU1ZhbHVlOjpkZXNjcmlwdGlvbik6CisgICAg
ICAgICogcnVudGltZS9KU1ZhbHVlLmg6IERlZmluZSBKU1ZBTFVFNjQgRW5jb2RlZEpTVmFsdWUg
YXMgaW50NjRfdCwgd2hpY2ggaXMgYWxzbyB1bmlmaWVkIHdpdGggSlNWQUxVRTMyXzY0LgorICAg
ICAgICAoSlNDKToKKyAgICAgICAgKiBydW50aW1lL0pTVmFsdWVJbmxpbmVNZXRob2RzLmg6IE5l
dyBpbXBsZW1lbnRhdGlvbiBvZiBzb21lIEpTVmFsdWUgbWV0aG9kcyB0byBtYWtlIHRoZW0gbW9y
ZSBjb25mb3JtYW50CisgICAgICAgIHdpdGggdGhlIG5ldyBydWxlIHRoYXQgIkpTVmFsdWUgaXMg
YSA2NC1iaXQgaW50ZWdlciByYXRoZXIgdGhhbiBhIHBvaW50ZXIiIGZvciBKU1ZBTFVFNjQgcGxh
dGZvcm1zLgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6SlNWYWx1ZTo6SlNWYWx1ZSk6
CisgICAgICAgIChKU0M6OkpTVmFsdWU6Om9wZXJhdG9yIGJvb2wpOgorICAgICAgICAoSlNDOjpK
U1ZhbHVlOjpvcGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6SlNWYWx1ZTo6b3BlcmF0b3IhPSk6
CisgICAgICAgIChKU0M6OnJlaW50ZXJwcmV0RG91YmxlVG9JbnQ2NCk6CisgICAgICAgIChKU0M6
OnJlaW50ZXJwcmV0SW50NjRUb0RvdWJsZSk6CisgICAgICAgIChKU0M6OkpTVmFsdWU6OmFzRG91
YmxlKToKKwogMjAxMi0xMC0xOCAgTWljaGFlbCBTYWJvZmYgIDxtc2Fib2ZmQGFwcGxlLmNvbT4K
IAogICAgICAgICBjb252ZXJ0VVRGOFRvVVRGMTYoKSBTaG91bGQgQ2hlY2sgZm9yIEFTQ0lJIElu
cHV0CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fz
c2VtYmxlci5oCShyZXZpc2lvbiAxMzE4NTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL01hY3JvQXNzZW1ibGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTcyOCwxNiArNzI4LDYg
QEAgcHVibGljOgogICAgICAgICByZXR1cm4gc3RvcmU2NFdpdGhBZGRyZXNzT2Zmc2V0UGF0Y2go
c3JjLCBhZGRyZXNzKTsKICAgICB9CiAKLSAgICB2b2lkIG1vdmVQdHJUb0RvdWJsZShSZWdpc3Rl
cklEIHNyYywgRlBSZWdpc3RlcklEIGRlc3QpCi0gICAgewotICAgICAgICBtb3ZlNjRUb0RvdWJs
ZShzcmMsIGRlc3QpOwotICAgIH0KLQotICAgIHZvaWQgbW92ZURvdWJsZVRvUHRyKEZQUmVnaXN0
ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKLSAgICB7Ci0gICAgICAgIG1vdmVEb3VibGVUbzY0
KHNyYywgZGVzdCk7Ci0gICAgfQotCiAgICAgdm9pZCBjb21wYXJlUHRyKFJlbGF0aW9uYWxDb25k
aXRpb24gY29uZCwgUmVnaXN0ZXJJRCBsZWZ0LCBUcnVzdGVkSW1tMzIgcmlnaHQsIFJlZ2lzdGVy
SUQgZGVzdCkKICAgICB7CiAgICAgICAgIGNvbXBhcmU2NChjb25kLCBsZWZ0LCByaWdodCwgZGVz
dCk7CkBAIC04OTUsMTQgKzg4NSw2IEBAIHB1YmxpYzoKICAgICAgICAgZGVmYXVsdDogewogICAg
ICAgICAgICAgaWYgKHZhbHVlIDw9IDB4ZmYpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICAgICAgSlNWYWx1ZSBqc1ZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKHJlaW50ZXJw
cmV0X2Nhc3Q8dm9pZCo+KHZhbHVlKSk7Ci0gICAgICAgICAgICBpZiAoanNWYWx1ZS5pc0ludDMy
KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHNob3VsZEJsaW5kKEltbTMyKGpzVmFsdWUuYXNJ
bnQzMigpKSk7Ci0gICAgICAgICAgICBpZiAoanNWYWx1ZS5pc0RvdWJsZSgpICYmICFzaG91bGRC
bGluZERvdWJsZShqc1ZhbHVlLmFzRG91YmxlKCkpKQotICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgICAgICAgICAgaWYgKCFzaG91bGRCbGluZERvdWJsZShiaXR3aXNlX2Nhc3Q8
ZG91YmxlPih2YWx1ZSkpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAg
fQogICAgICAgICB9CiAgICAgICAgIHJldHVybiBzaG91bGRCbGluZEZvclNwZWNpZmljQXJjaCh2
YWx1ZSk7CkBAIC05NTYsNiArOTM4LDE0IEBAIHB1YmxpYzoKICAgICAgICAgZGVmYXVsdDogewog
ICAgICAgICAgICAgaWYgKHZhbHVlIDw9IDB4ZmYpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgSlNWYWx1ZSBqc1ZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKHZhbHVl
KTsKKyAgICAgICAgICAgIGlmIChqc1ZhbHVlLmlzSW50MzIoKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gc2hvdWxkQmxpbmQoSW1tMzIoanNWYWx1ZS5hc0ludDMyKCkpKTsKKyAgICAgICAgICAg
IGlmIChqc1ZhbHVlLmlzRG91YmxlKCkgJiYgIXNob3VsZEJsaW5kRG91YmxlKGpzVmFsdWUuYXNE
b3VibGUoKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICBp
ZiAoIXNob3VsZEJsaW5kRG91YmxlKGJpdHdpc2VfY2FzdDxkb3VibGU+KHZhbHVlKSkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAg
cmV0dXJuIHNob3VsZEJsaW5kRm9yU3BlY2lmaWNBcmNoKHZhbHVlKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQXNzZW1ibHlIZWxwZXJzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fzc2VtYmx5SGVscGVycy5jcHAJKHJldmlzaW9u
IDEzMTg1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXNzZW1ibHlIZWxwZXJz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzMsNyArNzMsNyBAQCB2b2lkIEFzc2VtYmx5SGVscGVy
czo6Y2xlYXJTYW1wbGluZ0ZsYWcoCiB2b2lkIEFzc2VtYmx5SGVscGVyczo6aml0QXNzZXJ0SXNJ
bnQzMihHUFJSZWcgZ3ByKQogewogI2lmIENQVShYODZfNjQpCi0gICAgSnVtcCBjaGVja0ludDMy
ID0gYnJhbmNoUHRyKEJlbG93T3JFcXVhbCwgZ3ByLCBUcnVzdGVkSW1tUHRyKHJlaW50ZXJwcmV0
X2Nhc3Q8dm9pZCo+KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oMHhGRkZGRkZGRnUpKSkpOworICAg
IEp1bXAgY2hlY2tJbnQzMiA9IGJyYW5jaDY0KEJlbG93T3JFcXVhbCwgZ3ByLCBUcnVzdGVkSW1t
NjQoc3RhdGljX2Nhc3Q8dWludHB0cl90PigweEZGRkZGRkZGdSkpKTsKICAgICBicmVha3BvaW50
KCk7CiAgICAgY2hlY2tJbnQzMi5saW5rKHRoaXMpOwogI2Vsc2UKQEAgLTgzLDIyICs4MywyMiBA
QCB2b2lkIEFzc2VtYmx5SGVscGVyczo6aml0QXNzZXJ0SXNJbnQzMihHCiAKIHZvaWQgQXNzZW1i
bHlIZWxwZXJzOjpqaXRBc3NlcnRJc0pTSW50MzIoR1BSUmVnIGdwcikKIHsKLSAgICBKdW1wIGNo
ZWNrSlNJbnQzMiA9IGJyYW5jaFB0cihBYm92ZU9yRXF1YWwsIGdwciwgR1BSSW5mbzo6dGFnVHlw
ZU51bWJlclJlZ2lzdGVyKTsKKyAgICBKdW1wIGNoZWNrSlNJbnQzMiA9IGJyYW5jaDY0KEFib3Zl
T3JFcXVhbCwgZ3ByLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOwogICAgIGJyZWFr
cG9pbnQoKTsKICAgICBjaGVja0pTSW50MzIubGluayh0aGlzKTsKIH0KIAogdm9pZCBBc3NlbWJs
eUhlbHBlcnM6OmppdEFzc2VydElzSlNOdW1iZXIoR1BSUmVnIGdwcikKIHsKLSAgICBKdW1wIGNo
ZWNrSlNOdW1iZXIgPSBicmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBncHIs
IEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7CisgICAgSnVtcCBjaGVja0pTTnVtYmVy
ID0gYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBncHIsIEdQUkluZm86OnRh
Z1R5cGVOdW1iZXJSZWdpc3Rlcik7CiAgICAgYnJlYWtwb2ludCgpOwogICAgIGNoZWNrSlNOdW1i
ZXIubGluayh0aGlzKTsKIH0KIAogdm9pZCBBc3NlbWJseUhlbHBlcnM6OmppdEFzc2VydElzSlNE
b3VibGUoR1BSUmVnIGdwcikKIHsKLSAgICBKdW1wIGNoZWNrSlNJbnQzMiA9IGJyYW5jaFB0cihB
Ym92ZU9yRXF1YWwsIGdwciwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKLSAgICBK
dW1wIGNoZWNrSlNOdW1iZXIgPSBicmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJv
LCBncHIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7CisgICAgSnVtcCBjaGVja0pT
SW50MzIgPSBicmFuY2g2NChBYm92ZU9yRXF1YWwsIGdwciwgR1BSSW5mbzo6dGFnVHlwZU51bWJl
clJlZ2lzdGVyKTsKKyAgICBKdW1wIGNoZWNrSlNOdW1iZXIgPSBicmFuY2hUZXN0NjQoTWFjcm9B
c3NlbWJsZXI6Ok5vblplcm8sIGdwciwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsK
ICAgICBjaGVja0pTSW50MzIubGluayh0aGlzKTsKICAgICBicmVha3BvaW50KCk7CiAgICAgY2hl
Y2tKU051bWJlci5saW5rKHRoaXMpOwpAQCAtMTA2LDcgKzEwNiw3IEBAIHZvaWQgQXNzZW1ibHlI
ZWxwZXJzOjpqaXRBc3NlcnRJc0pTRG91YmwKIAogdm9pZCBBc3NlbWJseUhlbHBlcnM6OmppdEFz
c2VydElzQ2VsbChHUFJSZWcgZ3ByKQogewotICAgIEp1bXAgY2hlY2tDZWxsID0gYnJhbmNoVGVz
dFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVybywgZ3ByLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIp
OworICAgIEp1bXAgY2hlY2tDZWxsID0gYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpaZXJv
LCBncHIsIEdQUkluZm86OnRhZ01hc2tSZWdpc3Rlcik7CiAgICAgYnJlYWtwb2ludCgpOwogICAg
IGNoZWNrQ2VsbC5saW5rKHRoaXMpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBc3NlbWJseUhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Fzc2VtYmx5SGVscGVycy5oCShyZXZpc2lvbiAxMzE4NTApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fzc2VtYmx5SGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBA
IC05OSw3ICs5OSwxMSBAQCBwdWJsaWM6CiAgICAgfQogICAgIHZvaWQgZW1pdFB1dFRvQ2FsbEZy
YW1lSGVhZGVyKEdQUlJlZyBmcm9tLCBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJFbnRyeSBlbnRy
eSkKICAgICB7Ci0gICAgICAgIHN0b3JlUHRyKGZyb20sIEFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZy
YW1lUmVnaXN0ZXIsIGVudHJ5ICogc2l6ZW9mKFJlZ2lzdGVyKSkpOworI2lmIFVTRShKU1ZBTFVF
NjQpCisgICAgICAgIHN0b3JlNjQoZnJvbSwgQWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdp
c3RlciwgZW50cnkgKiBzaXplb2YoUmVnaXN0ZXIpKSk7CisjZWxzZQorICAgICAgICBzdG9yZTMy
KGZyb20sIEFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGVudHJ5ICogc2l6ZW9m
KFJlZ2lzdGVyKSkpOworI2VuZGlmCiAgICAgfQogCiAgICAgdm9pZCBlbWl0UHV0SW1tZWRpYXRl
VG9DYWxsRnJhbWVIZWFkZXIodm9pZCogdmFsdWUsIEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlckVu
dHJ5IGVudHJ5KQpAQCAtMTEwLDcgKzExNCw3IEBAIHB1YmxpYzoKICAgICBKdW1wIGJyYW5jaElm
Tm90Q2VsbChHUFJSZWcgcmVnKQogICAgIHsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICBy
ZXR1cm4gYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgcmVnLCBHUFJJbmZv
Ojp0YWdNYXNrUmVnaXN0ZXIpOworICAgICAgICByZXR1cm4gYnJhbmNoVGVzdDY0KE1hY3JvQXNz
ZW1ibGVyOjpOb25aZXJvLCByZWcsIEdQUkluZm86OnRhZ01hc2tSZWdpc3Rlcik7CiAjZWxzZQog
ICAgICAgICByZXR1cm4gYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCByZWcsIFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSk7CiAjZW5kaWYKQEAgLTE3Miw4ICsxNzYsMTQg
QEAgcHVibGljOgogICAgICAgICBTY3JhdGNoQnVmZmVyKiBzY3JhdGNoQnVmZmVyID0gbV9nbG9i
YWxEYXRhLT5zY3JhdGNoQnVmZmVyRm9yU2l6ZShzY3JhdGNoU2l6ZSk7CiAgICAgICAgIEVuY29k
ZWRKU1ZhbHVlKiBidWZmZXIgPSBzdGF0aWNfY2FzdDxFbmNvZGVkSlNWYWx1ZSo+KHNjcmF0Y2hC
dWZmZXItPmRhdGFCdWZmZXIoKSk7CiAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyArK2kpCi0gICAgICAgICAgICBzdG9yZVB0cihH
UFJJbmZvOjp0b1JlZ2lzdGVyKGkpLCBidWZmZXIgKyBpKTsKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyArK2kpIHsKKyNpZiBVU0Uo
SlNWQUxVRTY0KQorICAgICAgICAgICAgc3RvcmU2NChHUFJJbmZvOjp0b1JlZ2lzdGVyKGkpLCBi
dWZmZXIgKyBpKTsKKyNlbHNlCisgICAgICAgICAgICBzdG9yZTMyKEdQUkluZm86OnRvUmVnaXN0
ZXIoaSksIGJ1ZmZlciArIGkpOworI2VuZGlmCisgICAgICAgIH0KKwogICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgRlBSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7ICsraSkgewogICAg
ICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGJ1ZmZlciArIEdQUkluZm86Om51bWJlck9mUmVn
aXN0ZXJzICsgaSksIEdQUkluZm86OnJlZ1QwKTsKICAgICAgICAgICAgIHN0b3JlRG91YmxlKEZQ
UkluZm86OnRvUmVnaXN0ZXIoaSksIEdQUkluZm86OnJlZ1QwKTsKQEAgLTIwNCw4ICsyMTQsMTMg
QEAgcHVibGljOgogICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGJ1ZmZlciArIEdQUklu
Zm86Om51bWJlck9mUmVnaXN0ZXJzICsgaSksIEdQUkluZm86OnJlZ1QwKTsKICAgICAgICAgICAg
IGxvYWREb3VibGUoR1BSSW5mbzo6cmVnVDAsIEZQUkluZm86OnRvUmVnaXN0ZXIoaSkpOwogICAg
ICAgICB9Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBHUFJJbmZvOjpudW1iZXJP
ZlJlZ2lzdGVyczsgKytpKQotICAgICAgICAgICAgbG9hZFB0cihidWZmZXIgKyBpLCBHUFJJbmZv
Ojp0b1JlZ2lzdGVyKGkpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEdQUklu
Zm86Om51bWJlck9mUmVnaXN0ZXJzOyArK2kpIHsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAg
ICAgICAgbG9hZDY0KGJ1ZmZlciArIGksIEdQUkluZm86OnRvUmVnaXN0ZXIoaSkpOworI2Vsc2UK
KyAgICAgICAgICAgIGxvYWQzMihidWZmZXIgKyBpLCBHUFJJbmZvOjp0b1JlZ2lzdGVyKGkpKTsK
KyNlbmRpZgorICAgICAgICB9CiAgICAgfQogCiAgICAgLy8gVGhlc2UgbWV0aG9kcyBKSVQgZ2Vu
ZXJhdGUgZHluYW1pYywgZGVidWctb25seSBjaGVja3MgLSBha2luIHRvIEFTU0VSVHMuCkBAIC0y
MjksMTYgKzI0NCwxNiBAQCBwdWJsaWM6CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBHUFJSZWcg
Ym94RG91YmxlKEZQUlJlZyBmcHIsIEdQUlJlZyBncHIpCiAgICAgewotICAgICAgICBtb3ZlRG91
YmxlVG9QdHIoZnByLCBncHIpOwotICAgICAgICBzdWJQdHIoR1BSSW5mbzo6dGFnVHlwZU51bWJl
clJlZ2lzdGVyLCBncHIpOworICAgICAgICBtb3ZlRG91YmxlVG82NChmcHIsIGdwcik7CisgICAg
ICAgIHN1YjY0KEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgZ3ByKTsKICAgICAgICAg
aml0QXNzZXJ0SXNKU0RvdWJsZShncHIpOwogICAgICAgICByZXR1cm4gZ3ByOwogICAgIH0KICAg
ICBGUFJSZWcgdW5ib3hEb3VibGUoR1BSUmVnIGdwciwgRlBSUmVnIGZwcikKICAgICB7CiAgICAg
ICAgIGppdEFzc2VydElzSlNEb3VibGUoZ3ByKTsKLSAgICAgICAgYWRkUHRyKEdQUkluZm86OnRh
Z1R5cGVOdW1iZXJSZWdpc3RlciwgZ3ByKTsKLSAgICAgICAgbW92ZVB0clRvRG91YmxlKGdwciwg
ZnByKTsKKyAgICAgICAgYWRkNjQoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBncHIp
OworICAgICAgICBtb3ZlNjRUb0RvdWJsZShncHIsIGZwcik7CiAgICAgICAgIHJldHVybiBmcHI7
CiAgICAgfQogI2VuZGlmCkBAIC0yNTgsNyArMjczLDcgQEAgcHVibGljOgogICAgIEp1bXAgZW1p
dEV4Y2VwdGlvbkNoZWNrKEV4Y2VwdGlvbkNoZWNrS2luZCBraW5kID0gTm9ybWFsRXhjZXB0aW9u
Q2hlY2spCiAgICAgewogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIHJldHVybiBicmFuY2hU
ZXN0UHRyKGtpbmQgPT0gTm9ybWFsRXhjZXB0aW9uQ2hlY2sgPyBOb25aZXJvIDogWmVybywgQWJz
b2x1dGVBZGRyZXNzKCZnbG9iYWxEYXRhKCktPmV4Y2VwdGlvbikpOworICAgICAgICByZXR1cm4g
YnJhbmNoVGVzdDY0KGtpbmQgPT0gTm9ybWFsRXhjZXB0aW9uQ2hlY2sgPyBOb25aZXJvIDogWmVy
bywgQWJzb2x1dGVBZGRyZXNzKCZnbG9iYWxEYXRhKCktPmV4Y2VwdGlvbikpOwogI2VsaWYgVVNF
KEpTVkFMVUUzMl82NCkKICAgICAgICAgcmV0dXJuIGJyYW5jaDMyKGtpbmQgPT0gTm9ybWFsRXhj
ZXB0aW9uQ2hlY2sgPyBOb3RFcXVhbCA6IEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MocmVpbnRlcnBy
ZXRfY2FzdDxjaGFyKj4oJmdsb2JhbERhdGEoKS0+ZXhjZXB0aW9uKSArIE9CSkVDVF9PRkZTRVRP
RihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkVtcHR5VmFs
dWVUYWcpKTsKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDQ2Fs
bEhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ND
YWxsSGVscGVycy5oCShyZXZpc2lvbiAxMzE4NTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NDYWxsSGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC01NTIsNiArNTUyLDEzIEBA
IHB1YmxpYzoKICAgICAgICAgbW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5m
bzo6YXJndW1lbnRHUFIwKTsKICAgICB9CiAgICAgCisgICAgQUxXQVlTX0lOTElORSB2b2lkIHNl
dHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShHUFJSZWcgYXJnMSwgVHJ1c3RlZEltbTY0IGFyZzIp
CisgICAgeworICAgICAgICBtb3ZlKGFyZzEsIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAg
ICAgIG1vdmUoYXJnMiwgR1BSSW5mbzo6YXJndW1lbnRHUFIyKTsKKyAgICAgICAgbW92ZShHUFJJ
bmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICB9Cisg
ICAgCiAgICAgQUxXQVlTX0lOTElORSB2b2lkIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShH
UFJSZWcgYXJnMSwgVHJ1c3RlZEltbTMyIGFyZzIpCiAgICAgewogICAgICAgICBtb3ZlKGFyZzEs
IEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CkBAIC01NzMsNiArNTgwLDEzIEBAIHB1YmxpYzoKICAg
ICAgICAgbW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRH
UFIwKTsKICAgICB9CiAgICAgCisgICAgQUxXQVlTX0lOTElORSB2b2lkIHNldHVwQXJndW1lbnRz
V2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tNjQgYXJnMSwgR1BSUmVnIGFyZzIpCisgICAgeworICAg
ICAgICBtb3ZlKGFyZzIsIEdQUkluZm86OmFyZ3VtZW50R1BSMik7IC8vIE1vdmUgdGhpcyBmaXJz
dCwgc28gc2V0dGluZyBhcmcxIGRvZXMgbm90IHRyYW1wbGUhCisgICAgICAgIG1vdmUoYXJnMSwg
R1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICAgICAgbW92ZShHUFJJbmZvOjpjYWxsRnJhbWVS
ZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICB9CisKICAgICBBTFdBWVNfSU5M
SU5FIHZvaWQgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW0zMiBhcmcxLCBH
UFJSZWcgYXJnMikKICAgICB7CiAgICAgICAgIG1vdmUoYXJnMiwgR1BSSW5mbzo6YXJndW1lbnRH
UFIyKTsgLy8gTW92ZSB0aGlzIGZpcnN0LCBzbyBzZXR0aW5nIGFyZzEgZG9lcyBub3QgdHJhbXBs
ZSEKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyNjQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENv
bXBpbGVyNjQuY3BwCShyZXZpc2lvbiAxMzE4NTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09TUkV4aXRDb21waWxlcjY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzMsMTIgKzcz
LDEyIEBAIHZvaWQgT1NSRXhpdENvbXBpbGVyOjpjb21waWxlRXhpdChjb25zdAogICAgICAgICBz
d2l0Y2ggKHJlY292ZXJ5LT50eXBlKCkpIHsKICAgICAgICAgY2FzZSBTcGVjdWxhdGl2ZUFkZDoK
ICAgICAgICAgICAgIG1faml0LnN1YjMyKHJlY292ZXJ5LT5zcmMoKSwgcmVjb3ZlcnktPmRlc3Qo
KSk7Ci0gICAgICAgICAgICBtX2ppdC5vclB0cihHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0
ZXIsIHJlY292ZXJ5LT5kZXN0KCkpOworICAgICAgICAgICAgbV9qaXQub3I2NChHUFJJbmZvOjp0
YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHJlY292ZXJ5LT5kZXN0KCkpOwogICAgICAgICAgICAgYWxy
ZWFkeUJveGVkID0gcmVjb3ZlcnktPmRlc3QoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgCiAgICAgICAgIGNhc2UgQm9vbGVhblNwZWN1bGF0aW9uQ2hlY2s6Ci0gICAgICAgICAg
ICBtX2ppdC54b3JQdHIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8
aW50MzJfdD4oVmFsdWVGYWxzZSkpLCByZWNvdmVyeS0+ZGVzdCgpKTsKKyAgICAgICAgICAgIG1f
aml0LnhvcjY0KEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMy
X3Q+KFZhbHVlRmFsc2UpKSwgcmVjb3ZlcnktPmRlc3QoKSk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIAogICAgICAgICBkZWZhdWx0OgpAQCAtOTgsMTEgKzk4LDExIEBAIHZvaWQg
T1NSRXhpdENvbXBpbGVyOjpjb21waWxlRXhpdChjb25zdAogICAgICAgICBpZiAoZXhpdC5tX2pz
VmFsdWVTb3VyY2UuaXNBZGRyZXNzKCkpIHsKICAgICAgICAgICAgIC8vIFdlIGNhbid0IGJlIHN1
cmUgdGhhdCB3ZSBoYXZlIGEgc3BhcmUgcmVnaXN0ZXIuIFNvIHVzZSB0aGUgdGFnVHlwZU51bWJl
clJlZ2lzdGVyLAogICAgICAgICAgICAgLy8gc2luY2Ugd2Uga25vdyBob3cgdG8gcmVzdG9yZSBp
dC4KLSAgICAgICAgICAgIG1faml0LmxvYWRQdHIoQXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNzKGV4
aXQubV9qc1ZhbHVlU291cmNlLmFzQWRkcmVzcygpKSwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJl
Z2lzdGVyKTsKLSAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKEdQUkluZm86OnRhZ1R5cGVOdW1i
ZXJSZWdpc3RlciwgYnVja2V0KTsKLSAgICAgICAgICAgIG1faml0Lm1vdmUoQXNzZW1ibHlIZWxw
ZXJzOjpUcnVzdGVkSW1tUHRyKGJpdHdpc2VfY2FzdDx2b2lkKj4oVGFnVHlwZU51bWJlcikpLCBH
UFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOworICAgICAgICAgICAgbV9qaXQubG9hZDY0
KEFzc2VtYmx5SGVscGVyczo6QWRkcmVzcyhleGl0Lm1fanNWYWx1ZVNvdXJjZS5hc0FkZHJlc3Mo
KSksIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7CisgICAgICAgICAgICBtX2ppdC5z
dG9yZTY0KEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgYnVja2V0KTsKKyAgICAgICAg
ICAgIG1faml0Lm1vdmUoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tNjQoYml0d2lzZV9jYXN0
PGludDY0X3Q+KFRhZ1R5cGVOdW1iZXIpKSwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVy
KTsKICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBtX2ppdC5zdG9yZVB0cihleGl0Lm1fanNW
YWx1ZVNvdXJjZS5ncHIoKSwgYnVja2V0KTsKKyAgICAgICAgICAgIG1faml0LnN0b3JlNjQoZXhp
dC5tX2pzVmFsdWVTb3VyY2UuZ3ByKCksIGJ1Y2tldCk7CiAgICAgfQogCiAgICAgLy8gNCkgRmln
dXJlIG91dCBob3cgbWFueSBzY3JhdGNoIHNsb3RzIHdlJ2xsIG5lZWQuIFdlIG5lZWQgb25lIGZv
ciBldmVyeSBHUFIvRlBSCkBAIC0yMzAsNyArMjMwLDcgQEAgdm9pZCBPU1JFeGl0Q29tcGlsZXI6
OmNvbXBpbGVFeGl0KGNvbnN0CiAgICAgICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5LnRlY2huaXF1
ZSgpKSB7CiAgICAgICAgICAgICBjYXNlIFVuYm94ZWRJbnQzMkluR1BSOgogICAgICAgICAgICAg
ICAgIGlmIChyZWNvdmVyeS5ncHIoKSAhPSBhbHJlYWR5Qm94ZWQpCi0gICAgICAgICAgICAgICAg
ICAgIG1faml0Lm9yUHRyKEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgcmVjb3Zlcnku
Z3ByKCkpOworICAgICAgICAgICAgICAgICAgICBtX2ppdC5vcjY0KEdQUkluZm86OnRhZ1R5cGVO
dW1iZXJSZWdpc3RlciwgcmVjb3ZlcnkuZ3ByKCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBBbHJlYWR5SW5KU1N0YWNrQXNVbmJv
eGVkSW50MzI6CkBAIC0yNTIsNyArMjUyLDcgQEAgdm9pZCBPU1JFeGl0Q29tcGlsZXI6OmNvbXBp
bGVFeGl0KGNvbnN0CiAgICAgICAgICAgICAgICAgaWYgKGFkZHJlc3NHUFIgPT0gcmVjb3Zlcnku
Z3ByKCkpCiAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3NHUFIgPSBHUFJJbmZvOjpyZWdUMTsK
ICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZVB0cihhZGRyZXNz
R1BSLCBzY3JhdGNoRGF0YUJ1ZmZlcik7CisgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmU2NChh
ZGRyZXNzR1BSLCBzY3JhdGNoRGF0YUJ1ZmZlcik7CiAgICAgICAgICAgICAgICAgbV9qaXQubW92
ZShBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoc2NyYXRjaERhdGFCdWZmZXIgKyAxKSwg
YWRkcmVzc0dQUik7CiAgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmVEb3VibGUoRlBSSW5mbzo6
ZnBSZWdUMCwgYWRkcmVzc0dQUik7CiAgICAgICAgICAgICAgICAgCkBAIC0yNjYsMTIgKzI2Niwx
MiBAQCB2b2lkIE9TUkV4aXRDb21waWxlcjo6Y29tcGlsZUV4aXQoY29uc3QKICAgICAgICAgICAg
ICAgICAKICAgICAgICAgICAgICAgICBwb3NpdGl2ZS5saW5rKCZtX2ppdCk7CiAgICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgbV9qaXQub3JQdHIoR1BSSW5mbzo6dGFnVHlwZU51bWJl
clJlZ2lzdGVyLCByZWNvdmVyeS5ncHIoKSk7CisgICAgICAgICAgICAgICAgbV9qaXQub3I2NChH
UFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHJlY292ZXJ5LmdwcigpKTsKICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKICAgICAgICAgICAg
ICAgICAKICAgICAgICAgICAgICAgICBtX2ppdC5sb2FkRG91YmxlKGFkZHJlc3NHUFIsIEZQUklu
Zm86OmZwUmVnVDApOwotICAgICAgICAgICAgICAgIG1faml0LmxvYWRQdHIoc2NyYXRjaERhdGFC
dWZmZXIsIGFkZHJlc3NHUFIpOworICAgICAgICAgICAgICAgIG1faml0LmxvYWQ2NChzY3JhdGNo
RGF0YUJ1ZmZlciwgYWRkcmVzc0dQUik7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgCkBAIC0yOTYsMTEgKzI5NiwxMSBAQCB2b2lkIE9TUkV4
aXRDb21waWxlcjo6Y29tcGlsZUV4aXQoY29uc3QKICAgICAgICAgY2FzZSBVbmJveGVkSW50MzJJ
bkdQUjoKICAgICAgICAgY2FzZSBVSW50MzJJbkdQUjoKICAgICAgICAgICAgIGlmIChvcGVyYW5k
cy5pc1ZhcmlhYmxlKGluZGV4KSAmJiBwb2lzb25lZFZpcnR1YWxSZWdpc3RlcnNbb3BlcmFuZHMu
dmFyaWFibGVGb3JJbmRleChpbmRleCldKSB7Ci0gICAgICAgICAgICAgICAgbV9qaXQuc3RvcmVQ
dHIocmVjb3ZlcnkuZ3ByKCksIHNjcmF0Y2hEYXRhQnVmZmVyICsgY3VycmVudFBvaXNvbkluZGV4
KTsKKyAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTY0KHJlY292ZXJ5LmdwcigpLCBzY3JhdGNo
RGF0YUJ1ZmZlciArIGN1cnJlbnRQb2lzb25JbmRleCk7CiAgICAgICAgICAgICAgICAgbV9wb2lz
b25TY3JhdGNoSW5kaWNlc1tvcGVyYW5kcy52YXJpYWJsZUZvckluZGV4KGluZGV4KV0gPSBjdXJy
ZW50UG9pc29uSW5kZXg7CiAgICAgICAgICAgICAgICAgY3VycmVudFBvaXNvbkluZGV4Kys7CiAg
ICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZVB0cihyZWNvdmVy
eS5ncHIoKSwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpb3Bl
cmFuZCkpOworICAgICAgICAgICAgICAgIG1faml0LnN0b3JlNjQocmVjb3ZlcnkuZ3ByKCksIEFz
c2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKW9wZXJhbmQpKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgYnJlYWs7CkBA
IC0zMzAsMTEgKzMzMCwxMSBAQCB2b2lkIE9TUkV4aXRDb21waWxlcjo6Y29tcGlsZUV4aXQoY29u
c3QKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIEdQUlJlZyBncHIgPSBH
UFJJbmZvOjp0b1JlZ2lzdGVyKEZQUkluZm86OnRvSW5kZXgocmVjb3ZlcnkuZnByKCkpKTsKICAg
ICAgICAgICAgIGlmIChvcGVyYW5kcy5pc1ZhcmlhYmxlKGluZGV4KSAmJiBwb2lzb25lZFZpcnR1
YWxSZWdpc3RlcnNbb3BlcmFuZHMudmFyaWFibGVGb3JJbmRleChpbmRleCldKSB7Ci0gICAgICAg
ICAgICAgICAgbV9qaXQuc3RvcmVQdHIoZ3ByLCBzY3JhdGNoRGF0YUJ1ZmZlciArIGN1cnJlbnRQ
b2lzb25JbmRleCk7CisgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmU2NChncHIsIHNjcmF0Y2hE
YXRhQnVmZmVyICsgY3VycmVudFBvaXNvbkluZGV4KTsKICAgICAgICAgICAgICAgICBtX3BvaXNv
blNjcmF0Y2hJbmRpY2VzW29wZXJhbmRzLnZhcmlhYmxlRm9ySW5kZXgoaW5kZXgpXSA9IGN1cnJl
bnRQb2lzb25JbmRleDsKICAgICAgICAgICAgICAgICBjdXJyZW50UG9pc29uSW5kZXgrKzsKICAg
ICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKGdwciwgQXNz
ZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpb3BlcmFuZHMub3BlcmFu
ZEZvckluZGV4KGluZGV4KSkpOworICAgICAgICAgICAgICAgIG1faml0LnN0b3JlNjQoZ3ByLCBB
c3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcilvcGVyYW5kcy5vcGVy
YW5kRm9ySW5kZXgoaW5kZXgpKSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgCkBAIC0zNDgsNyAr
MzQ4LDcgQEAgdm9pZCBPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KGNvbnN0CiAgICAgICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBtX2ppdC5sb2FkRG91YmxlKEFzc2VtYmx5
SGVscGVyczo6YWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKW9wZXJhbmRzLm9wZXJhbmRGb3JJ
bmRleChpbmRleCkpLCBGUFJJbmZvOjpmcFJlZ1QwKTsKICAgICAgICAgICAgIG1faml0LmJveERv
dWJsZShGUFJJbmZvOjpmcFJlZ1QwLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgICAgICBtX2pp
dC5zdG9yZVB0cihHUFJJbmZvOjpyZWdUMCwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKChW
aXJ0dWFsUmVnaXN0ZXIpb3BlcmFuZHMub3BlcmFuZEZvckluZGV4KGluZGV4KSkpOworICAgICAg
ICAgICAgbV9qaXQuc3RvcmU2NChHUFJJbmZvOjpyZWdUMCwgQXNzZW1ibHlIZWxwZXJzOjphZGRy
ZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpb3BlcmFuZHMub3BlcmFuZEZvckluZGV4KGluZGV4KSkp
OwogICAgICAgICB9CiAgICAgfQogICAgIApAQCAtMzY4LDIwICszNjgsMjAgQEAgdm9pZCBPU1JF
eGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KGNvbnN0CiAgICAgICAgICAgICAgICAgY29uc3QgVmFs
dWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBvcGVyYW5kc1tpbmRleF07CiAgICAgICAgICAgICAgICAg
c3dpdGNoIChyZWNvdmVyeS50ZWNobmlxdWUoKSkgewogICAgICAgICAgICAgICAgIGNhc2UgRGlz
cGxhY2VkSW5KU1N0YWNrOgotICAgICAgICAgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKEFzc2Vt
Ymx5SGVscGVyczo6YWRkcmVzc0ZvcihyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSksIEdQUklu
Zm86OnRvUmVnaXN0ZXIoZGlzcGxhY2VtZW50SW5kZXgrKykpOworICAgICAgICAgICAgICAgICAg
ICBtX2ppdC5sb2FkNjQoQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKHJlY292ZXJ5LnZpcnR1
YWxSZWdpc3RlcigpKSwgR1BSSW5mbzo6dG9SZWdpc3RlcihkaXNwbGFjZW1lbnRJbmRleCsrKSk7
CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAKICAgICAg
ICAgICAgICAgICBjYXNlIEludDMyRGlzcGxhY2VkSW5KU1N0YWNrOiB7CiAgICAgICAgICAgICAg
ICAgICAgIEdQUlJlZyBncHIgPSBHUFJJbmZvOjp0b1JlZ2lzdGVyKGRpc3BsYWNlbWVudEluZGV4
KyspOwogICAgICAgICAgICAgICAgICAgICBtX2ppdC5sb2FkMzIoQXNzZW1ibHlIZWxwZXJzOjph
ZGRyZXNzRm9yKHJlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpKSwgZ3ByKTsKLSAgICAgICAgICAg
ICAgICAgICAgbV9qaXQub3JQdHIoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBncHIp
OworICAgICAgICAgICAgICAgICAgICBtX2ppdC5vcjY0KEdQUkluZm86OnRhZ1R5cGVOdW1iZXJS
ZWdpc3RlciwgZ3ByKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBjYXNlIERvdWJsZURp
c3BsYWNlZEluSlNTdGFjazogewogICAgICAgICAgICAgICAgICAgICBHUFJSZWcgZ3ByID0gR1BS
SW5mbzo6dG9SZWdpc3RlcihkaXNwbGFjZW1lbnRJbmRleCsrKTsKLSAgICAgICAgICAgICAgICAg
ICAgbV9qaXQubG9hZFB0cihBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IocmVjb3Zlcnkudmly
dHVhbFJlZ2lzdGVyKCkpLCBncHIpOwotICAgICAgICAgICAgICAgICAgICBtX2ppdC5zdWJQdHIo
R1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBncHIpOworICAgICAgICAgICAgICAgICAg
ICBtX2ppdC5sb2FkNjQoQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKHJlY292ZXJ5LnZpcnR1
YWxSZWdpc3RlcigpKSwgZ3ByKTsKKyAgICAgICAgICAgICAgICAgICAgbV9qaXQuc3ViNjQoR1BS
SW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBncHIpOwogICAgICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIApAQCAtMzk3LDcg
KzM5Nyw3IEBAIHZvaWQgT1NSRXhpdENvbXBpbGVyOjpjb21waWxlRXhpdChjb25zdAogICAgICAg
ICAgICAgICAgIGNhc2UgRGlzcGxhY2VkSW5KU1N0YWNrOgogICAgICAgICAgICAgICAgIGNhc2Ug
SW50MzJEaXNwbGFjZWRJbkpTU3RhY2s6CiAgICAgICAgICAgICAgICAgY2FzZSBEb3VibGVEaXNw
bGFjZWRJbkpTU3RhY2s6Ci0gICAgICAgICAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKEdQUklu
Zm86OnRvUmVnaXN0ZXIoZGlzcGxhY2VtZW50SW5kZXgrKyksIEFzc2VtYmx5SGVscGVyczo6YWRk
cmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKW9wZXJhbmRzLm9wZXJhbmRGb3JJbmRleChpbmRleCkp
KTsKKyAgICAgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmU2NChHUFJJbmZvOjp0b1JlZ2lzdGVy
KGRpc3BsYWNlbWVudEluZGV4KyspLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoKFZpcnR1
YWxSZWdpc3RlcilvcGVyYW5kcy5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSk7CiAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBk
ZWZhdWx0OgpAQCAtNDI4LDIxICs0MjgsMjEgQEAgdm9pZCBPU1JFeGl0Q29tcGlsZXI6OmNvbXBp
bGVFeGl0KGNvbnN0CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgc3dpdGNoIChy
ZWNvdmVyeS50ZWNobmlxdWUoKSkgewogICAgICAgICAgICAgICAgIGNhc2UgRGlzcGxhY2VkSW5K
U1N0YWNrOgotICAgICAgICAgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKEFzc2VtYmx5SGVscGVy
czo6YWRkcmVzc0ZvcihyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSksIEdQUkluZm86OnJlZ1Qw
KTsKLSAgICAgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIoR1BSSW5mbzo6cmVnVDAsIHNj
cmF0Y2hEYXRhQnVmZmVyICsgc2NyYXRjaEluZGV4KyspOworICAgICAgICAgICAgICAgICAgICBt
X2ppdC5sb2FkNjQoQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKHJlY292ZXJ5LnZpcnR1YWxS
ZWdpc3RlcigpKSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAgICAgICAgICBtX2ppdC5z
dG9yZTY0KEdQUkluZm86OnJlZ1QwLCBzY3JhdGNoRGF0YUJ1ZmZlciArIHNjcmF0Y2hJbmRleCsr
KTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgICAgIGNhc2UgSW50MzJEaXNwbGFjZWRJbkpTU3RhY2s6IHsKICAgICAgICAgICAg
ICAgICAgICAgbV9qaXQubG9hZDMyKEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcihyZWNvdmVy
eS52aXJ0dWFsUmVnaXN0ZXIoKSksIEdQUkluZm86OnJlZ1QwKTsKLSAgICAgICAgICAgICAgICAg
ICAgbV9qaXQub3JQdHIoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBHUFJJbmZvOjpy
ZWdUMCk7Ci0gICAgICAgICAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKEdQUkluZm86OnJlZ1Qw
LCBzY3JhdGNoRGF0YUJ1ZmZlciArIHNjcmF0Y2hJbmRleCsrKTsKKyAgICAgICAgICAgICAgICAg
ICAgbV9qaXQub3I2NChHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIEdQUkluZm86OnJl
Z1QwKTsKKyAgICAgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmU2NChHUFJJbmZvOjpyZWdUMCwg
c2NyYXRjaERhdGFCdWZmZXIgKyBzY3JhdGNoSW5kZXgrKyk7CiAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICAgICAgY2FzZSBEb3VibGVEaXNwbGFjZWRJbkpTU3RhY2s6IHsKLSAgICAgICAgICAgICAg
ICAgICAgbV9qaXQubG9hZFB0cihBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IocmVjb3Zlcnku
dmlydHVhbFJlZ2lzdGVyKCkpLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgICAgICAgICAgICAg
IG1faml0LnN1YlB0cihHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIEdQUkluZm86OnJl
Z1QwKTsKLSAgICAgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIoR1BSSW5mbzo6cmVnVDAs
IHNjcmF0Y2hEYXRhQnVmZmVyICsgc2NyYXRjaEluZGV4KyspOworICAgICAgICAgICAgICAgICAg
ICBtX2ppdC5sb2FkNjQoQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKHJlY292ZXJ5LnZpcnR1
YWxSZWdpc3RlcigpKSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAgICAgICAgICBtX2pp
dC5zdWI2NChHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIEdQUkluZm86OnJlZ1QwKTsK
KyAgICAgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmU2NChHUFJJbmZvOjpyZWdUMCwgc2NyYXRj
aERhdGFCdWZmZXIgKyBzY3JhdGNoSW5kZXgrKyk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCkBAIC00NTgsOCArNDU4
LDggQEAgdm9pZCBPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KGNvbnN0CiAgICAgICAgICAg
ICAgICAgY2FzZSBEaXNwbGFjZWRJbkpTU3RhY2s6CiAgICAgICAgICAgICAgICAgY2FzZSBJbnQz
MkRpc3BsYWNlZEluSlNTdGFjazoKICAgICAgICAgICAgICAgICBjYXNlIERvdWJsZURpc3BsYWNl
ZEluSlNTdGFjazoKLSAgICAgICAgICAgICAgICAgICAgbV9qaXQubG9hZFB0cihzY3JhdGNoRGF0
YUJ1ZmZlciArIHNjcmF0Y2hJbmRleCsrLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgICAgICAg
ICAgICAgIG1faml0LnN0b3JlUHRyKEdQUkluZm86OnJlZ1QwLCBBc3NlbWJseUhlbHBlcnM6OmFk
ZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcilvcGVyYW5kcy5vcGVyYW5kRm9ySW5kZXgoaW5kZXgp
KSk7CisgICAgICAgICAgICAgICAgICAgIG1faml0LmxvYWQ2NChzY3JhdGNoRGF0YUJ1ZmZlciAr
IHNjcmF0Y2hJbmRleCsrLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAgICAgICAgICAgIG1f
aml0LnN0b3JlNjQoR1BSSW5mbzo6cmVnVDAsIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0Zvcigo
VmlydHVhbFJlZ2lzdGVyKW9wZXJhbmRzLm9wZXJhbmRGb3JJbmRleChpbmRleCkpKTsKICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgIGRlZmF1bHQ6CkBAIC00ODQsOCArNDg0LDggQEAgdm9pZCBPU1JFeGl0Q29tcGlsZXI6OmNv
bXBpbGVFeGl0KGNvbnN0CiAgICAgICAgICAgICBjYXNlIFVuYm94ZWRJbnQzMkluR1BSOgogICAg
ICAgICAgICAgY2FzZSBVSW50MzJJbkdQUjoKICAgICAgICAgICAgIGNhc2UgSW5GUFI6Ci0gICAg
ICAgICAgICAgICAgbV9qaXQubG9hZFB0cihzY3JhdGNoRGF0YUJ1ZmZlciArIHBvaXNvbkluZGV4
KHZpcnR1YWxSZWdpc3RlciksIEdQUkluZm86OnJlZ1QwKTsKLSAgICAgICAgICAgICAgICBtX2pp
dC5zdG9yZVB0cihHUFJJbmZvOjpyZWdUMCwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKChW
aXJ0dWFsUmVnaXN0ZXIpdmlydHVhbFJlZ2lzdGVyKSk7CisgICAgICAgICAgICAgICAgbV9qaXQu
bG9hZDY0KHNjcmF0Y2hEYXRhQnVmZmVyICsgcG9pc29uSW5kZXgodmlydHVhbFJlZ2lzdGVyKSwg
R1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAgICAgIG1faml0LnN0b3JlNjQoR1BSSW5mbzo6
cmVnVDAsIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKXZpcnR1
YWxSZWdpc3RlcikpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgZGVmYXVsdDoKQEAgLTQ5OSwxNiArNDk5LDE2IEBAIHZvaWQgT1NSRXhpdENv
bXBpbGVyOjpjb21waWxlRXhpdChjb25zdAogCiAgICAgaWYgKGhhdmVDb25zdGFudHMpIHsKICAg
ICAgICAgaWYgKGhhdmVVbmRlZmluZWQpCi0gICAgICAgICAgICBtX2ppdC5tb3ZlKEFzc2VtYmx5
SGVscGVyczo6VHJ1c3RlZEltbVB0cihKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSkpLCBH
UFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAgICBtX2ppdC5tb3ZlKEFzc2VtYmx5SGVscGVyczo6
VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKSksIEdQUkluZm86OnJl
Z1QwKTsKICAgICAgICAgCiAgICAgICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBv
cGVyYW5kcy5zaXplKCk7ICsraW5kZXgpIHsKICAgICAgICAgICAgIGNvbnN0IFZhbHVlUmVjb3Zl
cnkmIHJlY292ZXJ5ID0gb3BlcmFuZHNbaW5kZXhdOwogICAgICAgICAgICAgaWYgKHJlY292ZXJ5
LnRlY2huaXF1ZSgpICE9IENvbnN0YW50KQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICAgICAgaWYgKHJlY292ZXJ5LmNvbnN0YW50KCkuaXNVbmRlZmluZWQoKSkKLSAgICAgICAg
ICAgICAgICBtX2ppdC5zdG9yZVB0cihHUFJJbmZvOjpyZWdUMCwgQXNzZW1ibHlIZWxwZXJzOjph
ZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpb3BlcmFuZHMub3BlcmFuZEZvckluZGV4KGluZGV4
KSkpOworICAgICAgICAgICAgICAgIG1faml0LnN0b3JlNjQoR1BSSW5mbzo6cmVnVDAsIEFzc2Vt
Ymx5SGVscGVyczo6YWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKW9wZXJhbmRzLm9wZXJhbmRG
b3JJbmRleChpbmRleCkpKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBtX2pp
dC5zdG9yZVB0cihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoSlNWYWx1ZTo6ZW5jb2Rl
KHJlY292ZXJ5LmNvbnN0YW50KCkpKSwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0
dWFsUmVnaXN0ZXIpb3BlcmFuZHMub3BlcmFuZEZvckluZGV4KGluZGV4KSkpOworICAgICAgICAg
ICAgICAgIG1faml0LnN0b3JlNjQoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tNjQoSlNWYWx1
ZTo6ZW5jb2RlKHJlY292ZXJ5LmNvbnN0YW50KCkpKSwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNz
Rm9yKChWaXJ0dWFsUmVnaXN0ZXIpb3BlcmFuZHMub3BlcmFuZEZvckluZGV4KGluZGV4KSkpOwog
ICAgICAgICB9CiAgICAgfQogICAgIApAQCAtNTc2LDExICs1NzYsMTEgQEAgdm9pZCBPU1JFeGl0
Q29tcGlsZXI6OmNvbXBpbGVFeGl0KGNvbnN0CiAgICAgICAgICAgICBjYWxsZXJGcmFtZUdQUiA9
IEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyOwogICAgICAgICAKICAgICAgICAgbV9qaXQuc3Rv
cmVQdHIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGJhc2VsaW5lQ29kZUJsb2NrKSwg
QXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxG
cmFtZS0+c3RhY2tPZmZzZXQgKyBKU1N0YWNrOjpDb2RlQmxvY2spKSk7Ci0gICAgICAgIG1faml0
LnN0b3JlUHRyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbVB0cihpbmxpbmVDYWxsRnJhbWUt
PmNhbGxlZS0+c2NvcGUoKSksIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcigoVmlydHVhbFJl
Z2lzdGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgSlNTdGFjazo6U2NvcGVDaGFp
bikpKTsKLSAgICAgICAgbV9qaXQuc3RvcmVQdHIoY2FsbGVyRnJhbWVHUFIsIEFzc2VtYmx5SGVs
cGVyczo6YWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0YWNr
T2Zmc2V0ICsgSlNTdGFjazo6Q2FsbGVyRnJhbWUpKSk7CisgICAgICAgIG1faml0LnN0b3JlNjQo
QXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoaW5s
aW5lQ2FsbEZyYW1lLT5jYWxsZWUtPnNjb3BlKCkpKSksIEFzc2VtYmx5SGVscGVyczo6YWRkcmVz
c0ZvcigoVmlydHVhbFJlZ2lzdGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgSlNT
dGFjazo6U2NvcGVDaGFpbikpKTsKKyAgICAgICAgbV9qaXQuc3RvcmU2NChjYWxsZXJGcmFtZUdQ
UiwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNh
bGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBKU1N0YWNrOjpDYWxsZXJGcmFtZSkpKTsKICAgICAgICAg
bV9qaXQuc3RvcmVQdHIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGp1bXBUYXJnZXQp
LCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcikoaW5saW5lQ2Fs
bEZyYW1lLT5zdGFja09mZnNldCArIEpTU3RhY2s6OlJldHVyblBDKSkpOwogICAgICAgICBtX2pp
dC5zdG9yZTMyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKGlubGluZUNhbGxGcmFtZS0+
YXJndW1lbnRzLnNpemUoKSksIEFzc2VtYmx5SGVscGVyczo6cGF5bG9hZEZvcigoVmlydHVhbFJl
Z2lzdGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgSlNTdGFjazo6QXJndW1lbnRD
b3VudCkpKTsKLSAgICAgICAgbV9qaXQuc3RvcmVQdHIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVk
SW1tUHRyKGlubGluZUNhbGxGcmFtZS0+Y2FsbGVlLmdldCgpKSwgQXNzZW1ibHlIZWxwZXJzOjph
ZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQg
KyBKU1N0YWNrOjpDYWxsZWUpKSk7CisgICAgICAgIG1faml0LnN0b3JlNjQoQXNzZW1ibHlIZWxw
ZXJzOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoaW5saW5lQ2FsbEZyYW1l
LT5jYWxsZWUuZ2V0KCkpKSksIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcigoVmlydHVhbFJl
Z2lzdGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgSlNTdGFjazo6Q2FsbGVlKSkp
OwogICAgIH0KICAgICAKICAgICAvLyAxNSkgQ3JlYXRlIGFyZ3VtZW50cyBpZiBuZWNlc3Nhcnkg
YW5kIHBsYWNlIHRoZW0gaW50byB0aGUgYXBwcm9wcmlhdGUgYWxpYXNlZApAQCAtNjIwLDIxICs2
MjAsMjIgQEAgdm9pZCBPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KGNvbnN0CiAgICAgICAg
ICAgICAgICAgICAgICAgICBiaXR3aXNlX2Nhc3Q8dm9pZCo+KG9wZXJhdGlvbkNyZWF0ZUFyZ3Vt
ZW50cykpLAogICAgICAgICAgICAgICAgICAgICBHUFJJbmZvOjpub25BcmdHUFIwKTsKICAgICAg
ICAgICAgICAgICBtX2ppdC5jYWxsKEdQUkluZm86Om5vbkFyZ0dQUjApOwotICAgICAgICAgICAg
ICAgIG1faml0LnN0b3JlUHRyKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBBc3NlbWJseUhlbHBl
cnM6OmFkZHJlc3NGb3IoYXJndW1lbnRzUmVnaXN0ZXIpKTsKLSAgICAgICAgICAgICAgICBtX2pp
dC5zdG9yZVB0cigKKyAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTY0KEdQUkluZm86OnJldHVy
blZhbHVlR1BSLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoYXJndW1lbnRzUmVnaXN0ZXIp
KTsKKyAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTY0KAogICAgICAgICAgICAgICAgICAgICBH
UFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwKICAgICAgICAgICAgICAgICAgICAgQXNzZW1ibHlIZWxw
ZXJzOjphZGRyZXNzRm9yKHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3Rlcihhcmd1bWVudHNSZWdp
c3RlcikpKTsKICAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKEdQUkluZm86OnJldHVyblZhbHVl
R1BSLCBHUFJJbmZvOjpyZWdUMCk7IC8vIG5vLW9wIG1vdmUgb24gYWxtb3N0IGFsbCBwbGF0Zm9y
bXMuCiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIG1faml0LmxvYWRQdHIoQXNzZW1ibHlI
ZWxwZXJzOjphZGRyZXNzRm9yKGFyZ3VtZW50c1JlZ2lzdGVyKSwgR1BSSW5mbzo6cmVnVDApOwot
ICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIoR1BSSW5mbzo6cmVnVDAsIEFzc2VtYmx5SGVscGVy
czo6YWRkcmVzc0ZvcihvcGVyYW5kKSk7CisgICAgICAgICAgICBtX2ppdC5sb2FkNjQoQXNzZW1i
bHlIZWxwZXJzOjphZGRyZXNzRm9yKGFyZ3VtZW50c1JlZ2lzdGVyKSwgR1BSSW5mbzo6cmVnVDAp
OworICAgICAgICAgICAgbV9qaXQuc3RvcmU2NChHUFJJbmZvOjpyZWdUMCwgQXNzZW1ibHlIZWxw
ZXJzOjphZGRyZXNzRm9yKG9wZXJhbmQpKTsKICAgICAgICAgfQogICAgIH0KICAgICAKICAgICAv
LyAxNikgTG9hZCB0aGUgcmVzdWx0IG9mIHRoZSBsYXN0IGJ5dGVjb2RlIG9wZXJhdGlvbiBpbnRv
IHJlZ1QwLgorICAgIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZXhpdC5tX3NldE9wZXJh
bmRzLnNpemUoKTsgaSsrKQotICAgICAgICBtX2ppdC5sb2FkUHRyKEFzc2VtYmx5SGVscGVyczo6
YWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKWV4aXQubV9zZXRPcGVyYW5kc1tpXSksIEdQUklu
Zm86OmNhY2hlZFJlc3VsdFJlZ2lzdGVyKTsKKyAgICAgICAgbV9qaXQubG9hZDY0KEFzc2VtYmx5
SGVscGVyczo6YWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKWV4aXQubV9zZXRPcGVyYW5kc1tp
XSksIEdQUkluZm86OmNhY2hlZFJlc3VsdFJlZ2lzdGVyKTsKIAogICAgIC8vIDE3KSBBZGp1c3Qg
dGhlIGNhbGwgZnJhbWUgcG9pbnRlci4KICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHUmVwYXRjaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdSZXBhdGNoLmNwcAkocmV2aXNpb24gMTMxODUwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdSZXBhdGNoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTkyLDcgKzE5Miw3
IEBAIHN0YXRpYyB2b2lkIGdlbmVyYXRlUHJvdG9DaGFpbkFjY2Vzc1N0dWIKICAgICAKICAgICBp
ZiAoaXNJbmxpbmVPZmZzZXQob2Zmc2V0KSkgewogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAg
IHN0dWJKaXQubG9hZFB0cihwcm90b09iamVjdC0+bG9jYXRpb25Gb3JPZmZzZXQob2Zmc2V0KSwg
cmVzdWx0R1BSKTsKKyAgICAgICAgc3R1YkppdC5sb2FkNjQocHJvdG9PYmplY3QtPmxvY2F0aW9u
Rm9yT2Zmc2V0KG9mZnNldCksIHJlc3VsdEdQUik7CiAjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQog
ICAgICAgICBzdHViSml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIocHJvdG9P
YmplY3QtPmxvY2F0aW9uRm9yT2Zmc2V0KG9mZnNldCkpLCByZXN1bHRHUFIpOwogICAgICAgICBz
dHViSml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIE9CSkVDVF9P
RkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSksIHJlc3VsdFRhZ0dQ
Uik7CkBAIC0yMDEsNyArMjAxLDcgQEAgc3RhdGljIHZvaWQgZ2VuZXJhdGVQcm90b0NoYWluQWNj
ZXNzU3R1YgogICAgIH0gZWxzZSB7CiAgICAgICAgIHN0dWJKaXQubG9hZFB0cihwcm90b09iamVj
dC0+YnV0dGVyZmx5QWRkcmVzcygpLCByZXN1bHRHUFIpOwogI2lmIFVTRShKU1ZBTFVFNjQpCi0g
ICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRHUFIs
IG9mZnNldEluQnV0dGVyZmx5KG9mZnNldCkgKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+
KSksIHJlc3VsdEdQUik7CisgICAgICAgIHN0dWJKaXQubG9hZDY0KE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHJlc3VsdEdQUiwgb2Zmc2V0SW5CdXR0ZXJmbHkob2Zmc2V0KSAqIHNpemVvZihXcml0
ZUJhcnJpZXI8VW5rbm93bj4pKSwgcmVzdWx0R1BSKTsKICNlbGlmIFVTRShKU1ZBTFVFMzJfNjQp
CiAgICAgICAgIHN0dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJlc3VsdEdQ
Uiwgb2Zmc2V0SW5CdXR0ZXJmbHkob2Zmc2V0KSAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93
bj4pICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcp
KSwgcmVzdWx0VGFnR1BSKTsKICAgICAgICAgc3R1YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MocmVzdWx0R1BSLCBvZmZzZXRJbkJ1dHRlcmZseShvZmZzZXQpICogc2l6ZW9mKFdy
aXRlQmFycmllcjxVbmtub3duPikgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3Jp
cHRvciwgYXNCaXRzLnBheWxvYWQpKSwgcmVzdWx0R1BSKTsKQEAgLTI2Myw3ICsyNjMsNyBAQCBz
dGF0aWMgYm9vbCB0cnlDYWNoZUdldEJ5SUQoRXhlY1N0YXRlKiBlCiAgICAgICAgIGZhaWx1cmVD
YXNlcy5hcHBlbmQoc3R1YkppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW4sIHNj
cmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMCkpKTsKIAogI2lmIFVTRShK
U1ZBTFVFNjQpCi0gICAgICAgIHN0dWJKaXQub3JQdHIoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJl
Z2lzdGVyLCBzY3JhdGNoR1BSLCByZXN1bHRHUFIpOworICAgICAgICBzdHViSml0Lm9yNjQoR1BS
SW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBzY3JhdGNoR1BSLCByZXN1bHRHUFIpOwogI2Vs
aWYgVVNFKEpTVkFMVUUzMl82NCkKICAgICAgICAgc3R1YkppdC5tb3ZlKHNjcmF0Y2hHUFIsIHJl
c3VsdEdQUik7CiAgICAgICAgIHN0dWJKaXQubW92ZShKSVRDb21waWxlcjo6VHJ1c3RlZEltbTMy
KDB4ZmZmZmZmZmYpLCByZXN1bHRUYWdHUFIpOyAvLyBKU1ZhbHVlOjpJbnQzMlRhZwpAQCAtNDIx
LDE0ICs0MjEsMTQgQEAgc3RhdGljIGJvb2wgdHJ5QnVpbGRHZXRCeUlETGlzdChFeGVjU3RhdAog
ICAgICAgICAgICAgICAgIEFTU0VSVChiYXNlR1BSICE9IHNjcmF0Y2hHUFIpOwogICAgICAgICAg
ICAgICAgIGlmIChpc0lubGluZU9mZnNldChzbG90LmNhY2hlZE9mZnNldCgpKSkgewogI2lmIFVT
RShKU1ZBTFVFNjQpCi0gICAgICAgICAgICAgICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShzbG90LmNhY2hl
ZE9mZnNldCgpKSksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgICAgICAgICBzdHViSml0Lmxv
YWQ2NChNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFz
ZShzbG90LmNhY2hlZE9mZnNldCgpKSksIHNjcmF0Y2hHUFIpOwogI2Vsc2UKICAgICAgICAgICAg
ICAgICAgICAgc3R1YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwg
b2Zmc2V0UmVsYXRpdmVUb0Jhc2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkpLCBzY3JhdGNoR1BSKTsK
ICNlbmRpZgogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIHN0
dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6
YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAg
ICAgICAgICAgICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
c2NyYXRjaEdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkpLCBz
Y3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkNjQoTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uoc2xvdC5jYWNo
ZWRPZmZzZXQoKSkpLCBzY3JhdGNoR1BSKTsKICNlbHNlCiAgICAgICAgICAgICAgICAgICAgIHN0
dWJKaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIG9mZnNldFJl
bGF0aXZlVG9CYXNlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpKSwgc2NyYXRjaEdQUik7CiAjZW5kaWYK
QEAgLTQ2NSw3ICs0NjUsNyBAQCBzdGF0aWMgYm9vbCB0cnlCdWlsZEdldEJ5SURMaXN0KEV4ZWNT
dGF0CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBpZiAoaXNJbmxpbmVPZmZzZXQoc2xv
dC5jYWNoZWRPZmZzZXQoKSkpIHsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICAgICAgICAg
IHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBvZmZzZXRS
ZWxhdGl2ZVRvQmFzZShzbG90LmNhY2hlZE9mZnNldCgpKSksIHJlc3VsdEdQUik7CisgICAgICAg
ICAgICAgICAgc3R1YkppdC5sb2FkNjQoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwg
b2Zmc2V0UmVsYXRpdmVUb0Jhc2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkpLCByZXN1bHRHUFIpOwog
I2Vsc2UKICAgICAgICAgICAgICAgICBpZiAoYmFzZUdQUiA9PSByZXN1bHRUYWdHUFIpIHsKICAg
ICAgICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
YmFzZUdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKyBPQkpF
Q1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSwgcmVz
dWx0R1BSKTsKQEAgLTQ3OCw3ICs0NzgsNyBAQCBzdGF0aWMgYm9vbCB0cnlCdWlsZEdldEJ5SURM
aXN0KEV4ZWNTdGF0CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIHN0dWJK
aXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0
dGVyZmx5T2Zmc2V0KCkpLCByZXN1bHRHUFIpOwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAg
ICAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJlc3VsdEdQ
Uiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkpLCByZXN1bHRHUFIp
OworICAgICAgICAgICAgICAgIHN0dWJKaXQubG9hZDY0KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KHJlc3VsdEdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkpLCBy
ZXN1bHRHUFIpOwogI2Vsc2UKICAgICAgICAgICAgICAgICBzdHViSml0LmxvYWQzMihNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKHNsb3QuY2Fj
aGVkT2Zmc2V0KCkpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFz
Qml0cy50YWcpKSwgcmVzdWx0VGFnR1BSKTsKICAgICAgICAgICAgICAgICBzdHViSml0LmxvYWQz
MihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNl
KHNsb3QuY2FjaGVkT2Zmc2V0KCkpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2Ny
aXB0b3IsIGFzQml0cy5wYXlsb2FkKSksIHJlc3VsdEdQUik7CkBAIC02ODIsMTAgKzY4MiwxMCBA
QCBzdGF0aWMgdm9pZCBlbWl0UHV0UmVwbGFjZVN0dWIoCiAgICAgCiAjaWYgVVNFKEpTVkFMVUU2
NCkKICAgICBpZiAoaXNJbmxpbmVPZmZzZXQoc2xvdC5jYWNoZWRPZmZzZXQoKSkpCi0gICAgICAg
IHN0dWJKaXQuc3RvcmVQdHIodmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VH
UFIsIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSArIG9mZnNldEluSW5saW5lU3Rv
cmFnZShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSkpOworICAgICAgICBz
dHViSml0LnN0b3JlNjQodmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIs
IEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSArIG9mZnNldEluSW5saW5lU3RvcmFn
ZShzbG90LmNhY2hlZE9mZnNldCgpKSAqIHNpemVvZihKU1ZhbHVlKSkpOwogICAgIGVsc2Ugewog
ICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwg
SlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgIHN0dWJK
aXQuc3RvcmVQdHIodmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIs
IG9mZnNldEluQnV0dGVyZmx5KHNsb3QuY2FjaGVkT2Zmc2V0KCkpICogc2l6ZW9mKEpTVmFsdWUp
KSk7CisgICAgICAgIHN0dWJKaXQuc3RvcmU2NCh2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3Moc2NyYXRjaEdQUiwgb2Zmc2V0SW5CdXR0ZXJmbHkoc2xvdC5jYWNoZWRPZmZzZXQoKSkg
KiBzaXplb2YoSlNWYWx1ZSkpKTsKICAgICB9CiAjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQogICAg
IGlmIChpc0lubGluZU9mZnNldChzbG90LmNhY2hlZE9mZnNldCgpKSkgewpAQCAtODU0LDExICs4
NTQsMTEgQEAgc3RhdGljIHZvaWQgZW1pdFB1dFRyYW5zaXRpb25TdHViKAogICAgIHN0dWJKaXQu
c3RvcmVQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSkpOwog
I2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KHNsb3QuY2FjaGVkT2Zm
c2V0KCkpKQotICAgICAgICBzdHViSml0LnN0b3JlUHRyKHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkgKyBv
ZmZzZXRJbklubGluZVN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1
ZSkpKTsKKyAgICAgICAgc3R1YkppdC5zdG9yZTY0KHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkgKyBvZmZz
ZXRJbklubGluZVN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1ZSkp
KTsKICAgICBlbHNlIHsKICAgICAgICAgaWYgKCFzY3JhdGNoR1BSMUhhc1N0b3JhZ2UpCiAgICAg
ICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwg
SlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUjEpOwotICAgICAgICBzdHVi
Sml0LnN0b3JlUHRyKHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BS
MSwgb2Zmc2V0SW5CdXR0ZXJmbHkoc2xvdC5jYWNoZWRPZmZzZXQoKSkgKiBzaXplb2YoSlNWYWx1
ZSkpKTsKKyAgICAgICAgc3R1YkppdC5zdG9yZTY0KHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhzY3JhdGNoR1BSMSwgb2Zmc2V0SW5CdXR0ZXJmbHkoc2xvdC5jYWNoZWRPZmZzZXQo
KSkgKiBzaXplb2YoSlNWYWx1ZSkpKTsKICAgICB9CiAjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQog
ICAgIGlmIChpc0lubGluZU9mZnNldChzbG90LmNhY2hlZE9mZnNldCgpKSkgewpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NjcmF0Y2hSZWdpc3RlckFs
bG9jYXRvci5oCShyZXZpc2lvbiAxMzE4NTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjcsMTUg
KzEyNywyMCBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICB1bnNpZ25lZCBjb3VudCA9IDA7CiAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyBpLS07
KSB7Ci0gICAgICAgICAgICBpZiAobV91c2VkUmVnaXN0ZXJzLmdldEdQUkJ5SW5kZXgoaSkpCi0g
ICAgICAgICAgICAgICAgaml0LnN0b3JlUHRyKEdQUkluZm86OnRvUmVnaXN0ZXIoaSksIHNjcmF0
Y2hCdWZmZXItPm1fYnVmZmVyICsgKGNvdW50KyspKTsKKyAgICAgICAgICAgIGlmIChtX3VzZWRS
ZWdpc3RlcnMuZ2V0R1BSQnlJbmRleChpKSkgeworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAg
ICAgICAgICAgaml0LnN0b3JlNjQoR1BSSW5mbzo6dG9SZWdpc3RlcihpKSwgc3RhdGljX2Nhc3Q8
RW5jb2RlZEpTVmFsdWUqPihzY3JhdGNoQnVmZmVyLT5kYXRhQnVmZmVyKCkpICsgKGNvdW50Kysp
KTsKKyNlbHNlCisgICAgICAgICAgICAgICAgaml0LnN0b3JlMzIoR1BSSW5mbzo6dG9SZWdpc3Rl
cihpKSwgc3RhdGljX2Nhc3Q8RW5jb2RlZEpTVmFsdWUqPihzY3JhdGNoQnVmZmVyLT5kYXRhQnVm
ZmVyKCkpICsgKGNvdW50KyspKTsKKyNlbmRpZgorICAgICAgICAgICAgfQogICAgICAgICAgICAg
aWYgKHNjcmF0Y2hHUFIgPT0gSW52YWxpZEdQUlJlZyAmJiAhbV9sb2NrZWRSZWdpc3RlcnMuZ2V0
R1BSQnlJbmRleChpKSAmJiAhbV9zY3JhdGNoUmVnaXN0ZXJzLmdldEdQUkJ5SW5kZXgoaSkpCiAg
ICAgICAgICAgICAgICAgc2NyYXRjaEdQUiA9IEdQUkluZm86OnRvUmVnaXN0ZXIoaSk7CiAgICAg
ICAgIH0KICAgICAgICAgQVNTRVJUKHNjcmF0Y2hHUFIgIT0gSW52YWxpZEdQUlJlZyk7CiAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IEZQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyBpLS07KSB7
CiAgICAgICAgICAgICBpZiAobV91c2VkUmVnaXN0ZXJzLmdldEZQUkJ5SW5kZXgoaSkpIHsKLSAg
ICAgICAgICAgICAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihzY3Jh
dGNoQnVmZmVyLT5tX2J1ZmZlciArIChjb3VudCsrKSksIHNjcmF0Y2hHUFIpOworICAgICAgICAg
ICAgICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHN0YXRpY19jYXN0
PEVuY29kZWRKU1ZhbHVlKj4oc2NyYXRjaEJ1ZmZlci0+ZGF0YUJ1ZmZlcigpKSArIChjb3VudCsr
KSksIHNjcmF0Y2hHUFIpOwogICAgICAgICAgICAgICAgIGppdC5zdG9yZURvdWJsZShGUFJJbmZv
Ojp0b1JlZ2lzdGVyKGkpLCBzY3JhdGNoR1BSKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpA
QCAtMTY1LDE1ICsxNzAsMjAgQEAgcHVibGljOgogICAgICAgICB1bnNpZ25lZCBjb3VudCA9IG1f
dXNlZFJlZ2lzdGVycy5udW1iZXJPZlNldEdQUnMoKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gRlBSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7IGktLTspIHsKICAgICAgICAgICAgIGlmICht
X3VzZWRSZWdpc3RlcnMuZ2V0RlBSQnlJbmRleChpKSkgewotICAgICAgICAgICAgICAgIGppdC5t
b3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHNjcmF0Y2hCdWZmZXItPm1fYnVmZmVy
ICsgKGNvdW50KyspKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgaml0Lm1vdmUoTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoc3RhdGljX2Nhc3Q8RW5jb2RlZEpTVmFsdWUqPihz
Y3JhdGNoQnVmZmVyLT5kYXRhQnVmZmVyKCkpICsgKGNvdW50KyspKSwgc2NyYXRjaEdQUik7CiAg
ICAgICAgICAgICAgICAgaml0LmxvYWREb3VibGUoc2NyYXRjaEdQUiwgRlBSSW5mbzo6dG9SZWdp
c3RlcihpKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGNv
dW50ID0gMDsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gR1BSSW5mbzo6bnVtYmVyT2ZSZWdp
c3RlcnM7IGktLTspIHsKLSAgICAgICAgICAgIGlmIChtX3VzZWRSZWdpc3RlcnMuZ2V0R1BSQnlJ
bmRleChpKSkKLSAgICAgICAgICAgICAgICBqaXQubG9hZFB0cihzY3JhdGNoQnVmZmVyLT5tX2J1
ZmZlciArIChjb3VudCsrKSwgR1BSSW5mbzo6dG9SZWdpc3RlcihpKSk7CisgICAgICAgICAgICBp
ZiAobV91c2VkUmVnaXN0ZXJzLmdldEdQUkJ5SW5kZXgoaSkpIHsKKyNpZiBVU0UoSlNWQUxVRTY0
KQorICAgICAgICAgICAgICAgIGppdC5sb2FkNjQoc3RhdGljX2Nhc3Q8RW5jb2RlZEpTVmFsdWUq
PihzY3JhdGNoQnVmZmVyLT5kYXRhQnVmZmVyKCkpICsgKGNvdW50KyspLCBHUFJJbmZvOjp0b1Jl
Z2lzdGVyKGkpKTsKKyNlbHNlCisgICAgICAgICAgICAgICAgaml0LmxvYWQzMihzdGF0aWNfY2Fz
dDxFbmNvZGVkSlNWYWx1ZSo+KHNjcmF0Y2hCdWZmZXItPmRhdGFCdWZmZXIoKSkgKyAoY291bnQr
KyksIEdQUkluZm86OnRvUmVnaXN0ZXIoaSkpOworI2VuZGlmCisgICAgICAgICAgICB9CiAgICAg
ICAgIH0KICAgICB9CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Np
bGVudFJlZ2lzdGVyU2F2ZVBsYW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NpbGVudFJlZ2lzdGVyU2F2ZVBsYW4uaAkocmV2aXNpb24gMTMxODUwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTaWxlbnRSZWdpc3RlclNhdmVQbGFuLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQxLDYgKzQxLDcgQEAgZW51bSBTaWxlbnRTcGlsbEFjdGlvbiB7CiAg
ICAgU3RvcmUzMlRhZywKICAgICBTdG9yZTMyUGF5bG9hZCwKICAgICBTdG9yZVB0ciwKKyAgICBT
dG9yZTY0LAogICAgIFN0b3JlRG91YmxlCiB9OwogCkBAIC02MSw2ICs2Miw3IEBAIGVudW0gU2ls
ZW50RmlsbEFjdGlvbiB7CiAgICAgTG9hZDMyUGF5bG9hZCwKICAgICBMb2FkMzJQYXlsb2FkQm94
SW50LAogICAgIExvYWRQdHIsCisgICAgTG9hZDY0LAogICAgIExvYWREb3VibGUsCiAgICAgTG9h
ZERvdWJsZUJveERvdWJsZSwKICAgICBMb2FkSlNVbmJveERvdWJsZQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lv
biAxMzE4NTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
NjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NSwyMSArNTUsMjEgQEAgR1BSUmVnIFNwZWN1bGF0
aXZlSklUOjpmaWxsSW50ZWdlcihOb2RlSQogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYg
KGlzTnVtYmVyQ29uc3RhbnQobm9kZUluZGV4KSkgewogICAgICAgICAgICAgICAgIEpTVmFsdWUg
anNWYWx1ZSA9IGpzTnVtYmVyKHZhbHVlT2ZOdW1iZXJDb25zdGFudChub2RlSW5kZXgpKTsKLSAg
ICAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpJbW1QdHIoSlNWYWx1ZTo6
ZW5jb2RlKGpzVmFsdWUpKSwgZ3ByKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3Jv
QXNzZW1ibGVyOjpJbW02NChKU1ZhbHVlOjplbmNvZGUoanNWYWx1ZSkpLCBncHIpOwogICAgICAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBBU1NFUlQoaXNKU0NvbnN0YW50KG5vZGVJ
bmRleCkpOwogICAgICAgICAgICAgICAgIEpTVmFsdWUganNWYWx1ZSA9IHZhbHVlT2ZKU0NvbnN0
YW50KG5vZGVJbmRleCk7Ci0gICAgICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbVB0cihKU1ZhbHVlOjplbmNvZGUoanNWYWx1ZSkpLCBncHIpOworICAgICAg
ICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVl
OjplbmNvZGUoanNWYWx1ZSkpLCBncHIpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2Ug
aWYgKGluZm8uc3BpbGxGb3JtYXQoKSA9PSBEYXRhRm9ybWF0SW50ZWdlcikgewogICAgICAgICAg
ICAgbV9ncHJzLnJldGFpbihncHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlclNwaWxsZWQp
OwogICAgICAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKHZpcnR1
YWxSZWdpc3RlciksIGdwcik7CiAgICAgICAgICAgICAvLyBUYWcgaXQsIHNpbmNlIGZpbGxJbnRl
Z2VyKCkgaXMgdXNlZCB3aGVuIHdlIHdhbnQgYSBib3hlZCBpbnRlZ2VyLgotICAgICAgICAgICAg
bV9qaXQub3JQdHIoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBncHIpOworICAgICAg
ICAgICAgbV9qaXQub3I2NChHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIGdwcik7CiAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBBU1NFUlQoaW5mby5zcGlsbEZvcm1hdCgpID09
IERhdGFGb3JtYXRKUyB8fCBpbmZvLnNwaWxsRm9ybWF0KCkgPT0gRGF0YUZvcm1hdEpTSW50ZWdl
cik7CiAgICAgICAgICAgICBtX2dwcnMucmV0YWluKGdwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGls
bE9yZGVyU3BpbGxlZCk7Ci0gICAgICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjph
ZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIGdwcik7CisgICAgICAgICAgICBtX2ppdC5sb2Fk
NjQoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSwgZ3ByKTsKICAgICAg
ICAgfQogCiAgICAgICAgIC8vIFNpbmNlIHdlIHN0YXRpY2FsbHkga25vdyB0aGF0IHdlJ3JlIGZp
bGxpbmcgYW4gaW50ZWdlciwgYW5kIHZhbHVlcwpAQCAtMTMzLDggKzEzMyw4IEBAIEZQUlJlZyBT
cGVjdWxhdGl2ZUpJVDo6ZmlsbERvdWJsZShOb2RlSW4KICAgICAgICAgICAgICAgICB1bmxvY2so
Z3ByKTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNOdW1iZXJDb25zdGFudChub2RlSW5kZXgp
KSB7CiAgICAgICAgICAgICAgICAgRlBSUmVnIGZwciA9IGZwckFsbG9jYXRlKCk7Ci0gICAgICAg
ICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6SW1tUHRyKHJlaW50ZXJwcmV0X2Nh
c3Q8dm9pZCo+KHJlaW50ZXJwcmV0RG91YmxlVG9JbnRwdHIodmFsdWVPZk51bWJlckNvbnN0YW50
KG5vZGVJbmRleCkpKSksIGdwcik7Ci0gICAgICAgICAgICAgICAgbV9qaXQubW92ZVB0clRvRG91
YmxlKGdwciwgZnByKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVy
OjpJbW02NChyZWludGVycHJldERvdWJsZVRvSW50NjQodmFsdWVPZk51bWJlckNvbnN0YW50KG5v
ZGVJbmRleCkpKSwgZ3ByKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlNjRUb0RvdWJsZShn
cHIsIGZwcik7CiAgICAgICAgICAgICAgICAgdW5sb2NrKGdwcik7CiAKICAgICAgICAgICAgICAg
ICBtX2ZwcnMucmV0YWluKGZwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyRG91YmxlKTsK
QEAgLTE0NCw3ICsxNDQsNyBAQCBGUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxEb3VibGUoTm9k
ZUluCiAgICAgICAgICAgICAgICAgLy8gRklYTUU6IHNob3VsZCBub3QgYmUgcmVhY2hhYmxlPwog
ICAgICAgICAgICAgICAgIEFTU0VSVChpc0pTQ29uc3RhbnQobm9kZUluZGV4KSk7CiAgICAgICAg
ICAgICAgICAgSlNWYWx1ZSBqc1ZhbHVlID0gdmFsdWVPZkpTQ29uc3RhbnQobm9kZUluZGV4KTsK
LSAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRy
KEpTVmFsdWU6OmVuY29kZShqc1ZhbHVlKSksIGdwcik7CisgICAgICAgICAgICAgICAgbV9qaXQu
bW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc1ZhbHVl
KSksIGdwcik7CiAgICAgICAgICAgICAgICAgbV9ncHJzLnJldGFpbihncHIsIHZpcnR1YWxSZWdp
c3RlciwgU3BpbGxPcmRlckNvbnN0YW50KTsKICAgICAgICAgICAgICAgICBpbmZvLmZpbGxKU1Zh
bHVlKCptX3N0cmVhbSwgZ3ByLCBEYXRhRm9ybWF0SlMpOwogICAgICAgICAgICAgICAgIHVubG9j
ayhncHIpOwpAQCAtMTc1LDcgKzE3NSw3IEBAIEZQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbERv
dWJsZShOb2RlSW4KICAgICAgICAgCiAgICAgICAgICAgICAgICAgQVNTRVJUKHNwaWxsRm9ybWF0
ICYgRGF0YUZvcm1hdEpTKTsKICAgICAgICAgICAgICAgICBtX2dwcnMucmV0YWluKGdwciwgdmly
dHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyU3BpbGxlZCk7Ci0gICAgICAgICAgICAgICAgbV9qaXQu
bG9hZFB0cihKSVRDb21waWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBncHIpOwor
ICAgICAgICAgICAgICAgIG1faml0LmxvYWQ2NChKSVRDb21waWxlcjo6YWRkcmVzc0Zvcih2aXJ0
dWFsUmVnaXN0ZXIpLCBncHIpOwogICAgICAgICAgICAgICAgIGluZm8uZmlsbEpTVmFsdWUoKm1f
c3RyZWFtLCBncHIsIHNwaWxsRm9ybWF0KTsKICAgICAgICAgICAgICAgICB1bmxvY2soZ3ByKTsK
ICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTIwMCw3ICsyMDAsNyBAQCBGUFJSZWcgU3BlY3Vs
YXRpdmVKSVQ6OmZpbGxEb3VibGUoTm9kZUluCiAgICAgICAgIEZQUlJlZyBmcHIgPSBmcHJBbGxv
Y2F0ZSgpOwogICAgICAgICBHUFJSZWcgdGVtcEdwciA9IGFsbG9jYXRlKCk7IC8vIEZJWE1FOiBj
YW4gd2Ugc2tpcCB0aGlzIGFsbG9jYXRpb24gb24gdGhlIGxhc3QgdXNlIG9mIHRoZSB2aXJ0dWFs
IHJlZ2lzdGVyPwogCi0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzSW50ZWdlciA9IG1faml0
LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBqc1ZhbHVlR3ByLCBHUFJJ
bmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOworICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBp
c0ludGVnZXIgPSBtX2ppdC5icmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBq
c1ZhbHVlR3ByLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOwogCiAgICAgICAgIG1f
aml0LmppdEFzc2VydElzSlNEb3VibGUoanNWYWx1ZUdwcik7CiAKQEAgLTI3OSwxNSArMjc5LDE1
IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbEpTVmFsdWUoTm9kZUkKICAgICAgICAgICAg
IGlmIChpc0ludDMyQ29uc3RhbnQobm9kZUluZGV4KSkgewogICAgICAgICAgICAgICAgIGluZm8u
ZmlsbEpTVmFsdWUoKm1fc3RyZWFtLCBncHIsIERhdGFGb3JtYXRKU0ludGVnZXIpOwogICAgICAg
ICAgICAgICAgIEpTVmFsdWUganNWYWx1ZSA9IGpzTnVtYmVyKHZhbHVlT2ZJbnQzMkNvbnN0YW50
KG5vZGVJbmRleCkpOwotICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6
OkltbVB0cihKU1ZhbHVlOjplbmNvZGUoanNWYWx1ZSkpLCBncHIpOworICAgICAgICAgICAgICAg
IG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OkltbTY0KEpTVmFsdWU6OmVuY29kZShqc1ZhbHVl
KSksIGdwcik7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKGlzTnVtYmVyQ29uc3RhbnQobm9kZUlu
ZGV4KSkgewogICAgICAgICAgICAgICAgIGluZm8uZmlsbEpTVmFsdWUoKm1fc3RyZWFtLCBncHIs
IERhdGFGb3JtYXRKU0RvdWJsZSk7CiAgICAgICAgICAgICAgICAgSlNWYWx1ZSBqc1ZhbHVlKEpT
VmFsdWU6OkVuY29kZUFzRG91YmxlLCB2YWx1ZU9mTnVtYmVyQ29uc3RhbnQobm9kZUluZGV4KSk7
Ci0gICAgICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6SW1tUHRyKEpTVmFs
dWU6OmVuY29kZShqc1ZhbHVlKSksIGdwcik7CisgICAgICAgICAgICAgICAgbV9qaXQubW92ZShN
YWNyb0Fzc2VtYmxlcjo6SW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzVmFsdWUpKSwgZ3ByKTsKICAg
ICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgQVNTRVJUKGlzSlNDb25zdGFudChu
b2RlSW5kZXgpKTsKICAgICAgICAgICAgICAgICBKU1ZhbHVlIGpzVmFsdWUgPSB2YWx1ZU9mSlND
b25zdGFudChub2RlSW5kZXgpOwotICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKGpzVmFsdWUpKSwgZ3ByKTsKKyAg
ICAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNW
YWx1ZTo6ZW5jb2RlKGpzVmFsdWUpKSwgZ3ByKTsKICAgICAgICAgICAgICAgICBpbmZvLmZpbGxK
U1ZhbHVlKCptX3N0cmVhbSwgZ3ByLCBEYXRhRm9ybWF0SlMpOwogICAgICAgICAgICAgfQogCkBA
IC0yOTcsMTMgKzI5NywxMyBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxKU1ZhbHVlKE5v
ZGVJCiAgICAgICAgICAgICBtX2dwcnMucmV0YWluKGdwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGls
bE9yZGVyU3BpbGxlZCk7CiAgICAgICAgICAgICBpZiAoc3BpbGxGb3JtYXQgPT0gRGF0YUZvcm1h
dEludGVnZXIpIHsKICAgICAgICAgICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OmFk
ZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSwgZ3ByKTsKLSAgICAgICAgICAgICAgICBtX2ppdC5v
clB0cihHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIGdwcik7CisgICAgICAgICAgICAg
ICAgbV9qaXQub3I2NChHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIGdwcik7CiAgICAg
ICAgICAgICAgICAgc3BpbGxGb3JtYXQgPSBEYXRhRm9ybWF0SlNJbnRlZ2VyOwogICAgICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjph
ZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIGdwcik7CisgICAgICAgICAgICAgICAgbV9qaXQu
bG9hZDY0KEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIGdwcik7CiAg
ICAgICAgICAgICAgICAgaWYgKHNwaWxsRm9ybWF0ID09IERhdGFGb3JtYXREb3VibGUpIHsKICAg
ICAgICAgICAgICAgICAgICAgLy8gTmVlZCB0byBib3ggdGhlIGRvdWJsZSwgc2luY2Ugd2Ugd2Fu
dCBhIEpTVmFsdWUuCi0gICAgICAgICAgICAgICAgICAgIG1faml0LnN1YlB0cihHUFJJbmZvOjp0
YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIGdwcik7CisgICAgICAgICAgICAgICAgICAgIG1faml0LnN1
YjY0KEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgZ3ByKTsKICAgICAgICAgICAgICAg
ICAgICAgc3BpbGxGb3JtYXQgPSBEYXRhRm9ybWF0SlNEb3VibGU7CiAgICAgICAgICAgICAgICAg
fSBlbHNlCiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChzcGlsbEZvcm1hdCAmIERhdGFGb3Jt
YXRKUyk7CkBAIC0zMTksMTEgKzMxOSwxMSBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxK
U1ZhbHVlKE5vZGVJCiAgICAgICAgIC8vIElmIG5vdCwgd2UnbGwgemVybyBleHRlbmQgaW4gcGxh
Y2UsIHNvIG1hcmsgb24gdGhlIGluZm8gdGhhdCB0aGlzIGlzIG5vdyB0eXBlIERhdGFGb3JtYXRJ
bnRlZ2VyLCBub3QgRGF0YUZvcm1hdEpTSW50ZWdlci4KICAgICAgICAgaWYgKG1fZ3Bycy5pc0xv
Y2tlZChncHIpKSB7CiAgICAgICAgICAgICBHUFJSZWcgcmVzdWx0ID0gYWxsb2NhdGUoKTsKLSAg
ICAgICAgICAgIG1faml0Lm9yUHRyKEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgZ3By
LCByZXN1bHQpOworICAgICAgICAgICAgbV9qaXQub3I2NChHUFJJbmZvOjp0YWdUeXBlTnVtYmVy
UmVnaXN0ZXIsIGdwciwgcmVzdWx0KTsKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAg
ICAgIH0KICAgICAgICAgbV9ncHJzLmxvY2soZ3ByKTsKLSAgICAgICAgbV9qaXQub3JQdHIoR1BS
SW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBncHIpOworICAgICAgICBtX2ppdC5vcjY0KEdQ
UkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgZ3ByKTsKICAgICAgICAgaW5mby5maWxsSlNW
YWx1ZSgqbV9zdHJlYW0sIGdwciwgRGF0YUZvcm1hdEpTSW50ZWdlcik7CiAgICAgICAgIHJldHVy
biBncHI7CiAgICAgfQpAQCAtNDA4LDggKzQwOCw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5v
blNwZWN1bGF0aXZlVmFsdWUKICAgICBHUFJSZWcgZ3ByID0gcmVzdWx0LmdwcigpOwogICAgIG9w
MS51c2UoKTsKIAotICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzSW50ZWdlciA9IG1faml0LmJyYW5j
aFB0cihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBqc1ZhbHVlR3ByLCBHUFJJbmZvOjp0
YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOwotICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vbk51bWVyaWMg
PSBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBqc1ZhbHVlR3ByLCBH
UFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOworICAgIEpJVENvbXBpbGVyOjpKdW1wIGlz
SW50ZWdlciA9IG1faml0LmJyYW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIGpz
VmFsdWVHcHIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7CisgICAgSklUQ29tcGls
ZXI6Okp1bXAgbm9uTnVtZXJpYyA9IG1faml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6
WmVybywganNWYWx1ZUdwciwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKIAogICAg
IC8vIEZpcnN0LCBpZiB3ZSBnZXQgaGVyZSB3ZSBoYXZlIGEgZG91YmxlIGVuY29kZWQgYXMgYSBK
U1ZhbHVlCiAgICAgbV9qaXQubW92ZShqc1ZhbHVlR3ByLCBncHIpOwpAQCAtNDE3LDcgKzQxNyw3
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlVmFsdWUKIAogICAgIC8vIEZp
bmFsbHksIGhhbmRsZSBpbnRlZ2Vycy4KICAgICBpc0ludGVnZXIubGluaygmbV9qaXQpOwotICAg
IG1faml0Lm9yUHRyKEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwganNWYWx1ZUdwciwg
Z3ByKTsKKyAgICBtX2ppdC5vcjY0KEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwganNW
YWx1ZUdwciwgZ3ByKTsKICAgICBoYXNVbmJveGVkRG91YmxlLmxpbmsoJm1faml0KTsKICAgICAK
ICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihhZG9wdFB0cihuZXcgVmFsdWVUb051bWJlclNsb3dQ
YXRoR2VuZXJhdG9yKG5vbk51bWVyaWMsIHRoaXMsIGdwciwganNWYWx1ZUdwcikpKTsKQEAgLTQ1
OSw3ICs0NTksNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVZhbHVlCiAg
ICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKICAgICBvcDEudXNlKCk7CiAKLSAg
ICBKSVRDb21waWxlcjo6SnVtcCBpc05vdEludGVnZXIgPSBtX2ppdC5icmFuY2hQdHIoTWFjcm9B
c3NlbWJsZXI6OkJlbG93LCBqc1ZhbHVlR3ByLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0
ZXIpOworICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzTm90SW50ZWdlciA9IG1faml0LmJyYW5jaDY0
KE1hY3JvQXNzZW1ibGVyOjpCZWxvdywganNWYWx1ZUdwciwgR1BSSW5mbzo6dGFnVHlwZU51bWJl
clJlZ2lzdGVyKTsKIAogICAgIG1faml0Lnplcm9FeHRlbmQzMlRvUHRyKGpzVmFsdWVHcHIsIHJl
c3VsdEdQUik7CiAgICAgCkBAIC00ODYsNyArNDg2LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
bm9uU3BlY3VsYXRpdmVVSW50MwogICAgIAogICAgIHBvc2l0aXZlLmxpbmsoJm1faml0KTsKICAg
ICAKLSAgICBtX2ppdC5vclB0cihHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIG9wMS5n
cHIoKSwgcmVzdWx0LmdwcigpKTsKKyAgICBtX2ppdC5vcjY0KEdQUkluZm86OnRhZ1R5cGVOdW1i
ZXJSZWdpc3Rlciwgb3AxLmdwcigpLCByZXN1bHQuZ3ByKCkpOwogICAgIAogICAgIGRvbmUubGlu
aygmbV9qaXQpOwogICAgIApAQCAtNTAwLDcgKzUwMCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNhY2hlZEdldEJ5SWQoQ29kZU8KICAgICAKICAgICBKSVRDb21waWxlcjo6Q29udmVydGlibGVM
b2FkTGFiZWwgcHJvcGVydHlTdG9yYWdlTG9hZCA9CiAgICAgICAgIG1faml0LmNvbnZlcnRpYmxl
TG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5
T2Zmc2V0KCkpLCByZXN1bHRHUFIpOwotICAgIEpJVENvbXBpbGVyOjpEYXRhTGFiZWxDb21wYWN0
IGxvYWRXaXRoUGF0Y2ggPSBtX2ppdC5sb2FkUHRyV2l0aENvbXBhY3RBZGRyZXNzT2Zmc2V0UGF0
Y2goSklUQ29tcGlsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCAwKSwgcmVzdWx0R1BSKTsKKyAgICBK
SVRDb21waWxlcjo6RGF0YUxhYmVsQ29tcGFjdCBsb2FkV2l0aFBhdGNoID0gbV9qaXQubG9hZDY0
V2l0aENvbXBhY3RBZGRyZXNzT2Zmc2V0UGF0Y2goSklUQ29tcGlsZXI6OkFkZHJlc3MocmVzdWx0
R1BSLCAwKSwgcmVzdWx0R1BSKTsKICAgICAKICAgICBKSVRDb21waWxlcjo6TGFiZWwgZG9uZUxh
YmVsID0gbV9qaXQubGFiZWwoKTsKIApAQCAtNTM2LDcgKzUzNiw3IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNhY2hlZFB1dEJ5SWQoQ29kZU8KIAogICAgIEpJVENvbXBpbGVyOjpDb252ZXJ0aWJs
ZUxvYWRMYWJlbCBwcm9wZXJ0eVN0b3JhZ2VMb2FkID0KICAgICAgICAgbV9qaXQuY29udmVydGli
bGVMb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJm
bHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwotICAgIEpJVENvbXBpbGVyOjpEYXRhTGFiZWwzMiBz
dG9yZVdpdGhQYXRjaCA9IG1faml0LnN0b3JlUHRyV2l0aEFkZHJlc3NPZmZzZXRQYXRjaCh2YWx1
ZUdQUiwgSklUQ29tcGlsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgMCkpOworICAgIEpJVENvbXBp
bGVyOjpEYXRhTGFiZWwzMiBzdG9yZVdpdGhQYXRjaCA9IG1faml0LnN0b3JlNjRXaXRoQWRkcmVz
c09mZnNldFBhdGNoKHZhbHVlR1BSLCBKSVRDb21waWxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCAw
KSk7CiAKICAgICBKSVRDb21waWxlcjo6TGFiZWwgZG9uZUxhYmVsID0gbV9qaXQubGFiZWwoKTsK
ICAgICAKQEAgLTU4OCw3ICs1ODgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxh
dGl2ZU5vblBlCiAgICAgSklUQ29tcGlsZXI6Okp1bXAgbm90Q2VsbDsKICAgICAKICAgICBpZiAo
IWlzS25vd25DZWxsKG9wZXJhbmQuaW5kZXgoKSkpCi0gICAgICAgIG5vdENlbGwgPSBtX2ppdC5i
cmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBhcmdHUFIsIEdQUkluZm86OnRh
Z01hc2tSZWdpc3Rlcik7CisgICAgICAgIG5vdENlbGwgPSBtX2ppdC5icmFuY2hUZXN0NjQoTWFj
cm9Bc3NlbWJsZXI6Ok5vblplcm8sIGFyZ0dQUiwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsK
ICAgIAogICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQ7CiAg
ICAgaWYgKG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG1faml0LmdyYXBoKClbb3BlcmFu
ZF0uY29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCktPmlzU3Rp
bGxWYWxpZCgpKSB7CkBAIC02MTgsOCArNjE4LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9u
U3BlY3VsYXRpdmVOb25QZQogICAgICAgICBub3RDZWxsLmxpbmsoJm1faml0KTsKICAgICAgICAg
CiAgICAgICAgIG1faml0Lm1vdmUoYXJnR1BSLCByZXN1bHRHUFIpOwotICAgICAgICBtX2ppdC5h
bmRQdHIoSklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMih+VGFnQml0VW5kZWZpbmVkKSwgcmVzdWx0
R1BSKTsKLSAgICAgICAgbV9qaXQuY29tcGFyZVB0cihpbnZlcnQgPyBKSVRDb21waWxlcjo6Tm90
RXF1YWwgOiBKSVRDb21waWxlcjo6RXF1YWwsIHJlc3VsdEdQUiwgSklUQ29tcGlsZXI6OlRydXN0
ZWRJbW0zMihWYWx1ZU51bGwpLCByZXN1bHRHUFIpOworICAgICAgICBtX2ppdC5hbmQ2NChKSVRD
b21waWxlcjo6VHJ1c3RlZEltbTMyKH5UYWdCaXRVbmRlZmluZWQpLCByZXN1bHRHUFIpOworICAg
ICAgICBtX2ppdC5jb21wYXJlNjQoaW52ZXJ0ID8gSklUQ29tcGlsZXI6Ok5vdEVxdWFsIDogSklU
Q29tcGlsZXI6OkVxdWFsLCByZXN1bHRHUFIsIEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tMzIoVmFs
dWVOdWxsKSwgcmVzdWx0R1BSKTsKICAgICAgICAgCiAgICAgICAgIGRvbmUubGluaygmbV9qaXQp
OwogICAgIH0KQEAgLTY1Miw3ICs2NTIsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVj
dWxhdGl2ZVBlZXBoCiAgICAgSklUQ29tcGlsZXI6Okp1bXAgbm90Q2VsbDsKICAgICAKICAgICBp
ZiAoIWlzS25vd25DZWxsKG9wZXJhbmQuaW5kZXgoKSkpCi0gICAgICAgIG5vdENlbGwgPSBtX2pp
dC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBhcmdHUFIsIEdQUkluZm86
OnRhZ01hc2tSZWdpc3Rlcik7CisgICAgICAgIG5vdENlbGwgPSBtX2ppdC5icmFuY2hUZXN0NjQo
TWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIGFyZ0dQUiwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVy
KTsKICAgICAKICAgICBpZiAobV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3IobV9qaXQuZ3Jh
cGgoKVtvcGVyYW5kXS5jb2RlT3JpZ2luKS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9p
bnQoKS0+aXNTdGlsbFZhbGlkKCkpIHsKICAgICAgICAgbV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmpl
Y3RGb3IobV9qaXQuZ3JhcGgoKVtvcGVyYW5kXS5jb2RlT3JpZ2luKS0+bWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZFdhdGNocG9pbnQoKS0+YWRkKHNwZWN1bGF0aW9uV2F0Y2hwb2ludCgpKTsKQEAgLTY3
Niw4ICs2NzYsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVBlZXBoCiAg
ICAgICAgIG5vdENlbGwubGluaygmbV9qaXQpOwogICAgICAgICAKICAgICAgICAgbV9qaXQubW92
ZShhcmdHUFIsIHJlc3VsdEdQUik7Ci0gICAgICAgIG1faml0LmFuZFB0cihKSVRDb21waWxlcjo6
VHJ1c3RlZEltbTMyKH5UYWdCaXRVbmRlZmluZWQpLCByZXN1bHRHUFIpOwotICAgICAgICBicmFu
Y2hQdHIoaW52ZXJ0ID8gSklUQ29tcGlsZXI6Ok5vdEVxdWFsIDogSklUQ29tcGlsZXI6OkVxdWFs
LCByZXN1bHRHUFIsIEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tUHRyKHJlaW50ZXJwcmV0X2Nhc3Q8
dm9pZCo+KFZhbHVlTnVsbCkpLCB0YWtlbik7CisgICAgICAgIG1faml0LmFuZDY0KEpJVENvbXBp
bGVyOjpUcnVzdGVkSW1tMzIoflRhZ0JpdFVuZGVmaW5lZCksIHJlc3VsdEdQUik7CisgICAgICAg
IGJyYW5jaDY0KGludmVydCA/IEpJVENvbXBpbGVyOjpOb3RFcXVhbCA6IEpJVENvbXBpbGVyOjpF
cXVhbCwgcmVzdWx0R1BSLCBKSVRDb21waWxlcjo6VHJ1c3RlZEltbTY0KFZhbHVlTnVsbCksIHRh
a2VuKTsKICAgICB9CiAgICAgCiAgICAganVtcChub3RUYWtlbik7CkBAIC03NTAsOSArNzUwLDkg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVQZWVwaAogICAgICAgICBhcmcy
LnVzZSgpOwogICAgIAogICAgICAgICBpZiAoIWlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQxKCku
aW5kZXgoKSkpCi0gICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQobV9qaXQuYnJhbmNoUHRyKE1h
Y3JvQXNzZW1ibGVyOjpCZWxvdywgYXJnMUdQUiwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lz
dGVyKSk7CisgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQobV9qaXQuYnJhbmNoNjQoTWFjcm9B
c3NlbWJsZXI6OkJlbG93LCBhcmcxR1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIp
KTsKICAgICAgICAgaWYgKCFpc0tub3duSW50ZWdlcihub2RlLmNoaWxkMigpLmluZGV4KCkpKQot
ICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxl
cjo6QmVsb3csIGFyZzJHUFIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlcikpOworICAg
ICAgICAgICAgc2xvd1BhdGguYXBwZW5kKG1faml0LmJyYW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpC
ZWxvdywgYXJnMkdQUiwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSk7CiAgICAgCiAg
ICAgICAgIGJyYW5jaDMyKGNvbmQsIGFyZzFHUFIsIGFyZzJHUFIsIHRha2VuKTsKICAgICAKQEAg
LTgzMyw5ICs4MzMsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZU5vblBl
CiAgICAgICAgIGFyZzIudXNlKCk7CiAgICAgCiAgICAgICAgIGlmICghaXNLbm93bkludGVnZXIo
bm9kZS5jaGlsZDEoKS5pbmRleCgpKSkKLSAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChtX2pp
dC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBhcmcxR1BSLCBHUFJJbmZvOjp0YWdU
eXBlTnVtYmVyUmVnaXN0ZXIpKTsKKyAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChtX2ppdC5i
cmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIGFyZzFHUFIsIEdQUkluZm86OnRhZ1R5cGVO
dW1iZXJSZWdpc3RlcikpOwogICAgICAgICBpZiAoIWlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQy
KCkuaW5kZXgoKSkpCi0gICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQobV9qaXQuYnJhbmNoUHRy
KE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgYXJnMkdQUiwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJl
Z2lzdGVyKSk7CisgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQobV9qaXQuYnJhbmNoNjQoTWFj
cm9Bc3NlbWJsZXI6OkJlbG93LCBhcmcyR1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0
ZXIpKTsKICAgICAKICAgICAgICAgbV9qaXQuY29tcGFyZTMyKGNvbmQsIGFyZzFHUFIsIGFyZzJH
UFIsIHJlc3VsdEdQUik7CiAgICAgICAgIG1faml0Lm9yMzIoVHJ1c3RlZEltbTMyKFZhbHVlRmFs
c2UpLCByZXN1bHRHUFIpOwpAQCAtODc5LDcgKzg3OSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
Om5vblNwZWN1bGF0aXZlUGVlcGgKICAgICBpZiAoaXNLbm93bkNlbGwobm9kZS5jaGlsZDEoKS5p
bmRleCgpKSAmJiBpc0tub3duQ2VsbChub2RlLmNoaWxkMigpLmluZGV4KCkpKSB7CiAgICAgICAg
IC8vIHNlZSBpZiB3ZSBnZXQgbHVja3k6IGlmIHRoZSBhcmd1bWVudHMgYXJlIGNlbGxzIGFuZCB0
aGV5IHJlZmVyZW5jZSB0aGUgc2FtZQogICAgICAgICAvLyBjZWxsLCB0aGVuIHRoZXkgbXVzdCBi
ZSBzdHJpY3RseSBlcXVhbC4KLSAgICAgICAgYnJhbmNoUHRyKEpJVENvbXBpbGVyOjpFcXVhbCwg
YXJnMUdQUiwgYXJnMkdQUiwgaW52ZXJ0ID8gbm90VGFrZW4gOiB0YWtlbik7CisgICAgICAgIGJy
YW5jaDY0KEpJVENvbXBpbGVyOjpFcXVhbCwgYXJnMUdQUiwgYXJnMkdQUiwgaW52ZXJ0ID8gbm90
VGFrZW4gOiB0YWtlbik7CiAgICAgICAgIAogICAgICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVy
cyhyZXN1bHRHUFIpOwogICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJp
Y3RFcUNlbGwsIHJlc3VsdEdQUiwgYXJnMUdQUiwgYXJnMkdQUik7CkBAIC04ODcsMjIgKzg4Nywy
MiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVBlZXBoCiAgICAgICAgIAog
ICAgICAgICBicmFuY2hUZXN0MzIoaW52ZXJ0ID8gSklUQ29tcGlsZXI6Olplcm8gOiBKSVRDb21w
aWxlcjo6Tm9uWmVybywgcmVzdWx0R1BSLCB0YWtlbik7CiAgICAgfSBlbHNlIHsKLSAgICAgICAg
bV9qaXQub3JQdHIoYXJnMUdQUiwgYXJnMkdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgbV9qaXQu
b3I2NChhcmcxR1BSLCBhcmcyR1BSLCByZXN1bHRHUFIpOwogICAgICAgICAKLSAgICAgICAgSklU
Q29tcGlsZXI6Okp1bXAgdHdvQ2VsbHNDYXNlID0gbV9qaXQuYnJhbmNoVGVzdFB0cihKSVRDb21w
aWxlcjo6WmVybywgcmVzdWx0R1BSLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpOworICAgICAg
ICBKSVRDb21waWxlcjo6SnVtcCB0d29DZWxsc0Nhc2UgPSBtX2ppdC5icmFuY2hUZXN0NjQoSklU
Q29tcGlsZXI6Olplcm8sIHJlc3VsdEdQUiwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsKICAg
ICAgICAgCi0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGxlZnRPSyA9IG1faml0LmJyYW5jaFB0
cihKSVRDb21waWxlcjo6QWJvdmVPckVxdWFsLCBhcmcxR1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVt
YmVyUmVnaXN0ZXIpOwotICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBsZWZ0RG91YmxlID0gbV9q
aXQuYnJhbmNoVGVzdFB0cihKSVRDb21waWxlcjo6Tm9uWmVybywgYXJnMUdQUiwgR1BSSW5mbzo6
dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgbGVmdE9L
ID0gbV9qaXQuYnJhbmNoNjQoSklUQ29tcGlsZXI6OkFib3ZlT3JFcXVhbCwgYXJnMUdQUiwgR1BS
SW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAg
bGVmdERvdWJsZSA9IG1faml0LmJyYW5jaFRlc3Q2NChKSVRDb21waWxlcjo6Tm9uWmVybywgYXJn
MUdQUiwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKICAgICAgICAgbGVmdE9LLmxp
bmsoJm1faml0KTsKLSAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgcmlnaHRPSyA9IG1faml0LmJy
YW5jaFB0cihKSVRDb21waWxlcjo6QWJvdmVPckVxdWFsLCBhcmcyR1BSLCBHUFJJbmZvOjp0YWdU
eXBlTnVtYmVyUmVnaXN0ZXIpOwotICAgICAgICBKSVRDb21waWxlcjo6SnVtcCByaWdodERvdWJs
ZSA9IG1faml0LmJyYW5jaFRlc3RQdHIoSklUQ29tcGlsZXI6Ok5vblplcm8sIGFyZzJHUFIsIEdQ
UkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7CisgICAgICAgIEpJVENvbXBpbGVyOjpKdW1w
IHJpZ2h0T0sgPSBtX2ppdC5icmFuY2g2NChKSVRDb21waWxlcjo6QWJvdmVPckVxdWFsLCBhcmcy
R1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOworICAgICAgICBKSVRDb21waWxl
cjo6SnVtcCByaWdodERvdWJsZSA9IG1faml0LmJyYW5jaFRlc3Q2NChKSVRDb21waWxlcjo6Tm9u
WmVybywgYXJnMkdQUiwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKICAgICAgICAg
cmlnaHRPSy5saW5rKCZtX2ppdCk7CiAgICAgICAgIAotICAgICAgICBicmFuY2hQdHIoaW52ZXJ0
ID8gSklUQ29tcGlsZXI6Ok5vdEVxdWFsIDogSklUQ29tcGlsZXI6OkVxdWFsLCBhcmcxR1BSLCBh
cmcyR1BSLCB0YWtlbik7CisgICAgICAgIGJyYW5jaDY0KGludmVydCA/IEpJVENvbXBpbGVyOjpO
b3RFcXVhbCA6IEpJVENvbXBpbGVyOjpFcXVhbCwgYXJnMUdQUiwgYXJnMkdQUiwgdGFrZW4pOwog
ICAgICAgICBqdW1wKG5vdFRha2VuLCBGb3JjZUp1bXApOwogICAgICAgICAKICAgICAgICAgdHdv
Q2VsbHNDYXNlLmxpbmsoJm1faml0KTsKLSAgICAgICAgYnJhbmNoUHRyKEpJVENvbXBpbGVyOjpF
cXVhbCwgYXJnMUdQUiwgYXJnMkdQUiwgaW52ZXJ0ID8gbm90VGFrZW4gOiB0YWtlbik7CisgICAg
ICAgIGJyYW5jaDY0KEpJVENvbXBpbGVyOjpFcXVhbCwgYXJnMUdQUiwgYXJnMkdQUiwgaW52ZXJ0
ID8gbm90VGFrZW4gOiB0YWtlbik7CiAgICAgICAgIAogICAgICAgICBsZWZ0RG91YmxlLmxpbmso
Jm1faml0KTsKICAgICAgICAgcmlnaHREb3VibGUubGluaygmbV9qaXQpOwpAQCAtOTM0LDkgKzkz
NCw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlTm9uUGUKICAgICAgICAg
Ly8gc2VlIGlmIHdlIGdldCBsdWNreTogaWYgdGhlIGFyZ3VtZW50cyBhcmUgY2VsbHMgYW5kIHRo
ZXkgcmVmZXJlbmNlIHRoZSBzYW1lCiAgICAgICAgIC8vIGNlbGwsIHRoZW4gdGhleSBtdXN0IGJl
IHN0cmljdGx5IGVxdWFsLgogICAgICAgICAvLyBGSVhNRTogdGhpcyBzaG91bGQgZmx1c2ggcmVn
aXN0ZXJzIGluc3RlYWQgb2Ygc2lsZW50IHNwaWxsL2ZpbGwuCi0gICAgICAgIEpJVENvbXBpbGVy
OjpKdW1wIG5vdEVxdWFsQ2FzZSA9IG1faml0LmJyYW5jaFB0cihKSVRDb21waWxlcjo6Tm90RXF1
YWwsIGFyZzFHUFIsIGFyZzJHUFIpOworICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBub3RFcXVh
bENhc2UgPSBtX2ppdC5icmFuY2g2NChKSVRDb21waWxlcjo6Tm90RXF1YWwsIGFyZzFHUFIsIGFy
ZzJHUFIpOwogICAgICAgICAKLSAgICAgICAgbV9qaXQubW92ZShKSVRDb21waWxlcjo6VHJ1c3Rl
ZEltbVB0cihKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKCFpbnZlcnQpKSksIHJlc3VsdEdQUik7
CisgICAgICAgIG1faml0Lm1vdmUoSklUQ29tcGlsZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjpl
bmNvZGUoanNCb29sZWFuKCFpbnZlcnQpKSksIHJlc3VsdEdQUik7CiAgICAgICAgIAogICAgICAg
ICBKSVRDb21waWxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOwogCkBAIC05NDYsMzMgKzk0
NiwzMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZU5vblBlCiAgICAgICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxQ2VsbCwgcmVzdWx0R1BSLCBh
cmcxR1BSLCBhcmcyR1BSKTsKICAgICAgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhyZXN1bHRH
UFIpOwogICAgICAgICAKLSAgICAgICAgbV9qaXQuYW5kUHRyKEpJVENvbXBpbGVyOjpUcnVzdGVk
SW1tMzIoMSksIHJlc3VsdEdQUik7CisgICAgICAgIG1faml0LmFuZDY0KEpJVENvbXBpbGVyOjpU
cnVzdGVkSW1tMzIoMSksIHJlc3VsdEdQUik7CiAgICAgICAgIG1faml0Lm9yMzIoSklUQ29tcGls
ZXI6OlRydXN0ZWRJbW0zMihWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKICAgICAgICAgCiAgICAg
ICAgIGRvbmUubGluaygmbV9qaXQpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIG1faml0Lm9yUHRy
KGFyZzFHUFIsIGFyZzJHUFIsIHJlc3VsdEdQUik7CisgICAgICAgIG1faml0Lm9yNjQoYXJnMUdQ
UiwgYXJnMkdQUiwgcmVzdWx0R1BSKTsKICAgICAgICAgCiAgICAgICAgIEpJVENvbXBpbGVyOjpK
dW1wTGlzdCBzbG93UGF0aENhc2VzOwogICAgICAgICAKLSAgICAgICAgSklUQ29tcGlsZXI6Okp1
bXAgdHdvQ2VsbHNDYXNlID0gbV9qaXQuYnJhbmNoVGVzdFB0cihKSVRDb21waWxlcjo6WmVybywg
cmVzdWx0R1BSLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpOworICAgICAgICBKSVRDb21waWxl
cjo6SnVtcCB0d29DZWxsc0Nhc2UgPSBtX2ppdC5icmFuY2hUZXN0NjQoSklUQ29tcGlsZXI6Olpl
cm8sIHJlc3VsdEdQUiwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsKICAgICAgICAgCi0gICAg
ICAgIEpJVENvbXBpbGVyOjpKdW1wIGxlZnRPSyA9IG1faml0LmJyYW5jaFB0cihKSVRDb21waWxl
cjo6QWJvdmVPckVxdWFsLCBhcmcxR1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIp
OwotICAgICAgICBzbG93UGF0aENhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hUZXN0UHRyKEpJVENv
bXBpbGVyOjpOb25aZXJvLCBhcmcxR1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIp
KTsKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgbGVmdE9LID0gbV9qaXQuYnJhbmNoNjQoSklU
Q29tcGlsZXI6OkFib3ZlT3JFcXVhbCwgYXJnMUdQUiwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJl
Z2lzdGVyKTsKKyAgICAgICAgc2xvd1BhdGhDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdDY0
KEpJVENvbXBpbGVyOjpOb25aZXJvLCBhcmcxR1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVn
aXN0ZXIpKTsKICAgICAgICAgbGVmdE9LLmxpbmsoJm1faml0KTsKLSAgICAgICAgSklUQ29tcGls
ZXI6Okp1bXAgcmlnaHRPSyA9IG1faml0LmJyYW5jaFB0cihKSVRDb21waWxlcjo6QWJvdmVPckVx
dWFsLCBhcmcyR1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOwotICAgICAgICBz
bG93UGF0aENhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hUZXN0UHRyKEpJVENvbXBpbGVyOjpOb25a
ZXJvLCBhcmcyR1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsKKyAgICAgICAg
SklUQ29tcGlsZXI6Okp1bXAgcmlnaHRPSyA9IG1faml0LmJyYW5jaDY0KEpJVENvbXBpbGVyOjpB
Ym92ZU9yRXF1YWwsIGFyZzJHUFIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7Cisg
ICAgICAgIHNsb3dQYXRoQ2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaFRlc3Q2NChKSVRDb21waWxl
cjo6Tm9uWmVybywgYXJnMkdQUiwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSk7CiAg
ICAgICAgIHJpZ2h0T0subGluaygmbV9qaXQpOwogICAgICAgICAKLSAgICAgICAgbV9qaXQuY29t
cGFyZVB0cihpbnZlcnQgPyBKSVRDb21waWxlcjo6Tm90RXF1YWwgOiBKSVRDb21waWxlcjo6RXF1
YWwsIGFyZzFHUFIsIGFyZzJHUFIsIHJlc3VsdEdQUik7CisgICAgICAgIG1faml0LmNvbXBhcmU2
NChpbnZlcnQgPyBKSVRDb21waWxlcjo6Tm90RXF1YWwgOiBKSVRDb21waWxlcjo6RXF1YWwsIGFy
ZzFHUFIsIGFyZzJHUFIsIHJlc3VsdEdQUik7CiAgICAgICAgIG1faml0Lm9yMzIoSklUQ29tcGls
ZXI6OlRydXN0ZWRJbW0zMihWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKICAgICAgICAgCiAgICAg
ICAgIEpJVENvbXBpbGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7CiAgICAgICAgIAogICAg
ICAgICB0d29DZWxsc0Nhc2UubGluaygmbV9qaXQpOwotICAgICAgICBzbG93UGF0aENhc2VzLmFw
cGVuZChtX2ppdC5icmFuY2hQdHIoSklUQ29tcGlsZXI6Ok5vdEVxdWFsLCBhcmcxR1BSLCBhcmcy
R1BSKSk7CisgICAgICAgIHNsb3dQYXRoQ2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaDY0KEpJVENv
bXBpbGVyOjpOb3RFcXVhbCwgYXJnMUdQUiwgYXJnMkdQUikpOwogICAgICAgICAKLSAgICAgICAg
bV9qaXQubW92ZShKSVRDb21waWxlcjo6VHJ1c3RlZEltbVB0cihKU1ZhbHVlOjplbmNvZGUoanNC
b29sZWFuKCFpbnZlcnQpKSksIHJlc3VsdEdQUik7CisgICAgICAgIG1faml0Lm1vdmUoSklUQ29t
cGlsZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKCFpbnZlcnQpKSks
IHJlc3VsdEdQUik7CiAgICAgICAgIAogICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKICAg
ICAgICAgICAgIGFkb3B0UHRyKApAQCAtMTAwNyw4ICsxMDA3LDggQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6ZW1pdENhbGwoTm9kZSYgbm9kZQogICAgIGludCBudW1QYXNzZWRBcmdzID0gbm9kZS5u
dW1DaGlsZHJlbigpIC0gMTsKICAgICAKICAgICBtX2ppdC5zdG9yZTMyKE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tMzIobnVtUGFzc2VkQXJncyArIGR1bW15VGhpc0FyZ3VtZW50KSwgY2FsbEZy
YW1lUGF5bG9hZFNsb3QoSlNTdGFjazo6QXJndW1lbnRDb3VudCkpOwotICAgIG1faml0LnN0b3Jl
UHRyKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBjYWxsRnJhbWVTbG90KEpTU3RhY2s6OkNh
bGxlckZyYW1lKSk7Ci0gICAgbV9qaXQuc3RvcmVQdHIoY2FsbGVlR1BSLCBjYWxsRnJhbWVTbG90
KEpTU3RhY2s6OkNhbGxlZSkpOworICAgIG1faml0LnN0b3JlNjQoR1BSSW5mbzo6Y2FsbEZyYW1l
UmVnaXN0ZXIsIGNhbGxGcmFtZVNsb3QoSlNTdGFjazo6Q2FsbGVyRnJhbWUpKTsKKyAgICBtX2pp
dC5zdG9yZTY0KGNhbGxlZUdQUiwgY2FsbEZyYW1lU2xvdChKU1N0YWNrOjpDYWxsZWUpKTsKICAg
ICAKICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bVBhc3NlZEFyZ3M7IGkrKykgewogICAgICAg
ICBFZGdlIGFyZ0VkZ2UgPSBtX2ppdC5ncmFwaCgpLm1fdmFyQXJnQ2hpbGRyZW5bbm9kZS5maXJz
dENoaWxkKCkgKyAxICsgaV07CkBAIC0xMDE2LDcgKzEwMTYsNyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjplbWl0Q2FsbChOb2RlJiBub2RlCiAgICAgICAgIEdQUlJlZyBhcmdHUFIgPSBhcmcuZ3By
KCk7CiAgICAgICAgIHVzZShhcmdFZGdlKTsKICAgICAgICAgCi0gICAgICAgIG1faml0LnN0b3Jl
UHRyKGFyZ0dQUiwgYXJndW1lbnRTbG90KGkgKyBkdW1teVRoaXNBcmd1bWVudCkpOworICAgICAg
ICBtX2ppdC5zdG9yZTY0KGFyZ0dQUiwgYXJndW1lbnRTbG90KGkgKyBkdW1teVRoaXNBcmd1bWVu
dCkpOwogICAgIH0KIAogICAgIGZsdXNoUmVnaXN0ZXJzKCk7CkBAIC0xMDI1LDE2ICsxMDI1LDE3
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUmIG5vZGUKICAgICBHUFJSZWcg
cmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwogCiAgICAgSklUQ29tcGlsZXI6OkRhdGFMYWJlbFB0
ciB0YXJnZXRUb0NoZWNrOwotICAgIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoOworICAgIEpJ
VENvbXBpbGVyOjpKdW1wTGlzdCBzbG93UGF0aDsKIAogICAgIENhbGxCZWdpblRva2VuIHRva2Vu
OwogICAgIG1faml0LmJlZ2luQ2FsbChub2RlLmNvZGVPcmlnaW4sIHRva2VuKTsKICAgICAKICAg
ICBtX2ppdC5hZGRQdHIoVHJ1c3RlZEltbTMyKG1faml0LmNvZGVCbG9jaygpLT5tX251bUNhbGxl
ZVJlZ2lzdGVycyAqIHNpemVvZihSZWdpc3RlcikpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rl
cik7CiAgICAgCi0gICAgc2xvd1BhdGggPSBtX2ppdC5icmFuY2hQdHJXaXRoUGF0Y2goTWFjcm9B
c3NlbWJsZXI6Ok5vdEVxdWFsLCBjYWxsZWVHUFIsIHRhcmdldFRvQ2hlY2ssIE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tUHRyKEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpKSk7CisgICAgc2xv
d1BhdGguYXBwZW5kKG1faml0LmJyYW5jaFB0cldpdGhQYXRjaChNYWNyb0Fzc2VtYmxlcjo6Tm90
RXF1YWwsIGNhbGxlZUdQUiwgdGFyZ2V0VG9DaGVjaywgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW1QdHIoMCkpKTsKKwogICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
Y2FsbGVlR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoSlNGdW5jdGlvbiwgbV9zY29wZSkpLCByZXN1bHRH
UFIpOwotICAgIG1faml0LnN0b3JlUHRyKHJlc3VsdEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6
ZW9mKFJlZ2lzdGVyKSkgKiBKU1N0YWNrOjpTY29wZUNoYWluKSk7CisgICAgbV9qaXQuc3RvcmU2
NChyZXN1bHRHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJl
Z2lzdGVyLCBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihSZWdpc3RlcikpICogSlNTdGFj
azo6U2NvcGVDaGFpbikpOwogCiAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gYXQobV9jb21w
aWxlSW5kZXgpLmNvZGVPcmlnaW47CiAgICAgSklUQ29tcGlsZXI6OkNhbGwgZmFzdENhbGwgPSBt
X2ppdC5uZWFyQ2FsbCgpOwpAQCAtMTEwNCwxNCArMTEwNSwxNCBAQCBHUFJSZWcgU3BlY3VsYXRp
dmVKSVQ6OmZpbGxTcGVjdWxhdGVJbnRJCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAo
c3BpbGxGb3JtYXQgPT0gRGF0YUZvcm1hdEludGVnZXIpIHsKICAgICAgICAgICAgICAgICBtX2pp
dC5sb2FkMzIoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSwgZ3ByKTsK
LSAgICAgICAgICAgICAgICBtX2ppdC5vclB0cihHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0
ZXIsIGdwcik7CisgICAgICAgICAgICAgICAgbV9qaXQub3I2NChHUFJJbmZvOjp0YWdUeXBlTnVt
YmVyUmVnaXN0ZXIsIGdwcik7CiAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICBt
X2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIGdw
cik7CisgICAgICAgICAgICAgICAgbV9qaXQubG9hZDY0KEpJVENvbXBpbGVyOjphZGRyZXNzRm9y
KHZpcnR1YWxSZWdpc3RlciksIGdwcik7CiAgICAgICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKCpt
X3N0cmVhbSwgZ3ByLCBEYXRhRm9ybWF0SlNJbnRlZ2VyKTsKICAgICAgICAgICAgIHJldHVybkZv
cm1hdCA9IERhdGFGb3JtYXRKU0ludGVnZXI7CiAgICAgICAgICAgICByZXR1cm4gZ3ByOwogICAg
ICAgICB9Ci0gICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Iodmly
dHVhbFJlZ2lzdGVyKSwgZ3ByKTsKKyAgICAgICAgbV9qaXQubG9hZDY0KEpJVENvbXBpbGVyOjph
ZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIGdwcik7CiAKICAgICAgICAgLy8gRmlsbCBhcyBK
U1ZhbHVlLCBhbmQgZmFsbCB0aHJvdWdoLgogICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKCptX3N0
cmVhbSwgZ3ByLCBEYXRhRm9ybWF0SlNJbnRlZ2VyKTsKQEAgLTExMjMsNyArMTEyNCw3IEBAIEdQ
UlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUludEkKICAgICAgICAgR1BSUmVnIGdw
ciA9IGluZm8uZ3ByKCk7CiAgICAgICAgIG1fZ3Bycy5sb2NrKGdwcik7CiAgICAgICAgIGlmICgh
aXNJbnQzMlNwZWN1bGF0aW9uKHR5cGUpKQotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhC
YWRUeXBlLCBKU1ZhbHVlUmVncyhncHIpLCBub2RlSW5kZXgsIG1faml0LmJyYW5jaFB0cihNYWNy
b0Fzc2VtYmxlcjo6QmVsb3csIGdwciwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSk7
CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKGdwciks
IG5vZGVJbmRleCwgbV9qaXQuYnJhbmNoNjQoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBncHIsIEdQ
UkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlcikpOwogICAgICAgICBpbmZvLmZpbGxKU1ZhbHVl
KCptX3N0cmVhbSwgZ3ByLCBEYXRhRm9ybWF0SlNJbnRlZ2VyKTsKICAgICAgICAgLy8gSWYgIXN0
cmljdCB3ZSdyZSBkb25lLCByZXR1cm4uCiAgICAgICAgIGlmICghc3RyaWN0KSB7CkBAIC0xMjIz
LDggKzEyMjQsOCBAQCBGUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVEb3ViCiAK
ICAgICAgICAgICAgIGlmIChpc0ludDMyQ29uc3RhbnQobm9kZUluZGV4KSkgewogICAgICAgICAg
ICAgICAgIEZQUlJlZyBmcHIgPSBmcHJBbGxvY2F0ZSgpOwotICAgICAgICAgICAgICAgIG1faml0
Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OkltbVB0cihyZWludGVycHJldF9jYXN0PHZvaWQqPihyZWlu
dGVycHJldERvdWJsZVRvSW50cHRyKHN0YXRpY19jYXN0PGRvdWJsZT4odmFsdWVPZkludDMyQ29u
c3RhbnQobm9kZUluZGV4KSkpKSksIGdwcik7Ci0gICAgICAgICAgICAgICAgbV9qaXQubW92ZVB0
clRvRG91YmxlKGdwciwgZnByKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNz
ZW1ibGVyOjpJbW02NChyZWludGVycHJldERvdWJsZVRvSW50NjQoc3RhdGljX2Nhc3Q8ZG91Ymxl
Pih2YWx1ZU9mSW50MzJDb25zdGFudChub2RlSW5kZXgpKSkpLCBncHIpOworICAgICAgICAgICAg
ICAgIG1faml0Lm1vdmU2NFRvRG91YmxlKGdwciwgZnByKTsKICAgICAgICAgICAgICAgICB1bmxv
Y2soZ3ByKTsKIAogICAgICAgICAgICAgICAgIG1fZnBycy5yZXRhaW4oZnByLCB2aXJ0dWFsUmVn
aXN0ZXIsIFNwaWxsT3JkZXJEb3VibGUpOwpAQCAtMTIzMyw4ICsxMjM0LDggQEAgRlBSUmVnIFNw
ZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlRG91YgogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgaWYgKGlzTnVtYmVyQ29uc3RhbnQobm9kZUluZGV4KSkgewogICAgICAgICAgICAgICAgIEZQ
UlJlZyBmcHIgPSBmcHJBbGxvY2F0ZSgpOwotICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoTWFj
cm9Bc3NlbWJsZXI6OkltbVB0cihyZWludGVycHJldF9jYXN0PHZvaWQqPihyZWludGVycHJldERv
dWJsZVRvSW50cHRyKHZhbHVlT2ZOdW1iZXJDb25zdGFudChub2RlSW5kZXgpKSkpLCBncHIpOwot
ICAgICAgICAgICAgICAgIG1faml0Lm1vdmVQdHJUb0RvdWJsZShncHIsIGZwcik7CisgICAgICAg
ICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6SW1tNjQocmVpbnRlcnByZXREb3Vi
bGVUb0ludDY0KHZhbHVlT2ZOdW1iZXJDb25zdGFudChub2RlSW5kZXgpKSksIGdwcik7CisgICAg
ICAgICAgICAgICAgbV9qaXQubW92ZTY0VG9Eb3VibGUoZ3ByLCBmcHIpOwogICAgICAgICAgICAg
ICAgIHVubG9jayhncHIpOwogCiAgICAgICAgICAgICAgICAgbV9mcHJzLnJldGFpbihmcHIsIHZp
cnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckRvdWJsZSk7CkBAIC0xMjcwLDcgKzEyNzEsNyBAQCBG
UFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVEb3ViCiAKICAgICAgICAgICAgIEFT
U0VSVChzcGlsbEZvcm1hdCAmIERhdGFGb3JtYXRKUyk7CiAgICAgICAgICAgICBtX2dwcnMucmV0
YWluKGdwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyU3BpbGxlZCk7Ci0gICAgICAgICAg
ICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3Rlciks
IGdwcik7CisgICAgICAgICAgICBtX2ppdC5sb2FkNjQoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Io
dmlydHVhbFJlZ2lzdGVyKSwgZ3ByKTsKICAgICAgICAgICAgIGluZm8uZmlsbEpTVmFsdWUoKm1f
c3RyZWFtLCBncHIsIHNwaWxsRm9ybWF0KTsKICAgICAgICAgICAgIHVubG9jayhncHIpOwogICAg
ICAgICAgICAgYnJlYWs7CkBAIC0xMjk1LDEwICsxMjk2LDEwIEBAIEZQUlJlZyBTcGVjdWxhdGl2
ZUpJVDo6ZmlsbFNwZWN1bGF0ZURvdWIKICAgICAgICAgRlBSUmVnIGZwciA9IGZwckFsbG9jYXRl
KCk7CiAgICAgICAgIEdQUlJlZyB0ZW1wR3ByID0gYWxsb2NhdGUoKTsKIAotICAgICAgICBKSVRD
b21waWxlcjo6SnVtcCBpc0ludGVnZXIgPSBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6
OkFib3ZlT3JFcXVhbCwganNWYWx1ZUdwciwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVy
KTsKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNJbnRlZ2VyID0gbV9qaXQuYnJhbmNoNjQo
TWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwganNWYWx1ZUdwciwgR1BSSW5mbzo6dGFnVHlw
ZU51bWJlclJlZ2lzdGVyKTsKIAogICAgICAgICBpZiAoIWlzTnVtYmVyU3BlY3VsYXRpb24odHlw
ZSkpCi0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKGpz
VmFsdWVHcHIpLCBub2RlSW5kZXgsIG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6
Olplcm8sIGpzVmFsdWVHcHIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlcikpOworICAg
ICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhqc1ZhbHVlR3By
KSwgbm9kZUluZGV4LCBtX2ppdC5icmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIGpz
VmFsdWVHcHIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlcikpOwogCiAgICAgICAgIC8v
IEZpcnN0LCBpZiB3ZSBnZXQgaGVyZSB3ZSBoYXZlIGEgZG91YmxlIGVuY29kZWQgYXMgYSBKU1Zh
bHVlCiAgICAgICAgIG1faml0Lm1vdmUoanNWYWx1ZUdwciwgdGVtcEdwcik7CkBAIC0xMzg0LDcg
KzEzODUsNyBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVDZWxsCiAgICAg
ICAgICAgICBKU1ZhbHVlIGpzVmFsdWUgPSB2YWx1ZU9mSlNDb25zdGFudChub2RlSW5kZXgpOwog
ICAgICAgICAgICAgaWYgKGpzVmFsdWUuaXNDZWxsKCkpIHsKICAgICAgICAgICAgICAgICBtX2dw
cnMucmV0YWluKGdwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyQ29uc3RhbnQpOwotICAg
ICAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoanNW
YWx1ZS5hc0NlbGwoKSksIGdwcik7CisgICAgICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc1ZhbHVlKSksIGdwcik7CiAg
ICAgICAgICAgICAgICAgaW5mby5maWxsSlNWYWx1ZSgqbV9zdHJlYW0sIGdwciwgRGF0YUZvcm1h
dEpTQ2VsbCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGdwcjsKICAgICAgICAgICAgIH0KQEAg
LTEzOTMsMTEgKzEzOTQsMTEgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRl
Q2VsbAogICAgICAgICB9CiAgICAgICAgIEFTU0VSVChpbmZvLnNwaWxsRm9ybWF0KCkgJiBEYXRh
Rm9ybWF0SlMpOwogICAgICAgICBtX2dwcnMucmV0YWluKGdwciwgdmlydHVhbFJlZ2lzdGVyLCBT
cGlsbE9yZGVyU3BpbGxlZCk7Ci0gICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OmFk
ZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSwgZ3ByKTsKKyAgICAgICAgbV9qaXQubG9hZDY0KEpJ
VENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIGdwcik7CiAKICAgICAgICAg
aW5mby5maWxsSlNWYWx1ZSgqbV9zdHJlYW0sIGdwciwgRGF0YUZvcm1hdEpTKTsKICAgICAgICAg
aWYgKCFpc0NlbGxTcGVjdWxhdGlvbih0eXBlKSkKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hl
Y2tXaXRoQ29uZGl0aW9uYWxEaXJlY3Rpb24oQmFkVHlwZSwgSlNWYWx1ZVJlZ3MoZ3ByKSwgbm9k
ZUluZGV4LCBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBncHIs
IEdQUkluZm86OnRhZ01hc2tSZWdpc3RlciksIGlzRm9yd2FyZFNwZWN1bGF0aW9uKTsKKyAgICAg
ICAgICAgIHNwZWN1bGF0aW9uQ2hlY2tXaXRoQ29uZGl0aW9uYWxEaXJlY3Rpb24oQmFkVHlwZSwg
SlNWYWx1ZVJlZ3MoZ3ByKSwgbm9kZUluZGV4LCBtX2ppdC5icmFuY2hUZXN0NjQoTWFjcm9Bc3Nl
bWJsZXI6Ok5vblplcm8sIGdwciwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKSwgaXNGb3J3YXJk
U3BlY3VsYXRpb24pOwogICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKCptX3N0cmVhbSwgZ3ByLCBE
YXRhRm9ybWF0SlNDZWxsKTsKICAgICAgICAgcmV0dXJuIGdwcjsKICAgICB9CkBAIC0xNDEzLDcg
KzE0MTQsNyBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVDZWxsCiAgICAg
ICAgIEdQUlJlZyBncHIgPSBpbmZvLmdwcigpOwogICAgICAgICBtX2dwcnMubG9jayhncHIpOwog
ICAgICAgICBpZiAoIWlzQ2VsbFNwZWN1bGF0aW9uKHR5cGUpKQotICAgICAgICAgICAgc3BlY3Vs
YXRpb25DaGVja1dpdGhDb25kaXRpb25hbERpcmVjdGlvbihCYWRUeXBlLCBKU1ZhbHVlUmVncyhn
cHIpLCBub2RlSW5kZXgsIG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vblpl
cm8sIGdwciwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKSwgaXNGb3J3YXJkU3BlY3VsYXRpb24p
OworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVja1dpdGhDb25kaXRpb25hbERpcmVjdGlvbihC
YWRUeXBlLCBKU1ZhbHVlUmVncyhncHIpLCBub2RlSW5kZXgsIG1faml0LmJyYW5jaFRlc3Q2NChN
YWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgZ3ByLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpLCBp
c0ZvcndhcmRTcGVjdWxhdGlvbik7CiAgICAgICAgIGluZm8uZmlsbEpTVmFsdWUoKm1fc3RyZWFt
LCBncHIsIERhdGFGb3JtYXRKU0NlbGwpOwogICAgICAgICByZXR1cm4gZ3ByOwogICAgIH0KQEAg
LTE0NjAsNyArMTQ2MSw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUJv
b2wKICAgICAgICAgICAgIEpTVmFsdWUganNWYWx1ZSA9IHZhbHVlT2ZKU0NvbnN0YW50KG5vZGVJ
bmRleCk7CiAgICAgICAgICAgICBpZiAoanNWYWx1ZS5pc0Jvb2xlYW4oKSkgewogICAgICAgICAg
ICAgICAgIG1fZ3Bycy5yZXRhaW4oZ3ByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJDb25z
dGFudCk7Ci0gICAgICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbVB0cihKU1ZhbHVlOjplbmNvZGUoanNWYWx1ZSkpLCBncHIpOworICAgICAgICAgICAgICAg
IG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUo
anNWYWx1ZSkpLCBncHIpOwogICAgICAgICAgICAgICAgIGluZm8uZmlsbEpTVmFsdWUoKm1fc3Ry
ZWFtLCBncHIsIERhdGFGb3JtYXRKU0Jvb2xlYW4pOwogICAgICAgICAgICAgICAgIHJldHVybiBn
cHI7CiAgICAgICAgICAgICB9CkBAIC0xNDY5LDEzICsxNDcwLDEzIEBAIEdQUlJlZyBTcGVjdWxh
dGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUJvb2wKICAgICAgICAgfQogICAgICAgICBBU1NFUlQoaW5m
by5zcGlsbEZvcm1hdCgpICYgRGF0YUZvcm1hdEpTKTsKICAgICAgICAgbV9ncHJzLnJldGFpbihn
cHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlclNwaWxsZWQpOwotICAgICAgICBtX2ppdC5s
b2FkUHRyKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIGdwcik7Cisg
ICAgICAgIG1faml0LmxvYWQ2NChKSVRDb21waWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0
ZXIpLCBncHIpOwogCiAgICAgICAgIGluZm8uZmlsbEpTVmFsdWUoKm1fc3RyZWFtLCBncHIsIERh
dGFGb3JtYXRKUyk7CiAgICAgICAgIGlmICghaXNCb29sZWFuU3BlY3VsYXRpb24odHlwZSkpIHsK
LSAgICAgICAgICAgIG1faml0LnhvclB0cihUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJf
dD4oVmFsdWVGYWxzZSkpLCBncHIpOwotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRU
eXBlLCBKU1ZhbHVlUmVncyhncHIpLCBub2RlSW5kZXgsIG1faml0LmJyYW5jaFRlc3RQdHIoTWFj
cm9Bc3NlbWJsZXI6Ok5vblplcm8sIGdwciwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMy
X3Q+KH4xKSkpLCBTcGVjdWxhdGlvblJlY292ZXJ5KEJvb2xlYW5TcGVjdWxhdGlvbkNoZWNrLCBn
cHIsIEludmFsaWRHUFJSZWcpKTsKLSAgICAgICAgICAgIG1faml0LnhvclB0cihUcnVzdGVkSW1t
MzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oVmFsdWVGYWxzZSkpLCBncHIpOworICAgICAgICAgICAg
bV9qaXQueG9yNjQoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KFZhbHVlRmFsc2Up
KSwgZ3ByKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJl
Z3MoZ3ByKSwgbm9kZUluZGV4LCBtX2ppdC5icmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Ok5v
blplcm8sIGdwciwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSkpLCBTcGVj
dWxhdGlvblJlY292ZXJ5KEJvb2xlYW5TcGVjdWxhdGlvbkNoZWNrLCBncHIsIEludmFsaWRHUFJS
ZWcpKTsKKyAgICAgICAgICAgIG1faml0LnhvcjY0KFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxp
bnQzMl90PihWYWx1ZUZhbHNlKSksIGdwcik7CiAgICAgICAgIH0KICAgICAgICAgaW5mby5maWxs
SlNWYWx1ZSgqbV9zdHJlYW0sIGdwciwgRGF0YUZvcm1hdEpTQm9vbGVhbik7CiAgICAgICAgIHJl
dHVybiBncHI7CkBAIC0xNDkyLDkgKzE0OTMsOSBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZp
bGxTcGVjdWxhdGVCb29sCiAgICAgICAgIEdQUlJlZyBncHIgPSBpbmZvLmdwcigpOwogICAgICAg
ICBtX2dwcnMubG9jayhncHIpOwogICAgICAgICBpZiAoIWlzQm9vbGVhblNwZWN1bGF0aW9uKHR5
cGUpKSB7Ci0gICAgICAgICAgICBtX2ppdC54b3JQdHIoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0
PGludDMyX3Q+KFZhbHVlRmFsc2UpKSwgZ3ByKTsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hl
Y2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3MoZ3ByKSwgbm9kZUluZGV4LCBtX2ppdC5icmFuY2hUZXN0
UHRyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBncHIsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2Fz
dDxpbnQzMl90Pih+MSkpKSwgU3BlY3VsYXRpb25SZWNvdmVyeShCb29sZWFuU3BlY3VsYXRpb25D
aGVjaywgZ3ByLCBJbnZhbGlkR1BSUmVnKSk7Ci0gICAgICAgICAgICBtX2ppdC54b3JQdHIoVHJ1
c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KFZhbHVlRmFsc2UpKSwgZ3ByKTsKKyAgICAg
ICAgICAgIG1faml0LnhvcjY0KFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90PihWYWx1
ZUZhbHNlKSksIGdwcik7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpT
VmFsdWVSZWdzKGdwciksIG5vZGVJbmRleCwgbV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1i
bGVyOjpOb25aZXJvLCBncHIsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkp
KSwgU3BlY3VsYXRpb25SZWNvdmVyeShCb29sZWFuU3BlY3VsYXRpb25DaGVjaywgZ3ByLCBJbnZh
bGlkR1BSUmVnKSk7CisgICAgICAgICAgICBtX2ppdC54b3I2NChUcnVzdGVkSW1tMzIoc3RhdGlj
X2Nhc3Q8aW50MzJfdD4oVmFsdWVGYWxzZSkpLCBncHIpOwogICAgICAgICB9CiAgICAgICAgIGlu
Zm8uZmlsbEpTVmFsdWUoKm1fc3RyZWFtLCBncHIsIERhdGFGb3JtYXRKU0Jvb2xlYW4pOwogICAg
ICAgICByZXR1cm4gZ3ByOwpAQCAtMTUyMSw5ICsxNTIyLDkgQEAgR1BSUmVnIFNwZWN1bGF0aXZl
SklUOjpmaWxsU3BlY3VsYXRlQm9vbAogCiBKSVRDb21waWxlcjo6SnVtcCBTcGVjdWxhdGl2ZUpJ
VDo6Y29udmVydFRvRG91YmxlKEdQUlJlZyB2YWx1ZSwgRlBSUmVnIHJlc3VsdCwgR1BSUmVnIHRt
cCkKIHsKLSAgICBKSVRDb21waWxlcjo6SnVtcCBpc0ludGVnZXIgPSBtX2ppdC5icmFuY2hQdHIo
TWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgdmFsdWUsIEdQUkluZm86OnRhZ1R5cGVOdW1i
ZXJSZWdpc3Rlcik7CisgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNJbnRlZ2VyID0gbV9qaXQuYnJh
bmNoNjQoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgdmFsdWUsIEdQUkluZm86OnRhZ1R5
cGVOdW1iZXJSZWdpc3Rlcik7CiAgICAgCi0gICAgSklUQ29tcGlsZXI6Okp1bXAgbm90TnVtYmVy
ID0gbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVybywgdmFsdWUsIEdQUklu
Zm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7CisgICAgSklUQ29tcGlsZXI6Okp1bXAgbm90TnVt
YmVyID0gbV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpaZXJvLCB2YWx1ZSwgR1BS
SW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKICAgICAKICAgICBtX2ppdC5tb3ZlKHZhbHVl
LCB0bXApOwogICAgIHVuYm94RG91YmxlKHRtcCwgcmVzdWx0KTsKQEAgLTE1OTAsNyArMTU5MSw3
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RFcXVhbGkKICAgICAgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQp
KSk7CiAgICAgfQogICAgIAotICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGZhbHNlQ2FzZSA9IG1f
aml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIG9wMUdQUiwgb3AyR1BSKTsK
KyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBmYWxzZUNhc2UgPSBtX2ppdC5icmFuY2g2NChNYWNy
b0Fzc2VtYmxlcjo6Tm90RXF1YWwsIG9wMUdQUiwgb3AyR1BSKTsKICAgICBtX2ppdC5tb3ZlKFRy
dXN0ZWRJbW0zMihWYWx1ZVRydWUpLCByZXN1bHRHUFIpOwogICAgIE1hY3JvQXNzZW1ibGVyOjpK
dW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7CiAgICAgZmFsc2VDYXNlLmxpbmsoJm1faml0KTsKQEAg
LTE2MzgsNyArMTYzOSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RUb09i
amUKICAgICAvLyBJdCBzZWVtcyB0aGF0IG1vc3Qgb2YgdGhlIHRpbWUgd2hlbiBwcm9ncmFtcyBk
byBhID09IGIgd2hlcmUgYiBtYXkgYmUgZWl0aGVyIG51bGwvdW5kZWZpbmVkCiAgICAgLy8gb3Ig
YW4gb2JqZWN0LCBiIGlzIHVzdWFsbHkgYW4gb2JqZWN0LiBCYWxhbmNlIHRoZSBicmFuY2hlcyB0
byBtYWtlIHRoYXQgY2FzZSBmYXN0LgogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHJpZ2h0Tm90
Q2VsbCA9Ci0gICAgICAgIG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vblpl
cm8sIG9wMkdQUiwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsKKyAgICAgICAgbV9qaXQuYnJh
bmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBvcDJHUFIsIEdQUkluZm86OnRhZ01h
c2tSZWdpc3Rlcik7CiAgICAgCiAgICAgLy8gV2Uga25vdyB0aGF0IHdpdGhpbiB0aGlzIGJyYW5j
aCwgcmlnaHRDaGlsZCBtdXN0IGJlIGEgY2VsbC4gCiAgICAgaWYgKG1faml0LmdyYXBoKCkuZ2xv
YmFsT2JqZWN0Rm9yKGxlZnROb2RlLmNvZGVPcmlnaW4pLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVk
V2F0Y2hwb2ludCgpLT5pc1N0aWxsVmFsaWQoKSkgeyAKQEAgLTE2NjgsNyArMTY2OSw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RUb09iamUKICAgICAvLyBBdCB0aGlzIHBv
aW50IHdlIGtub3cgdGhhdCB3ZSBjYW4gcGVyZm9ybSBhIHN0cmFpZ2h0LWZvcndhcmQgZXF1YWxp
dHkgY29tcGFyaXNvbiBvbiBwb2ludGVyCiAgICAgLy8gdmFsdWVzIGJlY2F1c2UgYm90aCBsZWZ0
IGFuZCByaWdodCBhcmUgcG9pbnRlcnMgdG8gb2JqZWN0cyB0aGF0IGhhdmUgbm8gc3BlY2lhbCBl
cXVhbGl0eQogICAgIC8vIHByb3RvY29scy4KLSAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBmYWxz
ZUNhc2UgPSBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBvcDFHUFIs
IG9wMkdQUik7CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZmFsc2VDYXNlID0gbV9qaXQuYnJh
bmNoNjQoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBvcDFHUFIsIG9wMkdQUik7CiAgICAgTWFj
cm9Bc3NlbWJsZXI6Okp1bXAgdHJ1ZUNhc2UgPSBtX2ppdC5qdW1wKCk7CiAgICAgCiAgICAgcmln
aHROb3RDZWxsLmxpbmsoJm1faml0KTsKQEAgLTE2NzcsMTMgKzE2NzgsMTMgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdFRvT2JqZQogICAgIC8vIHByb3ZlIHRoYXQgaXQgaXMg
ZWl0aGVyIG51bGwgb3IgdW5kZWZpbmVkLgogICAgIGlmICghaXNPdGhlck9yRW1wdHlTcGVjdWxh
dGlvbihtX3N0YXRlLmZvck5vZGUocmlnaHRDaGlsZCkubV90eXBlICYgflNwZWNDZWxsKSkgewog
ICAgICAgICBtX2ppdC5tb3ZlKG9wMkdQUiwgcmVzdWx0R1BSKTsKLSAgICAgICAgbV9qaXQuYW5k
UHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoflRhZ0JpdFVuZGVmaW5lZCksIHJlc3Vs
dEdQUik7CisgICAgICAgIG1faml0LmFuZDY0KE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIo
flRhZ0JpdFVuZGVmaW5lZCksIHJlc3VsdEdQUik7CiAgICAgICAgIAogICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKAogICAgICAgICAgICAgQmFkVHlwZSwgSlNWYWx1ZVJlZ3Mob3AyR1BSKSwgcmln
aHRDaGlsZC5pbmRleCgpLAotICAgICAgICAgICAgbV9qaXQuYnJhbmNoUHRyKAorICAgICAgICAg
ICAgbV9qaXQuYnJhbmNoNjQoCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVx
dWFsLCByZXN1bHRHUFIsCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW1QdHIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oVmFsdWVOdWxsKSkpKTsKKyAgICAgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KFZhbHVlTnVsbCkpKTsKICAgICB9CiAg
ICAgCiAgICAgZmFsc2VDYXNlLmxpbmsoJm1faml0KTsKQEAgLTE3MzcsNyArMTczOCw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9sZU9iamUKICAgICAvLyBJdCBzZWVtcyB0
aGF0IG1vc3Qgb2YgdGhlIHRpbWUgd2hlbiBwcm9ncmFtcyBkbyBhID09IGIgd2hlcmUgYiBtYXkg
YmUgZWl0aGVyIG51bGwvdW5kZWZpbmVkCiAgICAgLy8gb3IgYW4gb2JqZWN0LCBiIGlzIHVzdWFs
bHkgYW4gb2JqZWN0LiBCYWxhbmNlIHRoZSBicmFuY2hlcyB0byBtYWtlIHRoYXQgY2FzZSBmYXN0
LgogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHJpZ2h0Tm90Q2VsbCA9Ci0gICAgICAgIG1faml0
LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIG9wMkdQUiwgR1BSSW5mbzo6
dGFnTWFza1JlZ2lzdGVyKTsKKyAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1i
bGVyOjpOb25aZXJvLCBvcDJHUFIsIEdQUkluZm86OnRhZ01hc2tSZWdpc3Rlcik7CiAgICAgCiAg
ICAgLy8gV2Uga25vdyB0aGF0IHdpdGhpbiB0aGlzIGJyYW5jaCwgcmlnaHRDaGlsZCBtdXN0IGJl
IGEgY2VsbC4gCiAgICAgaWYgKG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKGJyYW5jaE5v
ZGUuY29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCktPmlzU3Rp
bGxWYWxpZCgpKSB7CkBAIC0xNzY3LDcgKzE3NjgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlUGVlcEhvbGVPYmplCiAgICAgLy8gQXQgdGhpcyBwb2ludCB3ZSBrbm93IHRoYXQgd2Ug
Y2FuIHBlcmZvcm0gYSBzdHJhaWdodC1mb3J3YXJkIGVxdWFsaXR5IGNvbXBhcmlzb24gb24gcG9p
bnRlcgogICAgIC8vIHZhbHVlcyBiZWNhdXNlIGJvdGggbGVmdCBhbmQgcmlnaHQgYXJlIHBvaW50
ZXJzIHRvIG9iamVjdHMgdGhhdCBoYXZlIG5vIHNwZWNpYWwgZXF1YWxpdHkKICAgICAvLyBwcm90
b2NvbHMuCi0gICAgYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgb3AxR1BSLCBvcDJH
UFIsIHRha2VuKTsKKyAgICBicmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIG9wMUdQUiwg
b3AyR1BSLCB0YWtlbik7CiAgICAgCiAgICAgLy8gV2Uga25vdyB0aGF0IHdpdGhpbiB0aGlzIGJy
YW5jaCwgcmlnaHRDaGlsZCBtdXN0IG5vdCBiZSBhIGNlbGwuIENoZWNrIGlmIHRoYXQgaXMgZW5v
dWdoIHRvCiAgICAgLy8gcHJvdmUgdGhhdCBpdCBpcyBlaXRoZXIgbnVsbCBvciB1bmRlZmluZWQu
CkBAIC0xNzc4LDEzICsxNzc5LDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVw
SG9sZU9iamUKICAgICAgICAgCiAgICAgICAgIHJpZ2h0Tm90Q2VsbC5saW5rKCZtX2ppdCk7CiAg
ICAgICAgIG1faml0Lm1vdmUob3AyR1BSLCByZXN1bHRHUFIpOwotICAgICAgICBtX2ppdC5hbmRQ
dHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMih+VGFnQml0VW5kZWZpbmVkKSwgcmVzdWx0
R1BSKTsKKyAgICAgICAgbV9qaXQuYW5kNjQoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMih+
VGFnQml0VW5kZWZpbmVkKSwgcmVzdWx0R1BSKTsKICAgICAgICAgCiAgICAgICAgIHNwZWN1bGF0
aW9uQ2hlY2soCiAgICAgICAgICAgICBCYWRUeXBlLCBKU1ZhbHVlUmVncyhvcDJHUFIpLCByaWdo
dENoaWxkLmluZGV4KCksCi0gICAgICAgICAgICBtX2ppdC5icmFuY2hQdHIoCisgICAgICAgICAg
ICBtX2ppdC5icmFuY2g2NCgKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1
YWwsIHJlc3VsdEdQUiwKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bVB0cihyZWludGVycHJldF9jYXN0PHZvaWQqPihWYWx1ZU51bGwpKSkpOworICAgICAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoVmFsdWVOdWxsKSkpOwogICAgIH0KICAg
ICAKICAgICBqdW1wKG5vdFRha2VuKTsKQEAgLTE4MTEsNyArMTgxMiw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVEb3VibGVDb21wYXIKICAgICAKICAgICBtX2ppdC5tb3ZlKFRydXN0
ZWRJbW0zMihWYWx1ZVRydWUpLCByZXN1bHQuZ3ByKCkpOwogICAgIE1hY3JvQXNzZW1ibGVyOjpK
dW1wIHRydWVDYXNlID0gbV9qaXQuYnJhbmNoRG91YmxlKGNvbmRpdGlvbiwgb3AxLmZwcigpLCBv
cDIuZnByKCkpOwotICAgIG1faml0LnhvclB0cihUcnVzdGVkSW1tMzIodHJ1ZSksIHJlc3VsdC5n
cHIoKSk7CisgICAgbV9qaXQueG9yNjQoVHJ1c3RlZEltbTMyKHRydWUpLCByZXN1bHQuZ3ByKCkp
OwogICAgIHRydWVDYXNlLmxpbmsoJm1faml0KTsKICAgICAKICAgICBqc1ZhbHVlUmVzdWx0KHJl
c3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgsIERhdGFGb3JtYXRKU0Jvb2xlYW4pOwpAQCAtMTg0
Myw3ICsxODQ0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU5vblN0cmluZ0NlbAog
ICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOwogICAgIEdQUlJlZyByZXN1bHRHUFIg
PSByZXN1bHQuZ3ByKCk7CiAgICAgCi0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm90Q2VsbCA9
IG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIHZhbHVlR1BSLCBH
UFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpOworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5vdENl
bGwgPSBtX2ppdC5icmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIHZhbHVlR1BS
LCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpOwogICAgIGlmIChtX2ppdC5ncmFwaCgpLmdsb2Jh
bE9iamVjdEZvcihtX2ppdC5ncmFwaCgpW25vZGVVc2UuaW5kZXgoKV0uY29kZU9yaWdpbiktPm1h
c3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCktPmlzU3RpbGxWYWxpZCgpKSB7CiAgICAg
ICAgIG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG1faml0LmdyYXBoKClbbm9kZVVzZS5p
bmRleCgpXS5jb2RlT3JpZ2luKS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnQoKS0+
YWRkKHNwZWN1bGF0aW9uV2F0Y2hwb2ludCgpKTsKIApAQCAtMTg4OSwxMiArMTg5MCwxMiBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTm9uU3RyaW5nQ2VsCiAKICAgICBpZiAobmVlZFNw
ZWN1bGF0aW9uQ2hlY2spIHsKICAgICAgICAgbV9qaXQubW92ZSh2YWx1ZUdQUiwgcmVzdWx0R1BS
KTsKLSAgICAgICAgbV9qaXQuYW5kUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoflRh
Z0JpdFVuZGVmaW5lZCksIHJlc3VsdEdQUik7CisgICAgICAgIG1faml0LmFuZDY0KE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tMzIoflRhZ0JpdFVuZGVmaW5lZCksIHJlc3VsdEdQUik7CiAgICAg
ICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBub2Rl
VXNlLCAKLSAgICAgICAgICAgIG1faml0LmJyYW5jaFB0cigKKyAgICAgICAgICAgIG1faml0LmJy
YW5jaDY0KAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgCiAgICAg
ICAgICAgICAgICAgcmVzdWx0R1BSLCAKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbVB0cihyZWludGVycHJldF9jYXN0PHZvaWQqPihWYWx1ZU51bGwpKSkpOworICAg
ICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoVmFsdWVOdWxsKSkpOwog
ICAgIH0KICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMihWYWx1ZVRydWUpLCByZXN1bHRHUFIp
OwogICAgIApAQCAtMTkzNyw3ICsxOTM4LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZUxvZ2ljYWxOb3QoTgogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCB2YWx1
ZSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIG1faml0Lm1vdmUodmFsdWUuZ3ByKCksIHJl
c3VsdC5ncHIoKSk7Ci0gICAgICAgICAgICBtX2ppdC54b3JQdHIoVHJ1c3RlZEltbTMyKHRydWUp
LCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAgbV9qaXQueG9yNjQoVHJ1c3RlZEltbTMyKHRy
dWUpLCByZXN1bHQuZ3ByKCkpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBqc1ZhbHVlUmVz
dWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgsIERhdGFGb3JtYXRKU0Jvb2xlYW4pOwog
ICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTk0Nyw5ICsxOTQ4LDkgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZUxvZ2ljYWxOb3QoTgogICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRo
aXMpOyAvLyBGSVhNRTogV2UgY291bGQgcmV1c2UsIGJ1dCBvbiBzcGVjdWxhdGlvbiBmYWlsIHdv
dWxkIG5lZWQgcmVjb3ZlcnkgdG8gcmVzdG9yZSB0YWcgKGFraW4gdG8gYWRkKS4KICAgICAgICAg
CiAgICAgICAgIG1faml0Lm1vdmUodmFsdWUuZ3ByKCksIHJlc3VsdC5ncHIoKSk7Ci0gICAgICAg
IG1faml0LnhvclB0cihUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oVmFsdWVGYWxz
ZSkpLCByZXN1bHQuZ3ByKCkpOwotICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpT
VmFsdWVSZWdzKHZhbHVlLmdwcigpKSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoVGVzdFB0
cihKSVRDb21waWxlcjo6Tm9uWmVybywgcmVzdWx0LmdwcigpLCBUcnVzdGVkSW1tMzIoc3RhdGlj
X2Nhc3Q8aW50MzJfdD4ofjEpKSkpOwotICAgICAgICBtX2ppdC54b3JQdHIoVHJ1c3RlZEltbTMy
KHN0YXRpY19jYXN0PGludDMyX3Q+KFZhbHVlVHJ1ZSkpLCByZXN1bHQuZ3ByKCkpOworICAgICAg
ICBtX2ppdC54b3I2NChUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oVmFsdWVGYWxz
ZSkpLCByZXN1bHQuZ3ByKCkpOworICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpT
VmFsdWVSZWdzKHZhbHVlLmdwcigpKSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoVGVzdDY0
KEpJVENvbXBpbGVyOjpOb25aZXJvLCByZXN1bHQuZ3ByKCksIFRydXN0ZWRJbW0zMihzdGF0aWNf
Y2FzdDxpbnQzMl90Pih+MSkpKSk7CisgICAgICAgIG1faml0LnhvcjY0KFRydXN0ZWRJbW0zMihz
dGF0aWNfY2FzdDxpbnQzMl90PihWYWx1ZVRydWUpKSwgcmVzdWx0LmdwcigpKTsKICAgICAgICAg
CiAgICAgICAgIC8vIElmIHdlIGFkZCBhIERhdGFGb3JtYXRCb29sLCB3ZSBzaG91bGQgdXNlIGl0
IGhlcmUuCiAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRl
eCwgRGF0YUZvcm1hdEpTQm9vbGVhbik7CkBAIC0xOTY1LDEzICsxOTY2LDEzIEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVMb2dpY2FsTm90KE4KICAgICBhcmcxLnVzZSgpOwogICAgIAog
ICAgIG1faml0Lm1vdmUoYXJnMUdQUiwgcmVzdWx0R1BSKTsKLSAgICBtX2ppdC54b3JQdHIoVHJ1
c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KFZhbHVlRmFsc2UpKSwgcmVzdWx0R1BSKTsK
LSAgICBKSVRDb21waWxlcjo6SnVtcCBzbG93Q2FzZSA9IG1faml0LmJyYW5jaFRlc3RQdHIoSklU
Q29tcGlsZXI6Ok5vblplcm8sIHJlc3VsdEdQUiwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGlu
dDMyX3Q+KH4xKSkpOworICAgIG1faml0LnhvcjY0KFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxp
bnQzMl90PihWYWx1ZUZhbHNlKSksIHJlc3VsdEdQUik7CisgICAgSklUQ29tcGlsZXI6Okp1bXAg
c2xvd0Nhc2UgPSBtX2ppdC5icmFuY2hUZXN0NjQoSklUQ29tcGlsZXI6Ok5vblplcm8sIHJlc3Vs
dEdQUiwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSkpOwogICAgIAogICAg
IGFkZFNsb3dQYXRoR2VuZXJhdG9yKAogICAgICAgICBzbG93UGF0aENhbGwoc2xvd0Nhc2UsIHRo
aXMsIGRmZ0NvbnZlcnRKU1ZhbHVlVG9Cb29sZWFuLCByZXN1bHRHUFIsIGFyZzFHUFIpKTsKICAg
ICAKLSAgICBtX2ppdC54b3JQdHIoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KFZh
bHVlVHJ1ZSkpLCByZXN1bHRHUFIpOworICAgIG1faml0LnhvcjY0KFRydXN0ZWRJbW0zMihzdGF0
aWNfY2FzdDxpbnQzMl90PihWYWx1ZVRydWUpKSwgcmVzdWx0R1BSKTsKICAgICBqc1ZhbHVlUmVz
dWx0KHJlc3VsdEdQUiwgbV9jb21waWxlSW5kZXgsIERhdGFGb3JtYXRKU0Jvb2xlYW4sIFVzZUNo
aWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CiB9CiAKQEAgLTE5ODIsNyArMTk4Myw3IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmVtaXROb25TdHJpbmdDZWxsT3IKICAgICBHUFJSZWcgdmFsdWVHUFIg
PSB2YWx1ZS5ncHIoKTsKICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CiAg
ICAgCi0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm90Q2VsbCA9IG1faml0LmJyYW5jaFRlc3RQ
dHIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIHZhbHVlR1BSLCBHUFJJbmZvOjp0YWdNYXNrUmVn
aXN0ZXIpOworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5vdENlbGwgPSBtX2ppdC5icmFuY2hU
ZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIHZhbHVlR1BSLCBHUFJJbmZvOjp0YWdNYXNr
UmVnaXN0ZXIpOwogICAgIGlmIChtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihtX2ppdC5n
cmFwaCgpW25vZGVVc2UuaW5kZXgoKV0uY29kZU9yaWdpbiktPm1hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWRXYXRjaHBvaW50KCktPmlzU3RpbGxWYWxpZCgpKSB7CiAgICAgICAgIG1faml0LmdyYXBoKCku
Z2xvYmFsT2JqZWN0Rm9yKG1faml0LmdyYXBoKClbbm9kZVVzZS5pbmRleCgpXS5jb2RlT3JpZ2lu
KS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnQoKS0+YWRkKHNwZWN1bGF0aW9uV2F0
Y2hwb2ludCgpKTsKIApAQCAtMjAyMCw4ICsyMDIxLDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
ZW1pdE5vblN0cmluZ0NlbGxPcgogICAgIAogICAgIGlmIChuZWVkU3BlY3VsYXRpb25DaGVjaykg
ewogICAgICAgICBtX2ppdC5tb3ZlKHZhbHVlR1BSLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgbV9q
aXQuYW5kUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoflRhZ0JpdFVuZGVmaW5lZCks
IHNjcmF0Y2hHUFIpOwotICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVS
ZWdzKHZhbHVlR1BSKSwgbm9kZVVzZS5pbmRleCgpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3Nl
bWJsZXI6Ok5vdEVxdWFsLCBzY3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0
cihyZWludGVycHJldF9jYXN0PHZvaWQqPihWYWx1ZU51bGwpKSkpOworICAgICAgICBtX2ppdC5h
bmQ2NChNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKH5UYWdCaXRVbmRlZmluZWQpLCBzY3Jh
dGNoR1BSKTsKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyh2
YWx1ZUdQUiksIG5vZGVVc2UuaW5kZXgoKSwgbV9qaXQuYnJhbmNoNjQoTWFjcm9Bc3NlbWJsZXI6
Ok5vdEVxdWFsLCBzY3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KFZhbHVl
TnVsbCkpKTsKICAgICB9CiAgICAganVtcChub3RUYWtlbik7CiAgICAgCkBAIC0yMDc4LDggKzIw
NzksOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0QnJhbmNoKE5vZGUmIG5vCiAgICAgICAg
ICAgICAgICAgYnJhbmNoVGVzdDMyKGNvbmRpdGlvbiwgdmFsdWVHUFIsIFRydXN0ZWRJbW0zMih0
cnVlKSwgdGFrZW4pOwogICAgICAgICAgICAgICAgIGp1bXAobm90VGFrZW4pOwogICAgICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBicmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkVx
dWFsLCB2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoSlNWYWx1ZTo6ZW5j
b2RlKGpzQm9vbGVhbihmYWxzZSkpKSwgbm90VGFrZW4pOwotICAgICAgICAgICAgICAgIGJyYW5j
aFB0cihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbVB0cihKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRydWUpKSksIHRha2VuKTsKKyAg
ICAgICAgICAgICAgICBicmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHZhbHVlR1BSLCBN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oZmFs
c2UpKSksIG5vdFRha2VuKTsKKyAgICAgICAgICAgICAgICBicmFuY2g2NChNYWNyb0Fzc2VtYmxl
cjo6RXF1YWwsIHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6
OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkpKSwgdGFrZW4pOwogICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3ModmFsdWVH
UFIpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5qdW1wKCkpOwogICAgICAgICAgICAgfQpAQCAtMjA4
OCwxMiArMjA4OSwxMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0QnJhbmNoKE5vZGUmIG5v
CiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogICAgICAgICAgICAgR1BS
UmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKICAgICAgICAgCi0gICAgICAgICAgICBicmFu
Y2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCB2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKDApKSksIG5vdFRha2VuKTsKLSAg
ICAgICAgICAgIGJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCB2YWx1ZUdQ
UiwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCB0YWtlbik7CisgICAgICAgICAgICBi
cmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bWJlcigwKSkpLCBub3RUYWtlbik7Cisg
ICAgICAgICAgICBicmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCB2YWx1ZUdQ
UiwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCB0YWtlbik7CiAgICAgCiAgICAgICAg
ICAgICBpZiAoIXByZWRpY3RCb29sZWFuKSB7Ci0gICAgICAgICAgICAgICAgYnJhbmNoUHRyKE1h
Y3JvQXNzZW1ibGVyOjpFcXVhbCwgdmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
UHRyKEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oZmFsc2UpKSksIG5vdFRha2VuKTsKLSAgICAg
ICAgICAgICAgICBicmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCB2YWx1ZUdQUiwgTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0cnVl
KSkpLCB0YWtlbik7CisgICAgICAgICAgICAgICAgYnJhbmNoNjQoTWFjcm9Bc3NlbWJsZXI6OkVx
dWFsLCB2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNv
ZGUoanNCb29sZWFuKGZhbHNlKSkpLCBub3RUYWtlbik7CisgICAgICAgICAgICAgICAgYnJhbmNo
NjQoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCB2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRydWUpKSksIHRha2VuKTsKICAgICAg
ICAgICAgIH0KICAgICAKICAgICAgICAgICAgIHZhbHVlLnVzZSgpOwpAQCAtMjExNSw4ICsyMTE2
LDggQEAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IFNwZWN1bGF0aXZlSklUOgogICAgIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7CiAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2pp
dC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1Ymxp
Y0xlbmd0aCgpKSkpOwogICAgIAotICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkJh
c2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRy
KSwgcmVzdWx0UmVnKTsKLSAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaFRlc3RQdHIo
TWFjcm9Bc3NlbWJsZXI6Olplcm8sIHJlc3VsdFJlZykpOworICAgIG1faml0LmxvYWQ2NChNYWNy
b0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2Vt
Ymxlcjo6VGltZXNFaWdodCksIHJlc3VsdFJlZyk7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2pp
dC5icmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHJlc3VsdFJlZykpOwogICAgIAog
ICAgIHJldHVybiBzbG93Q2FzZXM7CiB9CkBAIC0yMTI1LDggKzIxMjYsOCBAQCBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcExpc3QgU3BlY3VsYXRpdmVKSVQ6CiB7CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1
bXAgb3V0T2ZCb3VuZHMgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVx
dWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQXJy
YXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpOwogICAgIAotICAgIG1faml0LmxvYWRQ
dHIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFj
cm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3Zl
Y3RvclswXSkpLCByZXN1bHRSZWcpOwotICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGhvbGUgPSBt
X2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCByZXN1bHRSZWcpOworICAg
IG1faml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3Bl
cnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEFycmF5
U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSwgcmVzdWx0UmVnKTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6
SnVtcCBob2xlID0gbV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpaZXJvLCByZXN1
bHRSZWcpOwogICAgIAogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7CiAg
ICAgc2xvd0Nhc2VzLmFwcGVuZChvdXRPZkJvdW5kcyk7CkBAIC0yMTU4LDcgKzIxNTksNyBAQCBN
YWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgU3BlY3VsYXRpdmVKSVQ6CiAgICAgICAgIGluQm91bmRz
LmxpbmsoJm1faml0KTsKICAgICB9CiAKLSAgICBtX2ppdC5zdG9yZVB0cih2YWx1ZVJlZywgTWFj
cm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3Nl
bWJsZXI6OlNjYWxlUHRyKSk7CisgICAgbV9qaXQuc3RvcmU2NCh2YWx1ZVJlZywgTWFjcm9Bc3Nl
bWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6
OlRpbWVzRWlnaHQpKTsKICAgICAKICAgICBpZiAoaXNJbkJvdW5kc0FjY2VzcyhhcnJheU1vZGUp
KQogICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0KCk7CkBAIC0yMTg0LDkg
KzIxODUsOSBAQCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgU3BlY3VsYXRpdmVKSVQ6CiAgICAg
ICAgIC8vIHByb2ZpbGluZy4KICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKICAgICAgICAgICAg
IFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsCi0gICAgICAgICAgICBtX2ppdC5i
cmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUlu
ZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIsIE9C
SkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSkpKTsKKyAgICAgICAgICAg
IG1faml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6WmVybywgTWFjcm9Bc3NlbWJsZXI6
OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVz
RWlnaHQsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSkpKTsKICAg
ICB9IGVsc2UgewotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub3RIb2xlVmFsdWUgPSBt
X2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBNYWNyb0Fzc2VtYmxl
cjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6U2Nh
bGVQdHIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSkpOworICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub3RIb2xlVmFsdWUgPSBtX2ppdC5icmFuY2hUZXN0
NjQoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3Rv
cmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBPQkpFQ1Rf
T0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpKTsKICAgICAgICAgaWYgKGlzU2xv
d1B1dEFjY2VzcyhhcnJheU1vZGUpKSB7CiAgICAgICAgICAgICAvLyBUaGlzIGlzIHNvcnQgb2Yg
c3RyYW5nZS4gSWYgd2Ugd2FudGVkIHRvIG9wdGltaXplIHRoaXMgY29kZSBwYXRoLCB3ZSB3b3Vs
ZCBpbnZlcnQKICAgICAgICAgICAgIC8vIHRoZSBhYm92ZSBicmFuY2guIEJ1dCBpdCdzIHNpbXBs
eSBub3Qgd29ydGggaXQgc2luY2UgdGhpcyBvbmx5IGhhcHBlbnMgaWYgd2UncmUKQEAgLTIyMDYs
NyArMjIwNyw3IEBAIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBTcGVjdWxhdGl2ZUpJVDoKICAg
ICB9CiAgICAgCiAgICAgLy8gU3RvcmUgdGhlIHZhbHVlIHRvIHRoZSBhcnJheS4KLSAgICBtX2pp
dC5zdG9yZVB0cih2YWx1ZVJlZywgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVn
LCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0Yo
QXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpKTsKKyAgICBtX2ppdC5zdG9yZTY0KHZhbHVlUmVn
LCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNy
b0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92
ZWN0b3JbMF0pKSk7CiAgICAgCiAgICAgcmV0dXJuIHNsb3dDYXNlczsKIH0KQEAgLTIyNzAsNyAr
MjI3MSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAg
ICAgfQogCiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0gICAgICAgIG1faml0
LmxvYWRQdHIoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Iobm9kZS5sb2NhbCgpKSwgcmVzdWx0Lmdw
cigpKTsKKyAgICAgICAgbV9qaXQubG9hZDY0KEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKG5vZGUu
bG9jYWwoKSksIHJlc3VsdC5ncHIoKSk7CiAKICAgICAgICAgLy8gTGlrZSBqc1ZhbHVlUmVzdWx0
LCBidXQgZG9uJ3QgdXNlQ2hpbGRyZW4gLSBvdXIgY2hpbGRyZW4gYXJlIHBoaSBub2RlcywKICAg
ICAgICAgLy8gYW5kIGRvbid0IHJlcHJlc2VudCB2YWx1ZXMgd2l0aGluIHRoaXMgZGF0YWZsb3cg
d2l0aCB2aXJ0dWFsIHJlZ2lzdGVycy4KQEAgLTIyOTQsNyArMjI5NSw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICBjYXNlIEdldExvY2FsVW5saW5rZWQ6
IHsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKICAgICAgICAgCi0gICAgICAg
IG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Iobm9kZS51bmxpbmtlZExvY2Fs
KCkpLCByZXN1bHQuZ3ByKCkpOworICAgICAgICBtX2ppdC5sb2FkNjQoSklUQ29tcGlsZXI6OmFk
ZHJlc3NGb3Iobm9kZS51bmxpbmtlZExvY2FsKCkpLCByZXN1bHQuZ3ByKCkpOwogICAgICAgICAK
ICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKICAg
ICAgICAgYnJlYWs7CkBAIC0yMzYwLDE0ICsyMzYxLDE0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIGlmIChpc0NlbGxTcGVjdWxhdGlvbihw
cmVkaWN0ZWRUeXBlKSkgewogICAgICAgICAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGNl
bGwodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgICAgICAgICAgR1BSUmVnIGNlbGxHUFIg
PSBjZWxsLmdwcigpOwotICAgICAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKGNlbGxHUFIsIEpJ
VENvbXBpbGVyOjphZGRyZXNzRm9yKG5vZGUubG9jYWwoKSkpOworICAgICAgICAgICAgICAgIG1f
aml0LnN0b3JlNjQoY2VsbEdQUiwgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Iobm9kZS5sb2NhbCgp
KSk7CiAgICAgICAgICAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOwogICAgICAgICAg
ICAgICAgIHJlY29yZFNldExvY2FsKG5vZGUubG9jYWwoKSwgVmFsdWVTb3VyY2UoQ2VsbEluSlNT
dGFjaykpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgaWYgKGlzQm9vbGVhblNwZWN1bGF0aW9uKHByZWRpY3RlZFR5cGUpKSB7CiAgICAgICAgICAg
ICAgICAgU3BlY3VsYXRlQm9vbGVhbk9wZXJhbmQgYm9vbGVhbih0aGlzLCBub2RlLmNoaWxkMSgp
KTsKLSAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZVB0cihib29sZWFuLmdwcigpLCBKSVRDb21w
aWxlcjo6YWRkcmVzc0Zvcihub2RlLmxvY2FsKCkpKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5z
dG9yZTY0KGJvb2xlYW4uZ3ByKCksIEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKG5vZGUubG9jYWwo
KSkpOwogICAgICAgICAgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKICAgICAgICAg
ICAgICAgICByZWNvcmRTZXRMb2NhbChub2RlLmxvY2FsKCksIFZhbHVlU291cmNlKEJvb2xlYW5J
bkpTU3RhY2spKTsKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTIzNzUsNyArMjM3Niw3IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgfQogICAg
ICAgICAKICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS5jaGlsZDEoKSk7
Ci0gICAgICAgIG1faml0LnN0b3JlUHRyKHZhbHVlLmdwcigpLCBKSVRDb21waWxlcjo6YWRkcmVz
c0Zvcihub2RlLmxvY2FsKCkpKTsKKyAgICAgICAgbV9qaXQuc3RvcmU2NCh2YWx1ZS5ncHIoKSwg
SklUQ29tcGlsZXI6OmFkZHJlc3NGb3Iobm9kZS5sb2NhbCgpKSk7CiAgICAgICAgIG5vUmVzdWx0
KG1fY29tcGlsZUluZGV4KTsKIAogICAgICAgICByZWNvcmRTZXRMb2NhbChub2RlLmxvY2FsKCks
IFZhbHVlU291cmNlKFZhbHVlSW5KU1N0YWNrKSk7CkBAIC0yNDc1LDEwICsyNDc2LDEwIEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICBjYXNlIENoZWNrTnVt
YmVyOiB7CiAgICAgICAgIGlmICghaXNOdW1iZXJTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUo
bm9kZS5jaGlsZDEoKSkubV90eXBlKSkgewogICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgb3Ax
KHRoaXMsIG5vZGUuY2hpbGQxKCkpOwotICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNJ
bnRlZ2VyID0gbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIG9w
MS5ncHIoKSwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKKyAgICAgICAgICAgIEpJ
VENvbXBpbGVyOjpKdW1wIGlzSW50ZWdlciA9IG1faml0LmJyYW5jaDY0KE1hY3JvQXNzZW1ibGVy
OjpBYm92ZU9yRXF1YWwsIG9wMS5ncHIoKSwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVy
KTsKICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCiAgICAgICAgICAgICAgICAgQmFkVHlw
ZSwgSlNWYWx1ZVJlZ3Mob3AxLmdwcigpKSwgbm9kZS5jaGlsZDEoKS5pbmRleCgpLAotICAgICAg
ICAgICAgICAgIG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIG9wMS5n
cHIoKSwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSk7CisgICAgICAgICAgICAgICAg
bV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBvcDEuZ3ByKCksIEdQUklu
Zm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlcikpOwogICAgICAgICAgICAgaXNJbnRlZ2VyLmxpbmso
Jm1faml0KTsKICAgICAgICAgfQogICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CkBA
IC0yNzEwLDggKzI3MTEsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5v
ZGUpCiAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVlUmVn
cygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWws
IHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBCdXR0ZXJm
bHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAg
IEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0gICAgICAgICAgICBtX2ppdC5sb2FkUHRyKE1h
Y3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNz
ZW1ibGVyOjpTY2FsZVB0ciksIHJlc3VsdC5ncHIoKSk7Ci0gICAgICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFRl
c3RQdHIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHJlc3VsdC5ncHIoKSkpOworICAgICAgICAgICAg
bV9qaXQubG9hZDY0KE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVy
dHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0KSwgcmVzdWx0LmdwcigpKTsKKyAgICAg
ICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3V0T2ZCb3VuZHMsIEpTVmFsdWVSZWdzKCksIE5vTm9k
ZSwgbV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpaZXJvLCByZXN1bHQuZ3ByKCkp
KTsKICAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRl
eCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMjc1NSw4ICsyNzU2LDggQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgc3Bl
Y3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5i
cmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhP
ZmZzZXQoKSkpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3Vs
dCh0aGlzKTsKLSAgICAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJ
bmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBP
QkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpLCByZXN1bHQuZ3ByKCkp
OwotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3Mo
KSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCByZXN1
bHQuZ3ByKCkpKTsKKyAgICAgICAgICAgIG1faml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6QmFz
ZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdo
dCwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSwgcmVzdWx0Lmdw
cigpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3V0T2ZCb3VuZHMsIEpTVmFsdWVS
ZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBy
ZXN1bHQuZ3ByKCkpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAganNWYWx1ZVJlc3VsdChy
ZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjkw
MCw3ICsyOTAxLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQog
ICAgICAgICAgICAgICAgIC8vIFN0b3JlIHRoZSB2YWx1ZSB0byB0aGUgYXJyYXkuCiAgICAgICAg
ICAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7CiAgICAgICAgICAg
ICAgICAgR1BSUmVnIHZhbHVlUmVnID0gdmFsdWUuZ3ByKCk7Ci0gICAgICAgICAgICAgICAgbV9q
aXQuc3RvcmVQdHIodmFsdWVSZWcsIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJl
ZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0cikpOworICAgICAgICAgICAg
ICAgIG1faml0LnN0b3JlNjQodmFsdWVSZWcsIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3Rv
cmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0KSk7CiAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOwog
ICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjk1MSw3ICsyOTUyLDcgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgICAgIC8vIFN0b3JlIHRo
ZSB2YWx1ZSB0byB0aGUgYXJyYXkuCiAgICAgICAgICAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVn
ID0gcHJvcGVydHkuZ3ByKCk7CiAgICAgICAgICAgICAgICAgR1BSUmVnIHZhbHVlUmVnID0gdmFs
dWUuZ3ByKCk7Ci0gICAgICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIodmFsdWVSZWcsIE1hY3Jv
QXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1i
bGVyOjpTY2FsZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0p
KSk7CisgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmU2NCh2YWx1ZVJlZywgTWFjcm9Bc3NlbWJs
ZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRp
bWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSkpOwog
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4
KTsKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTMwMTMsNyArMzAxNCw3IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBPQkpFQ1RfT0ZGU0VUT0YoQXJndW1lbnRzLCBtX3Jl
Z2lzdGVycykpLAogICAgICAgICAgICAgICAgIHNjcmF0Y2hSZWcpOwogICAgICAgICAgICAgCi0g
ICAgICAgICAgICBtX2ppdC5zdG9yZVB0cigKKyAgICAgICAgICAgIG1faml0LnN0b3JlNjQoCiAg
ICAgICAgICAgICAgICAgdmFsdWVSZWcsCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OkJhc2VJbmRleCgKICAgICAgICAgICAgICAgICAgICAgc2NyYXRjaFJlZywgc2NyYXRjaDJSZWcs
IE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LApAQCAtMzEzOSwxMCArMzE0MCwxMCBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIGNhc2UgQXJyYXk6
OkFycmF5V2l0aENvbnRpZ3VvdXNPdXRPZkJvdW5kczogewogICAgICAgICAgICAgbV9qaXQubG9h
ZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0
T2ZQdWJsaWNMZW5ndGgoKSksIHN0b3JhZ2VMZW5ndGhHUFIpOwogICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6Okp1bXAgc2xvd1BhdGggPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6
QWJvdmVPckVxdWFsLCBzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhz
dG9yYWdlR1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9mVmVjdG9yTGVuZ3RoKCkpKTsKLSAgICAgICAg
ICAgIG1faml0LnN0b3JlUHRyKHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0
b3JhZ2VHUFIsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0cikpOwor
ICAgICAgICAgICAgbV9qaXQuc3RvcmU2NCh2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJ
bmRleChzdG9yYWdlR1BSLCBzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNF
aWdodCkpOwogICAgICAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBzdG9yYWdl
TGVuZ3RoR1BSKTsKICAgICAgICAgICAgIG1faml0LnN0b3JlMzIoc3RvcmFnZUxlbmd0aEdQUiwg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1
YmxpY0xlbmd0aCgpKSk7Ci0gICAgICAgICAgICBtX2ppdC5vclB0cihHUFJJbmZvOjp0YWdUeXBl
TnVtYmVyUmVnaXN0ZXIsIHN0b3JhZ2VMZW5ndGhHUFIpOworICAgICAgICAgICAgbV9qaXQub3I2
NChHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHN0b3JhZ2VMZW5ndGhHUFIpOwogICAg
ICAgICAgICAgCiAgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKICAgICAgICAgICAg
ICAgICBzbG93UGF0aENhbGwoCkBAIC0zMTYyLDEyICszMTYzLDEyIEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgCiAgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6SnVtcCBzbG93UGF0aCA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpB
Ym92ZU9yRXF1YWwsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0
b3JhZ2VHUFIsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKTsKICAgICAgICAg
Ci0gICAgICAgICAgICBtX2ppdC5zdG9yZVB0cih2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkJh
c2VJbmRleChzdG9yYWdlR1BSLCBzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6U2Nh
bGVQdHIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSkpOworICAg
ICAgICAgICAgbV9qaXQuc3RvcmU2NCh2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRl
eChzdG9yYWdlR1BSLCBzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdo
dCwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSk7CiAgICAgICAg
IAogICAgICAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBzdG9yYWdlTGVuZ3Ro
R1BSKTsKICAgICAgICAgICAgIG1faml0LnN0b3JlMzIoc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQo
KSkpOwogICAgICAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBt
X251bVZhbHVlc0luVmVjdG9yKSkpOwotICAgICAgICAgICAgbV9qaXQub3JQdHIoR1BSSW5mbzo6
dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBzdG9yYWdlTGVuZ3RoR1BSKTsKKyAgICAgICAgICAgIG1f
aml0Lm9yNjQoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBzdG9yYWdlTGVuZ3RoR1BS
KTsKICAgICAgICAgCiAgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKICAgICAgICAg
ICAgICAgICBzbG93UGF0aENhbGwoCkBAIC0zMjA4LDE5ICszMjA5LDE5IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIG1faml0LnN1YjMyKFRy
dXN0ZWRJbW0zMigxKSwgc3RvcmFnZUxlbmd0aEdQUik7CiAgICAgICAgICAgICBtX2ppdC5zdG9y
ZTMyKAogICAgICAgICAgICAgICAgIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHN0b3JhZ2VHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpOwot
ICAgICAgICAgICAgbV9qaXQubG9hZFB0cigKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVy
OjpTY2FsZVB0ciksCisgICAgICAgICAgICBtX2ppdC5sb2FkNjQoCisgICAgICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzdG9yYWdlTGVuZ3RoR1BSLCBN
YWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCksCiAgICAgICAgICAgICAgICAgdmFsdWVHUFIpOwog
ICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgd291bGQgbm90IGhhdmUgdG8gYmUgaGVyZSBpZiBj
aGFuZ2luZyB0aGUgcHVibGljTGVuZ3RoIGFsc28gemVyb2VkIHRoZSB2YWx1ZXMgYmV0d2VlbiB0
aGUgb2xkCiAgICAgICAgICAgICAvLyBsZW5ndGggYW5kIHRoZSBuZXcgbGVuZ3RoLgotICAgICAg
ICAgICAgbV9qaXQuc3RvcmVQdHIoCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW1QdHIoMCksIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgc3Rv
cmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyKSk7Ci0gICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6SnVtcCBzbG93Q2FzZSA9IG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9B
c3NlbWJsZXI6Olplcm8sIHZhbHVlR1BSKTsKKyAgICAgICAgICAgIG1faml0LnN0b3JlNjQoCisg
ICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NCgoaW50NjRfdCkwKSwg
TWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzdG9yYWdlTGVuZ3RoR1BSLCBN
YWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCkpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXAgc2xvd0Nhc2UgPSBtX2ppdC5icmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Olplcm8s
IHZhbHVlR1BSKTsKIAogICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCiAgICAgICAg
ICAgICAgICAgc2xvd1BhdGhNb3ZlKAogICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWRDYXNl
LCB0aGlzLAotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0
cihKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSkpLCB2YWx1ZUdQUikpOworICAgICAgICAg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKSksIHZhbHVlR1BSKSk7CiAgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVy
YXRvcigKICAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwoCiAgICAgICAgICAgICAgICAgICAg
IHNsb3dDYXNlLCB0aGlzLCBvcGVyYXRpb25BcnJheVBvcEFuZFJlY292ZXJMZW5ndGgsIHZhbHVl
R1BSLCBiYXNlR1BSKSk7CkBAIC0zMjQxLDE4ICszMjQyLDE4IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wTGlz
dCBzbG93Q2FzZXM7CiAgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaDMy
KE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zm
c2V0KCkpKSk7CiAgICAgICAgIAotICAgICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2Vt
Ymxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1i
bGVyOjpTY2FsZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0p
KSwgdmFsdWVHUFIpOwotICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hU
ZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCB2YWx1ZUdQUikpOworICAgICAgICAgICAgbV9q
aXQubG9hZDY0KE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgc3RvcmFnZUxl
bmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihBcnJh
eVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSksIHZhbHVlR1BSKTsKKyAgICAgICAgICAgIHNsb3dDYXNl
cy5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpaZXJvLCB2YWx1ZUdQ
UikpOwogICAgICAgICAKICAgICAgICAgICAgIG1faml0LnN0b3JlMzIoc3RvcmFnZUxlbmd0aEdQ
UiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlTdG9yYWdlOjpsZW5n
dGhPZmZzZXQoKSkpOwogICAgICAgICAKLSAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKDApLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0
b3JhZ2VHUFIsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwgT0JK
RUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSk7CisgICAgICAgICAgICBt
X2ppdC5zdG9yZTY0KE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoKGludDY0X3QpMCksIE1h
Y3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgc3RvcmFnZUxlbmd0aEdQUiwgTWFj
cm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1f
dmVjdG9yWzBdKSkpOwogICAgICAgICAgICAgbV9qaXQuc3ViMzIoTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW0zMigxKSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgT0JKRUNU
X09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9udW1WYWx1ZXNJblZlY3RvcikpKTsKICAgICAgICAg
CiAgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKICAgICAgICAgICAgICAgICBzbG93
UGF0aE1vdmUoCiAgICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZENhc2UsIHRoaXMsCi0gICAg
ICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKSksIHZhbHVlR1BSKSk7CisgICAgICAgICAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
KSwgdmFsdWVHUFIpKTsKICAgICAgICAgCiAgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRv
cigKICAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwoCkBAIC0zMzQ1LDcgKzMzNDYsNyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICAKICAg
ICAgICAgICAgIG1faml0Lm1vdmUob3AxLmdwcigpLCByZXN1bHQuZ3ByKCkpOwogICAgICAgICAg
ICAgaWYgKG9wMS5mb3JtYXQoKSA9PSBEYXRhRm9ybWF0SW50ZWdlcikKLSAgICAgICAgICAgICAg
ICBtX2ppdC5vclB0cihHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHJlc3VsdC5ncHIo
KSk7CisgICAgICAgICAgICAgICAgbV9qaXQub3I2NChHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVn
aXN0ZXIsIHJlc3VsdC5ncHIoKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGpzVmFsdWVS
ZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgICAgICBicmVhazsK
QEAgLTMzNjQsNyArMzM2NSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYg
bm9kZSkKICAgICAgICAgaWYgKCEobV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlw
ZSAmIH4oU3BlY051bWJlciB8IFNwZWNCb29sZWFuKSkpCiAgICAgICAgICAgICBtX2ppdC5tb3Zl
KG9wMUdQUiwgcmVzdWx0R1BSKTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6SnVtcCBhbHJlYWR5UHJpbWl0aXZlID0gbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNy
b0Fzc2VtYmxlcjo6Tm9uWmVybywgb3AxR1BSLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpOwor
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgYWxyZWFkeVByaW1pdGl2ZSA9IG1faml0
LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgb3AxR1BSLCBHUFJJbmZvOjp0
YWdNYXNrUmVnaXN0ZXIpOwogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm90UHJp
bWl0aXZlID0gbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3Mob3AxR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zdHJpbmdTdHJ1
Y3R1cmUuZ2V0KCkpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgYWxyZWFkeVByaW1pdGl2
ZS5saW5rKCZtX2ppdCk7CkBAIC0zNDAxLDcgKzM0MDIsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG9wZXJhbmRJ
ZHggPSAwOyBvcGVyYW5kSWR4IDwgbm9kZS5udW1DaGlsZHJlbigpOyArK29wZXJhbmRJZHgpIHsK
ICAgICAgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBvcGVyYW5kKHRoaXMsIG1faml0LmdyYXBo
KCkubV92YXJBcmdDaGlsZHJlbltub2RlLmZpcnN0Q2hpbGQoKSArIG9wZXJhbmRJZHhdKTsKICAg
ICAgICAgICAgICAgICBHUFJSZWcgb3BHUFIgPSBvcGVyYW5kLmdwcigpOwotICAgICAgICAgICAg
ICAgIG1faml0LnN0b3JlUHRyKG9wR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdl
R1BSLCBzaXplb2YoSlNWYWx1ZSkgKiBvcGVyYW5kSWR4KSk7CisgICAgICAgICAgICAgICAgbV9q
aXQuc3RvcmU2NChvcEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgc2l6
ZW9mKEpTVmFsdWUpICogb3BlcmFuZElkeCkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAg
CiAgICAgICAgICAgICAvLyBZdWNrLCB3ZSBzaG91bGQgKnJlYWxseSogaGF2ZSBhIHdheSBvZiBh
bHNvIHJldHVybmluZyB0aGUgc3RvcmFnZUdQUi4gQnV0CkBAIC0zNDMyLDcgKzM0MzMsNyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICBHUFJS
ZWcgb3BHUFIgPSBvcGVyYW5kLmdwcigpOwogICAgICAgICAgICAgb3BlcmFuZC51c2UoKTsKICAg
ICAgICAgICAgIAotICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIob3BHUFIsIGJ1ZmZlciArIG9w
ZXJhbmRJZHgpOworICAgICAgICAgICAgbV9qaXQuc3RvcmU2NChvcEdQUiwgYnVmZmVyICsgb3Bl
cmFuZElkeCk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7
CkBAIC0zNTMyLDcgKzM1MzMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUm
IG5vZGUpCiAgICAgICAgICAgICBHUFJSZWcgb3BHUFIgPSBvcGVyYW5kLmdwcigpOwogICAgICAg
ICAgICAgb3BlcmFuZC51c2UoKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgbV9qaXQuc3Rv
cmVQdHIob3BHUFIsIGJ1ZmZlciArIG9wZXJhbmRJZHgpOworICAgICAgICAgICAgbV9qaXQuc3Rv
cmU2NChvcEdQUiwgYnVmZmVyICsgb3BlcmFuZElkeCk7CiAgICAgICAgIH0KICAgICAgICAgCiAg
ICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CkBAIC0zNTc3LDggKzM1NzgsOCBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICAKICAgICAgICAgICAg
IEpTVmFsdWUqIGRhdGEgPSBtX2ppdC5jb2RlQmxvY2soKS0+Y29uc3RhbnRCdWZmZXIobm9kZS5z
dGFydENvbnN0YW50KCkpOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGlu
ZGV4IDwgbm9kZS5udW1Db25zdGFudHMoKTsgKytpbmRleCkgewotICAgICAgICAgICAgICAgIG1f
aml0LnN0b3JlUHRyKAotICAgICAgICAgICAgICAgICAgICBJbW1QdHIoYml0d2lzZV9jYXN0PHZv
aWQqPihKU1ZhbHVlOjplbmNvZGUoZGF0YVtpbmRleF0pKSksCisgICAgICAgICAgICAgICAgbV9q
aXQuc3RvcmU2NCgKKyAgICAgICAgICAgICAgICAgICAgSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGRh
dGFbaW5kZXhdKSksCiAgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KHN0b3JhZ2VHUFIsIHNpemVvZihKU1ZhbHVlKSAqIGluZGV4KSk7CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAKQEAgLTM2MjIsOCArMzYyMyw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKCFpc090aGVy
U3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpIHsKICAg
ICAgICAgICAgICAgICBtX2ppdC5tb3ZlKHRoaXNWYWx1ZUdQUiwgc2NyYXRjaEdQUik7Ci0gICAg
ICAgICAgICAgICAgbV9qaXQuYW5kUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoflRh
Z0JpdFVuZGVmaW5lZCksIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9u
Q2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3ModGhpc1ZhbHVlR1BSKSwgbm9kZS5jaGlsZDEoKSwg
bV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgc2NyYXRjaEdQUiwgTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oVmFsdWVO
dWxsKSkpKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5hbmQ2NChNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbTMyKH5UYWdCaXRVbmRlZmluZWQpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAg
ICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKHRoaXNWYWx1ZUdQUiksIG5v
ZGUuY2hpbGQxKCksIG1faml0LmJyYW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgc2Ny
YXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChWYWx1ZU51bGwpKSk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsVGhpc09iamVjdEZvcihub2RlLmNvZGVP
cmlnaW4pKSwgc2NyYXRjaEdQUik7CkBAIC0zNzIzLDcgKzM3MjQsNyBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIGlmIChjaGVja1RvcExldmVsICYm
IHNraXAtLSkgewogICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgYWN0aXZhdGlvbk5vdENy
ZWF0ZWQ7CiAgICAgICAgICAgICBpZiAoY2hlY2tUb3BMZXZlbCkKLSAgICAgICAgICAgICAgICBh
Y3RpdmF0aW9uTm90Q3JlYXRlZCA9IG1faml0LmJyYW5jaFRlc3RQdHIoSklUQ29tcGlsZXI6Olpl
cm8sIEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4o
bV9qaXQuY29kZUJsb2NrKCktPmFjdGl2YXRpb25SZWdpc3RlcigpKSkpOworICAgICAgICAgICAg
ICAgIGFjdGl2YXRpb25Ob3RDcmVhdGVkID0gbV9qaXQuYnJhbmNoVGVzdDY0KEpJVENvbXBpbGVy
OjpaZXJvLCBKSVRDb21waWxlcjo6YWRkcmVzc0ZvcihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0
ZXI+KG1faml0LmNvZGVCbG9jaygpLT5hY3RpdmF0aW9uUmVnaXN0ZXIoKSkpKTsKICAgICAgICAg
ICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBKU1Njb3Bl
OjpvZmZzZXRPZk5leHQoKSksIHJlc3VsdEdQUik7CiAgICAgICAgICAgICBhY3RpdmF0aW9uTm90
Q3JlYXRlZC5saW5rKCZtX2ppdCk7CiAgICAgICAgIH0KQEAgLTM3NDksNyArMzc1MCw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgR1BSUmVnIHJl
Z2lzdGVyc0dQUiA9IHJlZ2lzdGVycy5ncHIoKTsKICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9
IHJlc3VsdC5ncHIoKTsKIAotICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRy
ZXNzKHJlZ2lzdGVyc0dQUiwgbm9kZS52YXJOdW1iZXIoKSAqIHNpemVvZihSZWdpc3RlcikpLCBy
ZXN1bHRHUFIpOworICAgICAgICBtX2ppdC5sb2FkNjQoSklUQ29tcGlsZXI6OkFkZHJlc3MocmVn
aXN0ZXJzR1BSLCBub2RlLnZhck51bWJlcigpICogc2l6ZW9mKFJlZ2lzdGVyKSksIHJlc3VsdEdQ
Uik7CiAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBtX2NvbXBpbGVJbmRleCk7CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTM3NjQsNyArMzc2NSw3IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFs
dWUuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaFJlZ2lzdGVyLmdw
cigpOwogCi0gICAgICAgIG1faml0LnN0b3JlUHRyKHZhbHVlR1BSLCBKSVRDb21waWxlcjo6QWRk
cmVzcyhyZWdpc3RlcnNHUFIsIG5vZGUudmFyTnVtYmVyKCkgKiBzaXplb2YoUmVnaXN0ZXIpKSk7
CisgICAgICAgIG1faml0LnN0b3JlNjQodmFsdWVHUFIsIEpJVENvbXBpbGVyOjpBZGRyZXNzKHJl
Z2lzdGVyc0dQUiwgbm9kZS52YXJOdW1iZXIoKSAqIHNpemVvZihSZWdpc3RlcikpKTsKICAgICAg
ICAgd3JpdGVCYXJyaWVyKHNjb3BlR1BSLCB2YWx1ZUdQUiwgbm9kZS5jaGlsZDMoKSwgV3JpdGVC
YXJyaWVyRm9yVmFyaWFibGVBY2Nlc3MsIHNjcmF0Y2hHUFIpOwogICAgICAgICBub1Jlc3VsdCht
X2NvbXBpbGVJbmRleCk7CiAgICAgICAgIGJyZWFrOwpAQCAtMzc5OCw3ICszNzk5LDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAKICAgICAgICAg
YmFzZS51c2UoKTsKICAgICAgICAgCi0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdENlbGwg
PSBtX2ppdC5icmFuY2hUZXN0UHRyKEpJVENvbXBpbGVyOjpOb25aZXJvLCBiYXNlR1BSLCBHUFJJ
bmZvOjp0YWdNYXNrUmVnaXN0ZXIpOworICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBub3RDZWxs
ID0gbV9qaXQuYnJhbmNoVGVzdDY0KEpJVENvbXBpbGVyOjpOb25aZXJvLCBiYXNlR1BSLCBHUFJJ
bmZvOjp0YWdNYXNrUmVnaXN0ZXIpOwogICAgICAgICAKICAgICAgICAgY2FjaGVkR2V0QnlJZChu
b2RlLmNvZGVPcmlnaW4sIGJhc2VHUFIsIHJlc3VsdEdQUiwgbm9kZS5pZGVudGlmaWVyTnVtYmVy
KCksIG5vdENlbGwpOwogICAgICAgICAKQEAgLTM4NDAsNyArMzg0MSw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgYmFzZS51c2UoKTsKICAgICAg
ICAgZmx1c2hSZWdpc3RlcnMoKTsKICAgICAgICAgCi0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1w
IG5vdENlbGwgPSBtX2ppdC5icmFuY2hUZXN0UHRyKEpJVENvbXBpbGVyOjpOb25aZXJvLCBiYXNl
R1BSLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpOworICAgICAgICBKSVRDb21waWxlcjo6SnVt
cCBub3RDZWxsID0gbV9qaXQuYnJhbmNoVGVzdDY0KEpJVENvbXBpbGVyOjpOb25aZXJvLCBiYXNl
R1BSLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpOwogICAgICAgICAKICAgICAgICAgY2FjaGVk
R2V0QnlJZChub2RlLmNvZGVPcmlnaW4sIGJhc2VHUFIsIHJlc3VsdEdQUiwgbm9kZS5pZGVudGlm
aWVyTnVtYmVyKCksIG5vdENlbGwsIERvbnRTcGlsbCk7CiAgICAgICAgIApAQCAtMzk4OCw3ICsz
OTg5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAg
ICAKICAgICAgICAgU3RvcmFnZUFjY2Vzc0RhdGEmIHN0b3JhZ2VBY2Nlc3NEYXRhID0gbV9qaXQu
Z3JhcGgoKS5tX3N0b3JhZ2VBY2Nlc3NEYXRhW25vZGUuc3RvcmFnZUFjY2Vzc0RhdGFJbmRleCgp
XTsKICAgICAgICAgCi0gICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3Mo
c3RvcmFnZUdQUiwgc3RvcmFnZUFjY2Vzc0RhdGEub2Zmc2V0ICogc2l6ZW9mKEVuY29kZWRKU1Zh
bHVlKSksIHJlc3VsdEdQUik7CisgICAgICAgIG1faml0LmxvYWQ2NChKSVRDb21waWxlcjo6QWRk
cmVzcyhzdG9yYWdlR1BSLCBzdG9yYWdlQWNjZXNzRGF0YS5vZmZzZXQgKiBzaXplb2YoRW5jb2Rl
ZEpTVmFsdWUpKSwgcmVzdWx0R1BSKTsKICAgICAgICAgCiAgICAgICAgIGpzVmFsdWVSZXN1bHQo
cmVzdWx0R1BSLCBtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgIGJyZWFrOwpAQCAtNDAxMCw3ICs0
MDExLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogCiAgICAg
ICAgIFN0b3JhZ2VBY2Nlc3NEYXRhJiBzdG9yYWdlQWNjZXNzRGF0YSA9IG1faml0LmdyYXBoKCku
bV9zdG9yYWdlQWNjZXNzRGF0YVtub2RlLnN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXgoKV07CiAgICAg
ICAgIAotICAgICAgICBtX2ppdC5zdG9yZVB0cih2YWx1ZUdQUiwgSklUQ29tcGlsZXI6OkFkZHJl
c3Moc3RvcmFnZUdQUiwgc3RvcmFnZUFjY2Vzc0RhdGEub2Zmc2V0ICogc2l6ZW9mKEVuY29kZWRK
U1ZhbHVlKSkpOworICAgICAgICBtX2ppdC5zdG9yZTY0KHZhbHVlR1BSLCBKSVRDb21waWxlcjo6
QWRkcmVzcyhzdG9yYWdlR1BSLCBzdG9yYWdlQWNjZXNzRGF0YS5vZmZzZXQgKiBzaXplb2YoRW5j
b2RlZEpTVmFsdWUpKSk7CiAgICAgICAgIAogICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRl
eCk7CiAgICAgICAgIGJyZWFrOwpAQCAtNDA1NSw3ICs0MDU2LDcgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgIGNhc2UgR2V0R2xvYmFsVmFyOiB7CiAgICAg
ICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAKLSAgICAgICAgbV9qaXQubG9hZFB0cihu
b2RlLnJlZ2lzdGVyUG9pbnRlcigpLCByZXN1bHQuZ3ByKCkpOworICAgICAgICBtX2ppdC5sb2Fk
NjQobm9kZS5yZWdpc3RlclBvaW50ZXIoKSwgcmVzdWx0LmdwcigpKTsKIAogICAgICAgICBqc1Zh
bHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOwogICAgICAgICBicmVhazsK
QEAgLTQwNzEsNyArNDA3Miw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYg
bm9kZSkKICAgICAgICAgICAgIHdyaXRlQmFycmllcihtX2ppdC5nbG9iYWxPYmplY3RGb3Iobm9k
ZS5jb2RlT3JpZ2luKSwgdmFsdWUuZ3ByKCksIG5vZGUuY2hpbGQxKCksIFdyaXRlQmFycmllckZv
clZhcmlhYmxlQWNjZXNzLCBzY3JhdGNoUmVnKTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAg
ICAgbV9qaXQuc3RvcmVQdHIodmFsdWUuZ3ByKCksIG5vZGUucmVnaXN0ZXJQb2ludGVyKCkpOwor
ICAgICAgICBtX2ppdC5zdG9yZTY0KHZhbHVlLmdwcigpLCBub2RlLnJlZ2lzdGVyUG9pbnRlcigp
KTsKIAogICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgIGJyZWFrOwpA
QCAtNDA5Nyw3ICs0MDk4LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBu
b2RlKQogICAgICAgICAgICAgd3JpdGVCYXJyaWVyKG1faml0Lmdsb2JhbE9iamVjdEZvcihub2Rl
LmNvZGVPcmlnaW4pLCB2YWx1ZS5ncHIoKSwgbm9kZS5jaGlsZDEoKSwgV3JpdGVCYXJyaWVyRm9y
VmFyaWFibGVBY2Nlc3MsIHNjcmF0Y2hSZWcpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAg
ICBtX2ppdC5zdG9yZVB0cih2YWx1ZS5ncHIoKSwgbm9kZS5yZWdpc3RlclBvaW50ZXIoKSk7Cisg
ICAgICAgIG1faml0LnN0b3JlNjQodmFsdWUuZ3ByKCksIG5vZGUucmVnaXN0ZXJQb2ludGVyKCkp
OwogCiAgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgYnJlYWs7CkBA
IC00MTExLDEwICs0MTEyLDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYg
bm9kZSkKICNpZiBERkdfRU5BQkxFKEpJVF9BU1NFUlQpCiAgICAgICAgIEdQUlRlbXBvcmFyeSBz
Y3JhdGNoKHRoaXMpOwogICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7
Ci0gICAgICAgIG1faml0LmxvYWRQdHIobm9kZS5yZWdpc3RlclBvaW50ZXIoKSwgc2NyYXRjaEdQ
Uik7Ci0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG9rID0gbV9qaXQuYnJhbmNoUHRyKAorICAg
ICAgICBtX2ppdC5sb2FkNjQobm9kZS5yZWdpc3RlclBvaW50ZXIoKSwgc2NyYXRjaEdQUik7Cisg
ICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG9rID0gbV9qaXQuYnJhbmNoNjQoCiAgICAgICAgICAg
ICBKSVRDb21waWxlcjo6RXF1YWwsIHNjcmF0Y2hHUFIsCi0gICAgICAgICAgICBUcnVzdGVkSW1t
UHRyKGJpdHdpc2VfY2FzdDx2b2lkKj4oSlNWYWx1ZTo6ZW5jb2RlKG5vZGUucmVnaXN0ZXJQb2lu
dGVyKCktPmdldCgpKSkpKTsKKyAgICAgICAgICAgIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNv
ZGUobm9kZS5yZWdpc3RlclBvaW50ZXIoKS0+Z2V0KCkpKSk7CiAgICAgICAgIG1faml0LmJyZWFr
cG9pbnQoKTsKICAgICAgICAgb2subGluaygmbV9qaXQpOwogI2VuZGlmCkBAIC00MTQ0LDkgKzQx
NDUsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAg
IEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICBHUFJU
ZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogICAgICAgICAKLSAgICAgICAgSklUQ29tcGlsZXI6Okp1
bXAgaXNDZWxsID0gbV9qaXQuYnJhbmNoVGVzdFB0cihKSVRDb21waWxlcjo6WmVybywgdmFsdWUu
Z3ByKCksIEdQUkluZm86OnRhZ01hc2tSZWdpc3Rlcik7CisgICAgICAgIEpJVENvbXBpbGVyOjpK
dW1wIGlzQ2VsbCA9IG1faml0LmJyYW5jaFRlc3Q2NChKSVRDb21waWxlcjo6WmVybywgdmFsdWUu
Z3ByKCksIEdQUkluZm86OnRhZ01hc2tSZWdpc3Rlcik7CiAgICAgICAgIAotICAgICAgICBtX2pp
dC5jb21wYXJlUHRyKEpJVENvbXBpbGVyOjpFcXVhbCwgdmFsdWUuZ3ByKCksIFRydXN0ZWRJbW0z
MihWYWx1ZVVuZGVmaW5lZCksIHJlc3VsdC5ncHIoKSk7CisgICAgICAgIG1faml0LmNvbXBhcmU2
NChKSVRDb21waWxlcjo6RXF1YWwsIHZhbHVlLmdwcigpLCBUcnVzdGVkSW1tMzIoVmFsdWVVbmRl
ZmluZWQpLCByZXN1bHQuZ3ByKCkpOwogICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBkb25lID0g
bV9qaXQuanVtcCgpOwogICAgICAgICAKICAgICAgICAgaXNDZWxsLmxpbmsoJm1faml0KTsKQEAg
LTQxODMsOCArNDE4NCw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9k
ZSkKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCB2YWx1ZSk7CiAgICAgICAgIAog
ICAgICAgICBtX2ppdC5tb3ZlKHZhbHVlLmdwcigpLCByZXN1bHQuZ3ByKCkpOwotICAgICAgICBt
X2ppdC54b3JQdHIoSklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMihWYWx1ZUZhbHNlKSwgcmVzdWx0
LmdwcigpKTsKLSAgICAgICAgbV9qaXQudGVzdFB0cihKSVRDb21waWxlcjo6WmVybywgcmVzdWx0
LmdwcigpLCBKSVRDb21waWxlcjo6VHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4x
KSksIHJlc3VsdC5ncHIoKSk7CisgICAgICAgIG1faml0LnhvcjY0KEpJVENvbXBpbGVyOjpUcnVz
dGVkSW1tMzIoVmFsdWVGYWxzZSksIHJlc3VsdC5ncHIoKSk7CisgICAgICAgIG1faml0LnRlc3Q2
NChKSVRDb21waWxlcjo6WmVybywgcmVzdWx0LmdwcigpLCBKSVRDb21waWxlcjo6VHJ1c3RlZElt
bTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSksIHJlc3VsdC5ncHIoKSk7CiAgICAgICAgIG1f
aml0Lm9yMzIoVHJ1c3RlZEltbTMyKFZhbHVlRmFsc2UpLCByZXN1bHQuZ3ByKCkpOwogICAgICAg
ICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgsIERhdGFGb3JtYXRK
U0Jvb2xlYW4pOwogICAgICAgICBicmVhazsKQEAgLTQxOTQsNyArNDE5NSw3IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgSlNWYWx1ZU9wZXJhbmQg
dmFsdWUodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQo
dGhpcywgdmFsdWUpOwogICAgICAgICAKLSAgICAgICAgbV9qaXQudGVzdFB0cihKSVRDb21waWxl
cjo6Tm9uWmVybywgdmFsdWUuZ3ByKCksIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlciwg
cmVzdWx0LmdwcigpKTsKKyAgICAgICAgbV9qaXQudGVzdDY0KEpJVENvbXBpbGVyOjpOb25aZXJv
LCB2YWx1ZS5ncHIoKSwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCByZXN1bHQuZ3By
KCkpOwogICAgICAgICBtX2ppdC5vcjMyKFRydXN0ZWRJbW0zMihWYWx1ZUZhbHNlKSwgcmVzdWx0
LmdwcigpKTsKICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUlu
ZGV4LCBEYXRhRm9ybWF0SlNCb29sZWFuKTsKICAgICAgICAgYnJlYWs7CkBAIC00MjA0LDcgKzQy
MDUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAg
IEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICBHUFJU
ZW1wb3JhcnkgcmVzdWx0KHRoaXMsIHZhbHVlKTsKICAgICAgICAgCi0gICAgICAgIEpJVENvbXBp
bGVyOjpKdW1wIGlzTm90Q2VsbCA9IG1faml0LmJyYW5jaFRlc3RQdHIoSklUQ29tcGlsZXI6Ok5v
blplcm8sIHZhbHVlLmdwcigpLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpOworICAgICAgICBK
SVRDb21waWxlcjo6SnVtcCBpc05vdENlbGwgPSBtX2ppdC5icmFuY2hUZXN0NjQoSklUQ29tcGls
ZXI6Ok5vblplcm8sIHZhbHVlLmdwcigpLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpOwogICAg
ICAgICAKICAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyh2YWx1ZS5n
cHIoKSwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHJlc3VsdC5ncHIoKSk7CiAgICAgICAg
IG1faml0LmNvbXBhcmU4KEpJVENvbXBpbGVyOjpFcXVhbCwgSklUQ29tcGlsZXI6OkFkZHJlc3Mo
cmVzdWx0LmdwcigpLCBTdHJ1Y3R1cmU6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZElt
bTMyKFN0cmluZ1R5cGUpLCByZXN1bHQuZ3ByKCkpOwpAQCAtNDMxNSw3ICs0MzE2LDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBtX2ppdC5uZWcz
MihyZXNvbHZlSW5mb0dQUik7CiAgICAgICAgIG1faml0LnNpZ25FeHRlbmQzMlRvUHRyKHJlc29s
dmVJbmZvR1BSLCByZXNvbHZlSW5mb0dQUik7CiAgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29t
cGlsZXI6OkFkZHJlc3MoZ2xvYmFsT2JqZWN0R1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0
KCkpLCByZXN1bHRHUFIpOwotICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpCYXNl
SW5kZXgocmVzdWx0R1BSLCByZXNvbHZlSW5mb0dQUiwgSklUQ29tcGlsZXI6OlNjYWxlUHRyLCAo
Zmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9m
KEpTVmFsdWUpKSksIHJlc3VsdEdQUik7CisgICAgICAgIG1faml0LmxvYWQ2NChKSVRDb21waWxl
cjo6QmFzZUluZGV4KHJlc3VsdEdQUiwgcmVzb2x2ZUluZm9HUFIsIEpJVENvbXBpbGVyOjpUaW1l
c0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHN0YXRpY19jYXN0PHB0cmRpZmZf
dD4oc2l6ZW9mKEpTVmFsdWUpKSksIHJlc3VsdEdQUik7CiAgICAgICAgIAogICAgICAgICBhZGRT
bG93UGF0aEdlbmVyYXRvcigKICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKQEAgLTQzMzgsNyAr
NDMzOSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAg
ICAgCiAgICAgICAgIG1faml0Lm1vdmUodmFsdWVHUFIsIHJlc3VsdEdQUik7CiAgICAgICAgIAot
ICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBub3RDcmVhdGVkID0gbV9qaXQuYnJhbmNoVGVzdFB0
cihKSVRDb21waWxlcjo6WmVybywgcmVzdWx0R1BSKTsKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1
bXAgbm90Q3JlYXRlZCA9IG1faml0LmJyYW5jaFRlc3Q2NChKSVRDb21waWxlcjo6WmVybywgcmVz
dWx0R1BSKTsKICAgICAgICAgCiAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAogICAgICAg
ICAgICAgc2xvd1BhdGhDYWxsKG5vdENyZWF0ZWQsIHRoaXMsIG9wZXJhdGlvbkNyZWF0ZUFjdGl2
YXRpb24sIHJlc3VsdEdQUikpOwpAQCAtNDM1Niw3ICs0MzU3LDcgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAKICAgICAgICAgbV9qaXQubW92ZSh2
YWx1ZUdQUiwgcmVzdWx0R1BSKTsKICAgICAgICAgCi0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1w
IG5vdENyZWF0ZWQgPSBtX2ppdC5icmFuY2hUZXN0UHRyKEpJVENvbXBpbGVyOjpaZXJvLCByZXN1
bHRHUFIpOworICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBub3RDcmVhdGVkID0gbV9qaXQuYnJh
bmNoVGVzdDY0KEpJVENvbXBpbGVyOjpaZXJvLCByZXN1bHRHUFIpOwogICAgICAgICAKICAgICAg
ICAgaWYgKG5vZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpIHsKICAgICAgICAgICAgIGFk
ZFNsb3dQYXRoR2VuZXJhdG9yKApAQCAtNDM4MCwxNyArNDM4MSwxNyBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIEdQUlJlZyBhY3RpdmF0aW9uVmFs
dWVHUFIgPSBhY3RpdmF0aW9uVmFsdWUuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BS
ID0gc2NyYXRjaC5ncHIoKTsKIAotICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBub3RDcmVhdGVk
ID0gbV9qaXQuYnJhbmNoVGVzdFB0cihKSVRDb21waWxlcjo6WmVybywgYWN0aXZhdGlvblZhbHVl
R1BSKTsKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgbm90Q3JlYXRlZCA9IG1faml0LmJyYW5j
aFRlc3Q2NChKSVRDb21waWxlcjo6WmVybywgYWN0aXZhdGlvblZhbHVlR1BSKTsKIAogICAgICAg
ICBTaGFyZWRTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUgPSBtX2ppdC5zeW1ib2xUYWJsZUZvcihu
b2RlLmNvZGVPcmlnaW4pOwogICAgICAgICBpbnQgcmVnaXN0ZXJzT2Zmc2V0ID0gSlNBY3RpdmF0
aW9uOjpyZWdpc3RlcnNPZmZzZXQoc3ltYm9sVGFibGUpOwogCiAgICAgICAgIGludCBjYXB0dXJl
RW5kID0gc3ltYm9sVGFibGUtPmNhcHR1cmVFbmQoKTsKICAgICAgICAgZm9yIChpbnQgaSA9IHN5
bWJvbFRhYmxlLT5jYXB0dXJlU3RhcnQoKTsgaSA8IGNhcHR1cmVFbmQ7ICsraSkgewotICAgICAg
ICAgICAgbV9qaXQubG9hZFB0cigKKyAgICAgICAgICAgIG1faml0LmxvYWQ2NCgKICAgICAgICAg
ICAgICAgICBKSVRDb21waWxlcjo6QWRkcmVzcygKICAgICAgICAgICAgICAgICAgICAgR1BSSW5m
bzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgc2NyYXRjaEdQUik7
Ci0gICAgICAgICAgICBtX2ppdC5zdG9yZVB0cigKKyAgICAgICAgICAgIG1faml0LnN0b3JlNjQo
CiAgICAgICAgICAgICAgICAgc2NyYXRjaEdQUiwgSklUQ29tcGlsZXI6OkFkZHJlc3MoCiAgICAg
ICAgICAgICAgICAgICAgIGFjdGl2YXRpb25WYWx1ZUdQUiwgcmVnaXN0ZXJzT2Zmc2V0ICsgaSAq
IHNpemVvZihSZWdpc3RlcikpKTsKICAgICAgICAgfQpAQCAtNDQwOCw3ICs0NDA5LDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBHUFJSZWcgdW5t
b2RpZmllZEFyZ3VtZW50c1ZhbHVlR1BSID0gdW5tb2RpZmllZEFyZ3VtZW50c1ZhbHVlLmdwcigp
OwogICAgICAgICBHUFJSZWcgYWN0aXZhdGlvblZhbHVlR1BSID0gYWN0aXZhdGlvblZhbHVlLmdw
cigpOwogCi0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGNyZWF0ZWQgPSBtX2ppdC5icmFuY2hU
ZXN0UHRyKEpJVENvbXBpbGVyOjpOb25aZXJvLCB1bm1vZGlmaWVkQXJndW1lbnRzVmFsdWVHUFIp
OworICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBjcmVhdGVkID0gbV9qaXQuYnJhbmNoVGVzdDY0
KEpJVENvbXBpbGVyOjpOb25aZXJvLCB1bm1vZGlmaWVkQXJndW1lbnRzVmFsdWVHUFIpOwogCiAg
ICAgICAgIGlmIChub2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKSB7CiAgICAgICAgICAg
ICBhZGRTbG93UGF0aEdlbmVyYXRvcigKQEAgLTQ0MzQsNyArNDQzNSw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgICAgICAgICAgbV9qaXQu
Z3JhcGgoKS5hcmd1bWVudHNSZWdpc3RlckZvcihub2RlLmNvZGVPcmlnaW4pKS5tX3R5cGUpKSB7
CiAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAogICAgICAgICAgICAgICAgIEFyZ3VtZW50
c0VzY2FwZWQsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwKLSAgICAgICAgICAgICAgICBtX2ppdC5i
cmFuY2hUZXN0UHRyKAorICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3Q2NCgKICAgICAg
ICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6Ok5vblplcm8sCiAgICAgICAgICAgICAgICAgICAg
IEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKAogICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQu
YXJndW1lbnRzUmVnaXN0ZXJGb3Iobm9kZS5jb2RlT3JpZ2luKSkpKTsKQEAgLTQ0NTEsMjIgKzQ0
NTIsMTkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAg
ICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0g
cmVzdWx0LmdwcigpOwogICAgICAgICAKLSAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgY3JlYXRl
ZCA9IG1faml0LmJyYW5jaFRlc3RQdHIoCisgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGNyZWF0
ZWQgPSBtX2ppdC5icmFuY2hUZXN0NjQoCiAgICAgICAgICAgICBKSVRDb21waWxlcjo6Tm9uWmVy
bywKICAgICAgICAgICAgIEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKAogICAgICAgICAgICAgICAg
IG1faml0LmFyZ3VtZW50c1JlZ2lzdGVyRm9yKG5vZGUuY29kZU9yaWdpbikpKTsKICAgICAgICAg
CiAgICAgICAgIGlmIChub2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKSB7CiAgICAgICAg
ICAgICBtX2ppdC5tb3ZlKAotICAgICAgICAgICAgICAgIEltbVB0cigKLSAgICAgICAgICAgICAg
ICAgICAgYml0d2lzZV9jYXN0PHZvaWQqPigKLSAgICAgICAgICAgICAgICAgICAgICAgIEpTVmFs
dWU6OmVuY29kZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc051bWJlcihub2RlLmNv
ZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpIC0gMSkpKSksCisgICAg
ICAgICAgICAgICAgSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKG5vZGUuY29kZU9yaWdp
bi5pbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkgLSAxKSkpLAogICAgICAgICAgICAg
ICAgIHJlc3VsdEdQUik7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBtX2ppdC5sb2Fk
MzIoSklUQ29tcGlsZXI6OnBheWxvYWRGb3IoSlNTdGFjazo6QXJndW1lbnRDb3VudCksIHJlc3Vs
dEdQUik7CiAgICAgICAgICAgICBtX2ppdC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlc3VsdEdQ
Uik7Ci0gICAgICAgICAgICBtX2ppdC5vclB0cihHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0
ZXIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBtX2ppdC5vcjY0KEdQUkluZm86OnRhZ1R5cGVO
dW1iZXJSZWdpc3RlciwgcmVzdWx0R1BSKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAg
Ly8gRklYTUU6IHRoZSBzbG93IHBhdGggZ2VuZXJhdG9yIHNob3VsZCBwZXJmb3JtIGEgZm9yd2Fy
ZCBzcGVjdWxhdGlvbiB0aGF0IHRoZQpAQCAtNDQ5Myw3ICs0NDkxLDcgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgICAgICAgICBtX2ppdC5n
cmFwaCgpLmFyZ3VtZW50c1JlZ2lzdGVyRm9yKG5vZGUuY29kZU9yaWdpbikpLm1fdHlwZSkpIHsK
ICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCiAgICAgICAgICAgICAgICAgQXJndW1lbnRz
RXNjYXBlZCwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLAotICAgICAgICAgICAgICAgIG1faml0LmJy
YW5jaFRlc3RQdHIoCisgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDY0KAogICAgICAg
ICAgICAgICAgICAgICBKSVRDb21waWxlcjo6Tm9uWmVybywKICAgICAgICAgICAgICAgICAgICAg
SklUQ29tcGlsZXI6OmFkZHJlc3NGb3IoCiAgICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5h
cmd1bWVudHNSZWdpc3RlckZvcihub2RlLmNvZGVPcmlnaW4pKSkpOwpAQCAtNDUzMiw3ICs0NTMw
LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAg
ICAgICAgICAgICBPQkpFQ1RfT0ZGU0VUT0YoU2xvd0FyZ3VtZW50LCBpbmRleCkpLCAKICAgICAg
ICAgICAgICAgICByZXN1bHRHUFIpOwogICAgICAgICAgICAgbV9qaXQuc2lnbkV4dGVuZDMyVG9Q
dHIocmVzdWx0R1BSLCByZXN1bHRHUFIpOwotICAgICAgICAgICAgbV9qaXQubG9hZFB0cigKKyAg
ICAgICAgICAgIG1faml0LmxvYWQ2NCgKICAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6QmFz
ZUluZGV4KAogICAgICAgICAgICAgICAgICAgICBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwg
cmVzdWx0R1BSLCBKSVRDb21waWxlcjo6VGltZXNFaWdodCwgbV9qaXQub2Zmc2V0T2ZMb2NhbHMo
bm9kZS5jb2RlT3JpZ2luKSksCiAgICAgICAgICAgICAgICAgcmVzdWx0R1BSKTsKQEAgLTQ1NDMs
NyArNDU0MSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAg
ICAgICAgbV9qaXQubmVnMzIocmVzdWx0R1BSKTsKICAgICAgICAgbV9qaXQuc2lnbkV4dGVuZDMy
VG9QdHIocmVzdWx0R1BSLCByZXN1bHRHUFIpOwogICAgICAgICAgICAgCi0gICAgICAgIG1faml0
LmxvYWRQdHIoCisgICAgICAgIG1faml0LmxvYWQ2NCgKICAgICAgICAgICAgIEpJVENvbXBpbGVy
OjpCYXNlSW5kZXgoCiAgICAgICAgICAgICAgICAgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIs
IHJlc3VsdEdQUiwgSklUQ29tcGlsZXI6OlRpbWVzRWlnaHQsIG1faml0Lm9mZnNldE9mQXJndW1l
bnRzSW5jbHVkaW5nVGhpcyhub2RlLmNvZGVPcmlnaW4pKSwKICAgICAgICAgICAgIHJlc3VsdEdQ
Uik7CkBAIC00NTYxLDcgKzQ1NTksNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5v
ZGUmIG5vZGUpCiAgICAgICAgIAogICAgICAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2xvd1Bh
dGg7CiAgICAgICAgIHNsb3dQYXRoLmFwcGVuZCgKLSAgICAgICAgICAgIG1faml0LmJyYW5jaFRl
c3RQdHIoCisgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0NjQoCiAgICAgICAgICAgICAgICAg
SklUQ29tcGlsZXI6Ok5vblplcm8sCiAgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6OmFkZHJl
c3NGb3IoCiAgICAgICAgICAgICAgICAgICAgIG1faml0LmFyZ3VtZW50c1JlZ2lzdGVyRm9yKG5v
ZGUuY29kZU9yaWdpbikpKSk7CkBAIC00NTk3LDcgKzQ1OTUsNyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICAgICAgICAgIE9CSkVDVF9PRkZT
RVRPRihTbG93QXJndW1lbnQsIGluZGV4KSksIAogICAgICAgICAgICAgICAgIHJlc3VsdEdQUik7
CiAgICAgICAgICAgICBtX2ppdC5zaWduRXh0ZW5kMzJUb1B0cihyZXN1bHRHUFIsIHJlc3VsdEdQ
Uik7Ci0gICAgICAgICAgICBtX2ppdC5sb2FkUHRyKAorICAgICAgICAgICAgbV9qaXQubG9hZDY0
KAogICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpCYXNlSW5kZXgoCiAgICAgICAgICAgICAg
ICAgICAgIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCByZXN1bHRHUFIsIEpJVENvbXBpbGVy
OjpUaW1lc0VpZ2h0LCBtX2ppdC5vZmZzZXRPZkxvY2Fscyhub2RlLmNvZGVPcmlnaW4pKSwKICAg
ICAgICAgICAgICAgICByZXN1bHRHUFIpOwpAQCAtNDYwOCw3ICs0NjA2LDcgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBtX2ppdC5uZWczMihyZXN1
bHRHUFIpOwogICAgICAgICBtX2ppdC5zaWduRXh0ZW5kMzJUb1B0cihyZXN1bHRHUFIsIHJlc3Vs
dEdQUik7CiAgICAgICAgIAotICAgICAgICBtX2ppdC5sb2FkUHRyKAorICAgICAgICBtX2ppdC5s
b2FkNjQoCiAgICAgICAgICAgICBKSVRDb21waWxlcjo6QmFzZUluZGV4KAogICAgICAgICAgICAg
ICAgIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCByZXN1bHRHUFIsIEpJVENvbXBpbGVyOjpU
aW1lc0VpZ2h0LCBtX2ppdC5vZmZzZXRPZkFyZ3VtZW50c0luY2x1ZGluZ1RoaXMobm9kZS5jb2Rl
T3JpZ2luKSksCiAgICAgICAgICAgICByZXN1bHRHUFIpOwpAQCAtNDYzOSw3ICs0NjM3LDcgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgICAg
IG1faml0LmdyYXBoKCkuYXJndW1lbnRzUmVnaXN0ZXJGb3Iobm9kZS5jb2RlT3JpZ2luKSkubV90
eXBlKSk7CiAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCiAgICAgICAgICAgICBBcmd1bWVudHNF
c2NhcGVkLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsCi0gICAgICAgICAgICBtX2ppdC5icmFuY2hU
ZXN0UHRyKAorICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDY0KAogICAgICAgICAgICAgICAg
IEpJVENvbXBpbGVyOjpOb25aZXJvLAogICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjphZGRy
ZXNzRm9yKAogICAgICAgICAgICAgICAgICAgICBtX2ppdC5hcmd1bWVudHNSZWdpc3RlckZvcihu
b2RlLmNvZGVPcmlnaW4pKSkpOwpAQCAtNDY2MCw3ICs0NjU4LDcgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAKICAgICAgICAgbV9qaXQubW92ZSh2
YWx1ZUdQUiwgcmVzdWx0R1BSKTsKICAgICAgICAgCi0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1w
IG5vdENyZWF0ZWQgPSBtX2ppdC5icmFuY2hUZXN0UHRyKEpJVENvbXBpbGVyOjpaZXJvLCByZXN1
bHRHUFIpOworICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBub3RDcmVhdGVkID0gbV9qaXQuYnJh
bmNoVGVzdDY0KEpJVENvbXBpbGVyOjpaZXJvLCByZXN1bHRHUFIpOwogICAgICAgICAKICAgICAg
ICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCiAgICAgICAgICAgICBzbG93UGF0aENhbGwoCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAko
cmV2aXNpb24gMTMxODUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3MDYsMTQgKzE3MDYsMTQgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y2hlY2tBcmd1bWVudFR5cGVzKAogICAgICAgICAKICNpZiBVU0UoSlNW
QUxVRTY0KQogICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uKHByZWRpY3RlZFR5cGUpKQot
ICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCB2YWx1ZVNvdXJjZSwgbm9kZUlu
ZGV4LCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBKSVRDb21waWxlcjo6
YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0
ZXIpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgdmFsdWVTb3VyY2Us
IG5vZGVJbmRleCwgbV9qaXQuYnJhbmNoNjQoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBKSVRDb21w
aWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVy
UmVnaXN0ZXIpKTsKICAgICAgICAgZWxzZSBpZiAoaXNCb29sZWFuU3BlY3VsYXRpb24ocHJlZGlj
dGVkVHlwZSkpIHsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOwotICAgICAg
ICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0
ZXIpLCB0ZW1wLmdwcigpKTsKLSAgICAgICAgICAgIG1faml0LnhvclB0cihUcnVzdGVkSW1tMzIo
c3RhdGljX2Nhc3Q8aW50MzJfdD4oVmFsdWVGYWxzZSkpLCB0ZW1wLmdwcigpKTsKLSAgICAgICAg
ICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgdmFsdWVTb3VyY2UsIG5vZGVJbmRleCwgbV9q
aXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgdGVtcC5ncHIoKSwgVHJ1
c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSkpKTsKKyAgICAgICAgICAgIG1faml0
LmxvYWQ2NChKSVRDb21waWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCB0ZW1wLmdw
cigpKTsKKyAgICAgICAgICAgIG1faml0LnhvcjY0KFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxp
bnQzMl90PihWYWx1ZUZhbHNlKSksIHRlbXAuZ3ByKCkpOworICAgICAgICAgICAgc3BlY3VsYXRp
b25DaGVjayhCYWRUeXBlLCB2YWx1ZVNvdXJjZSwgbm9kZUluZGV4LCBtX2ppdC5icmFuY2hUZXN0
NjQoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIHRlbXAuZ3ByKCksIFRydXN0ZWRJbW0zMihzdGF0
aWNfY2FzdDxpbnQzMl90Pih+MSkpKSk7CiAgICAgICAgIH0gZWxzZSBpZiAoaXNDZWxsU3BlY3Vs
YXRpb24ocHJlZGljdGVkVHlwZSkpCi0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5
cGUsIHZhbHVlU291cmNlLCBub2RlSW5kZXgsIG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3Nl
bWJsZXI6Ok5vblplcm8sIEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3Rlciks
IEdQUkluZm86OnRhZ01hc2tSZWdpc3RlcikpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVj
ayhCYWRUeXBlLCB2YWx1ZVNvdXJjZSwgbm9kZUluZGV4LCBtX2ppdC5icmFuY2hUZXN0NjQoTWFj
cm9Bc3NlbWJsZXI6Ok5vblplcm8sIEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdp
c3RlciksIEdQUkluZm86OnRhZ01hc2tSZWdpc3RlcikpOwogI2Vsc2UKICAgICAgICAgaWYgKGlz
SW50MzJTcGVjdWxhdGlvbihwcmVkaWN0ZWRUeXBlKSkKICAgICAgICAgICAgIHNwZWN1bGF0aW9u
Q2hlY2soQmFkVHlwZSwgdmFsdWVTb3VyY2UsIG5vZGVJbmRleCwgbV9qaXQuYnJhbmNoMzIoTWFj
cm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBKSVRDb21waWxlcjo6dGFnRm9yKHZpcnR1YWxSZWdpc3Rl
ciksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZykpKTsKQEAgLTE5NzMsMTAgKzE5NzMs
MTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVZhbHVlVG9JbnQzMgogICAgICAgICAg
ICAgRlBSVGVtcG9yYXJ5IHRlbXBGcHIodGhpcyk7CiAgICAgICAgICAgICBGUFJSZWcgZnByID0g
dGVtcEZwci5mcHIoKTsKIAotICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNJbnRlZ2Vy
ID0gbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIGdwciwgR1BS
SW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKKyAgICAgICAgICAgIEpJVENvbXBpbGVyOjpK
dW1wIGlzSW50ZWdlciA9IG1faml0LmJyYW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1
YWwsIGdwciwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKIAogICAgICAgICAgICAg
aWYgKCFpc051bWJlclNwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5t
X3R5cGUpKQotICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1
ZVJlZ3MoZ3ByKSwgbm9kZS5jaGlsZDEoKS5pbmRleCgpLCBtX2ppdC5icmFuY2hUZXN0UHRyKE1h
Y3JvQXNzZW1ibGVyOjpaZXJvLCBncHIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcikp
OworICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3Mo
Z3ByKSwgbm9kZS5jaGlsZDEoKS5pbmRleCgpLCBtX2ppdC5icmFuY2hUZXN0NjQoTWFjcm9Bc3Nl
bWJsZXI6Olplcm8sIGdwciwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSk7CiAKICAg
ICAgICAgICAgIC8vIEZpcnN0LCBpZiB3ZSBnZXQgaGVyZSB3ZSBoYXZlIGEgZG91YmxlIGVuY29k
ZWQgYXMgYSBKU1ZhbHVlCiAgICAgICAgICAgICBtX2ppdC5tb3ZlKGdwciwgcmVzdWx0R3ByKTsK
QEAgLTIxMTksOCArMjExOSw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVJbnQzMlRv
RG91YmwKICAgICAgICAgQVNTRVJUKGlzSW50MzJDb25zdGFudChub2RlLmNoaWxkMSgpLmluZGV4
KCkpKTsKICAgICAgICAgRlBSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKICAgICAgICAgR1BSVGVt
cG9yYXJ5IHRlbXAodGhpcyk7Ci0gICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6Oklt
bVB0cihyZWludGVycHJldF9jYXN0PHZvaWQqPihyZWludGVycHJldERvdWJsZVRvSW50cHRyKHZh
bHVlT2ZOdW1iZXJDb25zdGFudChub2RlLmNoaWxkMSgpLmluZGV4KCkpKSkpLCB0ZW1wLmdwcigp
KTsKLSAgICAgICAgbV9qaXQubW92ZVB0clRvRG91YmxlKHRlbXAuZ3ByKCksIHJlc3VsdC5mcHIo
KSk7CisgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OkltbTY0KHJlaW50ZXJwcmV0
RG91YmxlVG9JbnQ2NCh2YWx1ZU9mTnVtYmVyQ29uc3RhbnQobm9kZS5jaGlsZDEoKS5pbmRleCgp
KSkpLCB0ZW1wLmdwcigpKTsKKyAgICAgICAgbV9qaXQubW92ZTY0VG9Eb3VibGUodGVtcC5ncHIo
KSwgcmVzdWx0LmZwcigpKTsKICAgICAgICAgZG91YmxlUmVzdWx0KHJlc3VsdC5mcHIoKSwgbV9j
b21waWxlSW5kZXgpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMjE0NCwxMyArMjE0NCwx
MyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlSW50MzJUb0RvdWJsCiAgICAgR1BSUmVn
IHRlbXBHUFIgPSB0ZW1wLmdwcigpOwogICAgIEZQUlJlZyByZXN1bHRGUFIgPSByZXN1bHQuZnBy
KCk7CiAgICAgCi0gICAgSklUQ29tcGlsZXI6Okp1bXAgaXNJbnRlZ2VyID0gbV9qaXQuYnJhbmNo
UHRyKAorICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzSW50ZWdlciA9IG1faml0LmJyYW5jaDY0KAog
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBvcDFHUFIsIEdQUkluZm86OnRh
Z1R5cGVOdW1iZXJSZWdpc3Rlcik7CiAgICAgCiAgICAgaWYgKCFpc051bWJlclNwZWN1bGF0aW9u
KG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKSB7CiAgICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2soCiAgICAgICAgICAgICBCYWRUeXBlLCBKU1ZhbHVlUmVncyhvcDFHUFIpLCBu
b2RlLmNoaWxkMSgpLAotICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2Vt
Ymxlcjo6WmVybywgb3AxR1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsKKyAg
ICAgICAgICAgIG1faml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6WmVybywgb3AxR1BS
LCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsKICAgICB9CiAgICAgCiAgICAgbV9q
aXQubW92ZShvcDFHUFIsIHRlbXBHUFIpOwpAQCAtMjQ4MCwyMCArMjQ4MCwxOCBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlSW5zdGFuY2VPZkZvCiAgICAgTWFjcm9Bc3NlbWJsZXI6Okxh
YmVsIGxvb3AoJm1faml0KTsKICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHNjcmF0Y2hSZWcsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzY3JhdGNoUmVnKTsK
ICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3Moc2NyYXRjaFJlZywgU3RydWN0dXJlOjpwcm90b3R5cGVPZmZzZXQoKSksIHNjcmF0Y2hS
ZWcpOworICAgIG1faml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoUmVn
LCBTdHJ1Y3R1cmU6OnByb3RvdHlwZU9mZnNldCgpKSwgc2NyYXRjaFJlZyk7CisgICAgTWFjcm9B
c3NlbWJsZXI6Okp1bXAgaXNJbnN0YW5jZSA9IG1faml0LmJyYW5jaDY0KE1hY3JvQXNzZW1ibGVy
OjpFcXVhbCwgc2NyYXRjaFJlZywgcHJvdG90eXBlUmVnKTsKKyAgICBtX2ppdC5icmFuY2hUZXN0
NjQoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHNjcmF0Y2hSZWcsIEdQUkluZm86OnRhZ01hc2tSZWdp
c3RlcikubGlua1RvKGxvb3AsICZtX2ppdCk7CiAjZWxzZQogICAgIG1faml0LmxvYWQzMihNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoUmVnLCBTdHJ1Y3R1cmU6OnByb3RvdHlwZU9mZnNl
dCgpICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwgc2NyYXRj
aFJlZyk7Ci0jZW5kaWYKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBpc0luc3RhbmNlID0gbV9q
aXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgc2NyYXRjaFJlZywgcHJvdG90eXBl
UmVnKTsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9B
c3NlbWJsZXI6Olplcm8sIHNjcmF0Y2hSZWcsIEdQUkluZm86OnRhZ01hc2tSZWdpc3RlcikubGlu
a1RvKGxvb3AsICZtX2ppdCk7Ci0jZWxzZQogICAgIG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fz
c2VtYmxlcjo6Tm9uWmVybywgc2NyYXRjaFJlZykubGlua1RvKGxvb3AsICZtX2ppdCk7CiAjZW5k
aWYKICAgICAKICAgICAvLyBObyBtYXRjaCAtIHJlc3VsdCBpcyBmYWxzZS4KICNpZiBVU0UoSlNW
QUxVRTY0KQotICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoSlNW
YWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihmYWxzZSkpKSwgc2NyYXRjaFJlZyk7CisgICAgbV9qaXQu
bW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xl
YW4oZmFsc2UpKSksIHNjcmF0Y2hSZWcpOwogI2Vsc2UKICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tMzIoMCksIHNjcmF0Y2hSZWcpOwogI2VuZGlmCkBAIC0yNTAxLDcg
KzI0OTksNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlSW5zdGFuY2VPZkZvCiAgICAg
CiAgICAgaXNJbnN0YW5jZS5saW5rKCZtX2ppdCk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBt
X2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKEpTVmFsdWU6OmVuY29kZShq
c0Jvb2xlYW4odHJ1ZSkpKSwgc2NyYXRjaFJlZyk7CisgICAgbV9qaXQubW92ZShNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkpKSwgc2Ny
YXRjaFJlZyk7CiAjZWxzZQogICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW0zMigxKSwgc2NyYXRjaFJlZyk7CiAjZW5kaWYKQEAgLTI1MjcsOCArMjUyNSw4IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVJbnN0YW5jZU9mKE4KICAgICAgICAgCiAjaWYgVVNFKEpT
VkFMVUU2NCkKICAgICAgICAgR1BSUmVnIHZhbHVlUmVnID0gdmFsdWUuZ3ByKCk7Ci0gICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wIGlzQ2VsbCA9IG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9B
c3NlbWJsZXI6Olplcm8sIHZhbHVlUmVnLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpOwotICAg
ICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKEpTVmFsdWU6OmVu
Y29kZShqc0Jvb2xlYW4oZmFsc2UpKSksIHNjcmF0Y2hSZWcpOworICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcCBpc0NlbGwgPSBtX2ppdC5icmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Olpl
cm8sIHZhbHVlUmVnLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpOworICAgICAgICBtX2ppdC5t
b3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVh
bihmYWxzZSkpKSwgc2NyYXRjaFJlZyk7CiAjZWxzZQogICAgICAgICBHUFJSZWcgdmFsdWVUYWdS
ZWcgPSB2YWx1ZS50YWdHUFIoKTsKICAgICAgICAgR1BSUmVnIHZhbHVlUmVnID0gdmFsdWUucGF5
bG9hZEdQUigpOwpAQCAtMzA5MSw3ICszMDg5LDcgQEAgYm9vbCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZVN0cmljdEVxRm9yQwogICAgICAgICB9CiAKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAg
ICBicmFuY2hQdHIoY29uZGl0aW9uLCBvcDEuZ3ByKCksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tUHRyKGJpdHdpc2VfY2FzdDx2b2lkKj4oSlNWYWx1ZTo6ZW5jb2RlKGNvbnN0YW50KSkpLCB0
YWtlbik7CisgICAgICAgIGJyYW5jaDY0KGNvbmRpdGlvbiwgb3AxLmdwcigpLCBNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShjb25zdGFudCkpLCB0YWtlbik7CiAj
ZWxzZQogICAgICAgICBHUFJSZWcgcGF5bG9hZEdQUiA9IG9wMS5wYXlsb2FkR1BSKCk7CiAgICAg
ICAgIEdQUlJlZyB0YWdHUFIgPSBvcDEudGFnR1BSKCk7CkBAIC0zMTIxLDggKzMxMTksOCBAQCBi
b29sIFNwZWN1bGF0aXZlSklUOjpjb21waWxlU3RyaWN0RXFGb3JDCiAjaWYgVVNFKEpTVkFMVUU2
NCkKICAgICBHUFJSZWcgb3AxR1BSID0gb3AxLmdwcigpOwogICAgIEdQUlJlZyByZXN1bHRHUFIg
PSByZXN1bHQuZ3ByKCk7Ci0gICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bVB0cihiaXR3aXNlX2Nhc3Q8dm9pZCo+KFZhbHVlRmFsc2UpKSwgcmVzdWx0R1BSKTsKLSAgICBN
YWNyb0Fzc2VtYmxlcjo6SnVtcCBub3RFcXVhbCA9IG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2Vt
Ymxlcjo6Tm90RXF1YWwsIG9wMUdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoYml0
d2lzZV9jYXN0PHZvaWQqPihKU1ZhbHVlOjplbmNvZGUoY29uc3RhbnQpKSkpOworICAgIG1faml0
Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChWYWx1ZUZhbHNlKSwgcmVzdWx0R1BS
KTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub3RFcXVhbCA9IG1faml0LmJyYW5jaDY0KE1h
Y3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgb3AxR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bTY0KEpTVmFsdWU6OmVuY29kZShjb25zdGFudCkpKTsKICAgICBtX2ppdC5vcjMyKE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tMzIoMSksIHJlc3VsdEdQUik7CiAgICAgbm90RXF1YWwubGluaygm
bV9qaXQpOwogICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBtX2NvbXBpbGVJbmRleCwgRGF0
YUZvcm1hdEpTQm9vbGVhbik7CkBAIC0zMzAyLDcgKzMzMDAsNyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlR2V0QnlWYWxPbkFyCiAgICAgICAgIHJlc3VsdFJlZyk7CiAgICAganNWYWx1
ZVJlc3VsdChyZXN1bHRUYWdSZWcsIHJlc3VsdFJlZywgbV9jb21waWxlSW5kZXgpOwogI2Vsc2UK
LSAgICBtX2ppdC5sb2FkUHRyKAorICAgIG1faml0LmxvYWQ2NCgKICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkJhc2VJbmRleCgKICAgICAgICAgICAgIHNjcmF0Y2hSZWcsIHJlc3VsdFJlZywgTWFj
cm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsCiAgICAgICAgICAgICBDYWxsRnJhbWU6OnRoaXNBcmd1
bWVudE9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSAtIHNpemVvZihSZWdpc3RlcikpLApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2
aXNpb24gMTMxODUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC03MSw2ICs3MSw4IEBAIHByaXZhdGU6CiAgICAgdHlw
ZWRlZiBKSVRDb21waWxlcjo6SW1tMzIgSW1tMzI7CiAgICAgdHlwZWRlZiBKSVRDb21waWxlcjo6
VHJ1c3RlZEltbVB0ciBUcnVzdGVkSW1tUHRyOwogICAgIHR5cGVkZWYgSklUQ29tcGlsZXI6Oklt
bVB0ciBJbW1QdHI7CisgICAgdHlwZWRlZiBKSVRDb21waWxlcjo6VHJ1c3RlZEltbTY0IFRydXN0
ZWRJbW02NDsKKyAgICB0eXBlZGVmIEpJVENvbXBpbGVyOjpJbW02NCBJbW02NDsKIAogICAgIC8v
IFRoZXNlIGNvbnN0YW50cyBhcmUgdXNlZCB0byBzZXQgcHJpb3JpdGllcyBmb3Igc3BpbGwgb3Jk
ZXIgZm9yCiAgICAgLy8gdGhlIHJlZ2lzdGVyIGFsbG9jYXRvci4KQEAgLTM0Nyw5ICszNDksMTEg
QEAgcHVibGljOgogICAgICAgICAgICAgQVNTRVJUKGluZm8uZ3ByKCkgPT0gc291cmNlKTsKICAg
ICAgICAgICAgIGlmIChyZWdpc3RlckZvcm1hdCA9PSBEYXRhRm9ybWF0SW50ZWdlcikKICAgICAg
ICAgICAgICAgICBzcGlsbEFjdGlvbiA9IFN0b3JlMzJQYXlsb2FkOwotICAgICAgICAgICAgZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHJlZ2lzdGVyRm9ybWF0ICYgRGF0YUZvcm1hdEpT
IHx8IHJlZ2lzdGVyRm9ybWF0ID09IERhdGFGb3JtYXRDZWxsIHx8IHJlZ2lzdGVyRm9ybWF0ID09
IERhdGFGb3JtYXRTdG9yYWdlKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKHJlZ2lzdGVyRm9ybWF0
ID09IERhdGFGb3JtYXRDZWxsIHx8IHJlZ2lzdGVyRm9ybWF0ID09IERhdGFGb3JtYXRTdG9yYWdl
KQogICAgICAgICAgICAgICAgIHNwaWxsQWN0aW9uID0gU3RvcmVQdHI7CisgICAgICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQocmVnaXN0ZXJGb3JtYXQgJiBEYXRhRm9ybWF0
SlMpOworICAgICAgICAgICAgICAgIHNwaWxsQWN0aW9uID0gU3RvcmU2NDsKICAgICAgICAgICAg
IH0KICNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgICAgICAgICBpZiAocmVnaXN0ZXJGb3Jt
YXQgJiBEYXRhRm9ybWF0SlMpIHsKQEAgLTQxNCw3ICs0MTgsNyBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICAgICAgQVNTRVJUKHJlZ2lzdGVyRm9ybWF0ID09IERhdGFGb3JtYXRKU0RvdWJsZSk7CiAg
ICAgICAgICAgICAgICAgZmlsbEFjdGlvbiA9IExvYWREb3VibGVCb3hEb3VibGU7CiAgICAgICAg
ICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICBmaWxsQWN0aW9uID0gTG9hZFB0cjsKKyAgICAg
ICAgICAgICAgICBmaWxsQWN0aW9uID0gTG9hZDY0OwogI2Vsc2UKICAgICAgICAgICAgIEFTU0VS
VChpbmZvLnRhZ0dQUigpID09IHNvdXJjZSB8fCBpbmZvLnBheWxvYWRHUFIoKSA9PSBzb3VyY2Up
OwogICAgICAgICAgICAgaWYgKG5vZGUuaGFzQ29uc3RhbnQoKSkKQEAgLTUwMSw2ICs1MDUsMTEg
QEAgcHVibGljOgogICAgICAgICBjYXNlIFN0b3JlUHRyOgogICAgICAgICAgICAgbV9qaXQuc3Rv
cmVQdHIocGxhbi5ncHIoKSwgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3IoYXQocGxhbi5ub2RlSW5k
ZXgoKSkudmlydHVhbFJlZ2lzdGVyKCkpKTsKICAgICAgICAgICAgIGJyZWFrOworI2lmIFVTRShK
U1ZBTFVFNjQpCisgICAgICAgIGNhc2UgU3RvcmU2NDoKKyAgICAgICAgICAgIG1faml0LnN0b3Jl
NjQocGxhbi5ncHIoKSwgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3IoYXQocGxhbi5ub2RlSW5kZXgo
KSkudmlydHVhbFJlZ2lzdGVyKCkpKTsKKyAgICAgICAgICAgIGJyZWFrOworI2VuZGlmCiAgICAg
ICAgIGNhc2UgU3RvcmVEb3VibGU6CiAgICAgICAgICAgICBtX2ppdC5zdG9yZURvdWJsZShwbGFu
LmZwcigpLCBKSVRDb21waWxlcjo6YWRkcmVzc0ZvcihhdChwbGFuLm5vZGVJbmRleCgpKS52aXJ0
dWFsUmVnaXN0ZXIoKSkpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC01MjgsMjUgKzUzNywyNSBA
QCBwdWJsaWM6CiAgICAgICAgICAgICBicmVhazsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgICAg
ICBjYXNlIFNldFRydXN0ZWRKU0NvbnN0YW50OgotICAgICAgICAgICAgbV9qaXQubW92ZSh2YWx1
ZU9mSlNDb25zdGFudEFzSW1tUHRyKHBsYW4ubm9kZUluZGV4KCkpLmFzVHJ1c3RlZEltbVB0cigp
LCBwbGFuLmdwcigpKTsKKyAgICAgICAgICAgIG1faml0Lm1vdmUodmFsdWVPZkpTQ29uc3RhbnRB
c0ltbTY0KHBsYW4ubm9kZUluZGV4KCkpLmFzVHJ1c3RlZEltbTY0KCksIHBsYW4uZ3ByKCkpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgU2V0SlNDb25zdGFudDoKLSAgICAgICAg
ICAgIG1faml0Lm1vdmUodmFsdWVPZkpTQ29uc3RhbnRBc0ltbVB0cihwbGFuLm5vZGVJbmRleCgp
KSwgcGxhbi5ncHIoKSk7CisgICAgICAgICAgICBtX2ppdC5tb3ZlKHZhbHVlT2ZKU0NvbnN0YW50
QXNJbW02NChwbGFuLm5vZGVJbmRleCgpKSwgcGxhbi5ncHIoKSk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgY2FzZSBTZXREb3VibGVDb25zdGFudDoKLSAgICAgICAgICAgIG1faml0Lm1v
dmUoSW1tUHRyKGJpdHdpc2VfY2FzdDx2b2lkKj4odmFsdWVPZk51bWJlckNvbnN0YW50KHBsYW4u
bm9kZUluZGV4KCkpKSksIGNhblRyYW1wbGUpOwotICAgICAgICAgICAgbV9qaXQubW92ZVB0clRv
RG91YmxlKGNhblRyYW1wbGUsIHBsYW4uZnByKCkpOworICAgICAgICAgICAgbV9qaXQubW92ZShJ
bW02NCh2YWx1ZU9mTnVtYmVyQ29uc3RhbnQocGxhbi5ub2RlSW5kZXgoKSkpLCBjYW5UcmFtcGxl
KTsKKyAgICAgICAgICAgIG1faml0Lm1vdmU2NFRvRG91YmxlKGNhblRyYW1wbGUsIHBsYW4uZnBy
KCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgTG9hZDMyUGF5bG9hZEJveElu
dDoKICAgICAgICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6cGF5bG9hZEZvcihhdChw
bGFuLm5vZGVJbmRleCgpKS52aXJ0dWFsUmVnaXN0ZXIoKSksIHBsYW4uZ3ByKCkpOwotICAgICAg
ICAgICAgbV9qaXQub3JQdHIoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBwbGFuLmdw
cigpKTsKKyAgICAgICAgICAgIG1faml0Lm9yNjQoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lz
dGVyLCBwbGFuLmdwcigpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIExvYWRE
b3VibGVCb3hEb3VibGU6Ci0gICAgICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjph
ZGRyZXNzRm9yKGF0KHBsYW4ubm9kZUluZGV4KCkpLnZpcnR1YWxSZWdpc3RlcigpKSwgcGxhbi5n
cHIoKSk7Ci0gICAgICAgICAgICBtX2ppdC5zdWJQdHIoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJl
Z2lzdGVyLCBwbGFuLmdwcigpKTsKKyAgICAgICAgICAgIG1faml0LmxvYWQ2NChKSVRDb21waWxl
cjo6YWRkcmVzc0ZvcihhdChwbGFuLm5vZGVJbmRleCgpKS52aXJ0dWFsUmVnaXN0ZXIoKSksIHBs
YW4uZ3ByKCkpOworICAgICAgICAgICAgbV9qaXQuc3ViNjQoR1BSSW5mbzo6dGFnVHlwZU51bWJl
clJlZ2lzdGVyLCBwbGFuLmdwcigpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNl
IExvYWRKU1VuYm94RG91YmxlOgotICAgICAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxl
cjo6YWRkcmVzc0ZvcihhdChwbGFuLm5vZGVJbmRleCgpKS52aXJ0dWFsUmVnaXN0ZXIoKSksIGNh
blRyYW1wbGUpOworICAgICAgICAgICAgbV9qaXQubG9hZDY0KEpJVENvbXBpbGVyOjphZGRyZXNz
Rm9yKGF0KHBsYW4ubm9kZUluZGV4KCkpLnZpcnR1YWxSZWdpc3RlcigpKSwgY2FuVHJhbXBsZSk7
CiAgICAgICAgICAgICB1bmJveERvdWJsZShjYW5UcmFtcGxlLCBwbGFuLmZwcigpKTsKICAgICAg
ICAgICAgIGJyZWFrOwogI2Vsc2UKQEAgLTU3OCw2ICs1ODcsMTEgQEAgcHVibGljOgogICAgICAg
ICBjYXNlIExvYWRQdHI6CiAgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjph
ZGRyZXNzRm9yKGF0KHBsYW4ubm9kZUluZGV4KCkpLnZpcnR1YWxSZWdpc3RlcigpKSwgcGxhbi5n
cHIoKSk7CiAgICAgICAgICAgICBicmVhazsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICBj
YXNlIExvYWQ2NDoKKyAgICAgICAgICAgIG1faml0LmxvYWQ2NChKSVRDb21waWxlcjo6YWRkcmVz
c0ZvcihhdChwbGFuLm5vZGVJbmRleCgpKS52aXJ0dWFsUmVnaXN0ZXIoKSksIHBsYW4uZ3ByKCkp
OworICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYKICAgICAgICAgY2FzZSBMb2FkRG91YmxlOgog
ICAgICAgICAgICAgbV9qaXQubG9hZERvdWJsZShKSVRDb21waWxlcjo6YWRkcmVzc0ZvcihhdChw
bGFuLm5vZGVJbmRleCgpKS52aXJ0dWFsUmVnaXN0ZXIoKSksIHBsYW4uZnByKCkpOwogICAgICAg
ICAgICAgYnJlYWs7CkBAIC03NTIsMTAgKzc2NiwxMCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAv
LyBXZSBuZWVkIHRvIGJveCBpbnQzMiBhbmQgY2VsbCB2YWx1ZXMgLi4uCiAgICAgICAgICAgICAv
LyBidXQgb24gSlNWQUxVRTY0IGJveGluZyBhIGNlbGwgaXMgYSBuby1vcCEKICAgICAgICAgICAg
IGlmIChzcGlsbEZvcm1hdCA9PSBEYXRhRm9ybWF0SW50ZWdlcikKLSAgICAgICAgICAgICAgICBt
X2ppdC5vclB0cihHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHJlZyk7CisgICAgICAg
ICAgICAgICAgbV9qaXQub3I2NChHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHJlZyk7
CiAgICAgICAgICAgICAKICAgICAgICAgICAgIC8vIFNwaWxsIHRoZSB2YWx1ZSwgYW5kIHJlY29y
ZCBpdCBhcyBzcGlsbGVkIGluIGl0cyBib3hlZCBmb3JtLgotICAgICAgICAgICAgbV9qaXQuc3Rv
cmVQdHIocmVnLCBKSVRDb21waWxlcjo6YWRkcmVzc0ZvcihzcGlsbE1lKSk7CisgICAgICAgICAg
ICBtX2ppdC5zdG9yZTY0KHJlZywgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Ioc3BpbGxNZSkpOwog
ICAgICAgICAgICAgaW5mby5zcGlsbCgqbV9zdHJlYW0sIHNwaWxsTWUsIChEYXRhRm9ybWF0KShz
cGlsbEZvcm1hdCB8IERhdGFGb3JtYXRKUykpOwogICAgICAgICAgICAgcmV0dXJuOwogI2VsaWYg
VVNFKEpTVkFMVUUzMl82NCkKQEAgLTg3NSw5ICs4ODksOSBAQCBwdWJsaWM6CiAjZW5kaWYKIAog
I2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgTWFjcm9Bc3NlbWJsZXI6OkltbVB0ciB2YWx1ZU9mSlND
b25zdGFudEFzSW1tUHRyKE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgTWFjcm9Bc3NlbWJsZXI6
OkltbTY0IHZhbHVlT2ZKU0NvbnN0YW50QXNJbW02NChOb2RlSW5kZXggbm9kZUluZGV4KQogICAg
IHsKLSAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyOjpJbW1QdHIoSlNWYWx1ZTo6ZW5jb2Rl
KHZhbHVlT2ZKU0NvbnN0YW50KG5vZGVJbmRleCkpKTsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNz
ZW1ibGVyOjpJbW02NChKU1ZhbHVlOjplbmNvZGUodmFsdWVPZkpTQ29uc3RhbnQobm9kZUluZGV4
KSkpOwogICAgIH0KICNlbmRpZgogCkBAIC0xMzU5LDYgKzEzNzMsMTEgQEAgcHVibGljOgogICAg
ICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSk7CiAgICAgICAgIHJl
dHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVz
dWx0KTsKICAgICB9CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09w
ZXJhdGlvbl9FSiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxKQorICAgIHsK
KyAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEpOworICAgICAg
ICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24s
IHJlc3VsdCk7CisgICAgfQogICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oU19E
RkdPcGVyYXRpb25fRUpKIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIEdQ
UlJlZyBhcmcyKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0
YXRlKGFyZzEsIGFyZzIpOwpAQCAtMTM3NCwxNCArMTM5MywxOSBAQCBwdWJsaWM6CiAgICAgICAg
IG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyKTsKICAgICAgICAg
cmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCBy
ZXN1bHQpOwogICAgIH0KKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZH
T3BlcmF0aW9uX0VKSiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBHUFJS
ZWcgYXJnMikKKyAgICB7CisgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0
ZShhcmcxLCBhcmcyKTsKKyAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hl
Y2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOworICAgIH0KICAgICBKSVRDb21waWxlcjo6
Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VKSiBvcGVyYXRpb24sIEdQUlJlZyBy
ZXN1bHQsIEdQUlJlZyBhcmcxLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyIGltbSkKICAg
ICB7Ci0gICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihzdGF0aWNfY2FzdDxjb25zdCB2b2lkKj4oSlNWYWx1
ZTo6ZW5jb2RlKGpzTnVtYmVyKGltbS5tX3ZhbHVlKSkpKSk7CisgICAgICAgIG1faml0LnNldHVw
QXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0
KEpTVmFsdWU6OmVuY29kZShqc051bWJlcihpbW0ubV92YWx1ZSkpKSk7CiAgICAgICAgIHJldHVy
biBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0
KTsKICAgICB9CiAgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJh
dGlvbl9FSkogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbTMyIGltbSwgR1BSUmVnIGFyZzIpCiAgICAgewotICAgICAgICBtX2ppdC5zZXR1cEFyZ3Vt
ZW50c1dpdGhFeGVjU3RhdGUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoc3RhdGljX2Nh
c3Q8Y29uc3Qgdm9pZCo+KEpTVmFsdWU6OmVuY29kZShqc051bWJlcihpbW0ubV92YWx1ZSkpKSks
IGFyZzIpOworICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoaW1tLm1fdmFs
dWUpKSksIGFyZzIpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVj
a1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQogICAgIEpJVENvbXBpbGVyOjpD
YWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRUNDIG9wZXJhdGlvbiwgR1BSUmVnIHJl
c3VsdCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQpAQCAtMjA2Myw2ICsyMDg3LDIwIEBAIHB1
YmxpYzoKICAgICAgICAgbm90VGFrZW4ubGluaygmbV9qaXQpOwogICAgIH0KICAgICAKKyNpZiBV
U0UoSlNWQUxVRTY0KQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+CisgICAg
dm9pZCBicmFuY2g2NChKSVRDb21waWxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBUIGxl
ZnQsIFUgcmlnaHQsIEJsb2NrSW5kZXggZGVzdGluYXRpb24pCisgICAgeworICAgICAgICBpZiAo
IWhhdmVFZGdlQ29kZVRvRW1pdChkZXN0aW5hdGlvbikpCisgICAgICAgICAgICByZXR1cm4gYWRk
QnJhbmNoKG1faml0LmJyYW5jaDY0KGNvbmQsIGxlZnQsIHJpZ2h0KSwgZGVzdGluYXRpb24pOwor
ICAgICAgICAKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgbm90VGFrZW4gPSBtX2ppdC5icmFu
Y2g2NChKSVRDb21waWxlcjo6aW52ZXJ0KGNvbmQpLCBsZWZ0LCByaWdodCk7CisgICAgICAgIGVt
aXRFZGdlQ29kZShkZXN0aW5hdGlvbik7CisgICAgICAgIGFkZEJyYW5jaChtX2ppdC5qdW1wKCks
IGRlc3RpbmF0aW9uKTsKKyAgICAgICAgbm90VGFrZW4ubGluaygmbV9qaXQpOworICAgIH0KKyNl
bmRpZgorICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+CiAgICAgdm9p
ZCBicmFuY2hQdHIoSklUQ29tcGlsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24gY29uZCwgVCBsZWZ0
LCBVIHJpZ2h0LCBCbG9ja0luZGV4IGRlc3RpbmF0aW9uKQogICAgIHsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5jcHAJKHJldmlzaW9uIDEzMTg1MCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQs
OCArNDQsMTMgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG9zckV4aXRHZW5lcmF0aW9uVAogICAg
IFNjcmF0Y2hCdWZmZXIqIHNjcmF0Y2hCdWZmZXIgPSBnbG9iYWxEYXRhLT5zY3JhdGNoQnVmZmVy
Rm9yU2l6ZShzY3JhdGNoU2l6ZSk7CiAgICAgRW5jb2RlZEpTVmFsdWUqIGJ1ZmZlciA9IHN0YXRp
Y19jYXN0PEVuY29kZWRKU1ZhbHVlKj4oc2NyYXRjaEJ1ZmZlci0+ZGF0YUJ1ZmZlcigpKTsKICAg
ICAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3Rl
cnM7ICsraSkKLSAgICAgICAgaml0LnN0b3JlUHRyKEdQUkluZm86OnRvUmVnaXN0ZXIoaSksIGJ1
ZmZlciArIGkpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBHUFJJbmZvOjpudW1iZXJP
ZlJlZ2lzdGVyczsgKytpKSB7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgaml0LnN0b3Jl
NjQoR1BSSW5mbzo6dG9SZWdpc3RlcihpKSwgYnVmZmVyICsgaSk7CisjZWxzZQorICAgICAgICBq
aXQuc3RvcmUzMihHUFJJbmZvOjp0b1JlZ2lzdGVyKGkpLCBidWZmZXIgKyBpKTsKKyNlbmRpZgor
ICAgIH0KICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgRlBSSW5mbzo6bnVtYmVyT2ZSZWdp
c3RlcnM7ICsraSkgewogICAgICAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bVB0cihidWZmZXIgKyBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycyArIGkpLCBHUFJJbmZvOjpy
ZWdUMCk7CiAgICAgICAgIGppdC5zdG9yZURvdWJsZShGUFJJbmZvOjp0b1JlZ2lzdGVyKGkpLCBH
UFJJbmZvOjpyZWdUMCk7CkBAIC03MSw4ICs3NiwxMyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYg
b3NyRXhpdEdlbmVyYXRpb25UCiAgICAgICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tUHRyKGJ1ZmZlciArIEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzICsgaSksIEdQUklu
Zm86OnJlZ1QwKTsKICAgICAgICAgaml0LmxvYWREb3VibGUoR1BSSW5mbzo6cmVnVDAsIEZQUklu
Zm86OnRvUmVnaXN0ZXIoaSkpOwogICAgIH0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
R1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7ICsraSkKLSAgICAgICAgaml0LmxvYWRQdHIoYnVm
ZmVyICsgaSwgR1BSSW5mbzo6dG9SZWdpc3RlcihpKSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyArK2kpIHsKKyNpZiBVU0UoSlNWQUxV
RTY0KQorICAgICAgICBqaXQubG9hZDY0KGJ1ZmZlciArIGksIEdQUkluZm86OnRvUmVnaXN0ZXIo
aSkpOworI2Vsc2UKKyAgICAgICAgaml0LmxvYWQzMihidWZmZXIgKyBpLCBHUFJJbmZvOjp0b1Jl
Z2lzdGVyKGkpKTsKKyNlbmRpZgorICAgIH0KICAgICAKICAgICBqaXQuanVtcChNYWNyb0Fzc2Vt
Ymxlcjo6QWJzb2x1dGVBZGRyZXNzKCZnbG9iYWxEYXRhLT5vc3JFeGl0SnVtcERlc3RpbmF0aW9u
KSk7CiAgICAgCkBAIC0xMTUsNyArMTI1LDExIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiB0aHJv
d0V4Y2VwdGlvbkZyb20KICAgICAgICAgICAgIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLAog
ICAgICAgICAgICAgc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoUmVnaXN0ZXIpKSAqIEpT
U3RhY2s6OkNhbGxlckZyYW1lKSwKICAgICAgICAgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIp
OworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgaml0LnBlZWs2NChHUFJJbmZvOjpub25QcmVzZXJ2
ZWROb25SZXR1cm5HUFIsIEpJVFNUQUNLRlJBTUVfQVJHU19JTkRFWCk7CisjZWxzZQogICAgIGpp
dC5wZWVrKEdQUkluZm86Om5vblByZXNlcnZlZE5vblJldHVybkdQUiwgSklUU1RBQ0tGUkFNRV9B
UkdTX0lOREVYKTsKKyNlbmRpZgogICAgIGppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUo
R1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSKTsKICAgICBqaXQubW92ZShDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW1QdHIoYml0d2lzZV9jYXN0PHZvaWQqPihsb29rdXBFeGNlcHRpb25I
YW5kbGVyKSksIEdQUkluZm86Om5vbkFyZ0dQUjApOwogICAgIGVtaXRQb2ludGVyVmFsaWRhdGlv
bihqaXQsIEdQUkluZm86Om5vbkFyZ0dQUjApOwpAQCAtMTM4LDcgKzE1MiwxMSBAQCBzdGF0aWMg
dm9pZCBzbG93UGF0aEZvcigKICAgICAgICAgICAgIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVy
LAogICAgICAgICAgICAgc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoUmVnaXN0ZXIpKSAq
IEpTU3RhY2s6OlJldHVyblBDKSk7CiAgICAgaml0LnN0b3JlUHRyKEdQUkluZm86OmNhbGxGcmFt
ZVJlZ2lzdGVyLCAmZ2xvYmFsRGF0YS0+dG9wQ2FsbEZyYW1lKTsKKyNpZiBVU0UoSlNWQUxVRTY0
KQorICAgIGppdC5wb2tlNjQoR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSLCBKSVRT
VEFDS0ZSQU1FX0FSR1NfSU5ERVgpOworI2Vsc2UKICAgICBqaXQucG9rZShHUFJJbmZvOjpub25Q
cmVzZXJ2ZWROb25SZXR1cm5HUFIsIEpJVFNUQUNLRlJBTUVfQVJHU19JTkRFWCk7CisjZW5kaWYK
ICAgICBqaXQuc2V0dXBBcmd1bWVudHNFeGVjU3RhdGUoKTsKICAgICBqaXQubW92ZShDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW1QdHIoYml0d2lzZV9jYXN0PHZvaWQqPihzbG93UGF0aEZ1bmN0aW9u
KSksIEdQUkluZm86Om5vbkFyZ0dQUjApOwogICAgIGVtaXRQb2ludGVyVmFsaWRhdGlvbihqaXQs
IEdQUkluZm86Om5vbkFyZ0dQUjApOwpAQCAtMjExLDcgKzIyOSw3IEBAIHN0YXRpYyBNYWNyb0Fz
c2VtYmxlckNvZGVSZWYgdmlydHVhbEZvclQKICAgICAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAg
IHNsb3dDYXNlLmFwcGVuZCgKLSAgICAgICAgaml0LmJyYW5jaFRlc3RQdHIoCisgICAgICAgIGpp
dC5icmFuY2hUZXN0NjQoCiAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vblplcm8sIEdQUklu
Zm86Om5vbkFyZ0dQUjAsIEdQUkluZm86OnRhZ01hc2tSZWdpc3RlcikpOwogI2Vsc2UKICAgICBz
bG93Q2FzZS5hcHBlbmQoCkBAIC0yNDUsNyArMjYzLDcgQEAgc3RhdGljIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZiB2aXJ0dWFsRm9yVAogICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5m
bzo6bm9uQXJnR1BSMCwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZTY29wZUNoYWluKCkpLAogICAgICAg
ICBHUFJJbmZvOjpub25BcmdHUFIxKTsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGppdC5zdG9y
ZVB0cigKKyAgICBqaXQuc3RvcmU2NCgKICAgICAgICAgR1BSSW5mbzo6bm9uQXJnR1BSMSwKICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKAogICAgICAgICAgICAgR1BSSW5mbzo6Y2FsbEZy
YW1lUmVnaXN0ZXIsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50
ZXJwcmV0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnBy
ZXRlci9JbnRlcnByZXRlci5jcHAJKHJldmlzaW9uIDEzMTg1MCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMw
NywxMSArMzA3LDcgQEAgdm9pZCBJbnRlcnByZXRlcjo6ZHVtcFJlZ2lzdGVycyhDYWxsRnJhbQog
ICAgICAgICBKU1ZhbHVlIHYgPSBpdC0+anNWYWx1ZSgpOwogICAgICAgICBpbnQgcmVnaXN0ZXJO
dW1iZXIgPSBpdCAtIGNhbGxGcmFtZS0+cmVnaXN0ZXJzKCk7CiAgICAgICAgIFN0cmluZyBuYW1l
ID0gY29kZUJsb2NrLT5uYW1lRm9yUmVnaXN0ZXIocmVnaXN0ZXJOdW1iZXIpOwotI2lmIFVTRShK
U1ZBTFVFMzJfNjQpCi0gICAgICAgIGRhdGFMb2coIltyJSAzZCAlMTRzXSAgICAgIHwgJTEwcCB8
ICUtMTZzIDB4JWxseCBcbiIsIHJlZ2lzdGVyTnVtYmVyLCBuYW1lLmFzY2lpKCkuZGF0YSgpLCBp
dCwgdi5kZXNjcmlwdGlvbigpLCBKU1ZhbHVlOjplbmNvZGUodikpOwotI2Vsc2UKLSAgICAgICAg
ZGF0YUxvZygiW3IlIDNkICUxNHNdICAgICAgfCAlMTBwIHwgJS0xNnMgJXAgXG4iLCByZWdpc3Rl
ck51bWJlciwgbmFtZS5hc2NpaSgpLmRhdGEoKSwgaXQsIHYuZGVzY3JpcHRpb24oKSwgSlNWYWx1
ZTo6ZW5jb2RlKHYpKTsKLSNlbmRpZgorICAgICAgICBkYXRhTG9nKCJbciUgM2QgJTE0c10gICAg
ICB8ICUxMHAgfCAlLTE2cyAweCVsbGQgXG4iLCByZWdpc3Rlck51bWJlciwgbmFtZS5hc2NpaSgp
LmRhdGEoKSwgaXQsIHYuZGVzY3JpcHRpb24oKSwgKGxvbmcgbG9uZylKU1ZhbHVlOjplbmNvZGUo
dikpOwogICAgICAgICBpdCsrOwogICAgIH0KICAgICAKQEAgLTM0NiwxMSArMzQyLDcgQEAgdm9p
ZCBJbnRlcnByZXRlcjo6ZHVtcFJlZ2lzdGVycyhDYWxsRnJhbQogICAgICAgICAgICAgSlNWYWx1
ZSB2ID0gaXQtPmpzVmFsdWUoKTsKICAgICAgICAgICAgIGludCByZWdpc3Rlck51bWJlciA9IGl0
IC0gY2FsbEZyYW1lLT5yZWdpc3RlcnMoKTsKICAgICAgICAgICAgIFN0cmluZyBuYW1lID0gY29k
ZUJsb2NrLT5uYW1lRm9yUmVnaXN0ZXIocmVnaXN0ZXJOdW1iZXIpOwotI2lmIFVTRShKU1ZBTFVF
MzJfNjQpCi0gICAgICAgICAgICBkYXRhTG9nKCJbciUgM2QgJTE0c10gICAgICB8ICUxMHAgfCAl
LTE2cyAweCVsbHggXG4iLCByZWdpc3Rlck51bWJlciwgbmFtZS5hc2NpaSgpLmRhdGEoKSwgaXQs
IHYuZGVzY3JpcHRpb24oKSwgSlNWYWx1ZTo6ZW5jb2RlKHYpKTsKLSNlbHNlCi0gICAgICAgICAg
ICBkYXRhTG9nKCJbciUgM2QgJTE0c10gICAgICB8ICUxMHAgfCAlLTE2cyAlcCBcbiIsIHJlZ2lz
dGVyTnVtYmVyLCBuYW1lLmFzY2lpKCkuZGF0YSgpLCBpdCwgdi5kZXNjcmlwdGlvbigpLCBKU1Zh
bHVlOjplbmNvZGUodikpOwotI2VuZGlmCisgICAgICAgICAgICBkYXRhTG9nKCJbciUgM2QgJTE0
c10gICAgICB8ICUxMHAgfCAlLTE2cyAweCVsbGQgXG4iLCByZWdpc3Rlck51bWJlciwgbmFtZS5h
c2NpaSgpLmRhdGEoKSwgaXQsIHYuZGVzY3JpcHRpb24oKSwgKGxvbmcgbG9uZylKU1ZhbHVlOjpl
bmNvZGUodikpOwogICAgICAgICAgICAgKytpdDsKICAgICAgICAgICAgICsrcmVnaXN0ZXJDb3Vu
dDsKICAgICAgICAgfSB3aGlsZSAoaXQgIT0gZW5kKTsKQEAgLTM2MSwxMSArMzUzLDcgQEAgdm9p
ZCBJbnRlcnByZXRlcjo6ZHVtcFJlZ2lzdGVycyhDYWxsRnJhbQogICAgIGlmIChpdCAhPSBlbmQp
IHsKICAgICAgICAgZG8gewogICAgICAgICAgICAgSlNWYWx1ZSB2ID0gKCppdCkuanNWYWx1ZSgp
OwotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAgICAgICBkYXRhTG9nKCJbciUgM2RdICAg
ICAgICAgICAgICAgICAgICAgfCAlMTBwIHwgJS0xNnMgMHglbGx4IFxuIiwgcmVnaXN0ZXJDb3Vu
dCwgaXQsIHYuZGVzY3JpcHRpb24oKSwgSlNWYWx1ZTo6ZW5jb2RlKHYpKTsKLSNlbHNlCi0gICAg
ICAgICAgICBkYXRhTG9nKCJbciUgM2RdICAgICAgICAgICAgICAgICAgICAgfCAlMTBwIHwgJS0x
NnMgJXAgXG4iLCByZWdpc3RlckNvdW50LCBpdCwgdi5kZXNjcmlwdGlvbigpLCBKU1ZhbHVlOjpl
bmNvZGUodikpOwotI2VuZGlmCisgICAgICAgICAgICBkYXRhTG9nKCJbciUgM2RdICAgICAgICAg
ICAgICAgICAgICAgfCAlMTBwIHwgJS0xNnMgMHglbGxkIFxuIiwgcmVnaXN0ZXJDb3VudCwgaXQs
IHYuZGVzY3JpcHRpb24oKSwgKGxvbmcgbG9uZylKU1ZhbHVlOjplbmNvZGUodikpOwogICAgICAg
ICAgICAgKytpdDsKICAgICAgICAgICAgICsrcmVnaXN0ZXJDb3VudDsKICAgICAgICAgfSB3aGls
ZSAoaXQgIT0gZW5kKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9u
IDEzMTg1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNjY3LDcgKzY2Nyw3IEBAIEpJVENvZGUgSklUOjpwcml2YXRlQ29tcGlsZShDb2Rl
UHRyKiBmdW4KICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAg
aW50IG9mZnNldCA9IENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXRJbmNsdWRpbmdUaGlzKGFyZ3Vt
ZW50KSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSk7CiAjaWYgVVNFKEpTVkFM
VUU2NCkKLSAgICAgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIs
IG9mZnNldCksIHJlZ1QwKTsKKyAgICAgICAgICAgICAgICBsb2FkNjQoQWRkcmVzcyhjYWxsRnJh
bWVSZWdpc3Rlciwgb2Zmc2V0KSwgcmVnVDApOwogI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKICAg
ICAgICAgICAgICAgICBsb2FkMzIoQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3Rlciwgb2Zmc2V0ICsg
T0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwgcmVnVDApOwogICAg
ICAgICAgICAgICAgIGxvYWQzMihBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCBvZmZzZXQgKyBP
QkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksIHJlZ1QxKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVQuaAkocmV2aXNpb24gMTMxODUwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVQuaAkod29ya2luZyBjb3B5KQpAQCAtNTkyLDYgKzU5Miw5IEBAIG5hbWVz
cGFjZSBKU0MgewogI2VuZGlmCiAKICNlbHNlIC8vIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgICAg
IC8qIFRoaXMgZnVuY3Rpb24gaXMgZGVwcmVjYXRlZC4gKi8KKyAgICAgICAgdm9pZCBlbWl0R2V0
SklUU3R1YkFyZyh1bnNpZ25lZCBhcmd1bWVudE51bWJlciwgUmVnaXN0ZXJJRCBkc3QpOworCiAg
ICAgICAgIHZvaWQgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbnQgc3JjLCBSZWdpc3RlcklEIGRz
dCk7CiAgICAgICAgIHZvaWQgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoaW50IHNyYzEsIFJlZ2lz
dGVySUQgZHN0MSwgaW50IHNyYzIsIFJlZ2lzdGVySUQgZHN0Mik7CiAgICAgICAgIHZvaWQgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcih1bnNpZ25lZCBkc3QsIFJlZ2lzdGVySUQgZnJvbSA9IHJlZ1Qw
KTsKQEAgLTgzNCw5ICs4MzcsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0
UmlnaHRTaGlmdChJbnN0cnVjdGlvbiosIGJvb2wgaXNVbnNpZ25lZCk7CiAgICAgICAgIHZvaWQg
ZW1pdFJpZ2h0U2hpZnRTbG93Q2FzZShJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImLCBib29sIGlzVW5zaWduZWQpOwogCi0gICAgICAgIC8qIFRoaXMgZnVuY3Rp
b24gaXMgZGVwcmVjYXRlZC4gKi8KLSAgICAgICAgdm9pZCBlbWl0R2V0SklUU3R1YkFyZyh1bnNp
Z25lZCBhcmd1bWVudE51bWJlciwgUmVnaXN0ZXJJRCBkc3QpOwotCiAgICAgICAgIHZvaWQgZW1p
dEluaXRSZWdpc3Rlcih1bnNpZ25lZCBkc3QpOwogCiAgICAgICAgIHZvaWQgZW1pdFB1dFRvQ2Fs
bEZyYW1lSGVhZGVyKFJlZ2lzdGVySUQgZnJvbSwgSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyRW50
cnkpOwpAQCAtODQ1LDYgKzg0NSw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVt
aXRQdXRJbW1lZGlhdGVUb0NhbGxGcmFtZUhlYWRlcih2b2lkKiB2YWx1ZSwgSlNTdGFjazo6Q2Fs
bEZyYW1lSGVhZGVyRW50cnkpOwogICAgICAgICB2b2lkIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVh
ZGVyUHRyKEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlckVudHJ5LCBSZWdpc3RlcklEIHRvLCBSZWdp
c3RlcklEIGZyb20gPSBjYWxsRnJhbWVSZWdpc3Rlcik7CiAgICAgICAgIHZvaWQgZW1pdEdldEZy
b21DYWxsRnJhbWVIZWFkZXIzMihKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJFbnRyeSwgUmVnaXN0
ZXJJRCB0bywgUmVnaXN0ZXJJRCBmcm9tID0gY2FsbEZyYW1lUmVnaXN0ZXIpOworI2lmIFVTRShK
U1ZBTFVFNjQpCisgICAgICAgIHZvaWQgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXI2NChKU1N0
YWNrOjpDYWxsRnJhbWVIZWFkZXJFbnRyeSwgUmVnaXN0ZXJJRCB0bywgUmVnaXN0ZXJJRCBmcm9t
ID0gY2FsbEZyYW1lUmVnaXN0ZXIpOworI2VuZGlmCiAKICAgICAgICAgSlNWYWx1ZSBnZXRDb25z
dGFudE9wZXJhbmQodW5zaWduZWQgc3JjKTsKICAgICAgICAgYm9vbCBpc09wZXJhbmRDb25zdGFu
dEltbWVkaWF0ZUludCh1bnNpZ25lZCBzcmMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRBcml0aG1ldGljLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCShyZXZpc2lvbiAxMzE4NTApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDks
OCArMjA5LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmVnYXRlKEluc3RydWN0aW9uKiBjdQogICAg
IHNyY05vdEludC5saW5rKHRoaXMpOwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbWVkaWF0
ZU51bWJlcihyZWdUMCk7CiAKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIocmVpbnRlcnByZXRfY2Fz
dDx2b2lkKj4oMHg4MDAwMDAwMDAwMDAwMDAwdWxsKSksIHJlZ1QxKTsKLSAgICB4b3JQdHIocmVn
VDEsIHJlZ1QwKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW02NCgoaW50NjRfdCkweDgwMDAwMDAwMDAw
MDAwMDB1bGwpLCByZWdUMSk7CisgICAgeG9yNjQocmVnVDEsIHJlZ1QwKTsKIAogICAgIGVuZC5s
aW5rKHRoaXMpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKQEAgLTIyNCw3ICsy
MjQsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmVnYXRlKEluc3RydWN0aW9uCiAgICAgbGlu
a1Nsb3dDYXNlKGl0ZXIpOyAvLyBkb3VibGUgY2hlY2sKIAogICAgIEpJVFN0dWJDYWxsIHN0dWJD
YWxsKHRoaXMsIGN0aV9vcF9uZWdhdGUpOwotICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KHJlZ1Qx
LCByZWdUMCk7CisgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQocmVnVDApOwogICAgIHN0dWJDYWxs
LmNhbGwoZHN0KTsKIH0KIApAQCAtMjc5LDggKzI3OSw4IEBAIHZvaWQgSklUOjplbWl0X29wX3Jz
aGlmdChJbnN0cnVjdGlvbiogY3UKICAgICAgICAgICAgIEp1bXAgbGhzSXNJbnQgPSBlbWl0SnVt
cElmSW1tZWRpYXRlSW50ZWdlcihyZWdUMCk7CiAgICAgICAgICAgICAvLyBzdXBwb3J0c0Zsb2F0
aW5nUG9pbnQoKSAmJiBVU0UoSlNWQUxVRTY0KSA9PiAzIFNsb3dDYXNlcwogICAgICAgICAgICAg
YWRkU2xvd0Nhc2UoZW1pdEp1bXBJZk5vdEltbWVkaWF0ZU51bWJlcihyZWdUMCkpOwotICAgICAg
ICAgICAgYWRkUHRyKHRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgcmVnVDApOwotICAgICAgICAgICAg
bW92ZVB0clRvRG91YmxlKHJlZ1QwLCBmcFJlZ1QwKTsKKyAgICAgICAgICAgIGFkZDY0KHRhZ1R5
cGVOdW1iZXJSZWdpc3RlciwgcmVnVDApOworICAgICAgICAgICAgbW92ZTY0VG9Eb3VibGUocmVn
VDAsIGZwUmVnVDApOwogICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVHJ1bmNhdGVEb3Vi
bGVUb0ludDMyKGZwUmVnVDAsIHJlZ1QwKSk7CiAgICAgICAgICAgICBsaHNJc0ludC5saW5rKHRo
aXMpOwogICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tZWRpYXRlSW50ZWdlcihy
ZWdUMik7CkBAIC0zNzcsOCArMzc3LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3Vyc2hpZnQo
SW5zdHJ1Y3RpbwogICAgICAgICBpZiAoc3VwcG9ydHNGbG9hdGluZ1BvaW50VHJ1bmNhdGUoKSkg
ewogICAgICAgICAgICAgSnVtcExpc3QgZmFpbHVyZXM7CiAgICAgICAgICAgICBmYWlsdXJlcy5h
cHBlbmQoZW1pdEp1bXBJZk5vdEltbWVkaWF0ZU51bWJlcihyZWdUMCkpOyAvLyBvcDEgaXMgbm90
IGEgZG91YmxlCi0gICAgICAgICAgICBhZGRQdHIodGFnVHlwZU51bWJlclJlZ2lzdGVyLCByZWdU
MCk7Ci0gICAgICAgICAgICBtb3ZlUHRyVG9Eb3VibGUocmVnVDAsIGZwUmVnVDApOworICAgICAg
ICAgICAgYWRkNjQodGFnVHlwZU51bWJlclJlZ2lzdGVyLCByZWdUMCk7CisgICAgICAgICAgICBt
b3ZlNjRUb0RvdWJsZShyZWdUMCwgZnBSZWdUMCk7CiAgICAgICAgICAgICBmYWlsdXJlcy5hcHBl
bmQoYnJhbmNoVHJ1bmNhdGVEb3VibGVUb0ludDMyKGZwUmVnVDAsIHJlZ1QwKSk7CiAgICAgICAg
ICAgICBpZiAoc2hpZnQpCiAgICAgICAgICAgICAgICAgdXJzaGlmdDMyKEltbTMyKHNoaWZ0ICYg
MHgxZiksIHJlZ1QwKTsKQEAgLTM5OSw4ICszOTksOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
dXJzaGlmdChJbnN0cnVjdGlvCiAgICAgICAgICAgICBpZiAoc3VwcG9ydHNGbG9hdGluZ1BvaW50
VHJ1bmNhdGUoKSkgewogICAgICAgICAgICAgICAgIEp1bXBMaXN0IGZhaWx1cmVzOwogICAgICAg
ICAgICAgICAgIGZhaWx1cmVzLmFwcGVuZChlbWl0SnVtcElmTm90SW1tZWRpYXRlTnVtYmVyKHJl
Z1QwKSk7IC8vIG9wMSBpcyBub3QgYSBkb3VibGUKLSAgICAgICAgICAgICAgICBhZGRQdHIodGFn
VHlwZU51bWJlclJlZ2lzdGVyLCByZWdUMCk7Ci0gICAgICAgICAgICAgICAgbW92ZVB0clRvRG91
YmxlKHJlZ1QwLCBmcFJlZ1QwKTsKKyAgICAgICAgICAgICAgICBhZGQ2NCh0YWdUeXBlTnVtYmVy
UmVnaXN0ZXIsIHJlZ1QwKTsKKyAgICAgICAgICAgICAgICBtb3ZlNjRUb0RvdWJsZShyZWdUMCwg
ZnBSZWdUMCk7CiAgICAgICAgICAgICAgICAgZmFpbHVyZXMuYXBwZW5kKGJyYW5jaFRydW5jYXRl
RG91YmxlVG9JbnQzMihmcFJlZ1QwLCByZWdUMCkpOwogICAgICAgICAgICAgICAgIGZhaWx1cmVz
LmFwcGVuZChlbWl0SnVtcElmTm90SW1tZWRpYXRlSW50ZWdlcihyZWdUMSkpOyAvLyBvcDIgaXMg
bm90IGFuIGludAogICAgICAgICAgICAgICAgIGVtaXRGYXN0QXJpdGhJbW1Ub0ludChyZWdUMSk7
CkBAIC00OTksOCArNDk5LDggQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93KHVu
c2lnbgogCiAgICAgICAgIGlmIChzdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSkgewogICAgICAgICAg
ICAgSnVtcCBmYWlsMSA9IGVtaXRKdW1wSWZOb3RJbW1lZGlhdGVOdW1iZXIocmVnVDApOwotICAg
ICAgICAgICAgYWRkUHRyKHRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgcmVnVDApOwotICAgICAgICAg
ICAgbW92ZVB0clRvRG91YmxlKHJlZ1QwLCBmcFJlZ1QwKTsKKyAgICAgICAgICAgIGFkZDY0KHRh
Z1R5cGVOdW1iZXJSZWdpc3RlciwgcmVnVDApOworICAgICAgICAgICAgbW92ZTY0VG9Eb3VibGUo
cmVnVDAsIGZwUmVnVDApOwogCiAgICAgICAgICAgICBpbnQzMl90IG9wMmltbSA9IGdldENvbnN0
YW50T3BlcmFuZChvcDIpLmFzSW50MzIoKTsKIApAQCAtNTI1LDggKzUyNSw4IEBAIHZvaWQgSklU
OjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyh1bnNpZ24KIAogICAgICAgICBpZiAoc3VwcG9ydHNG
bG9hdGluZ1BvaW50KCkpIHsKICAgICAgICAgICAgIEp1bXAgZmFpbDEgPSBlbWl0SnVtcElmTm90
SW1tZWRpYXRlTnVtYmVyKHJlZ1QxKTsKLSAgICAgICAgICAgIGFkZFB0cih0YWdUeXBlTnVtYmVy
UmVnaXN0ZXIsIHJlZ1QxKTsKLSAgICAgICAgICAgIG1vdmVQdHJUb0RvdWJsZShyZWdUMSwgZnBS
ZWdUMSk7CisgICAgICAgICAgICBhZGQ2NCh0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHJlZ1QxKTsK
KyAgICAgICAgICAgIG1vdmU2NFRvRG91YmxlKHJlZ1QxLCBmcFJlZ1QxKTsKIAogICAgICAgICAg
ICAgaW50MzJfdCBvcDFpbW0gPSBnZXRDb25zdGFudE9wZXJhbmQob3AxKS5hc0ludDMyKCk7CiAK
QEAgLTU1MiwxMCArNTUyLDEwIEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyh1
bnNpZ24KICAgICAgICAgICAgIEp1bXAgZmFpbDEgPSBlbWl0SnVtcElmTm90SW1tZWRpYXRlTnVt
YmVyKHJlZ1QwKTsKICAgICAgICAgICAgIEp1bXAgZmFpbDIgPSBlbWl0SnVtcElmTm90SW1tZWRp
YXRlTnVtYmVyKHJlZ1QxKTsKICAgICAgICAgICAgIEp1bXAgZmFpbDMgPSBlbWl0SnVtcElmSW1t
ZWRpYXRlSW50ZWdlcihyZWdUMSk7Ci0gICAgICAgICAgICBhZGRQdHIodGFnVHlwZU51bWJlclJl
Z2lzdGVyLCByZWdUMCk7Ci0gICAgICAgICAgICBhZGRQdHIodGFnVHlwZU51bWJlclJlZ2lzdGVy
LCByZWdUMSk7Ci0gICAgICAgICAgICBtb3ZlUHRyVG9Eb3VibGUocmVnVDAsIGZwUmVnVDApOwot
ICAgICAgICAgICAgbW92ZVB0clRvRG91YmxlKHJlZ1QxLCBmcFJlZ1QxKTsKKyAgICAgICAgICAg
IGFkZDY0KHRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgcmVnVDApOworICAgICAgICAgICAgYWRkNjQo
dGFnVHlwZU51bWJlclJlZ2lzdGVyLCByZWdUMSk7CisgICAgICAgICAgICBtb3ZlNjRUb0RvdWJs
ZShyZWdUMCwgZnBSZWdUMCk7CisgICAgICAgICAgICBtb3ZlNjRUb0RvdWJsZShyZWdUMSwgZnBS
ZWdUMSk7CiAKICAgICAgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaERvdWJsZShjb25k
aXRpb24sIGZwUmVnVDAsIGZwUmVnVDEpLCB0YXJnZXQpOwogCkBAIC01ODUsMTkgKzU4NSwxOSBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9iaXRhbmQoSW5zdHJ1Y3Rpb24qIGN1CiAgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByZWdUMCk7CiAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEltbWVkaWF0ZUludGVnZXIocmVnVDApOwogICAgICAgICBpbnQzMl90IGltbSA9IGdldENv
bnN0YW50T3BlcmFuZEltbWVkaWF0ZUludChvcDEpOwotICAgICAgICBhbmRQdHIoSW1tMzIoaW1t
KSwgcmVnVDApOworICAgICAgICBhbmQ2NChJbW0zMihpbW0pLCByZWdUMCk7CiAgICAgICAgIGlm
IChpbW0gPj0gMCkKICAgICAgICAgICAgIGVtaXRGYXN0QXJpdGhJbnRUb0ltbU5vQ2hlY2socmVn
VDAsIHJlZ1QwKTsKICAgICB9IGVsc2UgaWYgKGlzT3BlcmFuZENvbnN0YW50SW1tZWRpYXRlSW50
KG9wMikpIHsKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QwKTsKICAg
ICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tZWRpYXRlSW50ZWdlcihyZWdUMCk7CiAgICAg
ICAgIGludDMyX3QgaW1tID0gZ2V0Q29uc3RhbnRPcGVyYW5kSW1tZWRpYXRlSW50KG9wMik7Ci0g
ICAgICAgIGFuZFB0cihJbW0zMihpbW0pLCByZWdUMCk7CisgICAgICAgIGFuZDY0KEltbTMyKGlt
bSksIHJlZ1QwKTsKICAgICAgICAgaWYgKGltbSA+PSAwKQogICAgICAgICAgICAgZW1pdEZhc3RB
cml0aEludFRvSW1tTm9DaGVjayhyZWdUMCwgcmVnVDApOwogICAgIH0gZWxzZSB7CiAgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKG9wMSwgcmVnVDAsIG9wMiwgcmVnVDEpOwotICAgICAg
ICBhbmRQdHIocmVnVDEsIHJlZ1QwKTsKKyAgICAgICAgYW5kNjQocmVnVDEsIHJlZ1QwKTsKICAg
ICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tZWRpYXRlSW50ZWdlcihyZWdUMCk7CiAgICAg
fQogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0KTsKQEAgLTg4NywxNiArODg3LDE2
IEBAIHZvaWQgSklUOjpjb21waWxlQmluYXJ5QXJpdGhPcFNsb3dDYXNlKE8KICAgICAgICAgICAg
IGVtaXRKdW1wSWZOb3RJbW1lZGlhdGVOdW1iZXIocmVnVDApLmxpbmtUbyhzdHViRnVuY3Rpb25D
YWxsLCB0aGlzKTsKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QxKTsK
ICAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUocmVnVDEsIGZwUmVnVDEpOwotICAgICAgICBh
ZGRQdHIodGFnVHlwZU51bWJlclJlZ2lzdGVyLCByZWdUMCk7Ci0gICAgICAgIG1vdmVQdHJUb0Rv
dWJsZShyZWdUMCwgZnBSZWdUMik7CisgICAgICAgIGFkZDY0KHRhZ1R5cGVOdW1iZXJSZWdpc3Rl
ciwgcmVnVDApOworICAgICAgICBtb3ZlNjRUb0RvdWJsZShyZWdUMCwgZnBSZWdUMik7CiAgICAg
fSBlbHNlIGlmIChvcDJIYXNJbW1lZGlhdGVJbnRGYXN0Q2FzZSkgewogICAgICAgICBub3RJbW0x
LmxpbmsodGhpcyk7CiAgICAgICAgIGlmICghdHlwZXMuZmlyc3QoKS5kZWZpbml0ZWx5SXNOdW1i
ZXIoKSkKICAgICAgICAgICAgIGVtaXRKdW1wSWZOb3RJbW1lZGlhdGVOdW1iZXIocmVnVDApLmxp
bmtUbyhzdHViRnVuY3Rpb25DYWxsLCB0aGlzKTsKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihvcDIsIHJlZ1QxKTsKICAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUocmVnVDEsIGZw
UmVnVDEpOwotICAgICAgICBhZGRQdHIodGFnVHlwZU51bWJlclJlZ2lzdGVyLCByZWdUMCk7Ci0g
ICAgICAgIG1vdmVQdHJUb0RvdWJsZShyZWdUMCwgZnBSZWdUMik7CisgICAgICAgIGFkZDY0KHRh
Z1R5cGVOdW1iZXJSZWdpc3RlciwgcmVnVDApOworICAgICAgICBtb3ZlNjRUb0RvdWJsZShyZWdU
MCwgZnBSZWdUMik7CiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gaWYgd2UgZ2V0IGhlcmUsIGVh
eCBpcyBub3QgYW4gaW50MzIsIGVkeCBub3QgeWV0IGNoZWNrZWQuCiAgICAgICAgIG5vdEltbTEu
bGluayh0aGlzKTsKQEAgLTkwNCw4ICs5MDQsOCBAQCB2b2lkIEpJVDo6Y29tcGlsZUJpbmFyeUFy
aXRoT3BTbG93Q2FzZShPCiAgICAgICAgICAgICBlbWl0SnVtcElmTm90SW1tZWRpYXRlTnVtYmVy
KHJlZ1QwKS5saW5rVG8oc3R1YkZ1bmN0aW9uQ2FsbCwgdGhpcyk7CiAgICAgICAgIGlmICghdHlw
ZXMuc2Vjb25kKCkuZGVmaW5pdGVseUlzTnVtYmVyKCkpCiAgICAgICAgICAgICBlbWl0SnVtcElm
Tm90SW1tZWRpYXRlTnVtYmVyKHJlZ1QxKS5saW5rVG8oc3R1YkZ1bmN0aW9uQ2FsbCwgdGhpcyk7
Ci0gICAgICAgIGFkZFB0cih0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHJlZ1QwKTsKLSAgICAgICAg
bW92ZVB0clRvRG91YmxlKHJlZ1QwLCBmcFJlZ1QxKTsKKyAgICAgICAgYWRkNjQodGFnVHlwZU51
bWJlclJlZ2lzdGVyLCByZWdUMCk7CisgICAgICAgIG1vdmU2NFRvRG91YmxlKHJlZ1QwLCBmcFJl
Z1QxKTsKICAgICAgICAgSnVtcCBvcDJpc0RvdWJsZSA9IGVtaXRKdW1wSWZOb3RJbW1lZGlhdGVJ
bnRlZ2VyKHJlZ1QxKTsKICAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUocmVnVDEsIGZwUmVn
VDIpOwogICAgICAgICBKdW1wIG9wMndhc0ludGVnZXIgPSBqdW1wKCk7CkBAIC05MTYsOCArOTE2
LDggQEAgdm9pZCBKSVQ6OmNvbXBpbGVCaW5hcnlBcml0aE9wU2xvd0Nhc2UoTwogICAgICAgICAg
ICAgZW1pdEp1bXBJZk5vdEltbWVkaWF0ZU51bWJlcihyZWdUMSkubGlua1RvKHN0dWJGdW5jdGlv
bkNhbGwsIHRoaXMpOwogICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShyZWdUMCwgZnBSZWdU
MSk7CiAgICAgICAgIG9wMmlzRG91YmxlLmxpbmsodGhpcyk7Ci0gICAgICAgIGFkZFB0cih0YWdU
eXBlTnVtYmVyUmVnaXN0ZXIsIHJlZ1QxKTsKLSAgICAgICAgbW92ZVB0clRvRG91YmxlKHJlZ1Qx
LCBmcFJlZ1QyKTsKKyAgICAgICAgYWRkNjQodGFnVHlwZU51bWJlclJlZ2lzdGVyLCByZWdUMSk7
CisgICAgICAgIG1vdmU2NFRvRG91YmxlKHJlZ1QxLCBmcFJlZ1QyKTsKICAgICAgICAgb3Ayd2Fz
SW50ZWdlci5saW5rKHRoaXMpOwogICAgIH0KIApAQCAtOTMxLDggKzkzMSw4IEBAIHZvaWQgSklU
Ojpjb21waWxlQmluYXJ5QXJpdGhPcFNsb3dDYXNlKE8KICAgICAgICAgQVNTRVJUKG9wY29kZUlE
ID09IG9wX2Rpdik7CiAgICAgICAgIGRpdkRvdWJsZShmcFJlZ1QyLCBmcFJlZ1QxKTsKICAgICB9
Ci0gICAgbW92ZURvdWJsZVRvUHRyKGZwUmVnVDEsIHJlZ1QwKTsKLSAgICBzdWJQdHIodGFnVHlw
ZU51bWJlclJlZ2lzdGVyLCByZWdUMCk7CisgICAgbW92ZURvdWJsZVRvNjQoZnBSZWdUMSwgcmVn
VDApOworICAgIHN1YjY0KHRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgcmVnVDApOwogICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZWdUMCk7CiAKICAgICBlbmQubGluayh0aGlzKTsK
QEAgLTEwNDEsOCArMTA0MSw4IEBAIHZvaWQgSklUOjplbWl0X29wX2RpdihJbnN0cnVjdGlvbiog
Y3VycmUKIAogICAgIGlmIChpc09wZXJhbmRDb25zdGFudEltbWVkaWF0ZURvdWJsZShvcDEpKSB7
CiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByZWdUMCk7Ci0gICAgICAgIGFk
ZFB0cih0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHJlZ1QwKTsKLSAgICAgICAgbW92ZVB0clRvRG91
YmxlKHJlZ1QwLCBmcFJlZ1QwKTsKKyAgICAgICAgYWRkNjQodGFnVHlwZU51bWJlclJlZ2lzdGVy
LCByZWdUMCk7CisgICAgICAgIG1vdmU2NFRvRG91YmxlKHJlZ1QwLCBmcFJlZ1QwKTsKICAgICB9
IGVsc2UgaWYgKGlzT3BlcmFuZENvbnN0YW50SW1tZWRpYXRlSW50KG9wMSkpIHsKICAgICAgICAg
ZW1pdExvYWRJbnQzMlRvRG91YmxlKG9wMSwgZnBSZWdUMCk7CiAgICAgfSBlbHNlIHsKQEAgLTEw
NTMsMTUgKzEwNTMsMTUgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGl2KEluc3RydWN0aW9uKiBjdXJy
ZQogICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShyZWdUMCwgZnBSZWdUMCk7CiAgICAgICAg
IEp1bXAgc2tpcERvdWJsZUxvYWQgPSBqdW1wKCk7CiAgICAgICAgIG5vdEludC5saW5rKHRoaXMp
OwotICAgICAgICBhZGRQdHIodGFnVHlwZU51bWJlclJlZ2lzdGVyLCByZWdUMCk7Ci0gICAgICAg
IG1vdmVQdHJUb0RvdWJsZShyZWdUMCwgZnBSZWdUMCk7CisgICAgICAgIGFkZDY0KHRhZ1R5cGVO
dW1iZXJSZWdpc3RlciwgcmVnVDApOworICAgICAgICBtb3ZlNjRUb0RvdWJsZShyZWdUMCwgZnBS
ZWdUMCk7CiAgICAgICAgIHNraXBEb3VibGVMb2FkLmxpbmsodGhpcyk7CiAgICAgfQogCiAgICAg
aWYgKGlzT3BlcmFuZENvbnN0YW50SW1tZWRpYXRlRG91YmxlKG9wMikpIHsKICAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJlZ1QxKTsKLSAgICAgICAgYWRkUHRyKHRhZ1R5cGVO
dW1iZXJSZWdpc3RlciwgcmVnVDEpOwotICAgICAgICBtb3ZlUHRyVG9Eb3VibGUocmVnVDEsIGZw
UmVnVDEpOworICAgICAgICBhZGQ2NCh0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHJlZ1QxKTsKKyAg
ICAgICAgbW92ZTY0VG9Eb3VibGUocmVnVDEsIGZwUmVnVDEpOwogICAgIH0gZWxzZSBpZiAoaXNP
cGVyYW5kQ29uc3RhbnRJbW1lZGlhdGVJbnQob3AyKSkgewogICAgICAgICBlbWl0TG9hZEludDMy
VG9Eb3VibGUob3AyLCBmcFJlZ1QxKTsKICAgICB9IGVsc2UgewpAQCAtMTA3Miw4ICsxMDcyLDgg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGl2KEluc3RydWN0aW9uKiBjdXJyZQogICAgICAgICBjb252
ZXJ0SW50MzJUb0RvdWJsZShyZWdUMSwgZnBSZWdUMSk7CiAgICAgICAgIEp1bXAgc2tpcERvdWJs
ZUxvYWQgPSBqdW1wKCk7CiAgICAgICAgIG5vdEludC5saW5rKHRoaXMpOwotICAgICAgICBhZGRQ
dHIodGFnVHlwZU51bWJlclJlZ2lzdGVyLCByZWdUMSk7Ci0gICAgICAgIG1vdmVQdHJUb0RvdWJs
ZShyZWdUMSwgZnBSZWdUMSk7CisgICAgICAgIGFkZDY0KHRhZ1R5cGVOdW1iZXJSZWdpc3Rlciwg
cmVnVDEpOworICAgICAgICBtb3ZlNjRUb0RvdWJsZShyZWdUMSwgZnBSZWdUMSk7CiAgICAgICAg
IHNraXBEb3VibGVMb2FkLmxpbmsodGhpcyk7CiAgICAgfQogICAgIGRpdkRvdWJsZShmcFJlZ1Qx
LCBmcFJlZ1QwKTsKQEAgLTExMDAsMTMgKzExMDAsMTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGl2
KEluc3RydWN0aW9uKiBjdXJyZQogICAgIEp1bXAgaXNJbnRlZ2VyID0ganVtcCgpOwogICAgIG5v
dEludGVnZXIubGluayh0aGlzKTsKICAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIEFic29sdXRl
QWRkcmVzcygmbV9jb2RlQmxvY2stPmFkZFNwZWNpYWxGYXN0Q2FzZVByb2ZpbGUobV9ieXRlY29k
ZU9mZnNldCktPm1fY291bnRlcikpOwotICAgIG1vdmVEb3VibGVUb1B0cihmcFJlZ1QwLCByZWdU
MCk7Ci0gICAgc3ViUHRyKHRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgcmVnVDApOworICAgIG1vdmVE
b3VibGVUbzY0KGZwUmVnVDAsIHJlZ1QwKTsKKyAgICBzdWI2NCh0YWdUeXBlTnVtYmVyUmVnaXN0
ZXIsIHJlZ1QwKTsKICAgICBpc0ludGVnZXIubGluayh0aGlzKTsKICNlbHNlCiAgICAgLy8gRG91
YmxlIHJlc3VsdC4KLSAgICBtb3ZlRG91YmxlVG9QdHIoZnBSZWdUMCwgcmVnVDApOwotICAgIHN1
YlB0cih0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHJlZ1QwKTsKKyAgICBtb3ZlRG91YmxlVG82NChm
cFJlZ1QwLCByZWdUMCk7CisgICAgc3ViNjQodGFnVHlwZU51bWJlclJlZ2lzdGVyLCByZWdUMCk7
CiAjZW5kaWYKIAogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZWdUMCk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAJKHJldmlzaW9uIDEzMTg1MCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTcyLDcgKzcyLDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVMb2FkVmFyYXJncyhJbnN0cnVjdGlvbgog
CiAgICAgaWYgKGNhbk9wdGltaXplKSB7CiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
YXJndW1lbnRzLCByZWdUMCk7Ci0gICAgICAgIHNsb3dDYXNlLmFwcGVuZChicmFuY2hQdHIoTm90
RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tUHRyKEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpKSkp
OworICAgICAgICBzbG93Q2FzZS5hcHBlbmQoYnJhbmNoNjQoTm90RXF1YWwsIHJlZ1QwLCBUcnVz
dGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSkpKSk7CiAKICAgICAgICAgZW1pdEdl
dEZyb21DYWxsRnJhbWVIZWFkZXIzMihKU1N0YWNrOjpBcmd1bWVudENvdW50LCByZWdUMCk7CiAg
ICAgICAgIHNsb3dDYXNlLmFwcGVuZChicmFuY2gzMihBYm92ZSwgcmVnVDAsIFRydXN0ZWRJbW0z
MihBcmd1bWVudHM6Ok1heEFyZ3VtZW50cyArIDEpKSk7CkBAIC05MSwxOCArOTEsMTggQEAgdm9p
ZCBKSVQ6OmNvbXBpbGVMb2FkVmFyYXJncyhJbnN0cnVjdGlvbgogCiAgICAgICAgIC8vIEluaXRp
YWxpemUgJ3RoaXMnLgogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHRoaXNWYWx1ZSwg
cmVnVDIpOwotICAgICAgICBzdG9yZVB0cihyZWdUMiwgQWRkcmVzcyhyZWdUMSwgQ2FsbEZyYW1l
Ojp0aGlzQXJndW1lbnRPZmZzZXQoKSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVy
KSkpKTsKKyAgICAgICAgc3RvcmU2NChyZWdUMiwgQWRkcmVzcyhyZWdUMSwgQ2FsbEZyYW1lOjp0
aGlzQXJndW1lbnRPZmZzZXQoKSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkp
KTsKIAogICAgICAgICAvLyBDb3B5IGFyZ3VtZW50cy4KICAgICAgICAgbmVnMzIocmVnVDApOwog
ICAgICAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMCwgcmVnVDApOwotICAgICAgICBlbmQuYXBw
ZW5kKGJyYW5jaEFkZFB0cihaZXJvLCBUcnVzdGVkSW1tMzIoMSksIHJlZ1QwKSk7CisgICAgICAg
IGVuZC5hcHBlbmQoYnJhbmNoQWRkNjQoWmVybywgVHJ1c3RlZEltbTMyKDEpLCByZWdUMCkpOwog
ICAgICAgICAvLyByZWdUMDogLWFyZ3VtZW50Q291bnQKIAogICAgICAgICBMYWJlbCBjb3B5TG9v
cCA9IGxhYmVsKCk7Ci0gICAgICAgIGxvYWRQdHIoQmFzZUluZGV4KGNhbGxGcmFtZVJlZ2lzdGVy
LCByZWdUMCwgVGltZXNFaWdodCwgQ2FsbEZyYW1lOjp0aGlzQXJndW1lbnRPZmZzZXQoKSAqIHN0
YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkpLCByZWdUMik7Ci0gICAgICAgIHN0b3Jl
UHRyKHJlZ1QyLCBCYXNlSW5kZXgocmVnVDEsIHJlZ1QwLCBUaW1lc0VpZ2h0LCBDYWxsRnJhbWU6
OnRoaXNBcmd1bWVudE9mZnNldCgpICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIp
KSkpOwotICAgICAgICBicmFuY2hBZGRQdHIoTm9uWmVybywgVHJ1c3RlZEltbTMyKDEpLCByZWdU
MCkubGlua1RvKGNvcHlMb29wLCB0aGlzKTsKKyAgICAgICAgbG9hZDY0KEJhc2VJbmRleChjYWxs
RnJhbWVSZWdpc3RlciwgcmVnVDAsIFRpbWVzRWlnaHQsIENhbGxGcmFtZTo6dGhpc0FyZ3VtZW50
T2Zmc2V0KCkgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpKSwgcmVnVDIpOwor
ICAgICAgICBzdG9yZTY0KHJlZ1QyLCBCYXNlSW5kZXgocmVnVDEsIHJlZ1QwLCBUaW1lc0VpZ2h0
LCBDYWxsRnJhbWU6OnRoaXNBcmd1bWVudE9mZnNldCgpICogc3RhdGljX2Nhc3Q8aW50PihzaXpl
b2YoUmVnaXN0ZXIpKSkpOworICAgICAgICBicmFuY2hBZGQ2NChOb25aZXJvLCBUcnVzdGVkSW1t
MzIoMSksIHJlZ1QwKS5saW5rVG8oY29weUxvb3AsIHRoaXMpOwogCiAgICAgICAgIGVuZC5hcHBl
bmQoanVtcCgpKTsKICAgICB9CkBAIC0xMjQsNyArMTI0LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVD
YWxsRXZhbCgpCiB7CiAgICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wX2NhbGxf
ZXZhbCk7IC8vIEluaXRpYWxpemVzIFNjb3BlQ2hhaW47IFJldHVyblBDOyBDb2RlQmxvY2suCiAg
ICAgc3R1YkNhbGwuY2FsbCgpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaFB0cihFcXVhbCwgcmVn
VDAsIFRydXN0ZWRJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSkpKSk7CisgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5j
b2RlKEpTVmFsdWUoKSkpKSk7CiAgICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoSlNT
dGFjazo6Q2FsbGVyRnJhbWUsIGNhbGxGcmFtZVJlZ2lzdGVyKTsKIAogICAgIHNhbXBsZUNvZGVC
bG9jayhtX2NvZGVCbG9jayk7CkBAIC0xMzQsNyArMTM0LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVD
YWxsRXZhbFNsb3dDYXNlKFZlY3RvcgogewogICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKIAotICAg
IGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKEpTU3RhY2s6OkNhbGxlZSwgcmVnVDApOwor
ICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyNjQoSlNTdGFjazo6Q2FsbGVlLCByZWdUMCk7
CiAgICAgZW1pdE5ha2VkQ2FsbChtX2dsb2JhbERhdGEtPmppdFN0dWJzLT5jdGlWaXJ0dWFsQ2Fs
bCgpKTsKIAogICAgIHNhbXBsZUNvZGVCbG9jayhtX2NvZGVCbG9jayk7CkBAIC0xNzksOCArMTc5
LDggQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoT3Bjb2RlSUQgb3Bjb2RlSQogICAgIHN0b3Jl
MzIoVHJ1c3RlZEltbTMyKGluc3RydWN0aW9uIC0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygp
LmJlZ2luKCkpLCBBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCBKU1N0YWNrOjpBcmd1bWVudENv
dW50ICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSArIE9CSkVDVF9PRkZTRVRP
RihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSkpOwogICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoY2FsbGVlLCByZWdUMCk7IC8vIHJlZ1QwIGhvbGRzIGNhbGxlZS4KIAotICAg
IHN0b3JlUHRyKGNhbGxGcmFtZVJlZ2lzdGVyLCBBZGRyZXNzKHJlZ1QxLCBKU1N0YWNrOjpDYWxs
ZXJGcmFtZSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkpKTsKLSAgICBzdG9y
ZVB0cihyZWdUMCwgQWRkcmVzcyhyZWdUMSwgSlNTdGFjazo6Q2FsbGVlICogc3RhdGljX2Nhc3Q8
aW50PihzaXplb2YoUmVnaXN0ZXIpKSkpOworICAgIHN0b3JlNjQoY2FsbEZyYW1lUmVnaXN0ZXIs
IEFkZHJlc3MocmVnVDEsIEpTU3RhY2s6OkNhbGxlckZyYW1lICogc3RhdGljX2Nhc3Q8aW50Pihz
aXplb2YoUmVnaXN0ZXIpKSkpOworICAgIHN0b3JlNjQocmVnVDAsIEFkZHJlc3MocmVnVDEsIEpT
U3RhY2s6OkNhbGxlZSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkpKTsKICAg
ICBtb3ZlKHJlZ1QxLCBjYWxsRnJhbWVSZWdpc3Rlcik7CiAKICAgICBpZiAob3Bjb2RlSUQgPT0g
b3BfY2FsbF9ldmFsKSB7CkBAIC0xOTAsNyArMTkwLDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENh
bGwoT3Bjb2RlSUQgb3Bjb2RlSQogCiAgICAgRGF0YUxhYmVsUHRyIGFkZHJlc3NPZkxpbmtlZEZ1
bmN0aW9uQ2hlY2s7CiAgICAgQkVHSU5fVU5JTlRFUlJVUFRFRF9TRVFVRU5DRShzZXF1ZW5jZU9w
Q2FsbCk7Ci0gICAgSnVtcCBzbG93Q2FzZSA9IGJyYW5jaFB0cldpdGhQYXRjaChOb3RFcXVhbCwg
cmVnVDAsIGFkZHJlc3NPZkxpbmtlZEZ1bmN0aW9uQ2hlY2ssIFRydXN0ZWRJbW1QdHIoSlNWYWx1
ZTo6ZW5jb2RlKEpTVmFsdWUoKSkpKTsKKyAgICBKdW1wIHNsb3dDYXNlID0gYnJhbmNoUHRyV2l0
aFBhdGNoKE5vdEVxdWFsLCByZWdUMCwgYWRkcmVzc09mTGlua2VkRnVuY3Rpb25DaGVjaywgVHJ1
c3RlZEltbVB0cigwKSk7CiAgICAgRU5EX1VOSU5URVJSVVBURURfU0VRVUVOQ0Uoc2VxdWVuY2VP
cENhbGwpOwogICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlKTsKIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVNZXRob2RzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVNZXRob2RzLmgJKHJldmlzaW9uIDEzMTg1MCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lTWV0aG9kcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zMSwxNCArMzEsNiBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotLyogRGVwcmVjYXRl
ZDogUGxlYXNlIHVzZSBKSVRTdHViQ2FsbCBpbnN0ZWFkLiAqLwotCi1BTFdBWVNfSU5MSU5FIHZv
aWQgSklUOjplbWl0R2V0SklUU3R1YkFyZyh1bnNpZ25lZCBhcmd1bWVudE51bWJlciwgUmVnaXN0
ZXJJRCBkc3QpCi17Ci0gICAgdW5zaWduZWQgYXJndW1lbnRTdGFja09mZnNldCA9IChhcmd1bWVu
dE51bWJlciAqIChzaXplb2YoSlNWYWx1ZSkgLyBzaXplb2Yodm9pZCopKSkgKyBKSVRTVEFDS0ZS
QU1FX0FSR1NfSU5ERVg7Ci0gICAgcGVlayhkc3QsIGFyZ3VtZW50U3RhY2tPZmZzZXQpOwotfQot
CiBBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudEltbWVkaWF0ZURvdWJs
ZSh1bnNpZ25lZCBzcmMpCiB7CiAgICAgcmV0dXJuIG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVn
aXN0ZXJJbmRleChzcmMpICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzRG91YmxlKCk7CkBA
IC01MCwyMyArNDIsMzMgQEAgQUxXQVlTX0lOTElORSBKU1ZhbHVlIEpJVDo6Z2V0Q29uc3RhbnRP
cAogICAgIHJldHVybiBtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKIH0KIAotQUxXQVlT
X0lOTElORSB2b2lkIEpJVDo6ZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lzdGVySUQgZnJv
bSwgSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyRW50cnkgZW50cnkpCi17Ci0gICAgc3RvcmVQdHIo
ZnJvbSwgcGF5bG9hZEZvcihlbnRyeSwgY2FsbEZyYW1lUmVnaXN0ZXIpKTsKLX0KLQogQUxXQVlT
X0lOTElORSB2b2lkIEpJVDo6ZW1pdFB1dENlbGxUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3RlcklE
IGZyb20sIEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlckVudHJ5IGVudHJ5KQogewogI2lmIFVTRShK
U1ZBTFVFMzJfNjQpCiAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyks
IHRhZ0ZvcihlbnRyeSwgY2FsbEZyYW1lUmVnaXN0ZXIpKTsKKyAgICBzdG9yZTMyKGZyb20sIHBh
eWxvYWRGb3IoZW50cnksIGNhbGxGcmFtZVJlZ2lzdGVyKSk7CisjZWxzZQorICAgIHN0b3JlNjQo
ZnJvbSwgYWRkcmVzc0ZvcihlbnRyeSwgY2FsbEZyYW1lUmVnaXN0ZXIpKTsKICNlbmRpZgotICAg
IHN0b3JlUHRyKGZyb20sIHBheWxvYWRGb3IoZW50cnksIGNhbGxGcmFtZVJlZ2lzdGVyKSk7CiB9
CiAKIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRJbnRUb0NhbGxGcmFtZUhlYWRlcihS
ZWdpc3RlcklEIGZyb20sIEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlckVudHJ5IGVudHJ5KQogewor
I2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoSW50MzJUYWcp
LCBpbnRUYWdGb3IoZW50cnksIGNhbGxGcmFtZVJlZ2lzdGVyKSk7CiAgICAgc3RvcmUzMihmcm9t
LCBpbnRQYXlsb2FkRm9yKGVudHJ5LCBjYWxsRnJhbWVSZWdpc3RlcikpOworI2Vsc2UKKyAgICBz
dG9yZTY0KGZyb20sIGFkZHJlc3NGb3IoZW50cnksIGNhbGxGcmFtZVJlZ2lzdGVyKSk7CisjZW5k
aWYKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVy
KFJlZ2lzdGVySUQgZnJvbSwgSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyRW50cnkgZW50cnkpCit7
CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICBzdG9yZVB0cihmcm9tLCBwYXlsb2FkRm9yKGVu
dHJ5LCBjYWxsRnJhbWVSZWdpc3RlcikpOworI2Vsc2UKKyAgICBzdG9yZTY0KGZyb20sIGFkZHJl
c3NGb3IoZW50cnksIGNhbGxGcmFtZVJlZ2lzdGVyKSk7CisjZW5kaWYKIH0KIAogQUxXQVlTX0lO
TElORSB2b2lkIEpJVDo6ZW1pdFB1dEltbWVkaWF0ZVRvQ2FsbEZyYW1lSGVhZGVyKHZvaWQqIHZh
bHVlLCBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJFbnRyeSBlbnRyeSkKQEAgLTgyLDYgKzg0LDIy
IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRGcm9tQ2FsbEYKICNlbmRpZgogfQog
CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlcjMyKEpT
U3RhY2s6OkNhbGxGcmFtZUhlYWRlckVudHJ5IGVudHJ5LCBSZWdpc3RlcklEIHRvLCBSZWdpc3Rl
cklEIGZyb20pCit7CisgICAgbG9hZDMyKEFkZHJlc3MoZnJvbSwgZW50cnkgKiBzaXplb2YoUmVn
aXN0ZXIpKSwgdG8pOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAga2lsbExhc3RSZXN1bHRSZWdp
c3RlcigpOworI2VuZGlmCit9CisKKyNpZiBVU0UoSlNWQUxVRTY0KQorQUxXQVlTX0lOTElORSB2
b2lkIEpJVDo6ZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXI2NChKU1N0YWNrOjpDYWxsRnJhbWVI
ZWFkZXJFbnRyeSBlbnRyeSwgUmVnaXN0ZXJJRCB0bywgUmVnaXN0ZXJJRCBmcm9tKQoreworICAg
IGxvYWQ2NChBZGRyZXNzKGZyb20sIGVudHJ5ICogc2l6ZW9mKFJlZ2lzdGVyKSksIHRvKTsKKyAg
ICBraWxsTGFzdFJlc3VsdFJlZ2lzdGVyKCk7Cit9CisjZW5kaWYKKwogQUxXQVlTX0lOTElORSB2
b2lkIEpJVDo6ZW1pdExvYWRDaGFyYWN0ZXJTdHJpbmcoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVy
SUQgZHN0LCBKdW1wTGlzdCYgZmFpbHVyZXMpCiB7CiAgICAgZmFpbHVyZXMuYXBwZW5kKGJyYW5j
aFB0cihOb3RFcXVhbCwgQWRkcmVzcyhzcmMsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBU
cnVzdGVkSW1tUHRyKG1fZ2xvYmFsRGF0YS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSkpOwpAQCAt
MTAxLDE0ICsxMTksNiBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0TG9hZENoYXJhY3Rl
CiAgICAgY29udDhCaXQubGluayh0aGlzKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6
ZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXIzMihKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJFbnRy
eSBlbnRyeSwgUmVnaXN0ZXJJRCB0bywgUmVnaXN0ZXJJRCBmcm9tKQotewotICAgIGxvYWQzMihB
ZGRyZXNzKGZyb20sIGVudHJ5ICogc2l6ZW9mKFJlZ2lzdGVyKSksIHRvKTsKLSNpZiBVU0UoSlNW
QUxVRTY0KQotICAgIGtpbGxMYXN0UmVzdWx0UmVnaXN0ZXIoKTsKLSNlbmRpZgotfQotCiBBTFdB
WVNfSU5MSU5FIEpJVDo6Q2FsbCBKSVQ6OmVtaXROYWtlZENhbGwoQ29kZVB0ciBmdW5jdGlvbikK
IHsKICAgICBBU1NFUlQobV9ieXRlY29kZU9mZnNldCAhPSAodW5zaWduZWQpLTEpOyAvLyBUaGlz
IG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJh
dGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlT2Zmc2V0IGlzIHNldC4KQEAgLTQ3Myw4ICs0ODMsOCBA
QCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRBbGxvY2F0ZUpTQXJyYXkodW5zCiAgICAgLy8gU3RvcmUg
dGhlIHZhbHVlcyB3ZSBoYXZlLgogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7
IGkrKykgewogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhjYWxs
RnJhbWVSZWdpc3RlciwgKHZhbHVlc1JlZ2lzdGVyICsgaSkgKiBzaXplb2YoUmVnaXN0ZXIpKSwg
c3RvcmFnZVB0cik7Ci0gICAgICAgIHN0b3JlUHRyKHN0b3JhZ2VQdHIsIEFkZHJlc3Moc3RvcmFn
ZVJlc3VsdCwgc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikgKiBpKSk7CisgICAgICAgIGxv
YWQ2NChBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCAodmFsdWVzUmVnaXN0ZXIgKyBpKSAqIHNp
emVvZihSZWdpc3RlcikpLCBzdG9yYWdlUHRyKTsKKyAgICAgICAgc3RvcmU2NChzdG9yYWdlUHRy
LCBBZGRyZXNzKHN0b3JhZ2VSZXN1bHQsIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pICog
aSkpOwogI2Vsc2UKICAgICAgICAgbG9hZDMyKEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsICh2
YWx1ZXNSZWdpc3RlciArIGkpICogc2l6ZW9mKFJlZ2lzdGVyKSksIHN0b3JhZ2VQdHIpOwogICAg
ICAgICBzdG9yZTMyKHN0b3JhZ2VQdHIsIEFkZHJlc3Moc3RvcmFnZVJlc3VsdCwgc2l6ZW9mKFdy
aXRlQmFycmllcjxVbmtub3duPikgKiBpKSk7CkBAIC01MDAsNyArNTEwLDcgQEAgaW5saW5lIHZv
aWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKAogICAgICAgICAvLyBXZSdyZSBpbiBhIHNp
bXBsZSBjb25maWd1cmF0aW9uOiBvbmx5IG9uZSBidWNrZXQsIHNvIHdlIGNhbiBqdXN0IGRvIGEg
ZGlyZWN0CiAgICAgICAgIC8vIHN0b3JlLgogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIHN0
b3JlUHRyKHZhbHVlLCB2YWx1ZVByb2ZpbGUtPm1fYnVja2V0cyk7CisgICAgICAgIHN0b3JlNjQo
dmFsdWUsIHZhbHVlUHJvZmlsZS0+bV9idWNrZXRzKTsKICNlbHNlCiAgICAgICAgIEVuY29kZWRW
YWx1ZURlc2NyaXB0b3IqIGRlc2NyaXB0b3IgPSBiaXR3aXNlX2Nhc3Q8RW5jb2RlZFZhbHVlRGVz
Y3JpcHRvcio+KHZhbHVlUHJvZmlsZS0+bV9idWNrZXRzKTsKICAgICAgICAgc3RvcmUzMih2YWx1
ZSwgJmRlc2NyaXB0b3ItPmFzQml0cy5wYXlsb2FkKTsKQEAgLTUxNiw3ICs1MjYsNyBAQCBpbmxp
bmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoCiAgICAgYW5kMzIoVHJ1c3RlZElt
bTMyKFZhbHVlUHJvZmlsZTo6YnVja2V0SW5kZXhNYXNrKSwgYnVja2V0Q291bnRlclJlZ2lzdGVy
KTsKICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIodmFsdWVQcm9maWxlLT5tX2J1Y2tldHMpLCBzY3Jh
dGNoKTsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIHN0b3JlUHRyKHZhbHVlLCBCYXNlSW5kZXgo
c2NyYXRjaCwgYnVja2V0Q291bnRlclJlZ2lzdGVyLCBUaW1lc0VpZ2h0KSk7CisgICAgc3RvcmU2
NCh2YWx1ZSwgQmFzZUluZGV4KHNjcmF0Y2gsIGJ1Y2tldENvdW50ZXJSZWdpc3RlciwgVGltZXNF
aWdodCkpOwogI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKICAgICBzdG9yZTMyKHZhbHVlLCBCYXNl
SW5kZXgoc2NyYXRjaCwgYnVja2V0Q291bnRlclJlZ2lzdGVyLCBUaW1lc0VpZ2h0LCBPQkpFQ1Rf
T0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpKTsKICAgICBzdG9yZTMyKHZhbHVl
VGFnLCBCYXNlSW5kZXgoc2NyYXRjaCwgYnVja2V0Q291bnRlclJlZ2lzdGVyLCBUaW1lc0VpZ2h0
LCBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSkpOwpAQCAtODYwLDYgKzg3
MCwxNCBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjpnZXRPcGVyYW5kQ29uc3RhCiAKICNlbHNl
IC8vIFVTRShKU1ZBTFVFMzJfNjQpCiAKKy8qIERlcHJlY2F0ZWQ6IFBsZWFzZSB1c2UgSklUU3R1
YkNhbGwgaW5zdGVhZC4gKi8KKworQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldEpJVFN0
dWJBcmcodW5zaWduZWQgYXJndW1lbnROdW1iZXIsIFJlZ2lzdGVySUQgZHN0KQoreworICAgIHVu
c2lnbmVkIGFyZ3VtZW50U3RhY2tPZmZzZXQgPSAoYXJndW1lbnROdW1iZXIgKiAoc2l6ZW9mKEpT
VmFsdWUpIC8gc2l6ZW9mKHZvaWQqKSkpICsgSklUU1RBQ0tGUkFNRV9BUkdTX0lOREVYOworICAg
IHBlZWs2NChkc3QsIGFyZ3VtZW50U3RhY2tPZmZzZXQpOworfQorCiBBTFdBWVNfSU5MSU5FIHZv
aWQgSklUOjpraWxsTGFzdFJlc3VsdFJlZ2lzdGVyKCkKIHsKICAgICBtX2xhc3RSZXN1bHRCeXRl
Y29kZVJlZ2lzdGVyID0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKTsKQEAgLTg3NCw5
ICs4OTIsOSBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJlCiAgICAg
aWYgKG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChzcmMpKSB7CiAgICAgICAg
IEpTVmFsdWUgdmFsdWUgPSBtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKICAgICAgICAg
aWYgKCF2YWx1ZS5pc051bWJlcigpKQotICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKEpT
VmFsdWU6OmVuY29kZSh2YWx1ZSkpLCBkc3QpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1t
NjQoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKSksIGRzdCk7CiAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIG1vdmUoSW1tUHRyKEpTVmFsdWU6OmVuY29kZSh2YWx1ZSkpLCBkc3QpOworICAgICAgICAg
ICAgbW92ZShJbW02NChKU1ZhbHVlOjplbmNvZGUodmFsdWUpKSwgZHN0KTsKICAgICAgICAga2ls
bExhc3RSZXN1bHRSZWdpc3RlcigpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtODg5LDcg
KzkwNyw3IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFsUmUKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIGxvYWRQdHIoQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3Rl
ciwgc3JjICogc2l6ZW9mKFJlZ2lzdGVyKSksIGRzdCk7CisgICAgbG9hZDY0KEFkZHJlc3MoY2Fs
bEZyYW1lUmVnaXN0ZXIsIHNyYyAqIHNpemVvZihSZWdpc3RlcikpLCBkc3QpOwogICAgIGtpbGxM
YXN0UmVzdWx0UmVnaXN0ZXIoKTsKIH0KIApAQCAtOTE2LDI4ICs5MzQsMjQgQEAgQUxXQVlTX0lO
TElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbgogCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklU
OjplbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHVuc2lnbmVkIGRzdCwgUmVnaXN0ZXJJRCBmcm9tKQog
ewotICAgIHN0b3JlUHRyKGZyb20sIEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIGRzdCAqIHNp
emVvZihSZWdpc3RlcikpKTsKKyAgICBzdG9yZTY0KGZyb20sIEFkZHJlc3MoY2FsbEZyYW1lUmVn
aXN0ZXIsIGRzdCAqIHNpemVvZihSZWdpc3RlcikpKTsKICAgICBtX2xhc3RSZXN1bHRCeXRlY29k
ZVJlZ2lzdGVyID0gKGZyb20gPT0gY2FjaGVkUmVzdWx0UmVnaXN0ZXIpID8gc3RhdGljX2Nhc3Q8
aW50Pihkc3QpIDogc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKTsKIH0KIAogQUxXQVlT
X0lOTElORSB2b2lkIEpJVDo6ZW1pdEluaXRSZWdpc3Rlcih1bnNpZ25lZCBkc3QpCiB7Ci0gICAg
c3RvcmVQdHIoVHJ1c3RlZEltbVB0cihKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSkpLCBB
ZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCBkc3QgKiBzaXplb2YoUmVnaXN0ZXIpKSk7CisgICAg
c3RvcmU2NChUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpKSwgQWRk
cmVzcyhjYWxsRnJhbWVSZWdpc3RlciwgZHN0ICogc2l6ZW9mKFJlZ2lzdGVyKSkpOwogfQogCiBB
TFdBWVNfSU5MSU5FIEpJVDo6SnVtcCBKSVQ6OmVtaXRKdW1wSWZKU0NlbGwoUmVnaXN0ZXJJRCBy
ZWcpCiB7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICByZXR1cm4gYnJhbmNoVGVzdFB0cihaZXJv
LCByZWcsIHRhZ01hc2tSZWdpc3Rlcik7Ci0jZWxzZQotICAgIHJldHVybiBicmFuY2hUZXN0MzIo
WmVybywgcmVnLCBUcnVzdGVkSW1tMzIoVGFnTWFzaykpOwotI2VuZGlmCisgICAgcmV0dXJuIGJy
YW5jaFRlc3Q2NChaZXJvLCByZWcsIHRhZ01hc2tSZWdpc3Rlcik7CiB9CiAKIEFMV0FZU19JTkxJ
TkUgSklUOjpKdW1wIEpJVDo6ZW1pdEp1bXBJZkJvdGhKU0NlbGxzKFJlZ2lzdGVySUQgcmVnMSwg
UmVnaXN0ZXJJRCByZWcyLCBSZWdpc3RlcklEIHNjcmF0Y2gpCiB7CiAgICAgbW92ZShyZWcxLCBz
Y3JhdGNoKTsKLSAgICBvclB0cihyZWcyLCBzY3JhdGNoKTsKKyAgICBvcjY0KHJlZzIsIHNjcmF0
Y2gpOwogICAgIHJldHVybiBlbWl0SnVtcElmSlNDZWxsKHNjcmF0Y2gpOwogfQogCkBAIC05NDgs
MTEgKzk2Miw3IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2UKIAog
QUxXQVlTX0lOTElORSBKSVQ6Okp1bXAgSklUOjplbWl0SnVtcElmTm90SlNDZWxsKFJlZ2lzdGVy
SUQgcmVnKQogewotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgcmV0dXJuIGJyYW5jaFRlc3RQdHIo
Tm9uWmVybywgcmVnLCB0YWdNYXNrUmVnaXN0ZXIpOwotI2Vsc2UKLSAgICByZXR1cm4gYnJhbmNo
VGVzdDMyKE5vblplcm8sIHJlZywgVHJ1c3RlZEltbTMyKFRhZ01hc2spKTsKLSNlbmRpZgorICAg
IHJldHVybiBicmFuY2hUZXN0NjQoTm9uWmVybywgcmVnLCB0YWdNYXNrUmVnaXN0ZXIpOwogfQog
CiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoUmVn
aXN0ZXJJRCByZWcpCkBAIC05NjYsOCArOTc2LDYgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6
ZW1pdEp1bXBTbG93Q2FzZQogICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVn
KTsKIH0KIAotI2lmIFVTRShKU1ZBTFVFNjQpCi0KIGlubGluZSB2b2lkIEpJVDo6ZW1pdExvYWRE
b3VibGUoaW50IGluZGV4LCBGUFJlZ2lzdGVySUQgdmFsdWUpCiB7CiAgICAgaWYgKG1fY29kZUJs
b2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChpbmRleCkpIHsKQEAgLTk4NSwzMCArOTkzLDIx
IEBAIGlubGluZSB2b2lkIEpJVDo6ZW1pdExvYWRJbnQzMlRvRG91YmxlKGkKICAgICB9IGVsc2UK
ICAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUoYWRkcmVzc0ZvcihpbmRleCksIHZhbHVlKTsK
IH0KLSNlbmRpZgogCiBBTFdBWVNfSU5MSU5FIEpJVDo6SnVtcCBKSVQ6OmVtaXRKdW1wSWZJbW1l
ZGlhdGVJbnRlZ2VyKFJlZ2lzdGVySUQgcmVnKQogewotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAg
cmV0dXJuIGJyYW5jaFB0cihBYm92ZU9yRXF1YWwsIHJlZywgdGFnVHlwZU51bWJlclJlZ2lzdGVy
KTsKLSNlbHNlCi0gICAgcmV0dXJuIGJyYW5jaFRlc3QzMihOb25aZXJvLCByZWcsIFRydXN0ZWRJ
bW0zMihUYWdUeXBlTnVtYmVyKSk7Ci0jZW5kaWYKKyAgICByZXR1cm4gYnJhbmNoNjQoQWJvdmVP
ckVxdWFsLCByZWcsIHRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7CiB9CiAKIEFMV0FZU19JTkxJTkUg
SklUOjpKdW1wIEpJVDo6ZW1pdEp1bXBJZk5vdEltbWVkaWF0ZUludGVnZXIoUmVnaXN0ZXJJRCBy
ZWcpCiB7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICByZXR1cm4gYnJhbmNoUHRyKEJlbG93LCBy
ZWcsIHRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7Ci0jZWxzZQotICAgIHJldHVybiBicmFuY2hUZXN0
MzIoWmVybywgcmVnLCBUcnVzdGVkSW1tMzIoVGFnVHlwZU51bWJlcikpOwotI2VuZGlmCisgICAg
cmV0dXJuIGJyYW5jaDY0KEJlbG93LCByZWcsIHRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7CiB9CiAK
IEFMV0FZU19JTkxJTkUgSklUOjpKdW1wIEpJVDo6ZW1pdEp1bXBJZk5vdEltbWVkaWF0ZUludGVn
ZXJzKFJlZ2lzdGVySUQgcmVnMSwgUmVnaXN0ZXJJRCByZWcyLCBSZWdpc3RlcklEIHNjcmF0Y2gp
CiB7CiAgICAgbW92ZShyZWcxLCBzY3JhdGNoKTsKLSAgICBhbmRQdHIocmVnMiwgc2NyYXRjaCk7
CisgICAgYW5kNjQocmVnMiwgc2NyYXRjaCk7CiAgICAgcmV0dXJuIGVtaXRKdW1wSWZOb3RJbW1l
ZGlhdGVJbnRlZ2VyKHNjcmF0Y2gpOwogfQogCkBAIC0xMDI3LDQxICsxMDI2LDE3IEBAIEFMV0FZ
U19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2UKICAgICBhZGRTbG93Q2FzZShlbWl0
SnVtcElmTm90SW1tZWRpYXRlTnVtYmVyKHJlZykpOwogfQogCi0jaWYgVVNFKEpTVkFMVUUzMl82
NCkKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRGYXN0QXJpdGhEZVRhZ0ltbWVkaWF0ZShS
ZWdpc3RlcklEIHJlZykKLXsKLSAgICBzdWJQdHIoVHJ1c3RlZEltbTMyKFRhZ1R5cGVOdW1iZXIp
LCByZWcpOwotfQotCi1BTFdBWVNfSU5MSU5FIEpJVDo6SnVtcCBKSVQ6OmVtaXRGYXN0QXJpdGhE
ZVRhZ0ltbWVkaWF0ZUp1bXBJZlplcm8oUmVnaXN0ZXJJRCByZWcpCi17Ci0gICAgcmV0dXJuIGJy
YW5jaFN1YlB0cihaZXJvLCBUcnVzdGVkSW1tMzIoVGFnVHlwZU51bWJlciksIHJlZyk7Ci19Ci0j
ZW5kaWYKLQogQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEZhc3RBcml0aFJlVGFnSW1tZWRp
YXRlKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCiB7Ci0jaWYgVVNFKEpTVkFMVUU2
NCkKICAgICBlbWl0RmFzdEFyaXRoSW50VG9JbW1Ob0NoZWNrKHNyYywgZGVzdCk7Ci0jZWxzZQot
ICAgIGlmIChzcmMgIT0gZGVzdCkKLSAgICAgICAgbW92ZShzcmMsIGRlc3QpOwotICAgIGFkZFB0
cihUcnVzdGVkSW1tMzIoVGFnVHlwZU51bWJlciksIGRlc3QpOwotI2VuZGlmCiB9CiAKIC8vIG9w
ZXJhbmQgaXMgaW50MzJfdCwgbXVzdCBoYXZlIGJlZW4gemVyby1leHRlbmRlZCBpZiByZWdpc3Rl
ciBpcyA2NC1iaXQuCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0RmFzdEFyaXRoSW50VG9J
bW1Ob0NoZWNrKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCiB7Ci0jaWYgVVNFKEpT
VkFMVUU2NCkKICAgICBpZiAoc3JjICE9IGRlc3QpCiAgICAgICAgIG1vdmUoc3JjLCBkZXN0KTsK
LSAgICBvclB0cih0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIGRlc3QpOwotI2Vsc2UKLSAgICBzaWdu
RXh0ZW5kMzJUb1B0cihzcmMsIGRlc3QpOwotICAgIGFkZFB0cihkZXN0LCBkZXN0KTsKLSAgICBl
bWl0RmFzdEFyaXRoUmVUYWdJbW1lZGlhdGUoZGVzdCwgZGVzdCk7Ci0jZW5kaWYKKyAgICBvcjY0
KHRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgZGVzdCk7CiB9CiAKIEFMV0FZU19JTkxJTkUgdm9pZCBK
SVQ6OmVtaXRUYWdBc0Jvb2xJbW1lZGlhdGUoUmVnaXN0ZXJJRCByZWcpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHJldmlzaW9uIDEzMTg1MCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI0OCwxNCArMjQ4LDE0IEBAIEpJVDo6TGFiZWwgSklUOjpwcml2YXRlQ29tcGlsZUNUSU5hdGl2
ZUMKICAgICAvLyBIb3N0IGZ1bmN0aW9uIHNpZ25hdHVyZTogZihFeGVjU3RhdGUqKTsKICAgICBt
b3ZlKGNhbGxGcmFtZVJlZ2lzdGVyLCBYODZSZWdpc3RlcnM6OmVkaSk7CiAKLSAgICBzdWJQdHIo
VHJ1c3RlZEltbTMyKDE2IC0gc2l6ZW9mKHZvaWQqKSksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsg
Ly8gQWxpZ24gc3RhY2sgYWZ0ZXIgY2FsbC4KKyAgICBzdWJQdHIoVHJ1c3RlZEltbTMyKDE2IC0g
c2l6ZW9mKGludDY0X3QpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOyAvLyBBbGlnbiBzdGFjayBh
ZnRlciBjYWxsLgogCiAgICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoSlNTdGFjazo6
Q2FsbGVlLCBYODZSZWdpc3RlcnM6OmVzaSk7CiAgICAgbG9hZFB0cihBZGRyZXNzKFg4NlJlZ2lz
dGVyczo6ZXNpLCBPQkpFQ1RfT0ZGU0VUT0YoSlNGdW5jdGlvbiwgbV9leGVjdXRhYmxlKSksIFg4
NlJlZ2lzdGVyczo6cjkpOwogICAgIG1vdmUocmVnVDAsIGNhbGxGcmFtZVJlZ2lzdGVyKTsgLy8g
RWFnZXJseSByZXN0b3JlIGNhbGxlciBmcmFtZSByZWdpc3RlciB0byBhdm9pZCBsb2FkaW5nIGZy
b20gc3RhY2suCiAgICAgY2FsbChBZGRyZXNzKFg4NlJlZ2lzdGVyczo6cjksIGV4ZWN1dGFibGVP
ZmZzZXRUb0Z1bmN0aW9uKSk7CiAKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKDE2IC0gc2l6ZW9m
KHZvaWQqKSksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMy
KDE2IC0gc2l6ZW9mKGludDY0X3QpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogCiAjZWxpZiBD
UFUoQVJNKQogICAgIC8vIExvYWQgY2FsbGVyIGZyYW1lJ3Mgc2NvcGUgY2hhaW4gaW50byB0aGlz
IGNhbGxmcmFtZSBzbyB0aGF0IHdoYXRldmVyIHdlIGNhbGwgY2FuCkBAIC0zMTYsOCArMzE2LDgg
QEAgSklUOjpMYWJlbCBKSVQ6OnByaXZhdGVDb21waWxlQ1RJTmF0aXZlQwogI2VuZGlmCiAKICAg
ICAvLyBDaGVjayBmb3IgYW4gZXhjZXB0aW9uCi0gICAgbG9hZFB0cigmKGdsb2JhbERhdGEtPmV4
Y2VwdGlvbiksIHJlZ1QyKTsKLSAgICBKdW1wIGV4Y2VwdGlvbkhhbmRsZXIgPSBicmFuY2hUZXN0
UHRyKE5vblplcm8sIHJlZ1QyKTsKKyAgICBsb2FkNjQoJihnbG9iYWxEYXRhLT5leGNlcHRpb24p
LCByZWdUMik7CisgICAgSnVtcCBleGNlcHRpb25IYW5kbGVyID0gYnJhbmNoVGVzdDY0KE5vblpl
cm8sIHJlZ1QyKTsKIAogICAgIC8vIFJldHVybi4KICAgICByZXQoKTsKQEAgLTM2MCw5ICszNjAs
OSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9tb3YoSW5zdHJ1Y3Rpb24qIGN1cnJlCiAgICAgfSBlbHNl
IHsKICAgICAgICAgaWYgKG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChzcmMp
KSB7CiAgICAgICAgICAgICBpZiAoIWdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzTnVtYmVyKCkp
Ci0gICAgICAgICAgICAgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihKU1ZhbHVlOjplbmNvZGUo
Z2V0Q29uc3RhbnRPcGVyYW5kKHNyYykpKSwgQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3RlciwgZHN0
ICogc2l6ZW9mKFJlZ2lzdGVyKSkpOworICAgICAgICAgICAgICAgIHN0b3JlNjQoVHJ1c3RlZElt
bTY0KEpTVmFsdWU6OmVuY29kZShnZXRDb25zdGFudE9wZXJhbmQoc3JjKSkpLCBBZGRyZXNzKGNh
bGxGcmFtZVJlZ2lzdGVyLCBkc3QgKiBzaXplb2YoUmVnaXN0ZXIpKSk7CiAgICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICAgICAgc3RvcmVQdHIoSW1tUHRyKEpTVmFsdWU6OmVuY29kZShnZXRD
b25zdGFudE9wZXJhbmQoc3JjKSkpLCBBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCBkc3QgKiBz
aXplb2YoUmVnaXN0ZXIpKSk7CisgICAgICAgICAgICAgICAgc3RvcmU2NChJbW02NChKU1ZhbHVl
OjplbmNvZGUoZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykpKSwgQWRkcmVzcyhjYWxsRnJhbWVSZWdp
c3RlciwgZHN0ICogc2l6ZW9mKFJlZ2lzdGVyKSkpOwogICAgICAgICAgICAgaWYgKGRzdCA9PSBt
X2xhc3RSZXN1bHRCeXRlY29kZVJlZ2lzdGVyKQogICAgICAgICAgICAgICAgIGtpbGxMYXN0UmVz
dWx0UmVnaXN0ZXIoKTsKICAgICAgICAgfSBlbHNlIGlmICgoc3JjID09IG1fbGFzdFJlc3VsdEJ5
dGVjb2RlUmVnaXN0ZXIpIHx8IChkc3QgPT0gbV9sYXN0UmVzdWx0Qnl0ZWNvZGVSZWdpc3Rlcikp
IHsKQEAgLTM3Miw4ICszNzIsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9tb3YoSW5zdHJ1Y3Rpb24q
IGN1cnJlCiAgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiAgICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBQZXJmb3JtIHRoZSBjb3B5IHZpYSByZWdUMTsgZG8g
bm90IGRpc3R1cmIgYW55IG1hcHBpbmcgaW4gcmVnVDAuCi0gICAgICAgICAgICBsb2FkUHRyKEFk
ZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIHNyYyAqIHNpemVvZihSZWdpc3RlcikpLCByZWdUMSk7
Ci0gICAgICAgICAgICBzdG9yZVB0cihyZWdUMSwgQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3Rlciwg
ZHN0ICogc2l6ZW9mKFJlZ2lzdGVyKSkpOworICAgICAgICAgICAgbG9hZDY0KEFkZHJlc3MoY2Fs
bEZyYW1lUmVnaXN0ZXIsIHNyYyAqIHNpemVvZihSZWdpc3RlcikpLCByZWdUMSk7CisgICAgICAg
ICAgICBzdG9yZTY0KHJlZ1QxLCBBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCBkc3QgKiBzaXpl
b2YoUmVnaXN0ZXIpKSk7CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC00NDEsMTggKzQ0MSwxOCBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mKEluc3RydWN0aW9uCiAgICAgLy8gT3B0aW1p
c3RpY2FsbHkgbG9hZCB0aGUgcmVzdWx0IHRydWUsIGFuZCBzdGFydCBsb29waW5nLgogICAgIC8v
IEluaXRpYWxseSwgcmVnVDEgc3RpbGwgY29udGFpbnMgcHJvdG8gYW5kIHJlZ1QyIHN0aWxsIGNv
bnRhaW5zIHZhbHVlLgogICAgIC8vIEFzIHdlIGxvb3AgcmVnVDIgd2lsbCBiZSB1cGRhdGVkIHdp
dGggaXRzIHByb3RvdHlwZSwgcmVjdXJzaXZlbHkgd2Fsa2luZyB0aGUgcHJvdG90eXBlIGNoYWlu
LgotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRydWUp
KSksIHJlZ1QwKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNCb29s
ZWFuKHRydWUpKSksIHJlZ1QwKTsKICAgICBMYWJlbCBsb29wKHRoaXMpOwogCiAgICAgLy8gTG9h
ZCB0aGUgcHJvdG90eXBlIG9mIHRoZSBvYmplY3QgaW4gcmVnVDIuICBJZiB0aGlzIGlzIGVxdWFs
IHRvIHJlZ1QxIC0gV0lOIQogICAgIC8vIE90aGVyd2lzZSwgY2hlY2sgaWYgd2UndmUgaGl0IG51
bGwgLSBpZiB3ZSBoYXZlIHRoZW4gZHJvcCBvdXQgb2YgdGhlIGxvb3AsIGlmIG5vdCBnbyBhZ2Fp
bi4KICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkp
LCByZWdUMik7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6OnByb3RvdHlw
ZU9mZnNldCgpKSwgcmVnVDIpOworICAgIGxvYWQ2NChBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6
OnByb3RvdHlwZU9mZnNldCgpKSwgcmVnVDIpOwogICAgIEp1bXAgaXNJbnN0YW5jZSA9IGJyYW5j
aFB0cihFcXVhbCwgcmVnVDIsIHJlZ1QxKTsKICAgICBlbWl0SnVtcElmSlNDZWxsKHJlZ1QyKS5s
aW5rVG8obG9vcCwgdGhpcyk7CiAKICAgICAvLyBXZSBnZXQgaGVyZSBlaXRoZXIgYnkgZHJvcHBp
bmcgb3V0IG9mIHRoZSBsb29wLCBvciBpZiB2YWx1ZSB3YXMgbm90IGFuIE9iamVjdC4gIFJlc3Vs
dCBpcyBmYWxzZS4KLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9v
bGVhbihmYWxzZSkpKSwgcmVnVDApOworICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVu
Y29kZShqc0Jvb2xlYW4oZmFsc2UpKSksIHJlZ1QwKTsKIAogICAgIC8vIGlzSW5zdGFuY2UganVt
cHMgcmlnaHQgZG93biB0byBoZXJlLCB0byBza2lwIHNldHRpbmcgdGhlIHJlc3VsdCB0byBmYWxz
ZSAoaXQgaGFzIGFscmVhZHkgc2V0IHRydWUpLgogICAgIGlzSW5zdGFuY2UubGluayh0aGlzKTsK
QEAgLTQ2Nyw3ICs0NjcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc191bmRlZmluZWQoSW5zdHJ1
Y3RpCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwogICAgIEp1bXAg
aXNDZWxsID0gZW1pdEp1bXBJZkpTQ2VsbChyZWdUMCk7CiAKLSAgICBjb21wYXJlUHRyKEVxdWFs
LCByZWdUMCwgVHJ1c3RlZEltbTMyKFZhbHVlVW5kZWZpbmVkKSwgcmVnVDApOworICAgIGNvbXBh
cmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihWYWx1ZVVuZGVmaW5lZCksIHJlZ1QwKTsK
ICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAgICAgCiAgICAgaXNDZWxsLmxpbmsodGhpcyk7CkBA
IC00OTMsOCArNDkzLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfYm9vbGVhbihJbnN0cnVjdGlv
bgogICAgIHVuc2lnbmVkIHZhbHVlID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsK
ICAgICAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgeG9y
UHRyKFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90PihWYWx1ZUZhbHNlKSksIHJlZ1Qw
KTsKLSAgICB0ZXN0UHRyKFplcm8sIHJlZ1QwLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50
MzJfdD4ofjEpKSwgcmVnVDApOworICAgIHhvcjY0KFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxp
bnQzMl90PihWYWx1ZUZhbHNlKSksIHJlZ1QwKTsKKyAgICB0ZXN0NjQoWmVybywgcmVnVDAsIFRy
dXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpLCByZWdUMCk7CiAgICAgZW1pdFRh
Z0FzQm9vbEltbWVkaWF0ZShyZWdUMCk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qp
OwogfQpAQCAtNTA1LDcgKzUwNSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2lzX251bWJlcihJbnN0
cnVjdGlvbioKICAgICB1bnNpZ25lZCB2YWx1ZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9w
ZXJhbmQ7CiAgICAgCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwot
ICAgIHRlc3RQdHIoTm9uWmVybywgcmVnVDAsIHRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgcmVnVDAp
OworICAgIHRlc3Q2NChOb25aZXJvLCByZWdUMCwgdGFnVHlwZU51bWJlclJlZ2lzdGVyLCByZWdU
MCk7CiAgICAgZW1pdFRhZ0FzQm9vbEltbWVkaWF0ZShyZWdUMCk7CiAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QpOwogfQpAQCAtNTUzLDcgKzU1Myw3IEBAIHZvaWQgSklUOjplbWl0X29w
X2NvbnN0cnVjdChJbnN0cnVjdGlvbioKIHZvaWQgSklUOjplbWl0X29wX3RlYXJfb2ZmX2FjdGl2
YXRpb24oSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBpbnQgYWN0aXZh
dGlvbiA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgSnVtcCBhY3RpdmF0
aW9uTm90Q3JlYXRlZCA9IGJyYW5jaFRlc3RQdHIoWmVybywgYWRkcmVzc0ZvcihhY3RpdmF0aW9u
KSk7CisgICAgSnVtcCBhY3RpdmF0aW9uTm90Q3JlYXRlZCA9IGJyYW5jaFRlc3Q2NChaZXJvLCBh
ZGRyZXNzRm9yKGFjdGl2YXRpb24pKTsKICAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBj
dGlfb3BfdGVhcl9vZmZfYWN0aXZhdGlvbik7CiAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoYWN0
aXZhdGlvbiwgcmVnVDIpOwogICAgIHN0dWJDYWxsLmNhbGwoKTsKQEAgLTU2NSw3ICs1NjUsNyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF90ZWFyX29mZl9hcmd1bWVudHMoSW5zCiAgICAgaW50IGFyZ3Vt
ZW50cyA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CiAgICAgaW50IGFjdGl2YXRp
b24gPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwogCi0gICAgSnVtcCBhcmdzTm90
Q3JlYXRlZCA9IGJyYW5jaFRlc3RQdHIoWmVybywgQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3Rlciwg
c2l6ZW9mKFJlZ2lzdGVyKSAqICh1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIoYXJndW1lbnRz
KSkpKTsKKyAgICBKdW1wIGFyZ3NOb3RDcmVhdGVkID0gYnJhbmNoVGVzdDY0KFplcm8sIEFkZHJl
c3MoY2FsbEZyYW1lUmVnaXN0ZXIsIHNpemVvZihSZWdpc3RlcikgKiAodW5tb2RpZmllZEFyZ3Vt
ZW50c1JlZ2lzdGVyKGFyZ3VtZW50cykpKSk7CiAgICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhp
cywgY3RpX29wX3RlYXJfb2ZmX2FyZ3VtZW50cyk7CiAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQo
dW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyKGFyZ3VtZW50cyksIHJlZ1QyKTsKICAgICBzdHVi
Q2FsbC5hZGRBcmd1bWVudChhY3RpdmF0aW9uLCByZWdUMik7CkBAIC02NzAsOSArNjcwLDkgQEAg
dm9pZCBKSVQ6OmVtaXRfb3Bfbm90KEluc3RydWN0aW9uKiBjdXJyZQogICAgIC8vIEludmVydCBh
Z2FpbnN0IEpTVmFsdWUoZmFsc2UpOyBpZiB0aGUgdmFsdWUgd2FzIHRhZ2dlZCBhcyBhIGJvb2xl
YW4sIHRoZW4gYWxsIGJpdHMgd2lsbCBiZQogICAgIC8vIGNsZWFyIG90aGVyIHRoYW4gdGhlIGxv
dyBiaXQgKHdoaWNoIHdpbGwgYmUgMCBvciAxIGZvciBmYWxzZSBvciB0cnVlIGlucHV0cyByZXNw
ZWN0aXZlbHkpLgogICAgIC8vIFRoZW4gaW52ZXJ0IGFnYWluc3QgSlNWYWx1ZSh0cnVlKSwgd2hp
Y2ggd2lsbCBhZGQgdGhlIHRhZyBiYWNrIGluLCBhbmQgZmxpcCB0aGUgbG93IGJpdC4KLSAgICB4
b3JQdHIoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KFZhbHVlRmFsc2UpKSwgcmVn
VDApOworICAgIHhvcjY0KFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90PihWYWx1ZUZh
bHNlKSksIHJlZ1QwKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0UHRyKE5vblplcm8sIHJl
Z1QwLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSkpOwotICAgIHhvclB0
cihUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oVmFsdWVUcnVlKSksIHJlZ1QwKTsK
KyAgICB4b3I2NChUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oVmFsdWVUcnVlKSks
IHJlZ1QwKTsKIAogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9u
WzFdLnUub3BlcmFuZCk7CiB9CkBAIC02ODIsMTEgKzY4MiwxMSBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9qZmFsc2UoSW5zdHJ1Y3Rpb24qIGN1CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0gY3VycmVudElu
c3RydWN0aW9uWzJdLnUub3BlcmFuZDsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGN1cnJl
bnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIHJlZ1QwKTsKIAotICAgIGFkZEp1bXAoYnJhbmNo
UHRyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0cihKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIo
MCkpKSksIHRhcmdldCk7CisgICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwgcmVnVDAsIFRydXN0
ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoMCkpKSksIHRhcmdldCk7CiAgICAgSnVt
cCBpc05vblplcm8gPSBlbWl0SnVtcElmSW1tZWRpYXRlSW50ZWdlcihyZWdUMCk7CiAKLSAgICBh
ZGRKdW1wKGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW1QdHIoSlNWYWx1ZTo6ZW5j
b2RlKGpzQm9vbGVhbihmYWxzZSkpKSksIHRhcmdldCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNo
UHRyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0cihKU1ZhbHVlOjplbmNvZGUoanNCb29s
ZWFuKHRydWUpKSkpKTsKKyAgICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCByZWdUMCwgVHJ1c3Rl
ZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oZmFsc2UpKSkpLCB0YXJnZXQpOworICAg
IGFkZFNsb3dDYXNlKGJyYW5jaDY0KE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFs
dWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkpKSkpOwogCiAgICAgaXNOb25aZXJvLmxpbmsodGhp
cyk7CiB9CkBAIC03MDgsOCArNzA4LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfamVxX251bGwoSW5z
dHJ1Y3Rpb24qCiAKICAgICAvLyBOb3cgaGFuZGxlIHRoZSBpbW1lZGlhdGUgY2FzZXMgLSB1bmRl
ZmluZWQgJiBudWxsCiAgICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsKLSAgICBhbmRQdHIoVHJ1
c3RlZEltbTMyKH5UYWdCaXRVbmRlZmluZWQpLCByZWdUMCk7Ci0gICAgYWRkSnVtcChicmFuY2hQ
dHIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tUHRyKEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkp
KSwgdGFyZ2V0KTsgICAgICAgICAgICAKKyAgICBhbmQ2NChUcnVzdGVkSW1tMzIoflRhZ0JpdFVu
ZGVmaW5lZCksIHJlZ1QwKTsKKyAgICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCByZWdUMCwgVHJ1
c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsgICAgICAgICAg
ICAKIAogICAgIGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwogICAgIG1h
c3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWduLmxpbmsodGhpcyk7CkBAIC03MzEsOCArNzMx
LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9udWxsKEluc3RydWN0aW9uKgogCiAgICAgLy8g
Tm93IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZpbmVkICYgbnVsbAogICAgIGlz
SW1tZWRpYXRlLmxpbmsodGhpcyk7Ci0gICAgYW5kUHRyKFRydXN0ZWRJbW0zMih+VGFnQml0VW5k
ZWZpbmVkKSwgcmVnVDApOwotICAgIGFkZEp1bXAoYnJhbmNoUHRyKE5vdEVxdWFsLCByZWdUMCwg
VHJ1c3RlZEltbVB0cihKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAg
ICAgICAgCisgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5UYWdCaXRVbmRlZmluZWQpLCByZWdUMCk7
CisgICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1Zh
bHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAgICAgCiAKICAgICB3YXNO
b3RJbW1lZGlhdGUubGluayh0aGlzKTsKIH0KQEAgLTc2MSwxMSArNzYxLDExIEBAIHZvaWQgSklU
OjplbWl0X29wX2p0cnVlKEluc3RydWN0aW9uKiBjdXIKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBj
dXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgcmVnVDApOwogCi0gICAgSnVtcCBp
c1plcm8gPSBicmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tUHRyKEpTVmFsdWU6OmVu
Y29kZShqc051bWJlcigwKSkpKTsKKyAgICBKdW1wIGlzWmVybyA9IGJyYW5jaDY0KEVxdWFsLCBy
ZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bWJlcigwKSkpKTsKICAgICBh
ZGRKdW1wKGVtaXRKdW1wSWZJbW1lZGlhdGVJbnRlZ2VyKHJlZ1QwKSwgdGFyZ2V0KTsKIAotICAg
IGFkZEp1bXAoYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0cihKU1ZhbHVlOjpl
bmNvZGUoanNCb29sZWFuKHRydWUpKSkpLCB0YXJnZXQpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5j
aFB0cihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9v
bGVhbihmYWxzZSkpKSkpOworICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHJlZ1QwLCBUcnVz
dGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSkpKSwgdGFyZ2V0KTsKKyAg
ICBhZGRTbG93Q2FzZShicmFuY2g2NChOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1Zh
bHVlOjplbmNvZGUoanNCb29sZWFuKGZhbHNlKSkpKSk7CiAKICAgICBpc1plcm8ubGluayh0aGlz
KTsKIH0KQEAgLTc4NSw3ICs3ODUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9iaXR4b3IoSW5zdHJ1
Y3Rpb24qIGN1CiB7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoY3VycmVudEluc3RydWN0
aW9uWzJdLnUub3BlcmFuZCwgcmVnVDAsIGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQs
IHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1lZGlhdGVJbnRlZ2VycyhyZWdU
MCwgcmVnVDEsIHJlZ1QyKTsKLSAgICB4b3JQdHIocmVnVDEsIHJlZ1QwKTsKKyAgICB4b3I2NChy
ZWdUMSwgcmVnVDApOwogICAgIGVtaXRGYXN0QXJpdGhSZVRhZ0ltbWVkaWF0ZShyZWdUMCwgcmVn
VDApOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUu
b3BlcmFuZCk7CiB9CkBAIC03OTQsNyArNzk0LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfYml0b3Io
SW5zdHJ1Y3Rpb24qIGN1cgogewogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGN1cnJlbnRJ
bnN0cnVjdGlvblsyXS51Lm9wZXJhbmQsIHJlZ1QwLCBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5v
cGVyYW5kLCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tZWRpYXRlSW50ZWdl
cnMocmVnVDAsIHJlZ1QxLCByZWdUMik7Ci0gICAgb3JQdHIocmVnVDEsIHJlZ1QwKTsKKyAgICBv
cjY0KHJlZ1QxLCByZWdUMCk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5z
dHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKIH0KIApAQCAtODM2LDcgKzgzNiw3IEBAIHZvaWQgSklU
OjplbWl0X29wX2dldF9wbmFtZXMoSW5zdHJ1Y3Rpb24KICAgICBnZXRQbmFtZXNTdHViQ2FsbC5h
ZGRBcmd1bWVudChyZWdUMCk7CiAgICAgZ2V0UG5hbWVzU3R1YkNhbGwuY2FsbChkc3QpOwogICAg
IGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBPQkpFQ1RfT0ZGU0VUT0YoSlNQcm9wZXJ0eU5hbWVJdGVy
YXRvciwgbV9qc1N0cmluZ3NTaXplKSksIHJlZ1QzKTsKLSAgICBzdG9yZVB0cih0YWdUeXBlTnVt
YmVyUmVnaXN0ZXIsIHBheWxvYWRGb3IoaSkpOworICAgIHN0b3JlNjQodGFnVHlwZU51bWJlclJl
Z2lzdGVyLCBhZGRyZXNzRm9yKGkpKTsKICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihJbnQzMlRh
ZyksIGludFRhZ0ZvcihzaXplKSk7CiAgICAgc3RvcmUzMihyZWdUMywgaW50UGF5bG9hZEZvcihz
aXplKSk7CiAgICAgSnVtcCBlbmQgPSBqdW1wKCk7CkBAIC04NzMsNyArODczLDcgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfbmV4dF9wbmFtZShJbnN0cnVjdGlvbgogICAgIGxvYWRQdHIoYWRkcmVzc0Zv
cihpdCksIHJlZ1QxKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIE9CSkVDVF9PRkZTRVRP
RihKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLCBtX2pzU3RyaW5ncykpLCByZWdUMik7CiAKLSAgICBs
b2FkUHRyKEJhc2VJbmRleChyZWdUMiwgcmVnVDAsIFRpbWVzRWlnaHQpLCByZWdUMik7CisgICAg
bG9hZDY0KEJhc2VJbmRleChyZWdUMiwgcmVnVDAsIFRpbWVzRWlnaHQpLCByZWdUMik7CiAKICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVnVDIpOwogCkBAIC04OTQsNyArODk0LDcg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV4dF9wbmFtZShJbnN0cnVjdGlvbgogICAgIGFkZEp1bXAo
YnJhbmNoVGVzdFB0cihaZXJvLCBBZGRyZXNzKHJlZ1QzKSksIHRhcmdldCk7CiAKICAgICBMYWJl
bCBjaGVja1Byb3RvdHlwZSh0aGlzKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIFN0cnVj
dHVyZTo6cHJvdG90eXBlT2Zmc2V0KCkpLCByZWdUMik7CisgICAgbG9hZDY0KEFkZHJlc3MocmVn
VDIsIFN0cnVjdHVyZTo6cHJvdG90eXBlT2Zmc2V0KCkpLCByZWdUMik7CiAgICAgY2FsbEhhc1By
b3BlcnR5LmFwcGVuZChlbWl0SnVtcElmTm90SlNDZWxsKHJlZ1QyKSk7CiAgICAgbG9hZFB0cihB
ZGRyZXNzKHJlZ1QyLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgcmVnVDIpOwogICAgIGNh
bGxIYXNQcm9wZXJ0eS5hcHBlbmQoYnJhbmNoUHRyKE5vdEVxdWFsLCByZWdUMiwgQWRkcmVzcyhy
ZWdUMykpKTsKQEAgLTk0Miw3ICs5NDIsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wU3RyaWN0RXEo
SW5zdHJ1Y3Rpb24qCiAgICAgCiAgICAgLy8gSnVtcCBzbG93IGlmIGJvdGggYXJlIGNlbGxzICh0
byBjb3ZlciBzdHJpbmdzKS4KICAgICBtb3ZlKHJlZ1QwLCByZWdUMik7Ci0gICAgb3JQdHIocmVn
VDEsIHJlZ1QyKTsKKyAgICBvcjY0KHJlZ1QxLCByZWdUMik7CiAgICAgYWRkU2xvd0Nhc2UoZW1p
dEp1bXBJZkpTQ2VsbChyZWdUMikpOwogICAgIAogICAgIC8vIEp1bXAgc2xvdyBpZiBlaXRoZXIg
aXMgYSBkb3VibGUuIEZpcnN0IHRlc3QgaWYgaXQncyBhbiBpbnRlZ2VyLCB3aGljaCBpcyBmaW5l
LCBhbmQgdGhlbiB0ZXN0CkBAIC05NTUsOSArOTU1LDkgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcFN0
cmljdEVxKEluc3RydWN0aW9uKgogICAgIHJpZ2h0T0subGluayh0aGlzKTsKIAogICAgIGlmICh0
eXBlID09IE9wU3RyaWN0RXEpCi0gICAgICAgIGNvbXBhcmVQdHIoRXF1YWwsIHJlZ1QxLCByZWdU
MCwgcmVnVDApOworICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDAp
OwogICAgIGVsc2UKLSAgICAgICAgY29tcGFyZVB0cihOb3RFcXVhbCwgcmVnVDEsIHJlZ1QwLCBy
ZWdUMCk7CisgICAgICAgIGNvbXBhcmU2NChOb3RFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7
CiAgICAgZW1pdFRhZ0FzQm9vbEltbWVkaWF0ZShyZWdUMCk7CiAKICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCk7CkBAIC0xMDAzLDggKzEwMDMsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9j
YXRjaChJbnN0cnVjdGlvbiogY3VyCiAgICAga2lsbExhc3RSZXN1bHRSZWdpc3RlcigpOyAvLyBG
SVhNRTogSW1wbGljaXRseSB0cmVhdCBvcF9jYXRjaCBhcyBhIGxhYmVsZWQgc3RhdGVtZW50LCBh
bmQgcmVtb3ZlIHRoaXMgbGluZSBvZiBjb2RlLgogICAgIG1vdmUocmVnVDAsIGNhbGxGcmFtZVJl
Z2lzdGVyKTsKICAgICBwZWVrKHJlZ1QzLCBPQkpFQ1RfT0ZGU0VUT0Yoc3RydWN0IEpJVFN0YWNr
RnJhbWUsIGdsb2JhbERhdGEpIC8gc2l6ZW9mKHZvaWQqKSk7Ci0gICAgbG9hZFB0cihBZGRyZXNz
KHJlZ1QzLCBPQkpFQ1RfT0ZGU0VUT0YoSlNHbG9iYWxEYXRhLCBleGNlcHRpb24pKSwgcmVnVDAp
OwotICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSkp
LCBBZGRyZXNzKHJlZ1QzLCBPQkpFQ1RfT0ZGU0VUT0YoSlNHbG9iYWxEYXRhLCBleGNlcHRpb24p
KSk7CisgICAgbG9hZDY0KEFkZHJlc3MocmVnVDMsIE9CSkVDVF9PRkZTRVRPRihKU0dsb2JhbERh
dGEsIGV4Y2VwdGlvbikpLCByZWdUMCk7CisgICAgc3RvcmU2NChUcnVzdGVkSW1tNjQoSlNWYWx1
ZTo6ZW5jb2RlKEpTVmFsdWUoKSkpLCBBZGRyZXNzKHJlZ1QzLCBPQkpFQ1RfT0ZGU0VUT0YoSlNH
bG9iYWxEYXRhLCBleGNlcHRpb24pKSk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihjdXJy
ZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKIH0KIApAQCAtMTA3Myw5ICsxMDczLDkgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfdGhyb3dfcmVmZXJlbmNlX2Vycm9yKAogewogICAgIEpJVFN0dWJD
YWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF90aHJvd19yZWZlcmVuY2VfZXJyb3IpOwogICAgIGlm
ICghbV9jb2RlQmxvY2stPmdldENvbnN0YW50KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJh
bmQpLmlzTnVtYmVyKCkpCi0gICAgICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KFRydXN0ZWRJbW1Q
dHIoSlNWYWx1ZTo6ZW5jb2RlKG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChjdXJyZW50SW5zdHJ1
Y3Rpb25bMV0udS5vcGVyYW5kKSkpKTsKKyAgICAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1
c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoY3VycmVu
dEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCkpKSk7CiAgICAgZWxzZQotICAgICAgICBzdHViQ2Fs
bC5hZGRBcmd1bWVudChJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKG1fY29kZUJsb2NrLT5nZXRDb25z
dGFudChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSkpKTsKKyAgICAgICAgc3R1YkNh
bGwuYWRkQXJndW1lbnQoSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKG1fY29kZUJsb2NrLT5nZXRDb25z
dGFudChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSkpKTsKICAgICBzdHViQ2FsbC5j
YWxsKCk7CiB9CiAKQEAgLTExMTUsOCArMTExNSw4IEBAIHZvaWQgSklUOjplbWl0X29wX2VxX251
bGwoSW5zdHJ1Y3Rpb24qIGMKIAogICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7CiAKLSAgICBh
bmRQdHIoVHJ1c3RlZEltbTMyKH5UYWdCaXRVbmRlZmluZWQpLCByZWdUMCk7Ci0gICAgY29tcGFy
ZVB0cihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihWYWx1ZU51bGwpLCByZWdUMCk7CisgICAg
YW5kNjQoVHJ1c3RlZEltbTMyKH5UYWdCaXRVbmRlZmluZWQpLCByZWdUMCk7CisgICAgY29tcGFy
ZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKFZhbHVlTnVsbCksIHJlZ1QwKTsKIAogICAg
IHdhc05vdEltbWVkaWF0ZS5saW5rKHRoaXMpOwogICAgIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQubGluayh0aGlzKTsKQEAgLTExNDcsOCArMTE0Nyw4IEBAIHZvaWQgSklUOjplbWl0X29w
X25lcV9udWxsKEluc3RydWN0aW9uKgogCiAgICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsKIAot
ICAgIGFuZFB0cihUcnVzdGVkSW1tMzIoflRhZ0JpdFVuZGVmaW5lZCksIHJlZ1QwKTsKLSAgICBj
b21wYXJlUHRyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKFZhbHVlTnVsbCksIHJlZ1Qw
KTsKKyAgICBhbmQ2NChUcnVzdGVkSW1tMzIoflRhZ0JpdFVuZGVmaW5lZCksIHJlZ1QwKTsKKyAg
ICBjb21wYXJlNjQoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoVmFsdWVOdWxsKSwgcmVn
VDApOwogCiAgICAgd2FzTm90SW1tZWRpYXRlLmxpbmsodGhpcyk7CiAgICAgd2FzTm90TWFzcXVl
cmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwpAQCAtMTE3Myw3ICsxMTczLDcgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfY3JlYXRlX2FjdGl2YXRpb24oSW5zdAogewogICAgIHVuc2lnbmVkIGRzdCA9
IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CiAgICAgCi0gICAgSnVtcCBhY3RpdmF0
aW9uQ3JlYXRlZCA9IGJyYW5jaFRlc3RQdHIoTm9uWmVybywgQWRkcmVzcyhjYWxsRnJhbWVSZWdp
c3Rlciwgc2l6ZW9mKFJlZ2lzdGVyKSAqIGRzdCkpOworICAgIEp1bXAgYWN0aXZhdGlvbkNyZWF0
ZWQgPSBicmFuY2hUZXN0NjQoTm9uWmVybywgQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3Rlciwgc2l6
ZW9mKFJlZ2lzdGVyKSAqIGRzdCkpOwogICAgIEpJVFN0dWJDYWxsKHRoaXMsIGN0aV9vcF9wdXNo
X2FjdGl2YXRpb24pLmNhbGwoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7CiAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogICAgIGFjdGl2YXRpb25DcmVhdGVkLmxpbmso
dGhpcyk7CkBAIC0xMTgzLDcgKzExODMsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfYXJn
dW1lbnRzKEluc3RyCiB7CiAgICAgdW5zaWduZWQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFd
LnUub3BlcmFuZDsKIAotICAgIEp1bXAgYXJnc0NyZWF0ZWQgPSBicmFuY2hUZXN0UHRyKE5vblpl
cm8sIEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIHNpemVvZihSZWdpc3RlcikgKiBkc3QpKTsK
KyAgICBKdW1wIGFyZ3NDcmVhdGVkID0gYnJhbmNoVGVzdDY0KE5vblplcm8sIEFkZHJlc3MoY2Fs
bEZyYW1lUmVnaXN0ZXIsIHNpemVvZihSZWdpc3RlcikgKiBkc3QpKTsKICAgICBKSVRTdHViQ2Fs
bCh0aGlzLCBjdGlfb3BfY3JlYXRlX2FyZ3VtZW50cykuY2FsbCgpOwogICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0KTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHVubW9kaWZpZWRB
cmd1bWVudHNSZWdpc3Rlcihkc3QpKTsKQEAgLTExOTQsNyArMTE5NCw3IEBAIHZvaWQgSklUOjpl
bWl0X29wX2luaXRfbGF6eV9yZWcoSW5zdHJ1Y3QKIHsKICAgICB1bnNpZ25lZCBkc3QgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwogCi0gICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0
cigwKSwgQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3Rlciwgc2l6ZW9mKFJlZ2lzdGVyKSAqIGRzdCkp
OworICAgIHN0b3JlNjQoVHJ1c3RlZEltbTY0KChpbnQ2NF90KTApLCBBZGRyZXNzKGNhbGxGcmFt
ZVJlZ2lzdGVyLCBzaXplb2YoUmVnaXN0ZXIpICogZHN0KSk7CiB9CiAKIHZvaWQgSklUOjplbWl0
X29wX2NvbnZlcnRfdGhpcyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTI1
MywxNiArMTI1MywxNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY29udmVydF90aGlzKEluc3Ry
CiAKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7CiAgICAgaWYgKHNob3VsZEVtaXRQcm9maWxpbmco
KSkKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGJpdHdpc2VfY2FzdDx2b2lkKj4oSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpKSksIHJlZ1QwKTsKLSAgICBKdW1wIGlzTm90VW5kZWZp
bmVkID0gYnJhbmNoUHRyKE5vdEVxdWFsLCByZWdUMSwgVHJ1c3RlZEltbVB0cihKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSkpKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoKEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKSkpLCByZWdUMCk7CisgICAgSnVtcCBpc05vdFVuZGVm
aW5lZCA9IGJyYW5jaDY0KE5vdEVxdWFsLCByZWdUMSwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKSkpOwogICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoKTsKLSAg
ICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2xvYmFsVGhpcyksIHJlZ1QwKTsKKyAgICBtb3ZlKFRydXN0
ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZShzdGF0aWNfY2FzdDxKU0NlbGwqPihnbG9i
YWxUaGlzKSkpKSwgcmVnVDApOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudElu
c3RydWN0aW9uWzFdLnUub3BlcmFuZCwgcmVnVDApOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1
bXAoKSwgT1BDT0RFX0xFTkdUSChvcF9jb252ZXJ0X3RoaXMpKTsKIAogICAgIGxpbmtTbG93Q2Fz
ZShpdGVyKTsKICAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKQotICAgICAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIoYml0d2lzZV9jYXN0PHZvaWQqPihKU1ZhbHVlOjplbmNvZGUobV9nbG9iYWxE
YXRhLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSksIHJlZ1QwKTsKKyAgICAgICAgbW92ZShUcnVz
dGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKG1fZ2xvYmFsRGF0YS0+c3RyaW5nU3RydWN0dXJlLmdl
dCgpKSksIHJlZ1QwKTsKICAgICBpc05vdFVuZGVmaW5lZC5saW5rKHRoaXMpOwogICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoKTsKICAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlf
b3BfY29udmVydF90aGlzKTsKQEAgLTEyODIsNyArMTI4Miw3IEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF90b19wcmltaXRpdmUoSW5zdHIKIHZvaWQgSklUOjplbWl0U2xvd19vcF9ub3QoSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKIHsKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7Ci0gICAgeG9yUHRyKFRydXN0ZWRJ
bW0zMihzdGF0aWNfY2FzdDxpbnQzMl90PihWYWx1ZUZhbHNlKSksIHJlZ1QwKTsKKyAgICB4b3I2
NChUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oVmFsdWVGYWxzZSkpLCByZWdUMCk7
CiAgICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wX25vdCk7CiAgICAgc3R1YkNh
bGwuYWRkQXJndW1lbnQocmVnVDApOwogICAgIHN0dWJDYWxsLmNhbGwoY3VycmVudEluc3RydWN0
aW9uWzFdLnUub3BlcmFuZCk7CkBAIC0xNDM0LDcgKzE0MzQsNyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9nZXRfYXJndW1lbnRzX2xlbmd0aChJCiB7CiAgICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVj
dGlvblsxXS51Lm9wZXJhbmQ7CiAgICAgaW50IGFyZ3VtZW50c1JlZ2lzdGVyID0gY3VycmVudElu
c3RydWN0aW9uWzJdLnUub3BlcmFuZDsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0UHRyKE5v
blplcm8sIGFkZHJlc3NGb3IoYXJndW1lbnRzUmVnaXN0ZXIpKSk7CisgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoVGVzdDY0KE5vblplcm8sIGFkZHJlc3NGb3IoYXJndW1lbnRzUmVnaXN0ZXIpKSk7CiAg
ICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXIzMihKU1N0YWNrOjpBcmd1bWVudENvdW50LCBy
ZWdUMCk7CiAgICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7CiAgICAgZW1pdEZhc3RB
cml0aFJlVGFnSW1tZWRpYXRlKHJlZ1QwLCByZWdUMCk7CkBAIC0xNDYwLDcgKzE0NjAsNyBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYXJndW1lbnRfYnlfdmFsKEluCiAgICAgaW50IGRzdCA9IGN1
cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CiAgICAgaW50IGFyZ3VtZW50c1JlZ2lzdGVy
ID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKICAgICBpbnQgcHJvcGVydHkgPSBj
dXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRl
c3RQdHIoTm9uWmVybywgYWRkcmVzc0Zvcihhcmd1bWVudHNSZWdpc3RlcikpKTsKKyAgICBhZGRT
bG93Q2FzZShicmFuY2hUZXN0NjQoTm9uWmVybywgYWRkcmVzc0Zvcihhcmd1bWVudHNSZWdpc3Rl
cikpKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMSk7CiAgICAg
YWRkU2xvd0Nhc2UoZW1pdEp1bXBJZk5vdEltbWVkaWF0ZUludGVnZXIocmVnVDEpKTsKICAgICBh
ZGQzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QxKTsKQEAgLTE0NzAsNyArMTQ3MCw3IEBAIHZvaWQg
SklUOjplbWl0X29wX2dldF9hcmd1bWVudF9ieV92YWwoSW4KIAogICAgIG5lZzMyKHJlZ1QxKTsK
ICAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMSwgcmVnVDEpOwotICAgIGxvYWRQdHIoQmFzZUlu
ZGV4KGNhbGxGcmFtZVJlZ2lzdGVyLCByZWdUMSwgVGltZXNFaWdodCwgQ2FsbEZyYW1lOjp0aGlz
QXJndW1lbnRPZmZzZXQoKSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkpLCBy
ZWdUMCk7CisgICAgbG9hZDY0KEJhc2VJbmRleChjYWxsRnJhbWVSZWdpc3RlciwgcmVnVDEsIFRp
bWVzRWlnaHQsIENhbGxGcmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCkgKiBzdGF0aWNfY2FzdDxp
bnQ+KHNpemVvZihSZWdpc3RlcikpKSwgcmVnVDApOwogICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVnVDApOwogfQpAQCAtMTUx
NCw3ICsxNTE0LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX2Jhc2UoSW5zdHJ1Y3Rpbwog
ICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoUHRyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3Rl
ZEltbVB0cihnbG9iYWxPYmplY3QpKSk7CiAgICAgICAgIH0KICAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgICAgICBzdG9yZVB0cihyZWdUMCwgb3BlcmF0
aW9uLT5tX3JlZ2lzdGVyQWRkcmVzcyk7CisgICAgICAgIHN0b3JlNjQocmVnVDAsIG9wZXJhdGlv
bi0+bV9yZWdpc3RlckFkZHJlc3MpOwogICAgICAgICBpZiAoSGVhcDo6aXNXcml0ZUJhcnJpZXJF
bmFibGVkKCkpCiAgICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKGdsb2JhbE9iamVjdCwgcmVn
VDAsIHJlZ1QyLCBTaG91bGRGaWx0ZXJJbW1lZGlhdGVzLCBXcml0ZUJhcnJpZXJGb3JWYXJpYWJs
ZUFjY2Vzcyk7CiAgICAgICAgIHJldHVybjsKQEAgLTE1MjIsNyArMTUyMiw3IEBAIHZvaWQgSklU
OjplbWl0X29wX3B1dF90b19iYXNlKEluc3RydWN0aW8KICAgICBjYXNlIFB1dFRvQmFzZU9wZXJh
dGlvbjo6VmFyaWFibGVQdXQ6IHsKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYmFz
ZSwgcmVnVDAsIHZhbHVlLCByZWdUMSk7CiAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwg
SlNWYXJpYWJsZU9iamVjdDo6b2Zmc2V0T2ZSZWdpc3RlcnMoKSksIHJlZ1QyKTsKLSAgICAgICAg
c3RvcmVQdHIocmVnVDEsIEFkZHJlc3MocmVnVDIsIG9wZXJhdGlvbi0+bV9vZmZzZXQgKiBzaXpl
b2YoUmVnaXN0ZXIpKSk7CisgICAgICAgIHN0b3JlNjQocmVnVDEsIEFkZHJlc3MocmVnVDIsIG9w
ZXJhdGlvbi0+bV9vZmZzZXQgKiBzaXplb2YoUmVnaXN0ZXIpKSk7CiAgICAgICAgIGlmIChIZWFw
Ojppc1dyaXRlQmFycmllckVuYWJsZWQoKSkKICAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIo
cmVnVDAsIHJlZ1QxLCByZWdUMiwgcmVnVDMsIFNob3VsZEZpbHRlckltbWVkaWF0ZXMsIFdyaXRl
QmFycmllckZvclZhcmlhYmxlQWNjZXNzKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMTUzNiw3ICsx
NTM2LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX2Jhc2UoSW5zdHJ1Y3RpbwogICAgICAg
ICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJl
Z1QyKTsKICAgICAgICAgbG9hZDMyKCZvcGVyYXRpb24tPm1fb2Zmc2V0SW5CdXR0ZXJmbHksIHJl
Z1QzKTsKICAgICAgICAgc2lnbkV4dGVuZDMyVG9QdHIocmVnVDMsIHJlZ1QzKTsKLSAgICAgICAg
c3RvcmVQdHIocmVnVDEsIEJhc2VJbmRleChyZWdUMiwgcmVnVDMsIFRpbWVzRWlnaHQpKTsKKyAg
ICAgICAgc3RvcmU2NChyZWdUMSwgQmFzZUluZGV4KHJlZ1QyLCByZWdUMywgVGltZXNFaWdodCkp
OwogICAgICAgICBpZiAoSGVhcDo6aXNXcml0ZUJhcnJpZXJFbmFibGVkKCkpCiAgICAgICAgICAg
ICBlbWl0V3JpdGVCYXJyaWVyKHJlZ1QwLCByZWdUMSwgcmVnVDIsIHJlZ1QzLCBTaG91bGRGaWx0
ZXJJbW1lZGlhdGVzLCBXcml0ZUJhcnJpZXJGb3JWYXJpYWJsZUFjY2Vzcyk7CiAgICAgICAgIHJl
dHVybjsKQEAgLTE2MDYsNyArMTYwNiw3IEBAIHZvaWQgSklUOjplbWl0X3Jlc29sdmVfb3BlcmF0
aW9ucyhSZXNvbHYKICAgICAgICAgICAgIEFTU0VSVChiYXNlVlIpOwogICAgICAgICAgICAgc2V0
QmFzZSA9IHRydWU7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cihiaXR3aXNlX2Nhc3Q8dm9pZCo+KEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KSkpLCBzY3JhdGNoKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKSksIHNjcmF0Y2gpOwogICAgICAgICAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3RlcigqYmFzZVZSLCBzY3JhdGNoKTsKICNlbHNlCiAgICAgICAgICAgICBlbWl0U3Rv
cmUoKmJhc2VWUiwganNVbmRlZmluZWQoKSk7CkBAIC0xNjMyLDcgKzE2MzIsMTEgQEAgdm9pZCBK
SVQ6OmVtaXRfcmVzb2x2ZV9vcGVyYXRpb25zKFJlc29sdgogICAgICAgICAgICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZSgpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBjYXNlIFJlc29s
dmVPcGVyYXRpb246OlNraXBUb3BTY29wZU5vZGU6IHsKLSAgICAgICAgICAgIEp1bXAgYWN0aXZh
dGlvbk5vdENyZWF0ZWQgPSBicmFuY2hUZXN0UHRyKFplcm8sIHBheWxvYWRGb3IobV9jb2RlQmxv
Y2stPmFjdGl2YXRpb25SZWdpc3RlcigpKSk7CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICAg
ICAgICAgIEp1bXAgYWN0aXZhdGlvbk5vdENyZWF0ZWQgPSBicmFuY2gzMihFcXVhbCwgdGFnRm9y
KG1fY29kZUJsb2NrLT5hY3RpdmF0aW9uUmVnaXN0ZXIoKSksIFRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpFbXB0eVZhbHVlVGFnKSk7CisjZWxzZQorICAgICAgICAgICAgSnVtcCBhY3RpdmF0aW9uTm90
Q3JlYXRlZCA9IGJyYW5jaFRlc3Q2NChaZXJvLCBhZGRyZXNzRm9yKG1fY29kZUJsb2NrLT5hY3Rp
dmF0aW9uUmVnaXN0ZXIoKSkpOworI2VuZGlmCiAgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3Mo
c2NvcGUsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgc2NvcGUpOwogICAgICAgICAgICAgYWN0
aXZhdGlvbk5vdENyZWF0ZWQubGluayh0aGlzKTsKICAgICAgICAgICAgICsrcGM7CkBAIC0xNjk1
LDE3ICsxNjk5LDIxIEBAIHZvaWQgSklUOjplbWl0X3Jlc29sdmVfb3BlcmF0aW9ucyhSZXNvbHYK
ICAgICBjYXNlIFJlc29sdmVPcGVyYXRpb246OkdldEFuZFJldHVybkdsb2JhbFZhcldhdGNoYWJs
ZToKICAgICBjYXNlIFJlc29sdmVPcGVyYXRpb246OkdldEFuZFJldHVybkdsb2JhbFZhcjogewog
I2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAgIGxvYWRQdHIocmVpbnRlcnByZXRfY2FzdDxj
aGFyKj4ocGMtPm1fcmVnaXN0ZXJBZGRyZXNzKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1
LmFzQml0cy50YWcpLCB2YWx1ZVRhZyk7CisgICAgICAgIGxvYWQzMihyZWludGVycHJldF9jYXN0
PGNoYXIqPihwYy0+bV9yZWdpc3RlckFkZHJlc3MpICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUs
IHUuYXNCaXRzLnRhZyksIHZhbHVlVGFnKTsKKyAgICAgICAgbG9hZDMyKHJlaW50ZXJwcmV0X2Nh
c3Q8Y2hhcio+KHBjLT5tX3JlZ2lzdGVyQWRkcmVzcykgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1
ZSwgdS5hc0JpdHMucGF5bG9hZCksIHZhbHVlKTsKKyNlbHNlCisgICAgICAgIGxvYWQ2NChyZWlu
dGVycHJldF9jYXN0PGNoYXIqPihwYy0+bV9yZWdpc3RlckFkZHJlc3MpLCB2YWx1ZSk7CiAjZW5k
aWYKLSAgICAgICAgbG9hZFB0cihyZWludGVycHJldF9jYXN0PGNoYXIqPihwYy0+bV9yZWdpc3Rl
ckFkZHJlc3MpICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpLCB2
YWx1ZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIFJlc29sdmVPcGVyYXRpb246
OkdldEFuZFJldHVyblNjb3BlZFZhcjogewogICAgICAgICBsb2FkUHRyKEFkZHJlc3Moc2NvcGUs
IEpTVmFyaWFibGVPYmplY3Q6Om9mZnNldE9mUmVnaXN0ZXJzKCkpLCBzY29wZSk7CiAjaWYgVVNF
KEpTVkFMVUUzMl82NCkKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKHNjb3BlLCBwYy0+bV9vZmZz
ZXQgKiBzaXplb2YoUmVnaXN0ZXIpICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRz
LnRhZykpLCB2YWx1ZVRhZyk7CisgICAgICAgIGxvYWQzMihBZGRyZXNzKHNjb3BlLCBwYy0+bV9v
ZmZzZXQgKiBzaXplb2YoUmVnaXN0ZXIpICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNC
aXRzLnRhZykpLCB2YWx1ZVRhZyk7CisgICAgICAgIGxvYWQzMihBZGRyZXNzKHNjb3BlLCBwYy0+
bV9vZmZzZXQgKiBzaXplb2YoUmVnaXN0ZXIpICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUu
YXNCaXRzLnBheWxvYWQpKSwgdmFsdWUpOworI2Vsc2UKKyAgICAgICAgbG9hZDY0KEFkZHJlc3Mo
c2NvcGUsIHBjLT5tX29mZnNldCAqIHNpemVvZihSZWdpc3RlcikpLCB2YWx1ZSk7CiAjZW5kaWYK
LSAgICAgICAgbG9hZFB0cihBZGRyZXNzKHNjb3BlLCBwYy0+bV9vZmZzZXQgKiBzaXplb2YoUmVn
aXN0ZXIpICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwgdmFs
dWUpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgZGVmYXVsdDoKQEAgLTE5MTMsNyArMTky
MSw3IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19mdW5jKEluc3RydWN0aW9uKgogI2lmIFVTRShK
U1ZBTFVFMzJfNjQpCiAgICAgICAgIGxhenlKdW1wID0gYnJhbmNoMzIoTm90RXF1YWwsIHRhZ0Zv
cihkc3QpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZykpOwogI2Vsc2UKLSAg
ICAgICAgbGF6eUp1bXAgPSBicmFuY2hUZXN0UHRyKE5vblplcm8sIGFkZHJlc3NGb3IoZHN0KSk7
CisgICAgICAgIGxhenlKdW1wID0gYnJhbmNoVGVzdDY0KE5vblplcm8sIGFkZHJlc3NGb3IoZHN0
KSk7CiAjZW5kaWYKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
UHJvcGVydHlBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCShyZXZpc2lvbiAxMzE4NTApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTM3LDcgKzEzNyw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV92YWwoSW5zdHJ1Y3Rpb24K
ICAgICBMYWJlbCBkb25lID0gbGFiZWwoKTsKICAgICAKICNpZiAhQVNTRVJUX0RJU0FCTEVECi0g
ICAgSnVtcCByZXN1bHRPSyA9IGJyYW5jaFRlc3RQdHIoTm9uWmVybywgcmVnVDApOworICAgIEp1
bXAgcmVzdWx0T0sgPSBicmFuY2hUZXN0NjQoTm9uWmVybywgcmVnVDApOwogICAgIGJyZWFrcG9p
bnQoKTsKICAgICByZXN1bHRPSy5saW5rKHRoaXMpOwogI2VuZGlmCkBAIC0xNTUsOCArMTU1LDgg
QEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRDb250aWd1b3VzR2V0QnlWYQogICAgIGJhZFR5cGUg
PSBwYXRjaGFibGVCcmFuY2gzMihOb3RFcXVhbCwgcmVnVDIsIFRydXN0ZWRJbW0zMihDb250aWd1
b3VzU2hhcGUpKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJm
bHlPZmZzZXQoKSksIHJlZ1QyKTsKICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEFib3Zl
T3JFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNM
ZW5ndGgoKSkpKTsKLSAgICBsb2FkUHRyKEJhc2VJbmRleChyZWdUMiwgcmVnVDEsIFNjYWxlUHRy
KSwgcmVnVDApOwotICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoVGVzdFB0cihaZXJvLCByZWdU
MCkpOworICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDIsIHJlZ1QxLCBUaW1lc0VpZ2h0KSwgcmVn
VDApOworICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoVGVzdDY0KFplcm8sIHJlZ1QwKSk7CiAg
ICAgCiAgICAgcmV0dXJuIHNsb3dDYXNlczsKIH0KQEAgLTE3MSw4ICsxNzEsOCBAQCBKSVQ6Okp1
bXBMaXN0IEpJVDo6ZW1pdEFycmF5U3RvcmFnZUdldEJ5CiAgICAgbG9hZFB0cihBZGRyZXNzKHJl
Z1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMik7CiAgICAgc2xvd0Nhc2Vz
LmFwcGVuZChicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBBcnJh
eVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSkpOwogCi0gICAgbG9hZFB0cihCYXNlSW5k
ZXgocmVnVDIsIHJlZ1QxLCBTY2FsZVB0ciwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSks
IHJlZ1QwKTsKLSAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaFRlc3RQdHIoWmVybywgcmVnVDAp
KTsKKyAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QyLCByZWdUMSwgVGltZXNFaWdodCwgQXJyYXlT
dG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSksIHJlZ1QwKTsKKyAgICBzbG93Q2FzZXMuYXBwZW5kKGJy
YW5jaFRlc3Q2NChaZXJvLCByZWdUMCkpOwogICAgIAogICAgIHJldHVybiBzbG93Q2FzZXM7CiB9
CkBAIC0xODksNyArMTg5LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwoSW5z
dHJ1YwogICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gYmFzZSBhcnJheSBjaGVjawogICAgIEp1
bXAgbm90U3RyaW5nID0gYnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6
OnN0cnVjdHVyZU9mZnNldCgpKSwgVHJ1c3RlZEltbVB0cihtX2dsb2JhbERhdGEtPnN0cmluZ1N0
cnVjdHVyZS5nZXQoKSkpOwogICAgIGVtaXROYWtlZENhbGwoQ29kZUxvY2F0aW9uTGFiZWwobV9n
bG9iYWxEYXRhLT5nZXRDVElTdHViKHN0cmluZ0dldEJ5VmFsU3R1YkdlbmVyYXRvcikuY29kZSgp
KSk7Ci0gICAgSnVtcCBmYWlsZWQgPSBicmFuY2hUZXN0UHRyKFplcm8sIHJlZ1QwKTsKKyAgICBK
dW1wIGZhaWxlZCA9IGJyYW5jaFRlc3Q2NChaZXJvLCByZWdUMCk7CiAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QsIHJlZ1QwKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChqdW1wKCksIE9Q
Q09ERV9MRU5HVEgob3BfZ2V0X2J5X3ZhbCkpOwogICAgIGZhaWxlZC5saW5rKHRoaXMpOwpAQCAt
MjM1LDcgKzIzNSw3IEBAIHZvaWQgSklUOjpjb21waWxlR2V0RGlyZWN0T2Zmc2V0KFJlZ2lzdGUK
ICAgICAgICAgbmVnMzIob2Zmc2V0KTsKICAgICB9CiAgICAgc2lnbkV4dGVuZDMyVG9QdHIob2Zm
c2V0LCBvZmZzZXQpOwotICAgIGxvYWRQdHIoQmFzZUluZGV4KHNjcmF0Y2gsIG9mZnNldCwgU2Nh
bGVQdHIsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVl
KSksIHJlc3VsdCk7CisgICAgbG9hZDY0KEJhc2VJbmRleChzY3JhdGNoLCBvZmZzZXQsIFRpbWVz
RWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVl
KSksIHJlc3VsdCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9wbmFtZShJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMjQ4LDcgKzI0OCw3IEBAIHZvaWQgSklUOjpl
bWl0X29wX2dldF9ieV9wbmFtZShJbnN0cnVjdGkKICAgICB1bnNpZ25lZCBpID0gY3VycmVudElu
c3RydWN0aW9uWzZdLnUub3BlcmFuZDsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJv
cGVydHksIHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hQdHIoTm90RXF1YWwsIHJlZ1Qw
LCBhZGRyZXNzRm9yKGV4cGVjdGVkKSkpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaDY0KE5vdEVx
dWFsLCByZWdUMCwgYWRkcmVzc0ZvcihleHBlY3RlZCkpKTsKICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVycyhiYXNlLCByZWdUMCwgaXRlciwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CiAKQEAgLTMzNyw3ICszMzcsNyBAQCBKSVQ6Okp1bXBM
aXN0IEpJVDo6ZW1pdENvbnRpZ3VvdXNQdXRCeVZhCiAKICAgICBMYWJlbCBzdG9yZVJlc3VsdCA9
IGxhYmVsKCk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDMpOwotICAg
IHN0b3JlUHRyKHJlZ1QzLCBCYXNlSW5kZXgocmVnVDIsIHJlZ1QxLCBTY2FsZVB0cikpOworICAg
IHN0b3JlNjQocmVnVDMsIEJhc2VJbmRleChyZWdUMiwgcmVnVDEsIFRpbWVzRWlnaHQpKTsKICAg
ICAKICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAgICAgb3V0T2ZCb3VuZHMubGluayh0aGlzKTsK
QEAgLTM2NywxMSArMzY3LDExIEBAIEpJVDo6SnVtcExpc3QgSklUOjplbWl0QXJyYXlTdG9yYWdl
UHV0QnkKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZz
ZXQoKSksIHJlZ1QyKTsKICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEFib3ZlT3JFcXVh
bCwgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0
KCkpKSk7CiAKLSAgICBKdW1wIGVtcHR5ID0gYnJhbmNoVGVzdFB0cihaZXJvLCBCYXNlSW5kZXgo
cmVnVDIsIHJlZ1QxLCBTY2FsZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92
ZWN0b3JbMF0pKSk7CisgICAgSnVtcCBlbXB0eSA9IGJyYW5jaFRlc3Q2NChaZXJvLCBCYXNlSW5k
ZXgocmVnVDIsIHJlZ1QxLCBUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdl
LCBtX3ZlY3RvclswXSkpKTsKIAogICAgIExhYmVsIHN0b3JlUmVzdWx0KHRoaXMpOwogICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QzKTsKLSAgICBzdG9yZVB0cihyZWdUMywg
QmFzZUluZGV4KHJlZ1QyLCByZWdUMSwgU2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0
b3JhZ2UsIG1fdmVjdG9yWzBdKSkpOworICAgIHN0b3JlNjQocmVnVDMsIEJhc2VJbmRleChyZWdU
MiwgcmVnVDEsIFRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVj
dG9yWzBdKSkpOwogICAgIEp1bXAgZW5kID0ganVtcCgpOwogICAgIAogICAgIGVtcHR5Lmxpbmso
dGhpcyk7CkBAIC01MzUsNyArNTM1LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVHZXRCeUlkSG90UGF0
aChpbnQgYmFzZQogICAgIGFkZFNsb3dDYXNlKHN0cnVjdHVyZUNoZWNrKTsKIAogICAgIENvbnZl
cnRpYmxlTG9hZExhYmVsIHByb3BlcnR5U3RvcmFnZUxvYWQgPSBjb252ZXJ0aWJsZUxvYWRQdHIo
QWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDApOwotICAg
IERhdGFMYWJlbENvbXBhY3QgZGlzcGxhY2VtZW50TGFiZWwgPSBsb2FkUHRyV2l0aENvbXBhY3RB
ZGRyZXNzT2Zmc2V0UGF0Y2goQWRkcmVzcyhyZWdUMCwgcGF0Y2hHZXRCeUlkRGVmYXVsdE9mZnNl
dCksIHJlZ1QwKTsKKyAgICBEYXRhTGFiZWxDb21wYWN0IGRpc3BsYWNlbWVudExhYmVsID0gbG9h
ZDY0V2l0aENvbXBhY3RBZGRyZXNzT2Zmc2V0UGF0Y2goQWRkcmVzcyhyZWdUMCwgcGF0Y2hHZXRC
eUlkRGVmYXVsdE9mZnNldCksIHJlZ1QwKTsKIAogICAgIExhYmVsIHB1dFJlc3VsdCh0aGlzKTsK
IApAQCAtNjAyLDcgKzYwMiw3IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV9pZChJbnN0cnVj
dGlvbioKICAgICBhZGRTbG93Q2FzZShicmFuY2hQdHJXaXRoUGF0Y2goTm90RXF1YWwsIEFkZHJl
c3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzdHJ1Y3R1cmVUb0NvbXBhcmUs
IFRydXN0ZWRJbW1QdHIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocGF0Y2hHZXRCeUlkRGVmYXVs
dFN0cnVjdHVyZSkpKSk7CiAKICAgICBDb252ZXJ0aWJsZUxvYWRMYWJlbCBwcm9wZXJ0eVN0b3Jh
Z2VMb2FkID0gY29udmVydGlibGVMb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0
ZXJmbHlPZmZzZXQoKSksIHJlZ1QyKTsKLSAgICBEYXRhTGFiZWwzMiBkaXNwbGFjZW1lbnRMYWJl
bCA9IHN0b3JlUHRyV2l0aEFkZHJlc3NPZmZzZXRQYXRjaChyZWdUMSwgQWRkcmVzcyhyZWdUMiwg
cGF0Y2hQdXRCeUlkRGVmYXVsdE9mZnNldCkpOworICAgIERhdGFMYWJlbDMyIGRpc3BsYWNlbWVu
dExhYmVsID0gc3RvcmU2NFdpdGhBZGRyZXNzT2Zmc2V0UGF0Y2gocmVnVDEsIEFkZHJlc3MocmVn
VDIsIHBhdGNoUHV0QnlJZERlZmF1bHRPZmZzZXQpKTsKIAogICAgIEVORF9VTklOVEVSUlVQVEVE
X1NFUVVFTkNFKHNlcXVlbmNlUHV0QnlJZCk7CiAKQEAgLTYzNiwzNSArNjM2LDM1IEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQoSW5zdHJ1Y3QKIHZvaWQgSklUOjpjb21waWxlUHV0
RGlyZWN0T2Zmc2V0KFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCB2YWx1ZSwgUHJvcGVydHlP
ZmZzZXQgY2FjaGVkT2Zmc2V0KQogewogICAgIGlmIChpc0lubGluZU9mZnNldChjYWNoZWRPZmZz
ZXQpKSB7Ci0gICAgICAgIHN0b3JlUHRyKHZhbHVlLCBBZGRyZXNzKGJhc2UsIEpTT2JqZWN0Ojpv
ZmZzZXRPZklubGluZVN0b3JhZ2UoKSArIHNpemVvZihKU1ZhbHVlKSAqIG9mZnNldEluSW5saW5l
U3RvcmFnZShjYWNoZWRPZmZzZXQpKSk7CisgICAgICAgIHN0b3JlNjQodmFsdWUsIEFkZHJlc3Mo
YmFzZSwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpICsgc2l6ZW9mKEpTVmFsdWUp
ICogb2Zmc2V0SW5JbmxpbmVTdG9yYWdlKGNhY2hlZE9mZnNldCkpKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KICAgICAKICAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNPYmplY3Q6OmJ1dHRl
cmZseU9mZnNldCgpKSwgYmFzZSk7Ci0gICAgc3RvcmVQdHIodmFsdWUsIEFkZHJlc3MoYmFzZSwg
c2l6ZW9mKEpTVmFsdWUpICogb2Zmc2V0SW5CdXR0ZXJmbHkoY2FjaGVkT2Zmc2V0KSkpOworICAg
IHN0b3JlNjQodmFsdWUsIEFkZHJlc3MoYmFzZSwgc2l6ZW9mKEpTVmFsdWUpICogb2Zmc2V0SW5C
dXR0ZXJmbHkoY2FjaGVkT2Zmc2V0KSkpOwogfQogCiAvLyBDb21waWxlIGEgbG9hZCBmcm9tIGFu
IG9iamVjdCdzIHByb3BlcnR5IHN0b3JhZ2UuICBNYXkgb3ZlcndyaXRlIGJhc2UuCiB2b2lkIEpJ
VDo6Y29tcGlsZUdldERpcmVjdE9mZnNldChSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgcmVz
dWx0LCBQcm9wZXJ0eU9mZnNldCBjYWNoZWRPZmZzZXQpCiB7CiAgICAgaWYgKGlzSW5saW5lT2Zm
c2V0KGNhY2hlZE9mZnNldCkpIHsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTT2Jq
ZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSArIHNpemVvZihKU1ZhbHVlKSAqIG9mZnNldElu
SW5saW5lU3RvcmFnZShjYWNoZWRPZmZzZXQpKSwgcmVzdWx0KTsKKyAgICAgICAgbG9hZDY0KEFk
ZHJlc3MoYmFzZSwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpICsgc2l6ZW9mKEpT
VmFsdWUpICogb2Zmc2V0SW5JbmxpbmVTdG9yYWdlKGNhY2hlZE9mZnNldCkpLCByZXN1bHQpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAogICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBK
U09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZXN1bHQpOwotICAgIGxvYWRQdHIoQWRkcmVz
cyhyZXN1bHQsIHNpemVvZihKU1ZhbHVlKSAqIG9mZnNldEluQnV0dGVyZmx5KGNhY2hlZE9mZnNl
dCkpLCByZXN1bHQpOworICAgIGxvYWQ2NChBZGRyZXNzKHJlc3VsdCwgc2l6ZW9mKEpTVmFsdWUp
ICogb2Zmc2V0SW5CdXR0ZXJmbHkoY2FjaGVkT2Zmc2V0KSksIHJlc3VsdCk7CiB9CiAKIHZvaWQg
SklUOjpjb21waWxlR2V0RGlyZWN0T2Zmc2V0KEpTT2JqZWN0KiBiYXNlLCBSZWdpc3RlcklEIHJl
c3VsdCwgUHJvcGVydHlPZmZzZXQgY2FjaGVkT2Zmc2V0KQogewogICAgIGlmIChpc0lubGluZU9m
ZnNldChjYWNoZWRPZmZzZXQpKSB7Ci0gICAgICAgIGxvYWRQdHIoYmFzZS0+bG9jYXRpb25Gb3JP
ZmZzZXQoY2FjaGVkT2Zmc2V0KSwgcmVzdWx0KTsKKyAgICAgICAgbG9hZDY0KGJhc2UtPmxvY2F0
aW9uRm9yT2Zmc2V0KGNhY2hlZE9mZnNldCksIHJlc3VsdCk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAgICAgCiAgICAgbG9hZFB0cihiYXNlLT5idXR0ZXJmbHlBZGRyZXNzKCksIHJlc3VsdCk7
Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdCwgb2Zmc2V0SW5CdXR0ZXJmbHkoY2FjaGVkT2Zm
c2V0KSAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSwgcmVzdWx0KTsKKyAgICBsb2Fk
NjQoQWRkcmVzcyhyZXN1bHQsIG9mZnNldEluQnV0dGVyZmx5KGNhY2hlZE9mZnNldCkgKiBzaXpl
b2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSksIHJlc3VsdCk7CiB9CiAKIHZvaWQgSklUOjpwcml2
YXRlQ29tcGlsZVB1dEJ5SWRUcmFuc2l0aW9uKFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywg
U3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlLCBQcm9wZXJ0
eU9mZnNldCBjYWNoZWRPZmZzZXQsIFN0cnVjdHVyZUNoYWluKiBjaGFpbiwgUmV0dXJuQWRkcmVz
c1B0ciByZXR1cm5BZGRyZXNzLCBib29sIGRpcmVjdCkKQEAgLTExOTYsNyArMTE5Niw3IEBAIHZv
aWQgSklUOjplbWl0X29wX2luaXRfZ2xvYmFsX2NvbnN0KEluc3QKIAogICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCwgcmVnVDApOwogCi0g
ICAgc3RvcmVQdHIocmVnVDAsIGN1cnJlbnRJbnN0cnVjdGlvblsxXS51LnJlZ2lzdGVyUG9pbnRl
cik7CisgICAgc3RvcmU2NChyZWdUMCwgY3VycmVudEluc3RydWN0aW9uWzFdLnUucmVnaXN0ZXJQ
b2ludGVyKTsKICAgICBpZiAoSGVhcDo6aXNXcml0ZUJhcnJpZXJFbmFibGVkKCkpCiAgICAgICAg
IGVtaXRXcml0ZUJhcnJpZXIoZ2xvYmFsT2JqZWN0LCByZWdUMCwgcmVnVDIsIFNob3VsZEZpbHRl
ckltbWVkaWF0ZXMsIFdyaXRlQmFycmllckZvclZhcmlhYmxlQWNjZXNzKTsKIH0KQEAgLTEyMDks
NyArMTIwOSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2luaXRfZ2xvYmFsX2NvbnN0X2NoZWMKIAog
ICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCk7CiAKLSAgICBzdG9yZVB0cihyZWdUMCwgY3VycmVudEluc3RydWN0aW9uWzFdLnUucmVn
aXN0ZXJQb2ludGVyKTsKKyAgICBzdG9yZTY0KHJlZ1QwLCBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0u
dS5yZWdpc3RlclBvaW50ZXIpOwogICAgIGlmIChIZWFwOjppc1dyaXRlQmFycmllckVuYWJsZWQo
KSkKICAgICAgICAgZW1pdFdyaXRlQmFycmllcihnbG9iYWxPYmplY3QsIHJlZ1QwLCByZWdUMiwg
U2hvdWxkRmlsdGVySW1tZWRpYXRlcywgV3JpdGVCYXJyaWVyRm9yVmFyaWFibGVBY2Nlc3MpOwog
fQpAQCAtMTUzMCw4ICsxNTMwLDggQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRJbnRUeXBlZEFy
cmF5R2V0QgogICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShyZXN1bHRQYXlsb2FkLCBmcFJl
Z1QwKTsKICAgICAgICAgYWRkRG91YmxlKEFic29sdXRlQWRkcmVzcygmdHdvVG9UaGUzMiksIGZw
UmVnVDApOwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIG1vdmVEb3VibGVUb1B0cihmcFJl
Z1QwLCByZXN1bHRQYXlsb2FkKTsKLSAgICAgICAgc3ViUHRyKHRhZ1R5cGVOdW1iZXJSZWdpc3Rl
ciwgcmVzdWx0UGF5bG9hZCk7CisgICAgICAgIG1vdmVEb3VibGVUbzY0KGZwUmVnVDAsIHJlc3Vs
dFBheWxvYWQpOworICAgICAgICBzdWI2NCh0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHJlc3VsdFBh
eWxvYWQpOwogI2Vsc2UKICAgICAgICAgbW92ZURvdWJsZVRvSW50cyhmcFJlZ1QwLCByZXN1bHRQ
YXlsb2FkLCByZXN1bHRUYWcpOwogI2VuZGlmCkBAIC0xNTQxLDcgKzE1NDEsNyBAQCBKSVQ6Okp1
bXBMaXN0IEpJVDo6ZW1pdEludFR5cGVkQXJyYXlHZXRCCiAgICAgfQogCiAjaWYgVVNFKEpTVkFM
VUU2NCkKLSAgICBvclB0cih0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHJlc3VsdFBheWxvYWQpOwor
ICAgIG9yNjQodGFnVHlwZU51bWJlclJlZ2lzdGVyLCByZXN1bHRQYXlsb2FkKTsKICNlbHNlCiAg
ICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpLCByZXN1bHRUYWcpOwogI2Vu
ZGlmCkBAIC0xNTkwLDggKzE1OTAsOCBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEZsb2F0VHlw
ZWRBcnJheUdlCiAgICAgfQogICAgIAogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgbW92ZURvdWJs
ZVRvUHRyKGZwUmVnVDAsIHJlc3VsdFBheWxvYWQpOwotICAgIHN1YlB0cih0YWdUeXBlTnVtYmVy
UmVnaXN0ZXIsIHJlc3VsdFBheWxvYWQpOworICAgIG1vdmVEb3VibGVUbzY0KGZwUmVnVDAsIHJl
c3VsdFBheWxvYWQpOworICAgIHN1YjY0KHRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgcmVzdWx0UGF5
bG9hZCk7CiAjZWxzZQogICAgIG1vdmVEb3VibGVUb0ludHMoZnBSZWdUMCwgcmVzdWx0UGF5bG9h
ZCwgcmVzdWx0VGFnKTsKICNlbmRpZgpAQCAtMTY5MSw4ICsxNjkxLDggQEAgSklUOjpKdW1wTGlz
dCBKSVQ6OmVtaXRGbG9hdFR5cGVkQXJyYXlQdQogICAgIEp1bXAgcmVhZHkgPSBqdW1wKCk7CiAg
ICAgZG91YmxlQ2FzZS5saW5rKHRoaXMpOwogICAgIHNsb3dDYXNlcy5hcHBlbmQoZW1pdEp1bXBJ
Zk5vdEltbWVkaWF0ZU51bWJlcihlYXJseVNjcmF0Y2gpKTsKLSAgICBhZGRQdHIodGFnVHlwZU51
bWJlclJlZ2lzdGVyLCBlYXJseVNjcmF0Y2gpOwotICAgIG1vdmVQdHJUb0RvdWJsZShlYXJseVNj
cmF0Y2gsIGZwUmVnVDApOworICAgIGFkZDY0KHRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgZWFybHlT
Y3JhdGNoKTsKKyAgICBtb3ZlNjRUb0RvdWJsZShlYXJseVNjcmF0Y2gsIGZwUmVnVDApOwogICAg
IHJlYWR5LmxpbmsodGhpcyk7CiAjZWxzZQogICAgIGVtaXRMb2FkKHZhbHVlLCBsYXRlU2NyYXRj
aCwgZWFybHlTY3JhdGNoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1
YkNhbGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJD
YWxsLmgJKHJldmlzaW9uIDEzMTg1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
U3R1YkNhbGwuaAkod29ya2luZyBjb3B5KQpAQCAtOTQsMTUgKzk0LDE1IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICB7CiAgICAgICAgIH0KIAotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAg
ICAgIEpJVFN0dWJDYWxsKEpJVCogaml0LCBFbmNvZGVkSlNWYWx1ZSAoSklUX1NUVUIgKnN0dWIp
KFNUVUJfQVJHU19ERUNMQVJBVElPTikpCiAgICAgICAgICAgICA6IG1faml0KGppdCkKICAgICAg
ICAgICAgICwgbV9zdHViKHN0dWIpCisjaWYgVVNFKEpTVkFMVUUzMl82NCkgfHwgIUFTU0VSVF9E
SVNBQkxFRAogICAgICAgICAgICAgLCBtX3JldHVyblR5cGUoVmFsdWUpCisjZW5kaWYKICAgICAg
ICAgICAgICwgbV9zdGFja0luZGV4KEpJVFNUQUNLRlJBTUVfQVJHU19JTkRFWCkKICAgICAgICAg
ewogICAgICAgICB9Ci0jZW5kaWYKIAogICAgICAgICAvLyBBcmd1bWVudHMgYXJlIGFkZGVkIGZp
cnN0IHRvIGxhc3QuCiAKQEAgLTEzNyw3ICsxMzcsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAg
ICAgICAgdm9pZCBhZGRBcmd1bWVudChKSVQ6OlJlZ2lzdGVySUQgYXJndW1lbnQpCiAgICAgICAg
IHsKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQogICAgICAgICAgICAgbV9qaXQtPnBva2UoYXJndW1l
bnQsIG1fc3RhY2tJbmRleCk7CisjZWxzZQorICAgICAgICAgICAgbV9qaXQtPnBva2U2NChhcmd1
bWVudCwgbV9zdGFja0luZGV4KTsKKyNlbmRpZgogICAgICAgICAgICAgbV9zdGFja0luZGV4ICs9
IHN0YWNrSW5kZXhTdGVwOwogICAgICAgICB9CiAgICAgICAgIApAQCAtMTQ4LDYgKzE1MiwxOCBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIG1faml0LT5wb2tlKEpJVDo6SW1tMzIodmFs
dWUudGFnKCkpLCBtX3N0YWNrSW5kZXggKyAxKTsKICAgICAgICAgICAgIG1fc3RhY2tJbmRleCAr
PSBzdGFja0luZGV4U3RlcDsKICAgICAgICAgfQorI2Vsc2UKKyAgICAgICAgdm9pZCBhZGRBcmd1
bWVudChKSVQ6OlRydXN0ZWRJbW02NCBhcmd1bWVudCkKKyAgICAgICAgeworICAgICAgICAgICAg
bV9qaXQtPnBva2UoYXJndW1lbnQsIG1fc3RhY2tJbmRleCk7CisgICAgICAgICAgICBtX3N0YWNr
SW5kZXggKz0gc3RhY2tJbmRleFN0ZXA7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGFkZEFy
Z3VtZW50KEpJVDo6SW1tNjQgYXJndW1lbnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1faml0
LT5wb2tlKGFyZ3VtZW50LCBtX3N0YWNrSW5kZXgpOworICAgICAgICAgICAgbV9zdGFja0luZGV4
ICs9IHN0YWNrSW5kZXhTdGVwOworICAgICAgICB9CiAjZW5kaWYKIAogICAgICAgICB2b2lkIGFk
ZEFyZ3VtZW50KEpJVDo6UmVnaXN0ZXJJRCB0YWcsIEpJVDo6UmVnaXN0ZXJJRCBwYXlsb2FkKQpA
QCAtMTc5LDkgKzE5NSw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGFkZEFyZ3Vt
ZW50KHVuc2lnbmVkIHNyYywgSklUOjpSZWdpc3RlcklEIHNjcmF0Y2hSZWdpc3RlcikgLy8gc3Jj
IGlzIGEgdmlydHVhbCByZWdpc3Rlci4KICAgICAgICAgewogICAgICAgICAgICAgaWYgKG1faml0
LT5tX2NvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoc3JjKSkKLSAgICAgICAgICAg
ICAgICBhZGRBcmd1bWVudChKSVQ6OkltbVB0cihKU1ZhbHVlOjplbmNvZGUobV9qaXQtPm1fY29k
ZUJsb2NrLT5nZXRDb25zdGFudChzcmMpKSkpOworICAgICAgICAgICAgICAgIGFkZEFyZ3VtZW50
KEpJVDo6SW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKG1faml0LT5tX2NvZGVCbG9jay0+Z2V0Q29uc3Rh
bnQoc3JjKSkpKTsKICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIG1faml0LT5s
b2FkUHRyKEpJVDo6QWRkcmVzcyhKSVQ6OmNhbGxGcmFtZVJlZ2lzdGVyLCBzcmMgKiBzaXplb2Yo
UmVnaXN0ZXIpKSwgc2NyYXRjaFJlZ2lzdGVyKTsKKyAgICAgICAgICAgICAgICBtX2ppdC0+bG9h
ZDY0KEpJVDo6QWRkcmVzcyhKSVQ6OmNhbGxGcmFtZVJlZ2lzdGVyLCBzcmMgKiBzaXplb2YoUmVn
aXN0ZXIpKSwgc2NyYXRjaFJlZ2lzdGVyKTsKICAgICAgICAgICAgICAgICBhZGRBcmd1bWVudChz
Y3JhdGNoUmVnaXN0ZXIpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbV9qaXQtPmtpbGxM
YXN0UmVzdWx0UmVnaXN0ZXIoKTsKQEAgLTI0Miw3ICsyNTgsNyBAQCBuYW1lc3BhY2UgSlNDIHsK
ICNlbHNlCiAgICAgICAgIEpJVDo6Q2FsbCBjYWxsKHVuc2lnbmVkIGRzdCkgLy8gZHN0IGlzIGEg
dmlydHVhbCByZWdpc3Rlci4KICAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKG1fcmV0dXJu
VHlwZSA9PSBWb2lkUHRyIHx8IG1fcmV0dXJuVHlwZSA9PSBDZWxsKTsKKyAgICAgICAgICAgIEFT
U0VSVChtX3JldHVyblR5cGUgPT0gVmFsdWUgfHwgbV9yZXR1cm5UeXBlID09IENlbGwpOwogICAg
ICAgICAgICAgSklUOjpDYWxsIGNhbGwgPSB0aGlzLT5jYWxsKCk7CiAgICAgICAgICAgICBtX2pp
dC0+ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogICAgICAgICAgICAgcmV0dXJuIGNhbGw7
CkBAIC0yNTAsNyArMjY2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIAogICAgICAgICBK
SVQ6OkNhbGwgY2FsbFdpdGhWYWx1ZVByb2ZpbGluZyh1bnNpZ25lZCBkc3QpCiAgICAgICAgIHsK
LSAgICAgICAgICAgIEFTU0VSVChtX3JldHVyblR5cGUgPT0gVm9pZFB0ciB8fCBtX3JldHVyblR5
cGUgPT0gQ2VsbCk7CisgICAgICAgICAgICBBU1NFUlQobV9yZXR1cm5UeXBlID09IFZhbHVlIHx8
IG1fcmV0dXJuVHlwZSA9PSBDZWxsKTsKICAgICAgICAgICAgIEpJVDo6Q2FsbCBjYWxsID0gdGhp
cy0+Y2FsbCgpOwogICAgICAgICAgICAgQVNTRVJUKEpJVDo6cmV0dXJuVmFsdWVSZWdpc3RlciA9
PSBKSVQ6OnJlZ1QwKTsKICAgICAgICAgICAgIG1faml0LT5lbWl0VmFsdWVQcm9maWxpbmdTaXRl
KCk7CkBAIC0yNjEsMTAgKzI3Nyw4IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIEpJVDo6
Q2FsbCBjYWxsKEpJVDo6UmVnaXN0ZXJJRCBkc3QpIC8vIGRzdCBpcyBhIG1hY2hpbmUgcmVnaXN0
ZXIuCiAgICAgICAgIHsKLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQorI2lmIFVTRShKU1ZBTFVFMzJf
NjQpIHx8ICFBU1NFUlRfRElTQUJMRUQKICAgICAgICAgICAgIEFTU0VSVChtX3JldHVyblR5cGUg
PT0gVmFsdWUgfHwgbV9yZXR1cm5UeXBlID09IFZvaWRQdHIgfHwgbV9yZXR1cm5UeXBlID09IElu
dCB8fCBtX3JldHVyblR5cGUgPT0gQ2VsbCk7Ci0jZWxzZQotICAgICAgICAgICAgQVNTRVJUKG1f
cmV0dXJuVHlwZSA9PSBWb2lkUHRyIHx8IG1fcmV0dXJuVHlwZSA9PSBJbnQgfHwgbV9yZXR1cm5U
eXBlID09IENlbGwpOwogI2VuZGlmCiAgICAgICAgICAgICBKSVQ6OkNhbGwgY2FsbCA9IHRoaXMt
PmNhbGwoKTsKICAgICAgICAgICAgIGlmIChkc3QgIT0gSklUOjpyZXR1cm5WYWx1ZVJlZ2lzdGVy
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KU0ludGVyZmFjZUpJVC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSlNJbnRlcmZhY2VKSVQuaAkocmV2
aXNpb24gMTMxODUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KU0ludGVyZmFjZUpJ
VC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNzAsMzYgKzI3MCwzNiBAQCBuYW1lc3BhY2UgSlNDIHsK
ICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIEFMV0FZU19JTkxJTkUgSlNJbnRlcmZhY2VKSVQ6Okp1
bXAgSlNJbnRlcmZhY2VKSVQ6OmVtaXRKdW1wSWZJbW1lZGlhdGVOdW1iZXIoUmVnaXN0ZXJJRCBy
ZWcpCiAgICAgewotICAgICAgICByZXR1cm4gYnJhbmNoVGVzdFB0cihOb25aZXJvLCByZWcsIHRh
Z1R5cGVOdW1iZXJSZWdpc3Rlcik7CisgICAgICAgIHJldHVybiBicmFuY2hUZXN0NjQoTm9uWmVy
bywgcmVnLCB0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOwogICAgIH0KICAgICBBTFdBWVNfSU5MSU5F
IEpTSW50ZXJmYWNlSklUOjpKdW1wIEpTSW50ZXJmYWNlSklUOjplbWl0SnVtcElmTm90SW1tZWRp
YXRlTnVtYmVyKFJlZ2lzdGVySUQgcmVnKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGJyYW5jaFRl
c3RQdHIoWmVybywgcmVnLCB0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOworICAgICAgICByZXR1cm4g
YnJhbmNoVGVzdDY0KFplcm8sIHJlZywgdGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKICAgICB9CiAg
ICAgaW5saW5lIEpTSW50ZXJmYWNlSklUOjpKdW1wIEpTSW50ZXJmYWNlSklUOjplbWl0TG9hZEpT
Q2VsbCh1bnNpZ25lZCB2aXJ0dWFsUmVnaXN0ZXJJbmRleCwgUmVnaXN0ZXJJRCBkc3QpCiAgICAg
ewotICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVySW5kZXgpLCBkc3Qp
OwotICAgICAgICByZXR1cm4gYnJhbmNoVGVzdFB0cihOb25aZXJvLCBkc3QsIHRhZ01hc2tSZWdp
c3Rlcik7CisgICAgICAgIGxvYWQ2NChhZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlckluZGV4KSwg
ZHN0KTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaFRlc3Q2NChOb25aZXJvLCBkc3QsIHRhZ01hc2tS
ZWdpc3Rlcik7CiAgICAgfQogICAgIAogICAgIGlubGluZSBKU0ludGVyZmFjZUpJVDo6SnVtcCBK
U0ludGVyZmFjZUpJVDo6ZW1pdExvYWRJbnQzMih1bnNpZ25lZCB2aXJ0dWFsUmVnaXN0ZXJJbmRl
eCwgUmVnaXN0ZXJJRCBkc3QpCiAgICAgewotICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3Iodmly
dHVhbFJlZ2lzdGVySW5kZXgpLCBkc3QpOwotICAgICAgICBKdW1wIHJlc3VsdCA9IGJyYW5jaFB0
cihCZWxvdywgZHN0LCB0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOworICAgICAgICBsb2FkNjQoYWRk
cmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXJJbmRleCksIGRzdCk7CisgICAgICAgIEp1bXAgcmVzdWx0
ID0gYnJhbmNoNjQoQmVsb3csIGRzdCwgdGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKICAgICAgICAg
emVyb0V4dGVuZDMyVG9QdHIoZHN0LCBkc3QpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAg
IH0KIAogICAgIGlubGluZSBKU0ludGVyZmFjZUpJVDo6SnVtcCBKU0ludGVyZmFjZUpJVDo6ZW1p
dExvYWREb3VibGUodW5zaWduZWQgdmlydHVhbFJlZ2lzdGVySW5kZXgsIEZQUmVnaXN0ZXJJRCBk
c3QsIFJlZ2lzdGVySUQgc2NyYXRjaCkKICAgICB7Ci0gICAgICAgIGxvYWRQdHIoYWRkcmVzc0Zv
cih2aXJ0dWFsUmVnaXN0ZXJJbmRleCksIHNjcmF0Y2gpOworICAgICAgICBsb2FkNjQoYWRkcmVz
c0Zvcih2aXJ0dWFsUmVnaXN0ZXJJbmRleCksIHNjcmF0Y2gpOwogICAgICAgICBKdW1wIG5vdE51
bWJlciA9IGVtaXRKdW1wSWZOb3RJbW1lZGlhdGVOdW1iZXIoc2NyYXRjaCk7Ci0gICAgICAgIEp1
bXAgbm90SW50ID0gYnJhbmNoUHRyKEJlbG93LCBzY3JhdGNoLCB0YWdUeXBlTnVtYmVyUmVnaXN0
ZXIpOworICAgICAgICBKdW1wIG5vdEludCA9IGJyYW5jaDY0KEJlbG93LCBzY3JhdGNoLCB0YWdU
eXBlTnVtYmVyUmVnaXN0ZXIpOwogICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShzY3JhdGNo
LCBkc3QpOwogICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAgICAgICAgIG5vdEludC5saW5r
KHRoaXMpOwotICAgICAgICBhZGRQdHIodGFnVHlwZU51bWJlclJlZ2lzdGVyLCBzY3JhdGNoKTsK
LSAgICAgICAgbW92ZVB0clRvRG91YmxlKHNjcmF0Y2gsIGRzdCk7CisgICAgICAgIGFkZDY0KHRh
Z1R5cGVOdW1iZXJSZWdpc3Rlciwgc2NyYXRjaCk7CisgICAgICAgIG1vdmU2NFRvRG91YmxlKHNj
cmF0Y2gsIGRzdCk7CiAgICAgICAgIGRvbmUubGluayh0aGlzKTsKICAgICAgICAgcmV0dXJuIG5v
dE51bWJlcjsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NwZWNpYWxp
emVkVGh1bmtKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Nw
ZWNpYWxpemVkVGh1bmtKSVQuaAkocmV2aXNpb24gMTMxODUwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9TcGVjaWFsaXplZFRodW5rSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTkwLDkg
KzkwLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgcmV0dXJuRG91YmxlKEZQUmVn
aXN0ZXJJRCBzcmMpCiAgICAgICAgIHsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICAgICAg
bW92ZURvdWJsZVRvUHRyKHNyYywgcmVnVDApOwotICAgICAgICAgICAgSnVtcCB6ZXJvID0gYnJh
bmNoVGVzdFB0cihaZXJvLCByZWdUMCk7Ci0gICAgICAgICAgICBzdWJQdHIodGFnVHlwZU51bWJl
clJlZ2lzdGVyLCByZWdUMCk7CisgICAgICAgICAgICBtb3ZlRG91YmxlVG82NChzcmMsIHJlZ1Qw
KTsKKyAgICAgICAgICAgIEp1bXAgemVybyA9IGJyYW5jaFRlc3Q2NChaZXJvLCByZWdUMCk7Cisg
ICAgICAgICAgICBzdWI2NCh0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHJlZ1QwKTsKICAgICAgICAg
ICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKICAgICAgICAgICAgIHplcm8ubGluayh0aGlzKTsKICAg
ICAgICAgICAgIG1vdmUodGFnVHlwZU51bWJlclJlZ2lzdGVyLCByZWdUMCk7CkBAIC0xNTEsNyAr
MTUxLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgdGFnUmV0dXJuQXNJbnQzMigp
CiAgICAgICAgIHsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICAgICAgb3JQdHIodGFnVHlw
ZU51bWJlclJlZ2lzdGVyLCByZWdUMCk7CisgICAgICAgICAgICBvcjY0KHRhZ1R5cGVOdW1iZXJS
ZWdpc3RlciwgcmVnVDApOwogI2Vsc2UKICAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OkludDMyVGFnKSwgcmVnVDEpOwogI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1ZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1ZhbHVlLmNwcAkocmV2aXNpb24gMTMxODUwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwNCw3
ICsyMDQsNyBAQCBjaGFyKiBKU1ZhbHVlOjpkZXNjcmlwdGlvbigpIGNvbnN0CiAgICAgICAgIHNu
cHJpbnRmKGRlc2NyaXB0aW9uLCBzaXplLCAiSW50MzI6ICVkIiwgYXNJbnQzMigpKTsKICAgICBl
bHNlIGlmIChpc0RvdWJsZSgpKSB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgc25wcmlu
dGYoZGVzY3JpcHRpb24sIHNpemUsICJEb3VibGU6ICVseCwgJWxmIiwgcmVpbnRlcnByZXREb3Vi
bGVUb0ludHB0cihhc0RvdWJsZSgpKSwgYXNEb3VibGUoKSk7CisgICAgICAgIHNucHJpbnRmKGRl
c2NyaXB0aW9uLCBzaXplLCAiRG91YmxlOiAlbGxkLCAlbGYiLCAobG9uZyBsb25nKXJlaW50ZXJw
cmV0RG91YmxlVG9JbnQ2NChhc0RvdWJsZSgpKSwgYXNEb3VibGUoKSk7CiAjZWxzZQogICAgICAg
ICB1bmlvbiB7CiAgICAgICAgICAgICBkb3VibGUgYXNEb3VibGU7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNWYWx1ZS5oCShyZXZpc2lvbiAxMzE4NTApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY5LDEx
ICs2OSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGVudW0gUHJlZmVycmVkUHJpbWl0aXZlVHlw
ZSB7IE5vUHJlZmVyZW5jZSwgUHJlZmVyTnVtYmVyLCBQcmVmZXJTdHJpbmcgfTsKIAogCi0jaWYg
VVNFKEpTVkFMVUUzMl82NCkKICAgICB0eXBlZGVmIGludDY0X3QgRW5jb2RlZEpTVmFsdWU7Ci0j
ZWxzZQotICAgIHR5cGVkZWYgdm9pZCogRW5jb2RlZEpTVmFsdWU7Ci0jZW5kaWYKICAgICAKICAg
ICB1bmlvbiBFbmNvZGVkVmFsdWVEZXNjcmlwdG9yIHsKICAgICAgICAgaW50NjRfdCBhc0ludDY0
OwpAQCAtMzkwLDkgKzM4Niw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBFbmNvZGVkVmFs
dWVEZXNjcmlwdG9yIHU7CiAgICAgfTsKIAotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgdHlw
ZWRlZiBJbnRIYXNoPEVuY29kZWRKU1ZhbHVlPiBFbmNvZGVkSlNWYWx1ZUhhc2g7CiAKKyNpZiBV
U0UoSlNWQUxVRTMyXzY0KQogICAgIHN0cnVjdCBFbmNvZGVkSlNWYWx1ZUhhc2hUcmFpdHMgOiBI
YXNoVHJhaXRzPEVuY29kZWRKU1ZhbHVlPiB7CiAgICAgICAgIHN0YXRpYyBjb25zdCBib29sIGVt
cHR5VmFsdWVJc1plcm8gPSBmYWxzZTsKICAgICAgICAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIGVt
cHR5VmFsdWUoKSB7IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsgfQpAQCAtNDAw
LDggKzM5Niw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdGF0aWMgYm9vbCBpc0RlbGV0
ZWRWYWx1ZShFbmNvZGVkSlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gdmFsdWUgPT0gSlNWYWx1ZTo6
ZW5jb2RlKEpTVmFsdWUoSlNWYWx1ZTo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlKSk7IH0KICAgICB9
OwogI2Vsc2UKLSAgICB0eXBlZGVmIFB0ckhhc2g8RW5jb2RlZEpTVmFsdWU+IEVuY29kZWRKU1Zh
bHVlSGFzaDsKLQogICAgIHN0cnVjdCBFbmNvZGVkSlNWYWx1ZUhhc2hUcmFpdHMgOiBIYXNoVHJh
aXRzPEVuY29kZWRKU1ZhbHVlPiB7CiAgICAgICAgIHN0YXRpYyB2b2lkIGNvbnN0cnVjdERlbGV0
ZWRWYWx1ZShFbmNvZGVkSlNWYWx1ZSYgc2xvdCkgeyBzbG90ID0gSlNWYWx1ZTo6ZW5jb2RlKEpT
VmFsdWUoSlNWYWx1ZTo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlKSk7IH0KICAgICAgICAgc3RhdGlj
IGJvb2wgaXNEZWxldGVkVmFsdWUoRW5jb2RlZEpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIHZhbHVl
ID09IEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKEpTVmFsdWU6Okhhc2hUYWJsZURlbGV0ZWRWYWx1
ZSkpOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhbHVlSW5saW5l
TWV0aG9kcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
VmFsdWVJbmxpbmVNZXRob2RzLmgJKHJldmlzaW9uIDEzMTg1MCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTVmFsdWVJbmxpbmVNZXRob2RzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTE0MCw3ICsxNDAsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgKnRoaXMgPSBKU1ZhbHVl
KHN0YXRpY19jYXN0PGludDMyX3Q+KGQpKTsKICAgICB9CiAKLSNpZiBVU0UoSlNWQUxVRTMyXzY0
KQogICAgIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSB2YWx1
ZSkKICAgICB7CiAgICAgICAgIHJldHVybiB2YWx1ZS51LmFzSW50NjQ7CkBAIC0xNTMsNiArMTUy
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHJldHVybiB2OwogICAgIH0KIAorI2lmIFVT
RShKU1ZBTFVFMzJfNjQpCiAgICAgaW5saW5lIEpTVmFsdWU6OkpTVmFsdWUoKQogICAgIHsKICAg
ICAgICAgdS5hc0JpdHMudGFnID0gRW1wdHlWYWx1ZVRhZzsKQEAgLTMzMywxNyArMzMzLDYgQEAg
bmFtZXNwYWNlIEpTQyB7CiAKICNlbHNlIC8vICFVU0UoSlNWQUxVRTMyXzY0KSBpLmUuIFVTRShK
U1ZBTFVFNjQpCiAKLSAgICAvLyBKU1ZhbHVlIG1lbWJlciBmdW5jdGlvbnMuCi0gICAgaW5saW5l
IEVuY29kZWRKU1ZhbHVlIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIHZhbHVlLnUucHRyOwotICAgIH0KLQotICAgIGlubGluZSBKU1ZhbHVlIEpT
VmFsdWU6OmRlY29kZShFbmNvZGVkSlNWYWx1ZSBwdHIpCi0gICAgewotICAgICAgICByZXR1cm4g
SlNWYWx1ZShyZWludGVycHJldF9jYXN0PEpTQ2VsbCo+KHB0cikpOwotICAgIH0KLQogICAgIC8v
IDB4MCBjYW4gbmV2ZXIgb2NjdXIgbmF0dXJhbGx5IGJlY2F1c2UgaXQgaGFzIGEgdGFnIG9mIDAw
LCBpbmRpY2F0aW5nIGEgcG9pbnRlciB2YWx1ZSwgYnV0IGEgcGF5bG9hZCBvZiAweDAsIHdoaWNo
IGlzIGluIHRoZSAoaW52YWxpZCkgemVybyBwYWdlLgogICAgIGlubGluZSBKU1ZhbHVlOjpKU1Zh
bHVlKCkKICAgICB7CkBAIC0zNTgsMjcgKzM0NywyNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAg
IGlubGluZSBKU1ZhbHVlOjpKU1ZhbHVlKEpTQ2VsbCogcHRyKQogICAgIHsKLSAgICAgICAgdS5w
dHIgPSBwdHI7CisgICAgICAgIHUuYXNJbnQ2NCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90
PihwdHIpOwogICAgIH0KIAogICAgIGlubGluZSBKU1ZhbHVlOjpKU1ZhbHVlKGNvbnN0IEpTQ2Vs
bCogcHRyKQogICAgIHsKLSAgICAgICAgdS5wdHIgPSBjb25zdF9jYXN0PEpTQ2VsbCo+KHB0cik7
CisgICAgICAgIHUuYXNJbnQ2NCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pihjb25zdF9j
YXN0PEpTQ2VsbCo+KHB0cikpOwogICAgIH0KIAogICAgIGlubGluZSBKU1ZhbHVlOjpvcGVyYXRv
ciBib29sKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiB1LnB0cjsKKyAgICAgICAgcmV0
dXJuIHUuYXNJbnQ2NDsKICAgICB9CiAKICAgICBpbmxpbmUgYm9vbCBKU1ZhbHVlOjpvcGVyYXRv
cj09KGNvbnN0IEpTVmFsdWUmIG90aGVyKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIHUu
cHRyID09IG90aGVyLnUucHRyOworICAgICAgICByZXR1cm4gdS5hc0ludDY0ID09IG90aGVyLnUu
YXNJbnQ2NDsKICAgICB9CiAKICAgICBpbmxpbmUgYm9vbCBKU1ZhbHVlOjpvcGVyYXRvciE9KGNv
bnN0IEpTVmFsdWUmIG90aGVyKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIHUucHRyICE9
IG90aGVyLnUucHRyOworICAgICAgICByZXR1cm4gdS5hc0ludDY0ICE9IG90aGVyLnUuYXNJbnQ2
NDsKICAgICB9CiAKICAgICBpbmxpbmUgYm9vbCBKU1ZhbHVlOjppc0VtcHR5KCkgY29uc3QKQEAg
LTQ2NCwxOCArNDUzLDE4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICByZXR1cm4gKHUuYXNJ
bnQ2NCAmIFRhZ1R5cGVOdW1iZXIpID09IFRhZ1R5cGVOdW1iZXI7CiAgICAgfQogCi0gICAgaW5s
aW5lIGludHB0cl90IHJlaW50ZXJwcmV0RG91YmxlVG9JbnRwdHIoZG91YmxlIHZhbHVlKQorICAg
IGlubGluZSBpbnQ2NF90IHJlaW50ZXJwcmV0RG91YmxlVG9JbnQ2NChkb3VibGUgdmFsdWUpCiAg
ICAgewotICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PGludHB0cl90Pih2YWx1ZSk7CisgICAg
ICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8aW50NjRfdD4odmFsdWUpOwogICAgIH0KLSAgICBpbmxp
bmUgZG91YmxlIHJlaW50ZXJwcmV0SW50cHRyVG9Eb3VibGUoaW50cHRyX3QgdmFsdWUpCisgICAg
aW5saW5lIGRvdWJsZSByZWludGVycHJldEludDY0VG9Eb3VibGUoaW50NjRfdCB2YWx1ZSkKICAg
ICB7CiAgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8ZG91YmxlPih2YWx1ZSk7CiAgICAgfQog
CiAgICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlOjpKU1ZhbHVlKEVuY29kZUFzRG91YmxlVGFnLCBk
b3VibGUgZCkKICAgICB7Ci0gICAgICAgIHUuYXNJbnQ2NCA9IHJlaW50ZXJwcmV0RG91YmxlVG9J
bnRwdHIoZCkgKyBEb3VibGVFbmNvZGVPZmZzZXQ7CisgICAgICAgIHUuYXNJbnQ2NCA9IHJlaW50
ZXJwcmV0RG91YmxlVG9JbnQ2NChkKSArIERvdWJsZUVuY29kZU9mZnNldDsKICAgICB9CiAKICAg
ICBpbmxpbmUgSlNWYWx1ZTo6SlNWYWx1ZShpbnQgaSkKQEAgLTQ4Niw3ICs0NzUsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICBpbmxpbmUgZG91YmxlIEpTVmFsdWU6OmFzRG91YmxlKCkgY29uc3QK
ICAgICB7CiAgICAgICAgIEFTU0VSVChpc0RvdWJsZSgpKTsKLSAgICAgICAgcmV0dXJuIHJlaW50
ZXJwcmV0SW50cHRyVG9Eb3VibGUodS5hc0ludDY0IC0gRG91YmxlRW5jb2RlT2Zmc2V0KTsKKyAg
ICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0SW50NjRUb0RvdWJsZSh1LmFzSW50NjQgLSBEb3VibGVF
bmNvZGVPZmZzZXQpOwogICAgIH0KIAogICAgIGlubGluZSBib29sIEpTVmFsdWU6OmlzTnVtYmVy
KCkgY29uc3QK
</data>
<flag name="review"
          id="182885"
          type_id="1"
          status="+"
          setter="barraclough"
    />
          </attachment>
      

    </bug>

</bugzilla>