<?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>44329</bug_id>
          
          <creation_ts>2010-08-20 03:19:48 -0700</creation_ts>
          <short_desc>SH4 JIT SUPPORT</short_desc>
          <delta_ts>2011-04-14 02:59:43 -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>WebCore JavaScript</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>Linux</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>46796</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="thouraya">thouraya.andolsi</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>barraclough</cc>
    
    <cc>buildbot</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dave+webkit</cc>
    
    <cc>ddkilzer</cc>
    
    <cc>edufelipe</cc>
    
    <cc>eric</cc>
    
    <cc>giuseppe.di-giore</cc>
    
    <cc>gstephan</cc>
    
    <cc>kbalazs</cc>
    
    <cc>loki</cc>
    
    <cc>oliver</cc>
    
    <cc>ossy</cc>
    
    <cc>paroga</cc>
    
    <cc>ssseintr2</cc>
    
    <cc>staikos</cc>
    
    <cc>thouraya.andolsi</cc>
    
    <cc>thouraya.andolsi</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>267187</commentid>
    <comment_count>0</comment_count>
      <attachid>64941</attachid>
    <who name="thouraya">thouraya.andolsi</who>
    <bug_when>2010-08-20 03:19:48 -0700</bug_when>
    <thetext>Created attachment 64941
SH4 build system support

Hello,


We have ported in STMicroelectronics the squirrelfish javascript engine to SH4 processor.

We would like to contribute the SH4 JIT support for JavaScriptCore.

Here attached a first patch generated for the revision 65071 containing : 
 - some changes in the build system to support sh4 GDK/DIRECTFB back-end.
 - some changes in build-jsc to generate the jsc executable for gtk.
 - some changes in the GtkLauncher to use proxy.

Next time I will provide a patch for JIT and another one for plugin support for GDK/DIRECTFB.


Feedbacks are welcome.

Best regards.
Thouraya.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>269073</commentid>
    <comment_count>1</comment_count>
    <who name="thouraya">thouraya.andolsi</who>
    <bug_when>2010-08-25 00:57:26 -0700</bug_when>
    <thetext>Hello,

Can someone give me the steps to follow to contribute the SH4 JIT support for JavaScriptCore ?

Best regards,
Thouraya.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>273382</commentid>
    <comment_count>2</comment_count>
    <who name="Patrick R. Gansterer">paroga</who>
    <bug_when>2010-09-02 07:31:44 -0700</bug_when>
    <thetext>I&apos;m not a reviewer but this patch is a clear r-:
1) Missing ChangeLog
2) You change many independent things in one patch
3) You change introduce stuff noone uses. E.g.:
&gt; +#if defined(__sh__)
&gt; +#define WTF_CPU_SH 1
&gt; +#endif
&gt; +
There is no check for CPU(SH) in the code.
4) You cange wrong things. E.g.:
&gt; -#if !(defined(USE_SYSTEM_MALLOC) &amp;&amp; USE_SYSTEM_MALLOC) &amp;&amp; defined(NDEBUG)
&gt; +#if !(defined(USE_SYSTEM_MALLOC) &amp;&amp; USE_SYSTEM_MALLOC) &amp;&amp; defined(NDEBUG) || CPU(SH4)
&gt;  #define FORCE_SYSTEM_MALLOC 0
&gt;  #else
&gt;  #define FORCE_SYSTEM_MALLOC 1
This is the wrong place for a CPU(SH4)

See http://webkit.org/coding/contributing.html for more information.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>273388</commentid>
    <comment_count>3</comment_count>
    <who name="Gabor Loki">loki</who>
    <bug_when>2010-09-02 07:49:38 -0700</bug_when>
    <thetext>&gt; Can someone give me the steps to follow to contribute the SH4 JIT support for JavaScriptCore ?

There is a nice example in bug 30144 how to contribute a new JIT port to WebKit.

1.- introduce the basic functionality of the SH4 JIT for the YARR module.
2.- extend the SH4Assembler and MacroAssemblerSH4 file to support the remaining part of JIT
3.- enable the SH4 JIT by default</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>279544</commentid>
    <comment_count>4</comment_count>
      <attachid>67675</attachid>
    <who name="thouraya">thouraya.andolsi</who>
    <bug_when>2010-09-15 07:59:37 -0700</bug_when>
    <thetext>Created attachment 67675
SH4 JIT for YARR</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>279547</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-09-15 08:04:40 -0700</bug_when>
    <thetext>Attachment 67675 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
Last 3072 characters of output:
ptCore/assembler/SH4Assembler.h:1351:  movw_rm is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
JavaScriptCore/assembler/SH4Assembler.h:1359:  movw_mr is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
JavaScriptCore/assembler/SH4Assembler.h:1367:  movw_mr is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
JavaScriptCore/assembler/SH4Assembler.h:1382:  movw_r0mr is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
JavaScriptCore/assembler/SH4Assembler.h:1389:  movl_rm is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
JavaScriptCore/assembler/SH4Assembler.h:1404:  movl_rm is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
JavaScriptCore/assembler/SH4Assembler.h:1413:  movl_i32m is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
JavaScriptCore/assembler/SH4Assembler.h:1433:  movl_mr is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
JavaScriptCore/assembler/SH4Assembler.h:1451:  movb_mr is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
JavaScriptCore/assembler/SH4Assembler.h:1461:  movb_r0mr is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
JavaScriptCore/assembler/SH4Assembler.h:1468:  movb_mr is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
JavaScriptCore/assembler/SH4Assembler.h:1475:  movl_mr is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
JavaScriptCore/assembler/SH4Assembler.h:1482:  movl_r0mr is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
JavaScriptCore/assembler/SH4Assembler.h:1489:  movl_rmr0 is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
JavaScriptCore/assembler/SH4Assembler.h:1497:  movl_i8r is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
JavaScriptCore/assembler/SH4Assembler.h:1505:  orl_ir is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
JavaScriptCore/assembler/SH4Assembler.h:1554:  jmp_r is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
JavaScriptCore/assembler/SH4Assembler.h:1560:  jmp_m is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
JavaScriptCore/assembler/MacroAssemblerSH4.h:76:  claim_scratch is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
JavaScriptCore/assembler/MacroAssemblerSH4.h:81:  release_scratch is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 90 in 7 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>279556</commentid>
    <comment_count>6</comment_count>
    <who name="Patrick R. Gansterer">paroga</who>
    <bug_when>2010-09-15 08:35:09 -0700</bug_when>
    <thetext>Can you please set the obsolete flag at the old patch and the patch flag at the new one. This will enable the &quot;Review Patch&quot; Links beside the patch ;-).

I can&apos;t say something about the real content, but I saw some possible style improvements:
1) Use ASSERT_NOT_REACHED() instead of ASSERT(0).
   And maybe ASSERT_ARG in the case of &quot;ASSERT((cond == Zero) || (cond == NonZero))&quot;

2) One-line control clauses should not use braces unless comments are included or a single statement spans multiple lines. e.g:
+      } else {
+          m_assembler.xorl_i8r(imm.m_value, srcDest);
+      }

3) You add spaces, where tabs are uses usually:
 	JavaScriptCore/assembler/MacroAssemblerX86.h \
+        JavaScriptCore/assembler/MacroAssemblerSH4.h \
 	JavaScriptCore/assembler/RepatchBuffer.h \

4) Can you please move the header in ExecutableAllocator.h to the top of the file. No reason to add #include in the middle of the code. The code seams linux specific (LINUX_PAGE_SIZE), so let&apos;s add &quot; &amp;&amp; OS(LINUX)&quot; to &quot;#elif CPU(SH4)&quot;

5) Prefer const to #define. Prefer inline functions to macros.
+#define LINUX_PAGE_SIZE       4096
can be written like
static const unsigend defaultLinuxPageSize = 4096;


IMHO you can create the cacheFlush change as an independet patch. This will make review easier.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>279597</commentid>
    <comment_count>7</comment_count>
    <who name="Gabor Loki">loki</who>
    <bug_when>2010-09-15 10:13:32 -0700</bug_when>
    <thetext>&gt; Created an attachment (id=67675) [details]

Hmmm, you have implemented your own constant/literal pool for SH4. Why? Is the AssemblerBufferWithConstantPool is not sufficent for SH4?

As I see you follow a very similar way to attach the data and pointers into the instruction stream as we have done in AssemblerBufferWithConstantPool. At first sight I did not see any reason why the SH4 should have its own pool implementation. I suggest you try to use the AssemblerBufferWithConstantPool interface for SH4. If you have any problem or question about the interface, you can contact me at IRC.

In addition, I agree with Patrick about the style issue:
- use static const ints, enums and inline functions instead of macros
- fix tabs, unnecessary parenthesis and other trivial style errors which are reported by the check-webkit-style script.

One more question:
What was the problem with the generatePatternCharacterPair function? Why do you have to read a simple character? (I am not familiar with the SH4 architecture)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>280001</commentid>
    <comment_count>8</comment_count>
    <who name="thouraya">thouraya.andolsi</who>
    <bug_when>2010-09-16 03:40:44 -0700</bug_when>
    <thetext>Hello,

(In reply to comment #7)
&gt; &gt; Created an attachment (id=67675) [details] [details]
&gt; 
&gt; Hmmm, you have implemented your own constant/literal pool for SH4. Why? Is the AssemblerBufferWithConstantPool is not sufficent for SH4?
&gt; 
&gt; As I see you follow a very similar way to attach the data and pointers into the instruction stream as we have done in AssemblerBufferWithConstantPool. At first sight I did not see any reason why the SH4 should have its own pool implementation. I suggest you try to use the AssemblerBufferWithConstantPool interface for SH4. If you have any problem or question about the interface, you can contact me at IRC.

We implemented our constant pool before you add AssemblerBufferWithConstantPool.

I&apos;ll try to use it and let you know.

&gt; 
&gt; In addition, I agree with Patrick about the style issue:
&gt; - use static const ints, enums and inline functions instead of macros
&gt; - fix tabs, unnecessary parenthesis and other trivial style errors which are reported by the check-webkit-style script.
&gt; 
&gt; One more question:
&gt; What was the problem with the generatePatternCharacterPair function? Why do you have to read a simple character? (I am not familiar with the SH4 architecture)

We have to read a simple character because the address should be correctly aligned for a long-word otherwise we&apos;ll get a misaligned address.

Regards,
Thouraya.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>280690</commentid>
    <comment_count>9</comment_count>
    <who name="thouraya">thouraya.andolsi</who>
    <bug_when>2010-09-17 09:49:30 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; &gt; Created an attachment (id=67675) [details] [details]
&gt; 
&gt; Hmmm, you have implemented your own constant/literal pool for SH4. Why? Is the AssemblerBufferWithConstantPool is not sufficent for SH4?
&gt; 
&gt; As I see you follow a very similar way to attach the data and pointers into the instruction stream as we have done in AssemblerBufferWithConstantPool. At first sight I did not see any reason why the SH4 should have its own pool implementation. I suggest you try to use the AssemblerBufferWithConstantPool interface for SH4. If you have any problem or question about the interface, you can contact me at IRC.
&gt; 
&gt; In addition, I agree with Patrick about the style issue:
&gt; - use static const ints, enums and inline functions instead of macros
&gt; - fix tabs, unnecessary parenthesis and other trivial style errors which are reported by the check-webkit-style script.
&gt; 
&gt; One more question:
&gt; What was the problem with the generatePatternCharacterPair function? Why do you have to read a simple character? (I am not familiar with the SH4 architecture)

Hello,

I started to use the AssemblerBufferWithConstantPool :

in arm you are encoding the offset of the constant in the constant pool in the LDR instruction (offset &lt;&lt; 1 + 1).

to know if the constant was dumped or no, you have just to see the last bit, if it&apos;s 1 the constant is not yet dumped otherwise it&apos;s dumped.
 
But in sh4 we are using the mov@PC-relative and the offset can be pair or impair.

that&apos;s why we added the offset of the LDR instruction in our structure. 

so, when we dump the constant Pool we patch the LDR instructions.

so to know if the constant is not yet dumped, we need just to look at the offset of the LDR instruction which shoold be 0.



Please rectify if I m wrong.

Ciao,
Thouraya.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>281408</commentid>
    <comment_count>10</comment_count>
    <who name="Gabor Loki">loki</who>
    <bug_when>2010-09-20 00:17:54 -0700</bug_when>
    <thetext>&gt; in arm you are encoding the offset of the constant in the constant pool in the LDR instruction (offset &lt;&lt; 1 + 1).
&gt; 
&gt; to know if the constant was dumped or no, you have just to see the last bit, if it&apos;s 1 the constant is not yet dumped otherwise it&apos;s dumped.

No. The AssemblerBufferWithConstantPool::flushConstantPool function will dump the pool into the instruction stream. In point of fact there is no need any kind of decorator. In case of ARM the last bit decorator is just a legacy helper (from there were no MASM and CP interfaces).

&gt; But in sh4 we are using the mov@PC-relative and the offset can be pair or impair.

It can be done simply with the current AssemblerBufferWithConstantPool. There are two kind of patchConstantPoolLoad functions. One is to store the index of constants/literals, while the real constants are in a vector. The second one is to patch those instructions which hold the indexes with real constants to create the final instructions.

For example:
1) After a putIntWithConstantInt(insn, constant) is called.
 - the constant is saved in a vector
 - a TYPE patchConstantPoolLoad(TYPE load, int value) is called where
  the value is the position of the constant in the pool.
...
2) After the flushConstantPool is called
 - the void patchConstantPoolLoad(void* loadAddr, void* constPoolAddr) is called for each constants/literals in the pool to build the final instruction

You can see there is no pressure to decorate the addresses. If you are brave just store the index with the first patchConstantPoolLoad function and repatch this index with the final instruction. There is only one restriction: the final and the index-holder instructions should have the same length.

(Hmm, we should rename them. It looks like the naming-convention of the patchConstantPoolLoad functions are quite confusing.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>281440</commentid>
    <comment_count>11</comment_count>
    <who name="">thouraya.andolsi</who>
    <bug_when>2010-09-20 01:25:24 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; &gt; in arm you are encoding the offset of the constant in the constant pool in the LDR instruction (offset &lt;&lt; 1 + 1).
&gt; &gt; 
&gt; &gt; to know if the constant was dumped or no, you have just to see the last bit, if it&apos;s 1 the constant is not yet dumped otherwise it&apos;s dumped.
&gt; 
&gt; No. The AssemblerBufferWithConstantPool::flushConstantPool function will dump the pool into the instruction stream. In point of fact there is no need any kind of decorator. In case of ARM the last bit decorator is just a legacy helper (from there were no MASM and CP interfaces).
&gt; 
&gt; &gt; But in sh4 we are using the mov@PC-relative and the offset can be pair or impair.
&gt; 
&gt; It can be done simply with the current AssemblerBufferWithConstantPool. There are two kind of patchConstantPoolLoad functions. One is to store the index of constants/literals, while the real constants are in a vector. The second one is to patch those instructions which hold the indexes with real constants to create the final instructions.
&gt; 
&gt; For example:
&gt; 1) After a putIntWithConstantInt(insn, constant) is called.
&gt;  - the constant is saved in a vector
&gt;  - a TYPE patchConstantPoolLoad(TYPE load, int value) is called where
&gt;   the value is the position of the constant in the pool.
&gt; ...
&gt; 2) After the flushConstantPool is called
&gt;  - the void patchConstantPoolLoad(void* loadAddr, void* constPoolAddr) is called for each constants/literals in the pool to build the final instruction
&gt; 
&gt; You can see there is no pressure to decorate the addresses. If you are brave just store the index with the first patchConstantPoolLoad function and repatch this index with the final instruction. There is only one restriction: the final and the index-holder instructions should have the same length.
&gt; 
&gt; (Hmm, we should rename them. It looks like the naming-convention of the patchConstantPoolLoad functions are quite confusing.)


Hello,

My problem comes when I call the function linkJump(JmpSrc from, JmpDst to) to patch the Jump instruction.

the offset for the jump is loaded into a register because we don&apos;t know if it can be reached by the jump instruction or not.

if the constant pool  is dumped we have to store the real offset, otherwise we have to  put the correct offset in the vector.

but I don&apos;t have a way to know if the constant is dumped or no.
In your case if the offset of the LDR instruction is pair it&apos;s dumped otherwise it is not yet dumped.


Regards.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>281479</commentid>
    <comment_count>12</comment_count>
    <who name="Gabor Loki">loki</who>
    <bug_when>2010-09-20 03:41:22 -0700</bug_when>
    <thetext>&gt; if the constant pool  is dumped we have to store the real offset, otherwise we have to  put the correct offset in the vector.
&gt; 
&gt; but I don&apos;t have a way to know if the constant is dumped or no.

Well, I have take a short look into the SH4 instruction set.
So, you use mov.l @(disp,PC), Rn to load an address to a register, don&apos;t you?
Why don&apos;t you patch the instruction in case of not dumped offset (or a dumped one)?

For example:
You can use mov.w @(disp,PC), Rn instead of mov.l until the CP is dumped. Using mov.w is safe, the load16 should not be used to load a pointer to jump on. During the dump you can still patch the instruction to mov.l.

Just check your code! The void movw_mr(int offset, RegisterID base, RegisterID dst) currently is an unused function. So, there is a bit to flip. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>286774</commentid>
    <comment_count>13</comment_count>
      <attachid>69170</attachid>
    <who name="thouraya">thouraya.andolsi</who>
    <bug_when>2010-09-29 01:43:44 -0700</bug_when>
    <thetext>Created attachment 69170
SH4 JIT for YARR 2

Hello,

Attached a new patch including the basic functionality of the SH4 JIT for the YARR module and using the webkit&apos;s constant pool.

Using the check-webkit-style script, I have got some errors like &quot;incorrectly named. Don&apos;t use underscores in your identifier names&quot; but the same functions exists in X86, should I rename them ?

Regards,
Thouraya.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>286775</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-09-29 01:47:16 -0700</bug_when>
    <thetext>Attachment 69170 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
Last 3072 characters of output:
aming] [4]
JavaScriptCore/assembler/SH4Assembler.h:1191:  mov_imm8 is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
JavaScriptCore/assembler/SH4Assembler.h:1198:  movl_rr is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
JavaScriptCore/assembler/SH4Assembler.h:1206:  movw_rm is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
JavaScriptCore/assembler/SH4Assembler.h:1214:  movw_mr is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
JavaScriptCore/assembler/SH4Assembler.h:1222:  movw_mr is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
JavaScriptCore/assembler/SH4Assembler.h:1236:  movw_r0mr is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
JavaScriptCore/assembler/SH4Assembler.h:1243:  movl_rm is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
JavaScriptCore/assembler/SH4Assembler.h:1258:  movl_rm is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
JavaScriptCore/assembler/SH4Assembler.h:1267:  movl_i32m is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
JavaScriptCore/assembler/SH4Assembler.h:1287:  movl_mr is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
JavaScriptCore/assembler/SH4Assembler.h:1305:  movb_mr is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
JavaScriptCore/assembler/SH4Assembler.h:1315:  movb_r0mr is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
JavaScriptCore/assembler/SH4Assembler.h:1322:  movb_mr is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
JavaScriptCore/assembler/SH4Assembler.h:1329:  movl_mr is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
JavaScriptCore/assembler/SH4Assembler.h:1336:  movl_r0mr is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
JavaScriptCore/assembler/SH4Assembler.h:1343:  movl_rmr0 is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
JavaScriptCore/assembler/SH4Assembler.h:1351:  movl_i8r is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
JavaScriptCore/assembler/SH4Assembler.h:1359:  orl_ir is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
JavaScriptCore/assembler/SH4Assembler.h:1419:  jmp_r is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
JavaScriptCore/assembler/SH4Assembler.h:1426:  jmp_m is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 86 in 8 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>286797</commentid>
    <comment_count>15</comment_count>
    <who name="Gabor Loki">loki</who>
    <bug_when>2010-09-29 04:25:58 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; Created an attachment (id=69170) [details]

It looks like you forgot to set the &apos;patch&apos; flag on your attachment. You can do it at the &apos;Details&apos; page.

&gt; Attached a new patch including the basic functionality of the SH4 JIT for the YARR module and using the webkit&apos;s constant pool.

Well, the constant pool should be target independent. I do not like the ifdefs at there, but I see why you need that workaround. I will extend the constant pool interface with the required changes. (I have created bug 46796 to follow up that changes.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>287640</commentid>
    <comment_count>16</comment_count>
      <attachid>69349</attachid>
    <who name="thouraya">thouraya.andolsi</who>
    <bug_when>2010-09-30 10:37:54 -0700</bug_when>
    <thetext>Created attachment 69349
JIT for YARR 3

Hello,

Attached a new patch after using the patch you provided to extend the constant pool interface.

I&apos;m waiting for you feedback to add the remaining part of JIT.

Regards.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>287644</commentid>
    <comment_count>17</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-09-30 10:40:48 -0700</bug_when>
    <thetext>Attachment 69349 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
Last 3072 characters of output:
aming] [4]
JavaScriptCore/assembler/SH4Assembler.h:1197:  mov_imm8 is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
JavaScriptCore/assembler/SH4Assembler.h:1204:  movl_rr is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
JavaScriptCore/assembler/SH4Assembler.h:1212:  movw_rm is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
JavaScriptCore/assembler/SH4Assembler.h:1220:  movw_mr is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
JavaScriptCore/assembler/SH4Assembler.h:1228:  movw_mr is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
JavaScriptCore/assembler/SH4Assembler.h:1242:  movw_r0mr is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
JavaScriptCore/assembler/SH4Assembler.h:1249:  movl_rm is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
JavaScriptCore/assembler/SH4Assembler.h:1264:  movl_rm is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
JavaScriptCore/assembler/SH4Assembler.h:1273:  movl_i32m is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
JavaScriptCore/assembler/SH4Assembler.h:1293:  movl_mr is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
JavaScriptCore/assembler/SH4Assembler.h:1311:  movb_mr is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
JavaScriptCore/assembler/SH4Assembler.h:1321:  movb_r0mr is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
JavaScriptCore/assembler/SH4Assembler.h:1328:  movb_mr is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
JavaScriptCore/assembler/SH4Assembler.h:1335:  movl_mr is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
JavaScriptCore/assembler/SH4Assembler.h:1342:  movl_r0mr is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
JavaScriptCore/assembler/SH4Assembler.h:1349:  movl_rmr0 is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
JavaScriptCore/assembler/SH4Assembler.h:1357:  movl_i8r is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
JavaScriptCore/assembler/SH4Assembler.h:1365:  orl_ir is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
JavaScriptCore/assembler/SH4Assembler.h:1425:  jmp_r is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
JavaScriptCore/assembler/SH4Assembler.h:1432:  jmp_m is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 86 in 7 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>287690</commentid>
    <comment_count>18</comment_count>
      <attachid>69349</attachid>
    <who name="Patrick R. Gansterer">paroga</who>
    <bug_when>2010-09-30 11:31:31 -0700</bug_when>
    <thetext>Comment on attachment 69349
JIT for YARR 3

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

&gt; JavaScriptCore/ChangeLog:10
&gt; +        Add assembler instructions for SH4 platform
&gt; +
&gt; +        * GNUmakefile.am:
&gt; +        * assembler/MacroAssembler.h:
&gt; +        * jit/ExecutableAllocator.h:
&gt; +        (JSC::ExecutableAllocator::cacheFlush):

You do not mention the implementation of chacheFlush for SH4 in the ChangeLog. Maybe you can create a own patch only for the changes in ExecutableAllocator.h.

&gt; JavaScriptCore/jit/ExecutableAllocator.h:310
&gt; +static const unsigned defaultLinuxPageSize = 4096;

IMHO this should be intendet 4 spaces, because it&apos;s C code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>294190</commentid>
    <comment_count>19</comment_count>
      <attachid>70749</attachid>
    <who name="thouraya">thouraya.andolsi</who>
    <bug_when>2010-10-14 10:43:25 -0700</bug_when>
    <thetext>Created attachment 70749
SH4 JIT 

Hi,

You can find attached all the JIT support for SH4.

I&apos;m waiting for your feedbacks.

Regards,
Thouraya.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>294191</commentid>
    <comment_count>20</comment_count>
      <attachid>70750</attachid>
    <who name="thouraya">thouraya.andolsi</who>
    <bug_when>2010-10-14 10:45:51 -0700</bug_when>
    <thetext>Created attachment 70750
JIT ENABLE for SH4

Hi,

A new patch enabling JIT for SH4.

Regards,
Thouraya.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>294633</commentid>
    <comment_count>21</comment_count>
    <who name="Gabor Loki">loki</who>
    <bug_when>2010-10-15 01:24:50 -0700</bug_when>
    <thetext>&gt; JavaScriptCore/GNUmakefile.am:544
&gt; +if CPU_SH4
&gt; +javascriptcore_sources += \
&gt; +    JavaScriptCore/jit/JITArithmetic_sh4.cpp
&gt; +else
&gt; +javascriptcore_sources += \
&gt; +    JavaScriptCore/jit/JITArithmetic.cpp
&gt; +endif

Is it really necessary? And what is about JSValue32_64?

&gt; JavaScriptCore/assembler/MacroAssemblerSH4.h:5
&gt; + * Copyright (C) 2009-2010 STMicroelectronics. All rights reserved.
&gt; + * Written by Thouraya Andolsi (thouraya.andolsi@st.com).
&gt; + *
&gt; + * Copyright (C) 2008 Apple Inc. All rights reserved.

It is possible that you had SH4 JIT since 2009, but the public version is just released in this year.
The &quot;Written by&quot; line should be another Copyright line instead (for example: Copyright (C) 2010 Thouraya Andolsi &lt;thouraya.andolsi@st.com&gt;), and the Copyright lines should be in ascending time order.

&gt; JavaScriptCore/assembler/SH4Assembler.cpp:22
&gt; +void* SH4Assembler::executableCopy(ExecutablePool* allocator)
&gt; +{
&gt; +    void* copy = m_buffer.executableCopy(allocator);
&gt; +
&gt; +    ASSERT(copy);
&gt; +    return copy;
&gt; +}

If this executableCopy just calls its buffer&apos;s executableCopy, you should move this function as an inline function into the header.

&gt; JavaScriptCore/assembler/SH4Assembler.h:38
&gt; +#define GETOPCODE1(a, b, c)  ((a) | (((b) &amp; 0xf) &lt;&lt; 8) |(((c) &amp; 0xf) &lt;&lt; 4))
&gt; +#define GETOPCODE2(a, b)  ((a) | (((b) &amp; 0xf) &lt;&lt; 8))

Please, use inline functions and better names (see the formatter of Thumb-2 JIT).

&gt; JavaScriptCore/assembler/SH4Assembler.h:54
&gt; +#define INVALID_OPCODE   0xffff
&gt; +#define ADD_OPCODE       0x300C
&gt; +#define ADDIMM_OPCODE    0x7000
&gt; +#define ADDC_OPCODE      0x300E
&gt; +#define ADDV_OPCODE      0x300F

It would be better using enumerations instead of defines.

&gt; JavaScriptCore/assembler/SH4Assembler.h:270
&gt; +        R14 = 14,
&gt; +        R15 = 15,
&gt; +        SP  = R15,
&gt; +        FP  = R14,

There is no need for all initializers. See:
R0
...
R13,
R14, FP = R14,
R15, SP = R15,
PC,
PR

&gt; JavaScriptCore/assembler/SH4Assembler.h:394
&gt; +        if ((constant &lt;=127) &amp;&amp; (constant &gt;= -128))

There is a missing space before 127 constant. The inner parentheses are not needed.

&gt; JavaScriptCore/assembler/SH4Assembler.h:521
&gt; +        ASSERT((imm8 &lt;=127) &amp;&amp; (imm8 &gt;= -128));

Again, missing space before 127 and parentheses.

&gt; JavaScriptCore/assembler/SH4Assembler.h:708
&gt; +        oneShortOp(opc);
&gt; +
&gt; +    }

There is unnecessary empty line at the end of a function.

&gt; JavaScriptCore/assembler/SH4Assembler.h:751
&gt; +        case HS: opc = GETOPCODE1(CMPHS_OPCODE, right, left); // HS

I guess this comment is not necessary. ;)

&gt; JavaScriptCore/assembler/SH4Assembler.h:1527
&gt; +            instruction = (0x0023 | (*instructionPtr++ &amp; 0xF00));

We prefer enumerations and static integers instead of magic numbers. Well, it is not necessary for every cases, but it can help to understand the code (especially when you are altering an instruction).

&gt; JavaScriptCore/assembler/SH4Assembler.h:1540
&gt; +            uint16_t* address  = (uint16_t*)((offsetToPC &lt;&lt; 2) + (((unsigned int)instructionPtr + 4) &amp;(~0x3)));

Use C++ like type conversion (static_cast&lt;&gt;, reinterpret_cast&lt;&gt;, etc.) instead of this C cast!

&gt; JavaScriptCore/assembler/SH4Assembler.h:1763
&gt; +         } else  
&gt; +            ASSERT_NOT_REACHED();

If it is true, you should remove the last &apos;if&apos; statement and use an ASSERT inside the last (else) block instead of this solution.
For example:
if () {
} else if () {
} else {
  ASSERT(cond);
}

&gt; JavaScriptCore/assembler/SH4Assembler.h:1838
&gt; +        /*
&gt; +        code@  mov.l @(offset , PC) , reg
&gt; +    */  

There is a white-space problem in this comment.

&gt; JavaScriptCore/jit/JIT.cpp:121
&gt;  #else
&gt; +#if CPU(SH4)
&gt; +void JIT::emitTimeoutCheck()
&gt; +{
&gt; +    m_assembler.dt(timeoutCheckRegister);
&gt; +
&gt; +    Jump skipTimeout = Jump(m_assembler.jne());
&gt; +    m_assembler.nop();
&gt; +    m_assembler.nop();
&gt; +    JITStubCall(this, cti_timeout_check).call(timeoutCheckRegister);
&gt; +    skipTimeout.link(this);
&gt; +
&gt; +    killLastResultRegister();
&gt; +}
&gt; +#else
&gt;  void JIT::emitTimeoutCheck()

Why is it necessary? What is SH4&apos;s problem about the common solution?

&gt; JavaScriptCore/jit/JIT.h:475
&gt;          void emitJumpSlowCaseIfJSCell(RegisterID);
&gt; +#if CPU(SH4)
&gt; +        Jump emitJumpIfNotJSCell(RegisterID, bool needConstant = true);
&gt; +#else
&gt;          Jump emitJumpIfNotJSCell(RegisterID);
&gt; +#endif
&gt;          void emitJumpSlowCaseIfNotJSCell(RegisterID);

Could you tell us more why these kind of changes are necessary in the common interface? So many changes in the common code!

&gt; JavaScriptCore/jit/JITArithmetic_sh4.cpp:32
&gt; +extern unsigned int __fpscr_values[2];

Hmm, where is the initializer of this? Is it some kind of static array? And what will you do with it if there is multiple JSC thread?


Well, the assembler part of this patch is fine (with some cosmetic changes), but I do not support those *big* changes in the common interface of JIT. I do not think that it is impossible to handle those problems with jumps and literals in the current macroassembler interface. I know the macroassembler is a little bit x86 specific, but ARM (with ARM and Thumb-2 instruction set) and MIPS can also fit this infrastructure well. So, I encourage you to rewrite the MacroAssemblerSH4 interface to reduce the current changes in the common interface. However, Thouraya, you did a great work to implement SH4 JIT, but I think your patch is not acceptable in the current form.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>294668</commentid>
    <comment_count>22</comment_count>
    <who name="thouraya">thouraya.andolsi</who>
    <bug_when>2010-10-15 03:09:22 -0700</bug_when>
    <thetext>Hello,

(In reply to comment #21)
&gt; &gt; JavaScriptCore/GNUmakefile.am:544
&gt; &gt; +if CPU_SH4
&gt; &gt; +javascriptcore_sources += \
&gt; &gt; +    JavaScriptCore/jit/JITArithmetic_sh4.cpp
&gt; &gt; +else
&gt; &gt; +javascriptcore_sources += \
&gt; &gt; +    JavaScriptCore/jit/JITArithmetic.cpp
&gt; &gt; +endif
&gt; 
&gt; Is it really necessary? And what is about JSValue32_64?

We started working on webkit in 2009 and we are updating it from the trunk each time.

At that time there was some calls directly to X86 registers, so I prefered to create a customized file for SH4 in order to optimize a bit.

The port is for 32-bit.
We can work on 64-bit , after the 32-bit port is accepted.


&gt; 
&gt; &gt; JavaScriptCore/assembler/MacroAssemblerSH4.h:5
&gt; &gt; + * Copyright (C) 2009-2010 STMicroelectronics. All rights reserved.
&gt; &gt; + * Written by Thouraya Andolsi (thouraya.andolsi@st.com).
&gt; &gt; + *
&gt; &gt; + * Copyright (C) 2008 Apple Inc. All rights reserved.
&gt; 
&gt; It is possible that you had SH4 JIT since 2009, but the public version is just released in this year.

We started working on Webkit JIT in 2009, but it was available in 2010.

&gt; The &quot;Written by&quot; line should be another Copyright line instead (for example: Copyright (C) 2010 Thouraya Andolsi &lt;thouraya.andolsi@st.com&gt;), and the Copyright lines should be in ascending time order.
&gt; 
&gt; &gt; JavaScriptCore/assembler/SH4Assembler.cpp:22
&gt; &gt; +void* SH4Assembler::executableCopy(ExecutablePool* allocator)
&gt; &gt; +{
&gt; &gt; +    void* copy = m_buffer.executableCopy(allocator);
&gt; &gt; +
&gt; &gt; +    ASSERT(copy);
&gt; &gt; +    return copy;
&gt; &gt; +}
&gt; 
&gt; If this executableCopy just calls its buffer&apos;s executableCopy, you should move this function as an inline function into the header.
&gt; 
&gt; &gt; JavaScriptCore/assembler/SH4Assembler.h:38
&gt; &gt; +#define GETOPCODE1(a, b, c)  ((a) | (((b) &amp; 0xf) &lt;&lt; 8) |(((c) &amp; 0xf) &lt;&lt; 4))
&gt; &gt; +#define GETOPCODE2(a, b)  ((a) | (((b) &amp; 0xf) &lt;&lt; 8))
&gt; 
&gt; Please, use inline functions and better names (see the formatter of Thumb-2 JIT).
&gt; 
&gt; &gt; JavaScriptCore/assembler/SH4Assembler.h:54
&gt; &gt; +#define INVALID_OPCODE   0xffff
&gt; &gt; +#define ADD_OPCODE       0x300C
&gt; &gt; +#define ADDIMM_OPCODE    0x7000
&gt; &gt; +#define ADDC_OPCODE      0x300E
&gt; &gt; +#define ADDV_OPCODE      0x300F
&gt; 
&gt; It would be better using enumerations instead of defines.
&gt; 
&gt; &gt; JavaScriptCore/assembler/SH4Assembler.h:270
&gt; &gt; +        R14 = 14,
&gt; &gt; +        R15 = 15,
&gt; &gt; +        SP  = R15,
&gt; &gt; +        FP  = R14,
&gt; 
&gt; There is no need for all initializers. See:
&gt; R0
&gt; ...
&gt; R13,
&gt; R14, FP = R14,
&gt; R15, SP = R15,
&gt; PC,
&gt; PR
&gt; 
&gt; &gt; JavaScriptCore/assembler/SH4Assembler.h:394
&gt; &gt; +        if ((constant &lt;=127) &amp;&amp; (constant &gt;= -128))
&gt; 
&gt; There is a missing space before 127 constant. The inner parentheses are not needed.
&gt; 
&gt; &gt; JavaScriptCore/assembler/SH4Assembler.h:521
&gt; &gt; +        ASSERT((imm8 &lt;=127) &amp;&amp; (imm8 &gt;= -128));
&gt; 
&gt; Again, missing space before 127 and parentheses.
&gt; 
&gt; &gt; JavaScriptCore/assembler/SH4Assembler.h:708
&gt; &gt; +        oneShortOp(opc);
&gt; &gt; +
&gt; &gt; +    }
&gt; 
&gt; There is unnecessary empty line at the end of a function.
&gt; 
&gt; &gt; JavaScriptCore/assembler/SH4Assembler.h:751
&gt; &gt; +        case HS: opc = GETOPCODE1(CMPHS_OPCODE, right, left); // HS
&gt; 
&gt; I guess this comment is not necessary. ;)

yes of course :)
&gt; 
&gt; &gt; JavaScriptCore/assembler/SH4Assembler.h:1527
&gt; &gt; +            instruction = (0x0023 | (*instructionPtr++ &amp; 0xF00));
&gt; 
&gt; We prefer enumerations and static integers instead of magic numbers. Well, it is not necessary for every cases, but it can help to understand the code (especially when you are altering an instruction).
&gt; 
&gt; &gt; JavaScriptCore/assembler/SH4Assembler.h:1540
&gt; &gt; +            uint16_t* address  = (uint16_t*)((offsetToPC &lt;&lt; 2) + (((unsigned int)instructionPtr + 4) &amp;(~0x3)));
&gt; 
&gt; Use C++ like type conversion (static_cast&lt;&gt;, reinterpret_cast&lt;&gt;, etc.) instead of this C cast!
&gt; 
&gt; &gt; JavaScriptCore/assembler/SH4Assembler.h:1763
&gt; &gt; +         } else  
&gt; &gt; +            ASSERT_NOT_REACHED();
&gt; 
&gt; If it is true, you should remove the last &apos;if&apos; statement and use an ASSERT inside the last (else) block instead of this solution.
&gt; For example:
&gt; if () {
&gt; } else if () {
&gt; } else {
&gt;   ASSERT(cond);
&gt; }
&gt; 
&gt; &gt; JavaScriptCore/assembler/SH4Assembler.h:1838
&gt; &gt; +        /*
&gt; &gt; +        code@  mov.l @(offset , PC) , reg
&gt; &gt; +    */  
&gt; 
&gt; There is a white-space problem in this comment.
&gt; 
&gt; &gt; JavaScriptCore/jit/JIT.cpp:121
&gt; &gt;  #else
&gt; &gt; +#if CPU(SH4)
&gt; &gt; +void JIT::emitTimeoutCheck()
&gt; &gt; +{
&gt; &gt; +    m_assembler.dt(timeoutCheckRegister);
&gt; &gt; +
&gt; &gt; +    Jump skipTimeout = Jump(m_assembler.jne());
&gt; &gt; +    m_assembler.nop();
&gt; &gt; +    m_assembler.nop();
&gt; &gt; +    JITStubCall(this, cti_timeout_check).call(timeoutCheckRegister);
&gt; &gt; +    skipTimeout.link(this);
&gt; &gt; +
&gt; &gt; +    killLastResultRegister();
&gt; &gt; +}
&gt; &gt; +#else
&gt; &gt;  void JIT::emitTimeoutCheck()
&gt; 
&gt; Why is it necessary? What is SH4&apos;s problem about the common solution?

The common solution should work fine, but with our solution we reduce the number of instructions.

DT is equivalent to subtract one and compare.


&gt; 
&gt; &gt; JavaScriptCore/jit/JIT.h:475
&gt; &gt;          void emitJumpSlowCaseIfJSCell(RegisterID);
&gt; &gt; +#if CPU(SH4)
&gt; &gt; +        Jump emitJumpIfNotJSCell(RegisterID, bool needConstant = true);
&gt; &gt; +#else
&gt; &gt;          Jump emitJumpIfNotJSCell(RegisterID);
&gt; &gt; +#endif
&gt; &gt;          void emitJumpSlowCaseIfNotJSCell(RegisterID);
&gt; 
&gt; Could you tell us more why these kind of changes are necessary in the common interface? So many changes in the common code!

The offset of branch instruction may be huge, so we need to load it in the constantPool especially when jumping to slowcases.

In other cases the offset is reachable and we dont need to load it, that&apos;s why I added this parameter.


&gt; 
&gt; &gt; JavaScriptCore/jit/JITArithmetic_sh4.cpp:32
&gt; &gt; +extern unsigned int __fpscr_values[2];
&gt; 
&gt; Hmm, where is the initializer of this? Is it some kind of static array? And what will you do with it if there is multiple JSC thread?
&gt; 
&gt; 
&gt; Well, the assembler part of this patch is fine (with some cosmetic changes), but I do not support those *big* changes in the common interface of JIT. I do not think that it is impossible to handle those problems with jumps and literals in the current macroassembler interface. I know the macroassembler is a little bit x86 specific, but ARM (with ARM and Thumb-2 instruction set) and MIPS can also fit this infrastructure well. So, I encourage you to rewrite the MacroAssemblerSH4 interface to reduce the current changes in the common interface. However, Thouraya, you did a great work to implement SH4 JIT, but I think your patch is not acceptable in the current form.

In the common code, there are a lot of branches and the offsets are known when linking.
when branching to solwcase, the offset is not reachable, so we need to load it in the constantPool, otherwise there is no need. that&apos;s why I added in branch functions a parameter to check  if we need to load a constant or not.


Removing the changes done in the common code, webkit should work fine in SH4,
but there are a lot of constants loaded in the constantpool in banch instructions but offsets are reached.

Regards,
Thouraya.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>294676</commentid>
    <comment_count>23</comment_count>
      <attachid>70749</attachid>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2010-10-15 03:48:55 -0700</bug_when>
    <thetext>Comment on attachment 70749
SH4 JIT 

r-, because it isn&apos;t ready for landing yet (based on https://bugs.webkit.org/show_bug.cgi?id=44329#c21 )</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>294677</commentid>
    <comment_count>24</comment_count>
      <attachid>70750</attachid>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2010-10-15 03:52:49 -0700</bug_when>
    <thetext>Comment on attachment 70750
JIT ENABLE for SH4

First the SH4 JIT patch should be landed. I removed the r? 
flag, please set it again when the base patch landed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>294678</commentid>
    <comment_count>25</comment_count>
    <who name="thouraya">thouraya.andolsi</who>
    <bug_when>2010-10-15 04:04:30 -0700</bug_when>
    <thetext>(In reply to comment #24)
&gt; (From update of attachment 70750 [details])
&gt; First the SH4 JIT patch should be landed. I removed the r? 
&gt; flag, please set it again when the base patch landed.

Hi,

Should I resubmit an updated version? or reset the review flag to ?

Regards,
Thouraya.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>294679</commentid>
    <comment_count>26</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2010-10-15 04:07:13 -0700</bug_when>
    <thetext>(In reply to comment #25)
&gt; Should I resubmit an updated version? or reset the review flag to ?

I just realized your patches should be updated to ToT too to apply.
So after the base patch landed, please update the enabling patch to ToT.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>294696</commentid>
    <comment_count>27</comment_count>
    <who name="Gabor Loki">loki</who>
    <bug_when>2010-10-15 04:56:30 -0700</bug_when>
    <thetext>&gt; We can work on 64-bit , after the 32-bit port is accepted.

There are not so much changes to get JSValue32_64 working (if you have a JSValue32 version).

&gt; The common solution should work fine, but with our solution we reduce the number of instructions.

Well, we have to sacrifice some performance to have a common masm and jit. Unfortunately the same thing is true for each architecture.

&gt; In the common code, there are a lot of branches and the offsets are known when linking.
&gt; when branching to solwcase, the offset is not reachable, so we need to load it in the constantPool, otherwise there is no need. that&apos;s why I added in branch functions a parameter to check  if we need to load a constant or not.

On ARMv5 and below the situation is the same, there are lots of pc relative loads which read a pointer or a big number. There are only very few cases when we are able to encode a constant into an instruction (most of those constants appear in the arithmetic part of jit).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>297168</commentid>
    <comment_count>28</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-10-20 17:35:51 -0700</bug_when>
    <thetext>I&apos;m afraid I&apos;m a little overloaded, and don&apos;t have time to look at this in detail right now, but three key issues stand out:

(1) Unfortunately we&apos;ve just deprecated JSVALUE32 support, so you will need to update to support JSVALUE32_64.

(2) MacroAssembler is intended to provided a common code generation abstraction across all architectures, providing a single universal interface – we need this interface to line up on all platforms.  The branch* methods need to adhere to the current interface.

(3) In order to be able to move the JIT forwards on all platforms we are keen to see the bulk of the JIT remain architecture-neutral, and common in implementation across all platforms.  We&apos;re not looking to include a duplicate set of implementations for all arithmetic opcode specific to any platform.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>306828</commentid>
    <comment_count>29</comment_count>
    <who name="Eduardo Felipe Castegnaro">edufelipe</who>
    <bug_when>2010-11-09 09:34:43 -0800</bug_when>
    <thetext>Sorry to jump in the discussion, but I can&apos;t seem to find an SVN revision against which this patch applies cleanly.

I&apos;ve contacted Thouraya (author of the patch), and he pointed out revision 1.3.3 of WebKitGTK+, but his latest patch has rejects even against that version.

I would like to test it, but after two days trying to apply it and fix the rejects, I&apos;m almost giving up. Could anyone help?

Thanks in advance,
Eduardo.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>306835</commentid>
    <comment_count>30</comment_count>
    <who name="STEPHAN Gael">gstephan</who>
    <bug_when>2010-11-09 09:41:38 -0800</bug_when>
    <thetext>As indicated in the very beginning of the bug:


&quot;Here attached a first patch generated for the revision 65071 containing...&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>306853</commentid>
    <comment_count>31</comment_count>
    <who name="Eduardo Felipe Castegnaro">edufelipe</who>
    <bug_when>2010-11-09 10:11:10 -0800</bug_when>
    <thetext>(In reply to comment #30)
&gt; As indicated in the very beginning of the bug:
&gt; 
&gt; 
&gt; &quot;Here attached a first patch generated for the revision 65071 containing...&quot;\

I guess I needed someone to point out the obvious for me. As he updated the patches I also imagined he moved the target without trying the first on. Silly of me. Thanks a lot!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>307355</commentid>
    <comment_count>32</comment_count>
    <who name="Eduardo Felipe Castegnaro">edufelipe</who>
    <bug_when>2010-11-10 07:58:23 -0800</bug_when>
    <thetext>After applying SH4 JIT and JIT ENABLE for SH4 patches cleanly on 65071, and Constant Pool patch with a single change, I&apos;m still having errors compiling:

JavaScriptCore/jit/JITArithmetic.cpp: In member function ‘void JSC::JIT::emit_op_rshift(JSC::Instruction*)’:
JavaScriptCore/jit/JITArithmetic.cpp:123: error: no matching function for call to ‘JSC::JIT::loadDouble(JSC::AbstractMacroAssembler&lt;JSC::SH4Assembler&gt;::Address, const JSC::SH4::FPRegisterID&amp;)’
JavaScriptCore/assembler/MacroAssemblerSH4.h:517: note: candidates are: void JSC::MacroAssemblerSH4::loadDouble(JSC::AbstractMacroAssembler&lt;JSC::SH4Assembler&gt;::ImplicitAddress, JSC::SH4::FPRegisterID, JSC::SH4::RegisterID)
JavaScriptCore/assembler/MacroAssemblerSH4.h:522: note:                 void JSC::MacroAssemblerSH4::loadDouble(JSC::SH4::RegisterID, JSC::SH4::FPRegisterID)
JavaScriptCore/jit/JITArithmetic.cpp: In member function ‘void JSC::JIT::emit_op_urshift(JSC::Instruction*)’:
JavaScriptCore/jit/JITArithmetic.cpp:203: error: ‘urshift32’ was not declared in this scope
JavaScriptCore/jit/JITArithmetic.cpp:223: error: ‘urshift32’ was not declared in this scope


urshift32 is defined for ARM, MIPS and x86, but not for SH4. And the fist no matching call I have no idea how to adapt. Any thoughts? Is 65071 the right version for this patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>307357</commentid>
    <comment_count>33</comment_count>
    <who name="">thouraya.andolsi</who>
    <bug_when>2010-11-10 08:08:05 -0800</bug_when>
    <thetext>Hello,

Applying those patches, you should have a file called JITArithmetic_sh4.cpp
You should use it instead of JITArithmetic.cpp.

It should be included in JavaScriptCore/GNUmakefile.am

Regards,
Thouraya.

(In reply to comment #32)
&gt; After applying SH4 JIT and JIT ENABLE for SH4 patches cleanly on 65071, and Constant Pool patch with a single change, I&apos;m still having errors compiling:
&gt; 
&gt; JavaScriptCore/jit/JITArithmetic.cpp: In member function ‘void JSC::JIT::emit_op_rshift(JSC::Instruction*)’:
&gt; JavaScriptCore/jit/JITArithmetic.cpp:123: error: no matching function for call to ‘JSC::JIT::loadDouble(JSC::AbstractMacroAssembler&lt;JSC::SH4Assembler&gt;::Address, const JSC::SH4::FPRegisterID&amp;)’
&gt; JavaScriptCore/assembler/MacroAssemblerSH4.h:517: note: candidates are: void JSC::MacroAssemblerSH4::loadDouble(JSC::AbstractMacroAssembler&lt;JSC::SH4Assembler&gt;::ImplicitAddress, JSC::SH4::FPRegisterID, JSC::SH4::RegisterID)
&gt; JavaScriptCore/assembler/MacroAssemblerSH4.h:522: note:                 void JSC::MacroAssemblerSH4::loadDouble(JSC::SH4::RegisterID, JSC::SH4::FPRegisterID)
&gt; JavaScriptCore/jit/JITArithmetic.cpp: In member function ‘void JSC::JIT::emit_op_urshift(JSC::Instruction*)’:
&gt; JavaScriptCore/jit/JITArithmetic.cpp:203: error: ‘urshift32’ was not declared in this scope
&gt; JavaScriptCore/jit/JITArithmetic.cpp:223: error: ‘urshift32’ was not declared in this scope
&gt; 
&gt; 
&gt; urshift32 is defined for ARM, MIPS and x86, but not for SH4. And the fist no matching call I have no idea how to adapt. Any thoughts? Is 65071 the right version for this patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>307400</commentid>
    <comment_count>34</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2010-11-10 10:09:39 -0800</bug_when>
    <thetext>(In reply to comment #33)
&gt; Hello,
&gt; 
&gt; Applying those patches, you should have a file called JITArithmetic_sh4.cpp
&gt; You should use it instead of JITArithmetic.cpp.
&gt; 
&gt; It should be included in JavaScriptCore/GNUmakefile.am
&gt; 
&gt; Regards,
&gt; Thouraya.
&gt; 

There should not be a new jitarithmetic file.  The only arch dependent files are the assemblers.

I will r- any patch that attempts to add arch dependent logic to the jit (beyond calling convention stuff obviously).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>307402</commentid>
    <comment_count>35</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2010-11-10 10:12:12 -0800</bug_when>
    <thetext>Looking at this code it is clear that there is just _way_ to much new conditional code being added to cross platform files.  It&apos;s just not acceptable.   If your assembler implementations are set up correctly there should be no need for crossplatform code to be modified.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>307748</commentid>
    <comment_count>36</comment_count>
    <who name="thouraya">thouraya.andolsi</who>
    <bug_when>2010-11-10 23:46:27 -0800</bug_when>
    <thetext>(In reply to comment #35)
&gt; Looking at this code it is clear that there is just _way_ to much new conditional code being added to cross platform files.  It&apos;s just not acceptable.   If your assembler implementations are set up correctly there should be no need for crossplatform code to be modified.

Hello,

I added the missed functions in macroassembler, removed the code that I added in the common part and added the support for JSVALUE32_64 since  JSVALUE32  is deprecated.

I&apos;m doing some tests before adding the new patch.

Regards,
Thouraya.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>314413</commentid>
    <comment_count>37</comment_count>
    <who name="Eduardo Felipe Castegnaro">edufelipe</who>
    <bug_when>2010-11-29 07:55:06 -0800</bug_when>
    <thetext>Any news on this?

When I finally managed to apply this patch to the correct version of WebKit and modify my build system (which is CMake), compile and run it, I got a lot of unaligned accesses and SunSpider performance, when compared to the version present on http://www.stlinux.com, was subpar (about a third).

Best regards,
Eduardo.

(In reply to comment #36)
&gt; (In reply to comment #35)
&gt; &gt; Looking at this code it is clear that there is just _way_ to much new conditional code being added to cross platform files.  It&apos;s just not acceptable.   If your assembler implementations are set up correctly there should be no need for crossplatform code to be modified.
&gt; 
&gt; Hello,
&gt; 
&gt; I added the missed functions in macroassembler, removed the code that I added in the common part and added the support for JSVALUE32_64 since  JSVALUE32  is deprecated.
&gt; 
&gt; I&apos;m doing some tests before adding the new patch.
&gt; 
&gt; Regards,
&gt; Thouraya.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>314415</commentid>
    <comment_count>38</comment_count>
    <who name="">thouraya.andolsi</who>
    <bug_when>2010-11-29 08:07:34 -0800</bug_when>
    <thetext>Hello,

I fixed those problems.
I&apos;m preparing a patch to support JSValue32-64, and fix will be there.

Ciao,


(In reply to comment #37)
&gt; Any news on this?
&gt; 
&gt; When I finally managed to apply this patch to the correct version of WebKit and modify my build system (which is CMake), compile and run it, I got a lot of unaligned accesses and SunSpider performance, when compared to the version present on http://www.stlinux.com, was subpar (about a third).
&gt; 
&gt; Best regards,
&gt; Eduardo.
&gt; 
&gt; (In reply to comment #36)
&gt; &gt; (In reply to comment #35)
&gt; &gt; &gt; Looking at this code it is clear that there is just _way_ to much new conditional code being added to cross platform files.  It&apos;s just not acceptable.   If your assembler implementations are set up correctly there should be no need for crossplatform code to be modified.
&gt; &gt; 
&gt; &gt; Hello,
&gt; &gt; 
&gt; &gt; I added the missed functions in macroassembler, removed the code that I added in the common part and added the support for JSVALUE32_64 since  JSVALUE32  is deprecated.
&gt; &gt; 
&gt; &gt; I&apos;m doing some tests before adding the new patch.
&gt; &gt; 
&gt; &gt; Regards,
&gt; &gt; Thouraya.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>320157</commentid>
    <comment_count>39</comment_count>
      <attachid>76199</attachid>
    <who name="">thouraya.andolsi</who>
    <bug_when>2010-12-10 07:55:26 -0800</bug_when>
    <thetext>Created attachment 76199
JIT support JSValue32-64

Hi,

Attached new patche to add JIT support for revision 71224 for webkit version 1.3.5 supporting JSVALUE32_64.

Regards,
Thouraya.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>320158</commentid>
    <comment_count>40</comment_count>
      <attachid>76200</attachid>
    <who name="thouraya">thouraya.andolsi</who>
    <bug_when>2010-12-10 07:57:20 -0800</bug_when>
    <thetext>Created attachment 76200
Enable JIT

Enable JIT build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>320191</commentid>
    <comment_count>41</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2010-12-10 08:57:37 -0800</bug_when>
    <thetext>(In reply to comment #39)
&gt; Created an attachment (id=76199) [details]
&gt; JIT support JSValue32-64
&gt; 
&gt; Hi,
&gt; 
&gt; Attached new patche to add JIT support for revision 71224 for webkit version 1.3.5 supporting JSVALUE32_64.
&gt; 
&gt; Regards,
&gt; Thouraya.

Errr, why are you targeting such an old revision -- we aren&apos;t going to land a patch that is esssentially very old.  The patch needs to be against ToT.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>321103</commentid>
    <comment_count>42</comment_count>
    <who name="Eduardo Felipe Castegnaro">edufelipe</who>
    <bug_when>2010-12-13 07:22:31 -0800</bug_when>
    <thetext>(In reply to comment #39)
&gt; Created an attachment (id=76199) [details]
&gt; JIT support JSValue32-64
&gt; 
&gt; Hi,
&gt; 
&gt; Attached new patche to add JIT support for revision 71224 for webkit version 1.3.5 supporting JSVALUE32_64.

Were you able to successfully run this patch by just downloading the SVN revision 71224 and applying the constant pool patch?

Your patch applies cleanly, but builds with two warnings (signed-unsigned comparison and no return in function returning value) and I get segmentation fault on the JavaScript shell application (jsc) when it finds something that can be JITed (like loops with mathematical expressions inside them).

Debugging let me to believe that this is happening due to JIT code putting code not at 32 bit boundaries.

Here is what I&apos;m getting:

bash-3.00# jsc
&gt; a = 5;
5
&gt; a
5
&gt; for (count=1; count&lt;=100; count=count+1) { a = a + count; }
Unaligned userspace access in &quot;jsc&quot; pid=851 pc=0x2b48ae24 ins=0x6332
Sending SIGBUS to &quot;jsc&quot; due to unaligned access (PC 2b48ae24 PR 2968f85a)

The kernel on STLinux has this comment on the function that handles unaligned accesses:

fixup:
        /* unaligned PC is not something we can fix */
        if (regs-&gt;pc &amp; 1) {
            si_code = BUS_ADRALN;
            goto uspace_segv;
        }

[...]

uspace_segv:
        printk(KERN_NOTICE &quot;Sending SIGBUS to \&quot;%s\&quot; due to unaligned &quot;
               &quot;access (PC %lx PR %lx)\n&quot;, current-&gt;comm, regs-&gt;pc,
               regs-&gt;pr);


Has anyone seen a different behavior with this patch?

Best regards,

Eduardo.
 
&gt; Regards,
&gt; Thouraya.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>321108</commentid>
    <comment_count>43</comment_count>
    <who name="thouraya">thouraya.andolsi</who>
    <bug_when>2010-12-13 07:35:43 -0800</bug_when>
    <thetext>Hello,

I have another patch for flushConstantPool function.

In SH4, the size of the instruction is 16 bits.
So, when we need to jump around the constantpool we shoold emit 2 instructions BRA and NOP (otherwise we will get a misaligned access address)


        if (useBarrier) {
            putIntegral(AssemblerType::placeConstantPoolBarrier(m_numConsts * sizeof(uint32_t) + alignPool));
#if CPU(SH4)
            // otherwise we will get a misaligned address
            AssemblerBuffer::putShort(AssemblerType::padForAlign16);
#endif
        }

Regards.

(In reply to comment #42)
&gt; (In reply to comment #39)
&gt; &gt; Created an attachment (id=76199) [details] [details]
&gt; &gt; JIT support JSValue32-64
&gt; &gt; 
&gt; &gt; Hi,
&gt; &gt; 
&gt; &gt; Attached new patche to add JIT support for revision 71224 for webkit version 1.3.5 supporting JSVALUE32_64.
&gt; 
&gt; Were you able to successfully run this patch by just downloading the SVN revision 71224 and applying the constant pool patch?
&gt; 
&gt; Your patch applies cleanly, but builds with two warnings (signed-unsigned comparison and no return in function returning value) and I get segmentation fault on the JavaScript shell application (jsc) when it finds something that can be JITed (like loops with mathematical expressions inside them).
&gt; 
&gt; Debugging let me to believe that this is happening due to JIT code putting code not at 32 bit boundaries.
&gt; 
&gt; Here is what I&apos;m getting:
&gt; 
&gt; bash-3.00# jsc
&gt; &gt; a = 5;
&gt; 5
&gt; &gt; a
&gt; 5
&gt; &gt; for (count=1; count&lt;=100; count=count+1) { a = a + count; }
&gt; Unaligned userspace access in &quot;jsc&quot; pid=851 pc=0x2b48ae24 ins=0x6332
&gt; Sending SIGBUS to &quot;jsc&quot; due to unaligned access (PC 2b48ae24 PR 2968f85a)
&gt; 
&gt; The kernel on STLinux has this comment on the function that handles unaligned accesses:
&gt; 
&gt; fixup:
&gt;         /* unaligned PC is not something we can fix */
&gt;         if (regs-&gt;pc &amp; 1) {
&gt;             si_code = BUS_ADRALN;
&gt;             goto uspace_segv;
&gt;         }
&gt; 
&gt; [...]
&gt; 
&gt; uspace_segv:
&gt;         printk(KERN_NOTICE &quot;Sending SIGBUS to \&quot;%s\&quot; due to unaligned &quot;
&gt;                &quot;access (PC %lx PR %lx)\n&quot;, current-&gt;comm, regs-&gt;pc,
&gt;                regs-&gt;pr);
&gt; 
&gt; 
&gt; Has anyone seen a different behavior with this patch?
&gt; 
&gt; Best regards,
&gt; 
&gt; Eduardo.
&gt; 
&gt; &gt; Regards,
&gt; &gt; Thouraya.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>321235</commentid>
    <comment_count>44</comment_count>
    <who name="Eduardo Felipe Castegnaro">edufelipe</who>
    <bug_when>2010-12-13 10:40:22 -0800</bug_when>
    <thetext>(In reply to comment #43)
&gt; Hello,
&gt; 
&gt; I have another patch for flushConstantPool function.
&gt; 
&gt; In SH4, the size of the instruction is 16 bits.
&gt; So, when we need to jump around the constantpool we shoold emit 2 instructions BRA and NOP (otherwise we will get a misaligned access address)
&gt; 
&gt; 
&gt;         if (useBarrier) {
&gt;             putIntegral(AssemblerType::placeConstantPoolBarrier(m_numConsts * sizeof(uint32_t) + alignPool));
&gt; #if CPU(SH4)
&gt;             // otherwise we will get a misaligned address
&gt;             AssemblerBuffer::putShort(AssemblerType::padForAlign16);
&gt; #endif
&gt;         }
&gt; 
&gt; Regards.

With this fix I&apos;ve managed to run SunSpider and get a great performance! Better than the version available on STLinux. Thanks so much for your help in getting this running.

Best regards,

Eduardo.

&gt; (In reply to comment #42)
&gt; &gt; (In reply to comment #39)
&gt; &gt; &gt; Created an attachment (id=76199) [details] [details] [details]
&gt; &gt; &gt; JIT support JSValue32-64
&gt; &gt; &gt; 
&gt; &gt; &gt; Hi,
&gt; &gt; &gt; 
&gt; &gt; &gt; Attached new patche to add JIT support for revision 71224 for webkit version 1.3.5 supporting JSVALUE32_64.
&gt; &gt; 
&gt; &gt; Were you able to successfully run this patch by just downloading the SVN revision 71224 and applying the constant pool patch?
&gt; &gt; 
&gt; &gt; Your patch applies cleanly, but builds with two warnings (signed-unsigned comparison and no return in function returning value) and I get segmentation fault on the JavaScript shell application (jsc) when it finds something that can be JITed (like loops with mathematical expressions inside them).
&gt; &gt; 
&gt; &gt; Debugging let me to believe that this is happening due to JIT code putting code not at 32 bit boundaries.
&gt; &gt; 
&gt; &gt; Here is what I&apos;m getting:
&gt; &gt; 
&gt; &gt; bash-3.00# jsc
&gt; &gt; &gt; a = 5;
&gt; &gt; 5
&gt; &gt; &gt; a
&gt; &gt; 5
&gt; &gt; &gt; for (count=1; count&lt;=100; count=count+1) { a = a + count; }
&gt; &gt; Unaligned userspace access in &quot;jsc&quot; pid=851 pc=0x2b48ae24 ins=0x6332
&gt; &gt; Sending SIGBUS to &quot;jsc&quot; due to unaligned access (PC 2b48ae24 PR 2968f85a)
&gt; &gt; 
&gt; &gt; The kernel on STLinux has this comment on the function that handles unaligned accesses:
&gt; &gt; 
&gt; &gt; fixup:
&gt; &gt;         /* unaligned PC is not something we can fix */
&gt; &gt;         if (regs-&gt;pc &amp; 1) {
&gt; &gt;             si_code = BUS_ADRALN;
&gt; &gt;             goto uspace_segv;
&gt; &gt;         }
&gt; &gt; 
&gt; &gt; [...]
&gt; &gt; 
&gt; &gt; uspace_segv:
&gt; &gt;         printk(KERN_NOTICE &quot;Sending SIGBUS to \&quot;%s\&quot; due to unaligned &quot;
&gt; &gt;                &quot;access (PC %lx PR %lx)\n&quot;, current-&gt;comm, regs-&gt;pc,
&gt; &gt;                regs-&gt;pr);
&gt; &gt; 
&gt; &gt; 
&gt; &gt; Has anyone seen a different behavior with this patch?
&gt; &gt; 
&gt; &gt; Best regards,
&gt; &gt; 
&gt; &gt; Eduardo.
&gt; &gt; 
&gt; &gt; &gt; Regards,
&gt; &gt; &gt; Thouraya.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>321345</commentid>
    <comment_count>45</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-12-13 12:47:19 -0800</bug_when>
    <thetext>Hi thouraya,

Looks like this patch is making really great progress.  I&apos;m afraid we&apos;re all up against some deadlines here, so I don&apos;t think I&apos;ll be able to give this patch this patch a proper review immediately, I&apos;ll get back to you on this as soon as I can.

G.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>321744</commentid>
    <comment_count>46</comment_count>
    <who name="thouraya">thouraya.andolsi</who>
    <bug_when>2010-12-14 01:18:28 -0800</bug_when>
    <thetext>Hi,

it&apos;s not a patch,
it&apos;s a work-around,

I submitted a patch here https://bugs.webkit.org/attachment.cgi

Regards,

(In reply to comment #45)
&gt; Hi thouraya,
&gt; 
&gt; Looks like this patch is making really great progress.  I&apos;m afraid we&apos;re all up against some deadlines here, so I don&apos;t think I&apos;ll be able to give this patch this patch a proper review immediately, I&apos;ll get back to you on this as soon as I can.
&gt; 
&gt; G.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>321745</commentid>
    <comment_count>47</comment_count>
    <who name="thouraya">thouraya.andolsi</who>
    <bug_when>2010-12-14 01:19:14 -0800</bug_when>
    <thetext>here https://bugs.webkit.org/show_bug.cgi?id=44329

(In reply to comment #46)
&gt; Hi,
&gt; 
&gt; it&apos;s not a patch,
&gt; it&apos;s a work-around,
&gt; 
&gt; I submitted a patch here https://bugs.webkit.org/attachment.cgi
&gt; 
&gt; Regards,
&gt; 
&gt; (In reply to comment #45)
&gt; &gt; Hi thouraya,
&gt; &gt; 
&gt; &gt; Looks like this patch is making really great progress.  I&apos;m afraid we&apos;re all up against some deadlines here, so I don&apos;t think I&apos;ll be able to give this patch this patch a proper review immediately, I&apos;ll get back to you on this as soon as I can.
&gt; &gt; 
&gt; &gt; G.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>321746</commentid>
    <comment_count>48</comment_count>
    <who name="thouraya">thouraya.andolsi</who>
    <bug_when>2010-12-14 01:21:17 -0800</bug_when>
    <thetext>I&apos;m sorry,
the patch is here https://bugs.webkit.org/show_bug.cgi?id=46796
(In reply to comment #47)
&gt; here https://bugs.webkit.org/show_bug.cgi?id=44329
&gt; 
&gt; (In reply to comment #46)
&gt; &gt; Hi,
&gt; &gt; 
&gt; &gt; it&apos;s not a patch,
&gt; &gt; it&apos;s a work-around,
&gt; &gt; 
&gt; &gt; I submitted a patch here https://bugs.webkit.org/attachment.cgi
&gt; &gt; 
&gt; &gt; Regards,
&gt; &gt; 
&gt; &gt; (In reply to comment #45)
&gt; &gt; &gt; Hi thouraya,
&gt; &gt; &gt; 
&gt; &gt; &gt; Looks like this patch is making really great progress.  I&apos;m afraid we&apos;re all up against some deadlines here, so I don&apos;t think I&apos;ll be able to give this patch this patch a proper review immediately, I&apos;ll get back to you on this as soon as I can.
&gt; &gt; &gt; 
&gt; &gt; &gt; G.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>321766</commentid>
    <comment_count>49</comment_count>
      <attachid>76513</attachid>
    <who name="thouraya">thouraya.andolsi</who>
    <bug_when>2010-12-14 01:26:50 -0800</bug_when>
    <thetext>Created attachment 76513
ADD JIT for SH4 platform

Hi,

Attached a new patch , revision 73890, webkit version 1.3.7.

Regards,
Thouraya.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>321773</commentid>
    <comment_count>50</comment_count>
      <attachid>76514</attachid>
    <who name="thouraya">thouraya.andolsi</who>
    <bug_when>2010-12-14 01:27:55 -0800</bug_when>
    <thetext>Created attachment 76514
JIT Enable

Enable JIT.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>327566</commentid>
    <comment_count>51</comment_count>
    <who name="thouraya">thouraya.andolsi</who>
    <bug_when>2010-12-29 07:44:49 -0800</bug_when>
    <thetext>Hi,

Could you kindly give me an idea about the date that you can review the patch.

Is there any plan for webkit1.4 ?

Regards,
Thouraya.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>341346</commentid>
    <comment_count>52</comment_count>
    <who name="thouraya">thouraya.andolsi</who>
    <bug_when>2011-01-28 00:51:23 -0800</bug_when>
    <thetext>Hi,

Does any one had a look on my patches ?

I&apos;m still waiting for your feed-backs.

Regards.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>348074</commentid>
    <comment_count>53</comment_count>
    <who name="Giuseppe Di Giore">giuseppe.di-giore</who>
    <bug_when>2011-02-09 01:57:59 -0800</bug_when>
    <thetext>Hello,

anyone looking at this bug ?

It has not been assigned...

How to speed up the review process for this patch ?

I really need to have the SH4/ST40 JT compiler integrated.

Kind regards,
Giuseppe</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>348091</commentid>
    <comment_count>54</comment_count>
    <who name="Patrick R. Gansterer">paroga</who>
    <bug_when>2011-02-09 02:25:55 -0800</bug_when>
    <thetext>(In reply to comment #53)
&gt; It has not been assigned...
Most of the bugs in WebKit from contributers are unassigned, this does not matter.

&gt; How to speed up the review process for this patch ?
Make smaller patches:
1) The cacheFlush stuff is completely unrelated to the rest of the patch.
2) see comment #3: Split the patch up in the YARR part and the remaining JIT part.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>348263</commentid>
    <comment_count>55</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2011-02-09 08:50:05 -0800</bug_when>
    <thetext>(In reply to comment #52)
&gt; Hi,
&gt; 
&gt; Does any one had a look on my patches ?
&gt; 
&gt; I&apos;m still waiting for your feed-backs.
&gt; 
&gt; Regards.

Eek, sorry for the delay Gavin and I have been really busy for the last few weeks so I apologise for not getting around to reviewing.

I&apos;ll try to have a look today</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>348308</commentid>
    <comment_count>56</comment_count>
      <attachid>76513</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2011-02-09 09:34:42 -0800</bug_when>
    <thetext>Comment on attachment 76513
ADD JIT for SH4 platform

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

An earlier comment requested that you split this up into two parts, the first being to bring up YARR, the second bringing in the rest of the jit.   I&apos;d lean towards doing this by removing the double operation implementations from your current patch (saving them first of course) which would remove the bulk of the unnecessary logic for YARR.  and keeping the JIT specific changes separate.

There are also a fairly substantial number of style errors - multiple spaces after =, the use of C casts is generally not allowed in C++ code in the webkit project (there are places where it&apos;s there, but we&apos;re slowly killing them all).  Basically the style bot should be green for a patch to be accepted (depending on the exact complaints we may consider it a style bot bug as asm-y code in the jit tends to be quite different from the rest of the project and needs a few quirks in the rules, but they should all be there by now).

Anyway, r- for now.  The biggest issues I can see are the share patch size (it&apos;s difficult to effectively review such a giant patch) which will hopefully be improved by splitting out the YARR parts from the main JSC JIT;  The addition of cpu specific ifdefs to the middle of YARR codegen -- that&apos;s not cool; and the various bits of duplicate code.

To update your patch you&apos;ll need to deal with the mighty source move of pain where JavaScriptCore (the directory) got moved to Source/JavaScriptCore.  You may find it easiest simply to create the patch from your current tree, then do a search/replace for /JavaScriptCore/ and replace it with /Source/JavaScriptCore.  If you&apos;re using git (and git can&apos;t deal with the move automatically) then you can use git format-patch to create a set of patches (one for each revision), then do a rename on each of them (sed works wonders) and then use git am to apply them to a ToT branch.  Essentially this is a manual rebase.

&gt; JavaScriptCore/assembler/MacroAssemblerSH4.h:588
&gt; +    bool supportsFloatingPoint() const { return false; }
&gt; +    bool supportsFloatingPointTruncate() const { return false; }
&gt; +    bool supportsFloatingPointSqrt() const { return false; }

You return false from these functions, yet have a bunch of code to handle floating point instructions, why?

&gt; JavaScriptCore/assembler/SH4Assembler.h:1422
&gt; +    void LoadConstant(uint32_t constant, RegisterID dst, bool withpatch = false)
&gt; +    {
&gt; +        if (((int)constant &lt;=0x7f) &amp;&amp; ((int)constant &gt;= -0x80) &amp;&amp; (!withpatch))
&gt; +            mov_imm8(constant, dst);
&gt; +        else {
&gt; +            m_buffer.ensureSpace(maxInstructionSize, sizeof(uint32_t));
&gt; +            LoadConstantUncheckedSize(constant, dst);
&gt; +        }
&gt; +    }
&gt; +    
&gt; +    void LoadConstantUncheckedSize(uint32_t constant, RegisterID dst)
&gt; +    {
&gt; +        uint16_t opc = GETOPCODEGROUPE3(MOVIMM_OPCODE, dst, 0); // will be patched later to mov.l
&gt; +        m_buffer.putShortWithConstantInt(opc, constant);
&gt; +    }

All method names should start lower cased -- so loadConstant, loadConstantUncheckedSize

&gt; JavaScriptCore/assembler/SH4Assembler.h:1555
&gt; +            uint16_t* address  = (uint16_t*)((offset &lt;&lt; 2) + (((unsigned int)instructionPtr + 4) &amp;(~0x3)));

C cast

&gt; JavaScriptCore/assembler/SH4Assembler.h:1573
&gt; +            uint16_t* address  = (uint16_t*)((offsetToPC &lt;&lt; 2) + (((unsigned int)instructionPtr + 4) &amp;(~0x3)));

C cast

&gt; JavaScriptCore/assembler/SH4Assembler.h:1586
&gt; +        uint16_t* address  = (uint16_t*)((offset &lt;&lt; 2) + (((unsigned int)instructionPtr + 4) &amp;(~0x3)));

This address computation logic is repeated quite a bit.  I&apos;d prefer to see a function to compute this rather than repeated copies of the code.

&gt; JavaScriptCore/jit/JITPropertyAccess32_64.cpp:488
&gt; +    if ((dst &gt;= 0) &amp;&amp; (dst &lt;= 7))
&gt; +        END_UNINTERRUPTED_SEQUENCE(sequenceGetByIdSlowCase);
&gt; +    else if ((dst &gt; 15) || (dst &lt; -16))
&gt; +        END_UNINTERRUPTED_SEQUENCES(sequenceGetByIdSlowCase, 8, 2);
&gt; +    else
&gt; +        END_UNINTERRUPTED_SEQUENCES(sequenceGetByIdSlowCase, 8, 0);

Arbitrary constants are bad,  I have no idea what these mean they should be given meaningful descriptions.

&gt; JavaScriptCore/yarr/RegexJIT.cpp:1253
&gt; +#if !CPU(SH4)

There shouldn&apos;t be any cpu specific code in the middle of YARR codegen

&gt; JavaScriptCore/yarr/RegexJIT.cpp:1818
&gt; +#if !CPU(SH4)
&gt;                          generatePatternCharacterPair(state);
&gt;                          state.nextTerm();
&gt; +#else
&gt; +                        generatePatternCharacterSingle(state);
&gt; +#endif

You shouldn&apos;t be doing anything CPU specific in the middle of YARR codegen.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>348310</commentid>
    <comment_count>57</comment_count>
      <attachid>76514</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2011-02-09 09:35:28 -0800</bug_when>
    <thetext>Comment on attachment 76514
JIT Enable

clearing the review flag</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>348711</commentid>
    <comment_count>58</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2011-02-09 17:01:01 -0800</bug_when>
    <thetext>&gt; To update your patch you&apos;ll need to deal with the mighty source move of pain where JavaScriptCore (the directory) got moved to Source/JavaScriptCore.  You may find it easiest simply to create the patch from your current tree, then do a search/replace for /JavaScriptCore/ and replace it with /Source/JavaScriptCore.  If you&apos;re using git (and git can&apos;t deal with the move automatically) then you can use git format-patch to create a set of patches (one for each revision), then do a rename on each of them (sed works wonders) and then use git am to apply them to a ToT branch.  Essentially this is a manual rebase.

svn-apply can handle the move so I rather recommend you to use that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>348914</commentid>
    <comment_count>59</comment_count>
    <who name="Giuseppe Di Giore">giuseppe.di-giore</who>
    <bug_when>2011-02-10 03:07:20 -0800</bug_when>
    <thetext>Hello,

many thanks to have quickly provided feedback!

We are going to split and review  the patches as suggested.

I hope to have new patches available early next week.

Thanks again.

Cheers,
Giuseppe</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>349761</commentid>
    <comment_count>60</comment_count>
    <who name="thouraya">thouraya.andolsi</who>
    <bug_when>2011-02-11 07:02:54 -0800</bug_when>
    <thetext>Hello,

(In reply to comment #56)
&gt; (From update of attachment 76513 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=76513&amp;action=review
&gt; 
&gt; An earlier comment requested that you split this up into two parts, the first being to bring up YARR, the second bringing in the rest of the jit.   I&apos;d lean towards doing this by removing the double operation implementations from your current patch (saving them first of course) which would remove the bulk of the unnecessary logic for YARR.  and keeping the JIT specific changes separate.
&gt; 
&gt; There are also a fairly substantial number of style errors - multiple spaces after =, the use of C casts is generally not allowed in C++ code in the webkit project (there are places where it&apos;s there, but we&apos;re slowly killing them all).  Basically the style bot should be green for a patch to be accepted (depending on the exact complaints we may consider it a style bot bug as asm-y code in the jit tends to be quite different from the rest of the project and needs a few quirks in the rules, but they should all be there by now).
&gt; 
&gt; Anyway, r- for now.  The biggest issues I can see are the share patch size (it&apos;s difficult to effectively review such a giant patch) which will hopefully be improved by splitting out the YARR parts from the main JSC JIT;  The addition of cpu specific ifdefs to the middle of YARR codegen -- that&apos;s not cool; and the various bits of duplicate code.
&gt; 
&gt; To update your patch you&apos;ll need to deal with the mighty source move of pain where JavaScriptCore (the directory) got moved to Source/JavaScriptCore.  You may find it easiest simply to create the patch from your current tree, then do a search/replace for /JavaScriptCore/ and replace it with /Source/JavaScriptCore.  If you&apos;re using git (and git can&apos;t deal with the move automatically) then you can use git format-patch to create a set of patches (one for each revision), then do a rename on each of them (sed works wonders) and then use git am to apply them to a ToT branch.  Essentially this is a manual rebase.
&gt; 
&gt; &gt; JavaScriptCore/assembler/MacroAssemblerSH4.h:588
&gt; &gt; +    bool supportsFloatingPoint() const { return false; }
&gt; &gt; +    bool supportsFloatingPointTruncate() const { return false; }
&gt; &gt; +    bool supportsFloatingPointSqrt() const { return false; }
&gt; 
&gt; You return false from these functions, yet have a bunch of code to handle floating point instructions, why?

I set them to false because floating point is not fully tested.
&gt; 
&gt; &gt; JavaScriptCore/assembler/SH4Assembler.h:1422
&gt; &gt; +    void LoadConstant(uint32_t constant, RegisterID dst, bool withpatch = false)
&gt; &gt; +    {
&gt; &gt; +        if (((int)constant &lt;=0x7f) &amp;&amp; ((int)constant &gt;= -0x80) &amp;&amp; (!withpatch))
&gt; &gt; +            mov_imm8(constant, dst);
&gt; &gt; +        else {
&gt; &gt; +            m_buffer.ensureSpace(maxInstructionSize, sizeof(uint32_t));
&gt; &gt; +            LoadConstantUncheckedSize(constant, dst);
&gt; &gt; +        }
&gt; &gt; +    }
&gt; &gt; +    
&gt; &gt; +    void LoadConstantUncheckedSize(uint32_t constant, RegisterID dst)
&gt; &gt; +    {
&gt; &gt; +        uint16_t opc = GETOPCODEGROUPE3(MOVIMM_OPCODE, dst, 0); // will be patched later to mov.l
&gt; &gt; +        m_buffer.putShortWithConstantInt(opc, constant);
&gt; &gt; +    }
&gt; 
&gt; All method names should start lower cased -- so loadConstant, loadConstantUncheckedSize
&gt; 
&gt; &gt; JavaScriptCore/assembler/SH4Assembler.h:1555
&gt; &gt; +            uint16_t* address  = (uint16_t*)((offset &lt;&lt; 2) + (((unsigned int)instructionPtr + 4) &amp;(~0x3)));
&gt; 
&gt; C cast
&gt; 
&gt; &gt; JavaScriptCore/assembler/SH4Assembler.h:1573
&gt; &gt; +            uint16_t* address  = (uint16_t*)((offsetToPC &lt;&lt; 2) + (((unsigned int)instructionPtr + 4) &amp;(~0x3)));
&gt; 
&gt; C cast
&gt; 
&gt; &gt; JavaScriptCore/assembler/SH4Assembler.h:1586
&gt; &gt; +        uint16_t* address  = (uint16_t*)((offset &lt;&lt; 2) + (((unsigned int)instructionPtr + 4) &amp;(~0x3)));
&gt; 
&gt; This address computation logic is repeated quite a bit.  I&apos;d prefer to see a function to compute this rather than repeated copies of the code.
&gt; 
&gt; &gt; JavaScriptCore/jit/JITPropertyAccess32_64.cpp:488
&gt; &gt; +    if ((dst &gt;= 0) &amp;&amp; (dst &lt;= 7))
&gt; &gt; +        END_UNINTERRUPTED_SEQUENCE(sequenceGetByIdSlowCase);
&gt; &gt; +    else if ((dst &gt; 15) || (dst &lt; -16))
&gt; &gt; +        END_UNINTERRUPTED_SEQUENCES(sequenceGetByIdSlowCase, 8, 2);
&gt; &gt; +    else
&gt; &gt; +        END_UNINTERRUPTED_SEQUENCES(sequenceGetByIdSlowCase, 8, 0);
&gt; 
&gt; Arbitrary constants are bad,  I have no idea what these mean they should be given meaningful descriptions.

Here we have to store payload and tag in the frame.

to store one of them :
if ((dst &gt;= 0) &amp;&amp; (dst &lt;= 7)) we can store it using 1 instruction
if ((dst &gt; 15) || (dst &lt; -16)) we have to load offset in the constantpool =&gt; we are emitting  +2 instructions (of 16 bits) and +1 constant in the pool.
otherwise  we have to store dst into a register =&gt; +2 instructions.

there is a solution which is to load always dst in the constantpool and emit the same instructions.

but it will slow down the performance.


&gt; 
&gt; &gt; JavaScriptCore/yarr/RegexJIT.cpp:1253
&gt; &gt; +#if !CPU(SH4)
&gt; 
&gt; There shouldn&apos;t be any cpu specific code in the middle of YARR codegen
&gt; 
&gt; &gt; JavaScriptCore/yarr/RegexJIT.cpp:1818
&gt; &gt; +#if !CPU(SH4)
&gt; &gt;                          generatePatternCharacterPair(state);
&gt; &gt;                          state.nextTerm();
&gt; &gt; +#else
&gt; &gt; +                        generatePatternCharacterSingle(state);
&gt; &gt; +#endif
&gt; 
&gt; You shouldn&apos;t be doing anything CPU specific in the middle of YARR codegen.

We have to read a simple character because the address should be correctly aligned for a long-word otherwise we&apos;ll get a misaligned address.

Is there a way to not call generatePatternCharacterPair without this if def ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>353637</commentid>
    <comment_count>61</comment_count>
      <attachid>82973</attachid>
    <who name="thouraya">thouraya.andolsi</who>
    <bug_when>2011-02-18 09:55:45 -0800</bug_when>
    <thetext>Created attachment 82973
cacheFlush implementation

A patch for cacheFlush implementation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>354127</commentid>
    <comment_count>62</comment_count>
      <attachid>82973</attachid>
    <who name="Patrick R. Gansterer">paroga</who>
    <bug_when>2011-02-19 04:14:08 -0800</bug_when>
    <thetext>Comment on attachment 82973
cacheFlush implementation

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

&gt; Source/JavaScriptCore/jit/ExecutableAllocator.h:326
&gt; +#ifndef __NR_cacheflush
&gt; +#define __NR_cacheflush __NR_modify_ldt
&gt; +#endif
&gt; +
&gt; +static const unsigned defaultLinuxPageSize = 4096;

Please move this lines to the other #defines at the top of the file. 
Can you use getpagesize() instead? Or at least add an assertion?

&gt; Source/JavaScriptCore/jit/ExecutableAllocator.h:332
&gt; +        unsigned int a, b;
&gt; +        a = reinterpret_cast&lt;unsigned int&gt;(code) &amp; ~(defaultLinuxPageSize - 1);
&gt; +        b = (reinterpret_cast&lt;unsigned int&gt;(code) + size + (defaultLinuxPageSize - 1)) &amp; ~(defaultLinuxPageSize - 1);

Use better names for your variables: e.g. currentAddress and endAddress. Also do the variable declaration and assignment in one step:
unsigned int currentAddress = reinterpret_cast&lt;unsigned int&gt;(code) &amp; ~(defaultLinuxPageSize - 1);
unsigned int endAddress = (reinterpret_cast&lt;unsigned int&gt;(code) + size + (defaultLinuxPageSize - 1)) &amp; ~(defaultLinuxPageSize - 1);

Is the memory alignment required?

&gt; Source/JavaScriptCore/jit/ExecutableAllocator.h:342
&gt; +        int res = syscall(__NR_cacheflush, a, defaultLinuxPageSize, CACHEFLUSH_D_WB | CACHEFLUSH_I);
&gt; +        ASSERT(!res);
&gt; +
&gt; +        while (b - a &gt; defaultLinuxPageSize) {
&gt; +            a = a + defaultLinuxPageSize;
&gt; +            res = syscall(__NR_cacheflush, a, defaultLinuxPageSize, CACHEFLUSH_D_WB | CACHEFLUSH_I);
&gt; +
&gt; +            ASSERT(!res);
&gt; +        }

You do the syscall twice with the same arguments. Can you rewrite it with a do while instead?


BTW: Did you try if a simple cachflush works on SH4?
The man page seams outdated: http://git.kernel.org/?p=docs/man-pages/man-pages.git;a=blob;f=man2/cacheflush.2;h=426331ba12646838880901afb4f4215762491ea3;hb=c84860e9ca1c89bfc42591d3320e568d4656f1d4#l76</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>355364</commentid>
    <comment_count>63</comment_count>
      <attachid>83336</attachid>
    <who name="thouraya">thouraya.andolsi</who>
    <bug_when>2011-02-22 10:14:14 -0800</bug_when>
    <thetext>Created attachment 83336
CacheFlush

Hi,

CacheFlush modified according to the comment above.

Regards,
Thouraya.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>355366</commentid>
    <comment_count>64</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-02-22 10:16:17 -0800</bug_when>
    <thetext>Attachment 83336 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/jit/ExecutableAlloca...&quot; exit_code: 1

Source/JavaScriptCore/jit/ExecutableAllocator.h:324:  Tab found; better to use spaces  [whitespace/tab] [1]
Total errors found: 1 in 1 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>355367</commentid>
    <comment_count>65</comment_count>
      <attachid>83336</attachid>
    <who name="Patrick R. Gansterer">paroga</who>
    <bug_when>2011-02-22 10:18:02 -0800</bug_when>
    <thetext>Comment on attachment 83336
CacheFlush

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

ChangeLog is missing.

&gt; Source/JavaScriptCore/jit/ExecutableAllocator.h:321
&gt; +

No need for this empty line.

&gt; Source/JavaScriptCore/jit/ExecutableAllocator.h:325
&gt; +        ASSERT(!res);

It&apos;s better to use ASSERT_UNUSED here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>356724</commentid>
    <comment_count>66</comment_count>
      <attachid>83614</attachid>
    <who name="thouraya">thouraya.andolsi</who>
    <bug_when>2011-02-24 00:26:44 -0800</bug_when>
    <thetext>Created attachment 83614
CacheFlush</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>356745</commentid>
    <comment_count>67</comment_count>
      <attachid>83614</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2011-02-24 01:15:57 -0800</bug_when>
    <thetext>Comment on attachment 83614
CacheFlush

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

Almost there, can you upload another one fixing my few nitpicks, I&apos;ll r+/cq+ it.

&gt; Source/JavaScriptCore/ChangeLog:5
&gt; +        cacheFlush for SH4.

Provide an ExecutableAllocater::cacheFlush() implementation for Linux/SH4.

&gt; Source/JavaScriptCore/jit/ExecutableAllocator.h:321
&gt; +

One newline too much.

&gt; Source/JavaScriptCore/jit/ExecutableAllocator.h:327
&gt; +        syscall(__NR_cacheflush, reinterpret_cast&lt;unsigned int&gt;(code), size, CACHEFLUSH_D_WB | CACHEFLUSH_I | CACHEFLUSH_D_L2);
&gt; +#else
&gt; +        syscall(__NR_cacheflush, reinterpret_cast&lt;unsigned int&gt;(code), size, CACHEFLUSH_D_WB | CACHEFLUSH_I);

s/unsigned int/unsigned/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>356748</commentid>
    <comment_count>68</comment_count>
      <attachid>83614</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2011-02-24 01:19:22 -0800</bug_when>
    <thetext>Comment on attachment 83614
CacheFlush

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

&gt; Source/JavaScriptCore/ChangeLog:4
&gt; +

Forgot to say: Bug number is misisng, please use prepare-ChangeLog --bug=&lt;yourbug&gt; and regenerate the ChangeLog, otherwhise we can&apos;t land it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>356802</commentid>
    <comment_count>69</comment_count>
      <attachid>83626</attachid>
    <who name="thouraya">thouraya.andolsi</who>
    <bug_when>2011-02-24 02:42:47 -0800</bug_when>
    <thetext>Created attachment 83626
CacheFlush implementation

Hi,
using prepare-ChangeLog --bug=&lt;44329&gt; command, I get the following error &quot;Bug 44329 has no bug description. Maybe you set wrong bug ID?&quot;

So, I added bug description manually.

Is it OK?
Regards.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>356850</commentid>
    <comment_count>70</comment_count>
      <attachid>83626</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2011-02-24 03:28:24 -0800</bug_when>
    <thetext>Comment on attachment 83626
CacheFlush implementation

r=me. Note, that &quot;prepare-ChangeLog --bug=44329&quot; works for me, did you writeout the &lt; &gt; ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>358439</commentid>
    <comment_count>71</comment_count>
      <attachid>83626</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-02-26 02:11:25 -0800</bug_when>
    <thetext>Comment on attachment 83626
CacheFlush implementation

Clearing flags on attachment: 83626

Committed r79773: &lt;http://trac.webkit.org/changeset/79773&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>358440</commentid>
    <comment_count>72</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-02-26 02:11:37 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>358939</commentid>
    <comment_count>73</comment_count>
    <who name="STEPHAN Gael">gstephan</who>
    <bug_when>2011-02-28 01:53:46 -0800</bug_when>
    <thetext>I may be wrong, but it looks like the only patch to have landed in the commit is the CacheFlush implementation ( http://trac.webkit.org/changeset/79773 ) and not the JIT ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>358941</commentid>
    <comment_count>74</comment_count>
    <who name="Patrick R. Gansterer">paroga</who>
    <bug_when>2011-02-28 01:58:23 -0800</bug_when>
    <thetext>(In reply to comment #73)
&gt; I may be wrong, but it looks like the only patch to have landed in the commit is the CacheFlush implementation ( http://trac.webkit.org/changeset/79773 ) and not the JIT ?
The commit-queue will close the bug, if there are no patches with a r? or r+: &quot;All reviewed patches have been landed.  Closing bug.&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>358944</commentid>
    <comment_count>75</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-02-28 02:04:19 -0800</bug_when>
    <thetext>Generally we try to encourage one-patch-per-bug and use of master bugs.  But you&apos;re welcome to do as you wish.  The tools are designed for the one-patch case however. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>359817</commentid>
    <comment_count>76</comment_count>
      <attachid>84214</attachid>
    <who name="thouraya">thouraya.andolsi</who>
    <bug_when>2011-03-01 05:04:57 -0800</bug_when>
    <thetext>Created attachment 84214
YARR JIT</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>359822</commentid>
    <comment_count>77</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-03-01 05:11:18 -0800</bug_when>
    <thetext>Attachment 84214 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

Last 3072 characters of output:
r names.  [readability/naming] [4]
Source/JavaScriptCore/assembler/SH4Assembler.h:1295:  movw_r0mr is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/assembler/SH4Assembler.h:1302:  movl_rm is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/assembler/SH4Assembler.h:1317:  movl_rm is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/assembler/SH4Assembler.h:1326:  movl_i32m is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/assembler/SH4Assembler.h:1344:  movl_mr is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/assembler/SH4Assembler.h:1361:  movb_mr is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/assembler/SH4Assembler.h:1370:  movb_r0mr is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/assembler/SH4Assembler.h:1376:  movb_mr is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/assembler/SH4Assembler.h:1382:  movl_mr is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/assembler/SH4Assembler.h:1388:  movl_r0mr is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/assembler/SH4Assembler.h:1394:  movl_rmr0 is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/assembler/SH4Assembler.h:1401:  movl_i8r is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/assembler/SH4Assembler.h:1409:  orl_ir is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/assembler/SH4Assembler.h:1479:  jmp_r is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/assembler/SH4Assembler.h:1486:  jmp_m is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/assembler/SH4Assembler.h:1496:  One line control clauses should not use braces.  [whitespace/braces] [4]
Source/JavaScriptCore/assembler/SH4Assembler.h:1498:  One line control clauses should not use braces.  [whitespace/braces] [4]
Source/JavaScriptCore/assembler/SH4Assembler.h:1740:  One line control clauses should not use braces.  [whitespace/braces] [4]
Source/JavaScriptCore/assembler/SH4Assembler.h:1760:  One line control clauses should not use braces.  [whitespace/braces] [4]
Source/JavaScriptCore/assembler/MacroAssembler.h:55:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 94 in 8 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>360298</commentid>
    <comment_count>78</comment_count>
      <attachid>84214</attachid>
    <who name="Patrick R. Gansterer">paroga</who>
    <bug_when>2011-03-01 15:22:37 -0800</bug_when>
    <thetext>Comment on attachment 84214
YARR JIT 

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

I only looked at the style of this patch and added some comments, but in general:
1) Use 4 space indentation everywhere
2) Use early return
3) Remove the unneeded empty lines
4) Please use singe line comments: Two slashes followed by a space. Comment should be a full sentence with a &quot;.&quot; at the end.

Running check-webkit-style will show you many of the style errors.

&gt; Source/JavaScriptCore/ChangeLog:8
&gt; +        Add YARR support for SH4 platforms (disabled by default).

Please remove the function names from ChangeLog if you don&apos;t add anything.

&gt; Source/JavaScriptCore/assembler/MacroAssemblerSH4.cpp:3
&gt; +/*
&gt; + * Copyright (C) 2011 STMicroelectronics. All rights reserved.
&gt; +*/

Please add a full header with LGPL or BDS license.

&gt; Source/JavaScriptCore/assembler/MacroAssemblerSH4.cpp:60
&gt; +}
&gt; +} // namespace JSC

Missing empty line

&gt; Source/JavaScriptCore/assembler/MacroAssemblerSH4.h:330
&gt; +      if ((srcDest != SH4Registers::r0) || (imm.m_value &gt; 255) || (imm.m_value &lt; 0)) {
&gt; +          RegisterID scr = claimScratch();
&gt; +          m_assembler.loadConstant((imm.m_value), scr);
&gt; +          m_assembler.xorl_rr(scr, srcDest);
&gt; +          releaseScratch(scr);
&gt; +      } else
&gt; +          m_assembler.xorl_i8r(imm.m_value, srcDest);

Please use 4 space intention.

&gt; Source/JavaScriptCore/assembler/MacroAssemblerSH4.h:393
&gt; +

Please remove this empty line.

&gt; Source/JavaScriptCore/assembler/MacroAssemblerSH4.h:684
&gt; +        return branchTrue();
&gt; +

Please remove this empty line. Or move it before the return.

&gt; Source/JavaScriptCore/assembler/MacroAssemblerSH4.h:745
&gt; +        if (left != dest) {
&gt; +            m_assembler.loadConstant(right.m_value, dest);
&gt; +            set32Compare32(cond, left, dest, dest);
&gt; +        } else {
&gt; +            RegisterID scr = claimScratch();
&gt; +            m_assembler.loadConstant(right.m_value, scr);
&gt; +            set32Compare32(cond, left, scr, dest);
&gt; +            releaseScratch(scr);
&gt; +        }

We usually prefer early return.

&gt; Source/JavaScriptCore/assembler/MacroAssemblerSH4.h:771
&gt; +
&gt; +
&gt; +

No comment for this &quot;section&quot;?

&gt; Source/JavaScriptCore/assembler/MacroAssemblerSH4.h:858
&gt; +            m_assembler.movt(dest);

Early return.

&gt; Source/JavaScriptCore/assembler/MacroAssemblerSH4.h:871
&gt; +           move(right, dest);
&gt; +           set32Compare32(cond, left, dest, dest);

Early return.

&gt; Source/JavaScriptCore/assembler/MacroAssemblerSH4.h:892
&gt; +            m_assembler.movt(dest);

Early return.

&gt; Source/JavaScriptCore/assembler/MacroAssemblerSH4.h:962
&gt; +

Empty line

&gt; Source/JavaScriptCore/assembler/MacroAssemblerSH4.h:1256
&gt; +        if ((cond == Zero) || (cond == NonZero)) {

Early return

&gt; Source/JavaScriptCore/assembler/MacroAssemblerSH4.h:1413
&gt; +    private:

No indentation

&gt; Source/JavaScriptCore/assembler/MacroAssemblerSH4.h:1422
&gt; +    static void linkCall(void* code, Call call, FunctionPtr function);
&gt; +
&gt; +    static void repatchCall(CodeLocationCall call, CodeLocationLabel destination);
&gt; +
&gt; +    static void repatchCall(CodeLocationCall call, FunctionPtr destination);
&gt; +

No need for empty lines

&gt; Source/JavaScriptCore/assembler/SH4Assembler.cpp:4
&gt; +/*
&gt; + *  SH4Assembler.cpp
&gt; + *  Copyright (C) 2011 STMicroelectronics. All rights reserved.
&gt; +*/

License header!

&gt; Source/JavaScriptCore/assembler/SH4Assembler.h:50
&gt; +    return ((opc) | (((rm) &amp; 0xf) &lt;&lt; 8) |(((rn) &amp; 0xf) &lt;&lt; 4));

Please use correct spaceing and remove the unneeded braces.
For the other functions in this file too!

&gt; Source/JavaScriptCore/assembler/SH4Assembler.h:438
&gt; +         ASSERT((claimscratchReg != 0x3));
&gt; +         RegisterID scratchReg = scratchReg1;
&gt; +
&gt; +         if (!(claimscratchReg &amp; 0x1))
&gt; +             claimscratchReg = (claimscratchReg | 0x1);
&gt; +         else {
&gt; +             claimscratchReg = (claimscratchReg | 0x2);
&gt; +             scratchReg = scratchReg2;
&gt; +         }
&gt; +         return scratchReg;
&gt; +     }
&gt; +
&gt; +     void releaseScratch(RegisterID scratchR) 
&gt; +     {   
&gt; +         if (scratchR ==  scratchReg1)
&gt; +             claimscratchReg = (claimscratchReg &amp; 0x2);
&gt; +         else
&gt; +             claimscratchReg = (claimscratchReg &amp; 0x1);
&gt; +     } 

4 space indentation

&gt; Source/JavaScriptCore/assembler/SH4Assembler.h:477
&gt; +           RegisterID scr = claimScratch(); 

4 space indentation

&gt; Source/JavaScriptCore/assembler/SH4Assembler.h:574
&gt; +

Empty line

&gt; Source/JavaScriptCore/assembler/SH4Assembler.h:581
&gt; +

Empty line

&gt; Source/JavaScriptCore/assembler/SH4Assembler.h:594
&gt; +

Empty line

&gt; Source/JavaScriptCore/assembler/SH4Assembler.h:629
&gt; +

Empty line

&gt; Source/JavaScriptCore/assembler/SH4Assembler.h:882
&gt; +            uint16_t opc = getOpcodeGroup5(TSTIMM_OPCODE, imm);
&gt; +            oneShortOp(opc);

Early return

&gt; Source/JavaScriptCore/assembler/SH4Assembler.h:2078
&gt; +    private:
&gt; +        SH4Buffer m_buffer;

No indentation</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>360830</commentid>
    <comment_count>79</comment_count>
      <attachid>84424</attachid>
    <who name="thouraya">thouraya.andolsi</who>
    <bug_when>2011-03-02 09:10:46 -0800</bug_when>
    <thetext>Created attachment 84424
YARR JIT 

Hi,

many thanks for the review.

I applied the changes you suggested for the code style and submitted a new patch.

Regards,
Thouraya.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>360878</commentid>
    <comment_count>80</comment_count>
      <attachid>84424</attachid>
    <who name="Patrick R. Gansterer">paroga</who>
    <bug_when>2011-03-02 10:12:32 -0800</bug_when>
    <thetext>Comment on attachment 84424
YARR JIT 

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

Style improved a lot, but still some issues. Most of them are valid for whole code.

&gt; Source/JavaScriptCore/assembler/MacroAssemblerSH4.cpp:32
&gt; +

No need for this empty line

&gt; Source/JavaScriptCore/assembler/MacroAssemblerSH4.h:31
&gt; +#include &quot;assert.h&quot;
&gt; +#include &lt;wtf/Platform.h&gt;

I don&apos;t think this headers are required.

&gt; Source/JavaScriptCore/assembler/MacroAssemblerSH4.h:32
&gt; +#if ENABLE(ASSEMBLER)

Use ENABLE(ASSEMBLER) &amp;&amp; CPU(SH4)

&gt; Source/JavaScriptCore/assembler/MacroAssemblerSH4.h:42
&gt; +

Empty line

&gt; Source/JavaScriptCore/assembler/MacroAssemblerSH4.h:363
&gt; +    void load32(RegisterID base, int offset, RegisterID dest)

You can use early return in this function too.
There are many similar if/else constructs which should use early return.

&gt; Source/JavaScriptCore/assembler/MacroAssemblerSH4.h:815
&gt; +       m_assembler.loadConstant(imm.m_value, dest);

4 space indentation

&gt; Source/JavaScriptCore/assembler/MacroAssemblerSH4.h:822
&gt; +       DataLabelPtr dataLabel(this);
&gt; +       m_assembler.loadConstant(reinterpret_cast&lt;uint32_t&gt;(initialValue.m_value), dest, true);
&gt; +       return dataLabel;

4 space indentation

&gt; Source/JavaScriptCore/assembler/MacroAssemblerSH4.h:1424
&gt; +    static void linkCall(void*, Call, FunctionPtr);
&gt; +
&gt; +    static void repatchCall(CodeLocationCall, CodeLocationLabel);
&gt; +
&gt; +    static void repatchCall(CodeLocationCall, FunctionPtr);

Empty lines

&gt; Source/JavaScriptCore/assembler/SH4Assembler.cpp:36
&gt; +#ifdef SH4_ASSEMBLER_TRACING
&gt; +bool SH4Assembler::dumpNativeCode = false;
&gt; +#endif

I don&apos;t see a ASSEMBLER_TRACING for the other cpus. So I&apos;m not sure if we want this code at all.
If want the tracing code in the tree, I&apos;d prefer to get rid of this variable and move all code into a bool dumpNativeCode() in the header.
Using a own file for this variable is overkill IMHO.

&gt; Source/JavaScriptCore/assembler/SH4Assembler.h:30
&gt; +#include &lt;wtf/Platform.h&gt;

IMHO no need for this header

&gt; Source/JavaScriptCore/assembler/SH4Assembler.h:42
&gt; +#ifndef va_list
&gt; +#include &lt;stdarg.h&gt;
&gt; +#endif

Can&apos;t we add stdarg.h all the time?

&gt; Source/JavaScriptCore/assembler/SH4Assembler.h:48
&gt; +inline uint16_t getOpcodeGroup1(uint16_t opc, int rm, int rn)

Why are these function not in the JSC namespace?

&gt; Source/JavaScriptCore/assembler/SH4Assembler.h:365
&gt; +        } Condition;

I don&apos;t think this enum needs so much indentation. ;-)

&gt; Source/JavaScriptCore/assembler/SH4Assembler.h:649
&gt; +        case 1: opc = getOpcodeGroup2(SHLL_OPCODE, dst);
&gt; +            break;

Please move the getOpcodeGroup2 and ASSERT_NOT_REACHED calls into their own lines.

&gt; Source/JavaScriptCore/assembler/SH4Assembler.h:951
&gt; +        default: ASSERT_NOT_REACHED();

New line for ASSERT_NOT_REACHED

&gt; Source/JavaScriptCore/assembler/SH4Assembler.h:1101
&gt; +    // double operations

You usually have an empty line after the &quot;section header&quot;

&gt; Source/JavaScriptCore/assembler/SH4Assembler.h:1154
&gt; +             fmovReadr0r(base, dest);

Early return

&gt; Source/JavaScriptCore/assembler/SH4Assembler.h:1229
&gt; +    // Various move ops:

You don&apos;t use a colon at the other &quot;section headers&quot;. Please add it to all other or remove it everywhere

&gt; Source/JavaScriptCore/assembler/SH4Assembler.h:1373
&gt; +

empty line

&gt; Source/JavaScriptCore/assembler/SH4Assembler.h:1658
&gt; +         }

4 space indentation

&gt; Source/JavaScriptCore/assembler/SH4Assembler.h:1711
&gt; +            *addr = offsetBits;

early return</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>360898</commentid>
    <comment_count>81</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2011-03-02 10:31:52 -0800</bug_when>
    <thetext>(In reply to comment #80)
&gt; (From update of attachment 84424 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=84424&amp;action=review
&gt; 
&gt; Style improved a lot, but still some issues. Most of them are valid for whole code.
&gt; 
&gt; &gt; Source/JavaScriptCore/assembler/MacroAssemblerSH4.cpp:32
&gt; &gt; +
&gt; 
&gt; No need for this empty line
&gt; 
&gt; &gt; Source/JavaScriptCore/assembler/MacroAssemblerSH4.h:31
&gt; &gt; +#include &quot;assert.h&quot;

Indeed, assert.h is just wrong -- you should be using &lt;wtf/Assertions.h&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>361499</commentid>
    <comment_count>82</comment_count>
    <who name="ssseintr">ssseintr2</who>
    <bug_when>2011-03-03 03:28:25 -0800</bug_when>
    <thetext>Hi thouraya,

Thanks for your SH4 JIT Patch.

Please point me to get the latest SH4 JIT patch against any latest Webkit revision. From STLinux website I can able to get up-to  webkit revsion 76915. But now Webkit much advanced(80210).

Thanks &amp; Regards,
Vicky</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>362426</commentid>
    <comment_count>83</comment_count>
      <attachid>84728</attachid>
    <who name="thouraya">thouraya.andolsi</who>
    <bug_when>2011-03-04 05:08:49 -0800</bug_when>
    <thetext>Created attachment 84728
YARR JIT 

Hello,

Attached a new patch containing some code cleanup.

Many thanks for the review.

regards,
Thouraya.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>363301</commentid>
    <comment_count>84</comment_count>
    <who name="ssseintr">ssseintr2</who>
    <bug_when>2011-03-07 04:32:00 -0800</bug_when>
    <thetext>Hi thouraya,

Pls send me the procedure to update your patch for nightly builds downloaded from webkit.org. I have Webkit-r74228.

Thanks &amp; Regards,
Vicky.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>364515</commentid>
    <comment_count>85</comment_count>
    <who name="thouraya">thouraya.andolsi</who>
    <bug_when>2011-03-09 08:30:49 -0800</bug_when>
    <thetext>Hello,

Do you have any objection regarding the patch?


Regards,
Thouraya.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>364835</commentid>
    <comment_count>86</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2011-03-09 15:53:26 -0800</bug_when>
    <thetext>The yarr patch looks like it&apos;s in good shape to me, to be honest I&apos;d be pretty hard pushed to even nit-pick.

I&apos;m happy to r+ as is, but given the large change I&apos;m going to give other reviewers a brief chance to comment before doing so.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>366978</commentid>
    <comment_count>87</comment_count>
      <attachid>85674</attachid>
    <who name="thouraya">thouraya.andolsi</who>
    <bug_when>2011-03-14 07:52:40 -0700</bug_when>
    <thetext>Created attachment 85674
YAR JIT + Floating point support

Hello,

Updated the YARR patch to the top of the trunk and added floating point support.

Regards,
Thouraya.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>366980</commentid>
    <comment_count>88</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-03-14 07:54:11 -0700</bug_when>
    <thetext>Attachment 85674 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/MacroAssemblerSH4.h:36:  __fpscr_values is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 1 in 7 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>372833</commentid>
    <comment_count>89</comment_count>
    <who name="Eduardo Felipe Castegnaro">edufelipe</who>
    <bug_when>2011-03-24 08:52:49 -0700</bug_when>
    <thetext>(In reply to comment #87)
&gt; Updated the YARR patch to the top of the trunk and added floating point support.

Thouraya,

With your latest patch I&apos;m getting the following error:

Source/JavaScriptCore/jit/JITStubs.h:233:2: error: #error &quot;JITStackFrame not defined for this platform.&quot;

When checking your code it doesn&apos;t define a #CPU(SH4) conditional for JITStackFrame, while other supported CPUs like x86, Mips and ARM do.

Is there anything I should do so JITStackFrame is defined for SH4?

Thanks in advance,

Eduardo.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>372835</commentid>
    <comment_count>90</comment_count>
    <who name="thouraya">thouraya.andolsi</who>
    <bug_when>2011-03-24 09:00:09 -0700</bug_when>
    <thetext>Hi,

The patch you applied contains only YARR support (not all JIT).

Regards,
Thouraya.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>373507</commentid>
    <comment_count>91</comment_count>
      <attachid>86940</attachid>
    <who name="thouraya">thouraya.andolsi</who>
    <bug_when>2011-03-25 07:57:49 -0700</bug_when>
    <thetext>Created attachment 86940
YARR  for SH4</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>373508</commentid>
    <comment_count>92</comment_count>
      <attachid>86941</attachid>
    <who name="thouraya">thouraya.andolsi</who>
    <bug_when>2011-03-25 07:58:46 -0700</bug_when>
    <thetext>Created attachment 86941
JIT part for sh4</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>373510</commentid>
    <comment_count>93</comment_count>
      <attachid>86942</attachid>
    <who name="thouraya">thouraya.andolsi</who>
    <bug_when>2011-03-25 07:59:30 -0700</bug_when>
    <thetext>Created attachment 86942
Enable JIT build for sh4</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>373511</commentid>
    <comment_count>94</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-03-25 08:01:22 -0700</bug_when>
    <thetext>Attachment 86941 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/jit/JITOpcodes32_64.cpp:258:  Should only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/JavaScriptCore/jit/JITOpcodes32_64.cpp:429:  Should only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Total errors found: 2 in 8 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>373525</commentid>
    <comment_count>95</comment_count>
    <who name="thouraya">thouraya.andolsi</who>
    <bug_when>2011-03-25 08:17:26 -0700</bug_when>
    <thetext>Hello,

I submitted 3 patchs as suggested:
- the first to add YARR support.
- the second to add the remaining JIT part.
- the last one to enable JIT.

Regards,
Thouraya.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>374629</commentid>
    <comment_count>96</comment_count>
      <attachid>87170</attachid>
    <who name="thouraya">thouraya.andolsi</who>
    <bug_when>2011-03-28 11:19:12 -0700</bug_when>
    <thetext>Created attachment 87170
YARR for SH4

Hello,

merged last YARR patch with https://bug-46796-attachments.webkit.org/attachment.cgi?id=86911 patch as requested by Gabor in Bug 46796.

Regards,
Thouraya.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>376330</commentid>
    <comment_count>97</comment_count>
    <who name="thouraya">thouraya.andolsi</who>
    <bug_when>2011-03-30 08:06:50 -0700</bug_when>
    <thetext>Hello,

Any feedback concerning the patches?

Best regards,
Thouraya.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>376440</commentid>
    <comment_count>98</comment_count>
      <attachid>87170</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2011-03-30 10:22:56 -0700</bug_when>
    <thetext>Comment on attachment 87170
YARR for SH4

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

r-, but only due to the putIntegral issues

&gt; Source/JavaScriptCore/assembler/AssemblerBuffer.h:-131
&gt; -        template&lt;typename IntegralType&gt;
&gt; -        void putIntegral(IntegralType value)
&gt; -        {
&gt; -            if (m_size &gt; m_capacity - sizeof(IntegralType))
&gt; -                grow();
&gt; -            putIntegralUnchecked(value);
&gt; -        }
&gt; -
&gt; -        template&lt;typename IntegralType&gt;
&gt; -        void putIntegralUnchecked(IntegralType value)
&gt; -        {
&gt; -            *reinterpret_cast_ptr&lt;IntegralType*&gt;(&amp;m_buffer[m_size]) = value;
&gt; -            m_size += sizeof(IntegralType);
&gt; -        }
&gt; -

Why is this change here?  This is a cross platform type so adding a new JIT backend shouldn&apos;t  result in functions being removed -- are they only used for the constant pool backends?

&gt; Source/JavaScriptCore/assembler/AssemblerBufferWithConstantPool.h:192
&gt; +    template&lt;typename IntegralType&gt;
&gt; +    void putIntegral(IntegralType value)
&gt; +    {
&gt; +        if (m_size &gt; m_capacity - sizeof(IntegralType))
&gt; +            grow();
&gt; +        putIntegralUnchecked(value);
&gt; +    }
&gt; +
&gt; +    template&lt;typename IntegralType&gt;
&gt; +    void putIntegralUnchecked(IntegralType value)
&gt; +    {
&gt; +        *reinterpret_cast_ptr&lt;IntegralType*&gt;(&amp;m_buffer[m_size]) = value;
&gt; +        m_size += sizeof(IntegralType);
&gt; +    }

I think these should stay in the root assembler buffer so we don&apos;t have unnecessary changes in this patch

&gt; Source/JavaScriptCore/assembler/AssemblerBufferWithConstantPool.h:205
&gt; +    void putIntegral(TwoShorts value)
&gt; +    {
&gt; +        if (m_size &gt; m_capacity - sizeof(TwoShorts))
&gt; +            grow();
&gt; +        putIntegralUnchecked(value);
&gt; +    }
&gt; +
&gt; +    void putIntegralUnchecked(TwoShorts value)
&gt; +    {
&gt; +        putIntegralUnchecked(value.high);
&gt; +        putIntegralUnchecked(value.low);
&gt; +    }

I have endian concerns here</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>376467</commentid>
    <comment_count>99</comment_count>
    <who name="Gabor Loki">loki</who>
    <bug_when>2011-03-30 10:49:26 -0700</bug_when>
    <thetext>&gt; &gt; Source/JavaScriptCore/assembler/AssemblerBuffer.h:-131
&gt; &gt; -        template&lt;typename IntegralType&gt;
&gt; &gt; -        void putIntegral(IntegralType value)
&gt; 
&gt; Why is this change here?  This is a cross platform type so adding a new JIT backend shouldn&apos;t  result in functions being removed -- are they only used for the constant pool backends?
&gt; 
&gt; I think these should stay in the root assembler buffer so we don&apos;t have unnecessary changes in this patch

Well, I asked Thouraya to move &apos;putIntegral.*TwoShorts&apos; functions from this patch https://bug-46796-attachments.webkit.org/attachment.cgi?id=86911 to AssemblerBufferWithConstantPool level. But I did not mean to move all &apos;putIntegral.*IntegralType&apos; template functions to AssemblerBufferWithConstantPool. So, my suggestion was to move only &apos;void putIntegral(TwoShorts value)&apos; and &apos;void putIntegralUnchecked(TwoShorts value)&apos; functions to AssemblerBufferWithConstantPool.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>377001</commentid>
    <comment_count>100</comment_count>
      <attachid>87681</attachid>
    <who name="thouraya">thouraya.andolsi</who>
    <bug_when>2011-03-31 02:21:22 -0700</bug_when>
    <thetext>Created attachment 87681
YARR for SH4</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>377003</commentid>
    <comment_count>101</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-03-31 02:24:35 -0700</bug_when>
    <thetext>Attachment 87681 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/ChangeLog:1:  ChangeLog entry has no bug number  [changelog/bugnumber] [5]
Total errors found: 1 in 8 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>377042</commentid>
    <comment_count>102</comment_count>
      <attachid>87693</attachid>
    <who name="thouraya">thouraya.andolsi</who>
    <bug_when>2011-03-31 03:53:54 -0700</bug_when>
    <thetext>Created attachment 87693
YARR for SH4

Updated YARR JIT to the top of the trunk.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>377043</commentid>
    <comment_count>103</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-03-31 03:55:48 -0700</bug_when>
    <thetext>Attachment 87693 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/ChangeLog:1:  ChangeLog entry has no bug number  [changelog/bugnumber] [5]
Total errors found: 1 in 8 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>377050</commentid>
    <comment_count>104</comment_count>
    <who name="thouraya">thouraya.andolsi</who>
    <bug_when>2011-03-31 04:25:35 -0700</bug_when>
    <thetext>Hello,

I did  such a changes because I saw that the putIntegral was just called in AssemblerBufferWithConstantPool.h file.

Now, I removed my changes an submitted a new patch but has got the error related to the style.

Is the patch OK?
Should I fix the style issue ?

Many thanks for the review.

Regards,
Thouraya.

(In reply to comment #99)
&gt; &gt; &gt; Source/JavaScriptCore/assembler/AssemblerBuffer.h:-131
&gt; &gt; &gt; -        template&lt;typename IntegralType&gt;
&gt; &gt; &gt; -        void putIntegral(IntegralType value)
&gt; &gt; 
&gt; &gt; Why is this change here?  This is a cross platform type so adding a new JIT backend shouldn&apos;t  result in functions being removed -- are they only used for the constant pool backends?
&gt; &gt; 
&gt; &gt; I think these should stay in the root assembler buffer so we don&apos;t have unnecessary changes in this patch
&gt; 
&gt; Well, I asked Thouraya to move &apos;putIntegral.*TwoShorts&apos; functions from this patch https://bug-46796-attachments.webkit.org/attachment.cgi?id=86911 to AssemblerBufferWithConstantPool level. But I did not mean to move all &apos;putIntegral.*IntegralType&apos; template functions to AssemblerBufferWithConstantPool. So, my suggestion was to move only &apos;void putIntegral(TwoShorts value)&apos; and &apos;void putIntegralUnchecked(TwoShorts value)&apos; functions to AssemblerBufferWithConstantPool.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>377070</commentid>
    <comment_count>105</comment_count>
    <who name="Gabor Loki">loki</who>
    <bug_when>2011-03-31 04:56:28 -0700</bug_when>
    <thetext>&gt; Should I fix the style issue ?
&gt; ...
&gt;     https://bugs.webkit.org/show_bug.cgi?id=44329.

I guess the dot causes that style issue in your Changelog.

&gt; I did  such a changes because I saw that the putIntegral was just called in AssemblerBufferWithConstantPool.h file.

Although the putIntegral template functions is used only in AssemblerBufferWithConstantPool, it would be nice if we can replace all putByte, -Short, -Int, -Int64 functions with the putIntegral template. These task is not related to SH4 JIT. It should be done in a separate patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>377108</commentid>
    <comment_count>106</comment_count>
      <attachid>87714</attachid>
    <who name="thouraya">thouraya.andolsi</who>
    <bug_when>2011-03-31 06:28:29 -0700</bug_when>
    <thetext>Created attachment 87714
YARR for SH4

removed the dot to fix style issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>377307</commentid>
    <comment_count>107</comment_count>
      <attachid>87714</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2011-03-31 10:32:57 -0700</bug_when>
    <thetext>Comment on attachment 87714
YARR for SH4

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>377452</commentid>
    <comment_count>108</comment_count>
      <attachid>87714</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-03-31 14:26:08 -0700</bug_when>
    <thetext>Comment on attachment 87714
YARR for SH4

Clearing flags on attachment: 87714

Committed r82617: &lt;http://trac.webkit.org/changeset/82617&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>377487</commentid>
    <comment_count>109</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-03-31 15:15:28 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/82617 might have broken Qt Linux Release</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>377657</commentid>
    <comment_count>110</comment_count>
    <who name="thouraya">thouraya.andolsi</who>
    <bug_when>2011-03-31 23:29:33 -0700</bug_when>
    <thetext>Hello,

&gt; http://trac.webkit.org/changeset/82617 might have broken Qt Linux Release

Does the patch caused that problem? or it&apos;s a warning ?

Regards,
Thouraya.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>377659</commentid>
    <comment_count>111</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-03-31 23:48:11 -0700</bug_when>
    <thetext>&gt; &gt; http://trac.webkit.org/changeset/82617 might have broken Qt Linux Release
&gt; 
&gt; Does the patch caused that problem? or it&apos;s a warning ?

Oftentimes the bots get behind and test a bunch of changes together.  That means the automatic tools can&apos;t figure out which patch caused the problem.  In this case, it wasn&apos;t your patch.  It was another one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380358</commentid>
    <comment_count>112</comment_count>
      <attachid>88415</attachid>
    <who name="thouraya">thouraya.andolsi</who>
    <bug_when>2011-04-06 07:51:29 -0700</bug_when>
    <thetext>Created attachment 88415
JIT remaining part for SH4 platforms.

Hello,

Here attached the remaining JIT part for SH4 platform.


Regards,
Thouraya.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381470</commentid>
    <comment_count>113</comment_count>
    <who name="thouraya">thouraya.andolsi</who>
    <bug_when>2011-04-07 10:40:03 -0700</bug_when>
    <thetext>Hello,

Any feedback concerning the JIT remaining part for SH4 platforms patch?

Best Regards,
Thouraya.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381482</commentid>
    <comment_count>114</comment_count>
      <attachid>88415</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2011-04-07 10:49:12 -0700</bug_when>
    <thetext>Comment on attachment 88415
JIT remaining part for SH4 platforms.

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

r- due to the END_UNINTERRUPTED_SEQUENCE stuff

&gt; Source/JavaScriptCore/assembler/SH4Assembler.h:36
&gt; +#include &lt;stdio.h&gt;

this seems unnecessary

&gt; Source/JavaScriptCore/jit/JIT.h:712
&gt; +#define END_UNINTERRUPTED_SEQUENCES(name, extraI, extraC) endUninterruptedSequence(name ## InstructionSpace + extraI, name ## ConstantSpace + extraC)

macros like this should always be wrapped in a do {} while (false) construct to reduce the chance of incorrect use.

&gt; Source/JavaScriptCore/jit/JITPropertyAccess32_64.cpp:485
&gt; +#if CPU(SH4)
&gt; +    if ((dst &gt;= 0) &amp;&amp; (dst &lt;= 7))
&gt; +        END_UNINTERRUPTED_SEQUENCE(sequenceGetByIdSlowCase);
&gt; +    else if ((dst &gt; 15) || (dst &lt; -16))
&gt; +        END_UNINTERRUPTED_SEQUENCES(sequenceGetByIdSlowCase, 8, 2);
&gt; +    else
&gt; +        END_UNINTERRUPTED_SEQUENCES(sequenceGetByIdSlowCase, 8, 0);
&gt; +#else

Rather than having this ifdef here you should have this logic in the platform specific handler for uninterrupted sequence.  If absolutely necessary you can just make END_UNINTERRUPTED_SEQUENCE takes a dst parameter.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>382216</commentid>
    <comment_count>115</comment_count>
      <attachid>88819</attachid>
    <who name="thouraya">thouraya.andolsi</who>
    <bug_when>2011-04-08 07:10:45 -0700</bug_when>
    <thetext>Created attachment 88819
JIT remaining part for SH4 platforms.

Hello,

I the attached patch, I added END_UNINTERRUPTED_SEQUENCE2 macro that takes 2 parameters name and dst and 
modified END_UNINTERRUPTED_SEQUENCE to call END_UNINTERRUPTED_SEQUENCE2(name, 0)

Regards,
Thouraya.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>382223</commentid>
    <comment_count>116</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-04-08 07:24:46 -0700</bug_when>
    <thetext>Attachment 88819 did not build on qt:
Build output: http://queues.webkit.org/results/8373536</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>382225</commentid>
    <comment_count>117</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2011-04-08 07:36:25 -0700</bug_when>
    <thetext>Attachment 88819 did not build on win:
Build output: http://queues.webkit.org/results/8379002</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>382226</commentid>
    <comment_count>118</comment_count>
      <attachid>88821</attachid>
    <who name="thouraya">thouraya.andolsi</who>
    <bug_when>2011-04-08 07:38:03 -0700</bug_when>
    <thetext>Created attachment 88821
JIT remaining part for SH4 platforms.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>382240</commentid>
    <comment_count>119</comment_count>
      <attachid>88826</attachid>
    <who name="thouraya">thouraya.andolsi</who>
    <bug_when>2011-04-08 08:19:54 -0700</bug_when>
    <thetext>Created attachment 88826
Enable JIT</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>382278</commentid>
    <comment_count>120</comment_count>
    <who name="thouraya">thouraya.andolsi</who>
    <bug_when>2011-04-08 09:11:56 -0700</bug_when>
    <thetext>Hello,

The changes done for END_UNINTERRUPTED_SEQUENCE are OK ?

Best Regards,
Thouraya.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>382356</commentid>
    <comment_count>121</comment_count>
      <attachid>88821</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2011-04-08 10:30:27 -0700</bug_when>
    <thetext>Comment on attachment 88821
JIT remaining part for SH4 platforms.

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

r- due to naming issue, almost there.

&gt; Source/JavaScriptCore/jit/JIT.h:710
&gt; +#define END_UNINTERRUPTED_SEQUENCE2(name, dst) do { endUninterruptedSequence(name ## InstructionSpace, name ## ConstantSpace, dst); } while (false)

This is a bad name, if anything END_UNINTERRUPTED_SEQUENCE_FOR_PUT might be better?

&gt; Source/JavaScriptCore/jit/JITInlineMethods.h:143
&gt; +ALWAYS_INLINE void JIT::endUninterruptedSequence(int insnSpace, int constSpace, int dst)

Does the arm build work with this change?  afaict it should fail due to dst being unused.

You could put UNUSED_PARAM(dst) in the function to deal with that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>383083</commentid>
    <comment_count>122</comment_count>
      <attachid>88983</attachid>
    <who name="thouraya">thouraya.andolsi</who>
    <bug_when>2011-04-11 03:51:42 -0700</bug_when>
    <thetext>Created attachment 88983
JIT remaining part for SH4 platforms.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>383086</commentid>
    <comment_count>123</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-04-11 03:53:41 -0700</bug_when>
    <thetext>Attachment 88983 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/jit/JITInlineMethods.h:143:  Missing space after ,  [whitespace/comma] [3]
Total errors found: 1 in 9 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>383091</commentid>
    <comment_count>124</comment_count>
      <attachid>88986</attachid>
    <who name="thouraya">thouraya.andolsi</who>
    <bug_when>2011-04-11 04:02:38 -0700</bug_when>
    <thetext>Created attachment 88986
JIT remaining part for SH4 platforms.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>383241</commentid>
    <comment_count>125</comment_count>
      <attachid>88986</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-04-11 10:11:59 -0700</bug_when>
    <thetext>Comment on attachment 88986
JIT remaining part for SH4 platforms.

Clearing flags on attachment: 88986

Committed r83447: &lt;http://trac.webkit.org/changeset/83447&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>383503</commentid>
    <comment_count>126</comment_count>
      <attachid>88826</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-04-11 14:12:13 -0700</bug_when>
    <thetext>Comment on attachment 88826
Enable JIT 

Clearing flags on attachment: 88826

Committed r83495: &lt;http://trac.webkit.org/changeset/83495&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>383505</commentid>
    <comment_count>127</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-04-11 14:12:31 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>385615</commentid>
    <comment_count>128</comment_count>
    <who name="STEPHAN Gael">gstephan</who>
    <bug_when>2011-04-14 02:57:29 -0700</bug_when>
    <thetext>I may be wrong (again), but not all patches landed in the trunk ( looks like YARR for SH4 did not make it)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>385616</commentid>
    <comment_count>129</comment_count>
    <who name="thouraya">thouraya.andolsi</who>
    <bug_when>2011-04-14 02:59:43 -0700</bug_when>
    <thetext>(In reply to comment #128)
&gt; I may be wrong (again), but not all patches landed in the trunk ( looks like YARR for SH4 did not make it)

Hello,

All patches were landed.

Regards,
Thouraya.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>64941</attachid>
            <date>2010-08-20 03:19:48 -0700</date>
            <delta_ts>2010-09-15 09:16:08 -0700</delta_ts>
            <desc>SH4 build system support</desc>
            <filename>WebKit-build-sh4-patch.txt</filename>
            <type>text/plain</type>
            <size>32871</size>
            <attacher name="thouraya">thouraya.andolsi</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0dOVW1ha2VmaWxlLmFtIGIvR05VbWFrZWZpbGUuYW0KaW5kZXggODdmZjMx
ZC4uODQzODFhZiAxMDA2NDQKLS0tIGEvR05VbWFrZWZpbGUuYW0KKysrIGIvR05VbWFrZWZpbGUu
YW0KQEAgLTg5NSw2ICs4OTUsNyBAQCBzdGFtcC13ZWJraXRlbnVtdHlwZXMuaDogJCh3ZWJraXRn
dGtfaF9hcGkpIEdOVW1ha2VmaWxlCiAJCQktLWVwcm9kICIjZGVmaW5lIFdFQktJVF9UWVBFX0BF
TlVNU0hPUlRAIEBlbnVtX25hbWVAX2dldF90eXBlKClcblxuIiBcCiAJCQktLWVwcm9kICJXRUJL
SVRfQVBJIEdUeXBlXG5AZW51bV9uYW1lQF9nZXRfdHlwZSh2b2lkKTtcblxuIiBcCiAJCSQod2Vi
a2l0Z3RrX2hfYXBpKSB8IFwKKyAgICAgICAgICAgICAgICBzZWQgJ3MsPC4qL3dlYmtpdC8sPHdl
YmtpdC8sJyB8IFwKIAkJc2VkICdzLHdlYl9raXQsd2Via2l0LCcgfCBcCiAJCXNlZCAncyxXRUJL
SVRfVFlQRV9LSVQsV0VCS0lUX1RZUEUsJyBcCiAJCT4geGdlbi1ndGggXApkaWZmIC0tZ2l0IGEv
SmF2YVNjcmlwdENvcmUvd3RmL0Zhc3RNYWxsb2MuY3BwIGIvSmF2YVNjcmlwdENvcmUvd3RmL0Zh
c3RNYWxsb2MuY3BwCmluZGV4IGM0NDA0MTcuLjdlOGZkYzcgMTAwNjQ0Ci0tLSBhL0phdmFTY3Jp
cHRDb3JlL3d0Zi9GYXN0TWFsbG9jLmNwcAorKysgYi9KYXZhU2NyaXB0Q29yZS93dGYvRmFzdE1h
bGxvYy5jcHAKQEAgLTg5LDcgKzg5LDcgQEAKICNlbmRpZgogI2VuZGlmCiAKLSNpZiAhKGRlZmlu
ZWQoVVNFX1NZU1RFTV9NQUxMT0MpICYmIFVTRV9TWVNURU1fTUFMTE9DKSAmJiBkZWZpbmVkKE5E
RUJVRykKKyNpZiAhKGRlZmluZWQoVVNFX1NZU1RFTV9NQUxMT0MpICYmIFVTRV9TWVNURU1fTUFM
TE9DKSAmJiBkZWZpbmVkKE5ERUJVRykgfHwgQ1BVKFNINCkKICNkZWZpbmUgRk9SQ0VfU1lTVEVN
X01BTExPQyAwCiAjZWxzZQogI2RlZmluZSBGT1JDRV9TWVNURU1fTUFMTE9DIDEKZGlmZiAtLWdp
dCBhL0phdmFTY3JpcHRDb3JlL3d0Zi9QbGF0Zm9ybS5oIGIvSmF2YVNjcmlwdENvcmUvd3RmL1Bs
YXRmb3JtLmgKaW5kZXggM2E5NmFhYy4uY2VkMzc5NiAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENv
cmUvd3RmL1BsYXRmb3JtLmgKKysrIGIvSmF2YVNjcmlwdENvcmUvd3RmL1BsYXRmb3JtLmgKQEAg
LTE2Niw2ICsxNjYsMTAgQEAKICNlbmRpZgogCiAvKiBDUFUoU0g0KSAtIFN1cGVySCBTSC00ICov
CisjaWYgZGVmaW5lZChfX3NoX18pCisjZGVmaW5lIFdURl9DUFVfU0ggMQorI2VuZGlmCisKICNp
ZiBkZWZpbmVkKF9fU0g0X18pCiAjZGVmaW5lIFdURl9DUFVfU0g0IDEKICNlbmRpZgpAQCAtOTE0
LDYgKzkxOCw4IEBACiAjZGVmaW5lIFdURl9VU0VfSlNWQUxVRTY0IDEKICNlbGlmIENQVShNSVBT
KSB8fCAoQ1BVKEFSTV9UUkFESVRJT05BTCkgJiYgQ09NUElMRVIoTVNWQykpCiAjZGVmaW5lIFdU
Rl9VU0VfSlNWQUxVRTMyIDEKKyNlbGlmIENQVShTSDQpCisjZGVmaW5lIFdURl9VU0VfSlNWQUxV
RTMyIDEKICNlbGlmIE9TKFdJTkRPV1MpICYmIENPTVBJTEVSKE1JTkdXKQogLyogVXNpbmcgSlNW
QUxVRTMyXzY0IGNhdXNlcyBwYWRkaW5nL2FsaWduZW1lbnQgaXNzdWVzIGZvciBKSVRTdHViQXJn
CiBvbiBNaW5HVy4gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
OTI2OCAqLwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9icmlkZ2UvbnBhcGkuaCBiL1dlYkNvcmUvYnJp
ZGdlL25wYXBpLmgKaW5kZXggNWZjOGU0Ni4uZmE0YjY3MyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9i
cmlkZ2UvbnBhcGkuaAorKysgYi9XZWJDb3JlL2JyaWRnZS9ucGFwaS5oCkBAIC05MCw5ICs5MCwx
OCBAQAogI2VuZGlmCiAKICNpZiBkZWZpbmVkKFhQX1VOSVgpCi0jaW5jbHVkZSA8WDExL1hsaWIu
aD4KLSNpbmNsdWRlIDxYMTEvWHV0aWwuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgorI2lmIFBMQVRG
T1JNKFgxMSkKKyNkZWZpbmUgTU9aX1gxMQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1PWl9YMTEp
CisgICAgICNpbmNsdWRlIDxYMTEvWGxpYi5oPgorICAgICAjaW5jbHVkZSA8WDExL1h1dGlsLmg+
CisjZWxzZQorICAgICNpbmNsdWRlIDxhdGsvYXRrLmg+CisgICAgI2luY2x1ZGUgPGd0ay9ndGsu
aD4KKyNlbmRpZgorICAgICNpbmNsdWRlIDxzdGRpby5oPgogI2VuZGlmCiAKICNpZiBkZWZpbmVk
KFhQX1NZTUJJQU4pCkBAIC0yNjYsMTAgKzI3NSwxMiBAQCB0eXBlZGVmIHN0cnVjdAogdHlwZWRl
ZiBzdHJ1Y3QKIHsKICAgaW50MzJfdCAgICAgIHR5cGU7CisjaWYgZGVmaW5lZChNT1pfWDExKQog
ICBEaXNwbGF5KiAgICAgZGlzcGxheTsKICAgVmlzdWFsKiAgICAgIHZpc3VhbDsKICAgQ29sb3Jt
YXAgICAgIGNvbG9ybWFwOwogICB1bnNpZ25lZCBpbnQgZGVwdGg7CisjZW5kaWYKIH0gTlBTZXRX
aW5kb3dDYWxsYmFja1N0cnVjdDsKIAogdHlwZWRlZiBzdHJ1Y3QKQEAgLTUzMSw3ICs1NDIsMTEg
QEAgdHlwZWRlZiBzdHJ1Y3QgX05QRXZlbnQKICAgdWludDMyX3QgbFBhcmFtOwogfSBOUEV2ZW50
OwogI2VsaWYgZGVmaW5lZChYUF9VTklYKQotdHlwZWRlZiBYRXZlbnQgTlBFdmVudDsKKyNpZiBk
ZWZpbmVkKE1PWl9YMTEpCisgdHlwZWRlZiBYRXZlbnQgTlBFdmVudDsKKyNlbHNlCit0eXBlZGVm
IEdka0V2ZW50IE5QRXZlbnQ7CisjZW5kaWYKICNlbHNlCiB0eXBlZGVmIHZvaWQqICBOUEV2ZW50
OwogI2VuZGlmCkBAIC01NDQsNyArNTU5LDcgQEAgdHlwZWRlZiBSZ25IYW5kbGUgTlBRRFJlZ2lv
bjsKIHR5cGVkZWYgQ0dQYXRoUmVmIE5QQ0dSZWdpb247CiAjZWxpZiBkZWZpbmVkKFhQX1dJTikK
IHR5cGVkZWYgSFJHTiBOUFJlZ2lvbjsKLSNlbGlmIGRlZmluZWQoWFBfVU5JWCkKKyNlbGlmIGRl
ZmluZWQoWFBfVU5JWCkgJiYgZGVmaW5lZChNT1pfWDExKQogdHlwZWRlZiBSZWdpb24gTlBSZWdp
b247CiAjZWxpZiBkZWZpbmVkKFhQX1NZTUJJQU4pCiB0eXBlZGVmIFFSZWdpb24qIE5QUmVnaW9u
OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9icmlkZ2UvbnBydW50aW1lX2ludGVybmFsLmggYi9XZWJD
b3JlL2JyaWRnZS9ucHJ1bnRpbWVfaW50ZXJuYWwuaAppbmRleCA3MzZhN2YxLi41NzQyNWFkIDEw
MDY0NAotLS0gYS9XZWJDb3JlL2JyaWRnZS9ucHJ1bnRpbWVfaW50ZXJuYWwuaAorKysgYi9XZWJD
b3JlL2JyaWRnZS9ucHJ1bnRpbWVfaW50ZXJuYWwuaApAQCAtMzAsNyArMzAsOSBAQAogI2luY2x1
ZGUgIm5wcnVudGltZS5oIgogCiAjaWZkZWYgWFBfVU5JWAorI2lmIFBMQVRGT1JNKFgxMSkKICAg
ICAjaW5jbHVkZSA8WDExL1hyZXNvdXJjZS5oPgorI2VuZGlmCiAKICAgICAjdW5kZWYgTm9uZQog
ICAgICN1bmRlZiBBYm92ZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9jb25maWcuaCBiL1dlYkNvcmUv
Y29uZmlnLmgKaW5kZXggMjJlOTk3Yi4uZjRiNjg4NyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9jb25m
aWcuaAorKysgYi9XZWJDb3JlL2NvbmZpZy5oCkBAIC0xMzcsNiArMTM3LDEzIEBACiAjZGVmaW5l
IFNLSVBfU1RBVElDX0NPTlNUUlVDVE9SU19PTl9HQ0MgMQogI2VuZGlmCiAKKyNpZiBQTEFURk9S
TShHVEspCisjZGVmaW5lIFdURl9VU0VfSkFWQVNDUklQVENPUkVfQklORElOR1MgMQorI2lmZGVm
IEdES19XSU5ET1dJTkdfRElSRUNURkIKKyN1bmRlZiBHREtfV0lORE9XSU5HX1gxMQorI2VuZGlm
CisjZW5kaWYKKwogI2lmIFBMQVRGT1JNKFdJTikKICNpZiBkZWZpbmVkKFdJTl9DQUlSTykKICN1
bmRlZiBXVEZfUExBVEZPUk1fQ0cKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5W
aWV3LmNwcCBiL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmNwcAppbmRleCA1MGVjYTdlLi5h
ZjUzMjc1IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5jcHAKKysrIGIv
V2ViQ29yZS9wbHVnaW5zL1BsdWdpblZpZXcuY3BwCkBAIC04NDQsMTAgKzg0NCwxNCBAQCBQbHVn
aW5WaWV3OjpQbHVnaW5WaWV3KEZyYW1lKiBwYXJlbnRGcmFtZSwgY29uc3QgSW50U2l6ZSYgc2l6
ZSwgUGx1Z2luUGFja2FnZSogcAogI2VuZGlmCiAjaWYgZGVmaW5lZChYUF9VTklYKSAmJiBFTkFC
TEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKICAgICAsIG1faGFzUGVuZGluZ0dlb21ldHJ5Q2hhbmdl
KHRydWUpCisjaWYgUExBVEZPUk0oWDExKQogICAgICwgbV9kcmF3YWJsZSgwKQogICAgICwgbV92
aXN1YWwoMCkKICAgICAsIG1fY29sb3JtYXAoMCkKICAgICAsIG1fcGx1Z2luRGlzcGxheSgwKQor
I2VsaWYgZGVmaW5lZChHREtfV0lORE9XSU5HX0RJUkVDVEZCKQorICAgICwgbV9waXhtYXAoMCkK
KyNlbmRpZgogI2VuZGlmCiAgICAgLCBtX2xvYWRNYW51YWxseShsb2FkTWFudWFsbHkpCiAgICAg
LCBtX21hbnVhbFN0cmVhbSgwKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZp
ZXcuaCBiL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmgKaW5kZXggNDMxY2UwZS4uNTEyNTBm
MiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZpZXcuaAorKysgYi9XZWJDb3Jl
L3BsdWdpbnMvUGx1Z2luVmlldy5oCkBAIC0zNjYsMTIgKzM2NiwxNyBAQCBwcml2YXRlOgogCiAj
aWYgZGVmaW5lZChYUF9VTklYKSAmJiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKICAgICAg
ICAgYm9vbCBtX2hhc1BlbmRpbmdHZW9tZXRyeUNoYW5nZTsKKworI2lmIFBMQVRGT1JNKFgxMSkK
ICAgICAgICAgUGl4bWFwIG1fZHJhd2FibGU7CiAgICAgICAgIFZpc3VhbCogbV92aXN1YWw7CiAg
ICAgICAgIENvbG9ybWFwIG1fY29sb3JtYXA7CiAgICAgICAgIERpc3BsYXkqIG1fcGx1Z2luRGlz
cGxheTsKLQogICAgICAgICB2b2lkIGluaXRYRXZlbnQoWEV2ZW50KiBldmVudCk7CisKKyNlbGlm
IGRlZmluZWQoR0RLX1dJTkRPV0lOR19ESVJFQ1RGQikKKyAgICAgICAgR2RrUGl4bWFwICptX3Bp
eG1hcDsKKyNlbmRpZgogI2VuZGlmCiAKICAgICAgICAgSW50UmVjdCBtX2NsaXBSZWN0OyAvLyBU
aGUgY2xpcCByZWN0IHRvIGFwcGx5IHRvIGEgd2luZG93ZWQgcGx1Zy1pbgpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5WaWV3R3RrLmNwcCBiL1dlYkNvcmUvcGx1Z2lucy9n
dGsvUGx1Z2luVmlld0d0ay5jcHAKaW5kZXggYWI0M2JmNC4uM2QyOGRlZSAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5WaWV3R3RrLmNwcAorKysgYi9XZWJDb3JlL3BsdWdp
bnMvZ3RrL1BsdWdpblZpZXdHdGsuY3BwCkBAIC02NSwxMiArNjUsMTYgQEAKICNpbmNsdWRlIDxn
dGsvZ3RrLmg+CiAKICNpZiBkZWZpbmVkKFhQX1VOSVgpCi0jaW5jbHVkZSAiZ3RrMnh0YmluLmgi
CisjaWYgUExBVEZPUk0oWDExKQogI2RlZmluZSBCb29sIGludCAvLyB0aGlzIGdvdCB1bmRlZmlu
ZWQgc29tZXdoZXJlCiAjZGVmaW5lIFN0YXR1cyBpbnQgLy8gZGl0dG8KKyNpbmNsdWRlICJndGsy
eHRiaW4uaCIKICNpbmNsdWRlIDxYMTEvZXh0ZW5zaW9ucy9YcmVuZGVyLmg+CiAjaW5jbHVkZSA8
Y2Fpcm8vY2Fpcm8teGxpYi5oPgogI2luY2x1ZGUgPGdkay9nZGt4Lmg+CisjZWxpZiBkZWZpbmVk
KEdES19XSU5ET1dJTkdfRElSRUNURkIpCisjaW5jbHVkZSA8Z2RrL2dkay5oPgorI2VuZGlmCiAj
ZWxpZiBkZWZpbmVkKEdES19XSU5ET1dJTkdfV0lOMzIpCiAjaW5jbHVkZSAiUGx1Z2luTWVzc2Fn
ZVRocm90dGxlcldpbi5oIgogI2luY2x1ZGUgPGdkay9nZGt3aW4zMi5oPgpAQCAtMTA3LDEzICsx
MTEsMjAgQEAgYm9vbCBQbHVnaW5WaWV3OjpkaXNwYXRjaE5QRXZlbnQoTlBFdmVudCYgZXZlbnQp
CiAgICAgcmV0dXJuIGFjY2VwdGVkOwogfQogCi0jaWYgZGVmaW5lZChYUF9VTklYKQorI2lmIGRl
ZmluZWQoWFBfVU5JWCkgJiYgUExBVEZPUk0oWDExKQogc3RhdGljIFdpbmRvdyBnZXRSb290V2lu
ZG93KEZyYW1lKiBwYXJlbnRGcmFtZSkKIHsKICAgICBHdGtXaWRnZXQqIHBhcmVudFdpZGdldCA9
IHBhcmVudEZyYW1lLT52aWV3KCktPmhvc3RXaW5kb3coKS0+cGxhdGZvcm1QYWdlQ2xpZW50KCk7
CiAgICAgR2RrU2NyZWVuKiBnc2NyZWVuID0gZ3RrX3dpZGdldF9nZXRfc2NyZWVuKHBhcmVudFdp
ZGdldCk7CiAgICAgcmV0dXJuIEdES19XSU5ET1dfWFdJTkRPVyhnZGtfc2NyZWVuX2dldF9yb290
X3dpbmRvdyhnc2NyZWVuKSk7CiB9CisjZWxpZiBkZWZpbmVkKEdES19XSU5ET1dJTkdfRElSRUNU
RkIpCitzdGF0aWMgR2RrRHJhd2FibGUqIGdldFJvb3RXaW5kb3coRnJhbWUqIHBhcmVudEZyYW1l
KQoreworICAgIEd0a1dpZGdldCogcGFyZW50V2lkZ2V0ID0gcGFyZW50RnJhbWUtPnZpZXcoKS0+
aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVBhZ2VDbGllbnQoKTsKKyAgICBHZGtTY3JlZW4qIGdzY3Jl
ZW4gPSBndGtfd2lkZ2V0X2dldF9zY3JlZW4ocGFyZW50V2lkZ2V0KTsKKyAgICByZXR1cm4gR0RL
X0RSQVdBQkxFKGdka19zY3JlZW5fZ2V0X3Jvb3Rfd2luZG93KGdzY3JlZW4pKTsKK30KICNlbmRp
ZgogCiB2b2lkIFBsdWdpblZpZXc6OnVwZGF0ZVBsdWdpbldpZGdldCgpCkBAIC0xMzQsNyArMTQ1
LDcgQEAgdm9pZCBQbHVnaW5WaWV3Ojp1cGRhdGVQbHVnaW5XaWRnZXQoKQogICAgIGlmIChtX3dp
bmRvd1JlY3QgPT0gb2xkV2luZG93UmVjdCAmJiBtX2NsaXBSZWN0ID09IG9sZENsaXBSZWN0KQog
ICAgICAgICByZXR1cm47CiAKLSNpZiBkZWZpbmVkKFhQX1VOSVgpCisjaWYgZGVmaW5lZChYUF9V
TklYKSAmJiBQTEFURk9STShYMTEpCiAgICAgaWYgKCFtX2lzV2luZG93ZWQpIHsKICAgICAgICAg
aWYgKG1fZHJhd2FibGUpCiAgICAgICAgICAgICBYRnJlZVBpeG1hcChHREtfRElTUExBWSgpLCBt
X2RyYXdhYmxlKTsKQEAgLTE4Miw3ICsxOTMsNyBAQCB2b2lkIFBsdWdpblZpZXc6OnBhaW50KEdy
YXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCkKICAgICBpZiAobV9p
c1dpbmRvd2VkKQogICAgICAgICByZXR1cm47CiAKLSNpZiBkZWZpbmVkKFhQX1VOSVgpCisjaWYg
ZGVmaW5lZChYUF9VTklYKSAmJiBQTEFURk9STShYMTEpCiAgICAgaWYgKCFtX2RyYXdhYmxlKQog
ICAgICAgICByZXR1cm47CiAKQEAgLTI5Nyw4ICszMDgsOSBAQCB2b2lkIFBsdWdpblZpZXc6Omhh
bmRsZUtleWJvYXJkRXZlbnQoS2V5Ym9hcmRFdmVudCogZXZlbnQpCiAgICAgaWYgKGV2ZW50LT50
eXBlKCkgIT0gZXZlbnROYW1lcygpLmtleWRvd25FdmVudCAmJiBldmVudC0+dHlwZSgpICE9IGV2
ZW50TmFtZXMoKS5rZXl1cEV2ZW50KQogICAgICAgICByZXR1cm47CiAKKyNpZiBkZWZpbmVkKFhQ
X1VOSVgpICYmIFBMQVRGT1JNKFgxMSkKICAgICBOUEV2ZW50IHhFdmVudDsKLSNpZiBkZWZpbmVk
KFhQX1VOSVgpCisKICAgICBHZGtFdmVudEtleSogZ2RrRXZlbnQgPSBldmVudC0+a2V5RXZlbnQo
KS0+Z2RrRXZlbnRLZXkoKTsKIAogICAgIHhFdmVudC50eXBlID0gKGV2ZW50LT50eXBlKCkgPT0g
ZXZlbnROYW1lcygpLmtleWRvd25FdmVudCkgPyAyIDogMzsgLy8gS2V5UHJlc3MvUmVsZWFzZSBn
ZXQgdW5zZXQgc29tZXdoZXJlCkBAIC0zMTcsMTMgKzMyOSwxNSBAQCB2b2lkIFBsdWdpblZpZXc6
OmhhbmRsZUtleWJvYXJkRXZlbnQoS2V5Ym9hcmRFdmVudCogZXZlbnQpCiAgICAgeEV2ZW50Lnhr
ZXkueSA9IDA7CiAgICAgeEV2ZW50LnhrZXkueF9yb290ID0gMDsKICAgICB4RXZlbnQueGtleS55
X3Jvb3QgPSAwOwotI2VuZGlmCi0KKyAgICAKICAgICBpZiAoIWRpc3BhdGNoTlBFdmVudCh4RXZl
bnQpKQogICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKKyNlbmRpZgorCisgICAg
CiB9CiAKLSNpZiBkZWZpbmVkKFhQX1VOSVgpCisjaWYgZGVmaW5lZChYUF9VTklYKSAmJiBQTEFU
Rk9STShYMTEpCiBzdGF0aWMgdW5zaWduZWQgaW50IGlucHV0RXZlbnRTdGF0ZShNb3VzZUV2ZW50
KiBldmVudCkKIHsKICAgICB1bnNpZ25lZCBpbnQgc3RhdGUgPSAwOwpAQCAtNDIyLDcgKzQzNiw3
IEBAIHZvaWQgUGx1Z2luVmlldzo6aGFuZGxlTW91c2VFdmVudChNb3VzZUV2ZW50KiBldmVudCkK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgTlBFdmVudCB4RXZlbnQ7Ci0jaWYgZGVmaW5lZChYUF9V
TklYKQorI2lmIGRlZmluZWQoWFBfVU5JWCkgJiYgUExBVEZPUk0oWDExKQogICAgIGluaXRYRXZl
bnQoJnhFdmVudCk7CiAKICAgICBJbnRQb2ludCBwb3N0Wm9vbVBvcyA9IHJvdW5kZWRJbnRQb2lu
dChtX2VsZW1lbnQtPnJlbmRlcmVyKCktPmFic29sdXRlVG9Mb2NhbChldmVudC0+YWJzb2x1dGVM
b2NhdGlvbigpKSk7CkBAIC00NDQsNiArNDU4LDcgQEAgdm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVN
b3VzZUV2ZW50KE1vdXNlRXZlbnQqIGV2ZW50KQogI2lmIGRlZmluZWQoWFBfVU5JWCkKIHZvaWQg
UGx1Z2luVmlldzo6aGFuZGxlRm9jdXNJbkV2ZW50KCkKIHsKKyNpZiBQTEFURk9STShYMTEpCiAg
ICAgWEV2ZW50IG5wRXZlbnQ7CiAgICAgaW5pdFhFdmVudCgmbnBFdmVudCk7CiAKQEAgLTQ1Mywx
MCArNDY4LDEyIEBAIHZvaWQgUGx1Z2luVmlldzo6aGFuZGxlRm9jdXNJbkV2ZW50KCkKICAgICBl
dmVudC5kZXRhaWwgPSBOb3RpZnlEZXRhaWxOb25lOwogCiAgICAgZGlzcGF0Y2hOUEV2ZW50KG5w
RXZlbnQpOworI2VuZGlmCiB9CiAKIHZvaWQgUGx1Z2luVmlldzo6aGFuZGxlRm9jdXNPdXRFdmVu
dCgpCiB7CisjaWYgUExBVEZPUk0oWDExKQogICAgIFhFdmVudCBucEV2ZW50OwogICAgIGluaXRY
RXZlbnQoJm5wRXZlbnQpOwogCkBAIC00NjYsNiArNDgzLDcgQEAgdm9pZCBQbHVnaW5WaWV3Ojpo
YW5kbGVGb2N1c091dEV2ZW50KCkKICAgICBldmVudC5kZXRhaWwgPSBOb3RpZnlEZXRhaWxOb25l
OwogCiAgICAgZGlzcGF0Y2hOUEV2ZW50KG5wRXZlbnQpOworI2VuZGlmCiB9CiAjZW5kaWYKIApA
QCAtNTEzLDcgKzUzMSw3IEBAIHZvaWQgUGx1Z2luVmlldzo6c2V0TlBXaW5kb3dJZk5lZWRlZCgp
CiAKICAgICAgICAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9uID0geyBtX3dpbmRvd1JlY3QueCgp
LCBtX3dpbmRvd1JlY3QueSgpLCBtX3dpbmRvd1JlY3Qud2lkdGgoKSwgbV93aW5kb3dSZWN0Lmhl
aWdodCgpIH07CiAgICAgICAgIGd0a193aWRnZXRfc2l6ZV9hbGxvY2F0ZShwbGF0Zm9ybVBsdWdp
bldpZGdldCgpLCAmYWxsb2NhdGlvbik7Ci0jaWYgZGVmaW5lZChYUF9VTklYKQorI2lmIGRlZmlu
ZWQoWFBfVU5JWCkmJiBQTEFURk9STShYMTEpCiAgICAgICAgIGlmICghbV9uZWVkc1hFbWJlZCkg
ewogICAgICAgICAgICAgZ3RrX3h0YmluX3NldF9wb3NpdGlvbihHVEtfWFRCSU4ocGxhdGZvcm1Q
bHVnaW5XaWRnZXQoKSksIG1fd2luZG93UmVjdC54KCksIG1fd2luZG93UmVjdC55KCkpOwogICAg
ICAgICAgICAgZ3RrX3h0YmluX3Jlc2l6ZShwbGF0Zm9ybVBsdWdpbldpZGdldCgpLCBtX3dpbmRv
d1JlY3Qud2lkdGgoKSwgbV93aW5kb3dSZWN0LmhlaWdodCgpKTsKQEAgLTYyNyw3ICs2NDUsNyBA
QCBib29sIFBsdWdpblZpZXc6OnBsYXRmb3JtR2V0VmFsdWUoTlBOVmFyaWFibGUgdmFyaWFibGUs
IHZvaWQqIHZhbHVlLCBOUEVycm9yKiByZQogewogICAgIHN3aXRjaCAodmFyaWFibGUpIHsKICAg
ICBjYXNlIE5QTlZ4RGlzcGxheToKLSNpZiBkZWZpbmVkKFhQX1VOSVgpCisjaWYgZGVmaW5lZChY
UF9VTklYKSAmJiBQTEFURk9STShYMTEpCiAgICAgICAgIGlmIChtX25lZWRzWEVtYmVkKQogICAg
ICAgICAgICAgKih2b2lkICoqKXZhbHVlID0gKHZvaWQgKilHREtfRElTUExBWSgpOwogICAgICAg
ICBlbHNlCkBAIC02MzgsNyArNjU2LDcgQEAgYm9vbCBQbHVnaW5WaWV3OjpwbGF0Zm9ybUdldFZh
bHVlKE5QTlZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2YWx1ZSwgTlBFcnJvciogcmUKICNlbmRp
ZgogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotI2lmIGRlZmluZWQoWFBfVU5JWCkKKyNpZiBkZWZp
bmVkKFhQX1VOSVgpICYmIFBMQVRGT1JNKFgxMSkKICAgICBjYXNlIE5QTlZ4dEFwcENvbnRleHQ6
CiAgICAgICAgIGlmICghbV9uZWVkc1hFbWJlZCkgewogICAgICAgICAgICAgKih2b2lkICoqKXZh
bHVlID0gWHREaXNwbGF5VG9BcHBsaWNhdGlvbkNvbnRleHQgKEdUS19YVEJJTihwbGF0Zm9ybVBs
dWdpbldpZGdldCgpKS0+eHRjbGllbnQueHRkaXNwbGF5KTsKQEAgLTY1MCw3ICs2NjgsNyBAQCBi
b29sIFBsdWdpblZpZXc6OnBsYXRmb3JtR2V0VmFsdWUoTlBOVmFyaWFibGUgdmFyaWFibGUsIHZv
aWQqIHZhbHVlLCBOUEVycm9yKiByZQogI2VuZGlmCiAKICAgICAgICAgY2FzZSBOUE5WbmV0c2Nh
cGVXaW5kb3c6IHsKLSNpZiBkZWZpbmVkKFhQX1VOSVgpCisjaWYgZGVmaW5lZChYUF9VTklYKSAm
JiBQTEFURk9STShYMTEpCiAgICAgICAgICAgICB2b2lkKiB3ID0gcmVpbnRlcnByZXRfY2FzdDx2
b2lkKj4odmFsdWUpOwogICAgICAgICAgICAgR3RrV2lkZ2V0KiB3aWRnZXQgPSBtX3BhcmVudEZy
YW1lLT52aWV3KCktPmhvc3RXaW5kb3coKS0+cGxhdGZvcm1QYWdlQ2xpZW50KCk7CiAgICAgICAg
ICAgICAqKChYSUQgKil3KSA9IEdES19XSU5ET1dfWFdJTkRPVyhndGtfd2lkZ2V0X2dldF93aW5k
b3cod2lkZ2V0KSk7CkBAIC03MDQsNiArNzIyLDcgQEAgdm9pZCBQbHVnaW5WaWV3Ojpmb3JjZVJl
ZHJhdygpCiAgICAgICAgIGd0a193aWRnZXRfcXVldWVfZHJhdyhtX3BhcmVudEZyYW1lLT52aWV3
KCktPmhvc3RXaW5kb3coKS0+cGxhdGZvcm1QYWdlQ2xpZW50KCkpOwogfQogCisjaWYgUExBVEZP
Uk0oWDExKQogc3RhdGljIERpc3BsYXkqIGdldFBsdWdpbkRpc3BsYXkoKQogewogICAgIC8vIFRo
ZSBwbHVnaW4gdG9vbGtpdCBtaWdodCBoYXZlIGEgZGlmZmVyZW50IFggY29ubmVjdGlvbiBvcGVu
LiAgU2luY2Ugd2UncmUKQEAgLTcxNyw4ICs3MzYsOSBAQCBzdGF0aWMgRGlzcGxheSogZ2V0UGx1
Z2luRGlzcGxheSgpCiAgICAgcmV0dXJuIDA7CiAjZW5kaWYKIH0KKyNlbmRpZgogCi0jaWYgZGVm
aW5lZChYUF9VTklYKQorI2lmIGRlZmluZWQoWFBfVU5JWCkgJiYgUExBVEZPUk0oWDExKQogc3Rh
dGljIHZvaWQgZ2V0VmlzdWFsQW5kQ29sb3JtYXAoaW50IGRlcHRoLCBWaXN1YWwqKiB2aXN1YWws
IENvbG9ybWFwKiBjb2xvcm1hcCkKIHsKICAgICAqdmlzdWFsID0gMDsKQEAgLTc5Miw3ICs4MTIs
NyBAQCBib29sIFBsdWdpblZpZXc6OnBsYXRmb3JtU3RhcnQoKQogICAgIH0KIAogICAgIGlmICht
X2lzV2luZG93ZWQpIHsKLSNpZiBkZWZpbmVkKFhQX1VOSVgpCisjaWYgZGVmaW5lZChYUF9VTklY
KSAmJiBQTEFURk9STShYMTEpCiAgICAgICAgIEd0a1dpZGdldCogcGFnZUNsaWVudCA9IG1fcGFy
ZW50RnJhbWUtPnZpZXcoKS0+aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVBhZ2VDbGllbnQoKTsKIAog
ICAgICAgICBpZiAobV9uZWVkc1hFbWJlZCkgewpAQCAtODEwLDI0ICs4MzAsMjggQEAgYm9vbCBQ
bHVnaW5WaWV3OjpwbGF0Zm9ybVN0YXJ0KCkKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBz
ZXRQbGF0Zm9ybVdpZGdldChndGtfeHRiaW5fbmV3KGd0a193aWRnZXRfZ2V0X3dpbmRvdyhwYWdl
Q2xpZW50KSwgMCkpOwogI2Vsc2UKLSAgICAgICAgc2V0UGxhdGZvcm1XaWRnZXQoZ3RrX3NvY2tl
dF9uZXcoKSk7CisgICAgICAgIEd0a1dpZGdldCogcGFnZUNsaWVudCA9IG1fcGFyZW50RnJhbWUt
PnZpZXcoKS0+aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVBhZ2VDbGllbnQoKTsKKwkKKwlzZXRQbGF0
Zm9ybVdpZGdldChndGtfc29ja2V0X25ldygpKTsKICAgICAgICAgZ3RrX2NvbnRhaW5lcl9hZGQo
R1RLX0NPTlRBSU5FUihwYWdlQ2xpZW50KSwgcGxhdGZvcm1QbHVnaW5XaWRnZXQoKSk7CiAjZW5k
aWYKICAgICB9IGVsc2UgewogICAgICAgICBzZXRQbGF0Zm9ybVdpZGdldCgwKTsKKyNpZiBkZWZp
bmVkKFhQX1VOSVgpICYmIFBMQVRGT1JNKFgxMSkKICAgICAgICAgbV9wbHVnaW5EaXNwbGF5ID0g
Z2V0UGx1Z2luRGlzcGxheSgpOworI2VuZGlmCiAgICAgfQogCiAgICAgc2hvdygpOwogCi0jaWYg
ZGVmaW5lZChYUF9VTklYKQorI2lmIGRlZmluZWQoWFBfVU5JWCkgJiYgUExBVEZPUk0oWDExKQog
ICAgICAgICBOUFNldFdpbmRvd0NhbGxiYWNrU3RydWN0KiB3cyA9IG5ldyBOUFNldFdpbmRvd0Nh
bGxiYWNrU3RydWN0KCk7CiAgICAgICAgIHdzLT50eXBlID0gMDsKICNlbmRpZgogCiAgICAgaWYg
KG1faXNXaW5kb3dlZCkgewogICAgICAgICBtX25wV2luZG93LnR5cGUgPSBOUFdpbmRvd1R5cGVX
aW5kb3c7Ci0jaWYgZGVmaW5lZChYUF9VTklYKQorI2lmIGRlZmluZWQoWFBfVU5JWCkgJiYgUExB
VEZPUk0oWDExKQogICAgICAgICBpZiAobV9uZWVkc1hFbWJlZCkgewogICAgICAgICAgICAgR3Rr
V2lkZ2V0KiB3aWRnZXQgPSBwbGF0Zm9ybVBsdWdpbldpZGdldCgpOwogICAgICAgICAgICAgZ3Rr
X3dpZGdldF9yZWFsaXplKHdpZGdldCk7CkBAIC04NTMsNiArODc3LDcgQEAgYm9vbCBQbHVnaW5W
aWV3OjpwbGF0Zm9ybVN0YXJ0KCkKICAgICAgICAgbV9ucFdpbmRvdy53aW5kb3cgPSAwOyAvLyBO
b3QgdXNlZD8KIAogI2lmIGRlZmluZWQoWFBfVU5JWCkKKyNpZiBQTEFURk9STShYMTEpCiAgICAg
ICAgIEdka1NjcmVlbiogZ3NjcmVlbiA9IGdka19zY3JlZW5fZ2V0X2RlZmF1bHQoKTsKICAgICAg
ICAgR2RrVmlzdWFsKiBndmlzdWFsID0gZ2RrX3NjcmVlbl9nZXRfc3lzdGVtX3Zpc3VhbChnc2Ny
ZWVuKTsKIApAQCAtODY5LDYgKzg5NCw3IEBAIGJvb2wgUGx1Z2luVmlldzo6cGxhdGZvcm1TdGFy
dCgpCiAgICAgICAgIHdzLT5kaXNwbGF5ID0gR0RLX0RJU1BMQVkoKTsKICAgICAgICAgd3MtPnZp
c3VhbCA9IG1fdmlzdWFsOwogICAgICAgICB3cy0+Y29sb3JtYXAgPSBtX2NvbG9ybWFwOworI2Vu
ZGlmCiAKICAgICAgICAgbV9ucFdpbmRvdy54ID0gMDsKICAgICAgICAgbV9ucFdpbmRvdy55ID0g
MDsKQEAgLTg4MSw3ICs5MDcsNyBAQCBib29sIFBsdWdpblZpZXc6OnBsYXRmb3JtU3RhcnQoKQog
I2VuZGlmCiAgICAgfQogCi0jaWYgZGVmaW5lZChYUF9VTklYKQorI2lmIGRlZmluZWQoWFBfVU5J
WCkgJiYgUExBVEZPUk0oWDExKQogICAgIG1fbnBXaW5kb3cud3NfaW5mbyA9IHdzOwogI2VuZGlm
CiAKQEAgLTg5NCw3ICs5MjAsNyBAQCBib29sIFBsdWdpblZpZXc6OnBsYXRmb3JtU3RhcnQoKQog
CiB2b2lkIFBsdWdpblZpZXc6OnBsYXRmb3JtRGVzdHJveSgpCiB7Ci0jaWYgZGVmaW5lZChYUF9V
TklYKQorI2lmIGRlZmluZWQoWFBfVU5JWCkgJiYgUExBVEZPUk0oWDExKQogICAgIGlmIChtX2Ry
YXdhYmxlKSB7CiAgICAgICAgIFhGcmVlUGl4bWFwKEdES19ESVNQTEFZKCksIG1fZHJhd2FibGUp
OwogICAgICAgICBtX2RyYXdhYmxlID0gMDsKZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvd2Via2l0
LnBjLmluIGIvV2ViS2l0L2d0ay93ZWJraXQucGMuaW4KaW5kZXggOWJlZDBmMy4uYWU1M2Y5MSAx
MDA2NDQKLS0tIGEvV2ViS2l0L2d0ay93ZWJraXQucGMuaW4KKysrIGIvV2ViS2l0L2d0ay93ZWJr
aXQucGMuaW4KQEAgLTYsNiArNiw2IEBAIGluY2x1ZGVkaXI9QGluY2x1ZGVkaXJACiBOYW1lOiBX
ZWJLaXQKIERlc2NyaXB0aW9uOiBXZWIgY29udGVudCBlbmdpbmUgZm9yIEdUSysKIFZlcnNpb246
IEBWRVJTSU9OQAotUmVxdWlyZXM6IGdsaWItMi4wIGd0aystQEdUS19BUElfVkVSU0lPTkAgbGli
c291cC0yLjQKK1JlcXVpcmVzOiBnbGliLTIuMCBndGsrLUBXSU5ET1dJTkdAQEdUS19BUElfVkVS
U0lPTkAgbGlic291cC0yLjQKIExpYnM6IC1MJHtsaWJkaXJ9IC1sd2Via2l0Z3RrLUBXRUJLSVRH
VEtfQVBJX1ZFUlNJT05ACiBDZmxhZ3M6IC1JJHtpbmNsdWRlZGlyfS93ZWJraXQtQFdFQktJVEdU
S19BUElfVkVSU0lPTkAKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0d0a0xhdW5jaGVyL21haW4u
YyBiL1dlYktpdFRvb2xzL0d0a0xhdW5jaGVyL21haW4uYwppbmRleCAxN2VkNDBmLi4yNDFhMWYw
IDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9HdGtMYXVuY2hlci9tYWluLmMKKysrIGIvV2ViS2l0
VG9vbHMvR3RrTGF1bmNoZXIvbWFpbi5jCkBAIC0xLDQgKzEsNSBAQAogLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAwOS0yMDEwIFNUTWljcm9lbGVjdHJvbmljcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMDcgQWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4KICAqCkBAIC0yNyw2ICsyOCw4IEBACiAj
aW5jbHVkZSA8Z3RrL2d0ay5oPgogI2luY2x1ZGUgPHdlYmtpdC93ZWJraXQuaD4KIAorI2luY2x1
ZGUgPHN0cmluZy5oPgorCiBzdGF0aWMgR3RrV2lkZ2V0KiBtYWluX3dpbmRvdzsKIHN0YXRpYyBH
dGtXaWRnZXQqIHVyaV9lbnRyeTsKIHN0YXRpYyBHdGtTdGF0dXNiYXIqIG1haW5fc3RhdHVzYmFy
OwpAQCAtMzUsNiArMzgsMTggQEAgc3RhdGljIGdjaGFyKiBtYWluX3RpdGxlOwogc3RhdGljIGdk
b3VibGUgbG9hZF9wcm9ncmVzczsKIHN0YXRpYyBndWludCBzdGF0dXNfY29udGV4dF9pZDsKIAor
c3RhdGljIEd0a1dpZGdldCogaW5zcGVjdG9yX3dpbmRvdzsKK3N0YXRpYyBjaGFyICpwcm9ncmFt
Oworc3RhdGljIGdjaGFyKiB1cmkgPSBOVUxMOworc3RhdGljIFNvdXBVUkkqIHByb3h5ID0gTlVM
TDsKKworI2RlZmluZSBERUZBVUxUX1dJRFRIICA2NDAKKyNkZWZpbmUgREVGQVVMVF9IRUlHSFQg
NDgwCisKK3N0YXRpYyBpbnQgIHdpZHRoID0gREVGQVVMVF9XSURUSDsKK3N0YXRpYyBpbnQgIGhl
aWdodCA9IERFRkFVTFRfSEVJR0hUOworCisKIHN0YXRpYyB2b2lkCiBhY3RpdmF0ZV91cmlfZW50
cnlfY2IgKEd0a1dpZGdldCogZW50cnksIGdwb2ludGVyIGRhdGEpCiB7CkBAIC05MSw2ICsxMDYs
ODEgQEAgbm90aWZ5X3Byb2dyZXNzX2NiIChXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldywgR1BhcmFt
U3BlYyogcHNwZWMsIGdwb2ludGVyIGRhdGEpCiAgICAgdXBkYXRlX3RpdGxlIChHVEtfV0lORE9X
IChtYWluX3dpbmRvdykpOwogfQogCisKK3N0YXRpYyB2b2lkCitoaWRlX3dpbmRvd19jYihHdGtX
aWRnZXQgKndpZGdldCwgZ3BvaW50ZXIgZGF0YSkKK3sKKyAgICBndGtfd2lkZ2V0X2hpZGUod2lk
Z2V0KTsKK30KKworc3RhdGljIFdlYktpdFdlYlZpZXcqCitjcmVhdGVfaW5zcGVjdG9yX2NiIChX
ZWJLaXRXZWJJbnNwZWN0b3IqIHdlYl9pbnNwZWN0b3IsIFdlYktpdFdlYlZpZXcqIHBhZ2UsIGdw
b2ludGVyIGRhdGEpCit7CisgICAgR3RrV2lkZ2V0KiBzY3JvbGxlZF93aW5kb3c7CisgICAgR3Rr
V2lkZ2V0KiBuZXdfd2ViX3ZpZXc7CisKKyAgICBpbnNwZWN0b3Jfd2luZG93ID0gZ3RrX3dpbmRv
d19uZXcoR1RLX1dJTkRPV19UT1BMRVZFTCk7CisgICAgZ19zaWduYWxfY29ubmVjdChHX09CSkVD
VChpbnNwZWN0b3Jfd2luZG93KSwgImRlbGV0ZS1ldmVudCIsCisgICAgICAgICAgICAgICAgICAg
ICBHX0NBTExCQUNLKGhpZGVfd2luZG93X2NiKSwgTlVMTCk7CisKKyAgICBndGtfd2luZG93X3Nl
dF90aXRsZShHVEtfV0lORE9XKGluc3BlY3Rvcl93aW5kb3cpLCAiSW5zcGVjdG9yIik7CisgICAg
Z3RrX3dpbmRvd19zZXRfZGVmYXVsdF9zaXplKEdUS19XSU5ET1coaW5zcGVjdG9yX3dpbmRvdyks
IDQwMCwgMzAwKTsKKyAgICBndGtfd2lkZ2V0X3Nob3coaW5zcGVjdG9yX3dpbmRvdyk7CisKKyAg
ICBzY3JvbGxlZF93aW5kb3cgPSBndGtfc2Nyb2xsZWRfd2luZG93X25ldyhOVUxMLCBOVUxMKTsK
KyAgICBndGtfc2Nyb2xsZWRfd2luZG93X3NldF9wb2xpY3koR1RLX1NDUk9MTEVEX1dJTkRPVyhz
Y3JvbGxlZF93aW5kb3cpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVEtf
UE9MSUNZX0FVVE9NQVRJQywgR1RLX1BPTElDWV9BVVRPTUFUSUMpOworICAgIGd0a19jb250YWlu
ZXJfYWRkKEdUS19DT05UQUlORVIoaW5zcGVjdG9yX3dpbmRvdyksIHNjcm9sbGVkX3dpbmRvdyk7
CisgICAgZ3RrX3dpZGdldF9zaG93KHNjcm9sbGVkX3dpbmRvdyk7CisKKyAgICBuZXdfd2ViX3Zp
ZXcgPSB3ZWJraXRfd2ViX3ZpZXdfbmV3KCk7CisgICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NP
TlRBSU5FUihzY3JvbGxlZF93aW5kb3cpLCBuZXdfd2ViX3ZpZXcpOworCisgICAgcmV0dXJuIFdF
QktJVF9XRUJfVklFVyhuZXdfd2ViX3ZpZXcpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4KK2luc3Bl
Y3Rvcl9zaG93X3dpbmRvd19jYiAoV2ViS2l0V2ViSW5zcGVjdG9yKiBpbnNwZWN0b3IpCit7Cisg
ICAgZ3RrX3dpZGdldF9zaG93KGluc3BlY3Rvcl93aW5kb3cpOworICAgIGdfbWVzc2FnZSgic2hv
d193aW5kb3c6ICVwIiwgaW5zcGVjdG9yKTsKKyAgICByZXR1cm4gVFJVRTsKK30KKworc3RhdGlj
IGdib29sZWFuCitpbnNwZWN0b3JfY2xvc2Vfd2luZG93X2NiIChXZWJLaXRXZWJJbnNwZWN0b3Iq
IGluc3BlY3RvcikKK3sKKyAgICBnX21lc3NhZ2UoImNsb3NlX3dpbmRvdyIpOworICAgIHJldHVy
biBUUlVFOworfQorCitzdGF0aWMgZ2Jvb2xlYW4KK2luc3BlY3Rvcl9hdHRhY2hfd2luZG93X2Ni
IChXZWJLaXRXZWJJbnNwZWN0b3IqIGluc3BlY3RvcikKK3sKKyAgICBnX21lc3NhZ2UoImF0dGFj
aF93aW5kb3ciKTsKKyAgICByZXR1cm4gRkFMU0U7Cit9CisKK3N0YXRpYyBnYm9vbGVhbgoraW5z
cGVjdG9yX2RldHRhY2hfd2luZG93X2NiIChXZWJLaXRXZWJJbnNwZWN0b3IqIGluc3BlY3RvcikK
K3sKKyAgICBnX21lc3NhZ2UoImRldHRhY2hfd2luZG93Iik7CisgICAgcmV0dXJuIEZBTFNFOwor
fQorCitzdGF0aWMgZ2Jvb2xlYW4KK2luc3BlY3Rvcl91cmlfY2hhbmdlZF9jYiAoV2ViS2l0V2Vi
SW5zcGVjdG9yKiBpbnNwZWN0b3IpCit7CisgICAgZ19tZXNzYWdlKCJ1cmlfY2hhbmdlZDogJXMi
LCB3ZWJraXRfd2ViX2luc3BlY3Rvcl9nZXRfaW5zcGVjdGVkX3VyaShpbnNwZWN0b3IpKTsKKyAg
ICByZXR1cm4gRkFMU0U7Cit9CisKK3N0YXRpYyBnYm9vbGVhbgoraW5zcGVjdG9yX2luc3BlY3Rv
cl9kZXN0cm95ZWRfY2IgKFdlYktpdFdlYkluc3BlY3RvciogaW5zcGVjdG9yKQoreworICAgIGdf
bWVzc2FnZSgiZGVzdHJveSIpOworICAgIHJldHVybiBGQUxTRTsKK30KIHN0YXRpYyB2b2lkCiBk
ZXN0cm95X2NiIChHdGtXaWRnZXQqIHdpZGdldCwgZ3BvaW50ZXIgZGF0YSkKIHsKQEAgLTExMiwx
NiArMjAyLDMyIEBAIGdvX2ZvcndhcmRfY2IgKEd0a1dpZGdldCogd2lkZ2V0LCBncG9pbnRlciBk
YXRhKQogc3RhdGljIEd0a1dpZGdldCoKIGNyZWF0ZV9icm93c2VyICgpCiB7CisgICAgV2ViS2l0
V2ViU2V0dGluZ3MgKnNldHRpbmdzID0gd2Via2l0X3dlYl9zZXR0aW5nc19uZXcoKTsKKyAgICBX
ZWJLaXRXZWJJbnNwZWN0b3IgKmluc3BlY3RvcjsKKyAgICAKICAgICBHdGtXaWRnZXQqIHNjcm9s
bGVkX3dpbmRvdyA9IGd0a19zY3JvbGxlZF93aW5kb3dfbmV3IChOVUxMLCBOVUxMKTsKICAgICBn
dGtfc2Nyb2xsZWRfd2luZG93X3NldF9wb2xpY3kgKEdUS19TQ1JPTExFRF9XSU5ET1cgKHNjcm9s
bGVkX3dpbmRvdyksIEdUS19QT0xJQ1lfQVVUT01BVElDLCBHVEtfUE9MSUNZX0FVVE9NQVRJQyk7
CiAKICAgICB3ZWJfdmlldyA9IFdFQktJVF9XRUJfVklFVyAod2Via2l0X3dlYl92aWV3X25ldyAo
KSk7CiAgICAgZ3RrX2NvbnRhaW5lcl9hZGQgKEdUS19DT05UQUlORVIgKHNjcm9sbGVkX3dpbmRv
dyksIEdUS19XSURHRVQgKHdlYl92aWV3KSk7CisgICAgCisgICAgZ19vYmplY3Rfc2V0KHNldHRp
bmdzLCAiZW5hYmxlLWRldmVsb3Blci1leHRyYXMiLCBUUlVFLCBOVUxMKTsKKyAgICB3ZWJraXRf
d2ViX3ZpZXdfc2V0X3NldHRpbmdzKFdFQktJVF9XRUJfVklFVyh3ZWJfdmlldyksIHNldHRpbmdz
KTsKIAogICAgIGdfc2lnbmFsX2Nvbm5lY3QgKHdlYl92aWV3LCAibm90aWZ5Ojp0aXRsZSIsIEdf
Q0FMTEJBQ0sgKG5vdGlmeV90aXRsZV9jYiksIHdlYl92aWV3KTsKICAgICBnX3NpZ25hbF9jb25u
ZWN0ICh3ZWJfdmlldywgIm5vdGlmeTo6bG9hZC1zdGF0dXMiLCBHX0NBTExCQUNLIChub3RpZnlf
bG9hZF9zdGF0dXNfY2IpLCB3ZWJfdmlldyk7CiAgICAgZ19zaWduYWxfY29ubmVjdCAod2ViX3Zp
ZXcsICJub3RpZnk6OnByb2dyZXNzIiwgR19DQUxMQkFDSyAobm90aWZ5X3Byb2dyZXNzX2NiKSwg
d2ViX3ZpZXcpOwogICAgIGdfc2lnbmFsX2Nvbm5lY3QgKHdlYl92aWV3LCAiaG92ZXJpbmctb3Zl
ci1saW5rIiwgR19DQUxMQkFDSyAobGlua19ob3Zlcl9jYiksIHdlYl92aWV3KTsKKyAgICAKKyAg
ICBpbnNwZWN0b3IgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2luc3BlY3Rvcih3ZWJfdmlldyk7Cisg
ICAgZ19zaWduYWxfY29ubmVjdCAoaW5zcGVjdG9yLCAiaW5zcGVjdC13ZWItdmlldyIsIEdfQ0FM
TEJBQ0sgKGNyZWF0ZV9pbnNwZWN0b3JfY2IpLCBOVUxMKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0
IChpbnNwZWN0b3IsICJzaG93LXdpbmRvdyIsIEdfQ0FMTEJBQ0sgKGluc3BlY3Rvcl9zaG93X3dp
bmRvd19jYiksIE5VTEwpOworICAgIGdfc2lnbmFsX2Nvbm5lY3QgKGluc3BlY3RvciwgImNsb3Nl
LXdpbmRvdyIsIEdfQ0FMTEJBQ0sgKGluc3BlY3Rvcl9jbG9zZV93aW5kb3dfY2IpLCBOVUxMKTsK
KyAgICBnX3NpZ25hbF9jb25uZWN0IChpbnNwZWN0b3IsICJhdHRhY2gtd2luZG93IiwgR19DQUxM
QkFDSyAoaW5zcGVjdG9yX2F0dGFjaF93aW5kb3dfY2IpLCBOVUxMKTsKKyAgICBnX3NpZ25hbF9j
b25uZWN0IChpbnNwZWN0b3IsICJkZXR0YWNoLXdpbmRvdyIsIEdfQ0FMTEJBQ0sgKGluc3BlY3Rv
cl9kZXR0YWNoX3dpbmRvd19jYiksIE5VTEwpOworICAgIGdfc2lnbmFsX2Nvbm5lY3QgKGluc3Bl
Y3RvciwgImRlc3Ryb3kiLCBHX0NBTExCQUNLIChpbnNwZWN0b3JfaW5zcGVjdG9yX2Rlc3Ryb3ll
ZF9jYiksIE5VTEwpOworCisgICAgZ19zaWduYWxfY29ubmVjdCAoaW5zcGVjdG9yLCAibm90aWZ5
OjppbnNwZWN0ZWQtdXJpIiwgR19DQUxMQkFDSyAoaW5zcGVjdG9yX3VyaV9jaGFuZ2VkX2NiKSwg
TlVMTCk7CiAKICAgICByZXR1cm4gc2Nyb2xsZWRfd2luZG93OwogfQpAQCAtMTc5LDI5ICsyODUs
MTQyIEBAIHN0YXRpYyBHdGtXaWRnZXQqCiBjcmVhdGVfd2luZG93ICgpCiB7CiAgICAgR3RrV2lk
Z2V0KiB3aW5kb3cgPSBndGtfd2luZG93X25ldyAoR1RLX1dJTkRPV19UT1BMRVZFTCk7Ci0gICAg
Z3RrX3dpbmRvd19zZXRfZGVmYXVsdF9zaXplIChHVEtfV0lORE9XICh3aW5kb3cpLCA4MDAsIDYw
MCk7CisgICAgZ3RrX3dpbmRvd19zZXRfcG9zaXRpb24gKEdUS19XSU5ET1cgKHdpbmRvdyksIEdU
S19XSU5fUE9TX0NFTlRFUik7CisgICAgZ3RrX3dpbmRvd19zZXRfZGVmYXVsdF9zaXplIChHVEtf
V0lORE9XICh3aW5kb3cpLCB3aWR0aCwgaGVpZ2h0KTsKICAgICBndGtfd2lkZ2V0X3NldF9uYW1l
ICh3aW5kb3csICJHdGtMYXVuY2hlciIpOwogICAgIGdfc2lnbmFsX2Nvbm5lY3QgKHdpbmRvdywg
ImRlc3Ryb3kiLCBHX0NBTExCQUNLIChkZXN0cm95X2NiKSwgTlVMTCk7CiAKICAgICByZXR1cm4g
d2luZG93OwogfQogCi1zdGF0aWMgZ2NoYXIqIGZpbGVuYW1lVG9VUkwoY29uc3QgY2hhciogZmls
ZW5hbWUpCitzdGF0aWMgdm9pZAordXNhZ2Uodm9pZCkKIHsKLSAgICBpZiAoIWdfZmlsZV90ZXN0
KGZpbGVuYW1lLCBHX0ZJTEVfVEVTVF9FWElTVFMpKQotICAgICAgICByZXR1cm4gMDsKKyAgICBw
cmludGYoIlVzYWdlOiAlcyBbb3B0aW9uc10gVVJJXG4iLCBwcm9ncmFtKTsKKyAgICBwcmludGYo
IiAgICAgICAgIC13ICAgIGJyb3dzZXIgd2lkdGgsICBpbiBwaXhlbHMgKCVkKVxuIiwgREVGQVVM
VF9XSURUSCk7CisgICAgcHJpbnRmKCIgICAgICAgICAtaCAgICBicm93c2VyIGhlaWdodCwgaW4g
cGl4ZWxzICglZClcbiIsIERFRkFVTFRfSEVJR0hUKTsKKyAgICBwcmludGYoIiAgICAgICAgIC1w
ICAgIHByb3h5IHNldHRpbmdzLCBzZXJ2ZXI6cG9ydFxuIik7Cit9CiAKLSAgICBHRmlsZSAqZ2Zp
bGUgPSBnX2ZpbGVfbmV3X2Zvcl9wYXRoKGZpbGVuYW1lKTsKLSAgICBnY2hhciAqZmlsZVVSTCA9
IGdfZmlsZV9nZXRfdXJpKGdmaWxlKTsKLSAgICBnX29iamVjdF91bnJlZihnZmlsZSk7CitzdGF0
aWMgaW50CitwYXJzZV9hcmdzKGludCAqYXJnYywgY2hhciAqKmFyZ3YpCit7CisgICAgaW50IG5h
cmdzID0gKmFyZ2M7CisgICAgY2hhciAqKmFyZ3MgPSAoY2hhciAqKikgKmFyZ3Y7CisgICAgY2hh
ciAqb3B0aW9uOworICAgIGludCBpOworCisgICAgcHJvZ3JhbSA9IHN0cnJjaHIoYXJnc1swXSwg
Jy8nKSA/IHN0cnJjaHIoYXJnc1swXSwgJy8nKSAgKyAxIDogYXJnc1swXTsKKworICAgIGkgPSAx
OworICAgIHdoaWxlIChpIDwgbmFyZ3MpCisgICAgeworICAgICAgICBvcHRpb24gPSBhcmdzW2ld
OworCisgICAgICAgIGlmIChzdHJjbXAob3B0aW9uLCAiLXciKSA9PSAwKQorICAgICAgICB7Cisg
ICAgICAgICAgICBpZiAoYXJnc1tpKzFdICE9IE5VTEwpCisgICAgICAgICAgICAgICAgd2lkdGgg
PSBhdG9pKGFyZ3NbaSsxXSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcHJpbnRmKCIlczogaW52YWxpZCB3aWR0aFxuIiwgcHJvZ3JhbSk7CisgICAg
ICAgICAgICAgICAgdXNhZ2UoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGlmICh3aWR0aCA9PSAwKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHByaW50ZigiJXM6IGludmFsaWQgd2lkdGggLS0gJWRcbiIsIHByb2dyYW0s
IHdpZHRoKTsKKyAgICAgICAgICAgICAgICB1c2FnZSgpOworICAgICAgICAgICAgICAgIHJldHVy
biAtMTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaSArPSAyOworICAgICAgICB9Cisg
ICAgICAgIGVsc2UgaWYgKHN0cmNtcChvcHRpb24sICItaCIpID09IDApCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGlmIChhcmdzW2krMV0gIT0gTlVMTCkKKyAgICAgICAgICAgICAgICBoZWlnaHQg
PSBhdG9pKGFyZ3NbaSsxXSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcHJpbnRmKCIlczogaW52YWxpZCBoZWlnaHRcbiIsIHByb2dyYW0pOworICAg
ICAgICAgICAgICAgIHVzYWdlKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBpZiAoaGVpZ2h0ID09IDApCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgcHJpbnRmKCIlczogaW52YWxpZCBoZWlnaHQgLS0gJWRcbiIsIHByb2dy
YW0sIGhlaWdodCk7CisgICAgICAgICAgICAgICAgdXNhZ2UoKTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gLTE7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGkgKz0gMjsKKyAgICAgICAg
fQorICAgICAgICBlbHNlIGlmIChzdHJjbXAob3B0aW9uLCAiLXAiKSA9PSAwKQorICAgICAgICB7
CisgICAgICAgICAgICBpZiAoYXJnc1tpKzFdICE9IE5VTEwpCisgICAgICAgICAgICAgICAgZ2V0
X2h0dHBfcHJveHkoYXJnc1tpKzFdKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBwcmludGYoIiVzOiBtaXNzaW5nIHByb3h5IHNldHRpbmdzIFxuIiwg
cHJvZ3JhbSk7CisgICAgICAgICAgICAgICAgdXNhZ2UoKTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gLTE7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGkgKz0gMjsKKyAgICAgICAgfQor
CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGkgPT0gKG5hcmdzIC0g
MSkpCisgICAgICAgICAgICAgICAgdXJpID0gb3B0aW9uOworICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIHByaW50ZigiJXM6IGludmFsaWQgb3B0aW9uIC0t
ICVzXG4iLCBwcm9ncmFtLCBvcHRpb24pOworICAgICAgICAgICAgICAgIHVzYWdlKCk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpKys7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAodXJpID09IE5VTEwpCisgICAgeworICAgICAg
ICBwcmludGYoIiVzOiBubyB1cmkgc3BlY2lmaWVkXG4iLCBwcm9ncmFtKTsKKyAgICAgICAgdXNh
Z2UoKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBlbHNlIGlmICh1cmlbMF0gPT0g
Jy0nKQorICAgIHsKKyAgICAgICAgcHJpbnRmKCIlczogaW52YWxpZCB1cmkgLS0gJXNcbiIsIHBy
b2dyYW0sIHVyaSk7CisgICAgICAgIHVzYWdlKCk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9
CisKKyAgICByZXR1cm4gMDsKK30KIAotICAgIHJldHVybiBmaWxlVVJMOwordm9pZAorZ2V0X2h0
dHBfcHJveHkoZ2NoYXIqIGh0dHBfcHJveHkpCit7CisgICAgaWYgKGdfc3RyX2hhc19wcmVmaXgg
KGh0dHBfcHJveHksICJodHRwOi8vIikpCisgICAgeworICAgICAgICBwcm94eSA9IHNvdXBfdXJp
X25ldyAoaHR0cF9wcm94eSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgZ2NoYXIq
IGNvcnJlY3RfaHR0cF9wcm94eSA9IGdfc3RyY29uY2F0ICgiaHR0cDovLyIsIGh0dHBfcHJveHks
IE5VTEwpOworICAgICAgICBwcm94eSA9IHNvdXBfdXJpX25ldyAoY29ycmVjdF9odHRwX3Byb3h5
KTsKKyAgICB9CiB9CiAKIGludAogbWFpbiAoaW50IGFyZ2MsIGNoYXIqIGFyZ3ZbXSkKIHsKICAg
ICBndGtfaW5pdCAoJmFyZ2MsICZhcmd2KTsKKyAgICBpZiAocGFyc2VfYXJncygmYXJnYywgKGNo
YXIgKiopJmFyZ3YpIDwgMCkgcmV0dXJuIC0xOwogICAgIGlmICghZ190aHJlYWRfc3VwcG9ydGVk
ICgpKQogICAgICAgICBnX3RocmVhZF9pbml0IChOVUxMKTsKIApAQCAtMjEyLDEyICs0MzEsMTMg
QEAgbWFpbiAoaW50IGFyZ2MsIGNoYXIqIGFyZ3ZbXSkKIAogICAgIG1haW5fd2luZG93ID0gY3Jl
YXRlX3dpbmRvdyAoKTsKICAgICBndGtfY29udGFpbmVyX2FkZCAoR1RLX0NPTlRBSU5FUiAobWFp
bl93aW5kb3cpLCB2Ym94KTsKKyAgICAKKyAgICBTb3VwU2Vzc2lvbiogc3MgPSB3ZWJraXRfZ2V0
X2RlZmF1bHRfc2Vzc2lvbigpOwogCi0gICAgZ2NoYXIgKnVyaSA9IChnY2hhciopIChhcmdjID4g
MSA/IGFyZ3ZbMV0gOiAiaHR0cDovL3d3dy5nb29nbGUuY29tLyIpOwotICAgIGdjaGFyICpmaWxl
VVJMID0gZmlsZW5hbWVUb1VSTCh1cmkpOworICAgIGlmIChwcm94eSkKKyAgICAgICAgZ19vYmpl
Y3Rfc2V0IChzcywgInByb3h5LXVyaSIsIHByb3h5LCBOVUxMKTsKIAotICAgIHdlYmtpdF93ZWJf
dmlld19sb2FkX3VyaSh3ZWJfdmlldywgZmlsZVVSTCA/IGZpbGVVUkwgOiB1cmkpOwotICAgIGdf
ZnJlZShmaWxlVVJMKTsKKyAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF91cmkgKHdlYl92aWV3LCB1
cmkpOwogCiAgICAgZ3RrX3dpZGdldF9ncmFiX2ZvY3VzIChHVEtfV0lER0VUICh3ZWJfdmlldykp
OwogICAgIGd0a193aWRnZXRfc2hvd19hbGwgKG1haW5fd2luZG93KTsKZGlmZiAtLWdpdCBhL1dl
YktpdFRvb2xzL1NjcmlwdHMvYnVpbGQtanNjIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy9idWlsZC1q
c2MKaW5kZXggMDMxNjM0OS4uNTU3MTc5ZSAxMDA3NTUKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0
cy9idWlsZC1qc2MKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy9idWlsZC1qc2MKQEAgLTM3LDEy
ICszNywxNCBAQCB1c2UgUE9TSVg7CiAKIG15ICRjb3ZlcmFnZVN1cHBvcnQgPSAwOwogbXkgJHNo
b3dIZWxwID0gMDsKK215ICRtYWtlQXJnczsKIAogbXkgJHByb2dyYW1OYW1lID0gYmFzZW5hbWUo
JDApOwogbXkgJHVzYWdlID0gPDxFT0Y7CiBVc2FnZTogJHByb2dyYW1OYW1lIFtvcHRpb25zXSBb
b3B0aW9ucyB0byBwYXNzIHRvIGJ1aWxkIHN5c3RlbV0KICAgLS1oZWxwICAgICAgICAgICAgICAg
ICAgICAgICAgU2hvdyB0aGlzIGhlbHAgbWVzc2FnZQogICAtLVtuby1dY292ZXJhZ2UgICAgICAg
ICAgICAgICBUb2dnbGUgY29kZSBjb3ZlcmFnZSBzdXBwb3J0IChkZWZhdWx0OiAkY292ZXJhZ2VT
dXBwb3J0KQorICAtLWd0ayAgICAgICAgICAgICAgICAgICAgICAgICBCdWlsZCB0aGUgR1RLKyBw
b3J0CiBFT0YKIAogR2V0T3B0aW9ucygKQEAgLTU4LDggKzYwLDE3IEBAIGlmICgkc2hvd0hlbHAp
IHsKIGNoZWNrUmVxdWlyZWRTeXN0ZW1Db25maWcoKTsKIHNldENvbmZpZ3VyYXRpb24oKTsKIGNo
ZGlyV2ViS2l0KCk7Ci1teSBAb3B0aW9ucyA9IFhjb2RlT3B0aW9ucygpOwotbXkgQGNvdmVyYWdl
U3VwcG9ydE9wdGlvbnMgPSAoJGNvdmVyYWdlU3VwcG9ydCkgPyBYY29kZUNvdmVyYWdlU3VwcG9y
dE9wdGlvbnMoKSA6ICgpOworCitteSBAb3B0aW9ucyA9ICgpOworbXkgQGNvdmVyYWdlU3VwcG9y
dE9wdGlvbnMgPSAoKTsKKyMgZW5hYmxlIGF1dG90b29sIG9wdGlvbnMgYWNjb3JkaW5nbHkKK2lm
IChpc0d0aygpKSB7CisgICAgCisgICAgcHVzaCBAb3B0aW9ucywgIi0tbWFrZWFyZ3M9IiAuICRt
YWtlQXJncyBpZiBkZWZpbmVkKCRtYWtlQXJncyk7Cit9ZWxzZSB7CisgICAgcHVzaCBAb3B0aW9u
cywgWGNvZGVPcHRpb25zKCk7CisgICAgcHVzaCBAY292ZXJhZ2VTdXBwb3J0T3B0aW9ucyAsICgk
Y292ZXJhZ2VTdXBwb3J0KSA/IFhjb2RlQ292ZXJhZ2VTdXBwb3J0T3B0aW9ucygpIDogKCk7Cit9
CiAKIGNoZGlyICJKYXZhU2NyaXB0Q29yZSIgb3IgZGllICJDYW4ndCBmaW5kIEphdmFTY3JpcHRD
b3JlIGRpcmVjdG9yeSB0byBidWlsZCBmcm9tIjsKIG15ICRyZXN1bHQ7CkBAIC02Nyw4ICs3OCwx
MSBAQCBpZiAoaXNBcHBsZU1hY1dlYktpdCgpKSB7CiAgICAgJHJlc3VsdCA9IHN5c3RlbSAic2gi
LCAiLWMiLCAneGNvZGVidWlsZCAtcHJvamVjdCBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ogIiRA
IiB8IGdyZXAgLXYgc2V0ZW52ICYmIGV4aXQgJHtQSVBFU1RBVFVTWzBdfScsICJ4Y29kZWJ1aWxk
IiwgIEBvcHRpb25zLCBAQVJHViwgQGNvdmVyYWdlU3VwcG9ydE9wdGlvbnM7CiB9IGVsc2lmIChp
c0FwcGxlV2luV2ViS2l0KCkpIHsKICAgICAkcmVzdWx0ID0gYnVpbGRWaXN1YWxTdHVkaW9Qcm9q
ZWN0KCJKYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUuc2xuIik7Ci19IGVsc2lm
IChpc1F0KCkgb3IgaXNHdGsoKSBvciBpc1d4KCkpIHsKLSAgICAjIFF0IGFuZCBHdGsgYnVpbGQg
ZXZlcnl0aGluZyBpbiBvbmUtc2hvdC4gTm8gbmVlZCB0byBidWlsZCBhbnl0aGluZyBoZXJlLgor
fWVsc2lmIChpc0d0aygpKSB7CisgICAgICAgIHB1c2goQG9wdGlvbnMsIEBBUkdWKTsKKyAgICAg
ICAgJHJlc3VsdCA9IGJ1aWxkR3RrSlNDKCJKYXZhU2NyaXB0Q29yZSIsIDAsICBAb3B0aW9ucyk7
Cit9IGVsc2lmIChpc1F0KCkgb3IgaXNXeCgpKSB7CisgICAgIyBRdCAgYnVpbGQgZXZlcnl0aGlu
ZyBpbiBvbmUtc2hvdC4gTm8gbmVlZCB0byBidWlsZCBhbnl0aGluZyBoZXJlLgogICAgICRyZXN1
bHQgPSAwOwogfSBlbHNlIHsKICAgICBkaWUgIkJ1aWxkaW5nIG5vdCBkZWZpbmVkIGZvciB0aGlz
IHBsYXRmb3JtIVxuIjsKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvYnVpbGQtd2Vi
a2l0IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy9idWlsZC13ZWJraXQKaW5kZXggM2I4ZGQ5Yy4uYTdj
YTRjMyAxMDA3NTUKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy9idWlsZC13ZWJraXQKKysrIGIv
V2ViS2l0VG9vbHMvU2NyaXB0cy9idWlsZC13ZWJraXQKQEAgLTQyOSw2ICs0MjksNyBAQCBmb3Ig
bXkgJGRpciAoQHByb2plY3RzKSB7CiAgICAgfQogCiAgICAgaWYgKGlzR3RrKCkpIHsKKyAgICAg
ICAgcHVzaChAb3B0aW9ucywgQEFSR1YpOyAKICAgICAgICAgJHJlc3VsdCA9IGJ1aWxkR3RrUHJv
amVjdCgkZGlyLCAkY2xlYW4sICBAb3B0aW9ucyk7CiAgICAgfSBlbHNpZiAoaXNRdCgpKSB7CiAg
ICAgICAgICRyZXN1bHQgPSBidWlsZFFNYWtlUXRQcm9qZWN0KCRkaXIsICRjbGVhbiwgQG9wdGlv
bnMpOwpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRkaXJzLnBtIGIvV2Vi
S2l0VG9vbHMvU2NyaXB0cy93ZWJraXRkaXJzLnBtCmluZGV4IDAyOGQ2M2QuLjQ5ZWMwNGUgMTAw
NjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0ZGlycy5wbQorKysgYi9XZWJLaXRU
b29scy9TY3JpcHRzL3dlYmtpdGRpcnMucG0KQEAgLTE1MTAsNiArMTUxMCw5OCBAQCBzdWIgYnVp
bGRHdGtQcm9qZWN0KCQkQCkKICAgICByZXR1cm4gYnVpbGRBdXRvdG9vbHNQcm9qZWN0KCRjbGVh
biwgQGJ1aWxkQXJncyk7CiB9CiAKK3N1YiBidWlsZEd0a0pTQygkJEApCit7CisgICAgbXkgKCRw
cm9qZWN0LCAkY2xlYW4sIEBidWlsZEFyZ3MpID0gQF87CisKKyAgICByZXR1cm4gYnVpbGRKU0NQ
cm9qZWN0KCRjbGVhbiwgQGJ1aWxkQXJncyk7Cit9CisKK3N1YiBidWlsZEpTQ1Byb2plY3QoJEAp
Cit7CisgICAgbXkgKCRjbGVhbiwgQGJ1aWxkUGFyYW1zKSA9IEBfOworCisgICAgbXkgJG1ha2Ug
PSAnbWFrZSc7CisgICAgbXkgJGRpciA9IHByb2R1Y3REaXIoKTsKKyAgICBteSAkY29uZmlnID0g
cGFzc2VkQ29uZmlndXJhdGlvbigpIHx8IGNvbmZpZ3VyYXRpb24oKTsKKyAgICBteSAkcHJlZml4
ID0gJEVOVnsiV2ViS2l0SW5zdGFsbGF0aW9uUHJlZml4In07CisKKyAgICBteSBAYnVpbGRBcmdz
ID0gKCk7CisgICAgbXkgJG1ha2VBcmdzID0gJEVOVnsiV2ViS2l0TWFrZUFyZ3VtZW50cyJ9IHx8
ICIiOworICAgIAorICAgIGZvciBteSAkaSAoMCAuLiAkI2J1aWxkUGFyYW1zKSB7CisgICAgICAg
IG15ICRvcHQgPSAkYnVpbGRQYXJhbXNbJGldOworICAgICAgICBpZiAoJG9wdCA9fiAvXi0tbWFr
ZWFyZ3M9KC4qKS9pICkgeworICAgICAgICAgICAgJG1ha2VBcmdzID0gJG1ha2VBcmdzIC4gIiAi
IC4gJDE7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBwdXNoIEBidWlsZEFyZ3MsICRv
cHQ7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgcHVzaCBAYnVpbGRBcmdzLCAiLS1wcmVm
aXg9IiAuICRwcmVmaXggaWYgZGVmaW5lZCgkcHJlZml4KTsKKworICAgICMgY2hlY2sgaWYgY29u
ZmlndXJhdGlvbiBpcyBEZWJ1ZworICAgIGlmICgkY29uZmlnID1+IG0vZGVidWcvaSkgeworICAg
ICAgICBwdXNoIEBidWlsZEFyZ3MsICItLWVuYWJsZS1kZWJ1ZyI7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgcHVzaCBAYnVpbGRBcmdzLCAiLS1kaXNhYmxlLWRlYnVnIjsKKyAgICB9CisKKyAgICAj
IFVzZSBybSB0byBjbGVhbiB0aGUgYnVpbGQgZGlyZWN0b3J5IHNpbmNlIGRpc3RjbGVhbiBtYXkg
bWlzcyBmaWxlcworICAgIGlmICgkY2xlYW4gJiYgLWQgJGRpcikgeworICAgICAgICBzeXN0ZW0g
InJtIiwgIi1yZiIsICIkZGlyIjsKKyAgICB9CisKKyAgICBpZiAoISAtZCAkZGlyKSB7CisgICAg
ICAgIHN5c3RlbSAibWtkaXIiLCAiLXAiLCAiJGRpciI7CisgICAgICAgIGlmICghIC1kICRkaXIp
IHsKKyAgICAgICAgICAgIGRpZSAiRmFpbGVkIHRvIGNyZWF0ZSBidWlsZCBkaXJlY3RvcnkgIiAu
ICRkaXI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjaGRpciAkZGlyIG9yIGRpZSAiRmFpbGVk
IHRvIGNkIGludG8gIiAuICRkaXIgLiAiXG4iOworCisgICAgbXkgJHJlc3VsdDsKKyAgICBpZiAo
JGNsZWFuKSB7CisgICAgICAgICMkcmVzdWx0ID0gc3lzdGVtICRtYWtlLCAiZGlzdGNsZWFuIjsK
KyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgcHJpbnQgIkNhbGxpbmcgY29uZmlndXJl
IGluICIgLiAkZGlyIC4gIlxuXG4iOworICAgIHByaW50ICJJbnN0YWxsYXRpb24gZGlyZWN0b3J5
OiAkcHJlZml4XG4iIGlmKGRlZmluZWQoJHByZWZpeCkpOworCisgICAgIyBNYWtlIHRoZSBwYXRo
IHJlbGF0aXZlIHNpbmNlIGl0IHdpbGwgYXBwZWFyIGluIGFsbCAtSSBjb21waWxlciBmbGFncy4K
KyAgICAjIExvbmcgYXJndW1lbnQgbGlzdHMgY2F1c2UgYml6YXJyZSBzbG93ZG93bnMgaW4gbGli
dG9vbC4KKyAgICBteSAkcmVsU291cmNlRGlyID0gRmlsZTo6U3BlYy0+YWJzMnJlbCgkc291cmNl
RGlyKTsKKyAgICAkcmVsU291cmNlRGlyID0gIi4iIGlmICEkcmVsU291cmNlRGlyOworCisgICAg
JHJlc3VsdCA9IHN5c3RlbSAiJHJlbFNvdXJjZURpci9hdXRvZ2VuLnNoIiwgQGJ1aWxkQXJnczsK
KyAgICBpZiAoJHJlc3VsdCBuZSAwKSB7CisgICAgICAgIGRpZSAiRmFpbGVkIHRvIHNldHVwIGJ1
aWxkIGVudmlyb25tZW50IHVzaW5nICdhdXRvdG9vbHMnIVxuIjsKKyAgICB9CisgICAgbXkgJGph
dmFzY3JpcHRjb3JlX2RlcHMgPSAoKTsKKyAgICAkamF2YXNjcmlwdGNvcmVfZGVwcyA9IkRlcml2
ZWRTb3VyY2VzL0xleGVyLmx1dC5oIjsKKyAgICAkamF2YXNjcmlwdGNvcmVfZGVwcyA9ICRqYXZh
c2NyaXB0Y29yZV9kZXBzIC4gIiAiIC4gIkphdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90
b3R5cGUubHV0LmgiOworICAgICRqYXZhc2NyaXB0Y29yZV9kZXBzID0gJGphdmFzY3JpcHRjb3Jl
X2RlcHMgLiAiICIgLiAiSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlUHJvdG90eXBlLmx1dC5o
IjsKKyAgICAkamF2YXNjcmlwdGNvcmVfZGVwcyA9ICRqYXZhc2NyaXB0Y29yZV9kZXBzIC4gIiAi
IC4gIkphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPTk9iamVjdC5sdXQuaCI7CisgICAgJGphdmFz
Y3JpcHRjb3JlX2RlcHMgPSAkamF2YXNjcmlwdGNvcmVfZGVwcyAuICIgIiAuICJKYXZhU2NyaXB0
Q29yZS9ydW50aW1lL01hdGhPYmplY3QubHV0LmgiOworICAgICRqYXZhc2NyaXB0Y29yZV9kZXBz
ID0gJGphdmFzY3JpcHRjb3JlX2RlcHMgLiAiICIgLiAiSmF2YVNjcmlwdENvcmUvcnVudGltZS9O
dW1iZXJDb25zdHJ1Y3Rvci5sdXQuaCI7CisgICAgJGphdmFzY3JpcHRjb3JlX2RlcHMgPSAkamF2
YXNjcmlwdGNvcmVfZGVwcyAuICIgIiAuICJKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENv
bnN0cnVjdG9yLmx1dC5oIjsKKyAgICAkamF2YXNjcmlwdGNvcmVfZGVwcyA9ICRqYXZhc2NyaXB0
Y29yZV9kZXBzIC4gIiAiIC4gIkphdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0Lmx1
dC5oIjsKKyAgICAkamF2YXNjcmlwdGNvcmVfZGVwcyA9ICRqYXZhc2NyaXB0Y29yZV9kZXBzIC4g
IiAiIC4gIkphdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmx1dC5oIjsKKyAg
ICAkamF2YXNjcmlwdGNvcmVfZGVwcyA9ICRqYXZhc2NyaXB0Y29yZV9kZXBzIC4gIiAiIC4gIkph
dmFTY3JpcHRDb3JlL3BjcmUvY2hhcnRhYmxlcy5jIjsKKyAgICAkamF2YXNjcmlwdGNvcmVfZGVw
cyA9ICRqYXZhc2NyaXB0Y29yZV9kZXBzIC4gIiAiIC4gIkRlcml2ZWRTb3VyY2VzL0dyYW1tYXIu
Y3BwIjsKKyAgICAkamF2YXNjcmlwdGNvcmVfZGVwcyA9ICRqYXZhc2NyaXB0Y29yZV9kZXBzIC4g
IiAiIC4gIkRlcml2ZWRTb3VyY2VzL0dyYW1tYXIuaCI7CisKKyAgICAkcmVzdWx0ID0gc3lzdGVt
ICIkbWFrZSAkbWFrZUFyZ3MgJGphdmFzY3JpcHRjb3JlX2RlcHMgUHJvZ3JhbXMvanNjIjsKKyAg
ICBpZiAoJHJlc3VsdCBuZSAwKSB7CisgICAgICAgIGRpZSAiXG5GYWlsZWQgdG8gYnVpbGQgV2Vi
S2l0IHVzaW5nICckbWFrZSchXG4iOworICAgIH0KKworICAgIGNoZGlyICIuLiIgb3IgZGllOwor
ICAgIHJldHVybiAkcmVzdWx0OworfQorCiBzdWIgYnVpbGRDaHJvbWl1bU1ha2VmaWxlKCQkKQog
ewogICAgIG15ICgkdGFyZ2V0LCAkY2xlYW4pID0gQF87CmRpZmYgLS1naXQgYS9jb25maWd1cmUu
YWMgYi9jb25maWd1cmUuYWMKaW5kZXggMzY1ZGU3Mi4uNjExOGIzZiAxMDA2NDQKLS0tIGEvY29u
ZmlndXJlLmFjCisrKyBiL2NvbmZpZ3VyZS5hYwpAQCAtMTY3LDYgKzE2Nyw1MCBAQCBpZiB0ZXN0
ICIkcG5nX29rIiAhPSB5ZXM7IHRoZW4KIGZpCiBBQ19TVUJTVChbUE5HX0xJQlNdKQogCisjIGRl
dGVybWluZSB0aGUgVW5pY29kZSBiYWNrZW5kCitBQ19NU0dfQ0hFQ0tJTkcoW3RoZSBVbmljb2Rl
IGJhY2tlbmQgdG8gdXNlXSkKK0FDX0FSR19XSVRIKHVuaWNvZGVfYmFja2VuZCwKKyAgICAgICAg
ICAgIEFDX0hFTFBfU1RSSU5HKFstLXdpdGgtdW5pY29kZS1iYWNrZW5kPUA8OkBpY3VAOj5AXSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgIFtTZWxlY3QgVW5pY29kZSBiYWNrZW5kIFtkZWZh
dWx0PWljdV1dKSwKKyAgICAgICAgICAgIFtdLFt1bmljb2RlX2JhY2tlbmQ9ImljdSJdKQorCitj
YXNlICIkdW5pY29kZV9iYWNrZW5kIiBpbgorICAgICBpY3UpIDs7CisgICAgICopIEFDX01TR19F
UlJPUihbSW52YWxpZCBVbmljb2RlIGJhY2tlbmQ6IG11c3QgYmUgaWN1Ll0pIDs7Citlc2FjCisK
K0FDX01TR19SRVNVTFQoWyR1bmljb2RlX2JhY2tlbmRdKQorCitpZiB0ZXN0ICIkdW5pY29kZV9i
YWNrZW5kIiA9ICJpY3UiOyB0aGVuCisgICAgICAgaWYgdGVzdCAiJG9zX2RhcndpbiIgPSAieWVz
IjsgdGhlbgorICAgICAgICAgICAgICAgVU5JQ09ERV9DRkxBR1M9Ii1JXCQoc3JjZGlyKS9KYXZh
U2NyaXB0Q29yZS9pY3UgLUlcJChzcmNkaXIpL1dlYkNvcmUvaWN1IgorICAgICAgICAgICAgICAg
VU5JQ09ERV9MSUJTPSItbGljdWNvcmUiCisgICAgICAgZWxpZiB0ZXN0ICIkb3Nfd2luMzIiID0g
InllcyI7IHRoZW4KKyAgICAgICAgICAgICAgIFVOSUNPREVfQ0ZMQUdTPSIiCisgICAgICAgICAg
ICAgICBVTklDT0RFX0xJQlM9Ii1saWN1aW4gLWxpY3V1YyIKKyAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAjIEFDX1BBVEhfUFJPRyhpY3VfY29uZmlnLCBpY3UtY29uZmlnLCBubykKKyAgICAg
ICAgICAgICAgIGlmIHRlc3QgIiRob3N0IiA9ICJzaDQtdW5rbm93bi1saW51eC1nbnUiOyB0aGVu
CisgICAgICAgICAgICAgICAgICAgICAgIEFDX1BBVEhfUFJPRyhpY3VfY29uZmlnLCBzaDQtbGlu
dXgtaWN1LWNvbmZpZywgbm8pCisgICAgICAgICAgICAgICBlbGlmIHRlc3QgIiRob3N0IiA9ICJz
aDQtdW5rbm93bi1saW51eC11Y2xpYmMiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgIEFD
X1BBVEhfUFJPRyhpY3VfY29uZmlnLCBzaDQtbGludXgtdWNsaWJjLWljdS1jb25maWcsIG5vKQor
ICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICBBQ19QQVRIX1BST0co
aWN1X2NvbmZpZywgaWN1LWNvbmZpZywgbm8pCisgICAgICAgICAgICAgICBmaQorICAgICAgICAg
ICAgICAgaWYgdGVzdCAiJGljdV9jb25maWciID0gIm5vIjsgdGhlbgorICAgICAgICAgICAgICAg
ICAgICAgICBBQ19NU0dfRVJST1IoW0Nhbm5vdCBmaW5kIGljdS1jb25maWcuIFRoZSBJQ1UgbGli
cmFyeSBpcyBuZWVkZWQuXSkKKyAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAjIFdl
IGRvbid0IHVzZSAtLWNmbGFncyBhcyB0aGlzIGdpdmVzIHVzIGEgbG90IG9mIHRoaW5ncyB0aGF0
IHdlIGRvbid0CisgICAgICAgICAgICAgICAjIG5lY2Vzc2FyaWx5IHdhbnQsIGxpa2UgZGVidWdn
aW5nIGFuZCBvcHRpbWl6YXRpb24gZmxhZ3MKKyAgICAgICAgICAgICAgICMgU2VlIG1hbiAoMSkg
aWN1LWNvbmZpZyBmb3IgbW9yZSBpbmZvLgorICAgICAgICAgICAgICAgVU5JQ09ERV9DRkxBR1M9
YCRpY3VfY29uZmlnIC0tY3BwZmxhZ3NgCisgICAgICAgICAgICAgICBVTklDT0RFX0xJQlM9YCRp
Y3VfY29uZmlnIC0tbGRmbGFnc2AKKyAgICAgICBmaQorZmkKKworQUNfU1VCU1QoW1VOSUNPREVf
Q0ZMQUdTXSkKK0FDX1NVQlNUKFtVTklDT0RFX0xJQlNdKQorCiAjIGRldGVybWluZSB0aGUgR1RL
KyB2ZXJzaW9uIHRvIHVzZQogQUNfTVNHX0NIRUNLSU5HKFt0aGUgR1RLKyB2ZXJzaW9uIHRvIHVz
ZV0pCiBBQ19BUkdfV0lUSChbZ3RrXSwKQEAgLTIwNCw2ICsyNDgsNyBAQCBBQ19TVUJTVChbV0VC
S0lUR1RLX0FQSV9NSU5PUl9WRVJTSU9OXSkKIEFDX1NVQlNUKFtXRUJLSVRHVEtfQVBJX1ZFUlNJ
T05dKQogQUNfU1VCU1QoW1dFQktJVEdUS19QQ19OQU1FXSkKIEFDX1NVQlNUKFtHVEtfQVBJX1ZF
UlNJT05dKQorQUNfU1VCU1QoW1dJTkRPV0lOR10pCiBBTV9DT05ESVRJT05BTChbR1RLX0FQSV9W
RVJTSU9OXzJdLFt0ZXN0ICIkR1RLX0FQSV9WRVJTSU9OIiA9ICIyLjAiXSkKIAogIyBkZXRlcm1p
bmUgdGhlIEdESy9HVEsrIHRhcmdldApAQCAtMjgzLDExICszMjgsMTMgQEAgUEtHX0NIRUNLX01P
RFVMRVMoR0FJTCwgJEdBSUxfUENfTkFNRSA+PSAkR0FJTF9SRVFVSVJFRF9WRVJTSU9OKQogQUNf
U1VCU1QoR0FJTF9DRkxBR1MpCiBBQ19TVUJTVChHQUlMX0xJQlMpCiAKK1dJTkRPV0lORz0KICMg
Y2hlY2sgZm9yIHRhcmdldC1zcGVjaWZpYyBkZXBlbmRlbmNpZXMKIGlmIHRlc3QgIiR3aXRoX3Rh
cmdldCIgPSAiZGlyZWN0ZmIiOyB0aGVuCiAgICBQS0dfQ0hFQ0tfTU9EVUxFUyhDQUlSTywgY2Fp
cm8tZGlyZWN0ZmIgPj0gJENBSVJPX1JFUVVJUkVEX1ZFUlNJT04pCiAgICBQS0dfQ0hFQ0tfTU9E
VUxFUyhHVEssIGd0aystZGlyZWN0ZmItMi4wID49ICRHVEtfUkVRVUlSRURfVkVSU0lPTikKICAg
IEFDX0RFRklORShbV1RGX1BMQVRGT1JNX0RJUkVDVEZCXSxbMV0sW0RlZmluZSBpZiB0YXJnZXQg
aXMgRGlyZWN0RkJdKQorICAgV0lORE9XSU5HPSJkaXJlY3RmYi0iCiBlbHNlCiAgICBQS0dfQ0hF
Q0tfTU9EVUxFUyhDQUlSTywgY2Fpcm8gPj0gJENBSVJPX1JFUVVJUkVEX1ZFUlNJT04pCiAgICBQ
S0dfQ0hFQ0tfTU9EVUxFUyhHVEssIGd0aystJEdUS19BUElfVkVSU0lPTiA+PSAkR1RLX1JFUVVJ
UkVEX1ZFUlNJT04pCkBAIC03NDYsNiArNzkzLDEyIEBAIGNhc2UgIiR3aXRoX2ZvbnRfYmFja2Vu
ZCIgaW4KIGVzYWMKIEFDX01TR19SRVNVTFQoWyR3aXRoX2ZvbnRfYmFja2VuZF0pCiAKKworaWYg
dGVzdCAiJGhvc3RfY3B1IiA9ICJzaDQiOyB0aGVuCisgICBDWFhGTEFHUz0iJENYWEZMQUdTIC1t
aWVlZSAiCisgICBDRkxBR1M9IiRDRkxBR1MgLW1pZWVlICIKK2ZpCisKICMgQWRkICctZycgZmxh
ZyB0byBnY2MgaWYgaXQncyBkZWJ1ZyBidWlsZAogaWYgdGVzdCAiJGVuYWJsZV9kZWJ1ZyIgPSAi
eWVzIjsgdGhlbgogICAgQ1hYRkxBR1M9IiRDWFhGTEFHUyAtZyIK
</data>
<flag name="review"
          id="53613"
          type_id="1"
          status="-"
          setter="thouraya.andolsi"
    />
    <flag name="commit-queue"
          id="53614"
          type_id="3"
          status="-"
          setter="thouraya.andolsi"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>67675</attachid>
            <date>2010-09-15 07:59:37 -0700</date>
            <delta_ts>2010-09-29 01:43:44 -0700</delta_ts>
            <desc>SH4 JIT for YARR </desc>
            <filename>WebKit-sh4-assembler-patch.txt</filename>
            <type>text/plain</type>
            <size>97161</size>
            <attacher name="thouraya">thouraya.andolsi</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwppbmRleCBjN2MwOWIwLi5lMDA3MTc4IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAg
QEAKKzIwMTAtMDktMTUgIFRob3VyYXlhIEFORE9MU0kgIDx0aG91cmF5YS5hbmRvbHNpQHN0LmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQg
YXNzZW1ibGVyIGluc3RydWN0aW9ucyBmb3IgU0g0IHBsYXRmb3JtCisKKyAgICAgICAgKiBHTlVt
YWtlZmlsZS5hbToKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaDoKKyAgICAg
ICAgKiBqaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5oOgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxl
QWxsb2NhdG9yOjpjYWNoZUZsdXNoKToKKworICAgICAgICBZQVIgSklUIGZvciBTSDQuICAgICAg
ICAgCisgICAgICAgICogeWFyci9SZWdleEpJVC5jcHA6CisgICAgICAgIChKU0M6OllhcnI6OlJl
Z2V4R2VuZXJhdG9yOjpnZW5lcmF0ZVRlcm0pOgorICAgICAgICAoSlNDOjpZYXJyOjpSZWdleEdl
bmVyYXRvcjo6Z2VuZXJhdGVFbnRlcik6CisgICAgICAgIChKU0M6OllhcnI6OlJlZ2V4R2VuZXJh
dG9yOjpnZW5lcmF0ZVJldHVybik6CisKIDIwMTAtMDgtMDkgIE9saXZlciBIdW50ICA8b2xpdmVy
QGFwcGxlLmNvbT4KIAogICAgICAgICBGaXggUXQvQVJNIGFnYWluLCB0aGlzIHRpbWUgaW5jbHVk
aW5nIHRoZSBvdGhlciBjaGFuZ2VkIGZpbGUuCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9H
TlVtYWtlZmlsZS5hbSBiL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtCmluZGV4IDJlYWQ4
ZTAuLmZhMDBjOWYgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtCisr
KyBiL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtCkBAIC04NCw4ICs4NCwxMCBAQCBqYXZh
c2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIAlKYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9B
c3NlbWJsZXJYODZfNjQuaCBcCiAJSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1i
bGVyWDg2Q29tbW9uLmggXAogCUphdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxl
clg4Ni5oIFwKKyAgICAgICAgSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVy
U0g0LmggXAogCUphdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9SZXBhdGNoQnVmZmVyLmggXAogCUph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9YODZBc3NlbWJsZXIuaCBcCisgICAgICAgIEphdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9TSDRBc3NlbWJsZXIuaCBcCiAJSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZUJsb2NrLmNwcCBcCiAJSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgg
XAogCUphdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V2YWxDb2RlQ2FjaGUuaCBcCmRpZmYgLS1naXQg
YS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaCBiL0phdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5oCmluZGV4IGNlMWJlNzguLjJhZTY0NzMgMTAw
NjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5oCisrKyBi
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5oCkBAIC01MCw2ICs1MCwx
MCBAQCBuYW1lc3BhY2UgSlNDIHsgdHlwZWRlZiBNYWNyb0Fzc2VtYmxlclg4NiBNYWNyb0Fzc2Vt
YmxlckJhc2U7IH07CiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJYODZfNjQuaCIKIG5hbWVzcGFj
ZSBKU0MgeyB0eXBlZGVmIE1hY3JvQXNzZW1ibGVyWDg2XzY0IE1hY3JvQXNzZW1ibGVyQmFzZTsg
fTsKIAorI2VsaWYgQ1BVKFNINCkKKyNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlclNINC5oIgorbmFt
ZXNwYWNlIEpTQyB7IHR5cGVkZWYgTWFjcm9Bc3NlbWJsZXJTSDQgTWFjcm9Bc3NlbWJsZXJCYXNl
OyB9OworCiAjZWxzZQogI2Vycm9yICJUaGUgTWFjcm9Bc3NlbWJsZXIgaXMgbm90IHN1cHBvcnRl
ZCBvbiB0aGlzIHBsYXRmb3JtLiIKICNlbmRpZgpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyU0g0LmggYi9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
TWFjcm9Bc3NlbWJsZXJTSDQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5i
NTBlNTUzCi0tLSAvZGV2L251bGwKKysrIGIvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3Jv
QXNzZW1ibGVyU0g0LmgKQEAgLTAsMCArMSwxMTU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA5LTIwMTAgU1RNaWNyb2VsZWN0cm9uaWNzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogV3Jp
dHRlbiBieSBUaG91cmF5YSBBbmRvbHNpICh0aG91cmF5YS5hbmRvbHNpQHN0LmNvbSkuCisgKgor
ICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqLworCisKKyNpZm5kZWYgTWFjcm9B
c3NlbWJsZXJTSDRfaAorI2RlZmluZSBNYWNyb0Fzc2VtYmxlclNINF9oCisKKyNpbmNsdWRlICJh
c3NlcnQuaCIKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKyNpZiBFTkFCTEUoQVNTRU1CTEVS
KQorCisjaW5jbHVkZSAiQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oIgorI2luY2x1ZGUgIlNINEFz
c2VtYmxlci5oIgorCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBNYWNyb0Fzc2VtYmxlclNI
NCA6IHB1YmxpYyBBYnN0cmFjdE1hY3JvQXNzZW1ibGVyPFNINEFzc2VtYmxlcj4geworcHVibGlj
OgorCisgICAgdHlwZWRlZiBTSDRBc3NlbWJsZXI6OkNvbmRpdGlvbiBDb25kaXRpb247CisgICAg
dHlwZWRlZiBTSDRBc3NlbWJsZXI6OkZQUmVnaXN0ZXJJRCBGUFJlZ2lzdGVySUQ7CisgICAgc3Rh
dGljIGNvbnN0IENvbmRpdGlvbiBFcXVhbCA9IFNINEFzc2VtYmxlcjo6RVE7CisgICAgc3RhdGlj
IGNvbnN0IENvbmRpdGlvbiBOb3RFcXVhbCA9IFNINEFzc2VtYmxlcjo6TkU7CisgICAgc3RhdGlj
IGNvbnN0IENvbmRpdGlvbiBHcmVhdGVyVGhhbiA9IFNINEFzc2VtYmxlcjo6R1Q7CisgICAgc3Rh
dGljIGNvbnN0IENvbmRpdGlvbiBHcmVhdGVyVGhhbk9yRXF1YWwgPSBTSDRBc3NlbWJsZXI6OkdF
OworICAgIHN0YXRpYyBjb25zdCBDb25kaXRpb24gTGVzc1RoYW4gPSBTSDRBc3NlbWJsZXI6OkxU
OworICAgIHN0YXRpYyBjb25zdCBDb25kaXRpb24gTGVzc1RoYW5PckVxdWFsID0gU0g0QXNzZW1i
bGVyOjpMRTsKKyAgICBzdGF0aWMgY29uc3QgQ29uZGl0aW9uIFVHcmVhdGVyVGhhbiA9IFNINEFz
c2VtYmxlcjo6SEk7IC8vIHVuc2lnZW5kIGdyZWF0ZXIgdGhhbgorICAgIHN0YXRpYyBjb25zdCBD
b25kaXRpb24gVUdyZWF0ZXJUaGFuT3JFcXVhbCA9IFNINEFzc2VtYmxlcjo6SFM7IC8vIHVuc2ln
ZW5kIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCAgICAKKyAgICBzdGF0aWMgY29uc3QgQ29uZGl0aW9u
IFVMZXNzVGhhbiA9IFNINEFzc2VtYmxlcjo6TEk7IC8vIHVuc2lnZW5kIGdyZWF0ZXIgdGhhbgor
ICAgIHN0YXRpYyBjb25zdCBDb25kaXRpb24gVUxlc3NUaGFuT3JFcXVhbCA9IFNINEFzc2VtYmxl
cjo6TFM7IC8vIHVuc2lnZW5kIGdyZWF0ZXIgdGhhbiBvciBlcXVhbAorICAgIHN0YXRpYyBjb25z
dCBDb25kaXRpb24gWmVybyA9IFNINEFzc2VtYmxlcjo6RVE7CisgICAgc3RhdGljIGNvbnN0IENv
bmRpdGlvbiBOb25aZXJvID0gU0g0QXNzZW1ibGVyOjpORTsKKyAgICBzdGF0aWMgY29uc3QgQ29u
ZGl0aW9uIE92ZXJmbG93ID0gU0g0QXNzZW1ibGVyOjpPRjsKKyAgICBzdGF0aWMgY29uc3QgQ29u
ZGl0aW9uIEFib3ZlID0gU0g0QXNzZW1ibGVyOjpISTsKKyAgICBzdGF0aWMgY29uc3QgQ29uZGl0
aW9uIEFib3ZlT3JFcXVhbCA9IFNINEFzc2VtYmxlcjo6SFM7CisgICAgc3RhdGljIGNvbnN0IENv
bmRpdGlvbiBCZWxvdyA9IFNINEFzc2VtYmxlcjo6TEk7CisgICAgc3RhdGljIGNvbnN0IENvbmRp
dGlvbiBCZWxvd09yRXF1YWwgPSBTSDRBc3NlbWJsZXI6OkxTOworICAgIAorICAgIHN0YXRpYyBj
b25zdCBSZWdpc3RlcklEIHN0YWNrUG9pbnRlclJlZ2lzdGVyID0gU0g0OjpTUDsKKyAgICAKKyAg
ICBzdGF0aWMgY29uc3QgQ29uZGl0aW9uIERvdWJsZUVxdWFsID0gU0g0QXNzZW1ibGVyOjpFUTsK
KyAgICBzdGF0aWMgY29uc3QgQ29uZGl0aW9uIERvdWJsZUdyZWF0ZXJUaGFuID0gU0g0QXNzZW1i
bGVyOjpHVDsKKyAgICBzdGF0aWMgY29uc3QgQ29uZGl0aW9uIERvdWJsZUdyZWF0ZXJUaGFuT3JF
cXVhbCA9IFNINEFzc2VtYmxlcjo6R0U7CisgICAgc3RhdGljIGNvbnN0IENvbmRpdGlvbiBEb3Vi
bGVMZXNzVGhhbiA9IFNINEFzc2VtYmxlcjo6TFQ7CisgICAgc3RhdGljIGNvbnN0IENvbmRpdGlv
biBEb3VibGVMZXNzVGhhbk9yRXF1YWwgPSBTSDRBc3NlbWJsZXI6OkxFOworICAgIAorICAgIHN0
YXRpYyBjb25zdCBTY2FsZSBTY2FsZVB0ciA9IFRpbWVzRm91cjsgICAgCisgICAgCisgICAgUmVn
aXN0ZXJJRCBjbGFpbV9zY3JhdGNoKCkKKyAgICB7CisgICAgICAgICByZXR1cm4gbV9hc3NlbWJs
ZXIuY2xhaW1fc2NyYXRjaCgpOworICAgIH0KKyAgICAKKyAgICBSZWdpc3RlcklEIHJlbGVhc2Vf
c2NyYXRjaChSZWdpc3RlcklEIHJlZykKKyAgICB7CisgICAgICAgICBtX2Fzc2VtYmxlci5yZWxl
YXNlX3NjcmF0Y2gocmVnKTsKKyAgICB9CisgICAgCisKKyAgICAvLyBJbnRlZ2VyIGFyaXRobWV0
aWMgb3BlcmF0aW9ucworCisgICAgdm9pZCBhZGQzMihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJ
RCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuYWRkbF9ycihzcmMsIGRlc3QpOwor
ICAgIH0KKworICAgIHZvaWQgYWRkMzIoSW1tMzIgaW1tLCBSZWdpc3RlcklEIGRlc3QpCisgICAg
eworICAgICAgICBtX2Fzc2VtYmxlci5hZGRsX2lyKGltbS5tX3ZhbHVlLCBkZXN0KTsKKyAgICB9
CisgICAgCisgICAgdm9pZCBhZGQzMihJbW0zMiBpbW0sIFJlZ2lzdGVySUQgc3JjLCBSZWdpc3Rl
cklEIGRlc3QpCisgICAgeworICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltX3NjcmF0Y2go
KTsKKyAgICAgICAgCisgICAgICAgIGlmIChzcmMgIT0gZGVzdCkKKyAgICAgICAgICAgIG1fYXNz
ZW1ibGVyLm1vdmxfcnIoc3JjLCBkZXN0KTsKKyAgICAgICAgbV9hc3NlbWJsZXIuYWRkbF9pcihp
bW0ubV92YWx1ZSwgZGVzdCk7CisgICAgICAgIAorICAgICAgICByZWxlYXNlX3NjcmF0Y2goc2Ny
KTsKKworICAgIH0KKworICAgIHZvaWQgYWRkMzIoSW1tMzIgaW1tLCBBZGRyZXNzIGFkZHJlc3Mp
CisgICAgeworICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltX3NjcmF0Y2goKTsKKyAgICAg
ICAgbG9hZDMyKGFkZHJlc3MsIHNjcik7CisgICAgICAgIGFkZDMyKGltbSwgc2NyKTsgICAgICAg
IAorICAgICAgICBzdG9yZTMyKHNjciwgYWRkcmVzcyk7CisgICAgICAgIHJlbGVhc2Vfc2NyYXRj
aChzY3IpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGFkZDMyKEFkZHJlc3Mgc3JjLCBSZWdpc3Rl
cklEIGRlc3QpCisgICAgeworICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltX3NjcmF0Y2go
KTsKKyAgICAgICAgbG9hZDMyKHNyYywgc2NyKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuYWRkbF9y
cihzY3IsIGRlc3QpOworICAgICAgICByZWxlYXNlX3NjcmF0Y2goc2NyKTsKKyAgICB9CisgICAg
CisgICAgdm9pZCBhbmQzMihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsK
KyAgICAgICAgbV9hc3NlbWJsZXIuYW5kbF9ycihzcmMsIGRlc3QpOworICAgIH0KKworICAgIHZv
aWQgYW5kMzIoSW1tMzIgaW1tLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBpZiAo
KGltbS5tX3ZhbHVlIDw9IDI1NSkgJiYgKGltbS5tX3ZhbHVlID49IDApICYmIChkZXN0ID09IFNI
NDo6UjApKQorICAgICAgICAgICAgbV9hc3NlbWJsZXIuYW5kbF9pOHIoaW1tLm1fdmFsdWUsIGRl
c3QpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1f
c2NyYXRjaCgpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuTG9hZENvbnN0YW50KChpbnQpKGlt
bS5tX3ZhbHVlKSwgc2NyKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFuZGxfcnIoc2NyLCBk
ZXN0KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgcmVsZWFzZV9zY3JhdGNoKHNjcik7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIGxzaGlmdDMyKFJlZ2lzdGVySUQgc2hpZnRhbW91
bnQsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnNobGxfcnIo
ZGVzdCwgc2hpZnRhbW91bnQpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHJzaGlmdDMyKGludCBp
bW0sIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xh
aW1fc2NyYXRjaCgpOworICAgICAgICBtX2Fzc2VtYmxlci5Mb2FkQ29uc3RhbnQoLWltbSwgc2Ny
KTsKKyAgICAgICAgbV9hc3NlbWJsZXIuc2hhX3JyKGRlc3QsIHNjcik7CisgICAgICAgIHJlbGVh
c2Vfc2NyYXRjaChzY3IpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHJhc2hpZnQzMihpbnQgaW1t
LCBSZWdpc3RlcklEIGRlc3QpIC8vIGFyaXRtZXRoaXF1ZSBzaGlmdAorICAgIHsKKyAgICAgICAg
UmVnaXN0ZXJJRCBzY3IgPSBjbGFpbV9zY3JhdGNoKCk7CisgICAgICAgIG1fYXNzZW1ibGVyLkxv
YWRDb25zdGFudCgtaW1tLCBzY3IpOworICAgICAgICBtX2Fzc2VtYmxlci5zaGFfcnIoZGVzdCwg
c2NyKTsKKyAgICAgICAgcmVsZWFzZV9zY3JhdGNoKHNjcik7CisgICAgfQorICAgIAorICAgIHZv
aWQgbHNoaWZ0MzIoaW50IGltbSwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgaWYg
KCggaW1tID09IDEpIHx8ICggaW1tID09IDIpIHx8ICggaW1tID09IDgpIHx8ICggaW1tID09IDE2
KSkKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnNobGxfaThyKGltbSwgZGVzdCk7CisgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbV9zY3JhdGNoKCk7Cisg
ICAgICAgICAgICBtX2Fzc2VtYmxlci5Mb2FkQ29uc3RhbnQoaW1tLCBzY3IpOworICAgICAgICAg
ICAgbV9hc3NlbWJsZXIuc2hsbF9ycihkZXN0LCBzY3IpOworICAgICAgICAgICAgcmVsZWFzZV9z
Y3JhdGNoKHNjcik7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCBtdWwzMihSZWdp
c3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIu
aW11bGxfcnIoc3JjLCBkZXN0KTsKKyAgICAgICAgbV9hc3NlbWJsZXIuc3RzbWFjbChkZXN0KTsK
KyAgICB9CisgICAgCisgICAgCisgICAgdm9pZCBtdWwzMihJbW0zMiBpbW0sIFJlZ2lzdGVySUQg
c3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNs
YWltX3NjcmF0Y2goKTsKKyAgICAgICAgbW92ZShpbW0sIHNjcik7CisgICAgICAgIGlmICAoc3Jj
ICE9IGRlc3QpCisgICAgICAgICAgICBtb3ZlKHNyYywgZGVzdCk7CisgICAgICAgIG11bDMyKHNj
ciwgIGRlc3QpOworICAgICAgICByZWxlYXNlX3NjcmF0Y2goc2NyKTsKKyAgICB9CisgICAKKyAg
ICB2b2lkIG5vdDMyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAg
ICAgICBtX2Fzc2VtYmxlci5ub3RsX3Ioc3JjLCBkZXN0KTsKKyAgICB9CisgICAgCisgICAgdm9p
ZCBvcjMyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBt
X2Fzc2VtYmxlci5vcmxfcnIoc3JjLCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIG9yMzIoSW1t
MzIgaW1tLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5vcmxf
aXIoaW1tLm1fdmFsdWUsIGRlc3QpOworICAgIH0KKworICAgIHZvaWQgcnNoaWZ0MzIoUmVnaXN0
ZXJJRCBzaGlmdGFtb3VudCwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3Nl
bWJsZXIuc2hhcl9ycihkZXN0LCBzaGlmdGFtb3VudCk7CisgICAgfQorCisgICAgdm9pZCByc2hp
ZnQzMihJbW0zMiBpbW0sIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIHJzaGlmdDMy
KGltbS5tX3ZhbHVlICYgMHgxZiwgZGVzdCk7CisgICAgfQorCisKKyAgICB2b2lkIHN1YjMyKFJl
Z2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxl
ci5zdWJsX3JyKHNyYywgZGVzdCk7CisgICAgfQorICAgIAorICAgIHZvaWQgc3ViMzIoSW1tMzIg
aW1tLCBBYnNvbHV0ZUFkZHJlc3MgYWRkcmVzcywgUmVnaXN0ZXJJRCBzY3JhdGNoUmVnKQorICAg
IHsKKyAgICAgICAgUmVnaXN0ZXJJRCByZXN1bHQgPSBjbGFpbV9zY3JhdGNoKCk7CisgICAgICAg
CisgICAgICAgIG1fYXNzZW1ibGVyLkxvYWRDb25zdGFudCgoaW50KWFkZHJlc3MubV9wdHIsIHNj
cmF0Y2hSZWcpOworICAgICAgICBtX2Fzc2VtYmxlci5tb3ZsX21yKHNjcmF0Y2hSZWcsIHJlc3Vs
dCk7ICAgICAgICAKKworICAgICAgICBzdWIzMihpbW0sIHJlc3VsdCk7IAorCisgICAgICAgIHN0
b3JlMzIocmVzdWx0LCBzY3JhdGNoUmVnKTsKKyAgICAgICAgCisgICAgICAgIHJlbGVhc2Vfc2Ny
YXRjaChyZXN1bHQpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGFkZDMyKEltbTMyIGltbSwgQWJz
b2x1dGVBZGRyZXNzIGFkZHJlc3MsIFJlZ2lzdGVySUQgc2NyYXRjaFJlZykKKyAgICB7CisgICAg
ICAgIFJlZ2lzdGVySUQgcmVzdWx0ID0gY2xhaW1fc2NyYXRjaCgpOworICAgICAgIAorICAgICAg
ICBtX2Fzc2VtYmxlci5Mb2FkQ29uc3RhbnQoKGludClhZGRyZXNzLm1fcHRyLCBzY3JhdGNoUmVn
KTsKKyAgICAgICAgbV9hc3NlbWJsZXIubW92bF9tcihzY3JhdGNoUmVnLCByZXN1bHQpOyAgICAg
ICAgCisKKyAgICAgICAgYWRkMzIoaW1tLCByZXN1bHQpOyAKKworICAgICAgICBzdG9yZTMyKHJl
c3VsdCwgc2NyYXRjaFJlZyk7CisgICAgICAgIAorICAgICAgICByZWxlYXNlX3NjcmF0Y2gocmVz
dWx0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzdWIzMihJbW0zMiBpbW0sIFJlZ2lzdGVySUQg
ZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnN1YmxfaW1tcihpbW0ubV92YWx1ZSwg
ZGVzdCk7CisgICAgfQorICAgIAorICAgIHZvaWQgc3ViMzIoQWRkcmVzcyBzcmMsIFJlZ2lzdGVy
SUQgZGVzdCkKKyAgICB7CisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1fc2NyYXRjaCgp
OworICAgICAgICBsb2FkMzIoc3JjLCBzY3IpOworICAgICAgICBtX2Fzc2VtYmxlci5zdWJsX3Jy
KHNjciwgZGVzdCk7CisgICAgICAgIHJlbGVhc2Vfc2NyYXRjaChzY3IpOworICAgIH0KKworICAg
IAorICAgIHZvaWQgeG9yMzIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7
CisgICAgICAgIG1fYXNzZW1ibGVyLnhvcmxfcnIoc3JjLCBkZXN0KTsKKyAgICB9CisgICAgCisg
ICAgdm9pZCB4b3IzMihJbW0zMiBpbW0sIFJlZ2lzdGVySUQgc3JjRGVzdCkKKyAgICB7CisgICAg
ICBpZiAoKHNyY0Rlc3QgIT0gU0g0OjpSMCkgfHwgKGltbS5tX3ZhbHVlID4gMjU1KSB8fCAoaW1t
Lm1fdmFsdWUgPCAwKSkgeworICAgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1fc2NyYXRj
aCgpOworICAgICAgICAgIG1fYXNzZW1ibGVyLkxvYWRDb25zdGFudCgoaW50KShpbW0ubV92YWx1
ZSksIHNjcik7CisgICAgICAgICAgbV9hc3NlbWJsZXIueG9ybF9ycihzY3IsIHNyY0Rlc3QpOwor
ICAgICAgICAgIHJlbGVhc2Vfc2NyYXRjaChzY3IpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICBtX2Fzc2VtYmxlci54b3JsX2k4cihpbW0ubV92YWx1ZSwgc3JjRGVzdCk7CisgICAgICB9Cisg
ICAgfQorCisKKyAgICAvLyBNZW1vcnkgYWNjZXNzIG9wZXJhdGlvbgorICAgIAorICAgIHZvaWQg
bG9hZDMyKEltcGxpY2l0QWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3QpCisgICAgewor
ICAgICAgICBsb2FkMzIoYWRkcmVzcy5iYXNlLCBhZGRyZXNzLm9mZnNldCwgZGVzdCk7CisgICAg
fQorICAgIAorICAgIHZvaWQgbG9hZDgoSW1wbGljaXRBZGRyZXNzIGFkZHJlc3MsIFJlZ2lzdGVy
SUQgZGVzdCkKKyAgICB7CisgICAgICAgIGxvYWQ4KGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5vZmZz
ZXQsIGRlc3QpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGxvYWQzMihCYXNlSW5kZXggYWRkcmVz
cywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFp
bV9zY3JhdGNoKCk7CisgICAgICAgIG1vdmUoYWRkcmVzcy5pbmRleCwgc2NyKTsKKyAgICAgICAg
CisgICAgICAgIGxzaGlmdDMyKGFkZHJlc3Muc2NhbGUsIHNjcik7CisgICAgICAgIGFkZDMyKGFk
ZHJlc3MuYmFzZSwgc2NyKTsKKyAgICAgICAgbG9hZDMyKHNjciwgYWRkcmVzcy5vZmZzZXQsIGRl
c3QpOworICAgICAgICByZWxlYXNlX3NjcmF0Y2goc2NyKTsKKyAgICB9CisgICAgCisgICAgdm9p
ZCBsb2FkMzIodm9pZCogYWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAg
bV9hc3NlbWJsZXIuTG9hZENvbnN0YW50KChpbnQpKGFkZHJlc3MpLCBkZXN0KTsKKyAgICAgICAg
bV9hc3NlbWJsZXIubW92bF9tcihkZXN0LCBkZXN0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBs
b2FkMzIoUmVnaXN0ZXJJRCBiYXNlLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGRlc3QpCisgICAg
eworICAgICAgICBpZiAoKG9mZnNldCA8IDApIHx8IChvZmZzZXQgPj0gNjQpKSB7CisgICAgICAg
ICAgICBpZiAoKGRlc3QgPT0gU0g0OjpSMCkgJiYgKGRlc3QgIT0gYmFzZSkpIHsKKyAgICAgICAg
ICAgICAgICBtX2Fzc2VtYmxlci5Mb2FkQ29uc3RhbnQoKGludCkob2Zmc2V0KSwgZGVzdCk7Cisg
ICAgICAgICAgICAgICAgbV9hc3NlbWJsZXIubW92bF9yMG1yKGJhc2UsIGRlc3QpOyAgICAKKyAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgUmVnaXN0ZXJJRCBzY3I7CisgICAg
ICAgICAgICAgICAgaWYgKGRlc3QgPT0gYmFzZSkKKyAgICAgICAgICAgICAgICAgICAgc2NyID0g
Y2xhaW1fc2NyYXRjaCgpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAg
ICAgc2NyID0gZGVzdDsKKworICAgICAgICAgICAgICAgIG1fYXNzZW1ibGVyLkxvYWRDb25zdGFu
dCgoaW50KShvZmZzZXQpLCBzY3IpOworICAgICAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZGxf
cnIoYmFzZSwgc2NyKTsKKyAgICAgICAgICAgICAgICBtX2Fzc2VtYmxlci5tb3ZsX21yKHNjciwg
ZGVzdCk7CisKKyAgICAgICAgICAgICAgICBpZiAoZGVzdCA9PSBiYXNlKQorICAgICAgICAgICAg
ICAgICAgICByZWxlYXNlX3NjcmF0Y2goc2NyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBl
bHNlIGlmIChvZmZzZXQpIHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLm1vdmxfbXIob2Zmc2V0
ID4+IDIsIGJhc2UsIGRlc3QpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbV9hc3Nl
bWJsZXIubW92bF9tcihiYXNlLCBkZXN0KTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB2
b2lkIGxvYWQ4KFJlZ2lzdGVySUQgYmFzZSwgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBkZXN0KQor
ICAgIHsKKyAgICAgICAgaWYgKChvZmZzZXQgPiAwKSAmJiAob2Zmc2V0IDwgNjQpICYmIChkZXN0
ID09IFNINDo6UjApKQorICAgICAgICAgICAgbV9hc3NlbWJsZXIubW92Yl9tcihvZmZzZXQsIGJh
c2UsIGRlc3QpOworCisgICAgICAgIGVsc2UgaWYgKGJhc2UgIT0gZGVzdCkgeworICAgICAgICAg
ICAgbV9hc3NlbWJsZXIuTG9hZENvbnN0YW50KChpbnQpKG9mZnNldCksIGRlc3QpOworICAgICAg
ICAgICAgbV9hc3NlbWJsZXIuYWRkbF9ycihiYXNlLCBkZXN0KTsKKyAgICAgICAgICAgIG1fYXNz
ZW1ibGVyLm1vdmJfbXIoZGVzdCwgZGVzdCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBSZWdpc3RlcklEIHNjciA9IGNsYWltX3NjcmF0Y2goKTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgbV9hc3NlbWJsZXIuTG9hZENvbnN0YW50KChpbnQpKG9mZnNldCksIHNjcik7CisgICAg
ICAgICAgICBtX2Fzc2VtYmxlci5hZGRsX3JyKGJhc2UsIHNjcik7CisgICAgICAgICAgICBtX2Fz
c2VtYmxlci5tb3ZiX21yKHNjciwgZGVzdCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHJl
bGVhc2Vfc2NyYXRjaChzY3IpOworICAgICAgICB9CisgICAKKyAgICB9CisgICAgCisgICAgdm9p
ZCBsb2FkMzIoUmVnaXN0ZXJJRCByMCwgUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQor
ICAgIHsKKyAgICAgICAgQVNTRVJUKHIwID09IFNINDo6UjApOworICAgICAgICBtX2Fzc2VtYmxl
ci5tb3ZsX3IwbXIoc3JjLCBkc3QpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGxvYWQzMihSZWdp
c3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5t
b3ZsX21yKHNyYywgZHN0KTsKKyAgICB9CisgICAKKyAgICB2b2lkIGxvYWQxNihJbXBsaWNpdEFk
ZHJlc3MgYWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgYXNzZXJ0KDAp
OworICAgIH0KKyAKKyAgICB2b2lkIGxvYWQxNihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBk
ZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubW92d19tcihzcmMsIGRlc3QpOworICAg
IH0KKyAgICAKKyAgICB2b2lkIGxvYWQxNihSZWdpc3RlcklEIHIwLCBSZWdpc3RlcklEIHNyYywg
UmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKHIwID09IFNINDo6UjApOwor
ICAgICAgICBtX2Fzc2VtYmxlci5tb3Z3X3IwbXIoc3JjLCBkZXN0KTsKKyAgICB9CisgICAgCisg
ICAgdm9pZCBsb2FkMTYoQmFzZUluZGV4IGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7
CisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1fc2NyYXRjaCgpOworICAgICAgICBtb3Zl
KGFkZHJlc3MuaW5kZXgsIHNjcik7CisgICAgICAgIGxzaGlmdDMyKGFkZHJlc3Muc2NhbGUsIHNj
cik7CisgICAgICAgIG1fYXNzZW1ibGVyLmFkZGxfaXIoYWRkcmVzcy5vZmZzZXQsIHNjcik7Cisg
ICAgICAgIGlmIChzY3IgPT0gU0g0OjpSMCkKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLm1vdndf
cjBtcihhZGRyZXNzLmJhc2UsIHNjcik7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgYWRk
MzIoYWRkcmVzcy5iYXNlLCBzY3IpOworICAgICAgICAgICAgbG9hZDE2KHNjciwgc2NyKTsKKyAg
ICAgICAgfQorICAgICAgICBleHR1dyhzY3IsIGRlc3QpOworICAgICAgICByZWxlYXNlX3NjcmF0
Y2goc2NyKTsKKyAgICB9CisKKyAgICB2b2lkIHN0b3JlMzIoUmVnaXN0ZXJJRCBzcmMsIEltcGxp
Y2l0QWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFp
bV9zY3JhdGNoKCk7CisgICAgICAgIHN0b3JlMzIoc3JjLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVz
cy5iYXNlLCBzY3IpOworICAgICAgICByZWxlYXNlX3NjcmF0Y2goc2NyKTsKKyAgICB9ICAgIAor
ICAgIAorICAgIAorICAgIHZvaWQgc3RvcmUzMihSZWdpc3RlcklEIHNyYywgaW50IG9mZnNldCwg
UmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIHNjcikKKyAgICB7ICAKKyAgICAgICAgaWYgKChv
ZmZzZXQgPCAwKSB8fCAob2Zmc2V0ID49IDY0KSkgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIu
TG9hZENvbnN0YW50KChpbnQpKG9mZnNldCksIHNjcik7CisgICAgICAgICAgICBpZiAoc2NyID09
IFNINDo6UjApCisgICAgICAgICAgICAgICAgbV9hc3NlbWJsZXIubW92bF9ybXIwKHNyYywgYmFz
ZSk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGRs
X3JyKGJhc2UsIHNjcik7CisgICAgICAgICAgICAgICAgbV9hc3NlbWJsZXIubW92bF9ybShzcmMs
IHNjcik7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAob2Zmc2V0KSB7CisgICAg
ICAgICAgICBtX2Fzc2VtYmxlci5tb3ZsX3JtKHNyYywgb2Zmc2V0ID4+IDIsIGJhc2UpOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIubW92bF9ybShzcmMsIGJhc2Up
OworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHZvaWQgc3RvcmUzMihSZWdpc3RlcklEIHNy
YywgUmVnaXN0ZXJJRCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkKKyAgICB7CisgICAgICAgIEFT
U0VSVChvZmZzZXQgPT0gU0g0OjpSMCk7CisgICAgICAgIG1fYXNzZW1ibGVyLm1vdmxfcm1yMChz
cmMsIGJhc2UpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHN0b3JlMzIoUmVnaXN0ZXJJRCBzcmMs
IFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubW92bF9ybShzcmMs
IGRzdCk7CisgICAgfQorCisKKyAgICB2b2lkIHN0b3JlMzIoSW1tMzIgaW1tLCBJbXBsaWNpdEFk
ZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1fc2Ny
YXRjaCgpOworICAgICAgICBSZWdpc3RlcklEIHNjcjEgPSBjbGFpbV9zY3JhdGNoKCk7CisgICAg
ICAgIG1fYXNzZW1ibGVyLkxvYWRDb25zdGFudCgoaW50KShpbW0ubV92YWx1ZSksIHNjcik7CisK
KyAgICAgICAgc3RvcmUzMihzY3IsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UsIHNjcjEp
OworICAgICAgICByZWxlYXNlX3NjcmF0Y2goc2NyKTsKKyAgICAgICAgcmVsZWFzZV9zY3JhdGNo
KHNjcjEpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHN0b3JlMzIoUmVnaXN0ZXJJRCBzcmMsIEJh
c2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbV9z
Y3JhdGNoKCk7CisgICAgICAgIG1vdmUoYWRkcmVzcy5pbmRleCwgc2NyKTsKKyAgICAgICAgCisg
ICAgICAgIGxzaGlmdDMyKGFkZHJlc3Muc2NhbGUsIHNjcik7CisgICAgICAgIGFkZDMyKGFkZHJl
c3MuYmFzZSwgc2NyKTsKKyAgICAgICAgc3RvcmUzMihzcmMsIEFkZHJlc3Moc2NyLCBhZGRyZXNz
Lm9mZnNldCkpOworICAgICAgICByZWxlYXNlX3NjcmF0Y2goc2NyKTsKKyAgICB9CisgICAgCisg
ICAgdm9pZCBzdG9yZTMyKEltbTMyIGltbSwgdm9pZCogYWRkcmVzcykKKyAgICB7CisgICAgICAg
IEFTU0VSVCgwKTsKKyAgICB9CisgICAgdm9pZCBzdG9yZTMyKFJlZ2lzdGVySUQgc3JjLCB2b2lk
KiBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgQVNTRVJUKDApOworICAgIH0KKworICAgIAorICAg
IERhdGFMYWJlbDMyIGxvYWQzMldpdGhBZGRyZXNzT2Zmc2V0UGF0Y2goQWRkcmVzcyBhZGRyZXNz
LCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWlt
X3NjcmF0Y2goKTsKKyAgICAgICAgCisgICAgICAgIERhdGFMYWJlbDMyIGxhYmVsKHRoaXMpOwor
ICAgICAgICBtb3ZlV2l0aFBhdGNoKEltbTMyKGFkZHJlc3Mub2Zmc2V0KSwgc2NyKTsgICAgICAg
IAorICAgICAgICAKKyAgICAgICAgbV9hc3NlbWJsZXIuYWRkbF9ycihhZGRyZXNzLmJhc2UsIHNj
cik7CisgICAgICAgIG1fYXNzZW1ibGVyLm1vdmxfbXIoc2NyLCBkZXN0KTsKKyAgICAgICAgcmVs
ZWFzZV9zY3JhdGNoKHNjcik7CisgICAgICAgIHJldHVybiBsYWJlbDsKKyAgICB9CisgICAgCisg
ICAgRGF0YUxhYmVsMzIgc3RvcmUzMldpdGhBZGRyZXNzT2Zmc2V0UGF0Y2goUmVnaXN0ZXJJRCBz
cmMsIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xh
aW1fc2NyYXRjaCgpOworICAgICAgICAKKyAgICAgICAgRGF0YUxhYmVsMzIgbGFiZWwodGhpcyk7
CisgICAgICAgIG1vdmVXaXRoUGF0Y2goSW1tMzIoYWRkcmVzcy5vZmZzZXQpLCBzY3IpOyAgICAg
ICAgCisKKyAgICAgICAgbV9hc3NlbWJsZXIuYWRkbF9ycihhZGRyZXNzLmJhc2UsIHNjcik7Cisg
ICAgICAgIG1fYXNzZW1ibGVyLm1vdmxfcm0oc3JjLCBzY3IpOworICAgICAgICAKKyAgICAgICAg
cmVsZWFzZV9zY3JhdGNoKHNjcik7CisgICAgICAgIHJldHVybiBsYWJlbDsKKyAgICB9CisgICAg
CisgICAgTGFiZWwgbG9hZFB0cldpdGhQYXRjaFRvTEVBKEFkZHJlc3MgYWRkcmVzcywgUmVnaXN0
ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbV9zY3JhdGNo
KCk7CisgICAgICAgIAorICAgICAgICBMYWJlbCBsYWJlbCh0aGlzKTsKKyAgICAgICAgbW92ZVdp
dGhQYXRjaChJbW0zMihhZGRyZXNzLm9mZnNldCksIHNjcik7CisgICAgICAgIAorICAgICAgICBt
X2Fzc2VtYmxlci5hZGRsX3JyKGFkZHJlc3MuYmFzZSwgc2NyKTsKKyAgICAgICAgbV9hc3NlbWJs
ZXIubW92bF9tcihzY3IsIGRlc3QpOworICAgICAgICByZWxlYXNlX3NjcmF0Y2goc2NyKTsKKyAg
ICAgICAgcmV0dXJuIGxhYmVsOworICAgIH0KKyAgICAKKyAgICAgLy8gRmxvYXRpbmctcG9pbnQg
b3BlcmF0aW9ucworCisgICAgYm9vbCBzdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSBjb25zdCB7IHJl
dHVybiB0cnVlOyB9ICAgIAorICAgIGJvb2wgc3VwcG9ydHNGbG9hdGluZ1BvaW50VHJ1bmNhdGUo
KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIAorICAgIHZvaWQgbG9hZERvdWJsZShJbXBs
aWNpdEFkZHJlc3MgYWRkcmVzcywgRlBSZWdpc3RlcklEIGRlc3QsIFJlZ2lzdGVySUQgc2NyKQor
ICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuZG91YmxlbG9hZChhZGRyZXNzLmJhc2UsIGFkZHJl
c3Mub2Zmc2V0LCBkZXN0LCBzY3IpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGxvYWREb3VibGUo
UmVnaXN0ZXJJRCBzcmMsIEZQUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3Nl
bWJsZXIuZm1vdl9yZWFkX3JtKHNyYywgZGVzdCk7CisgICAgfQorCisgICAgdm9pZCBzdG9yZURv
dWJsZShGUFJlZ2lzdGVySUQgc3JjLCBJbXBsaWNpdEFkZHJlc3MgYWRkcmVzcywgUmVnaXN0ZXJJ
RCBzY3IpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5kb3VibGVzdG9yZShzcmMsIGFkZHJl
c3MuYmFzZSwgYWRkcmVzcy5vZmZzZXQsIHNjcik7CisgICAgfQorICAgIAorICAgIHZvaWQgc3Rv
cmVEb3VibGUoRlBSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAg
ICBtX2Fzc2VtYmxlci5mbW92X3dyaXRlX3JtKHNyYywgZHN0KTsKKyAgICB9CisKKyAgICB2b2lk
IGFkZERvdWJsZShGUFJlZ2lzdGVySUQgc3JjLCBGUFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7Cisg
ICAgICAgIG1fYXNzZW1ibGVyLmRhZGRfcnIoc3JjLCBkZXN0KTsKKyAgICB9CisgICAgCisgICAg
dm9pZCBhZGREb3VibGUoQWRkcmVzcyBzcmMsIEZQUmVnaXN0ZXJJRCBkZXN0LCBSZWdpc3RlcklE
IHNjciwgRlBSZWdpc3RlcklEIHNjcmYpCisgICAgeworICAgICAgICBsb2FkRG91YmxlKHNyYywg
c2NyZiwgc2NyKTsKKyAgICAgICAgYWRkRG91YmxlKHNjcmYsIGRlc3QpOworICAgIH0KKyAgICAK
KyAgICB2b2lkIHN1YkRvdWJsZShGUFJlZ2lzdGVySUQgc3JjLCBGUFJlZ2lzdGVySUQgZGVzdCkK
KyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmRzdWJfcnIoc3JjLCBkZXN0KTsKKyAgICB9Cisg
ICAgCisgICAgdm9pZCBtdWxEb3VibGUoRlBSZWdpc3RlcklEIHNyYywgRlBSZWdpc3RlcklEIGRl
c3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5kbXVsX3JyKHNyYywgZGVzdCk7CisgICAg
fQorICAgIAorICAgIHZvaWQgZGl2RG91YmxlKEZQUmVnaXN0ZXJJRCBzcmMsIEZQUmVnaXN0ZXJJ
RCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuZGRpdl9ycihzcmMsIGRlc3QpOwor
ICAgIH0KKworICAgIHZvaWQgY29udmVydEludDMyVG9Eb3VibGUoUmVnaXN0ZXJJRCBzcmMsIEZQ
UmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubGRzcm1fZnB1bChz
cmMpOworICAgICAgICBtX2Fzc2VtYmxlci5mbG9hdF9mcHVsX2RybihkZXN0KTsKKyAgICB9CisK
KyAgICBKdW1wIGJyYW5jaFRlc3Q4KENvbmRpdGlvbiBjb25kLCBBZGRyZXNzIGFkZHJlc3MsIElt
bTMyIG1hc2sgPSBJbW0zMigtMSkpCisgICAgeworICAgICAgICBSZWdpc3RlcklEIGFkZHJlc3NU
ZW1wUmVnaXN0ZXIgPSBjbGFpbV9zY3JhdGNoKCk7CisgICAgICAgIGxvYWQ4KGFkZHJlc3MsIGFk
ZHJlc3NUZW1wUmVnaXN0ZXIpOworICAgICAgICAKKyAgICAgICAgSnVtcCBqbXAgPSBicmFuY2hU
ZXN0MzIoY29uZCwgYWRkcmVzc1RlbXBSZWdpc3RlciwgbWFzayk7CisgICAgICAgIHJlbGVhc2Vf
c2NyYXRjaChhZGRyZXNzVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgcmV0dXJuIGptcDsKKyAgICB9
CisgICAgCisgICAgdm9pZCBzaWduRXh0ZW5kMzJUb1B0cihSZWdpc3RlcklEIHNyYywgUmVnaXN0
ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgaWYgKHNyYyAhPSBkZXN0KQorICAgICAgICAgICAg
bW92ZShzcmMsIGRlc3QpOworICAgIH0KKyAgICAKKyAgICBKdW1wIGJyYW5jaDgoQ29uZGl0aW9u
IGNvbmQsIEFkZHJlc3MgbGVmdCwgSW1tMzIgcmlnaHQpCisgICAgeworICAgICAgICBSZWdpc3Rl
cklEIGFkZHJlc3NUZW1wUmVnaXN0ZXIgPSBjbGFpbV9zY3JhdGNoKCk7CisgICAgICAgIGxvYWQ4
KGxlZnQsIGFkZHJlc3NUZW1wUmVnaXN0ZXIpOworICAgICAgICAKKyAgICAgICAgSnVtcCBqbXAg
PSBicmFuY2gzMihjb25kLCBhZGRyZXNzVGVtcFJlZ2lzdGVyLCByaWdodCk7CisgICAgICAgIHJl
bGVhc2Vfc2NyYXRjaChhZGRyZXNzVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgcmV0dXJuIGptcDsK
KyAgICB9CisKKyAgICBKdW1wIGJyYW5jaFRydW5jYXRlRG91YmxlVG9JbnQzMihGUFJlZ2lzdGVy
SUQsIFJlZ2lzdGVySUQpCisgICAgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICB9CisgICAgCisgICAgLy8gU3RhY2sgbWFuaXB1bGF0aW9uIG9wZXJhdGlvbnMKKyAgICAKKyAg
ICB2b2lkIHBvcChSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5w
b3BfcihkZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIHB1c2goUmVnaXN0ZXJJRCBzcmMpCisgICAg
eworICAgICAgICBtX2Fzc2VtYmxlci5wdXNoX3Ioc3JjKTsKKyAgICB9CisKKyAgICB2b2lkIHB1
c2goQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIucHVzaF9tKGFk
ZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UpOworICAgIH0KKworICAgIHZvaWQgcHVzaChJbW0z
MiBpbW0pCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5wdXNoX2kzMihpbW0ubV92YWx1ZSk7
CisgICAgfQorCisgICAgLy8gUmVnaXN0ZXIgbW92ZSBvcGVyYXRpb25zCisKKyAgICB2b2lkIG1v
dmUoSW1tMzIgaW1tLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgIG1fYXNzZW1ibGVy
LkxvYWRDb25zdGFudChpbW0ubV92YWx1ZSwgZGVzdCk7CisgICAgfQorICAgIAorICAgIHZvaWQg
bW92ZVdpdGhQYXRjaChJbW0zMiBpbW0sIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAg
bV9hc3NlbWJsZXIuTG9hZENvbnN0YW50KGltbS5tX3ZhbHVlLCBkZXN0LCB0cnVlLCBmYWxzZSk7
CisgICAgfQorCisgICAgdm9pZCBtb3ZlKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3Qp
CisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5tb3ZsX3JyKHNyYywgZGVzdCk7CisgICAgfQor
CisgICAgdm9pZCBtb3ZlKEltbVB0ciBpbW0sIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAg
ICAgIG1fYXNzZW1ibGVyLkxvYWRDb25zdGFudChpbW0uYXNJbnRwdHIoKSwgZGVzdCk7CisgICAg
fQorICAgIAorICAgIHZvaWQgZXh0dXcoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQor
ICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuZXh0dXcoc3JjLCBkc3QpOworICAgIH0KKworICAg
IHZvaWQgc2V0MzIoQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgbGVmdCwgUmVnaXN0ZXJJRCBy
aWdodCwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKDApOworICAgIH0K
KworCisgICAgdm9pZCBzZXQzMihDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBsZWZ0LCBJbW0z
MiByaWdodCwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICBBU1NFUlQoMCk7CisgICAg
fQorCitwdWJsaWM6CisgICAgSnVtcCBicmFuY2gzMihDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJ
RCBsZWZ0LCBSZWdpc3RlcklEIHJpZ2h0LCBib29sIG5lZWRDb25zdGFudCA9IHRydWUpCisgICAg
eworICAgICAgICBKdW1wIG1fanVtcDsKKyAgICAgICAgbV9hc3NlbWJsZXIuY21wbF9ycihyaWdo
dCwgbGVmdCwgY29uZCk7CisgICAgICAgIAorICAgICAgICAvKiBCVCBsYWJlbCAgPT0+IEJGIG9m
ZiAgICAgID0+IEJGIG9mZicgCisgICAgICAgICAgIG5vcCAgICAgICAgICAgQnJhIGxhYmVsJyAg
ICBMRFIgcmVnCisgICAgICAgICAgIG5vcCAgICAgICAgICAgbm9wICAgICAgICAgICBicmFmIEBy
ZWcKKyAgICAgICAgICAgbm9wICAgICAgICAgICBub3AgICAgICAgICAgIG5vcAorICAgICAgICAg
Ki8KKyAgICAgICAgICAgICAgIAorICAgICAgICBtX2p1bXAgPSAoY29uZCA9PSBOb3RFcXVhbCkg
PyBKdW1wKG1fYXNzZW1ibGVyLmpuZSgpKSA6IEp1bXAobV9hc3NlbWJsZXIuamUoKSk7CisgICAg
ICAgIAorICAgICAgICBSZWdpc3RlcklEIHNjcjsKKyAgICAgICAgaWYgKG5lZWRDb25zdGFudCkg
eworICAgICAgICAgICAgc2NyID0gY2xhaW1fc2NyYXRjaCgpOworICAgICAgICAgICAgbV9hc3Nl
bWJsZXIuTG9hZENvbnN0YW50KDB4MCwgc2NyLCB0cnVlLCBmYWxzZSk7CisgICAgICAgIH0KKyAg
ICAgICAgbV9hc3NlbWJsZXIubm9wKCk7CisgICAgICAgIG1fYXNzZW1ibGVyLm5vcCgpOworICAg
ICAgICBpZiAobmVlZENvbnN0YW50KQorICAgICAgICAgICAgcmVsZWFzZV9zY3JhdGNoKHNjcik7
CisgICAgICAgIAorICAgICAgICByZXR1cm4gbV9qdW1wOworICAgIH0KKworICAgIEp1bXAgYnJh
bmNoMzIoQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgbGVmdCwgSW1tMzIgcmlnaHQsIGJvb2wg
bmVlZENvbnN0YW50ID0gdHJ1ZSkKKyAgICB7CisgICAgICAgIEp1bXAgbV9qdW1wOworICAgICAg
ICBpZiAoKChjb25kID09IEVxdWFsKSB8fCAoY29uZCA9PSBOb3RFcXVhbCkpICYmICFyaWdodC5t
X3ZhbHVlKQorICAgICAgICAgICAgbV9hc3NlbWJsZXIudGVzdGxfcnIobGVmdCwgbGVmdCk7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmNtcGxfaXIocmlnaHQubV92YWx1
ZSwgbGVmdCwgY29uZCk7CisgICAgICAgICAgICAKKyAgICAgICAgbV9qdW1wID0gKGNvbmQgPT0g
Tm90RXF1YWwpID8gSnVtcChtX2Fzc2VtYmxlci5qbmUoKSkgOiBKdW1wKG1fYXNzZW1ibGVyLmpl
KCkpOworICAgICAgICAKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3I7CisgICAgICAgIGlmIChuZWVk
Q29uc3RhbnQpIHsKKyAgICAgICAgICAgIHNjciA9IGNsYWltX3NjcmF0Y2goKTsKKyAgICAgICAg
ICAgIG1fYXNzZW1ibGVyLkxvYWRDb25zdGFudCgweDAsIHNjciwgdHJ1ZSwgZmFsc2UpOworICAg
ICAgICB9CisgICAgICAgIG1fYXNzZW1ibGVyLm5vcCgpOworICAgICAgICBtX2Fzc2VtYmxlci5u
b3AoKTsKKyAgICAgICAgaWYgKG5lZWRDb25zdGFudCkKKyAgICAgICAgICAgIHJlbGVhc2Vfc2Ny
YXRjaChzY3IpOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIG1fanVtcDsKKyAgICB9CisgICAg
CisgICAgSnVtcCBicmFuY2gzMihDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBsZWZ0LCBBZGRy
ZXNzIHJpZ2h0LCBib29sIG5lZWRDb25zdGFudCA9IHRydWUpCisgICAgeworICAgICAgICBKdW1w
IG1fanVtcDsKKyAgICAgICAgbV9hc3NlbWJsZXIuY21wbF9tcihyaWdodC5vZmZzZXQsIHJpZ2h0
LmJhc2UsIGxlZnQsIGNvbmQpOworICAgICAgICAKKyAgICAgICAgbV9qdW1wID0gKGNvbmQgPT0g
Tm90RXF1YWwpID8gSnVtcChtX2Fzc2VtYmxlci5qbmUoKSkgOiBKdW1wKG1fYXNzZW1ibGVyLmpl
KCkpOworICAgICAgICAKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3I7CisgICAgICAgIGlmIChuZWVk
Q29uc3RhbnQpIHsKKyAgICAgICAgICAgIHNjciA9IGNsYWltX3NjcmF0Y2goKTsKKyAgICAgICAg
ICAgIG1fYXNzZW1ibGVyLkxvYWRDb25zdGFudCgweDAsIHNjciwgdHJ1ZSwgZmFsc2UpOworICAg
ICAgICB9CisgICAgICAgIG1fYXNzZW1ibGVyLm5vcCgpOworICAgICAgICBtX2Fzc2VtYmxlci5u
b3AoKTsKKyAgICAgICAgaWYgKG5lZWRDb25zdGFudCkKKyAgICAgICAgICAgIHJlbGVhc2Vfc2Ny
YXRjaChzY3IpOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIG1fanVtcDsKKyAgICB9CisgICAg
CisgICAgSnVtcCBicmFuY2gzMihDb25kaXRpb24gY29uZCwgQWRkcmVzcyBsZWZ0LCBSZWdpc3Rl
cklEIHJpZ2h0LCBib29sIG5lZWRDb25zdGFudCA9IHRydWUpCisgICAgeworICAgICAgICBKdW1w
IG1fanVtcDsKKyAgICAgICAgbV9hc3NlbWJsZXIuY21wbF9ybShyaWdodCwgbGVmdC5vZmZzZXQs
IGxlZnQuYmFzZSwgY29uZCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgIG1fanVtcCA9IChj
b25kID09IE5vdEVxdWFsKSA/IEp1bXAobV9hc3NlbWJsZXIuam5lKCkpIDogSnVtcChtX2Fzc2Vt
Ymxlci5qZSgpKTsKKyAgICAgICAgCisgICAgICAgIFJlZ2lzdGVySUQgc2NyOworICAgICAgICBp
ZiAobmVlZENvbnN0YW50KSB7CisgICAgICAgICAgICBzY3IgPSBjbGFpbV9zY3JhdGNoKCk7Cisg
ICAgICAgICAgICBtX2Fzc2VtYmxlci5Mb2FkQ29uc3RhbnQoMHgwLCBzY3IsIHRydWUsIGZhbHNl
KTsKKyAgICAgICAgfQorICAgICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKKyAgICAgICAgbV9hc3Nl
bWJsZXIubm9wKCk7CisgICAgICAgIGlmIChuZWVkQ29uc3RhbnQpCisgICAgICAgICAgICByZWxl
YXNlX3NjcmF0Y2goc2NyKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBtX2p1bXA7CisgICAg
fQorCisgICAgSnVtcCBicmFuY2gzMihDb25kaXRpb24gY29uZCwgQWRkcmVzcyBsZWZ0LCBJbW0z
MiByaWdodCwgYm9vbCBuZWVkQ29uc3RhbnQgPSB0cnVlKQorICAgIHsKKyAgICAgICAgSnVtcCBt
X2p1bXA7CisgICAgICAgIG1fYXNzZW1ibGVyLmNtcGxfaW0ocmlnaHQubV92YWx1ZSwgbGVmdC5v
ZmZzZXQsIGxlZnQuYmFzZSwgY29uZCk7CisgICAgICAgIAorICAgICAgICBtX2p1bXAgPSAoY29u
ZCA9PSBOb3RFcXVhbCkgPyBKdW1wKG1fYXNzZW1ibGVyLmpuZSgpKSA6IEp1bXAobV9hc3NlbWJs
ZXIuamUoKSk7CisgICAgICAgIAorICAgICAgICBSZWdpc3RlcklEIHNjcjsKKyAgICAgICAgaWYg
KG5lZWRDb25zdGFudCkgeworICAgICAgICAgICAgc2NyID0gY2xhaW1fc2NyYXRjaCgpOworICAg
ICAgICAgICAgbV9hc3NlbWJsZXIuTG9hZENvbnN0YW50KDB4MCwgc2NyLCB0cnVlLCBmYWxzZSk7
CisgICAgICAgIH0KKyAgICAgICAgbV9hc3NlbWJsZXIubm9wKCk7CisgICAgICAgIG1fYXNzZW1i
bGVyLm5vcCgpOworICAgICAgICBpZiAobmVlZENvbnN0YW50KQorICAgICAgICAgICAgcmVsZWFz
ZV9zY3JhdGNoKHNjcik7CisgICAgICAgIAorICAgICAgICByZXR1cm4gbV9qdW1wOworICAgIH0K
KworCisgICAgSnVtcCBicmFuY2gzMihDb25kaXRpb24gY29uZCwgQWJzb2x1dGVBZGRyZXNzIGxl
ZnQsIFJlZ2lzdGVySUQgcmlnaHQsIGJvb2wgbmVlZENvbnN0YW50ID0gdHJ1ZSkKKyAgICB7Cisg
ICAgICAgIEp1bXAgbV9qdW1wOworICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltX3NjcmF0
Y2goKTsKKyAgICAgICAgbW92ZShJbW0zMigoaW50KWxlZnQubV9wdHIpLCBzY3IpOworICAgICAg
ICBtX2Fzc2VtYmxlci5jbXBsX3JyKHJpZ2h0LCBzY3IsIGNvbmQpOworCisgICAgICAgIG1fanVt
cCA9IChjb25kID09IE5vdEVxdWFsKSA/IEp1bXAobV9hc3NlbWJsZXIuam5lKCkpIDogSnVtcCht
X2Fzc2VtYmxlci5qZSgpKTsKKworICAgICAgICBpZiAobmVlZENvbnN0YW50KQorICAgICAgICAg
ICAgbV9hc3NlbWJsZXIuTG9hZENvbnN0YW50KDB4MCwgc2NyLCB0cnVlLCBmYWxzZSk7CisgICAg
ICAgIG1fYXNzZW1ibGVyLm5vcCgpOworICAgICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKKworICAg
ICAgICByZWxlYXNlX3NjcmF0Y2goc2NyKTsKKyAgICAgICAgcmV0dXJuIG1fanVtcDsKKyAgICB9
CisKKworICAgIEp1bXAgYnJhbmNoMzIoQ29uZGl0aW9uIGNvbmQsIEFic29sdXRlQWRkcmVzcyBs
ZWZ0LCBJbW0zMiByaWdodCwgYm9vbCBuZWVkQ29uc3RhbnQgPSB0cnVlKQorICAgIHsKKyAgICAg
ICAgSnVtcCBtX2p1bXA7CisgICAgICAgIFJlZ2lzdGVySUQgYWRkcmVzc1RlbXBSZWdpc3RlciA9
IGNsYWltX3NjcmF0Y2goKTsKKyAgICAgICAgbG9hZDMyKGxlZnQubV9wdHIsIGFkZHJlc3NUZW1w
UmVnaXN0ZXIpOworCisgICAgICAgIG1fYXNzZW1ibGVyLmNtcGxfaXIocmlnaHQubV92YWx1ZSwg
YWRkcmVzc1RlbXBSZWdpc3RlciwgY29uZCk7CisKKyAgICAgICAgbV9qdW1wID0gKGNvbmQgPT0g
Tm90RXF1YWwpID8gSnVtcChtX2Fzc2VtYmxlci5qbmUoKSkgOiBKdW1wKG1fYXNzZW1ibGVyLmpl
KCkpOworCisgICAgICAgIGlmIChuZWVkQ29uc3RhbnQpCisgICAgICAgICAgICBtX2Fzc2VtYmxl
ci5Mb2FkQ29uc3RhbnQoMHgwLCBhZGRyZXNzVGVtcFJlZ2lzdGVyLCB0cnVlLCBmYWxzZSk7Cisg
ICAgICAgIG1fYXNzZW1ibGVyLm5vcCgpOworICAgICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKKwor
ICAgICAgICByZWxlYXNlX3NjcmF0Y2goYWRkcmVzc1RlbXBSZWdpc3Rlcik7CisgICAgICAgIHJl
dHVybiBtX2p1bXA7CisgICAgfQorCisKKworICAgIEp1bXAgYnJhbmNoMTYoQ29uZGl0aW9uIGNv
bmQsICBCYXNlSW5kZXggbGVmdCwgUmVnaXN0ZXJJRCByaWdodCkKKyAgICB7CisgICAgICAgIFJl
Z2lzdGVySUQgc2NyID0gY2xhaW1fc2NyYXRjaCgpOworICAgICAgICBtb3ZlKGxlZnQuaW5kZXgs
IHNjcik7CisgICAgICAgIGxzaGlmdDMyKGxlZnQuc2NhbGUsIHNjcik7CisgICAgICAgIG1fYXNz
ZW1ibGVyLmFkZGxfaXIobGVmdC5vZmZzZXQsIHNjcik7CisgICAgICAgIGFkZDMyKGxlZnQuYmFz
ZSwgc2NyKTsKKyAgICAgICAgbG9hZDE2KHNjciwgc2NyKTsKKyAgICAgICAgZXh0dXcoc2NyLCBz
Y3IpOworICAgICAgICByZWxlYXNlX3NjcmF0Y2goc2NyKTsKKworICAgICAgICByZXR1cm4gYnJh
bmNoMzIoY29uZCwgc2NyLCByaWdodCk7ICAgIAorICAgIH0KKyAgICAKKyAgICBKdW1wIGJyYW5j
aDE2KENvbmRpdGlvbiBjb25kLCBCYXNlSW5kZXggbGVmdCwgSW1tMzIgcmlnaHQpCisgICAgewor
ICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltX3NjcmF0Y2goKTsKKyAgICAgICAgUmVnaXN0
ZXJJRCBzY3IxID0gY2xhaW1fc2NyYXRjaCgpOworICAgICAgICBtb3ZlKGxlZnQuaW5kZXgsIHNj
cik7CisgICAgICAgIGxzaGlmdDMyKGxlZnQuc2NhbGUsIHNjcik7CisgICAgICAgIG1fYXNzZW1i
bGVyLmFkZGxfaXIobGVmdC5vZmZzZXQsIHNjcik7CisgICAgICAgIGFkZDMyKGxlZnQuYmFzZSwg
c2NyKTsKKyAgICAgICAgbG9hZDE2KHNjciwgc2NyKTsKKyAgICAgICAgZXh0dXcoc2NyLCBzY3Ip
OworICAgICAgICAKKyAgICAgICAgbV9hc3NlbWJsZXIuTG9hZENvbnN0YW50KHJpZ2h0Lm1fdmFs
dWUsIHNjcjEpOworICAgICAgICAKKyAgICAgICAgcmVsZWFzZV9zY3JhdGNoKHNjcik7CisgICAg
ICAgIHJlbGVhc2Vfc2NyYXRjaChzY3IxKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaDMyKGNvbmQs
IHNjciwgc2NyMSk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2hUZXN0MzIoQ29uZGl0aW9uIGNv
bmQsIFJlZ2lzdGVySUQgcmVnLCBSZWdpc3RlcklEIG1hc2ssIGJvb2wgbmVlZENvbnN0YW50ID0g
dHJ1ZSkKKyAgICB7CisgICAgICAgIEFTU0VSVCgoY29uZCA9PSBaZXJvKSB8fCAoY29uZCA9PSBO
b25aZXJvKSk7CisgICAgICAgIEp1bXAgbV9qdW1wOworICAgICAgICBtX2Fzc2VtYmxlci50ZXN0
bF9ycihyZWcsIG1hc2spOworCisgICAgICAgIG1fanVtcCA9IChjb25kID09IE5vdEVxdWFsKSA/
IEp1bXAobV9hc3NlbWJsZXIuam5lKCkpIDogSnVtcChtX2Fzc2VtYmxlci5qZSgpKTsKKyAgICAg
ICAgCisgICAgICAgIFJlZ2lzdGVySUQgc2NyOworICAgICAgICBpZiAobmVlZENvbnN0YW50KSB7
CisgICAgICAgICAgICBzY3IgPSBjbGFpbV9zY3JhdGNoKCk7CisgICAgICAgICAgICBtX2Fzc2Vt
Ymxlci5Mb2FkQ29uc3RhbnQoMHgwLCBzY3IsIHRydWUsIGZhbHNlKTsKKyAgICAgICAgfQorICAg
ICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubm9wKCk7CisgICAg
ICAgIGlmIChuZWVkQ29uc3RhbnQpCisgICAgICAgICAgICByZWxlYXNlX3NjcmF0Y2goc2NyKTsK
KyAgICAgICAgCisgICAgICAgIHJldHVybiBtX2p1bXA7ICAgCisgICAgfQorCisgICAgSnVtcCBi
cmFuY2hUZXN0MzIoQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgcmVnLCBJbW0zMiBtYXNrID0g
SW1tMzIoLTEpLCBib29sIG5lZWRDb25zdGFudCA9IHRydWUpCisgICAgeworICAgICAgICBBU1NF
UlQoKGNvbmQgPT0gWmVybykgfHwgKGNvbmQgPT0gTm9uWmVybykpOworICAgICAgICBKdW1wIG1f
anVtcDsKKyAgICAgICAgCisgICAgICAgIGlmIChtYXNrLm1fdmFsdWUgPT0gLTEpCisgICAgICAg
ICAgICBtX2Fzc2VtYmxlci50ZXN0bF9ycihyZWcsIHJlZyk7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIG1fYXNzZW1ibGVyLnRlc3RsX2kzMnIobWFzay5tX3ZhbHVlLCByZWcpOworICAgICAg
ICAgICAgCisgICAgICAgIG1fanVtcCA9IChjb25kID09IE5vdEVxdWFsKSA/IEp1bXAobV9hc3Nl
bWJsZXIuam5lKCkpIDogSnVtcChtX2Fzc2VtYmxlci5qZSgpKTsKKyAgICAgICAgCisgICAgICAg
IFJlZ2lzdGVySUQgc2NyOworICAgICAgICBpZiAobmVlZENvbnN0YW50KSB7CisgICAgICAgICAg
ICBzY3IgPSBjbGFpbV9zY3JhdGNoKCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5Mb2FkQ29u
c3RhbnQoMHgwLCBzY3IsIHRydWUsIGZhbHNlKTsKKyAgICAgICAgfQorICAgICAgICBtX2Fzc2Vt
Ymxlci5ub3AoKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubm9wKCk7CisgICAgICAgIGlmIChuZWVk
Q29uc3RhbnQpCisgICAgICAgICAgICByZWxlYXNlX3NjcmF0Y2goc2NyKTsKKyAgICAgICAgCisg
ICAgICAgIHJldHVybiBtX2p1bXA7CisgICAgfQorCisgICAgSnVtcCBicmFuY2hUZXN0MzIoQ29u
ZGl0aW9uIGNvbmQsIEFkZHJlc3MgYWRkcmVzcywgSW1tMzIgbWFzayA9IEltbTMyKC0xKSwgYm9v
bCBuZWVkQ29uc3RhbnQgPSB0cnVlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKChjb25kID09IFpl
cm8pIHx8IChjb25kID09IE5vblplcm8pKTsKKyAgICAgICAgSnVtcCBtX2p1bXA7CisKKyAgICAg
ICAgaWYgKG1hc2subV92YWx1ZSA9PSAtMSkKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmNtcGxf
aW0oMCwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSwgY29uZCk7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnRlc3RsX2kzMm0obWFzay5tX3ZhbHVlLCBhZGRyZXNz
Lm9mZnNldCwgYWRkcmVzcy5iYXNlKTsKKyAgICAgICAgICAgIAorICAgICAgICBtX2p1bXAgPSAo
Y29uZCA9PSBOb3RFcXVhbCkgPyBKdW1wKG1fYXNzZW1ibGVyLmpuZSgpKSA6IEp1bXAobV9hc3Nl
bWJsZXIuamUoKSk7CisgICAgICAgIAorICAgICAgICBSZWdpc3RlcklEIHNjcjsKKyAgICAgICAg
aWYgKG5lZWRDb25zdGFudCkgeworICAgICAgICAgICAgc2NyID0gY2xhaW1fc2NyYXRjaCgpOwor
ICAgICAgICAgICAgbV9hc3NlbWJsZXIuTG9hZENvbnN0YW50KDB4MCwgc2NyLCB0cnVlLCBmYWxz
ZSk7CisgICAgICAgIH0KKyAgICAgICAgbV9hc3NlbWJsZXIubm9wKCk7CisgICAgICAgIG1fYXNz
ZW1ibGVyLm5vcCgpOworICAgICAgICBpZiAobmVlZENvbnN0YW50KQorICAgICAgICAgICAgcmVs
ZWFzZV9zY3JhdGNoKHNjcik7CisgICAgICAgIAorICAgICAgICByZXR1cm4gbV9qdW1wOworICAg
IH0KKyAgICAKKyAgICBKdW1wIGJyYW5jaDMyKENvbmRpdGlvbiBjb25kLCBib29sIG5lZWRDb25z
dGFudCA9IHRydWUpCisgICAgeworICAgICAgICBKdW1wIG1fanVtcDsKKworICAgICAgICBtX2p1
bXAgPSAoY29uZCA9PSBOb3RFcXVhbCkgPyBKdW1wKG1fYXNzZW1ibGVyLmpuZSgpKSA6IEp1bXAo
bV9hc3NlbWJsZXIuamUoKSk7CisKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbV9zY3Jh
dGNoKCk7CisgCisgICAgICAgIG1fYXNzZW1ibGVyLkxvYWRDb25zdGFudCgweDAsIHNjciwgdHJ1
ZSwgZmFsc2UpOworICAgICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKKyAgICAgICAgbV9hc3NlbWJs
ZXIubm9wKCk7CisgICAgICAgIAorICAgICAgICByZWxlYXNlX3NjcmF0Y2goc2NyKTsKKyAgICAg
ICAgcmV0dXJuIG1fanVtcDsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaFRlc3QzMihDb25kaXRp
b24gY29uZCwgQmFzZUluZGV4IGFkZHJlc3MsIEltbTMyIG1hc2sgPSBJbW0zMigtMSksIGJvb2wg
bmVlZENvbnN0YW50ID0gdHJ1ZSkKKyAgICB7CisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xh
aW1fc2NyYXRjaCgpOworICAgICAgICBKdW1wIG1fanVtcDsKKworICAgICAgICBtb3ZlKGFkZHJl
c3MuaW5kZXgsIHNjcik7CisKKyAgICAgICAgbHNoaWZ0MzIoYWRkcmVzcy5zY2FsZSwgc2NyKTsK
KyAgICAgICAgYWRkMzIoYWRkcmVzcy5iYXNlLCBzY3IpOworICAgICAgICBsb2FkMzIoc2NyLCBh
ZGRyZXNzLm9mZnNldCwgc2NyKTsKKworICAgICAgICBpZiAobWFzay5tX3ZhbHVlID09IC0xKQor
ICAgICAgICAgICAgbV9hc3NlbWJsZXIudGVzdGxfcnIoc2NyLCBzY3IpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBtX2Fzc2VtYmxlci50ZXN0bF9pMzJyKG1hc2subV92YWx1ZSwgc2NyKTsK
KworICAgICAgICBtX2p1bXAgPSAoY29uZCA9PSBOb3RFcXVhbCkgPyBKdW1wKG1fYXNzZW1ibGVy
LmpuZSgpKSA6IEp1bXAobV9hc3NlbWJsZXIuamUoKSk7CisKKyAgICAgICAgaWYgKG5lZWRDb25z
dGFudCkKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLkxvYWRDb25zdGFudCgweDAsIHNjciwgdHJ1
ZSwgZmFsc2UpOworCisgICAgICAgIG1fYXNzZW1ibGVyLm5vcCgpOworICAgICAgICBtX2Fzc2Vt
Ymxlci5ub3AoKTsKKyAgICAgICAgcmVsZWFzZV9zY3JhdGNoKHNjcik7CisgICAgICAgIAorICAg
ICAgICByZXR1cm4gbV9qdW1wOworICAgIH0KKworICAgIEp1bXAganVtcCgpCisgICAgeworICAg
ICAgICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5qbXAoKSk7CisgICAgfQorCisgICAgdm9pZCBq
dW1wKFJlZ2lzdGVySUQgdGFyZ2V0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuam1wX3Io
dGFyZ2V0KTsKKyAgICB9CisKKyAgICAvLyBBZGRyZXNzIGlzIGEgbWVtb3J5IGxvY2F0aW9uIGNv
bnRhaW5pbmcgdGhlIGFkZHJlc3MgdG8ganVtcCB0bworICAgIHZvaWQganVtcChBZGRyZXNzIGFk
ZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5qbXBfbShhZGRyZXNzLm9mZnNldCwg
YWRkcmVzcy5iYXNlKTsKKyAgICB9CisKKworICAgIC8vIEFyaXRobWV0aWMgY29udHJvbCBmbG93
IG9wZXJhdGlvbnMKKyAgICAKKyAgICBKdW1wIGJyYW5jaEFkZDMyKENvbmRpdGlvbiBjb25kLCBS
ZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKGNv
bmQgPT0gT3ZlcmZsb3cpOworICAgICAgICBtX2Fzc2VtYmxlci5hZGR2bF9ycihzcmMsIGRlc3Qp
OworICAgICAgICAKKyAgICAgICAgSnVtcCBtX2p1bXAgPSBKdW1wKG1fYXNzZW1ibGVyLmpuZSgp
KTsKKyAgICAgICAKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbV9zY3JhdGNoKCk7IAor
ICAgICAgICBtX2Fzc2VtYmxlci5Mb2FkQ29uc3RhbnQoMHgwLCBzY3IsIHRydWUsIGZhbHNlKTsK
KyAgICAgICAgbV9hc3NlbWJsZXIubm9wKCk7CisgICAgICAgIG1fYXNzZW1ibGVyLm5vcCgpOwor
ICAgICAgICAKKyAgICAgICAgcmVsZWFzZV9zY3JhdGNoKHNjcik7CisgICAgICAgIHJldHVybiBt
X2p1bXA7CisgICAgfQorICAgIAorICAgIEp1bXAgYnJhbmNoTXVsMzIoQ29uZGl0aW9uIGNvbmQs
IFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBBU1NFUlQo
MCk7CisgICAgfQorICAgIAorICAgIEp1bXAgYnJhbmNoTXVsMzIoQ29uZGl0aW9uIGNvbmQsIElt
bTMyIGltbSwgUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAg
IEFTU0VSVCgwKTsKKyAgICB9CisgICAgCisgICAgSnVtcCBicmFuY2hTdWIzMihDb25kaXRpb24g
Y29uZCwgUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIEFT
U0VSVCgwKTsKKyAgICB9CisgICAgCisgICAgSnVtcCBicmFuY2hTdWIzMihDb25kaXRpb24gY29u
ZCwgSW1tMzIgaW1tLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBBU1NFUlQoMCk7
CisgICAgfQorICAgIAorCisgICAgQ2FsbCBjYWxsKCkKKyAgICB7CisgICAgICAgIHJldHVybiBD
YWxsKG1fYXNzZW1ibGVyLmNhbGwoKSwgQ2FsbDo6TGlua2FibGUpOworICAgIH0KKyAgICAKKyAg
ICBDYWxsIG5lYXJDYWxsKCkKKyAgICB7CisgICAgICAgIHJldHVybiBDYWxsKG1fYXNzZW1ibGVy
LmNhbGwoKSwgQ2FsbDo6TGlua2FibGVOZWFyKTsKKyAgICB9CisKKyAgICBDYWxsIGNhbGwoUmVn
aXN0ZXJJRCB0YXJnZXQpCisgICAgeworICAgICAgICByZXR1cm4gQ2FsbChtX2Fzc2VtYmxlci5j
YWxsKHRhcmdldCksIENhbGw6Ok5vbmUpOworICAgIH0KKworICAgIHZvaWQgcmV0KCkKKyAgICB7
CisgICAgICAgIG1fYXNzZW1ibGVyLnJldCgpOworICAgICAgICBtX2Fzc2VtYmxlci5ub3AoKTsK
KyAgICB9CisgICAgCisgICAgSnVtcCBicmFuY2hQdHJXaXRoUGF0Y2goQ29uZGl0aW9uIGNvbmQs
IFJlZ2lzdGVySUQgbGVmdCwgRGF0YUxhYmVsUHRyJiBkYXRhTGFiZWwsIEltbVB0ciBpbml0aWFs
UmlnaHRWYWx1ZSA9IEltbVB0cigwKSkKKyAgICB7ICAgICAgICAKKyAgICAgICAgUmVnaXN0ZXJJ
RCBkYXRhVGVtcFJlZ2lzdGVyID0gY2xhaW1fc2NyYXRjaCgpOworICAgICAgICBKdW1wIG1fanVt
cDsKKyAgICAgICAgCisgICAgICAgIGRhdGFMYWJlbCA9IERhdGFMYWJlbFB0cih0aGlzKTsKKyAg
ICAgICAgbV9hc3NlbWJsZXIuTG9hZENvbnN0YW50KChpbnQpaW5pdGlhbFJpZ2h0VmFsdWUubV92
YWx1ZSwgZGF0YVRlbXBSZWdpc3RlciwgdHJ1ZSwgZmFsc2UpOworICAgICAgICAKKyAgICAgICAg
bV9hc3NlbWJsZXIuY21wbF9ycihkYXRhVGVtcFJlZ2lzdGVyLCBsZWZ0LCBjb25kKTsgICAgICAg
IAorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgbV9qdW1wID0gKGNvbmQgPT0gTm90RXF1
YWwpID8gSnVtcChtX2Fzc2VtYmxlci5qbmUoKSkgOiBKdW1wKG1fYXNzZW1ibGVyLmplKCkpOwor
ICAgICAgICAKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbV9zY3JhdGNoKCk7CisgICAg
ICAgIG1fYXNzZW1ibGVyLkxvYWRDb25zdGFudCgweDAsIHNjciwgdHJ1ZSwgZmFsc2UpOworICAg
ICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubm9wKCk7CisgICAg
ICAgIHJlbGVhc2Vfc2NyYXRjaChzY3IpOworICAgICAgICByZWxlYXNlX3NjcmF0Y2goZGF0YVRl
bXBSZWdpc3Rlcik7CisgICAgICAgIAorICAgICAgICByZXR1cm4gbV9qdW1wOworICAgIH0KKwor
ICAgIEp1bXAgYnJhbmNoUHRyV2l0aFBhdGNoKENvbmRpdGlvbiBjb25kLCBBZGRyZXNzIGxlZnQs
IERhdGFMYWJlbFB0ciYgZGF0YUxhYmVsLCBJbW1QdHIgaW5pdGlhbFJpZ2h0VmFsdWUgPSBJbW1Q
dHIoMCkpCisgICAgeworICAgICAgICBKdW1wIG1fanVtcDsKKyAgICAgICAgUmVnaXN0ZXJJRCBz
Y3IgPSBjbGFpbV9zY3JhdGNoKCk7CisgICAgICAgIFJlZ2lzdGVySUQgc2NyMSA9IGNsYWltX3Nj
cmF0Y2goKTsKKworICAgICAgICBtX2Fzc2VtYmxlci5Mb2FkQ29uc3RhbnQobGVmdC5vZmZzZXQs
IHNjciwgZmFsc2UsIGZhbHNlKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuYWRkbF9ycihsZWZ0LmJh
c2UsIHNjcik7CisgICAgICAgIG1fYXNzZW1ibGVyLm1vdmxfbXIoc2NyLCBzY3IpOworCisgICAg
ICAgIGRhdGFMYWJlbCA9IERhdGFMYWJlbFB0cih0aGlzKTsKKyAgICAgICAgbW92ZVdpdGhQYXRj
aChJbW0zMihpbml0aWFsUmlnaHRWYWx1ZS5hc0ludHB0cigpKSwgc2NyMSk7CisKKyAgICAgICAg
bV9hc3NlbWJsZXIuY21wbF9ycihzY3IxLCBzY3IsIGNvbmQpOyAgICAgICAgCisgICAgICAgICAg
ICAgICAgCisgICAgICAgIG1fanVtcCA9IChjb25kID09IE5vdEVxdWFsKSA/IEp1bXAobV9hc3Nl
bWJsZXIuam5lKCkpIDogSnVtcChtX2Fzc2VtYmxlci5qZSgpKTsKKyAgICAgICAgCisgICAgICAg
IG1fYXNzZW1ibGVyLkxvYWRDb25zdGFudCgweDAsIHNjciwgdHJ1ZSwgZmFsc2UpOworICAgICAg
ICBtX2Fzc2VtYmxlci5ub3AoKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubm9wKCk7CisgICAgICAg
IAorICAgICAgICByZWxlYXNlX3NjcmF0Y2goc2NyKTsKKyAgICAgICAgcmVsZWFzZV9zY3JhdGNo
KHNjcjEpOworICAgICAgICByZXR1cm4gbV9qdW1wOworICAgIH0KKyAgICAKKyAgICBEYXRhTGFi
ZWxQdHIgc3RvcmVQdHJXaXRoUGF0Y2goSW1tMzIgaW5pdGlhbFZhbHVlLCBJbXBsaWNpdEFkZHJl
c3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1fc2NyYXRj
aCgpOworICAgICAgICBEYXRhTGFiZWxQdHIgbGFiZWwodGhpcyk7CisgICAgICAgIG1vdmVXaXRo
UGF0Y2goaW5pdGlhbFZhbHVlLCBzY3IpOworICAgICAgICBzdG9yZTMyKHNjciwgYWRkcmVzcyk7
CisgICAgICAgIHJlbGVhc2Vfc2NyYXRjaChzY3IpOworICAgICAgICByZXR1cm4gbGFiZWw7Cisg
ICAgfQorICAgIAorICAgIERhdGFMYWJlbFB0ciBzdG9yZVB0cldpdGhQYXRjaChJbW1QdHIgaW5p
dGlhbFZhbHVlLCBJbXBsaWNpdEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIHN0b3Jl
UHRyV2l0aFBhdGNoKEltbTMyKGluaXRpYWxWYWx1ZS5hc0ludHB0cigpKSwgYWRkcmVzcyk7Cisg
ICAgfQorICAgIAorICAgIERhdGFMYWJlbFB0ciBzdG9yZVB0cldpdGhQYXRjaChJbW0zMiBpbml0
aWFsVmFsdWUsIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIFJlZ2lzdGVySUQgc2Ny
ID0gY2xhaW1fc2NyYXRjaCgpOworICAgICAgICBEYXRhTGFiZWxQdHIgbGFiZWwodGhpcyk7Cisg
ICAgICAgIG1vdmVXaXRoUGF0Y2goaW5pdGlhbFZhbHVlLCBzY3IpOworICAgICAgICBzdG9yZTMy
KHNjciwgYWRkcmVzcyk7CisgICAgICAgIHJlbGVhc2Vfc2NyYXRjaChzY3IpOworICAgICAgICBy
ZXR1cm4gbGFiZWw7CisgICAgfQorCisgICAgRGF0YUxhYmVsUHRyIHN0b3JlUHRyV2l0aFBhdGNo
KEltbVB0ciBpbml0aWFsVmFsdWUsIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIHN0
b3JlUHRyV2l0aFBhdGNoKEltbTMyKGluaXRpYWxWYWx1ZS5hc0ludHB0cigpKSwgYWRkcmVzcyk7
CisgICAgfQorCisgICAgRGF0YUxhYmVsUHRyIHN0b3JlUHRyV2l0aFBhdGNoKEltcGxpY2l0QWRk
cmVzcyBhZGRyZXNzKSB7IHJldHVybiBzdG9yZVB0cldpdGhQYXRjaChJbW0zMigwKSwgYWRkcmVz
cyk7IH0KKyAgICAKKyAgICAgICAKKyAgICBDYWxsIHRhaWxSZWN1cnNpdmVDYWxsKCkKKyAgICB7
CisgICAgICAgQVNTRVJUKDApOyAKKyAgICB9CisKKyAgICBDYWxsIG1ha2VUYWlsUmVjdXJzaXZl
Q2FsbChKdW1wIG9sZEp1bXApCisgICAgeworICAgICAgIEFTU0VSVCgwKTsgCisgICAgfQorICAg
IAorICAgIHByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIExpbmtCdWZmZXI7CisgICAgZnJpZW5k
IGNsYXNzIFJlcGF0Y2hCdWZmZXI7CisKKyAgICBzdGF0aWMgdm9pZCBsaW5rQ2FsbCh2b2lkKiBj
b2RlLCBDYWxsIGNhbGwsIEZ1bmN0aW9uUHRyIGZ1bmN0aW9uKQorICAgIHsKKyAgICAgICAgU0g0
QXNzZW1ibGVyOjpsaW5rQ2FsbChjb2RlLCBjYWxsLm1fam1wLCBmdW5jdGlvbi52YWx1ZSgpKTsK
KyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCByZXBhdGNoQ2FsbChDb2RlTG9jYXRpb25DYWxsIGNh
bGwsIENvZGVMb2NhdGlvbkxhYmVsIGRlc3RpbmF0aW9uKQorICAgIHsKKyAgICAgICAgU0g0QXNz
ZW1ibGVyOjpyZWxpbmtDYWxsKGNhbGwuZGF0YUxvY2F0aW9uKCksIGRlc3RpbmF0aW9uLmV4ZWN1
dGFibGVBZGRyZXNzKCkpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIHJlcGF0Y2hDYWxsKENv
ZGVMb2NhdGlvbkNhbGwgY2FsbCwgRnVuY3Rpb25QdHIgZGVzdGluYXRpb24pCisgICAgeworICAg
ICAgICBTSDRBc3NlbWJsZXI6OnJlbGlua0NhbGwoY2FsbC5kYXRhTG9jYXRpb24oKSwgZGVzdGlu
YXRpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgfQorCit9OworCit9IC8vIG5hbWVzcGFj
ZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShBU1NFTUJMRVIpCisKKyNlbmRpZiAvLyBNYWNyb0Fz
c2VtYmxlclNINF9oCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvU0g0QXNz
ZW1ibGVyLmggYi9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvU0g0QXNzZW1ibGVyLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGJiYzIzYQotLS0gL2Rldi9udWxsCisrKyBi
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9TSDRBc3NlbWJsZXIuaApAQCAtMCwwICsxLDIwMTYg
QEAKKworLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFNUTWljcm9lbGVjdHJvbmljcy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFdyaXR0ZW4gYnkgVGhvdXJheWEgQW5kb2xzaSAodGhv
dXJheWEuYW5kb2xzaUBzdC5jb20pLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaWZuZGVmIFNINEFzc2VtYmxlcl9oCisjZGVmaW5lIFNINEFzc2VtYmxl
cl9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShBU1NFTUJMRVIp
ICYmIENQVShTSDQpCisKKyNkZWZpbmUgR0VUT1BDT0RFMShhLCBiLCBjKSAgKChhKSB8ICgoKGIp
ICYgMHhmKSA8PCA4KSB8KCgoYykgJiAweGYpIDw8IDQpKQorI2RlZmluZSBHRVRPUENPREUyKGEs
IGIpICAoKGEpIHwgKCgoYikgJiAweGYpIDw8IDgpKQorI2RlZmluZSBHRVRPUENPREUzKGEsIGIs
IGMpICAoKGEpIHwgKCgoYikgJiAweGYpIDw8IDgpIHwoKGMpICYgMHhmZikpCisjZGVmaW5lIEdF
VE9QQ09ERTQoYSwgYiwgYywgZCkgICgoYSkgfCAoKChiKSAmIDB4ZikgPDwgOCkgfCgoKGMpICYg
MHhmKSA8PDQpIHwoKGQpICYgMHhmKSkKKyNkZWZpbmUgR0VUT1BDT0RFNShhLCBiKSAgKChhKSB8
ICgoYikgJiAweGZmKSkKKyNkZWZpbmUgR0VUT1BDT0RFNihhLCBiKSAgKChhKSB8ICgoYikgJiAw
eGZmZikpCisjZGVmaW5lIEdFVE9QQ09ERTcoYSwgYikgICgoYSkgfCAoKChiKSAmIDB4NykgPDwg
OSkpCisjZGVmaW5lIEdFVE9QQ09ERTgoYSwgYiwgYykgICgoYSkgfCAoKChiKSAmIDB4NykgPDwg
OSkgfCgoKGMpICYgMHg3KSA8PDUpKQorI2RlZmluZSBHRVRPUENPREU5KGEsIGIsIGMpICAoKGEp
IHwgKCgoYikgJiAweGYpIDw8IDgpIHwoKChjKSAmIDB4NykgPDw1KSkKKyNkZWZpbmUgR0VUT1BD
T0RFMTAoYSwgYiwgYykgICgoYSkgfCAoKChiKSAmIDB4NykgPDwgOSkgfCgoKGMpICYgMHhGKSA8
PDQpKQorI2RlZmluZSBHRVRPUENPREUxMShhLCBiLCBjKSAgKChhKSB8ICgoKGIpICYgMHhmKSA8
PCA0KSB8KCgoYykgJiAweGYpKSkKKworCisjZGVmaW5lIElOVkFMSURfT1BDT0RFICAgMHhmZmZm
CisjZGVmaW5lIEFERF9PUENPREUgICAgICAgMHgzMDBDCisjZGVmaW5lIEFERElNTV9PUENPREUg
ICAgMHg3MDAwCisjZGVmaW5lIEFERENfT1BDT0RFICAgICAgMHgzMDBFCisjZGVmaW5lIEFERFZf
T1BDT0RFICAgICAgMHgzMDBGCisKKyNkZWZpbmUgQU5EX09QQ09ERSAgICAgICAweDIwMDkKKyNk
ZWZpbmUgQU5ESU1NX09QQ09ERSAgICAweEM5MDAKKyNkZWZpbmUgRElWMF9PUENPREUgICAgICAw
eDIwMDcKKyNkZWZpbmUgRElWMV9PUENPREUgICAgICAweDMwMDQKKworI2RlZmluZSBCRl9PUENP
REUgICAgICAgIDB4OEIwMAorI2RlZmluZSBCRlNfT1BDT0RFICAgICAgIDB4OEYwMAorI2RlZmlu
ZSBCUkFfT1BDT0RFICAgICAgIDBYQTAwMAorI2RlZmluZSBCUkFGX09QQ09ERSAgICAgIDB4MDAy
MworI2RlZmluZSBOT1BfT1BDT0RFICAgICAgIDB4MDAwOQorI2RlZmluZSBCUkFGX09QQ09ERSAg
ICAgIDB4MDAyMworI2RlZmluZSBCU1JfT1BDT0RFICAgICAgIDB4QjAwMAorI2RlZmluZSBSVFNf
T1BDT0RFICAgICAgIDB4MDAwQgorI2RlZmluZSBCVF9PUENPREUgICAgICAgIDB4ODkwMAorI2Rl
ZmluZSBCVFNfT1BDT0RFICAgICAgIDB4OEQwMAorI2RlZmluZSBCU1JGX09QQ09ERSAgICAgIDB4
MDAwMworCisjZGVmaW5lIEJSS19PUENPREUgICAgICAgMHgwMDNCCisjZGVmaW5lIEZUUkNfT1BD
T0RFICAgICAgMHhGMDNECisKKyNkZWZpbmUgQ01QRVFfT1BDT0RFICAgICAweDMwMDAKKyNkZWZp
bmUgQ01QRVFJTU1fT1BDT0RFICAweDg4MDAKKyNkZWZpbmUgQ01QR0VfT1BDT0RFICAgICAweDMw
MDMKKyNkZWZpbmUgQ01QR1RfT1BDT0RFICAgICAweDMwMDcKKyNkZWZpbmUgQ01QSElfT1BDT0RF
ICAgICAweDMwMDYKKyNkZWZpbmUgQ01QSFNfT1BDT0RFICAgICAweDMwMDIKKyNkZWZpbmUgQ01Q
UExfT1BDT0RFICAgICAweDQwMTUKKyNkZWZpbmUgQ01QUFpfT1BDT0RFICAgICAweDQwMTEKKyNk
ZWZpbmUgQ01QU1RSX09QQ09ERSAgICAweDIwMEMKKworI2RlZmluZSBEVF9PUENPREUgICAgICAg
IDB4NDAxMAorCisKKyNkZWZpbmUgRkNNUEVRX09QQ09ERSAgICAweEYwMDQKKyNkZWZpbmUgRkNN
UEdUX09QQ09ERSAgICAweEYwMDUKKyNkZWZpbmUgRENNUEVRX09QQ09ERSAgICAweEYwMDUKKyNk
ZWZpbmUgRENNUEdUX09QQ09ERSAgICAweEYwMDQKKworI2RlZmluZSBGTU9WX09QQ09ERSAgICAg
IDB4RjAwQworI2RlZmluZSBETU9WX09QQ09ERSAgICAgICAgICAgICAgICAgMHgxRTAxOQorI2Rl
ZmluZSBETU9WX1dSSVRFX1IwUk5fT1BDT0RFICAgICAgMHgxRTAwRgorI2RlZmluZSBETU9WX1dS
SVRFX1IwUk5fT1BDT0RFICAgICAgMHgxRTAwRgorI2RlZmluZSBETU9WX1JFQURfUjBSTl9PUENP
REUgICAgICAgMHgxRTAwRAorCisKKyNkZWZpbmUgRkFERF9PUENPREUgICAgICAweEYwMDAKKyNk
ZWZpbmUgRk1VTF9PUENPREUgICAgICAweEYwMDIKKyNkZWZpbmUgRlNVQl9PUENPREUgICAgICAw
eEYwMDEKKyNkZWZpbmUgRkRJVl9PUENPREUgICAgICAweEYwMDMKKworI2RlZmluZSBGTkVHX09Q
Q09ERSAgICAgIDB4RjA0RAorCisKKyNkZWZpbmUgSk1QX09QQ09ERSAgICAgICAweDQwMkIKKyNk
ZWZpbmUgSlNSX09QQ09ERSAgICAgICAweDQwMEIKKworCisjZGVmaW5lIExEU1BSX09QQ09ERSAg
ICAgMHg0MDJBCisjZGVmaW5lIExEU0xQUl9PUENPREUgICAgMHg0MDI2CisKKyNkZWZpbmUgTU9W
X09QQ09ERSAgICAgICAweDYwMDMKKyNkZWZpbmUgTU9WSU1NX09QQ09ERSAgICAweEUwMDAKKwor
I2RlZmluZSBNT1ZCX1dSSVRFX1JOX09QQ09ERSAgICAgIDB4MjAwMAorI2RlZmluZSBNT1ZCX1dS
SVRFX1JOREVDX09QQ09ERSAgIDB4MjAwNAorI2RlZmluZSBNT1ZCX1dSSVRFX1IwUk5fT1BDT0RF
ICAgIDB4MDAwNAorI2RlZmluZSBNT1ZCX1dSSVRFX09GRkdCUl9PUENPREUgIDB4QzAwMAorI2Rl
ZmluZSBNT1ZCX1dSSVRFX09GRlJOX09QQ09ERSAgIDB4ODAwMAorCisjZGVmaW5lIE1PVkJfUkVB
RF9STV9PUENPREUgICAgICAweDYwMDAKKyNkZWZpbmUgTU9WQl9SRUFEX1JNSU5DX09QQ09ERSAg
IDB4NjAwNAorI2RlZmluZSBNT1ZCX1JFQURfUjBSTV9PUENPREUgICAgMHgwMDBDCisjZGVmaW5l
IE1PVkJfUkVBRF9PRkZHQlJfT1BDT0RFICAweEM0MDAKKyNkZWZpbmUgTU9WQl9SRUFEX09GRlJN
X09QQ09ERSAgIDB4ODQwMAorCisjZGVmaW5lIE1PVkxfV1JJVEVfUk5fT1BDT0RFICAgICAgMHgy
MDAyCisjZGVmaW5lIE1PVkxfV1JJVEVfUk5ERUNfT1BDT0RFICAgMHgyMDA2CisjZGVmaW5lIE1P
VkxfV1JJVEVfUjBSTl9PUENPREUgICAgMHgwMDA2CisjZGVmaW5lIE1PVkxfV1JJVEVfT0ZGR0JS
X09QQ09ERSAgMHhDMjAwCisjZGVmaW5lIE1PVkxfV1JJVEVfT0ZGUk5fT1BDT0RFICAgMHgxMDAw
CisKKyNkZWZpbmUgTU9WTF9SRUFEX1JNX09QQ09ERSAgICAgIDB4NjAwMgorI2RlZmluZSBNT1ZM
X1JFQURfUk1JTkNfT1BDT0RFICAgMHg2MDA2CisjZGVmaW5lIE1PVkxfUkVBRF9SMFJNX09QQ09E
RSAgICAweDAwMEUKKyNkZWZpbmUgTU9WTF9SRUFEX09GRkdCUl9PUENPREUgIDB4QzYwMAorI2Rl
ZmluZSBNT1ZMX1JFQURfT0ZGUENfT1BDT0RFICAgMHhEMDAwCisjZGVmaW5lIE1PVkxfUkVBRF9P
RkZSTV9PUENPREUgICAweDUwMDAKKyNkZWZpbmUgTU9WV19XUklURV9STl9PUENPREUgICAgIDB4
MjAwMQorI2RlZmluZSBNT1ZXX1JFQURfUk1fT1BDT0RFICAgICAgMHg2MDAxCisjZGVmaW5lIE1P
VldfUkVBRF9SMFJNX09QQ09ERSAgICAweDAwMEQKKyNkZWZpbmUgTU9WV19SRUFEX09GRlBDX09Q
Q09ERSAgIDB4OTAwMAorCisjZGVmaW5lIE1PVkFfUkVBRF9PRkZQQ19PUENPREUgIDB4QzcwMAor
I2RlZmluZSBNT1ZUX09QQ09ERSAgICAgICAgICAgICAweDAwMjkKKworI2RlZmluZSBNVUxMX09Q
Q09ERSAgICAgICAgICAgICAweDAwMDcKKyNkZWZpbmUgU1RTTUFDTF9PUENPREUgICAgICAgICAg
MHgwMDFBCisjZGVmaW5lIFNUU01BQ0hfT1BDT0RFICAgICAgICAgIDB4MDAwQQorI2RlZmluZSBE
TVVMU0xfT1BDT0RFICAgICAgICAgICAweDMwMEQKKworI2RlZmluZSBORUdfT1BDT0RFICAgICAg
ICAgICAgICAweDYwMEIKKyNkZWZpbmUgTkVHQ19PUENPREUgICAgICAgICAgICAgMHg2MDBBCisK
KyNkZWZpbmUgUlRTX09QQ09ERSAgICAgICAgICAgICAgMHgwMDBCCisjZGVmaW5lIE5PVF9PUENP
REUgICAgICAgICAgICAgIDB4NjAwNworCisjZGVmaW5lIE9SX09QQ09ERSAgICAgICAgICAgICAg
IDB4MjAwQgorI2RlZmluZSBPUklNTV9PUENPREUgICAgICAgICAgICAweENCMDAKKyNkZWZpbmUg
T1JCSU1NX09QQ09ERSAgICAgICAgICAgMHhDRjAwCisKKworI2RlZmluZSBTRVRTX09QQ09ERSAg
ICAgICAgICAgICAweDAwNTgKKyNkZWZpbmUgU0VUVF9PUENPREUgICAgICAgICAgICAgMHgwMDE4
IAorI2RlZmluZSBTSEFEX09QQ09ERSAgICAgICAgICAgICAweDQwMEMKKyNkZWZpbmUgU0hBTF9P
UENPREUgICAgICAgICAgICAgMHg0MDIwCisjZGVmaW5lIFNIQVJfT1BDT0RFICAgICAgICAgICAg
IDB4NDAyMQorI2RlZmluZSBTSExEX09QQ09ERSAgICAgICAgICAgICAweDQwMEQKKyNkZWZpbmUg
U0hMTF9PUENPREUgICAgICAgICAgICAgMHg0MDAwCisjZGVmaW5lIFNITEwyX09QQ09ERSAgICAg
ICAgICAgIDB4NDAwOAorI2RlZmluZSBTSExMOF9PUENPREUgICAgICAgICAgICAweDQwMTgKKyNk
ZWZpbmUgU0hMTDE2X09QQ09ERSAgICAgICAgICAgMHg0MDI4CisKKyNkZWZpbmUgU0hMUl9PUENP
REUgICAgICAgICAgICAgMHg0MDAxCisjZGVmaW5lIFNITFIyX09QQ09ERSAgICAgICAgICAgIDB4
NDAwOQorI2RlZmluZSBTSExSOF9PUENPREUgICAgICAgICAgICAweDQwMTkKKyNkZWZpbmUgU0hM
UjE2X09QQ09ERSAgICAgICAgICAgMHg0MDI5CisKKworI2RlZmluZSBTVFNQUl9PUENPREUgICAg
ICAgICAgICAweDAwMkEKKyNkZWZpbmUgU1RTTFBSX09QQ09ERSAgICAgICAgICAgMHg0MDIyCisj
ZGVmaW5lIEZMT0FUX09QQ09ERSAgICAgICAgICAgIDB4RjAyRAorCisjZGVmaW5lIFNVQl9PUENP
REUgICAgICAgICAgICAgIDB4MzAwOAorI2RlZmluZSBTVUJDX09QQ09ERSAgICAgICAgICAgICAw
eDMwMEEKKyNkZWZpbmUgU1VCVl9PUENPREUgICAgICAgICAgICAgMHgzMDBCCisjZGVmaW5lIE1V
TExfT1BDT0RFICAgICAgICAgICAgIDB4MDAwNworCisjZGVmaW5lIFRTVF9PUENPREUgICAgICAg
ICAgICAgIDB4MjAwOAorI2RlZmluZSBUU1RJTU1fT1BDT0RFICAgICAgICAgICAweEM4MDAKKyNk
ZWZpbmUgVFNUQl9PUENPREUgICAgICAgICAgICAgMHhDQzAwCisKKyNkZWZpbmUgRVhUVVdfT1BD
T0RFICAgICAgICAgICAgMHg2MDBECisKKyNkZWZpbmUgWE9SX09QQ09ERSAgICAgICAgICAgICAg
MHgyMDBBCisjZGVmaW5lIFhPUklNTV9PUENPREUgICAgICAgICAgIDB4Q0EwMAorI2RlZmluZSBY
T1JCX09QQ09ERSAgICAgICAgICAgICAweENFMDAKKworI2RlZmluZSBGTU9WU19SRUFEX1JNX0lO
Q19PUENPREUgICAgICAgIDB4RjAwOQorI2RlZmluZSBGTU9WU19SRUFEX1JNX09QQ09ERSAgICAg
ICAgICAgIDB4RjAwOAorI2RlZmluZSBGTU9WU19SRUFEX1IwUk1fT1BDT0RFICAgICAgICAgIDB4
RjAwNgorI2RlZmluZSBGTU9WU19XUklURV9STl9PUENPREUgICAgICAgICAgIDB4RjAwQQorI2Rl
ZmluZSBGTU9WU19XUklURV9STl9ERUNfT1BDT0RFICAgICAgIDB4RjAwQgorI2RlZmluZSBGTkVH
X09QQ09ERSAgICAgICAgICAgICAgICAgICAgIDB4RjA0RAorI2RlZmluZSBGTU9WX09QQ09ERSAg
ICAgICAgICAgICAgICAgICAgIDB4RjAwQworI2RlZmluZSBGTU9WU19XUklURV9SMFJOX09QQ09E
RSAgICAgICAgIDB4RjAwNworCisjZGVmaW5lIExEU19STV9GUFVMX09QQ09ERSAgICAgICAgICAg
ICAgMHg0MDVBCisjZGVmaW5lIEZMRFNfRlJNX0ZQVUxfT1BDT0RFICAgICAgICAgICAgMHhGMDFE
CisjZGVmaW5lIFNUU19GUFVMX1JOX09QQ09ERSAgICAgICAgICAgICAgMHgwMDVBCisjZGVmaW5l
IEZTVFNfRlBVTF9GUk5fT1BDT0RFICAgICAgICAgICAgMHhGMDBECisKKyNkZWZpbmUgTERTRlBT
Q1JfT1BDT0RFICAgICAgICAgICAgICAgICAweDQwNkEKKyNkZWZpbmUgU1RTRlBTQ1JfT1BDT0RF
ICAgICAgICAgICAgICAgICAweDAwNkEKKyNkZWZpbmUgTERTUk1GUFVMX09QQ09ERSAgICAgICAg
ICAgICAgICAweDQwNUEKKyNkZWZpbmUgRlNUU0ZQVUxGUk5fT1BDT0RFICAgICAgICAgICAgICAw
eEYwMEQKKworI2RlZmluZSBDTFJUX09QQ09ERSA4CisgIAorI2RlZmluZSBTRUNPTkRfNF9CSVRT
KHgpICAgICgoKHgpICYgMHhmMDApID4+IDgpCisjZGVmaW5lIFRISVJEXzRfQklUUyh4KSAgICAg
KCgoeCkgJiAweGYwKSA+PiA0KQorI2RlZmluZSBGT1VSVEhfNF9CSVRTKHgpICAgICgoeCkgJiAw
eGYpCisjZGVmaW5lIFNFQ09ORF84X0JJVFMoeCkgICAgKCh4KSAmIDB4ZmYpCisjZGVmaW5lIFJJ
R0hUXzEyX0JJVFMoeCkgICAgKCh4KSAmIDB4ZmZmKQorI2RlZmluZSBTRUNPTkRfRF8zX0JJVFMo
eCkgICAgKCgoeCkgJiAweEUwMCkgPj4gOSkKKyNkZWZpbmUgVEhJUkRfRF8zX0JJVFMoeCkgICAg
ICgoKHgpICYgMHhFMCkgPj4gNSkKKworCisjZGVmaW5lIEFMSUdOVVAoeCkgICAgICAoKChpbnQp
KHgpICsgICAoc2l6ZW9mKGludCkgLSAxKSkgJiAofihzaXplb2YoaW50KSAtIDEpKSkKKyNkZWZp
bmUgQUxJR05ETih4KSAgICAgICgoaW50KSh4KSAmICh+KHNpemVvZihpbnQpIC0gMSkpKQorI2Rl
ZmluZSBOT1RBTElHTkVEKHgpICAgKChpbnQpKHgpJihzaXplb2YoaW50KSAtIDEpKQorCisjZGVm
aW5lIE1BU0s0ICAgICAoKDB4ZiA8PCAxMikgfCAweGYpCisjZGVmaW5lIE1BU0szICAgICAoKDB4
ZiA8PCAxMikgfCAweGZmKQorI2RlZmluZSBNQVNLMiAgICAgKDB4ZmYgPDwgOCkKKyNkZWZpbmUg
TUFTSzEgICAgICgweGYgPDwgMTIpCisKKyNpbmNsdWRlICJBc3NlbWJsZXJCdWZmZXIuaCIKKyNp
bmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK25hbWVzcGFjZSBTSDQgeworCit0
eXBlZGVmIGVudW0geworICAgICAgICBSMCAgPSAwLAorICAgICAgICBSMSAgPSAxLAorICAgICAg
ICBSMiAgPSAyLAorICAgICAgICBSMyAgPSAzLAorICAgICAgICBSNCAgPSA0LAorICAgICAgICBS
NSAgPSA1LAorICAgICAgICBSNiAgPSA2LAorICAgICAgICBSNyAgPSA3LAorICAgICAgICBSOCAg
PSA4LAorICAgICAgICBSOSAgPSA5LAorICAgICAgICBSMTAgPSAxMCwKKyAgICAgICAgUjExID0g
MTEsCisgICAgICAgIFIxMiA9IDEyLAorICAgICAgICBSMTMgPSAxMywKKyAgICAgICAgUjE0ID0g
MTQsCisgICAgICAgIFIxNSA9IDE1LAorICAgICAgICBTUCAgPSBSMTUsCisgICAgICAgIEZQICA9
IFIxNCwKKyAgICAgICAgLy8gUHNldWRvLXJlZ2lzdGVyIGZvciBQQyAmIFBSCisgICAgICAgIFBD
ICA9IDE2LAorICAgICAgICBQUiAgPSAxNywKKyAgICAgICAgICAKKyAgICAgICAgVW5rbm93biA9
IC0xCit9IFJlZ2lzdGVySUQ7CisgICAgCit0eXBlZGVmIGVudW0geworICAgICAgICBGUjAgID0g
MCwKKyAgICAgICAgRlIxICA9IDEsCisgICAgICAgIEZSMiAgPSAyLAorICAgICAgICBGUjMgID0g
MywKKyAgICAgICAgRlI0ICA9IDQsCisgICAgICAgIEZSNSAgPSA1LAorICAgICAgICBGUjYgID0g
NiwKKyAgICAgICAgRlI3ICA9IDcsCisgICAgICAgIEZSOCAgPSA4LAorICAgICAgICBGUjkgID0g
OSwKKyAgICAgICAgRlIxMCA9IDEwLAorICAgICAgICBGUjExID0gMTEsCisgICAgICAgIEZSMTIg
PSAxMiwKKyAgICAgICAgRlIxMyA9IDEzLAorICAgICAgICBGUjE0ID0gMTQsCisgICAgICAgIEZS
MTUgPSAxNSwKKyAgICAgICAgLypkb3VibGUgKi8KKyAgICAgICAgRFIwICA9IDAsCisgICAgICAg
IERSMiAgPSAyLAorICAgICAgICBEUjQgID0gNCwKKyAgICAgICAgRFI2ICA9IDYsCisgICAgICAg
IERSOCAgPSA4LAorICAgICAgICBEUjEwID0gMTAsCisgICAgICAgIERSMTIgPSAxMiwKKyAgICAg
ICAgRFIxNCA9IDE0LAorCit9IEZQUmVnaXN0ZXJJRDsKK30KKworY2xhc3MgU0g0QXNzZW1ibGVy
IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIFNINDo6UmVnaXN0ZXJJRCBSZWdpc3RlcklEOworICAg
IHR5cGVkZWYgU0g0OjpGUFJlZ2lzdGVySUQgRlBSZWdpc3RlcklEOworICAgIAorICAgIHN0YXRp
YyBjb25zdCBSZWdpc3RlcklEIHNjcmF0Y2ggPSBTSDQ6OlIxMDsKKyAgICBzdGF0aWMgY29uc3Qg
UmVnaXN0ZXJJRCBzY3JhdGNoMSA9IFNINDo6UjExOworICAgIGludCBjbGFpbXNjcmF0Y2hSZWc7
CisgICAgICAgCisgICAgc3RydWN0IENvbnN0YW50RW50cnkgeworICAgICAgICBpbnQgY29uc3Rh
bnQ7CisgICAgICAgIGludCBvZmZzZXQ7ICAgICAgIAorICAgICAgICAKKyAgICAgICAgQ29uc3Rh
bnRFbnRyeSogbmV4dDsKKyAgICB9OworICAgIAorICAgIENvbnN0YW50RW50cnkqIGNvbnN0YW50
UG9vbDsKKyAgICAKKyAgICBTSDRBc3NlbWJsZXIoKQorICAgIHsKKyAgICAgICAgY29uc3RhbnRQ
b29sID0gMDsKKyAgICAgICAgY2xhaW1zY3JhdGNoUmVnID0gMHgwOworICAgIH0gIAorICAgIAor
ICAgIC8qIFNINCBjb25kaXRpb24gY29kZXMgKi8KKyAgICAgICAgdHlwZWRlZiBlbnVtIHsKKyAg
ICAgICAgICAgIEVRID0gMHgwLCAvLyBFcXVhbAorICAgICAgICAgICAgTkUgPSAweDEsIC8vIE5v
dCBFcXVhbAorICAgICAgICAgICAgSFMgPSAweDIsIC8vIFVuc2lnZW5kIEdyZWF0ZXIgVGhhbiBl
cXVhbAorICAgICAgICAgICAgSEkgPSAweDMsIC8vIFVuc2lnZW5kIEdyZWF0ZXIgVGhhbgorICAg
ICAgICAgICAgTFMgPSAweDQsIC8vIFVuc2lnZW5kIExvd2VyIG9yIFNhbWUKKyAgICAgICAgICAg
IExJID0gMHg1LCAvLyBVbnNpZ2VuZCBMb3dlcgorICAgICAgICAgICAgR0UgPSAweDYsIC8vIEdy
ZWF0ZXIgb3IgRXF1YWwKKyAgICAgICAgICAgIExUID0gMHg3LCAvLyBMZXNzIFRoYW4KKyAgICAg
ICAgICAgIEdUID0gMHg4LCAvLyBHcmVhdGVyIFRoYW4KKyAgICAgICAgICAgIExFID0gMHg5LCAv
LyBMZXNzIG9yIEVxdWFsCisgICAgICAgICAgICBPRiA9IDB4YSwgLy8gT3ZlckZsb3cKKyAgICAg
ICAgfSBDb25kaXRpb247CisgICAgICAgIAorICAgIC8vIE9wYXF1ZSBsYWJlbCB0eXBlcworICAg
IAorcHVibGljOgorCisgICAgY2xhc3MgSm1wU3JjIHsKKyAgICAgICAgZnJpZW5kIGNsYXNzIFNI
NEFzc2VtYmxlcjsKKyAgICBwdWJsaWM6CisgICAgICAgIEptcFNyYygpCisgICAgICAgICAgICA6
IG1fb2Zmc2V0KC0xKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgIHByaXZhdGU6CisgICAg
ICAgIEptcFNyYyhpbnQgb2Zmc2V0KQorICAgICAgICAgICAgOiBtX29mZnNldChvZmZzZXQpCisg
ICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIGludCBtX29mZnNldDsKKyAgICB9OworICAg
IAorICAgIGNsYXNzIEptcERzdCB7CisgICAgICAgIGZyaWVuZCBjbGFzcyBTSDRBc3NlbWJsZXI7
CisgICAgcHVibGljOgorICAgICAgICBKbXBEc3QoKQorICAgICAgICAgICAgOiBtX29mZnNldCgt
MSkKKyAgICAgICAgICAgICwgbV91c2VkKGZhbHNlKQorICAgICAgICB7CisgICAgICAgIH0KKwor
ICAgICAgICBib29sIGlzVXNlZCgpIGNvbnN0IHsgcmV0dXJuIG1fdXNlZDsgfQorICAgICAgICB2
b2lkIHVzZWQoKSB7IG1fdXNlZCA9IHRydWU7IH0KKworCisgICAgcHJpdmF0ZToKKyAgICAgICAg
Sm1wRHN0KGludCBvZmZzZXQpCisgICAgICAgICAgICA6IG1fb2Zmc2V0KG9mZnNldCkKKyAgICAg
ICAgICAgICwgbV91c2VkKGZhbHNlKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBp
bnQgbV9vZmZzZXQgOiAzMTsKKyAgICAgICAgYm9vbCBtX3VzZWQgOiAxOworICAgIH07CisKKyNk
ZWZpbmUgR2V0QWRkcmVzcyhvZmZzZXQpIChyZWludGVycHJldF9jYXN0PGludD4oZGF0YSgpKSAr
IG9mZnNldCkKKyAgICAKKyAgICAvLyBMaXN0IG9mIHRoZSBjb25zdGFudHMKKyAgICAKKyAgICAK
KyAgICAvKiBBbiBlbnRyeSBpbiB0aGUgTGlzdCBvZiB0aGUgY29uc3RhbnRzLiAqLworICAgIAor
ICAgCisgICAgaW50IENhbkxvYWRDb25zdGFudChpbnQgVG9PZmZzZXQpIAorICAgIHsKKyAgICAg
ICAgaWYgKCFjb25zdGFudFBvb2wpCisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgCisg
ICAgICAgIGludCBmcm9tT2Zmc2V0ID0gY29uc3RhbnRQb29sLT5vZmZzZXQ7CisgICAgICAgIGlu
dCBtYXhEaWZmID0gMjU1ICogMjsKKyAgICAgICAgaW50IG9mZnNldCA9IChUb09mZnNldCAtIGZy
b21PZmZzZXQpOworICAgICAgICBpbnQgcmVzID0gKChvZmZzZXQgPj0gMCkgJiYgKG9mZnNldCA8
PSBtYXhEaWZmKSk7CisgICAgICAgIHJldHVybiByZXM7CisgICAgfQorICAgIAorICAgIAorICAg
IHZvaWQgQWRkQ29uc3RhbnQoaW50IGNvbnN0YW50LCBSZWdpc3RlcklEIGRzdCkKKyAgICB7Cisg
ICAgICAgIENvbnN0YW50RW50cnkqIG5ld0VudHJ5LCAqdG1wRW50OworICAgICAgICAKKyAgICAg
ICAgbmV3RW50cnkgPSAoQ29uc3RhbnRFbnRyeSopIGZhc3RNYWxsb2Moc2l6ZW9mKENvbnN0YW50
RW50cnkpKTsKKyAgICAgICAgbmV3RW50cnktPmNvbnN0YW50ID0gY29uc3RhbnQ7CisgICAgICAg
IG5ld0VudHJ5LT5vZmZzZXQgPSBzaXplKCk7CisgICAgICAgIAorICAgICAgICBuZXdFbnRyeS0+
bmV4dCA9IDA7CisgICAgICAgIAorICAgICAgICBpZiAoIWNvbnN0YW50UG9vbCkgeyAgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGNvbnN0YW50UG9vbCA9IG5ld0VudHJ5OworICAgICAgICAgICAg
ICAgICAgICAgICAgCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0bXBFbnQgPSBjb25z
dGFudFBvb2w7CisgICAgICAgICAgICB3aGlsZSAodG1wRW50LT5uZXh0KQorICAgICAgICAgICAg
ICAgIHRtcEVudCA9IHRtcEVudC0+bmV4dDsKKworICAgICAgICAgICAgdG1wRW50LT5uZXh0ID0g
bmV3RW50cnk7CisgICAgICAgIH0KKyAgICAgCisgICAgfQorICAgIAorICAgIHZvaWQgcmVwYXRj
aENvbnN0YW50KGludCBvZmZzZXQsIGludCBjb25zdGFudCwgaW50IG5ld29mZnNldCA9IDApIAor
ICAgIHsKKyAgICAgICAgQVNTRVJUKGNvbnN0YW50UG9vbCk7CisgICAgICAgIENvbnN0YW50RW50
cnkqIHRtcEVudCA9IGNvbnN0YW50UG9vbDsKKyAgICAgICAgCisgICAgICAgIHdoaWxlICgodG1w
RW50LT5vZmZzZXQgIT0gb2Zmc2V0KSAmJiAodG1wRW50KSkKKyAgICAgICAgICAgIHRtcEVudCA9
IHRtcEVudC0+bmV4dDsKKyAgICAgICAgQVNTRVJUKHRtcEVudCk7CisgICAgICAgIAorICAgICAg
ICB0bXBFbnQtPmNvbnN0YW50ID0gY29uc3RhbnQ7CisgICAgICAgIGlmIChuZXdvZmZzZXQpCisg
ICAgICAgICAgICB0bXBFbnQtPm9mZnNldCA9IG5ld29mZnNldDsKKyAgICB9CisgICAgCisgICAg
dm9pZCBEdW1wQ29uc3RhbnRMaXN0KGJvb2wgYnJhbmNoQXJvdW5kID0gdHJ1ZSkKKyAgICB7Cisg
ICAgICAgIENvbnN0YW50RW50cnkqIEVudHJ5ID0gY29uc3RhbnRQb29sOworICAgICAgICBDb25z
dGFudEVudHJ5KiB0bXBFbnRyeTsKKworICAgICAgICBpbnQgb2Zmc2V0OworICAgICAgICAgICAg
ICAgCisgICAgICAgIGlmICghRW50cnkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICAgCisgICAgICAgIHVpbnQxNl90KiBpbnN0cnVjdGlvblB0cjsKKyAgICAgICAgdWludDE2X3Qg
aW5zdHJ1Y3Rpb247IAorICAgICAgICBpbnQgb2Zmc2V0QnJhID0gc2l6ZSgpOyAKKworICAgICAg
ICAvKiBCcmFuY2ggYXJvdW5kIHRoZSBjb25zdGFudHMgKi8KKyAgICAgICAgaWYgKGJyYW5jaEFy
b3VuZCkgeworICAgICAgICAgICAgYnJhbmNoKEJSQV9PUENPREUsIDApOworICAgICAgICAgICAg
bm9wKCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChOT1RBTElHTkVEKCh1aW50
MTZfdCopR2V0QWRkcmVzcyhzaXplKCkpKSkKKyAgICAgICAgICAgIG5vcCgpOyAKKyAgICAgICAg
CisgICAgICAgIHdoaWxlIChFbnRyeSkgeworICAgICAgICAgICAgdG1wRW50cnkgPSBFbnRyeTsK
KyAgICAgICAgICAgIGltbWVkaWF0ZTMyKEVudHJ5LT5jb25zdGFudCk7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIC8qIH4gbW92bF9tcihPZmZzZXQsIFBDLCBkc3QpOyovCisgICAgICAgICAg
ICBpbnN0cnVjdGlvblB0ciA9ICh1aW50MTZfdCopIEdldEFkZHJlc3MoRW50cnktPm9mZnNldCk7
CisgICAgICAgICAgICBpbnN0cnVjdGlvbiA9ICppbnN0cnVjdGlvblB0cjsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgb2Zmc2V0ID0gKGludClHZXRBZGRyZXNzKHNpemUoKSkgLSAoKChpbnQp
aW5zdHJ1Y3Rpb25QdHIgJiB+MHgwMykgKyA4KTsKKyAgICAgICAgICAgIGluc3RydWN0aW9uICY9
IDB4ZmYwMDsKKyAgICAgICAgICAgIG9mZnNldCAmPSAweDAzZmY7CisgICAgICAgICAgICBpbnN0
cnVjdGlvbiB8PSAob2Zmc2V0ID4+IDIpOworICAgICAgICAgICAgKmluc3RydWN0aW9uUHRyID0g
aW5zdHJ1Y3Rpb247CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEVudHJ5ID0gRW50cnktPiBu
ZXh0OworICAgICAgICAgICAgZmFzdEZyZWUodG1wRW50cnkpOyAgICAgICAgCisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIGNvbnN0YW50UG9vbCA9IDA7CisgICAgCisgICAgICAgIGlmIChi
cmFuY2hBcm91bmQpIHsKKyAgICAgICAgCisgICAgICAgICAgICBpbnN0cnVjdGlvblB0ciA9ICh1
aW50MTZfdCopR2V0QWRkcmVzcyhvZmZzZXRCcmEpOworICAgICAgICAgICAgaW5zdHJ1Y3Rpb24g
PSAqaW5zdHJ1Y3Rpb25QdHI7CisgICAgICAgIAorICAgICAgICAgICAgb2Zmc2V0ID0gKChpbnQp
R2V0QWRkcmVzcyhzaXplKCkpIC0gKGludClpbnN0cnVjdGlvblB0cikgLSA0OworICAgICAgICAg
ICAgaW5zdHJ1Y3Rpb24gJj0gMHhmMDAwOworICAgICAgICAgICAgb2Zmc2V0ICY9IDB4MWZmZjsK
KyAgICAgICAgICAgIGluc3RydWN0aW9uIHw9IChvZmZzZXQgPj4gMSk7CisgICAgICAgICAgICAq
aW5zdHJ1Y3Rpb25QdHIgPSBpbnN0cnVjdGlvbjsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAg
ICB2b2lkIExvYWRDb25zdGFudChpbnQgY29uc3RhbnQsIFJlZ2lzdGVySUQgZHN0LCBib29sIHdp
dGhwYXRjaCA9IGZhbHNlLCBib29sIG5lZWRkdW1wID0gdHJ1ZSkKKyAgICB7CisgICAgICAgIGlm
IChuZWVkZHVtcCAmJiAhQ2FuTG9hZENvbnN0YW50KHNpemUoKSkpCisgICAgICAgICAgICBEdW1w
Q29uc3RhbnRMaXN0KCk7CisgICAgICAgIAorICAgICAgICBpZiAoKGNvbnN0YW50IDw9MTI3KSAm
JiAoY29uc3RhbnQgPj0gLTEyOCkgJiYgKCF3aXRocGF0Y2gpKQorICAgICAgICAgICAgbW92X2lt
bTgoY29uc3RhbnQsIGRzdCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgQWRkQ29uc3Rh
bnQoY29uc3RhbnQsIGRzdCk7CisgICAgICAgICAgICBtb3ZsX21yKDAsIFNINDo6UEMsIGRzdCk7
CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgYm9vbCBJc0ltbWVkaWF0ZShpbnQgY29uc3Rh
bnQpIAorICAgIHsgICAgICAgIAorICAgICAgICBpZiAoKGNvbnN0YW50IDw9MTI3KSAmJiAoY29u
c3RhbnQgPj0gLTEyOCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKworCisgICAgUmVnaXN0ZXJJRCBjbGFpbV9zY3JhdGNoKCkK
KyAgICB7CisgICAgICAgICAvKiAxMDEgPT4gc2NyYXRjaDEgcmVsZWFzZWQgKi8KKyAgICAgICAg
IEFTU0VSVCgoY2xhaW1zY3JhdGNoUmVnICE9IDB4MykpOworICAgICAgICAgUmVnaXN0ZXJJRCBz
Y3JhdGNoUmVnID0gc2NyYXRjaDsKKworICAgICAgICAgaWYgKCEoY2xhaW1zY3JhdGNoUmVnICYg
MHgxKSkKKyAgICAgICAgICAgICBjbGFpbXNjcmF0Y2hSZWcgPSAoY2xhaW1zY3JhdGNoUmVnIHwg
MHgxKTsKKyAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIGNsYWltc2NyYXRjaFJlZyA9IChj
bGFpbXNjcmF0Y2hSZWcgfCAweDIpOworICAgICAgICAgICAgIHNjcmF0Y2hSZWcgPSBzY3JhdGNo
MTsKKyAgICAgICAgIH0KKyAgICAgICAgIHJldHVybiBzY3JhdGNoUmVnOworICAgICB9CisKKyAg
ICAgdm9pZCByZWxlYXNlX3NjcmF0Y2goUmVnaXN0ZXJJRCBzY3JhdGNoUikgCisgICAgIHsgICAK
KyAgICAgICAgIGlmIChzY3JhdGNoUiA9PSAgc2NyYXRjaCkKKyAgICAgICAgICAgICBjbGFpbXNj
cmF0Y2hSZWcgPSAoY2xhaW1zY3JhdGNoUmVnICYgMHgyKTsKKyAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICBjbGFpbXNjcmF0Y2hSZWcgPSAoY2xhaW1zY3JhdGNoUmVnICYgMHgxKTsKKyAgICAg
fSAKKworICAgIC8vIFN0YWNrIG9wZXJhdGlvbnM6CisKKyAgICB2b2lkIHB1c2hfcihSZWdpc3Rl
cklEIHJlZykKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYzsKKyAgICAgICAgCisgICAgICAg
IGlmIChyZWcgPT0gU0g0OjpQUikgeworICAgICAgICAgICAgLyogU1RTLkwgUFIsIEAtUiVkICov
CisgICAgICAgICAgICBvcGMgPSBHRVRPUENPREUyKFNUU0xQUl9PUENPREUsIFNINDo6U1ApOyAg
ICAgICAgICAgIAorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLyogbW92LmwgcmVnLCBA
LVNQICovCisgICAgICAgICAgICBvcGMgPSBHRVRPUENPREUxKE1PVkxfV1JJVEVfUk5ERUNfT1BD
T0RFLCBTSDQ6OlNQLCByZWcpOworICAgICAgICB9CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsK
KyAgICB9CisKKyAgICB2b2lkIHBvcF9yKFJlZ2lzdGVySUQgcmVnKQorICAgIHsKKyAgICAgICAg
dWludDE2X3Qgb3BjOworICAgICAgICAKKyAgICAgICAgaWYgKHJlZyA9PSBTSDQ6OlBSKSB7Cisg
ICAgICAgICAgICAvKiBMRFMuTCBAUiVkKywgUFIqLyAKKyAgICAgICAgICAgIG9wYyA9IEdFVE9Q
Q09ERTIoTERTTFBSX09QQ09ERSwgU0g0OjpTUCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAvKiBtb3YubCBAK3NyYywgZGVzdDsqLyAKKyAgICAgICAgICAgIG9wYyA9IEdFVE9QQ09E
RTEoTU9WTF9SRUFEX1JNSU5DX09QQ09ERSwgcmVnLCBTSDQ6OlNQKTsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAgIHZvaWQgcHVzaF9p
MzIoaW50IGltbSkKKyAgICB7CisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1fc2NyYXRj
aCgpOworICAgICAgICBMb2FkQ29uc3RhbnQoKGludClpbW0sIHNjcik7CisgICAgICAgIHB1c2hf
cihzY3IpOworICAgICAgICByZWxlYXNlX3NjcmF0Y2goc2NyKTsKKyAgICB9CisKKyAgICB2b2lk
IHB1c2hfbShpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UpCisgICAgeworICAgICAgICBpZiAo
KG9mZnNldCA8IDApIHx8IChvZmZzZXQgPj0gNjQpKSB7CisgICAgICAgICAgIFJlZ2lzdGVySUQg
c2NyID0gY2xhaW1fc2NyYXRjaCgpOyAKKyAgICAgICAgICAgIAorICAgICAgICAgICAgTG9hZENv
bnN0YW50KChpbnQpb2Zmc2V0LCBzY3IpOworICAgICAgICAgICAgYWRkbF9ycihiYXNlLCBzY3Ip
OworICAgICAgICAgICAgbW92bF9tcihzY3IsIFNINDo6U1ApOworICAgICAgICAgICAgCisgICAg
ICAgICAgICByZWxlYXNlX3NjcmF0Y2goc2NyKTsKKyAgICAgICAgfSBlbHNlIGlmIChvZmZzZXQp
IHsKKyAgICAgICAgICAgIG1vdmxfbXIob2Zmc2V0ID4+IDIsIGJhc2UsIFNINDo6U1ApOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgbW92bF9tcihiYXNlLCBTSDQ6OlNQKTsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgYWRkbF9pOHIoLTQsIFNINDo6U1ApOyAgICAgICAgCisg
ICAgfQorCisgICAgdm9pZCBwb3BfbShpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UpCisgICAg
eyAgICAgICAgIAorICAgICAgICBpZiAoKG9mZnNldCA8IDApIHx8IChvZmZzZXQgPj0gNjQpKSB7
CisgICAgICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltX3NjcmF0Y2goKTsKKyAgICAgICAg
ICAgIExvYWRDb25zdGFudCgoaW50KW9mZnNldCwgc2NyKTsKKyAgICAgICAgICAgIGFkZGxfcnIo
YmFzZSwgc2NyKTsKKyAgICAgICAgICAgIG1vdmxfcm0oU0g0OjpTUCwgc2NyKTsKKyAgICAgICAg
ICAgIHJlbGVhc2Vfc2NyYXRjaChzY3IpOworICAgICAgICB9IGVsc2UgaWYgKG9mZnNldCkgewor
ICAgICAgICAgICAgbW92bF9ybShTSDQ6OlNQLCBvZmZzZXQgPj4gMiwgYmFzZSk7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBtb3ZsX3JtKFNINDo6U1AsIGJhc2UpOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBhZGRsX2k4cig0LCBTSDQ6OlNQKTsKKyAgICB9CisgICAgCisg
ICAgdm9pZCBtb3Z0KFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3Bj
ID0gR0VUT1BDT0RFMihNT1ZUX09QQ09ERSwgZHN0KTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMp
OworICAgIH0KKworCisgICAgLy8gQXJpdGhtZXRpYyBvcGVyYXRpb25zOgorCisgICAgdm9pZCBh
ZGRsX3JyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIHVp
bnQxNl90IG9wYyA9IEdFVE9QQ09ERTEoQUREX09QQ09ERSwgZHN0LCBzcmMpOworICAgICAgICBv
bmVTaG9ydE9wKG9wYyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYWRkY2xfcnIoUmVnaXN0ZXJJ
RCBzcmMsIFJlZ2lzdGVySUQgZHN0KSAvLyBUYml0IHNldCBpZiBvdmVyZmxvdworICAgIHsKKyAg
ICAgICAgdWludDE2X3Qgb3BjID0gR0VUT1BDT0RFMShBRERDX09QQ09ERSwgZHN0LCBzcmMpOwor
ICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYWRkdmxfcnIo
UmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KSAvLyBUYml0IHNldCBpZiBvdmVyZmxvdwor
ICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gR0VUT1BDT0RFMShBRERWX09QQ09ERSwgZHN0
LCBzcmMpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfSAgICAgCisKKyAgICB2b2lk
IGFkZGxfaThyKGludCBpbW04LCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIEFTU0VS
VCgoaW1tOCA8PTEyNykgJiYgKGltbTggPj0gLTEyOCkpOworICAgICAgICAKKyAgICAgICAgdWlu
dDE2X3Qgb3BjID0gR0VUT1BDT0RFMyhBRERJTU1fT1BDT0RFLCBkc3QsIGltbTgpOworICAgICAg
ICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCBhbmRsX3JyKFJlZ2lzdGVySUQg
c3JjLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IEdFVE9Q
Q09ERTEoQU5EX09QQ09ERSwgZHN0LCBzcmMpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisK
KyAgICB9CisgICAgCisgICAgdm9pZCBhZGRsX2lyKGludCBpbW0sIFJlZ2lzdGVySUQgZHN0KQor
ICAgIHsKKyAgICAgICAgaWYgKElzSW1tZWRpYXRlKGltbSkpCisgICAgICAgICAgICBhZGRsX2k4
cihpbW0sIGRzdCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgUmVnaXN0ZXJJRCBzY3Ig
PSBjbGFpbV9zY3JhdGNoKCk7CisgICAgICAgICAgICBMb2FkQ29uc3RhbnQoKGludClpbW0sIHNj
cik7CisgICAgICAgICAgICB1aW50MTZfdCBvcGMgPSBHRVRPUENPREUxKEFERF9PUENPREUsIGRz
dCwgc2NyKTsKKyAgICAgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICAgICAgICAgIHJlbGVh
c2Vfc2NyYXRjaChzY3IpOyAgCisgICAgICAgIH0KKyAgICAgICAgICAgICAgCisgICAgfQorCisg
ICAgdm9pZCBhbmRsX2k4cihpbnQgaW1tOCwgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAg
ICBBU1NFUlQoKGltbTggPD0gMjU1KSAmJiAoaW1tOCA+PSAwKSk7CisgICAgICAgIEFTU0VSVChk
c3QgPT0gU0g0OjpSMCk7CisgICAgICAgIAorICAgICAgICB1aW50MTZfdCBvcGMgPSBHRVRPUENP
REU1KEFORElNTV9PUENPREUsIGltbTgpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAg
fQorICAgIAorICAgIHZvaWQgZGl2MWxfcnIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0
KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gR0VUT1BDT0RFMShESVYxX09QQ09ERSwg
ZHN0LCBzcmMpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisKKyAgICB9CisgICAgCisgICAg
dm9pZCBkaXYwbF9ycihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAg
ICAgICB1aW50MTZfdCBvcGMgPSBHRVRPUENPREUxKERJVjBfT1BDT0RFLCBkc3QsIHNyYyk7Cisg
ICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKworICAgIH0gICAgCisKKyAgICB2b2lkIG5vdGxfcihS
ZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICB1aW50MTZfdCBv
cGMgPSBHRVRPUENPREUxKE5PVF9PUENPREUsIGRzdCwgc3JjKTsKKyAgICAgICAgb25lU2hvcnRP
cChvcGMpOworICAgIH0KKworICAgIHZvaWQgb3JsX3JyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3Rl
cklEIGRzdCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IEdFVE9QQ09ERTEoT1JfT1BD
T0RFLCBkc3QsIHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKworICAgIH0KKworICAg
IHZvaWQgb3JsX2k4cihpbnQgaW1tOCwgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICBB
U1NFUlQoKGltbTggPD0gMjU1KSAmJiAoaW1tOCA+PSAwKSk7CisgICAgICAgIEFTU0VSVChkc3Qg
PT0gU0g0OjpSMCk7CisgICAgICAgIAorICAgICAgICB1aW50MTZfdCBvcGMgPSBHRVRPUENPREU1
KE9SSU1NX09QQ09ERSwgaW1tOCk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisK
KworICAgIHZvaWQgc3VibF9ycihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpCisgICAg
eworICAgICAgICAgdWludDE2X3Qgb3BjID0gR0VUT1BDT0RFMShTVUJfT1BDT0RFLCBkc3QsIHNy
Yyk7CisgICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorICAgIAorICAgIHZvaWQgc3Vi
dmxfcnIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KSAvLyBjaGVjayBvdmVyZmxvdwor
ICAgIHsKKyAgICAgICAgIHVpbnQxNl90IG9wYyA9IEdFVE9QQ09ERTEoU1VCVl9PUENPREUsIGRz
dCwgc3JjKTsKKyAgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisgICAgCisgICAgdm9p
ZCBzdWJsX2ltbXIoaW50IGltbSwgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICBpZiAo
SXNJbW1lZGlhdGUoLWltbSkpCisgICAgICAgICAgICBhZGRsX2k4cigtaW1tLCBkc3QpOworICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1fc2NyYXRjaCgp
OworICAgICAgICAgICAgTG9hZENvbnN0YW50KChpbnQpaW1tLCBzY3IpOworICAgICAgICAgICAg
dWludDE2X3Qgb3BjID0gR0VUT1BDT0RFMShTVUJfT1BDT0RFLCBkc3QsIHNjcik7CisgICAgICAg
ICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgICAgICAgICByZWxlYXNlX3NjcmF0Y2goc2NyKTsg
IAorICAgICAgICB9CisKKyAgICB9CisKKworICAgIHZvaWQgeG9ybF9ycihSZWdpc3RlcklEIHNy
YywgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBHRVRPUENP
REUxKFhPUl9PUENPREUsIGRzdCwgc3JjKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAg
IH0KKworICAgIHZvaWQgeG9ybF9pOHIoaW50IGltbTgsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsK
KyAgICAgICAgQVNTRVJUKChpbW04IDw9IDI1NSkgJiYgKGltbTggPj0gMCkpOworICAgICAgICBB
U1NFUlQoZHN0ID09IFNINDo6UjApOworICAgICAgICAKKyAgICAgICAgdWludDE2X3Qgb3BjID0g
R0VUT1BDT0RFNShYT1JJTU1fT1BDT0RFLCBpbW04KTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMp
OworICAgIH0KKworICAgIHZvaWQgc2hsbF9pOHIoaW50IGltbSwgUmVnaXN0ZXJJRCBkc3QpCisg
ICAgeworICAgICAgICB1aW50MTZfdCBvcGM7CisgICAgICAgIAorICAgICAgICBzd2l0Y2ggKGlt
bSkgeworICAgICAgICBjYXNlIDE6IG9wYyA9IEdFVE9QQ09ERTIoU0hMTF9PUENPREUsIGRzdCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAyOiBvcGMgPSBHRVRPUENPREUyKFNI
TEwyX09QQ09ERSwgZHN0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDg6IG9w
YyA9IEdFVE9QQ09ERTIoU0hMTDhfT1BDT0RFLCBkc3QpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgMTY6IG9wYyA9IEdFVE9QQ09ERTIoU0hMTDE2X09QQ09ERSwgZHN0KTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OiBBU1NFUlQoMCk7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKworICAgIH0KKyAgICAKKyAgICB2
b2lkIG5lZyhSZWdpc3RlcklEIGRzdCwgUmVnaXN0ZXJJRCBzcmMpCisgICAgeworICAgICAgICB1
aW50MTZfdCBvcGMgPSBHRVRPUENPREUxKE5FR19PUENPREUsIGRzdCwgc3JjKTsKKyAgICAgICAg
b25lU2hvcnRPcChvcGMpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNobGxfcnIoUmVnaXN0ZXJJ
RCBkc3QsIFJlZ2lzdGVySUQgclNoaWZ0KQorICAgIHsgCisgICAgICAgIC8qIHNyYyA8PCByU2hp
ZnQqLworICAgICAgICB1aW50MTZfdCBvcGMgPSBHRVRPUENPREUxKFNITERfT1BDT0RFLCBkc3Qs
IHJTaGlmdCk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lkIHNo
bHJfcnIoUmVnaXN0ZXJJRCBkc3QsIFJlZ2lzdGVySUQgclNoaWZ0KQorICAgIHsKKyAgICAgICAg
Lyogc3JjID4+IHJTaGlmdCovCisgICAgICAgIG5lZyhyU2hpZnQsIHJTaGlmdCk7CisgICAgICAg
IHNobGxfcnIoZHN0LCByU2hpZnQpOworICAgIH0KKworICAgIHZvaWQgc2hhcl9ycihSZWdpc3Rl
cklEIGRzdCwgUmVnaXN0ZXJJRCByU2hpZnQpCisgICAgeworICAgICAgICAvKiBzcmMgPj4+IHJT
aGlmdCovCisgICAgICAgIG5lZyhyU2hpZnQsIHJTaGlmdCk7CisgICAgc2hhX3JyKGRzdCwgclNo
aWZ0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzaGFfcnIoUmVnaXN0ZXJJRCBkc3QsIFJlZ2lz
dGVySUQgclNoaWZ0KQorICAgIHsKKyAgICAgICAgLyogc3JjID4+PiByU2hpZnQqLworICAgICAg
ICB1aW50MTZfdCBvcGMgPSBHRVRPUENPREUxKFNIQURfT1BDT0RFLCBkc3QsIHJTaGlmdCk7Cisg
ICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzaGxyX2k4cihp
bnQgaW1tLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYzsKKyAg
ICAgICAgCisgICAgICAgIHN3aXRjaCAoaW1tKSB7CisgICAgICAgIGNhc2UgMTogb3BjID0gR0VU
T1BDT0RFMihTSExSX09QQ09ERSwgZHN0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIDI6IG9wYyA9IEdFVE9QQ09ERTIoU0hMUjJfT1BDT0RFLCBkc3QpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgODogb3BjID0gR0VUT1BDT0RFMihTSExSOF9PUENPREUsIGRz
dCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAxNjogb3BjID0gR0VUT1BDT0RF
MihTSExSMTZfT1BDT0RFLCBkc3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1
bHQ6IEFTU0VSVCgwKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgb25lU2hvcnRPcChv
cGMpOworCisgICAgfQorCisKKyAKKyAgICB2b2lkIGltdWxsX3JyKFJlZ2lzdGVySUQgc3JjLCBS
ZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IEdFVE9QQ09ERTEo
TVVMTF9PUENPREUsIGRzdCwgc3JjKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0K
KyAgICAKKyAgICB2b2lkIGRtdWxzbF9ycihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3Qp
CisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBHRVRPUENPREUxKERNVUxTTF9PUENPREUs
IGRzdCwgc3JjKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0gICAgCisgICAgCisg
ICAgdm9pZCBzdHNtYWNsKFJlZ2lzdGVySUQgcmVnKQorICAgIHsKKyAgICAgICAgdWludDE2X3Qg
b3BjID0gR0VUT1BDT0RFMihTVFNNQUNMX09QQ09ERSwgcmVnKTsKKyAgICAgICAgb25lU2hvcnRP
cChvcGMpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHN0c21hY2goUmVnaXN0ZXJJRCByZWcpCisg
ICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBHRVRPUENPREUyKFNUU01BQ0hfT1BDT0RFLCBy
ZWcpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorICAgIAorICAgIC8vIENvbXBh
cmlzb25zOgorCisgICAgdm9pZCBjbXBsX3JyKFJlZ2lzdGVySUQgbGVmdCwgUmVnaXN0ZXJJRCBy
aWdodCwgQ29uZGl0aW9uIGNvbmQpCisgICAgeworICAgICAgICB1aW50MTZfdCBvcGM7CisgICAg
ICAgIAorICAgICAgICBzd2l0Y2ggKGNvbmQpIHsKKyAgICAgICAgY2FzZSBORTogb3BjID0gR0VU
T1BDT0RFMShDTVBFUV9PUENPREUsIHJpZ2h0LCBsZWZ0KTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIEdUOiBvcGMgPSBHRVRPUENPREUxKENNUEdUX09QQ09ERSwgcmlnaHQsIGxl
ZnQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRVE6IG9wYyA9IEdFVE9QQ09E
RTEoQ01QRVFfT1BDT0RFLCByaWdodCwgbGVmdCk7CisgICAgICAgICAgICBicmVhazsgICAgICAg
ICAgCisgICAgICAgIGNhc2UgR0U6IG9wYyA9IEdFVE9QQ09ERTEoQ01QR0VfT1BDT0RFLCByaWdo
dCwgbGVmdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBIUzogb3BjID0gR0VU
T1BDT0RFMShDTVBIU19PUENPREUsIHJpZ2h0LCBsZWZ0KTsgLy8gSFMKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIEhJOiBvcGMgPSBHRVRPUENPREUxKENNUEhJX09QQ09ERSwgcmln
aHQsIGxlZnQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTEk6IG9wYyA9IEdF
VE9QQ09ERTEoQ01QSElfT1BDT0RFLCBsZWZ0LCByaWdodCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBMUzogb3BjID0gR0VUT1BDT0RFMShDTVBIU19PUENPREUsIGxlZnQsIHJp
Z2h0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIExFOiBvcGMgPSBHRVRPUENP
REUxKENNUEdFX09QQ09ERSwgbGVmdCwgcmlnaHQpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgTFQ6IG9wYyA9IEdFVE9QQ09ERTEoQ01QR1RfT1BDT0RFLCBsZWZ0LCByaWdodCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDogQVNTRVJUKDApOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorICAgIAorICAg
IHZvaWQgY21wbF9pcihpbnQgaW1tLCBSZWdpc3RlcklEIGRzdCwgQ29uZGl0aW9uIGNvbmQpCisg
ICAgeworICAgICAgICBpZiAoKGNvbmQgPT0gRVEpICYmIChkc3QgPT0gU0g0OjpSMCkgJiYgSXNJ
bW1lZGlhdGUoaW1tKSkgeworICAgICAgICAgICAgdWludDE2X3Qgb3BjID0gR0VUT1BDT0RFNShD
TVBFUUlNTV9PUENPREUsIGltbSk7CisgICAgICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltX3NjcmF0Y2go
KTsKKyAgICAgICAgCisgICAgICAgICAgICBMb2FkQ29uc3RhbnQoKGludClpbW0sIHNjcik7ICAg
IAorICAgICAgICAgICAgY21wbF9ycihzY3IsIGRzdCwgY29uZCk7CisgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICByZWxlYXNlX3NjcmF0Y2goc2NyKTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICAKKyAgICB2b2lkIGNtcGxfbXIoaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3Rl
cklEIGxlZnQsIENvbmRpdGlvbiBjb25kKQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3Ig
PSBjbGFpbV9zY3JhdGNoKCk7CisgICAgICAgICAKKyAgICAgICAgaWYgKChvZmZzZXQgPCAwKSB8
fCAob2Zmc2V0ID49IDY0KSkgeworICAgICAgICAgICAgTG9hZENvbnN0YW50KChpbnQpb2Zmc2V0
LCBzY3IpOworICAgICAgICAgICAgYWRkbF9ycihiYXNlLCBzY3IpOworICAgICAgICAgICAgbW92
bF9tcihzY3IsIHNjcik7CisgICAgICAgIH0gZWxzZSBpZiAob2Zmc2V0KSB7CisgICAgICAgICAg
ICBtb3ZsX21yKG9mZnNldCA+PiAyLCBiYXNlLCBzY3IpOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgbW92bF9tcihiYXNlLCBzY3IpOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBjbXBsX3JyKHNjciwgbGVmdCwgY29uZCk7CisgICAgICAgIHJlbGVhc2Vfc2NyYXRjaChzY3Ip
OworICAgIH0KKyAgICAKKyAgICB2b2lkIGNtcGxfcm0oUmVnaXN0ZXJJRCByaWdodCwgaW50IG9m
ZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBDb25kaXRpb24gY29uZCkKKyAgICB7CisgICAgICAgIFJl
Z2lzdGVySUQgc2NyID0gY2xhaW1fc2NyYXRjaCgpOworICAgICAgICAgCisgICAgICAgIGlmICgo
b2Zmc2V0IDwgMCkgfHwgKG9mZnNldCA+PSA2NCkpIHsKKyAgICAgICAgICAgIExvYWRDb25zdGFu
dCgoaW50KW9mZnNldCwgc2NyKTsKKyAgICAgICAgICAgIGFkZGxfcnIoYmFzZSwgc2NyKTsKKyAg
ICAgICAgICAgIG1vdmxfbXIoc2NyLCBzY3IpOworICAgICAgICB9IGVsc2UgaWYgKG9mZnNldCkg
eworICAgICAgICAgICAgbW92bF9tcihvZmZzZXQgPj4gMiwgYmFzZSwgc2NyKTsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIG1vdmxfbXIoYmFzZSwgc2NyKTsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgY21wbF9ycihyaWdodCwgc2NyLCBjb25kKTsKKyAgICAgICAgcmVsZWFz
ZV9zY3JhdGNoKHNjcik7CisgICAgfQorICAgIAorICAgIHZvaWQgY21wbF9pbShpbnQgaW1tLCBp
bnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIENvbmRpdGlvbiBjb25kKSAKKyAgICB7CisgICAg
CisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1fc2NyYXRjaCgpOworICAgICAgICBSZWdp
c3RlcklEIHNjcjEgPSBjbGFpbV9zY3JhdGNoKCk7CisgICAgICAgICAKKyAgICAgICAgaWYgKChv
ZmZzZXQgPCAwKSB8fCAob2Zmc2V0ID49IDY0KSkgeworICAgICAgICAgICAgTG9hZENvbnN0YW50
KChpbnQpb2Zmc2V0LCBzY3IpOworICAgICAgICAgICAgYWRkbF9ycihiYXNlLCBzY3IpOworICAg
ICAgICAgICAgbW92bF9tcihzY3IsIHNjcik7CisgICAgICAgIH0gZWxzZSBpZiAob2Zmc2V0KSB7
CisgICAgICAgICAgICBtb3ZsX21yKG9mZnNldCA+PiAyLCBiYXNlLCBzY3IpOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgbW92bF9tcihiYXNlLCBzY3IpOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICBMb2FkQ29uc3RhbnQoaW1tLCBzY3IxKTsgICAgICAgIAorICAgICAgICBj
bXBsX3JyKHNjcjEsIHNjciwgY29uZCk7CisgICAgICAgIAorICAgICAgICByZWxlYXNlX3NjcmF0
Y2goc2NyMSk7CisgICAgICAgIHJlbGVhc2Vfc2NyYXRjaChzY3IpOworICAgIH0KKyAgICAKKyAg
ICB2b2lkIHRlc3RsX3JyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7Cisg
ICAgICAgIHVpbnQxNl90IG9wYyA9IEdFVE9QQ09ERTEoVFNUX09QQ09ERSwgZHN0LCBzcmMpOwor
ICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCB0ZXN0bF9pOHIoaW50
IGltbSwgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICBBU1NFUlQoKGRzdCA9PSBTSDQ6
OlIwKSAmJiAoaW1tIDw9IDI1NSkgJiYgKGltbSA+PSAwKSk7CisgICAgICAgIHVpbnQxNl90IG9w
YyA9IEdFVE9QQ09ERTUoVFNUSU1NX09QQ09ERSwgaW1tKTsKKyAgICAgICAgb25lU2hvcnRPcChv
cGMpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHRlc3RsX2kzMnIoaW50IGltbSwgUmVnaXN0ZXJJ
RCBkc3QpCisgICAgeworICAgICAgICBpZiAoKGRzdCA9PSBTSDQ6OlIwKSAmJiAoaW1tIDw9IDI1
NSkgJiYgKGltbSA+PSAwKSkgeworICAgICAgICAgICAgdWludDE2X3Qgb3BjID0gR0VUT1BDT0RF
NShUU1RJTU1fT1BDT0RFLCBpbW0pOworICAgICAgICAgICAgb25lU2hvcnRPcChvcGMpOyAgICAg
ICAgCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWlt
X3NjcmF0Y2goKTsKKyAgICAgICAgICAgIExvYWRDb25zdGFudCgoaW50KWltbSwgc2NyKTsKKyAg
ICAgICAgCisgICAgICAgICAgICB0ZXN0bF9ycihzY3IsIGRzdCk7CisgICAgICAgICAgICByZWxl
YXNlX3NjcmF0Y2goc2NyKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgdGVzdGxfaTMy
bShpbnQgaW1tLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UpCisgICAgeworICAgICAgICBS
ZWdpc3RlcklEIHNjciA9IGNsYWltX3NjcmF0Y2goKTsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3Ix
ID0gY2xhaW1fc2NyYXRjaCgpOworICAgICAgICAKKyAgICAgICAgaWYgKChvZmZzZXQgPCAwKSB8
fCAob2Zmc2V0ID49IDY0KSkgeworICAgICAgICAgICAgTG9hZENvbnN0YW50KChpbnQpb2Zmc2V0
LCBzY3IpOworICAgICAgICAgICAgYWRkbF9ycihiYXNlLCBzY3IpOworICAgICAgICAgICAgbW92
bF9tcihzY3IsIHNjcik7CisgICAgICAgIH0gZWxzZSBpZiAob2Zmc2V0KSB7CisgICAgICAgICAg
ICBtb3ZsX21yKG9mZnNldCA+PiAyLCBiYXNlLCBzY3IpOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgbW92bF9tcihiYXNlLCBzY3IpOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBpZiAoSXNJbW1lZGlhdGUoaW1tKSkKKyAgICAgICAgICAgIG1vdl9pbW04KGltbSwgc2NyMSk7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIExvYWRDb25zdGFudCgoaW50KWltbSwgc2NyMSk7
CisgICAgICAgIAorICAgICAgICB0ZXN0bF9ycihzY3IsIHNjcjEpOyAgICAgICAgCisgICAgICAg
IHJlbGVhc2Vfc2NyYXRjaChzY3IpOworICAgICAgICByZWxlYXNlX3NjcmF0Y2goc2NyMSk7Cisg
ICAgfQorCisgICAgdm9pZCB0ZXN0Yl9pOHIoaW50IGltbSwgUmVnaXN0ZXJJRCBkc3QpCisgICAg
eworICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltX3NjcmF0Y2goKTsKKyAgICAgICAgbW92
X2ltbTgoaW1tLCBzY3IpOworICAgICAgICB0ZXN0bF9ycihzY3IsIGRzdCk7CisgICAgICAgIHJl
bGVhc2Vfc2NyYXRjaChzY3IpOworICAgIH0KKworICAgIHZvaWQgbm9wKCkgCisgICAgeyAgCisg
ICAgICAgIG9uZVNob3J0T3AoTk9QX09QQ09ERSk7ICAgICAgICAKKyAgICB9CisgICAgCisgICAg
CisgICAgdm9pZCBicmFuY2godWludDE2X3Qgb3BjLCBpbnQgbGFiZWwpCisgICAgeworICAgICAg
ICBzd2l0Y2ggKG9wYykgeworICAgICAgICBjYXNlIEJUX09QQ09ERToKKyAgICAgICAgICAgIEFT
U0VSVCgobGFiZWwgPD0xMjcpICYmIChsYWJlbCA+PSAtMTI4KSk7IAorICAgICAgICAgICAgb3Bj
ID0gR0VUT1BDT0RFNShCVF9PUENPREUsIGxhYmVsKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIEJSQV9PUENPREU6CisgICAgICAgICAgICBBU1NFUlQoKGxhYmVsIDw9MjA0Nykg
JiYgKGxhYmVsID49IC0yMDQ4KSk7CisgICAgICAgICAgICBvcGMgPSBHRVRPUENPREU2KEJSQV9P
UENPREUsIGxhYmVsKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEJGX09QQ09E
RToKKyAgICAgICAgICAgIEFTU0VSVCgobGFiZWwgPD0xMjcpICYmIChsYWJlbCA+PSAtMTI4KSk7
CisgICAgICAgICAgICBvcGMgPSBHRVRPUENPREU1KEJGX09QQ09ERSwgbGFiZWwpOworICAgICAg
ICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgIAorICAgICAgICBkZWZhdWx0OiBBU1NFUlQoMCk7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9Cisg
ICAgCisgICAgdm9pZCBkdChSZWdpc3RlcklEIHJlZykKKyAgICB7CisgICAgICAgIHVpbnQxNl90
IG9wYyA9IEdFVE9QQ09ERTIoRFRfT1BDT0RFLCByZWcpOworICAgIG9uZVNob3J0T3Aob3BjKTsK
KyAgICB9ICAgCisgICAgCisgICAgdm9pZCBicmFuY2godWludDE2X3Qgb3BjLCBSZWdpc3RlcklE
IHJlZykKKyAgICB7CisgICAgICAgIHN3aXRjaCAob3BjKSB7ICAgICAgICAgICAgCisgICAgICAg
IGNhc2UgQlJBRl9PUENPREU6CisgICAgICAgICAgICBvcGMgPSBHRVRPUENPREUyKEJSQUZfT1BD
T0RFLCByZWcpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSk1QX09QQ09ERSA6
CisgICAgICAgICAgICBvcGMgPSBHRVRPUENPREUyKEpNUF9PUENPREUsIHJlZyk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBKU1JfT1BDT0RFIDoKKyAgICAgICAgICAgIG9wYyA9
IEdFVE9QQ09ERTIoSlNSX09QQ09ERSwgcmVnKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIEJTUkZfT1BDT0RFIDoKKyAgICAgICAgICAgIG9wYyA9IEdFVE9QQ09ERTIoQlNSRl9P
UENPREUsIHJlZyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDogQVNTRVJU
KDApOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAg
fQorICAgIHZvaWQgbGRzcHIoUmVnaXN0ZXJJRCByZWcpCisgICAgeworICAgICAgICB1aW50MTZf
dCBvcGMgPSBHRVRPUENPREUyKExEU1BSX09QQ09ERSwgcmVnKTsKKyAgICAgICAgb25lU2hvcnRP
cChvcGMpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHN0c3ByKFJlZ2lzdGVySUQgcmVnKQorICAg
IHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gR0VUT1BDT0RFMihTVFNQUl9PUENPREUsIHJlZyk7
CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICAKKyAgICB2b2lkIGV4dHV3
KFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90
IG9wYyA9IEdFVE9QQ09ERTEoRVhUVVdfT1BDT0RFLCBkc3QsIHNyYyk7CisgICAgICAgIAorICAg
ICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorICAgIAorICAgIC8qIGZsb2F0IG9wZXJhdGlv
bnMqLworICAgIAorICAgIHZvaWQgbGRzcm1fZnB1bChSZWdpc3RlcklEIHNyYykKKyAgICB7ICAg
ICAgICAKKyAgICAgICAgdWludDE2X3Qgb3BjID0gR0VUT1BDT0RFMihMRFNfUk1fRlBVTF9PUENP
REUsIHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisgICAgdm9pZCBmbmVn
KEZQUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBHRVRPUENP
REUyKEZORUdfT1BDT0RFLCBkc3QpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQor
ICAgIAorICAgIHZvaWQgc3RzX2ZwdWxfcm4oUmVnaXN0ZXJJRCBzcmMpCisgICAgeworICAgICAg
ICB1aW50MTZfdCBvcGMgPSBHRVRPUENPREUyKFNUU19GUFVMX1JOX09QQ09ERSwgc3JjKTsKKyAg
ICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGZsb2F0X2ZwdWxf
ZnJuKFJlZ2lzdGVySUQgc3JjKQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gR0VUT1BD
T0RFMihGTE9BVF9PUENPREUsIHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9
CisgICAgCisgICAgdm9pZCBmbXVsbChGUFJlZ2lzdGVySUQgc3JjLCBGUFJlZ2lzdGVySUQgZHN0
KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gR0VUT1BDT0RFMShGTVVMX09QQ09ERSwg
ZHN0LCBzcmMpOworICAgICAgICBvbmVTaG9ydEZsb2F0T3Aob3BjKTsKKyAgICB9CisgICAgCisg
ICAgdm9pZCBmbW92c19yZWFkX3JtKFJlZ2lzdGVySUQgc3JjLCBGUFJlZ2lzdGVySUQgZHN0KQor
ICAgIHsKKyAgICAgICAgLypGTU9WLlMgQFIlZCwgRlIlZFxuKi8KKyAgICB1aW50MTZfdCBvcGMg
PSBHRVRPUENPREUxKEZNT1ZTX1JFQURfUk1fT1BDT0RFLCBkc3QsIHNyYyk7CisgICAgICAgIG9u
ZVNob3J0RmxvYXRPcChvcGMpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGZtb3ZzX3dyaXRlX3Jt
KEZQUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgLyogRk1P
Vi5TIEZSJWQsIEBSJWRcbiAqLworICAgIHVpbnQxNl90IG9wYyA9IEdFVE9QQ09ERTEoRk1PVlNf
V1JJVEVfUk5fT1BDT0RFLCBkc3QsIHNyYyk7CisgICAgICAgIG9uZVNob3J0RmxvYXRPcChvcGMp
OworICAgIH0KKyAgICAKKyAgICB2b2lkIGZtb3ZzX3dyaXRlX3IwcihGUFJlZ2lzdGVySUQgc3Jj
LCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIC8qRk1PVi5TIEZSJWQsIEAoUjAsIFIl
ZCkgKi8KKyAgICB1aW50MTZfdCBvcGMgPSBHRVRPUENPREUxKEZNT1ZTX1dSSVRFX1IwUk5fT1BD
T0RFLCBkc3QsIHNyYyk7CisgICAgICAgIG9uZVNob3J0RmxvYXRPcChvcGMpOworICAgIH0KKyAg
ICAKKyAgICB2b2lkIGZtb3ZzX3JlYWRfcjByKFJlZ2lzdGVySUQgc3JjLCBGUFJlZ2lzdGVySUQg
ZHN0KQorICAgIHsKKyAgICAgICAgLypGTU9WLlMgQChSMCwgUiVkKSwgRlIlZCovCisgICAgdWlu
dDE2X3Qgb3BjID0gR0VUT1BDT0RFMShGTU9WU19SRUFEX1IwUk1fT1BDT0RFLCBkc3QsIHNyYyk7
CisgICAgICAgIG9uZVNob3J0RmxvYXRPcChvcGMpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGZt
b3ZzX3JlYWRfcm1faW5jKFJlZ2lzdGVySUQgZHN0LCBGUFJlZ2lzdGVySUQgc3JjKQorICAgIHsK
KyAgICAgICAgLyogRk1PVi5TIEBSJWQrLCBGUiVkICovCisgICAgdWludDE2X3Qgb3BjID0gR0VU
T1BDT0RFMShGTU9WU19SRUFEX1JNX0lOQ19PUENPREUsIGRzdCwgc3JjKTsKKyAgICAgICAgb25l
U2hvcnRGbG9hdE9wKG9wYyk7CisgICAgfQorICAgIAorICAgIHZvaWQgZm1vdnNfd3JpdGVfcm5f
ZGVjKEZQUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgLyog
Rk1PVi5TIEZSJWQsIEAtUiVkICovCisgICAgdWludDE2X3Qgb3BjID0gR0VUT1BDT0RFMShGTU9W
U19XUklURV9STl9ERUNfT1BDT0RFLCBkc3QsIHNyYyk7CisgICAgICAgIG9uZVNob3J0RmxvYXRP
cChvcGMpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGZ0cmNfcm1fZnB1bChGUFJlZ2lzdGVySUQg
c3JjKQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gR0VUT1BDT0RFMihGVFJDX09QQ09E
RSwgc3JjKTsKKyAgICAgICAgb25lU2hvcnRGbG9hdE9wKG9wYyk7CisgICAgfQorICAgIAorICAg
IHZvaWQgZmxkc19mcHVsKFJlZ2lzdGVySUQgc3JjKQorICAgIHsKKyAgICAgICAgdWludDE2X3Qg
b3BjID0gR0VUT1BDT0RFMihGTERTX0ZSTV9GUFVMX09QQ09ERSwgc3JjKTsKKyAgICAgICAgb25l
U2hvcnRPcChvcGMpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGZzdHNfZnB1bChSZWdpc3RlcklE
IHNyYykKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IEdFVE9QQ09ERTIoRlNUU19GUFVM
X0ZSTl9PUENPREUsIHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisgICAg
CisgICAgCisgICAgdm9pZCBsZHNmcHNjcihSZWdpc3RlcklEIHJlZykgCisgICAgeworICAgICAg
ICB1aW50MTZfdCBvcGMgPSBHRVRPUENPREUyKExEU0ZQU0NSX09QQ09ERSwgcmVnKTsKKyAgICAg
ICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHN0c2Zwc2NyKFJlZ2lz
dGVySUQgcmVnKSAKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IEdFVE9QQ09ERTIoU1RT
RlBTQ1JfT1BDT0RFLCByZWcpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfSAgICAK
KyAgICAKKyAgICAvKiBkb3VibGUgb3BlcmF0aW9ucyovCisgICAgdm9pZCBkY21wcGVxKEZQUmVn
aXN0ZXJJRCBzcmMsIEZQUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICB1aW50MTZfdCBv
cGMgPSBHRVRPUENPREU4KEZDTVBFUV9PUENPREUsIGRzdCA+PiAxLCBzcmMgPj4xKTsKKyAgICAg
ICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGRtdWxfcnIoRlBSZWdp
c3RlcklEIHNyYywgRlBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9w
YyA9IEdFVE9QQ09ERTgoRk1VTF9PUENPREUsIGRzdCA+PiAxLCBzcmMgPj4xKTsKKyAgICAgICAg
b25lU2hvcnRPcChvcGMpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGRzdWJfcnIoRlBSZWdpc3Rl
cklEIHNyYywgRlBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9
IEdFVE9QQ09ERTgoRlNVQl9PUENPREUsIGRzdCA+PiAxLCBzcmMgPj4xKTsKKyAgICAgICAgb25l
U2hvcnRPcChvcGMpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGRhZGRfcnIoRlBSZWdpc3RlcklE
IHNyYywgRlBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IEdF
VE9QQ09ERTgoRkFERF9PUENPREUsIGRzdCA+PiAxLCBzcmMgPj4xKTsKKyAgICAgICAgb25lU2hv
cnRPcChvcGMpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGRtb3ZfcnIoRlBSZWdpc3RlcklEIHNy
YywgRlBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IEdFVE9Q
Q09ERTgoRk1PVl9PUENPREUsIGRzdCA+PiAxLCBzcmMgPj4xKTsKKyAgICAgICAgb25lU2hvcnRP
cChvcGMpOworICAgIH0gICAgCisgICAgCisgICAgdm9pZCBkZGl2X3JyKEZQUmVnaXN0ZXJJRCBz
cmMsIEZQUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBHRVRP
UENPREU4KEZESVZfT1BDT0RFLCBkc3QgPj4gMSwgc3JjID4+MSk7CisgICAgICAgIG9uZVNob3J0
T3Aob3BjKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBkb3VibGVsb2FkKFJlZ2lzdGVySUQgYmFz
ZSwgaW50IG9mZnNldCwgRlBSZWdpc3RlcklEIGRlc3QsIFJlZ2lzdGVySUQgc2NyKSAKKyAgICB7
CisgICAgICAgICBMb2FkQ29uc3RhbnQob2Zmc2V0LCBzY3IpOworICAgICAgICAgaWYgKHNjciA9
PSBTSDQ6OlIwKQorICAgICAgICAgICAgIGZtb3ZfcmVhZF9yMHIoYmFzZSwgZGVzdCk7CisgICAg
ICAgICBlbHNlIGlmIChiYXNlID09IFNINDo6UjApCisgICAgICAgICAgICAgZm1vdl9yZWFkX3Iw
cihzY3IsIGRlc3QpOworICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgYWRkbF9ycihiYXNl
LCBzY3IpOworICAgICAgICAgICAgIGZtb3ZfcmVhZF9ybShzY3IsIGRlc3QpOyAgICAgICAgIAor
ICAgICAgICAgfSAgICAKKyAgICB9CisgICAgCisgICAgdm9pZCBkbmVnKEZQUmVnaXN0ZXJJRCBk
c3QpCisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBHRVRPUENPREU3KEZORUdfT1BDT0RF
LCBkc3QgPj4gMSk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisgICAgCisgICAg
dm9pZCBkb3VibGVzdG9yZShGUFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGJhc2UsIGludCBv
ZmZzZXQsIFJlZ2lzdGVySUQgc2NyKSAKKyAgICB7CisgICAgICAgICBMb2FkQ29uc3RhbnQob2Zm
c2V0LCBzY3IpOworICAgICAgICAgaWYgKHNjciA9PSBTSDQ6OlIwKQorICAgICAgICAgZm1vdl93
cml0ZV9yMHIoc3JjLCBiYXNlKTsKKyAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIGFkZGxf
cnIoYmFzZSwgc2NyKTsKKyAgICAgICAgICAgICBmbW92X3dyaXRlX3JtKHNyYywgc2NyKTsgICAg
ICAgICAKKyAgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCBmbW92X3JlYWRfcm0oUmVn
aXN0ZXJJRCBzcmMsIEZQUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICAvKkZNT1YgQFIl
ZCwgRFIlZFxuKi8KKyAgICAgICAgdWludDE2X3Qgb3BjID0gR0VUT1BDT0RFMTAoRk1PVlNfUkVB
RF9STV9PUENPREUsIGRzdCA+PiAxLCBzcmMpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7Cisg
ICAgfQorICAgIAorICAgIHZvaWQgZm1vdl93cml0ZV9ybShGUFJlZ2lzdGVySUQgc3JjLCBSZWdp
c3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIC8qIEZNT1YgRFIlZCwgQFIlZFxuICovCisgICAg
dWludDE2X3Qgb3BjID0gR0VUT1BDT0RFOShGTU9WU19XUklURV9STl9PUENPREUsIGRzdCwgc3Jj
ID4+IDEpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorICAgIAorICAgIHZvaWQg
Zm1vdl93cml0ZV9yMHIoRlBSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpCisgICAgewor
ICAgICAgICAvKkZNT1YgRFIlZCwgQChSMCwgUiVkKSAqLworICAgIHVpbnQxNl90IG9wYyA9IEdF
VE9QQ09ERTkoRk1PVlNfV1JJVEVfUjBSTl9PUENPREUsIGRzdCwgc3JjID4+IDEpOworICAgICAg
ICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorICAgIAorICAgIHZvaWQgZm1vdl9yZWFkX3IwcihS
ZWdpc3RlcklEIHNyYywgRlBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIC8qRk1PViBA
KFIwLCBSJWQpLCBEUiVkKi8KKyAgICB1aW50MTZfdCBvcGMgPSBHRVRPUENPREUxMChGTU9WU19S
RUFEX1IwUk1fT1BDT0RFLCBkc3QgPj4gMSwgc3JjKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMp
OworICAgIH0KKyAgICAKKyAgICB2b2lkIGZtb3ZfcmVhZF9ybV9pbmMoUmVnaXN0ZXJJRCBkc3Qs
IEZQUmVnaXN0ZXJJRCBzcmMpCisgICAgeworICAgICAgICAvKiBGTU9WIEBSJWQrLCBEUiVkICov
CisgICAgdWludDE2X3Qgb3BjID0gR0VUT1BDT0RFMTAoRk1PVlNfUkVBRF9STV9JTkNfT1BDT0RF
LCBkc3QgPj4gMSAsIHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisgICAg
CisgICAgdm9pZCBmbW92X3dyaXRlX3JuX2RlYyhGUFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklE
IGRzdCkKKyAgICB7CisgICAgICAgIC8qIEZNT1YgRFIlZCwgQC1SJWQgKi8KKyAgICB1aW50MTZf
dCBvcGMgPSBHRVRPUENPREU5KEZNT1ZTX1dSSVRFX1JOX0RFQ19PUENPREUsIGRzdCwgc3JjID4+
IDEpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorICAgIAorICAgIHZvaWQgZmxv
YXRfZnB1bF9kcm4oRlBSZWdpc3RlcklEIHNyYykKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9w
YyA9IEdFVE9QQ09ERTcoRkxPQVRfT1BDT0RFLCBzcmMgPj4gMSk7CisgICAgICAgIG9uZVNob3J0
T3Aob3BjKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBmdHJjX2RybV9mcHVsKEZQUmVnaXN0ZXJJ
RCBzcmMpCisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBHRVRPUENPREU3KEZUUkNfT1BD
T0RFLCBzcmMgPj4gMSk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisgICAgICAg
ICAgIAorICAgIC8vIFZhcmlvdXMgbW92ZSBvcHM6CisgICAgCisgICAgdm9pZCBtb3ZfaW1tOChp
bnQgaW1tOCwgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICBBU1NFUlQoKGltbTggPD0x
MjcpICYmIChpbW04ID49IC0xMjgpKTsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gR0VUT1BDT0RF
MyhNT1ZJTU1fT1BDT0RFLCBkc3QsIGltbTgpOyAgICAgICAgCisgICAgICAgIG9uZVNob3J0T3Ao
b3BjKTsKKyAgICB9CisKKyAgICB2b2lkIG1vdmxfcnIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVy
SUQgZHN0KQorICAgIHsKKyAgICAgICAgLyogbW92IHNyYywgZHN0ICovCisgICAgICAgIHVpbnQx
Nl90IG9wYyA9IEdFVE9QQ09ERTEoTU9WX09QQ09ERSwgZHN0LCBzcmMpOworICAgICAgICBvbmVT
aG9ydE9wKG9wYyk7CisKKyAgICB9CisgICAgCisgICAgdm9pZCBtb3Z3X3JtKFJlZ2lzdGVySUQg
c3JjLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIC8qIG1vdi53IHNyYywgQGRzdCAq
LworICAgICAgICB1aW50MTZfdCBvcGMgPSBHRVRPUENPREUxKE1PVldfV1JJVEVfUk5fT1BDT0RF
LCBkc3QsIHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKworICAgIH0KKyAgICAKKyAg
ICB2b2lkIG1vdndfbXIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAg
ICAgICAgLyogbW92LncgQCBzcmMsIGRzdCAqLworICAgICAgICB1aW50MTZfdCBvcGMgPSBHRVRP
UENPREUxKE1PVldfUkVBRF9STV9PUENPREUsIGRzdCwgc3JjKTsKKyAgICAgICAgb25lU2hvcnRP
cChvcGMpOworCisgICAgfQorICAgIAorICAgIHZvaWQgbW92d19tcihpbnQgb2Zmc2V0LCBSZWdp
c3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3Bj
OworICAgIAorICAgICAgICBpZiAoYmFzZSA9PSBTSDQ6OlBDKSB7CisgICAgICAgICAgICBBU1NF
UlQoKG9mZnNldCA8PSAyNTUpICYmIChvZmZzZXQgPj0gMCkpOworICAgICAgICAgICAgb3BjID0g
R0VUT1BDT0RFMyhNT1ZXX1JFQURfT0ZGUENfT1BDT0RFLCBkc3QsIG9mZnNldCk7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBBU1NFUlQoMCk7CisgICAgICAgICAgICAKKyAgICAgICAg
fQorICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisKKyAgICB9CisgICAgCisgICAgdm9pZCBtb3Z3
X3IwbXIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgdWlu
dDE2X3Qgb3BjID0gR0VUT1BDT0RFMShNT1ZXX1JFQURfUjBSTV9PUENPREUsIGRzdCwgc3JjKTsg
ICAgICAgIAorICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisKKyAgICB9CisgICAgCisgICAgdm9p
ZCBtb3ZsX3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UpCisg
ICAgeworICAgICAgICB1aW50MTZfdCBvcGM7CisgICAgICAgIAorICAgICAgICBBU1NFUlQoKG9m
ZnNldCA8PSAxNSkgJiYgKG9mZnNldCA+PSAwKSk7CisgICAgICAgIAorICAgICAgICBpZiAoIW9m
ZnNldCkKKyAgICAgICAgICAgIG9wYyA9IEdFVE9QQ09ERTEoTU9WTF9XUklURV9STl9PUENPREUs
IGJhc2UsIHNyYyk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG9wYyA9IEdFVE9QQ09ERTQo
TU9WTF9XUklURV9PRkZSTl9PUENPREUsIGJhc2UsIHNyYywgb2Zmc2V0KTsKKyAgICAgICAgCisg
ICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKworICAgIH0KKyAgICAKKyAgICB2b2lkIG1vdmxfcm0o
UmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgYmFzZSkKKyAgICB7CisgICAgICAgIHVpbnQxNl90
IG9wYzsKKyAgICAgICAgCisgICAgICAgIG9wYyA9IEdFVE9QQ09ERTEoTU9WTF9XUklURV9STl9P
UENPREUsIGJhc2UsIHNyYyk7ICAgICAgICAKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworCisg
ICAgfQorICAgIAorICAgIHZvaWQgbW92bF9pMzJtKGludCBpbW0sIGludCBvZmZzZXQsIFJlZ2lz
dGVySUQgYmFzZSkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYzsKKyAgICAgICAgCisgICAg
ICAgIEFTU0VSVCgob2Zmc2V0IDw9IDE1KSAmJiAob2Zmc2V0ID49IDApKTsKKyAgICAKKyAgICAg
ICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbV9zY3JhdGNoKCk7CisgICAgICAgIExvYWRDb25zdGFu
dCgoaW50KWltbSwgc2NyKTsgICAgICAgCisKKyAgICAgICAgCisgICAgICAgIGlmICghb2Zmc2V0
KQorICAgICAgICAgICAgb3BjID0gR0VUT1BDT0RFMShNT1ZMX1dSSVRFX1JOX09QQ09ERSwgYmFz
ZSwgc2NyKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgb3BjID0gR0VUT1BDT0RFNChNT1ZM
X1dSSVRFX09GRlJOX09QQ09ERSwgYmFzZSwgc2NyLCBvZmZzZXQpOworICAgICAgICAKKyAgICAg
ICAgb25lU2hvcnRPcChvcGMpOworICAgICAgICByZWxlYXNlX3NjcmF0Y2goc2NyKTsKKyAgICB9
CisKKworICAgIHZvaWQgbW92bF9tcihpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lz
dGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjOworICAgIAorICAgICAgICBp
ZiAoYmFzZSA9PSBTSDQ6OlBDKSB7CisgICAgICAgICAgICBBU1NFUlQoKG9mZnNldCA8PSAyNTUp
ICYmIChvZmZzZXQgPj0gMCkpOworICAgICAgICAgICAgb3BjID0gR0VUT1BDT0RFMyhNT1ZMX1JF
QURfT0ZGUENfT1BDT0RFLCBkc3QsIG9mZnNldCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICBBU1NFUlQoKG9mZnNldCA8PSAxNSkgJiYgKG9mZnNldCA+PSAwKSk7CisgICAgICAgICAg
ICBpZiAoIW9mZnNldCkKKyAgICAgICAgICAgICAgICBvcGMgPSBHRVRPUENPREUxKE1PVkxfUkVB
RF9STV9PUENPREUsIGRzdCwgYmFzZSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgb3BjID0gR0VUT1BDT0RFNChNT1ZMX1JFQURfT0ZGUk1fT1BDT0RFLCBkc3QsIGJhc2UsIG9m
ZnNldCk7CisgICAgICAgIH0KKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworCisgICAgfQorICAg
IAorICAgIHZvaWQgbW92Yl9tcihpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVy
SUQgZHN0KSAvLyBNT1YuQiBAKGRpc3AsIFJtKSwgUjAKKyAgICB7ICAgICAgICAKKyAgICAgICAg
QVNTRVJUKGRzdCA9PSBTSDQ6OlIwKTsKKyAgICAKKyAgICAgICAgdWludDE2X3Qgb3BjID0gR0VU
T1BDT0RFMTEoTU9WQl9SRUFEX09GRlJNX09QQ09ERSwgYmFzZSwgb2Zmc2V0KTsKKyAgICAgICAg
CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKworICAgIH0KKyAgICAKKyAgICB2b2lkIG1vdmJf
cjBtcihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICB1aW50
MTZfdCBvcGMgPSBHRVRPUENPREUxKE1PVkJfUkVBRF9SMFJNX09QQ09ERSwgZHN0LCBzcmMpOwor
ICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisKKyAgICB9CisgICAgCisgICAgdm9pZCBtb3ZiX21y
KFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCkgLy8gTU9WLkIgQFJtLCBSbgorICAgIHsK
KyAgICAgICAgdWludDE2X3Qgb3BjID0gR0VUT1BDT0RFMShNT1ZCX1JFQURfUk1fT1BDT0RFLCBk
c3QsIHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKworICAgIH0KKyAgICAKKyAgICB2
b2lkIG1vdmxfbXIoUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAg
ICAgIHVpbnQxNl90IG9wYyA9IEdFVE9QQ09ERTEoTU9WTF9SRUFEX1JNX09QQ09ERSwgZHN0LCBi
YXNlKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworCisgICAgfQorICAgIAorICAgIHZvaWQg
bW92bF9yMG1yKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAg
IHVpbnQxNl90IG9wYyA9IEdFVE9QQ09ERTEoTU9WTF9SRUFEX1IwUk1fT1BDT0RFLCBkc3QsIHNy
Yyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKworICAgIH0KKyAgICAKKyAgICB2b2lkIG1v
dmxfcm1yMChSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICAv
Km1vdi5sIHNyYywgQChyMCwgZHN0KSovCisgICAgdWludDE2X3Qgb3BjID0gR0VUT1BDT0RFMShN
T1ZMX1dSSVRFX1IwUk5fT1BDT0RFLCBkc3QsIHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Aob3Bj
KTsKKworICAgIH0KKworICAgIHZvaWQgbW92bF9pOHIoaW50IGltbTgsIFJlZ2lzdGVySUQgZHN0
KQorICAgIHsKKyAgICAgICAgQVNTRVJUKChpbW04IDw9MTI3KSAmJiAoaW1tOCA+PSAtMTI4KSk7
CisgICAgICAgIHVpbnQxNl90IG9wYyA9IEdFVE9QQ09ERTMoTU9WSU1NX09QQ09ERSwgZHN0LCBp
bW04KTsKKworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCBvcmxf
aXIoaW50IGltbSwgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICAKKyAgICAgICAgaWYg
KChpbW0gPD0gMjU1KSAmJiAoaW1tID49IDApICYmIChkc3QgPT0gU0g0OjpSMCkpCisgICAgICAg
ICAgICBvcmxfaThyKGltbSwgZHN0KTsKKyAgICAgICAgZWxzZSAgeworICAgICAgICAgICAgUmVn
aXN0ZXJJRCBzY3IgPSBjbGFpbV9zY3JhdGNoKCk7CisgICAgICAgICAgICBMb2FkQ29uc3RhbnQo
KGludClpbW0sIHNjcik7CisgICAgICAgICAgICB1aW50MTZfdCBvcGMgPSBHRVRPUENPREUxKE9S
X09QQ09ERSwgZHN0LCBzY3IpOworICAgICAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgICAg
ICAgICAgcmVsZWFzZV9zY3JhdGNoKHNjcik7CisgICAgICAgIH0KKyAgICB9CisKKworICAgIC8v
IEZsb3cgY29udHJvbDoKKworICAgIEptcFNyYyBjYWxsKCkKKyAgICB7ICAgICAgICAKKyAgICBS
ZWdpc3RlcklEIHNjciA9IGNsYWltX3NjcmF0Y2goKTsKKyAgICAgICAgTG9hZENvbnN0YW50KDB4
MCwgc2NyLCB0cnVlLCBmYWxzZSk7CisgICAgICAgIGJyYW5jaChKU1JfT1BDT0RFLCBzY3IpOwor
ICAgICAgICBub3AoKTsKKyAgICAgICAgcmVsZWFzZV9zY3JhdGNoKHNjcik7CisgICAgICAgIHJl
dHVybiBKbXBTcmMoc2l6ZSgpKTsKKyAgICB9CisgICAgCisgICAgSm1wU3JjIGNhbGwoUmVnaXN0
ZXJJRCBkc3QpCisgICAgeworICAgICAgICBicmFuY2goSlNSX09QQ09ERSwgZHN0KTsKKyAgICAg
ICAgbm9wKCk7CisgICAgICAgIHJldHVybiBKbXBTcmMoc2l6ZSgpKTsKKyAgICB9CisKKyAgICBK
bXBTcmMgam1wKCkKKyAgICB7ICAgICAgICAKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFp
bV9zY3JhdGNoKCk7CisgICAgICAgIGludCBtX3NpemUgPSBzaXplKCk7CisgICAgICAgIGJyYW5j
aChCUkFfT1BDT0RFLCAwKTsKKyAgICAgICAgTG9hZENvbnN0YW50KDB4MCwgc2NyLCB0cnVlLCBm
YWxzZSk7CisgICAgICAgIG5vcCgpOworICAgICAgICByZWxlYXNlX3NjcmF0Y2goc2NyKTsKKyAg
ICAKKyAgICAgICAgaWYgKCFDYW5Mb2FkQ29uc3RhbnQoc2l6ZSgpKSkKKyAgICAgICAgICAgIER1
bXBDb25zdGFudExpc3QoZmFsc2UpOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIEptcFNyYyht
X3NpemUpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGptcF9yKFJlZ2lzdGVySUQgZHN0KQorICAg
IHsKKyAgICAgICAgYnJhbmNoKEpNUF9PUENPREUsIGRzdCk7CisgICAgICAgIG5vcCgpOworICAg
IH0KKyAgICAKKyAgICB2b2lkIGptcF9tKGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkKKyAg
ICB7CisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1fc2NyYXRjaCgpOworICAgICAgICAK
KyAgICAgICAgaWYgKChvZmZzZXQgPCAwKSB8fCAob2Zmc2V0ID49IDY0KSkgeworICAgICAgICAg
ICAgTG9hZENvbnN0YW50KChpbnQpb2Zmc2V0LCBzY3IpOworICAgICAgICAgICAgYWRkbF9ycihi
YXNlLCBzY3IpOworICAgICAgICAgICAgbW92bF9tcihzY3IsIHNjcik7CisgICAgICAgIH0gZWxz
ZSBpZiAob2Zmc2V0KSB7CisgICAgICAgICAgICBtb3ZsX21yKG9mZnNldCA+PiAyLCBiYXNlLCBz
Y3IpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbW92bF9tcihiYXNlLCBzY3IpOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBicmFuY2goSk1QX09QQ09ERSwgc2NyKTsKKyAg
ICAgICAgbm9wKCk7CisgICAgICAgIHJlbGVhc2Vfc2NyYXRjaChzY3IpOworCisgICAgfQorICAg
IAorICAgIEptcFNyYyBicmEoKQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFp
bV9zY3JhdGNoKCk7CisgICAgICAgIAorICAgICAgICBpbnQgbV9zaXplID0gc2l6ZSgpOyAKKyAg
ICAgICAgYnJhbmNoKEJSQV9PUENPREUsIDApOworICAgICAgICBMb2FkQ29uc3RhbnQoMHgwLCBz
Y3IsIHRydWUsIGZhbHNlKTsKKyAgICAgICAgbm9wKCk7CisgICAgICAgIHJlbGVhc2Vfc2NyYXRj
aChzY3IpOworICAgICAgICBpZiAoIUNhbkxvYWRDb25zdGFudChzaXplKCkpKQorICAgICAgICAg
ICAgRHVtcENvbnN0YW50TGlzdChmYWxzZSk7CisgICAgCisgICAgICAgIHJldHVybiBKbXBTcmMo
bV9zaXplKTsKKyAgICB9CisKKyAgICBKbXBTcmMgam5lKCkKKyAgICB7CisgICAgICAgIGludCBt
X3NpemUgPSBzaXplKCk7CisgICAgICAgIGJyYW5jaChCRl9PUENPREUsIDApOworICAgICAgICBy
ZXR1cm4gSm1wU3JjKG1fc2l6ZSk7CisgICAgfQorICAgIAorICAgIEptcFNyYyBqZSgpCisgICAg
eworICAgICAgICBpbnQgbV9zaXplID0gc2l6ZSgpOworICAgICAgICBicmFuY2goQlRfT1BDT0RF
LCAwKTsKKyAgICAgICAgcmV0dXJuIEptcFNyYyhtX3NpemUpOworICAgIH0KKyAgICAKKyAgICB2
b2lkIHJldCgpCisgICAgeworICAgICAgICBvbmVTaG9ydE9wKFJUU19PUENPREUpOworICAgIH0K
KworICAgIC8vIEFzc2VtYmxlciBhZG1pbiBtZXRob2RzOgorCisgICAgSm1wRHN0IGxhYmVsKCkK
KyAgICB7CisgICAgICAgIHJldHVybiBKbXBEc3Qoc2l6ZSgpKTsKKyAgICB9CisgICAgCisgICAg
Sm1wRHN0IGxhYmVsKGludCBkaXNwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEptcERzdChzaXpl
KCkgKyBkaXNwKTsKKyAgICB9CisKKyAgICAKKyAgICBKbXBEc3QgYWxpZ24oaW50IGFsaWdubWVu
dCkKKyAgICB7CisgICAgICAgIGlmIChOT1RBTElHTkVEKCh1aW50MTZfdCopR2V0QWRkcmVzcyhz
aXplKCkpKSkKKyAgICAgICAgICAgIG5vcCgpOworCisgICAgICAgIHJldHVybiBsYWJlbCgpOwor
ICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGxpbmtKdW1wKHZvaWQqIGNvZGUsIEptcFNyYyBmcm9t
LCB2b2lkKiB0bykKKyAgICB7CisgICAgICAgIEFTU0VSVChmcm9tLm1fb2Zmc2V0ICE9IC0xKTsK
KyAgICAgICAgCisgICAgICAgIAorICAgICAgICB1aW50MTZfdCogaW5zdHJ1Y3Rpb25QdHIgPSBy
ZWludGVycHJldF9jYXN0PHVpbnQxNl90Kj4gKHJlaW50ZXJwcmV0X2Nhc3Q8aW50Pihjb2RlKSAr
IGZyb20ubV9vZmZzZXQpOworICAgICAgICB1aW50MTZfdCBpbnN0cnVjdGlvbiA9ICppbnN0cnVj
dGlvblB0cjsKKyAgICAgICAgaW50IG9mZnNldEJpdHM7CisgICAgICAgIAorICAgICAgICBpZiAo
KGluc3RydWN0aW9uID09IEJUX09QQ09ERSkgfHwgKGluc3RydWN0aW9uID09IEJGX09QQ09ERSkp
IHsKKyAgICAgICAgCisgICAgICAgICAgICAvKiBCVCBsYWJlbCAgPT0+IEJGIDIgCisgICAgICAg
ICAgICAgICBub3AgICAgICAgICAgIExEUiByZWcKKyAgICAgICAgICAgICAgIG5vcCAgICAgICAg
ICAgYnJhZiBAcmVnCisgICAgICAgICAgICAgICBub3AgICAgICAgICAgIG5vcAorICAgICAgICAg
ICAgKi8KKyAgICAgICAgICAgIG9mZnNldEJpdHMgID0gKGludCl0byAtIChpbnQpY29kZSAtIGZy
b20ubV9vZmZzZXQgLSA4OworICAgICAgICAgICAgCisgICAgICAgICAgICBpbnN0cnVjdGlvbiBe
PSAweDAyMDI7CisgICAgICAgICAgICAqaW5zdHJ1Y3Rpb25QdHIrKyA9IGluc3RydWN0aW9uOwor
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgaW50IG9mZnNldCA9ICAgKChpbnQpKmluc3Ry
dWN0aW9uUHRyICYgMHhGRik7CisgICAgICAgICAgICB1aW50MTZfdCogYWRkcmVzcyAgPSAodWlu
dDE2X3QqKSgob2Zmc2V0IDw8IDIpICsgKCgoaW50KWluc3RydWN0aW9uUHRyICsgNCkgJih+MHgz
KSkpOworICAgICAgICAgICAgKnJlaW50ZXJwcmV0X2Nhc3Q8aW50Kj4oYWRkcmVzcykgPSAoaW50
KW9mZnNldEJpdHM7IAorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgaW5zdHJ1Y3Rpb24g
PSAoMHgwMDIzIHwgKCppbnN0cnVjdGlvblB0cisrICYgMHhGMDApKTsgLy8gYnJhZiBAcmVnOwor
ICAgICAgICAgICAgKmluc3RydWN0aW9uUHRyKysgPSBpbnN0cnVjdGlvbjsKKyAgICAgICAgIH0g
ZWxzZSBpZiAoaW5zdHJ1Y3Rpb24gPT0gQlJBX09QQ09ERSkgeworICAgICAgICAgICAgIAorICAg
ICAgICAgICAgIC8qIEJSQSBsYWJlbCAgPT4gTERSIHJlZworICAgICAgICAgICAgICAgIG5vcCAg
ICAgICAgICAgYnJhZiBAcmVnCisgICAgICAgICAgICAgICAgbm9wICAgICAgICAgICBub3AKKyAg
ICAgICAgICAgICovCisgICAgICAgICAgICAKKyAgICAgICAgICAgIG9mZnNldEJpdHMgID0gKGlu
dCl0byAtIChpbnQpY29kZSAtIGZyb20ubV9vZmZzZXQgLSA2OworICAgICAgICAgICAgCisgICAg
ICAgICAgICBpbnN0cnVjdGlvbiA9ICooaW5zdHJ1Y3Rpb25QdHIgKyAxKTsgLy8gTERSIHJlZwor
ICAgICAgICAgICAgaW50IG9mZnNldFRvUEMgPSAoaW5zdHJ1Y3Rpb24gJiAweEZGKTsKKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChOT1RBTElHTkVEKGluc3RydWN0aW9uUHRyKSkK
KyAgICAgICAgICAgICAgICAqaW5zdHJ1Y3Rpb25QdHIgPSAoKGluc3RydWN0aW9uICYgMHhERjAw
KSB8ICsrb2Zmc2V0VG9QQyk7CisgICAgICAgICAgICBlbHNlIAorICAgICAgICAgICAgICAgICpp
bnN0cnVjdGlvblB0ciA9IGluc3RydWN0aW9uOworICAgICAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgIHVpbnQxNl90KiBhZGRyZXNzICA9ICh1aW50MTZfdCopKChvZmZzZXRUb1BDIDw8IDIp
ICsgKCgoaW50KWluc3RydWN0aW9uUHRyICsgNCkgJih+MHgzKSkpOworICAgICAgICAgICAgKnJl
aW50ZXJwcmV0X2Nhc3Q8aW50Kj4oYWRkcmVzcykgPSAoaW50KW9mZnNldEJpdHM7ICAgICAgICAg
ICAgICAgIAorCisgICAgICAgICAgICAqKCsraW5zdHJ1Y3Rpb25QdHIpID0gKDB4MDAyMyB8IChp
bnN0cnVjdGlvbiAmIDB4RjAwKSk7IC8vIGJyYWYgQHJlZworICAgICAgICAgICAKKyAgICAgICAg
IH0gZWxzZSAKKyAgICAgICAgICAgIEFTU0VSVCgwKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9p
ZCBsaW5rQ2FsbCh2b2lkKiBjb2RlLCBKbXBTcmMgZnJvbSwgdm9pZCogdG8pIC8vIG1fY29kZSwg
Y2FsbC5tX2ptcCwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZnVuY3Rpb24pCisgICAgeworICAg
ICAgICB1aW50MTZfdCogaW5zdHJ1Y3Rpb25QdHIgPSByZWludGVycHJldF9jYXN0PHVpbnQxNl90
Kj4oKGludCljb2RlICsgZnJvbS5tX29mZnNldCk7CisgICAgICAgIGluc3RydWN0aW9uUHRyID0g
aW5zdHJ1Y3Rpb25QdHIgLTM7CisKKyAgICAgICAgaW50IG9mZnNldCA9ICAgKChpbnQpKihpbnN0
cnVjdGlvblB0cikgJiAweEZGKTsKKyAgICAgICAgCisgICAgICAgIHVpbnQxNl90KiBhZGRyZXNz
ICA9ICh1aW50MTZfdCopKChvZmZzZXQgPDwgMikgKyAoKChpbnQpaW5zdHJ1Y3Rpb25QdHIgKyA0
KSAmKH4weDMpKSk7CisgICAgICAgICpyZWludGVycHJldF9jYXN0PGludCo+KGFkZHJlc3MpID0g
KGludCl0bzsKKyAgICB9CisgICAgCisgICAgc3RhdGljIHZvaWQgbGlua1BvaW50ZXIodm9pZCog
Y29kZSwgSm1wRHN0IHdoZXJlLCB2b2lkKiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHVpbnQxNl90
KiBpbnN0cnVjdGlvblB0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDE2X3QqPigoaW50KWNvZGUg
KyB3aGVyZS5tX29mZnNldCk7CisgICAgICAgIAorICAgICAgICBpbnQgb2Zmc2V0ID0gICAoKGlu
dCkqaW5zdHJ1Y3Rpb25QdHIgJiAweEZGKTsKKyAgICAgICAgCisgICAgICAgIHVpbnQxNl90KiBh
ZGRyZXNzICA9ICh1aW50MTZfdCopKChvZmZzZXQgPDwgMikgKyAoKChpbnQpaW5zdHJ1Y3Rpb25Q
dHIgKyA0KSAmKH4weDMpKSk7CisgICAgICAgICpyZWludGVycHJldF9jYXN0PGludCo+KGFkZHJl
c3MpID0gKGludCl2YWx1ZTsKKyAgICB9CisgICAKKyAgICBzdGF0aWMgdW5zaWduZWQgZ2V0Q2Fs
bFJldHVybk9mZnNldChKbXBTcmMgY2FsbCkKKyAgICB7CisgICAgICAgIEFTU0VSVChjYWxsLm1f
b2Zmc2V0ID49IDApOworICAgICAgICByZXR1cm4gY2FsbC5tX29mZnNldDsKKyAgICB9CisKKyAg
CisgICAgc3RhdGljIHZvaWQgcmVwYXRjaFBvaW50ZXIodm9pZCogd2hlcmUsIHZvaWQqIHZhbHVl
KQorICAgIHsKKyAgICAgICAgcGF0Y2hQb2ludGVyKHdoZXJlLCB2YWx1ZSk7ICAgIAorICAgIH0K
KyAgICAKKyAgICBzdGF0aWMgdm9pZCByZXBhdGNoTG9hZFB0clRvTEVBKHZvaWQqIHdoZXJlKQor
ICAgIHsKKyAgICAgICAgdWludDE2X3QqIGxvYWRPcCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDE2
X3QqPih3aGVyZSkgKyAyOworCisgICAgICAgICpsb2FkT3AgPSAqbG9hZE9wIHwgMHgxOworICAg
IEV4ZWN1dGFibGVBbGxvY2F0b3I6OmNhY2hlRmx1c2gobG9hZE9wLCBzaXplb2YodWludDE2X3Qp
KTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIHZvaWQgcmVwYXRjaEludDMyKHZvaWQqIHdoZXJl
LCBpbnQzMl90IHZhbHVlKQorICAgIHsKKyAgICAgICAgdWludDE2X3QqIGluc3RydWN0aW9uUHRy
ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50MTZfdCo+KHdoZXJlKTsKKyAgICAgICAgCisgICAgICAg
IC8qCisgICAgICAgICAgICBjb2RlQCAgbW92LmwgQChvZmZzZXQgLCBQQykgLCByZWcKKyAgICAg
ICAgKi8gIAorICAgICAgICAKKyAgICAgICAgaW50IG9mZnNldCA9ICAgKChpbnQpKmluc3RydWN0
aW9uUHRyICYgMHhGRik7CisgICAgICAgIAorICAgICAgICB1aW50MTZfdCogYWRkcmVzcyAgPSAo
dWludDE2X3QqKSgob2Zmc2V0IDw8IDIpICsgKCgoaW50KXdoZXJlICsgNCkgJih+MHgzKSkpOwor
ICAgICAgICAqcmVpbnRlcnByZXRfY2FzdDxpbnQqPihhZGRyZXNzKSA9IChpbnQpdmFsdWU7Cisg
ICAgfQorCisKKyAgICAKKyAgICBzdGF0aWMgdm9pZCByZWxpbmtDYWxsKHZvaWQqIGZyb20sIHZv
aWQqIHRvKQorICAgIHsKKyAgICAgICAgdWludDE2X3QqIGluc3RydWN0aW9uUHRyID0gcmVpbnRl
cnByZXRfY2FzdDx1aW50MTZfdCo+KGZyb20pOworICAgICAgICBpbnN0cnVjdGlvblB0ciA9IGlu
c3RydWN0aW9uUHRyIC0gMzsKKyAgICAgICAgCisgICAgICAgIGludCBvZmZzZXQgPSAgICgoaW50
KSppbnN0cnVjdGlvblB0ciAmIDB4RkYpOworICAgICAgICAKKyAgICAgICAgdWludDE2X3QqIGFk
ZHJlc3MgID0gKHVpbnQxNl90KikoKG9mZnNldCA8PCAyKSArICgoKGludClpbnN0cnVjdGlvblB0
ciArIDQpICYofjB4MykpKTsKKyAgICAgICAgKnJlaW50ZXJwcmV0X2Nhc3Q8aW50Kj4oYWRkcmVz
cykgPSAoaW50KXRvOyAKKyAgICB9CisgICAgCisgICAgc3RhdGljIHZvaWQgcmVsaW5rSnVtcCh2
b2lkKiBmcm9tLCB2b2lkKiB0bykKKyAgICB7CisgICAgICAgIHVpbnQxNl90KiBpbnN0cnVjdGlv
blB0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDE2X3QqPiAoZnJvbSk7CisgICAgICAgIHVpbnQx
Nl90IGluc3RydWN0aW9uID0gKmluc3RydWN0aW9uUHRyOworICAgICAgICBpbnQgb2Zmc2V0Qml0
czsKKyAgICAgICAgdWludDE2X3QqIGFkZHJlc3M7CisgICAgICAgIAorICAgICAgICBpZiAoKCgq
aW5zdHJ1Y3Rpb25QdHIgJiAweEZGMDApID09IEJUX09QQ09ERSkgfHwgKCgqaW5zdHJ1Y3Rpb25Q
dHIgJiAweEZGMDApID09IEJGX09QQ09ERSkpIHsKKworICAgICAgICAgICAgb2Zmc2V0Qml0cyAg
PSAoaW50KXRvIC0gKGludClmcm9tIC0gODsKKyAgICAgICAgICAgIGluc3RydWN0aW9uUHRyKys7
CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBpbnQgb2Zmc2V0ID0gICAoKGludCkqaW5z
dHJ1Y3Rpb25QdHIgJiAweEZGKTsKKyAgICAgICAgICAgIGFkZHJlc3MgID0gKHVpbnQxNl90Kiko
KG9mZnNldCA8PCAyKSArICgoKGludClpbnN0cnVjdGlvblB0ciArIDQpICYofjB4MykpKTsKKyAg
ICAgICAgICAgICpyZWludGVycHJldF9jYXN0PGludCo+KGFkZHJlc3MpID0gKGludClvZmZzZXRC
aXRzOworICAgICAgICAKKyAgICAgICAgICAgIGluc3RydWN0aW9uID0gKDB4MDAyMyB8ICgqaW5z
dHJ1Y3Rpb25QdHIrKyAmIDB4RjAwKSk7IC8vIGJyYWYgQHJlZzsKKyAgICAgICAgICAgICppbnN0
cnVjdGlvblB0cisrID0gaW5zdHJ1Y3Rpb247CisgICAgICAgICAgICAKKyAgICAgICAgIH0gZWxz
ZSBpZiAoKCppbnN0cnVjdGlvblB0ciAmIDB4RkYwMCkgPT0gQlJBX09QQ09ERSkgeworICAgICAg
ICAgICAgIAorICAgICAgICAgICAgb2Zmc2V0Qml0cyAgPSAoaW50KXRvIC0gKGludClmcm9tIC0g
MjsKKyAgICAgICAgICAgIGluc3RydWN0aW9uID0gKihpbnN0cnVjdGlvblB0ciArIDEpOyAvLyBM
RFIgcmVnCisgICAgICAgICAgICBpbnQgb2Zmc2V0VG9QQyA9IChpbnN0cnVjdGlvbiAmIDB4RkYp
OworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKE5PVEFMSUdORUQoaW5zdHJ1Y3Rp
b25QdHIpKSAKKyAgICAgICAgICAgICAgICAqaW5zdHJ1Y3Rpb25QdHIgPSAoKGluc3RydWN0aW9u
ICYgMHhERjAwKSB8ICsrb2Zmc2V0VG9QQyk7CisgICAgICAgICAgICBlbHNlIAorICAgICAgICAg
ICAgICAgICppbnN0cnVjdGlvblB0ciA9IGluc3RydWN0aW9uOworICAgICAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGFkZHJlc3MgID0gKHVpbnQxNl90KikoKG9mZnNldFRvUEMgPDwgMikg
KyAoKChpbnQpaW5zdHJ1Y3Rpb25QdHIgKyA0KSAmKH4weDMpKSk7CisgICAgICAgICAgICAqcmVp
bnRlcnByZXRfY2FzdDxpbnQqPihhZGRyZXNzKSA9IChpbnQpb2Zmc2V0Qml0czsKKworICAgICAg
ICAgICAgKigrK2luc3RydWN0aW9uUHRyKSA9ICgweDAwMjMgfCAoaW5zdHJ1Y3Rpb24gJiAweEYw
MCkpOyAvLyBicmFmIEByZWcKKworICAgICAgICAgfSBlbHNlIAorICAgICAgICAgICAgQVNTRVJU
KDApOworICAgIH0KKyAgICAKKyAgICAvLyBMaW5raW5nICYgcGF0Y2hpbmc6CisKKyAgICB2b2lk
IGxpbmtKdW1wKEptcFNyYyBmcm9tLCBKbXBEc3QgdG8pCisgICAgeworICAgICAgICBBU1NFUlQo
dG8ubV9vZmZzZXQgIT0gLTEpOworICAgICAgICBBU1NFUlQoZnJvbS5tX29mZnNldCAhPSAtMSk7
CisgICAgICAgIAorICAgICAgICB1aW50MTZfdCogaW5zdHJ1Y3Rpb25QdHIgPSByZWludGVycHJl
dF9jYXN0PHVpbnQxNl90Kj4gKChyZWludGVycHJldF9jYXN0PGludD4oZGF0YSgpKSArIGZyb20u
bV9vZmZzZXQpKTsKKyAgICAgICAgdWludDE2X3QgaW5zdHJ1Y3Rpb24gPSAqaW5zdHJ1Y3Rpb25Q
dHI7CisgICAgICAgIGludCBvZmZzZXRCaXRzOworICAgICAgICAKKyAgICAgICAgaWYgKChpbnN0
cnVjdGlvbiA9PSBCVF9PUENPREUpIHx8IChpbnN0cnVjdGlvbiA9PSBCRl9PUENPREUpKSB7Cisg
ICAgICAgIAorICAgICAgICAgICAgLyogQlQgbGFiZWwgICAgPT4gQkYgMiAKKyAgICAgICAgICAg
ICAgIG5vcCAgICAgICAgICAgIExEUiByZWcKKyAgICAgICAgICAgICAgIG5vcCAgICAgICAgICAg
IGJyYWYgQHJlZworICAgICAgICAgICAgICAgbm9wICAgICAgICAgICAgbm9wCisgICAgICAgICAg
ICAqLworICAgICAgICAgICAgb2Zmc2V0Qml0cyAgPSAodG8ubV9vZmZzZXQgLSBmcm9tLm1fb2Zm
c2V0KSAtIDg7CisgICAgICAgICAgICBpbnN0cnVjdGlvbiBePSAweDAyMDI7CisgICAgICAgICAg
ICAqaW5zdHJ1Y3Rpb25QdHIrKyA9IGluc3RydWN0aW9uOworICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgaWYgKCEoKmluc3RydWN0aW9uUHRyICYgMHhGRikpCisgICAgICAgICAgICAgICAg
cmVwYXRjaENvbnN0YW50KGZyb20ubV9vZmZzZXQgKzIsIG9mZnNldEJpdHMpOyAvLyBub3QgeWV0
IGR1bXBlZAorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgaW50IG9mZnNldCA9
ICAgKChpbnQpKmluc3RydWN0aW9uUHRyICYgMHhGRik7CisgICAgICAgICAgICAgICAgdWludDE2
X3QqIGFkZHJlc3MgID0gKHVpbnQxNl90KikoKG9mZnNldCA8PCAyKSArICgoKGludClpbnN0cnVj
dGlvblB0ciArIDQpICYofjB4MykpKTsKKyAgICAgICAgICAgICAgICAqcmVpbnRlcnByZXRfY2Fz
dDxpbnQqPihhZGRyZXNzKSA9IChpbnQpb2Zmc2V0Qml0czsKKyAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgaW5zdHJ1Y3Rpb24gPSAoMHgwMDIzIHwgKCppbnN0cnVj
dGlvblB0cisrICYgMHhGMDApKTsgLy8gYnJhZiBAcmVnOworICAgICAgICAgICAgICppbnN0cnVj
dGlvblB0cisrID0gaW5zdHJ1Y3Rpb247CisgICAgICAgICAgICAgCisgICAgICAgICB9IGVsc2Ug
aWYgKGluc3RydWN0aW9uID09IEJSQV9PUENPREUpIHsKKyAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAvKiBCUkEgbGFiZWwgID0+IExEUiByZWcKKyAgICAgICAgICAgICAgICBub3AgICAgICAg
ICAgIGJyYWYgQHJlZworICAgICAgICAgICAgICAgIG5vcCAgICAgICAgICAgbm9wCisgICAgICAg
ICAgICAqLworICAgICAgICAgICAgCisgICAgICAgICAgICBvZmZzZXRCaXRzICA9ICh0by5tX29m
ZnNldCAtIGZyb20ubV9vZmZzZXQpIC0gNjsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaW5z
dHJ1Y3Rpb24gPSAqKGluc3RydWN0aW9uUHRyICsgMSk7IC8vIExEUiByZWcKKyAgICAgICAgICAg
IGludCBvZmZzZXRUb1BDID0gKGluc3RydWN0aW9uICYgMHhGRik7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGlmICghb2Zmc2V0VG9QQykgeyAvLyBDb25zdGFudCBub3QgeWV0IGR1bXBlZAor
ICAgICAgICAgICAgICAgIHJlcGF0Y2hDb25zdGFudChmcm9tLm1fb2Zmc2V0ICsgMiwgb2Zmc2V0
Qml0cywgZnJvbS5tX29mZnNldCk7CisgICAgICAgICAgICAgICAgKmluc3RydWN0aW9uUHRyID0g
aW5zdHJ1Y3Rpb247CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmIChO
T1RBTElHTkVEKGluc3RydWN0aW9uUHRyKSkKKyAgICAgICAgICAgICAgICAgICAgKmluc3RydWN0
aW9uUHRyID0gKChpbnN0cnVjdGlvbiAmIDB4REYwMCkgfCArK29mZnNldFRvUEMpOworICAgICAg
ICAgICAgICAgIGVsc2UgCisgICAgICAgICAgICAgICAgICAgKmluc3RydWN0aW9uUHRyID0gaW5z
dHJ1Y3Rpb247CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHVpbnQxNl90
KiBhZGRyZXNzICA9ICh1aW50MTZfdCopKChvZmZzZXRUb1BDIDw8IDIpICsgKCgoaW50KWluc3Ry
dWN0aW9uUHRyICsgNCkgJih+MHgzKSkpOworICAgICAgICAgICAgICAgICpyZWludGVycHJldF9j
YXN0PGludCo+KGFkZHJlc3MpID0gKGludClvZmZzZXRCaXRzOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgKigrK2luc3RydWN0aW9uUHRyKSA9ICgweDAwMjMgfCAoaW5zdHJ1Y3Rpb24gJiAw
eEYwMCkpOyAvLyBicmFmIEByZWcgICAgICAgICAgICAKKyAgICAgICAgIH0gZWxzZSAKKyAgICAg
ICAgICAgIEFTU0VSVCgwKTsKKworICAgICB9CisgICAgIAorICAgICAKKyAgICBzdGF0aWMgdm9p
ZCBsaW5rSnVtcEZ1bmModm9pZCogY29kZSwgSm1wU3JjIGZyb20sIHZvaWQqIHRvKQorICAgIHsK
KyAgICAgICAgQVNTRVJUKGZyb20ubV9vZmZzZXQgIT0gLTEpOyAgICAgICAgCisgICAgICAgIHVp
bnQxNl90KiBpbnN0cnVjdGlvblB0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDE2X3QqPiAocmVp
bnRlcnByZXRfY2FzdDxpbnQ+KGNvZGUpICsgZnJvbS5tX29mZnNldCk7CisgICAgICAgIHVpbnQx
Nl90IGluc3RydWN0aW9uID0gKmluc3RydWN0aW9uUHRyOworICAgICAgICAKKyAgICAgICAgQVNT
RVJUKChpbnN0cnVjdGlvbiA9PSBCVF9PUENPREUpIHx8IChpbnN0cnVjdGlvbiA9PSBCRl9PUENP
REUpKTsKKyAgICAgICAgCisgICAgICAgIC8qIEJUIGxhYmVsICAgID0+IEJGIDIgCisgICAgICAg
ICAgICAgIG5vcCAgICAgICAgIExEUiByZWcKKyAgICAgICAgICAgICAgbm9wICAgICAgICAganVt
cCBAcmVnCisgICAgICAgICAgICAgIG5vcCAgICAgICAgIG5vcAorICAgICAgICAqLworICAgICAg
ICBpbnN0cnVjdGlvbiBePSAweDAyMDI7CisgICAgICAgICppbnN0cnVjdGlvblB0cisrID0gaW5z
dHJ1Y3Rpb247CisgICAgCisgICAgLyp0aGUgYXNzZW1ibHkgY29kZSBpcyBnZW5lcmF0ZWQqLwor
ICAgICAgICAKKyAgICAgICAgaW50IG9mZnNldCA9ICAgKChpbnQpKmluc3RydWN0aW9uUHRyICYg
MHhGRik7CisgICAgdWludDE2X3QqIGFkZHJlc3MgID0gKHVpbnQxNl90KikoKG9mZnNldCA8PCAy
KSArICgoKGludClpbnN0cnVjdGlvblB0ciArIDQpICYofjB4MykpKTsKKyAgICAqcmVpbnRlcnBy
ZXRfY2FzdDxpbnQqPihhZGRyZXNzKSA9IChpbnQpdG87CisgICAgCisgICAgaW5zdHJ1Y3Rpb24g
PSAoMHg0MDJCIHwgKCppbnN0cnVjdGlvblB0cisrICYgMHhGMDApKTsgLy8ganVtIEByZWc7Cisg
ICAgKmluc3RydWN0aW9uUHRyKysgPSBpbnN0cnVjdGlvbjsKKyAgICAgICAgICAgICAKKyAgICB9
IAorCisgIAorICAgIHN0YXRpYyB2b2lkKiBnZXRSZWxvY2F0ZWRBZGRyZXNzKHZvaWQqIGNvZGUs
IEptcFNyYyBqdW1wKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dm9p
ZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8aW50Pihjb2RlKSArIGp1bXAubV9vZmZzZXQpOworICAgIH0K
KyAgICAKKyAgICBzdGF0aWMgdm9pZCogZ2V0UmVsb2NhdGVkQWRkcmVzcyh2b2lkKiBjb2RlLCBK
bXBEc3QgZGVzdGluYXRpb24pCisgICAgeworICAgICAgICBBU1NFUlQoZGVzdGluYXRpb24ubV9v
ZmZzZXQgIT0gLTEpOworCisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PHZvaWQqPihy
ZWludGVycHJldF9jYXN0PGludD4oY29kZSkgKyBkZXN0aW5hdGlvbi5tX29mZnNldCk7CisgICAg
fQorICAgIAorICAgIHN0YXRpYyBpbnQgZ2V0RGlmZmVyZW5jZUJldHdlZW5MYWJlbHMoSm1wRHN0
IHNyYywgSm1wRHN0IGRzdCkKKyAgICB7CisgICAgICAgIHJldHVybiBkc3QubV9vZmZzZXQgLSBz
cmMubV9vZmZzZXQ7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBpbnQgZ2V0RGlmZmVyZW5jZUJl
dHdlZW5MYWJlbHMoSm1wRHN0IHNyYywgSm1wU3JjIGRzdCkKKyAgICB7CisgICAgICAgIHJldHVy
biBkc3QubV9vZmZzZXQgLSBzcmMubV9vZmZzZXQ7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBp
bnQgZ2V0RGlmZmVyZW5jZUJldHdlZW5MYWJlbHMoSm1wU3JjIHNyYywgSm1wRHN0IGRzdCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBkc3QubV9vZmZzZXQgLSBzcmMubV9vZmZzZXQ7CisgICAgfQor
ICAgIAorICAgIHN0YXRpYyB2b2lkIHBhdGNoUG9pbnRlcih2b2lkKiBjb2RlLCBKbXBEc3Qgd2hl
cmUsIHZvaWQqIHZhbHVlKQorICAgIHsKKyAgICAgICAgcGF0Y2hQb2ludGVyKHJlaW50ZXJwcmV0
X2Nhc3Q8Y2hhcio+KGNvZGUpICsgd2hlcmUubV9vZmZzZXQsIHZhbHVlKTsKKyAgICB9CisgICAg
CisgICAgc3RhdGljIHZvaWQgcGF0Y2hQb2ludGVyKHZvaWQqIGNvZGUsIHZvaWQqIHZhbHVlKQor
ICAgIHsKKyAgICAgICAgcGF0Y2hJbnQzMihjb2RlLCByZWludGVycHJldF9jYXN0PHVpbnQzMl90
Pih2YWx1ZSkpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgdm9pZCBwYXRjaEludDMyKHZvaWQq
IGNvZGUsIHVpbnQzMl90IHZhbHVlKQorICAgIHsKKyAgICAgICAgdWludDE2X3QqIGluc3RydWN0
aW9uUHRyID0gcmVpbnRlcnByZXRfY2FzdDx1aW50MTZfdCo+KGNvZGUpOworICAgICAgICAKKyAg
ICAgICAgLyoKKyAgICAgICAgY29kZUAgIG1vdi5sIEAob2Zmc2V0ICwgUEMpICwgcmVnCisgICAg
Ki8gIAorICAgICAgICBpbnQgb2Zmc2V0ID0gICAoKGludCkqaW5zdHJ1Y3Rpb25QdHIgJiAweEZG
KTsKKyAgICAgICAgCisgICAgICAgIHVpbnQxNl90KiBhZGRyZXNzICA9ICh1aW50MTZfdCopKChv
ZmZzZXQgPDwgMikgKyAoKChpbnQpY29kZSArIDQpICYofjB4MykpKTsKKyAgICAgICAgKnJlaW50
ZXJwcmV0X2Nhc3Q8aW50Kj4oYWRkcmVzcykgPSAoaW50KXZhbHVlOworICAgIH0KKworICAgIAor
ICAgIHZvaWQqIGV4ZWN1dGFibGVDb3B5KEV4ZWN1dGFibGVQb29sKiBhbGxvY2F0b3IpCisgICAg
eworICAgICAgICBEdW1wQ29uc3RhbnRMaXN0KGZhbHNlKTsKKyAgICAKKyAgICAgICAgdm9pZCog
Y29weSA9IG1fYnVmZmVyLmV4ZWN1dGFibGVDb3B5KGFsbG9jYXRvcik7CisKKyAgICAgICAgQVNT
RVJUKGNvcHkpOyAgICAgICAgCisgICAgICAgIHJldHVybiBjb3B5OworICAgIH0KKworICAgIHBy
aXZhdGU6CisKKyAgICBzdGF0aWMgY29uc3QgaW50IG1heEluc3RydWN0aW9uU2l6ZSA9IDE2Owor
CisgICAgcHVibGljOgorCisgICAgICAgIC8vIExlZ2FjeSBwcmVmaXggYnl0ZXM6CisgICAgICAg
IC8vCisgICAgICAgIC8vIFRoZXNlIGFyZSBlbW1pdHRlZCBwcmlvciB0byB0aGUgaW5zdHJ1Y3Rp
b24uCisKKyAgICAgICAgdm9pZCBwcmVmaXgodWludDE2X3QgcHJlKQorICAgICAgICB7CisgICAg
ICAgICAgICBtX2J1ZmZlci5wdXRCeXRlKHByZSk7CisgICAgICAgIH0KKyAgICAgICAgCisKKyAg
ICAgICAgdm9pZCBvbmVTaG9ydE9wKHVpbnQxNl90IG9wY29kZSkKKyAgICAgICAgeworICAgICAg
ICAgICAgbV9idWZmZXIuZW5zdXJlU3BhY2UobWF4SW5zdHJ1Y3Rpb25TaXplKTsKKyAgICAgICAg
ICAgIG1fYnVmZmVyLnB1dFNob3J0VW5jaGVja2VkKG9wY29kZSk7ICAgICAgICAgICAgCisgICAg
ICAgIH0KKyAgICAKKyAgICAgICAgdm9pZCBvbmVTaG9ydEZsb2F0T3AodWludDE2X3Qgb3Bjb2Rl
KQorICAgICAgICB7CisgICAgICAgICAgICBtX2J1ZmZlci5lbnN1cmVTcGFjZShtYXhJbnN0cnVj
dGlvblNpemUpOworICAgICAgICAgICAgbV9idWZmZXIucHV0U2hvcnRVbmNoZWNrZWQob3Bjb2Rl
KTsgICAgICAgICAgICAKKyAgICAgICAgfQorCisgICAgICAgIC8vIEltbWVkaWF0ZXM6CisgICAg
ICAgIC8vCisgICAgICAgIC8vIEFuIGltbWVkYWl0ZSBzaG91bGQgYmUgYXBwZW5kZWQgd2hlcmUg
YXBwcm9wcmlhdGUgYWZ0ZXIgYW4gb3AgaGFzIGJlZW4gZW1pdHRlZC4KKyAgICAgICAgLy8gVGhl
IHdyaXRlcyBhcmUgdW5jaGVja2VkIHNpbmNlIHRoZSBvcGNvZGUgZm9ybWF0dGVycyBhYm92ZSB3
aWxsIGhhdmUgZW5zdXJlZCBzcGFjZS4KKworICAgICAgICB2b2lkIGltbWVkaWF0ZTgoaW50IGlt
bSkKKyAgICAgICAgeworICAgICAgICAgICAgbV9idWZmZXIucHV0Qnl0ZVVuY2hlY2tlZChpbW0p
OworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBpbW1lZGlhdGUzMihpbnQgaW1tKQorICAgICAg
ICB7ICAgICAKKyAgICAgICAgICAgIG1fYnVmZmVyLmVuc3VyZVNwYWNlKG1heEluc3RydWN0aW9u
U2l6ZSk7ICAgICAgIAorICAgICAgICAgICAgbV9idWZmZXIucHV0SW50VW5jaGVja2VkKGltbSk7
CisgICAgICAgIH0KKworCisgICAgICAgIEptcFNyYyBpbW1lZGlhdGVSZWwzMigpCisgICAgICAg
IHsKKyAgICAgICAgICAgIG1fYnVmZmVyLnB1dEludFVuY2hlY2tlZCgwKTsKKyAgICAgICAgICAg
IHJldHVybiBKbXBTcmMoc2l6ZSgpKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEFkbWluaXN0
cmF0aXZlIG1ldGhvZHM6CisKKyAgICAgICAgYm9vbCBpc0FsaWduZWQoaW50IGFsaWdubWVudCkg
Y29uc3QgeyByZXR1cm4gbV9idWZmZXIuaXNBbGlnbmVkKGFsaWdubWVudCk7IH0KKyAgICAgICAg
dm9pZCogZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fYnVmZmVyLmRhdGEoKTsgfQorICAgICAgICBp
bnQgc2l6ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2J1ZmZlci5zaXplKCk7
CisgICAgICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICAgIEFzc2VtYmxlckJ1ZmZlciBtX2J1
ZmZlcjsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxFKEFTU0VN
QkxFUikgJiYgQ1BVKFNINCkKKworI2VuZGlmIC8vIFNINEFzc2VtYmxlcl9oCmRpZmYgLS1naXQg
YS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5oIGIvSmF2YVNjcmlwdENv
cmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaAppbmRleCBiNjBkNTkxLi5iNDlhZmNkIDEwMDY0
NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5oCisrKyBiL0ph
dmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmgKQEAgLTI5NCw2ICsyOTQsMzMg
QEAgcHVibGljOgogICAgIHsKICAgICAgICAgQ2FjaGVSYW5nZUZsdXNoKGNvZGUsIHNpemUsIENB
Q0hFX1NZTkNfQUxMKTsKICAgICB9CisjZWxpZiBDUFUoU0g0KQorI2luY2x1ZGUgPGFzbS9jYWNo
ZWN0bC5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KKyNpbmNsdWRlIDxzeXMvc3lzY2FsbC5o
PgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCisjaWZuZGVmIF9fTlJfY2FjaGVmbHVzaAorI2RlZmlu
ZSBfX05SX2NhY2hlZmx1c2ggX19OUl9tb2RpZnlfbGR0CisjZW5kaWYKKworI2RlZmluZSBMSU5V
WF9QQUdFX1NJWkUgICAgICAgNDA5NgorICAgIHN0YXRpYyB2b2lkIGNhY2hlRmx1c2godm9pZCog
Y29kZSwgc2l6ZV90IHNpemUpCisgICAgeworICAgICAgICB1bnNpZ25lZCBpbnQgYSwgYjsKKyAg
ICAgICAgYSA9ICh1bnNpZ25lZCBpbnQpY29kZSAmIH4oTElOVVhfUEFHRV9TSVpFIC0gMSk7Cisg
ICAgICAgIGIgPSAoKHVuc2lnbmVkIGludCljb2RlICsgc2l6ZSArIChMSU5VWF9QQUdFX1NJWkUg
LSAxKSkgJiB+KExJTlVYX1BBR0VfU0laRSAtIDEpOworCisgICAgICAgIGludCByZXMgPSBzeXNj
YWxsKF9fTlJfY2FjaGVmbHVzaCwgYSwgTElOVVhfUEFHRV9TSVpFLCBDQUNIRUZMVVNIX0RfV0Ig
fCBDQUNIRUZMVVNIX0kpOworICAgICAgICBBU1NFUlQoIXJlcyk7CisKKyAgICAgICAgd2hpbGUg
KGIgLSBhID4gTElOVVhfUEFHRV9TSVpFKSB7CisgICAgICAgICAgICBhID0gYSArIExJTlVYX1BB
R0VfU0laRTsKKyAgICAgICAgICAgIHJlcyA9IHN5c2NhbGwoX19OUl9jYWNoZWZsdXNoLCBhLCBM
SU5VWF9QQUdFX1NJWkUsIENBQ0hFRkxVU0hfRF9XQiB8IENBQ0hFRkxVU0hfSSk7CisKKyAgICAg
ICAgICAgIEFTU0VSVCghcmVzKTsKKyAgICAgICAgfQorICAgIH0KICNlbHNlCiAgICAgI2Vycm9y
ICJUaGUgY2FjaGVGbHVzaCBzdXBwb3J0IGlzIG1pc3Npbmcgb24gdGhpcyBwbGF0Zm9ybS4iCiAj
ZW5kaWYKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3lhcnIvUmVnZXhKSVQuY3BwIGIvSmF2
YVNjcmlwdENvcmUveWFyci9SZWdleEpJVC5jcHAKaW5kZXggNWE1M2NlZC4uNWExOTllNyAxMDA2
NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUveWFyci9SZWdleEpJVC5jcHAKKysrIGIvSmF2YVNjcmlw
dENvcmUveWFyci9SZWdleEpJVC5jcHAKQEAgLTUzLDYgKzUzLDE4IEBAIGNsYXNzIFJlZ2V4R2Vu
ZXJhdG9yIDogcHJpdmF0ZSBNYWNyb0Fzc2VtYmxlciB7CiAgICAgc3RhdGljIGNvbnN0IFJlZ2lz
dGVySUQgcmVnVDEgPSBBUk1SZWdpc3RlcnM6OnI2OwogCiAgICAgc3RhdGljIGNvbnN0IFJlZ2lz
dGVySUQgcmV0dXJuUmVnaXN0ZXIgPSBBUk1SZWdpc3RlcnM6OnIwOworI2VsaWYgQ1BVKFNINCkK
KyAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCBpbnB1dCA9IFNINDo6UjQ7CisgICAgc3RhdGlj
IGNvbnN0IFJlZ2lzdGVySUQgaW5kZXggPSBTSDQ6OlI1OworICAgIHN0YXRpYyBjb25zdCBSZWdp
c3RlcklEIGxlbmd0aCA9IFNINDo6UjY7CisgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgb3V0
cHV0ID0gU0g0OjpSNzsKKworICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIHJlZ1QwID0gU0g0
OjpSMDsKKyAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCByZWdUMSA9IFNINDo6UjE7CisKKyAg
ICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCByZXR1cm5SZWdpc3RlciA9IFNINDo6UjA7CisjZGVm
aW5lIFplcm8gU0g0QXNzZW1ibGVyOjpFUQorI2RlZmluZSBOb25aZXJvIFNINEFzc2VtYmxlcjo6
TkUKICNlbGlmIENQVShNSVBTKQogICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIGlucHV0ID0g
TUlQU1JlZ2lzdGVyczo6YTA7CiAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgaW5kZXggPSBN
SVBTUmVnaXN0ZXJzOjphMTsKQEAgLTU1NSw2ICs1NjcsNyBAQCBjbGFzcyBSZWdleEdlbmVyYXRv
ciA6IHByaXZhdGUgTWFjcm9Bc3NlbWJsZXIgewogICAgICAgICB9CiAgICAgfQogCisjaWYgIUNQ
VShTSDQpCiAgICAgdm9pZCBnZW5lcmF0ZVBhdHRlcm5DaGFyYWN0ZXJQYWlyKFRlcm1HZW5lcmF0
aW9uU3RhdGUmIHN0YXRlKQogICAgIHsKICAgICAgICAgY29uc3QgUmVnaXN0ZXJJRCBjaGFyYWN0
ZXIgPSByZWdUMDsKQEAgLTU3OCw2ICs1OTEsNyBAQCBjbGFzcyBSZWdleEdlbmVyYXRvciA6IHBy
aXZhdGUgTWFjcm9Bc3NlbWJsZXIgewogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIHN0YXRl
Lmp1bXBUb0JhY2t0cmFjayhicmFuY2gzMldpdGhVbmFsaWduZWRIYWxmV29yZHMoTm90RXF1YWws
IEJhc2VJbmRleChpbnB1dCwgaW5kZXgsIFRpbWVzVHdvLCBzdGF0ZS5pbnB1dE9mZnNldCgpICog
c2l6ZW9mKFVDaGFyKSksIEltbTMyKGNoUGFpcikpLCB0aGlzKTsKICAgICB9CisjZW5kaWYKIAog
ICAgIHZvaWQgZ2VuZXJhdGVQYXR0ZXJuQ2hhcmFjdGVyRml4ZWQoVGVybUdlbmVyYXRpb25TdGF0
ZSYgc3RhdGUpCiAgICAgewpAQCAtMTE0Miw4ICsxMTU2LDEzIEBAIGNsYXNzIFJlZ2V4R2VuZXJh
dG9yIDogcHJpdmF0ZSBNYWNyb0Fzc2VtYmxlciB7CiAgICAgICAgICAgICBjYXNlIFF1YW50aWZp
ZXJGaXhlZENvdW50OgogICAgICAgICAgICAgICAgIGlmICh0ZXJtLnF1YW50aXR5Q291bnQgPT0g
MSkgewogICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGUuaXNTaW5nbGVQYXR0ZXJuQ2hhcmFj
dGVyTG9va2FoZWFkVGVybSgpICYmIChzdGF0ZS5sb29rYWhlYWRUZXJtKCkuaW5wdXRQb3NpdGlv
biA9PSAodGVybS5pbnB1dFBvc2l0aW9uICsgMSkpKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAKKyNpZiAhQ1BVKFNINCkKICAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlUGF0dGVy
bkNoYXJhY3RlclBhaXIoc3RhdGUpOwogICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUubmV4
dFRlcm0oKTsKKyNlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZVBhdHRlcm5D
aGFyYWN0ZXJTaW5nbGUoc3RhdGUpOworI2VuZGlmCiAgICAgICAgICAgICAgICAgICAgIH0gZWxz
ZQogICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVQYXR0ZXJuQ2hhcmFjdGVyU2luZ2xl
KHN0YXRlKTsKICAgICAgICAgICAgICAgICB9IGVsc2UKQEAgLTE0MTcsNiArMTQzNiw5IEBAIGNs
YXNzIFJlZ2V4R2VuZXJhdG9yIDogcHJpdmF0ZSBNYWNyb0Fzc2VtYmxlciB7CiAgICAgICAgIHB1
c2goQVJNUmVnaXN0ZXJzOjpyNSk7CiAgICAgICAgIHB1c2goQVJNUmVnaXN0ZXJzOjpyNik7CiAg
ICAgICAgIG1vdmUoQVJNUmVnaXN0ZXJzOjpyMywgb3V0cHV0KTsKKyNlbGlmIENQVShTSDQpCisg
ICAgICAgIHB1c2goU0g0OjpSMTApOworICAgICAgICBwdXNoKFNINDo6UjExKTsKICNlbGlmIENQ
VShNSVBTKQogICAgICAgICAvLyBEbyBub3RoaW5nLgogI2VuZGlmCkBAIC0xNDM2LDYgKzE0NTgs
OSBAQCBjbGFzcyBSZWdleEdlbmVyYXRvciA6IHByaXZhdGUgTWFjcm9Bc3NlbWJsZXIgewogICAg
ICAgICBwb3AoQVJNUmVnaXN0ZXJzOjpyNik7CiAgICAgICAgIHBvcChBUk1SZWdpc3RlcnM6OnI1
KTsKICAgICAgICAgcG9wKEFSTVJlZ2lzdGVyczo6cjQpOworI2VsaWYgQ1BVKFNINCkKKyAgICAg
ICAgcG9wKFNINDo6UjExKTsKKyAgICAgICAgcG9wKFNINDo6UjEwKTsKICNlbGlmIENQVShNSVBT
KQogICAgICAgICAvLyBEbyBub3RoaW5nCiAjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>69170</attachid>
            <date>2010-09-29 01:43:44 -0700</date>
            <delta_ts>2010-09-30 10:37:54 -0700</delta_ts>
            <desc>SH4 JIT for YARR 2</desc>
            <filename>WebKit-SH4-YARR-CP.txt</filename>
            <type>text/plain</type>
            <size>96157</size>
            <attacher name="thouraya">thouraya.andolsi</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwppbmRleCBjN2MwOWIwLi5lMDA3MTc4IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAg
QEAKKzIwMTAtMDktMTUgIFRob3VyYXlhIEFORE9MU0kgIDx0aG91cmF5YS5hbmRvbHNpQHN0LmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQg
YXNzZW1ibGVyIGluc3RydWN0aW9ucyBmb3IgU0g0IHBsYXRmb3JtCisKKyAgICAgICAgKiBHTlVt
YWtlZmlsZS5hbToKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaDoKKyAgICAg
ICAgKiBqaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5oOgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxl
QWxsb2NhdG9yOjpjYWNoZUZsdXNoKToKKworICAgICAgICBZQVIgSklUIGZvciBTSDQuICAgICAg
ICAgCisgICAgICAgICogeWFyci9SZWdleEpJVC5jcHA6CisgICAgICAgIChKU0M6OllhcnI6OlJl
Z2V4R2VuZXJhdG9yOjpnZW5lcmF0ZVRlcm0pOgorICAgICAgICAoSlNDOjpZYXJyOjpSZWdleEdl
bmVyYXRvcjo6Z2VuZXJhdGVFbnRlcik6CisgICAgICAgIChKU0M6OllhcnI6OlJlZ2V4R2VuZXJh
dG9yOjpnZW5lcmF0ZVJldHVybik6CisKIDIwMTAtMDgtMDkgIE9saXZlciBIdW50ICA8b2xpdmVy
QGFwcGxlLmNvbT4KIAogICAgICAgICBGaXggUXQvQVJNIGFnYWluLCB0aGlzIHRpbWUgaW5jbHVk
aW5nIHRoZSBvdGhlciBjaGFuZ2VkIGZpbGUuCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9H
TlVtYWtlZmlsZS5hbSBiL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtCmluZGV4IDJlYWQ4
ZTAuLjg0YmRmODggMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtCisr
KyBiL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtCkBAIC04NCw4ICs4NCwxMCBAQCBqYXZh
c2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIAlKYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9B
c3NlbWJsZXJYODZfNjQuaCBcCiAJSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1i
bGVyWDg2Q29tbW9uLmggXAogCUphdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxl
clg4Ni5oIFwKKwlKYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJTSDQuaCBc
CiAJSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1JlcGF0Y2hCdWZmZXIuaCBcCiAJSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oIFwKKyAgICAgICAgSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL1NINEFzc2VtYmxlci5oIFwKIAlKYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2Rl
QmxvY2suY3BwIFwKIAlKYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaCBcCiAJSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXZhbENvZGVDYWNoZS5oIFwKZGlmZiAtLWdpdCBhL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9Bc3NlbWJsZXJCdWZmZXJXaXRoQ29uc3RhbnRQb29sLmggYi9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQXNzZW1ibGVyQnVmZmVyV2l0aENvbnN0YW50UG9vbC5o
CmluZGV4IDU5OWJlMTQuLmFmMmEwMjcgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9Bc3NlbWJsZXJCdWZmZXJXaXRoQ29uc3RhbnRQb29sLmgKKysrIGIvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL0Fzc2VtYmxlckJ1ZmZlcldpdGhDb25zdGFudFBvb2wuaApAQCAtMjEyLDYg
KzIxMiwzMyBAQCBwdWJsaWM6CiAKICAgICAgICAgY29ycmVjdERlbHRhcyg0LCA0KTsKICAgICB9
CisgICAgCisgICAgdm9pZCBwdXRJbnRXaXRoQ29uc3RhbnRJbnQodWludDE2X3QgaW5zbiwgdWlu
dDMyX3QgY29uc3RhbnQsIGJvb2wgaXNSZXVzYWJsZSA9IGZhbHNlKQorICAgIHsKKyAgICAgICAg
aWYgKCFtX251bUNvbnN0cykKKyAgICAgICAgICAgIG1fbWF4RGlzdGFuY2UgPSBtYXhQb29sU2l6
ZTsKKworICAgICAgICBmbHVzaElmTm9TcGFjZUZvcigyLCA0KTsKKworICAgICAgICBtX2xvYWRP
ZmZzZXRzLmFwcGVuZChBc3NlbWJsZXJCdWZmZXI6OnNpemUoKSk7CisgICAgICAgIGlmIChpc1Jl
dXNhYmxlKQorICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX251bUNvbnN0czsgKytp
KSB7CisgICAgICAgICAgICAgICAgaWYgKG1fbWFza1tpXSA9PSBSZXVzYWJsZUNvbnN0ICYmIG1f
cG9vbFtpXSA9PSBjb25zdGFudCkgeworICAgICAgICAgICAgICAgICAgICBBc3NlbWJsZXJCdWZm
ZXI6OnB1dFNob3J0KEFzc2VtYmxlclR5cGU6OnBhdGNoQ29uc3RhbnRQb29sTG9hZChpbnNuLCBp
KSk7CisgICAgICAgICAgICAgICAgICAgIGNvcnJlY3REZWx0YXMoMik7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgbV9wb29sW21fbnVtQ29uc3RzXSA9IGNvbnN0YW50OworICAgICAgICBtX21hc2tbbV9udW1D
b25zdHNdID0gc3RhdGljX2Nhc3Q8Y2hhcj4oaXNSZXVzYWJsZSA/IFJldXNhYmxlQ29uc3QgOiBV
bmlxdWVDb25zdCk7CisKKyAgICAgICAgQXNzZW1ibGVyQnVmZmVyOjpwdXRTaG9ydChBc3NlbWJs
ZXJUeXBlOjpwYXRjaENvbnN0YW50UG9vbExvYWQoaW5zbiwgbV9udW1Db25zdHMpKTsKKyAgICAg
ICAgKyttX251bUNvbnN0czsKKworICAgICAgICBjb3JyZWN0RGVsdGFzKDIsIDQpOworICAgIH0K
KwogCiAgICAgLy8gVGhpcyBmbHVzaGluZyBtZWNoYW5pc20gY2FuIGJlIGNhbGxlZCBhZnRlciBh
bnkgdW5jb25kaXRpb25hbCBqdW1wcy4KICAgICB2b2lkIGZsdXNoV2l0aG91dEJhcnJpZXIoYm9v
bCBpc0ZvcmNlZCA9IGZhbHNlKQpAQCAtMjUyLDYgKzI3OSwxOSBAQCBwcml2YXRlOgogICAgIHsK
ICAgICAgICAgaWYgKG1fbnVtQ29uc3RzID09IDApCiAgICAgICAgICAgICByZXR1cm47CisjaWYg
Q1BVKFNINCkKKyAgICAgICAgaW50IGFsaWduUG9vbCA9IChBc3NlbWJsZXJCdWZmZXI6OnNpemUo
KSArICh1c2VCYXJyaWVyID8gYmFycmllclNpemUgOiAwKSkgJiAoc2l6ZW9mKGludCkgLSAxKTsK
KyAgICAgICAgCisgICAgICAgIC8vIENhbGxiYWNrIHRvIHByb3RlY3QgdGhlIGNvbnN0YW50IHBv
b2wgZnJvbSBleGVjdXRpb24KKyAgICAgICAgCisgICAgICAgIGlmICh1c2VCYXJyaWVyKSB7Cisg
ICAgICAgICAgICBBc3NlbWJsZXJCdWZmZXI6OnB1dFNob3J0VW5jaGVja2VkKEFzc2VtYmxlclR5
cGU6OnBsYWNlQ29uc3RhbnRQb29sQmFycmllcihtX251bUNvbnN0cyAqIHNpemVvZih1aW50MzJf
dCkgKyBhbGlnblBvb2wpKTsKKyAgICAgICAgICAgIEFzc2VtYmxlckJ1ZmZlcjo6cHV0U2hvcnRV
bmNoZWNrZWQoTk9QX09QQ09ERSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoYWxpZ25Qb29s
KQorICAgICAgICAgICAgQXNzZW1ibGVyQnVmZmVyOjpwdXRTaG9ydFVuY2hlY2tlZChOT1BfT1BD
T0RFKTsgICAgICAgICAgICAKKyNlbHNlCiAgICAgICAgIGludCBhbGlnblBvb2wgPSAoQXNzZW1i
bGVyQnVmZmVyOjpzaXplKCkgKyAodXNlQmFycmllciA/IGJhcnJpZXJTaXplIDogMCkpICYgKHNp
emVvZih1aW50NjRfdCkgLSAxKTsKIAogICAgICAgICBpZiAoYWxpZ25Qb29sKQpAQCAtMjY5LDYg
KzMwOSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBpZiAoYWxpZ25Qb29sICYgNCkKICAgICAg
ICAgICAgICAgICBBc3NlbWJsZXJCdWZmZXI6OnB1dEludChBc3NlbWJsZXJUeXBlOjpwYWRGb3JB
bGlnbjMyKTsKICAgICAgICAgfQorI2VuZGlmCiAKICAgICAgICAgaW50IGNvbnN0UG9vbE9mZnNl
dCA9IEFzc2VtYmxlckJ1ZmZlcjo6c2l6ZSgpOwogICAgICAgICBhcHBlbmQocmVpbnRlcnByZXRf
Y2FzdDxjaGFyKj4obV9wb29sKSwgbV9udW1Db25zdHMgKiBzaXplb2YodWludDMyX3QpKTsKZGlm
ZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5oIGIvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmgKaW5kZXggY2UxYmU3OC4uMmFl
NjQ3MyAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVy
LmgKKysrIGIvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmgKQEAgLTUw
LDYgKzUwLDEwIEBAIG5hbWVzcGFjZSBKU0MgeyB0eXBlZGVmIE1hY3JvQXNzZW1ibGVyWDg2IE1h
Y3JvQXNzZW1ibGVyQmFzZTsgfTsKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlclg4Nl82NC5oIgog
bmFtZXNwYWNlIEpTQyB7IHR5cGVkZWYgTWFjcm9Bc3NlbWJsZXJYODZfNjQgTWFjcm9Bc3NlbWJs
ZXJCYXNlOyB9OwogCisjZWxpZiBDUFUoU0g0KQorI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyU0g0
LmgiCituYW1lc3BhY2UgSlNDIHsgdHlwZWRlZiBNYWNyb0Fzc2VtYmxlclNINCBNYWNyb0Fzc2Vt
YmxlckJhc2U7IH07CisKICNlbHNlCiAjZXJyb3IgIlRoZSBNYWNyb0Fzc2VtYmxlciBpcyBub3Qg
c3VwcG9ydGVkIG9uIHRoaXMgcGxhdGZvcm0uIgogI2VuZGlmCmRpZmYgLS1naXQgYS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJTSDQuaCBiL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9NYWNyb0Fzc2VtYmxlclNINC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLmZmYjllYzMKLS0tIC9kZXYvbnVsbAorKysgYi9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvTWFjcm9Bc3NlbWJsZXJTSDQuaApAQCAtMCwwICsxLDExNjUgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDktMjAxMCBTVE1pY3JvZWxlY3Ryb25pY3MuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBXcml0dGVuIGJ5IFRob3VyYXlhIEFuZG9sc2kgKHRob3VyYXlhLmFuZG9sc2lAc3QuY29t
KS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKworI2lmbmRl
ZiBNYWNyb0Fzc2VtYmxlclNINF9oCisjZGVmaW5lIE1hY3JvQXNzZW1ibGVyU0g0X2gKKworI2lu
Y2x1ZGUgImFzc2VydC5oIgorI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorI2lmIEVOQUJMRShB
U1NFTUJMRVIpCisKKyNpbmNsdWRlICJBYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgiCisjaW5jbHVk
ZSAiU0g0QXNzZW1ibGVyLmgiCisKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIE1hY3JvQXNz
ZW1ibGVyU0g0IDogcHVibGljIEFic3RyYWN0TWFjcm9Bc3NlbWJsZXI8U0g0QXNzZW1ibGVyPiB7
CitwdWJsaWM6CisKKyAgICB0eXBlZGVmIFNINEFzc2VtYmxlcjo6Q29uZGl0aW9uIENvbmRpdGlv
bjsKKyAgICB0eXBlZGVmIFNINEFzc2VtYmxlcjo6RlBSZWdpc3RlcklEIEZQUmVnaXN0ZXJJRDsK
KyAgICBzdGF0aWMgY29uc3QgQ29uZGl0aW9uIEVxdWFsID0gU0g0QXNzZW1ibGVyOjpFUTsKKyAg
ICBzdGF0aWMgY29uc3QgQ29uZGl0aW9uIE5vdEVxdWFsID0gU0g0QXNzZW1ibGVyOjpORTsKKyAg
ICBzdGF0aWMgY29uc3QgQ29uZGl0aW9uIEdyZWF0ZXJUaGFuID0gU0g0QXNzZW1ibGVyOjpHVDsK
KyAgICBzdGF0aWMgY29uc3QgQ29uZGl0aW9uIEdyZWF0ZXJUaGFuT3JFcXVhbCA9IFNINEFzc2Vt
Ymxlcjo6R0U7CisgICAgc3RhdGljIGNvbnN0IENvbmRpdGlvbiBMZXNzVGhhbiA9IFNINEFzc2Vt
Ymxlcjo6TFQ7CisgICAgc3RhdGljIGNvbnN0IENvbmRpdGlvbiBMZXNzVGhhbk9yRXF1YWwgPSBT
SDRBc3NlbWJsZXI6OkxFOworICAgIHN0YXRpYyBjb25zdCBDb25kaXRpb24gVUdyZWF0ZXJUaGFu
ID0gU0g0QXNzZW1ibGVyOjpISTsgLy8gdW5zaWdlbmQgZ3JlYXRlciB0aGFuCisgICAgc3RhdGlj
IGNvbnN0IENvbmRpdGlvbiBVR3JlYXRlclRoYW5PckVxdWFsID0gU0g0QXNzZW1ibGVyOjpIUzsg
Ly8gdW5zaWdlbmQgZ3JlYXRlciB0aGFuIG9yIGVxdWFsICAgIAorICAgIHN0YXRpYyBjb25zdCBD
b25kaXRpb24gVUxlc3NUaGFuID0gU0g0QXNzZW1ibGVyOjpMSTsgLy8gdW5zaWdlbmQgZ3JlYXRl
ciB0aGFuCisgICAgc3RhdGljIGNvbnN0IENvbmRpdGlvbiBVTGVzc1RoYW5PckVxdWFsID0gU0g0
QXNzZW1ibGVyOjpMUzsgLy8gdW5zaWdlbmQgZ3JlYXRlciB0aGFuIG9yIGVxdWFsCisgICAgc3Rh
dGljIGNvbnN0IENvbmRpdGlvbiBaZXJvID0gU0g0QXNzZW1ibGVyOjpFUTsKKyAgICBzdGF0aWMg
Y29uc3QgQ29uZGl0aW9uIE5vblplcm8gPSBTSDRBc3NlbWJsZXI6Ok5FOworICAgIHN0YXRpYyBj
b25zdCBDb25kaXRpb24gT3ZlcmZsb3cgPSBTSDRBc3NlbWJsZXI6Ok9GOworICAgIHN0YXRpYyBj
b25zdCBDb25kaXRpb24gQWJvdmUgPSBTSDRBc3NlbWJsZXI6OkhJOworICAgIHN0YXRpYyBjb25z
dCBDb25kaXRpb24gQWJvdmVPckVxdWFsID0gU0g0QXNzZW1ibGVyOjpIUzsKKyAgICBzdGF0aWMg
Y29uc3QgQ29uZGl0aW9uIEJlbG93ID0gU0g0QXNzZW1ibGVyOjpMSTsKKyAgICBzdGF0aWMgY29u
c3QgQ29uZGl0aW9uIEJlbG93T3JFcXVhbCA9IFNINEFzc2VtYmxlcjo6TFM7CisgICAgCisgICAg
c3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgc3RhY2tQb2ludGVyUmVnaXN0ZXIgPSBTSDQ6OlNQOwor
ICAgIAorICAgIHN0YXRpYyBjb25zdCBDb25kaXRpb24gRG91YmxlRXF1YWwgPSBTSDRBc3NlbWJs
ZXI6OkVROworICAgIHN0YXRpYyBjb25zdCBDb25kaXRpb24gRG91YmxlR3JlYXRlclRoYW4gPSBT
SDRBc3NlbWJsZXI6OkdUOworICAgIHN0YXRpYyBjb25zdCBDb25kaXRpb24gRG91YmxlR3JlYXRl
clRoYW5PckVxdWFsID0gU0g0QXNzZW1ibGVyOjpHRTsKKyAgICBzdGF0aWMgY29uc3QgQ29uZGl0
aW9uIERvdWJsZUxlc3NUaGFuID0gU0g0QXNzZW1ibGVyOjpMVDsKKyAgICBzdGF0aWMgY29uc3Qg
Q29uZGl0aW9uIERvdWJsZUxlc3NUaGFuT3JFcXVhbCA9IFNINEFzc2VtYmxlcjo6TEU7CisgICAg
CisgICAgc3RhdGljIGNvbnN0IFNjYWxlIFNjYWxlUHRyID0gVGltZXNGb3VyOyAgICAKKyAgICAK
KyAgICBSZWdpc3RlcklEIGNsYWltU2NyYXRjaCgpCisgICAgeworICAgICAgICAgcmV0dXJuIG1f
YXNzZW1ibGVyLmNsYWltU2NyYXRjaCgpOworICAgIH0KKyAgICAKKyAgICBSZWdpc3RlcklEIHJl
bGVhc2VTY3JhdGNoKFJlZ2lzdGVySUQgcmVnKQorICAgIHsKKyAgICAgICAgIG1fYXNzZW1ibGVy
LnJlbGVhc2VTY3JhdGNoKHJlZyk7CisgICAgfQorICAgIAorCisgICAgLy8gSW50ZWdlciBhcml0
aG1ldGljIG9wZXJhdGlvbnMKKworICAgIHZvaWQgYWRkMzIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lz
dGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmFkZGxfcnIoc3JjLCBkZXN0
KTsKKyAgICB9CisKKyAgICB2b2lkIGFkZDMyKEltbTMyIGltbSwgUmVnaXN0ZXJJRCBkZXN0KQor
ICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuYWRkbF9pcihpbW0ubV92YWx1ZSwgZGVzdCk7Cisg
ICAgfQorICAgIAorICAgIHZvaWQgYWRkMzIoSW1tMzIgaW1tLCBSZWdpc3RlcklEIHNyYywgUmVn
aXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0
Y2goKTsKKyAgICAgICAgCisgICAgICAgIGlmIChzcmMgIT0gZGVzdCkKKyAgICAgICAgICAgIG1f
YXNzZW1ibGVyLm1vdmxfcnIoc3JjLCBkZXN0KTsKKyAgICAgICAgbV9hc3NlbWJsZXIuYWRkbF9p
cihpbW0ubV92YWx1ZSwgZGVzdCk7CisgICAgICAgIAorICAgICAgICByZWxlYXNlU2NyYXRjaChz
Y3IpOworCisgICAgfQorCisgICAgdm9pZCBhZGQzMihJbW0zMiBpbW0sIEFkZHJlc3MgYWRkcmVz
cykKKyAgICB7CisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAg
ICAgIGxvYWQzMihhZGRyZXNzLCBzY3IpOworICAgICAgICBhZGQzMihpbW0sIHNjcik7ICAgICAg
ICAKKyAgICAgICAgc3RvcmUzMihzY3IsIGFkZHJlc3MpOworICAgICAgICByZWxlYXNlU2NyYXRj
aChzY3IpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGFkZDMyKEFkZHJlc3Mgc3JjLCBSZWdpc3Rl
cklEIGRlc3QpCisgICAgeworICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgp
OworICAgICAgICBsb2FkMzIoc3JjLCBzY3IpOworICAgICAgICBtX2Fzc2VtYmxlci5hZGRsX3Jy
KHNjciwgZGVzdCk7CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgfQorICAgIAor
ICAgIHZvaWQgYW5kMzIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7Cisg
ICAgICAgIG1fYXNzZW1ibGVyLmFuZGxfcnIoc3JjLCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lk
IGFuZDMyKEltbTMyIGltbSwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgaWYgKChp
bW0ubV92YWx1ZSA8PSAyNTUpICYmIChpbW0ubV92YWx1ZSA+PSAwKSAmJiAoZGVzdCA9PSBTSDQ6
OlIwKSkKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFuZGxfaThyKGltbS5tX3ZhbHVlLCBkZXN0
KTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2Ny
YXRjaCgpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuTG9hZENvbnN0YW50KChpbnQpKGltbS5t
X3ZhbHVlKSwgc2NyKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFuZGxfcnIoc2NyLCBkZXN0
KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIHZvaWQgbHNoaWZ0MzIoUmVnaXN0ZXJJRCBzaGlmdGFtb3VudCwg
UmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuc2hsbF9ycihkZXN0
LCBzaGlmdGFtb3VudCk7CisgICAgfQorICAgIAorICAgIHZvaWQgcnNoaWZ0MzIoaW50IGltbSwg
UmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNj
cmF0Y2goKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuTG9hZENvbnN0YW50KC1pbW0sIHNjcik7Cisg
ICAgICAgIG1fYXNzZW1ibGVyLnNoYV9ycihkZXN0LCBzY3IpOworICAgICAgICByZWxlYXNlU2Ny
YXRjaChzY3IpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHJhc2hpZnQzMihpbnQgaW1tLCBSZWdp
c3RlcklEIGRlc3QpIC8vIGFyaXRtZXRoaXF1ZSBzaGlmdAorICAgIHsKKyAgICAgICAgUmVnaXN0
ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuTG9hZENvbnN0
YW50KC1pbW0sIHNjcik7CisgICAgICAgIG1fYXNzZW1ibGVyLnNoYV9ycihkZXN0LCBzY3IpOwor
ICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGxzaGlm
dDMyKGludCBpbW0sIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIGlmICgoIGltbSA9
PSAxKSB8fCAoIGltbSA9PSAyKSB8fCAoIGltbSA9PSA4KSB8fCAoIGltbSA9PSAxNikpCisgICAg
ICAgICAgICBtX2Fzc2VtYmxlci5zaGxsX2k4cihpbW0sIGRlc3QpOworICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgICAg
ICBtX2Fzc2VtYmxlci5Mb2FkQ29uc3RhbnQoaW1tLCBzY3IpOworICAgICAgICAgICAgbV9hc3Nl
bWJsZXIuc2hsbF9ycihkZXN0LCBzY3IpOworICAgICAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2Ny
KTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB2b2lkIG11bDMyKFJlZ2lzdGVySUQgc3Jj
LCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5pbXVsbF9ycihz
cmMsIGRlc3QpOworICAgICAgICBtX2Fzc2VtYmxlci5zdHNtYWNsKGRlc3QpOworICAgIH0KKyAg
ICAKKyAgICAKKyAgICB2b2lkIG11bDMyKEltbTMyIGltbSwgUmVnaXN0ZXJJRCBzcmMsIFJlZ2lz
dGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNo
KCk7CisgICAgICAgIG1vdmUoaW1tLCBzY3IpOworICAgICAgICBpZiAgKHNyYyAhPSBkZXN0KQor
ICAgICAgICAgICAgbW92ZShzcmMsIGRlc3QpOworICAgICAgICBtdWwzMihzY3IsICBkZXN0KTsK
KyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICB9CisgICAKKyAgICB2b2lkIG5vdDMy
KFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2Vt
Ymxlci5ub3RsX3Ioc3JjLCBkZXN0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBvcjMyKFJlZ2lz
dGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5v
cmxfcnIoc3JjLCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIG9yMzIoSW1tMzIgaW1tLCBSZWdp
c3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5vcmxfaXIoaW1tLm1fdmFs
dWUsIGRlc3QpOworICAgIH0KKworICAgIHZvaWQgcnNoaWZ0MzIoUmVnaXN0ZXJJRCBzaGlmdGFt
b3VudCwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuc2hhcl9y
cihkZXN0LCBzaGlmdGFtb3VudCk7CisgICAgfQorCisgICAgdm9pZCByc2hpZnQzMihJbW0zMiBp
bW0sIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIHJzaGlmdDMyKGltbS5tX3ZhbHVl
ICYgMHgxZiwgZGVzdCk7CisgICAgfQorCisKKyAgICB2b2lkIHN1YjMyKFJlZ2lzdGVySUQgc3Jj
LCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5zdWJsX3JyKHNy
YywgZGVzdCk7CisgICAgfQorICAgIAorICAgIHZvaWQgc3ViMzIoSW1tMzIgaW1tLCBBYnNvbHV0
ZUFkZHJlc3MgYWRkcmVzcywgUmVnaXN0ZXJJRCBzY3JhdGNoUmVnKQorICAgIHsKKyAgICAgICAg
UmVnaXN0ZXJJRCByZXN1bHQgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAKKyAgICAgICAgbV9h
c3NlbWJsZXIuTG9hZENvbnN0YW50KChpbnQpYWRkcmVzcy5tX3B0ciwgc2NyYXRjaFJlZyk7Cisg
ICAgICAgIG1fYXNzZW1ibGVyLm1vdmxfbXIoc2NyYXRjaFJlZywgcmVzdWx0KTsgICAgICAgIAor
CisgICAgICAgIHN1YjMyKGltbSwgcmVzdWx0KTsgCisKKyAgICAgICAgc3RvcmUzMihyZXN1bHQs
IHNjcmF0Y2hSZWcpOworICAgICAgICAKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2gocmVzdWx0KTsK
KyAgICB9CisgICAgCisgICAgdm9pZCBhZGQzMihJbW0zMiBpbW0sIEFic29sdXRlQWRkcmVzcyBh
ZGRyZXNzLCBSZWdpc3RlcklEIHNjcmF0Y2hSZWcpCisgICAgeworICAgICAgICBSZWdpc3RlcklE
IHJlc3VsdCA9IGNsYWltU2NyYXRjaCgpOworICAgICAgIAorICAgICAgICBtX2Fzc2VtYmxlci5M
b2FkQ29uc3RhbnQoKGludClhZGRyZXNzLm1fcHRyLCBzY3JhdGNoUmVnKTsKKyAgICAgICAgbV9h
c3NlbWJsZXIubW92bF9tcihzY3JhdGNoUmVnLCByZXN1bHQpOyAgICAgICAgCisKKyAgICAgICAg
YWRkMzIoaW1tLCByZXN1bHQpOyAKKworICAgICAgICBzdG9yZTMyKHJlc3VsdCwgc2NyYXRjaFJl
Zyk7CisgICAgICAgIAorICAgICAgICByZWxlYXNlU2NyYXRjaChyZXN1bHQpOworICAgIH0KKyAg
ICAKKyAgICB2b2lkIHN1YjMyKEltbTMyIGltbSwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAg
ICAgICAgbV9hc3NlbWJsZXIuc3VibF9pbW1yKGltbS5tX3ZhbHVlLCBkZXN0KTsKKyAgICB9Cisg
ICAgCisgICAgdm9pZCBzdWIzMihBZGRyZXNzIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsK
KyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgbG9hZDMy
KHNyYywgc2NyKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuc3VibF9ycihzY3IsIGRlc3QpOworICAg
ICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgIH0KKworICAgIAorICAgIHZvaWQgeG9yMzIo
UmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1i
bGVyLnhvcmxfcnIoc3JjLCBkZXN0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCB4b3IzMihJbW0z
MiBpbW0sIFJlZ2lzdGVySUQgc3JjRGVzdCkKKyAgICB7CisgICAgICBpZiAoKHNyY0Rlc3QgIT0g
U0g0OjpSMCkgfHwgKGltbS5tX3ZhbHVlID4gMjU1KSB8fCAoaW1tLm1fdmFsdWUgPCAwKSkgewor
ICAgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgICAgbV9h
c3NlbWJsZXIuTG9hZENvbnN0YW50KChpbnQpKGltbS5tX3ZhbHVlKSwgc2NyKTsKKyAgICAgICAg
ICBtX2Fzc2VtYmxlci54b3JsX3JyKHNjciwgc3JjRGVzdCk7CisgICAgICAgICAgcmVsZWFzZVNj
cmF0Y2goc2NyKTsKKyAgICAgIH0gZWxzZQorICAgICAgICAgIG1fYXNzZW1ibGVyLnhvcmxfaThy
KGltbS5tX3ZhbHVlLCBzcmNEZXN0KTsKKyAgICB9CisKKworICAgIC8vIE1lbW9yeSBhY2Nlc3Mg
b3BlcmF0aW9uCisgICAgCisgICAgdm9pZCBsb2FkMzIoSW1wbGljaXRBZGRyZXNzIGFkZHJlc3Ms
IFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIGxvYWQzMihhZGRyZXNzLmJhc2UsIGFk
ZHJlc3Mub2Zmc2V0LCBkZXN0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBsb2FkOChJbXBsaWNp
dEFkZHJlc3MgYWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbG9hZDgo
YWRkcmVzcy5iYXNlLCBhZGRyZXNzLm9mZnNldCwgZGVzdCk7CisgICAgfQorICAgIAorICAgIHZv
aWQgbG9hZDMyKEJhc2VJbmRleCBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAg
ICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBtb3ZlKGFkZHJl
c3MuaW5kZXgsIHNjcik7CisgICAgICAgIAorICAgICAgICBsc2hpZnQzMihhZGRyZXNzLnNjYWxl
LCBzY3IpOworICAgICAgICBhZGQzMihhZGRyZXNzLmJhc2UsIHNjcik7CisgICAgICAgIGxvYWQz
MihzY3IsIGFkZHJlc3Mub2Zmc2V0LCBkZXN0KTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2Ny
KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBsb2FkMzIodm9pZCogYWRkcmVzcywgUmVnaXN0ZXJJ
RCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuTG9hZENvbnN0YW50KChpbnQpKGFk
ZHJlc3MpLCBkZXN0KTsKKyAgICAgICAgbV9hc3NlbWJsZXIubW92bF9tcihkZXN0LCBkZXN0KTsK
KyAgICB9CisgICAgCisgICAgdm9pZCBsb2FkMzIoUmVnaXN0ZXJJRCBiYXNlLCBpbnQgb2Zmc2V0
LCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBpZiAoKG9mZnNldCA8IDApIHx8IChv
ZmZzZXQgPj0gNjQpKSB7CisgICAgICAgICAgICBpZiAoKGRlc3QgPT0gU0g0OjpSMCkgJiYgKGRl
c3QgIT0gYmFzZSkpIHsKKyAgICAgICAgICAgICAgICBtX2Fzc2VtYmxlci5Mb2FkQ29uc3RhbnQo
KGludCkob2Zmc2V0KSwgZGVzdCk7CisgICAgICAgICAgICAgICAgbV9hc3NlbWJsZXIubW92bF9y
MG1yKGJhc2UsIGRlc3QpOyAgICAKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgUmVnaXN0ZXJJRCBzY3I7CisgICAgICAgICAgICAgICAgaWYgKGRlc3QgPT0gYmFzZSkKKyAg
ICAgICAgICAgICAgICAgICAgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgICAgICBzY3IgPSBkZXN0OworCisgICAgICAgICAgICAgICAg
bV9hc3NlbWJsZXIuTG9hZENvbnN0YW50KChpbnQpKG9mZnNldCksIHNjcik7CisgICAgICAgICAg
ICAgICAgbV9hc3NlbWJsZXIuYWRkbF9ycihiYXNlLCBzY3IpOworICAgICAgICAgICAgICAgIG1f
YXNzZW1ibGVyLm1vdmxfbXIoc2NyLCBkZXN0KTsKKworICAgICAgICAgICAgICAgIGlmIChkZXN0
ID09IGJhc2UpCisgICAgICAgICAgICAgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAob2Zmc2V0KQorICAgICAgICAgICAgbV9hc3Nl
bWJsZXIubW92bF9tcihvZmZzZXQgPj4gMiwgYmFzZSwgZGVzdCk7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIG1fYXNzZW1ibGVyLm1vdmxfbXIoYmFzZSwgZGVzdCk7CisgICAgfQorICAgIAor
ICAgIHZvaWQgbG9hZDgoUmVnaXN0ZXJJRCBiYXNlLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGRl
c3QpCisgICAgeworICAgICAgICBpZiAoKG9mZnNldCA+IDApICYmIChvZmZzZXQgPCA2NCkgJiYg
KGRlc3QgPT0gU0g0OjpSMCkpCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5tb3ZiX21yKG9mZnNl
dCwgYmFzZSwgZGVzdCk7CisKKyAgICAgICAgZWxzZSBpZiAoYmFzZSAhPSBkZXN0KSB7CisgICAg
ICAgICAgICBtX2Fzc2VtYmxlci5Mb2FkQ29uc3RhbnQoKGludCkob2Zmc2V0KSwgZGVzdCk7Cisg
ICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGRsX3JyKGJhc2UsIGRlc3QpOworICAgICAgICAgICAg
bV9hc3NlbWJsZXIubW92Yl9tcihkZXN0LCBkZXN0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIG1fYXNzZW1ibGVyLkxvYWRDb25zdGFudCgoaW50KShvZmZzZXQpLCBzY3IpOwor
ICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRkbF9ycihiYXNlLCBzY3IpOworICAgICAgICAgICAg
bV9hc3NlbWJsZXIubW92Yl9tcihzY3IsIGRlc3QpOworICAgICAgICAgICAgCisgICAgICAgICAg
ICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgICAgICB9CisgICAKKyAgICB9CisgICAgCisgICAg
dm9pZCBsb2FkMzIoUmVnaXN0ZXJJRCByMCwgUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0
KQorICAgIHsKKyAgICAgICAgQVNTRVJUKHIwID09IFNINDo6UjApOworICAgICAgICBtX2Fzc2Vt
Ymxlci5tb3ZsX3IwbXIoc3JjLCBkc3QpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGxvYWQzMihS
ZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxl
ci5tb3ZsX21yKHNyYywgZHN0KTsKKyAgICB9CisgICAKKyAgICB2b2lkIGxvYWQxNihJbXBsaWNp
dEFkZHJlc3MgYWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgfQorIAorICAgIHZvaWQgbG9hZDE2KFJlZ2lzdGVySUQgc3Jj
LCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5tb3Z3X21yKHNy
YywgZGVzdCk7CisgICAgfQorICAgIAorICAgIHZvaWQgbG9hZDE2KFJlZ2lzdGVySUQgcjAsIFJl
Z2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBBU1NFUlQocjAg
PT0gU0g0OjpSMCk7CisgICAgICAgIG1fYXNzZW1ibGVyLm1vdndfcjBtcihzcmMsIGRlc3QpOwor
ICAgIH0KKyAgICAKKyAgICB2b2lkIGxvYWQxNihCYXNlSW5kZXggYWRkcmVzcywgUmVnaXN0ZXJJ
RCBkZXN0KQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsK
KyAgICAgICAgbW92ZShhZGRyZXNzLmluZGV4LCBzY3IpOworICAgICAgICBsc2hpZnQzMihhZGRy
ZXNzLnNjYWxlLCBzY3IpOworICAgICAgICBtX2Fzc2VtYmxlci5hZGRsX2lyKGFkZHJlc3Mub2Zm
c2V0LCBzY3IpOworICAgICAgICBpZiAoc2NyID09IFNINDo6UjApCisgICAgICAgICAgICBtX2Fz
c2VtYmxlci5tb3Z3X3IwbXIoYWRkcmVzcy5iYXNlLCBzY3IpOworICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgIGFkZDMyKGFkZHJlc3MuYmFzZSwgc2NyKTsKKyAgICAgICAgICAgIGxvYWQxNihz
Y3IsIHNjcik7CisgICAgICAgIH0KKyAgICAgICAgZXh0dXcoc2NyLCBkZXN0KTsKKyAgICAgICAg
cmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICB9CisKKyAgICB2b2lkIHN0b3JlMzIoUmVnaXN0ZXJJ
RCBzcmMsIEltcGxpY2l0QWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJ
RCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgc3RvcmUzMihzcmMsIGFkZHJlc3Mub2Zm
c2V0LCBhZGRyZXNzLmJhc2UsIHNjcik7CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7Cisg
ICAgfSAgICAKKyAgICAKKyAgICAKKyAgICB2b2lkIHN0b3JlMzIoUmVnaXN0ZXJJRCBzcmMsIGlu
dCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBzY3IpCisgICAgeyAgCisgICAg
ICAgIGlmICgob2Zmc2V0IDwgMCkgfHwgKG9mZnNldCA+PSA2NCkpIHsKKyAgICAgICAgICAgIG1f
YXNzZW1ibGVyLkxvYWRDb25zdGFudCgoaW50KShvZmZzZXQpLCBzY3IpOworICAgICAgICAgICAg
aWYgKHNjciA9PSBTSDQ6OlIwKQorICAgICAgICAgICAgICAgIG1fYXNzZW1ibGVyLm1vdmxfcm1y
MChzcmMsIGJhc2UpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgbV9hc3Nl
bWJsZXIuYWRkbF9ycihiYXNlLCBzY3IpOworICAgICAgICAgICAgICAgIG1fYXNzZW1ibGVyLm1v
dmxfcm0oc3JjLCBzY3IpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKG9mZnNl
dCkKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLm1vdmxfcm0oc3JjLCBvZmZzZXQgPj4gMiwgYmFz
ZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLm1vdmxfcm0oc3JjLCBi
YXNlKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzdG9yZTMyKFJlZ2lzdGVySUQgc3JjLCBSZWdp
c3RlcklEIG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG9m
ZnNldCA9PSBTSDQ6OlIwKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubW92bF9ybXIwKHNyYywgYmFz
ZSk7CisgICAgfQorICAgIAorICAgIHZvaWQgc3RvcmUzMihSZWdpc3RlcklEIHNyYywgUmVnaXN0
ZXJJRCBkc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5tb3ZsX3JtKHNyYywgZHN0KTsK
KyAgICB9CisKKworICAgIHZvaWQgc3RvcmUzMihJbW0zMiBpbW0sIEltcGxpY2l0QWRkcmVzcyBh
ZGRyZXNzKQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsK
KyAgICAgICAgUmVnaXN0ZXJJRCBzY3IxID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIG1fYXNz
ZW1ibGVyLkxvYWRDb25zdGFudCgoaW50KShpbW0ubV92YWx1ZSksIHNjcik7CisKKyAgICAgICAg
c3RvcmUzMihzY3IsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UsIHNjcjEpOworICAgICAg
ICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IxKTsKKyAg
ICB9CisgICAgCisgICAgdm9pZCBzdG9yZTMyKFJlZ2lzdGVySUQgc3JjLCBCYXNlSW5kZXggYWRk
cmVzcykKKyAgICB7CisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7Cisg
ICAgICAgIG1vdmUoYWRkcmVzcy5pbmRleCwgc2NyKTsKKyAgICAgICAgCisgICAgICAgIGxzaGlm
dDMyKGFkZHJlc3Muc2NhbGUsIHNjcik7CisgICAgICAgIGFkZDMyKGFkZHJlc3MuYmFzZSwgc2Ny
KTsKKyAgICAgICAgc3RvcmUzMihzcmMsIEFkZHJlc3Moc2NyLCBhZGRyZXNzLm9mZnNldCkpOwor
ICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHN0b3Jl
MzIoSW1tMzIgaW1tLCB2b2lkKiBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgfQorICAgIHZvaWQgc3RvcmUzMihSZWdpc3RlcklEIHNyYywgdm9pZCog
YWRkcmVzcykKKyAgICB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKwor
ICAgIAorICAgIERhdGFMYWJlbDMyIGxvYWQzMldpdGhBZGRyZXNzT2Zmc2V0UGF0Y2goQWRkcmVz
cyBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBSZWdpc3RlcklEIHNj
ciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICAKKyAgICAgICAgRGF0YUxhYmVsMzIgbGFiZWwo
dGhpcyk7CisgICAgICAgIG1vdmVXaXRoUGF0Y2goSW1tMzIoYWRkcmVzcy5vZmZzZXQpLCBzY3Ip
OyAgICAgICAgCisgICAgICAgIAorICAgICAgICBtX2Fzc2VtYmxlci5hZGRsX3JyKGFkZHJlc3Mu
YmFzZSwgc2NyKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubW92bF9tcihzY3IsIGRlc3QpOworICAg
ICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgICAgICByZXR1cm4gbGFiZWw7CisgICAgfQor
ICAgIAorICAgIERhdGFMYWJlbDMyIHN0b3JlMzJXaXRoQWRkcmVzc09mZnNldFBhdGNoKFJlZ2lz
dGVySUQgc3JjLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBSZWdpc3RlcklEIHNj
ciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICAKKyAgICAgICAgRGF0YUxhYmVsMzIgbGFiZWwo
dGhpcyk7CisgICAgICAgIG1vdmVXaXRoUGF0Y2goSW1tMzIoYWRkcmVzcy5vZmZzZXQpLCBzY3Ip
OyAgICAgICAgCisKKyAgICAgICAgbV9hc3NlbWJsZXIuYWRkbF9ycihhZGRyZXNzLmJhc2UsIHNj
cik7CisgICAgICAgIG1fYXNzZW1ibGVyLm1vdmxfcm0oc3JjLCBzY3IpOworICAgICAgICAKKyAg
ICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICAgICAgcmV0dXJuIGxhYmVsOworICAgIH0K
KyAgICAKKyAgICBMYWJlbCBsb2FkUHRyV2l0aFBhdGNoVG9MRUEoQWRkcmVzcyBhZGRyZXNzLCBS
ZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2Ny
YXRjaCgpOworICAgICAgICAKKyAgICAgICAgTGFiZWwgbGFiZWwodGhpcyk7CisgICAgICAgIG1v
dmVXaXRoUGF0Y2goSW1tMzIoYWRkcmVzcy5vZmZzZXQpLCBzY3IpOworICAgICAgICAKKyAgICAg
ICAgbV9hc3NlbWJsZXIuYWRkbF9ycihhZGRyZXNzLmJhc2UsIHNjcik7CisgICAgICAgIG1fYXNz
ZW1ibGVyLm1vdmxfbXIoc2NyLCBkZXN0KTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsK
KyAgICAgICAgcmV0dXJuIGxhYmVsOworICAgIH0KKyAgICAKKyAgICAgLy8gRmxvYXRpbmctcG9p
bnQgb3BlcmF0aW9ucworCisgICAgYm9vbCBzdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSBjb25zdCB7
IHJldHVybiB0cnVlOyB9ICAgIAorICAgIGJvb2wgc3VwcG9ydHNGbG9hdGluZ1BvaW50VHJ1bmNh
dGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIAorICAgIHZvaWQgbG9hZERvdWJsZShJ
bXBsaWNpdEFkZHJlc3MgYWRkcmVzcywgRlBSZWdpc3RlcklEIGRlc3QsIFJlZ2lzdGVySUQgc2Ny
KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuZG91YmxlbG9hZChhZGRyZXNzLmJhc2UsIGFk
ZHJlc3Mub2Zmc2V0LCBkZXN0LCBzY3IpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGxvYWREb3Vi
bGUoUmVnaXN0ZXJJRCBzcmMsIEZQUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9h
c3NlbWJsZXIuZm1vdl9yZWFkX3JtKHNyYywgZGVzdCk7CisgICAgfQorCisgICAgdm9pZCBzdG9y
ZURvdWJsZShGUFJlZ2lzdGVySUQgc3JjLCBJbXBsaWNpdEFkZHJlc3MgYWRkcmVzcywgUmVnaXN0
ZXJJRCBzY3IpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5kb3VibGVzdG9yZShzcmMsIGFk
ZHJlc3MuYmFzZSwgYWRkcmVzcy5vZmZzZXQsIHNjcik7CisgICAgfQorICAgIAorICAgIHZvaWQg
c3RvcmVEb3VibGUoRlBSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAg
ICAgICBtX2Fzc2VtYmxlci5mbW92X3dyaXRlX3JtKHNyYywgZHN0KTsKKyAgICB9CisKKyAgICB2
b2lkIGFkZERvdWJsZShGUFJlZ2lzdGVySUQgc3JjLCBGUFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7
CisgICAgICAgIG1fYXNzZW1ibGVyLmRhZGRfcnIoc3JjLCBkZXN0KTsKKyAgICB9CisgICAgCisg
ICAgdm9pZCBhZGREb3VibGUoQWRkcmVzcyBzcmMsIEZQUmVnaXN0ZXJJRCBkZXN0LCBSZWdpc3Rl
cklEIHNjciwgRlBSZWdpc3RlcklEIHNjcmYpCisgICAgeworICAgICAgICBsb2FkRG91YmxlKHNy
Yywgc2NyZiwgc2NyKTsKKyAgICAgICAgYWRkRG91YmxlKHNjcmYsIGRlc3QpOworICAgIH0KKyAg
ICAKKyAgICB2b2lkIHN1YkRvdWJsZShGUFJlZ2lzdGVySUQgc3JjLCBGUFJlZ2lzdGVySUQgZGVz
dCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmRzdWJfcnIoc3JjLCBkZXN0KTsKKyAgICB9
CisgICAgCisgICAgdm9pZCBtdWxEb3VibGUoRlBSZWdpc3RlcklEIHNyYywgRlBSZWdpc3RlcklE
IGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5kbXVsX3JyKHNyYywgZGVzdCk7Cisg
ICAgfQorICAgIAorICAgIHZvaWQgZGl2RG91YmxlKEZQUmVnaXN0ZXJJRCBzcmMsIEZQUmVnaXN0
ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuZGRpdl9ycihzcmMsIGRlc3Qp
OworICAgIH0KKworICAgIHZvaWQgY29udmVydEludDMyVG9Eb3VibGUoUmVnaXN0ZXJJRCBzcmMs
IEZQUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubGRzcm1fZnB1
bChzcmMpOworICAgICAgICBtX2Fzc2VtYmxlci5mbG9hdF9mcHVsX2RybihkZXN0KTsKKyAgICB9
CisKKyAgICBKdW1wIGJyYW5jaFRlc3Q4KENvbmRpdGlvbiBjb25kLCBBZGRyZXNzIGFkZHJlc3Ms
IEltbTMyIG1hc2sgPSBJbW0zMigtMSkpCisgICAgeworICAgICAgICBSZWdpc3RlcklEIGFkZHJl
c3NUZW1wUmVnaXN0ZXIgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgbG9hZDgoYWRkcmVzcywg
YWRkcmVzc1RlbXBSZWdpc3Rlcik7CisgICAgICAgIAorICAgICAgICBKdW1wIGptcCA9IGJyYW5j
aFRlc3QzMihjb25kLCBhZGRyZXNzVGVtcFJlZ2lzdGVyLCBtYXNrKTsKKyAgICAgICAgcmVsZWFz
ZVNjcmF0Y2goYWRkcmVzc1RlbXBSZWdpc3Rlcik7CisgICAgICAgIHJldHVybiBqbXA7CisgICAg
fQorICAgIAorICAgIHZvaWQgc2lnbkV4dGVuZDMyVG9QdHIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lz
dGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIGlmIChzcmMgIT0gZGVzdCkKKyAgICAgICAgICAg
IG1vdmUoc3JjLCBkZXN0KTsKKyAgICB9CisgICAgCisgICAgSnVtcCBicmFuY2g4KENvbmRpdGlv
biBjb25kLCBBZGRyZXNzIGxlZnQsIEltbTMyIHJpZ2h0KQorICAgIHsKKyAgICAgICAgUmVnaXN0
ZXJJRCBhZGRyZXNzVGVtcFJlZ2lzdGVyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIGxvYWQ4
KGxlZnQsIGFkZHJlc3NUZW1wUmVnaXN0ZXIpOworICAgICAgICAKKyAgICAgICAgSnVtcCBqbXAg
PSBicmFuY2gzMihjb25kLCBhZGRyZXNzVGVtcFJlZ2lzdGVyLCByaWdodCk7CisgICAgICAgIHJl
bGVhc2VTY3JhdGNoKGFkZHJlc3NUZW1wUmVnaXN0ZXIpOworICAgICAgICByZXR1cm4gam1wOwor
ICAgIH0KKworICAgIEp1bXAgYnJhbmNoVHJ1bmNhdGVEb3VibGVUb0ludDMyKEZQUmVnaXN0ZXJJ
RCwgUmVnaXN0ZXJJRCkKKyAgICB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
IH0KKyAgICAKKyAgICAvLyBTdGFjayBtYW5pcHVsYXRpb24gb3BlcmF0aW9ucworICAgIAorICAg
IHZvaWQgcG9wKFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnBv
cF9yKGRlc3QpOworICAgIH0KKworICAgIHZvaWQgcHVzaChSZWdpc3RlcklEIHNyYykKKyAgICB7
CisgICAgICAgIG1fYXNzZW1ibGVyLnB1c2hfcihzcmMpOworICAgIH0KKworICAgIHZvaWQgcHVz
aChBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5wdXNoX20oYWRk
cmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSk7CisgICAgfQorCisgICAgdm9pZCBwdXNoKEltbTMy
IGltbSkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnB1c2hfaTMyKGltbS5tX3ZhbHVlKTsK
KyAgICB9CisKKyAgICAvLyBSZWdpc3RlciBtb3ZlIG9wZXJhdGlvbnMKKworICAgIHZvaWQgbW92
ZShJbW0zMiBpbW0sIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgbV9hc3NlbWJsZXIu
TG9hZENvbnN0YW50KGltbS5tX3ZhbHVlLCBkZXN0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBt
b3ZlV2l0aFBhdGNoKEltbTMyIGltbSwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICBt
X2Fzc2VtYmxlci5Mb2FkQ29uc3RhbnQoaW1tLm1fdmFsdWUsIGRlc3QsIHRydWUpOworICAgIH0K
KworICAgIHZvaWQgbW92ZShSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsK
KyAgICAgICAgbV9hc3NlbWJsZXIubW92bF9ycihzcmMsIGRlc3QpOworICAgIH0KKworICAgIHZv
aWQgbW92ZShJbW1QdHIgaW1tLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fz
c2VtYmxlci5Mb2FkQ29uc3RhbnQoaW1tLmFzSW50cHRyKCksIGRlc3QpOworICAgIH0KKyAgICAK
KyAgICB2b2lkIGV4dHV3KFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7Cisg
ICAgICAgIG1fYXNzZW1ibGVyLmV4dHV3KHNyYywgZHN0KTsKKyAgICB9CisKKyAgICB2b2lkIHNl
dDMyKENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGxlZnQsIFJlZ2lzdGVySUQgcmlnaHQsIFJl
Z2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
IH0KKworCisgICAgdm9pZCBzZXQzMihDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBsZWZ0LCBJ
bW0zMiByaWdodCwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICB9CisKK3B1YmxpYzoKKyAgICBKdW1wIGJyYW5jaDMyKENvbmRpdGlvbiBj
b25kLCBSZWdpc3RlcklEIGxlZnQsIFJlZ2lzdGVySUQgcmlnaHQsIGJvb2wgbmVlZENvbnN0YW50
ID0gdHJ1ZSkKKyAgICB7CisgICAgICAgIEp1bXAgbV9qdW1wOworICAgICAgICBtX2Fzc2VtYmxl
ci5lbnN1cmVTcGFjZSgyMik7CisgICAgICAgIG1fYXNzZW1ibGVyLmNtcGxfcnIocmlnaHQsIGxl
ZnQsIGNvbmQpOworICAgICAgICAKKyAgICAgICAgLyogQlQgbGFiZWwgICAgICAgPT4gQkYgb2Zm
IAorICAgICAgICAgICBub3AgICAgICAgICAgICAgICBMRFIgcmVnCisgICAgICAgICAgIG5vcCAg
ICAgICAgICAgICAgIGJyYWYgQHJlZworICAgICAgICAgICBub3AgICAgICAgICAgICAgICBub3AK
KyAgICAgICAgICovCisgICAgICAgICAgICAgICAKKyAgICAgICAgbV9qdW1wID0gKGNvbmQgPT0g
Tm90RXF1YWwpID8gSnVtcChtX2Fzc2VtYmxlci5qbmUoKSkgOiBKdW1wKG1fYXNzZW1ibGVyLmpl
KCkpOworICAgICAgICAKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3I7CisgICAgICAgIGlmIChuZWVk
Q29uc3RhbnQpIHsKKyAgICAgICAgICAgIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICAg
ICAgbV9hc3NlbWJsZXIuTG9hZENvbnN0YW50KDB4MCwgc2NyLCB0cnVlKTsKKyAgICAgICAgfQor
ICAgICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubm9wKCk7Cisg
ICAgICAgIGlmIChuZWVkQ29uc3RhbnQpCisgICAgICAgICAgICByZWxlYXNlU2NyYXRjaChzY3Ip
OworICAgICAgICAKKyAgICAgICAgcmV0dXJuIG1fanVtcDsKKyAgICB9CisKKyAgICBKdW1wIGJy
YW5jaDMyKENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGxlZnQsIEltbTMyIHJpZ2h0LCBib29s
IG5lZWRDb25zdGFudCA9IHRydWUpCisgICAgeworICAgICAgICBKdW1wIG1fanVtcDsKKyAgICAg
ICAgaWYgKCgoY29uZCA9PSBFcXVhbCkgfHwgKGNvbmQgPT0gTm90RXF1YWwpKSAmJiAhcmlnaHQu
bV92YWx1ZSkKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnRlc3RsX3JyKGxlZnQsIGxlZnQpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5jbXBsX2lyKHJpZ2h0Lm1fdmFs
dWUsIGxlZnQsIGNvbmQpOworICAgICAgICAgICAgCisgICAgICAgIG1fYXNzZW1ibGVyLmVuc3Vy
ZVNwYWNlKDIwKTsKKyAgICAgICAgbV9qdW1wID0gKGNvbmQgPT0gTm90RXF1YWwpID8gSnVtcCht
X2Fzc2VtYmxlci5qbmUoKSkgOiBKdW1wKG1fYXNzZW1ibGVyLmplKCkpOworICAgICAgICAKKyAg
ICAgICAgUmVnaXN0ZXJJRCBzY3I7CisgICAgICAgIGlmIChuZWVkQ29uc3RhbnQpIHsKKyAgICAg
ICAgICAgIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuTG9h
ZENvbnN0YW50KDB4MCwgc2NyLCB0cnVlKTsKKyAgICAgICAgfQorICAgICAgICBtX2Fzc2VtYmxl
ci5ub3AoKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubm9wKCk7CisgICAgICAgIGlmIChuZWVkQ29u
c3RhbnQpCisgICAgICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgICAgICAKKyAgICAg
ICAgcmV0dXJuIG1fanVtcDsKKyAgICB9CisgICAgCisgICAgSnVtcCBicmFuY2gzMihDb25kaXRp
b24gY29uZCwgUmVnaXN0ZXJJRCBsZWZ0LCBBZGRyZXNzIHJpZ2h0LCBib29sIG5lZWRDb25zdGFu
dCA9IHRydWUpCisgICAgeworICAgICAgICBKdW1wIG1fanVtcDsKKyAgICAgICAgbV9hc3NlbWJs
ZXIuY21wbF9tcihyaWdodC5vZmZzZXQsIHJpZ2h0LmJhc2UsIGxlZnQsIGNvbmQpOworICAgICAg
ICAKKyAgICAgICAgbV9hc3NlbWJsZXIuZW5zdXJlU3BhY2UoMjApOworICAgICAgICBtX2p1bXAg
PSAoY29uZCA9PSBOb3RFcXVhbCkgPyBKdW1wKG1fYXNzZW1ibGVyLmpuZSgpKSA6IEp1bXAobV9h
c3NlbWJsZXIuamUoKSk7CisgICAgICAgIAorICAgICAgICBSZWdpc3RlcklEIHNjcjsKKyAgICAg
ICAgaWYgKG5lZWRDb25zdGFudCkgeworICAgICAgICAgICAgc2NyID0gY2xhaW1TY3JhdGNoKCk7
CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5Mb2FkQ29uc3RhbnQoMHgwLCBzY3IsIHRydWUpOwor
ICAgICAgICB9CisgICAgICAgIG1fYXNzZW1ibGVyLm5vcCgpOworICAgICAgICBtX2Fzc2VtYmxl
ci5ub3AoKTsKKyAgICAgICAgaWYgKG5lZWRDb25zdGFudCkKKyAgICAgICAgICAgIHJlbGVhc2VT
Y3JhdGNoKHNjcik7CisgICAgICAgIAorICAgICAgICByZXR1cm4gbV9qdW1wOworICAgIH0KKyAg
ICAKKyAgICBKdW1wIGJyYW5jaDMyKENvbmRpdGlvbiBjb25kLCBBZGRyZXNzIGxlZnQsIFJlZ2lz
dGVySUQgcmlnaHQsIGJvb2wgbmVlZENvbnN0YW50ID0gdHJ1ZSkKKyAgICB7CisgICAgICAgIEp1
bXAgbV9qdW1wOworICAgICAgICBtX2Fzc2VtYmxlci5jbXBsX3JtKHJpZ2h0LCBsZWZ0Lm9mZnNl
dCwgbGVmdC5iYXNlLCBjb25kKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgbV9hc3NlbWJs
ZXIuZW5zdXJlU3BhY2UoMjApOworICAgICAgICBtX2p1bXAgPSAoY29uZCA9PSBOb3RFcXVhbCkg
PyBKdW1wKG1fYXNzZW1ibGVyLmpuZSgpKSA6IEp1bXAobV9hc3NlbWJsZXIuamUoKSk7CisgICAg
ICAgIAorICAgICAgICBSZWdpc3RlcklEIHNjcjsKKyAgICAgICAgaWYgKG5lZWRDb25zdGFudCkg
eworICAgICAgICAgICAgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgICAgICBtX2Fzc2Vt
Ymxlci5Mb2FkQ29uc3RhbnQoMHgwLCBzY3IsIHRydWUpOworICAgICAgICB9CisgICAgICAgIG1f
YXNzZW1ibGVyLm5vcCgpOworICAgICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKKyAgICAgICAgaWYg
KG5lZWRDb25zdGFudCkKKyAgICAgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgICAg
IAorICAgICAgICByZXR1cm4gbV9qdW1wOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoMzIoQ29u
ZGl0aW9uIGNvbmQsIEFkZHJlc3MgbGVmdCwgSW1tMzIgcmlnaHQsIGJvb2wgbmVlZENvbnN0YW50
ID0gdHJ1ZSkKKyAgICB7CisgICAgICAgIEp1bXAgbV9qdW1wOworICAgICAgICBtX2Fzc2VtYmxl
ci5jbXBsX2ltKHJpZ2h0Lm1fdmFsdWUsIGxlZnQub2Zmc2V0LCBsZWZ0LmJhc2UsIGNvbmQpOwor
ICAgICAgICAKKyAgICAgICAgbV9hc3NlbWJsZXIuZW5zdXJlU3BhY2UoMjApOworICAgICAgICBt
X2p1bXAgPSAoY29uZCA9PSBOb3RFcXVhbCkgPyBKdW1wKG1fYXNzZW1ibGVyLmpuZSgpKSA6IEp1
bXAobV9hc3NlbWJsZXIuamUoKSk7CisgICAgICAgIAorICAgICAgICBSZWdpc3RlcklEIHNjcjsK
KyAgICAgICAgaWYgKG5lZWRDb25zdGFudCkgeworICAgICAgICAgICAgc2NyID0gY2xhaW1TY3Jh
dGNoKCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5Mb2FkQ29uc3RhbnQoMHgwLCBzY3IsIHRy
dWUpOworICAgICAgICB9CisgICAgICAgIG1fYXNzZW1ibGVyLm5vcCgpOworICAgICAgICBtX2Fz
c2VtYmxlci5ub3AoKTsKKyAgICAgICAgaWYgKG5lZWRDb25zdGFudCkKKyAgICAgICAgICAgIHJl
bGVhc2VTY3JhdGNoKHNjcik7CisgICAgICAgIAorICAgICAgICByZXR1cm4gbV9qdW1wOworICAg
IH0KKworCisgICAgSnVtcCBicmFuY2gzMihDb25kaXRpb24gY29uZCwgQWJzb2x1dGVBZGRyZXNz
IGxlZnQsIFJlZ2lzdGVySUQgcmlnaHQsIGJvb2wgbmVlZENvbnN0YW50ID0gdHJ1ZSkKKyAgICB7
CisgICAgICAgIEp1bXAgbV9qdW1wOworICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2Ny
YXRjaCgpOworICAgICAgICBtb3ZlKEltbTMyKChpbnQpbGVmdC5tX3B0ciksIHNjcik7CisgICAg
ICAgIG1fYXNzZW1ibGVyLmNtcGxfcnIocmlnaHQsIHNjciwgY29uZCk7CisKKyAgICAgICAgbV9h
c3NlbWJsZXIuZW5zdXJlU3BhY2UoMjApOworICAgICAgICBtX2p1bXAgPSAoY29uZCA9PSBOb3RF
cXVhbCkgPyBKdW1wKG1fYXNzZW1ibGVyLmpuZSgpKSA6IEp1bXAobV9hc3NlbWJsZXIuamUoKSk7
CisKKyAgICAgICAgaWYgKG5lZWRDb25zdGFudCkKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLkxv
YWRDb25zdGFudCgweDAsIHNjciwgdHJ1ZSk7CisgICAgICAgIG1fYXNzZW1ibGVyLm5vcCgpOwor
ICAgICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKKworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3Ip
OworICAgICAgICByZXR1cm4gbV9qdW1wOworICAgIH0KKworCisgICAgSnVtcCBicmFuY2gzMihD
b25kaXRpb24gY29uZCwgQWJzb2x1dGVBZGRyZXNzIGxlZnQsIEltbTMyIHJpZ2h0LCBib29sIG5l
ZWRDb25zdGFudCA9IHRydWUpCisgICAgeworICAgICAgICBKdW1wIG1fanVtcDsKKyAgICAgICAg
UmVnaXN0ZXJJRCBhZGRyZXNzVGVtcFJlZ2lzdGVyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAg
IGxvYWQzMihsZWZ0Lm1fcHRyLCBhZGRyZXNzVGVtcFJlZ2lzdGVyKTsKKworICAgICAgICBtX2Fz
c2VtYmxlci5jbXBsX2lyKHJpZ2h0Lm1fdmFsdWUsIGFkZHJlc3NUZW1wUmVnaXN0ZXIsIGNvbmQp
OworCisgICAgICAgIG1fYXNzZW1ibGVyLmVuc3VyZVNwYWNlKDIwKTsKKyAgICAgICAgbV9qdW1w
ID0gKGNvbmQgPT0gTm90RXF1YWwpID8gSnVtcChtX2Fzc2VtYmxlci5qbmUoKSkgOiBKdW1wKG1f
YXNzZW1ibGVyLmplKCkpOworCisgICAgICAgIGlmIChuZWVkQ29uc3RhbnQpCisgICAgICAgICAg
ICBtX2Fzc2VtYmxlci5Mb2FkQ29uc3RhbnQoMHgwLCBhZGRyZXNzVGVtcFJlZ2lzdGVyLCB0cnVl
KTsKKyAgICAgICAgbV9hc3NlbWJsZXIubm9wKCk7CisgICAgICAgIG1fYXNzZW1ibGVyLm5vcCgp
OworCisgICAgICAgIHJlbGVhc2VTY3JhdGNoKGFkZHJlc3NUZW1wUmVnaXN0ZXIpOworICAgICAg
ICByZXR1cm4gbV9qdW1wOworICAgIH0KKworCisKKyAgICBKdW1wIGJyYW5jaDE2KENvbmRpdGlv
biBjb25kLCAgQmFzZUluZGV4IGxlZnQsIFJlZ2lzdGVySUQgcmlnaHQpCisgICAgeworICAgICAg
ICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBtb3ZlKGxlZnQuaW5k
ZXgsIHNjcik7CisgICAgICAgIGxzaGlmdDMyKGxlZnQuc2NhbGUsIHNjcik7CisgICAgICAgIG1f
YXNzZW1ibGVyLmFkZGxfaXIobGVmdC5vZmZzZXQsIHNjcik7CisgICAgICAgIGFkZDMyKGxlZnQu
YmFzZSwgc2NyKTsKKyAgICAgICAgbG9hZDE2KHNjciwgc2NyKTsKKyAgICAgICAgZXh0dXcoc2Ny
LCBzY3IpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworCisgICAgICAgIHJldHVybiBi
cmFuY2gzMihjb25kLCBzY3IsIHJpZ2h0KTsgICAgCisgICAgfQorICAgIAorICAgIEp1bXAgYnJh
bmNoMTYoQ29uZGl0aW9uIGNvbmQsIEJhc2VJbmRleCBsZWZ0LCBJbW0zMiByaWdodCkKKyAgICB7
CisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIFJlZ2lz
dGVySUQgc2NyMSA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBtb3ZlKGxlZnQuaW5kZXgsIHNj
cik7CisgICAgICAgIGxzaGlmdDMyKGxlZnQuc2NhbGUsIHNjcik7CisgICAgICAgIG1fYXNzZW1i
bGVyLmFkZGxfaXIobGVmdC5vZmZzZXQsIHNjcik7CisgICAgICAgIGFkZDMyKGxlZnQuYmFzZSwg
c2NyKTsKKyAgICAgICAgbG9hZDE2KHNjciwgc2NyKTsKKyAgICAgICAgZXh0dXcoc2NyLCBzY3Ip
OworICAgICAgICAKKyAgICAgICAgbV9hc3NlbWJsZXIuTG9hZENvbnN0YW50KHJpZ2h0Lm1fdmFs
dWUsIHNjcjEpOworICAgICAgICAKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICAg
ICAgcmVsZWFzZVNjcmF0Y2goc2NyMSk7CisgICAgICAgIHJldHVybiBicmFuY2gzMihjb25kLCBz
Y3IsIHNjcjEpOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoVGVzdDMyKENvbmRpdGlvbiBjb25k
LCBSZWdpc3RlcklEIHJlZywgUmVnaXN0ZXJJRCBtYXNrLCBib29sIG5lZWRDb25zdGFudCA9IHRy
dWUpCisgICAgeworICAgICAgICBBU1NFUlQoKGNvbmQgPT0gWmVybykgfHwgKGNvbmQgPT0gTm9u
WmVybykpOworICAgICAgICBKdW1wIG1fanVtcDsKKyAgICAgICAgbV9hc3NlbWJsZXIudGVzdGxf
cnIocmVnLCBtYXNrKTsKKworICAgICAgICBtX2Fzc2VtYmxlci5lbnN1cmVTcGFjZSgyMCk7Cisg
ICAgICAgIG1fanVtcCA9IChjb25kID09IE5vdEVxdWFsKSA/IEp1bXAobV9hc3NlbWJsZXIuam5l
KCkpIDogSnVtcChtX2Fzc2VtYmxlci5qZSgpKTsKKyAgICAgICAgCisgICAgICAgIFJlZ2lzdGVy
SUQgc2NyOworICAgICAgICBpZiAobmVlZENvbnN0YW50KSB7CisgICAgICAgICAgICBzY3IgPSBj
bGFpbVNjcmF0Y2goKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLkxvYWRDb25zdGFudCgweDAs
IHNjciwgdHJ1ZSk7CisgICAgICAgIH0KKyAgICAgICAgbV9hc3NlbWJsZXIubm9wKCk7CisgICAg
ICAgIG1fYXNzZW1ibGVyLm5vcCgpOworICAgICAgICBpZiAobmVlZENvbnN0YW50KQorICAgICAg
ICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBtX2p1
bXA7ICAgCisgICAgfQorCisgICAgSnVtcCBicmFuY2hUZXN0MzIoQ29uZGl0aW9uIGNvbmQsIFJl
Z2lzdGVySUQgcmVnLCBJbW0zMiBtYXNrID0gSW1tMzIoLTEpLCBib29sIG5lZWRDb25zdGFudCA9
IHRydWUpCisgICAgeworICAgICAgICBBU1NFUlQoKGNvbmQgPT0gWmVybykgfHwgKGNvbmQgPT0g
Tm9uWmVybykpOworICAgICAgICBKdW1wIG1fanVtcDsKKyAgICAgICAgCisgICAgICAgIGlmICht
YXNrLm1fdmFsdWUgPT0gLTEpCisgICAgICAgICAgICBtX2Fzc2VtYmxlci50ZXN0bF9ycihyZWcs
IHJlZyk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnRlc3RsX2kzMnIo
bWFzay5tX3ZhbHVlLCByZWcpOworICAgICAgICAgICAgCisgICAgICAgIG1fYXNzZW1ibGVyLmVu
c3VyZVNwYWNlKDIwKTsKKyAgICAgICAgbV9qdW1wID0gKGNvbmQgPT0gTm90RXF1YWwpID8gSnVt
cChtX2Fzc2VtYmxlci5qbmUoKSkgOiBKdW1wKG1fYXNzZW1ibGVyLmplKCkpOworICAgICAgICAK
KyAgICAgICAgUmVnaXN0ZXJJRCBzY3I7CisgICAgICAgIGlmIChuZWVkQ29uc3RhbnQpIHsKKyAg
ICAgICAgICAgIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIu
TG9hZENvbnN0YW50KDB4MCwgc2NyLCB0cnVlKTsKKyAgICAgICAgfQorICAgICAgICBtX2Fzc2Vt
Ymxlci5ub3AoKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubm9wKCk7CisgICAgICAgIGlmIChuZWVk
Q29uc3RhbnQpCisgICAgICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgICAgICAKKyAg
ICAgICAgcmV0dXJuIG1fanVtcDsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaFRlc3QzMihDb25k
aXRpb24gY29uZCwgQWRkcmVzcyBhZGRyZXNzLCBJbW0zMiBtYXNrID0gSW1tMzIoLTEpLCBib29s
IG5lZWRDb25zdGFudCA9IHRydWUpCisgICAgeworICAgICAgICBBU1NFUlQoKGNvbmQgPT0gWmVy
bykgfHwgKGNvbmQgPT0gTm9uWmVybykpOworICAgICAgICBKdW1wIG1fanVtcDsKKworICAgICAg
ICBpZiAobWFzay5tX3ZhbHVlID09IC0xKQorICAgICAgICAgICAgbV9hc3NlbWJsZXIuY21wbF9p
bSgwLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlLCBjb25kKTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgbV9hc3NlbWJsZXIudGVzdGxfaTMybShtYXNrLm1fdmFsdWUsIGFkZHJlc3Mu
b2Zmc2V0LCBhZGRyZXNzLmJhc2UpOworICAgICAgICAgICAgCisgICAgICAgIG1fYXNzZW1ibGVy
LmVuc3VyZVNwYWNlKDIwKTsKKyAgICAgICAgbV9qdW1wID0gKGNvbmQgPT0gTm90RXF1YWwpID8g
SnVtcChtX2Fzc2VtYmxlci5qbmUoKSkgOiBKdW1wKG1fYXNzZW1ibGVyLmplKCkpOworICAgICAg
ICAKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3I7CisgICAgICAgIGlmIChuZWVkQ29uc3RhbnQpIHsK
KyAgICAgICAgICAgIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICAgICAgbV9hc3NlbWJs
ZXIuTG9hZENvbnN0YW50KDB4MCwgc2NyLCB0cnVlKTsKKyAgICAgICAgfQorICAgICAgICBtX2Fz
c2VtYmxlci5ub3AoKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubm9wKCk7CisgICAgICAgIGlmIChu
ZWVkQ29uc3RhbnQpCisgICAgICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgICAgICAK
KyAgICAgICAgcmV0dXJuIG1fanVtcDsKKyAgICB9CisgICAgCisgICAgSnVtcCBicmFuY2gzMihD
b25kaXRpb24gY29uZCwgYm9vbCBuZWVkQ29uc3RhbnQgPSB0cnVlKQorICAgIHsKKyAgICAgICAg
SnVtcCBtX2p1bXA7CisKKyAgICAgICAgbV9hc3NlbWJsZXIuZW5zdXJlU3BhY2UoMjApOworICAg
ICAgICBtX2p1bXAgPSAoY29uZCA9PSBOb3RFcXVhbCkgPyBKdW1wKG1fYXNzZW1ibGVyLmpuZSgp
KSA6IEp1bXAobV9hc3NlbWJsZXIuamUoKSk7CisKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBj
bGFpbVNjcmF0Y2goKTsKKyAKKyAgICAgICAgbV9hc3NlbWJsZXIuTG9hZENvbnN0YW50KDB4MCwg
c2NyLCB0cnVlKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubm9wKCk7CisgICAgICAgIG1fYXNzZW1i
bGVyLm5vcCgpOworICAgICAgICAKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICAg
ICAgcmV0dXJuIG1fanVtcDsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaFRlc3QzMihDb25kaXRp
b24gY29uZCwgQmFzZUluZGV4IGFkZHJlc3MsIEltbTMyIG1hc2sgPSBJbW0zMigtMSksIGJvb2wg
bmVlZENvbnN0YW50ID0gdHJ1ZSkKKyAgICB7CisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xh
aW1TY3JhdGNoKCk7CisgICAgICAgIEp1bXAgbV9qdW1wOworCisgICAgICAgIG1vdmUoYWRkcmVz
cy5pbmRleCwgc2NyKTsKKworICAgICAgICBsc2hpZnQzMihhZGRyZXNzLnNjYWxlLCBzY3IpOwor
ICAgICAgICBhZGQzMihhZGRyZXNzLmJhc2UsIHNjcik7CisgICAgICAgIGxvYWQzMihzY3IsIGFk
ZHJlc3Mub2Zmc2V0LCBzY3IpOworCisgICAgICAgIGlmIChtYXNrLm1fdmFsdWUgPT0gLTEpCisg
ICAgICAgICAgICBtX2Fzc2VtYmxlci50ZXN0bF9ycihzY3IsIHNjcik7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnRlc3RsX2kzMnIobWFzay5tX3ZhbHVlLCBzY3IpOwor
CisgICAgICAgIG1fYXNzZW1ibGVyLmVuc3VyZVNwYWNlKDIwKTsKKyAgICAgICAgbV9qdW1wID0g
KGNvbmQgPT0gTm90RXF1YWwpID8gSnVtcChtX2Fzc2VtYmxlci5qbmUoKSkgOiBKdW1wKG1fYXNz
ZW1ibGVyLmplKCkpOworCisgICAgICAgIGlmIChuZWVkQ29uc3RhbnQpCisgICAgICAgICAgICBt
X2Fzc2VtYmxlci5Mb2FkQ29uc3RhbnQoMHgwLCBzY3IsIHRydWUpOworCisgICAgICAgIG1fYXNz
ZW1ibGVyLm5vcCgpOworICAgICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKKyAgICAgICAgcmVsZWFz
ZVNjcmF0Y2goc2NyKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBtX2p1bXA7CisgICAgfQor
CisgICAgSnVtcCBqdW1wKCkKKyAgICB7CisgICAgICAgIHJldHVybiBKdW1wKG1fYXNzZW1ibGVy
LmptcCgpKTsKKyAgICB9CisKKyAgICB2b2lkIGp1bXAoUmVnaXN0ZXJJRCB0YXJnZXQpCisgICAg
eworICAgICAgICBtX2Fzc2VtYmxlci5qbXBfcih0YXJnZXQpOworICAgIH0KKworICAgIC8vIEFk
ZHJlc3MgaXMgYSBtZW1vcnkgbG9jYXRpb24gY29udGFpbmluZyB0aGUgYWRkcmVzcyB0byBqdW1w
IHRvCisgICAgdm9pZCBqdW1wKEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNz
ZW1ibGVyLmptcF9tKGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UpOworICAgIH0KKworCisg
ICAgLy8gQXJpdGhtZXRpYyBjb250cm9sIGZsb3cgb3BlcmF0aW9ucworICAgIAorICAgIEp1bXAg
YnJhbmNoQWRkMzIoQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRl
c3QpCisgICAgeworICAgICAgICBBU1NFUlQoY29uZCA9PSBPdmVyZmxvdyk7CisgICAgICAgIG1f
YXNzZW1ibGVyLmVuc3VyZVNwYWNlKDIyKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuYWRkdmxfcnIo
c3JjLCBkZXN0KTsKKworICAgICAgICBKdW1wIG1fanVtcCA9IEp1bXAobV9hc3NlbWJsZXIuam5l
KCkpOworICAgICAgIAorICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOyAK
KyAgICAgICAgbV9hc3NlbWJsZXIuTG9hZENvbnN0YW50KDB4MCwgc2NyLCB0cnVlKTsKKyAgICAg
ICAgbV9hc3NlbWJsZXIubm9wKCk7CisgICAgICAgIG1fYXNzZW1ibGVyLm5vcCgpOworICAgICAg
ICAKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICAgICAgcmV0dXJuIG1fanVtcDsK
KyAgICB9CisgICAgCisgICAgSnVtcCBicmFuY2hNdWwzMihDb25kaXRpb24gY29uZCwgUmVnaXN0
ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgIH0KKyAgICAKKyAgICBKdW1wIGJyYW5jaE11bDMyKENvbmRpdGlvbiBjb25k
LCBJbW0zMiBpbW0sIFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisgICAgCisgICAgSnVtcCBicmFuY2hT
dWIzMihDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAg
ICB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAgICAKKyAgICBKdW1w
IGJyYW5jaFN1YjMyKENvbmRpdGlvbiBjb25kLCBJbW0zMiBpbW0sIFJlZ2lzdGVySUQgZGVzdCkK
KyAgICB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAgICAKKworICAg
IENhbGwgY2FsbCgpCisgICAgeworICAgICAgICByZXR1cm4gQ2FsbChtX2Fzc2VtYmxlci5jYWxs
KCksIENhbGw6OkxpbmthYmxlKTsKKyAgICB9CisgICAgCisgICAgQ2FsbCBuZWFyQ2FsbCgpCisg
ICAgeworICAgICAgICByZXR1cm4gQ2FsbChtX2Fzc2VtYmxlci5jYWxsKCksIENhbGw6Okxpbmth
YmxlTmVhcik7CisgICAgfQorCisgICAgQ2FsbCBjYWxsKFJlZ2lzdGVySUQgdGFyZ2V0KQorICAg
IHsKKyAgICAgICAgcmV0dXJuIENhbGwobV9hc3NlbWJsZXIuY2FsbCh0YXJnZXQpLCBDYWxsOjpO
b25lKTsKKyAgICB9CisKKyAgICB2b2lkIHJldCgpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxl
ci5yZXQoKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubm9wKCk7CisgICAgfQorICAgIAorICAgIEp1
bXAgYnJhbmNoUHRyV2l0aFBhdGNoKENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGxlZnQsIERh
dGFMYWJlbFB0ciYgZGF0YUxhYmVsLCBJbW1QdHIgaW5pdGlhbFJpZ2h0VmFsdWUgPSBJbW1QdHIo
MCkpCisgICAgeyAgICAgICAgCisgICAgICAgIFJlZ2lzdGVySUQgZGF0YVRlbXBSZWdpc3RlciA9
IGNsYWltU2NyYXRjaCgpOworICAgICAgICBKdW1wIG1fanVtcDsKKyAgICAgICAgCisgICAgICAg
IGRhdGFMYWJlbCA9IERhdGFMYWJlbFB0cih0aGlzKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuTG9h
ZENvbnN0YW50KChpbnQpaW5pdGlhbFJpZ2h0VmFsdWUubV92YWx1ZSwgZGF0YVRlbXBSZWdpc3Rl
ciwgdHJ1ZSk7CisgICAgICAgIAorICAgICAgICBtX2Fzc2VtYmxlci5jbXBsX3JyKGRhdGFUZW1w
UmVnaXN0ZXIsIGxlZnQsIGNvbmQpOyAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIAorICAg
ICAgICBtX2p1bXAgPSAoY29uZCA9PSBOb3RFcXVhbCkgPyBKdW1wKG1fYXNzZW1ibGVyLmpuZSgp
KSA6IEp1bXAobV9hc3NlbWJsZXIuamUoKSk7CisgICAgICAgIAorICAgICAgICBSZWdpc3RlcklE
IHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBtX2Fzc2VtYmxlci5Mb2FkQ29uc3RhbnQo
MHgwLCBzY3IsIHRydWUpOworICAgICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKKyAgICAgICAgbV9h
c3NlbWJsZXIubm9wKCk7CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgICAgIHJl
bGVhc2VTY3JhdGNoKGRhdGFUZW1wUmVnaXN0ZXIpOworICAgICAgICAKKyAgICAgICAgcmV0dXJu
IG1fanVtcDsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaFB0cldpdGhQYXRjaChDb25kaXRpb24g
Y29uZCwgQWRkcmVzcyBsZWZ0LCBEYXRhTGFiZWxQdHImIGRhdGFMYWJlbCwgSW1tUHRyIGluaXRp
YWxSaWdodFZhbHVlID0gSW1tUHRyKDApKQorICAgIHsKKyAgICAgICAgSnVtcCBtX2p1bXA7Cisg
ICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIFJlZ2lzdGVy
SUQgc2NyMSA9IGNsYWltU2NyYXRjaCgpOworCisgICAgICAgIG1fYXNzZW1ibGVyLkxvYWRDb25z
dGFudChsZWZ0Lm9mZnNldCwgc2NyLCBmYWxzZSk7CisgICAgICAgIG1fYXNzZW1ibGVyLmFkZGxf
cnIobGVmdC5iYXNlLCBzY3IpOworICAgICAgICBtX2Fzc2VtYmxlci5tb3ZsX21yKHNjciwgc2Ny
KTsKKworICAgICAgICBkYXRhTGFiZWwgPSBEYXRhTGFiZWxQdHIodGhpcyk7CisgICAgICAgIG1v
dmVXaXRoUGF0Y2goSW1tMzIoaW5pdGlhbFJpZ2h0VmFsdWUuYXNJbnRwdHIoKSksIHNjcjEpOwor
CisgICAgICAgIG1fYXNzZW1ibGVyLmNtcGxfcnIoc2NyMSwgc2NyLCBjb25kKTsgICAgICAgIAor
ICAgICAgICAgICAgICAgIAorICAgICAgICBtX2p1bXAgPSAoY29uZCA9PSBOb3RFcXVhbCkgPyBK
dW1wKG1fYXNzZW1ibGVyLmpuZSgpKSA6IEp1bXAobV9hc3NlbWJsZXIuamUoKSk7CisgICAgICAg
IAorICAgICAgICBtX2Fzc2VtYmxlci5Mb2FkQ29uc3RhbnQoMHgwLCBzY3IsIHRydWUpOworICAg
ICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubm9wKCk7CisgICAg
ICAgIAorICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgICAgICByZWxlYXNlU2NyYXRj
aChzY3IxKTsKKyAgICAgICAgcmV0dXJuIG1fanVtcDsKKyAgICB9CisgICAgCisgICAgRGF0YUxh
YmVsUHRyIHN0b3JlUHRyV2l0aFBhdGNoKEltbTMyIGluaXRpYWxWYWx1ZSwgSW1wbGljaXRBZGRy
ZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRj
aCgpOworICAgICAgICBEYXRhTGFiZWxQdHIgbGFiZWwodGhpcyk7CisgICAgICAgIG1vdmVXaXRo
UGF0Y2goaW5pdGlhbFZhbHVlLCBzY3IpOworICAgICAgICBzdG9yZTMyKHNjciwgYWRkcmVzcyk7
CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgICAgIHJldHVybiBsYWJlbDsKKyAg
ICB9CisgICAgCisgICAgRGF0YUxhYmVsUHRyIHN0b3JlUHRyV2l0aFBhdGNoKEltbVB0ciBpbml0
aWFsVmFsdWUsIEltcGxpY2l0QWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgc3RvcmVQ
dHJXaXRoUGF0Y2goSW1tMzIoaW5pdGlhbFZhbHVlLmFzSW50cHRyKCkpLCBhZGRyZXNzKTsKKyAg
ICB9CisgICAgCisgICAgRGF0YUxhYmVsUHRyIHN0b3JlUHRyV2l0aFBhdGNoKEltbTMyIGluaXRp
YWxWYWx1ZSwgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3Ig
PSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgRGF0YUxhYmVsUHRyIGxhYmVsKHRoaXMpOworICAg
ICAgICBtb3ZlV2l0aFBhdGNoKGluaXRpYWxWYWx1ZSwgc2NyKTsKKyAgICAgICAgc3RvcmUzMihz
Y3IsIGFkZHJlc3MpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgICAgICByZXR1
cm4gbGFiZWw7CisgICAgfQorCisgICAgRGF0YUxhYmVsUHRyIHN0b3JlUHRyV2l0aFBhdGNoKElt
bVB0ciBpbml0aWFsVmFsdWUsIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIHN0b3Jl
UHRyV2l0aFBhdGNoKEltbTMyKGluaXRpYWxWYWx1ZS5hc0ludHB0cigpKSwgYWRkcmVzcyk7Cisg
ICAgfQorCisgICAgRGF0YUxhYmVsUHRyIHN0b3JlUHRyV2l0aFBhdGNoKEltcGxpY2l0QWRkcmVz
cyBhZGRyZXNzKSB7IHJldHVybiBzdG9yZVB0cldpdGhQYXRjaChJbW0zMigwKSwgYWRkcmVzcyk7
IH0KKyAgICAKKyAgICAgICAKKyAgICBDYWxsIHRhaWxSZWN1cnNpdmVDYWxsKCkKKyAgICB7Cisg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7IAorICAgIH0KKworICAgIENhbGwgbWFrZVRhaWxS
ZWN1cnNpdmVDYWxsKEp1bXAgb2xkSnVtcCkKKyAgICB7CisgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7IAorICAgIH0KKyAgICAKKyAgICBwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBMaW5r
QnVmZmVyOworICAgIGZyaWVuZCBjbGFzcyBSZXBhdGNoQnVmZmVyOworCisgICAgc3RhdGljIHZv
aWQgbGlua0NhbGwodm9pZCogY29kZSwgQ2FsbCBjYWxsLCBGdW5jdGlvblB0ciBmdW5jdGlvbikK
KyAgICB7CisgICAgICAgIFNINEFzc2VtYmxlcjo6bGlua0NhbGwoY29kZSwgY2FsbC5tX2ptcCwg
ZnVuY3Rpb24udmFsdWUoKSk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgcmVwYXRjaENhbGwo
Q29kZUxvY2F0aW9uQ2FsbCBjYWxsLCBDb2RlTG9jYXRpb25MYWJlbCBkZXN0aW5hdGlvbikKKyAg
ICB7CisgICAgICAgIFNINEFzc2VtYmxlcjo6cmVsaW5rQ2FsbChjYWxsLmRhdGFMb2NhdGlvbigp
LCBkZXN0aW5hdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICB9CisKKyAgICBzdGF0aWMg
dm9pZCByZXBhdGNoQ2FsbChDb2RlTG9jYXRpb25DYWxsIGNhbGwsIEZ1bmN0aW9uUHRyIGRlc3Rp
bmF0aW9uKQorICAgIHsKKyAgICAgICAgU0g0QXNzZW1ibGVyOjpyZWxpbmtDYWxsKGNhbGwuZGF0
YUxvY2F0aW9uKCksIGRlc3RpbmF0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgIH0KKwor
fTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoQVNTRU1CTEVSKQor
CisjZW5kaWYgLy8gTWFjcm9Bc3NlbWJsZXJTSDRfaApkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL1NINEFzc2VtYmxlci5oIGIvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1NI
NEFzc2VtYmxlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjZWUyZDUK
LS0tIC9kZXYvbnVsbAorKysgYi9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvU0g0QXNzZW1ibGVy
LmgKQEAgLTAsMCArMSwxODU0IEBACisKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBT
VE1pY3JvZWxlY3Ryb25pY3MuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBXcml0dGVuIGJ5IFRo
b3VyYXlhIEFuZG9sc2kgKHRob3VyYXlhLmFuZG9sc2lAc3QuY29tKS4KKyAqCisgKiBDb3B5cmln
aHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBTSDRBc3NlbWJsZXJfaAor
I2RlZmluZSBTSDRBc3NlbWJsZXJfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNp
ZiBFTkFCTEUoQVNTRU1CTEVSKSAmJiBDUFUoU0g0KQorCisjZGVmaW5lIEdFVE9QQ09ERTEoYSwg
YiwgYykgICgoYSkgfCAoKChiKSAmIDB4ZikgPDwgOCkgfCgoKGMpICYgMHhmKSA8PCA0KSkKKyNk
ZWZpbmUgR0VUT1BDT0RFMihhLCBiKSAgKChhKSB8ICgoKGIpICYgMHhmKSA8PCA4KSkKKyNkZWZp
bmUgR0VUT1BDT0RFMyhhLCBiLCBjKSAgKChhKSB8ICgoKGIpICYgMHhmKSA8PCA4KSB8KChjKSAm
IDB4ZmYpKQorI2RlZmluZSBHRVRPUENPREU0KGEsIGIsIGMsIGQpICAoKGEpIHwgKCgoYikgJiAw
eGYpIDw8IDgpIHwoKChjKSAmIDB4ZikgPDw0KSB8KChkKSAmIDB4ZikpCisjZGVmaW5lIEdFVE9Q
Q09ERTUoYSwgYikgICgoYSkgfCAoKGIpICYgMHhmZikpCisjZGVmaW5lIEdFVE9QQ09ERTYoYSwg
YikgICgoYSkgfCAoKGIpICYgMHhmZmYpKQorI2RlZmluZSBHRVRPUENPREU3KGEsIGIpICAoKGEp
IHwgKCgoYikgJiAweDcpIDw8IDkpKQorI2RlZmluZSBHRVRPUENPREU4KGEsIGIsIGMpICAoKGEp
IHwgKCgoYikgJiAweDcpIDw8IDkpIHwoKChjKSAmIDB4NykgPDw1KSkKKyNkZWZpbmUgR0VUT1BD
T0RFOShhLCBiLCBjKSAgKChhKSB8ICgoKGIpICYgMHhmKSA8PCA4KSB8KCgoYykgJiAweDcpIDw8
NSkpCisjZGVmaW5lIEdFVE9QQ09ERTEwKGEsIGIsIGMpICAoKGEpIHwgKCgoYikgJiAweDcpIDw8
IDkpIHwoKChjKSAmIDB4RikgPDw0KSkKKyNkZWZpbmUgR0VUT1BDT0RFMTEoYSwgYiwgYykgICgo
YSkgfCAoKChiKSAmIDB4ZikgPDwgNCkgfCgoKGMpICYgMHhmKSkpCisKKworI2RlZmluZSBJTlZB
TElEX09QQ09ERSAgIDB4ZmZmZgorI2RlZmluZSBBRERfT1BDT0RFICAgICAgIDB4MzAwQworI2Rl
ZmluZSBBRERJTU1fT1BDT0RFICAgIDB4NzAwMAorI2RlZmluZSBBRERDX09QQ09ERSAgICAgIDB4
MzAwRQorI2RlZmluZSBBRERWX09QQ09ERSAgICAgIDB4MzAwRgorCisjZGVmaW5lIEFORF9PUENP
REUgICAgICAgMHgyMDA5CisjZGVmaW5lIEFORElNTV9PUENPREUgICAgMHhDOTAwCisjZGVmaW5l
IERJVjBfT1BDT0RFICAgICAgMHgyMDA3CisjZGVmaW5lIERJVjFfT1BDT0RFICAgICAgMHgzMDA0
CisKKyNkZWZpbmUgQkZfT1BDT0RFICAgICAgICAweDhCMDAKKyNkZWZpbmUgQkZTX09QQ09ERSAg
ICAgICAweDhGMDAKKyNkZWZpbmUgQlJBX09QQ09ERSAgICAgICAwWEEwMDAKKyNkZWZpbmUgQlJB
Rl9PUENPREUgICAgICAweDAwMjMKKyNkZWZpbmUgTk9QX09QQ09ERSAgICAgICAweDAwMDkKKyNk
ZWZpbmUgQlNSX09QQ09ERSAgICAgICAweEIwMDAKKyNkZWZpbmUgUlRTX09QQ09ERSAgICAgICAw
eDAwMEIKKyNkZWZpbmUgQlRfT1BDT0RFICAgICAgICAweDg5MDAKKyNkZWZpbmUgQlRTX09QQ09E
RSAgICAgICAweDhEMDAKKyNkZWZpbmUgQlNSRl9PUENPREUgICAgICAweDAwMDMKKworI2RlZmlu
ZSBCUktfT1BDT0RFICAgICAgIDB4MDAzQgorI2RlZmluZSBGVFJDX09QQ09ERSAgICAgIDB4RjAz
RAorCisjZGVmaW5lIENNUEVRX09QQ09ERSAgICAgMHgzMDAwCisjZGVmaW5lIENNUEVRSU1NX09Q
Q09ERSAgMHg4ODAwCisjZGVmaW5lIENNUEdFX09QQ09ERSAgICAgMHgzMDAzCisjZGVmaW5lIENN
UEdUX09QQ09ERSAgICAgMHgzMDA3CisjZGVmaW5lIENNUEhJX09QQ09ERSAgICAgMHgzMDA2Cisj
ZGVmaW5lIENNUEhTX09QQ09ERSAgICAgMHgzMDAyCisjZGVmaW5lIENNUFBMX09QQ09ERSAgICAg
MHg0MDE1CisjZGVmaW5lIENNUFBaX09QQ09ERSAgICAgMHg0MDExCisjZGVmaW5lIENNUFNUUl9P
UENPREUgICAgMHgyMDBDCisKKyNkZWZpbmUgRFRfT1BDT0RFICAgICAgICAweDQwMTAKKworCisj
ZGVmaW5lIEZDTVBFUV9PUENPREUgICAgMHhGMDA0CisjZGVmaW5lIEZDTVBHVF9PUENPREUgICAg
MHhGMDA1CisjZGVmaW5lIERDTVBFUV9PUENPREUgICAgMHhGMDA1CisjZGVmaW5lIERDTVBHVF9P
UENPREUgICAgMHhGMDA0CisKKyNkZWZpbmUgRk1PVl9PUENPREUgICAgICAweEYwMEMKKyNkZWZp
bmUgRE1PVl9PUENPREUgICAgICAgICAgICAgICAgIDB4MUUwMTkKKyNkZWZpbmUgRE1PVl9XUklU
RV9SMFJOX09QQ09ERSAgICAgIDB4MUUwMEYKKyNkZWZpbmUgRE1PVl9XUklURV9SMFJOX09QQ09E
RSAgICAgIDB4MUUwMEYKKyNkZWZpbmUgRE1PVl9SRUFEX1IwUk5fT1BDT0RFICAgICAgIDB4MUUw
MEQKKworCisjZGVmaW5lIEZBRERfT1BDT0RFICAgICAgMHhGMDAwCisjZGVmaW5lIEZNVUxfT1BD
T0RFICAgICAgMHhGMDAyCisjZGVmaW5lIEZTVUJfT1BDT0RFICAgICAgMHhGMDAxCisjZGVmaW5l
IEZESVZfT1BDT0RFICAgICAgMHhGMDAzCisKKyNkZWZpbmUgRk5FR19PUENPREUgICAgICAweEYw
NEQKKworCisjZGVmaW5lIEpNUF9PUENPREUgICAgICAgMHg0MDJCCisjZGVmaW5lIEpTUl9PUENP
REUgICAgICAgMHg0MDBCCisKKworI2RlZmluZSBMRFNQUl9PUENPREUgICAgIDB4NDAyQQorI2Rl
ZmluZSBMRFNMUFJfT1BDT0RFICAgIDB4NDAyNgorCisjZGVmaW5lIE1PVl9PUENPREUgICAgICAg
MHg2MDAzCisjZGVmaW5lIE1PVklNTV9PUENPREUgICAgMHhFMDAwCisKKyNkZWZpbmUgTU9WQl9X
UklURV9STl9PUENPREUgICAgICAweDIwMDAKKyNkZWZpbmUgTU9WQl9XUklURV9STkRFQ19PUENP
REUgICAweDIwMDQKKyNkZWZpbmUgTU9WQl9XUklURV9SMFJOX09QQ09ERSAgICAweDAwMDQKKyNk
ZWZpbmUgTU9WQl9XUklURV9PRkZHQlJfT1BDT0RFICAweEMwMDAKKyNkZWZpbmUgTU9WQl9XUklU
RV9PRkZSTl9PUENPREUgICAweDgwMDAKKworI2RlZmluZSBNT1ZCX1JFQURfUk1fT1BDT0RFICAg
ICAgMHg2MDAwCisjZGVmaW5lIE1PVkJfUkVBRF9STUlOQ19PUENPREUgICAweDYwMDQKKyNkZWZp
bmUgTU9WQl9SRUFEX1IwUk1fT1BDT0RFICAgIDB4MDAwQworI2RlZmluZSBNT1ZCX1JFQURfT0ZG
R0JSX09QQ09ERSAgMHhDNDAwCisjZGVmaW5lIE1PVkJfUkVBRF9PRkZSTV9PUENPREUgICAweDg0
MDAKKworI2RlZmluZSBNT1ZMX1dSSVRFX1JOX09QQ09ERSAgICAgIDB4MjAwMgorI2RlZmluZSBN
T1ZMX1dSSVRFX1JOREVDX09QQ09ERSAgIDB4MjAwNgorI2RlZmluZSBNT1ZMX1dSSVRFX1IwUk5f
T1BDT0RFICAgIDB4MDAwNgorI2RlZmluZSBNT1ZMX1dSSVRFX09GRkdCUl9PUENPREUgIDB4QzIw
MAorI2RlZmluZSBNT1ZMX1dSSVRFX09GRlJOX09QQ09ERSAgIDB4MTAwMAorCisjZGVmaW5lIE1P
VkxfUkVBRF9STV9PUENPREUgICAgICAweDYwMDIKKyNkZWZpbmUgTU9WTF9SRUFEX1JNSU5DX09Q
Q09ERSAgIDB4NjAwNgorI2RlZmluZSBNT1ZMX1JFQURfUjBSTV9PUENPREUgICAgMHgwMDBFCisj
ZGVmaW5lIE1PVkxfUkVBRF9PRkZHQlJfT1BDT0RFICAweEM2MDAKKyNkZWZpbmUgTU9WTF9SRUFE
X09GRlBDX09QQ09ERSAgIDB4RDAwMAorI2RlZmluZSBNT1ZMX1JFQURfT0ZGUk1fT1BDT0RFICAg
MHg1MDAwCisjZGVmaW5lIE1PVldfV1JJVEVfUk5fT1BDT0RFICAgICAweDIwMDEKKyNkZWZpbmUg
TU9WV19SRUFEX1JNX09QQ09ERSAgICAgIDB4NjAwMQorI2RlZmluZSBNT1ZXX1JFQURfUjBSTV9P
UENPREUgICAgMHgwMDBECisjZGVmaW5lIE1PVldfUkVBRF9PRkZQQ19PUENPREUgICAweDkwMDAK
KworI2RlZmluZSBNT1ZBX1JFQURfT0ZGUENfT1BDT0RFICAweEM3MDAKKyNkZWZpbmUgTU9WVF9P
UENPREUgICAgICAgICAgICAgMHgwMDI5CisKKyNkZWZpbmUgTVVMTF9PUENPREUgICAgICAgICAg
ICAgMHgwMDA3CisjZGVmaW5lIFNUU01BQ0xfT1BDT0RFICAgICAgICAgIDB4MDAxQQorI2RlZmlu
ZSBTVFNNQUNIX09QQ09ERSAgICAgICAgICAweDAwMEEKKyNkZWZpbmUgRE1VTFNMX09QQ09ERSAg
ICAgICAgICAgMHgzMDBECisKKyNkZWZpbmUgTkVHX09QQ09ERSAgICAgICAgICAgICAgMHg2MDBC
CisjZGVmaW5lIE5FR0NfT1BDT0RFICAgICAgICAgICAgIDB4NjAwQQorCisjZGVmaW5lIFJUU19P
UENPREUgICAgICAgICAgICAgIDB4MDAwQgorI2RlZmluZSBOT1RfT1BDT0RFICAgICAgICAgICAg
ICAweDYwMDcKKworI2RlZmluZSBPUl9PUENPREUgICAgICAgICAgICAgICAweDIwMEIKKyNkZWZp
bmUgT1JJTU1fT1BDT0RFICAgICAgICAgICAgMHhDQjAwCisjZGVmaW5lIE9SQklNTV9PUENPREUg
ICAgICAgICAgIDB4Q0YwMAorCisKKyNkZWZpbmUgU0VUU19PUENPREUgICAgICAgICAgICAgMHgw
MDU4CisjZGVmaW5lIFNFVFRfT1BDT0RFICAgICAgICAgICAgIDB4MDAxOCAKKyNkZWZpbmUgU0hB
RF9PUENPREUgICAgICAgICAgICAgMHg0MDBDCisjZGVmaW5lIFNIQUxfT1BDT0RFICAgICAgICAg
ICAgIDB4NDAyMAorI2RlZmluZSBTSEFSX09QQ09ERSAgICAgICAgICAgICAweDQwMjEKKyNkZWZp
bmUgU0hMRF9PUENPREUgICAgICAgICAgICAgMHg0MDBECisjZGVmaW5lIFNITExfT1BDT0RFICAg
ICAgICAgICAgIDB4NDAwMAorI2RlZmluZSBTSExMMl9PUENPREUgICAgICAgICAgICAweDQwMDgK
KyNkZWZpbmUgU0hMTDhfT1BDT0RFICAgICAgICAgICAgMHg0MDE4CisjZGVmaW5lIFNITEwxNl9P
UENPREUgICAgICAgICAgIDB4NDAyOAorCisjZGVmaW5lIFNITFJfT1BDT0RFICAgICAgICAgICAg
IDB4NDAwMQorI2RlZmluZSBTSExSMl9PUENPREUgICAgICAgICAgICAweDQwMDkKKyNkZWZpbmUg
U0hMUjhfT1BDT0RFICAgICAgICAgICAgMHg0MDE5CisjZGVmaW5lIFNITFIxNl9PUENPREUgICAg
ICAgICAgIDB4NDAyOQorCisKKyNkZWZpbmUgU1RTUFJfT1BDT0RFICAgICAgICAgICAgMHgwMDJB
CisjZGVmaW5lIFNUU0xQUl9PUENPREUgICAgICAgICAgIDB4NDAyMgorI2RlZmluZSBGTE9BVF9P
UENPREUgICAgICAgICAgICAweEYwMkQKKworI2RlZmluZSBTVUJfT1BDT0RFICAgICAgICAgICAg
ICAweDMwMDgKKyNkZWZpbmUgU1VCQ19PUENPREUgICAgICAgICAgICAgMHgzMDBBCisjZGVmaW5l
IFNVQlZfT1BDT0RFICAgICAgICAgICAgIDB4MzAwQgorI2RlZmluZSBNVUxMX09QQ09ERSAgICAg
ICAgICAgICAweDAwMDcKKworI2RlZmluZSBUU1RfT1BDT0RFICAgICAgICAgICAgICAweDIwMDgK
KyNkZWZpbmUgVFNUSU1NX09QQ09ERSAgICAgICAgICAgMHhDODAwCisjZGVmaW5lIFRTVEJfT1BD
T0RFICAgICAgICAgICAgIDB4Q0MwMAorCisjZGVmaW5lIEVYVFVXX09QQ09ERSAgICAgICAgICAg
IDB4NjAwRAorCisjZGVmaW5lIFhPUl9PUENPREUgICAgICAgICAgICAgIDB4MjAwQQorI2RlZmlu
ZSBYT1JJTU1fT1BDT0RFICAgICAgICAgICAweENBMDAKKyNkZWZpbmUgWE9SQl9PUENPREUgICAg
ICAgICAgICAgMHhDRTAwCisKKyNkZWZpbmUgRk1PVlNfUkVBRF9STV9JTkNfT1BDT0RFICAgICAg
ICAweEYwMDkKKyNkZWZpbmUgRk1PVlNfUkVBRF9STV9PUENPREUgICAgICAgICAgICAweEYwMDgK
KyNkZWZpbmUgRk1PVlNfUkVBRF9SMFJNX09QQ09ERSAgICAgICAgICAweEYwMDYKKyNkZWZpbmUg
Rk1PVlNfV1JJVEVfUk5fT1BDT0RFICAgICAgICAgICAweEYwMEEKKyNkZWZpbmUgRk1PVlNfV1JJ
VEVfUk5fREVDX09QQ09ERSAgICAgICAweEYwMEIKKyNkZWZpbmUgRk5FR19PUENPREUgICAgICAg
ICAgICAgICAgICAgICAweEYwNEQKKyNkZWZpbmUgRk1PVl9PUENPREUgICAgICAgICAgICAgICAg
ICAgICAweEYwMEMKKyNkZWZpbmUgRk1PVlNfV1JJVEVfUjBSTl9PUENPREUgICAgICAgICAweEYw
MDcKKworI2RlZmluZSBMRFNfUk1fRlBVTF9PUENPREUgICAgICAgICAgICAgIDB4NDA1QQorI2Rl
ZmluZSBGTERTX0ZSTV9GUFVMX09QQ09ERSAgICAgICAgICAgIDB4RjAxRAorI2RlZmluZSBTVFNf
RlBVTF9STl9PUENPREUgICAgICAgICAgICAgIDB4MDA1QQorI2RlZmluZSBGU1RTX0ZQVUxfRlJO
X09QQ09ERSAgICAgICAgICAgIDB4RjAwRAorCisjZGVmaW5lIExEU0ZQU0NSX09QQ09ERSAgICAg
ICAgICAgICAgICAgMHg0MDZBCisjZGVmaW5lIFNUU0ZQU0NSX09QQ09ERSAgICAgICAgICAgICAg
ICAgMHgwMDZBCisjZGVmaW5lIExEU1JNRlBVTF9PUENPREUgICAgICAgICAgICAgICAgMHg0MDVB
CisjZGVmaW5lIEZTVFNGUFVMRlJOX09QQ09ERSAgICAgICAgICAgICAgMHhGMDBECisKKyNkZWZp
bmUgQ0xSVF9PUENPREUgOAorICAKKyNkZWZpbmUgU0VDT05EXzRfQklUUyh4KSAgICAoKCh4KSAm
IDB4ZjAwKSA+PiA4KQorI2RlZmluZSBUSElSRF80X0JJVFMoeCkgICAgICgoKHgpICYgMHhmMCkg
Pj4gNCkKKyNkZWZpbmUgRk9VUlRIXzRfQklUUyh4KSAgICAoKHgpICYgMHhmKQorI2RlZmluZSBT
RUNPTkRfOF9CSVRTKHgpICAgICgoeCkgJiAweGZmKQorI2RlZmluZSBSSUdIVF8xMl9CSVRTKHgp
ICAgICgoeCkgJiAweGZmZikKKyNkZWZpbmUgU0VDT05EX0RfM19CSVRTKHgpICAgICgoKHgpICYg
MHhFMDApID4+IDkpCisjZGVmaW5lIFRISVJEX0RfM19CSVRTKHgpICAgICAoKCh4KSAmIDB4RTAp
ID4+IDUpCisKKworI2RlZmluZSBBTElHTlVQKHgpICAgICAgKCgoaW50KSh4KSArICAgKHNpemVv
ZihpbnQpIC0gMSkpICYgKH4oc2l6ZW9mKGludCkgLSAxKSkpCisjZGVmaW5lIEFMSUdORE4oeCkg
ICAgICAoKGludCkoeCkgJiAofihzaXplb2YoaW50KSAtIDEpKSkKKyNkZWZpbmUgTk9UQUxJR05F
RCh4KSAgICgoaW50KSh4KSYoc2l6ZW9mKGludCkgLSAxKSkKKworI2RlZmluZSBNQVNLNCAgICAg
KCgweGYgPDwgMTIpIHwgMHhmKQorI2RlZmluZSBNQVNLMyAgICAgKCgweGYgPDwgMTIpIHwgMHhm
ZikKKyNkZWZpbmUgTUFTSzIgICAgICgweGZmIDw8IDgpCisjZGVmaW5lIE1BU0sxICAgICAoMHhm
IDw8IDEyKQorCisjaW5jbHVkZSAiQXNzZW1ibGVyQnVmZmVyLmgiCisjaW5jbHVkZSAiQXNzZW1i
bGVyQnVmZmVyV2l0aENvbnN0YW50UG9vbC5oIgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1
ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3Bh
Y2UgSlNDIHsKK3R5cGVkZWYgdWludDE2X3QgU0g0V29yZDsKKworbmFtZXNwYWNlIFNINCB7CisK
K3R5cGVkZWYgZW51bSB7CisgICAgICAgIFIwICA9IDAsCisgICAgICAgIFIxICA9IDEsCisgICAg
ICAgIFIyICA9IDIsCisgICAgICAgIFIzICA9IDMsCisgICAgICAgIFI0ICA9IDQsCisgICAgICAg
IFI1ICA9IDUsCisgICAgICAgIFI2ICA9IDYsCisgICAgICAgIFI3ICA9IDcsCisgICAgICAgIFI4
ICA9IDgsCisgICAgICAgIFI5ICA9IDksCisgICAgICAgIFIxMCA9IDEwLAorICAgICAgICBSMTEg
PSAxMSwKKyAgICAgICAgUjEyID0gMTIsCisgICAgICAgIFIxMyA9IDEzLAorICAgICAgICBSMTQg
PSAxNCwKKyAgICAgICAgUjE1ID0gMTUsCisgICAgICAgIFNQICA9IFIxNSwKKyAgICAgICAgRlAg
ID0gUjE0LAorICAgICAgICAvLyBQc2V1ZG8tcmVnaXN0ZXIgZm9yIFBDICYgUFIKKyAgICAgICAg
UEMgID0gMTYsCisgICAgICAgIFBSICA9IDE3LAorICAgICAgICAgIAorICAgICAgICBVbmtub3du
ID0gLTEKK30gUmVnaXN0ZXJJRDsKKyAgICAKK3R5cGVkZWYgZW51bSB7CisgICAgICAgIEZSMCAg
PSAwLAorICAgICAgICBGUjEgID0gMSwKKyAgICAgICAgRlIyICA9IDIsCisgICAgICAgIEZSMyAg
PSAzLAorICAgICAgICBGUjQgID0gNCwKKyAgICAgICAgRlI1ICA9IDUsCisgICAgICAgIEZSNiAg
PSA2LAorICAgICAgICBGUjcgID0gNywKKyAgICAgICAgRlI4ICA9IDgsCisgICAgICAgIEZSOSAg
PSA5LAorICAgICAgICBGUjEwID0gMTAsCisgICAgICAgIEZSMTEgPSAxMSwKKyAgICAgICAgRlIx
MiA9IDEyLAorICAgICAgICBGUjEzID0gMTMsCisgICAgICAgIEZSMTQgPSAxNCwKKyAgICAgICAg
RlIxNSA9IDE1LAorICAgICAgICAvKmRvdWJsZSAqLworICAgICAgICBEUjAgID0gMCwKKyAgICAg
ICAgRFIyICA9IDIsCisgICAgICAgIERSNCAgPSA0LAorICAgICAgICBEUjYgID0gNiwKKyAgICAg
ICAgRFI4ICA9IDgsCisgICAgICAgIERSMTAgPSAxMCwKKyAgICAgICAgRFIxMiA9IDEyLAorICAg
ICAgICBEUjE0ID0gMTQsCisKK30gRlBSZWdpc3RlcklEOworfQorCitjbGFzcyBTSDRBc3NlbWJs
ZXIgeworcHVibGljOgorICAgIHR5cGVkZWYgU0g0OjpSZWdpc3RlcklEIFJlZ2lzdGVySUQ7Cisg
ICAgdHlwZWRlZiBTSDQ6OkZQUmVnaXN0ZXJJRCBGUFJlZ2lzdGVySUQ7CisgICAgCisgICAgdHlw
ZWRlZiBBc3NlbWJsZXJCdWZmZXJXaXRoQ29uc3RhbnRQb29sPDUxMiwgNCwgMiwgU0g0QXNzZW1i
bGVyPiBTSDRCdWZmZXI7CisgICAgCisgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgc2NyYXRj
aCA9IFNINDo6UjEwOworICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIHNjcmF0Y2gxID0gU0g0
OjpSMTE7CisgICAgaW50IGNsYWltc2NyYXRjaFJlZzsKKyAgICAgICAKKyAgICBTSDRBc3NlbWJs
ZXIoKQorICAgIHsKKyAgICAgICAgY2xhaW1zY3JhdGNoUmVnID0gMHgwOworICAgIH0gIAorICAg
IAorICAgIC8qIFNINCBjb25kaXRpb24gY29kZXMgKi8KKyAgICAgICAgdHlwZWRlZiBlbnVtIHsK
KyAgICAgICAgICAgIEVRID0gMHgwLCAvLyBFcXVhbAorICAgICAgICAgICAgTkUgPSAweDEsIC8v
IE5vdCBFcXVhbAorICAgICAgICAgICAgSFMgPSAweDIsIC8vIFVuc2lnZW5kIEdyZWF0ZXIgVGhh
biBlcXVhbAorICAgICAgICAgICAgSEkgPSAweDMsIC8vIFVuc2lnZW5kIEdyZWF0ZXIgVGhhbgor
ICAgICAgICAgICAgTFMgPSAweDQsIC8vIFVuc2lnZW5kIExvd2VyIG9yIFNhbWUKKyAgICAgICAg
ICAgIExJID0gMHg1LCAvLyBVbnNpZ2VuZCBMb3dlcgorICAgICAgICAgICAgR0UgPSAweDYsIC8v
IEdyZWF0ZXIgb3IgRXF1YWwKKyAgICAgICAgICAgIExUID0gMHg3LCAvLyBMZXNzIFRoYW4KKyAg
ICAgICAgICAgIEdUID0gMHg4LCAvLyBHcmVhdGVyIFRoYW4KKyAgICAgICAgICAgIExFID0gMHg5
LCAvLyBMZXNzIG9yIEVxdWFsCisgICAgICAgICAgICBPRiA9IDB4YSwgLy8gT3ZlckZsb3cKKyAg
ICAgICAgfSBDb25kaXRpb247CisgICAgICAgIAorICAgIC8vIE9wYXF1ZSBsYWJlbCB0eXBlcwor
ICAgIAorcHVibGljOgorCisgICAgY2xhc3MgSm1wU3JjIHsKKyAgICAgICAgZnJpZW5kIGNsYXNz
IFNINEFzc2VtYmxlcjsKKyAgICBwdWJsaWM6CisgICAgICAgIEptcFNyYygpCisgICAgICAgICAg
ICA6IG1fb2Zmc2V0KC0xKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgIHByaXZhdGU6Cisg
ICAgICAgIEptcFNyYyhpbnQgb2Zmc2V0KQorICAgICAgICAgICAgOiBtX29mZnNldChvZmZzZXQp
CisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIGludCBtX29mZnNldDsKKyAgICB9Owor
ICAgIAorICAgIGNsYXNzIEptcERzdCB7CisgICAgICAgIGZyaWVuZCBjbGFzcyBTSDRBc3NlbWJs
ZXI7CisgICAgcHVibGljOgorICAgICAgICBKbXBEc3QoKQorICAgICAgICAgICAgOiBtX29mZnNl
dCgtMSkKKyAgICAgICAgICAgICwgbV91c2VkKGZhbHNlKQorICAgICAgICB7CisgICAgICAgIH0K
KworICAgICAgICBib29sIGlzVXNlZCgpIGNvbnN0IHsgcmV0dXJuIG1fdXNlZDsgfQorICAgICAg
ICB2b2lkIHVzZWQoKSB7IG1fdXNlZCA9IHRydWU7IH0KKworCisgICAgcHJpdmF0ZToKKyAgICAg
ICAgSm1wRHN0KGludCBvZmZzZXQpCisgICAgICAgICAgICA6IG1fb2Zmc2V0KG9mZnNldCkKKyAg
ICAgICAgICAgICwgbV91c2VkKGZhbHNlKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAg
ICBpbnQgbV9vZmZzZXQgOiAzMTsKKyAgICAgICAgYm9vbCBtX3VzZWQgOiAxOworICAgIH07CisK
KyAgICBib29sIElzSW1tZWRpYXRlKGludCBjb25zdGFudCkgCisgICAgeyAgICAgICAgCisgICAg
ICAgIGlmICgoY29uc3RhbnQgPD0xMjcpICYmIChjb25zdGFudCA+PSAtMTI4KSkKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgIAorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisK
KyAgICBSZWdpc3RlcklEIGNsYWltU2NyYXRjaCgpCisgICAgeworICAgICAgICAgLyogMTAxID0+
IHNjcmF0Y2gxIHJlbGVhc2VkICovCisgICAgICAgICBBU1NFUlQoKGNsYWltc2NyYXRjaFJlZyAh
PSAweDMpKTsKKyAgICAgICAgIFJlZ2lzdGVySUQgc2NyYXRjaFJlZyA9IHNjcmF0Y2g7CisKKyAg
ICAgICAgIGlmICghKGNsYWltc2NyYXRjaFJlZyAmIDB4MSkpCisgICAgICAgICAgICAgY2xhaW1z
Y3JhdGNoUmVnID0gKGNsYWltc2NyYXRjaFJlZyB8IDB4MSk7CisgICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgICBjbGFpbXNjcmF0Y2hSZWcgPSAoY2xhaW1zY3JhdGNoUmVnIHwgMHgyKTsKKyAg
ICAgICAgICAgICBzY3JhdGNoUmVnID0gc2NyYXRjaDE7CisgICAgICAgICB9CisgICAgICAgICBy
ZXR1cm4gc2NyYXRjaFJlZzsKKyAgICAgfQorCisgICAgIHZvaWQgcmVsZWFzZVNjcmF0Y2goUmVn
aXN0ZXJJRCBzY3JhdGNoUikgCisgICAgIHsgICAKKyAgICAgICAgIGlmIChzY3JhdGNoUiA9PSAg
c2NyYXRjaCkKKyAgICAgICAgICAgICBjbGFpbXNjcmF0Y2hSZWcgPSAoY2xhaW1zY3JhdGNoUmVn
ICYgMHgyKTsKKyAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICBjbGFpbXNjcmF0Y2hSZWcgPSAo
Y2xhaW1zY3JhdGNoUmVnICYgMHgxKTsKKyAgICAgfSAKKworICAgIC8vIFN0YWNrIG9wZXJhdGlv
bnM6CisKKyAgICB2b2lkIHB1c2hfcihSZWdpc3RlcklEIHJlZykKKyAgICB7CisgICAgICAgIHVp
bnQxNl90IG9wYzsKKyAgICAgICAgCisgICAgICAgIGlmIChyZWcgPT0gU0g0OjpQUikKKyAgICAg
ICAgICAgIG9wYyA9IEdFVE9QQ09ERTIoU1RTTFBSX09QQ09ERSwgU0g0OjpTUCk7ICAgLyogU1RT
LkwgUFIsIEAtUiVkICovCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG9wYyA9IEdFVE9QQ09E
RTEoTU9WTF9XUklURV9STkRFQ19PUENPREUsIFNINDo6U1AsIHJlZyk7IC8qIG1vdi5sIHJlZywg
QC1TUCAqLworCisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lkIHBv
cF9yKFJlZ2lzdGVySUQgcmVnKQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjOworICAgICAg
ICAKKyAgICAgICAgaWYgKHJlZyA9PSBTSDQ6OlBSKQorICAgICAgICAgICAgb3BjID0gR0VUT1BD
T0RFMihMRFNMUFJfT1BDT0RFLCBTSDQ6OlNQKTsgIC8qIExEUy5MIEBSJWQrLCBQUiovCisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIG9wYyA9IEdFVE9QQ09ERTEoTU9WTF9SRUFEX1JNSU5DX09Q
Q09ERSwgcmVnLCBTSDQ6OlNQKTsgLyogbW92LmwgQCtzcmMsIGRlc3Q7Ki8KKyAgICAgICAgCisg
ICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lkIHB1c2hfaTMyKGludCBp
bW0pCisgICAgeworICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAg
ICAgICBMb2FkQ29uc3RhbnQoKGludClpbW0sIHNjcik7CisgICAgICAgIHB1c2hfcihzY3IpOwor
ICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgIH0KKworICAgIHZvaWQgcHVzaF9tKGlu
dCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkKKyAgICB7CisgICAgICAgIGlmICgob2Zmc2V0IDwg
MCkgfHwgKG9mZnNldCA+PSA2NCkpIHsKKyAgICAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFp
bVNjcmF0Y2goKTsgCisgICAgICAgICAgICAKKyAgICAgICAgICAgIExvYWRDb25zdGFudCgoaW50
KW9mZnNldCwgc2NyKTsKKyAgICAgICAgICAgIGFkZGxfcnIoYmFzZSwgc2NyKTsKKyAgICAgICAg
ICAgIG1vdmxfbXIoc2NyLCBTSDQ6OlNQKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgcmVs
ZWFzZVNjcmF0Y2goc2NyKTsKKyAgICAgICAgfSBlbHNlIGlmIChvZmZzZXQpCisgICAgICAgICAg
ICBtb3ZsX21yKG9mZnNldCA+PiAyLCBiYXNlLCBTSDQ6OlNQKTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgbW92bF9tcihiYXNlLCBTSDQ6OlNQKTsKKyAgICAgICAgCisgICAgICAgIGFkZGxf
aThyKC00LCBTSDQ6OlNQKTsgICAgICAgIAorICAgIH0KKworICAgIHZvaWQgcG9wX20oaW50IG9m
ZnNldCwgUmVnaXN0ZXJJRCBiYXNlKQorICAgIHsgICAgICAgICAKKyAgICAgICAgaWYgKChvZmZz
ZXQgPCAwKSB8fCAob2Zmc2V0ID49IDY0KSkgeworICAgICAgICAgICAgUmVnaXN0ZXJJRCBzY3Ig
PSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgICAgIExvYWRDb25zdGFudCgoaW50KW9mZnNldCwg
c2NyKTsKKyAgICAgICAgICAgIGFkZGxfcnIoYmFzZSwgc2NyKTsKKyAgICAgICAgICAgIG1vdmxf
cm0oU0g0OjpTUCwgc2NyKTsKKyAgICAgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAg
ICAgIH0gZWxzZSBpZiAob2Zmc2V0KQorICAgICAgICAgICAgbW92bF9ybShTSDQ6OlNQLCBvZmZz
ZXQgPj4gMiwgYmFzZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1vdmxfcm0oU0g0OjpT
UCwgYmFzZSk7CisgICAgICAgIAorICAgICAgICBhZGRsX2k4cig0LCBTSDQ6OlNQKTsKKyAgICB9
CisgICAgCisgICAgdm9pZCBtb3Z0KFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgdWlu
dDE2X3Qgb3BjID0gR0VUT1BDT0RFMihNT1ZUX09QQ09ERSwgZHN0KTsKKyAgICAgICAgb25lU2hv
cnRPcChvcGMpOworICAgIH0KKworCisgICAgLy8gQXJpdGhtZXRpYyBvcGVyYXRpb25zOgorCisg
ICAgdm9pZCBhZGRsX3JyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7Cisg
ICAgICAgIHVpbnQxNl90IG9wYyA9IEdFVE9QQ09ERTEoQUREX09QQ09ERSwgZHN0LCBzcmMpOwor
ICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYWRkY2xfcnIo
UmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KSAvLyBUYml0IHNldCBpZiBvdmVyZmxvdwor
ICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gR0VUT1BDT0RFMShBRERDX09QQ09ERSwgZHN0
LCBzcmMpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorICAgIAorICAgIHZvaWQg
YWRkdmxfcnIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KSAvLyBUYml0IHNldCBpZiBv
dmVyZmxvdworICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gR0VUT1BDT0RFMShBRERWX09Q
Q09ERSwgZHN0LCBzcmMpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfSAgICAgCisK
KyAgICB2b2lkIGFkZGxfaThyKGludCBpbW04LCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAg
ICAgIEFTU0VSVCgoaW1tOCA8PTEyNykgJiYgKGltbTggPj0gLTEyOCkpOworICAgICAgICAKKyAg
ICAgICAgdWludDE2X3Qgb3BjID0gR0VUT1BDT0RFMyhBRERJTU1fT1BDT0RFLCBkc3QsIGltbTgp
OworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCBhbmRsX3JyKFJl
Z2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9w
YyA9IEdFVE9QQ09ERTEoQU5EX09QQ09ERSwgZHN0LCBzcmMpOworICAgICAgICBvbmVTaG9ydE9w
KG9wYyk7CisKKyAgICB9CisgICAgCisgICAgdm9pZCBhZGRsX2lyKGludCBpbW0sIFJlZ2lzdGVy
SUQgZHN0KQorICAgIHsKKyAgICAgICAgaWYgKElzSW1tZWRpYXRlKGltbSkpCisgICAgICAgICAg
ICBhZGRsX2k4cihpbW0sIGRzdCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgUmVnaXN0
ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgICAgIExvYWRDb25zdGFudCgoaW50
KWltbSwgc2NyKTsKKyAgICAgICAgICAgIHVpbnQxNl90IG9wYyA9IEdFVE9QQ09ERTEoQUREX09Q
Q09ERSwgZHN0LCBzY3IpOworICAgICAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgICAgICAg
ICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsgIAorICAgICAgICB9CisgICAgICAgICAgICAgIAorICAg
IH0KKworICAgIHZvaWQgYW5kbF9pOHIoaW50IGltbTgsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsK
KyAgICAgICAgQVNTRVJUKChpbW04IDw9IDI1NSkgJiYgKGltbTggPj0gMCkpOworICAgICAgICBB
U1NFUlQoZHN0ID09IFNINDo6UjApOworICAgICAgICAKKyAgICAgICAgdWludDE2X3Qgb3BjID0g
R0VUT1BDT0RFNShBTkRJTU1fT1BDT0RFLCBpbW04KTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMp
OworICAgIH0KKyAgICAKKyAgICB2b2lkIGRpdjFsX3JyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3Rl
cklEIGRzdCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IEdFVE9QQ09ERTEoRElWMV9P
UENPREUsIGRzdCwgc3JjKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworCisgICAgfQorICAg
IAorICAgIHZvaWQgZGl2MGxfcnIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQorICAg
IHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gR0VUT1BDT0RFMShESVYwX09QQ09ERSwgZHN0LCBz
cmMpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisKKyAgICB9ICAgIAorCisgICAgdm9pZCBu
b3RsX3IoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgdWlu
dDE2X3Qgb3BjID0gR0VUT1BDT0RFMShOT1RfT1BDT0RFLCBkc3QsIHNyYyk7CisgICAgICAgIG9u
ZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lkIG9ybF9ycihSZWdpc3RlcklEIHNyYywg
UmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBHRVRPUENPREUx
KE9SX09QQ09ERSwgZHN0LCBzcmMpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisKKyAgICB9
CisKKyAgICB2b2lkIG9ybF9pOHIoaW50IGltbTgsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAg
ICAgICAgQVNTRVJUKChpbW04IDw9IDI1NSkgJiYgKGltbTggPj0gMCkpOworICAgICAgICBBU1NF
UlQoZHN0ID09IFNINDo6UjApOworICAgICAgICAKKyAgICAgICAgdWludDE2X3Qgb3BjID0gR0VU
T1BDT0RFNShPUklNTV9PUENPREUsIGltbTgpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7Cisg
ICAgfQorCisKKyAgICB2b2lkIHN1YmxfcnIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0
KQorICAgIHsKKyAgICAgICAgIHVpbnQxNl90IG9wYyA9IEdFVE9QQ09ERTEoU1VCX09QQ09ERSwg
ZHN0LCBzcmMpOworICAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKyAgICAKKyAgICB2
b2lkIHN1YnZsX3JyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCkgLy8gY2hlY2sgb3Zl
cmZsb3cKKyAgICB7CisgICAgICAgICB1aW50MTZfdCBvcGMgPSBHRVRPUENPREUxKFNVQlZfT1BD
T0RFLCBkc3QsIHNyYyk7CisgICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorICAgIAor
ICAgIHZvaWQgc3VibF9pbW1yKGludCBpbW0sIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAg
ICAgaWYgKElzSW1tZWRpYXRlKC1pbW0pKQorICAgICAgICAgICAgYWRkbF9pOHIoLWltbSwgZHN0
KTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2Ny
YXRjaCgpOworICAgICAgICAgICAgTG9hZENvbnN0YW50KChpbnQpaW1tLCBzY3IpOworICAgICAg
ICAgICAgdWludDE2X3Qgb3BjID0gR0VUT1BDT0RFMShTVUJfT1BDT0RFLCBkc3QsIHNjcik7Cisg
ICAgICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgICAgICAgICByZWxlYXNlU2NyYXRjaChz
Y3IpOyAgCisgICAgICAgIH0KKworICAgIH0KKworCisgICAgdm9pZCB4b3JsX3JyKFJlZ2lzdGVy
SUQgc3JjLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IEdF
VE9QQ09ERTEoWE9SX09QQ09ERSwgZHN0LCBzcmMpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7
CisgICAgfQorCisgICAgdm9pZCB4b3JsX2k4cihpbnQgaW1tOCwgUmVnaXN0ZXJJRCBkc3QpCisg
ICAgeworICAgICAgICBBU1NFUlQoKGltbTggPD0gMjU1KSAmJiAoaW1tOCA+PSAwKSk7CisgICAg
ICAgIEFTU0VSVChkc3QgPT0gU0g0OjpSMCk7CisgICAgICAgIAorICAgICAgICB1aW50MTZfdCBv
cGMgPSBHRVRPUENPREU1KFhPUklNTV9PUENPREUsIGltbTgpOworICAgICAgICBvbmVTaG9ydE9w
KG9wYyk7CisgICAgfQorCisgICAgdm9pZCBzaGxsX2k4cihpbnQgaW1tLCBSZWdpc3RlcklEIGRz
dCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYzsKKyAgICAgICAgCisgICAgICAgIHN3aXRj
aCAoaW1tKSB7CisgICAgICAgIGNhc2UgMTogb3BjID0gR0VUT1BDT0RFMihTSExMX09QQ09ERSwg
ZHN0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDI6IG9wYyA9IEdFVE9QQ09E
RTIoU0hMTDJfT1BDT0RFLCBkc3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
ODogb3BjID0gR0VUT1BDT0RFMihTSExMOF9PUENPREUsIGRzdCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSAxNjogb3BjID0gR0VUT1BDT0RFMihTSExMMTZfT1BDT0RFLCBkc3Qp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6IEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisKKyAg
ICB9CisgICAgCisgICAgdm9pZCBuZWcoUmVnaXN0ZXJJRCBkc3QsIFJlZ2lzdGVySUQgc3JjKQor
ICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gR0VUT1BDT0RFMShORUdfT1BDT0RFLCBkc3Qs
IHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBz
aGxsX3JyKFJlZ2lzdGVySUQgZHN0LCBSZWdpc3RlcklEIHJTaGlmdCkKKyAgICB7IAorICAgICAg
ICAvKiBzcmMgPDwgclNoaWZ0Ki8KKyAgICAgICAgdWludDE2X3Qgb3BjID0gR0VUT1BDT0RFMShT
SExEX09QQ09ERSwgZHN0LCByU2hpZnQpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAg
fQorCisgICAgdm9pZCBzaGxyX3JyKFJlZ2lzdGVySUQgZHN0LCBSZWdpc3RlcklEIHJTaGlmdCkK
KyAgICB7CisgICAgICAgIC8qIHNyYyA+PiByU2hpZnQqLworICAgICAgICBuZWcoclNoaWZ0LCBy
U2hpZnQpOworICAgICAgICBzaGxsX3JyKGRzdCwgclNoaWZ0KTsKKyAgICB9CisKKyAgICB2b2lk
IHNoYXJfcnIoUmVnaXN0ZXJJRCBkc3QsIFJlZ2lzdGVySUQgclNoaWZ0KQorICAgIHsKKyAgICAg
ICAgLyogc3JjID4+PiByU2hpZnQqLworICAgICAgICBuZWcoclNoaWZ0LCByU2hpZnQpOworICAg
ICAgICBzaGFfcnIoZHN0LCByU2hpZnQpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNoYV9ycihS
ZWdpc3RlcklEIGRzdCwgUmVnaXN0ZXJJRCByU2hpZnQpCisgICAgeworICAgICAgICAvKiBzcmMg
Pj4+IHJTaGlmdCovCisgICAgICAgIHVpbnQxNl90IG9wYyA9IEdFVE9QQ09ERTEoU0hBRF9PUENP
REUsIGRzdCwgclNoaWZ0KTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKyAgICAK
KyAgICB2b2lkIHNobHJfaThyKGludCBpbW0sIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAg
ICAgdWludDE2X3Qgb3BjOworICAgICAgICAKKyAgICAgICAgc3dpdGNoIChpbW0pIHsKKyAgICAg
ICAgY2FzZSAxOiBvcGMgPSBHRVRPUENPREUyKFNITFJfT1BDT0RFLCBkc3QpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgMjogb3BjID0gR0VUT1BDT0RFMihTSExSMl9PUENPREUs
IGRzdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSA4OiBvcGMgPSBHRVRPUENP
REUyKFNITFI4X09QQ09ERSwgZHN0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IDE2OiBvcGMgPSBHRVRPUENPREUyKFNITFIxNl9PUENPREUsIGRzdCk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgZGVmYXVsdDogQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKworICAgIH0KKworCisgCisgICAg
dm9pZCBpbXVsbF9ycihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAg
ICAgICB1aW50MTZfdCBvcGMgPSBHRVRPUENPREUxKE1VTExfT1BDT0RFLCBkc3QsIHNyYyk7Cisg
ICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBkbXVsc2xfcnIo
UmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qg
b3BjID0gR0VUT1BDT0RFMShETVVMU0xfT1BDT0RFLCBkc3QsIHNyYyk7CisgICAgICAgIG9uZVNo
b3J0T3Aob3BjKTsKKyAgICB9ICAgIAorICAgIAorICAgIHZvaWQgc3RzbWFjbChSZWdpc3RlcklE
IHJlZykKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IEdFVE9QQ09ERTIoU1RTTUFDTF9P
UENPREUsIHJlZyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisgICAgCisgICAg
dm9pZCBzdHNtYWNoKFJlZ2lzdGVySUQgcmVnKQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3Bj
ID0gR0VUT1BDT0RFMihTVFNNQUNIX09QQ09ERSwgcmVnKTsKKyAgICAgICAgb25lU2hvcnRPcChv
cGMpOworICAgIH0KKyAgICAKKyAgICAvLyBDb21wYXJpc29uczoKKworICAgIHZvaWQgY21wbF9y
cihSZWdpc3RlcklEIGxlZnQsIFJlZ2lzdGVySUQgcmlnaHQsIENvbmRpdGlvbiBjb25kKQorICAg
IHsKKyAgICAgICAgdWludDE2X3Qgb3BjOworICAgICAgICAKKyAgICAgICAgc3dpdGNoIChjb25k
KSB7CisgICAgICAgIGNhc2UgTkU6IG9wYyA9IEdFVE9QQ09ERTEoQ01QRVFfT1BDT0RFLCByaWdo
dCwgbGVmdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHVDogb3BjID0gR0VU
T1BDT0RFMShDTVBHVF9PUENPREUsIHJpZ2h0LCBsZWZ0KTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIEVROiBvcGMgPSBHRVRPUENPREUxKENNUEVRX09QQ09ERSwgcmlnaHQsIGxl
ZnQpOworICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgIAorICAgICAgICBjYXNlIEdFOiBvcGMg
PSBHRVRPUENPREUxKENNUEdFX09QQ09ERSwgcmlnaHQsIGxlZnQpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgSFM6IG9wYyA9IEdFVE9QQ09ERTEoQ01QSFNfT1BDT0RFLCByaWdo
dCwgbGVmdCk7IC8vIEhTCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBISTogb3Bj
ID0gR0VUT1BDT0RFMShDTVBISV9PUENPREUsIHJpZ2h0LCBsZWZ0KTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIExJOiBvcGMgPSBHRVRPUENPREUxKENNUEhJX09QQ09ERSwgbGVm
dCwgcmlnaHQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTFM6IG9wYyA9IEdF
VE9QQ09ERTEoQ01QSFNfT1BDT0RFLCBsZWZ0LCByaWdodCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBMRTogb3BjID0gR0VUT1BDT0RFMShDTVBHRV9PUENPREUsIGxlZnQsIHJp
Z2h0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIExUOiBvcGMgPSBHRVRPUENP
REUxKENNUEdUX09QQ09ERSwgbGVmdCwgcmlnaHQpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGRlZmF1bHQ6IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorICAgIAorICAgIHZvaWQgY21wbF9pcihp
bnQgaW1tLCBSZWdpc3RlcklEIGRzdCwgQ29uZGl0aW9uIGNvbmQpCisgICAgeworICAgICAgICBp
ZiAoKGNvbmQgPT0gRVEpICYmIChkc3QgPT0gU0g0OjpSMCkgJiYgSXNJbW1lZGlhdGUoaW1tKSkg
eworICAgICAgICAgICAgdWludDE2X3Qgb3BjID0gR0VUT1BDT0RFNShDTVBFUUlNTV9PUENPREUs
IGltbSk7CisgICAgICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICAKKyAg
ICAgICAgICAgIExvYWRDb25zdGFudCgoaW50KWltbSwgc2NyKTsgICAgCisgICAgICAgICAgICBj
bXBsX3JyKHNjciwgZHN0LCBjb25kKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIHJl
bGVhc2VTY3JhdGNoKHNjcik7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCBjbXBs
X21yKGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBsZWZ0LCBDb25kaXRp
b24gY29uZCkKKyAgICB7CisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7
CisgICAgICAgICAKKyAgICAgICAgaWYgKChvZmZzZXQgPCAwKSB8fCAob2Zmc2V0ID49IDY0KSkg
eworICAgICAgICAgICAgTG9hZENvbnN0YW50KChpbnQpb2Zmc2V0LCBzY3IpOworICAgICAgICAg
ICAgYWRkbF9ycihiYXNlLCBzY3IpOworICAgICAgICAgICAgbW92bF9tcihzY3IsIHNjcik7Cisg
ICAgICAgIH0gZWxzZSBpZiAob2Zmc2V0KQorICAgICAgICAgICAgbW92bF9tcihvZmZzZXQgPj4g
MiwgYmFzZSwgc2NyKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbW92bF9tcihiYXNlLCBz
Y3IpOworICAgICAgICAKKyAgICAgICAgY21wbF9ycihzY3IsIGxlZnQsIGNvbmQpOworICAgICAg
ICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNtcGxfcm0oUmVn
aXN0ZXJJRCByaWdodCwgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBDb25kaXRpb24gY29u
ZCkKKyAgICB7CisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAg
ICAgICAKKyAgICAgICAgaWYgKChvZmZzZXQgPCAwKSB8fCAob2Zmc2V0ID49IDY0KSkgeworICAg
ICAgICAgICAgTG9hZENvbnN0YW50KChpbnQpb2Zmc2V0LCBzY3IpOworICAgICAgICAgICAgYWRk
bF9ycihiYXNlLCBzY3IpOworICAgICAgICAgICAgbW92bF9tcihzY3IsIHNjcik7CisgICAgICAg
IH0gZWxzZSBpZiAob2Zmc2V0KQorICAgICAgICAgICAgbW92bF9tcihvZmZzZXQgPj4gMiwgYmFz
ZSwgc2NyKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbW92bF9tcihiYXNlLCBzY3IpOwor
ICAgICAgICAKKyAgICAgICAgY21wbF9ycihyaWdodCwgc2NyLCBjb25kKTsKKyAgICAgICAgcmVs
ZWFzZVNjcmF0Y2goc2NyKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjbXBsX2ltKGludCBpbW0s
IGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgQ29uZGl0aW9uIGNvbmQpIAorICAgIHsKKyAg
ICAKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgUmVn
aXN0ZXJJRCBzY3IxID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgICAKKyAgICAgICAgaWYgKChv
ZmZzZXQgPCAwKSB8fCAob2Zmc2V0ID49IDY0KSkgeworICAgICAgICAgICAgTG9hZENvbnN0YW50
KChpbnQpb2Zmc2V0LCBzY3IpOworICAgICAgICAgICAgYWRkbF9ycihiYXNlLCBzY3IpOworICAg
ICAgICAgICAgbW92bF9tcihzY3IsIHNjcik7CisgICAgICAgIH0gZWxzZSBpZiAob2Zmc2V0KQor
ICAgICAgICAgICAgbW92bF9tcihvZmZzZXQgPj4gMiwgYmFzZSwgc2NyKTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgbW92bF9tcihiYXNlLCBzY3IpOworICAgICAgICAKKyAgICAgICAgTG9h
ZENvbnN0YW50KGltbSwgc2NyMSk7ICAgICAgICAKKyAgICAgICAgY21wbF9ycihzY3IxLCBzY3Is
IGNvbmQpOworICAgICAgICAKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyMSk7CisgICAgICAg
IHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgfQorICAgIAorICAgIHZvaWQgdGVzdGxfcnIoUmVn
aXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3Bj
ID0gR0VUT1BDT0RFMShUU1RfT1BDT0RFLCBkc3QsIHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Ao
b3BjKTsKKyAgICB9CisKKyAgICB2b2lkIHRlc3RsX2k4cihpbnQgaW1tLCBSZWdpc3RlcklEIGRz
dCkKKyAgICB7CisgICAgICAgIEFTU0VSVCgoZHN0ID09IFNINDo6UjApICYmIChpbW0gPD0gMjU1
KSAmJiAoaW1tID49IDApKTsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gR0VUT1BDT0RFNShUU1RJ
TU1fT1BDT0RFLCBpbW0pOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorICAgIAor
ICAgIHZvaWQgdGVzdGxfaTMycihpbnQgaW1tLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAg
ICAgIGlmICgoZHN0ID09IFNINDo6UjApICYmIChpbW0gPD0gMjU1KSAmJiAoaW1tID49IDApKSB7
CisgICAgICAgICAgICB1aW50MTZfdCBvcGMgPSBHRVRPUENPREU1KFRTVElNTV9PUENPREUsIGlt
bSk7CisgICAgICAgICAgICBvbmVTaG9ydE9wKG9wYyk7ICAgICAgICAKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAg
ICAgICBMb2FkQ29uc3RhbnQoKGludClpbW0sIHNjcik7CisgICAgICAgIAorICAgICAgICAgICAg
dGVzdGxfcnIoc2NyLCBkc3QpOworICAgICAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIHZvaWQgdGVzdGxfaTMybShpbnQgaW1tLCBpbnQgb2Zmc2V0
LCBSZWdpc3RlcklEIGJhc2UpCisgICAgeworICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWlt
U2NyYXRjaCgpOworICAgICAgICBSZWdpc3RlcklEIHNjcjEgPSBjbGFpbVNjcmF0Y2goKTsKKyAg
ICAgICAgCisgICAgICAgIGlmICgob2Zmc2V0IDwgMCkgfHwgKG9mZnNldCA+PSA2NCkpIHsKKyAg
ICAgICAgICAgIExvYWRDb25zdGFudCgoaW50KW9mZnNldCwgc2NyKTsKKyAgICAgICAgICAgIGFk
ZGxfcnIoYmFzZSwgc2NyKTsKKyAgICAgICAgICAgIG1vdmxfbXIoc2NyLCBzY3IpOworICAgICAg
ICB9IGVsc2UgaWYgKG9mZnNldCkKKyAgICAgICAgICAgIG1vdmxfbXIob2Zmc2V0ID4+IDIsIGJh
c2UsIHNjcik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1vdmxfbXIoYmFzZSwgc2NyKTsK
KyAgICAgICAgCisgICAgICAgIGlmIChJc0ltbWVkaWF0ZShpbW0pKQorICAgICAgICAgICAgbW92
X2ltbTgoaW1tLCBzY3IxKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgTG9hZENvbnN0YW50
KChpbnQpaW1tLCBzY3IxKTsKKyAgICAgICAgCisgICAgICAgIHRlc3RsX3JyKHNjciwgc2NyMSk7
ICAgICAgICAKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICAgICAgcmVsZWFzZVNj
cmF0Y2goc2NyMSk7CisgICAgfQorCisgICAgdm9pZCB0ZXN0Yl9pOHIoaW50IGltbSwgUmVnaXN0
ZXJJRCBkc3QpCisgICAgeworICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgp
OworICAgICAgICBtb3ZfaW1tOChpbW0sIHNjcik7CisgICAgICAgIHRlc3RsX3JyKHNjciwgZHN0
KTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICB9CisKKyAgICB2b2lkIG5vcCgp
IAorICAgIHsgIAorICAgICAgICBtX2J1ZmZlci5wdXRTaG9ydFVuY2hlY2tlZChOT1BfT1BDT0RF
KTsgICAgICAgICAKKyAgICB9CisgICAgCisgICAgCisgICAgdm9pZCBicmFuY2godWludDE2X3Qg
b3BjLCBpbnQgbGFiZWwpCisgICAgeworICAgICAgICBzd2l0Y2ggKG9wYykgeworICAgICAgICBj
YXNlIEJUX09QQ09ERToKKyAgICAgICAgICAgIEFTU0VSVCgobGFiZWwgPD0xMjcpICYmIChsYWJl
bCA+PSAtMTI4KSk7IAorICAgICAgICAgICAgb3BjID0gR0VUT1BDT0RFNShCVF9PUENPREUsIGxh
YmVsKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEJSQV9PUENPREU6CisgICAg
ICAgICAgICBBU1NFUlQoKGxhYmVsIDw9MjA0NykgJiYgKGxhYmVsID49IC0yMDQ4KSk7CisgICAg
ICAgICAgICBvcGMgPSBHRVRPUENPREU2KEJSQV9PUENPREUsIGxhYmVsKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIEJGX09QQ09ERToKKyAgICAgICAgICAgIEFTU0VSVCgobGFi
ZWwgPD0xMjcpICYmIChsYWJlbCA+PSAtMTI4KSk7CisgICAgICAgICAgICBvcGMgPSBHRVRPUENP
REU1KEJGX09QQ09ERSwgbGFiZWwpOworICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAg
IAorICAgICAgICBkZWZhdWx0OiBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGR0
KFJlZ2lzdGVySUQgcmVnKQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gR0VUT1BDT0RF
MihEVF9PUENPREUsIHJlZyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9ICAgCisg
ICAgCisgICAgdm9pZCBicmFuY2godWludDE2X3Qgb3BjLCBSZWdpc3RlcklEIHJlZykKKyAgICB7
CisgICAgICAgIHN3aXRjaCAob3BjKSB7ICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQlJBRl9P
UENPREU6CisgICAgICAgICAgICBvcGMgPSBHRVRPUENPREUyKEJSQUZfT1BDT0RFLCByZWcpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSk1QX09QQ09ERSA6CisgICAgICAgICAg
ICBvcGMgPSBHRVRPUENPREUyKEpNUF9PUENPREUsIHJlZyk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBKU1JfT1BDT0RFIDoKKyAgICAgICAgICAgIG9wYyA9IEdFVE9QQ09ERTIo
SlNSX09QQ09ERSwgcmVnKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEJTUkZf
T1BDT0RFIDoKKyAgICAgICAgICAgIG9wYyA9IEdFVE9QQ09ERTIoQlNSRl9PUENPREUsIHJlZyk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDogQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9
CisgICAgdm9pZCBsZHNwcihSZWdpc3RlcklEIHJlZykKKyAgICB7CisgICAgICAgIHVpbnQxNl90
IG9wYyA9IEdFVE9QQ09ERTIoTERTUFJfT1BDT0RFLCByZWcpOworICAgICAgICBvbmVTaG9ydE9w
KG9wYyk7CisgICAgfQorICAgIAorICAgIHZvaWQgc3RzcHIoUmVnaXN0ZXJJRCByZWcpCisgICAg
eworICAgICAgICB1aW50MTZfdCBvcGMgPSBHRVRPUENPREUyKFNUU1BSX09QQ09ERSwgcmVnKTsK
KyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAgIAorICAgIHZvaWQgZXh0dXco
UmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qg
b3BjID0gR0VUT1BDT0RFMShFWFRVV19PUENPREUsIGRzdCwgc3JjKTsKKyAgICAgICAgCisgICAg
ICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisgICAgCisgICAgLyogZmxvYXQgb3BlcmF0aW9u
cyovCisgICAgCisgICAgdm9pZCBsZHNybV9mcHVsKFJlZ2lzdGVySUQgc3JjKQorICAgIHsgICAg
ICAgIAorICAgICAgICB1aW50MTZfdCBvcGMgPSBHRVRPUENPREUyKExEU19STV9GUFVMX09QQ09E
RSwgc3JjKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKyAgICB2b2lkIGZuZWco
RlBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IEdFVE9QQ09E
RTIoRk5FR19PUENPREUsIGRzdCk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9Cisg
ICAgCisgICAgdm9pZCBzdHNfZnB1bF9ybihSZWdpc3RlcklEIHNyYykKKyAgICB7CisgICAgICAg
IHVpbnQxNl90IG9wYyA9IEdFVE9QQ09ERTIoU1RTX0ZQVUxfUk5fT1BDT0RFLCBzcmMpOworICAg
ICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorICAgIAorICAgIHZvaWQgZmxvYXRfZnB1bF9m
cm4oUmVnaXN0ZXJJRCBzcmMpCisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBHRVRPUENP
REUyKEZMT0FUX09QQ09ERSwgc3JjKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0K
KyAgICAKKyAgICB2b2lkIGZtdWxsKEZQUmVnaXN0ZXJJRCBzcmMsIEZQUmVnaXN0ZXJJRCBkc3Qp
CisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBHRVRPUENPREUxKEZNVUxfT1BDT0RFLCBk
c3QsIHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisgICAgCisgICAgdm9p
ZCBmbW92c19yZWFkX3JtKFJlZ2lzdGVySUQgc3JjLCBGUFJlZ2lzdGVySUQgZHN0KQorICAgIHsK
KyAgICAgICAgLypGTU9WLlMgQFIlZCwgRlIlZFxuKi8KKyAgICAgICAgdWludDE2X3Qgb3BjID0g
R0VUT1BDT0RFMShGTU9WU19SRUFEX1JNX09QQ09ERSwgZHN0LCBzcmMpOworICAgICAgICBvbmVT
aG9ydE9wKG9wYyk7CisgICAgfQorICAgIAorICAgIHZvaWQgZm1vdnNfd3JpdGVfcm0oRlBSZWdp
c3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICAvKiBGTU9WLlMgRlIl
ZCwgQFIlZFxuICovCisgICAgICAgIHVpbnQxNl90IG9wYyA9IEdFVE9QQ09ERTEoRk1PVlNfV1JJ
VEVfUk5fT1BDT0RFLCBkc3QsIHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9
CisgICAgCisgICAgdm9pZCBmbW92c193cml0ZV9yMHIoRlBSZWdpc3RlcklEIHNyYywgUmVnaXN0
ZXJJRCBkc3QpCisgICAgeworICAgICAgICAvKkZNT1YuUyBGUiVkLCBAKFIwLCBSJWQpICovCisg
ICAgICAgIHVpbnQxNl90IG9wYyA9IEdFVE9QQ09ERTEoRk1PVlNfV1JJVEVfUjBSTl9PUENPREUs
IGRzdCwgc3JjKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKyAgICAKKyAgICB2
b2lkIGZtb3ZzX3JlYWRfcjByKFJlZ2lzdGVySUQgc3JjLCBGUFJlZ2lzdGVySUQgZHN0KQorICAg
IHsKKyAgICAgICAgLypGTU9WLlMgQChSMCwgUiVkKSwgRlIlZCovCisgICAgICAgIHVpbnQxNl90
IG9wYyA9IEdFVE9QQ09ERTEoRk1PVlNfUkVBRF9SMFJNX09QQ09ERSwgZHN0LCBzcmMpOworICAg
ICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorICAgIAorICAgIHZvaWQgZm1vdnNfcmVhZF9y
bV9pbmMoUmVnaXN0ZXJJRCBkc3QsIEZQUmVnaXN0ZXJJRCBzcmMpCisgICAgeworICAgICAgICAv
KiBGTU9WLlMgQFIlZCssIEZSJWQgKi8KKyAgICAgICAgdWludDE2X3Qgb3BjID0gR0VUT1BDT0RF
MShGTU9WU19SRUFEX1JNX0lOQ19PUENPREUsIGRzdCwgc3JjKTsKKyAgICAgICAgb25lU2hvcnRP
cChvcGMpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGZtb3ZzX3dyaXRlX3JuX2RlYyhGUFJlZ2lz
dGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIC8qIEZNT1YuUyBGUiVk
LCBALVIlZCAqLworICAgICAgICB1aW50MTZfdCBvcGMgPSBHRVRPUENPREUxKEZNT1ZTX1dSSVRF
X1JOX0RFQ19PUENPREUsIGRzdCwgc3JjKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAg
IH0KKyAgICAKKyAgICB2b2lkIGZ0cmNfcm1fZnB1bChGUFJlZ2lzdGVySUQgc3JjKQorICAgIHsK
KyAgICAgICAgdWludDE2X3Qgb3BjID0gR0VUT1BDT0RFMihGVFJDX09QQ09ERSwgc3JjKTsKKyAg
ICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGZsZHNfZnB1bChS
ZWdpc3RlcklEIHNyYykKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IEdFVE9QQ09ERTIo
RkxEU19GUk1fRlBVTF9PUENPREUsIHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAg
ICB9CisgICAgCisgICAgdm9pZCBmc3RzX2ZwdWwoUmVnaXN0ZXJJRCBzcmMpCisgICAgeworICAg
ICAgICB1aW50MTZfdCBvcGMgPSBHRVRPUENPREUyKEZTVFNfRlBVTF9GUk5fT1BDT0RFLCBzcmMp
OworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorICAgIAorICAgIAorICAgIHZvaWQg
bGRzZnBzY3IoUmVnaXN0ZXJJRCByZWcpIAorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0g
R0VUT1BDT0RFMihMRFNGUFNDUl9PUENPREUsIHJlZyk7CisgICAgICAgIG9uZVNob3J0T3Aob3Bj
KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzdHNmcHNjcihSZWdpc3RlcklEIHJlZykgCisgICAg
eworICAgICAgICB1aW50MTZfdCBvcGMgPSBHRVRPUENPREUyKFNUU0ZQU0NSX09QQ09ERSwgcmVn
KTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0gICAgCisgICAgCisgICAgLyogZG91
YmxlIG9wZXJhdGlvbnMqLworICAgIHZvaWQgZGNtcHBlcShGUFJlZ2lzdGVySUQgc3JjLCBGUFJl
Z2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gR0VUT1BDT0RFOChG
Q01QRVFfT1BDT0RFLCBkc3QgPj4gMSwgc3JjID4+MSk7CisgICAgICAgIG9uZVNob3J0T3Aob3Bj
KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBkbXVsX3JyKEZQUmVnaXN0ZXJJRCBzcmMsIEZQUmVn
aXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBHRVRPUENPREU4KEZN
VUxfT1BDT0RFLCBkc3QgPj4gMSwgc3JjID4+MSk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsK
KyAgICB9CisgICAgCisgICAgdm9pZCBkc3ViX3JyKEZQUmVnaXN0ZXJJRCBzcmMsIEZQUmVnaXN0
ZXJJRCBkc3QpCisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBHRVRPUENPREU4KEZTVUJf
T1BDT0RFLCBkc3QgPj4gMSwgc3JjID4+MSk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAg
ICB9CisgICAgCisgICAgdm9pZCBkYWRkX3JyKEZQUmVnaXN0ZXJJRCBzcmMsIEZQUmVnaXN0ZXJJ
RCBkc3QpCisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBHRVRPUENPREU4KEZBRERfT1BD
T0RFLCBkc3QgPj4gMSwgc3JjID4+MSk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9
CisgICAgCisgICAgdm9pZCBkbW92X3JyKEZQUmVnaXN0ZXJJRCBzcmMsIEZQUmVnaXN0ZXJJRCBk
c3QpCisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBHRVRPUENPREU4KEZNT1ZfT1BDT0RF
LCBkc3QgPj4gMSwgc3JjID4+MSk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9ICAg
IAorICAgIAorICAgIHZvaWQgZGRpdl9ycihGUFJlZ2lzdGVySUQgc3JjLCBGUFJlZ2lzdGVySUQg
ZHN0KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gR0VUT1BDT0RFOChGRElWX09QQ09E
RSwgZHN0ID4+IDEsIHNyYyA+PjEpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQor
ICAgIAorICAgIHZvaWQgZG91YmxlbG9hZChSZWdpc3RlcklEIGJhc2UsIGludCBvZmZzZXQsIEZQ
UmVnaXN0ZXJJRCBkZXN0LCBSZWdpc3RlcklEIHNjcikgCisgICAgeworICAgICAgICAgTG9hZENv
bnN0YW50KG9mZnNldCwgc2NyKTsKKyAgICAgICAgIGlmIChzY3IgPT0gU0g0OjpSMCkKKyAgICAg
ICAgICAgICBmbW92X3JlYWRfcjByKGJhc2UsIGRlc3QpOworICAgICAgICAgZWxzZSBpZiAoYmFz
ZSA9PSBTSDQ6OlIwKQorICAgICAgICAgICAgIGZtb3ZfcmVhZF9yMHIoc2NyLCBkZXN0KTsKKyAg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgIGFkZGxfcnIoYmFzZSwgc2NyKTsKKyAgICAgICAg
ICAgICBmbW92X3JlYWRfcm0oc2NyLCBkZXN0KTsgICAgICAgICAKKyAgICAgICAgIH0gICAgCisg
ICAgfQorICAgIAorICAgIHZvaWQgZG5lZyhGUFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAg
ICAgdWludDE2X3Qgb3BjID0gR0VUT1BDT0RFNyhGTkVHX09QQ09ERSwgZHN0ID4+IDEpOworICAg
ICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorICAgIAorICAgIHZvaWQgZG91Ymxlc3RvcmUo
RlBSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBiYXNlLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklE
IHNjcikgCisgICAgeworICAgICAgICAgTG9hZENvbnN0YW50KG9mZnNldCwgc2NyKTsKKyAgICAg
ICAgIGlmIChzY3IgPT0gU0g0OjpSMCkKKyAgICAgICAgICAgICBmbW92X3dyaXRlX3IwcihzcmMs
IGJhc2UpOworICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgYWRkbF9ycihiYXNlLCBzY3Ip
OworICAgICAgICAgICAgIGZtb3Zfd3JpdGVfcm0oc3JjLCBzY3IpOyAgICAgICAgIAorICAgICAg
ICAgfQorICAgIH0KKyAgICAKKyAgICB2b2lkIGZtb3ZfcmVhZF9ybShSZWdpc3RlcklEIHNyYywg
RlBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIC8qRk1PViBAUiVkLCBEUiVkXG4qLwor
ICAgICAgICB1aW50MTZfdCBvcGMgPSBHRVRPUENPREUxMChGTU9WU19SRUFEX1JNX09QQ09ERSwg
ZHN0ID4+IDEsIHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisgICAgCisg
ICAgdm9pZCBmbW92X3dyaXRlX3JtKEZQUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQor
ICAgIHsKKyAgICAgICAgLyogRk1PViBEUiVkLCBAUiVkXG4gKi8KKyAgICAgICAgdWludDE2X3Qg
b3BjID0gR0VUT1BDT0RFOShGTU9WU19XUklURV9STl9PUENPREUsIGRzdCwgc3JjID4+IDEpOwor
ICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorICAgIAorICAgIHZvaWQgZm1vdl93cml0
ZV9yMHIoRlBSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICAv
KkZNT1YgRFIlZCwgQChSMCwgUiVkKSAqLworICAgICAgICB1aW50MTZfdCBvcGMgPSBHRVRPUENP
REU5KEZNT1ZTX1dSSVRFX1IwUk5fT1BDT0RFLCBkc3QsIHNyYyA+PiAxKTsKKyAgICAgICAgb25l
U2hvcnRPcChvcGMpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGZtb3ZfcmVhZF9yMHIoUmVnaXN0
ZXJJRCBzcmMsIEZQUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICAvKkZNT1YgQChSMCwg
UiVkKSwgRFIlZCovCisgICAgICAgIHVpbnQxNl90IG9wYyA9IEdFVE9QQ09ERTEwKEZNT1ZTX1JF
QURfUjBSTV9PUENPREUsIGRzdCA+PiAxLCBzcmMpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7
CisgICAgfQorICAgIAorICAgIHZvaWQgZm1vdl9yZWFkX3JtX2luYyhSZWdpc3RlcklEIGRzdCwg
RlBSZWdpc3RlcklEIHNyYykKKyAgICB7CisgICAgICAgIC8qIEZNT1YgQFIlZCssIERSJWQgKi8K
KyAgICAgICAgdWludDE2X3Qgb3BjID0gR0VUT1BDT0RFMTAoRk1PVlNfUkVBRF9STV9JTkNfT1BD
T0RFLCBkc3QgPj4gMSAsIHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9Cisg
ICAgCisgICAgdm9pZCBmbW92X3dyaXRlX3JuX2RlYyhGUFJlZ2lzdGVySUQgc3JjLCBSZWdpc3Rl
cklEIGRzdCkKKyAgICB7CisgICAgICAgIC8qIEZNT1YgRFIlZCwgQC1SJWQgKi8KKyAgICAgICAg
dWludDE2X3Qgb3BjID0gR0VUT1BDT0RFOShGTU9WU19XUklURV9STl9ERUNfT1BDT0RFLCBkc3Qs
IHNyYyA+PiAxKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKyAgICAKKyAgICB2
b2lkIGZsb2F0X2ZwdWxfZHJuKEZQUmVnaXN0ZXJJRCBzcmMpCisgICAgeworICAgICAgICB1aW50
MTZfdCBvcGMgPSBHRVRPUENPREU3KEZMT0FUX09QQ09ERSwgc3JjID4+IDEpOworICAgICAgICBv
bmVTaG9ydE9wKG9wYyk7CisgICAgfQorICAgIAorICAgIHZvaWQgZnRyY19kcm1fZnB1bChGUFJl
Z2lzdGVySUQgc3JjKQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gR0VUT1BDT0RFNyhG
VFJDX09QQ09ERSwgc3JjID4+IDEpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQor
ICAgICAgICAgICAKKyAgICAvLyBWYXJpb3VzIG1vdmUgb3BzOgorICAgIAorICAgIHZvaWQgbW92
X2ltbTgoaW50IGltbTgsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKChp
bW04IDw9MTI3KSAmJiAoaW1tOCA+PSAtMTI4KSk7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IEdF
VE9QQ09ERTMoTU9WSU1NX09QQ09ERSwgZHN0LCBpbW04KTsgICAgICAgIAorICAgICAgICBvbmVT
aG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCBtb3ZsX3JyKFJlZ2lzdGVySUQgc3JjLCBS
ZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIC8qIG1vdiBzcmMsIGRzdCAqLworICAgICAg
ICB1aW50MTZfdCBvcGMgPSBHRVRPUENPREUxKE1PVl9PUENPREUsIGRzdCwgc3JjKTsKKyAgICAg
ICAgb25lU2hvcnRPcChvcGMpOworCisgICAgfQorICAgIAorICAgIHZvaWQgbW92d19ybShSZWdp
c3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICAvKiBtb3YudyBzcmMs
IEBkc3QgKi8KKyAgICAgICAgdWludDE2X3Qgb3BjID0gR0VUT1BDT0RFMShNT1ZXX1dSSVRFX1JO
X09QQ09ERSwgZHN0LCBzcmMpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisKKyAgICB9Cisg
ICAgCisgICAgdm9pZCBtb3Z3X21yKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCkKKyAg
ICB7CisgICAgICAgIC8qIG1vdi53IEAgc3JjLCBkc3QgKi8KKyAgICAgICAgdWludDE2X3Qgb3Bj
ID0gR0VUT1BDT0RFMShNT1ZXX1JFQURfUk1fT1BDT0RFLCBkc3QsIHNyYyk7CisgICAgICAgIG9u
ZVNob3J0T3Aob3BjKTsKKworICAgIH0KKyAgICAKKyAgICB2b2lkIG1vdndfbXIoaW50IG9mZnNl
dCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIHVpbnQx
Nl90IG9wYzsKKyAgICAKKyAgICAgICAgaWYgKGJhc2UgPT0gU0g0OjpQQykgeworICAgICAgICAg
ICAgQVNTRVJUKChvZmZzZXQgPD0gMjU1KSAmJiAob2Zmc2V0ID49IDApKTsKKyAgICAgICAgICAg
IG9wYyA9IEdFVE9QQ09ERTMoTU9WV19SRUFEX09GRlBDX09QQ09ERSwgZHN0LCBvZmZzZXQpOwor
ICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICAgICAgCisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKworICAgIH0KKyAgICAKKyAgICB2b2lk
IG1vdndfcjBtcihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAg
ICB1aW50MTZfdCBvcGMgPSBHRVRPUENPREUxKE1PVldfUkVBRF9SMFJNX09QQ09ERSwgZHN0LCBz
cmMpOyAgICAgICAgCisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKworICAgIH0KKyAgICAKKyAg
ICB2b2lkIG1vdmxfcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFz
ZSkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYzsKKyAgICAgICAgCisgICAgICAgIEFTU0VS
VCgob2Zmc2V0IDw9IDE1KSAmJiAob2Zmc2V0ID49IDApKTsKKyAgICAgICAgCisgICAgICAgIGlm
ICghb2Zmc2V0KQorICAgICAgICAgICAgb3BjID0gR0VUT1BDT0RFMShNT1ZMX1dSSVRFX1JOX09Q
Q09ERSwgYmFzZSwgc3JjKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgb3BjID0gR0VUT1BD
T0RFNChNT1ZMX1dSSVRFX09GRlJOX09QQ09ERSwgYmFzZSwgc3JjLCBvZmZzZXQpOworICAgICAg
ICAKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworCisgICAgfQorICAgIAorICAgIHZvaWQgbW92
bF9ybShSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBiYXNlKQorICAgIHsKKyAgICAgICAgdWlu
dDE2X3Qgb3BjOworICAgICAgICAKKyAgICAgICAgb3BjID0gR0VUT1BDT0RFMShNT1ZMX1dSSVRF
X1JOX09QQ09ERSwgYmFzZSwgc3JjKTsgICAgICAgIAorICAgICAgICBvbmVTaG9ydE9wKG9wYyk7
CisKKyAgICB9CisgICAgCisgICAgdm9pZCBtb3ZsX2kzMm0oaW50IGltbSwgaW50IG9mZnNldCwg
UmVnaXN0ZXJJRCBiYXNlKQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjOworICAgICAgICAK
KyAgICAgICAgQVNTRVJUKChvZmZzZXQgPD0gMTUpICYmIChvZmZzZXQgPj0gMCkpOworICAgIAor
ICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBMb2FkQ29u
c3RhbnQoKGludClpbW0sIHNjcik7ICAgICAgIAorCisgICAgICAgIAorICAgICAgICBpZiAoIW9m
ZnNldCkKKyAgICAgICAgICAgIG9wYyA9IEdFVE9QQ09ERTEoTU9WTF9XUklURV9STl9PUENPREUs
IGJhc2UsIHNjcik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG9wYyA9IEdFVE9QQ09ERTQo
TU9WTF9XUklURV9PRkZSTl9PUENPREUsIGJhc2UsIHNjciwgb2Zmc2V0KTsKKyAgICAgICAgCisg
ICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAg
ICB9CisKKworICAgIHZvaWQgbW92bF9tcihpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJl
Z2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjOworICAgIAorICAgICAg
ICBpZiAoYmFzZSA9PSBTSDQ6OlBDKSB7CisgICAgICAgICAgICBBU1NFUlQoKG9mZnNldCA8PSAy
NTUpICYmIChvZmZzZXQgPj0gMCkpOworICAgICAgICAgICAgb3BjID0gR0VUT1BDT0RFMyhNT1ZM
X1JFQURfT0ZGUENfT1BDT0RFLCBkc3QsIG9mZnNldCk7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICBBU1NFUlQoKG9mZnNldCA8PSAxNSkgJiYgKG9mZnNldCA+PSAwKSk7CisgICAgICAg
ICAgICBpZiAoIW9mZnNldCkKKyAgICAgICAgICAgICAgICBvcGMgPSBHRVRPUENPREUxKE1PVkxf
UkVBRF9STV9PUENPREUsIGRzdCwgYmFzZSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgb3BjID0gR0VUT1BDT0RFNChNT1ZMX1JFQURfT0ZGUk1fT1BDT0RFLCBkc3QsIGJhc2Us
IG9mZnNldCk7CisgICAgICAgIH0KKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworCisgICAgfQor
ICAgIAorICAgIHZvaWQgbW92Yl9tcihpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lz
dGVySUQgZHN0KSAvLyBNT1YuQiBAKGRpc3AsIFJtKSwgUjAKKyAgICB7ICAgICAgICAKKyAgICAg
ICAgQVNTRVJUKGRzdCA9PSBTSDQ6OlIwKTsKKyAgICAKKyAgICAgICAgdWludDE2X3Qgb3BjID0g
R0VUT1BDT0RFMTEoTU9WQl9SRUFEX09GRlJNX09QQ09ERSwgYmFzZSwgb2Zmc2V0KTsKKyAgICAg
ICAgCisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKworICAgIH0KKyAgICAKKyAgICB2b2lkIG1v
dmJfcjBtcihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICB1
aW50MTZfdCBvcGMgPSBHRVRPUENPREUxKE1PVkJfUkVBRF9SMFJNX09QQ09ERSwgZHN0LCBzcmMp
OworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisKKyAgICB9CisgICAgCisgICAgdm9pZCBtb3Zi
X21yKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCkgLy8gTU9WLkIgQFJtLCBSbgorICAg
IHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gR0VUT1BDT0RFMShNT1ZCX1JFQURfUk1fT1BDT0RF
LCBkc3QsIHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKworICAgIH0KKyAgICAKKyAg
ICB2b2lkIG1vdmxfbXIoUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7Cisg
ICAgICAgIHVpbnQxNl90IG9wYyA9IEdFVE9QQ09ERTEoTU9WTF9SRUFEX1JNX09QQ09ERSwgZHN0
LCBiYXNlKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworCisgICAgfQorICAgIAorICAgIHZv
aWQgbW92bF9yMG1yKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAg
ICAgIHVpbnQxNl90IG9wYyA9IEdFVE9QQ09ERTEoTU9WTF9SRUFEX1IwUk1fT1BDT0RFLCBkc3Qs
IHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKworICAgIH0KKyAgICAKKyAgICB2b2lk
IG1vdmxfcm1yMChSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAg
ICAvKm1vdi5sIHNyYywgQChyMCwgZHN0KSovCisgICAgICAgIHVpbnQxNl90IG9wYyA9IEdFVE9Q
Q09ERTEoTU9WTF9XUklURV9SMFJOX09QQ09ERSwgZHN0LCBzcmMpOworICAgICAgICBvbmVTaG9y
dE9wKG9wYyk7CisKKyAgICB9CisKKyAgICB2b2lkIG1vdmxfaThyKGludCBpbW04LCBSZWdpc3Rl
cklEIGRzdCkKKyAgICB7CisgICAgICAgIEFTU0VSVCgoaW1tOCA8PTEyNykgJiYgKGltbTggPj0g
LTEyOCkpOworICAgICAgICB1aW50MTZfdCBvcGMgPSBHRVRPUENPREUzKE1PVklNTV9PUENPREUs
IGRzdCwgaW1tOCk7CisKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAgIHZv
aWQgb3JsX2lyKGludCBpbW0sIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgCisgICAg
ICAgIGlmICgoaW1tIDw9IDI1NSkgJiYgKGltbSA+PSAwKSAmJiAoZHN0ID09IFNINDo6UjApKQor
ICAgICAgICAgICAgb3JsX2k4cihpbW0sIGRzdCk7CisgICAgICAgIGVsc2UgIHsKKyAgICAgICAg
ICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgICAgICBMb2FkQ29u
c3RhbnQoKGludClpbW0sIHNjcik7CisgICAgICAgICAgICB1aW50MTZfdCBvcGMgPSBHRVRPUENP
REUxKE9SX09QQ09ERSwgZHN0LCBzY3IpOworICAgICAgICAgICAgb25lU2hvcnRPcChvcGMpOwor
ICAgICAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAK
KyAgICB2b2lkIExvYWRDb25zdGFudChpbnQgY29uc3RhbnQsIFJlZ2lzdGVySUQgZHN0LCBib29s
IHdpdGhwYXRjaCA9IGZhbHNlKQorICAgIHsKKyAgICAgICAgaWYgKChjb25zdGFudCA8PTEyNykg
JiYgKGNvbnN0YW50ID49IC0xMjgpICYmICghd2l0aHBhdGNoKSkKKyAgICAgICAgICAgIG1vdl9p
bW04KGNvbnN0YW50LCBkc3QpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHVpbnQxNl90
IG9wYyA9IEdFVE9QQ09ERTMoTU9WSU1NX09QQ09ERSwgZHN0LCAwKTsgLy8gd2lsbCBiZSBwYXRj
aGVkIGxhdGVyIHRvIG1vdi5sCisgICAgICAgICAgICBtX2J1ZmZlci5wdXRJbnRXaXRoQ29uc3Rh
bnRJbnQob3BjLCBjb25zdGFudCk7CisgICAgICAgIH0KKyAgICB9CisKKworCisgICAgLy8gRmxv
dyBjb250cm9sOgorCisgICAgSm1wU3JjIGNhbGwoKQorICAgIHsgICAgICAgIAorICAgICAgICBS
ZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBtX2J1ZmZlci5lbnN1cmVT
cGFjZSgxOCk7CisgICAgICAgIExvYWRDb25zdGFudCgweDAsIHNjciwgdHJ1ZSk7CisgICAgICAg
IGJyYW5jaChKU1JfT1BDT0RFLCBzY3IpOworICAgICAgICBub3AoKTsKKyAgICAgICAgcmVsZWFz
ZVNjcmF0Y2goc2NyKTsKKyAgICAgICAgcmV0dXJuIEptcFNyYyhtX2J1ZmZlci51bmNoZWNrZWRT
aXplKCkpOworICAgIH0KKyAgICAKKyAgICBKbXBTcmMgY2FsbChSZWdpc3RlcklEIGRzdCkKKyAg
ICB7CisgICAgICAgIG1fYnVmZmVyLmVuc3VyZVNwYWNlKDE2KTsKKyAgICAgICAgYnJhbmNoKEpT
Ul9PUENPREUsIGRzdCk7CisgICAgICAgIG5vcCgpOworICAgICAgICByZXR1cm4gSm1wU3JjKG1f
YnVmZmVyLnVuY2hlY2tlZFNpemUoKSk7CisgICAgfQorCisgICAgSm1wU3JjIGptcCgpCisgICAg
eyAgICAgICAgCisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAg
ICAgIG1fYnVmZmVyLmVuc3VyZVNwYWNlKDE4KTsKKyAgICAgICAgaW50IG1fc2l6ZSA9IG1fYnVm
ZmVyLnVuY2hlY2tlZFNpemUoKTsKKyAgICAgICAgTG9hZENvbnN0YW50KDB4MCwgc2NyLCB0cnVl
KTsKKyAgICAgICAgYnJhbmNoKEJSQUZfT1BDT0RFLCBzY3IpOyAgICAgICAgCisgICAgICAgIG5v
cCgpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgIAorICAgICAgICByZXR1cm4g
Sm1wU3JjKG1fc2l6ZSk7CisgICAgfQorICAgIAorICAgIHZvaWQgam1wX3IoUmVnaXN0ZXJJRCBk
c3QpCisgICAgeworICAgICAgICBtX2J1ZmZlci5lbnN1cmVTcGFjZSgxNik7CisgICAgICAgIGJy
YW5jaChKTVBfT1BDT0RFLCBkc3QpOworICAgICAgICBub3AoKTsKKyAgICB9CisgICAgCisgICAg
dm9pZCBqbXBfbShpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UpCisgICAgeworICAgICAgICBS
ZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICAKKyAgICAgICAgaWYgKChv
ZmZzZXQgPCAwKSB8fCAob2Zmc2V0ID49IDY0KSkgeworICAgICAgICAgICAgTG9hZENvbnN0YW50
KChpbnQpb2Zmc2V0LCBzY3IpOworICAgICAgICAgICAgYWRkbF9ycihiYXNlLCBzY3IpOworICAg
ICAgICAgICAgbW92bF9tcihzY3IsIHNjcik7CisgICAgICAgIH0gZWxzZSBpZiAob2Zmc2V0KSB7
CisgICAgICAgICAgICBtb3ZsX21yKG9mZnNldCA+PiAyLCBiYXNlLCBzY3IpOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgbW92bF9tcihiYXNlLCBzY3IpOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICBtX2J1ZmZlci5lbnN1cmVTcGFjZSgxNik7CisgICAgICAgIGJyYW5jaChK
TVBfT1BDT0RFLCBzY3IpOworICAgICAgICBub3AoKTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2go
c2NyKTsKKworICAgIH0KKyAgICAKKyAgICBKbXBTcmMgam5lKCkKKyAgICB7CisgICAgICAgIG1f
YnVmZmVyLmVuc3VyZVNwYWNlKDIwKTsKKyAgICAgICAgaW50IG1fc2l6ZSA9IG1fYnVmZmVyLnVu
Y2hlY2tlZFNpemUoKTsKKyAgICAgICAgYnJhbmNoKEJGX09QQ09ERSwgMCk7CisgICAgICAgIHJl
dHVybiBKbXBTcmMobV9zaXplKTsKKyAgICB9CisgICAgCisgICAgSm1wU3JjIGplKCkKKyAgICB7
CisgICAgICAgIG1fYnVmZmVyLmVuc3VyZVNwYWNlKDIwKTsKKyAgICAgICAgaW50IG1fc2l6ZSA9
IG1fYnVmZmVyLnVuY2hlY2tlZFNpemUoKTsKKyAgICAgICAgYnJhbmNoKEJUX09QQ09ERSwgMCk7
CisgICAgICAgIHJldHVybiBKbXBTcmMobV9zaXplKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBy
ZXQoKQorICAgIHsKKyAgICAgICAgbV9idWZmZXIuZW5zdXJlU3BhY2UoMTYpOworICAgICAgICBv
bmVTaG9ydE9wKFJUU19PUENPREUpOworICAgIH0KKworICAgIC8vIEFzc2VtYmxlciBhZG1pbiBt
ZXRob2RzOgorCisgICAgSm1wRHN0IGxhYmVsKCkKKyAgICB7CisgICAgICAgIHJldHVybiBKbXBE
c3QobV9idWZmZXIudW5jaGVja2VkU2l6ZSgpKTsKKyAgICB9CisgICAgCisgICAgSm1wRHN0IGxh
YmVsKGludCBkaXNwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEptcERzdChtX2J1ZmZlci51bmNo
ZWNrZWRTaXplKCkgKyBkaXNwKTsKKyAgICB9CisKKyAgICBpbnQgc2l6ZU9mQ29uc3RhbnRQb29s
KCkKKyAgICB7CisgICAgICAgICByZXR1cm4gbV9idWZmZXIuc2l6ZU9mQ29uc3RhbnRQb29sKCk7
CisgICAgfQorCisgICAgSm1wRHN0IGFsaWduKGludCBhbGlnbm1lbnQpCisgICAgeworICAgICAg
ICBpZiAoTk9UQUxJR05FRCgodWludDE2X3QqKShyZWludGVycHJldF9jYXN0PGludD4oZGF0YSgp
KSArIG1fYnVmZmVyLnVuY2hlY2tlZFNpemUoKSkpKSB7CisgICAgICAgICAgICBtX2J1ZmZlci5l
bnN1cmVTcGFjZSgxNCk7CisgICAgICAgICAgICBub3AoKTsKKyAgICAgICAgfQorCisgICAgICAg
IHJldHVybiBsYWJlbCgpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGxpbmtKdW1wKHZvaWQq
IGNvZGUsIEptcFNyYyBmcm9tLCB2b2lkKiB0bykKKyAgICB7CisgICAgICAgIEFTU0VSVChmcm9t
Lm1fb2Zmc2V0ICE9IC0xKTsKKworICAgICAgICB1aW50MTZfdCogaW5zdHJ1Y3Rpb25QdHIgPSBy
ZWludGVycHJldF9jYXN0PHVpbnQxNl90Kj4gKHJlaW50ZXJwcmV0X2Nhc3Q8aW50Pihjb2RlKSAr
IGZyb20ubV9vZmZzZXQpOworICAgICAgICB1aW50MTZfdCBpbnN0cnVjdGlvbiA9ICppbnN0cnVj
dGlvblB0cjsKKyAgICAgICAgaW50IG9mZnNldEJpdHM7CisgICAgICAgIAorICAgICAgICBpZiAo
KChpbnN0cnVjdGlvbiAmIDB4RkYwMCkgPT0gQlRfT1BDT0RFKSB8fCAoKGluc3RydWN0aW9uICYg
MHhGRjAwKSA9PSBCRl9PUENPREUpKSB7CisgICAgICAgIAorICAgICAgICAgICAgLyogQlQgbGFi
ZWwgID09PiBCRiAyIAorICAgICAgICAgICAgICAgbm9wICAgICAgICAgICBMRFIgcmVnCisgICAg
ICAgICAgICAgICBub3AgICAgICAgICAgIGJyYWYgQHJlZworICAgICAgICAgICAgICAgbm9wICAg
ICAgICAgICBub3AKKyAgICAgICAgICAgICovCisgICAgICAgICAgICBvZmZzZXRCaXRzICA9IChp
bnQpdG8gLSAoaW50KWNvZGUgLSBmcm9tLm1fb2Zmc2V0IC0gODsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgaW5zdHJ1Y3Rpb24gXj0gMHgwMjAyOworICAgICAgICAgICAgKmluc3RydWN0aW9u
UHRyKysgPSBpbnN0cnVjdGlvbjsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGludCBv
ZmZzZXQgPSAgICgoaW50KSppbnN0cnVjdGlvblB0ciAmIDB4RkYpOworICAgICAgICAgICAgdWlu
dDE2X3QqIGFkZHJlc3MgID0gKHVpbnQxNl90KikoKG9mZnNldCA8PCAyKSArICgoKGludClpbnN0
cnVjdGlvblB0ciArIDQpICYofjB4MykpKTsKKyAgICAgICAgICAgICpyZWludGVycHJldF9jYXN0
PGludCo+KGFkZHJlc3MpID0gKGludClvZmZzZXRCaXRzOyAKKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGluc3RydWN0aW9uID0gKDB4MDAyMyB8ICgqaW5zdHJ1Y3Rpb25QdHIrKyAmIDB4
RjAwKSk7CisgICAgICAgICAgICAqaW5zdHJ1Y3Rpb25QdHIrKyA9IGluc3RydWN0aW9uOworICAg
ICAgICAgfSBlbHNlIGlmICgoKihpbnN0cnVjdGlvblB0ciArMSkgJiAweDAwMjMpID09IEJSQUZf
T1BDT0RFKSB7CisgICAgICAgICAgICAgCisgICAgICAgICAgICAgLyogTU9WICNpbW0sIHJlZyAg
PT4gTERSIHJlZworICAgICAgICAgICAgICAgIGJyYWYgQHJlZyAgICAgICAgYnJhZiBAcmVnCisg
ICAgICAgICAgICAgICAgbm9wICAgICAgICAgICAgICBub3AKKyAgICAgICAgICAgICovCisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIG9mZnNldEJpdHMgID0gKGludCl0byAtIChpbnQpY29kZSAt
IGZyb20ubV9vZmZzZXQgLSA2OworICAgICAgICAgICAgCisgICAgICAgICAgICBpbnQgb2Zmc2V0
VG9QQyA9ICgqaW5zdHJ1Y3Rpb25QdHIgJiAweEZGKTsgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgdWludDE2X3QqIGFkZHJlc3MgID0gKHVpbnQxNl90
KikoKG9mZnNldFRvUEMgPDwgMikgKyAoKChpbnQpaW5zdHJ1Y3Rpb25QdHIgKyA0KSAmKH4weDMp
KSk7CisgICAgICAgICAgICAqcmVpbnRlcnByZXRfY2FzdDxpbnQqPihhZGRyZXNzKSA9IChpbnQp
b2Zmc2V0Qml0czsgICAgICAgICAgICAgICAgCisgICAgICAgICAgIAorICAgICAgICAgfSBlbHNl
IAorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorCisgICAgc3RhdGlj
IHZvaWQgbGlua0NhbGwodm9pZCogY29kZSwgSm1wU3JjIGZyb20sIHZvaWQqIHRvKQorICAgIHsK
KyAgICAgICAgdWludDE2X3QqIGluc3RydWN0aW9uUHRyID0gcmVpbnRlcnByZXRfY2FzdDx1aW50
MTZfdCo+KChpbnQpY29kZSArIGZyb20ubV9vZmZzZXQpOworICAgICAgICBpbnN0cnVjdGlvblB0
ciA9IGluc3RydWN0aW9uUHRyIC0zOworCisgICAgICAgIGludCBvZmZzZXQgPSAgICgoaW50KSoo
aW5zdHJ1Y3Rpb25QdHIpICYgMHhGRik7CisgICAgICAgIAorICAgICAgICB1aW50MTZfdCogYWRk
cmVzcyAgPSAodWludDE2X3QqKSgob2Zmc2V0IDw8IDIpICsgKCgoaW50KWluc3RydWN0aW9uUHRy
ICsgNCkgJih+MHgzKSkpOworICAgICAgICAqcmVpbnRlcnByZXRfY2FzdDxpbnQqPihhZGRyZXNz
KSA9IChpbnQpdG87CisgICAgfQorICAgIAorICAgIHN0YXRpYyB2b2lkIGxpbmtQb2ludGVyKHZv
aWQqIGNvZGUsIEptcERzdCB3aGVyZSwgdm9pZCogdmFsdWUpCisgICAgeworICAgICAgICB1aW50
MTZfdCogaW5zdHJ1Y3Rpb25QdHIgPSByZWludGVycHJldF9jYXN0PHVpbnQxNl90Kj4oKGludClj
b2RlICsgd2hlcmUubV9vZmZzZXQpOworICAgICAgICAKKyAgICAgICAgaW50IG9mZnNldCA9ICAg
KChpbnQpKmluc3RydWN0aW9uUHRyICYgMHhGRik7CisgICAgICAgIAorICAgICAgICB1aW50MTZf
dCogYWRkcmVzcyAgPSAodWludDE2X3QqKSgob2Zmc2V0IDw8IDIpICsgKCgoaW50KWluc3RydWN0
aW9uUHRyICsgNCkgJih+MHgzKSkpOworICAgICAgICAqcmVpbnRlcnByZXRfY2FzdDxpbnQqPihh
ZGRyZXNzKSA9IChpbnQpdmFsdWU7CisgICAgfQorICAgCisgICAgc3RhdGljIHVuc2lnbmVkIGdl
dENhbGxSZXR1cm5PZmZzZXQoSm1wU3JjIGNhbGwpCisgICAgeworICAgICAgICBBU1NFUlQoY2Fs
bC5tX29mZnNldCA+PSAwKTsKKyAgICAgICAgcmV0dXJuIGNhbGwubV9vZmZzZXQ7CisgICAgfQor
ICAgIAorICAgIHN0YXRpYyBTSDRXb3JkKiBnZXRMZHJJbW1BZGRyZXNzT25Qb29sKFNINFdvcmQq
IGluc24sIHVpbnQzMl90KiBjb25zdFBvb2wpCisgICAgeworICAgICAgICAgcmV0dXJuIHJlaW50
ZXJwcmV0X2Nhc3Q8U0g0V29yZCo+KGNvbnN0UG9vbCArICgqaW5zbiAmIDB4ZmYpKTsKKyAgICB9
CisgICAgCisgICAgc3RhdGljIFNINFdvcmQgcGF0Y2hDb25zdGFudFBvb2xMb2FkKFNINFdvcmQg
bG9hZCwgaW50IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIChsb2FkICYgfjB4ZmYpIHwg
dmFsdWU7CisgICAgfQorCisgICAgc3RhdGljIFNINFdvcmQgcGxhY2VDb25zdGFudFBvb2xCYXJy
aWVyKGludCBvZmZzZXQpCisgICAgeworICAgICAgICBBU1NFUlQoKChvZmZzZXQgPj4gMSkgPD0y
MDQ3KSAmJiAoKG9mZnNldCA+PiAxKSA+PSAtMjA0OCkpOworICAgICAgICB1aW50MTZfdCBvcGMg
PSBHRVRPUENPREU2KEJSQV9PUENPREUsIG9mZnNldCA+PiAxKTsKKyAgICAgICAgcmV0dXJuIG9w
YzsKKyAgICB9CisgICAgc3RhdGljIHZvaWQgcGF0Y2hDb25zdGFudFBvb2xMb2FkKHZvaWQqIGxv
YWRBZGRyLCB2b2lkKiBjb25zdFBvb2xBZGRyKQorICAgIHsKKyAgICAgICAgdWludDE2X3QqIGlu
c3RydWN0aW9uUHRyID0gcmVpbnRlcnByZXRfY2FzdDxTSDRXb3JkKj4obG9hZEFkZHIpOworICAg
ICAgICBTSDRXb3JkIGluZGV4ID0gKCppbnN0cnVjdGlvblB0ciAmIDB4ZmYpOworICAgICAgICAK
KyAgICAgICAgQVNTRVJUKCgoKGludCljb25zdFBvb2xBZGRyIC0gKGludClsb2FkQWRkciArIGlu
ZGV4ICogNCkpIDwgMTAyNCk7CisgICAgICAgIAorICAgICAgICB1aW50MTZfdCBpbnN0cnVjdGlv
biA9ICppbnN0cnVjdGlvblB0ciAmIDB4ZjAwOworICAgICAgICBpbnQgb2Zmc2V0ID0gKGludClj
b25zdFBvb2xBZGRyICsgKGluZGV4ICogNCkgLSAoKChpbnQpaW5zdHJ1Y3Rpb25QdHIgJiB+MHgw
MykgKyA0KTsKKyAgICAKKyAgICAKKyAgICAgICAgaW5zdHJ1Y3Rpb24gfD0gMHhEMDAwOworICAg
ICAgICBvZmZzZXQgJj0gMHgwM2ZmOworICAgICAgICBpbnN0cnVjdGlvbiB8PSAob2Zmc2V0ID4+
IDIpOworICAgICAgICAqaW5zdHJ1Y3Rpb25QdHIgPSBpbnN0cnVjdGlvbjsKKworICAgIH0KKwor
ICAgIHN0YXRpYyB2b2lkIHJlcGF0Y2hQb2ludGVyKHZvaWQqIHdoZXJlLCB2b2lkKiB2YWx1ZSkK
KyAgICB7CisgICAgICAgIHBhdGNoUG9pbnRlcih3aGVyZSwgdmFsdWUpOyAgICAKKyAgICB9Cisg
ICAgCisgICAgc3RhdGljIHZvaWQgcmVwYXRjaExvYWRQdHJUb0xFQSh2b2lkKiB3aGVyZSkKKyAg
ICB7CisgICAgICAgIHVpbnQxNl90KiBsb2FkT3AgPSByZWludGVycHJldF9jYXN0PHVpbnQxNl90
Kj4od2hlcmUpICsgMjsKKworICAgICAgICAqbG9hZE9wID0gKmxvYWRPcCB8IDB4MTsKKyAgICAg
ICAgRXhlY3V0YWJsZUFsbG9jYXRvcjo6Y2FjaGVGbHVzaChsb2FkT3AsIHNpemVvZih1aW50MTZf
dCkpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgdm9pZCByZXBhdGNoSW50MzIodm9pZCogd2hl
cmUsIGludDMyX3QgdmFsdWUpCisgICAgeworICAgICAgICB1aW50MTZfdCogaW5zdHJ1Y3Rpb25Q
dHIgPSByZWludGVycHJldF9jYXN0PHVpbnQxNl90Kj4od2hlcmUpOworICAgICAgICAKKyAgICAg
ICAgLyoKKyAgICAgICAgICAgIGNvZGVAICBtb3YubCBAKG9mZnNldCAsIFBDKSAsIHJlZworICAg
ICAgICAqLyAgCisgICAgICAgIAorICAgICAgICBpbnQgb2Zmc2V0ID0gICAoKGludCkqaW5zdHJ1
Y3Rpb25QdHIgJiAweEZGKTsKKyAgICAgICAgCisgICAgICAgIHVpbnQxNl90KiBhZGRyZXNzICA9
ICh1aW50MTZfdCopKChvZmZzZXQgPDwgMikgKyAoKChpbnQpd2hlcmUgKyA0KSAmKH4weDMpKSk7
CisgICAgICAgICpyZWludGVycHJldF9jYXN0PGludCo+KGFkZHJlc3MpID0gKGludCl2YWx1ZTsK
KyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCByZWxpbmtDYWxsKHZvaWQqIGZyb20sIHZvaWQqIHRv
KQorICAgIHsKKyAgICAgICAgdWludDE2X3QqIGluc3RydWN0aW9uUHRyID0gcmVpbnRlcnByZXRf
Y2FzdDx1aW50MTZfdCo+KGZyb20pOworICAgICAgICBpbnN0cnVjdGlvblB0ciA9IGluc3RydWN0
aW9uUHRyIC0gMzsKKyAgICAgICAgCisgICAgICAgIGludCBvZmZzZXQgPSAgICgoaW50KSppbnN0
cnVjdGlvblB0ciAmIDB4RkYpOworICAgICAgICAKKyAgICAgICAgdWludDE2X3QqIGFkZHJlc3Mg
ID0gKHVpbnQxNl90KikoKG9mZnNldCA8PCAyKSArICgoKGludClpbnN0cnVjdGlvblB0ciArIDQp
ICYofjB4MykpKTsKKyAgICAgICAgKnJlaW50ZXJwcmV0X2Nhc3Q8aW50Kj4oYWRkcmVzcykgPSAo
aW50KXRvOyAKKyAgICB9CisgICAgCisgICAgc3RhdGljIHZvaWQgcmVsaW5rSnVtcCh2b2lkKiBm
cm9tLCB2b2lkKiB0bykKKyAgICB7CisgICAgICAgIHVpbnQxNl90KiBpbnN0cnVjdGlvblB0ciA9
IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDE2X3QqPiAoZnJvbSk7CisgICAgICAgIHVpbnQxNl90IGlu
c3RydWN0aW9uID0gKmluc3RydWN0aW9uUHRyOworICAgICAgICBpbnQgb2Zmc2V0Qml0czsKKyAg
ICAgICAgdWludDE2X3QqIGFkZHJlc3M7CisgICAgICAgIAorICAgICAgICBpZiAoKCgqaW5zdHJ1
Y3Rpb25QdHIgJiAweEZGMDApID09IEJUX09QQ09ERSkgfHwgKCgqaW5zdHJ1Y3Rpb25QdHIgJiAw
eEZGMDApID09IEJGX09QQ09ERSkpIHsKKworICAgICAgICAgICAgb2Zmc2V0Qml0cyAgPSAoaW50
KXRvIC0gKGludClmcm9tIC0gODsKKyAgICAgICAgICAgIGluc3RydWN0aW9uUHRyKys7CisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICBpbnQgb2Zmc2V0ID0gICAoKGludCkqaW5zdHJ1Y3Rp
b25QdHIgJiAweEZGKTsKKyAgICAgICAgICAgIGFkZHJlc3MgID0gKHVpbnQxNl90KikoKG9mZnNl
dCA8PCAyKSArICgoKGludClpbnN0cnVjdGlvblB0ciArIDQpICYofjB4MykpKTsKKyAgICAgICAg
ICAgICpyZWludGVycHJldF9jYXN0PGludCo+KGFkZHJlc3MpID0gKGludClvZmZzZXRCaXRzOwor
ICAgICAgICAKKyAgICAgICAgICAgIGluc3RydWN0aW9uID0gKDB4MDAyMyB8ICgqaW5zdHJ1Y3Rp
b25QdHIrKyAmIDB4RjAwKSk7CisgICAgICAgICAgICAqaW5zdHJ1Y3Rpb25QdHIrKyA9IGluc3Ry
dWN0aW9uOworICAgICAgICAgICAgCisgICAgICAgICB9IGVsc2UgaWYgKCgqKGluc3RydWN0aW9u
UHRyICsxKSAmIDB4MDAyMykgPT0gQlJBRl9PUENPREUpIHsKKyAgICAgICAgICAgICAKKyAgICAg
ICAgICAgIG9mZnNldEJpdHMgID0gKGludCl0byAtIChpbnQpZnJvbSAtIDY7CisgICAgICAgICAg
ICBpbnQgb2Zmc2V0VG9QQyA9ICgqaW5zdHJ1Y3Rpb25QdHIgJiAweEZGKTsKKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGFkZHJlc3MgID0gKHVpbnQx
Nl90KikoKG9mZnNldFRvUEMgPDwgMikgKyAoKChpbnQpaW5zdHJ1Y3Rpb25QdHIgKyA0KSAmKH4w
eDMpKSk7CisgICAgICAgICAgICAqcmVpbnRlcnByZXRfY2FzdDxpbnQqPihhZGRyZXNzKSA9IChp
bnQpb2Zmc2V0Qml0czsKKworICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICB9CisgICAgCisgICAgLy8gTGlua2luZyAmIHBhdGNoaW5nOgorCisg
ICAgdm9pZCBsaW5rSnVtcChKbXBTcmMgZnJvbSwgSm1wRHN0IHRvKQorICAgIHsKKyAgICAgICAg
QVNTRVJUKHRvLm1fb2Zmc2V0ICE9IC0xKTsKKyAgICAgICAgQVNTRVJUKGZyb20ubV9vZmZzZXQg
IT0gLTEpOworICAgICAgICAKKyAgICAgICAgdWludDE2X3QqIGluc3RydWN0aW9uUHRyID0gcmVp
bnRlcnByZXRfY2FzdDx1aW50MTZfdCo+ICgocmVpbnRlcnByZXRfY2FzdDxpbnQ+KGRhdGEoKSkg
KyBmcm9tLm1fb2Zmc2V0KSk7CisgICAgICAgIHVpbnQxNl90IGluc3RydWN0aW9uID0gKmluc3Ry
dWN0aW9uUHRyOworICAgICAgICBpbnQgb2Zmc2V0Qml0czsKKyAgICAgICAgCisgICAgICAgIGlm
ICgoKGluc3RydWN0aW9uICYgMHhGRjAwKSA9PSBCVF9PUENPREUpIHx8ICgoaW5zdHJ1Y3Rpb24g
JiAweEZGMDApID09IEJGX09QQ09ERSkpIHsKKyAgICAgICAgCisgICAgICAgICAgICAvKiBCVCBs
YWJlbCAgICA9PiBCRiAyIAorICAgICAgICAgICAgICAgbm9wICAgICAgICAgICAgTERSIHJlZwor
ICAgICAgICAgICAgICAgbm9wICAgICAgICAgICAgYnJhZiBAcmVnCisgICAgICAgICAgICAgICBu
b3AgICAgICAgICAgICBub3AKKyAgICAgICAgICAgICovCisgICAgICAgICAgICBvZmZzZXRCaXRz
ICA9ICh0by5tX29mZnNldCAtIGZyb20ubV9vZmZzZXQpIC0gODsKKyAgICAgICAgICAgIGluc3Ry
dWN0aW9uIF49IDB4MDIwMjsKKyAgICAgICAgICAgICppbnN0cnVjdGlvblB0cisrID0gaW5zdHJ1
Y3Rpb247CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoKCppbnN0cnVjdGlvblB0
ciAmIDB4RjAwMCkgPT0gMHhFMDAwKSB7CisgICAgICAgICAgICAgICAgU0g0V29yZCogYWRkciA9
IGdldExkckltbUFkZHJlc3NPblBvb2woaW5zdHJ1Y3Rpb25QdHIsIG1fYnVmZmVyLnBvb2xBZGRy
ZXNzKCkpOworICAgICAgICAgICAgICAgICpyZWludGVycHJldF9jYXN0PGludCo+KGFkZHIpID0g
KGludClvZmZzZXRCaXRzOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBp
bnQgb2Zmc2V0ID0gICAoKGludCkqaW5zdHJ1Y3Rpb25QdHIgJiAweEZGKTsKKyAgICAgICAgICAg
ICAgICB1aW50MTZfdCogYWRkcmVzcyAgPSAodWludDE2X3QqKSgob2Zmc2V0IDw8IDIpICsgKCgo
aW50KWluc3RydWN0aW9uUHRyICsgNCkgJih+MHgzKSkpOworICAgICAgICAgICAgICAgICpyZWlu
dGVycHJldF9jYXN0PGludCo+KGFkZHJlc3MpID0gKGludClvZmZzZXRCaXRzOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgIAorICAgICAgICAgICAgaW5zdHJ1Y3Rpb24gPSAoMHgwMDIzIHwg
KCppbnN0cnVjdGlvblB0cisrICYgMHhGMDApKTsKKyAgICAgICAgICAgICppbnN0cnVjdGlvblB0
cisrID0gaW5zdHJ1Y3Rpb247CisgICAgICAgICAgICAgCisgICAgICAgICB9IGVsc2UgaWYgKCgq
KGluc3RydWN0aW9uUHRyICsxKSAmIDB4MDAyMykgPT0gQlJBRl9PUENPREUpIHsKKyAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAvKiBNT1YgIyBpbW0sIHJlZyAgPT4gTERSIHJlZworICAgICAg
ICAgICAgICAgIGJyYWYgQHJlZyAgICAgICAgICBicmFmIEByZWcKKyAgICAgICAgICAgICAgICBu
b3AgICAgICAgICAgICAgICAgbm9wCisgICAgICAgICAgICAqLworICAgICAgICAgICAgCisgICAg
ICAgICAgICBvZmZzZXRCaXRzICA9ICh0by5tX29mZnNldCAtIGZyb20ubV9vZmZzZXQpIC0gNjsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgaW5zdHJ1Y3Rpb24gPSAqaW5zdHJ1Y3Rpb25QdHI7
CisgICAgICAgICAgICBpbnQgb2Zmc2V0VG9QQyA9ICgqaW5zdHJ1Y3Rpb25QdHIgJiAweEZGKTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKChpbnN0cnVjdGlvbiAgJiAweEYwMDApID09
IDB4RTAwMCkgeworICAgICAgICAgICAgICAgIFNINFdvcmQqIGFkZHIgPSBnZXRMZHJJbW1BZGRy
ZXNzT25Qb29sKGluc3RydWN0aW9uUHRyLCBtX2J1ZmZlci5wb29sQWRkcmVzcygpKTsKKyAgICAg
ICAgICAgICAgICAqcmVpbnRlcnByZXRfY2FzdDxpbnQqPihhZGRyKSA9IChpbnQpb2Zmc2V0Qml0
czsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIHVpbnQxNl90KiBhZGRyZXNzICA9ICh1aW50MTZfdCopKChvZmZzZXRUb1BDIDw8IDIp
ICsgKCgoaW50KWluc3RydWN0aW9uUHRyICsgNCkgJih+MHgzKSkpOworICAgICAgICAgICAgICAg
ICpyZWludGVycHJldF9jYXN0PGludCo+KGFkZHJlc3MpID0gKGludClvZmZzZXRCaXRzOworICAg
ICAgICAgICAgfQorICAgICAgICAgfSBlbHNlICAKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworCisgICAgIH0KKyAgICAgCisgICAgIAorICAgIHN0YXRpYyB2b2lkIGxpbmtKdW1w
RnVuYyh2b2lkKiBjb2RlLCBKbXBTcmMgZnJvbSwgdm9pZCogdG8pCisgICAgeworICAgICAgICBB
U1NFUlQoZnJvbS5tX29mZnNldCAhPSAtMSk7ICAgICAgICAKKyAgICAgICAgdWludDE2X3QqIGlu
c3RydWN0aW9uUHRyID0gcmVpbnRlcnByZXRfY2FzdDx1aW50MTZfdCo+IChyZWludGVycHJldF9j
YXN0PGludD4oY29kZSkgKyBmcm9tLm1fb2Zmc2V0KTsKKyAgICAgICAgdWludDE2X3QgaW5zdHJ1
Y3Rpb24gPSAqaW5zdHJ1Y3Rpb25QdHI7CisgICAgICAgIAorICAgICAgICBBU1NFUlQoKGluc3Ry
dWN0aW9uID09IEJUX09QQ09ERSkgfHwgKGluc3RydWN0aW9uID09IEJGX09QQ09ERSkpOworICAg
ICAgICAKKyAgICAgICAgLyogQlQgbGFiZWwgICAgPT4gQkYgMiAKKyAgICAgICAgICAgICAgbm9w
ICAgICAgICAgTERSIHJlZworICAgICAgICAgICAgICBub3AgICAgICAgICBqdW1wIEByZWcKKyAg
ICAgICAgICAgICAgbm9wICAgICAgICAgbm9wCisgICAgICAgICovCisgICAgICAgIGluc3RydWN0
aW9uIF49IDB4MDIwMjsKKyAgICAgICAgKmluc3RydWN0aW9uUHRyKysgPSBpbnN0cnVjdGlvbjsK
KyAgICAKKyAgICAgICAgLyp0aGUgYXNzZW1ibHkgY29kZSBpcyBnZW5lcmF0ZWQqLworICAgICAg
ICAKKyAgICAgICAgaW50IG9mZnNldCA9ICAgKChpbnQpKmluc3RydWN0aW9uUHRyICYgMHhGRik7
CisgICAgICAgIHVpbnQxNl90KiBhZGRyZXNzICA9ICh1aW50MTZfdCopKChvZmZzZXQgPDwgMikg
KyAoKChpbnQpaW5zdHJ1Y3Rpb25QdHIgKyA0KSAmKH4weDMpKSk7CisgICAgICAgICpyZWludGVy
cHJldF9jYXN0PGludCo+KGFkZHJlc3MpID0gKGludCl0bzsKKyAgICAKKyAgICAgICAgaW5zdHJ1
Y3Rpb24gPSAoMHg0MDJCIHwgKCppbnN0cnVjdGlvblB0cisrICYgMHhGMDApKTsKKyAgICAgICAg
Kmluc3RydWN0aW9uUHRyKysgPSBpbnN0cnVjdGlvbjsKKyAgICAgICAgICAgICAKKyAgICB9IAor
CisgIAorICAgIHN0YXRpYyB2b2lkKiBnZXRSZWxvY2F0ZWRBZGRyZXNzKHZvaWQqIGNvZGUsIEpt
cFNyYyBqdW1wKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+
KHJlaW50ZXJwcmV0X2Nhc3Q8aW50Pihjb2RlKSArIGp1bXAubV9vZmZzZXQpOworICAgIH0KKyAg
ICAKKyAgICBzdGF0aWMgdm9pZCogZ2V0UmVsb2NhdGVkQWRkcmVzcyh2b2lkKiBjb2RlLCBKbXBE
c3QgZGVzdGluYXRpb24pCisgICAgeworICAgICAgICBBU1NFUlQoZGVzdGluYXRpb24ubV9vZmZz
ZXQgIT0gLTEpOworCisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PHZvaWQqPihyZWlu
dGVycHJldF9jYXN0PGludD4oY29kZSkgKyBkZXN0aW5hdGlvbi5tX29mZnNldCk7CisgICAgfQor
ICAgIAorICAgIHN0YXRpYyBpbnQgZ2V0RGlmZmVyZW5jZUJldHdlZW5MYWJlbHMoSm1wRHN0IHNy
YywgSm1wRHN0IGRzdCkKKyAgICB7CisgICAgICAgIHJldHVybiBkc3QubV9vZmZzZXQgLSBzcmMu
bV9vZmZzZXQ7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBpbnQgZ2V0RGlmZmVyZW5jZUJldHdl
ZW5MYWJlbHMoSm1wRHN0IHNyYywgSm1wU3JjIGRzdCkKKyAgICB7CisgICAgICAgIHJldHVybiBk
c3QubV9vZmZzZXQgLSBzcmMubV9vZmZzZXQ7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBpbnQg
Z2V0RGlmZmVyZW5jZUJldHdlZW5MYWJlbHMoSm1wU3JjIHNyYywgSm1wRHN0IGRzdCkKKyAgICB7
CisgICAgICAgIHJldHVybiBkc3QubV9vZmZzZXQgLSBzcmMubV9vZmZzZXQ7CisgICAgfQorICAg
IAorICAgIHN0YXRpYyB2b2lkIHBhdGNoUG9pbnRlcih2b2lkKiBjb2RlLCBKbXBEc3Qgd2hlcmUs
IHZvaWQqIHZhbHVlKQorICAgIHsKKyAgICAgICAgcGF0Y2hQb2ludGVyKHJlaW50ZXJwcmV0X2Nh
c3Q8Y2hhcio+KGNvZGUpICsgd2hlcmUubV9vZmZzZXQsIHZhbHVlKTsKKyAgICB9CisgICAgCisg
ICAgc3RhdGljIHZvaWQgcGF0Y2hQb2ludGVyKHZvaWQqIGNvZGUsIHZvaWQqIHZhbHVlKQorICAg
IHsKKyAgICAgICAgcGF0Y2hJbnQzMihjb2RlLCByZWludGVycHJldF9jYXN0PHVpbnQzMl90Pih2
YWx1ZSkpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgdm9pZCBwYXRjaEludDMyKHZvaWQqIGNv
ZGUsIHVpbnQzMl90IHZhbHVlKQorICAgIHsKKyAgICAgICAgdWludDE2X3QqIGluc3RydWN0aW9u
UHRyID0gcmVpbnRlcnByZXRfY2FzdDx1aW50MTZfdCo+KGNvZGUpOworICAgICAgICAKKyAgICAg
ICAgLyoKKyAgICAgICAgY29kZUAgIG1vdi5sIEAob2Zmc2V0ICwgUEMpICwgcmVnCisgICAgKi8g
IAorICAgICAgICBpbnQgb2Zmc2V0ID0gICAoKGludCkqaW5zdHJ1Y3Rpb25QdHIgJiAweEZGKTsK
KyAgICAgICAgCisgICAgICAgIHVpbnQxNl90KiBhZGRyZXNzICA9ICh1aW50MTZfdCopKChvZmZz
ZXQgPDwgMikgKyAoKChpbnQpY29kZSArIDQpICYofjB4MykpKTsKKyAgICAgICAgKnJlaW50ZXJw
cmV0X2Nhc3Q8aW50Kj4oYWRkcmVzcykgPSAoaW50KXZhbHVlOworICAgIH0KKworICAgIAorICAg
IHZvaWQqIGV4ZWN1dGFibGVDb3B5KEV4ZWN1dGFibGVQb29sKiBhbGxvY2F0b3IpCisgICAgewor
ICAgICAgICB2b2lkKiBjb3B5ID0gbV9idWZmZXIuZXhlY3V0YWJsZUNvcHkoYWxsb2NhdG9yKTsK
KworICAgICAgICBBU1NFUlQoY29weSk7ICAgICAgICAKKyAgICAgICAgcmV0dXJuIGNvcHk7Cisg
ICAgfQorCisgICAgdm9pZCBwcmVmaXgodWludDE2X3QgcHJlKQorICAgIHsKKyAgICAgICAgbV9i
dWZmZXIucHV0Qnl0ZShwcmUpOworICAgIH0KKyAgICAgICAgCisgICAgdm9pZCBvbmVTaG9ydE9w
KHVpbnQxNl90IG9wY29kZSkKKyAgICB7CisgICAgICAgIG1fYnVmZmVyLnB1dFNob3J0KG9wY29k
ZSk7ICAgICAgICAgICAgCisgICAgfQorCisgICAgdm9pZCBlbnN1cmVTcGFjZShpbnQgc3BhY2Up
CisgICAgeworICAgICAgICBtX2J1ZmZlci5lbnN1cmVTcGFjZShzcGFjZSk7CisgICAgfQorICAg
ICAgICAKKyAgICB2b2lkIGVuc3VyZVNwYWNlKGludCBpbnNuU3BhY2UsIGludCBjb25zdFNwYWNl
KQorICAgIHsKKyAgICAgICAgbV9idWZmZXIuZW5zdXJlU3BhY2UoaW5zblNwYWNlLCBjb25zdFNw
YWNlKTsKKyAgICB9CisgICAgCisgICAgLy8gQWRtaW5pc3RyYXRpdmUgbWV0aG9kczoKKworICAg
IHZvaWQqIGRhdGEoKSBjb25zdCB7IHJldHVybiBtX2J1ZmZlci5kYXRhKCk7IH0KKyAgICBpbnQg
c2l6ZSgpCisgICAgeworICAgICAgICByZXR1cm4gbV9idWZmZXIuc2l6ZSgpOworICAgIH0KKwor
ICAgIHByaXZhdGU6CisgICAgICAgIFNINEJ1ZmZlciBtX2J1ZmZlcjsKK307CisKK30gLy8gbmFt
ZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxFKEFTU0VNQkxFUikgJiYgQ1BVKFNINCkKKwor
I2VuZGlmIC8vIFNINEFzc2VtYmxlcl9oCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9qaXQv
RXhlY3V0YWJsZUFsbG9jYXRvci5oIGIvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxv
Y2F0b3IuaAppbmRleCBiNjBkNTkxLi5jNzJiMmIzIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29y
ZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5oCisrKyBiL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVj
dXRhYmxlQWxsb2NhdG9yLmgKQEAgLTQ3LDYgKzQ3LDEzIEBACiAjaW5jbHVkZSA8c3lzL2NhY2hl
Y3RsLmg+CiAjZW5kaWYKIAorI2lmIENQVShTSDQpICYmIE9TKExJTlVYKQorI2luY2x1ZGUgPGFz
bS9jYWNoZWN0bC5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KKyNpbmNsdWRlIDxzeXMvc3lz
Y2FsbC5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisKICNpZiBPUyhXSU5DRSkKIC8v
IEZyb20gcGtmdW5jcy5oIChwcml2YXRlIGhlYWRlciBmaWxlIGZyb20gdGhlIFBsYXRmb3JtIEJ1
aWxkZXIpCiAjZGVmaW5lIENBQ0hFX1NZTkNfQUxMIDB4MDdGCkBAIC0yOTQsNiArMzAxLDMwIEBA
IHB1YmxpYzoKICAgICB7CiAgICAgICAgIENhY2hlUmFuZ2VGbHVzaChjb2RlLCBzaXplLCBDQUNI
RV9TWU5DX0FMTCk7CiAgICAgfQorI2VsaWYgQ1BVKFNINCkgJiYgT1MoTElOVVgpCisKKyNpZm5k
ZWYgX19OUl9jYWNoZWZsdXNoCisjZGVmaW5lIF9fTlJfY2FjaGVmbHVzaCBfX05SX21vZGlmeV9s
ZHQKKyNlbmRpZgorCitzdGF0aWMgY29uc3QgdW5zaWduZWQgZGVmYXVsdExpbnV4UGFnZVNpemUg
PSA0MDk2OworCisgICAgc3RhdGljIHZvaWQgY2FjaGVGbHVzaCh2b2lkKiBjb2RlLCBzaXplX3Qg
c2l6ZSkKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGludCBhLCBiOworICAgICAgICBhID0gKHVu
c2lnbmVkIGludCljb2RlICYgfihkZWZhdWx0TGludXhQYWdlU2l6ZSAtIDEpOworICAgICAgICBi
ID0gKCh1bnNpZ25lZCBpbnQpY29kZSArIHNpemUgKyAoZGVmYXVsdExpbnV4UGFnZVNpemUgLSAx
KSkgJiB+KGRlZmF1bHRMaW51eFBhZ2VTaXplIC0gMSk7CisKKyAgICAgICAgaW50IHJlcyA9IHN5
c2NhbGwoX19OUl9jYWNoZWZsdXNoLCBhLCBkZWZhdWx0TGludXhQYWdlU2l6ZSwgQ0FDSEVGTFVT
SF9EX1dCIHwgQ0FDSEVGTFVTSF9JKTsKKyAgICAgICAgQVNTRVJUKCFyZXMpOworCisgICAgICAg
IHdoaWxlIChiIC0gYSA+IGRlZmF1bHRMaW51eFBhZ2VTaXplKSB7CisgICAgICAgICAgICBhID0g
YSArIGRlZmF1bHRMaW51eFBhZ2VTaXplOworICAgICAgICAgICAgcmVzID0gc3lzY2FsbChfX05S
X2NhY2hlZmx1c2gsIGEsIGRlZmF1bHRMaW51eFBhZ2VTaXplLCBDQUNIRUZMVVNIX0RfV0IgfCBD
QUNIRUZMVVNIX0kpOworCisgICAgICAgICAgICBBU1NFUlQoIXJlcyk7CisgICAgICAgIH0KKyAg
ICB9CiAjZWxzZQogICAgICNlcnJvciAiVGhlIGNhY2hlRmx1c2ggc3VwcG9ydCBpcyBtaXNzaW5n
IG9uIHRoaXMgcGxhdGZvcm0uIgogI2VuZGlmCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS95
YXJyL1JlZ2V4SklULmNwcCBiL0phdmFTY3JpcHRDb3JlL3lhcnIvUmVnZXhKSVQuY3BwCmluZGV4
IDVhNTNjZWQuLjVhMTk5ZTcgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL3lhcnIvUmVnZXhK
SVQuY3BwCisrKyBiL0phdmFTY3JpcHRDb3JlL3lhcnIvUmVnZXhKSVQuY3BwCkBAIC01Myw2ICs1
MywxOCBAQCBjbGFzcyBSZWdleEdlbmVyYXRvciA6IHByaXZhdGUgTWFjcm9Bc3NlbWJsZXIgewog
ICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIHJlZ1QxID0gQVJNUmVnaXN0ZXJzOjpyNjsKIAog
ICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIHJldHVyblJlZ2lzdGVyID0gQVJNUmVnaXN0ZXJz
OjpyMDsKKyNlbGlmIENQVShTSDQpCisgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgaW5wdXQg
PSBTSDQ6OlI0OworICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIGluZGV4ID0gU0g0OjpSNTsK
KyAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCBsZW5ndGggPSBTSDQ6OlI2OworICAgIHN0YXRp
YyBjb25zdCBSZWdpc3RlcklEIG91dHB1dCA9IFNINDo6Ujc7CisKKyAgICBzdGF0aWMgY29uc3Qg
UmVnaXN0ZXJJRCByZWdUMCA9IFNINDo6UjA7CisgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQg
cmVnVDEgPSBTSDQ6OlIxOworCisgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgcmV0dXJuUmVn
aXN0ZXIgPSBTSDQ6OlIwOworI2RlZmluZSBaZXJvIFNINEFzc2VtYmxlcjo6RVEKKyNkZWZpbmUg
Tm9uWmVybyBTSDRBc3NlbWJsZXI6Ok5FCiAjZWxpZiBDUFUoTUlQUykKICAgICBzdGF0aWMgY29u
c3QgUmVnaXN0ZXJJRCBpbnB1dCA9IE1JUFNSZWdpc3RlcnM6OmEwOwogICAgIHN0YXRpYyBjb25z
dCBSZWdpc3RlcklEIGluZGV4ID0gTUlQU1JlZ2lzdGVyczo6YTE7CkBAIC01NTUsNiArNTY3LDcg
QEAgY2xhc3MgUmVnZXhHZW5lcmF0b3IgOiBwcml2YXRlIE1hY3JvQXNzZW1ibGVyIHsKICAgICAg
ICAgfQogICAgIH0KIAorI2lmICFDUFUoU0g0KQogICAgIHZvaWQgZ2VuZXJhdGVQYXR0ZXJuQ2hh
cmFjdGVyUGFpcihUZXJtR2VuZXJhdGlvblN0YXRlJiBzdGF0ZSkKICAgICB7CiAgICAgICAgIGNv
bnN0IFJlZ2lzdGVySUQgY2hhcmFjdGVyID0gcmVnVDA7CkBAIC01NzgsNiArNTkxLDcgQEAgY2xh
c3MgUmVnZXhHZW5lcmF0b3IgOiBwcml2YXRlIE1hY3JvQXNzZW1ibGVyIHsKICAgICAgICAgfSBl
bHNlCiAgICAgICAgICAgICBzdGF0ZS5qdW1wVG9CYWNrdHJhY2soYnJhbmNoMzJXaXRoVW5hbGln
bmVkSGFsZldvcmRzKE5vdEVxdWFsLCBCYXNlSW5kZXgoaW5wdXQsIGluZGV4LCBUaW1lc1R3bywg
c3RhdGUuaW5wdXRPZmZzZXQoKSAqIHNpemVvZihVQ2hhcikpLCBJbW0zMihjaFBhaXIpKSwgdGhp
cyk7CiAgICAgfQorI2VuZGlmCiAKICAgICB2b2lkIGdlbmVyYXRlUGF0dGVybkNoYXJhY3RlckZp
eGVkKFRlcm1HZW5lcmF0aW9uU3RhdGUmIHN0YXRlKQogICAgIHsKQEAgLTExNDIsOCArMTE1Niwx
MyBAQCBjbGFzcyBSZWdleEdlbmVyYXRvciA6IHByaXZhdGUgTWFjcm9Bc3NlbWJsZXIgewogICAg
ICAgICAgICAgY2FzZSBRdWFudGlmaWVyRml4ZWRDb3VudDoKICAgICAgICAgICAgICAgICBpZiAo
dGVybS5xdWFudGl0eUNvdW50ID09IDEpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRl
LmlzU2luZ2xlUGF0dGVybkNoYXJhY3Rlckxvb2thaGVhZFRlcm0oKSAmJiAoc3RhdGUubG9va2Fo
ZWFkVGVybSgpLmlucHV0UG9zaXRpb24gPT0gKHRlcm0uaW5wdXRQb3NpdGlvbiArIDEpKSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgCisjaWYgIUNQVShTSDQpCiAgICAgICAgICAgICAgICAg
ICAgICAgICBnZW5lcmF0ZVBhdHRlcm5DaGFyYWN0ZXJQYWlyKHN0YXRlKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0YXRlLm5leHRUZXJtKCk7CisjZWxzZQorICAgICAgICAgICAgICAgICAg
ICAgICAgZ2VuZXJhdGVQYXR0ZXJuQ2hhcmFjdGVyU2luZ2xlKHN0YXRlKTsKKyNlbmRpZgogICAg
ICAgICAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRl
UGF0dGVybkNoYXJhY3RlclNpbmdsZShzdGF0ZSk7CiAgICAgICAgICAgICAgICAgfSBlbHNlCkBA
IC0xNDE3LDYgKzE0MzYsOSBAQCBjbGFzcyBSZWdleEdlbmVyYXRvciA6IHByaXZhdGUgTWFjcm9B
c3NlbWJsZXIgewogICAgICAgICBwdXNoKEFSTVJlZ2lzdGVyczo6cjUpOwogICAgICAgICBwdXNo
KEFSTVJlZ2lzdGVyczo6cjYpOwogICAgICAgICBtb3ZlKEFSTVJlZ2lzdGVyczo6cjMsIG91dHB1
dCk7CisjZWxpZiBDUFUoU0g0KQorICAgICAgICBwdXNoKFNINDo6UjEwKTsKKyAgICAgICAgcHVz
aChTSDQ6OlIxMSk7CiAjZWxpZiBDUFUoTUlQUykKICAgICAgICAgLy8gRG8gbm90aGluZy4KICNl
bmRpZgpAQCAtMTQzNiw2ICsxNDU4LDkgQEAgY2xhc3MgUmVnZXhHZW5lcmF0b3IgOiBwcml2YXRl
IE1hY3JvQXNzZW1ibGVyIHsKICAgICAgICAgcG9wKEFSTVJlZ2lzdGVyczo6cjYpOwogICAgICAg
ICBwb3AoQVJNUmVnaXN0ZXJzOjpyNSk7CiAgICAgICAgIHBvcChBUk1SZWdpc3RlcnM6OnI0KTsK
KyNlbGlmIENQVShTSDQpCisgICAgICAgIHBvcChTSDQ6OlIxMSk7CisgICAgICAgIHBvcChTSDQ6
OlIxMCk7CiAjZWxpZiBDUFUoTUlQUykKICAgICAgICAgLy8gRG8gbm90aGluZwogI2VuZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>69349</attachid>
            <date>2010-09-30 10:37:54 -0700</date>
            <delta_ts>2010-10-14 10:43:25 -0700</delta_ts>
            <desc>JIT for YARR 3</desc>
            <filename>WebKit-SH4-YARR-CP3.patch</filename>
            <type>text/plain</type>
            <size>93830</size>
            <attacher name="thouraya">thouraya.andolsi</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwppbmRleCBjN2MwOWIwLi5lMDA3MTc4IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAg
QEAKKzIwMTAtMDktMTUgIFRob3VyYXlhIEFORE9MU0kgIDx0aG91cmF5YS5hbmRvbHNpQHN0LmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQg
YXNzZW1ibGVyIGluc3RydWN0aW9ucyBmb3IgU0g0IHBsYXRmb3JtCisKKyAgICAgICAgKiBHTlVt
YWtlZmlsZS5hbToKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaDoKKyAgICAg
ICAgKiBqaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5oOgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxl
QWxsb2NhdG9yOjpjYWNoZUZsdXNoKToKKworICAgICAgICBZQVIgSklUIGZvciBTSDQuICAgICAg
ICAgCisgICAgICAgICogeWFyci9SZWdleEpJVC5jcHA6CisgICAgICAgIChKU0M6OllhcnI6OlJl
Z2V4R2VuZXJhdG9yOjpnZW5lcmF0ZVRlcm0pOgorICAgICAgICAoSlNDOjpZYXJyOjpSZWdleEdl
bmVyYXRvcjo6Z2VuZXJhdGVFbnRlcik6CisgICAgICAgIChKU0M6OllhcnI6OlJlZ2V4R2VuZXJh
dG9yOjpnZW5lcmF0ZVJldHVybik6CisKIDIwMTAtMDgtMDkgIE9saXZlciBIdW50ICA8b2xpdmVy
QGFwcGxlLmNvbT4KIAogICAgICAgICBGaXggUXQvQVJNIGFnYWluLCB0aGlzIHRpbWUgaW5jbHVk
aW5nIHRoZSBvdGhlciBjaGFuZ2VkIGZpbGUuCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9H
TlVtYWtlZmlsZS5hbSBiL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtCmluZGV4IDJlYWQ4
ZTAuLjg0YmRmODggMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtCisr
KyBiL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtCkBAIC04NCw4ICs4NCwxMCBAQCBqYXZh
c2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIAlKYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9B
c3NlbWJsZXJYODZfNjQuaCBcCiAJSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1i
bGVyWDg2Q29tbW9uLmggXAogCUphdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxl
clg4Ni5oIFwKKwlKYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJTSDQuaCBc
CiAJSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1JlcGF0Y2hCdWZmZXIuaCBcCiAJSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oIFwKKyAgICAgICAgSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL1NINEFzc2VtYmxlci5oIFwKIAlKYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2Rl
QmxvY2suY3BwIFwKIAlKYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaCBcCiAJSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXZhbENvZGVDYWNoZS5oIFwKZGlmZiAtLWdpdCBhL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5oIGIvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL01hY3JvQXNzZW1ibGVyLmgKaW5kZXggY2UxYmU3OC4uMmFlNjQ3MyAxMDA2NDQKLS0t
IGEvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmgKKysrIGIvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmgKQEAgLTUwLDYgKzUwLDEwIEBAIG5h
bWVzcGFjZSBKU0MgeyB0eXBlZGVmIE1hY3JvQXNzZW1ibGVyWDg2IE1hY3JvQXNzZW1ibGVyQmFz
ZTsgfTsKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlclg4Nl82NC5oIgogbmFtZXNwYWNlIEpTQyB7
IHR5cGVkZWYgTWFjcm9Bc3NlbWJsZXJYODZfNjQgTWFjcm9Bc3NlbWJsZXJCYXNlOyB9OwogCisj
ZWxpZiBDUFUoU0g0KQorI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyU0g0LmgiCituYW1lc3BhY2Ug
SlNDIHsgdHlwZWRlZiBNYWNyb0Fzc2VtYmxlclNINCBNYWNyb0Fzc2VtYmxlckJhc2U7IH07CisK
ICNlbHNlCiAjZXJyb3IgIlRoZSBNYWNyb0Fzc2VtYmxlciBpcyBub3Qgc3VwcG9ydGVkIG9uIHRo
aXMgcGxhdGZvcm0uIgogI2VuZGlmCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvTWFjcm9Bc3NlbWJsZXJTSDQuaCBiL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fz
c2VtYmxlclNINC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmYjllYzMK
LS0tIC9kZXYvbnVsbAorKysgYi9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJs
ZXJTSDQuaApAQCAtMCwwICsxLDExNjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAx
MCBTVE1pY3JvZWxlY3Ryb25pY3MuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBXcml0dGVuIGJ5
IFRob3VyYXlhIEFuZG9sc2kgKHRob3VyYXlhLmFuZG9sc2lAc3QuY29tKS4KKyAqCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKworI2lmbmRlZiBNYWNyb0Fzc2VtYmxl
clNINF9oCisjZGVmaW5lIE1hY3JvQXNzZW1ibGVyU0g0X2gKKworI2luY2x1ZGUgImFzc2VydC5o
IgorI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorI2lmIEVOQUJMRShBU1NFTUJMRVIpCisKKyNp
bmNsdWRlICJBYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgiCisjaW5jbHVkZSAiU0g0QXNzZW1ibGVy
LmgiCisKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIE1hY3JvQXNzZW1ibGVyU0g0IDogcHVi
bGljIEFic3RyYWN0TWFjcm9Bc3NlbWJsZXI8U0g0QXNzZW1ibGVyPiB7CitwdWJsaWM6CisKKyAg
ICB0eXBlZGVmIFNINEFzc2VtYmxlcjo6Q29uZGl0aW9uIENvbmRpdGlvbjsKKyAgICB0eXBlZGVm
IFNINEFzc2VtYmxlcjo6RlBSZWdpc3RlcklEIEZQUmVnaXN0ZXJJRDsKKyAgICBzdGF0aWMgY29u
c3QgQ29uZGl0aW9uIEVxdWFsID0gU0g0QXNzZW1ibGVyOjpFUTsKKyAgICBzdGF0aWMgY29uc3Qg
Q29uZGl0aW9uIE5vdEVxdWFsID0gU0g0QXNzZW1ibGVyOjpORTsKKyAgICBzdGF0aWMgY29uc3Qg
Q29uZGl0aW9uIEdyZWF0ZXJUaGFuID0gU0g0QXNzZW1ibGVyOjpHVDsKKyAgICBzdGF0aWMgY29u
c3QgQ29uZGl0aW9uIEdyZWF0ZXJUaGFuT3JFcXVhbCA9IFNINEFzc2VtYmxlcjo6R0U7CisgICAg
c3RhdGljIGNvbnN0IENvbmRpdGlvbiBMZXNzVGhhbiA9IFNINEFzc2VtYmxlcjo6TFQ7CisgICAg
c3RhdGljIGNvbnN0IENvbmRpdGlvbiBMZXNzVGhhbk9yRXF1YWwgPSBTSDRBc3NlbWJsZXI6OkxF
OworICAgIHN0YXRpYyBjb25zdCBDb25kaXRpb24gVUdyZWF0ZXJUaGFuID0gU0g0QXNzZW1ibGVy
OjpISTsgLy8gdW5zaWdlbmQgZ3JlYXRlciB0aGFuCisgICAgc3RhdGljIGNvbnN0IENvbmRpdGlv
biBVR3JlYXRlclRoYW5PckVxdWFsID0gU0g0QXNzZW1ibGVyOjpIUzsgLy8gdW5zaWdlbmQgZ3Jl
YXRlciB0aGFuIG9yIGVxdWFsICAgIAorICAgIHN0YXRpYyBjb25zdCBDb25kaXRpb24gVUxlc3NU
aGFuID0gU0g0QXNzZW1ibGVyOjpMSTsgLy8gdW5zaWdlbmQgZ3JlYXRlciB0aGFuCisgICAgc3Rh
dGljIGNvbnN0IENvbmRpdGlvbiBVTGVzc1RoYW5PckVxdWFsID0gU0g0QXNzZW1ibGVyOjpMUzsg
Ly8gdW5zaWdlbmQgZ3JlYXRlciB0aGFuIG9yIGVxdWFsCisgICAgc3RhdGljIGNvbnN0IENvbmRp
dGlvbiBaZXJvID0gU0g0QXNzZW1ibGVyOjpFUTsKKyAgICBzdGF0aWMgY29uc3QgQ29uZGl0aW9u
IE5vblplcm8gPSBTSDRBc3NlbWJsZXI6Ok5FOworICAgIHN0YXRpYyBjb25zdCBDb25kaXRpb24g
T3ZlcmZsb3cgPSBTSDRBc3NlbWJsZXI6Ok9GOworICAgIHN0YXRpYyBjb25zdCBDb25kaXRpb24g
QWJvdmUgPSBTSDRBc3NlbWJsZXI6OkhJOworICAgIHN0YXRpYyBjb25zdCBDb25kaXRpb24gQWJv
dmVPckVxdWFsID0gU0g0QXNzZW1ibGVyOjpIUzsKKyAgICBzdGF0aWMgY29uc3QgQ29uZGl0aW9u
IEJlbG93ID0gU0g0QXNzZW1ibGVyOjpMSTsKKyAgICBzdGF0aWMgY29uc3QgQ29uZGl0aW9uIEJl
bG93T3JFcXVhbCA9IFNINEFzc2VtYmxlcjo6TFM7CisgICAgCisgICAgc3RhdGljIGNvbnN0IFJl
Z2lzdGVySUQgc3RhY2tQb2ludGVyUmVnaXN0ZXIgPSBTSDQ6OlNQOworICAgIAorICAgIHN0YXRp
YyBjb25zdCBDb25kaXRpb24gRG91YmxlRXF1YWwgPSBTSDRBc3NlbWJsZXI6OkVROworICAgIHN0
YXRpYyBjb25zdCBDb25kaXRpb24gRG91YmxlR3JlYXRlclRoYW4gPSBTSDRBc3NlbWJsZXI6OkdU
OworICAgIHN0YXRpYyBjb25zdCBDb25kaXRpb24gRG91YmxlR3JlYXRlclRoYW5PckVxdWFsID0g
U0g0QXNzZW1ibGVyOjpHRTsKKyAgICBzdGF0aWMgY29uc3QgQ29uZGl0aW9uIERvdWJsZUxlc3NU
aGFuID0gU0g0QXNzZW1ibGVyOjpMVDsKKyAgICBzdGF0aWMgY29uc3QgQ29uZGl0aW9uIERvdWJs
ZUxlc3NUaGFuT3JFcXVhbCA9IFNINEFzc2VtYmxlcjo6TEU7CisgICAgCisgICAgc3RhdGljIGNv
bnN0IFNjYWxlIFNjYWxlUHRyID0gVGltZXNGb3VyOyAgICAKKyAgICAKKyAgICBSZWdpc3RlcklE
IGNsYWltU2NyYXRjaCgpCisgICAgeworICAgICAgICAgcmV0dXJuIG1fYXNzZW1ibGVyLmNsYWlt
U2NyYXRjaCgpOworICAgIH0KKyAgICAKKyAgICBSZWdpc3RlcklEIHJlbGVhc2VTY3JhdGNoKFJl
Z2lzdGVySUQgcmVnKQorICAgIHsKKyAgICAgICAgIG1fYXNzZW1ibGVyLnJlbGVhc2VTY3JhdGNo
KHJlZyk7CisgICAgfQorICAgIAorCisgICAgLy8gSW50ZWdlciBhcml0aG1ldGljIG9wZXJhdGlv
bnMKKworICAgIHZvaWQgYWRkMzIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAg
ICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmFkZGxfcnIoc3JjLCBkZXN0KTsKKyAgICB9CisKKyAg
ICB2b2lkIGFkZDMyKEltbTMyIGltbSwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAg
bV9hc3NlbWJsZXIuYWRkbF9pcihpbW0ubV92YWx1ZSwgZGVzdCk7CisgICAgfQorICAgIAorICAg
IHZvaWQgYWRkMzIoSW1tMzIgaW1tLCBSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQor
ICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAg
CisgICAgICAgIGlmIChzcmMgIT0gZGVzdCkKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLm1vdmxf
cnIoc3JjLCBkZXN0KTsKKyAgICAgICAgbV9hc3NlbWJsZXIuYWRkbF9pcihpbW0ubV92YWx1ZSwg
ZGVzdCk7CisgICAgICAgIAorICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworCisgICAgfQor
CisgICAgdm9pZCBhZGQzMihJbW0zMiBpbW0sIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAg
ICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIGxvYWQzMihhZGRy
ZXNzLCBzY3IpOworICAgICAgICBhZGQzMihpbW0sIHNjcik7ICAgICAgICAKKyAgICAgICAgc3Rv
cmUzMihzY3IsIGFkZHJlc3MpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgIH0K
KyAgICAKKyAgICB2b2lkIGFkZDMyKEFkZHJlc3Mgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAg
eworICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBsb2Fk
MzIoc3JjLCBzY3IpOworICAgICAgICBtX2Fzc2VtYmxlci5hZGRsX3JyKHNjciwgZGVzdCk7Cisg
ICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgfQorICAgIAorICAgIHZvaWQgYW5kMzIo
UmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1i
bGVyLmFuZGxfcnIoc3JjLCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIGFuZDMyKEltbTMyIGlt
bSwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgaWYgKChpbW0ubV92YWx1ZSA8PSAy
NTUpICYmIChpbW0ubV92YWx1ZSA+PSAwKSAmJiAoZGVzdCA9PSBTSDQ6OlIwKSkKKyAgICAgICAg
ICAgIG1fYXNzZW1ibGVyLmFuZGxfaThyKGltbS5tX3ZhbHVlLCBkZXN0KTsKKyAgICAgICAgZWxz
ZSB7CisgICAgICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAg
ICAgICAgbV9hc3NlbWJsZXIuTG9hZENvbnN0YW50KChpbnQpKGltbS5tX3ZhbHVlKSwgc2NyKTsK
KyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFuZGxfcnIoc2NyLCBkZXN0KTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIHZvaWQgbHNoaWZ0MzIoUmVnaXN0ZXJJRCBzaGlmdGFtb3VudCwgUmVnaXN0ZXJJRCBkZXN0
KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuc2hsbF9ycihkZXN0LCBzaGlmdGFtb3VudCk7
CisgICAgfQorICAgIAorICAgIHZvaWQgcnNoaWZ0MzIoaW50IGltbSwgUmVnaXN0ZXJJRCBkZXN0
KQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAg
ICAgbV9hc3NlbWJsZXIuTG9hZENvbnN0YW50KC1pbW0sIHNjcik7CisgICAgICAgIG1fYXNzZW1i
bGVyLnNoYV9ycihkZXN0LCBzY3IpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAg
IH0KKyAgICAKKyAgICB2b2lkIHJhc2hpZnQzMihpbnQgaW1tLCBSZWdpc3RlcklEIGRlc3QpIC8v
IGFyaXRtZXRoaXF1ZSBzaGlmdAorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFp
bVNjcmF0Y2goKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuTG9hZENvbnN0YW50KC1pbW0sIHNjcik7
CisgICAgICAgIG1fYXNzZW1ibGVyLnNoYV9ycihkZXN0LCBzY3IpOworICAgICAgICByZWxlYXNl
U2NyYXRjaChzY3IpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGxzaGlmdDMyKGludCBpbW0sIFJl
Z2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIGlmICgoIGltbSA9PSAxKSB8fCAoIGltbSA9
PSAyKSB8fCAoIGltbSA9PSA4KSB8fCAoIGltbSA9PSAxNikpCisgICAgICAgICAgICBtX2Fzc2Vt
Ymxlci5zaGxsX2k4cihpbW0sIGRlc3QpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIFJl
Z2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5M
b2FkQ29uc3RhbnQoaW1tLCBzY3IpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuc2hsbF9ycihk
ZXN0LCBzY3IpOworICAgICAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICAgICAgfQor
ICAgIH0KKyAgICAKKyAgICB2b2lkIG11bDMyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRl
c3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5pbXVsbF9ycihzcmMsIGRlc3QpOworICAg
ICAgICBtX2Fzc2VtYmxlci5zdHNtYWNsKGRlc3QpOworICAgIH0KKyAgICAKKyAgICAKKyAgICB2
b2lkIG11bDMyKEltbTMyIGltbSwgUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAg
ICB7CisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIG1v
dmUoaW1tLCBzY3IpOworICAgICAgICBpZiAgKHNyYyAhPSBkZXN0KQorICAgICAgICAgICAgbW92
ZShzcmMsIGRlc3QpOworICAgICAgICBtdWwzMihzY3IsICBkZXN0KTsKKyAgICAgICAgcmVsZWFz
ZVNjcmF0Y2goc2NyKTsKKyAgICB9CisgICAKKyAgICB2b2lkIG5vdDMyKFJlZ2lzdGVySUQgc3Jj
LCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5ub3RsX3Ioc3Jj
LCBkZXN0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBvcjMyKFJlZ2lzdGVySUQgc3JjLCBSZWdp
c3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5vcmxfcnIoc3JjLCBkZXN0
KTsKKyAgICB9CisKKyAgICB2b2lkIG9yMzIoSW1tMzIgaW1tLCBSZWdpc3RlcklEIGRlc3QpCisg
ICAgeworICAgICAgICBtX2Fzc2VtYmxlci5vcmxfaXIoaW1tLm1fdmFsdWUsIGRlc3QpOworICAg
IH0KKworICAgIHZvaWQgcnNoaWZ0MzIoUmVnaXN0ZXJJRCBzaGlmdGFtb3VudCwgUmVnaXN0ZXJJ
RCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuc2hhcl9ycihkZXN0LCBzaGlmdGFt
b3VudCk7CisgICAgfQorCisgICAgdm9pZCByc2hpZnQzMihJbW0zMiBpbW0sIFJlZ2lzdGVySUQg
ZGVzdCkKKyAgICB7CisgICAgICAgIHJzaGlmdDMyKGltbS5tX3ZhbHVlICYgMHgxZiwgZGVzdCk7
CisgICAgfQorCisKKyAgICB2b2lkIHN1YjMyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRl
c3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5zdWJsX3JyKHNyYywgZGVzdCk7CisgICAg
fQorICAgIAorICAgIHZvaWQgc3ViMzIoSW1tMzIgaW1tLCBBYnNvbHV0ZUFkZHJlc3MgYWRkcmVz
cywgUmVnaXN0ZXJJRCBzY3JhdGNoUmVnKQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCByZXN1
bHQgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAKKyAgICAgICAgbV9hc3NlbWJsZXIuTG9hZENv
bnN0YW50KChpbnQpYWRkcmVzcy5tX3B0ciwgc2NyYXRjaFJlZyk7CisgICAgICAgIG1fYXNzZW1i
bGVyLm1vdmxfbXIoc2NyYXRjaFJlZywgcmVzdWx0KTsgICAgICAgIAorCisgICAgICAgIHN1YjMy
KGltbSwgcmVzdWx0KTsgCisKKyAgICAgICAgc3RvcmUzMihyZXN1bHQsIHNjcmF0Y2hSZWcpOwor
ICAgICAgICAKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2gocmVzdWx0KTsKKyAgICB9CisgICAgCisg
ICAgdm9pZCBhZGQzMihJbW0zMiBpbW0sIEFic29sdXRlQWRkcmVzcyBhZGRyZXNzLCBSZWdpc3Rl
cklEIHNjcmF0Y2hSZWcpCisgICAgeworICAgICAgICBSZWdpc3RlcklEIHJlc3VsdCA9IGNsYWlt
U2NyYXRjaCgpOworICAgICAgIAorICAgICAgICBtX2Fzc2VtYmxlci5Mb2FkQ29uc3RhbnQoKGlu
dClhZGRyZXNzLm1fcHRyLCBzY3JhdGNoUmVnKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubW92bF9t
cihzY3JhdGNoUmVnLCByZXN1bHQpOyAgICAgICAgCisKKyAgICAgICAgYWRkMzIoaW1tLCByZXN1
bHQpOyAKKworICAgICAgICBzdG9yZTMyKHJlc3VsdCwgc2NyYXRjaFJlZyk7CisgICAgICAgIAor
ICAgICAgICByZWxlYXNlU2NyYXRjaChyZXN1bHQpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHN1
YjMyKEltbTMyIGltbSwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJs
ZXIuc3VibF9pbW1yKGltbS5tX3ZhbHVlLCBkZXN0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBz
dWIzMihBZGRyZXNzIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgUmVnaXN0
ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgbG9hZDMyKHNyYywgc2NyKTsKKyAg
ICAgICAgbV9hc3NlbWJsZXIuc3VibF9ycihzY3IsIGRlc3QpOworICAgICAgICByZWxlYXNlU2Ny
YXRjaChzY3IpOworICAgIH0KKworICAgIAorICAgIHZvaWQgeG9yMzIoUmVnaXN0ZXJJRCBzcmMs
IFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnhvcmxfcnIoc3Jj
LCBkZXN0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCB4b3IzMihJbW0zMiBpbW0sIFJlZ2lzdGVy
SUQgc3JjRGVzdCkKKyAgICB7CisgICAgICBpZiAoKHNyY0Rlc3QgIT0gU0g0OjpSMCkgfHwgKGlt
bS5tX3ZhbHVlID4gMjU1KSB8fCAoaW1tLm1fdmFsdWUgPCAwKSkgeworICAgICAgICAgIFJlZ2lz
dGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgICAgbV9hc3NlbWJsZXIuTG9hZENv
bnN0YW50KChpbnQpKGltbS5tX3ZhbHVlKSwgc2NyKTsKKyAgICAgICAgICBtX2Fzc2VtYmxlci54
b3JsX3JyKHNjciwgc3JjRGVzdCk7CisgICAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAg
ICAgIH0gZWxzZQorICAgICAgICAgIG1fYXNzZW1ibGVyLnhvcmxfaThyKGltbS5tX3ZhbHVlLCBz
cmNEZXN0KTsKKyAgICB9CisKKworICAgIC8vIE1lbW9yeSBhY2Nlc3Mgb3BlcmF0aW9uCisgICAg
CisgICAgdm9pZCBsb2FkMzIoSW1wbGljaXRBZGRyZXNzIGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVz
dCkKKyAgICB7CisgICAgICAgIGxvYWQzMihhZGRyZXNzLmJhc2UsIGFkZHJlc3Mub2Zmc2V0LCBk
ZXN0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBsb2FkOChJbXBsaWNpdEFkZHJlc3MgYWRkcmVz
cywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbG9hZDgoYWRkcmVzcy5iYXNlLCBh
ZGRyZXNzLm9mZnNldCwgZGVzdCk7CisgICAgfQorICAgIAorICAgIHZvaWQgbG9hZDMyKEJhc2VJ
bmRleCBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBSZWdpc3RlcklE
IHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBtb3ZlKGFkZHJlc3MuaW5kZXgsIHNjcik7
CisgICAgICAgIAorICAgICAgICBsc2hpZnQzMihhZGRyZXNzLnNjYWxlLCBzY3IpOworICAgICAg
ICBhZGQzMihhZGRyZXNzLmJhc2UsIHNjcik7CisgICAgICAgIGxvYWQzMihzY3IsIGFkZHJlc3Mu
b2Zmc2V0LCBkZXN0KTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICB9CisgICAg
CisgICAgdm9pZCBsb2FkMzIodm9pZCogYWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsK
KyAgICAgICAgbV9hc3NlbWJsZXIuTG9hZENvbnN0YW50KChpbnQpKGFkZHJlc3MpLCBkZXN0KTsK
KyAgICAgICAgbV9hc3NlbWJsZXIubW92bF9tcihkZXN0LCBkZXN0KTsKKyAgICB9CisgICAgCisg
ICAgdm9pZCBsb2FkMzIoUmVnaXN0ZXJJRCBiYXNlLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGRl
c3QpCisgICAgeworICAgICAgICBpZiAoKG9mZnNldCA8IDApIHx8IChvZmZzZXQgPj0gNjQpKSB7
CisgICAgICAgICAgICBpZiAoKGRlc3QgPT0gU0g0OjpSMCkgJiYgKGRlc3QgIT0gYmFzZSkpIHsK
KyAgICAgICAgICAgICAgICBtX2Fzc2VtYmxlci5Mb2FkQ29uc3RhbnQoKGludCkob2Zmc2V0KSwg
ZGVzdCk7CisgICAgICAgICAgICAgICAgbV9hc3NlbWJsZXIubW92bF9yMG1yKGJhc2UsIGRlc3Qp
OyAgICAKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgUmVnaXN0ZXJJRCBz
Y3I7CisgICAgICAgICAgICAgICAgaWYgKGRlc3QgPT0gYmFzZSkKKyAgICAgICAgICAgICAgICAg
ICAgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgICAgICBzY3IgPSBkZXN0OworCisgICAgICAgICAgICAgICAgbV9hc3NlbWJsZXIuTG9h
ZENvbnN0YW50KChpbnQpKG9mZnNldCksIHNjcik7CisgICAgICAgICAgICAgICAgbV9hc3NlbWJs
ZXIuYWRkbF9ycihiYXNlLCBzY3IpOworICAgICAgICAgICAgICAgIG1fYXNzZW1ibGVyLm1vdmxf
bXIoc2NyLCBkZXN0KTsKKworICAgICAgICAgICAgICAgIGlmIChkZXN0ID09IGJhc2UpCisgICAg
ICAgICAgICAgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0gZWxzZSBpZiAob2Zmc2V0KQorICAgICAgICAgICAgbV9hc3NlbWJsZXIubW92bF9tcihv
ZmZzZXQgPj4gMiwgYmFzZSwgZGVzdCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fYXNz
ZW1ibGVyLm1vdmxfbXIoYmFzZSwgZGVzdCk7CisgICAgfQorICAgIAorICAgIHZvaWQgbG9hZDgo
UmVnaXN0ZXJJRCBiYXNlLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAg
ICAgICBpZiAoKG9mZnNldCA+IDApICYmIChvZmZzZXQgPCA2NCkgJiYgKGRlc3QgPT0gU0g0OjpS
MCkpCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5tb3ZiX21yKG9mZnNldCwgYmFzZSwgZGVzdCk7
CisKKyAgICAgICAgZWxzZSBpZiAoYmFzZSAhPSBkZXN0KSB7CisgICAgICAgICAgICBtX2Fzc2Vt
Ymxlci5Mb2FkQ29uc3RhbnQoKGludCkob2Zmc2V0KSwgZGVzdCk7CisgICAgICAgICAgICBtX2Fz
c2VtYmxlci5hZGRsX3JyKGJhc2UsIGRlc3QpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIubW92
Yl9tcihkZXN0LCBkZXN0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFJlZ2lzdGVy
SUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fYXNz
ZW1ibGVyLkxvYWRDb25zdGFudCgoaW50KShvZmZzZXQpLCBzY3IpOworICAgICAgICAgICAgbV9h
c3NlbWJsZXIuYWRkbF9ycihiYXNlLCBzY3IpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIubW92
Yl9tcihzY3IsIGRlc3QpOworICAgICAgICAgICAgCisgICAgICAgICAgICByZWxlYXNlU2NyYXRj
aChzY3IpOworICAgICAgICB9CisgICAKKyAgICB9CisgICAgCisgICAgdm9pZCBsb2FkMzIoUmVn
aXN0ZXJJRCByMCwgUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKHIwID09IFNINDo6UjApOworICAgICAgICBtX2Fzc2VtYmxlci5tb3ZsX3IwbXIo
c3JjLCBkc3QpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGxvYWQzMihSZWdpc3RlcklEIHNyYywg
UmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5tb3ZsX21yKHNyYywg
ZHN0KTsKKyAgICB9CisgICAKKyAgICB2b2lkIGxvYWQxNihJbXBsaWNpdEFkZHJlc3MgYWRkcmVz
cywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgfQorIAorICAgIHZvaWQgbG9hZDE2KFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRl
c3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5tb3Z3X21yKHNyYywgZGVzdCk7CisgICAg
fQorICAgIAorICAgIHZvaWQgbG9hZDE2KFJlZ2lzdGVySUQgcjAsIFJlZ2lzdGVySUQgc3JjLCBS
ZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBBU1NFUlQocjAgPT0gU0g0OjpSMCk7Cisg
ICAgICAgIG1fYXNzZW1ibGVyLm1vdndfcjBtcihzcmMsIGRlc3QpOworICAgIH0KKyAgICAKKyAg
ICB2b2lkIGxvYWQxNihCYXNlSW5kZXggYWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsK
KyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgbW92ZShh
ZGRyZXNzLmluZGV4LCBzY3IpOworICAgICAgICBsc2hpZnQzMihhZGRyZXNzLnNjYWxlLCBzY3Ip
OworICAgICAgICBtX2Fzc2VtYmxlci5hZGRsX2lyKGFkZHJlc3Mub2Zmc2V0LCBzY3IpOworICAg
ICAgICBpZiAoc2NyID09IFNINDo6UjApCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5tb3Z3X3Iw
bXIoYWRkcmVzcy5iYXNlLCBzY3IpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGFkZDMy
KGFkZHJlc3MuYmFzZSwgc2NyKTsKKyAgICAgICAgICAgIGxvYWQxNihzY3IsIHNjcik7CisgICAg
ICAgIH0KKyAgICAgICAgZXh0dXcoc2NyLCBkZXN0KTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2go
c2NyKTsKKyAgICB9CisKKyAgICB2b2lkIHN0b3JlMzIoUmVnaXN0ZXJJRCBzcmMsIEltcGxpY2l0
QWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNj
cmF0Y2goKTsKKyAgICAgICAgc3RvcmUzMihzcmMsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJh
c2UsIHNjcik7CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgfSAgICAKKyAgICAK
KyAgICAKKyAgICB2b2lkIHN0b3JlMzIoUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lz
dGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBzY3IpCisgICAgeyAgCisgICAgICAgIGlmICgob2Zmc2V0
IDwgMCkgfHwgKG9mZnNldCA+PSA2NCkpIHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLkxvYWRD
b25zdGFudCgoaW50KShvZmZzZXQpLCBzY3IpOworICAgICAgICAgICAgaWYgKHNjciA9PSBTSDQ6
OlIwKQorICAgICAgICAgICAgICAgIG1fYXNzZW1ibGVyLm1vdmxfcm1yMChzcmMsIGJhc2UpOwor
ICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRkbF9ycihi
YXNlLCBzY3IpOworICAgICAgICAgICAgICAgIG1fYXNzZW1ibGVyLm1vdmxfcm0oc3JjLCBzY3Ip
OworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKG9mZnNldCkKKyAgICAgICAgICAg
IG1fYXNzZW1ibGVyLm1vdmxfcm0oc3JjLCBvZmZzZXQgPj4gMiwgYmFzZSk7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLm1vdmxfcm0oc3JjLCBiYXNlKTsKKyAgICB9Cisg
ICAgCisgICAgdm9pZCBzdG9yZTMyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIG9mZnNldCwg
UmVnaXN0ZXJJRCBiYXNlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG9mZnNldCA9PSBTSDQ6OlIw
KTsKKyAgICAgICAgbV9hc3NlbWJsZXIubW92bF9ybXIwKHNyYywgYmFzZSk7CisgICAgfQorICAg
IAorICAgIHZvaWQgc3RvcmUzMihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpCisgICAg
eworICAgICAgICBtX2Fzc2VtYmxlci5tb3ZsX3JtKHNyYywgZHN0KTsKKyAgICB9CisKKworICAg
IHZvaWQgc3RvcmUzMihJbW0zMiBpbW0sIEltcGxpY2l0QWRkcmVzcyBhZGRyZXNzKQorICAgIHsK
KyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgUmVnaXN0
ZXJJRCBzY3IxID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIG1fYXNzZW1ibGVyLkxvYWRDb25z
dGFudCgoaW50KShpbW0ubV92YWx1ZSksIHNjcik7CisKKyAgICAgICAgc3RvcmUzMihzY3IsIGFk
ZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UsIHNjcjEpOworICAgICAgICByZWxlYXNlU2NyYXRj
aChzY3IpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IxKTsKKyAgICB9CisgICAgCisgICAg
dm9pZCBzdG9yZTMyKFJlZ2lzdGVySUQgc3JjLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7Cisg
ICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIG1vdmUoYWRk
cmVzcy5pbmRleCwgc2NyKTsKKyAgICAgICAgCisgICAgICAgIGxzaGlmdDMyKGFkZHJlc3Muc2Nh
bGUsIHNjcik7CisgICAgICAgIGFkZDMyKGFkZHJlc3MuYmFzZSwgc2NyKTsKKyAgICAgICAgc3Rv
cmUzMihzcmMsIEFkZHJlc3Moc2NyLCBhZGRyZXNzLm9mZnNldCkpOworICAgICAgICByZWxlYXNl
U2NyYXRjaChzY3IpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHN0b3JlMzIoSW1tMzIgaW1tLCB2
b2lkKiBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
fQorICAgIHZvaWQgc3RvcmUzMihSZWdpc3RlcklEIHNyYywgdm9pZCogYWRkcmVzcykKKyAgICB7
CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIAorICAgIERhdGFM
YWJlbDMyIGxvYWQzMldpdGhBZGRyZXNzT2Zmc2V0UGF0Y2goQWRkcmVzcyBhZGRyZXNzLCBSZWdp
c3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRj
aCgpOworICAgICAgICAKKyAgICAgICAgRGF0YUxhYmVsMzIgbGFiZWwodGhpcyk7CisgICAgICAg
IG1vdmVXaXRoUGF0Y2goSW1tMzIoYWRkcmVzcy5vZmZzZXQpLCBzY3IpOyAgICAgICAgCisgICAg
ICAgIAorICAgICAgICBtX2Fzc2VtYmxlci5hZGRsX3JyKGFkZHJlc3MuYmFzZSwgc2NyKTsKKyAg
ICAgICAgbV9hc3NlbWJsZXIubW92bF9tcihzY3IsIGRlc3QpOworICAgICAgICByZWxlYXNlU2Ny
YXRjaChzY3IpOworICAgICAgICByZXR1cm4gbGFiZWw7CisgICAgfQorICAgIAorICAgIERhdGFM
YWJlbDMyIHN0b3JlMzJXaXRoQWRkcmVzc09mZnNldFBhdGNoKFJlZ2lzdGVySUQgc3JjLCBBZGRy
ZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRj
aCgpOworICAgICAgICAKKyAgICAgICAgRGF0YUxhYmVsMzIgbGFiZWwodGhpcyk7CisgICAgICAg
IG1vdmVXaXRoUGF0Y2goSW1tMzIoYWRkcmVzcy5vZmZzZXQpLCBzY3IpOyAgICAgICAgCisKKyAg
ICAgICAgbV9hc3NlbWJsZXIuYWRkbF9ycihhZGRyZXNzLmJhc2UsIHNjcik7CisgICAgICAgIG1f
YXNzZW1ibGVyLm1vdmxfcm0oc3JjLCBzY3IpOworICAgICAgICAKKyAgICAgICAgcmVsZWFzZVNj
cmF0Y2goc2NyKTsKKyAgICAgICAgcmV0dXJuIGxhYmVsOworICAgIH0KKyAgICAKKyAgICBMYWJl
bCBsb2FkUHRyV2l0aFBhdGNoVG9MRUEoQWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3Qp
CisgICAgeworICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAg
ICAKKyAgICAgICAgTGFiZWwgbGFiZWwodGhpcyk7CisgICAgICAgIG1vdmVXaXRoUGF0Y2goSW1t
MzIoYWRkcmVzcy5vZmZzZXQpLCBzY3IpOworICAgICAgICAKKyAgICAgICAgbV9hc3NlbWJsZXIu
YWRkbF9ycihhZGRyZXNzLmJhc2UsIHNjcik7CisgICAgICAgIG1fYXNzZW1ibGVyLm1vdmxfbXIo
c2NyLCBkZXN0KTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICAgICAgcmV0dXJu
IGxhYmVsOworICAgIH0KKyAgICAKKyAgICAgLy8gRmxvYXRpbmctcG9pbnQgb3BlcmF0aW9ucwor
CisgICAgYm9vbCBzdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9
ICAgIAorICAgIGJvb2wgc3VwcG9ydHNGbG9hdGluZ1BvaW50VHJ1bmNhdGUoKSBjb25zdCB7IHJl
dHVybiBmYWxzZTsgfQorICAgIAorICAgIHZvaWQgbG9hZERvdWJsZShJbXBsaWNpdEFkZHJlc3Mg
YWRkcmVzcywgRlBSZWdpc3RlcklEIGRlc3QsIFJlZ2lzdGVySUQgc2NyKQorICAgIHsKKyAgICAg
ICAgbV9hc3NlbWJsZXIuZG91YmxlbG9hZChhZGRyZXNzLmJhc2UsIGFkZHJlc3Mub2Zmc2V0LCBk
ZXN0LCBzY3IpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGxvYWREb3VibGUoUmVnaXN0ZXJJRCBz
cmMsIEZQUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuZm1vdl9y
ZWFkX3JtKHNyYywgZGVzdCk7CisgICAgfQorCisgICAgdm9pZCBzdG9yZURvdWJsZShGUFJlZ2lz
dGVySUQgc3JjLCBJbXBsaWNpdEFkZHJlc3MgYWRkcmVzcywgUmVnaXN0ZXJJRCBzY3IpCisgICAg
eworICAgICAgICBtX2Fzc2VtYmxlci5kb3VibGVzdG9yZShzcmMsIGFkZHJlc3MuYmFzZSwgYWRk
cmVzcy5vZmZzZXQsIHNjcik7CisgICAgfQorICAgIAorICAgIHZvaWQgc3RvcmVEb3VibGUoRlBS
ZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxl
ci5mbW92X3dyaXRlX3JtKHNyYywgZHN0KTsKKyAgICB9CisKKyAgICB2b2lkIGFkZERvdWJsZShG
UFJlZ2lzdGVySUQgc3JjLCBGUFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNz
ZW1ibGVyLmRhZGRfcnIoc3JjLCBkZXN0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhZGREb3Vi
bGUoQWRkcmVzcyBzcmMsIEZQUmVnaXN0ZXJJRCBkZXN0LCBSZWdpc3RlcklEIHNjciwgRlBSZWdp
c3RlcklEIHNjcmYpCisgICAgeworICAgICAgICBsb2FkRG91YmxlKHNyYywgc2NyZiwgc2NyKTsK
KyAgICAgICAgYWRkRG91YmxlKHNjcmYsIGRlc3QpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHN1
YkRvdWJsZShGUFJlZ2lzdGVySUQgc3JjLCBGUFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAg
ICAgIG1fYXNzZW1ibGVyLmRzdWJfcnIoc3JjLCBkZXN0KTsKKyAgICB9CisgICAgCisgICAgdm9p
ZCBtdWxEb3VibGUoRlBSZWdpc3RlcklEIHNyYywgRlBSZWdpc3RlcklEIGRlc3QpCisgICAgewor
ICAgICAgICBtX2Fzc2VtYmxlci5kbXVsX3JyKHNyYywgZGVzdCk7CisgICAgfQorICAgIAorICAg
IHZvaWQgZGl2RG91YmxlKEZQUmVnaXN0ZXJJRCBzcmMsIEZQUmVnaXN0ZXJJRCBkZXN0KQorICAg
IHsKKyAgICAgICAgbV9hc3NlbWJsZXIuZGRpdl9ycihzcmMsIGRlc3QpOworICAgIH0KKworICAg
IHZvaWQgY29udmVydEludDMyVG9Eb3VibGUoUmVnaXN0ZXJJRCBzcmMsIEZQUmVnaXN0ZXJJRCBk
ZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubGRzcm1fZnB1bChzcmMpOworICAgICAg
ICBtX2Fzc2VtYmxlci5mbG9hdF9mcHVsX2RybihkZXN0KTsKKyAgICB9CisKKyAgICBKdW1wIGJy
YW5jaFRlc3Q4KENvbmRpdGlvbiBjb25kLCBBZGRyZXNzIGFkZHJlc3MsIEltbTMyIG1hc2sgPSBJ
bW0zMigtMSkpCisgICAgeworICAgICAgICBSZWdpc3RlcklEIGFkZHJlc3NUZW1wUmVnaXN0ZXIg
PSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgbG9hZDgoYWRkcmVzcywgYWRkcmVzc1RlbXBSZWdp
c3Rlcik7CisgICAgICAgIAorICAgICAgICBKdW1wIGptcCA9IGJyYW5jaFRlc3QzMihjb25kLCBh
ZGRyZXNzVGVtcFJlZ2lzdGVyLCBtYXNrKTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goYWRkcmVz
c1RlbXBSZWdpc3Rlcik7CisgICAgICAgIHJldHVybiBqbXA7CisgICAgfQorICAgIAorICAgIHZv
aWQgc2lnbkV4dGVuZDMyVG9QdHIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAg
ICB7CisgICAgICAgIGlmIChzcmMgIT0gZGVzdCkKKyAgICAgICAgICAgIG1vdmUoc3JjLCBkZXN0
KTsKKyAgICB9CisgICAgCisgICAgSnVtcCBicmFuY2g4KENvbmRpdGlvbiBjb25kLCBBZGRyZXNz
IGxlZnQsIEltbTMyIHJpZ2h0KQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCBhZGRyZXNzVGVt
cFJlZ2lzdGVyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIGxvYWQ4KGxlZnQsIGFkZHJlc3NU
ZW1wUmVnaXN0ZXIpOworICAgICAgICAKKyAgICAgICAgSnVtcCBqbXAgPSBicmFuY2gzMihjb25k
LCBhZGRyZXNzVGVtcFJlZ2lzdGVyLCByaWdodCk7CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKGFk
ZHJlc3NUZW1wUmVnaXN0ZXIpOworICAgICAgICByZXR1cm4gam1wOworICAgIH0KKworICAgIEp1
bXAgYnJhbmNoVHJ1bmNhdGVEb3VibGVUb0ludDMyKEZQUmVnaXN0ZXJJRCwgUmVnaXN0ZXJJRCkK
KyAgICB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAgICAKKyAgICAv
LyBTdGFjayBtYW5pcHVsYXRpb24gb3BlcmF0aW9ucworICAgIAorICAgIHZvaWQgcG9wKFJlZ2lz
dGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnBvcF9yKGRlc3QpOworICAg
IH0KKworICAgIHZvaWQgcHVzaChSZWdpc3RlcklEIHNyYykKKyAgICB7CisgICAgICAgIG1fYXNz
ZW1ibGVyLnB1c2hfcihzcmMpOworICAgIH0KKworICAgIHZvaWQgcHVzaChBZGRyZXNzIGFkZHJl
c3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5wdXNoX20oYWRkcmVzcy5vZmZzZXQsIGFk
ZHJlc3MuYmFzZSk7CisgICAgfQorCisgICAgdm9pZCBwdXNoKEltbTMyIGltbSkKKyAgICB7Cisg
ICAgICAgIG1fYXNzZW1ibGVyLnB1c2hfaTMyKGltbS5tX3ZhbHVlKTsKKyAgICB9CisKKyAgICAv
LyBSZWdpc3RlciBtb3ZlIG9wZXJhdGlvbnMKKworICAgIHZvaWQgbW92ZShJbW0zMiBpbW0sIFJl
Z2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgbV9hc3NlbWJsZXIuTG9hZENvbnN0YW50KGlt
bS5tX3ZhbHVlLCBkZXN0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBtb3ZlV2l0aFBhdGNoKElt
bTMyIGltbSwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICBtX2Fzc2VtYmxlci5Mb2Fk
Q29uc3RhbnQoaW1tLm1fdmFsdWUsIGRlc3QsIHRydWUpOworICAgIH0KKworICAgIHZvaWQgbW92
ZShSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3Nl
bWJsZXIubW92bF9ycihzcmMsIGRlc3QpOworICAgIH0KKworICAgIHZvaWQgbW92ZShJbW1QdHIg
aW1tLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5Mb2FkQ29u
c3RhbnQoaW1tLmFzSW50cHRyKCksIGRlc3QpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGV4dHV3
KFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1i
bGVyLmV4dHV3KHNyYywgZHN0KTsKKyAgICB9CisKKyAgICB2b2lkIHNldDMyKENvbmRpdGlvbiBj
b25kLCBSZWdpc3RlcklEIGxlZnQsIFJlZ2lzdGVySUQgcmlnaHQsIFJlZ2lzdGVySUQgZGVzdCkK
KyAgICB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworCisgICAgdm9p
ZCBzZXQzMihDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBsZWZ0LCBJbW0zMiByaWdodCwgUmVn
aXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9
CisKK3B1YmxpYzoKKyAgICBKdW1wIGJyYW5jaDMyKENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklE
IGxlZnQsIFJlZ2lzdGVySUQgcmlnaHQsIGJvb2wgbmVlZENvbnN0YW50ID0gdHJ1ZSkKKyAgICB7
CisgICAgICAgIEp1bXAgbV9qdW1wOworICAgICAgICBtX2Fzc2VtYmxlci5lbnN1cmVTcGFjZSgy
Mik7CisgICAgICAgIG1fYXNzZW1ibGVyLmNtcGxfcnIocmlnaHQsIGxlZnQsIGNvbmQpOworICAg
ICAgICAKKyAgICAgICAgLyogQlQgbGFiZWwgICAgICAgPT4gQkYgb2ZmIAorICAgICAgICAgICBu
b3AgICAgICAgICAgICAgICBMRFIgcmVnCisgICAgICAgICAgIG5vcCAgICAgICAgICAgICAgIGJy
YWYgQHJlZworICAgICAgICAgICBub3AgICAgICAgICAgICAgICBub3AKKyAgICAgICAgICovCisg
ICAgICAgICAgICAgICAKKyAgICAgICAgbV9qdW1wID0gKGNvbmQgPT0gTm90RXF1YWwpID8gSnVt
cChtX2Fzc2VtYmxlci5qbmUoKSkgOiBKdW1wKG1fYXNzZW1ibGVyLmplKCkpOworICAgICAgICAK
KyAgICAgICAgUmVnaXN0ZXJJRCBzY3I7CisgICAgICAgIGlmIChuZWVkQ29uc3RhbnQpIHsKKyAg
ICAgICAgICAgIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIu
TG9hZENvbnN0YW50KDB4MCwgc2NyLCB0cnVlKTsKKyAgICAgICAgfQorICAgICAgICBtX2Fzc2Vt
Ymxlci5ub3AoKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubm9wKCk7CisgICAgICAgIGlmIChuZWVk
Q29uc3RhbnQpCisgICAgICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgICAgICAKKyAg
ICAgICAgcmV0dXJuIG1fanVtcDsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaDMyKENvbmRpdGlv
biBjb25kLCBSZWdpc3RlcklEIGxlZnQsIEltbTMyIHJpZ2h0LCBib29sIG5lZWRDb25zdGFudCA9
IHRydWUpCisgICAgeworICAgICAgICBKdW1wIG1fanVtcDsKKyAgICAgICAgaWYgKCgoY29uZCA9
PSBFcXVhbCkgfHwgKGNvbmQgPT0gTm90RXF1YWwpKSAmJiAhcmlnaHQubV92YWx1ZSkKKyAgICAg
ICAgICAgIG1fYXNzZW1ibGVyLnRlc3RsX3JyKGxlZnQsIGxlZnQpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBtX2Fzc2VtYmxlci5jbXBsX2lyKHJpZ2h0Lm1fdmFsdWUsIGxlZnQsIGNvbmQp
OworICAgICAgICAgICAgCisgICAgICAgIG1fYXNzZW1ibGVyLmVuc3VyZVNwYWNlKDIwKTsKKyAg
ICAgICAgbV9qdW1wID0gKGNvbmQgPT0gTm90RXF1YWwpID8gSnVtcChtX2Fzc2VtYmxlci5qbmUo
KSkgOiBKdW1wKG1fYXNzZW1ibGVyLmplKCkpOworICAgICAgICAKKyAgICAgICAgUmVnaXN0ZXJJ
RCBzY3I7CisgICAgICAgIGlmIChuZWVkQ29uc3RhbnQpIHsKKyAgICAgICAgICAgIHNjciA9IGNs
YWltU2NyYXRjaCgpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuTG9hZENvbnN0YW50KDB4MCwg
c2NyLCB0cnVlKTsKKyAgICAgICAgfQorICAgICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKKyAgICAg
ICAgbV9hc3NlbWJsZXIubm9wKCk7CisgICAgICAgIGlmIChuZWVkQ29uc3RhbnQpCisgICAgICAg
ICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIG1fanVt
cDsKKyAgICB9CisgICAgCisgICAgSnVtcCBicmFuY2gzMihDb25kaXRpb24gY29uZCwgUmVnaXN0
ZXJJRCBsZWZ0LCBBZGRyZXNzIHJpZ2h0LCBib29sIG5lZWRDb25zdGFudCA9IHRydWUpCisgICAg
eworICAgICAgICBKdW1wIG1fanVtcDsKKyAgICAgICAgbV9hc3NlbWJsZXIuY21wbF9tcihyaWdo
dC5vZmZzZXQsIHJpZ2h0LmJhc2UsIGxlZnQsIGNvbmQpOworICAgICAgICAKKyAgICAgICAgbV9h
c3NlbWJsZXIuZW5zdXJlU3BhY2UoMjApOworICAgICAgICBtX2p1bXAgPSAoY29uZCA9PSBOb3RF
cXVhbCkgPyBKdW1wKG1fYXNzZW1ibGVyLmpuZSgpKSA6IEp1bXAobV9hc3NlbWJsZXIuamUoKSk7
CisgICAgICAgIAorICAgICAgICBSZWdpc3RlcklEIHNjcjsKKyAgICAgICAgaWYgKG5lZWRDb25z
dGFudCkgeworICAgICAgICAgICAgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgICAgICBt
X2Fzc2VtYmxlci5Mb2FkQ29uc3RhbnQoMHgwLCBzY3IsIHRydWUpOworICAgICAgICB9CisgICAg
ICAgIG1fYXNzZW1ibGVyLm5vcCgpOworICAgICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKKyAgICAg
ICAgaWYgKG5lZWRDb25zdGFudCkKKyAgICAgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7Cisg
ICAgICAgIAorICAgICAgICByZXR1cm4gbV9qdW1wOworICAgIH0KKyAgICAKKyAgICBKdW1wIGJy
YW5jaDMyKENvbmRpdGlvbiBjb25kLCBBZGRyZXNzIGxlZnQsIFJlZ2lzdGVySUQgcmlnaHQsIGJv
b2wgbmVlZENvbnN0YW50ID0gdHJ1ZSkKKyAgICB7CisgICAgICAgIEp1bXAgbV9qdW1wOworICAg
ICAgICBtX2Fzc2VtYmxlci5jbXBsX3JtKHJpZ2h0LCBsZWZ0Lm9mZnNldCwgbGVmdC5iYXNlLCBj
b25kKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgbV9hc3NlbWJsZXIuZW5zdXJlU3BhY2Uo
MjApOworICAgICAgICBtX2p1bXAgPSAoY29uZCA9PSBOb3RFcXVhbCkgPyBKdW1wKG1fYXNzZW1i
bGVyLmpuZSgpKSA6IEp1bXAobV9hc3NlbWJsZXIuamUoKSk7CisgICAgICAgIAorICAgICAgICBS
ZWdpc3RlcklEIHNjcjsKKyAgICAgICAgaWYgKG5lZWRDb25zdGFudCkgeworICAgICAgICAgICAg
c2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5Mb2FkQ29uc3Rh
bnQoMHgwLCBzY3IsIHRydWUpOworICAgICAgICB9CisgICAgICAgIG1fYXNzZW1ibGVyLm5vcCgp
OworICAgICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKKyAgICAgICAgaWYgKG5lZWRDb25zdGFudCkK
KyAgICAgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgICAgIAorICAgICAgICByZXR1
cm4gbV9qdW1wOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoMzIoQ29uZGl0aW9uIGNvbmQsIEFk
ZHJlc3MgbGVmdCwgSW1tMzIgcmlnaHQsIGJvb2wgbmVlZENvbnN0YW50ID0gdHJ1ZSkKKyAgICB7
CisgICAgICAgIEp1bXAgbV9qdW1wOworICAgICAgICBtX2Fzc2VtYmxlci5jbXBsX2ltKHJpZ2h0
Lm1fdmFsdWUsIGxlZnQub2Zmc2V0LCBsZWZ0LmJhc2UsIGNvbmQpOworICAgICAgICAKKyAgICAg
ICAgbV9hc3NlbWJsZXIuZW5zdXJlU3BhY2UoMjApOworICAgICAgICBtX2p1bXAgPSAoY29uZCA9
PSBOb3RFcXVhbCkgPyBKdW1wKG1fYXNzZW1ibGVyLmpuZSgpKSA6IEp1bXAobV9hc3NlbWJsZXIu
amUoKSk7CisgICAgICAgIAorICAgICAgICBSZWdpc3RlcklEIHNjcjsKKyAgICAgICAgaWYgKG5l
ZWRDb25zdGFudCkgeworICAgICAgICAgICAgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAg
ICAgICBtX2Fzc2VtYmxlci5Mb2FkQ29uc3RhbnQoMHgwLCBzY3IsIHRydWUpOworICAgICAgICB9
CisgICAgICAgIG1fYXNzZW1ibGVyLm5vcCgpOworICAgICAgICBtX2Fzc2VtYmxlci5ub3AoKTsK
KyAgICAgICAgaWYgKG5lZWRDb25zdGFudCkKKyAgICAgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNj
cik7CisgICAgICAgIAorICAgICAgICByZXR1cm4gbV9qdW1wOworICAgIH0KKworCisgICAgSnVt
cCBicmFuY2gzMihDb25kaXRpb24gY29uZCwgQWJzb2x1dGVBZGRyZXNzIGxlZnQsIFJlZ2lzdGVy
SUQgcmlnaHQsIGJvb2wgbmVlZENvbnN0YW50ID0gdHJ1ZSkKKyAgICB7CisgICAgICAgIEp1bXAg
bV9qdW1wOworICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAg
ICBtb3ZlKEltbTMyKChpbnQpbGVmdC5tX3B0ciksIHNjcik7CisgICAgICAgIG1fYXNzZW1ibGVy
LmNtcGxfcnIocmlnaHQsIHNjciwgY29uZCk7CisKKyAgICAgICAgbV9hc3NlbWJsZXIuZW5zdXJl
U3BhY2UoMjApOworICAgICAgICBtX2p1bXAgPSAoY29uZCA9PSBOb3RFcXVhbCkgPyBKdW1wKG1f
YXNzZW1ibGVyLmpuZSgpKSA6IEp1bXAobV9hc3NlbWJsZXIuamUoKSk7CisKKyAgICAgICAgaWYg
KG5lZWRDb25zdGFudCkKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLkxvYWRDb25zdGFudCgweDAs
IHNjciwgdHJ1ZSk7CisgICAgICAgIG1fYXNzZW1ibGVyLm5vcCgpOworICAgICAgICBtX2Fzc2Vt
Ymxlci5ub3AoKTsKKworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgICAgICByZXR1
cm4gbV9qdW1wOworICAgIH0KKworCisgICAgSnVtcCBicmFuY2gzMihDb25kaXRpb24gY29uZCwg
QWJzb2x1dGVBZGRyZXNzIGxlZnQsIEltbTMyIHJpZ2h0LCBib29sIG5lZWRDb25zdGFudCA9IHRy
dWUpCisgICAgeworICAgICAgICBKdW1wIG1fanVtcDsKKyAgICAgICAgUmVnaXN0ZXJJRCBhZGRy
ZXNzVGVtcFJlZ2lzdGVyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIGxvYWQzMihsZWZ0Lm1f
cHRyLCBhZGRyZXNzVGVtcFJlZ2lzdGVyKTsKKworICAgICAgICBtX2Fzc2VtYmxlci5jbXBsX2ly
KHJpZ2h0Lm1fdmFsdWUsIGFkZHJlc3NUZW1wUmVnaXN0ZXIsIGNvbmQpOworCisgICAgICAgIG1f
YXNzZW1ibGVyLmVuc3VyZVNwYWNlKDIwKTsKKyAgICAgICAgbV9qdW1wID0gKGNvbmQgPT0gTm90
RXF1YWwpID8gSnVtcChtX2Fzc2VtYmxlci5qbmUoKSkgOiBKdW1wKG1fYXNzZW1ibGVyLmplKCkp
OworCisgICAgICAgIGlmIChuZWVkQ29uc3RhbnQpCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5M
b2FkQ29uc3RhbnQoMHgwLCBhZGRyZXNzVGVtcFJlZ2lzdGVyLCB0cnVlKTsKKyAgICAgICAgbV9h
c3NlbWJsZXIubm9wKCk7CisgICAgICAgIG1fYXNzZW1ibGVyLm5vcCgpOworCisgICAgICAgIHJl
bGVhc2VTY3JhdGNoKGFkZHJlc3NUZW1wUmVnaXN0ZXIpOworICAgICAgICByZXR1cm4gbV9qdW1w
OworICAgIH0KKworCisKKyAgICBKdW1wIGJyYW5jaDE2KENvbmRpdGlvbiBjb25kLCAgQmFzZUlu
ZGV4IGxlZnQsIFJlZ2lzdGVySUQgcmlnaHQpCisgICAgeworICAgICAgICBSZWdpc3RlcklEIHNj
ciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBtb3ZlKGxlZnQuaW5kZXgsIHNjcik7CisgICAg
ICAgIGxzaGlmdDMyKGxlZnQuc2NhbGUsIHNjcik7CisgICAgICAgIG1fYXNzZW1ibGVyLmFkZGxf
aXIobGVmdC5vZmZzZXQsIHNjcik7CisgICAgICAgIGFkZDMyKGxlZnQuYmFzZSwgc2NyKTsKKyAg
ICAgICAgbG9hZDE2KHNjciwgc2NyKTsKKyAgICAgICAgZXh0dXcoc2NyLCBzY3IpOworICAgICAg
ICByZWxlYXNlU2NyYXRjaChzY3IpOworCisgICAgICAgIHJldHVybiBicmFuY2gzMihjb25kLCBz
Y3IsIHJpZ2h0KTsgICAgCisgICAgfQorICAgIAorICAgIEp1bXAgYnJhbmNoMTYoQ29uZGl0aW9u
IGNvbmQsIEJhc2VJbmRleCBsZWZ0LCBJbW0zMiByaWdodCkKKyAgICB7CisgICAgICAgIFJlZ2lz
dGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIFJlZ2lzdGVySUQgc2NyMSA9IGNs
YWltU2NyYXRjaCgpOworICAgICAgICBtb3ZlKGxlZnQuaW5kZXgsIHNjcik7CisgICAgICAgIGxz
aGlmdDMyKGxlZnQuc2NhbGUsIHNjcik7CisgICAgICAgIG1fYXNzZW1ibGVyLmFkZGxfaXIobGVm
dC5vZmZzZXQsIHNjcik7CisgICAgICAgIGFkZDMyKGxlZnQuYmFzZSwgc2NyKTsKKyAgICAgICAg
bG9hZDE2KHNjciwgc2NyKTsKKyAgICAgICAgZXh0dXcoc2NyLCBzY3IpOworICAgICAgICAKKyAg
ICAgICAgbV9hc3NlbWJsZXIuTG9hZENvbnN0YW50KHJpZ2h0Lm1fdmFsdWUsIHNjcjEpOworICAg
ICAgICAKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICAgICAgcmVsZWFzZVNjcmF0
Y2goc2NyMSk7CisgICAgICAgIHJldHVybiBicmFuY2gzMihjb25kLCBzY3IsIHNjcjEpOworICAg
IH0KKworICAgIEp1bXAgYnJhbmNoVGVzdDMyKENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIHJl
ZywgUmVnaXN0ZXJJRCBtYXNrLCBib29sIG5lZWRDb25zdGFudCA9IHRydWUpCisgICAgeworICAg
ICAgICBBU1NFUlQoKGNvbmQgPT0gWmVybykgfHwgKGNvbmQgPT0gTm9uWmVybykpOworICAgICAg
ICBKdW1wIG1fanVtcDsKKyAgICAgICAgbV9hc3NlbWJsZXIudGVzdGxfcnIocmVnLCBtYXNrKTsK
KworICAgICAgICBtX2Fzc2VtYmxlci5lbnN1cmVTcGFjZSgyMCk7CisgICAgICAgIG1fanVtcCA9
IChjb25kID09IE5vdEVxdWFsKSA/IEp1bXAobV9hc3NlbWJsZXIuam5lKCkpIDogSnVtcChtX2Fz
c2VtYmxlci5qZSgpKTsKKyAgICAgICAgCisgICAgICAgIFJlZ2lzdGVySUQgc2NyOworICAgICAg
ICBpZiAobmVlZENvbnN0YW50KSB7CisgICAgICAgICAgICBzY3IgPSBjbGFpbVNjcmF0Y2goKTsK
KyAgICAgICAgICAgIG1fYXNzZW1ibGVyLkxvYWRDb25zdGFudCgweDAsIHNjciwgdHJ1ZSk7Cisg
ICAgICAgIH0KKyAgICAgICAgbV9hc3NlbWJsZXIubm9wKCk7CisgICAgICAgIG1fYXNzZW1ibGVy
Lm5vcCgpOworICAgICAgICBpZiAobmVlZENvbnN0YW50KQorICAgICAgICAgICAgcmVsZWFzZVNj
cmF0Y2goc2NyKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBtX2p1bXA7ICAgCisgICAgfQor
CisgICAgSnVtcCBicmFuY2hUZXN0MzIoQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgcmVnLCBJ
bW0zMiBtYXNrID0gSW1tMzIoLTEpLCBib29sIG5lZWRDb25zdGFudCA9IHRydWUpCisgICAgewor
ICAgICAgICBBU1NFUlQoKGNvbmQgPT0gWmVybykgfHwgKGNvbmQgPT0gTm9uWmVybykpOworICAg
ICAgICBKdW1wIG1fanVtcDsKKyAgICAgICAgCisgICAgICAgIGlmIChtYXNrLm1fdmFsdWUgPT0g
LTEpCisgICAgICAgICAgICBtX2Fzc2VtYmxlci50ZXN0bF9ycihyZWcsIHJlZyk7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnRlc3RsX2kzMnIobWFzay5tX3ZhbHVlLCBy
ZWcpOworICAgICAgICAgICAgCisgICAgICAgIG1fYXNzZW1ibGVyLmVuc3VyZVNwYWNlKDIwKTsK
KyAgICAgICAgbV9qdW1wID0gKGNvbmQgPT0gTm90RXF1YWwpID8gSnVtcChtX2Fzc2VtYmxlci5q
bmUoKSkgOiBKdW1wKG1fYXNzZW1ibGVyLmplKCkpOworICAgICAgICAKKyAgICAgICAgUmVnaXN0
ZXJJRCBzY3I7CisgICAgICAgIGlmIChuZWVkQ29uc3RhbnQpIHsKKyAgICAgICAgICAgIHNjciA9
IGNsYWltU2NyYXRjaCgpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuTG9hZENvbnN0YW50KDB4
MCwgc2NyLCB0cnVlKTsKKyAgICAgICAgfQorICAgICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKKyAg
ICAgICAgbV9hc3NlbWJsZXIubm9wKCk7CisgICAgICAgIGlmIChuZWVkQ29uc3RhbnQpCisgICAg
ICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIG1f
anVtcDsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaFRlc3QzMihDb25kaXRpb24gY29uZCwgQWRk
cmVzcyBhZGRyZXNzLCBJbW0zMiBtYXNrID0gSW1tMzIoLTEpLCBib29sIG5lZWRDb25zdGFudCA9
IHRydWUpCisgICAgeworICAgICAgICBBU1NFUlQoKGNvbmQgPT0gWmVybykgfHwgKGNvbmQgPT0g
Tm9uWmVybykpOworICAgICAgICBKdW1wIG1fanVtcDsKKworICAgICAgICBpZiAobWFzay5tX3Zh
bHVlID09IC0xKQorICAgICAgICAgICAgbV9hc3NlbWJsZXIuY21wbF9pbSgwLCBhZGRyZXNzLm9m
ZnNldCwgYWRkcmVzcy5iYXNlLCBjb25kKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9h
c3NlbWJsZXIudGVzdGxfaTMybShtYXNrLm1fdmFsdWUsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNz
LmJhc2UpOworICAgICAgICAgICAgCisgICAgICAgIG1fYXNzZW1ibGVyLmVuc3VyZVNwYWNlKDIw
KTsKKyAgICAgICAgbV9qdW1wID0gKGNvbmQgPT0gTm90RXF1YWwpID8gSnVtcChtX2Fzc2VtYmxl
ci5qbmUoKSkgOiBKdW1wKG1fYXNzZW1ibGVyLmplKCkpOworICAgICAgICAKKyAgICAgICAgUmVn
aXN0ZXJJRCBzY3I7CisgICAgICAgIGlmIChuZWVkQ29uc3RhbnQpIHsKKyAgICAgICAgICAgIHNj
ciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuTG9hZENvbnN0YW50
KDB4MCwgc2NyLCB0cnVlKTsKKyAgICAgICAgfQorICAgICAgICBtX2Fzc2VtYmxlci5ub3AoKTsK
KyAgICAgICAgbV9hc3NlbWJsZXIubm9wKCk7CisgICAgICAgIGlmIChuZWVkQ29uc3RhbnQpCisg
ICAgICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgICAgICAKKyAgICAgICAgcmV0dXJu
IG1fanVtcDsKKyAgICB9CisgICAgCisgICAgSnVtcCBicmFuY2gzMihDb25kaXRpb24gY29uZCwg
Ym9vbCBuZWVkQ29uc3RhbnQgPSB0cnVlKQorICAgIHsKKyAgICAgICAgSnVtcCBtX2p1bXA7CisK
KyAgICAgICAgbV9hc3NlbWJsZXIuZW5zdXJlU3BhY2UoMjApOworICAgICAgICBtX2p1bXAgPSAo
Y29uZCA9PSBOb3RFcXVhbCkgPyBKdW1wKG1fYXNzZW1ibGVyLmpuZSgpKSA6IEp1bXAobV9hc3Nl
bWJsZXIuamUoKSk7CisKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsK
KyAKKyAgICAgICAgbV9hc3NlbWJsZXIuTG9hZENvbnN0YW50KDB4MCwgc2NyLCB0cnVlKTsKKyAg
ICAgICAgbV9hc3NlbWJsZXIubm9wKCk7CisgICAgICAgIG1fYXNzZW1ibGVyLm5vcCgpOworICAg
ICAgICAKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICAgICAgcmV0dXJuIG1fanVt
cDsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaFRlc3QzMihDb25kaXRpb24gY29uZCwgQmFzZUlu
ZGV4IGFkZHJlc3MsIEltbTMyIG1hc2sgPSBJbW0zMigtMSksIGJvb2wgbmVlZENvbnN0YW50ID0g
dHJ1ZSkKKyAgICB7CisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7Cisg
ICAgICAgIEp1bXAgbV9qdW1wOworCisgICAgICAgIG1vdmUoYWRkcmVzcy5pbmRleCwgc2NyKTsK
KworICAgICAgICBsc2hpZnQzMihhZGRyZXNzLnNjYWxlLCBzY3IpOworICAgICAgICBhZGQzMihh
ZGRyZXNzLmJhc2UsIHNjcik7CisgICAgICAgIGxvYWQzMihzY3IsIGFkZHJlc3Mub2Zmc2V0LCBz
Y3IpOworCisgICAgICAgIGlmIChtYXNrLm1fdmFsdWUgPT0gLTEpCisgICAgICAgICAgICBtX2Fz
c2VtYmxlci50ZXN0bF9ycihzY3IsIHNjcik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1f
YXNzZW1ibGVyLnRlc3RsX2kzMnIobWFzay5tX3ZhbHVlLCBzY3IpOworCisgICAgICAgIG1fYXNz
ZW1ibGVyLmVuc3VyZVNwYWNlKDIwKTsKKyAgICAgICAgbV9qdW1wID0gKGNvbmQgPT0gTm90RXF1
YWwpID8gSnVtcChtX2Fzc2VtYmxlci5qbmUoKSkgOiBKdW1wKG1fYXNzZW1ibGVyLmplKCkpOwor
CisgICAgICAgIGlmIChuZWVkQ29uc3RhbnQpCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5Mb2Fk
Q29uc3RhbnQoMHgwLCBzY3IsIHRydWUpOworCisgICAgICAgIG1fYXNzZW1ibGVyLm5vcCgpOwor
ICAgICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsK
KyAgICAgICAgCisgICAgICAgIHJldHVybiBtX2p1bXA7CisgICAgfQorCisgICAgSnVtcCBqdW1w
KCkKKyAgICB7CisgICAgICAgIHJldHVybiBKdW1wKG1fYXNzZW1ibGVyLmptcCgpKTsKKyAgICB9
CisKKyAgICB2b2lkIGp1bXAoUmVnaXN0ZXJJRCB0YXJnZXQpCisgICAgeworICAgICAgICBtX2Fz
c2VtYmxlci5qbXBfcih0YXJnZXQpOworICAgIH0KKworICAgIC8vIEFkZHJlc3MgaXMgYSBtZW1v
cnkgbG9jYXRpb24gY29udGFpbmluZyB0aGUgYWRkcmVzcyB0byBqdW1wIHRvCisgICAgdm9pZCBq
dW1wKEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmptcF9tKGFk
ZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UpOworICAgIH0KKworCisgICAgLy8gQXJpdGhtZXRp
YyBjb250cm9sIGZsb3cgb3BlcmF0aW9ucworICAgIAorICAgIEp1bXAgYnJhbmNoQWRkMzIoQ29u
ZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAg
ICAgICBBU1NFUlQoY29uZCA9PSBPdmVyZmxvdyk7CisgICAgICAgIG1fYXNzZW1ibGVyLmVuc3Vy
ZVNwYWNlKDIyKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuYWRkdmxfcnIoc3JjLCBkZXN0KTsKKwor
ICAgICAgICBKdW1wIG1fanVtcCA9IEp1bXAobV9hc3NlbWJsZXIuam5lKCkpOworICAgICAgIAor
ICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOyAKKyAgICAgICAgbV9hc3Nl
bWJsZXIuTG9hZENvbnN0YW50KDB4MCwgc2NyLCB0cnVlKTsKKyAgICAgICAgbV9hc3NlbWJsZXIu
bm9wKCk7CisgICAgICAgIG1fYXNzZW1ibGVyLm5vcCgpOworICAgICAgICAKKyAgICAgICAgcmVs
ZWFzZVNjcmF0Y2goc2NyKTsKKyAgICAgICAgcmV0dXJuIG1fanVtcDsKKyAgICB9CisgICAgCisg
ICAgSnVtcCBicmFuY2hNdWwzMihDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBzcmMsIFJlZ2lz
dGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0K
KyAgICAKKyAgICBKdW1wIGJyYW5jaE11bDMyKENvbmRpdGlvbiBjb25kLCBJbW0zMiBpbW0sIFJl
Z2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICB9CisgICAgCisgICAgSnVtcCBicmFuY2hTdWIzMihDb25kaXRpb24g
Y29uZCwgUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAgICAKKyAgICBKdW1wIGJyYW5jaFN1YjMyKENv
bmRpdGlvbiBjb25kLCBJbW0zMiBpbW0sIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAgICAKKworICAgIENhbGwgY2FsbCgpCisg
ICAgeworICAgICAgICByZXR1cm4gQ2FsbChtX2Fzc2VtYmxlci5jYWxsKCksIENhbGw6Okxpbmth
YmxlKTsKKyAgICB9CisgICAgCisgICAgQ2FsbCBuZWFyQ2FsbCgpCisgICAgeworICAgICAgICBy
ZXR1cm4gQ2FsbChtX2Fzc2VtYmxlci5jYWxsKCksIENhbGw6OkxpbmthYmxlTmVhcik7CisgICAg
fQorCisgICAgQ2FsbCBjYWxsKFJlZ2lzdGVySUQgdGFyZ2V0KQorICAgIHsKKyAgICAgICAgcmV0
dXJuIENhbGwobV9hc3NlbWJsZXIuY2FsbCh0YXJnZXQpLCBDYWxsOjpOb25lKTsKKyAgICB9CisK
KyAgICB2b2lkIHJldCgpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5yZXQoKTsKKyAgICAg
ICAgbV9hc3NlbWJsZXIubm9wKCk7CisgICAgfQorICAgIAorICAgIEp1bXAgYnJhbmNoUHRyV2l0
aFBhdGNoKENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGxlZnQsIERhdGFMYWJlbFB0ciYgZGF0
YUxhYmVsLCBJbW1QdHIgaW5pdGlhbFJpZ2h0VmFsdWUgPSBJbW1QdHIoMCkpCisgICAgeyAgICAg
ICAgCisgICAgICAgIFJlZ2lzdGVySUQgZGF0YVRlbXBSZWdpc3RlciA9IGNsYWltU2NyYXRjaCgp
OworICAgICAgICBKdW1wIG1fanVtcDsKKyAgICAgICAgCisgICAgICAgIGRhdGFMYWJlbCA9IERh
dGFMYWJlbFB0cih0aGlzKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuTG9hZENvbnN0YW50KChpbnQp
aW5pdGlhbFJpZ2h0VmFsdWUubV92YWx1ZSwgZGF0YVRlbXBSZWdpc3RlciwgdHJ1ZSk7CisgICAg
ICAgIAorICAgICAgICBtX2Fzc2VtYmxlci5jbXBsX3JyKGRhdGFUZW1wUmVnaXN0ZXIsIGxlZnQs
IGNvbmQpOyAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICBtX2p1bXAgPSAo
Y29uZCA9PSBOb3RFcXVhbCkgPyBKdW1wKG1fYXNzZW1ibGVyLmpuZSgpKSA6IEp1bXAobV9hc3Nl
bWJsZXIuamUoKSk7CisgICAgICAgIAorICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2Ny
YXRjaCgpOworICAgICAgICBtX2Fzc2VtYmxlci5Mb2FkQ29uc3RhbnQoMHgwLCBzY3IsIHRydWUp
OworICAgICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubm9wKCk7
CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKGRh
dGFUZW1wUmVnaXN0ZXIpOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIG1fanVtcDsKKyAgICB9
CisKKyAgICBKdW1wIGJyYW5jaFB0cldpdGhQYXRjaChDb25kaXRpb24gY29uZCwgQWRkcmVzcyBs
ZWZ0LCBEYXRhTGFiZWxQdHImIGRhdGFMYWJlbCwgSW1tUHRyIGluaXRpYWxSaWdodFZhbHVlID0g
SW1tUHRyKDApKQorICAgIHsKKyAgICAgICAgSnVtcCBtX2p1bXA7CisgICAgICAgIFJlZ2lzdGVy
SUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIFJlZ2lzdGVySUQgc2NyMSA9IGNsYWlt
U2NyYXRjaCgpOworCisgICAgICAgIG1fYXNzZW1ibGVyLkxvYWRDb25zdGFudChsZWZ0Lm9mZnNl
dCwgc2NyLCBmYWxzZSk7CisgICAgICAgIG1fYXNzZW1ibGVyLmFkZGxfcnIobGVmdC5iYXNlLCBz
Y3IpOworICAgICAgICBtX2Fzc2VtYmxlci5tb3ZsX21yKHNjciwgc2NyKTsKKworICAgICAgICBk
YXRhTGFiZWwgPSBEYXRhTGFiZWxQdHIodGhpcyk7CisgICAgICAgIG1vdmVXaXRoUGF0Y2goSW1t
MzIoaW5pdGlhbFJpZ2h0VmFsdWUuYXNJbnRwdHIoKSksIHNjcjEpOworCisgICAgICAgIG1fYXNz
ZW1ibGVyLmNtcGxfcnIoc2NyMSwgc2NyLCBjb25kKTsgICAgICAgIAorICAgICAgICAgICAgICAg
IAorICAgICAgICBtX2p1bXAgPSAoY29uZCA9PSBOb3RFcXVhbCkgPyBKdW1wKG1fYXNzZW1ibGVy
LmpuZSgpKSA6IEp1bXAobV9hc3NlbWJsZXIuamUoKSk7CisgICAgICAgIAorICAgICAgICBtX2Fz
c2VtYmxlci5Mb2FkQ29uc3RhbnQoMHgwLCBzY3IsIHRydWUpOworICAgICAgICBtX2Fzc2VtYmxl
ci5ub3AoKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubm9wKCk7CisgICAgICAgIAorICAgICAgICBy
ZWxlYXNlU2NyYXRjaChzY3IpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IxKTsKKyAgICAg
ICAgcmV0dXJuIG1fanVtcDsKKyAgICB9CisgICAgCisgICAgRGF0YUxhYmVsUHRyIHN0b3JlUHRy
V2l0aFBhdGNoKEltbTMyIGluaXRpYWxWYWx1ZSwgSW1wbGljaXRBZGRyZXNzIGFkZHJlc3MpCisg
ICAgeworICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBE
YXRhTGFiZWxQdHIgbGFiZWwodGhpcyk7CisgICAgICAgIG1vdmVXaXRoUGF0Y2goaW5pdGlhbFZh
bHVlLCBzY3IpOworICAgICAgICBzdG9yZTMyKHNjciwgYWRkcmVzcyk7CisgICAgICAgIHJlbGVh
c2VTY3JhdGNoKHNjcik7CisgICAgICAgIHJldHVybiBsYWJlbDsKKyAgICB9CisgICAgCisgICAg
RGF0YUxhYmVsUHRyIHN0b3JlUHRyV2l0aFBhdGNoKEltbVB0ciBpbml0aWFsVmFsdWUsIEltcGxp
Y2l0QWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgc3RvcmVQdHJXaXRoUGF0Y2goSW1t
MzIoaW5pdGlhbFZhbHVlLmFzSW50cHRyKCkpLCBhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAg
RGF0YUxhYmVsUHRyIHN0b3JlUHRyV2l0aFBhdGNoKEltbTMyIGluaXRpYWxWYWx1ZSwgQWRkcmVz
cyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2go
KTsKKyAgICAgICAgRGF0YUxhYmVsUHRyIGxhYmVsKHRoaXMpOworICAgICAgICBtb3ZlV2l0aFBh
dGNoKGluaXRpYWxWYWx1ZSwgc2NyKTsKKyAgICAgICAgc3RvcmUzMihzY3IsIGFkZHJlc3MpOwor
ICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgICAgICByZXR1cm4gbGFiZWw7CisgICAg
fQorCisgICAgRGF0YUxhYmVsUHRyIHN0b3JlUHRyV2l0aFBhdGNoKEltbVB0ciBpbml0aWFsVmFs
dWUsIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIHN0b3JlUHRyV2l0aFBhdGNoKElt
bTMyKGluaXRpYWxWYWx1ZS5hc0ludHB0cigpKSwgYWRkcmVzcyk7CisgICAgfQorCisgICAgRGF0
YUxhYmVsUHRyIHN0b3JlUHRyV2l0aFBhdGNoKEltcGxpY2l0QWRkcmVzcyBhZGRyZXNzKSB7IHJl
dHVybiBzdG9yZVB0cldpdGhQYXRjaChJbW0zMigwKSwgYWRkcmVzcyk7IH0KKyAgICAKKyAgICAg
ICAKKyAgICBDYWxsIHRhaWxSZWN1cnNpdmVDYWxsKCkKKyAgICB7CisgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7IAorICAgIH0KKworICAgIENhbGwgbWFrZVRhaWxSZWN1cnNpdmVDYWxsKEp1
bXAgb2xkSnVtcCkKKyAgICB7CisgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7IAorICAgIH0K
KyAgICAKKyAgICBwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBMaW5rQnVmZmVyOworICAgIGZy
aWVuZCBjbGFzcyBSZXBhdGNoQnVmZmVyOworCisgICAgc3RhdGljIHZvaWQgbGlua0NhbGwodm9p
ZCogY29kZSwgQ2FsbCBjYWxsLCBGdW5jdGlvblB0ciBmdW5jdGlvbikKKyAgICB7CisgICAgICAg
IFNINEFzc2VtYmxlcjo6bGlua0NhbGwoY29kZSwgY2FsbC5tX2ptcCwgZnVuY3Rpb24udmFsdWUo
KSk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgcmVwYXRjaENhbGwoQ29kZUxvY2F0aW9uQ2Fs
bCBjYWxsLCBDb2RlTG9jYXRpb25MYWJlbCBkZXN0aW5hdGlvbikKKyAgICB7CisgICAgICAgIFNI
NEFzc2VtYmxlcjo6cmVsaW5rQ2FsbChjYWxsLmRhdGFMb2NhdGlvbigpLCBkZXN0aW5hdGlvbi5l
eGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCByZXBhdGNoQ2Fs
bChDb2RlTG9jYXRpb25DYWxsIGNhbGwsIEZ1bmN0aW9uUHRyIGRlc3RpbmF0aW9uKQorICAgIHsK
KyAgICAgICAgU0g0QXNzZW1ibGVyOjpyZWxpbmtDYWxsKGNhbGwuZGF0YUxvY2F0aW9uKCksIGRl
c3RpbmF0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgIH0KKworfTsKKworfSAvLyBuYW1l
c3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoQVNTRU1CTEVSKQorCisjZW5kaWYgLy8gTWFj
cm9Bc3NlbWJsZXJTSDRfaApkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1NI
NEFzc2VtYmxlci5oIGIvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1NINEFzc2VtYmxlci5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3MTVkNjkKLS0tIC9kZXYvbnVsbAor
KysgYi9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvU0g0QXNzZW1ibGVyLmgKQEAgLTAsMCArMSwx
ODYxIEBACisKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBTVE1pY3JvZWxlY3Ryb25p
Y3MuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBXcml0dGVuIGJ5IFRob3VyYXlhIEFuZG9sc2kg
KHRob3VyYXlhLmFuZG9sc2lAc3QuY29tKS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBTSDRBc3NlbWJsZXJfaAorI2RlZmluZSBTSDRBc3Nl
bWJsZXJfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoQVNTRU1C
TEVSKSAmJiBDUFUoU0g0KQorCisjZGVmaW5lIEdFVE9QQ09ERTEoYSwgYiwgYykgICgoYSkgfCAo
KChiKSAmIDB4ZikgPDwgOCkgfCgoKGMpICYgMHhmKSA8PCA0KSkKKyNkZWZpbmUgR0VUT1BDT0RF
MihhLCBiKSAgKChhKSB8ICgoKGIpICYgMHhmKSA8PCA4KSkKKyNkZWZpbmUgR0VUT1BDT0RFMyhh
LCBiLCBjKSAgKChhKSB8ICgoKGIpICYgMHhmKSA8PCA4KSB8KChjKSAmIDB4ZmYpKQorI2RlZmlu
ZSBHRVRPUENPREU0KGEsIGIsIGMsIGQpICAoKGEpIHwgKCgoYikgJiAweGYpIDw8IDgpIHwoKChj
KSAmIDB4ZikgPDw0KSB8KChkKSAmIDB4ZikpCisjZGVmaW5lIEdFVE9QQ09ERTUoYSwgYikgICgo
YSkgfCAoKGIpICYgMHhmZikpCisjZGVmaW5lIEdFVE9QQ09ERTYoYSwgYikgICgoYSkgfCAoKGIp
ICYgMHhmZmYpKQorI2RlZmluZSBHRVRPUENPREU3KGEsIGIpICAoKGEpIHwgKCgoYikgJiAweDcp
IDw8IDkpKQorI2RlZmluZSBHRVRPUENPREU4KGEsIGIsIGMpICAoKGEpIHwgKCgoYikgJiAweDcp
IDw8IDkpIHwoKChjKSAmIDB4NykgPDw1KSkKKyNkZWZpbmUgR0VUT1BDT0RFOShhLCBiLCBjKSAg
KChhKSB8ICgoKGIpICYgMHhmKSA8PCA4KSB8KCgoYykgJiAweDcpIDw8NSkpCisjZGVmaW5lIEdF
VE9QQ09ERTEwKGEsIGIsIGMpICAoKGEpIHwgKCgoYikgJiAweDcpIDw8IDkpIHwoKChjKSAmIDB4
RikgPDw0KSkKKyNkZWZpbmUgR0VUT1BDT0RFMTEoYSwgYiwgYykgICgoYSkgfCAoKChiKSAmIDB4
ZikgPDwgNCkgfCgoKGMpICYgMHhmKSkpCisKKworI2RlZmluZSBJTlZBTElEX09QQ09ERSAgIDB4
ZmZmZgorI2RlZmluZSBBRERfT1BDT0RFICAgICAgIDB4MzAwQworI2RlZmluZSBBRERJTU1fT1BD
T0RFICAgIDB4NzAwMAorI2RlZmluZSBBRERDX09QQ09ERSAgICAgIDB4MzAwRQorI2RlZmluZSBB
RERWX09QQ09ERSAgICAgIDB4MzAwRgorCisjZGVmaW5lIEFORF9PUENPREUgICAgICAgMHgyMDA5
CisjZGVmaW5lIEFORElNTV9PUENPREUgICAgMHhDOTAwCisjZGVmaW5lIERJVjBfT1BDT0RFICAg
ICAgMHgyMDA3CisjZGVmaW5lIERJVjFfT1BDT0RFICAgICAgMHgzMDA0CisKKyNkZWZpbmUgQkZf
T1BDT0RFICAgICAgICAweDhCMDAKKyNkZWZpbmUgQkZTX09QQ09ERSAgICAgICAweDhGMDAKKyNk
ZWZpbmUgQlJBX09QQ09ERSAgICAgICAwWEEwMDAKKyNkZWZpbmUgQlJBRl9PUENPREUgICAgICAw
eDAwMjMKKyNkZWZpbmUgTk9QX09QQ09ERSAgICAgICAweDAwMDkKKyNkZWZpbmUgQlNSX09QQ09E
RSAgICAgICAweEIwMDAKKyNkZWZpbmUgUlRTX09QQ09ERSAgICAgICAweDAwMEIKKyNkZWZpbmUg
QlRfT1BDT0RFICAgICAgICAweDg5MDAKKyNkZWZpbmUgQlRTX09QQ09ERSAgICAgICAweDhEMDAK
KyNkZWZpbmUgQlNSRl9PUENPREUgICAgICAweDAwMDMKKworI2RlZmluZSBCUktfT1BDT0RFICAg
ICAgIDB4MDAzQgorI2RlZmluZSBGVFJDX09QQ09ERSAgICAgIDB4RjAzRAorCisjZGVmaW5lIENN
UEVRX09QQ09ERSAgICAgMHgzMDAwCisjZGVmaW5lIENNUEVRSU1NX09QQ09ERSAgMHg4ODAwCisj
ZGVmaW5lIENNUEdFX09QQ09ERSAgICAgMHgzMDAzCisjZGVmaW5lIENNUEdUX09QQ09ERSAgICAg
MHgzMDA3CisjZGVmaW5lIENNUEhJX09QQ09ERSAgICAgMHgzMDA2CisjZGVmaW5lIENNUEhTX09Q
Q09ERSAgICAgMHgzMDAyCisjZGVmaW5lIENNUFBMX09QQ09ERSAgICAgMHg0MDE1CisjZGVmaW5l
IENNUFBaX09QQ09ERSAgICAgMHg0MDExCisjZGVmaW5lIENNUFNUUl9PUENPREUgICAgMHgyMDBD
CisKKyNkZWZpbmUgRFRfT1BDT0RFICAgICAgICAweDQwMTAKKworCisjZGVmaW5lIEZDTVBFUV9P
UENPREUgICAgMHhGMDA0CisjZGVmaW5lIEZDTVBHVF9PUENPREUgICAgMHhGMDA1CisjZGVmaW5l
IERDTVBFUV9PUENPREUgICAgMHhGMDA1CisjZGVmaW5lIERDTVBHVF9PUENPREUgICAgMHhGMDA0
CisKKyNkZWZpbmUgRk1PVl9PUENPREUgICAgICAweEYwMEMKKyNkZWZpbmUgRE1PVl9PUENPREUg
ICAgICAgICAgICAgICAgIDB4MUUwMTkKKyNkZWZpbmUgRE1PVl9XUklURV9SMFJOX09QQ09ERSAg
ICAgIDB4MUUwMEYKKyNkZWZpbmUgRE1PVl9XUklURV9SMFJOX09QQ09ERSAgICAgIDB4MUUwMEYK
KyNkZWZpbmUgRE1PVl9SRUFEX1IwUk5fT1BDT0RFICAgICAgIDB4MUUwMEQKKworCisjZGVmaW5l
IEZBRERfT1BDT0RFICAgICAgMHhGMDAwCisjZGVmaW5lIEZNVUxfT1BDT0RFICAgICAgMHhGMDAy
CisjZGVmaW5lIEZTVUJfT1BDT0RFICAgICAgMHhGMDAxCisjZGVmaW5lIEZESVZfT1BDT0RFICAg
ICAgMHhGMDAzCisKKyNkZWZpbmUgRk5FR19PUENPREUgICAgICAweEYwNEQKKworCisjZGVmaW5l
IEpNUF9PUENPREUgICAgICAgMHg0MDJCCisjZGVmaW5lIEpTUl9PUENPREUgICAgICAgMHg0MDBC
CisKKworI2RlZmluZSBMRFNQUl9PUENPREUgICAgIDB4NDAyQQorI2RlZmluZSBMRFNMUFJfT1BD
T0RFICAgIDB4NDAyNgorCisjZGVmaW5lIE1PVl9PUENPREUgICAgICAgMHg2MDAzCisjZGVmaW5l
IE1PVklNTV9PUENPREUgICAgMHhFMDAwCisKKyNkZWZpbmUgTU9WQl9XUklURV9STl9PUENPREUg
ICAgICAweDIwMDAKKyNkZWZpbmUgTU9WQl9XUklURV9STkRFQ19PUENPREUgICAweDIwMDQKKyNk
ZWZpbmUgTU9WQl9XUklURV9SMFJOX09QQ09ERSAgICAweDAwMDQKKyNkZWZpbmUgTU9WQl9XUklU
RV9PRkZHQlJfT1BDT0RFICAweEMwMDAKKyNkZWZpbmUgTU9WQl9XUklURV9PRkZSTl9PUENPREUg
ICAweDgwMDAKKworI2RlZmluZSBNT1ZCX1JFQURfUk1fT1BDT0RFICAgICAgMHg2MDAwCisjZGVm
aW5lIE1PVkJfUkVBRF9STUlOQ19PUENPREUgICAweDYwMDQKKyNkZWZpbmUgTU9WQl9SRUFEX1Iw
Uk1fT1BDT0RFICAgIDB4MDAwQworI2RlZmluZSBNT1ZCX1JFQURfT0ZGR0JSX09QQ09ERSAgMHhD
NDAwCisjZGVmaW5lIE1PVkJfUkVBRF9PRkZSTV9PUENPREUgICAweDg0MDAKKworI2RlZmluZSBN
T1ZMX1dSSVRFX1JOX09QQ09ERSAgICAgIDB4MjAwMgorI2RlZmluZSBNT1ZMX1dSSVRFX1JOREVD
X09QQ09ERSAgIDB4MjAwNgorI2RlZmluZSBNT1ZMX1dSSVRFX1IwUk5fT1BDT0RFICAgIDB4MDAw
NgorI2RlZmluZSBNT1ZMX1dSSVRFX09GRkdCUl9PUENPREUgIDB4QzIwMAorI2RlZmluZSBNT1ZM
X1dSSVRFX09GRlJOX09QQ09ERSAgIDB4MTAwMAorCisjZGVmaW5lIE1PVkxfUkVBRF9STV9PUENP
REUgICAgICAweDYwMDIKKyNkZWZpbmUgTU9WTF9SRUFEX1JNSU5DX09QQ09ERSAgIDB4NjAwNgor
I2RlZmluZSBNT1ZMX1JFQURfUjBSTV9PUENPREUgICAgMHgwMDBFCisjZGVmaW5lIE1PVkxfUkVB
RF9PRkZHQlJfT1BDT0RFICAweEM2MDAKKyNkZWZpbmUgTU9WTF9SRUFEX09GRlBDX09QQ09ERSAg
IDB4RDAwMAorI2RlZmluZSBNT1ZMX1JFQURfT0ZGUk1fT1BDT0RFICAgMHg1MDAwCisjZGVmaW5l
IE1PVldfV1JJVEVfUk5fT1BDT0RFICAgICAweDIwMDEKKyNkZWZpbmUgTU9WV19SRUFEX1JNX09Q
Q09ERSAgICAgIDB4NjAwMQorI2RlZmluZSBNT1ZXX1JFQURfUjBSTV9PUENPREUgICAgMHgwMDBE
CisjZGVmaW5lIE1PVldfUkVBRF9PRkZQQ19PUENPREUgICAweDkwMDAKKworI2RlZmluZSBNT1ZB
X1JFQURfT0ZGUENfT1BDT0RFICAweEM3MDAKKyNkZWZpbmUgTU9WVF9PUENPREUgICAgICAgICAg
ICAgMHgwMDI5CisKKyNkZWZpbmUgTVVMTF9PUENPREUgICAgICAgICAgICAgMHgwMDA3CisjZGVm
aW5lIFNUU01BQ0xfT1BDT0RFICAgICAgICAgIDB4MDAxQQorI2RlZmluZSBTVFNNQUNIX09QQ09E
RSAgICAgICAgICAweDAwMEEKKyNkZWZpbmUgRE1VTFNMX09QQ09ERSAgICAgICAgICAgMHgzMDBE
CisKKyNkZWZpbmUgTkVHX09QQ09ERSAgICAgICAgICAgICAgMHg2MDBCCisjZGVmaW5lIE5FR0Nf
T1BDT0RFICAgICAgICAgICAgIDB4NjAwQQorCisjZGVmaW5lIFJUU19PUENPREUgICAgICAgICAg
ICAgIDB4MDAwQgorI2RlZmluZSBOT1RfT1BDT0RFICAgICAgICAgICAgICAweDYwMDcKKworI2Rl
ZmluZSBPUl9PUENPREUgICAgICAgICAgICAgICAweDIwMEIKKyNkZWZpbmUgT1JJTU1fT1BDT0RF
ICAgICAgICAgICAgMHhDQjAwCisjZGVmaW5lIE9SQklNTV9PUENPREUgICAgICAgICAgIDB4Q0Yw
MAorCisKKyNkZWZpbmUgU0VUU19PUENPREUgICAgICAgICAgICAgMHgwMDU4CisjZGVmaW5lIFNF
VFRfT1BDT0RFICAgICAgICAgICAgIDB4MDAxOCAKKyNkZWZpbmUgU0hBRF9PUENPREUgICAgICAg
ICAgICAgMHg0MDBDCisjZGVmaW5lIFNIQUxfT1BDT0RFICAgICAgICAgICAgIDB4NDAyMAorI2Rl
ZmluZSBTSEFSX09QQ09ERSAgICAgICAgICAgICAweDQwMjEKKyNkZWZpbmUgU0hMRF9PUENPREUg
ICAgICAgICAgICAgMHg0MDBECisjZGVmaW5lIFNITExfT1BDT0RFICAgICAgICAgICAgIDB4NDAw
MAorI2RlZmluZSBTSExMMl9PUENPREUgICAgICAgICAgICAweDQwMDgKKyNkZWZpbmUgU0hMTDhf
T1BDT0RFICAgICAgICAgICAgMHg0MDE4CisjZGVmaW5lIFNITEwxNl9PUENPREUgICAgICAgICAg
IDB4NDAyOAorCisjZGVmaW5lIFNITFJfT1BDT0RFICAgICAgICAgICAgIDB4NDAwMQorI2RlZmlu
ZSBTSExSMl9PUENPREUgICAgICAgICAgICAweDQwMDkKKyNkZWZpbmUgU0hMUjhfT1BDT0RFICAg
ICAgICAgICAgMHg0MDE5CisjZGVmaW5lIFNITFIxNl9PUENPREUgICAgICAgICAgIDB4NDAyOQor
CisKKyNkZWZpbmUgU1RTUFJfT1BDT0RFICAgICAgICAgICAgMHgwMDJBCisjZGVmaW5lIFNUU0xQ
Ul9PUENPREUgICAgICAgICAgIDB4NDAyMgorI2RlZmluZSBGTE9BVF9PUENPREUgICAgICAgICAg
ICAweEYwMkQKKworI2RlZmluZSBTVUJfT1BDT0RFICAgICAgICAgICAgICAweDMwMDgKKyNkZWZp
bmUgU1VCQ19PUENPREUgICAgICAgICAgICAgMHgzMDBBCisjZGVmaW5lIFNVQlZfT1BDT0RFICAg
ICAgICAgICAgIDB4MzAwQgorI2RlZmluZSBNVUxMX09QQ09ERSAgICAgICAgICAgICAweDAwMDcK
KworI2RlZmluZSBUU1RfT1BDT0RFICAgICAgICAgICAgICAweDIwMDgKKyNkZWZpbmUgVFNUSU1N
X09QQ09ERSAgICAgICAgICAgMHhDODAwCisjZGVmaW5lIFRTVEJfT1BDT0RFICAgICAgICAgICAg
IDB4Q0MwMAorCisjZGVmaW5lIEVYVFVXX09QQ09ERSAgICAgICAgICAgIDB4NjAwRAorCisjZGVm
aW5lIFhPUl9PUENPREUgICAgICAgICAgICAgIDB4MjAwQQorI2RlZmluZSBYT1JJTU1fT1BDT0RF
ICAgICAgICAgICAweENBMDAKKyNkZWZpbmUgWE9SQl9PUENPREUgICAgICAgICAgICAgMHhDRTAw
CisKKyNkZWZpbmUgRk1PVlNfUkVBRF9STV9JTkNfT1BDT0RFICAgICAgICAweEYwMDkKKyNkZWZp
bmUgRk1PVlNfUkVBRF9STV9PUENPREUgICAgICAgICAgICAweEYwMDgKKyNkZWZpbmUgRk1PVlNf
UkVBRF9SMFJNX09QQ09ERSAgICAgICAgICAweEYwMDYKKyNkZWZpbmUgRk1PVlNfV1JJVEVfUk5f
T1BDT0RFICAgICAgICAgICAweEYwMEEKKyNkZWZpbmUgRk1PVlNfV1JJVEVfUk5fREVDX09QQ09E
RSAgICAgICAweEYwMEIKKyNkZWZpbmUgRk5FR19PUENPREUgICAgICAgICAgICAgICAgICAgICAw
eEYwNEQKKyNkZWZpbmUgRk1PVl9PUENPREUgICAgICAgICAgICAgICAgICAgICAweEYwMEMKKyNk
ZWZpbmUgRk1PVlNfV1JJVEVfUjBSTl9PUENPREUgICAgICAgICAweEYwMDcKKworI2RlZmluZSBM
RFNfUk1fRlBVTF9PUENPREUgICAgICAgICAgICAgIDB4NDA1QQorI2RlZmluZSBGTERTX0ZSTV9G
UFVMX09QQ09ERSAgICAgICAgICAgIDB4RjAxRAorI2RlZmluZSBTVFNfRlBVTF9STl9PUENPREUg
ICAgICAgICAgICAgIDB4MDA1QQorI2RlZmluZSBGU1RTX0ZQVUxfRlJOX09QQ09ERSAgICAgICAg
ICAgIDB4RjAwRAorCisjZGVmaW5lIExEU0ZQU0NSX09QQ09ERSAgICAgICAgICAgICAgICAgMHg0
MDZBCisjZGVmaW5lIFNUU0ZQU0NSX09QQ09ERSAgICAgICAgICAgICAgICAgMHgwMDZBCisjZGVm
aW5lIExEU1JNRlBVTF9PUENPREUgICAgICAgICAgICAgICAgMHg0MDVBCisjZGVmaW5lIEZTVFNG
UFVMRlJOX09QQ09ERSAgICAgICAgICAgICAgMHhGMDBECisKKyNkZWZpbmUgQ0xSVF9PUENPREUg
OAorICAKKyNkZWZpbmUgU0VDT05EXzRfQklUUyh4KSAgICAoKCh4KSAmIDB4ZjAwKSA+PiA4KQor
I2RlZmluZSBUSElSRF80X0JJVFMoeCkgICAgICgoKHgpICYgMHhmMCkgPj4gNCkKKyNkZWZpbmUg
Rk9VUlRIXzRfQklUUyh4KSAgICAoKHgpICYgMHhmKQorI2RlZmluZSBTRUNPTkRfOF9CSVRTKHgp
ICAgICgoeCkgJiAweGZmKQorI2RlZmluZSBSSUdIVF8xMl9CSVRTKHgpICAgICgoeCkgJiAweGZm
ZikKKyNkZWZpbmUgU0VDT05EX0RfM19CSVRTKHgpICAgICgoKHgpICYgMHhFMDApID4+IDkpCisj
ZGVmaW5lIFRISVJEX0RfM19CSVRTKHgpICAgICAoKCh4KSAmIDB4RTApID4+IDUpCisKKworI2Rl
ZmluZSBBTElHTlVQKHgpICAgICAgKCgoaW50KSh4KSArICAgKHNpemVvZihpbnQpIC0gMSkpICYg
KH4oc2l6ZW9mKGludCkgLSAxKSkpCisjZGVmaW5lIEFMSUdORE4oeCkgICAgICAoKGludCkoeCkg
JiAofihzaXplb2YoaW50KSAtIDEpKSkKKyNkZWZpbmUgTk9UQUxJR05FRCh4KSAgICgoaW50KSh4
KSYoc2l6ZW9mKGludCkgLSAxKSkKKworI2RlZmluZSBNQVNLNCAgICAgKCgweGYgPDwgMTIpIHwg
MHhmKQorI2RlZmluZSBNQVNLMyAgICAgKCgweGYgPDwgMTIpIHwgMHhmZikKKyNkZWZpbmUgTUFT
SzIgICAgICgweGZmIDw8IDgpCisjZGVmaW5lIE1BU0sxICAgICAoMHhmIDw8IDEyKQorCisjaW5j
bHVkZSAiQXNzZW1ibGVyQnVmZmVyLmgiCisjaW5jbHVkZSAiQXNzZW1ibGVyQnVmZmVyV2l0aENv
bnN0YW50UG9vbC5oIgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRp
b25zLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsKK3R5cGVk
ZWYgdWludDE2X3QgU0g0V29yZDsKKworbmFtZXNwYWNlIFNINCB7CisKK3R5cGVkZWYgZW51bSB7
CisgICAgICAgIFIwICA9IDAsCisgICAgICAgIFIxICA9IDEsCisgICAgICAgIFIyICA9IDIsCisg
ICAgICAgIFIzICA9IDMsCisgICAgICAgIFI0ICA9IDQsCisgICAgICAgIFI1ICA9IDUsCisgICAg
ICAgIFI2ICA9IDYsCisgICAgICAgIFI3ICA9IDcsCisgICAgICAgIFI4ICA9IDgsCisgICAgICAg
IFI5ICA9IDksCisgICAgICAgIFIxMCA9IDEwLAorICAgICAgICBSMTEgPSAxMSwKKyAgICAgICAg
UjEyID0gMTIsCisgICAgICAgIFIxMyA9IDEzLAorICAgICAgICBSMTQgPSAxNCwKKyAgICAgICAg
UjE1ID0gMTUsCisgICAgICAgIFNQICA9IFIxNSwKKyAgICAgICAgRlAgID0gUjE0LAorICAgICAg
ICAvLyBQc2V1ZG8tcmVnaXN0ZXIgZm9yIFBDICYgUFIKKyAgICAgICAgUEMgID0gMTYsCisgICAg
ICAgIFBSICA9IDE3LAorICAgICAgICAgIAorICAgICAgICBVbmtub3duID0gLTEKK30gUmVnaXN0
ZXJJRDsKKyAgICAKK3R5cGVkZWYgZW51bSB7CisgICAgICAgIEZSMCAgPSAwLAorICAgICAgICBG
UjEgID0gMSwKKyAgICAgICAgRlIyICA9IDIsCisgICAgICAgIEZSMyAgPSAzLAorICAgICAgICBG
UjQgID0gNCwKKyAgICAgICAgRlI1ICA9IDUsCisgICAgICAgIEZSNiAgPSA2LAorICAgICAgICBG
UjcgID0gNywKKyAgICAgICAgRlI4ICA9IDgsCisgICAgICAgIEZSOSAgPSA5LAorICAgICAgICBG
UjEwID0gMTAsCisgICAgICAgIEZSMTEgPSAxMSwKKyAgICAgICAgRlIxMiA9IDEyLAorICAgICAg
ICBGUjEzID0gMTMsCisgICAgICAgIEZSMTQgPSAxNCwKKyAgICAgICAgRlIxNSA9IDE1LAorICAg
ICAgICAvKmRvdWJsZSAqLworICAgICAgICBEUjAgID0gMCwKKyAgICAgICAgRFIyICA9IDIsCisg
ICAgICAgIERSNCAgPSA0LAorICAgICAgICBEUjYgID0gNiwKKyAgICAgICAgRFI4ICA9IDgsCisg
ICAgICAgIERSMTAgPSAxMCwKKyAgICAgICAgRFIxMiA9IDEyLAorICAgICAgICBEUjE0ID0gMTQs
CisKK30gRlBSZWdpc3RlcklEOworfQorCitjbGFzcyBTSDRBc3NlbWJsZXIgeworcHVibGljOgor
ICAgIHR5cGVkZWYgU0g0OjpSZWdpc3RlcklEIFJlZ2lzdGVySUQ7CisgICAgdHlwZWRlZiBTSDQ6
OkZQUmVnaXN0ZXJJRCBGUFJlZ2lzdGVySUQ7CisgICAgCisgICAgdHlwZWRlZiBBc3NlbWJsZXJC
dWZmZXJXaXRoQ29uc3RhbnRQb29sPDUxMiwgNCwgMiwgU0g0QXNzZW1ibGVyPiBTSDRCdWZmZXI7
CisgICAgCisgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgc2NyYXRjaCA9IFNINDo6UjEwOwor
ICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIHNjcmF0Y2gxID0gU0g0OjpSMTE7CisgICAgaW50
IGNsYWltc2NyYXRjaFJlZzsKKworICAgIGVudW0geworICAgICAgICBwYWRGb3JBbGlnbjggID0g
MHgwMCwKKyAgICAgICAgcGFkRm9yQWxpZ24xNiA9IDB4MDAwOSwKKyAgICAgICAgcGFkRm9yQWxp
Z24zMiA9IDB4MDAwOTAwMDksCisgICAgfTsKKyAgICAgICAKKyAgICBTSDRBc3NlbWJsZXIoKQor
ICAgIHsKKyAgICAgICAgY2xhaW1zY3JhdGNoUmVnID0gMHgwOworICAgIH0gIAorICAgIAorICAg
IC8qIFNINCBjb25kaXRpb24gY29kZXMgKi8KKyAgICAgICAgdHlwZWRlZiBlbnVtIHsKKyAgICAg
ICAgICAgIEVRID0gMHgwLCAvLyBFcXVhbAorICAgICAgICAgICAgTkUgPSAweDEsIC8vIE5vdCBF
cXVhbAorICAgICAgICAgICAgSFMgPSAweDIsIC8vIFVuc2lnZW5kIEdyZWF0ZXIgVGhhbiBlcXVh
bAorICAgICAgICAgICAgSEkgPSAweDMsIC8vIFVuc2lnZW5kIEdyZWF0ZXIgVGhhbgorICAgICAg
ICAgICAgTFMgPSAweDQsIC8vIFVuc2lnZW5kIExvd2VyIG9yIFNhbWUKKyAgICAgICAgICAgIExJ
ID0gMHg1LCAvLyBVbnNpZ2VuZCBMb3dlcgorICAgICAgICAgICAgR0UgPSAweDYsIC8vIEdyZWF0
ZXIgb3IgRXF1YWwKKyAgICAgICAgICAgIExUID0gMHg3LCAvLyBMZXNzIFRoYW4KKyAgICAgICAg
ICAgIEdUID0gMHg4LCAvLyBHcmVhdGVyIFRoYW4KKyAgICAgICAgICAgIExFID0gMHg5LCAvLyBM
ZXNzIG9yIEVxdWFsCisgICAgICAgICAgICBPRiA9IDB4YSwgLy8gT3ZlckZsb3cKKyAgICAgICAg
fSBDb25kaXRpb247CisgICAgICAgIAorICAgIC8vIE9wYXF1ZSBsYWJlbCB0eXBlcworICAgIAor
cHVibGljOgorCisgICAgY2xhc3MgSm1wU3JjIHsKKyAgICAgICAgZnJpZW5kIGNsYXNzIFNINEFz
c2VtYmxlcjsKKyAgICBwdWJsaWM6CisgICAgICAgIEptcFNyYygpCisgICAgICAgICAgICA6IG1f
b2Zmc2V0KC0xKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICAg
IEptcFNyYyhpbnQgb2Zmc2V0KQorICAgICAgICAgICAgOiBtX29mZnNldChvZmZzZXQpCisgICAg
ICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIGludCBtX29mZnNldDsKKyAgICB9OworICAgIAor
ICAgIGNsYXNzIEptcERzdCB7CisgICAgICAgIGZyaWVuZCBjbGFzcyBTSDRBc3NlbWJsZXI7Cisg
ICAgcHVibGljOgorICAgICAgICBKbXBEc3QoKQorICAgICAgICAgICAgOiBtX29mZnNldCgtMSkK
KyAgICAgICAgICAgICwgbV91c2VkKGZhbHNlKQorICAgICAgICB7CisgICAgICAgIH0KKworICAg
ICAgICBib29sIGlzVXNlZCgpIGNvbnN0IHsgcmV0dXJuIG1fdXNlZDsgfQorICAgICAgICB2b2lk
IHVzZWQoKSB7IG1fdXNlZCA9IHRydWU7IH0KKworCisgICAgcHJpdmF0ZToKKyAgICAgICAgSm1w
RHN0KGludCBvZmZzZXQpCisgICAgICAgICAgICA6IG1fb2Zmc2V0KG9mZnNldCkKKyAgICAgICAg
ICAgICwgbV91c2VkKGZhbHNlKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBpbnQg
bV9vZmZzZXQgOiAzMTsKKyAgICAgICAgYm9vbCBtX3VzZWQgOiAxOworICAgIH07CisKKyAgICBi
b29sIElzSW1tZWRpYXRlKGludCBjb25zdGFudCkgCisgICAgeyAgICAgICAgCisgICAgICAgIGlm
ICgoY29uc3RhbnQgPD0xMjcpICYmIChjb25zdGFudCA+PSAtMTI4KSkKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgIAorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisKKyAgICBS
ZWdpc3RlcklEIGNsYWltU2NyYXRjaCgpCisgICAgeworICAgICAgICAgLyogMTAxID0+IHNjcmF0
Y2gxIHJlbGVhc2VkICovCisgICAgICAgICBBU1NFUlQoKGNsYWltc2NyYXRjaFJlZyAhPSAweDMp
KTsKKyAgICAgICAgIFJlZ2lzdGVySUQgc2NyYXRjaFJlZyA9IHNjcmF0Y2g7CisKKyAgICAgICAg
IGlmICghKGNsYWltc2NyYXRjaFJlZyAmIDB4MSkpCisgICAgICAgICAgICAgY2xhaW1zY3JhdGNo
UmVnID0gKGNsYWltc2NyYXRjaFJlZyB8IDB4MSk7CisgICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgICBjbGFpbXNjcmF0Y2hSZWcgPSAoY2xhaW1zY3JhdGNoUmVnIHwgMHgyKTsKKyAgICAgICAg
ICAgICBzY3JhdGNoUmVnID0gc2NyYXRjaDE7CisgICAgICAgICB9CisgICAgICAgICByZXR1cm4g
c2NyYXRjaFJlZzsKKyAgICAgfQorCisgICAgIHZvaWQgcmVsZWFzZVNjcmF0Y2goUmVnaXN0ZXJJ
RCBzY3JhdGNoUikgCisgICAgIHsgICAKKyAgICAgICAgIGlmIChzY3JhdGNoUiA9PSAgc2NyYXRj
aCkKKyAgICAgICAgICAgICBjbGFpbXNjcmF0Y2hSZWcgPSAoY2xhaW1zY3JhdGNoUmVnICYgMHgy
KTsKKyAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICBjbGFpbXNjcmF0Y2hSZWcgPSAoY2xhaW1z
Y3JhdGNoUmVnICYgMHgxKTsKKyAgICAgfSAKKworICAgIC8vIFN0YWNrIG9wZXJhdGlvbnM6CisK
KyAgICB2b2lkIHB1c2hfcihSZWdpc3RlcklEIHJlZykKKyAgICB7CisgICAgICAgIHVpbnQxNl90
IG9wYzsKKyAgICAgICAgCisgICAgICAgIGlmIChyZWcgPT0gU0g0OjpQUikKKyAgICAgICAgICAg
IG9wYyA9IEdFVE9QQ09ERTIoU1RTTFBSX09QQ09ERSwgU0g0OjpTUCk7ICAgLyogU1RTLkwgUFIs
IEAtUiVkICovCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG9wYyA9IEdFVE9QQ09ERTEoTU9W
TF9XUklURV9STkRFQ19PUENPREUsIFNINDo6U1AsIHJlZyk7IC8qIG1vdi5sIHJlZywgQC1TUCAq
LworCisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lkIHBvcF9yKFJl
Z2lzdGVySUQgcmVnKQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjOworICAgICAgICAKKyAg
ICAgICAgaWYgKHJlZyA9PSBTSDQ6OlBSKQorICAgICAgICAgICAgb3BjID0gR0VUT1BDT0RFMihM
RFNMUFJfT1BDT0RFLCBTSDQ6OlNQKTsgIC8qIExEUy5MIEBSJWQrLCBQUiovCisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIG9wYyA9IEdFVE9QQ09ERTEoTU9WTF9SRUFEX1JNSU5DX09QQ09ERSwg
cmVnLCBTSDQ6OlNQKTsgLyogbW92LmwgQCtzcmMsIGRlc3Q7Ki8KKyAgICAgICAgCisgICAgICAg
IG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lkIHB1c2hfaTMyKGludCBpbW0pCisg
ICAgeworICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBM
b2FkQ29uc3RhbnQoKGludClpbW0sIHNjcik7CisgICAgICAgIHB1c2hfcihzY3IpOworICAgICAg
ICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgIH0KKworICAgIHZvaWQgcHVzaF9tKGludCBvZmZz
ZXQsIFJlZ2lzdGVySUQgYmFzZSkKKyAgICB7CisgICAgICAgIGlmICgob2Zmc2V0IDwgMCkgfHwg
KG9mZnNldCA+PSA2NCkpIHsKKyAgICAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0
Y2goKTsgCisgICAgICAgICAgICAKKyAgICAgICAgICAgIExvYWRDb25zdGFudCgoaW50KW9mZnNl
dCwgc2NyKTsKKyAgICAgICAgICAgIGFkZGxfcnIoYmFzZSwgc2NyKTsKKyAgICAgICAgICAgIG1v
dmxfbXIoc2NyLCBTSDQ6OlNQKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgcmVsZWFzZVNj
cmF0Y2goc2NyKTsKKyAgICAgICAgfSBlbHNlIGlmIChvZmZzZXQpCisgICAgICAgICAgICBtb3Zs
X21yKG9mZnNldCA+PiAyLCBiYXNlLCBTSDQ6OlNQKTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgbW92bF9tcihiYXNlLCBTSDQ6OlNQKTsKKyAgICAgICAgCisgICAgICAgIGFkZGxfaThyKC00
LCBTSDQ6OlNQKTsgICAgICAgIAorICAgIH0KKworICAgIHZvaWQgcG9wX20oaW50IG9mZnNldCwg
UmVnaXN0ZXJJRCBiYXNlKQorICAgIHsgICAgICAgICAKKyAgICAgICAgaWYgKChvZmZzZXQgPCAw
KSB8fCAob2Zmc2V0ID49IDY0KSkgeworICAgICAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFp
bVNjcmF0Y2goKTsKKyAgICAgICAgICAgIExvYWRDb25zdGFudCgoaW50KW9mZnNldCwgc2NyKTsK
KyAgICAgICAgICAgIGFkZGxfcnIoYmFzZSwgc2NyKTsKKyAgICAgICAgICAgIG1vdmxfcm0oU0g0
OjpTUCwgc2NyKTsKKyAgICAgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgICAgIH0g
ZWxzZSBpZiAob2Zmc2V0KQorICAgICAgICAgICAgbW92bF9ybShTSDQ6OlNQLCBvZmZzZXQgPj4g
MiwgYmFzZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1vdmxfcm0oU0g0OjpTUCwgYmFz
ZSk7CisgICAgICAgIAorICAgICAgICBhZGRsX2k4cig0LCBTSDQ6OlNQKTsKKyAgICB9CisgICAg
CisgICAgdm9pZCBtb3Z0KFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qg
b3BjID0gR0VUT1BDT0RFMihNT1ZUX09QQ09ERSwgZHN0KTsKKyAgICAgICAgb25lU2hvcnRPcChv
cGMpOworICAgIH0KKworCisgICAgLy8gQXJpdGhtZXRpYyBvcGVyYXRpb25zOgorCisgICAgdm9p
ZCBhZGRsX3JyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAg
IHVpbnQxNl90IG9wYyA9IEdFVE9QQ09ERTEoQUREX09QQ09ERSwgZHN0LCBzcmMpOworICAgICAg
ICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYWRkY2xfcnIoUmVnaXN0
ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KSAvLyBUYml0IHNldCBpZiBvdmVyZmxvdworICAgIHsK
KyAgICAgICAgdWludDE2X3Qgb3BjID0gR0VUT1BDT0RFMShBRERDX09QQ09ERSwgZHN0LCBzcmMp
OworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorICAgIAorICAgIHZvaWQgYWRkdmxf
cnIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KSAvLyBUYml0IHNldCBpZiBvdmVyZmxv
dworICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gR0VUT1BDT0RFMShBRERWX09QQ09ERSwg
ZHN0LCBzcmMpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfSAgICAgCisKKyAgICB2
b2lkIGFkZGxfaThyKGludCBpbW04LCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIEFT
U0VSVCgoaW1tOCA8PTEyNykgJiYgKGltbTggPj0gLTEyOCkpOworICAgICAgICAKKyAgICAgICAg
dWludDE2X3Qgb3BjID0gR0VUT1BDT0RFMyhBRERJTU1fT1BDT0RFLCBkc3QsIGltbTgpOworICAg
ICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCBhbmRsX3JyKFJlZ2lzdGVy
SUQgc3JjLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IEdF
VE9QQ09ERTEoQU5EX09QQ09ERSwgZHN0LCBzcmMpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7
CisKKyAgICB9CisgICAgCisgICAgdm9pZCBhZGRsX2lyKGludCBpbW0sIFJlZ2lzdGVySUQgZHN0
KQorICAgIHsKKyAgICAgICAgaWYgKElzSW1tZWRpYXRlKGltbSkpCisgICAgICAgICAgICBhZGRs
X2k4cihpbW0sIGRzdCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgUmVnaXN0ZXJJRCBz
Y3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgICAgIExvYWRDb25zdGFudCgoaW50KWltbSwg
c2NyKTsKKyAgICAgICAgICAgIHVpbnQxNl90IG9wYyA9IEdFVE9QQ09ERTEoQUREX09QQ09ERSwg
ZHN0LCBzY3IpOworICAgICAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgICAgICAgICAgcmVs
ZWFzZVNjcmF0Y2goc2NyKTsgIAorICAgICAgICB9CisgICAgICAgICAgICAgIAorICAgIH0KKwor
ICAgIHZvaWQgYW5kbF9pOHIoaW50IGltbTgsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKChpbW04IDw9IDI1NSkgJiYgKGltbTggPj0gMCkpOworICAgICAgICBBU1NFUlQo
ZHN0ID09IFNINDo6UjApOworICAgICAgICAKKyAgICAgICAgdWludDE2X3Qgb3BjID0gR0VUT1BD
T0RFNShBTkRJTU1fT1BDT0RFLCBpbW04KTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAg
IH0KKyAgICAKKyAgICB2b2lkIGRpdjFsX3JyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRz
dCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IEdFVE9QQ09ERTEoRElWMV9PUENPREUs
IGRzdCwgc3JjKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworCisgICAgfQorICAgIAorICAg
IHZvaWQgZGl2MGxfcnIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAg
ICAgICAgdWludDE2X3Qgb3BjID0gR0VUT1BDT0RFMShESVYwX09QQ09ERSwgZHN0LCBzcmMpOwor
ICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisKKyAgICB9ICAgIAorCisgICAgdm9pZCBub3RsX3Io
UmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qg
b3BjID0gR0VUT1BDT0RFMShOT1RfT1BDT0RFLCBkc3QsIHNyYyk7CisgICAgICAgIG9uZVNob3J0
T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lkIG9ybF9ycihSZWdpc3RlcklEIHNyYywgUmVnaXN0
ZXJJRCBkc3QpCisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBHRVRPUENPREUxKE9SX09Q
Q09ERSwgZHN0LCBzcmMpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisKKyAgICB9CisKKyAg
ICB2b2lkIG9ybF9pOHIoaW50IGltbTgsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAg
QVNTRVJUKChpbW04IDw9IDI1NSkgJiYgKGltbTggPj0gMCkpOworICAgICAgICBBU1NFUlQoZHN0
ID09IFNINDo6UjApOworICAgICAgICAKKyAgICAgICAgdWludDE2X3Qgb3BjID0gR0VUT1BDT0RF
NShPUklNTV9PUENPREUsIGltbTgpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQor
CisKKyAgICB2b2lkIHN1YmxfcnIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQorICAg
IHsKKyAgICAgICAgIHVpbnQxNl90IG9wYyA9IEdFVE9QQ09ERTEoU1VCX09QQ09ERSwgZHN0LCBz
cmMpOworICAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHN1
YnZsX3JyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCkgLy8gY2hlY2sgb3ZlcmZsb3cK
KyAgICB7CisgICAgICAgICB1aW50MTZfdCBvcGMgPSBHRVRPUENPREUxKFNVQlZfT1BDT0RFLCBk
c3QsIHNyYyk7CisgICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorICAgIAorICAgIHZv
aWQgc3VibF9pbW1yKGludCBpbW0sIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgaWYg
KElzSW1tZWRpYXRlKC1pbW0pKQorICAgICAgICAgICAgYWRkbF9pOHIoLWltbSwgZHN0KTsKKyAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgp
OworICAgICAgICAgICAgTG9hZENvbnN0YW50KChpbnQpaW1tLCBzY3IpOworICAgICAgICAgICAg
dWludDE2X3Qgb3BjID0gR0VUT1BDT0RFMShTVUJfT1BDT0RFLCBkc3QsIHNjcik7CisgICAgICAg
ICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOyAg
CisgICAgICAgIH0KKworICAgIH0KKworCisgICAgdm9pZCB4b3JsX3JyKFJlZ2lzdGVySUQgc3Jj
LCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IEdFVE9QQ09E
RTEoWE9SX09QQ09ERSwgZHN0LCBzcmMpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAg
fQorCisgICAgdm9pZCB4b3JsX2k4cihpbnQgaW1tOCwgUmVnaXN0ZXJJRCBkc3QpCisgICAgewor
ICAgICAgICBBU1NFUlQoKGltbTggPD0gMjU1KSAmJiAoaW1tOCA+PSAwKSk7CisgICAgICAgIEFT
U0VSVChkc3QgPT0gU0g0OjpSMCk7CisgICAgICAgIAorICAgICAgICB1aW50MTZfdCBvcGMgPSBH
RVRPUENPREU1KFhPUklNTV9PUENPREUsIGltbTgpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7
CisgICAgfQorCisgICAgdm9pZCBzaGxsX2k4cihpbnQgaW1tLCBSZWdpc3RlcklEIGRzdCkKKyAg
ICB7CisgICAgICAgIHVpbnQxNl90IG9wYzsKKyAgICAgICAgCisgICAgICAgIHN3aXRjaCAoaW1t
KSB7CisgICAgICAgIGNhc2UgMTogb3BjID0gR0VUT1BDT0RFMihTSExMX09QQ09ERSwgZHN0KTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDI6IG9wYyA9IEdFVE9QQ09ERTIoU0hM
TDJfT1BDT0RFLCBkc3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgODogb3Bj
ID0gR0VUT1BDT0RFMihTSExMOF9PUENPREUsIGRzdCk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSAxNjogb3BjID0gR0VUT1BDT0RFMihTSExMMTZfT1BDT0RFLCBkc3QpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisKKyAgICB9Cisg
ICAgCisgICAgdm9pZCBuZWcoUmVnaXN0ZXJJRCBkc3QsIFJlZ2lzdGVySUQgc3JjKQorICAgIHsK
KyAgICAgICAgdWludDE2X3Qgb3BjID0gR0VUT1BDT0RFMShORUdfT1BDT0RFLCBkc3QsIHNyYyk7
CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzaGxsX3Jy
KFJlZ2lzdGVySUQgZHN0LCBSZWdpc3RlcklEIHJTaGlmdCkKKyAgICB7IAorICAgICAgICAvKiBz
cmMgPDwgclNoaWZ0Ki8KKyAgICAgICAgdWludDE2X3Qgb3BjID0gR0VUT1BDT0RFMShTSExEX09Q
Q09ERSwgZHN0LCByU2hpZnQpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisg
ICAgdm9pZCBzaGxyX3JyKFJlZ2lzdGVySUQgZHN0LCBSZWdpc3RlcklEIHJTaGlmdCkKKyAgICB7
CisgICAgICAgIC8qIHNyYyA+PiByU2hpZnQqLworICAgICAgICBuZWcoclNoaWZ0LCByU2hpZnQp
OworICAgICAgICBzaGxsX3JyKGRzdCwgclNoaWZ0KTsKKyAgICB9CisKKyAgICB2b2lkIHNoYXJf
cnIoUmVnaXN0ZXJJRCBkc3QsIFJlZ2lzdGVySUQgclNoaWZ0KQorICAgIHsKKyAgICAgICAgLyog
c3JjID4+PiByU2hpZnQqLworICAgICAgICBuZWcoclNoaWZ0LCByU2hpZnQpOworICAgICAgICBz
aGFfcnIoZHN0LCByU2hpZnQpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNoYV9ycihSZWdpc3Rl
cklEIGRzdCwgUmVnaXN0ZXJJRCByU2hpZnQpCisgICAgeworICAgICAgICAvKiBzcmMgPj4+IHJT
aGlmdCovCisgICAgICAgIHVpbnQxNl90IG9wYyA9IEdFVE9QQ09ERTEoU0hBRF9PUENPREUsIGRz
dCwgclNoaWZ0KTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKyAgICAKKyAgICB2
b2lkIHNobHJfaThyKGludCBpbW0sIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgdWlu
dDE2X3Qgb3BjOworICAgICAgICAKKyAgICAgICAgc3dpdGNoIChpbW0pIHsKKyAgICAgICAgY2Fz
ZSAxOiBvcGMgPSBHRVRPUENPREUyKFNITFJfT1BDT0RFLCBkc3QpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgMjogb3BjID0gR0VUT1BDT0RFMihTSExSMl9PUENPREUsIGRzdCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSA4OiBvcGMgPSBHRVRPUENPREUyKFNI
TFI4X09QQ09ERSwgZHN0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDE2OiBv
cGMgPSBHRVRPUENPREUyKFNITFIxNl9PUENPREUsIGRzdCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgZGVmYXVsdDogQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKworICAgIH0KKworCisgCisgICAgdm9pZCBp
bXVsbF9ycihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICB1
aW50MTZfdCBvcGMgPSBHRVRPUENPREUxKE1VTExfT1BDT0RFLCBkc3QsIHNyYyk7CisgICAgICAg
IG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBkbXVsc2xfcnIoUmVnaXN0
ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0g
R0VUT1BDT0RFMShETVVMU0xfT1BDT0RFLCBkc3QsIHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Ao
b3BjKTsKKyAgICB9ICAgIAorICAgIAorICAgIHZvaWQgc3RzbWFjbChSZWdpc3RlcklEIHJlZykK
KyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IEdFVE9QQ09ERTIoU1RTTUFDTF9PUENPREUs
IHJlZyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBz
dHNtYWNoKFJlZ2lzdGVySUQgcmVnKQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gR0VU
T1BDT0RFMihTVFNNQUNIX09QQ09ERSwgcmVnKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOwor
ICAgIH0KKyAgICAKKyAgICAvLyBDb21wYXJpc29uczoKKworICAgIHZvaWQgY21wbF9ycihSZWdp
c3RlcklEIGxlZnQsIFJlZ2lzdGVySUQgcmlnaHQsIENvbmRpdGlvbiBjb25kKQorICAgIHsKKyAg
ICAgICAgdWludDE2X3Qgb3BjOworICAgICAgICAKKyAgICAgICAgc3dpdGNoIChjb25kKSB7Cisg
ICAgICAgIGNhc2UgTkU6IG9wYyA9IEdFVE9QQ09ERTEoQ01QRVFfT1BDT0RFLCByaWdodCwgbGVm
dCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHVDogb3BjID0gR0VUT1BDT0RF
MShDTVBHVF9PUENPREUsIHJpZ2h0LCBsZWZ0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIEVROiBvcGMgPSBHRVRPUENPREUxKENNUEVRX09QQ09ERSwgcmlnaHQsIGxlZnQpOwor
ICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgIAorICAgICAgICBjYXNlIEdFOiBvcGMgPSBHRVRP
UENPREUxKENNUEdFX09QQ09ERSwgcmlnaHQsIGxlZnQpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgSFM6IG9wYyA9IEdFVE9QQ09ERTEoQ01QSFNfT1BDT0RFLCByaWdodCwgbGVm
dCk7IC8vIEhTCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBISTogb3BjID0gR0VU
T1BDT0RFMShDTVBISV9PUENPREUsIHJpZ2h0LCBsZWZ0KTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIExJOiBvcGMgPSBHRVRPUENPREUxKENNUEhJX09QQ09ERSwgbGVmdCwgcmln
aHQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTFM6IG9wYyA9IEdFVE9QQ09E
RTEoQ01QSFNfT1BDT0RFLCBsZWZ0LCByaWdodCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBMRTogb3BjID0gR0VUT1BDT0RFMShDTVBHRV9PUENPREUsIGxlZnQsIHJpZ2h0KTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIExUOiBvcGMgPSBHRVRPUENPREUxKENN
UEdUX09QQ09ERSwgbGVmdCwgcmlnaHQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRl
ZmF1bHQ6IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorICAgIAorICAgIHZvaWQgY21wbF9pcihpbnQgaW1t
LCBSZWdpc3RlcklEIGRzdCwgQ29uZGl0aW9uIGNvbmQpCisgICAgeworICAgICAgICBpZiAoKGNv
bmQgPT0gRVEpICYmIChkc3QgPT0gU0g0OjpSMCkgJiYgSXNJbW1lZGlhdGUoaW1tKSkgeworICAg
ICAgICAgICAgdWludDE2X3Qgb3BjID0gR0VUT1BDT0RFNShDTVBFUUlNTV9PUENPREUsIGltbSk7
CisgICAgICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICAKKyAgICAgICAg
ICAgIExvYWRDb25zdGFudCgoaW50KWltbSwgc2NyKTsgICAgCisgICAgICAgICAgICBjbXBsX3Jy
KHNjciwgZHN0LCBjb25kKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIHJlbGVhc2VT
Y3JhdGNoKHNjcik7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCBjbXBsX21yKGlu
dCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBsZWZ0LCBDb25kaXRpb24gY29u
ZCkKKyAgICB7CisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAg
ICAgICAKKyAgICAgICAgaWYgKChvZmZzZXQgPCAwKSB8fCAob2Zmc2V0ID49IDY0KSkgeworICAg
ICAgICAgICAgTG9hZENvbnN0YW50KChpbnQpb2Zmc2V0LCBzY3IpOworICAgICAgICAgICAgYWRk
bF9ycihiYXNlLCBzY3IpOworICAgICAgICAgICAgbW92bF9tcihzY3IsIHNjcik7CisgICAgICAg
IH0gZWxzZSBpZiAob2Zmc2V0KQorICAgICAgICAgICAgbW92bF9tcihvZmZzZXQgPj4gMiwgYmFz
ZSwgc2NyKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbW92bF9tcihiYXNlLCBzY3IpOwor
ICAgICAgICAKKyAgICAgICAgY21wbF9ycihzY3IsIGxlZnQsIGNvbmQpOworICAgICAgICByZWxl
YXNlU2NyYXRjaChzY3IpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNtcGxfcm0oUmVnaXN0ZXJJ
RCByaWdodCwgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBDb25kaXRpb24gY29uZCkKKyAg
ICB7CisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgICAK
KyAgICAgICAgaWYgKChvZmZzZXQgPCAwKSB8fCAob2Zmc2V0ID49IDY0KSkgeworICAgICAgICAg
ICAgTG9hZENvbnN0YW50KChpbnQpb2Zmc2V0LCBzY3IpOworICAgICAgICAgICAgYWRkbF9ycihi
YXNlLCBzY3IpOworICAgICAgICAgICAgbW92bF9tcihzY3IsIHNjcik7CisgICAgICAgIH0gZWxz
ZSBpZiAob2Zmc2V0KQorICAgICAgICAgICAgbW92bF9tcihvZmZzZXQgPj4gMiwgYmFzZSwgc2Ny
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbW92bF9tcihiYXNlLCBzY3IpOworICAgICAg
ICAKKyAgICAgICAgY21wbF9ycihyaWdodCwgc2NyLCBjb25kKTsKKyAgICAgICAgcmVsZWFzZVNj
cmF0Y2goc2NyKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjbXBsX2ltKGludCBpbW0sIGludCBv
ZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgQ29uZGl0aW9uIGNvbmQpIAorICAgIHsKKyAgICAKKyAg
ICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgUmVnaXN0ZXJJ
RCBzY3IxID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgICAKKyAgICAgICAgaWYgKChvZmZzZXQg
PCAwKSB8fCAob2Zmc2V0ID49IDY0KSkgeworICAgICAgICAgICAgTG9hZENvbnN0YW50KChpbnQp
b2Zmc2V0LCBzY3IpOworICAgICAgICAgICAgYWRkbF9ycihiYXNlLCBzY3IpOworICAgICAgICAg
ICAgbW92bF9tcihzY3IsIHNjcik7CisgICAgICAgIH0gZWxzZSBpZiAob2Zmc2V0KQorICAgICAg
ICAgICAgbW92bF9tcihvZmZzZXQgPj4gMiwgYmFzZSwgc2NyKTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgbW92bF9tcihiYXNlLCBzY3IpOworICAgICAgICAKKyAgICAgICAgTG9hZENvbnN0
YW50KGltbSwgc2NyMSk7ICAgICAgICAKKyAgICAgICAgY21wbF9ycihzY3IxLCBzY3IsIGNvbmQp
OworICAgICAgICAKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyMSk7CisgICAgICAgIHJlbGVh
c2VTY3JhdGNoKHNjcik7CisgICAgfQorICAgIAorICAgIHZvaWQgdGVzdGxfcnIoUmVnaXN0ZXJJ
RCBzcmMsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gR0VU
T1BDT0RFMShUU1RfT1BDT0RFLCBkc3QsIHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsK
KyAgICB9CisKKyAgICB2b2lkIHRlc3RsX2k4cihpbnQgaW1tLCBSZWdpc3RlcklEIGRzdCkKKyAg
ICB7CisgICAgICAgIEFTU0VSVCgoZHN0ID09IFNINDo6UjApICYmIChpbW0gPD0gMjU1KSAmJiAo
aW1tID49IDApKTsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gR0VUT1BDT0RFNShUU1RJTU1fT1BD
T0RFLCBpbW0pOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorICAgIAorICAgIHZv
aWQgdGVzdGxfaTMycihpbnQgaW1tLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIGlm
ICgoZHN0ID09IFNINDo6UjApICYmIChpbW0gPD0gMjU1KSAmJiAoaW1tID49IDApKSB7CisgICAg
ICAgICAgICB1aW50MTZfdCBvcGMgPSBHRVRPUENPREU1KFRTVElNTV9PUENPREUsIGltbSk7Cisg
ICAgICAgICAgICBvbmVTaG9ydE9wKG9wYyk7ICAgICAgICAKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgICAgICBM
b2FkQ29uc3RhbnQoKGludClpbW0sIHNjcik7CisgICAgICAgIAorICAgICAgICAgICAgdGVzdGxf
cnIoc2NyLCBkc3QpOworICAgICAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIHZvaWQgdGVzdGxfaTMybShpbnQgaW1tLCBpbnQgb2Zmc2V0LCBSZWdp
c3RlcklEIGJhc2UpCisgICAgeworICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRj
aCgpOworICAgICAgICBSZWdpc3RlcklEIHNjcjEgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAg
CisgICAgICAgIGlmICgob2Zmc2V0IDwgMCkgfHwgKG9mZnNldCA+PSA2NCkpIHsKKyAgICAgICAg
ICAgIExvYWRDb25zdGFudCgoaW50KW9mZnNldCwgc2NyKTsKKyAgICAgICAgICAgIGFkZGxfcnIo
YmFzZSwgc2NyKTsKKyAgICAgICAgICAgIG1vdmxfbXIoc2NyLCBzY3IpOworICAgICAgICB9IGVs
c2UgaWYgKG9mZnNldCkKKyAgICAgICAgICAgIG1vdmxfbXIob2Zmc2V0ID4+IDIsIGJhc2UsIHNj
cik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1vdmxfbXIoYmFzZSwgc2NyKTsKKyAgICAg
ICAgCisgICAgICAgIGlmIChJc0ltbWVkaWF0ZShpbW0pKQorICAgICAgICAgICAgbW92X2ltbTgo
aW1tLCBzY3IxKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgTG9hZENvbnN0YW50KChpbnQp
aW1tLCBzY3IxKTsKKyAgICAgICAgCisgICAgICAgIHRlc3RsX3JyKHNjciwgc2NyMSk7ICAgICAg
ICAKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2go
c2NyMSk7CisgICAgfQorCisgICAgdm9pZCB0ZXN0Yl9pOHIoaW50IGltbSwgUmVnaXN0ZXJJRCBk
c3QpCisgICAgeworICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAg
ICAgICBtb3ZfaW1tOChpbW0sIHNjcik7CisgICAgICAgIHRlc3RsX3JyKHNjciwgZHN0KTsKKyAg
ICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICB9CisKKyAgICB2b2lkIG5vcCgpIAorICAg
IHsgIAorICAgICAgICBtX2J1ZmZlci5wdXRTaG9ydFVuY2hlY2tlZChOT1BfT1BDT0RFKTsgICAg
ICAgICAKKyAgICB9CisgICAgCisgICAgCisgICAgdm9pZCBicmFuY2godWludDE2X3Qgb3BjLCBp
bnQgbGFiZWwpCisgICAgeworICAgICAgICBzd2l0Y2ggKG9wYykgeworICAgICAgICBjYXNlIEJU
X09QQ09ERToKKyAgICAgICAgICAgIEFTU0VSVCgobGFiZWwgPD0xMjcpICYmIChsYWJlbCA+PSAt
MTI4KSk7IAorICAgICAgICAgICAgb3BjID0gR0VUT1BDT0RFNShCVF9PUENPREUsIGxhYmVsKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEJSQV9PUENPREU6CisgICAgICAgICAg
ICBBU1NFUlQoKGxhYmVsIDw9MjA0NykgJiYgKGxhYmVsID49IC0yMDQ4KSk7CisgICAgICAgICAg
ICBvcGMgPSBHRVRPUENPREU2KEJSQV9PUENPREUsIGxhYmVsKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIEJGX09QQ09ERToKKyAgICAgICAgICAgIEFTU0VSVCgobGFiZWwgPD0x
MjcpICYmIChsYWJlbCA+PSAtMTI4KSk7CisgICAgICAgICAgICBvcGMgPSBHRVRPUENPREU1KEJG
X09QQ09ERSwgbGFiZWwpOworICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgIAorICAg
ICAgICBkZWZhdWx0OiBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGR0KFJlZ2lz
dGVySUQgcmVnKQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gR0VUT1BDT0RFMihEVF9P
UENPREUsIHJlZyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9ICAgCisgICAgCisg
ICAgdm9pZCBicmFuY2godWludDE2X3Qgb3BjLCBSZWdpc3RlcklEIHJlZykKKyAgICB7CisgICAg
ICAgIHN3aXRjaCAob3BjKSB7ICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQlJBRl9PUENPREU6
CisgICAgICAgICAgICBvcGMgPSBHRVRPUENPREUyKEJSQUZfT1BDT0RFLCByZWcpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSk1QX09QQ09ERSA6CisgICAgICAgICAgICBvcGMg
PSBHRVRPUENPREUyKEpNUF9PUENPREUsIHJlZyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBKU1JfT1BDT0RFIDoKKyAgICAgICAgICAgIG9wYyA9IEdFVE9QQ09ERTIoSlNSX09Q
Q09ERSwgcmVnKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEJTUkZfT1BDT0RF
IDoKKyAgICAgICAgICAgIG9wYyA9IEdFVE9QQ09ERTIoQlNSRl9PUENPREUsIHJlZyk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDogQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisgICAg
dm9pZCBsZHNwcihSZWdpc3RlcklEIHJlZykKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9
IEdFVE9QQ09ERTIoTERTUFJfT1BDT0RFLCByZWcpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7
CisgICAgfQorICAgIAorICAgIHZvaWQgc3RzcHIoUmVnaXN0ZXJJRCByZWcpCisgICAgeworICAg
ICAgICB1aW50MTZfdCBvcGMgPSBHRVRPUENPREUyKFNUU1BSX09QQ09ERSwgcmVnKTsKKyAgICAg
ICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAgIAorICAgIHZvaWQgZXh0dXcoUmVnaXN0
ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0g
R0VUT1BDT0RFMShFWFRVV19PUENPREUsIGRzdCwgc3JjKTsKKyAgICAgICAgCisgICAgICAgIG9u
ZVNob3J0T3Aob3BjKTsKKyAgICB9CisgICAgCisgICAgLyogZmxvYXQgb3BlcmF0aW9ucyovCisg
ICAgCisgICAgdm9pZCBsZHNybV9mcHVsKFJlZ2lzdGVySUQgc3JjKQorICAgIHsgICAgICAgIAor
ICAgICAgICB1aW50MTZfdCBvcGMgPSBHRVRPUENPREUyKExEU19STV9GUFVMX09QQ09ERSwgc3Jj
KTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKyAgICB2b2lkIGZuZWcoRlBSZWdp
c3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IEdFVE9QQ09ERTIoRk5F
R19PUENPREUsIGRzdCk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisgICAgCisg
ICAgdm9pZCBzdHNfZnB1bF9ybihSZWdpc3RlcklEIHNyYykKKyAgICB7CisgICAgICAgIHVpbnQx
Nl90IG9wYyA9IEdFVE9QQ09ERTIoU1RTX0ZQVUxfUk5fT1BDT0RFLCBzcmMpOworICAgICAgICBv
bmVTaG9ydE9wKG9wYyk7CisgICAgfQorICAgIAorICAgIHZvaWQgZmxvYXRfZnB1bF9mcm4oUmVn
aXN0ZXJJRCBzcmMpCisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBHRVRPUENPREUyKEZM
T0FUX09QQ09ERSwgc3JjKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKyAgICAK
KyAgICB2b2lkIGZtdWxsKEZQUmVnaXN0ZXJJRCBzcmMsIEZQUmVnaXN0ZXJJRCBkc3QpCisgICAg
eworICAgICAgICB1aW50MTZfdCBvcGMgPSBHRVRPUENPREUxKEZNVUxfT1BDT0RFLCBkc3QsIHNy
Yyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBmbW92
c19yZWFkX3JtKFJlZ2lzdGVySUQgc3JjLCBGUFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAg
ICAgLypGTU9WLlMgQFIlZCwgRlIlZFxuKi8KKyAgICAgICAgdWludDE2X3Qgb3BjID0gR0VUT1BD
T0RFMShGTU9WU19SRUFEX1JNX09QQ09ERSwgZHN0LCBzcmMpOworICAgICAgICBvbmVTaG9ydE9w
KG9wYyk7CisgICAgfQorICAgIAorICAgIHZvaWQgZm1vdnNfd3JpdGVfcm0oRlBSZWdpc3RlcklE
IHNyYywgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICAvKiBGTU9WLlMgRlIlZCwgQFIl
ZFxuICovCisgICAgICAgIHVpbnQxNl90IG9wYyA9IEdFVE9QQ09ERTEoRk1PVlNfV1JJVEVfUk5f
T1BDT0RFLCBkc3QsIHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisgICAg
CisgICAgdm9pZCBmbW92c193cml0ZV9yMHIoRlBSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBk
c3QpCisgICAgeworICAgICAgICAvKkZNT1YuUyBGUiVkLCBAKFIwLCBSJWQpICovCisgICAgICAg
IHVpbnQxNl90IG9wYyA9IEdFVE9QQ09ERTEoRk1PVlNfV1JJVEVfUjBSTl9PUENPREUsIGRzdCwg
c3JjKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGZt
b3ZzX3JlYWRfcjByKFJlZ2lzdGVySUQgc3JjLCBGUFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAg
ICAgICAgLypGTU9WLlMgQChSMCwgUiVkKSwgRlIlZCovCisgICAgICAgIHVpbnQxNl90IG9wYyA9
IEdFVE9QQ09ERTEoRk1PVlNfUkVBRF9SMFJNX09QQ09ERSwgZHN0LCBzcmMpOworICAgICAgICBv
bmVTaG9ydE9wKG9wYyk7CisgICAgfQorICAgIAorICAgIHZvaWQgZm1vdnNfcmVhZF9ybV9pbmMo
UmVnaXN0ZXJJRCBkc3QsIEZQUmVnaXN0ZXJJRCBzcmMpCisgICAgeworICAgICAgICAvKiBGTU9W
LlMgQFIlZCssIEZSJWQgKi8KKyAgICAgICAgdWludDE2X3Qgb3BjID0gR0VUT1BDT0RFMShGTU9W
U19SRUFEX1JNX0lOQ19PUENPREUsIGRzdCwgc3JjKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMp
OworICAgIH0KKyAgICAKKyAgICB2b2lkIGZtb3ZzX3dyaXRlX3JuX2RlYyhGUFJlZ2lzdGVySUQg
c3JjLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIC8qIEZNT1YuUyBGUiVkLCBALVIl
ZCAqLworICAgICAgICB1aW50MTZfdCBvcGMgPSBHRVRPUENPREUxKEZNT1ZTX1dSSVRFX1JOX0RF
Q19PUENPREUsIGRzdCwgc3JjKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKyAg
ICAKKyAgICB2b2lkIGZ0cmNfcm1fZnB1bChGUFJlZ2lzdGVySUQgc3JjKQorICAgIHsKKyAgICAg
ICAgdWludDE2X3Qgb3BjID0gR0VUT1BDT0RFMihGVFJDX09QQ09ERSwgc3JjKTsKKyAgICAgICAg
b25lU2hvcnRPcChvcGMpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGZsZHNfZnB1bChSZWdpc3Rl
cklEIHNyYykKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IEdFVE9QQ09ERTIoRkxEU19G
Uk1fRlBVTF9PUENPREUsIHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9Cisg
ICAgCisgICAgdm9pZCBmc3RzX2ZwdWwoUmVnaXN0ZXJJRCBzcmMpCisgICAgeworICAgICAgICB1
aW50MTZfdCBvcGMgPSBHRVRPUENPREUyKEZTVFNfRlBVTF9GUk5fT1BDT0RFLCBzcmMpOworICAg
ICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorICAgIAorICAgIAorICAgIHZvaWQgbGRzZnBz
Y3IoUmVnaXN0ZXJJRCByZWcpIAorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gR0VUT1BD
T0RFMihMRFNGUFNDUl9PUENPREUsIHJlZyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAg
ICB9CisgICAgCisgICAgdm9pZCBzdHNmcHNjcihSZWdpc3RlcklEIHJlZykgCisgICAgeworICAg
ICAgICB1aW50MTZfdCBvcGMgPSBHRVRPUENPREUyKFNUU0ZQU0NSX09QQ09ERSwgcmVnKTsKKyAg
ICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0gICAgCisgICAgCisgICAgLyogZG91YmxlIG9w
ZXJhdGlvbnMqLworICAgIHZvaWQgZGNtcHBlcShGUFJlZ2lzdGVySUQgc3JjLCBGUFJlZ2lzdGVy
SUQgZHN0KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gR0VUT1BDT0RFOChGQ01QRVFf
T1BDT0RFLCBkc3QgPj4gMSwgc3JjID4+MSk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAg
ICB9CisgICAgCisgICAgdm9pZCBkbXVsX3JyKEZQUmVnaXN0ZXJJRCBzcmMsIEZQUmVnaXN0ZXJJ
RCBkc3QpCisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBHRVRPUENPREU4KEZNVUxfT1BD
T0RFLCBkc3QgPj4gMSwgc3JjID4+MSk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9
CisgICAgCisgICAgdm9pZCBkc3ViX3JyKEZQUmVnaXN0ZXJJRCBzcmMsIEZQUmVnaXN0ZXJJRCBk
c3QpCisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBHRVRPUENPREU4KEZTVUJfT1BDT0RF
LCBkc3QgPj4gMSwgc3JjID4+MSk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9Cisg
ICAgCisgICAgdm9pZCBkYWRkX3JyKEZQUmVnaXN0ZXJJRCBzcmMsIEZQUmVnaXN0ZXJJRCBkc3Qp
CisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBHRVRPUENPREU4KEZBRERfT1BDT0RFLCBk
c3QgPj4gMSwgc3JjID4+MSk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisgICAg
CisgICAgdm9pZCBkbW92X3JyKEZQUmVnaXN0ZXJJRCBzcmMsIEZQUmVnaXN0ZXJJRCBkc3QpCisg
ICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBHRVRPUENPREU4KEZNT1ZfT1BDT0RFLCBkc3Qg
Pj4gMSwgc3JjID4+MSk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9ICAgIAorICAg
IAorICAgIHZvaWQgZGRpdl9ycihGUFJlZ2lzdGVySUQgc3JjLCBGUFJlZ2lzdGVySUQgZHN0KQor
ICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gR0VUT1BDT0RFOChGRElWX09QQ09ERSwgZHN0
ID4+IDEsIHNyYyA+PjEpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorICAgIAor
ICAgIHZvaWQgZG91YmxlbG9hZChSZWdpc3RlcklEIGJhc2UsIGludCBvZmZzZXQsIEZQUmVnaXN0
ZXJJRCBkZXN0LCBSZWdpc3RlcklEIHNjcikgCisgICAgeworICAgICAgICAgTG9hZENvbnN0YW50
KG9mZnNldCwgc2NyKTsKKyAgICAgICAgIGlmIChzY3IgPT0gU0g0OjpSMCkKKyAgICAgICAgICAg
ICBmbW92X3JlYWRfcjByKGJhc2UsIGRlc3QpOworICAgICAgICAgZWxzZSBpZiAoYmFzZSA9PSBT
SDQ6OlIwKQorICAgICAgICAgICAgIGZtb3ZfcmVhZF9yMHIoc2NyLCBkZXN0KTsKKyAgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgIGFkZGxfcnIoYmFzZSwgc2NyKTsKKyAgICAgICAgICAgICBm
bW92X3JlYWRfcm0oc2NyLCBkZXN0KTsgICAgICAgICAKKyAgICAgICAgIH0gICAgCisgICAgfQor
ICAgIAorICAgIHZvaWQgZG5lZyhGUFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgdWlu
dDE2X3Qgb3BjID0gR0VUT1BDT0RFNyhGTkVHX09QQ09ERSwgZHN0ID4+IDEpOworICAgICAgICBv
bmVTaG9ydE9wKG9wYyk7CisgICAgfQorICAgIAorICAgIHZvaWQgZG91Ymxlc3RvcmUoRlBSZWdp
c3RlcklEIHNyYywgUmVnaXN0ZXJJRCBiYXNlLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIHNjcikg
CisgICAgeworICAgICAgICAgTG9hZENvbnN0YW50KG9mZnNldCwgc2NyKTsKKyAgICAgICAgIGlm
IChzY3IgPT0gU0g0OjpSMCkKKyAgICAgICAgICAgICBmbW92X3dyaXRlX3IwcihzcmMsIGJhc2Up
OworICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgYWRkbF9ycihiYXNlLCBzY3IpOworICAg
ICAgICAgICAgIGZtb3Zfd3JpdGVfcm0oc3JjLCBzY3IpOyAgICAgICAgIAorICAgICAgICAgfQor
ICAgIH0KKyAgICAKKyAgICB2b2lkIGZtb3ZfcmVhZF9ybShSZWdpc3RlcklEIHNyYywgRlBSZWdp
c3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIC8qRk1PViBAUiVkLCBEUiVkXG4qLworICAgICAg
ICB1aW50MTZfdCBvcGMgPSBHRVRPUENPREUxMChGTU9WU19SRUFEX1JNX09QQ09ERSwgZHN0ID4+
IDEsIHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisgICAgCisgICAgdm9p
ZCBmbW92X3dyaXRlX3JtKEZQUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsK
KyAgICAgICAgLyogRk1PViBEUiVkLCBAUiVkXG4gKi8KKyAgICAgICAgdWludDE2X3Qgb3BjID0g
R0VUT1BDT0RFOShGTU9WU19XUklURV9STl9PUENPREUsIGRzdCwgc3JjID4+IDEpOworICAgICAg
ICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorICAgIAorICAgIHZvaWQgZm1vdl93cml0ZV9yMHIo
RlBSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICAvKkZNT1Yg
RFIlZCwgQChSMCwgUiVkKSAqLworICAgICAgICB1aW50MTZfdCBvcGMgPSBHRVRPUENPREU5KEZN
T1ZTX1dSSVRFX1IwUk5fT1BDT0RFLCBkc3QsIHNyYyA+PiAxKTsKKyAgICAgICAgb25lU2hvcnRP
cChvcGMpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGZtb3ZfcmVhZF9yMHIoUmVnaXN0ZXJJRCBz
cmMsIEZQUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICAvKkZNT1YgQChSMCwgUiVkKSwg
RFIlZCovCisgICAgICAgIHVpbnQxNl90IG9wYyA9IEdFVE9QQ09ERTEwKEZNT1ZTX1JFQURfUjBS
TV9PUENPREUsIGRzdCA+PiAxLCBzcmMpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAg
fQorICAgIAorICAgIHZvaWQgZm1vdl9yZWFkX3JtX2luYyhSZWdpc3RlcklEIGRzdCwgRlBSZWdp
c3RlcklEIHNyYykKKyAgICB7CisgICAgICAgIC8qIEZNT1YgQFIlZCssIERSJWQgKi8KKyAgICAg
ICAgdWludDE2X3Qgb3BjID0gR0VUT1BDT0RFMTAoRk1PVlNfUkVBRF9STV9JTkNfT1BDT0RFLCBk
c3QgPj4gMSAsIHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisgICAgCisg
ICAgdm9pZCBmbW92X3dyaXRlX3JuX2RlYyhGUFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRz
dCkKKyAgICB7CisgICAgICAgIC8qIEZNT1YgRFIlZCwgQC1SJWQgKi8KKyAgICAgICAgdWludDE2
X3Qgb3BjID0gR0VUT1BDT0RFOShGTU9WU19XUklURV9STl9ERUNfT1BDT0RFLCBkc3QsIHNyYyA+
PiAxKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGZs
b2F0X2ZwdWxfZHJuKEZQUmVnaXN0ZXJJRCBzcmMpCisgICAgeworICAgICAgICB1aW50MTZfdCBv
cGMgPSBHRVRPUENPREU3KEZMT0FUX09QQ09ERSwgc3JjID4+IDEpOworICAgICAgICBvbmVTaG9y
dE9wKG9wYyk7CisgICAgfQorICAgIAorICAgIHZvaWQgZnRyY19kcm1fZnB1bChGUFJlZ2lzdGVy
SUQgc3JjKQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gR0VUT1BDT0RFNyhGVFJDX09Q
Q09ERSwgc3JjID4+IDEpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorICAgICAg
ICAgICAKKyAgICAvLyBWYXJpb3VzIG1vdmUgb3BzOgorICAgIAorICAgIHZvaWQgbW92X2ltbTgo
aW50IGltbTgsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKChpbW04IDw9
MTI3KSAmJiAoaW1tOCA+PSAtMTI4KSk7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IEdFVE9QQ09E
RTMoTU9WSU1NX09QQ09ERSwgZHN0LCBpbW04KTsgICAgICAgIAorICAgICAgICBvbmVTaG9ydE9w
KG9wYyk7CisgICAgfQorCisgICAgdm9pZCBtb3ZsX3JyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3Rl
cklEIGRzdCkKKyAgICB7CisgICAgICAgIC8qIG1vdiBzcmMsIGRzdCAqLworICAgICAgICB1aW50
MTZfdCBvcGMgPSBHRVRPUENPREUxKE1PVl9PUENPREUsIGRzdCwgc3JjKTsKKyAgICAgICAgb25l
U2hvcnRPcChvcGMpOworCisgICAgfQorICAgIAorICAgIHZvaWQgbW92d19ybShSZWdpc3RlcklE
IHNyYywgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICAvKiBtb3YudyBzcmMsIEBkc3Qg
Ki8KKyAgICAgICAgdWludDE2X3Qgb3BjID0gR0VUT1BDT0RFMShNT1ZXX1dSSVRFX1JOX09QQ09E
RSwgZHN0LCBzcmMpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisKKyAgICB9CisgICAgCisg
ICAgdm9pZCBtb3Z3X21yKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7Cisg
ICAgICAgIC8qIG1vdi53IEAgc3JjLCBkc3QgKi8KKyAgICAgICAgdWludDE2X3Qgb3BjID0gR0VU
T1BDT0RFMShNT1ZXX1JFQURfUk1fT1BDT0RFLCBkc3QsIHNyYyk7CisgICAgICAgIG9uZVNob3J0
T3Aob3BjKTsKKworICAgIH0KKyAgICAKKyAgICB2b2lkIG1vdndfbXIoaW50IG9mZnNldCwgUmVn
aXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9w
YzsKKyAgICAKKyAgICAgICAgaWYgKGJhc2UgPT0gU0g0OjpQQykgeworICAgICAgICAgICAgQVNT
RVJUKChvZmZzZXQgPD0gMjU1KSAmJiAob2Zmc2V0ID49IDApKTsKKyAgICAgICAgICAgIG9wYyA9
IEdFVE9QQ09ERTMoTU9WV19SRUFEX09GRlBDX09QQ09ERSwgZHN0LCBvZmZzZXQpOworICAgICAg
ICB9IGVsc2UKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAg
CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKworICAgIH0KKyAgICAKKyAgICB2b2lkIG1vdndf
cjBtcihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICB1aW50
MTZfdCBvcGMgPSBHRVRPUENPREUxKE1PVldfUkVBRF9SMFJNX09QQ09ERSwgZHN0LCBzcmMpOyAg
ICAgICAgCisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKworICAgIH0KKyAgICAKKyAgICB2b2lk
IG1vdmxfcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkKKyAg
ICB7CisgICAgICAgIHVpbnQxNl90IG9wYzsKKyAgICAgICAgCisgICAgICAgIEFTU0VSVCgob2Zm
c2V0IDw9IDE1KSAmJiAob2Zmc2V0ID49IDApKTsKKyAgICAgICAgCisgICAgICAgIGlmICghb2Zm
c2V0KQorICAgICAgICAgICAgb3BjID0gR0VUT1BDT0RFMShNT1ZMX1dSSVRFX1JOX09QQ09ERSwg
YmFzZSwgc3JjKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgb3BjID0gR0VUT1BDT0RFNChN
T1ZMX1dSSVRFX09GRlJOX09QQ09ERSwgYmFzZSwgc3JjLCBvZmZzZXQpOworICAgICAgICAKKyAg
ICAgICAgb25lU2hvcnRPcChvcGMpOworCisgICAgfQorICAgIAorICAgIHZvaWQgbW92bF9ybShS
ZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBiYXNlKQorICAgIHsKKyAgICAgICAgdWludDE2X3Qg
b3BjOworICAgICAgICAKKyAgICAgICAgb3BjID0gR0VUT1BDT0RFMShNT1ZMX1dSSVRFX1JOX09Q
Q09ERSwgYmFzZSwgc3JjKTsgICAgICAgIAorICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisKKyAg
ICB9CisgICAgCisgICAgdm9pZCBtb3ZsX2kzMm0oaW50IGltbSwgaW50IG9mZnNldCwgUmVnaXN0
ZXJJRCBiYXNlKQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjOworICAgICAgICAKKyAgICAg
ICAgQVNTRVJUKChvZmZzZXQgPD0gMTUpICYmIChvZmZzZXQgPj0gMCkpOworICAgIAorICAgICAg
ICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBMb2FkQ29uc3RhbnQo
KGludClpbW0sIHNjcik7ICAgICAgIAorCisgICAgICAgIAorICAgICAgICBpZiAoIW9mZnNldCkK
KyAgICAgICAgICAgIG9wYyA9IEdFVE9QQ09ERTEoTU9WTF9XUklURV9STl9PUENPREUsIGJhc2Us
IHNjcik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG9wYyA9IEdFVE9QQ09ERTQoTU9WTF9X
UklURV9PRkZSTl9PUENPREUsIGJhc2UsIHNjciwgb2Zmc2V0KTsKKyAgICAgICAgCisgICAgICAg
IG9uZVNob3J0T3Aob3BjKTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICB9CisK
KworICAgIHZvaWQgbW92bF9tcihpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVy
SUQgZHN0KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjOworICAgIAorICAgICAgICBpZiAo
YmFzZSA9PSBTSDQ6OlBDKSB7CisgICAgICAgICAgICBBU1NFUlQoKG9mZnNldCA8PSAyNTUpICYm
IChvZmZzZXQgPj0gMCkpOworICAgICAgICAgICAgb3BjID0gR0VUT1BDT0RFMyhNT1ZMX1JFQURf
T0ZGUENfT1BDT0RFLCBkc3QsIG9mZnNldCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBBU1NFUlQoKG9mZnNldCA8PSAxNSkgJiYgKG9mZnNldCA+PSAwKSk7CisgICAgICAgICAgICBp
ZiAoIW9mZnNldCkKKyAgICAgICAgICAgICAgICBvcGMgPSBHRVRPUENPREUxKE1PVkxfUkVBRF9S
TV9PUENPREUsIGRzdCwgYmFzZSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
b3BjID0gR0VUT1BDT0RFNChNT1ZMX1JFQURfT0ZGUk1fT1BDT0RFLCBkc3QsIGJhc2UsIG9mZnNl
dCk7CisgICAgICAgIH0KKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworCisgICAgfQorICAgIAor
ICAgIHZvaWQgbW92Yl9tcihpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQg
ZHN0KSAvLyBNT1YuQiBAKGRpc3AsIFJtKSwgUjAKKyAgICB7ICAgICAgICAKKyAgICAgICAgQVNT
RVJUKGRzdCA9PSBTSDQ6OlIwKTsKKyAgICAKKyAgICAgICAgdWludDE2X3Qgb3BjID0gR0VUT1BD
T0RFMTEoTU9WQl9SRUFEX09GRlJNX09QQ09ERSwgYmFzZSwgb2Zmc2V0KTsKKyAgICAgICAgCisg
ICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKworICAgIH0KKyAgICAKKyAgICB2b2lkIG1vdmJfcjBt
cihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICB1aW50MTZf
dCBvcGMgPSBHRVRPUENPREUxKE1PVkJfUkVBRF9SMFJNX09QQ09ERSwgZHN0LCBzcmMpOworICAg
ICAgICBvbmVTaG9ydE9wKG9wYyk7CisKKyAgICB9CisgICAgCisgICAgdm9pZCBtb3ZiX21yKFJl
Z2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCkgLy8gTU9WLkIgQFJtLCBSbgorICAgIHsKKyAg
ICAgICAgdWludDE2X3Qgb3BjID0gR0VUT1BDT0RFMShNT1ZCX1JFQURfUk1fT1BDT0RFLCBkc3Qs
IHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKworICAgIH0KKyAgICAKKyAgICB2b2lk
IG1vdmxfbXIoUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAg
IHVpbnQxNl90IG9wYyA9IEdFVE9QQ09ERTEoTU9WTF9SRUFEX1JNX09QQ09ERSwgZHN0LCBiYXNl
KTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworCisgICAgfQorICAgIAorICAgIHZvaWQgbW92
bF9yMG1yKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIHVp
bnQxNl90IG9wYyA9IEdFVE9QQ09ERTEoTU9WTF9SRUFEX1IwUk1fT1BDT0RFLCBkc3QsIHNyYyk7
CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKworICAgIH0KKyAgICAKKyAgICB2b2lkIG1vdmxf
cm1yMChSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICAvKm1v
di5sIHNyYywgQChyMCwgZHN0KSovCisgICAgICAgIHVpbnQxNl90IG9wYyA9IEdFVE9QQ09ERTEo
TU9WTF9XUklURV9SMFJOX09QQ09ERSwgZHN0LCBzcmMpOworICAgICAgICBvbmVTaG9ydE9wKG9w
Yyk7CisKKyAgICB9CisKKyAgICB2b2lkIG1vdmxfaThyKGludCBpbW04LCBSZWdpc3RlcklEIGRz
dCkKKyAgICB7CisgICAgICAgIEFTU0VSVCgoaW1tOCA8PTEyNykgJiYgKGltbTggPj0gLTEyOCkp
OworICAgICAgICB1aW50MTZfdCBvcGMgPSBHRVRPUENPREUzKE1PVklNTV9PUENPREUsIGRzdCwg
aW1tOCk7CisKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAgIHZvaWQgb3Js
X2lyKGludCBpbW0sIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgCisgICAgICAgIGlm
ICgoaW1tIDw9IDI1NSkgJiYgKGltbSA+PSAwKSAmJiAoZHN0ID09IFNINDo6UjApKQorICAgICAg
ICAgICAgb3JsX2k4cihpbW0sIGRzdCk7CisgICAgICAgIGVsc2UgIHsKKyAgICAgICAgICAgIFJl
Z2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgICAgICBMb2FkQ29uc3RhbnQo
KGludClpbW0sIHNjcik7CisgICAgICAgICAgICB1aW50MTZfdCBvcGMgPSBHRVRPUENPREUxKE9S
X09QQ09ERSwgZHN0LCBzY3IpOworICAgICAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgICAg
ICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB2
b2lkIExvYWRDb25zdGFudChpbnQgY29uc3RhbnQsIFJlZ2lzdGVySUQgZHN0LCBib29sIHdpdGhw
YXRjaCA9IGZhbHNlKQorICAgIHsKKyAgICAgICAgaWYgKChjb25zdGFudCA8PTEyNykgJiYgKGNv
bnN0YW50ID49IC0xMjgpICYmICghd2l0aHBhdGNoKSkKKyAgICAgICAgICAgIG1vdl9pbW04KGNv
bnN0YW50LCBkc3QpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHVpbnQxNl90IG9wYyA9
IEdFVE9QQ09ERTMoTU9WSU1NX09QQ09ERSwgZHN0LCAwKTsgLy8gd2lsbCBiZSBwYXRjaGVkIGxh
dGVyIHRvIG1vdi5sCisgICAgICAgICAgICBtX2J1ZmZlci5wdXRTaG9ydFdpdGhDb25zdGFudElu
dChvcGMsIGNvbnN0YW50KTsKKyAgICAgICAgfQorICAgIH0KKworCisKKyAgICAvLyBGbG93IGNv
bnRyb2w6CisKKyAgICBKbXBTcmMgY2FsbCgpCisgICAgeyAgICAgICAgCisgICAgICAgIFJlZ2lz
dGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIG1fYnVmZmVyLmVuc3VyZVNwYWNl
KDE4KTsKKyAgICAgICAgTG9hZENvbnN0YW50KDB4MCwgc2NyLCB0cnVlKTsKKyAgICAgICAgYnJh
bmNoKEpTUl9PUENPREUsIHNjcik7CisgICAgICAgIG5vcCgpOworICAgICAgICByZWxlYXNlU2Ny
YXRjaChzY3IpOworICAgICAgICByZXR1cm4gSm1wU3JjKG1fYnVmZmVyLnVuY2hlY2tlZFNpemUo
KSk7CisgICAgfQorICAgIAorICAgIEptcFNyYyBjYWxsKFJlZ2lzdGVySUQgZHN0KQorICAgIHsK
KyAgICAgICAgbV9idWZmZXIuZW5zdXJlU3BhY2UoMTYpOworICAgICAgICBicmFuY2goSlNSX09Q
Q09ERSwgZHN0KTsKKyAgICAgICAgbm9wKCk7CisgICAgICAgIHJldHVybiBKbXBTcmMobV9idWZm
ZXIudW5jaGVja2VkU2l6ZSgpKTsKKyAgICB9CisKKyAgICBKbXBTcmMgam1wKCkKKyAgICB7ICAg
ICAgICAKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAg
bV9idWZmZXIuZW5zdXJlU3BhY2UoMTgpOworICAgICAgICBpbnQgbV9zaXplID0gbV9idWZmZXIu
dW5jaGVja2VkU2l6ZSgpOworICAgICAgICBMb2FkQ29uc3RhbnQoMHgwLCBzY3IsIHRydWUpOwor
ICAgICAgICBicmFuY2goQlJBRl9PUENPREUsIHNjcik7ICAgICAgICAKKyAgICAgICAgbm9wKCk7
CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgCisgICAgICAgIHJldHVybiBKbXBT
cmMobV9zaXplKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBqbXBfcihSZWdpc3RlcklEIGRzdCkK
KyAgICB7CisgICAgICAgIG1fYnVmZmVyLmVuc3VyZVNwYWNlKDE2KTsKKyAgICAgICAgYnJhbmNo
KEpNUF9PUENPREUsIGRzdCk7CisgICAgICAgIG5vcCgpOworICAgIH0KKyAgICAKKyAgICB2b2lk
IGptcF9tKGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkKKyAgICB7CisgICAgICAgIFJlZ2lz
dGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIAorICAgICAgICBpZiAoKG9mZnNl
dCA8IDApIHx8IChvZmZzZXQgPj0gNjQpKSB7CisgICAgICAgICAgICBMb2FkQ29uc3RhbnQoKGlu
dClvZmZzZXQsIHNjcik7CisgICAgICAgICAgICBhZGRsX3JyKGJhc2UsIHNjcik7CisgICAgICAg
ICAgICBtb3ZsX21yKHNjciwgc2NyKTsKKyAgICAgICAgfSBlbHNlIGlmIChvZmZzZXQpIHsKKyAg
ICAgICAgICAgIG1vdmxfbXIob2Zmc2V0ID4+IDIsIGJhc2UsIHNjcik7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICBtb3ZsX21yKGJhc2UsIHNjcik7CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIG1fYnVmZmVyLmVuc3VyZVNwYWNlKDE2KTsKKyAgICAgICAgYnJhbmNoKEpNUF9P
UENPREUsIHNjcik7CisgICAgICAgIG5vcCgpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3Ip
OworCisgICAgfQorICAgIAorICAgIEptcFNyYyBqbmUoKQorICAgIHsKKyAgICAgICAgbV9idWZm
ZXIuZW5zdXJlU3BhY2UoMjApOworICAgICAgICBpbnQgbV9zaXplID0gbV9idWZmZXIudW5jaGVj
a2VkU2l6ZSgpOworICAgICAgICBicmFuY2goQkZfT1BDT0RFLCAwKTsKKyAgICAgICAgcmV0dXJu
IEptcFNyYyhtX3NpemUpOworICAgIH0KKyAgICAKKyAgICBKbXBTcmMgamUoKQorICAgIHsKKyAg
ICAgICAgbV9idWZmZXIuZW5zdXJlU3BhY2UoMjApOworICAgICAgICBpbnQgbV9zaXplID0gbV9i
dWZmZXIudW5jaGVja2VkU2l6ZSgpOworICAgICAgICBicmFuY2goQlRfT1BDT0RFLCAwKTsKKyAg
ICAgICAgcmV0dXJuIEptcFNyYyhtX3NpemUpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHJldCgp
CisgICAgeworICAgICAgICBtX2J1ZmZlci5lbnN1cmVTcGFjZSgxNik7CisgICAgICAgIG9uZVNo
b3J0T3AoUlRTX09QQ09ERSk7CisgICAgfQorCisgICAgLy8gQXNzZW1ibGVyIGFkbWluIG1ldGhv
ZHM6CisKKyAgICBKbXBEc3QgbGFiZWwoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEptcERzdCht
X2J1ZmZlci51bmNoZWNrZWRTaXplKCkpOworICAgIH0KKyAgICAKKyAgICBKbXBEc3QgbGFiZWwo
aW50IGRpc3ApCisgICAgeworICAgICAgICByZXR1cm4gSm1wRHN0KG1fYnVmZmVyLnVuY2hlY2tl
ZFNpemUoKSArIGRpc3ApOworICAgIH0KKworICAgIGludCBzaXplT2ZDb25zdGFudFBvb2woKQor
ICAgIHsKKyAgICAgICAgIHJldHVybiBtX2J1ZmZlci5zaXplT2ZDb25zdGFudFBvb2woKTsKKyAg
ICB9CisKKyAgICBKbXBEc3QgYWxpZ24oaW50IGFsaWdubWVudCkKKyAgICB7CisgICAgICAgIGlm
IChOT1RBTElHTkVEKCh1aW50MTZfdCopKHJlaW50ZXJwcmV0X2Nhc3Q8aW50PihkYXRhKCkpICsg
bV9idWZmZXIudW5jaGVja2VkU2l6ZSgpKSkpIHsKKyAgICAgICAgICAgIG1fYnVmZmVyLmVuc3Vy
ZVNwYWNlKDE0KTsKKyAgICAgICAgICAgIG5vcCgpOworICAgICAgICB9CisKKyAgICAgICAgcmV0
dXJuIGxhYmVsKCk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgbGlua0p1bXAodm9pZCogY29k
ZSwgSm1wU3JjIGZyb20sIHZvaWQqIHRvKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGZyb20ubV9v
ZmZzZXQgIT0gLTEpOworCisgICAgICAgIHVpbnQxNl90KiBpbnN0cnVjdGlvblB0ciA9IHJlaW50
ZXJwcmV0X2Nhc3Q8dWludDE2X3QqPiAocmVpbnRlcnByZXRfY2FzdDxpbnQ+KGNvZGUpICsgZnJv
bS5tX29mZnNldCk7CisgICAgICAgIHVpbnQxNl90IGluc3RydWN0aW9uID0gKmluc3RydWN0aW9u
UHRyOworICAgICAgICBpbnQgb2Zmc2V0Qml0czsKKyAgICAgICAgCisgICAgICAgIGlmICgoKGlu
c3RydWN0aW9uICYgMHhGRjAwKSA9PSBCVF9PUENPREUpIHx8ICgoaW5zdHJ1Y3Rpb24gJiAweEZG
MDApID09IEJGX09QQ09ERSkpIHsKKyAgICAgICAgCisgICAgICAgICAgICAvKiBCVCBsYWJlbCAg
PT0+IEJGIDIgCisgICAgICAgICAgICAgICBub3AgICAgICAgICAgIExEUiByZWcKKyAgICAgICAg
ICAgICAgIG5vcCAgICAgICAgICAgYnJhZiBAcmVnCisgICAgICAgICAgICAgICBub3AgICAgICAg
ICAgIG5vcAorICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIG9mZnNldEJpdHMgID0gKGludCl0
byAtIChpbnQpY29kZSAtIGZyb20ubV9vZmZzZXQgLSA4OworICAgICAgICAgICAgCisgICAgICAg
ICAgICBpbnN0cnVjdGlvbiBePSAweDAyMDI7CisgICAgICAgICAgICAqaW5zdHJ1Y3Rpb25QdHIr
KyA9IGluc3RydWN0aW9uOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgaW50IG9mZnNl
dCA9ICAgKChpbnQpKmluc3RydWN0aW9uUHRyICYgMHhGRik7CisgICAgICAgICAgICB1aW50MTZf
dCogYWRkcmVzcyAgPSAodWludDE2X3QqKSgob2Zmc2V0IDw8IDIpICsgKCgoaW50KWluc3RydWN0
aW9uUHRyICsgNCkgJih+MHgzKSkpOworICAgICAgICAgICAgKnJlaW50ZXJwcmV0X2Nhc3Q8aW50
Kj4oYWRkcmVzcykgPSAoaW50KW9mZnNldEJpdHM7IAorICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgaW5zdHJ1Y3Rpb24gPSAoMHgwMDIzIHwgKCppbnN0cnVjdGlvblB0cisrICYgMHhGMDAp
KTsKKyAgICAgICAgICAgICppbnN0cnVjdGlvblB0cisrID0gaW5zdHJ1Y3Rpb247CisgICAgICAg
ICB9IGVsc2UgaWYgKCgqKGluc3RydWN0aW9uUHRyICsxKSAmIDB4MDAyMykgPT0gQlJBRl9PUENP
REUpIHsKKyAgICAgICAgICAgICAKKyAgICAgICAgICAgICAvKiBNT1YgI2ltbSwgcmVnICA9PiBM
RFIgcmVnCisgICAgICAgICAgICAgICAgYnJhZiBAcmVnICAgICAgICBicmFmIEByZWcKKyAgICAg
ICAgICAgICAgICBub3AgICAgICAgICAgICAgIG5vcAorICAgICAgICAgICAgKi8KKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgb2Zmc2V0Qml0cyAgPSAoaW50KXRvIC0gKGludCljb2RlIC0gZnJv
bS5tX29mZnNldCAtIDY7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGludCBvZmZzZXRUb1BD
ID0gKCppbnN0cnVjdGlvblB0ciAmIDB4RkYpOyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICB1aW50MTZfdCogYWRkcmVzcyAgPSAodWludDE2X3QqKSgo
b2Zmc2V0VG9QQyA8PCAyKSArICgoKGludClpbnN0cnVjdGlvblB0ciArIDQpICYofjB4MykpKTsK
KyAgICAgICAgICAgICpyZWludGVycHJldF9jYXN0PGludCo+KGFkZHJlc3MpID0gKGludClvZmZz
ZXRCaXRzOyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgCisgICAgICAgICB9IGVsc2UgCisg
ICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9p
ZCBsaW5rQ2FsbCh2b2lkKiBjb2RlLCBKbXBTcmMgZnJvbSwgdm9pZCogdG8pCisgICAgeworICAg
ICAgICB1aW50MTZfdCogaW5zdHJ1Y3Rpb25QdHIgPSByZWludGVycHJldF9jYXN0PHVpbnQxNl90
Kj4oKGludCljb2RlICsgZnJvbS5tX29mZnNldCk7CisgICAgICAgIGluc3RydWN0aW9uUHRyID0g
aW5zdHJ1Y3Rpb25QdHIgLTM7CisKKyAgICAgICAgaW50IG9mZnNldCA9ICAgKChpbnQpKihpbnN0
cnVjdGlvblB0cikgJiAweEZGKTsKKyAgICAgICAgCisgICAgICAgIHVpbnQxNl90KiBhZGRyZXNz
ICA9ICh1aW50MTZfdCopKChvZmZzZXQgPDwgMikgKyAoKChpbnQpaW5zdHJ1Y3Rpb25QdHIgKyA0
KSAmKH4weDMpKSk7CisgICAgICAgICpyZWludGVycHJldF9jYXN0PGludCo+KGFkZHJlc3MpID0g
KGludCl0bzsKKyAgICB9CisgICAgCisgICAgc3RhdGljIHZvaWQgbGlua1BvaW50ZXIodm9pZCog
Y29kZSwgSm1wRHN0IHdoZXJlLCB2b2lkKiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHVpbnQxNl90
KiBpbnN0cnVjdGlvblB0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDE2X3QqPigoaW50KWNvZGUg
KyB3aGVyZS5tX29mZnNldCk7CisgICAgICAgIAorICAgICAgICBpbnQgb2Zmc2V0ID0gICAoKGlu
dCkqaW5zdHJ1Y3Rpb25QdHIgJiAweEZGKTsKKyAgICAgICAgCisgICAgICAgIHVpbnQxNl90KiBh
ZGRyZXNzICA9ICh1aW50MTZfdCopKChvZmZzZXQgPDwgMikgKyAoKChpbnQpaW5zdHJ1Y3Rpb25Q
dHIgKyA0KSAmKH4weDMpKSk7CisgICAgICAgICpyZWludGVycHJldF9jYXN0PGludCo+KGFkZHJl
c3MpID0gKGludCl2YWx1ZTsKKyAgICB9CisgICAKKyAgICBzdGF0aWMgdW5zaWduZWQgZ2V0Q2Fs
bFJldHVybk9mZnNldChKbXBTcmMgY2FsbCkKKyAgICB7CisgICAgICAgIEFTU0VSVChjYWxsLm1f
b2Zmc2V0ID49IDApOworICAgICAgICByZXR1cm4gY2FsbC5tX29mZnNldDsKKyAgICB9CisgICAg
CisgICAgc3RhdGljIFNINFdvcmQqIGdldExkckltbUFkZHJlc3NPblBvb2woU0g0V29yZCogaW5z
biwgdWludDMyX3QqIGNvbnN0UG9vbCkKKyAgICB7CisgICAgICAgICByZXR1cm4gcmVpbnRlcnBy
ZXRfY2FzdDxTSDRXb3JkKj4oY29uc3RQb29sICsgKCppbnNuICYgMHhmZikpOworICAgIH0KKyAg
ICAKKyAgICBzdGF0aWMgU0g0V29yZCBwYXRjaENvbnN0YW50UG9vbExvYWQoU0g0V29yZCBsb2Fk
LCBpbnQgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gKGxvYWQgJiB+MHhmZikgfCB2YWx1
ZTsKKyAgICB9CisKKyAgICBzdGF0aWMgdWludDMyX3QgcGxhY2VDb25zdGFudFBvb2xCYXJyaWVy
KGludCBvZmZzZXQpCisgICAgeworICAgICAgICBBU1NFUlQoKChvZmZzZXQgPj4gMSkgPD0yMDQ3
KSAmJiAoKG9mZnNldCA+PiAxKSA+PSAtMjA0OCkpOworICAgICAgICAKKyAgICAgICAgdWludDMy
X3Qgb3BjID0gKCgwWEEwMDAgfChvZmZzZXQgPj4gMSkpIHwgMHgwMDA5MDAwMCk7CisgICAgICAg
IHJldHVybiBvcGM7CisgICAgfQorICAgIHN0YXRpYyB2b2lkIHBhdGNoQ29uc3RhbnRQb29sTG9h
ZCh2b2lkKiBsb2FkQWRkciwgdm9pZCogY29uc3RQb29sQWRkcikKKyAgICB7CisgICAgICAgIHVp
bnQxNl90KiBpbnN0cnVjdGlvblB0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8U0g0V29yZCo+KGxvYWRB
ZGRyKTsKKyAgICAgICAgU0g0V29yZCBpbmRleCA9ICgqaW5zdHJ1Y3Rpb25QdHIgJiAweGZmKTsK
KyAgICAgICAgCisgICAgICAgIEFTU0VSVCgoKChpbnQpY29uc3RQb29sQWRkciAtIChpbnQpbG9h
ZEFkZHIgKyBpbmRleCAqIDQpKSA8IDEwMjQpOworICAgICAgICAKKyAgICAgICAgdWludDE2X3Qg
aW5zdHJ1Y3Rpb24gPSAqaW5zdHJ1Y3Rpb25QdHIgJiAweGYwMDsKKyAgICAgICAgaW50IG9mZnNl
dCA9IChpbnQpY29uc3RQb29sQWRkciArIChpbmRleCAqIDQpIC0gKCgoaW50KWluc3RydWN0aW9u
UHRyICYgfjB4MDMpICsgNCk7CisgICAgCisgICAgCisgICAgICAgIGluc3RydWN0aW9uIHw9IDB4
RDAwMDsKKyAgICAgICAgb2Zmc2V0ICY9IDB4MDNmZjsKKyAgICAgICAgaW5zdHJ1Y3Rpb24gfD0g
KG9mZnNldCA+PiAyKTsKKyAgICAgICAgKmluc3RydWN0aW9uUHRyID0gaW5zdHJ1Y3Rpb247CisK
KyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCByZXBhdGNoUG9pbnRlcih2b2lkKiB3aGVyZSwgdm9p
ZCogdmFsdWUpCisgICAgeworICAgICAgICBwYXRjaFBvaW50ZXIod2hlcmUsIHZhbHVlKTsgICAg
CisgICAgfQorICAgIAorICAgIHN0YXRpYyB2b2lkIHJlcGF0Y2hMb2FkUHRyVG9MRUEodm9pZCog
d2hlcmUpCisgICAgeworICAgICAgICB1aW50MTZfdCogbG9hZE9wID0gcmVpbnRlcnByZXRfY2Fz
dDx1aW50MTZfdCo+KHdoZXJlKSArIDI7CisKKyAgICAgICAgKmxvYWRPcCA9ICpsb2FkT3AgfCAw
eDE7CisgICAgICAgIEV4ZWN1dGFibGVBbGxvY2F0b3I6OmNhY2hlRmx1c2gobG9hZE9wLCBzaXpl
b2YodWludDE2X3QpKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIHZvaWQgcmVwYXRjaEludDMy
KHZvaWQqIHdoZXJlLCBpbnQzMl90IHZhbHVlKQorICAgIHsKKyAgICAgICAgdWludDE2X3QqIGlu
c3RydWN0aW9uUHRyID0gcmVpbnRlcnByZXRfY2FzdDx1aW50MTZfdCo+KHdoZXJlKTsKKyAgICAg
ICAgCisgICAgICAgIC8qCisgICAgICAgICAgICBjb2RlQCAgbW92LmwgQChvZmZzZXQgLCBQQykg
LCByZWcKKyAgICAgICAgKi8gIAorICAgICAgICAKKyAgICAgICAgaW50IG9mZnNldCA9ICAgKChp
bnQpKmluc3RydWN0aW9uUHRyICYgMHhGRik7CisgICAgICAgIAorICAgICAgICB1aW50MTZfdCog
YWRkcmVzcyAgPSAodWludDE2X3QqKSgob2Zmc2V0IDw8IDIpICsgKCgoaW50KXdoZXJlICsgNCkg
Jih+MHgzKSkpOworICAgICAgICAqcmVpbnRlcnByZXRfY2FzdDxpbnQqPihhZGRyZXNzKSA9IChp
bnQpdmFsdWU7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgcmVsaW5rQ2FsbCh2b2lkKiBmcm9t
LCB2b2lkKiB0bykKKyAgICB7CisgICAgICAgIHVpbnQxNl90KiBpbnN0cnVjdGlvblB0ciA9IHJl
aW50ZXJwcmV0X2Nhc3Q8dWludDE2X3QqPihmcm9tKTsKKyAgICAgICAgaW5zdHJ1Y3Rpb25QdHIg
PSBpbnN0cnVjdGlvblB0ciAtIDM7CisgICAgICAgIAorICAgICAgICBpbnQgb2Zmc2V0ID0gICAo
KGludCkqaW5zdHJ1Y3Rpb25QdHIgJiAweEZGKTsKKyAgICAgICAgCisgICAgICAgIHVpbnQxNl90
KiBhZGRyZXNzICA9ICh1aW50MTZfdCopKChvZmZzZXQgPDwgMikgKyAoKChpbnQpaW5zdHJ1Y3Rp
b25QdHIgKyA0KSAmKH4weDMpKSk7CisgICAgICAgICpyZWludGVycHJldF9jYXN0PGludCo+KGFk
ZHJlc3MpID0gKGludCl0bzsgCisgICAgfQorICAgIAorICAgIHN0YXRpYyB2b2lkIHJlbGlua0p1
bXAodm9pZCogZnJvbSwgdm9pZCogdG8pCisgICAgeworICAgICAgICB1aW50MTZfdCogaW5zdHJ1
Y3Rpb25QdHIgPSByZWludGVycHJldF9jYXN0PHVpbnQxNl90Kj4gKGZyb20pOworICAgICAgICB1
aW50MTZfdCBpbnN0cnVjdGlvbiA9ICppbnN0cnVjdGlvblB0cjsKKyAgICAgICAgaW50IG9mZnNl
dEJpdHM7CisgICAgICAgIHVpbnQxNl90KiBhZGRyZXNzOworICAgICAgICAKKyAgICAgICAgaWYg
KCgoKmluc3RydWN0aW9uUHRyICYgMHhGRjAwKSA9PSBCVF9PUENPREUpIHx8ICgoKmluc3RydWN0
aW9uUHRyICYgMHhGRjAwKSA9PSBCRl9PUENPREUpKSB7CisKKyAgICAgICAgICAgIG9mZnNldEJp
dHMgID0gKGludCl0byAtIChpbnQpZnJvbSAtIDg7CisgICAgICAgICAgICBpbnN0cnVjdGlvblB0
cisrOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgaW50IG9mZnNldCA9ICAgKChpbnQp
Kmluc3RydWN0aW9uUHRyICYgMHhGRik7CisgICAgICAgICAgICBhZGRyZXNzICA9ICh1aW50MTZf
dCopKChvZmZzZXQgPDwgMikgKyAoKChpbnQpaW5zdHJ1Y3Rpb25QdHIgKyA0KSAmKH4weDMpKSk7
CisgICAgICAgICAgICAqcmVpbnRlcnByZXRfY2FzdDxpbnQqPihhZGRyZXNzKSA9IChpbnQpb2Zm
c2V0Qml0czsKKyAgICAgICAgCisgICAgICAgICAgICBpbnN0cnVjdGlvbiA9ICgweDAwMjMgfCAo
Kmluc3RydWN0aW9uUHRyKysgJiAweEYwMCkpOworICAgICAgICAgICAgKmluc3RydWN0aW9uUHRy
KysgPSBpbnN0cnVjdGlvbjsKKyAgICAgICAgICAgIAorICAgICAgICAgfSBlbHNlIGlmICgoKihp
bnN0cnVjdGlvblB0ciArMSkgJiAweDAwMjMpID09IEJSQUZfT1BDT0RFKSB7CisgICAgICAgICAg
ICAgCisgICAgICAgICAgICBvZmZzZXRCaXRzICA9IChpbnQpdG8gLSAoaW50KWZyb20gLSA2Owor
ICAgICAgICAgICAgaW50IG9mZnNldFRvUEMgPSAoKmluc3RydWN0aW9uUHRyICYgMHhGRik7Cisg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBhZGRyZXNz
ICA9ICh1aW50MTZfdCopKChvZmZzZXRUb1BDIDw8IDIpICsgKCgoaW50KWluc3RydWN0aW9uUHRy
ICsgNCkgJih+MHgzKSkpOworICAgICAgICAgICAgKnJlaW50ZXJwcmV0X2Nhc3Q8aW50Kj4oYWRk
cmVzcykgPSAoaW50KW9mZnNldEJpdHM7CisKKyAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorICAgIAorICAgIC8vIExpbmtpbmcgJiBwYXRj
aGluZzoKKworICAgIHZvaWQgbGlua0p1bXAoSm1wU3JjIGZyb20sIEptcERzdCB0bykKKyAgICB7
CisgICAgICAgIEFTU0VSVCh0by5tX29mZnNldCAhPSAtMSk7CisgICAgICAgIEFTU0VSVChmcm9t
Lm1fb2Zmc2V0ICE9IC0xKTsKKyAgICAgICAgCisgICAgICAgIHVpbnQxNl90KiBpbnN0cnVjdGlv
blB0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDE2X3QqPiAoKHJlaW50ZXJwcmV0X2Nhc3Q8aW50
PihkYXRhKCkpICsgZnJvbS5tX29mZnNldCkpOworICAgICAgICB1aW50MTZfdCBpbnN0cnVjdGlv
biA9ICppbnN0cnVjdGlvblB0cjsKKyAgICAgICAgaW50IG9mZnNldEJpdHM7CisgICAgICAgIAor
ICAgICAgICBpZiAoKChpbnN0cnVjdGlvbiAmIDB4RkYwMCkgPT0gQlRfT1BDT0RFKSB8fCAoKGlu
c3RydWN0aW9uICYgMHhGRjAwKSA9PSBCRl9PUENPREUpKSB7CisgICAgICAgIAorICAgICAgICAg
ICAgLyogQlQgbGFiZWwgICAgPT4gQkYgMiAKKyAgICAgICAgICAgICAgIG5vcCAgICAgICAgICAg
IExEUiByZWcKKyAgICAgICAgICAgICAgIG5vcCAgICAgICAgICAgIGJyYWYgQHJlZworICAgICAg
ICAgICAgICAgbm9wICAgICAgICAgICAgbm9wCisgICAgICAgICAgICAqLworICAgICAgICAgICAg
b2Zmc2V0Qml0cyAgPSAodG8ubV9vZmZzZXQgLSBmcm9tLm1fb2Zmc2V0KSAtIDg7CisgICAgICAg
ICAgICBpbnN0cnVjdGlvbiBePSAweDAyMDI7CisgICAgICAgICAgICAqaW5zdHJ1Y3Rpb25QdHIr
KyA9IGluc3RydWN0aW9uOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKCgqaW5z
dHJ1Y3Rpb25QdHIgJiAweEYwMDApID09IDB4RTAwMCkgeworICAgICAgICAgICAgICAgIFNINFdv
cmQqIGFkZHIgPSBnZXRMZHJJbW1BZGRyZXNzT25Qb29sKGluc3RydWN0aW9uUHRyLCBtX2J1ZmZl
ci5wb29sQWRkcmVzcygpKTsKKyAgICAgICAgICAgICAgICAqcmVpbnRlcnByZXRfY2FzdDxpbnQq
PihhZGRyKSA9IChpbnQpb2Zmc2V0Qml0czsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgaW50IG9mZnNldCA9ICAgKChpbnQpKmluc3RydWN0aW9uUHRyICYgMHhGRik7Cisg
ICAgICAgICAgICAgICAgdWludDE2X3QqIGFkZHJlc3MgID0gKHVpbnQxNl90KikoKG9mZnNldCA8
PCAyKSArICgoKGludClpbnN0cnVjdGlvblB0ciArIDQpICYofjB4MykpKTsKKyAgICAgICAgICAg
ICAgICAqcmVpbnRlcnByZXRfY2FzdDxpbnQqPihhZGRyZXNzKSA9IChpbnQpb2Zmc2V0Qml0czsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAKKyAgICAgICAgICAgIGluc3RydWN0aW9uID0g
KDB4MDAyMyB8ICgqaW5zdHJ1Y3Rpb25QdHIrKyAmIDB4RjAwKSk7CisgICAgICAgICAgICAqaW5z
dHJ1Y3Rpb25QdHIrKyA9IGluc3RydWN0aW9uOworICAgICAgICAgICAgIAorICAgICAgICAgfSBl
bHNlIGlmICgoKihpbnN0cnVjdGlvblB0ciArMSkgJiAweDAwMjMpID09IEJSQUZfT1BDT0RFKSB7
CisgICAgICAgICAgICAgCisgICAgICAgICAgICAgLyogTU9WICMgaW1tLCByZWcgID0+IExEUiBy
ZWcKKyAgICAgICAgICAgICAgICBicmFmIEByZWcgICAgICAgICAgYnJhZiBAcmVnCisgICAgICAg
ICAgICAgICAgbm9wICAgICAgICAgICAgICAgIG5vcAorICAgICAgICAgICAgKi8KKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgb2Zmc2V0Qml0cyAgPSAodG8ubV9vZmZzZXQgLSBmcm9tLm1fb2Zm
c2V0KSAtIDY7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGluc3RydWN0aW9uID0gKmluc3Ry
dWN0aW9uUHRyOworICAgICAgICAgICAgaW50IG9mZnNldFRvUEMgPSAoKmluc3RydWN0aW9uUHRy
ICYgMHhGRik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICgoaW5zdHJ1Y3Rpb24gICYg
MHhGMDAwKSA9PSAweEUwMDApIHsKKyAgICAgICAgICAgICAgICBTSDRXb3JkKiBhZGRyID0gZ2V0
TGRySW1tQWRkcmVzc09uUG9vbChpbnN0cnVjdGlvblB0ciwgbV9idWZmZXIucG9vbEFkZHJlc3Mo
KSk7CisgICAgICAgICAgICAgICAgKnJlaW50ZXJwcmV0X2Nhc3Q8aW50Kj4oYWRkcikgPSAoaW50
KW9mZnNldEJpdHM7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICB1aW50MTZfdCogYWRkcmVzcyAgPSAodWludDE2X3QqKSgob2Zmc2V0
VG9QQyA8PCAyKSArICgoKGludClpbnN0cnVjdGlvblB0ciArIDQpICYofjB4MykpKTsKKyAgICAg
ICAgICAgICAgICAqcmVpbnRlcnByZXRfY2FzdDxpbnQqPihhZGRyZXNzKSA9IChpbnQpb2Zmc2V0
Qml0czsKKyAgICAgICAgICAgIH0KKyAgICAgICAgIH0gZWxzZSAgCisgICAgICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKworICAgICB9CisgICAgIAorICAgICAKKyAgICBzdGF0aWMgdm9p
ZCBsaW5rSnVtcEZ1bmModm9pZCogY29kZSwgSm1wU3JjIGZyb20sIHZvaWQqIHRvKQorICAgIHsK
KyAgICAgICAgQVNTRVJUKGZyb20ubV9vZmZzZXQgIT0gLTEpOyAgICAgICAgCisgICAgICAgIHVp
bnQxNl90KiBpbnN0cnVjdGlvblB0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDE2X3QqPiAocmVp
bnRlcnByZXRfY2FzdDxpbnQ+KGNvZGUpICsgZnJvbS5tX29mZnNldCk7CisgICAgICAgIHVpbnQx
Nl90IGluc3RydWN0aW9uID0gKmluc3RydWN0aW9uUHRyOworICAgICAgICAKKyAgICAgICAgQVNT
RVJUKChpbnN0cnVjdGlvbiA9PSBCVF9PUENPREUpIHx8IChpbnN0cnVjdGlvbiA9PSBCRl9PUENP
REUpKTsKKyAgICAgICAgCisgICAgICAgIC8qIEJUIGxhYmVsICAgID0+IEJGIDIgCisgICAgICAg
ICAgICAgIG5vcCAgICAgICAgIExEUiByZWcKKyAgICAgICAgICAgICAgbm9wICAgICAgICAganVt
cCBAcmVnCisgICAgICAgICAgICAgIG5vcCAgICAgICAgIG5vcAorICAgICAgICAqLworICAgICAg
ICBpbnN0cnVjdGlvbiBePSAweDAyMDI7CisgICAgICAgICppbnN0cnVjdGlvblB0cisrID0gaW5z
dHJ1Y3Rpb247CisgICAgCisgICAgICAgIC8qdGhlIGFzc2VtYmx5IGNvZGUgaXMgZ2VuZXJhdGVk
Ki8KKyAgICAgICAgCisgICAgICAgIGludCBvZmZzZXQgPSAgICgoaW50KSppbnN0cnVjdGlvblB0
ciAmIDB4RkYpOworICAgICAgICB1aW50MTZfdCogYWRkcmVzcyAgPSAodWludDE2X3QqKSgob2Zm
c2V0IDw8IDIpICsgKCgoaW50KWluc3RydWN0aW9uUHRyICsgNCkgJih+MHgzKSkpOworICAgICAg
ICAqcmVpbnRlcnByZXRfY2FzdDxpbnQqPihhZGRyZXNzKSA9IChpbnQpdG87CisgICAgCisgICAg
ICAgIGluc3RydWN0aW9uID0gKDB4NDAyQiB8ICgqaW5zdHJ1Y3Rpb25QdHIrKyAmIDB4RjAwKSk7
CisgICAgICAgICppbnN0cnVjdGlvblB0cisrID0gaW5zdHJ1Y3Rpb247CisgICAgICAgICAgICAg
CisgICAgfSAKKworICAKKyAgICBzdGF0aWMgdm9pZCogZ2V0UmVsb2NhdGVkQWRkcmVzcyh2b2lk
KiBjb2RlLCBKbXBTcmMganVtcCkKKyAgICB7CisgICAgICAgIHJldHVybiByZWludGVycHJldF9j
YXN0PHZvaWQqPihyZWludGVycHJldF9jYXN0PGludD4oY29kZSkgKyBqdW1wLm1fb2Zmc2V0KTsK
KyAgICB9CisgICAgCisgICAgc3RhdGljIHZvaWQqIGdldFJlbG9jYXRlZEFkZHJlc3Modm9pZCog
Y29kZSwgSm1wRHN0IGRlc3RpbmF0aW9uKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGRlc3RpbmF0
aW9uLm1fb2Zmc2V0ICE9IC0xKTsKKworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2
b2lkKj4ocmVpbnRlcnByZXRfY2FzdDxpbnQ+KGNvZGUpICsgZGVzdGluYXRpb24ubV9vZmZzZXQp
OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgaW50IGdldERpZmZlcmVuY2VCZXR3ZWVuTGFiZWxz
KEptcERzdCBzcmMsIEptcERzdCBkc3QpCisgICAgeworICAgICAgICByZXR1cm4gZHN0Lm1fb2Zm
c2V0IC0gc3JjLm1fb2Zmc2V0OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgaW50IGdldERpZmZl
cmVuY2VCZXR3ZWVuTGFiZWxzKEptcERzdCBzcmMsIEptcFNyYyBkc3QpCisgICAgeworICAgICAg
ICByZXR1cm4gZHN0Lm1fb2Zmc2V0IC0gc3JjLm1fb2Zmc2V0OworICAgIH0KKyAgICAKKyAgICBz
dGF0aWMgaW50IGdldERpZmZlcmVuY2VCZXR3ZWVuTGFiZWxzKEptcFNyYyBzcmMsIEptcERzdCBk
c3QpCisgICAgeworICAgICAgICByZXR1cm4gZHN0Lm1fb2Zmc2V0IC0gc3JjLm1fb2Zmc2V0Owor
ICAgIH0KKyAgICAKKyAgICBzdGF0aWMgdm9pZCBwYXRjaFBvaW50ZXIodm9pZCogY29kZSwgSm1w
RHN0IHdoZXJlLCB2b2lkKiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHBhdGNoUG9pbnRlcihyZWlu
dGVycHJldF9jYXN0PGNoYXIqPihjb2RlKSArIHdoZXJlLm1fb2Zmc2V0LCB2YWx1ZSk7CisgICAg
fQorICAgIAorICAgIHN0YXRpYyB2b2lkIHBhdGNoUG9pbnRlcih2b2lkKiBjb2RlLCB2b2lkKiB2
YWx1ZSkKKyAgICB7CisgICAgICAgIHBhdGNoSW50MzIoY29kZSwgcmVpbnRlcnByZXRfY2FzdDx1
aW50MzJfdD4odmFsdWUpKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIHZvaWQgcGF0Y2hJbnQz
Mih2b2lkKiBjb2RlLCB1aW50MzJfdCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHVpbnQxNl90KiBp
bnN0cnVjdGlvblB0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDE2X3QqPihjb2RlKTsKKyAgICAg
ICAgCisgICAgICAgIC8qCisgICAgICAgIGNvZGVAICBtb3YubCBAKG9mZnNldCAsIFBDKSAsIHJl
ZworICAgICovICAKKyAgICAgICAgaW50IG9mZnNldCA9ICAgKChpbnQpKmluc3RydWN0aW9uUHRy
ICYgMHhGRik7CisgICAgICAgIAorICAgICAgICB1aW50MTZfdCogYWRkcmVzcyAgPSAodWludDE2
X3QqKSgob2Zmc2V0IDw8IDIpICsgKCgoaW50KWNvZGUgKyA0KSAmKH4weDMpKSk7CisgICAgICAg
ICpyZWludGVycHJldF9jYXN0PGludCo+KGFkZHJlc3MpID0gKGludCl2YWx1ZTsKKyAgICB9CisK
KyAgICAKKyAgICB2b2lkKiBleGVjdXRhYmxlQ29weShFeGVjdXRhYmxlUG9vbCogYWxsb2NhdG9y
KQorICAgIHsKKyAgICAgICAgdm9pZCogY29weSA9IG1fYnVmZmVyLmV4ZWN1dGFibGVDb3B5KGFs
bG9jYXRvcik7CisKKyAgICAgICAgQVNTRVJUKGNvcHkpOyAgICAgICAgCisgICAgICAgIHJldHVy
biBjb3B5OworICAgIH0KKworICAgIHZvaWQgcHJlZml4KHVpbnQxNl90IHByZSkKKyAgICB7Cisg
ICAgICAgIG1fYnVmZmVyLnB1dEJ5dGUocHJlKTsKKyAgICB9CisgICAgICAgIAorICAgIHZvaWQg
b25lU2hvcnRPcCh1aW50MTZfdCBvcGNvZGUpCisgICAgeworICAgICAgICBtX2J1ZmZlci5wdXRT
aG9ydChvcGNvZGUpOyAgICAgICAgICAgIAorICAgIH0KKworICAgIHZvaWQgZW5zdXJlU3BhY2Uo
aW50IHNwYWNlKQorICAgIHsKKyAgICAgICAgbV9idWZmZXIuZW5zdXJlU3BhY2Uoc3BhY2UpOwor
ICAgIH0KKyAgICAgICAgCisgICAgdm9pZCBlbnN1cmVTcGFjZShpbnQgaW5zblNwYWNlLCBpbnQg
Y29uc3RTcGFjZSkKKyAgICB7CisgICAgICAgIG1fYnVmZmVyLmVuc3VyZVNwYWNlKGluc25TcGFj
ZSwgY29uc3RTcGFjZSk7CisgICAgfQorICAgIAorICAgIC8vIEFkbWluaXN0cmF0aXZlIG1ldGhv
ZHM6CisKKyAgICB2b2lkKiBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9idWZmZXIuZGF0YSgpOyB9
CisgICAgaW50IHNpemUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fYnVmZmVyLnNpemUoKTsK
KyAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBTSDRCdWZmZXIgbV9idWZmZXI7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShBU1NFTUJMRVIpICYmIENQ
VShTSDQpCisKKyNlbmRpZiAvLyBTSDRBc3NlbWJsZXJfaApkaWZmIC0tZ2l0IGEvSmF2YVNjcmlw
dENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaCBiL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVj
dXRhYmxlQWxsb2NhdG9yLmgKaW5kZXggYjYwZDU5MS4uYzcyYjJiMyAxMDA2NDQKLS0tIGEvSmF2
YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaAorKysgYi9KYXZhU2NyaXB0Q29y
ZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5oCkBAIC00Nyw2ICs0NywxMyBAQAogI2luY2x1ZGUg
PHN5cy9jYWNoZWN0bC5oPgogI2VuZGlmCiAKKyNpZiBDUFUoU0g0KSAmJiBPUyhMSU5VWCkKKyNp
bmNsdWRlIDxhc20vY2FjaGVjdGwuaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CisjaW5jbHVk
ZSA8c3lzL3N5c2NhbGwuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorCiAjaWYgT1Mo
V0lOQ0UpCiAvLyBGcm9tIHBrZnVuY3MuaCAocHJpdmF0ZSBoZWFkZXIgZmlsZSBmcm9tIHRoZSBQ
bGF0Zm9ybSBCdWlsZGVyKQogI2RlZmluZSBDQUNIRV9TWU5DX0FMTCAweDA3RgpAQCAtMjk0LDYg
KzMwMSwzMCBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBDYWNoZVJhbmdlRmx1c2goY29kZSwg
c2l6ZSwgQ0FDSEVfU1lOQ19BTEwpOwogICAgIH0KKyNlbGlmIENQVShTSDQpICYmIE9TKExJTlVY
KQorCisjaWZuZGVmIF9fTlJfY2FjaGVmbHVzaAorI2RlZmluZSBfX05SX2NhY2hlZmx1c2ggX19O
Ul9tb2RpZnlfbGR0CisjZW5kaWYKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGRlZmF1bHRMaW51
eFBhZ2VTaXplID0gNDA5NjsKKworICAgIHN0YXRpYyB2b2lkIGNhY2hlRmx1c2godm9pZCogY29k
ZSwgc2l6ZV90IHNpemUpCisgICAgeworICAgICAgICB1bnNpZ25lZCBpbnQgYSwgYjsKKyAgICAg
ICAgYSA9ICh1bnNpZ25lZCBpbnQpY29kZSAmIH4oZGVmYXVsdExpbnV4UGFnZVNpemUgLSAxKTsK
KyAgICAgICAgYiA9ICgodW5zaWduZWQgaW50KWNvZGUgKyBzaXplICsgKGRlZmF1bHRMaW51eFBh
Z2VTaXplIC0gMSkpICYgfihkZWZhdWx0TGludXhQYWdlU2l6ZSAtIDEpOworCisgICAgICAgIGlu
dCByZXMgPSBzeXNjYWxsKF9fTlJfY2FjaGVmbHVzaCwgYSwgZGVmYXVsdExpbnV4UGFnZVNpemUs
IENBQ0hFRkxVU0hfRF9XQiB8IENBQ0hFRkxVU0hfSSk7CisgICAgICAgIEFTU0VSVCghcmVzKTsK
KworICAgICAgICB3aGlsZSAoYiAtIGEgPiBkZWZhdWx0TGludXhQYWdlU2l6ZSkgeworICAgICAg
ICAgICAgYSA9IGEgKyBkZWZhdWx0TGludXhQYWdlU2l6ZTsKKyAgICAgICAgICAgIHJlcyA9IHN5
c2NhbGwoX19OUl9jYWNoZWZsdXNoLCBhLCBkZWZhdWx0TGludXhQYWdlU2l6ZSwgQ0FDSEVGTFVT
SF9EX1dCIHwgQ0FDSEVGTFVTSF9JKTsKKworICAgICAgICAgICAgQVNTRVJUKCFyZXMpOworICAg
ICAgICB9CisgICAgfQogI2Vsc2UKICAgICAjZXJyb3IgIlRoZSBjYWNoZUZsdXNoIHN1cHBvcnQg
aXMgbWlzc2luZyBvbiB0aGlzIHBsYXRmb3JtLiIKICNlbmRpZgpkaWZmIC0tZ2l0IGEvSmF2YVNj
cmlwdENvcmUveWFyci9SZWdleEpJVC5jcHAgYi9KYXZhU2NyaXB0Q29yZS95YXJyL1JlZ2V4SklU
LmNwcAppbmRleCA1YTUzY2VkLi41YTE5OWU3IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS95
YXJyL1JlZ2V4SklULmNwcAorKysgYi9KYXZhU2NyaXB0Q29yZS95YXJyL1JlZ2V4SklULmNwcApA
QCAtNTMsNiArNTMsMTggQEAgY2xhc3MgUmVnZXhHZW5lcmF0b3IgOiBwcml2YXRlIE1hY3JvQXNz
ZW1ibGVyIHsKICAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCByZWdUMSA9IEFSTVJlZ2lzdGVy
czo6cjY7CiAKICAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCByZXR1cm5SZWdpc3RlciA9IEFS
TVJlZ2lzdGVyczo6cjA7CisjZWxpZiBDUFUoU0g0KQorICAgIHN0YXRpYyBjb25zdCBSZWdpc3Rl
cklEIGlucHV0ID0gU0g0OjpSNDsKKyAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCBpbmRleCA9
IFNINDo6UjU7CisgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgbGVuZ3RoID0gU0g0OjpSNjsK
KyAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCBvdXRwdXQgPSBTSDQ6OlI3OworCisgICAgc3Rh
dGljIGNvbnN0IFJlZ2lzdGVySUQgcmVnVDAgPSBTSDQ6OlIwOworICAgIHN0YXRpYyBjb25zdCBS
ZWdpc3RlcklEIHJlZ1QxID0gU0g0OjpSMTsKKworICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklE
IHJldHVyblJlZ2lzdGVyID0gU0g0OjpSMDsKKyNkZWZpbmUgWmVybyBTSDRBc3NlbWJsZXI6OkVR
CisjZGVmaW5lIE5vblplcm8gU0g0QXNzZW1ibGVyOjpORQogI2VsaWYgQ1BVKE1JUFMpCiAgICAg
c3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgaW5wdXQgPSBNSVBTUmVnaXN0ZXJzOjphMDsKICAgICBz
dGF0aWMgY29uc3QgUmVnaXN0ZXJJRCBpbmRleCA9IE1JUFNSZWdpc3RlcnM6OmExOwpAQCAtNTU1
LDYgKzU2Nyw3IEBAIGNsYXNzIFJlZ2V4R2VuZXJhdG9yIDogcHJpdmF0ZSBNYWNyb0Fzc2VtYmxl
ciB7CiAgICAgICAgIH0KICAgICB9CiAKKyNpZiAhQ1BVKFNINCkKICAgICB2b2lkIGdlbmVyYXRl
UGF0dGVybkNoYXJhY3RlclBhaXIoVGVybUdlbmVyYXRpb25TdGF0ZSYgc3RhdGUpCiAgICAgewog
ICAgICAgICBjb25zdCBSZWdpc3RlcklEIGNoYXJhY3RlciA9IHJlZ1QwOwpAQCAtNTc4LDYgKzU5
MSw3IEBAIGNsYXNzIFJlZ2V4R2VuZXJhdG9yIDogcHJpdmF0ZSBNYWNyb0Fzc2VtYmxlciB7CiAg
ICAgICAgIH0gZWxzZQogICAgICAgICAgICAgc3RhdGUuanVtcFRvQmFja3RyYWNrKGJyYW5jaDMy
V2l0aFVuYWxpZ25lZEhhbGZXb3JkcyhOb3RFcXVhbCwgQmFzZUluZGV4KGlucHV0LCBpbmRleCwg
VGltZXNUd28sIHN0YXRlLmlucHV0T2Zmc2V0KCkgKiBzaXplb2YoVUNoYXIpKSwgSW1tMzIoY2hQ
YWlyKSksIHRoaXMpOwogICAgIH0KKyNlbmRpZgogCiAgICAgdm9pZCBnZW5lcmF0ZVBhdHRlcm5D
aGFyYWN0ZXJGaXhlZChUZXJtR2VuZXJhdGlvblN0YXRlJiBzdGF0ZSkKICAgICB7CkBAIC0xMTQy
LDggKzExNTYsMTMgQEAgY2xhc3MgUmVnZXhHZW5lcmF0b3IgOiBwcml2YXRlIE1hY3JvQXNzZW1i
bGVyIHsKICAgICAgICAgICAgIGNhc2UgUXVhbnRpZmllckZpeGVkQ291bnQ6CiAgICAgICAgICAg
ICAgICAgaWYgKHRlcm0ucXVhbnRpdHlDb3VudCA9PSAxKSB7CiAgICAgICAgICAgICAgICAgICAg
IGlmIChzdGF0ZS5pc1NpbmdsZVBhdHRlcm5DaGFyYWN0ZXJMb29rYWhlYWRUZXJtKCkgJiYgKHN0
YXRlLmxvb2thaGVhZFRlcm0oKS5pbnB1dFBvc2l0aW9uID09ICh0ZXJtLmlucHV0UG9zaXRpb24g
KyAxKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIAorI2lmICFDUFUoU0g0KQogICAgICAg
ICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVQYXR0ZXJuQ2hhcmFjdGVyUGFpcihzdGF0ZSk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5uZXh0VGVybSgpOworI2Vsc2UKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGdlbmVyYXRlUGF0dGVybkNoYXJhY3RlclNpbmdsZShzdGF0ZSk7Cisj
ZW5kaWYKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAg
ICBnZW5lcmF0ZVBhdHRlcm5DaGFyYWN0ZXJTaW5nbGUoc3RhdGUpOwogICAgICAgICAgICAgICAg
IH0gZWxzZQpAQCAtMTQxNyw2ICsxNDM2LDkgQEAgY2xhc3MgUmVnZXhHZW5lcmF0b3IgOiBwcml2
YXRlIE1hY3JvQXNzZW1ibGVyIHsKICAgICAgICAgcHVzaChBUk1SZWdpc3RlcnM6OnI1KTsKICAg
ICAgICAgcHVzaChBUk1SZWdpc3RlcnM6OnI2KTsKICAgICAgICAgbW92ZShBUk1SZWdpc3RlcnM6
OnIzLCBvdXRwdXQpOworI2VsaWYgQ1BVKFNINCkKKyAgICAgICAgcHVzaChTSDQ6OlIxMCk7Cisg
ICAgICAgIHB1c2goU0g0OjpSMTEpOwogI2VsaWYgQ1BVKE1JUFMpCiAgICAgICAgIC8vIERvIG5v
dGhpbmcuCiAjZW5kaWYKQEAgLTE0MzYsNiArMTQ1OCw5IEBAIGNsYXNzIFJlZ2V4R2VuZXJhdG9y
IDogcHJpdmF0ZSBNYWNyb0Fzc2VtYmxlciB7CiAgICAgICAgIHBvcChBUk1SZWdpc3RlcnM6OnI2
KTsKICAgICAgICAgcG9wKEFSTVJlZ2lzdGVyczo6cjUpOwogICAgICAgICBwb3AoQVJNUmVnaXN0
ZXJzOjpyNCk7CisjZWxpZiBDUFUoU0g0KQorICAgICAgICBwb3AoU0g0OjpSMTEpOworICAgICAg
ICBwb3AoU0g0OjpSMTApOwogI2VsaWYgQ1BVKE1JUFMpCiAgICAgICAgIC8vIERvIG5vdGhpbmcK
ICNlbmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>70749</attachid>
            <date>2010-10-14 10:43:25 -0700</date>
            <delta_ts>2010-12-10 07:57:20 -0800</delta_ts>
            <desc>SH4 JIT </desc>
            <filename>SH4-JIT.patch</filename>
            <type>text/plain</type>
            <size>201124</size>
            <attacher name="thouraya">thouraya.andolsi</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwppbmRleCBjN2MwOWIwLi42NjJkYTNmIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzgg
QEAKKzIwMTAtMTAtMTQgIFRob3VyYXlhIEFORE9MU0kgIDx0aG91cmF5YS5hbmRvbHNpQHN0LmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQg
SklUIGZvciBTSDQgcGxhdGZvcm1zLgorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06CisgICAg
ICAgICogYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaDoKKyAgICAgICAgKEpTQzo6
QWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjo6bGlua0p1bXBGdW5jKToKKyAgICAgICAgKiBhc3NlbWJs
ZXIvTGlua0J1ZmZlci5oOgorICAgICAgICAoSlNDOjpMaW5rQnVmZmVyOjpsaW5rKToKKyAgICAg
ICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaDoKKyAgICAgICAgKiBqaXQvRXhlY3V0YWJs
ZUFsbG9jYXRvci5oOgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQWxsb2NhdG9yOjpjYWNoZUZs
dXNoKToKKyAgICAgICAgKiBqaXQvSklULmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0VGlt
ZW91dENoZWNrKToKKyAgICAgICAgKiBqaXQvSklULmg6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dEp1bXBJZkltbWVkaWF0ZU51bWJlcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEp1bXBJZk5v
dEltbWVkaWF0ZU51bWJlcik6CisgICAgICAgICogaml0L0pJVENhbGwuY3BwOgorICAgICAgICAo
SlNDOjpKSVQ6OmNvbXBpbGVPcENhbGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVPcENh
bGxTbG93Q2FzZSk6CisgICAgICAgICogaml0L0pJVElubGluZU1ldGhvZHMuaDoKKyAgICAgICAg
KEpTQzo6SklUOjpiZWdpblVuaW50ZXJydXB0ZWRTZXF1ZW5jZSk6CisgICAgICAgIChKU0M6OkpJ
VDo6cHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKToKKyAgICAgICAgKEpTQzo6SklUOjpy
ZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybik6CisgICAgICAgIChKU0M6OkpJVDo6cmVz
dG9yZUFyZ3VtZW50UmVmZXJlbmNlRm9yVHJhbXBvbGluZSk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdEp1bXBJZk5vdEpTQ2VsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEp1bXBJZkltbWVk
aWF0ZUludGVnZXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRKdW1wSWZOb3RJbW1lZGlhdGVJ
bnRlZ2VyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0SnVtcElmTm90SW1tZWRpYXRlSW50ZWdl
cnMpOgorICAgICAgICAqIGppdC9KSVRPcGNvZGVzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpw
cml2YXRlQ29tcGlsZUNUSU1hY2hpbmVUcmFtcG9saW5lcyk6CisgICAgICAgIChKU0M6OkpJVDo6
cHJpdmF0ZUNvbXBpbGVDVElOYXRpdmVDYWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X2VuZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX2dldF9zY29wZWRfdmFyKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X29wX3B1dF9zY29wZWRfdmFyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3RlYXJf
b2ZmX2FyZ3VtZW50cyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9yZXRfb2JqZWN0X29y
X3RoaXMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdG9fcHJpbWl0aXZlKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX2pmYWxzZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF9qZXFfbnVsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qbmVxX251bGwpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfanRydWUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfbmVxKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9wbmFtZXMpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmNvbXBpbGVPcFN0cmljdEVxKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX3RvX2pzbnVtYmVyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2VxX251bGwpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbmVxX251bGwpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfb3BfZW50ZXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZW50ZXJfd2l0aF9h
Y3RpdmF0aW9uKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2NyZWF0ZV9hcmd1bWVudHMp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHJvZmlsZV93aWxsX2NhbGwpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHJvZmlsZV9kaWRfY2FsbCk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9yZXNvbHZlX2dsb2JhbF9keW5hbWljKToKKyAgICAgICAgKiBqaXQvSklUUHJv
cGVydHlBY2Nlc3MuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbCk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3BfbWV0aG9kX2NoZWNrKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlR2V0
QnlJZFNsb3dDYXNlKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5SWRU
cmFuc2l0aW9uKToKKyAgICAgICAgKiBqaXQvSklUU3R1YnMuY3BwOgorICAgICAgICAqIGppdC9K
SVRTdHVicy5oOgorICAgICAgICAoSlNDOjpKSVRTdGFja0ZyYW1lOjpyZXR1cm5BZGRyZXNzU2xv
dCk6CisgICAgICAgICogaml0L0pTSW50ZXJmYWNlSklULmg6CisgICAgICAgICogd3RmL1BsYXRm
b3JtLmg6CisKKyAgICAgICAgWUFSIEpJVCBmb3IgU0g0LgorICAgICAgICAqIHlhcnIvUmVnZXhK
SVQuY3BwOgorICAgICAgICAoSlNDOjpZYXJyOjpSZWdleEdlbmVyYXRvcjo6Z2VuZXJhdGVUZXJt
KToKKyAgICAgICAgKEpTQzo6WWFycjo6UmVnZXhHZW5lcmF0b3I6OmdlbmVyYXRlRW50ZXIpOgor
ICAgICAgICAoSlNDOjpZYXJyOjpSZWdleEdlbmVyYXRvcjo6Z2VuZXJhdGVSZXR1cm4pOgorCiAy
MDEwLTA4LTA5ICBPbGl2ZXIgSHVudCAgPG9saXZlckBhcHBsZS5jb20+CiAKICAgICAgICAgRml4
IFF0L0FSTSBhZ2FpbiwgdGhpcyB0aW1lIGluY2x1ZGluZyB0aGUgb3RoZXIgY2hhbmdlZCBmaWxl
LgpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUuYW0gYi9KYXZhU2NyaXB0
Q29yZS9HTlVtYWtlZmlsZS5hbQppbmRleCAyZWFkOGUwLi41NTg5MzZkIDEwMDY0NAotLS0gYS9K
YXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5hbQorKysgYi9KYXZhU2NyaXB0Q29yZS9HTlVtYWtl
ZmlsZS5hbQpAQCAtODQsOCArODQsMTEgQEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCiAJ
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0LmggXAogCUphdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oIFwKIAlKYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODYuaCBcCisJSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyU0g0LmggXAogCUphdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9SZXBhdGNoQnVmZmVyLmggXAogCUphdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9YODZBc3NlbWJs
ZXIuaCBcCisJSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1NINEFzc2VtYmxlci5oIFwKKwlKYXZh
U2NyaXB0Q29yZS9hc3NlbWJsZXIvU0g0QXNzZW1ibGVyLmNwcCBcCiAJSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29kZUJsb2NrLmNwcCBcCiAJSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmggXAogCUphdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V2YWxDb2RlQ2FjaGUuaCBcCkBAIC0x
NTgsNyArMTYxLDYgQEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCiAJSmF2YVNjcmlwdENv
cmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuY3BwIFwKIAlKYXZhU2NyaXB0Q29yZS9qaXQvRXhl
Y3V0YWJsZUFsbG9jYXRvci5oIFwKIAlKYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYzMy
XzY0LmNwcCBcCi0JSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwIFwKIAlKYXZh
U2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcCBcCiAJSmF2YVNjcmlwdENvcmUvaml0L0pJ
VENhbGwuY3BwIFwKIAlKYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oIFwKQEAgLTUzMyw2ICs1
MzUsMTQgQEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCiAJSmF2YVNjcmlwdENvcmUveWFy
ci9SZWdleFBhcnNlci5oIFwKIAlKYXZhU2NyaXB0Q29yZS95YXJyL1JlZ2V4UGF0dGVybi5oCiAK
K2lmIENQVV9TSDQKK2phdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAorICAgIEphdmFTY3JpcHRD
b3JlL2ppdC9KSVRBcml0aG1ldGljX3NoNC5jcHAKK2Vsc2UKK2phdmFzY3JpcHRjb3JlX3NvdXJj
ZXMgKz0gXAorICAgIEphdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAorZW5kaWYK
KwogaWYgVEFSR0VUX1dJTjMyCiBqYXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIAlKYXZhU2Ny
aXB0Q29yZS93dGYvVGhyZWFkU3BlY2lmaWNXaW4uY3BwIFwKZGlmZiAtLWdpdCBhL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmggYi9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oCmluZGV4IDVkYjJjYjkuLjljN2U3
YjAgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNz
ZW1ibGVyLmgKKysrIGIvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3Nl
bWJsZXIuaApAQCAtNDksNiArNDksNyBAQCBwdWJsaWM6CiAgICAgY2xhc3MgSnVtcDsKIAogICAg
IHR5cGVkZWYgdHlwZW5hbWUgQXNzZW1ibGVyVHlwZTo6UmVnaXN0ZXJJRCBSZWdpc3RlcklEOwor
ICAgIHR5cGVkZWYgdHlwZW5hbWUgQXNzZW1ibGVyVHlwZTo6RlBSZWdpc3RlcklEIEZQUmVnaXN0
ZXJJRDsKICAgICB0eXBlZGVmIHR5cGVuYW1lIEFzc2VtYmxlclR5cGU6OkptcFNyYyBKbXBTcmM7
CiAgICAgdHlwZWRlZiB0eXBlbmFtZSBBc3NlbWJsZXJUeXBlOjpKbXBEc3QgSm1wRHN0OwogCkBA
IC00ODgsNiArNDg5LDExIEBAIHByb3RlY3RlZDoKICAgICAgICAgQXNzZW1ibGVyVHlwZTo6bGlu
a0p1bXAoY29kZSwganVtcC5tX2ptcCwgdGFyZ2V0LmRhdGFMb2NhdGlvbigpKTsKICAgICB9CiAK
KyAgICBzdGF0aWMgdm9pZCBsaW5rSnVtcEZ1bmModm9pZCogY29kZSwgSnVtcCBqdW1wLCBDb2Rl
TG9jYXRpb25MYWJlbCB0YXJnZXQpCisgICAgeworICAgICAgICBBc3NlbWJsZXJUeXBlOjpsaW5r
SnVtcEZ1bmMoY29kZSwganVtcC5tX2ptcCwgdGFyZ2V0LmRhdGFMb2NhdGlvbigpKTsKKyAgICB9
CisKICAgICBzdGF0aWMgdm9pZCBsaW5rUG9pbnRlcih2b2lkKiBjb2RlLCB0eXBlbmFtZSBBc3Nl
bWJsZXJUeXBlOjpKbXBEc3QgbGFiZWwsIHZvaWQqIHZhbHVlKQogICAgIHsKICAgICAgICAgQXNz
ZW1ibGVyVHlwZTo6bGlua1BvaW50ZXIoY29kZSwgbGFiZWwsIHZhbHVlKTsKZGlmZiAtLWdpdCBh
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmggYi9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvTGlua0J1ZmZlci5oCmluZGV4IDYyNGQxY2MuLjRkOTY1ZWQgMTAwNjQ0Ci0tLSBh
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmgKKysrIGIvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuaApAQCAtMTE1LDYgKzExNSwxMSBAQCBwdWJsaWM6CiAg
ICAgICAgIGp1bXAubV9qbXAgPSBhcHBseU9mZnNldChqdW1wLm1fam1wKTsKICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OmxpbmtKdW1wKGNvZGUoKSwganVtcCwgbGFiZWwpOwogICAgIH0KKyAgICAK
KyAgICB2b2lkIGxpbmsoSnVtcCBqdW1wLCBGdW5jdGlvblB0ciBmdW5jdGlvbikKKyAgICB7Cisg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpsaW5rSnVtcEZ1bmMoY29kZSgpLCBqdW1wLm1fam1wLCBD
b2RlTG9jYXRpb25MYWJlbChmdW5jdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKSk7CisgICAgfQog
CiAgICAgdm9pZCBsaW5rKEp1bXBMaXN0IGxpc3QsIENvZGVMb2NhdGlvbkxhYmVsIGxhYmVsKQog
ICAgIHsKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxl
ci5oIGIvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmgKaW5kZXggY2Ux
YmU3OC4uMmFlNjQ3MyAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3Jv
QXNzZW1ibGVyLmgKKysrIGIvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVy
LmgKQEAgLTUwLDYgKzUwLDEwIEBAIG5hbWVzcGFjZSBKU0MgeyB0eXBlZGVmIE1hY3JvQXNzZW1i
bGVyWDg2IE1hY3JvQXNzZW1ibGVyQmFzZTsgfTsKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlclg4
Nl82NC5oIgogbmFtZXNwYWNlIEpTQyB7IHR5cGVkZWYgTWFjcm9Bc3NlbWJsZXJYODZfNjQgTWFj
cm9Bc3NlbWJsZXJCYXNlOyB9OwogCisjZWxpZiBDUFUoU0g0KQorI2luY2x1ZGUgIk1hY3JvQXNz
ZW1ibGVyU0g0LmgiCituYW1lc3BhY2UgSlNDIHsgdHlwZWRlZiBNYWNyb0Fzc2VtYmxlclNINCBN
YWNyb0Fzc2VtYmxlckJhc2U7IH07CisKICNlbHNlCiAjZXJyb3IgIlRoZSBNYWNyb0Fzc2VtYmxl
ciBpcyBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgcGxhdGZvcm0uIgogI2VuZGlmCmRpZmYgLS1naXQg
YS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJTSDQuaCBiL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclNINC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjk2NzE0OWMKLS0tIC9kZXYvbnVsbAorKysgYi9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJTSDQuaApAQCAtMCwwICsxLDExNjggQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBTVE1pY3JvZWxlY3Ryb25pY3MuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBXcml0dGVuIGJ5IFRob3VyYXlhIEFuZG9sc2kgKHRob3VyYXlhLmFuZG9s
c2lAc3QuY29tKS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisK
KworI2lmbmRlZiBNYWNyb0Fzc2VtYmxlclNINF9oCisjZGVmaW5lIE1hY3JvQXNzZW1ibGVyU0g0
X2gKKworI2luY2x1ZGUgImFzc2VydC5oIgorI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorI2lm
IEVOQUJMRShBU1NFTUJMRVIpCisKKyNpbmNsdWRlICJBYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgi
CisjaW5jbHVkZSAiU0g0QXNzZW1ibGVyLmgiCisKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNz
IE1hY3JvQXNzZW1ibGVyU0g0IDogcHVibGljIEFic3RyYWN0TWFjcm9Bc3NlbWJsZXI8U0g0QXNz
ZW1ibGVyPiB7CitwdWJsaWM6CisKKyAgICB0eXBlZGVmIFNINEFzc2VtYmxlcjo6Q29uZGl0aW9u
IENvbmRpdGlvbjsKKyAgICB0eXBlZGVmIFNINEFzc2VtYmxlcjo6RlBSZWdpc3RlcklEIEZQUmVn
aXN0ZXJJRDsKKyAgICBzdGF0aWMgY29uc3QgQ29uZGl0aW9uIEVxdWFsID0gU0g0QXNzZW1ibGVy
OjpFUTsKKyAgICBzdGF0aWMgY29uc3QgQ29uZGl0aW9uIE5vdEVxdWFsID0gU0g0QXNzZW1ibGVy
OjpORTsKKyAgICBzdGF0aWMgY29uc3QgQ29uZGl0aW9uIEdyZWF0ZXJUaGFuID0gU0g0QXNzZW1i
bGVyOjpHVDsKKyAgICBzdGF0aWMgY29uc3QgQ29uZGl0aW9uIEdyZWF0ZXJUaGFuT3JFcXVhbCA9
IFNINEFzc2VtYmxlcjo6R0U7CisgICAgc3RhdGljIGNvbnN0IENvbmRpdGlvbiBMZXNzVGhhbiA9
IFNINEFzc2VtYmxlcjo6TFQ7CisgICAgc3RhdGljIGNvbnN0IENvbmRpdGlvbiBMZXNzVGhhbk9y
RXF1YWwgPSBTSDRBc3NlbWJsZXI6OkxFOworICAgIHN0YXRpYyBjb25zdCBDb25kaXRpb24gVUdy
ZWF0ZXJUaGFuID0gU0g0QXNzZW1ibGVyOjpISTsgLy8gdW5zaWdlbmQgZ3JlYXRlciB0aGFuCisg
ICAgc3RhdGljIGNvbnN0IENvbmRpdGlvbiBVR3JlYXRlclRoYW5PckVxdWFsID0gU0g0QXNzZW1i
bGVyOjpIUzsgLy8gdW5zaWdlbmQgZ3JlYXRlciB0aGFuIG9yIGVxdWFsICAgIAorICAgIHN0YXRp
YyBjb25zdCBDb25kaXRpb24gVUxlc3NUaGFuID0gU0g0QXNzZW1ibGVyOjpMSTsgLy8gdW5zaWdl
bmQgZ3JlYXRlciB0aGFuCisgICAgc3RhdGljIGNvbnN0IENvbmRpdGlvbiBVTGVzc1RoYW5PckVx
dWFsID0gU0g0QXNzZW1ibGVyOjpMUzsgLy8gdW5zaWdlbmQgZ3JlYXRlciB0aGFuIG9yIGVxdWFs
CisgICAgc3RhdGljIGNvbnN0IENvbmRpdGlvbiBaZXJvID0gU0g0QXNzZW1ibGVyOjpFUTsKKyAg
ICBzdGF0aWMgY29uc3QgQ29uZGl0aW9uIE5vblplcm8gPSBTSDRBc3NlbWJsZXI6Ok5FOworICAg
IHN0YXRpYyBjb25zdCBDb25kaXRpb24gT3ZlcmZsb3cgPSBTSDRBc3NlbWJsZXI6Ok9GOworICAg
IHN0YXRpYyBjb25zdCBDb25kaXRpb24gQWJvdmUgPSBTSDRBc3NlbWJsZXI6OkhJOworICAgIHN0
YXRpYyBjb25zdCBDb25kaXRpb24gQWJvdmVPckVxdWFsID0gU0g0QXNzZW1ibGVyOjpIUzsKKyAg
ICBzdGF0aWMgY29uc3QgQ29uZGl0aW9uIEJlbG93ID0gU0g0QXNzZW1ibGVyOjpMSTsKKyAgICBz
dGF0aWMgY29uc3QgQ29uZGl0aW9uIEJlbG93T3JFcXVhbCA9IFNINEFzc2VtYmxlcjo6TFM7Cisg
ICAgCisgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgc3RhY2tQb2ludGVyUmVnaXN0ZXIgPSBT
SDQ6OlNQOworICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIGxpbmtSZWdpc3RlciA9IFNINDo6
UFI7CisgICAgCisgICAgc3RhdGljIGNvbnN0IENvbmRpdGlvbiBEb3VibGVFcXVhbCA9IFNINEFz
c2VtYmxlcjo6RVE7CisgICAgc3RhdGljIGNvbnN0IENvbmRpdGlvbiBEb3VibGVHcmVhdGVyVGhh
biA9IFNINEFzc2VtYmxlcjo6R1Q7CisgICAgc3RhdGljIGNvbnN0IENvbmRpdGlvbiBEb3VibGVH
cmVhdGVyVGhhbk9yRXF1YWwgPSBTSDRBc3NlbWJsZXI6OkdFOworICAgIHN0YXRpYyBjb25zdCBD
b25kaXRpb24gRG91YmxlTGVzc1RoYW4gPSBTSDRBc3NlbWJsZXI6OkxUOworICAgIHN0YXRpYyBj
b25zdCBDb25kaXRpb24gRG91YmxlTGVzc1RoYW5PckVxdWFsID0gU0g0QXNzZW1ibGVyOjpMRTsK
KyAgICAKKyAgICBzdGF0aWMgY29uc3QgU2NhbGUgU2NhbGVQdHIgPSBUaW1lc0ZvdXI7CisgICAg
CisgICAgUmVnaXN0ZXJJRCBjbGFpbVNjcmF0Y2goKQorICAgIHsKKyAgICAgICAgIHJldHVybiBt
X2Fzc2VtYmxlci5jbGFpbVNjcmF0Y2goKTsKKyAgICB9CisgICAgCisgICAgUmVnaXN0ZXJJRCBy
ZWxlYXNlU2NyYXRjaChSZWdpc3RlcklEIHJlZykKKyAgICB7CisgICAgICAgICBtX2Fzc2VtYmxl
ci5yZWxlYXNlU2NyYXRjaChyZWcpOworICAgIH0KKyAgICAKKworICAgIC8vIEludGVnZXIgYXJp
dGhtZXRpYyBvcGVyYXRpb25zCisKKyAgICB2b2lkIGFkZDMyKFJlZ2lzdGVySUQgc3JjLCBSZWdp
c3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5hZGRsX3JyKHNyYywgZGVz
dCk7CisgICAgfQorCisgICAgdm9pZCBhZGQzMihJbW0zMiBpbW0sIFJlZ2lzdGVySUQgZGVzdCkK
KyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmFkZGxfaXIoaW1tLm1fdmFsdWUsIGRlc3QpOwor
ICAgIH0KKyAgICAKKyAgICB2b2lkIGFkZDMyKEltbTMyIGltbSwgUmVnaXN0ZXJJRCBzcmMsIFJl
Z2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3Jh
dGNoKCk7CisKKyAgICAgICAgaWYgKHNyYyAhPSBkZXN0KQorICAgICAgICAgICAgbV9hc3NlbWJs
ZXIubW92bF9ycihzcmMsIGRlc3QpOworICAgICAgICBtX2Fzc2VtYmxlci5hZGRsX2lyKGltbS5t
X3ZhbHVlLCBkZXN0KTsKKyAgICAgICAgCisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisK
KyAgICB9CisKKyAgICB2b2lkIGFkZDMyKEltbTMyIGltbSwgQWRkcmVzcyBhZGRyZXNzKQorICAg
IHsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgbG9h
ZDMyKGFkZHJlc3MsIHNjcik7CisgICAgICAgIGFkZDMyKGltbSwgc2NyKTsKKyAgICAgICAgc3Rv
cmUzMihzY3IsIGFkZHJlc3MpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgIH0K
KyAgICAKKyAgICB2b2lkIGFkZDMyKEFkZHJlc3Mgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAg
eworICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBsb2Fk
MzIoc3JjLCBzY3IpOworICAgICAgICBtX2Fzc2VtYmxlci5hZGRsX3JyKHNjciwgZGVzdCk7Cisg
ICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgfQorICAgIAorICAgIHZvaWQgYW5kMzIo
UmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1i
bGVyLmFuZGxfcnIoc3JjLCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIGFuZDMyKEltbTMyIGlt
bSwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgaWYgKChpbW0ubV92YWx1ZSA8PSAy
NTUpICYmIChpbW0ubV92YWx1ZSA+PSAwKSAmJiAoZGVzdCA9PSBTSDQ6OlIwKSkKKyAgICAgICAg
ICAgIG1fYXNzZW1ibGVyLmFuZGxfaThyKGltbS5tX3ZhbHVlLCBkZXN0KTsKKyAgICAgICAgZWxz
ZSB7CisgICAgICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAg
ICAgICAgbV9hc3NlbWJsZXIuTG9hZENvbnN0YW50KChpbW0ubV92YWx1ZSksIHNjcik7CisgICAg
ICAgICAgICBtX2Fzc2VtYmxlci5hbmRsX3JyKHNjciwgZGVzdCk7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2
b2lkIGxzaGlmdDMyKFJlZ2lzdGVySUQgc2hpZnRhbW91bnQsIFJlZ2lzdGVySUQgZGVzdCkKKyAg
ICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnNobGxfcnIoZGVzdCwgc2hpZnRhbW91bnQpOworICAg
IH0KKyAgICAKKyAgICB2b2lkIHJzaGlmdDMyKGludCBpbW0sIFJlZ2lzdGVySUQgZGVzdCkKKyAg
ICB7CisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIG1f
YXNzZW1ibGVyLkxvYWRDb25zdGFudCgtaW1tLCBzY3IpOworICAgICAgICBtX2Fzc2VtYmxlci5z
aGFfcnIoZGVzdCwgc2NyKTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICB9Cisg
ICAgCisgICAgdm9pZCByYXNoaWZ0MzIoaW50IGltbSwgUmVnaXN0ZXJJRCBkZXN0KSAvLyBhcml0
bWV0aGlxdWUgc2hpZnQKKyAgICB7CisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3Jh
dGNoKCk7CisgICAgICAgIG1fYXNzZW1ibGVyLkxvYWRDb25zdGFudCgtaW1tLCBzY3IpOworICAg
ICAgICBtX2Fzc2VtYmxlci5zaGFfcnIoZGVzdCwgc2NyKTsKKyAgICAgICAgcmVsZWFzZVNjcmF0
Y2goc2NyKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBsc2hpZnQzMihJbW0zMiBpbW0sIFJlZ2lz
dGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIGlmICgoIGltbS5tX3ZhbHVlID09IDEpIHx8ICgg
aW1tLm1fdmFsdWUgPT0gMikgfHwgKCBpbW0ubV92YWx1ZSA9PSA4KSB8fCAoIGltbS5tX3ZhbHVl
ID09IDE2KSkKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnNobGxfaThyKGltbS5tX3ZhbHVlLCBk
ZXN0KTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWlt
U2NyYXRjaCgpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuTG9hZENvbnN0YW50KGltbS5tX3Zh
bHVlLCBzY3IpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuc2hsbF9ycihkZXN0LCBzY3IpOwor
ICAgICAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAK
KyAgICB2b2lkIG11bDMyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgewor
ICAgICAgICBtX2Fzc2VtYmxlci5pbXVsbF9ycihzcmMsIGRlc3QpOworICAgICAgICBtX2Fzc2Vt
Ymxlci5zdHNtYWNsKGRlc3QpOworICAgIH0KKyAgICAKKyAgICAKKyAgICB2b2lkIG11bDMyKElt
bTMyIGltbSwgUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAg
IFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIG1vdmUoaW1tLCBzY3Ip
OworICAgICAgICBpZiAgKHNyYyAhPSBkZXN0KQorICAgICAgICAgICAgbW92ZShzcmMsIGRlc3Qp
OworICAgICAgICBtdWwzMihzY3IsICBkZXN0KTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2Ny
KTsKKyAgICB9CisgICAKKyAgICB2b2lkIG5vdDMyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklE
IGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5ub3RsX3Ioc3JjLCBkZXN0KTsKKyAg
ICB9CisgICAgCisgICAgdm9pZCBvcjMyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3Qp
CisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5vcmxfcnIoc3JjLCBkZXN0KTsKKyAgICB9CisK
KyAgICB2b2lkIG9yMzIoSW1tMzIgaW1tLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAg
ICBtX2Fzc2VtYmxlci5vcmxfaXIoaW1tLm1fdmFsdWUsIGRlc3QpOworICAgIH0KKworICAgIHZv
aWQgcnNoaWZ0MzIoUmVnaXN0ZXJJRCBzaGlmdGFtb3VudCwgUmVnaXN0ZXJJRCBkZXN0KQorICAg
IHsKKyAgICAgICAgbV9hc3NlbWJsZXIuc2hhcl9ycihkZXN0LCBzaGlmdGFtb3VudCk7CisgICAg
fQorCisgICAgdm9pZCByc2hpZnQzMihJbW0zMiBpbW0sIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7
CisgICAgICAgIHJzaGlmdDMyKGltbS5tX3ZhbHVlICYgMHgxZiwgZGVzdCk7CisgICAgfQorCisK
KyAgICB2b2lkIHN1YjMyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgewor
ICAgICAgICBtX2Fzc2VtYmxlci5zdWJsX3JyKHNyYywgZGVzdCk7CisgICAgfQorICAgIAorICAg
IHZvaWQgc3ViMzIoSW1tMzIgaW1tLCBBYnNvbHV0ZUFkZHJlc3MgYWRkcmVzcywgUmVnaXN0ZXJJ
RCBzY3JhdGNoUmVnKQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCByZXN1bHQgPSBjbGFpbVNj
cmF0Y2goKTsKKyAgICAgICAKKyAgICAgICAgbV9hc3NlbWJsZXIuTG9hZENvbnN0YW50KCh1aW50
MzJfdClhZGRyZXNzLm1fcHRyLCBzY3JhdGNoUmVnKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubW92
bF9tcihzY3JhdGNoUmVnLCByZXN1bHQpOworCisgICAgICAgIHN1YjMyKGltbSwgcmVzdWx0KTsg
CisKKyAgICAgICAgc3RvcmUzMihyZXN1bHQsIHNjcmF0Y2hSZWcpOworICAgICAgICAKKyAgICAg
ICAgcmVsZWFzZVNjcmF0Y2gocmVzdWx0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhZGQzMihJ
bW0zMiBpbW0sIEFic29sdXRlQWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklEIHNjcmF0Y2hSZWcp
CisgICAgeworICAgICAgICBSZWdpc3RlcklEIHJlc3VsdCA9IGNsYWltU2NyYXRjaCgpOworICAg
ICAgIAorICAgICAgICBtX2Fzc2VtYmxlci5Mb2FkQ29uc3RhbnQoKHVpbnQzMl90KWFkZHJlc3Mu
bV9wdHIsIHNjcmF0Y2hSZWcpOworICAgICAgICBtX2Fzc2VtYmxlci5tb3ZsX21yKHNjcmF0Y2hS
ZWcsIHJlc3VsdCk7CisKKyAgICAgICAgYWRkMzIoaW1tLCByZXN1bHQpOyAKKworICAgICAgICBz
dG9yZTMyKHJlc3VsdCwgc2NyYXRjaFJlZyk7CisgICAgICAgIAorICAgICAgICByZWxlYXNlU2Ny
YXRjaChyZXN1bHQpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHN1YjMyKEltbTMyIGltbSwgUmVn
aXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuc3VibF9pbW1yKGltbS5t
X3ZhbHVlLCBkZXN0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzdWIzMihBZGRyZXNzIHNyYywg
UmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNj
cmF0Y2goKTsKKyAgICAgICAgbG9hZDMyKHNyYywgc2NyKTsKKyAgICAgICAgbV9hc3NlbWJsZXIu
c3VibF9ycihzY3IsIGRlc3QpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgIH0K
KworICAgIAorICAgIHZvaWQgeG9yMzIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkK
KyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnhvcmxfcnIoc3JjLCBkZXN0KTsKKyAgICB9Cisg
ICAgCisgICAgdm9pZCB4b3IzMihJbW0zMiBpbW0sIFJlZ2lzdGVySUQgc3JjRGVzdCkKKyAgICB7
CisgICAgICBpZiAoKHNyY0Rlc3QgIT0gU0g0OjpSMCkgfHwgKGltbS5tX3ZhbHVlID4gMjU1KSB8
fCAoaW1tLm1fdmFsdWUgPCAwKSkgeworICAgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1T
Y3JhdGNoKCk7CisgICAgICAgICAgbV9hc3NlbWJsZXIuTG9hZENvbnN0YW50KChpbW0ubV92YWx1
ZSksIHNjcik7CisgICAgICAgICAgbV9hc3NlbWJsZXIueG9ybF9ycihzY3IsIHNyY0Rlc3QpOwor
ICAgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgICB9IGVsc2UKKyAgICAgICAgICBt
X2Fzc2VtYmxlci54b3JsX2k4cihpbW0ubV92YWx1ZSwgc3JjRGVzdCk7CisgICAgfQorCisKKyAg
ICAvLyBNZW1vcnkgYWNjZXNzIG9wZXJhdGlvbgorICAgIAorICAgIHZvaWQgbG9hZDMyKEltcGxp
Y2l0QWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBsb2Fk
MzIoYWRkcmVzcy5iYXNlLCBhZGRyZXNzLm9mZnNldCwgZGVzdCk7CisgICAgfQorICAgIAorICAg
IHZvaWQgbG9hZDgoSW1wbGljaXRBZGRyZXNzIGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKKyAg
ICB7CisgICAgICAgIGxvYWQ4KGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5vZmZzZXQsIGRlc3QpOwor
ICAgIH0KKyAgICAKKyAgICB2b2lkIGxvYWQzMihCYXNlSW5kZXggYWRkcmVzcywgUmVnaXN0ZXJJ
RCBkZXN0KQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsK
KyAgICAgICAgbW92ZShhZGRyZXNzLmluZGV4LCBzY3IpOworICAgICAgICAKKyAgICAgICAgbHNo
aWZ0MzIoSW1tMzIoYWRkcmVzcy5zY2FsZSksIHNjcik7CisgICAgICAgIGFkZDMyKGFkZHJlc3Mu
YmFzZSwgc2NyKTsKKyAgICAgICAgbG9hZDMyKHNjciwgYWRkcmVzcy5vZmZzZXQsIGRlc3QpOwor
ICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGxvYWQz
Mih2b2lkKiBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2Vt
Ymxlci5Mb2FkQ29uc3RhbnQoKHVpbnQzMl90KShhZGRyZXNzKSwgZGVzdCk7CisgICAgICAgIG1f
YXNzZW1ibGVyLm1vdmxfbXIoZGVzdCwgZGVzdCk7CisgICAgfQorICAgIAorICAgIHZvaWQgbG9h
ZDMyKFJlZ2lzdGVySUQgYmFzZSwgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsK
KyAgICAgICAgaWYgKChvZmZzZXQgPCAwKSB8fCAob2Zmc2V0ID49IDY0KSkgeworICAgICAgICAg
ICAgaWYgKChkZXN0ID09IFNINDo6UjApICYmIChkZXN0ICE9IGJhc2UpKSB7CisgICAgICAgICAg
ICAgICAgbV9hc3NlbWJsZXIuTG9hZENvbnN0YW50KChvZmZzZXQpLCBkZXN0KTsKKyAgICAgICAg
ICAgICAgICBtX2Fzc2VtYmxlci5tb3ZsX3IwbXIoYmFzZSwgZGVzdCk7CisgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgIFJlZ2lzdGVySUQgc2NyOworICAgICAgICAgICAgICAg
IGlmIChkZXN0ID09IGJhc2UpCisgICAgICAgICAgICAgICAgICAgIHNjciA9IGNsYWltU2NyYXRj
aCgpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgc2NyID0gZGVz
dDsKKworICAgICAgICAgICAgICAgIG1fYXNzZW1ibGVyLkxvYWRDb25zdGFudCgob2Zmc2V0KSwg
c2NyKTsKKyAgICAgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGRsX3JyKGJhc2UsIHNjcik7Cisg
ICAgICAgICAgICAgICAgbV9hc3NlbWJsZXIubW92bF9tcihzY3IsIGRlc3QpOworCisgICAgICAg
ICAgICAgICAgaWYgKGRlc3QgPT0gYmFzZSkKKyAgICAgICAgICAgICAgICAgICAgcmVsZWFzZVNj
cmF0Y2goc2NyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChvZmZzZXQpCisg
ICAgICAgICAgICBtX2Fzc2VtYmxlci5tb3ZsX21yKG9mZnNldCA+PiAyLCBiYXNlLCBkZXN0KTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9hc3NlbWJsZXIubW92bF9tcihiYXNlLCBkZXN0
KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBsb2FkOChSZWdpc3RlcklEIGJhc2UsIGludCBvZmZz
ZXQsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIGlmICgob2Zmc2V0ID4gMCkgJiYg
KG9mZnNldCA8IDY0KSAmJiAoZGVzdCA9PSBTSDQ6OlIwKSkKKyAgICAgICAgICAgIG1fYXNzZW1i
bGVyLm1vdmJfbXIob2Zmc2V0LCBiYXNlLCBkZXN0KTsKKworICAgICAgICBlbHNlIGlmIChiYXNl
ICE9IGRlc3QpIHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLkxvYWRDb25zdGFudCgob2Zmc2V0
KSwgZGVzdCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGRsX3JyKGJhc2UsIGRlc3QpOwor
ICAgICAgICAgICAgbV9hc3NlbWJsZXIubW92Yl9tcihkZXN0LCBkZXN0KTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLkxvYWRDb25zdGFudCgob2Zmc2V0KSwg
c2NyKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZGxfcnIoYmFzZSwgc2NyKTsKKyAgICAg
ICAgICAgIG1fYXNzZW1ibGVyLm1vdmJfbXIoc2NyLCBkZXN0KTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAg
ICB2b2lkIGxvYWQzMihSZWdpc3RlcklEIHIwLCBSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBk
c3QpCisgICAgeworICAgICAgICBBU1NFUlQocjAgPT0gU0g0OjpSMCk7CisgICAgICAgIG1fYXNz
ZW1ibGVyLm1vdmxfcjBtcihzcmMsIGRzdCk7CisgICAgfQorICAgIAorICAgIHZvaWQgbG9hZDMy
KFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1i
bGVyLm1vdmxfbXIoc3JjLCBkc3QpOworICAgIH0KKyAgIAorICAgIHZvaWQgbG9hZDE2KEltcGxp
Y2l0QWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisgCisgICAgdm9pZCBsb2FkMTYoUmVnaXN0ZXJJRCBz
cmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLm1vdndfbXIo
c3JjLCBkZXN0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBsb2FkMTYoUmVnaXN0ZXJJRCByMCwg
UmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIEFTU0VSVChy
MCA9PSBTSDQ6OlIwKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubW92d19yMG1yKHNyYywgZGVzdCk7
CisgICAgfQorICAgIAorICAgIHZvaWQgbG9hZDE2KEJhc2VJbmRleCBhZGRyZXNzLCBSZWdpc3Rl
cklEIGRlc3QpCisgICAgeworICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgp
OworICAgICAgICBtb3ZlKGFkZHJlc3MuaW5kZXgsIHNjcik7CisgICAgICAgIGxzaGlmdDMyKElt
bTMyKGFkZHJlc3Muc2NhbGUpLCBzY3IpOworICAgICAgICBtX2Fzc2VtYmxlci5hZGRsX2lyKGFk
ZHJlc3Mub2Zmc2V0LCBzY3IpOworICAgICAgICBpZiAoc2NyID09IFNINDo6UjApCisgICAgICAg
ICAgICBtX2Fzc2VtYmxlci5tb3Z3X3IwbXIoYWRkcmVzcy5iYXNlLCBzY3IpOworICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgIGFkZDMyKGFkZHJlc3MuYmFzZSwgc2NyKTsKKyAgICAgICAgICAg
IGxvYWQxNihzY3IsIHNjcik7CisgICAgICAgIH0KKyAgICAgICAgZXh0dXcoc2NyLCBkZXN0KTsK
KyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICB9CisKKyAgICB2b2lkIHN0b3JlMzIo
UmVnaXN0ZXJJRCBzcmMsIEltcGxpY2l0QWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAg
UmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgc3RvcmUzMihzcmMsIGFk
ZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UsIHNjcik7CisgICAgICAgIHJlbGVhc2VTY3JhdGNo
KHNjcik7CisgICAgfSAgICAKKyAgICAKKyAgICB2b2lkIHN0b3JlMzIoUmVnaXN0ZXJJRCBzcmMs
IGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBzY3IpCisgICAgeyAgCisg
ICAgICAgIGlmICgob2Zmc2V0IDwgMCkgfHwgKG9mZnNldCA+PSA2NCkpIHsKKyAgICAgICAgICAg
IG1fYXNzZW1ibGVyLkxvYWRDb25zdGFudCgob2Zmc2V0KSwgc2NyKTsKKyAgICAgICAgICAgIGlm
IChzY3IgPT0gU0g0OjpSMCkKKyAgICAgICAgICAgICAgICBtX2Fzc2VtYmxlci5tb3ZsX3JtcjAo
c3JjLCBiYXNlKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIG1fYXNzZW1i
bGVyLmFkZGxfcnIoYmFzZSwgc2NyKTsKKyAgICAgICAgICAgICAgICBtX2Fzc2VtYmxlci5tb3Zs
X3JtKHNyYywgc2NyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChvZmZzZXQp
CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5tb3ZsX3JtKHNyYywgb2Zmc2V0ID4+IDIsIGJhc2Up
OworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5tb3ZsX3JtKHNyYywgYmFz
ZSk7CisgICAgfQorICAgIAorICAgIHZvaWQgc3RvcmUzMihSZWdpc3RlcklEIHNyYywgUmVnaXN0
ZXJJRCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChvZmZz
ZXQgPT0gU0g0OjpSMCk7CisgICAgICAgIG1fYXNzZW1ibGVyLm1vdmxfcm1yMChzcmMsIGJhc2Up
OworICAgIH0KKyAgICAKKyAgICB2b2lkIHN0b3JlMzIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVy
SUQgZHN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubW92bF9ybShzcmMsIGRzdCk7Cisg
ICAgfQorCisKKyAgICB2b2lkIHN0b3JlMzIoSW1tMzIgaW1tLCBJbXBsaWNpdEFkZHJlc3MgYWRk
cmVzcykKKyAgICB7CisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7Cisg
ICAgICAgIFJlZ2lzdGVySUQgc2NyMSA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBtX2Fzc2Vt
Ymxlci5Mb2FkQ29uc3RhbnQoKGltbS5tX3ZhbHVlKSwgc2NyKTsKKworICAgICAgICBzdG9yZTMy
KHNjciwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSwgc2NyMSk7CisgICAgICAgIHJlbGVh
c2VTY3JhdGNoKHNjcik7CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcjEpOworICAgIH0KKyAg
ICAKKyAgICB2b2lkIHN0b3JlMzIoUmVnaXN0ZXJJRCBzcmMsIEJhc2VJbmRleCBhZGRyZXNzKQor
ICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAg
bW92ZShhZGRyZXNzLmluZGV4LCBzY3IpOworICAgICAgICAKKyAgICAgICAgbHNoaWZ0MzIoSW1t
MzIoYWRkcmVzcy5zY2FsZSksIHNjcik7CisgICAgICAgIGFkZDMyKGFkZHJlc3MuYmFzZSwgc2Ny
KTsKKyAgICAgICAgc3RvcmUzMihzcmMsIEFkZHJlc3Moc2NyLCBhZGRyZXNzLm9mZnNldCkpOwor
ICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHN0b3Jl
MzIoSW1tMzIgaW1tLCB2b2lkKiBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgfQorICAgIHZvaWQgc3RvcmUzMihSZWdpc3RlcklEIHNyYywgdm9pZCog
YWRkcmVzcykKKyAgICB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKwor
ICAgIAorICAgIERhdGFMYWJlbDMyIGxvYWQzMldpdGhBZGRyZXNzT2Zmc2V0UGF0Y2goQWRkcmVz
cyBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBSZWdpc3RlcklEIHNj
ciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICAKKyAgICAgICAgRGF0YUxhYmVsMzIgbGFiZWwo
dGhpcyk7CisgICAgICAgIG1fYXNzZW1ibGVyLkxvYWRDb25zdGFudChhZGRyZXNzLm9mZnNldCwg
c2NyLCB0cnVlKTsKKworICAgICAgICBtX2Fzc2VtYmxlci5hZGRsX3JyKGFkZHJlc3MuYmFzZSwg
c2NyKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubW92bF9tcihzY3IsIGRlc3QpOworICAgICAgICBy
ZWxlYXNlU2NyYXRjaChzY3IpOworICAgICAgICByZXR1cm4gbGFiZWw7CisgICAgfQorICAgIAor
ICAgIERhdGFMYWJlbDMyIHN0b3JlMzJXaXRoQWRkcmVzc09mZnNldFBhdGNoKFJlZ2lzdGVySUQg
c3JjLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNs
YWltU2NyYXRjaCgpOworICAgICAgICAKKyAgICAgICAgRGF0YUxhYmVsMzIgbGFiZWwodGhpcyk7
CisgICAgICAgIG1fYXNzZW1ibGVyLkxvYWRDb25zdGFudChhZGRyZXNzLm9mZnNldCwgc2NyLCB0
cnVlKTsKKworICAgICAgICBtX2Fzc2VtYmxlci5hZGRsX3JyKGFkZHJlc3MuYmFzZSwgc2NyKTsK
KyAgICAgICAgbV9hc3NlbWJsZXIubW92bF9ybShzcmMsIHNjcik7CisgICAgICAgIAorICAgICAg
ICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgICAgICByZXR1cm4gbGFiZWw7CisgICAgfQorICAg
IAorICAgIExhYmVsIGxvYWRQdHJXaXRoUGF0Y2hUb0xFQShBZGRyZXNzIGFkZHJlc3MsIFJlZ2lz
dGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNo
KCk7CisgICAgICAgIAorICAgICAgICBMYWJlbCBsYWJlbCh0aGlzKTsKKyAgICAgICAgbV9hc3Nl
bWJsZXIuTG9hZENvbnN0YW50KGFkZHJlc3Mub2Zmc2V0LCBzY3IsIHRydWUpOworCisgICAgICAg
IG1fYXNzZW1ibGVyLmFkZGxfcnIoYWRkcmVzcy5iYXNlLCBzY3IpOworICAgICAgICBtX2Fzc2Vt
Ymxlci5tb3ZsX21yKHNjciwgZGVzdCk7CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7Cisg
ICAgICAgIHJldHVybiBsYWJlbDsKKyAgICB9CisgICAgCisgICAgIC8vIEZsb2F0aW5nLXBvaW50
IG9wZXJhdGlvbnMKKworICAgIGJvb2wgc3VwcG9ydHNGbG9hdGluZ1BvaW50KCkgY29uc3QgeyBy
ZXR1cm4gdHJ1ZTsgfSAgICAKKyAgICBib29sIHN1cHBvcnRzRmxvYXRpbmdQb2ludFRydW5jYXRl
KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICAKKyAgICB2b2lkIGxvYWREb3VibGUoSW1w
bGljaXRBZGRyZXNzIGFkZHJlc3MsIEZQUmVnaXN0ZXJJRCBkZXN0LCBSZWdpc3RlcklEIHNjcikK
KyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmRvdWJsZWxvYWQoYWRkcmVzcy5iYXNlLCBhZGRy
ZXNzLm9mZnNldCwgZGVzdCwgc2NyKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBsb2FkRG91Ymxl
KFJlZ2lzdGVySUQgc3JjLCBGUFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNz
ZW1ibGVyLmZtb3ZfcmVhZF9ybShzcmMsIGRlc3QpOworICAgIH0KKworICAgIHZvaWQgc3RvcmVE
b3VibGUoRlBSZWdpc3RlcklEIHNyYywgSW1wbGljaXRBZGRyZXNzIGFkZHJlc3MsIFJlZ2lzdGVy
SUQgc2NyKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuZG91Ymxlc3RvcmUoc3JjLCBhZGRy
ZXNzLmJhc2UsIGFkZHJlc3Mub2Zmc2V0LCBzY3IpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHN0
b3JlRG91YmxlKEZQUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAg
ICAgbV9hc3NlbWJsZXIuZm1vdl93cml0ZV9ybShzcmMsIGRzdCk7CisgICAgfQorCisgICAgdm9p
ZCBhZGREb3VibGUoRlBSZWdpc3RlcklEIHNyYywgRlBSZWdpc3RlcklEIGRlc3QpCisgICAgewor
ICAgICAgICBtX2Fzc2VtYmxlci5kYWRkX3JyKHNyYywgZGVzdCk7CisgICAgfQorICAgIAorICAg
IHZvaWQgYWRkRG91YmxlKEFkZHJlc3Mgc3JjLCBGUFJlZ2lzdGVySUQgZGVzdCwgUmVnaXN0ZXJJ
RCBzY3IsIEZQUmVnaXN0ZXJJRCBzY3JmKQorICAgIHsKKyAgICAgICAgbG9hZERvdWJsZShzcmMs
IHNjcmYsIHNjcik7CisgICAgICAgIGFkZERvdWJsZShzY3JmLCBkZXN0KTsKKyAgICB9CisgICAg
CisgICAgdm9pZCBzdWJEb3VibGUoRlBSZWdpc3RlcklEIHNyYywgRlBSZWdpc3RlcklEIGRlc3Qp
CisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5kc3ViX3JyKHNyYywgZGVzdCk7CisgICAgfQor
ICAgIAorICAgIHZvaWQgbXVsRG91YmxlKEZQUmVnaXN0ZXJJRCBzcmMsIEZQUmVnaXN0ZXJJRCBk
ZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuZG11bF9ycihzcmMsIGRlc3QpOworICAg
IH0KKyAgICAKKyAgICB2b2lkIGRpdkRvdWJsZShGUFJlZ2lzdGVySUQgc3JjLCBGUFJlZ2lzdGVy
SUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmRkaXZfcnIoc3JjLCBkZXN0KTsK
KyAgICB9CisKKyAgICB2b2lkIGNvbnZlcnRJbnQzMlRvRG91YmxlKFJlZ2lzdGVySUQgc3JjLCBG
UFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxkc3JtX2ZwdWwo
c3JjKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuZmxvYXRfZnB1bF9kcm4oZGVzdCk7CisgICAgfQor
CisgICAgSnVtcCBicmFuY2hUZXN0OChDb25kaXRpb24gY29uZCwgQWRkcmVzcyBhZGRyZXNzLCBJ
bW0zMiBtYXNrID0gSW1tMzIoLTEpKQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCBhZGRyZXNz
VGVtcFJlZ2lzdGVyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIGxvYWQ4KGFkZHJlc3MsIGFk
ZHJlc3NUZW1wUmVnaXN0ZXIpOworICAgICAgICAKKyAgICAgICAgSnVtcCBqbXAgPSBicmFuY2hU
ZXN0MzIoY29uZCwgYWRkcmVzc1RlbXBSZWdpc3RlciwgbWFzayk7CisgICAgICAgIHJlbGVhc2VT
Y3JhdGNoKGFkZHJlc3NUZW1wUmVnaXN0ZXIpOworICAgICAgICByZXR1cm4gam1wOworICAgIH0K
KyAgICAKKyAgICB2b2lkIHNpZ25FeHRlbmQzMlRvUHRyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3Rl
cklEIGRlc3QpCisgICAgeworICAgICAgICBpZiAoc3JjICE9IGRlc3QpCisgICAgICAgICAgICBt
b3ZlKHNyYywgZGVzdCk7CisgICAgfQorICAgIAorICAgIEp1bXAgYnJhbmNoOChDb25kaXRpb24g
Y29uZCwgQWRkcmVzcyBsZWZ0LCBJbW0zMiByaWdodCwgYm9vbCBuZWVkQ29uc3RhbnQgPSB0cnVl
KQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCBhZGRyZXNzVGVtcFJlZ2lzdGVyID0gY2xhaW1T
Y3JhdGNoKCk7CisgICAgICAgIGxvYWQ4KGxlZnQsIGFkZHJlc3NUZW1wUmVnaXN0ZXIpOworICAg
ICAgICAKKyAgICAgICAgSnVtcCBqbXAgPSBicmFuY2gzMihjb25kLCBhZGRyZXNzVGVtcFJlZ2lz
dGVyLCByaWdodCwgbmVlZENvbnN0YW50KTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goYWRkcmVz
c1RlbXBSZWdpc3Rlcik7CisgICAgICAgIHJldHVybiBqbXA7CisgICAgfQorCisgICAgSnVtcCBi
cmFuY2hUcnVuY2F0ZURvdWJsZVRvSW50MzIoRlBSZWdpc3RlcklELCBSZWdpc3RlcklEKQorICAg
IHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorICAgIAorICAgIC8vIFN0
YWNrIG1hbmlwdWxhdGlvbiBvcGVyYXRpb25zCisgICAgCisgICAgdm9pZCBwb3AoUmVnaXN0ZXJJ
RCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIucG9wX3IoZGVzdCk7CisgICAgfQor
CisgICAgdm9pZCBwdXNoKFJlZ2lzdGVySUQgc3JjKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJs
ZXIucHVzaF9yKHNyYyk7CisgICAgfQorCisgICAgdm9pZCBwdXNoKEFkZHJlc3MgYWRkcmVzcykK
KyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnB1c2hfbShhZGRyZXNzLm9mZnNldCwgYWRkcmVz
cy5iYXNlKTsKKyAgICB9CisKKyAgICB2b2lkIHB1c2goSW1tMzIgaW1tKQorICAgIHsKKyAgICAg
ICAgbV9hc3NlbWJsZXIucHVzaF9pMzIoaW1tLm1fdmFsdWUpOworICAgIH0KKworICAgIC8vIFJl
Z2lzdGVyIG1vdmUgb3BlcmF0aW9ucworCisgICAgdm9pZCBtb3ZlKEltbTMyIGltbSwgUmVnaXN0
ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICBtX2Fzc2VtYmxlci5Mb2FkQ29uc3RhbnQoaW1tLm1f
dmFsdWUsIGRlc3QpOworICAgIH0KKyAgICAKKyAgICBEYXRhTGFiZWxQdHIgbW92ZVdpdGhQYXRj
aChJbW1QdHIgaW5pdGlhbFZhbHVlLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgIERh
dGFMYWJlbFB0ciBkYXRhTGFiZWwodGhpcyk7CisgICAgICAgbV9hc3NlbWJsZXIuTG9hZENvbnN0
YW50KHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3Q+KGluaXRpYWxWYWx1ZS5tX3ZhbHVlKSwgZGVz
dCwgdHJ1ZSk7CisgICAgICAgcmV0dXJuIGRhdGFMYWJlbDsKKyAgICB9CisKKyAgICB2b2lkIG1v
dmUoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNz
ZW1ibGVyLm1vdmxfcnIoc3JjLCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIG1vdmUoSW1tUHRy
IGltbSwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuTG9hZENv
bnN0YW50KGltbS5hc0ludHB0cigpLCBkZXN0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBleHR1
dyhSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICBtX2Fzc2Vt
Ymxlci5leHR1dyhzcmMsIGRzdCk7CisgICAgfQorCisgICAgdm9pZCBzZXQzMihDb25kaXRpb24g
Y29uZCwgUmVnaXN0ZXJJRCBsZWZ0LCBSZWdpc3RlcklEIHJpZ2h0LCBSZWdpc3RlcklEIGRlc3Qp
CisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5jbXBsX3JyKHJpZ2h0LCBsZWZ0LCBjb25kKTsK
KyAgICAgICAgbV9hc3NlbWJsZXIubW92dChkZXN0KTsKKyAgICB9CisKKworICAgIHZvaWQgc2V0
MzIoQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgbGVmdCwgSW1tMzIgcmlnaHQsIFJlZ2lzdGVy
SUQgZGVzdCkKKyAgICB7CisgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorCisg
ICAgdm9pZCBsb2FkUHRyTGlua1JlZyhJbXBsaWNpdEFkZHJlc3MgYWRkcmVzcykKKyAgICB7Cisg
ICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIGxvYWQzMihh
ZGRyZXNzLCBzY3IpOworICAgICAgICBtX2Fzc2VtYmxlci5sZHNwcihzY3IpOworICAgICAgICBy
ZWxlYXNlU2NyYXRjaChzY3IpOworICAgIH0KKworcHVibGljOgorICAgIEp1bXAgYnJhbmNoMzIo
Q29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgbGVmdCwgUmVnaXN0ZXJJRCByaWdodCwgYm9vbCBu
ZWVkQ29uc3RhbnQgPSB0cnVlKQorICAgIHsKKyAgICAgICAgSnVtcCBtX2p1bXA7CisgICAgICAg
IG1fYXNzZW1ibGVyLmVuc3VyZVNwYWNlKG1fYXNzZW1ibGVyLm1heEluc3RydWN0aW9uU2l6ZSAr
IDgpOworICAgICAgICBtX2Fzc2VtYmxlci5jbXBsX3JyKHJpZ2h0LCBsZWZ0LCBjb25kKTsKKyAg
ICAgICAgCisgICAgICAgIC8qIEJUIGxhYmVsICAgICAgID0+IEJGIG9mZiAKKyAgICAgICAgICAg
bm9wICAgICAgICAgICAgICAgTERSIHJlZworICAgICAgICAgICBub3AgICAgICAgICAgICAgICBi
cmFmIEByZWcKKyAgICAgICAgICAgbm9wICAgICAgICAgICAgICAgbm9wCisgICAgICAgICAqLwor
ICAgICAgICAgICAgICAgCisgICAgICAgIG1fanVtcCA9IChjb25kID09IE5vdEVxdWFsKSA/IEp1
bXAobV9hc3NlbWJsZXIuam5lKCkpIDogSnVtcChtX2Fzc2VtYmxlci5qZSgpKTsKKyAgICAgICAg
CisgICAgICAgIFJlZ2lzdGVySUQgc2NyOworICAgICAgICBpZiAobmVlZENvbnN0YW50KSB7Cisg
ICAgICAgICAgICBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVy
LkxvYWRDb25zdGFudCgweDAsIHNjciwgdHJ1ZSk7CisgICAgICAgIH0KKyAgICAgICAgbV9hc3Nl
bWJsZXIubm9wKCk7CisgICAgICAgIG1fYXNzZW1ibGVyLm5vcCgpOworICAgICAgICBpZiAobmVl
ZENvbnN0YW50KQorICAgICAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICAgICAgCisg
ICAgICAgIHJldHVybiBtX2p1bXA7CisgICAgfQorCisgICAgSnVtcCBicmFuY2gzMihDb25kaXRp
b24gY29uZCwgUmVnaXN0ZXJJRCBsZWZ0LCBJbW0zMiByaWdodCwgYm9vbCBuZWVkQ29uc3RhbnQg
PSB0cnVlKQorICAgIHsKKyAgICAgICAgSnVtcCBtX2p1bXA7CisgICAgICAgIGlmICgoKGNvbmQg
PT0gRXF1YWwpIHx8IChjb25kID09IE5vdEVxdWFsKSkgJiYgIXJpZ2h0Lm1fdmFsdWUpCisgICAg
ICAgICAgICBtX2Fzc2VtYmxlci50ZXN0bF9ycihsZWZ0LCBsZWZ0KTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgbV9hc3NlbWJsZXIuY21wbF9pcihyaWdodC5tX3ZhbHVlLCBsZWZ0LCBjb25k
KTsKKyAgICAgICAgICAgIAorICAgICAgICBtX2Fzc2VtYmxlci5lbnN1cmVTcGFjZShtX2Fzc2Vt
Ymxlci5tYXhJbnN0cnVjdGlvblNpemUgKyA2KTsKKyAgICAgICAgbV9qdW1wID0gKGNvbmQgPT0g
Tm90RXF1YWwpID8gSnVtcChtX2Fzc2VtYmxlci5qbmUoKSkgOiBKdW1wKG1fYXNzZW1ibGVyLmpl
KCkpOworICAgICAgICAKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3I7CisgICAgICAgIGlmIChuZWVk
Q29uc3RhbnQpIHsKKyAgICAgICAgICAgIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICAg
ICAgbV9hc3NlbWJsZXIuTG9hZENvbnN0YW50KDB4MCwgc2NyLCB0cnVlKTsKKyAgICAgICAgfQor
ICAgICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubm9wKCk7Cisg
ICAgICAgIGlmIChuZWVkQ29uc3RhbnQpCisgICAgICAgICAgICByZWxlYXNlU2NyYXRjaChzY3Ip
OworICAgICAgICAKKyAgICAgICAgcmV0dXJuIG1fanVtcDsKKyAgICB9CisgICAgCisgICAgSnVt
cCBicmFuY2gzMihDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBsZWZ0LCBBZGRyZXNzIHJpZ2h0
LCBib29sIG5lZWRDb25zdGFudCA9IHRydWUpCisgICAgeworICAgICAgICBKdW1wIG1fanVtcDsK
KyAgICAgICAgbV9hc3NlbWJsZXIuY21wbF9tcihyaWdodC5vZmZzZXQsIHJpZ2h0LmJhc2UsIGxl
ZnQsIGNvbmQpOworICAgICAgICAKKyAgICAgICAgbV9hc3NlbWJsZXIuZW5zdXJlU3BhY2UobV9h
c3NlbWJsZXIubWF4SW5zdHJ1Y3Rpb25TaXplICsgNik7CisgICAgICAgIG1fanVtcCA9IChjb25k
ID09IE5vdEVxdWFsKSA/IEp1bXAobV9hc3NlbWJsZXIuam5lKCkpIDogSnVtcChtX2Fzc2VtYmxl
ci5qZSgpKTsKKyAgICAgICAgCisgICAgICAgIFJlZ2lzdGVySUQgc2NyOworICAgICAgICBpZiAo
bmVlZENvbnN0YW50KSB7CisgICAgICAgICAgICBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAg
ICAgICAgIG1fYXNzZW1ibGVyLkxvYWRDb25zdGFudCgweDAsIHNjciwgdHJ1ZSk7CisgICAgICAg
IH0KKyAgICAgICAgbV9hc3NlbWJsZXIubm9wKCk7CisgICAgICAgIG1fYXNzZW1ibGVyLm5vcCgp
OworICAgICAgICBpZiAobmVlZENvbnN0YW50KQorICAgICAgICAgICAgcmVsZWFzZVNjcmF0Y2go
c2NyKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBtX2p1bXA7CisgICAgfQorICAgIAorICAg
IEp1bXAgYnJhbmNoMzIoQ29uZGl0aW9uIGNvbmQsIEFkZHJlc3MgbGVmdCwgUmVnaXN0ZXJJRCBy
aWdodCwgYm9vbCBuZWVkQ29uc3RhbnQgPSB0cnVlKQorICAgIHsKKyAgICAgICAgSnVtcCBtX2p1
bXA7CisgICAgICAgIG1fYXNzZW1ibGVyLmNtcGxfcm0ocmlnaHQsIGxlZnQub2Zmc2V0LCBsZWZ0
LmJhc2UsIGNvbmQpOworICAgICAgICAgICAgICAgIAorICAgICAgICBtX2Fzc2VtYmxlci5lbnN1
cmVTcGFjZShtX2Fzc2VtYmxlci5tYXhJbnN0cnVjdGlvblNpemUgKyA2KTsKKyAgICAgICAgbV9q
dW1wID0gKGNvbmQgPT0gTm90RXF1YWwpID8gSnVtcChtX2Fzc2VtYmxlci5qbmUoKSkgOiBKdW1w
KG1fYXNzZW1ibGVyLmplKCkpOworICAgICAgICAKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3I7Cisg
ICAgICAgIGlmIChuZWVkQ29uc3RhbnQpIHsKKyAgICAgICAgICAgIHNjciA9IGNsYWltU2NyYXRj
aCgpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuTG9hZENvbnN0YW50KDB4MCwgc2NyLCB0cnVl
KTsKKyAgICAgICAgfQorICAgICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKKyAgICAgICAgbV9hc3Nl
bWJsZXIubm9wKCk7CisgICAgICAgIGlmIChuZWVkQ29uc3RhbnQpCisgICAgICAgICAgICByZWxl
YXNlU2NyYXRjaChzY3IpOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIG1fanVtcDsKKyAgICB9
CisKKyAgICBKdW1wIGJyYW5jaDMyKENvbmRpdGlvbiBjb25kLCBBZGRyZXNzIGxlZnQsIEltbTMy
IHJpZ2h0LCBib29sIG5lZWRDb25zdGFudCA9IHRydWUpCisgICAgeworICAgICAgICBKdW1wIG1f
anVtcDsKKyAgICAgICAgbV9hc3NlbWJsZXIuY21wbF9pbShyaWdodC5tX3ZhbHVlLCBsZWZ0Lm9m
ZnNldCwgbGVmdC5iYXNlLCBjb25kKTsKKyAgICAgICAgCisgICAgICAgIG1fYXNzZW1ibGVyLmVu
c3VyZVNwYWNlKG1fYXNzZW1ibGVyLm1heEluc3RydWN0aW9uU2l6ZSArIDYpOworICAgICAgICBt
X2p1bXAgPSAoY29uZCA9PSBOb3RFcXVhbCkgPyBKdW1wKG1fYXNzZW1ibGVyLmpuZSgpKSA6IEp1
bXAobV9hc3NlbWJsZXIuamUoKSk7CisgICAgICAgIAorICAgICAgICBSZWdpc3RlcklEIHNjcjsK
KyAgICAgICAgaWYgKG5lZWRDb25zdGFudCkgeworICAgICAgICAgICAgc2NyID0gY2xhaW1TY3Jh
dGNoKCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5Mb2FkQ29uc3RhbnQoMHgwLCBzY3IsIHRy
dWUpOworICAgICAgICB9CisgICAgICAgIG1fYXNzZW1ibGVyLm5vcCgpOworICAgICAgICBtX2Fz
c2VtYmxlci5ub3AoKTsKKyAgICAgICAgaWYgKG5lZWRDb25zdGFudCkKKyAgICAgICAgICAgIHJl
bGVhc2VTY3JhdGNoKHNjcik7CisgICAgICAgIAorICAgICAgICByZXR1cm4gbV9qdW1wOworICAg
IH0KKworCisgICAgSnVtcCBicmFuY2gzMihDb25kaXRpb24gY29uZCwgQWJzb2x1dGVBZGRyZXNz
IGxlZnQsIFJlZ2lzdGVySUQgcmlnaHQsIGJvb2wgbmVlZENvbnN0YW50ID0gdHJ1ZSkKKyAgICB7
CisgICAgICAgIEp1bXAgbV9qdW1wOworICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2Ny
YXRjaCgpOworICAgICAgICBtb3ZlKEltbTMyKChpbnQpbGVmdC5tX3B0ciksIHNjcik7CisgICAg
ICAgIG1fYXNzZW1ibGVyLmNtcGxfcnIocmlnaHQsIHNjciwgY29uZCk7CisKKyAgICAgICAgbV9h
c3NlbWJsZXIuZW5zdXJlU3BhY2UobV9hc3NlbWJsZXIubWF4SW5zdHJ1Y3Rpb25TaXplICsgNik7
CisgICAgICAgIG1fanVtcCA9IChjb25kID09IE5vdEVxdWFsKSA/IEp1bXAobV9hc3NlbWJsZXIu
am5lKCkpIDogSnVtcChtX2Fzc2VtYmxlci5qZSgpKTsKKworICAgICAgICBpZiAobmVlZENvbnN0
YW50KQorICAgICAgICAgICAgbV9hc3NlbWJsZXIuTG9hZENvbnN0YW50KDB4MCwgc2NyLCB0cnVl
KTsKKyAgICAgICAgbV9hc3NlbWJsZXIubm9wKCk7CisgICAgICAgIG1fYXNzZW1ibGVyLm5vcCgp
OworCisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgICAgIHJldHVybiBtX2p1bXA7
CisgICAgfQorCisKKyAgICBKdW1wIGJyYW5jaDMyKENvbmRpdGlvbiBjb25kLCBBYnNvbHV0ZUFk
ZHJlc3MgbGVmdCwgSW1tMzIgcmlnaHQsIGJvb2wgbmVlZENvbnN0YW50ID0gdHJ1ZSkKKyAgICB7
CisgICAgICAgIEp1bXAgbV9qdW1wOworICAgICAgICBSZWdpc3RlcklEIGFkZHJlc3NUZW1wUmVn
aXN0ZXIgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgbG9hZDMyKGxlZnQubV9wdHIsIGFkZHJl
c3NUZW1wUmVnaXN0ZXIpOworCisgICAgICAgIG1fYXNzZW1ibGVyLmNtcGxfaXIocmlnaHQubV92
YWx1ZSwgYWRkcmVzc1RlbXBSZWdpc3RlciwgY29uZCk7CisKKyAgICAgICAgbV9hc3NlbWJsZXIu
ZW5zdXJlU3BhY2UobV9hc3NlbWJsZXIubWF4SW5zdHJ1Y3Rpb25TaXplICsgNik7CisgICAgICAg
IG1fanVtcCA9IChjb25kID09IE5vdEVxdWFsKSA/IEp1bXAobV9hc3NlbWJsZXIuam5lKCkpIDog
SnVtcChtX2Fzc2VtYmxlci5qZSgpKTsKKworICAgICAgICBpZiAobmVlZENvbnN0YW50KQorICAg
ICAgICAgICAgbV9hc3NlbWJsZXIuTG9hZENvbnN0YW50KDB4MCwgYWRkcmVzc1RlbXBSZWdpc3Rl
ciwgdHJ1ZSk7CisgICAgICAgIG1fYXNzZW1ibGVyLm5vcCgpOworICAgICAgICBtX2Fzc2VtYmxl
ci5ub3AoKTsKKworICAgICAgICByZWxlYXNlU2NyYXRjaChhZGRyZXNzVGVtcFJlZ2lzdGVyKTsK
KyAgICAgICAgcmV0dXJuIG1fanVtcDsKKyAgICB9CisKKworCisgICAgSnVtcCBicmFuY2gxNihD
b25kaXRpb24gY29uZCwgIEJhc2VJbmRleCBsZWZ0LCBSZWdpc3RlcklEIHJpZ2h0KQorICAgIHsK
KyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgbW92ZShs
ZWZ0LmluZGV4LCBzY3IpOworICAgICAgICBsc2hpZnQzMihJbW0zMihsZWZ0LnNjYWxlKSwgc2Ny
KTsKKyAgICAgICAgbV9hc3NlbWJsZXIuYWRkbF9pcihsZWZ0Lm9mZnNldCwgc2NyKTsKKyAgICAg
ICAgYWRkMzIobGVmdC5iYXNlLCBzY3IpOworICAgICAgICBsb2FkMTYoc2NyLCBzY3IpOworICAg
ICAgICBleHR1dyhzY3IsIHNjcik7CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisKKyAg
ICAgICAgcmV0dXJuIGJyYW5jaDMyKGNvbmQsIHNjciwgcmlnaHQpOworICAgIH0KKyAgICAKKyAg
ICBKdW1wIGJyYW5jaDE2KENvbmRpdGlvbiBjb25kLCBCYXNlSW5kZXggbGVmdCwgSW1tMzIgcmln
aHQpCisgICAgeworICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAg
ICAgICBtb3ZlKGxlZnQuaW5kZXgsIHNjcik7CisgICAgICAgIGxzaGlmdDMyKEltbTMyKGxlZnQu
c2NhbGUpLCBzY3IpOworICAgICAgICBtX2Fzc2VtYmxlci5hZGRsX2lyKGxlZnQub2Zmc2V0LCBz
Y3IpOworICAgICAgICBhZGQzMihsZWZ0LmJhc2UsIHNjcik7CisgICAgICAgIGxvYWQxNihzY3Is
IHNjcik7CisgICAgICAgIGV4dHV3KHNjciwgc2NyKTsKKyAgICAgICAgCisgICAgICAgIFJlZ2lz
dGVySUQgc2NyMSA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBtX2Fzc2VtYmxlci5Mb2FkQ29u
c3RhbnQocmlnaHQubV92YWx1ZSwgc2NyMSk7CisgICAgICAgIAorICAgICAgICByZWxlYXNlU2Ny
YXRjaChzY3IpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IxKTsKKyAgICAgICAgcmV0dXJu
IGJyYW5jaDMyKGNvbmQsIHNjciwgc2NyMSk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2hUZXN0
MzIoQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgcmVnLCBSZWdpc3RlcklEIG1hc2ssIGJvb2wg
bmVlZENvbnN0YW50ID0gdHJ1ZSkKKyAgICB7CisgICAgICAgIEFTU0VSVCgoY29uZCA9PSBaZXJv
KSB8fCAoY29uZCA9PSBOb25aZXJvKSk7CisgICAgICAgIEp1bXAgbV9qdW1wOworICAgICAgICBt
X2Fzc2VtYmxlci50ZXN0bF9ycihyZWcsIG1hc2spOworCisgICAgICAgIG1fYXNzZW1ibGVyLmVu
c3VyZVNwYWNlKG1fYXNzZW1ibGVyLm1heEluc3RydWN0aW9uU2l6ZSArIDYpOworICAgICAgICBt
X2p1bXAgPSAoY29uZCA9PSBOb3RFcXVhbCkgPyBKdW1wKG1fYXNzZW1ibGVyLmpuZSgpKSA6IEp1
bXAobV9hc3NlbWJsZXIuamUoKSk7CisgICAgICAgIAorICAgICAgICBSZWdpc3RlcklEIHNjcjsK
KyAgICAgICAgaWYgKG5lZWRDb25zdGFudCkgeworICAgICAgICAgICAgc2NyID0gY2xhaW1TY3Jh
dGNoKCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5Mb2FkQ29uc3RhbnQoMHgwLCBzY3IsIHRy
dWUpOworICAgICAgICB9CisgICAgICAgIG1fYXNzZW1ibGVyLm5vcCgpOworICAgICAgICBtX2Fz
c2VtYmxlci5ub3AoKTsKKyAgICAgICAgaWYgKG5lZWRDb25zdGFudCkKKyAgICAgICAgICAgIHJl
bGVhc2VTY3JhdGNoKHNjcik7CisgICAgICAgIAorICAgICAgICByZXR1cm4gbV9qdW1wOworICAg
IH0KKworICAgIEp1bXAgYnJhbmNoVGVzdDMyKENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIHJl
ZywgSW1tMzIgbWFzayA9IEltbTMyKC0xKSwgYm9vbCBuZWVkQ29uc3RhbnQgPSB0cnVlKQorICAg
IHsKKyAgICAgICAgQVNTRVJUKChjb25kID09IFplcm8pIHx8IChjb25kID09IE5vblplcm8pKTsK
KyAgICAgICAgSnVtcCBtX2p1bXA7CisgICAgICAgIAorICAgICAgICBpZiAobWFzay5tX3ZhbHVl
ID09IC0xKQorICAgICAgICAgICAgbV9hc3NlbWJsZXIudGVzdGxfcnIocmVnLCByZWcpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBtX2Fzc2VtYmxlci50ZXN0bF9pMzJyKG1hc2subV92YWx1
ZSwgcmVnKTsKKyAgICAgICAgICAgIAorICAgICAgICBtX2Fzc2VtYmxlci5lbnN1cmVTcGFjZSht
X2Fzc2VtYmxlci5tYXhJbnN0cnVjdGlvblNpemUgKyA2KTsKKyAgICAgICAgbV9qdW1wID0gKGNv
bmQgPT0gTm90RXF1YWwpID8gSnVtcChtX2Fzc2VtYmxlci5qbmUoKSkgOiBKdW1wKG1fYXNzZW1i
bGVyLmplKCkpOworICAgICAgICAKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3I7CisgICAgICAgIGlm
IChuZWVkQ29uc3RhbnQpIHsKKyAgICAgICAgICAgIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAg
ICAgICAgICAgbV9hc3NlbWJsZXIuTG9hZENvbnN0YW50KDB4MCwgc2NyLCB0cnVlKTsKKyAgICAg
ICAgfQorICAgICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubm9w
KCk7CisgICAgICAgIGlmIChuZWVkQ29uc3RhbnQpCisgICAgICAgICAgICByZWxlYXNlU2NyYXRj
aChzY3IpOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIG1fanVtcDsKKyAgICB9CisKKyAgICBK
dW1wIGJyYW5jaFRlc3QzMihDb25kaXRpb24gY29uZCwgQWRkcmVzcyBhZGRyZXNzLCBJbW0zMiBt
YXNrID0gSW1tMzIoLTEpLCBib29sIG5lZWRDb25zdGFudCA9IHRydWUpCisgICAgeworICAgICAg
ICBBU1NFUlQoKGNvbmQgPT0gWmVybykgfHwgKGNvbmQgPT0gTm9uWmVybykpOworICAgICAgICBK
dW1wIG1fanVtcDsKKworICAgICAgICBpZiAobWFzay5tX3ZhbHVlID09IC0xKQorICAgICAgICAg
ICAgbV9hc3NlbWJsZXIuY21wbF9pbSgwLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlLCBj
b25kKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9hc3NlbWJsZXIudGVzdGxfaTMybSht
YXNrLm1fdmFsdWUsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UpOworICAgICAgICAgICAg
CisgICAgICAgIG1fYXNzZW1ibGVyLmVuc3VyZVNwYWNlKG1fYXNzZW1ibGVyLm1heEluc3RydWN0
aW9uU2l6ZSArIDYpOworICAgICAgICBtX2p1bXAgPSAoY29uZCA9PSBOb3RFcXVhbCkgPyBKdW1w
KG1fYXNzZW1ibGVyLmpuZSgpKSA6IEp1bXAobV9hc3NlbWJsZXIuamUoKSk7CisgICAgICAgIAor
ICAgICAgICBSZWdpc3RlcklEIHNjcjsKKyAgICAgICAgaWYgKG5lZWRDb25zdGFudCkgeworICAg
ICAgICAgICAgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5M
b2FkQ29uc3RhbnQoMHgwLCBzY3IsIHRydWUpOworICAgICAgICB9CisgICAgICAgIG1fYXNzZW1i
bGVyLm5vcCgpOworICAgICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKKyAgICAgICAgaWYgKG5lZWRD
b25zdGFudCkKKyAgICAgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgICAgIAorICAg
ICAgICByZXR1cm4gbV9qdW1wOworICAgIH0KKyAgICAKKyAgICBKdW1wIGJyYW5jaDMyKENvbmRp
dGlvbiBjb25kLCBib29sIG5lZWRDb25zdGFudCA9IHRydWUpCisgICAgeworICAgICAgICBKdW1w
IG1fanVtcDsKKworICAgICAgICBtX2Fzc2VtYmxlci5lbnN1cmVTcGFjZShtX2Fzc2VtYmxlci5t
YXhJbnN0cnVjdGlvblNpemUgKyA2KTsKKyAgICAgICAgbV9qdW1wID0gKGNvbmQgPT0gTm90RXF1
YWwpID8gSnVtcChtX2Fzc2VtYmxlci5qbmUoKSkgOiBKdW1wKG1fYXNzZW1ibGVyLmplKCkpOwor
CisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgCisgICAgICAgIGlm
IChuZWVkQ29uc3RhbnQpIHsKKyAgICAgICAgICAgIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAg
ICAgICAgICAgbV9hc3NlbWJsZXIuTG9hZENvbnN0YW50KDB4MCwgc2NyLCB0cnVlKTsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgbV9hc3NlbWJsZXIubm9wKCk7CisgICAgICAgIG1fYXNz
ZW1ibGVyLm5vcCgpOworICAgICAgICAKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAg
ICAgICAgcmV0dXJuIG1fanVtcDsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaFRlc3QzMihDb25k
aXRpb24gY29uZCwgQmFzZUluZGV4IGFkZHJlc3MsIEltbTMyIG1hc2sgPSBJbW0zMigtMSksIGJv
b2wgbmVlZENvbnN0YW50ID0gdHJ1ZSkKKyAgICB7CisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0g
Y2xhaW1TY3JhdGNoKCk7CisgICAgICAgIEp1bXAgbV9qdW1wOworCisgICAgICAgIG1vdmUoYWRk
cmVzcy5pbmRleCwgc2NyKTsKKworICAgICAgICBsc2hpZnQzMihJbW0zMihhZGRyZXNzLnNjYWxl
KSwgc2NyKTsKKyAgICAgICAgYWRkMzIoYWRkcmVzcy5iYXNlLCBzY3IpOworICAgICAgICBsb2Fk
MzIoc2NyLCBhZGRyZXNzLm9mZnNldCwgc2NyKTsKKworICAgICAgICBpZiAobWFzay5tX3ZhbHVl
ID09IC0xKQorICAgICAgICAgICAgbV9hc3NlbWJsZXIudGVzdGxfcnIoc2NyLCBzY3IpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBtX2Fzc2VtYmxlci50ZXN0bF9pMzJyKG1hc2subV92YWx1
ZSwgc2NyKTsKKworICAgICAgICBtX2Fzc2VtYmxlci5lbnN1cmVTcGFjZShtX2Fzc2VtYmxlci5t
YXhJbnN0cnVjdGlvblNpemUgKyA2KTsKKyAgICAgICAgbV9qdW1wID0gKGNvbmQgPT0gTm90RXF1
YWwpID8gSnVtcChtX2Fzc2VtYmxlci5qbmUoKSkgOiBKdW1wKG1fYXNzZW1ibGVyLmplKCkpOwor
CisgICAgICAgIGlmIChuZWVkQ29uc3RhbnQpCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5Mb2Fk
Q29uc3RhbnQoMHgwLCBzY3IsIHRydWUpOworCisgICAgICAgIG1fYXNzZW1ibGVyLm5vcCgpOwor
ICAgICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsK
KyAgICAgICAgCisgICAgICAgIHJldHVybiBtX2p1bXA7CisgICAgfQorCisgICAgSnVtcCBqdW1w
KCkKKyAgICB7CisgICAgICAgIHJldHVybiBKdW1wKG1fYXNzZW1ibGVyLmptcCgpKTsKKyAgICB9
CisKKyAgICB2b2lkIGp1bXAoUmVnaXN0ZXJJRCB0YXJnZXQpCisgICAgeworICAgICAgICBtX2Fz
c2VtYmxlci5qbXBfcih0YXJnZXQpOworICAgIH0KKworICAgIC8vIEFkZHJlc3MgaXMgYSBtZW1v
cnkgbG9jYXRpb24gY29udGFpbmluZyB0aGUgYWRkcmVzcyB0byBqdW1wIHRvCisgICAgdm9pZCBq
dW1wKEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmptcF9tKGFk
ZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UpOworICAgIH0KKworCisgICAgLy8gQXJpdGhtZXRp
YyBjb250cm9sIGZsb3cgb3BlcmF0aW9ucworICAgIAorICAgIEp1bXAgYnJhbmNoQWRkMzIoQ29u
ZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAg
ICAgICBBU1NFUlQoY29uZCA9PSBPdmVyZmxvdyk7CisgICAgICAgIG1fYXNzZW1ibGVyLmVuc3Vy
ZVNwYWNlKG1fYXNzZW1ibGVyLm1heEluc3RydWN0aW9uU2l6ZSArIDYpOworICAgICAgICBtX2Fz
c2VtYmxlci5hZGR2bF9ycihzcmMsIGRlc3QpOworCisgICAgICAgIEp1bXAgbV9qdW1wID0gSnVt
cChtX2Fzc2VtYmxlci5qbmUoKSk7CisgICAgICAgCisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0g
Y2xhaW1TY3JhdGNoKCk7IAorICAgICAgICBtX2Fzc2VtYmxlci5Mb2FkQ29uc3RhbnQoMHgwLCBz
Y3IsIHRydWUpOworICAgICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKKyAgICAgICAgbV9hc3NlbWJs
ZXIubm9wKCk7CisgICAgICAgIAorICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgICAg
ICByZXR1cm4gbV9qdW1wOworICAgIH0KKyAgICAKKyAgICBKdW1wIGJyYW5jaE11bDMyKENvbmRp
dGlvbiBjb25kLCBSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorICAgIAorICAgIEp1bXAgYnJhbmNoTXVs
MzIoQ29uZGl0aW9uIGNvbmQsIEltbTMyIGltbSwgUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQg
ZGVzdCkKKyAgICB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAgICAK
KyAgICBKdW1wIGJyYW5jaFN1YjMyKENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIHNyYywgUmVn
aXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
fQorICAgIAorICAgIEp1bXAgYnJhbmNoU3ViMzIoQ29uZGl0aW9uIGNvbmQsIEltbTMyIGltbSwg
UmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgfQorCisgICAgQ2FsbCBjYWxsKCkKKyAgICB7CisgICAgICAgIHJldHVybiBDYWxsKG1fYXNz
ZW1ibGVyLmNhbGwoKSwgQ2FsbDo6TGlua2FibGUpOworICAgIH0KKyAgICAKKyAgICBDYWxsIG5l
YXJDYWxsKCkKKyAgICB7CisgICAgICAgIHJldHVybiBDYWxsKG1fYXNzZW1ibGVyLmNhbGwoKSwg
Q2FsbDo6TGlua2FibGVOZWFyKTsKKyAgICB9CisKKyAgICBDYWxsIGNhbGwoUmVnaXN0ZXJJRCB0
YXJnZXQpCisgICAgeworICAgICAgICByZXR1cm4gQ2FsbChtX2Fzc2VtYmxlci5jYWxsKHRhcmdl
dCksIENhbGw6Ok5vbmUpOworICAgIH0KKworICAgIHZvaWQgYnJlYWtwb2ludCgpCisgICAgewor
ICAgICAgICBtX2Fzc2VtYmxlci5ia3B0KCk7CisgICAgICAgIG1fYXNzZW1ibGVyLm5vcCgpOwor
ICAgIH0KKworICAgIHZvaWQgcmV0KCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnJldCgp
OworICAgICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaFB0
cldpdGhQYXRjaChDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBsZWZ0LCBEYXRhTGFiZWxQdHIm
IGRhdGFMYWJlbCwgSW1tUHRyIGluaXRpYWxSaWdodFZhbHVlID0gSW1tUHRyKDApLCBib29sIG5l
ZWRDb25zdGFudCA9IHRydWUpCisgICAgeworICAgICAgICBSZWdpc3RlcklEIGRhdGFUZW1wUmVn
aXN0ZXIgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgSnVtcCBtX2p1bXA7CisgICAgICAgIAor
ICAgICAgICBkYXRhTGFiZWwgPSBtb3ZlV2l0aFBhdGNoKGluaXRpYWxSaWdodFZhbHVlLCBkYXRh
VGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgCisgICAgICAgIG1fYXNzZW1ibGVyLmNtcGxfcnIoZGF0
YVRlbXBSZWdpc3RlciwgbGVmdCwgY29uZCk7CisKKyAgICAgICAgbV9qdW1wID0gKGNvbmQgPT0g
Tm90RXF1YWwpID8gSnVtcChtX2Fzc2VtYmxlci5qbmUoKSkgOiBKdW1wKG1fYXNzZW1ibGVyLmpl
KCkpOworICAgICAgICAKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsK
KyAgICAgICAgaWYgKG5lZWRDb25zdGFudCkKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLkxvYWRD
b25zdGFudCgweDAsIHNjciwgdHJ1ZSk7CisgICAgICAgIG1fYXNzZW1ibGVyLm5vcCgpOworICAg
ICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAg
ICAgICAgcmVsZWFzZVNjcmF0Y2goZGF0YVRlbXBSZWdpc3Rlcik7CisgICAgICAgIAorICAgICAg
ICByZXR1cm4gbV9qdW1wOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoUHRyV2l0aFBhdGNoKENv
bmRpdGlvbiBjb25kLCBBZGRyZXNzIGxlZnQsIERhdGFMYWJlbFB0ciYgZGF0YUxhYmVsLCBJbW1Q
dHIgaW5pdGlhbFJpZ2h0VmFsdWUgPSBJbW1QdHIoMCksIGJvb2wgbmVlZENvbnN0YW50ID0gdHJ1
ZSkKKyAgICB7CisgICAgICAgIEp1bXAgbV9qdW1wOworICAgICAgICBSZWdpc3RlcklEIHNjciA9
IGNsYWltU2NyYXRjaCgpOworCisgICAgICAgIG1fYXNzZW1ibGVyLkxvYWRDb25zdGFudChsZWZ0
Lm9mZnNldCwgc2NyLCBmYWxzZSk7CisgICAgICAgIG1fYXNzZW1ibGVyLmFkZGxfcnIobGVmdC5i
YXNlLCBzY3IpOworICAgICAgICBtX2Fzc2VtYmxlci5tb3ZsX21yKHNjciwgc2NyKTsKKworICAg
ICAgICBSZWdpc3RlcklEIHNjcjEgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgZGF0YUxhYmVs
ID0gbW92ZVdpdGhQYXRjaChpbml0aWFsUmlnaHRWYWx1ZSwgc2NyMSk7CisKKyAgICAgICAgbV9h
c3NlbWJsZXIuY21wbF9ycihzY3IxLCBzY3IsIGNvbmQpOworICAgICAgICAgICAgICAgIAorICAg
ICAgICBtX2p1bXAgPSAoY29uZCA9PSBOb3RFcXVhbCkgPyBKdW1wKG1fYXNzZW1ibGVyLmpuZSgp
KSA6IEp1bXAobV9hc3NlbWJsZXIuamUoKSk7CisgICAgICAgIAorICAgICAgICBpZiAobmVlZENv
bnN0YW50KQorICAgICAgICAgICAgbV9hc3NlbWJsZXIuTG9hZENvbnN0YW50KDB4MCwgc2NyLCB0
cnVlKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubm9wKCk7CisgICAgICAgIG1fYXNzZW1ibGVyLm5v
cCgpOworICAgICAgICAKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICAgICAgcmVs
ZWFzZVNjcmF0Y2goc2NyMSk7CisgICAgICAgIHJldHVybiBtX2p1bXA7CisgICAgfQorICAgIAor
ICAgIERhdGFMYWJlbFB0ciBzdG9yZVB0cldpdGhQYXRjaChJbW1QdHIgaW5pdGlhbFZhbHVlLCBJ
bXBsaWNpdEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0g
Y2xhaW1TY3JhdGNoKCk7CisgICAgICAgIERhdGFMYWJlbFB0ciBsYWJlbCA9IG1vdmVXaXRoUGF0
Y2goaW5pdGlhbFZhbHVlLCBzY3IpOworICAgICAgICBzdG9yZTMyKHNjciwgYWRkcmVzcyk7Cisg
ICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgICAgIHJldHVybiBsYWJlbDsKKyAgICB9
CisKKyAgICBEYXRhTGFiZWxQdHIgc3RvcmVQdHJXaXRoUGF0Y2goSW1wbGljaXRBZGRyZXNzIGFk
ZHJlc3MpIHsgcmV0dXJuIHN0b3JlUHRyV2l0aFBhdGNoKEltbVB0cigwKSwgYWRkcmVzcyk7IH0K
KworCisgICAgQ2FsbCB0YWlsUmVjdXJzaXZlQ2FsbCgpCisgICAgeworICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOyAKKyAgICB9CisKKyAgICBDYWxsIG1ha2VUYWlsUmVjdXJzaXZlQ2FsbChK
dW1wIG9sZEp1bXApCisgICAgeworICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyAKKyAgICB9
CisKKyAgICBpbnQgc2l6ZU9mQ29uc3RhbnRQb29sKCkKKyAgICB7CisgICAgICAgIHJldHVybiBt
X2Fzc2VtYmxlci5zaXplT2ZDb25zdGFudFBvb2woKTsKKyAgICB9CisKKyAgICBwcml2YXRlOgor
ICAgIGZyaWVuZCBjbGFzcyBMaW5rQnVmZmVyOworICAgIGZyaWVuZCBjbGFzcyBSZXBhdGNoQnVm
ZmVyOworCisgICAgc3RhdGljIHZvaWQgbGlua0NhbGwodm9pZCogY29kZSwgQ2FsbCBjYWxsLCBG
dW5jdGlvblB0ciBmdW5jdGlvbikKKyAgICB7CisgICAgICAgIFNINEFzc2VtYmxlcjo6bGlua0Nh
bGwoY29kZSwgY2FsbC5tX2ptcCwgZnVuY3Rpb24udmFsdWUoKSk7CisgICAgfQorCisgICAgc3Rh
dGljIHZvaWQgcmVwYXRjaENhbGwoQ29kZUxvY2F0aW9uQ2FsbCBjYWxsLCBDb2RlTG9jYXRpb25M
YWJlbCBkZXN0aW5hdGlvbikKKyAgICB7CisgICAgICAgIFNINEFzc2VtYmxlcjo6cmVsaW5rQ2Fs
bChjYWxsLmRhdGFMb2NhdGlvbigpLCBkZXN0aW5hdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKTsK
KyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCByZXBhdGNoQ2FsbChDb2RlTG9jYXRpb25DYWxsIGNh
bGwsIEZ1bmN0aW9uUHRyIGRlc3RpbmF0aW9uKQorICAgIHsKKyAgICAgICAgU0g0QXNzZW1ibGVy
OjpyZWxpbmtDYWxsKGNhbGwuZGF0YUxvY2F0aW9uKCksIGRlc3RpbmF0aW9uLmV4ZWN1dGFibGVB
ZGRyZXNzKCkpOworICAgIH0KKworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAv
LyBFTkFCTEUoQVNTRU1CTEVSKQorCisjZW5kaWYgLy8gTWFjcm9Bc3NlbWJsZXJTSDRfaApkaWZm
IC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1NINEFzc2VtYmxlci5jcHAgYi9KYXZh
U2NyaXB0Q29yZS9hc3NlbWJsZXIvU0g0QXNzZW1ibGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi44OWE1ZTI3Ci0tLSAvZGV2L251bGwKKysrIGIvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL1NINEFzc2VtYmxlci5jcHAKQEAgLTAsMCArMSwyNyBAQAorCisvKgorICog
IFNINEFzc2VtYmxlci5jcHAKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBTVE1pY3JvZWxl
Y3Ryb25pY3MuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQXV0aG9yOiBUaG91cmF5YSBBbmRv
bHNpICh0aG91cmF5YS5hbmRvbHNpQHN0LmNvbSkuCisqLworCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKworI2lmIEVOQUJMRShBU1NFTUJMRVIpICYmIENQVShTSDQpCisjaW5jbHVkZSAiU0g0QXNz
ZW1ibGVyLmgiCisKK25hbWVzcGFjZSBKU0MgeworCit2b2lkKiBTSDRBc3NlbWJsZXI6OmV4ZWN1
dGFibGVDb3B5KEV4ZWN1dGFibGVQb29sKiBhbGxvY2F0b3IpCit7CisgICAgdm9pZCogY29weSA9
IG1fYnVmZmVyLmV4ZWN1dGFibGVDb3B5KGFsbG9jYXRvcik7CisKKyAgICBBU1NFUlQoY29weSk7
CisgICAgcmV0dXJuIGNvcHk7Cit9CisKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAv
LyBFTkFCTEUoQVNTRU1CTEVSKSAmJiBDUFUoU0g0KQpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL1NINEFzc2VtYmxlci5oIGIvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1NI
NEFzc2VtYmxlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmMjY2YmIK
LS0tIC9kZXYvbnVsbAorKysgYi9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvU0g0QXNzZW1ibGVy
LmgKQEAgLTAsMCArMSwxODg1IEBACisKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBT
VE1pY3JvZWxlY3Ryb25pY3MuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBXcml0dGVuIGJ5IFRo
b3VyYXlhIEFuZG9sc2kgKHRob3VyYXlhLmFuZG9sc2lAc3QuY29tKS4KKyAqCisgKiBDb3B5cmln
aHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBTSDRBc3NlbWJsZXJfaAor
I2RlZmluZSBTSDRBc3NlbWJsZXJfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNp
ZiBFTkFCTEUoQVNTRU1CTEVSKSAmJiBDUFUoU0g0KQorCisjZGVmaW5lIEdFVE9QQ09ERTEoYSwg
YiwgYykgICgoYSkgfCAoKChiKSAmIDB4ZikgPDwgOCkgfCgoKGMpICYgMHhmKSA8PCA0KSkKKyNk
ZWZpbmUgR0VUT1BDT0RFMihhLCBiKSAgKChhKSB8ICgoKGIpICYgMHhmKSA8PCA4KSkKKyNkZWZp
bmUgR0VUT1BDT0RFMyhhLCBiLCBjKSAgKChhKSB8ICgoKGIpICYgMHhmKSA8PCA4KSB8KChjKSAm
IDB4ZmYpKQorI2RlZmluZSBHRVRPUENPREU0KGEsIGIsIGMsIGQpICAoKGEpIHwgKCgoYikgJiAw
eGYpIDw8IDgpIHwoKChjKSAmIDB4ZikgPDw0KSB8KChkKSAmIDB4ZikpCisjZGVmaW5lIEdFVE9Q
Q09ERTUoYSwgYikgICgoYSkgfCAoKGIpICYgMHhmZikpCisjZGVmaW5lIEdFVE9QQ09ERTYoYSwg
YikgICgoYSkgfCAoKGIpICYgMHhmZmYpKQorI2RlZmluZSBHRVRPUENPREU3KGEsIGIpICAoKGEp
IHwgKCgoYikgJiAweDcpIDw8IDkpKQorI2RlZmluZSBHRVRPUENPREU4KGEsIGIsIGMpICAoKGEp
IHwgKCgoYikgJiAweDcpIDw8IDkpIHwoKChjKSAmIDB4NykgPDw1KSkKKyNkZWZpbmUgR0VUT1BD
T0RFOShhLCBiLCBjKSAgKChhKSB8ICgoKGIpICYgMHhmKSA8PCA4KSB8KCgoYykgJiAweDcpIDw8
NSkpCisjZGVmaW5lIEdFVE9QQ09ERTEwKGEsIGIsIGMpICAoKGEpIHwgKCgoYikgJiAweDcpIDw8
IDkpIHwoKChjKSAmIDB4RikgPDw0KSkKKyNkZWZpbmUgR0VUT1BDT0RFMTEoYSwgYiwgYykgICgo
YSkgfCAoKChiKSAmIDB4ZikgPDwgNCkgfCgoKGMpICYgMHhmKSkpCisKKworI2RlZmluZSBJTlZB
TElEX09QQ09ERSAgIDB4ZmZmZgorI2RlZmluZSBBRERfT1BDT0RFICAgICAgIDB4MzAwQworI2Rl
ZmluZSBBRERJTU1fT1BDT0RFICAgIDB4NzAwMAorI2RlZmluZSBBRERDX09QQ09ERSAgICAgIDB4
MzAwRQorI2RlZmluZSBBRERWX09QQ09ERSAgICAgIDB4MzAwRgorCisjZGVmaW5lIEFORF9PUENP
REUgICAgICAgMHgyMDA5CisjZGVmaW5lIEFORElNTV9PUENPREUgICAgMHhDOTAwCisjZGVmaW5l
IERJVjBfT1BDT0RFICAgICAgMHgyMDA3CisjZGVmaW5lIERJVjFfT1BDT0RFICAgICAgMHgzMDA0
CisKKyNkZWZpbmUgQkZfT1BDT0RFICAgICAgICAweDhCMDAKKyNkZWZpbmUgQkZTX09QQ09ERSAg
ICAgICAweDhGMDAKKyNkZWZpbmUgQlJBX09QQ09ERSAgICAgICAwWEEwMDAKKyNkZWZpbmUgQlJB
Rl9PUENPREUgICAgICAweDAwMjMKKyNkZWZpbmUgTk9QX09QQ09ERSAgICAgICAweDAwMDkKKyNk
ZWZpbmUgQlNSX09QQ09ERSAgICAgICAweEIwMDAKKyNkZWZpbmUgUlRTX09QQ09ERSAgICAgICAw
eDAwMEIKKyNkZWZpbmUgQlRfT1BDT0RFICAgICAgICAweDg5MDAKKyNkZWZpbmUgQlRTX09QQ09E
RSAgICAgICAweDhEMDAKKyNkZWZpbmUgQlNSRl9PUENPREUgICAgICAweDAwMDMKKworI2RlZmlu
ZSBCUktfT1BDT0RFICAgICAgIDB4MDAzQgorI2RlZmluZSBGVFJDX09QQ09ERSAgICAgIDB4RjAz
RAorCisjZGVmaW5lIENNUEVRX09QQ09ERSAgICAgMHgzMDAwCisjZGVmaW5lIENNUEVRSU1NX09Q
Q09ERSAgMHg4ODAwCisjZGVmaW5lIENNUEdFX09QQ09ERSAgICAgMHgzMDAzCisjZGVmaW5lIENN
UEdUX09QQ09ERSAgICAgMHgzMDA3CisjZGVmaW5lIENNUEhJX09QQ09ERSAgICAgMHgzMDA2Cisj
ZGVmaW5lIENNUEhTX09QQ09ERSAgICAgMHgzMDAyCisjZGVmaW5lIENNUFBMX09QQ09ERSAgICAg
MHg0MDE1CisjZGVmaW5lIENNUFBaX09QQ09ERSAgICAgMHg0MDExCisjZGVmaW5lIENNUFNUUl9P
UENPREUgICAgMHgyMDBDCisKKyNkZWZpbmUgRFRfT1BDT0RFICAgICAgICAweDQwMTAKKworCisj
ZGVmaW5lIEZDTVBFUV9PUENPREUgICAgMHhGMDA0CisjZGVmaW5lIEZDTVBHVF9PUENPREUgICAg
MHhGMDA1CisjZGVmaW5lIERDTVBFUV9PUENPREUgICAgMHhGMDA1CisjZGVmaW5lIERDTVBHVF9P
UENPREUgICAgMHhGMDA0CisKKyNkZWZpbmUgRk1PVl9PUENPREUgICAgICAweEYwMEMKKyNkZWZp
bmUgRE1PVl9PUENPREUgICAgICAgICAgICAgICAgIDB4MUUwMTkKKyNkZWZpbmUgRE1PVl9XUklU
RV9SMFJOX09QQ09ERSAgICAgIDB4MUUwMEYKKyNkZWZpbmUgRE1PVl9XUklURV9SMFJOX09QQ09E
RSAgICAgIDB4MUUwMEYKKyNkZWZpbmUgRE1PVl9SRUFEX1IwUk5fT1BDT0RFICAgICAgIDB4MUUw
MEQKKworCisjZGVmaW5lIEZBRERfT1BDT0RFICAgICAgMHhGMDAwCisjZGVmaW5lIEZNVUxfT1BD
T0RFICAgICAgMHhGMDAyCisjZGVmaW5lIEZTVUJfT1BDT0RFICAgICAgMHhGMDAxCisjZGVmaW5l
IEZESVZfT1BDT0RFICAgICAgMHhGMDAzCisKKyNkZWZpbmUgRk5FR19PUENPREUgICAgICAweEYw
NEQKKworCisjZGVmaW5lIEpNUF9PUENPREUgICAgICAgMHg0MDJCCisjZGVmaW5lIEpTUl9PUENP
REUgICAgICAgMHg0MDBCCisKKworI2RlZmluZSBMRFNQUl9PUENPREUgICAgIDB4NDAyQQorI2Rl
ZmluZSBMRFNMUFJfT1BDT0RFICAgIDB4NDAyNgorCisjZGVmaW5lIE1PVl9PUENPREUgICAgICAg
MHg2MDAzCisjZGVmaW5lIE1PVklNTV9PUENPREUgICAgMHhFMDAwCisKKyNkZWZpbmUgTU9WQl9X
UklURV9STl9PUENPREUgICAgICAweDIwMDAKKyNkZWZpbmUgTU9WQl9XUklURV9STkRFQ19PUENP
REUgICAweDIwMDQKKyNkZWZpbmUgTU9WQl9XUklURV9SMFJOX09QQ09ERSAgICAweDAwMDQKKyNk
ZWZpbmUgTU9WQl9XUklURV9PRkZHQlJfT1BDT0RFICAweEMwMDAKKyNkZWZpbmUgTU9WQl9XUklU
RV9PRkZSTl9PUENPREUgICAweDgwMDAKKworI2RlZmluZSBNT1ZCX1JFQURfUk1fT1BDT0RFICAg
ICAgMHg2MDAwCisjZGVmaW5lIE1PVkJfUkVBRF9STUlOQ19PUENPREUgICAweDYwMDQKKyNkZWZp
bmUgTU9WQl9SRUFEX1IwUk1fT1BDT0RFICAgIDB4MDAwQworI2RlZmluZSBNT1ZCX1JFQURfT0ZG
R0JSX09QQ09ERSAgMHhDNDAwCisjZGVmaW5lIE1PVkJfUkVBRF9PRkZSTV9PUENPREUgICAweDg0
MDAKKworI2RlZmluZSBNT1ZMX1dSSVRFX1JOX09QQ09ERSAgICAgIDB4MjAwMgorI2RlZmluZSBN
T1ZMX1dSSVRFX1JOREVDX09QQ09ERSAgIDB4MjAwNgorI2RlZmluZSBNT1ZMX1dSSVRFX1IwUk5f
T1BDT0RFICAgIDB4MDAwNgorI2RlZmluZSBNT1ZMX1dSSVRFX09GRkdCUl9PUENPREUgIDB4QzIw
MAorI2RlZmluZSBNT1ZMX1dSSVRFX09GRlJOX09QQ09ERSAgIDB4MTAwMAorCisjZGVmaW5lIE1P
VkxfUkVBRF9STV9PUENPREUgICAgICAweDYwMDIKKyNkZWZpbmUgTU9WTF9SRUFEX1JNSU5DX09Q
Q09ERSAgIDB4NjAwNgorI2RlZmluZSBNT1ZMX1JFQURfUjBSTV9PUENPREUgICAgMHgwMDBFCisj
ZGVmaW5lIE1PVkxfUkVBRF9PRkZHQlJfT1BDT0RFICAweEM2MDAKKyNkZWZpbmUgTU9WTF9SRUFE
X09GRlBDX09QQ09ERSAgIDB4RDAwMAorI2RlZmluZSBNT1ZMX1JFQURfT0ZGUk1fT1BDT0RFICAg
MHg1MDAwCisjZGVmaW5lIE1PVldfV1JJVEVfUk5fT1BDT0RFICAgICAweDIwMDEKKyNkZWZpbmUg
TU9WV19SRUFEX1JNX09QQ09ERSAgICAgIDB4NjAwMQorI2RlZmluZSBNT1ZXX1JFQURfUjBSTV9P
UENPREUgICAgMHgwMDBECisjZGVmaW5lIE1PVldfUkVBRF9PRkZQQ19PUENPREUgICAweDkwMDAK
KworI2RlZmluZSBNT1ZBX1JFQURfT0ZGUENfT1BDT0RFICAweEM3MDAKKyNkZWZpbmUgTU9WVF9P
UENPREUgICAgICAgICAgICAgMHgwMDI5CisKKyNkZWZpbmUgTVVMTF9PUENPREUgICAgICAgICAg
ICAgMHgwMDA3CisjZGVmaW5lIFNUU01BQ0xfT1BDT0RFICAgICAgICAgIDB4MDAxQQorI2RlZmlu
ZSBTVFNNQUNIX09QQ09ERSAgICAgICAgICAweDAwMEEKKyNkZWZpbmUgRE1VTFNMX09QQ09ERSAg
ICAgICAgICAgMHgzMDBECisKKyNkZWZpbmUgTkVHX09QQ09ERSAgICAgICAgICAgICAgMHg2MDBC
CisjZGVmaW5lIE5FR0NfT1BDT0RFICAgICAgICAgICAgIDB4NjAwQQorCisjZGVmaW5lIFJUU19P
UENPREUgICAgICAgICAgICAgIDB4MDAwQgorI2RlZmluZSBOT1RfT1BDT0RFICAgICAgICAgICAg
ICAweDYwMDcKKworI2RlZmluZSBPUl9PUENPREUgICAgICAgICAgICAgICAweDIwMEIKKyNkZWZp
bmUgT1JJTU1fT1BDT0RFICAgICAgICAgICAgMHhDQjAwCisjZGVmaW5lIE9SQklNTV9PUENPREUg
ICAgICAgICAgIDB4Q0YwMAorCisKKyNkZWZpbmUgU0VUU19PUENPREUgICAgICAgICAgICAgMHgw
MDU4CisjZGVmaW5lIFNFVFRfT1BDT0RFICAgICAgICAgICAgIDB4MDAxOCAKKyNkZWZpbmUgU0hB
RF9PUENPREUgICAgICAgICAgICAgMHg0MDBDCisjZGVmaW5lIFNIQUxfT1BDT0RFICAgICAgICAg
ICAgIDB4NDAyMAorI2RlZmluZSBTSEFSX09QQ09ERSAgICAgICAgICAgICAweDQwMjEKKyNkZWZp
bmUgU0hMRF9PUENPREUgICAgICAgICAgICAgMHg0MDBECisjZGVmaW5lIFNITExfT1BDT0RFICAg
ICAgICAgICAgIDB4NDAwMAorI2RlZmluZSBTSExMMl9PUENPREUgICAgICAgICAgICAweDQwMDgK
KyNkZWZpbmUgU0hMTDhfT1BDT0RFICAgICAgICAgICAgMHg0MDE4CisjZGVmaW5lIFNITEwxNl9P
UENPREUgICAgICAgICAgIDB4NDAyOAorCisjZGVmaW5lIFNITFJfT1BDT0RFICAgICAgICAgICAg
IDB4NDAwMQorI2RlZmluZSBTSExSMl9PUENPREUgICAgICAgICAgICAweDQwMDkKKyNkZWZpbmUg
U0hMUjhfT1BDT0RFICAgICAgICAgICAgMHg0MDE5CisjZGVmaW5lIFNITFIxNl9PUENPREUgICAg
ICAgICAgIDB4NDAyOQorCisKKyNkZWZpbmUgU1RTUFJfT1BDT0RFICAgICAgICAgICAgMHgwMDJB
CisjZGVmaW5lIFNUU0xQUl9PUENPREUgICAgICAgICAgIDB4NDAyMgorI2RlZmluZSBGTE9BVF9P
UENPREUgICAgICAgICAgICAweEYwMkQKKworI2RlZmluZSBTVUJfT1BDT0RFICAgICAgICAgICAg
ICAweDMwMDgKKyNkZWZpbmUgU1VCQ19PUENPREUgICAgICAgICAgICAgMHgzMDBBCisjZGVmaW5l
IFNVQlZfT1BDT0RFICAgICAgICAgICAgIDB4MzAwQgorI2RlZmluZSBNVUxMX09QQ09ERSAgICAg
ICAgICAgICAweDAwMDcKKworI2RlZmluZSBUU1RfT1BDT0RFICAgICAgICAgICAgICAweDIwMDgK
KyNkZWZpbmUgVFNUSU1NX09QQ09ERSAgICAgICAgICAgMHhDODAwCisjZGVmaW5lIFRTVEJfT1BD
T0RFICAgICAgICAgICAgIDB4Q0MwMAorCisjZGVmaW5lIEVYVFVXX09QQ09ERSAgICAgICAgICAg
IDB4NjAwRAorCisjZGVmaW5lIFhPUl9PUENPREUgICAgICAgICAgICAgIDB4MjAwQQorI2RlZmlu
ZSBYT1JJTU1fT1BDT0RFICAgICAgICAgICAweENBMDAKKyNkZWZpbmUgWE9SQl9PUENPREUgICAg
ICAgICAgICAgMHhDRTAwCisKKyNkZWZpbmUgRk1PVlNfUkVBRF9STV9JTkNfT1BDT0RFICAgICAg
ICAweEYwMDkKKyNkZWZpbmUgRk1PVlNfUkVBRF9STV9PUENPREUgICAgICAgICAgICAweEYwMDgK
KyNkZWZpbmUgRk1PVlNfUkVBRF9SMFJNX09QQ09ERSAgICAgICAgICAweEYwMDYKKyNkZWZpbmUg
Rk1PVlNfV1JJVEVfUk5fT1BDT0RFICAgICAgICAgICAweEYwMEEKKyNkZWZpbmUgRk1PVlNfV1JJ
VEVfUk5fREVDX09QQ09ERSAgICAgICAweEYwMEIKKyNkZWZpbmUgRk5FR19PUENPREUgICAgICAg
ICAgICAgICAgICAgICAweEYwNEQKKyNkZWZpbmUgRk1PVl9PUENPREUgICAgICAgICAgICAgICAg
ICAgICAweEYwMEMKKyNkZWZpbmUgRk1PVlNfV1JJVEVfUjBSTl9PUENPREUgICAgICAgICAweEYw
MDcKKworI2RlZmluZSBMRFNfUk1fRlBVTF9PUENPREUgICAgICAgICAgICAgIDB4NDA1QQorI2Rl
ZmluZSBGTERTX0ZSTV9GUFVMX09QQ09ERSAgICAgICAgICAgIDB4RjAxRAorI2RlZmluZSBTVFNf
RlBVTF9STl9PUENPREUgICAgICAgICAgICAgIDB4MDA1QQorI2RlZmluZSBGU1RTX0ZQVUxfRlJO
X09QQ09ERSAgICAgICAgICAgIDB4RjAwRAorCisjZGVmaW5lIExEU0ZQU0NSX09QQ09ERSAgICAg
ICAgICAgICAgICAgMHg0MDZBCisjZGVmaW5lIFNUU0ZQU0NSX09QQ09ERSAgICAgICAgICAgICAg
ICAgMHgwMDZBCisjZGVmaW5lIExEU1JNRlBVTF9PUENPREUgICAgICAgICAgICAgICAgMHg0MDVB
CisjZGVmaW5lIEZTVFNGUFVMRlJOX09QQ09ERSAgICAgICAgICAgICAgMHhGMDBECisKKyNkZWZp
bmUgQ0xSVF9PUENPREUgOAorICAKKyNkZWZpbmUgU0VDT05EXzRfQklUUyh4KSAgICAoKCh4KSAm
IDB4ZjAwKSA+PiA4KQorI2RlZmluZSBUSElSRF80X0JJVFMoeCkgICAgICgoKHgpICYgMHhmMCkg
Pj4gNCkKKyNkZWZpbmUgRk9VUlRIXzRfQklUUyh4KSAgICAoKHgpICYgMHhmKQorI2RlZmluZSBT
RUNPTkRfOF9CSVRTKHgpICAgICgoeCkgJiAweGZmKQorI2RlZmluZSBSSUdIVF8xMl9CSVRTKHgp
ICAgICgoeCkgJiAweGZmZikKKyNkZWZpbmUgU0VDT05EX0RfM19CSVRTKHgpICAgICgoKHgpICYg
MHhFMDApID4+IDkpCisjZGVmaW5lIFRISVJEX0RfM19CSVRTKHgpICAgICAoKCh4KSAmIDB4RTAp
ID4+IDUpCisKKworI2RlZmluZSBBTElHTlVQKHgpICAgICAgKCgoaW50KSh4KSArICAgKHNpemVv
ZihpbnQpIC0gMSkpICYgKH4oc2l6ZW9mKGludCkgLSAxKSkpCisjZGVmaW5lIEFMSUdORE4oeCkg
ICAgICAoKGludCkoeCkgJiAofihzaXplb2YoaW50KSAtIDEpKSkKKyNkZWZpbmUgTk9UQUxJR05F
RCh4KSAgICgoaW50KSh4KSYoc2l6ZW9mKGludCkgLSAxKSkKKworI2RlZmluZSBNQVNLNCAgICAg
KCgweGYgPDwgMTIpIHwgMHhmKQorI2RlZmluZSBNQVNLMyAgICAgKCgweGYgPDwgMTIpIHwgMHhm
ZikKKyNkZWZpbmUgTUFTSzIgICAgICgweGZmIDw8IDgpCisjZGVmaW5lIE1BU0sxICAgICAoMHhm
IDw8IDEyKQorCisjaW5jbHVkZSAiQXNzZW1ibGVyQnVmZmVyLmgiCisjaW5jbHVkZSAiQXNzZW1i
bGVyQnVmZmVyV2l0aENvbnN0YW50UG9vbC5oIgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1
ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3Bh
Y2UgSlNDIHsKK3R5cGVkZWYgdWludDE2X3QgU0g0V29yZDsKKworbmFtZXNwYWNlIFNINCB7CisK
K3R5cGVkZWYgZW51bSB7CisgICAgICAgIFIwICA9IDAsCisgICAgICAgIFIxICA9IDEsCisgICAg
ICAgIFIyICA9IDIsCisgICAgICAgIFIzICA9IDMsCisgICAgICAgIFI0ICA9IDQsCisgICAgICAg
IFI1ICA9IDUsCisgICAgICAgIFI2ICA9IDYsCisgICAgICAgIFI3ICA9IDcsCisgICAgICAgIFI4
ICA9IDgsCisgICAgICAgIFI5ICA9IDksCisgICAgICAgIFIxMCA9IDEwLAorICAgICAgICBSMTEg
PSAxMSwKKyAgICAgICAgUjEyID0gMTIsCisgICAgICAgIFIxMyA9IDEzLAorICAgICAgICBSMTQg
PSAxNCwKKyAgICAgICAgUjE1ID0gMTUsCisgICAgICAgIFNQICA9IFIxNSwKKyAgICAgICAgRlAg
ID0gUjE0LAorICAgICAgICAvLyBQc2V1ZG8tcmVnaXN0ZXIgZm9yIFBDICYgUFIKKyAgICAgICAg
UEMgID0gMTYsCisgICAgICAgIFBSICA9IDE3LAorICAgICAgICAgIAorICAgICAgICBVbmtub3du
ID0gLTEKK30gUmVnaXN0ZXJJRDsKKyAgICAKK3R5cGVkZWYgZW51bSB7CisgICAgICAgIEZSMCAg
PSAwLAorICAgICAgICBGUjEgID0gMSwKKyAgICAgICAgRlIyICA9IDIsCisgICAgICAgIEZSMyAg
PSAzLAorICAgICAgICBGUjQgID0gNCwKKyAgICAgICAgRlI1ICA9IDUsCisgICAgICAgIEZSNiAg
PSA2LAorICAgICAgICBGUjcgID0gNywKKyAgICAgICAgRlI4ICA9IDgsCisgICAgICAgIEZSOSAg
PSA5LAorICAgICAgICBGUjEwID0gMTAsCisgICAgICAgIEZSMTEgPSAxMSwKKyAgICAgICAgRlIx
MiA9IDEyLAorICAgICAgICBGUjEzID0gMTMsCisgICAgICAgIEZSMTQgPSAxNCwKKyAgICAgICAg
RlIxNSA9IDE1LAorICAgICAgICAvKmRvdWJsZSAqLworICAgICAgICBEUjAgID0gMCwKKyAgICAg
ICAgRFIyICA9IDIsCisgICAgICAgIERSNCAgPSA0LAorICAgICAgICBEUjYgID0gNiwKKyAgICAg
ICAgRFI4ICA9IDgsCisgICAgICAgIERSMTAgPSAxMCwKKyAgICAgICAgRFIxMiA9IDEyLAorICAg
ICAgICBEUjE0ID0gMTQsCisKK30gRlBSZWdpc3RlcklEOworfQorCitjbGFzcyBTSDRBc3NlbWJs
ZXIgeworcHVibGljOgorICAgIHR5cGVkZWYgU0g0OjpSZWdpc3RlcklEIFJlZ2lzdGVySUQ7Cisg
ICAgdHlwZWRlZiBTSDQ6OkZQUmVnaXN0ZXJJRCBGUFJlZ2lzdGVySUQ7CisgICAgCisgICAgdHlw
ZWRlZiBBc3NlbWJsZXJCdWZmZXJXaXRoQ29uc3RhbnRQb29sPDUxMiwgNCwgMTYsIFNINEFzc2Vt
Ymxlcj4gU0g0QnVmZmVyOworICAgIAorICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIHNjcmF0
Y2ggPSBTSDQ6OlIxMDsKKyAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCBzY3JhdGNoMSA9IFNI
NDo6UjExOworICAgIGludCBjbGFpbXNjcmF0Y2hSZWc7CisgICAgc3RhdGljIGNvbnN0IGludCBt
YXhJbnN0cnVjdGlvblNpemUgPSAxNjsKKworICAgIGVudW0geworICAgICAgICBwYWRGb3JBbGln
bjggID0gMHgwMCwKKyAgICAgICAgcGFkRm9yQWxpZ24xNiA9IDB4MDAwOSwKKyAgICAgICAgcGFk
Rm9yQWxpZ24zMiA9IDB4MDAwOTAwMDksCisgICAgfTsKKyAgICAgICAKKyAgICBTSDRBc3NlbWJs
ZXIoKQorICAgIHsKKyAgICAgICAgY2xhaW1zY3JhdGNoUmVnID0gMHgwOworICAgIH0gIAorICAg
IAorICAgIC8qIFNINCBjb25kaXRpb24gY29kZXMgKi8KKyAgICAgICAgdHlwZWRlZiBlbnVtIHsK
KyAgICAgICAgICAgIEVRID0gMHgwLCAvLyBFcXVhbAorICAgICAgICAgICAgTkUgPSAweDEsIC8v
IE5vdCBFcXVhbAorICAgICAgICAgICAgSFMgPSAweDIsIC8vIFVuc2lnZW5kIEdyZWF0ZXIgVGhh
biBlcXVhbAorICAgICAgICAgICAgSEkgPSAweDMsIC8vIFVuc2lnZW5kIEdyZWF0ZXIgVGhhbgor
ICAgICAgICAgICAgTFMgPSAweDQsIC8vIFVuc2lnZW5kIExvd2VyIG9yIFNhbWUKKyAgICAgICAg
ICAgIExJID0gMHg1LCAvLyBVbnNpZ2VuZCBMb3dlcgorICAgICAgICAgICAgR0UgPSAweDYsIC8v
IEdyZWF0ZXIgb3IgRXF1YWwKKyAgICAgICAgICAgIExUID0gMHg3LCAvLyBMZXNzIFRoYW4KKyAg
ICAgICAgICAgIEdUID0gMHg4LCAvLyBHcmVhdGVyIFRoYW4KKyAgICAgICAgICAgIExFID0gMHg5
LCAvLyBMZXNzIG9yIEVxdWFsCisgICAgICAgICAgICBPRiA9IDB4YSwgLy8gT3ZlckZsb3cKKyAg
ICAgICAgfSBDb25kaXRpb247CisgICAgICAgIAorICAgIC8vIE9wYXF1ZSBsYWJlbCB0eXBlcwor
ICAgIAorcHVibGljOgorCisgICAgY2xhc3MgSm1wU3JjIHsKKyAgICAgICAgZnJpZW5kIGNsYXNz
IFNINEFzc2VtYmxlcjsKKyAgICBwdWJsaWM6CisgICAgICAgIEptcFNyYygpCisgICAgICAgICAg
ICA6IG1fb2Zmc2V0KC0xKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgIHByaXZhdGU6Cisg
ICAgICAgIEptcFNyYyhpbnQgb2Zmc2V0KQorICAgICAgICAgICAgOiBtX29mZnNldChvZmZzZXQp
CisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIGludCBtX29mZnNldDsKKyAgICB9Owor
ICAgIAorICAgIGNsYXNzIEptcERzdCB7CisgICAgICAgIGZyaWVuZCBjbGFzcyBTSDRBc3NlbWJs
ZXI7CisgICAgcHVibGljOgorICAgICAgICBKbXBEc3QoKQorICAgICAgICAgICAgOiBtX29mZnNl
dCgtMSkKKyAgICAgICAgICAgICwgbV91c2VkKGZhbHNlKQorICAgICAgICB7CisgICAgICAgIH0K
KworICAgICAgICBib29sIGlzVXNlZCgpIGNvbnN0IHsgcmV0dXJuIG1fdXNlZDsgfQorICAgICAg
ICB2b2lkIHVzZWQoKSB7IG1fdXNlZCA9IHRydWU7IH0KKworCisgICAgcHJpdmF0ZToKKyAgICAg
ICAgSm1wRHN0KGludCBvZmZzZXQpCisgICAgICAgICAgICA6IG1fb2Zmc2V0KG9mZnNldCkKKyAg
ICAgICAgICAgICwgbV91c2VkKGZhbHNlKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQo
bV9vZmZzZXQgPT0gb2Zmc2V0KTsKKyAgICAgICAgfQorCisgICAgICAgIGludCBtX29mZnNldCA6
IDMxOworICAgICAgICBpbnQgbV91c2VkIDogMTsKKyAgICB9OworCisgICAgYm9vbCBJc0ltbWVk
aWF0ZShpbnQgY29uc3RhbnQpIAorICAgIHsgICAgICAgIAorICAgICAgICBpZiAoKGNvbnN0YW50
IDw9MTI3KSAmJiAoY29uc3RhbnQgPj0gLTEyOCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworCisgICAgUmVnaXN0ZXJJRCBj
bGFpbVNjcmF0Y2goKQorICAgIHsKKyAgICAgICAgIC8qIDEwMSA9PiBzY3JhdGNoMSByZWxlYXNl
ZCAqLworICAgICAgICAgQVNTRVJUKChjbGFpbXNjcmF0Y2hSZWcgIT0gMHgzKSk7CisgICAgICAg
ICBSZWdpc3RlcklEIHNjcmF0Y2hSZWcgPSBzY3JhdGNoOworCisgICAgICAgICBpZiAoIShjbGFp
bXNjcmF0Y2hSZWcgJiAweDEpKQorICAgICAgICAgICAgIGNsYWltc2NyYXRjaFJlZyA9IChjbGFp
bXNjcmF0Y2hSZWcgfCAweDEpOworICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgY2xhaW1z
Y3JhdGNoUmVnID0gKGNsYWltc2NyYXRjaFJlZyB8IDB4Mik7CisgICAgICAgICAgICAgc2NyYXRj
aFJlZyA9IHNjcmF0Y2gxOworICAgICAgICAgfQorICAgICAgICAgcmV0dXJuIHNjcmF0Y2hSZWc7
CisgICAgIH0KKworICAgICB2b2lkIHJlbGVhc2VTY3JhdGNoKFJlZ2lzdGVySUQgc2NyYXRjaFIp
IAorICAgICB7ICAgCisgICAgICAgICBpZiAoc2NyYXRjaFIgPT0gIHNjcmF0Y2gpCisgICAgICAg
ICAgICAgY2xhaW1zY3JhdGNoUmVnID0gKGNsYWltc2NyYXRjaFJlZyAmIDB4Mik7CisgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgY2xhaW1zY3JhdGNoUmVnID0gKGNsYWltc2NyYXRjaFJlZyAm
IDB4MSk7CisgICAgIH0gCisKKyAgICAvLyBTdGFjayBvcGVyYXRpb25zOgorCisgICAgdm9pZCBw
dXNoX3IoUmVnaXN0ZXJJRCByZWcpCisgICAgeworICAgICAgICB1aW50MTZfdCBvcGM7CisgICAg
ICAgIAorICAgICAgICBpZiAocmVnID09IFNINDo6UFIpCisgICAgICAgICAgICBvcGMgPSBHRVRP
UENPREUyKFNUU0xQUl9PUENPREUsIFNINDo6U1ApOyAgIC8qIFNUUy5MIFBSLCBALVIlZCAqLwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBvcGMgPSBHRVRPUENPREUxKE1PVkxfV1JJVEVfUk5E
RUNfT1BDT0RFLCBTSDQ6OlNQLCByZWcpOyAvKiBtb3YubCByZWcsIEAtU1AgKi8KKworICAgICAg
ICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCBwb3BfcihSZWdpc3RlcklEIHJl
ZykKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYzsKKyAgICAgICAgCisgICAgICAgIGlmIChy
ZWcgPT0gU0g0OjpQUikKKyAgICAgICAgICAgIG9wYyA9IEdFVE9QQ09ERTIoTERTTFBSX09QQ09E
RSwgU0g0OjpTUCk7ICAvKiBMRFMuTCBAUiVkKywgUFIqLworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBvcGMgPSBHRVRPUENPREUxKE1PVkxfUkVBRF9STUlOQ19PUENPREUsIHJlZywgU0g0OjpT
UCk7IC8qIG1vdi5sIEArc3JjLCBkZXN0OyovCisgICAgICAgIAorICAgICAgICBvbmVTaG9ydE9w
KG9wYyk7CisgICAgfQorCisgICAgdm9pZCBwdXNoX2kzMihpbnQgaW1tKQorICAgIHsKKyAgICAg
ICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgTG9hZENvbnN0YW50
KGltbSwgc2NyKTsKKyAgICAgICAgcHVzaF9yKHNjcik7CisgICAgICAgIHJlbGVhc2VTY3JhdGNo
KHNjcik7CisgICAgfQorCisgICAgdm9pZCBwdXNoX20oaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBi
YXNlKQorICAgIHsKKyAgICAgICAgaWYgKChvZmZzZXQgPCAwKSB8fCAob2Zmc2V0ID49IDY0KSkg
eworICAgICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOyAKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgTG9hZENvbnN0YW50KG9mZnNldCwgc2NyKTsKKyAgICAgICAgICAg
IGFkZGxfcnIoYmFzZSwgc2NyKTsKKyAgICAgICAgICAgIG1vdmxfbXIoc2NyLCBTSDQ6OlNQKTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICAgICAg
fSBlbHNlIGlmIChvZmZzZXQpCisgICAgICAgICAgICBtb3ZsX21yKG9mZnNldCA+PiAyLCBiYXNl
LCBTSDQ6OlNQKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbW92bF9tcihiYXNlLCBTSDQ6
OlNQKTsKKyAgICAgICAgCisgICAgICAgIGFkZGxfaThyKC00LCBTSDQ6OlNQKTsgICAgICAgIAor
ICAgIH0KKworICAgIHZvaWQgcG9wX20oaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlKQorICAg
IHsgICAgICAgICAKKyAgICAgICAgaWYgKChvZmZzZXQgPCAwKSB8fCAob2Zmc2V0ID49IDY0KSkg
eworICAgICAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAg
ICAgIExvYWRDb25zdGFudChvZmZzZXQsIHNjcik7CisgICAgICAgICAgICBhZGRsX3JyKGJhc2Us
IHNjcik7CisgICAgICAgICAgICBtb3ZsX3JtKFNINDo6U1AsIHNjcik7CisgICAgICAgICAgICBy
ZWxlYXNlU2NyYXRjaChzY3IpOworICAgICAgICB9IGVsc2UgaWYgKG9mZnNldCkKKyAgICAgICAg
ICAgIG1vdmxfcm0oU0g0OjpTUCwgb2Zmc2V0ID4+IDIsIGJhc2UpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBtb3ZsX3JtKFNINDo6U1AsIGJhc2UpOworICAgICAgICAKKyAgICAgICAgYWRk
bF9pOHIoNCwgU0g0OjpTUCk7CisgICAgfQorICAgIAorICAgIHZvaWQgbW92dChSZWdpc3RlcklE
IGRzdCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IEdFVE9QQ09ERTIoTU9WVF9PUENP
REUsIGRzdCk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKworICAgIC8vIEFy
aXRobWV0aWMgb3BlcmF0aW9uczoKKworICAgIHZvaWQgYWRkbF9ycihSZWdpc3RlcklEIHNyYywg
UmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBHRVRPUENPREUx
KEFERF9PUENPREUsIGRzdCwgc3JjKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0K
KyAgICAKKyAgICB2b2lkIGFkZGNsX3JyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCkg
Ly8gVGJpdCBzZXQgaWYgb3ZlcmZsb3cKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IEdF
VE9QQ09ERTEoQUREQ19PUENPREUsIGRzdCwgc3JjKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMp
OworICAgIH0KKyAgICAKKyAgICB2b2lkIGFkZHZsX3JyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3Rl
cklEIGRzdCkgLy8gVGJpdCBzZXQgaWYgb3ZlcmZsb3cKKyAgICB7CisgICAgICAgIHVpbnQxNl90
IG9wYyA9IEdFVE9QQ09ERTEoQUREVl9PUENPREUsIGRzdCwgc3JjKTsKKyAgICAgICAgb25lU2hv
cnRPcChvcGMpOworICAgIH0gICAgIAorCisgICAgdm9pZCBhZGRsX2k4cihpbnQgaW1tOCwgUmVn
aXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICBBU1NFUlQoKGltbTggPD0xMjcpICYmIChpbW04
ID49IC0xMjgpKTsKKyAgICAgICAgCisgICAgICAgIHVpbnQxNl90IG9wYyA9IEdFVE9QQ09ERTMo
QURESU1NX09QQ09ERSwgZHN0LCBpbW04KTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAg
IH0KKworICAgIHZvaWQgYW5kbF9ycihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpCisg
ICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBHRVRPUENPREUxKEFORF9PUENPREUsIGRzdCwg
c3JjKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworCisgICAgfQorICAgIAorICAgIHZvaWQg
YWRkbF9pcihpbnQgaW1tLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIGlmIChJc0lt
bWVkaWF0ZShpbW0pKQorICAgICAgICAgICAgYWRkbF9pOHIoaW1tLCBkc3QpOworICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAg
ICAgICAgICBMb2FkQ29uc3RhbnQoaW1tLCBzY3IpOworICAgICAgICAgICAgdWludDE2X3Qgb3Bj
ID0gR0VUT1BDT0RFMShBRERfT1BDT0RFLCBkc3QsIHNjcik7CisgICAgICAgICAgICBvbmVTaG9y
dE9wKG9wYyk7CisgICAgICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOyAgCisgICAgICAgIH0K
KyAgICAgICAgICAgICAgCisgICAgfQorCisgICAgdm9pZCBhbmRsX2k4cihpbnQgaW1tOCwgUmVn
aXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICBBU1NFUlQoKGltbTggPD0gMjU1KSAmJiAoaW1t
OCA+PSAwKSk7CisgICAgICAgIEFTU0VSVChkc3QgPT0gU0g0OjpSMCk7CisgICAgICAgIAorICAg
ICAgICB1aW50MTZfdCBvcGMgPSBHRVRPUENPREU1KEFORElNTV9PUENPREUsIGltbTgpOworICAg
ICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorICAgIAorICAgIHZvaWQgZGl2MWxfcnIoUmVn
aXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3Bj
ID0gR0VUT1BDT0RFMShESVYxX09QQ09ERSwgZHN0LCBzcmMpOworICAgICAgICBvbmVTaG9ydE9w
KG9wYyk7CisKKyAgICB9CisgICAgCisgICAgdm9pZCBkaXYwbF9ycihSZWdpc3RlcklEIHNyYywg
UmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBHRVRPUENPREUx
KERJVjBfT1BDT0RFLCBkc3QsIHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKworICAg
IH0gICAgCisKKyAgICB2b2lkIG5vdGxfcihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3Qp
CisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBHRVRPUENPREUxKE5PVF9PUENPREUsIGRz
dCwgc3JjKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAgIHZvaWQgb3Js
X3JyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIHVpbnQx
Nl90IG9wYyA9IEdFVE9QQ09ERTEoT1JfT1BDT0RFLCBkc3QsIHNyYyk7CisgICAgICAgIG9uZVNo
b3J0T3Aob3BjKTsKKworICAgIH0KKworICAgIHZvaWQgb3JsX2k4cihpbnQgaW1tOCwgUmVnaXN0
ZXJJRCBkc3QpCisgICAgeworICAgICAgICBBU1NFUlQoKGltbTggPD0gMjU1KSAmJiAoaW1tOCA+
PSAwKSk7CisgICAgICAgIEFTU0VSVChkc3QgPT0gU0g0OjpSMCk7CisgICAgICAgIAorICAgICAg
ICB1aW50MTZfdCBvcGMgPSBHRVRPUENPREU1KE9SSU1NX09QQ09ERSwgaW1tOCk7CisgICAgICAg
IG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKworICAgIHZvaWQgc3VibF9ycihSZWdpc3RlcklE
IHNyYywgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICAgdWludDE2X3Qgb3BjID0gR0VU
T1BDT0RFMShTVUJfT1BDT0RFLCBkc3QsIHNyYyk7CisgICAgICAgICBvbmVTaG9ydE9wKG9wYyk7
CisgICAgfQorICAgIAorICAgIHZvaWQgc3VidmxfcnIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVy
SUQgZHN0KSAvLyBjaGVjayBvdmVyZmxvdworICAgIHsKKyAgICAgICAgIHVpbnQxNl90IG9wYyA9
IEdFVE9QQ09ERTEoU1VCVl9PUENPREUsIGRzdCwgc3JjKTsKKyAgICAgICAgIG9uZVNob3J0T3Ao
b3BjKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzdWJsX2ltbXIoaW50IGltbSwgUmVnaXN0ZXJJ
RCBkc3QpCisgICAgeworICAgICAgICBpZiAoSXNJbW1lZGlhdGUoLWltbSkpCisgICAgICAgICAg
ICBhZGRsX2k4cigtaW1tLCBkc3QpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIFJlZ2lz
dGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgICAgICBMb2FkQ29uc3RhbnQoaW1t
LCBzY3IpOworICAgICAgICAgICAgdWludDE2X3Qgb3BjID0gR0VUT1BDT0RFMShTVUJfT1BDT0RF
LCBkc3QsIHNjcik7CisgICAgICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgICAgICAgICBy
ZWxlYXNlU2NyYXRjaChzY3IpOyAgCisgICAgICAgIH0KKworICAgIH0KKworCisgICAgdm9pZCB4
b3JsX3JyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIHVp
bnQxNl90IG9wYyA9IEdFVE9QQ09ERTEoWE9SX09QQ09ERSwgZHN0LCBzcmMpOworICAgICAgICBv
bmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCB4b3JsX2k4cihpbnQgaW1tOCwgUmVn
aXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICBBU1NFUlQoKGltbTggPD0gMjU1KSAmJiAoaW1t
OCA+PSAwKSk7CisgICAgICAgIEFTU0VSVChkc3QgPT0gU0g0OjpSMCk7CisgICAgICAgIAorICAg
ICAgICB1aW50MTZfdCBvcGMgPSBHRVRPUENPREU1KFhPUklNTV9PUENPREUsIGltbTgpOworICAg
ICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCBzaGxsX2k4cihpbnQgaW1t
LCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYzsKKyAgICAgICAg
CisgICAgICAgIHN3aXRjaCAoaW1tKSB7CisgICAgICAgIGNhc2UgMTogb3BjID0gR0VUT1BDT0RF
MihTSExMX09QQ09ERSwgZHN0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDI6
IG9wYyA9IEdFVE9QQ09ERTIoU0hMTDJfT1BDT0RFLCBkc3QpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgODogb3BjID0gR0VUT1BDT0RFMihTSExMOF9PUENPREUsIGRzdCk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAxNjogb3BjID0gR0VUT1BDT0RFMihTSExM
MTZfT1BDT0RFLCBkc3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6IEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBvbmVTaG9y
dE9wKG9wYyk7CisKKyAgICB9CisgICAgCisgICAgdm9pZCBuZWcoUmVnaXN0ZXJJRCBkc3QsIFJl
Z2lzdGVySUQgc3JjKQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gR0VUT1BDT0RFMShO
RUdfT1BDT0RFLCBkc3QsIHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9Cisg
ICAgCisgICAgdm9pZCBzaGxsX3JyKFJlZ2lzdGVySUQgZHN0LCBSZWdpc3RlcklEIHJTaGlmdCkK
KyAgICB7IAorICAgICAgICAvKiBzcmMgPDwgclNoaWZ0Ki8KKyAgICAgICAgdWludDE2X3Qgb3Bj
ID0gR0VUT1BDT0RFMShTSExEX09QQ09ERSwgZHN0LCByU2hpZnQpOworICAgICAgICBvbmVTaG9y
dE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCBzaGxyX3JyKFJlZ2lzdGVySUQgZHN0LCBSZWdp
c3RlcklEIHJTaGlmdCkKKyAgICB7CisgICAgICAgIC8qIHNyYyA+PiByU2hpZnQqLworICAgICAg
ICBuZWcoclNoaWZ0LCByU2hpZnQpOworICAgICAgICBzaGxsX3JyKGRzdCwgclNoaWZ0KTsKKyAg
ICB9CisKKyAgICB2b2lkIHNoYXJfcnIoUmVnaXN0ZXJJRCBkc3QsIFJlZ2lzdGVySUQgclNoaWZ0
KQorICAgIHsKKyAgICAgICAgLyogc3JjID4+PiByU2hpZnQqLworICAgICAgICBuZWcoclNoaWZ0
LCByU2hpZnQpOworICAgICAgICBzaGFfcnIoZHN0LCByU2hpZnQpOworICAgIH0KKyAgICAKKyAg
ICB2b2lkIHNoYV9ycihSZWdpc3RlcklEIGRzdCwgUmVnaXN0ZXJJRCByU2hpZnQpCisgICAgewor
ICAgICAgICAvKiBzcmMgPj4+IHJTaGlmdCovCisgICAgICAgIHVpbnQxNl90IG9wYyA9IEdFVE9Q
Q09ERTEoU0hBRF9PUENPREUsIGRzdCwgclNoaWZ0KTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMp
OworICAgIH0KKyAgICAKKyAgICB2b2lkIHNobHJfaThyKGludCBpbW0sIFJlZ2lzdGVySUQgZHN0
KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjOworICAgICAgICAKKyAgICAgICAgc3dpdGNo
IChpbW0pIHsKKyAgICAgICAgY2FzZSAxOiBvcGMgPSBHRVRPUENPREUyKFNITFJfT1BDT0RFLCBk
c3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMjogb3BjID0gR0VUT1BDT0RF
MihTSExSMl9PUENPREUsIGRzdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSA4
OiBvcGMgPSBHRVRPUENPREUyKFNITFI4X09QQ09ERSwgZHN0KTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIDE2OiBvcGMgPSBHRVRPUENPREUyKFNITFIxNl9PUENPREUsIGRzdCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDogQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKworICAg
IH0KKworCisgCisgICAgdm9pZCBpbXVsbF9ycihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBk
c3QpCisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBHRVRPUENPREUxKE1VTExfT1BDT0RF
LCBkc3QsIHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisgICAgCisgICAg
dm9pZCBkbXVsc2xfcnIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAg
ICAgICAgdWludDE2X3Qgb3BjID0gR0VUT1BDT0RFMShETVVMU0xfT1BDT0RFLCBkc3QsIHNyYyk7
CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9ICAgIAorICAgIAorICAgIHZvaWQgc3Rz
bWFjbChSZWdpc3RlcklEIHJlZykKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IEdFVE9Q
Q09ERTIoU1RTTUFDTF9PUENPREUsIHJlZyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAg
ICB9CisgICAgCisgICAgdm9pZCBzdHNtYWNoKFJlZ2lzdGVySUQgcmVnKQorICAgIHsKKyAgICAg
ICAgdWludDE2X3Qgb3BjID0gR0VUT1BDT0RFMihTVFNNQUNIX09QQ09ERSwgcmVnKTsKKyAgICAg
ICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKyAgICAKKyAgICAvLyBDb21wYXJpc29uczoKKwor
ICAgIHZvaWQgY21wbF9ycihSZWdpc3RlcklEIGxlZnQsIFJlZ2lzdGVySUQgcmlnaHQsIENvbmRp
dGlvbiBjb25kKQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjOworICAgICAgICAKKyAgICAg
ICAgc3dpdGNoIChjb25kKSB7CisgICAgICAgIGNhc2UgTkU6IG9wYyA9IEdFVE9QQ09ERTEoQ01Q
RVFfT1BDT0RFLCByaWdodCwgbGVmdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBHVDogb3BjID0gR0VUT1BDT0RFMShDTVBHVF9PUENPREUsIHJpZ2h0LCBsZWZ0KTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVROiBvcGMgPSBHRVRPUENPREUxKENNUEVRX09Q
Q09ERSwgcmlnaHQsIGxlZnQpOworICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgIAorICAgICAg
ICBjYXNlIEdFOiBvcGMgPSBHRVRPUENPREUxKENNUEdFX09QQ09ERSwgcmlnaHQsIGxlZnQpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSFM6IG9wYyA9IEdFVE9QQ09ERTEoQ01Q
SFNfT1BDT0RFLCByaWdodCwgbGVmdCk7IC8vIEhTCisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBISTogb3BjID0gR0VUT1BDT0RFMShDTVBISV9PUENPREUsIHJpZ2h0LCBsZWZ0KTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIExJOiBvcGMgPSBHRVRPUENPREUxKENN
UEhJX09QQ09ERSwgbGVmdCwgcmlnaHQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgTFM6IG9wYyA9IEdFVE9QQ09ERTEoQ01QSFNfT1BDT0RFLCBsZWZ0LCByaWdodCk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBMRTogb3BjID0gR0VUT1BDT0RFMShDTVBHRV9P
UENPREUsIGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIExU
OiBvcGMgPSBHRVRPUENPREUxKENNUEdUX09QQ09ERSwgbGVmdCwgcmlnaHQpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorICAgIAorICAg
IHZvaWQgY21wbF9pcihpbnQgaW1tLCBSZWdpc3RlcklEIGRzdCwgQ29uZGl0aW9uIGNvbmQpCisg
ICAgeworICAgICAgICBpZiAoKGNvbmQgPT0gRVEpICYmIChkc3QgPT0gU0g0OjpSMCkgJiYgSXNJ
bW1lZGlhdGUoaW1tKSkgeworICAgICAgICAgICAgdWludDE2X3Qgb3BjID0gR0VUT1BDT0RFNShD
TVBFUUlNTV9PUENPREUsIGltbSk7CisgICAgICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgp
OworICAgICAgICAKKyAgICAgICAgICAgIExvYWRDb25zdGFudChpbW0sIHNjcik7CisgICAgICAg
ICAgICBjbXBsX3JyKHNjciwgZHN0LCBjb25kKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9p
ZCBjbXBsX21yKGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBsZWZ0LCBD
b25kaXRpb24gY29uZCkKKyAgICB7CisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3Jh
dGNoKCk7CisgICAgICAgICAKKyAgICAgICAgaWYgKChvZmZzZXQgPCAwKSB8fCAob2Zmc2V0ID49
IDY0KSkgeworICAgICAgICAgICAgTG9hZENvbnN0YW50KG9mZnNldCwgc2NyKTsKKyAgICAgICAg
ICAgIGFkZGxfcnIoYmFzZSwgc2NyKTsKKyAgICAgICAgICAgIG1vdmxfbXIoc2NyLCBzY3IpOwor
ICAgICAgICB9IGVsc2UgaWYgKG9mZnNldCkKKyAgICAgICAgICAgIG1vdmxfbXIob2Zmc2V0ID4+
IDIsIGJhc2UsIHNjcik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1vdmxfbXIoYmFzZSwg
c2NyKTsKKyAgICAgICAgCisgICAgICAgIGNtcGxfcnIoc2NyLCBsZWZ0LCBjb25kKTsKKyAgICAg
ICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjbXBsX3JtKFJl
Z2lzdGVySUQgcmlnaHQsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgQ29uZGl0aW9uIGNv
bmQpCisgICAgeworICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAg
ICAgICAgCisgICAgICAgIGlmICgob2Zmc2V0IDwgMCkgfHwgKG9mZnNldCA+PSA2NCkpIHsKKyAg
ICAgICAgICAgIExvYWRDb25zdGFudChvZmZzZXQsIHNjcik7CisgICAgICAgICAgICBhZGRsX3Jy
KGJhc2UsIHNjcik7CisgICAgICAgICAgICBtb3ZsX21yKHNjciwgc2NyKTsKKyAgICAgICAgfSBl
bHNlIGlmIChvZmZzZXQpCisgICAgICAgICAgICBtb3ZsX21yKG9mZnNldCA+PiAyLCBiYXNlLCBz
Y3IpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtb3ZsX21yKGJhc2UsIHNjcik7CisgICAg
ICAgIAorICAgICAgICBjbXBsX3JyKHJpZ2h0LCBzY3IsIGNvbmQpOworICAgICAgICByZWxlYXNl
U2NyYXRjaChzY3IpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNtcGxfaW0oaW50IGltbSwgaW50
IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBDb25kaXRpb24gY29uZCkgCisgICAgeworICAgIAor
ICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBSZWdpc3Rl
cklEIHNjcjEgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgIAorICAgICAgICBpZiAoKG9mZnNl
dCA8IDApIHx8IChvZmZzZXQgPj0gNjQpKSB7CisgICAgICAgICAgICBMb2FkQ29uc3RhbnQob2Zm
c2V0LCBzY3IpOworICAgICAgICAgICAgYWRkbF9ycihiYXNlLCBzY3IpOworICAgICAgICAgICAg
bW92bF9tcihzY3IsIHNjcik7CisgICAgICAgIH0gZWxzZSBpZiAob2Zmc2V0KQorICAgICAgICAg
ICAgbW92bF9tcihvZmZzZXQgPj4gMiwgYmFzZSwgc2NyKTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgbW92bF9tcihiYXNlLCBzY3IpOworICAgICAgICAKKyAgICAgICAgTG9hZENvbnN0YW50
KGltbSwgc2NyMSk7ICAgICAgICAKKyAgICAgICAgY21wbF9ycihzY3IxLCBzY3IsIGNvbmQpOwor
ICAgICAgICAKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyMSk7CisgICAgICAgIHJlbGVhc2VT
Y3JhdGNoKHNjcik7CisgICAgfQorICAgIAorICAgIHZvaWQgdGVzdGxfcnIoUmVnaXN0ZXJJRCBz
cmMsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gR0VUT1BD
T0RFMShUU1RfT1BDT0RFLCBkc3QsIHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAg
ICB9CisKKyAgICB2b2lkIHRlc3RsX2k4cihpbnQgaW1tLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7
CisgICAgICAgIEFTU0VSVCgoZHN0ID09IFNINDo6UjApICYmIChpbW0gPD0gMjU1KSAmJiAoaW1t
ID49IDApKTsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gR0VUT1BDT0RFNShUU1RJTU1fT1BDT0RF
LCBpbW0pOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorICAgIAorICAgIHZvaWQg
dGVzdGxfaTMycihpbnQgaW1tLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIGlmICgo
ZHN0ID09IFNINDo6UjApICYmIChpbW0gPD0gMjU1KSAmJiAoaW1tID49IDApKSB7CisgICAgICAg
ICAgICB1aW50MTZfdCBvcGMgPSBHRVRPUENPREU1KFRTVElNTV9PUENPREUsIGltbSk7CisgICAg
ICAgICAgICBvbmVTaG9ydE9wKG9wYyk7ICAgICAgICAKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgICAgICBMb2Fk
Q29uc3RhbnQoaW1tLCBzY3IpOworICAgICAgICAKKyAgICAgICAgICAgIHRlc3RsX3JyKHNjciwg
ZHN0KTsKKyAgICAgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICB2b2lkIHRlc3RsX2kzMm0oaW50IGltbSwgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBi
YXNlKQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAg
ICAgICAgUmVnaXN0ZXJJRCBzY3IxID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIAorICAgICAg
ICBpZiAoKG9mZnNldCA8IDApIHx8IChvZmZzZXQgPj0gNjQpKSB7CisgICAgICAgICAgICBMb2Fk
Q29uc3RhbnQob2Zmc2V0LCBzY3IpOworICAgICAgICAgICAgYWRkbF9ycihiYXNlLCBzY3IpOwor
ICAgICAgICAgICAgbW92bF9tcihzY3IsIHNjcik7CisgICAgICAgIH0gZWxzZSBpZiAob2Zmc2V0
KQorICAgICAgICAgICAgbW92bF9tcihvZmZzZXQgPj4gMiwgYmFzZSwgc2NyKTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgbW92bF9tcihiYXNlLCBzY3IpOworICAgICAgICAKKyAgICAgICAg
aWYgKElzSW1tZWRpYXRlKGltbSkpCisgICAgICAgICAgICBtb3ZfaW1tOChpbW0sIHNjcjEpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBMb2FkQ29uc3RhbnQoaW1tLCBzY3IxKTsKKyAgICAg
ICAgCisgICAgICAgIHRlc3RsX3JyKHNjciwgc2NyMSk7ICAgICAgICAKKyAgICAgICAgcmVsZWFz
ZVNjcmF0Y2goc2NyKTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyMSk7CisgICAgfQorCisg
ICAgdm9pZCB0ZXN0Yl9pOHIoaW50IGltbSwgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAg
ICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBtb3ZfaW1tOChpbW0s
IHNjcik7CisgICAgICAgIHRlc3RsX3JyKHNjciwgZHN0KTsKKyAgICAgICAgcmVsZWFzZVNjcmF0
Y2goc2NyKTsKKyAgICB9CisKKyAgICB2b2lkIG5vcCgpIAorICAgIHsgIAorICAgICAgICBtX2J1
ZmZlci5wdXRTaG9ydFVuY2hlY2tlZChOT1BfT1BDT0RFKTsgICAgICAgICAKKyAgICB9CisgICAg
CisgICAgdm9pZCBia3B0KCkKKyAgICB7CisgICAgICAgIG1fYnVmZmVyLnB1dFNob3J0VW5jaGVj
a2VkKEJSS19PUENPREUpOworICAgIH0KKworICAgIAorICAgIHZvaWQgYnJhbmNoKHVpbnQxNl90
IG9wYywgaW50IGxhYmVsKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChvcGMpIHsKKyAgICAgICAg
Y2FzZSBCVF9PUENPREU6CisgICAgICAgICAgICBBU1NFUlQoKGxhYmVsIDw9MTI3KSAmJiAobGFi
ZWwgPj0gLTEyOCkpOyAKKyAgICAgICAgICAgIG9wYyA9IEdFVE9QQ09ERTUoQlRfT1BDT0RFLCBs
YWJlbCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBCUkFfT1BDT0RFOgorICAg
ICAgICAgICAgQVNTRVJUKChsYWJlbCA8PTIwNDcpICYmIChsYWJlbCA+PSAtMjA0OCkpOworICAg
ICAgICAgICAgb3BjID0gR0VUT1BDT0RFNihCUkFfT1BDT0RFLCBsYWJlbCk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBCRl9PUENPREU6CisgICAgICAgICAgICBBU1NFUlQoKGxh
YmVsIDw9MTI3KSAmJiAobGFiZWwgPj0gLTEyOCkpOworICAgICAgICAgICAgb3BjID0gR0VUT1BD
T0RFNShCRl9PUENPREUsIGxhYmVsKTsKKyAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgZGVmYXVsdDogQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBk
dChSZWdpc3RlcklEIHJlZykKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IEdFVE9QQ09E
RTIoRFRfT1BDT0RFLCByZWcpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfSAgIAor
ICAgIAorICAgIHZvaWQgYnJhbmNoKHVpbnQxNl90IG9wYywgUmVnaXN0ZXJJRCByZWcpCisgICAg
eworICAgICAgICBzd2l0Y2ggKG9wYykgeyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEJSQUZf
T1BDT0RFOgorICAgICAgICAgICAgb3BjID0gR0VUT1BDT0RFMihCUkFGX09QQ09ERSwgcmVnKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEpNUF9PUENPREUgOgorICAgICAgICAg
ICAgb3BjID0gR0VUT1BDT0RFMihKTVBfT1BDT0RFLCByZWcpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgSlNSX09QQ09ERSA6CisgICAgICAgICAgICBvcGMgPSBHRVRPUENPREUy
KEpTUl9PUENPREUsIHJlZyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBCU1JG
X09QQ09ERSA6CisgICAgICAgICAgICBvcGMgPSBHRVRPUENPREUyKEJTUkZfT1BDT0RFLCByZWcp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6IEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAg
fQorICAgIHZvaWQgbGRzcHIoUmVnaXN0ZXJJRCByZWcpCisgICAgeworICAgICAgICB1aW50MTZf
dCBvcGMgPSBHRVRPUENPREUyKExEU1BSX09QQ09ERSwgcmVnKTsKKyAgICAgICAgb25lU2hvcnRP
cChvcGMpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHN0c3ByKFJlZ2lzdGVySUQgcmVnKQorICAg
IHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gR0VUT1BDT0RFMihTVFNQUl9PUENPREUsIHJlZyk7
CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICAKKyAgICB2b2lkIGV4dHV3
KFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90
IG9wYyA9IEdFVE9QQ09ERTEoRVhUVVdfT1BDT0RFLCBkc3QsIHNyYyk7CisgICAgICAgIAorICAg
ICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorICAgIAorICAgIC8qIGZsb2F0IG9wZXJhdGlv
bnMqLworICAgIAorICAgIHZvaWQgbGRzcm1fZnB1bChSZWdpc3RlcklEIHNyYykKKyAgICB7ICAg
ICAgICAKKyAgICAgICAgdWludDE2X3Qgb3BjID0gR0VUT1BDT0RFMihMRFNfUk1fRlBVTF9PUENP
REUsIHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisgICAgdm9pZCBmbmVn
KEZQUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBHRVRPUENP
REUyKEZORUdfT1BDT0RFLCBkc3QpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQor
ICAgIAorICAgIHZvaWQgc3RzX2ZwdWxfcm4oUmVnaXN0ZXJJRCBzcmMpCisgICAgeworICAgICAg
ICB1aW50MTZfdCBvcGMgPSBHRVRPUENPREUyKFNUU19GUFVMX1JOX09QQ09ERSwgc3JjKTsKKyAg
ICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGZsb2F0X2ZwdWxf
ZnJuKFJlZ2lzdGVySUQgc3JjKQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gR0VUT1BD
T0RFMihGTE9BVF9PUENPREUsIHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9
CisgICAgCisgICAgdm9pZCBmbXVsbChGUFJlZ2lzdGVySUQgc3JjLCBGUFJlZ2lzdGVySUQgZHN0
KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gR0VUT1BDT0RFMShGTVVMX09QQ09ERSwg
ZHN0LCBzcmMpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorICAgIAorICAgIHZv
aWQgZm1vdnNfcmVhZF9ybShSZWdpc3RlcklEIHNyYywgRlBSZWdpc3RlcklEIGRzdCkKKyAgICB7
CisgICAgICAgIC8qRk1PVi5TIEBSJWQsIEZSJWRcbiovCisgICAgICAgIHVpbnQxNl90IG9wYyA9
IEdFVE9QQ09ERTEoRk1PVlNfUkVBRF9STV9PUENPREUsIGRzdCwgc3JjKTsKKyAgICAgICAgb25l
U2hvcnRPcChvcGMpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGZtb3ZzX3dyaXRlX3JtKEZQUmVn
aXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgLyogRk1PVi5TIEZS
JWQsIEBSJWRcbiAqLworICAgICAgICB1aW50MTZfdCBvcGMgPSBHRVRPUENPREUxKEZNT1ZTX1dS
SVRFX1JOX09QQ09ERSwgZHN0LCBzcmMpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAg
fQorICAgIAorICAgIHZvaWQgZm1vdnNfd3JpdGVfcjByKEZQUmVnaXN0ZXJJRCBzcmMsIFJlZ2lz
dGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgLypGTU9WLlMgRlIlZCwgQChSMCwgUiVkKSAqLwor
ICAgICAgICB1aW50MTZfdCBvcGMgPSBHRVRPUENPREUxKEZNT1ZTX1dSSVRFX1IwUk5fT1BDT0RF
LCBkc3QsIHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisgICAgCisgICAg
dm9pZCBmbW92c19yZWFkX3IwcihSZWdpc3RlcklEIHNyYywgRlBSZWdpc3RlcklEIGRzdCkKKyAg
ICB7CisgICAgICAgIC8qRk1PVi5TIEAoUjAsIFIlZCksIEZSJWQqLworICAgICAgICB1aW50MTZf
dCBvcGMgPSBHRVRPUENPREUxKEZNT1ZTX1JFQURfUjBSTV9PUENPREUsIGRzdCwgc3JjKTsKKyAg
ICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGZtb3ZzX3JlYWRf
cm1faW5jKFJlZ2lzdGVySUQgZHN0LCBGUFJlZ2lzdGVySUQgc3JjKQorICAgIHsKKyAgICAgICAg
LyogRk1PVi5TIEBSJWQrLCBGUiVkICovCisgICAgICAgIHVpbnQxNl90IG9wYyA9IEdFVE9QQ09E
RTEoRk1PVlNfUkVBRF9STV9JTkNfT1BDT0RFLCBkc3QsIHNyYyk7CisgICAgICAgIG9uZVNob3J0
T3Aob3BjKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBmbW92c193cml0ZV9ybl9kZWMoRlBSZWdp
c3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICAvKiBGTU9WLlMgRlIl
ZCwgQC1SJWQgKi8KKyAgICAgICAgdWludDE2X3Qgb3BjID0gR0VUT1BDT0RFMShGTU9WU19XUklU
RV9STl9ERUNfT1BDT0RFLCBkc3QsIHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAg
ICB9CisgICAgCisgICAgdm9pZCBmdHJjX3JtX2ZwdWwoRlBSZWdpc3RlcklEIHNyYykKKyAgICB7
CisgICAgICAgIHVpbnQxNl90IG9wYyA9IEdFVE9QQ09ERTIoRlRSQ19PUENPREUsIHNyYyk7Cisg
ICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBmbGRzX2ZwdWwo
UmVnaXN0ZXJJRCBzcmMpCisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBHRVRPUENPREUy
KEZMRFNfRlJNX0ZQVUxfT1BDT0RFLCBzcmMpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7Cisg
ICAgfQorICAgIAorICAgIHZvaWQgZnN0c19mcHVsKFJlZ2lzdGVySUQgc3JjKQorICAgIHsKKyAg
ICAgICAgdWludDE2X3Qgb3BjID0gR0VUT1BDT0RFMihGU1RTX0ZQVUxfRlJOX09QQ09ERSwgc3Jj
KTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKyAgICAKKyAgICAKKyAgICB2b2lk
IGxkc2Zwc2NyKFJlZ2lzdGVySUQgcmVnKSAKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9
IEdFVE9QQ09ERTIoTERTRlBTQ1JfT1BDT0RFLCByZWcpOworICAgICAgICBvbmVTaG9ydE9wKG9w
Yyk7CisgICAgfQorICAgIAorICAgIHZvaWQgc3RzZnBzY3IoUmVnaXN0ZXJJRCByZWcpIAorICAg
IHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gR0VUT1BDT0RFMihTVFNGUFNDUl9PUENPREUsIHJl
Zyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9ICAgIAorICAgIAorICAgIC8qIGRv
dWJsZSBvcGVyYXRpb25zKi8KKyAgICB2b2lkIGRjbXBwZXEoRlBSZWdpc3RlcklEIHNyYywgRlBS
ZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IEdFVE9QQ09ERTgo
RkNNUEVRX09QQ09ERSwgZHN0ID4+IDEsIHNyYyA+PjEpOworICAgICAgICBvbmVTaG9ydE9wKG9w
Yyk7CisgICAgfQorICAgIAorICAgIHZvaWQgZG11bF9ycihGUFJlZ2lzdGVySUQgc3JjLCBGUFJl
Z2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gR0VUT1BDT0RFOChG
TVVMX09QQ09ERSwgZHN0ID4+IDEsIHNyYyA+PjEpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7
CisgICAgfQorICAgIAorICAgIHZvaWQgZHN1Yl9ycihGUFJlZ2lzdGVySUQgc3JjLCBGUFJlZ2lz
dGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gR0VUT1BDT0RFOChGU1VC
X09QQ09ERSwgZHN0ID4+IDEsIHNyYyA+PjEpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7Cisg
ICAgfQorICAgIAorICAgIHZvaWQgZGFkZF9ycihGUFJlZ2lzdGVySUQgc3JjLCBGUFJlZ2lzdGVy
SUQgZHN0KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gR0VUT1BDT0RFOChGQUREX09Q
Q09ERSwgZHN0ID4+IDEsIHNyYyA+PjEpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAg
fQorICAgIAorICAgIHZvaWQgZG1vdl9ycihGUFJlZ2lzdGVySUQgc3JjLCBGUFJlZ2lzdGVySUQg
ZHN0KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gR0VUT1BDT0RFOChGTU9WX09QQ09E
RSwgZHN0ID4+IDEsIHNyYyA+PjEpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfSAg
ICAKKyAgICAKKyAgICB2b2lkIGRkaXZfcnIoRlBSZWdpc3RlcklEIHNyYywgRlBSZWdpc3RlcklE
IGRzdCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IEdFVE9QQ09ERTgoRkRJVl9PUENP
REUsIGRzdCA+PiAxLCBzcmMgPj4xKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0K
KyAgICAKKyAgICB2b2lkIGRvdWJsZWxvYWQoUmVnaXN0ZXJJRCBiYXNlLCBpbnQgb2Zmc2V0LCBG
UFJlZ2lzdGVySUQgZGVzdCwgUmVnaXN0ZXJJRCBzY3IpIAorICAgIHsKKyAgICAgICAgIExvYWRD
b25zdGFudChvZmZzZXQsIHNjcik7CisgICAgICAgICBpZiAoc2NyID09IFNINDo6UjApCisgICAg
ICAgICAgICAgZm1vdl9yZWFkX3IwcihiYXNlLCBkZXN0KTsKKyAgICAgICAgIGVsc2UgaWYgKGJh
c2UgPT0gU0g0OjpSMCkKKyAgICAgICAgICAgICBmbW92X3JlYWRfcjByKHNjciwgZGVzdCk7Cisg
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICBhZGRsX3JyKGJhc2UsIHNjcik7CisgICAgICAg
ICAgICAgZm1vdl9yZWFkX3JtKHNjciwgZGVzdCk7ICAgICAgICAgCisgICAgICAgICB9ICAgIAor
ICAgIH0KKyAgICAKKyAgICB2b2lkIGRuZWcoRlBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAg
ICAgIHVpbnQxNl90IG9wYyA9IEdFVE9QQ09ERTcoRk5FR19PUENPREUsIGRzdCA+PiAxKTsKKyAg
ICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGRvdWJsZXN0b3Jl
KEZQUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgYmFzZSwgaW50IG9mZnNldCwgUmVnaXN0ZXJJ
RCBzY3IpIAorICAgIHsKKyAgICAgICAgIExvYWRDb25zdGFudChvZmZzZXQsIHNjcik7CisgICAg
ICAgICBpZiAoc2NyID09IFNINDo6UjApCisgICAgICAgICAgICAgZm1vdl93cml0ZV9yMHIoc3Jj
LCBiYXNlKTsKKyAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIGFkZGxfcnIoYmFzZSwgc2Ny
KTsKKyAgICAgICAgICAgICBmbW92X3dyaXRlX3JtKHNyYywgc2NyKTsgICAgICAgICAKKyAgICAg
ICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCBmbW92X3JlYWRfcm0oUmVnaXN0ZXJJRCBzcmMs
IEZQUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICAvKkZNT1YgQFIlZCwgRFIlZFxuKi8K
KyAgICAgICAgdWludDE2X3Qgb3BjID0gR0VUT1BDT0RFMTAoRk1PVlNfUkVBRF9STV9PUENPREUs
IGRzdCA+PiAxLCBzcmMpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorICAgIAor
ICAgIHZvaWQgZm1vdl93cml0ZV9ybShGUFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCkK
KyAgICB7CisgICAgICAgIC8qIEZNT1YgRFIlZCwgQFIlZFxuICovCisgICAgICAgIHVpbnQxNl90
IG9wYyA9IEdFVE9QQ09ERTkoRk1PVlNfV1JJVEVfUk5fT1BDT0RFLCBkc3QsIHNyYyA+PiAxKTsK
KyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGZtb3Zfd3Jp
dGVfcjByKEZQUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAg
LypGTU9WIERSJWQsIEAoUjAsIFIlZCkgKi8KKyAgICAgICAgdWludDE2X3Qgb3BjID0gR0VUT1BD
T0RFOShGTU9WU19XUklURV9SMFJOX09QQ09ERSwgZHN0LCBzcmMgPj4gMSk7CisgICAgICAgIG9u
ZVNob3J0T3Aob3BjKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBmbW92X3JlYWRfcjByKFJlZ2lz
dGVySUQgc3JjLCBGUFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgLypGTU9WIEAoUjAs
IFIlZCksIERSJWQqLworICAgICAgICB1aW50MTZfdCBvcGMgPSBHRVRPUENPREUxMChGTU9WU19S
RUFEX1IwUk1fT1BDT0RFLCBkc3QgPj4gMSwgc3JjKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMp
OworICAgIH0KKyAgICAKKyAgICB2b2lkIGZtb3ZfcmVhZF9ybV9pbmMoUmVnaXN0ZXJJRCBkc3Qs
IEZQUmVnaXN0ZXJJRCBzcmMpCisgICAgeworICAgICAgICAvKiBGTU9WIEBSJWQrLCBEUiVkICov
CisgICAgICAgIHVpbnQxNl90IG9wYyA9IEdFVE9QQ09ERTEwKEZNT1ZTX1JFQURfUk1fSU5DX09Q
Q09ERSwgZHN0ID4+IDEgLCBzcmMpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQor
ICAgIAorICAgIHZvaWQgZm1vdl93cml0ZV9ybl9kZWMoRlBSZWdpc3RlcklEIHNyYywgUmVnaXN0
ZXJJRCBkc3QpCisgICAgeworICAgICAgICAvKiBGTU9WIERSJWQsIEAtUiVkICovCisgICAgICAg
IHVpbnQxNl90IG9wYyA9IEdFVE9QQ09ERTkoRk1PVlNfV1JJVEVfUk5fREVDX09QQ09ERSwgZHN0
LCBzcmMgPj4gMSk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisgICAgCisgICAg
dm9pZCBmbG9hdF9mcHVsX2RybihGUFJlZ2lzdGVySUQgc3JjKQorICAgIHsKKyAgICAgICAgdWlu
dDE2X3Qgb3BjID0gR0VUT1BDT0RFNyhGTE9BVF9PUENPREUsIHNyYyA+PiAxKTsKKyAgICAgICAg
b25lU2hvcnRPcChvcGMpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGZ0cmNfZHJtX2ZwdWwoRlBS
ZWdpc3RlcklEIHNyYykKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IEdFVE9QQ09ERTco
RlRSQ19PUENPREUsIHNyYyA+PiAxKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0K
KyAgICAgICAgICAgCisgICAgLy8gVmFyaW91cyBtb3ZlIG9wczoKKyAgICAKKyAgICB2b2lkIG1v
dl9pbW04KGludCBpbW04LCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIEFTU0VSVCgo
aW1tOCA8PTEyNykgJiYgKGltbTggPj0gLTEyOCkpOworICAgICAgICB1aW50MTZfdCBvcGMgPSBH
RVRPUENPREUzKE1PVklNTV9PUENPREUsIGRzdCwgaW1tOCk7ICAgICAgICAKKyAgICAgICAgb25l
U2hvcnRPcChvcGMpOworICAgIH0KKworICAgIHZvaWQgbW92bF9ycihSZWdpc3RlcklEIHNyYywg
UmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICAvKiBtb3Ygc3JjLCBkc3QgKi8KKyAgICAg
ICAgdWludDE2X3Qgb3BjID0gR0VUT1BDT0RFMShNT1ZfT1BDT0RFLCBkc3QsIHNyYyk7CisgICAg
ICAgIG9uZVNob3J0T3Aob3BjKTsKKworICAgIH0KKyAgICAKKyAgICB2b2lkIG1vdndfcm0oUmVn
aXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgLyogbW92Lncgc3Jj
LCBAZHN0ICovCisgICAgICAgIHVpbnQxNl90IG9wYyA9IEdFVE9QQ09ERTEoTU9WV19XUklURV9S
Tl9PUENPREUsIGRzdCwgc3JjKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworCisgICAgfQor
ICAgIAorICAgIHZvaWQgbW92d19tcihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpCisg
ICAgeworICAgICAgICAvKiBtb3YudyBAIHNyYywgZHN0ICovCisgICAgICAgIHVpbnQxNl90IG9w
YyA9IEdFVE9QQ09ERTEoTU9WV19SRUFEX1JNX09QQ09ERSwgZHN0LCBzcmMpOworICAgICAgICBv
bmVTaG9ydE9wKG9wYyk7CisKKyAgICB9CisgICAgCisgICAgdm9pZCBtb3Z3X21yKGludCBvZmZz
ZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICB1aW50
MTZfdCBvcGM7CisgICAgCisgICAgICAgIGlmIChiYXNlID09IFNINDo6UEMpIHsKKyAgICAgICAg
ICAgIEFTU0VSVCgob2Zmc2V0IDw9IDI1NSkgJiYgKG9mZnNldCA+PSAwKSk7CisgICAgICAgICAg
ICBvcGMgPSBHRVRPUENPREUzKE1PVldfUkVBRF9PRkZQQ19PUENPREUsIGRzdCwgb2Zmc2V0KTsK
KyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgICAgIAorICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisKKyAgICB9CisgICAgCisgICAgdm9p
ZCBtb3Z3X3IwbXIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAg
ICAgdWludDE2X3Qgb3BjID0gR0VUT1BDT0RFMShNT1ZXX1JFQURfUjBSTV9PUENPREUsIGRzdCwg
c3JjKTsgICAgICAgIAorICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisKKyAgICB9CisgICAgCisg
ICAgdm9pZCBtb3ZsX3JtKFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJh
c2UpCisgICAgeworICAgICAgICB1aW50MTZfdCBvcGM7CisgICAgICAgIAorICAgICAgICBBU1NF
UlQoKG9mZnNldCA8PSAxNSkgJiYgKG9mZnNldCA+PSAwKSk7CisgICAgICAgIAorICAgICAgICBp
ZiAoIW9mZnNldCkKKyAgICAgICAgICAgIG9wYyA9IEdFVE9QQ09ERTEoTU9WTF9XUklURV9STl9P
UENPREUsIGJhc2UsIHNyYyk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG9wYyA9IEdFVE9Q
Q09ERTQoTU9WTF9XUklURV9PRkZSTl9PUENPREUsIGJhc2UsIHNyYywgb2Zmc2V0KTsKKyAgICAg
ICAgCisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKworICAgIH0KKyAgICAKKyAgICB2b2lkIG1v
dmxfcm0oUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgYmFzZSkKKyAgICB7CisgICAgICAgIHVp
bnQxNl90IG9wYzsKKyAgICAgICAgCisgICAgICAgIG9wYyA9IEdFVE9QQ09ERTEoTU9WTF9XUklU
RV9STl9PUENPREUsIGJhc2UsIHNyYyk7ICAgICAgICAKKyAgICAgICAgb25lU2hvcnRPcChvcGMp
OworCisgICAgfQorICAgIAorICAgIHZvaWQgbW92bF9pMzJtKGludCBpbW0sIGludCBvZmZzZXQs
IFJlZ2lzdGVySUQgYmFzZSkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYzsKKyAgICAgICAg
CisgICAgICAgIEFTU0VSVCgob2Zmc2V0IDw9IDE1KSAmJiAob2Zmc2V0ID49IDApKTsKKyAgICAK
KyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgTG9hZENv
bnN0YW50KGltbSwgc2NyKTsKKworICAgICAgICAKKyAgICAgICAgaWYgKCFvZmZzZXQpCisgICAg
ICAgICAgICBvcGMgPSBHRVRPUENPREUxKE1PVkxfV1JJVEVfUk5fT1BDT0RFLCBiYXNlLCBzY3Ip
OworICAgICAgICBlbHNlCisgICAgICAgICAgICBvcGMgPSBHRVRPUENPREU0KE1PVkxfV1JJVEVf
T0ZGUk5fT1BDT0RFLCBiYXNlLCBzY3IsIG9mZnNldCk7CisgICAgICAgIAorICAgICAgICBvbmVT
aG9ydE9wKG9wYyk7CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgfQorCisKKyAg
ICB2b2lkIG1vdmxfbXIoaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGRz
dCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYzsKKyAgICAKKyAgICAgICAgaWYgKGJhc2Ug
PT0gU0g0OjpQQykgeworICAgICAgICAgICAgQVNTRVJUKChvZmZzZXQgPD0gMjU1KSAmJiAob2Zm
c2V0ID49IDApKTsKKyAgICAgICAgICAgIG9wYyA9IEdFVE9QQ09ERTMoTU9WTF9SRUFEX09GRlBD
X09QQ09ERSwgZHN0LCBvZmZzZXQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgQVNT
RVJUKChvZmZzZXQgPD0gMTUpICYmIChvZmZzZXQgPj0gMCkpOworICAgICAgICAgICAgaWYgKCFv
ZmZzZXQpCisgICAgICAgICAgICAgICAgb3BjID0gR0VUT1BDT0RFMShNT1ZMX1JFQURfUk1fT1BD
T0RFLCBkc3QsIGJhc2UpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG9wYyA9
IEdFVE9QQ09ERTQoTU9WTF9SRUFEX09GRlJNX09QQ09ERSwgZHN0LCBiYXNlLCBvZmZzZXQpOwor
ICAgICAgICB9CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKworICAgIH0KKyAgICAKKyAgICB2
b2lkIG1vdmJfbXIoaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGRzdCkg
Ly8gTU9WLkIgQChkaXNwLCBSbSksIFIwCisgICAgeyAgICAgICAgCisgICAgICAgIEFTU0VSVChk
c3QgPT0gU0g0OjpSMCk7CisgICAgCisgICAgICAgIHVpbnQxNl90IG9wYyA9IEdFVE9QQ09ERTEx
KE1PVkJfUkVBRF9PRkZSTV9PUENPREUsIGJhc2UsIG9mZnNldCk7CisgICAgICAgIAorICAgICAg
ICBvbmVTaG9ydE9wKG9wYyk7CisKKyAgICB9CisgICAgCisgICAgdm9pZCBtb3ZiX3IwbXIoUmVn
aXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3Bj
ID0gR0VUT1BDT0RFMShNT1ZCX1JFQURfUjBSTV9PUENPREUsIGRzdCwgc3JjKTsKKyAgICAgICAg
b25lU2hvcnRPcChvcGMpOworCisgICAgfQorICAgIAorICAgIHZvaWQgbW92Yl9tcihSZWdpc3Rl
cklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpIC8vIE1PVi5CIEBSbSwgUm4KKyAgICB7CisgICAgICAg
IHVpbnQxNl90IG9wYyA9IEdFVE9QQ09ERTEoTU9WQl9SRUFEX1JNX09QQ09ERSwgZHN0LCBzcmMp
OworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisKKyAgICB9CisgICAgCisgICAgdm9pZCBtb3Zs
X21yKFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICB1aW50
MTZfdCBvcGMgPSBHRVRPUENPREUxKE1PVkxfUkVBRF9STV9PUENPREUsIGRzdCwgYmFzZSk7Cisg
ICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKworICAgIH0KKyAgICAKKyAgICB2b2lkIG1vdmxfcjBt
cihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICB1aW50MTZf
dCBvcGMgPSBHRVRPUENPREUxKE1PVkxfUkVBRF9SMFJNX09QQ09ERSwgZHN0LCBzcmMpOworICAg
ICAgICBvbmVTaG9ydE9wKG9wYyk7CisKKyAgICB9CisgICAgCisgICAgdm9pZCBtb3ZsX3JtcjAo
UmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgLyptb3YubCBz
cmMsIEAocjAsIGRzdCkqLworICAgICAgICB1aW50MTZfdCBvcGMgPSBHRVRPUENPREUxKE1PVkxf
V1JJVEVfUjBSTl9PUENPREUsIGRzdCwgc3JjKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOwor
CisgICAgfQorCisgICAgdm9pZCBtb3ZsX2k4cihpbnQgaW1tOCwgUmVnaXN0ZXJJRCBkc3QpCisg
ICAgeworICAgICAgICBBU1NFUlQoKGltbTggPD0xMjcpICYmIChpbW04ID49IC0xMjgpKTsKKyAg
ICAgICAgdWludDE2X3Qgb3BjID0gR0VUT1BDT0RFMyhNT1ZJTU1fT1BDT0RFLCBkc3QsIGltbTgp
OworCisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lkIG9ybF9pcihp
bnQgaW1tLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIAorICAgICAgICBpZiAoKGlt
bSA8PSAyNTUpICYmIChpbW0gPj0gMCkgJiYgKGRzdCA9PSBTSDQ6OlIwKSkKKyAgICAgICAgICAg
IG9ybF9pOHIoaW1tLCBkc3QpOworICAgICAgICBlbHNlICB7CisgICAgICAgICAgICBSZWdpc3Rl
cklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICAgICAgTG9hZENvbnN0YW50KGltbSwg
c2NyKTsKKyAgICAgICAgICAgIHVpbnQxNl90IG9wYyA9IEdFVE9QQ09ERTEoT1JfT1BDT0RFLCBk
c3QsIHNjcik7CisgICAgICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgICAgICAgICByZWxl
YXNlU2NyYXRjaChzY3IpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHZvaWQgTG9hZENv
bnN0YW50KHVpbnQzMl90IGNvbnN0YW50LCBSZWdpc3RlcklEIGRzdCwgYm9vbCB3aXRocGF0Y2gg
PSBmYWxzZSkKKyAgICB7CisgICAgICAgIGlmICgoKGludCljb25zdGFudCA8PTB4N2YpICYmICgo
aW50KWNvbnN0YW50ID49IC0weDgwKSAmJiAoIXdpdGhwYXRjaCkpCisgICAgICAgICAgICBtb3Zf
aW1tOChjb25zdGFudCwgZHN0KTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB1aW50MTZf
dCBvcGMgPSBHRVRPUENPREUzKE1PVklNTV9PUENPREUsIGRzdCwgMCk7IC8vIHdpbGwgYmUgcGF0
Y2hlZCBsYXRlciB0byBtb3YubAorICAgICAgICAgICAgbV9idWZmZXIucHV0U2hvcnRXaXRoQ29u
c3RhbnRJbnQob3BjLCBjb25zdGFudCk7CisgICAgICAgIH0KKyAgICB9CisKKworCisgICAgLy8g
RmxvdyBjb250cm9sOgorCisgICAgSm1wU3JjIGNhbGwoKQorICAgIHsgICAgICAgIAorICAgICAg
ICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBtX2J1ZmZlci5lbnN1
cmVTcGFjZShtYXhJbnN0cnVjdGlvblNpemUgKyA0KTsKKyAgICAgICAgTG9hZENvbnN0YW50KDB4
MCwgc2NyLCB0cnVlKTsKKyAgICAgICAgYnJhbmNoKEpTUl9PUENPREUsIHNjcik7CisgICAgICAg
IG5vcCgpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgICAgICByZXR1cm4gSm1w
U3JjKG1fYnVmZmVyLnVuY2hlY2tlZFNpemUoKSk7CisgICAgfQorICAgIAorICAgIEptcFNyYyBj
YWxsKFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgbV9idWZmZXIuZW5zdXJlU3BhY2Uo
bWF4SW5zdHJ1Y3Rpb25TaXplICsgMik7CisgICAgICAgIGJyYW5jaChKU1JfT1BDT0RFLCBkc3Qp
OworICAgICAgICBub3AoKTsKKyAgICAgICAgcmV0dXJuIEptcFNyYyhtX2J1ZmZlci51bmNoZWNr
ZWRTaXplKCkpOworICAgIH0KKworICAgIEptcFNyYyBqbXAoKQorICAgIHsgICAgICAgIAorICAg
ICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBtX2J1ZmZlci5l
bnN1cmVTcGFjZShtYXhJbnN0cnVjdGlvblNpemUgKyA0KTsKKyAgICAgICAgaW50IG1fc2l6ZSA9
IG1fYnVmZmVyLnVuY2hlY2tlZFNpemUoKTsKKyAgICAgICAgTG9hZENvbnN0YW50KDB4MCwgc2Ny
LCB0cnVlKTsKKyAgICAgICAgYnJhbmNoKEJSQUZfT1BDT0RFLCBzY3IpOyAgICAgICAgCisgICAg
ICAgIG5vcCgpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgIAorICAgICAgICBy
ZXR1cm4gSm1wU3JjKG1fc2l6ZSk7CisgICAgfQorICAgIAorICAgIHZvaWQgam1wX3IoUmVnaXN0
ZXJJRCBkc3QpCisgICAgeworICAgICAgICBtX2J1ZmZlci5lbnN1cmVTcGFjZShtYXhJbnN0cnVj
dGlvblNpemUgKyAyKTsKKyAgICAgICAgYnJhbmNoKEpNUF9PUENPREUsIGRzdCk7CisgICAgICAg
IG5vcCgpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGptcF9tKGludCBvZmZzZXQsIFJlZ2lzdGVy
SUQgYmFzZSkKKyAgICB7CisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7
CisgICAgICAgIAorICAgICAgICBpZiAoKG9mZnNldCA8IDApIHx8IChvZmZzZXQgPj0gNjQpKSB7
CisgICAgICAgICAgICBMb2FkQ29uc3RhbnQob2Zmc2V0LCBzY3IpOworICAgICAgICAgICAgYWRk
bF9ycihiYXNlLCBzY3IpOworICAgICAgICAgICAgbW92bF9tcihzY3IsIHNjcik7CisgICAgICAg
IH0gZWxzZSBpZiAob2Zmc2V0KSB7CisgICAgICAgICAgICBtb3ZsX21yKG9mZnNldCA+PiAyLCBi
YXNlLCBzY3IpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbW92bF9tcihiYXNlLCBz
Y3IpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBtX2J1ZmZlci5lbnN1cmVTcGFjZSht
YXhJbnN0cnVjdGlvblNpemUgKyAyKTsKKyAgICAgICAgYnJhbmNoKEpNUF9PUENPREUsIHNjcik7
CisgICAgICAgIG5vcCgpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworCisgICAgfQor
ICAgIAorICAgIEptcFNyYyBqbmUoKQorICAgIHsKKyAgICAgICAgbV9idWZmZXIuZW5zdXJlU3Bh
Y2UobWF4SW5zdHJ1Y3Rpb25TaXplICsgNik7CisgICAgICAgIGludCBtX3NpemUgPSBtX2J1ZmZl
ci51bmNoZWNrZWRTaXplKCk7CisgICAgICAgIGJyYW5jaChCRl9PUENPREUsIDApOworICAgICAg
ICByZXR1cm4gSm1wU3JjKG1fc2l6ZSk7CisgICAgfQorICAgIAorICAgIEptcFNyYyBqZSgpCisg
ICAgeworICAgICAgICBtX2J1ZmZlci5lbnN1cmVTcGFjZShtYXhJbnN0cnVjdGlvblNpemUgKyA2
KTsKKyAgICAgICAgaW50IG1fc2l6ZSA9IG1fYnVmZmVyLnVuY2hlY2tlZFNpemUoKTsKKyAgICAg
ICAgYnJhbmNoKEJUX09QQ09ERSwgMCk7CisgICAgICAgIHJldHVybiBKbXBTcmMobV9zaXplKTsK
KyAgICB9CisgICAgCisgICAgdm9pZCByZXQoKQorICAgIHsKKyAgICAgICAgbV9idWZmZXIuZW5z
dXJlU3BhY2UobWF4SW5zdHJ1Y3Rpb25TaXplICsgMik7CisgICAgICAgIG9uZVNob3J0T3AoUlRT
X09QQ09ERSk7CisgICAgfQorCisgICAgLy8gQXNzZW1ibGVyIGFkbWluIG1ldGhvZHM6CisKKyAg
ICBKbXBEc3QgbGFiZWwoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEptcERzdChtX2J1ZmZlci5z
aXplKCkpOworICAgIH0KKyAgICAKKyAgICBpbnQgc2l6ZU9mQ29uc3RhbnRQb29sKCkKKyAgICB7
CisgICAgICAgICByZXR1cm4gbV9idWZmZXIuc2l6ZU9mQ29uc3RhbnRQb29sKCk7CisgICAgfQor
CisgICAgSm1wRHN0IGFsaWduKGludCBhbGlnbm1lbnQpCisgICAgeworICAgICAgICB3aGlsZSAo
IW1fYnVmZmVyLmlzQWxpZ25lZChhbGlnbm1lbnQpKSB7CisgICAgICAgICAgICBtX2J1ZmZlci5l
bnN1cmVTcGFjZShtYXhJbnN0cnVjdGlvblNpemUpOworICAgICAgICAgICAgbm9wKCk7CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIGxhYmVsKCk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQg
bGlua0p1bXAodm9pZCogY29kZSwgSm1wU3JjIGZyb20sIHZvaWQqIHRvKQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKGZyb20ubV9vZmZzZXQgIT0gLTEpOworCisgICAgICAgIHVpbnQxNl90KiBpbnN0
cnVjdGlvblB0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDE2X3QqPiAocmVpbnRlcnByZXRfY2Fz
dDx1bnNpZ25lZCBpbnQ+KGNvZGUpICsgZnJvbS5tX29mZnNldCk7CisgICAgICAgIHVpbnQxNl90
IGluc3RydWN0aW9uID0gKmluc3RydWN0aW9uUHRyOworICAgICAgICBpbnQgb2Zmc2V0Qml0czsK
KyAgICAgICAgCisgICAgICAgIGlmICgoKGluc3RydWN0aW9uICYgMHhGRjAwKSA9PSBCVF9PUENP
REUpIHx8ICgoaW5zdHJ1Y3Rpb24gJiAweEZGMDApID09IEJGX09QQ09ERSkpIHsKKyAgICAgICAg
CisgICAgICAgICAgICAvKiBCVCBsYWJlbCAgPT0+IEJGIDIgCisgICAgICAgICAgICAgICBub3Ag
ICAgICAgICAgIExEUiByZWcKKyAgICAgICAgICAgICAgIG5vcCAgICAgICAgICAgYnJhZiBAcmVn
CisgICAgICAgICAgICAgICBub3AgICAgICAgICAgIG5vcAorICAgICAgICAgICAgKi8KKyAgICAg
ICAgICAgIG9mZnNldEJpdHMgID0gKCh1bnNpZ25lZCBpbnQpdG8gLSAodW5zaWduZWQgaW50KWNv
ZGUpIC0gZnJvbS5tX29mZnNldCAtIDg7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGluc3Ry
dWN0aW9uIF49IDB4MDIwMjsKKyAgICAgICAgICAgICppbnN0cnVjdGlvblB0cisrID0gaW5zdHJ1
Y3Rpb247CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBpbnQgb2Zmc2V0ID0gICAoKmlu
c3RydWN0aW9uUHRyICYgMHhGRik7CisgICAgICAgICAgICB1aW50MTZfdCogYWRkcmVzcyAgPSAo
dWludDE2X3QqKSgob2Zmc2V0IDw8IDIpICsgKCgodW5zaWduZWQgaW50KWluc3RydWN0aW9uUHRy
ICsgNCkgJih+MHgzKSkpOworICAgICAgICAgICAgKnJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQg
aW50Kj4oYWRkcmVzcykgPSBvZmZzZXRCaXRzOworICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgaW5zdHJ1Y3Rpb24gPSAoMHgwMDIzIHwgKCppbnN0cnVjdGlvblB0cisrICYgMHhGMDApKTsK
KyAgICAgICAgICAgICppbnN0cnVjdGlvblB0cisrID0gaW5zdHJ1Y3Rpb247CisgICAgICAgICB9
IGVsc2UgaWYgKCgqKGluc3RydWN0aW9uUHRyICsxKSAmIDB4MDAyMykgPT0gQlJBRl9PUENPREUp
IHsKKyAgICAgICAgICAgICAKKyAgICAgICAgICAgICAvKiBNT1YgI2ltbSwgcmVnICA9PiBMRFIg
cmVnCisgICAgICAgICAgICAgICAgYnJhZiBAcmVnICAgICAgICBicmFmIEByZWcKKyAgICAgICAg
ICAgICAgICBub3AgICAgICAgICAgICAgIG5vcAorICAgICAgICAgICAgKi8KKyAgICAgICAgICAg
IAorICAgICAgICAgICAgb2Zmc2V0Qml0cyAgPSAoKHVuc2lnbmVkIGludCl0byAtICh1bnNpZ25l
ZCBpbnQpY29kZSkgLSBmcm9tLm1fb2Zmc2V0IC0gNjsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgaW50IG9mZnNldFRvUEMgPSAoKmluc3RydWN0aW9uUHRyICYgMHhGRik7ICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIHVpbnQxNl90KiBhZGRyZXNz
ICA9ICh1aW50MTZfdCopKChvZmZzZXRUb1BDIDw8IDIpICsgKCgodW5zaWduZWQgaW50KWluc3Ry
dWN0aW9uUHRyICsgNCkgJih+MHgzKSkpOworICAgICAgICAgICAgKnJlaW50ZXJwcmV0X2Nhc3Q8
dW5zaWduZWQgaW50Kj4oYWRkcmVzcykgPSBvZmZzZXRCaXRzOworICAgICAgICAgICAKKyAgICAg
ICAgIH0gZWxzZSAKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKwor
ICAgIHN0YXRpYyB2b2lkIGxpbmtDYWxsKHZvaWQqIGNvZGUsIEptcFNyYyBmcm9tLCB2b2lkKiB0
bykKKyAgICB7CisgICAgICAgIHVpbnQxNl90KiBpbnN0cnVjdGlvblB0ciA9IHJlaW50ZXJwcmV0
X2Nhc3Q8dWludDE2X3QqPigodW5zaWduZWQgaW50KWNvZGUgKyBmcm9tLm1fb2Zmc2V0KTsKKyAg
ICAgICAgaW5zdHJ1Y3Rpb25QdHIgPSBpbnN0cnVjdGlvblB0ciAtMzsKKworICAgICAgICBpbnQg
b2Zmc2V0ID0gICAoKihpbnN0cnVjdGlvblB0cikgJiAweEZGKTsKKyAgICAgICAgCisgICAgICAg
IHVpbnQxNl90KiBhZGRyZXNzICA9ICh1aW50MTZfdCopKChvZmZzZXQgPDwgMikgKyAoKCh1bnNp
Z25lZCBpbnQpaW5zdHJ1Y3Rpb25QdHIgKyA0KSAmKH4weDMpKSk7CisgICAgICAgICpyZWludGVy
cHJldF9jYXN0PHVuc2lnbmVkIGludCo+KGFkZHJlc3MpID0gKHVuc2lnbmVkIGludCl0bzsKKyAg
ICB9CisgICAgCisgICAgc3RhdGljIHZvaWQgbGlua1BvaW50ZXIodm9pZCogY29kZSwgSm1wRHN0
IHdoZXJlLCB2b2lkKiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHVpbnQxNl90KiBpbnN0cnVjdGlv
blB0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDE2X3QqPigodW5zaWduZWQgaW50KWNvZGUgKyB3
aGVyZS5tX29mZnNldCk7CisgICAgICAgIAorICAgICAgICBpbnQgb2Zmc2V0ID0gICAoKmluc3Ry
dWN0aW9uUHRyICYgMHhGRik7CisgICAgICAgIAorICAgICAgICB1aW50MTZfdCogYWRkcmVzcyAg
PSAodWludDE2X3QqKSgob2Zmc2V0IDw8IDIpICsgKCgodW5zaWduZWQgaW50KWluc3RydWN0aW9u
UHRyICsgNCkgJih+MHgzKSkpOworICAgICAgICAqcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBp
bnQqPihhZGRyZXNzKSA9ICh1bnNpZ25lZCBpbnQpdmFsdWU7CisgICAgfQorICAgCisgICAgc3Rh
dGljIHVuc2lnbmVkIGdldENhbGxSZXR1cm5PZmZzZXQoSm1wU3JjIGNhbGwpCisgICAgeworICAg
ICAgICBBU1NFUlQoY2FsbC5tX29mZnNldCA+PSAwKTsKKyAgICAgICAgcmV0dXJuIGNhbGwubV9v
ZmZzZXQ7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBTSDRXb3JkKiBnZXRMZHJJbW1BZGRyZXNz
T25Qb29sKFNINFdvcmQqIGluc24sIHVpbnQzMl90KiBjb25zdFBvb2wpCisgICAgeworICAgICAg
ICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8U0g0V29yZCo+KGNvbnN0UG9vbCArICgqaW5zbiAm
IDB4ZmYpKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIFNINFdvcmQgcGF0Y2hDb25zdGFudFBv
b2xMb2FkKFNINFdvcmQgbG9hZCwgaW50IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIChs
b2FkICYgfjB4ZmYpIHwgdmFsdWU7CisgICAgfQorCisgICAgc3RhdGljIHVpbnQzMl90IHBsYWNl
Q29uc3RhbnRQb29sQmFycmllcihpbnQgb2Zmc2V0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKCgo
b2Zmc2V0ID4+IDEpIDw9MjA0NykgJiYgKChvZmZzZXQgPj4gMSkgPj0gLTIwNDgpKTsKKyAgICAg
ICAgCisgICAgICAgIHVpbnQzMl90IG9wYyA9ICgoMFhBMDAwIHwob2Zmc2V0ID4+IDEpKSB8IDB4
MDAwOTAwMDApOworICAgICAgICByZXR1cm4gb3BjOworICAgIH0KKyAgICBzdGF0aWMgdm9pZCBw
YXRjaENvbnN0YW50UG9vbExvYWQodm9pZCogbG9hZEFkZHIsIHZvaWQqIGNvbnN0UG9vbEFkZHIp
CisgICAgeworICAgICAgICB1aW50MTZfdCogaW5zdHJ1Y3Rpb25QdHIgPSByZWludGVycHJldF9j
YXN0PFNINFdvcmQqPihsb2FkQWRkcik7CisgICAgICAgIFNINFdvcmQgaW5kZXggPSAoKmluc3Ry
dWN0aW9uUHRyICYgMHhmZik7CisgICAgICAgIAorICAgICAgICBBU1NFUlQoKCgoKHVuc2lnbmVk
IGludCljb25zdFBvb2xBZGRyIC0gKHVuc2lnbmVkIGludClsb2FkQWRkcikgKyBpbmRleCAqIDQp
KSA8IDEwMjQpOworICAgICAgICAKKyAgICAgICAgdWludDE2X3QgaW5zdHJ1Y3Rpb24gPSAqaW5z
dHJ1Y3Rpb25QdHIgJiAweGYwMDsKKyAgICAgICAgaW50IG9mZnNldCA9ICh1bnNpZ25lZCBpbnQp
Y29uc3RQb29sQWRkciArIChpbmRleCAqIDQpIC0gKCgodW5zaWduZWQgaW50KWluc3RydWN0aW9u
UHRyICYgfjB4MDMpICsgNCk7CisgICAgCisgICAgCisgICAgICAgIGluc3RydWN0aW9uIHw9IDB4
RDAwMDsKKyAgICAgICAgb2Zmc2V0ICY9IDB4MDNmZjsKKyAgICAgICAgaW5zdHJ1Y3Rpb24gfD0g
KG9mZnNldCA+PiAyKTsKKyAgICAgICAgKmluc3RydWN0aW9uUHRyID0gaW5zdHJ1Y3Rpb247Cisg
ICAgfQorCisgICAgc3RhdGljIHZvaWQgcmVwYXRjaFBvaW50ZXIodm9pZCogd2hlcmUsIHZvaWQq
IHZhbHVlKQorICAgIHsKKyAgICAgICAgcGF0Y2hQb2ludGVyKHdoZXJlLCB2YWx1ZSk7ICAgIAor
ICAgIH0KKyAgICAKKyAgICBzdGF0aWMgdm9pZCByZXBhdGNoTG9hZFB0clRvTEVBKHZvaWQqIHdo
ZXJlKQorICAgIHsKKyAgICAgICAgdWludDE2X3QqIGxvYWRPcCA9IHJlaW50ZXJwcmV0X2Nhc3Q8
dWludDE2X3QqPih3aGVyZSkgKyAyOworCisgICAgICAgICpsb2FkT3AgPSAqbG9hZE9wIHwgMHgx
OworICAgICAgICBFeGVjdXRhYmxlQWxsb2NhdG9yOjpjYWNoZUZsdXNoKGxvYWRPcCwgc2l6ZW9m
KHVpbnQxNl90KSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyB2b2lkIHJlcGF0Y2hJbnQzMih2
b2lkKiB3aGVyZSwgaW50MzJfdCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHVpbnQxNl90KiBpbnN0
cnVjdGlvblB0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDE2X3QqPih3aGVyZSk7CisgICAgICAg
IAorICAgICAgICAvKgorICAgICAgICAgICAgY29kZUAgIG1vdi5sIEAob2Zmc2V0ICwgUEMpICwg
cmVnCisgICAgICAgICovICAKKyAgICAgICAgCisgICAgICAgIGludCBvZmZzZXQgPSAgICgqaW5z
dHJ1Y3Rpb25QdHIgJiAweEZGKTsKKyAgICAgICAgCisgICAgICAgIHVpbnQxNl90KiBhZGRyZXNz
ICA9ICh1aW50MTZfdCopKChvZmZzZXQgPDwgMikgKyAoKCh1bnNpZ25lZCBpbnQpd2hlcmUgKyA0
KSAmKH4weDMpKSk7CisgICAgICAgICpyZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGludCo+KGFk
ZHJlc3MpID0gdmFsdWU7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgcmVsaW5rQ2FsbCh2b2lk
KiBmcm9tLCB2b2lkKiB0bykKKyAgICB7CisgICAgICAgIHVpbnQxNl90KiBpbnN0cnVjdGlvblB0
ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDE2X3QqPihmcm9tKTsKKyAgICAgICAgaW5zdHJ1Y3Rp
b25QdHIgPSBpbnN0cnVjdGlvblB0ciAtIDM7CisgICAgICAgIAorICAgICAgICBpbnQgb2Zmc2V0
ID0gICAoKmluc3RydWN0aW9uUHRyICYgMHhGRik7CisgICAgICAgIAorICAgICAgICB1aW50MTZf
dCogYWRkcmVzcyAgPSAodWludDE2X3QqKSgob2Zmc2V0IDw8IDIpICsgKCgodW5zaWduZWQgaW50
KWluc3RydWN0aW9uUHRyICsgNCkgJih+MHgzKSkpOworICAgICAgICAqcmVpbnRlcnByZXRfY2Fz
dDx1bnNpZ25lZCBpbnQqPihhZGRyZXNzKSA9ICh1bnNpZ25lZCBpbnQpdG87CisgICAgfQorICAg
IAorICAgIHN0YXRpYyB2b2lkIHJlbGlua0p1bXAodm9pZCogZnJvbSwgdm9pZCogdG8pCisgICAg
eworICAgICAgICB1aW50MTZfdCogaW5zdHJ1Y3Rpb25QdHIgPSByZWludGVycHJldF9jYXN0PHVp
bnQxNl90Kj4gKGZyb20pOworICAgICAgICB1aW50MTZfdCBpbnN0cnVjdGlvbiA9ICppbnN0cnVj
dGlvblB0cjsKKyAgICAgICAgaW50IG9mZnNldEJpdHM7CisgICAgICAgIHVpbnQxNl90KiBhZGRy
ZXNzOworICAgICAgICAKKyAgICAgICAgaWYgKCgoKmluc3RydWN0aW9uUHRyICYgMHhGRjAwKSA9
PSBCVF9PUENPREUpIHx8ICgoKmluc3RydWN0aW9uUHRyICYgMHhGRjAwKSA9PSBCRl9PUENPREUp
KSB7CisKKyAgICAgICAgICAgIG9mZnNldEJpdHMgID0gKCh1bnNpZ25lZCBpbnQpdG8gLSAodW5z
aWduZWQgaW50KWZyb20pIC0gODsKKyAgICAgICAgICAgIGluc3RydWN0aW9uUHRyKys7CisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICBpbnQgb2Zmc2V0ID0gICAoKmluc3RydWN0aW9uUHRy
ICYgMHhGRik7CisgICAgICAgICAgICBhZGRyZXNzICA9ICh1aW50MTZfdCopKChvZmZzZXQgPDwg
MikgKyAoKCh1bnNpZ25lZCBpbnQpaW5zdHJ1Y3Rpb25QdHIgKyA0KSAmKH4weDMpKSk7CisgICAg
ICAgICAgICAqcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBpbnQqPihhZGRyZXNzKSA9IG9mZnNl
dEJpdHM7CisgICAgICAgIAorICAgICAgICAgICAgaW5zdHJ1Y3Rpb24gPSAoMHgwMDIzIHwgKCpp
bnN0cnVjdGlvblB0cisrICYgMHhGMDApKTsKKyAgICAgICAgICAgICppbnN0cnVjdGlvblB0cisr
ID0gaW5zdHJ1Y3Rpb247CisgICAgICAgICAgICAKKyAgICAgICAgIH0gZWxzZSBpZiAoKCooaW5z
dHJ1Y3Rpb25QdHIgKzEpICYgMHgwMDIzKSA9PSBCUkFGX09QQ09ERSkgeworICAgICAgICAgICAg
IAorICAgICAgICAgICAgb2Zmc2V0Qml0cyAgPSAoKHVuc2lnbmVkIGludCl0byAtICh1bnNpZ25l
ZCBpbnQpZnJvbSkgLSA2OworICAgICAgICAgICAgaW50IG9mZnNldFRvUEMgPSAoKmluc3RydWN0
aW9uUHRyICYgMHhGRik7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICBhZGRyZXNzICA9ICh1aW50MTZfdCopKChvZmZzZXRUb1BDIDw8IDIpICsgKCgo
dW5zaWduZWQgaW50KWluc3RydWN0aW9uUHRyICsgNCkgJih+MHgzKSkpOworICAgICAgICAgICAg
KnJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgaW50Kj4oYWRkcmVzcykgPSBvZmZzZXRCaXRzOwor
CisgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
IH0KKyAgICAKKyAgICAvLyBMaW5raW5nICYgcGF0Y2hpbmc6CisKKyAgICB2b2lkIGxpbmtKdW1w
KEptcFNyYyBmcm9tLCBKbXBEc3QgdG8pCisgICAgeworICAgICAgICBBU1NFUlQodG8ubV9vZmZz
ZXQgIT0gLTEpOworICAgICAgICBBU1NFUlQoZnJvbS5tX29mZnNldCAhPSAtMSk7CisgICAgICAg
IAorICAgICAgICB1aW50MTZfdCogaW5zdHJ1Y3Rpb25QdHIgPSByZWludGVycHJldF9jYXN0PHVp
bnQxNl90Kj4gKChyZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGludD4oZGF0YSgpKSArIGZyb20u
bV9vZmZzZXQpKTsKKyAgICAgICAgdWludDE2X3QgaW5zdHJ1Y3Rpb24gPSAqaW5zdHJ1Y3Rpb25Q
dHI7CisgICAgICAgIGludCBvZmZzZXRCaXRzOworICAgICAgICAKKyAgICAgICAgaWYgKCgoaW5z
dHJ1Y3Rpb24gJiAweEZGMDApID09IEJUX09QQ09ERSkgfHwgKChpbnN0cnVjdGlvbiAmIDB4RkYw
MCkgPT0gQkZfT1BDT0RFKSkgeworICAgICAgICAKKyAgICAgICAgICAgICAgaWYgKCooaW5zdHJ1
Y3Rpb25QdHIgKzEpID09IE5PUF9PUENPREUpIHsKKworICAgICAgICAgICAgICAgIC8qIEJUIGxh
YmVsICAgID0+IEJGIDIKKyAgICAgICAgICAgICAgICAgICBub3AgICAgICAgICAgICBicmFmIG9m
ZnNldAorICAgICAgICAgICAgICAgICAgIG5vcCAgICAgICAgICAgIG5vcAorICAgICAgICAgICAg
ICAgICovCisgICAgICAgICAgICAgICAgb2Zmc2V0Qml0cyAgPSAoKHRvLm1fb2Zmc2V0IC0gZnJv
bS5tX29mZnNldCkgLSA0KTsKKyAgICAgICAgICAgICAgICBvZmZzZXRCaXRzID4+PSAxOworCisg
ICAgICAgICAgICAgICAgaWYgKCgtMTI4IDw9IChpbnQpb2Zmc2V0Qml0cykgJiYgKCAoaW50KW9m
ZnNldEJpdHMgPD0gMTI3KSkgeworICAgICAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbiB8PSAo
b2Zmc2V0Qml0cyAmIDB4RkYpOworICAgICAgICAgICAgICAgICAgICAqaW5zdHJ1Y3Rpb25QdHIg
PSBpbnN0cnVjdGlvbjsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCgtMjA0OCA8PSAoaW50
KW9mZnNldEJpdHMpICYmICggKGludClvZmZzZXRCaXRzIDw9IDIwNDcpKSB7CisKKyAgICAgICAg
ICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICAgICAqIFRoZSBvZmZzZXQgZG9lcyBu
b3QgZml0IGluIG9uZSBpbnN0cnVjdGlvbiwgc28KKyAgICAgICAgICAgICAgICAgICAgICogaW52
ZXJ0ZSB0aGUgY29uZGl0aW9uYWwgYnJhbmNoIGFuZCBlbWl0IGFuIGFic29sdXRlCisgICAgICAg
ICAgICAgICAgICAgICAqIGJyYW5jaAorICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAg
ICAgICAgICAgICAgb2Zmc2V0Qml0cy0tOworICAgICAgICAgICAgICAgICAgICBvZmZzZXRCaXRz
ICY9IDB4MEZGRjsKKyAgICAgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb24gXj0gMHgwMjAwOwor
ICAgICAgICAgICAgICAgICAgICAqaW5zdHJ1Y3Rpb25QdHIrKyA9ICsraW5zdHJ1Y3Rpb247Cisg
ICAgICAgICAgICAgICAgICAgICppbnN0cnVjdGlvblB0ci0tID0gMHhBMDAwIHwgb2Zmc2V0Qml0
czsKKyAgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgICBBU1NFUlQo
MCk7CisKKyAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgLyogQlQgbGFiZWwgICAgPT4gQkYgMgorICAgICAgICAgICAgICAgbm9wICAgICAgICAg
ICAgTERSIHJlZworICAgICAgICAgICAgICAgbm9wICAgICAgICAgICAgYnJhZiBAcmVnCisgICAg
ICAgICAgICAgICBub3AgICAgICAgICAgICBub3AKKyAgICAgICAgICAgICovCisgICAgICAgICAg
ICBvZmZzZXRCaXRzICA9ICh0by5tX29mZnNldCAtIGZyb20ubV9vZmZzZXQpIC0gODsKKyAgICAg
ICAgICAgIGluc3RydWN0aW9uIF49IDB4MDIwMjsKKyAgICAgICAgICAgICppbnN0cnVjdGlvblB0
cisrID0gaW5zdHJ1Y3Rpb247CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoKCpp
bnN0cnVjdGlvblB0ciAmIDB4RjAwMCkgPT0gMHhFMDAwKSB7CisgICAgICAgICAgICAgICAgU0g0
V29yZCogYWRkciA9IGdldExkckltbUFkZHJlc3NPblBvb2woaW5zdHJ1Y3Rpb25QdHIsIG1fYnVm
ZmVyLnBvb2xBZGRyZXNzKCkpOworICAgICAgICAgICAgICAgICpyZWludGVycHJldF9jYXN0PHVu
c2lnbmVkIGludCo+KGFkZHIpID0gb2Zmc2V0Qml0czsKKyAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgaW50IG9mZnNldCA9ICAgKCppbnN0cnVjdGlvblB0ciAmIDB4RkYpOwor
ICAgICAgICAgICAgICAgIHVpbnQxNl90KiBhZGRyZXNzICA9ICh1aW50MTZfdCopKChvZmZzZXQg
PDwgMikgKyAoKCh1bnNpZ25lZCBpbnQpaW5zdHJ1Y3Rpb25QdHIgKyA0KSAmKH4weDMpKSk7Cisg
ICAgICAgICAgICAgICAgKnJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgaW50Kj4oYWRkcmVzcykg
PSBvZmZzZXRCaXRzOworICAgICAgICAgICAgfQorICAgICAgICAgICAgIAorICAgICAgICAgICAg
aW5zdHJ1Y3Rpb24gPSAoMHgwMDIzIHwgKCppbnN0cnVjdGlvblB0cisrICYgMHhGMDApKTsKKyAg
ICAgICAgICAgICppbnN0cnVjdGlvblB0cisrID0gaW5zdHJ1Y3Rpb247CisgICAgICAgICAgICAg
CisgICAgICAgICB9IGVsc2UgaWYgKCgqKGluc3RydWN0aW9uUHRyICsxKSAmIDB4MDAyMykgPT0g
QlJBRl9PUENPREUpIHsKKyAgICAgICAgICAgICAKKyAgICAgICAgICAgICAvKiBNT1YgIyBpbW0s
IHJlZyAgPT4gTERSIHJlZworICAgICAgICAgICAgICAgIGJyYWYgQHJlZyAgICAgICAgICBicmFm
IEByZWcKKyAgICAgICAgICAgICAgICBub3AgICAgICAgICAgICAgICAgbm9wCisgICAgICAgICAg
ICAqLworICAgICAgICAgICAgCisgICAgICAgICAgICBvZmZzZXRCaXRzICA9ICh0by5tX29mZnNl
dCAtIGZyb20ubV9vZmZzZXQpIC0gNjsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaW5zdHJ1
Y3Rpb24gPSAqaW5zdHJ1Y3Rpb25QdHI7CisgICAgICAgICAgICBpbnQgb2Zmc2V0VG9QQyA9ICgq
aW5zdHJ1Y3Rpb25QdHIgJiAweEZGKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKChp
bnN0cnVjdGlvbiAgJiAweEYwMDApID09IDB4RTAwMCkgeworICAgICAgICAgICAgICAgIFNINFdv
cmQqIGFkZHIgPSBnZXRMZHJJbW1BZGRyZXNzT25Qb29sKGluc3RydWN0aW9uUHRyLCBtX2J1ZmZl
ci5wb29sQWRkcmVzcygpKTsKKyAgICAgICAgICAgICAgICAqcmVpbnRlcnByZXRfY2FzdDx1bnNp
Z25lZCBpbnQqPihhZGRyKSA9IG9mZnNldEJpdHM7CisgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICB1aW50MTZfdCogYWRkcmVzcyAgPSAo
dWludDE2X3QqKSgob2Zmc2V0VG9QQyA8PCAyKSArICgoKHVuc2lnbmVkIGludClpbnN0cnVjdGlv
blB0ciArIDQpICYofjB4MykpKTsKKyAgICAgICAgICAgICAgICAqcmVpbnRlcnByZXRfY2FzdDx1
bnNpZ25lZCBpbnQqPihhZGRyZXNzKSA9IG9mZnNldEJpdHM7CisgICAgICAgICAgICB9CisgICAg
ICAgICB9IGVsc2UgIAorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisKKyAgICAg
fQorICAgICAKKyAgICAgCisgICAgc3RhdGljIHZvaWQgbGlua0p1bXBGdW5jKHZvaWQqIGNvZGUs
IEptcFNyYyBmcm9tLCB2b2lkKiB0bykKKyAgICB7CisgICAgICAgIEFTU0VSVChmcm9tLm1fb2Zm
c2V0ICE9IC0xKTsgICAgICAgIAorICAgICAgICB1aW50MTZfdCogaW5zdHJ1Y3Rpb25QdHIgPSBy
ZWludGVycHJldF9jYXN0PHVpbnQxNl90Kj4gKHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgaW50
Pihjb2RlKSArIGZyb20ubV9vZmZzZXQpOworICAgICAgICB1aW50MTZfdCBpbnN0cnVjdGlvbiA9
ICppbnN0cnVjdGlvblB0cjsKKyAgICAgICAgCisgICAgICAgIEFTU0VSVCgoaW5zdHJ1Y3Rpb24g
PT0gQlRfT1BDT0RFKSB8fCAoaW5zdHJ1Y3Rpb24gPT0gQkZfT1BDT0RFKSk7CisgICAgICAgIAor
ICAgICAgICAvKiBCVCBsYWJlbCAgICA9PiBCRiAyIAorICAgICAgICAgICAgICBub3AgICAgICAg
ICBMRFIgcmVnCisgICAgICAgICAgICAgIG5vcCAgICAgICAgIGp1bXAgQHJlZworICAgICAgICAg
ICAgICBub3AgICAgICAgICBub3AKKyAgICAgICAgKi8KKyAgICAgICAgaW5zdHJ1Y3Rpb24gXj0g
MHgwMjAyOworICAgICAgICAqaW5zdHJ1Y3Rpb25QdHIrKyA9IGluc3RydWN0aW9uOworICAgIAor
ICAgICAgICAvKnRoZSBhc3NlbWJseSBjb2RlIGlzIGdlbmVyYXRlZCovCisgICAgICAgIAorICAg
ICAgICBpbnQgb2Zmc2V0ID0gICAoKmluc3RydWN0aW9uUHRyICYgMHhGRik7CisgICAgICAgIHVp
bnQxNl90KiBhZGRyZXNzICA9ICh1aW50MTZfdCopKChvZmZzZXQgPDwgMikgKyAoKCh1bnNpZ25l
ZCBpbnQpaW5zdHJ1Y3Rpb25QdHIgKyA0KSAmKH4weDMpKSk7CisgICAgICAgICpyZWludGVycHJl
dF9jYXN0PHVuc2lnbmVkIGludCo+KGFkZHJlc3MpID0gKHVuc2lnbmVkIGludCl0bzsKKyAgICAK
KyAgICAgICAgaW5zdHJ1Y3Rpb24gPSAoMHg0MDJCIHwgKCppbnN0cnVjdGlvblB0cisrICYgMHhG
MDApKTsKKyAgICAgICAgKmluc3RydWN0aW9uUHRyKysgPSBpbnN0cnVjdGlvbjsKKyAgICAgICAg
ICAgICAKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCogZ2V0UmVsb2NhdGVkQWRkcmVzcyh2b2lk
KiBjb2RlLCBKbXBTcmMganVtcCkKKyAgICB7CisgICAgICAgIHJldHVybiByZWludGVycHJldF9j
YXN0PHZvaWQqPihyZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGludD4oY29kZSkgKyBqdW1wLm1f
b2Zmc2V0KTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIHZvaWQqIGdldFJlbG9jYXRlZEFkZHJl
c3Modm9pZCogY29kZSwgSm1wRHN0IGRlc3RpbmF0aW9uKQorICAgIHsKKyAgICAgICAgQVNTRVJU
KGRlc3RpbmF0aW9uLm1fb2Zmc2V0ICE9IC0xKTsKKworICAgICAgICByZXR1cm4gcmVpbnRlcnBy
ZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBpbnQ+KGNvZGUpICsgZGVz
dGluYXRpb24ubV9vZmZzZXQpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgaW50IGdldERpZmZl
cmVuY2VCZXR3ZWVuTGFiZWxzKEptcERzdCBzcmMsIEptcERzdCBkc3QpCisgICAgeworICAgICAg
ICByZXR1cm4gZHN0Lm1fb2Zmc2V0IC0gc3JjLm1fb2Zmc2V0OworICAgIH0KKyAgICAKKyAgICBz
dGF0aWMgaW50IGdldERpZmZlcmVuY2VCZXR3ZWVuTGFiZWxzKEptcERzdCBzcmMsIEptcFNyYyBk
c3QpCisgICAgeworICAgICAgICByZXR1cm4gZHN0Lm1fb2Zmc2V0IC0gc3JjLm1fb2Zmc2V0Owor
ICAgIH0KKyAgICAKKyAgICBzdGF0aWMgaW50IGdldERpZmZlcmVuY2VCZXR3ZWVuTGFiZWxzKEpt
cFNyYyBzcmMsIEptcERzdCBkc3QpCisgICAgeworICAgICAgICByZXR1cm4gZHN0Lm1fb2Zmc2V0
IC0gc3JjLm1fb2Zmc2V0OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgdm9pZCBwYXRjaFBvaW50
ZXIodm9pZCogY29kZSwgSm1wRHN0IHdoZXJlLCB2b2lkKiB2YWx1ZSkKKyAgICB7CisgICAgICAg
IHBhdGNoUG9pbnRlcihyZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGludCo+KGNvZGUpICsgd2hl
cmUubV9vZmZzZXQsIHZhbHVlKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIHZvaWQgcGF0Y2hQ
b2ludGVyKHZvaWQqIGNvZGUsIHZvaWQqIHZhbHVlKQorICAgIHsKKyAgICAgICAgcGF0Y2hJbnQz
Mihjb2RlLCByZWludGVycHJldF9jYXN0PHVpbnQzMl90Pih2YWx1ZSkpOworICAgIH0KKyAgICAK
KyAgICBzdGF0aWMgdm9pZCBwYXRjaEludDMyKHZvaWQqIGNvZGUsIHVpbnQzMl90IHZhbHVlKQor
ICAgIHsKKyAgICAgICAgdWludDE2X3QqIGluc3RydWN0aW9uUHRyID0gcmVpbnRlcnByZXRfY2Fz
dDx1aW50MTZfdCo+KGNvZGUpOworICAgICAgICAKKyAgICAgICAgLyoKKyAgICAgICAgY29kZUAg
IG1vdi5sIEAob2Zmc2V0ICwgUEMpICwgcmVnCisgICAgKi8gIAorICAgICAgICBpbnQgb2Zmc2V0
ID0gICAoKmluc3RydWN0aW9uUHRyICYgMHhGRik7CisgICAgICAgIAorICAgICAgICB1aW50MTZf
dCogYWRkcmVzcyAgPSAodWludDE2X3QqKSgob2Zmc2V0IDw8IDIpICsgKCgodW5zaWduZWQgaW50
KWNvZGUgKyA0KSAmKH4weDMpKSk7CisgICAgICAgICpyZWludGVycHJldF9jYXN0PHVuc2lnbmVk
IGludCo+KGFkZHJlc3MpID0gdmFsdWU7CisgICAgfQorCisgICAgCisgICAgdm9pZCogZXhlY3V0
YWJsZUNvcHkoRXhlY3V0YWJsZVBvb2wqIGFsbG9jYXRvcik7CisKKyAgICB2b2lkIHByZWZpeCh1
aW50MTZfdCBwcmUpCisgICAgeworICAgICAgICBtX2J1ZmZlci5wdXRCeXRlKHByZSk7CisgICAg
fQorCisgICAgdm9pZCBvbmVTaG9ydE9wKHVpbnQxNl90IG9wY29kZSkKKyAgICB7CisgICAgICAg
IG1fYnVmZmVyLmVuc3VyZVNwYWNlKG1heEluc3RydWN0aW9uU2l6ZSk7CisgICAgICAgIG1fYnVm
ZmVyLnB1dFNob3J0VW5jaGVja2VkKG9wY29kZSk7CisgICAgfQorCisgICAgdm9pZCBlbnN1cmVT
cGFjZShpbnQgc3BhY2UpCisgICAgeworICAgICAgICBtX2J1ZmZlci5lbnN1cmVTcGFjZShzcGFj
ZSk7CisgICAgfQorICAgICAgICAKKyAgICB2b2lkIGVuc3VyZVNwYWNlKGludCBpbnNuU3BhY2Us
IGludCBjb25zdFNwYWNlKQorICAgIHsKKyAgICAgICAgbV9idWZmZXIuZW5zdXJlU3BhY2UoaW5z
blNwYWNlLCBjb25zdFNwYWNlKTsKKyAgICB9CisgICAgCisgICAgLy8gQWRtaW5pc3RyYXRpdmUg
bWV0aG9kczoKKworICAgIHZvaWQqIGRhdGEoKSBjb25zdCB7IHJldHVybiBtX2J1ZmZlci5kYXRh
KCk7IH0KKyAgICBpbnQgc2l6ZSgpCisgICAgeworICAgICAgICByZXR1cm4gbV9idWZmZXIuc2l6
ZSgpOworICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICAgIFNINEJ1ZmZlciBtX2J1ZmZlcjsK
K307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxFKEFTU0VNQkxFUikg
JiYgQ1BVKFNINCkKKworI2VuZGlmIC8vIFNINEFzc2VtYmxlcl9oCmRpZmYgLS1naXQgYS9KYXZh
U2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5oIGIvSmF2YVNjcmlwdENvcmUvaml0
L0V4ZWN1dGFibGVBbGxvY2F0b3IuaAppbmRleCBiNjBkNTkxLi5jNzJiMmIzIDEwMDY0NAotLS0g
YS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5oCisrKyBiL0phdmFTY3Jp
cHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmgKQEAgLTQ3LDYgKzQ3LDEzIEBACiAjaW5j
bHVkZSA8c3lzL2NhY2hlY3RsLmg+CiAjZW5kaWYKIAorI2lmIENQVShTSDQpICYmIE9TKExJTlVY
KQorI2luY2x1ZGUgPGFzbS9jYWNoZWN0bC5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KKyNp
bmNsdWRlIDxzeXMvc3lzY2FsbC5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisKICNp
ZiBPUyhXSU5DRSkKIC8vIEZyb20gcGtmdW5jcy5oIChwcml2YXRlIGhlYWRlciBmaWxlIGZyb20g
dGhlIFBsYXRmb3JtIEJ1aWxkZXIpCiAjZGVmaW5lIENBQ0hFX1NZTkNfQUxMIDB4MDdGCkBAIC0y
OTQsNiArMzAxLDMwIEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIENhY2hlUmFuZ2VGbHVzaChj
b2RlLCBzaXplLCBDQUNIRV9TWU5DX0FMTCk7CiAgICAgfQorI2VsaWYgQ1BVKFNINCkgJiYgT1Mo
TElOVVgpCisKKyNpZm5kZWYgX19OUl9jYWNoZWZsdXNoCisjZGVmaW5lIF9fTlJfY2FjaGVmbHVz
aCBfX05SX21vZGlmeV9sZHQKKyNlbmRpZgorCitzdGF0aWMgY29uc3QgdW5zaWduZWQgZGVmYXVs
dExpbnV4UGFnZVNpemUgPSA0MDk2OworCisgICAgc3RhdGljIHZvaWQgY2FjaGVGbHVzaCh2b2lk
KiBjb2RlLCBzaXplX3Qgc2l6ZSkKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGludCBhLCBiOwor
ICAgICAgICBhID0gKHVuc2lnbmVkIGludCljb2RlICYgfihkZWZhdWx0TGludXhQYWdlU2l6ZSAt
IDEpOworICAgICAgICBiID0gKCh1bnNpZ25lZCBpbnQpY29kZSArIHNpemUgKyAoZGVmYXVsdExp
bnV4UGFnZVNpemUgLSAxKSkgJiB+KGRlZmF1bHRMaW51eFBhZ2VTaXplIC0gMSk7CisKKyAgICAg
ICAgaW50IHJlcyA9IHN5c2NhbGwoX19OUl9jYWNoZWZsdXNoLCBhLCBkZWZhdWx0TGludXhQYWdl
U2l6ZSwgQ0FDSEVGTFVTSF9EX1dCIHwgQ0FDSEVGTFVTSF9JKTsKKyAgICAgICAgQVNTRVJUKCFy
ZXMpOworCisgICAgICAgIHdoaWxlIChiIC0gYSA+IGRlZmF1bHRMaW51eFBhZ2VTaXplKSB7Cisg
ICAgICAgICAgICBhID0gYSArIGRlZmF1bHRMaW51eFBhZ2VTaXplOworICAgICAgICAgICAgcmVz
ID0gc3lzY2FsbChfX05SX2NhY2hlZmx1c2gsIGEsIGRlZmF1bHRMaW51eFBhZ2VTaXplLCBDQUNI
RUZMVVNIX0RfV0IgfCBDQUNIRUZMVVNIX0kpOworCisgICAgICAgICAgICBBU1NFUlQoIXJlcyk7
CisgICAgICAgIH0KKyAgICB9CiAjZWxzZQogICAgICNlcnJvciAiVGhlIGNhY2hlRmx1c2ggc3Vw
cG9ydCBpcyBtaXNzaW5nIG9uIHRoaXMgcGxhdGZvcm0uIgogI2VuZGlmCmRpZmYgLS1naXQgYS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcCBiL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCmlu
ZGV4IGNkNTk0NGEuLmQzNGVjYmUgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQu
Y3BwCisrKyBiL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCkBAIC0xMDQsNiArMTA0LDIwIEBA
IHZvaWQgSklUOjplbWl0VGltZW91dENoZWNrKCkKICAgICBza2lwVGltZW91dC5saW5rKHRoaXMp
OwogfQogI2Vsc2UKKyNpZiBDUFUoU0g0KQordm9pZCBKSVQ6OmVtaXRUaW1lb3V0Q2hlY2soKQor
eworICAgIG1fYXNzZW1ibGVyLmR0KHRpbWVvdXRDaGVja1JlZ2lzdGVyKTsKKworICAgIEp1bXAg
c2tpcFRpbWVvdXQgPSBKdW1wKG1fYXNzZW1ibGVyLmpuZSgpKTsKKyAgICBtX2Fzc2VtYmxlci5u
b3AoKTsKKyAgICBtX2Fzc2VtYmxlci5ub3AoKTsKKyAgICBKSVRTdHViQ2FsbCh0aGlzLCBjdGlf
dGltZW91dF9jaGVjaykuY2FsbCh0aW1lb3V0Q2hlY2tSZWdpc3Rlcik7CisgICAgc2tpcFRpbWVv
dXQubGluayh0aGlzKTsKKworICAgIGtpbGxMYXN0UmVzdWx0UmVnaXN0ZXIoKTsKK30KKyNlbHNl
CiB2b2lkIEpJVDo6ZW1pdFRpbWVvdXRDaGVjaygpCiB7CiAgICAgSnVtcCBza2lwVGltZW91dCA9
IGJyYW5jaFN1YjMyKE5vblplcm8sIEltbTMyKDEpLCB0aW1lb3V0Q2hlY2tSZWdpc3Rlcik7CkBA
IC0xMTMsNiArMTI3LDcgQEAgdm9pZCBKSVQ6OmVtaXRUaW1lb3V0Q2hlY2soKQogICAgIGtpbGxM
YXN0UmVzdWx0UmVnaXN0ZXIoKTsKIH0KICNlbmRpZgorI2VuZGlmCiAKICNkZWZpbmUgTkVYVF9P
UENPREUobmFtZSkgXAogICAgIG1fYnl0ZWNvZGVPZmZzZXQgKz0gT1BDT0RFX0xFTkdUSChuYW1l
KTsgXApkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oIGIvSmF2YVNjcmlwdENv
cmUvaml0L0pJVC5oCmluZGV4IDM5M2M3NzEuLjBlYWU5NWYgMTAwNjQ0Ci0tLSBhL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVQuaAorKysgYi9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKQEAgLTQ2Nywx
MSArNDY3LDI2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBKdW1wIGVtaXRKdW1wSWZKU0Nl
bGwoUmVnaXN0ZXJJRCk7CiAgICAgICAgIEp1bXAgZW1pdEp1bXBJZkJvdGhKU0NlbGxzKFJlZ2lz
dGVySUQsIFJlZ2lzdGVySUQsIFJlZ2lzdGVySUQpOwogICAgICAgICB2b2lkIGVtaXRKdW1wU2xv
d0Nhc2VJZkpTQ2VsbChSZWdpc3RlcklEKTsKKyNpZiBDUFUoU0g0KQorICAgICAgICBKdW1wIGVt
aXRKdW1wSWZOb3RKU0NlbGwoUmVnaXN0ZXJJRCwgYm9vbCBuZWVkQ29uc3RhbnQgPSB0cnVlKTsK
KyNlbHNlCiAgICAgICAgIEp1bXAgZW1pdEp1bXBJZk5vdEpTQ2VsbChSZWdpc3RlcklEKTsKKyNl
bmRpZgogICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChSZWdpc3RlcklE
KTsKICAgICAgICAgdm9pZCBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoUmVnaXN0ZXJJRCwg
aW50IFZSZWcpOwogI2lmIFVTRShKU1ZBTFVFNjQpCiAjZWxzZQorI2lmIENQVShTSDQpCisgICAg
ICAgIEpJVDo6SnVtcCBlbWl0SnVtcElmSW1tZWRpYXRlTnVtYmVyKFJlZ2lzdGVySUQgcmVnLCBi
b29sIG5lZWRDb25zdGFudCA9IHRydWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBl
bWl0SnVtcElmSW1tZWRpYXRlSW50ZWdlcihyZWcsIG5lZWRDb25zdGFudCk7CisgICAgICAgIH0K
KworICAgICAgICBKSVQ6Okp1bXAgZW1pdEp1bXBJZk5vdEltbWVkaWF0ZU51bWJlcihSZWdpc3Rl
cklEIHJlZywgYm9vbCBuZWVkQ29uc3RhbnQgPSB0cnVlKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gZW1pdEp1bXBJZk5vdEltbWVkaWF0ZUludGVnZXIocmVnLCBuZWVkQ29uc3RhbnQp
OworICAgICAgICB9CisjZWxzZQogICAgICAgICBKSVQ6Okp1bXAgZW1pdEp1bXBJZkltbWVkaWF0
ZU51bWJlcihSZWdpc3RlcklEIHJlZykKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIGVt
aXRKdW1wSWZJbW1lZGlhdGVJbnRlZ2VyKHJlZyk7CkBAIC00ODIsOSArNDk3LDE2IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuIGVtaXRKdW1wSWZOb3RJbW1lZGlhdGVJbnRl
Z2VyKHJlZyk7CiAgICAgICAgIH0KICNlbmRpZgorI2VuZGlmCisjaWYgQ1BVKFNINCkKKyAgICAg
ICAgSklUOjpKdW1wIGVtaXRKdW1wSWZJbW1lZGlhdGVJbnRlZ2VyKFJlZ2lzdGVySUQsIGJvb2wg
bmVlZENvbnN0YW50ID0gdHJ1ZSk7CisgICAgICAgIEpJVDo6SnVtcCBlbWl0SnVtcElmTm90SW1t
ZWRpYXRlSW50ZWdlcihSZWdpc3RlcklELCBib29sIG5lZWRDb25zdGFudCA9IHRydWUpOworICAg
ICAgICBKSVQ6Okp1bXAgZW1pdEp1bXBJZk5vdEltbWVkaWF0ZUludGVnZXJzKFJlZ2lzdGVySUQs
IFJlZ2lzdGVySUQsIFJlZ2lzdGVySUQsIGJvb2wgbmVlZENvbnN0YW50ID0gdHJ1ZSk7CisjZWxz
ZQogICAgICAgICBKSVQ6Okp1bXAgZW1pdEp1bXBJZkltbWVkaWF0ZUludGVnZXIoUmVnaXN0ZXJJ
RCk7CiAgICAgICAgIEpJVDo6SnVtcCBlbWl0SnVtcElmTm90SW1tZWRpYXRlSW50ZWdlcihSZWdp
c3RlcklEKTsKICAgICAgICAgSklUOjpKdW1wIGVtaXRKdW1wSWZOb3RJbW1lZGlhdGVJbnRlZ2Vy
cyhSZWdpc3RlcklELCBSZWdpc3RlcklELCBSZWdpc3RlcklEKTsKKyNlbmRpZgogICAgICAgICB2
b2lkIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbWVkaWF0ZUludGVnZXIoUmVnaXN0ZXJJRCk7CiAg
ICAgICAgIHZvaWQgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tZWRpYXRlTnVtYmVyKFJlZ2lzdGVy
SUQpOwogICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbWVkaWF0ZUludGVnZXJz
KFJlZ2lzdGVySUQsIFJlZ2lzdGVySUQsIFJlZ2lzdGVySUQpOwpAQCAtNjIxLDYgKzY0Myw0OSBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgLy8gc2VxdWVuY2VQdXRCeUlkCiAgICAgICAgIHN0
YXRpYyBjb25zdCBpbnQgc2VxdWVuY2VQdXRCeUlkSW5zdHJ1Y3Rpb25TcGFjZSA9IDI4OwogICAg
ICAgICBzdGF0aWMgY29uc3QgaW50IHNlcXVlbmNlUHV0QnlJZENvbnN0YW50U3BhY2UgPSAzOwor
I2VsaWYgQ1BVKFNINCkKKyAgICAgICAvLyBUaGVzZSBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgdmFs
dWUgYXJlIHVzZWQgdG8gZW5hYmxlIHBhdGNoaW5nIC0gc2VlIGNvbW1lbnQgb24gb3BfcHV0X2J5
X2lkLgorICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0UHV0QnlJZEV4dGVybmFs
TG9hZCA9IDE4OworICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0R2V0QnlJZFN0
cnVjdHVyZSA9IDY7CisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hMZW5ndGhQdXRCeUlk
RXh0ZXJuYWxMb2FkID0gNjsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaExlbmd0aFB1
dEJ5SWRFeHRlcm5hbExvYWRQcmVmaXggPSAwOworICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBh
dGNoT2Zmc2V0UHV0QnlJZFByb3BlcnR5TWFwT2Zmc2V0ID0gMjQ7CisgICAgICAgIHN0YXRpYyBj
b25zdCBpbnQgcGF0Y2hPZmZzZXRQdXRCeUlkU3RydWN0dXJlID0gNjsKKyAgICAgICAgLy8gVGhl
c2UgYXJjaGl0ZWN0dXJlIHNwZWNpZmljIHZhbHVlIGFyZSB1c2VkIHRvIGVuYWJsZSBwYXRjaGlu
ZyAtIHNlZSBjb21tZW50IG9uIG9wX2dldF9ieV9pZC4KKyAgICAgICAgc3RhdGljIGNvbnN0IGlu
dCBwYXRjaE9mZnNldEdldEJ5SWRCcmFuY2hUb1Nsb3dDYXNlID0gMTA7CisgICAgICAgIHN0YXRp
YyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRHZXRCeUlkRXh0ZXJuYWxMb2FkID0gMTg7CisgICAgICAg
IHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hMZW5ndGhHZXRCeUlkRXh0ZXJuYWxMb2FkID0gNjsKKyAg
ICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaExlbmd0aEdldEJ5SWRFeHRlcm5hbExvYWRQcmVm
aXggPSAwOworICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0R2V0QnlJZFByb3Bl
cnR5TWFwT2Zmc2V0ID0gMjQ7CisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRH
ZXRCeUlkUHV0UmVzdWx0ID0gMzA7CisKKyAgICAgICAgLy8gc2VxdWVuY2VPcENhbGwKKyAgICAg
ICAgc3RhdGljIGNvbnN0IGludCBzZXF1ZW5jZU9wQ2FsbEluc3RydWN0aW9uU3BhY2UgPSAxMjsK
KyAgICAgICAgc3RhdGljIGNvbnN0IGludCBzZXF1ZW5jZU9wQ2FsbENvbnN0YW50U3BhY2UgPSAy
OworICAgICAgICAvLyBzZXF1ZW5jZU1ldGhvZENoZWNrCisgICAgICAgIHN0YXRpYyBjb25zdCBp
bnQgc2VxdWVuY2VNZXRob2RDaGVja0luc3RydWN0aW9uU3BhY2UgPSA0MDsKKyAgICAgICAgc3Rh
dGljIGNvbnN0IGludCBzZXF1ZW5jZU1ldGhvZENoZWNrQ29uc3RhbnRTcGFjZSA9IDY7CisgICAg
ICAgIC8vIHNlcXVlbmNlR2V0QnlJZEhvdFBhdGgKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBz
ZXF1ZW5jZUdldEJ5SWRIb3RQYXRoSW5zdHJ1Y3Rpb25TcGFjZSA9IDMwOworICAgICAgICBzdGF0
aWMgY29uc3QgaW50IHNlcXVlbmNlR2V0QnlJZEhvdFBhdGhDb25zdGFudFNwYWNlID0gNDsKKyAg
ICAgICAgLy8gc2VxdWVuY2VHZXRCeUlkU2xvd0Nhc2UKKyAgICAgICAgc3RhdGljIGNvbnN0IGlu
dCBzZXF1ZW5jZUdldEJ5SWRTbG93Q2FzZUluc3RydWN0aW9uU3BhY2UgPSAxODsKKyAgICAgICAg
c3RhdGljIGNvbnN0IGludCBzZXF1ZW5jZUdldEJ5SWRTbG93Q2FzZUNvbnN0YW50U3BhY2UgPSAy
OworICAgICAgICAvLyBzZXF1ZW5jZVB1dEJ5SWQKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBz
ZXF1ZW5jZVB1dEJ5SWRJbnN0cnVjdGlvblNwYWNlID0gMzA7CisgICAgICAgIHN0YXRpYyBjb25z
dCBpbnQgc2VxdWVuY2VQdXRCeUlkQ29uc3RhbnRTcGFjZSA9IDQ7CisKKworI2lmIEVOQUJMRShP
UENPREVfU0FNUExJTkcpCisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRHZXRC
eUlkU2xvd0Nhc2VDYWxsID0gMDsgLy8gRklNWEUKKyNlbHNlCisgICAgICAgIHN0YXRpYyBjb25z
dCBpbnQgcGF0Y2hPZmZzZXRHZXRCeUlkU2xvd0Nhc2VDYWxsID0gMTY7CisjZW5kaWYKKyAgICAg
ICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldE9wQ2FsbENvbXBhcmVUb0p1bXAgPSA0Owor
CisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRNZXRob2RDaGVja1Byb3RvT2Jq
ID0gMTI7CisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRNZXRob2RDaGVja1By
b3RvU3RydWN0ID0gMjA7CisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRNZXRo
b2RDaGVja1B1dEZ1bmN0aW9uID0gMzI7CiAjZWxpZiBDUFUoTUlQUykKICNpZiBXVEZfTUlQU19J
U0EoMSkKICAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldFB1dEJ5SWRTdHJ1Y3R1
cmUgPSAxNjsKQEAgLTY2OSw2ICs3MzQsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICNpZiAoZGVmaW5l
ZChBU1NFTUJMRVJfSEFTX0NPTlNUQU5UX1BPT0wpICYmIEFTU0VNQkxFUl9IQVNfQ09OU1RBTlRf
UE9PTCkKICNkZWZpbmUgQkVHSU5fVU5JTlRFUlJVUFRFRF9TRVFVRU5DRShuYW1lKSBkbyB7IGJl
Z2luVW5pbnRlcnJ1cHRlZFNlcXVlbmNlKG5hbWUgIyMgSW5zdHJ1Y3Rpb25TcGFjZSwgbmFtZSAj
IyBDb25zdGFudFNwYWNlKTsgfSB3aGlsZSAoZmFsc2UpCiAjZGVmaW5lIEVORF9VTklOVEVSUlVQ
VEVEX1NFUVVFTkNFKG5hbWUpIGRvIHsgZW5kVW5pbnRlcnJ1cHRlZFNlcXVlbmNlKG5hbWUgIyMg
SW5zdHJ1Y3Rpb25TcGFjZSwgbmFtZSAjIyBDb25zdGFudFNwYWNlKTsgfSB3aGlsZSAoZmFsc2Up
CisjaWYgQ1BVKFNINCkKKyNkZWZpbmUgRU5EX1VOSU5URVJSVVBURURfU0VRVUVOQ0VTKG5hbWUs
IGV4dHJhSSwgZXh0cmFDKSBlbmRVbmludGVycnVwdGVkU2VxdWVuY2UobmFtZSAjIyBJbnN0cnVj
dGlvblNwYWNlICsgZXh0cmFJLCBuYW1lICMjIENvbnN0YW50U3BhY2UgKyBleHRyYUMpCisjZW5k
aWYKIAogICAgICAgICB2b2lkIGJlZ2luVW5pbnRlcnJ1cHRlZFNlcXVlbmNlKGludCwgaW50KTsK
ICAgICAgICAgdm9pZCBlbmRVbmludGVycnVwdGVkU2VxdWVuY2UoaW50LCBpbnQpOwpkaWZmIC0t
Z2l0IGEvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWNfc2g0LmNwcCBiL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRBcml0aG1ldGljX3NoNC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uYTUzMDY5NgotLS0gL2Rldi9udWxsCisrKyBiL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRBcml0aG1ldGljX3NoNC5jcHAKQEAgLTAsMCArMSwxMjgwIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA5LTIwMTAgU1RNaWNyb2VsZWN0cm9uaWNzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogV3JpdHRlbiBieSBUaG91cmF5YSBBbmRvbHNpICh0aG91cmF5YS5hbmRvbHNpQHN0LmNv
bSkuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIAorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSklULmgiCisKK2V4dGVybiB1bnNpZ25lZCBpbnQg
X19mcHNjcl92YWx1ZXNbMl07CisKKyNpZiBFTkFCTEUoSklUKQorCisjaW5jbHVkZSAiQ29kZUJs
b2NrLmgiCisjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKKyNpbmNsdWRlICJKSVRJbmxpbmVNZXRo
b2RzLmgiCisjaW5jbHVkZSAiSklUU3R1YkNhbGwuaCIKKyNpbmNsdWRlICJKSVRTdHVicy5oIgor
I2luY2x1ZGUgIkpTQXJyYXkuaCIKKyNpbmNsdWRlICJKU0Z1bmN0aW9uLmgiCisjaW5jbHVkZSAi
UmVzdWx0VHlwZS5oIgorI2luY2x1ZGUgIlNhbXBsaW5nVG9vbC5oIgorCisjaWZuZGVmIE5ERUJV
RworI2luY2x1ZGUgPHN0ZGlvLmg+CisjZW5kaWYKKworI2RlZmluZSBfXyBtX2Fzc2VtYmxlci4K
KwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKKworbmFtZXNwYWNlIEpTQyB7CisKKyNpZiAhRU5BQkxF
KEpJVF9PUFRJTUlaRV9BUklUSE1FVElDKQordm9pZCBKSVQ6OmVtaXRfb3BfbXVsKEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgdW5zaWduZWQgcmVzdWx0ID0gY3VycmVu
dEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICB1bnNpZ25lZCBvcDEgPSBjdXJyZW50SW5z
dHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworICAgIHVuc2lnbmVkIG9wMiA9IGN1cnJlbnRJbnN0cnVj
dGlvblszXS51Lm9wZXJhbmQ7CisKKyAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlf
b3BfbXVsKTsKKyAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChvcDEsIHJlZ1QwKTsKKyAgICBzdHVi
Q2FsbC5hZGRBcmd1bWVudChvcDIsIHJlZ1QwKTsKKyAgICBzdHViQ2FsbC5jYWxsKHJlc3VsdCk7
Cit9CisKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9tdWwoSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJikKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30K
Kwordm9pZCBKSVQ6OmVtaXRfb3BfYWRkKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
Cit7CisgICAgdW5zaWduZWQgcmVzdWx0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFu
ZDsKKyAgICB1bnNpZ25lZCBvcDEgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwor
ICAgIHVuc2lnbmVkIG9wMiA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CisgICAg
CisgICAgT3BlcmFuZFR5cGVzIHR5cGVzID0gT3BlcmFuZFR5cGVzOjpmcm9tSW50KGN1cnJlbnRJ
bnN0cnVjdGlvbls0XS51Lm9wZXJhbmQpOworICAgIAorICAgIGlmICghdHlwZXMuZmlyc3QoKS5t
aWdodEJlTnVtYmVyKCkgfHwgIXR5cGVzLnNlY29uZCgpLm1pZ2h0QmVOdW1iZXIoKSkgeworICAg
ICAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3BfYWRkKTsKKyAgICAgICAgc3R1
YkNhbGwuYWRkQXJndW1lbnQob3AxLCByZWdUMCk7CisgICAgICAgIHN0dWJDYWxsLmFkZEFyZ3Vt
ZW50KG9wMiwgcmVnVDApOworICAgICAgICBzdHViQ2FsbC5jYWxsKHJlc3VsdCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9IAorICAgIAorICAgIEp1bXAgbm90SW1tOworICAgIAorICAgIGlmIChp
c09wZXJhbmRDb25zdGFudEltbWVkaWF0ZUludChvcDEpKSB7CisgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIob3AyLCByZWdUMSk7CisgICAgICAgIAorICAgICAgICBtX2Fzc2VtYmxlci50
ZXN0bF9pMzJyKChpbnQpSlNJbW1lZGlhdGU6OlRhZ1R5cGVOdW1iZXIsIHJlZ1QxKTsKKyAgICAg
ICAgbm90SW1tID0gSnVtcChtX2Fzc2VtYmxlci5qZSgpKTsKKyAgICAgICAgbV9hc3NlbWJsZXIu
bm9wKCk7CisgICAgICAgIG1fYXNzZW1ibGVyLm5vcCgpOworIAorICAgICAgICBtb3ZlKEltbTMy
KGdldENvbnN0YW50T3BlcmFuZEltbWVkaWF0ZUludChvcDEpIDw8IEpTSW1tZWRpYXRlOjpJbnRl
Z2VyUGF5bG9hZFNoaWZ0KSwgcmVnVDApOworICAgIH0gZWxzZSBpZiAoaXNPcGVyYW5kQ29uc3Rh
bnRJbW1lZGlhdGVJbnQob3AyKSkgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9w
MSwgcmVnVDEpOworICAgICAgICBtX2Fzc2VtYmxlci50ZXN0bF9pMzJyKChpbnQpSlNJbW1lZGlh
dGU6OlRhZ1R5cGVOdW1iZXIsIHJlZ1QxKTsKKyAgICAgICAgbm90SW1tID0gSnVtcChtX2Fzc2Vt
Ymxlci5qZSgpKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubm9wKCk7CisgICAgICAgIG1fYXNzZW1i
bGVyLm5vcCgpOworCisgICAgICAgIG1vdmUoSW1tMzIoZ2V0Q29uc3RhbnRPcGVyYW5kSW1tZWRp
YXRlSW50KG9wMikgPDwgSlNJbW1lZGlhdGU6OkludGVnZXJQYXlsb2FkU2hpZnQpLCByZWdUMCk7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMob3AxLCByZWdU
MCwgb3AyLCByZWdUMSk7CisgICAgICAgCisgICAgICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKKyAg
ICAgICAgYW5kUHRyKHJlZ1QxLCByZWdUMik7CisgICAgICAgIG1fYXNzZW1ibGVyLnRlc3RsX2kz
MnIoKGludClKU0ltbWVkaWF0ZTo6VGFnVHlwZU51bWJlciwgcmVnVDIpOworICAgICAgICBub3RJ
bW0gPSBKdW1wKG1fYXNzZW1ibGVyLmplKCkpOworICAgICAgICBtX2Fzc2VtYmxlci5ub3AoKTsK
KyAgICAgICAgbV9hc3NlbWJsZXIubm9wKCk7CisgICAgICAgIAorICAgICAgICBtX2Fzc2VtYmxl
ci5hZGRsX2k4cigtMSwgcmVnVDApOworICAgIH0KKyAgICAgIAorICAgIG1fYXNzZW1ibGVyLmFk
ZHZsX3JyKHJlZ1QxLCByZWdUMCk7CisKKyAgICBKdW1wIG92ZXJmbG93ID0gSnVtcChtX2Fzc2Vt
Ymxlci5qbmUoKSk7CisgICAgbV9hc3NlbWJsZXIubm9wKCk7CisgICAgbV9hc3NlbWJsZXIubm9w
KCk7CisKKyAgICBub3RJbW0ubGluayh0aGlzKTsKKyAgIAorICAgIEpJVFN0dWJDYWxsIHN0dWJD
YWxsKHRoaXMsIGN0aV9vcF9hZGQpOworCisgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW1tZWRp
YXRlSW50KG9wMSkpIHsgICAgICAgIAorICAgICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChvcDEs
IHJlZ1QwKTsKKyAgICAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQocmVnVDEpOworICAgIH0gZWxz
ZSBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbW1lZGlhdGVJbnQob3AyKSkgeworICAgICAgICBzdHVi
Q2FsbC5hZGRBcmd1bWVudChyZWdUMSk7CisgICAgICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KG9w
MiwgcmVnVDApOworICAgIH0gZWxzZSB7CisgICAgICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KG9w
MSwgcmVnVDApOworICAgICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChyZWdUMSk7CisgICAgfQor
CisgICAgc3R1YkNhbGwuY2FsbCgpOworCisgICAgb3ZlcmZsb3cubGluayh0aGlzKTsKKyAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCk7Cit9Cit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
YWRkKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3Zv
aWQgSklUOjplbWl0X29wX3N1YihJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQorewor
ICAgIHVuc2lnbmVkIHJlc3VsdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Cisg
ICAgdW5zaWduZWQgb3AxID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKyAgICB1
bnNpZ25lZCBvcDIgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworICAgIAorICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKG9wMSwgcmVnVDAsIG9wMiwgcmVnVDEpOworICAgIG1v
dmUocmVnVDAsIHJlZ1QyKTsKKyAgICBtb3ZlKHJlZ1QwLCByZWdUMyk7CisgICAgYW5kUHRyKHJl
Z1QxLCByZWdUMik7CisgICAgCisgICAgbV9hc3NlbWJsZXIudGVzdGxfaTMycigoaW50KUpTSW1t
ZWRpYXRlOjpUYWdUeXBlTnVtYmVyLCByZWdUMik7CisgICAgSnVtcCBub3RJbW0gPSBKdW1wKG1f
YXNzZW1ibGVyLmplKCkpOworICAgIG1fYXNzZW1ibGVyLm5vcCgpOworICAgIG1fYXNzZW1ibGVy
Lm5vcCgpOworCisKKyAgICBtX2Fzc2VtYmxlci5zdWJ2bF9ycihyZWdUMSwgcmVnVDApOworICAg
IGVtaXRGYXN0QXJpdGhSZVRhZ0ltbWVkaWF0ZShyZWdUMCwgcmVnVDApOworICAgIAorICAgIEp1
bXAgb3ZlcmZsb3cgPSBKdW1wKG1fYXNzZW1ibGVyLmpuZSgpKTsKKyAgICBtX2Fzc2VtYmxlci5u
b3AoKTsKKyAgICBtX2Fzc2VtYmxlci5ub3AoKTsKKyAgICAKKyAgICBub3RJbW0ubGluayh0aGlz
KTsKKyAgICAKKyAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3Bfc3ViKTsKKyAg
ICBzdHViQ2FsbC5hZGRBcmd1bWVudChyZWdUMyk7CisgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQo
cmVnVDEpOworICAgIHN0dWJDYWxsLmNhbGwoKTsKKyAgICBvdmVyZmxvdy5saW5rKHRoaXMpOwor
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0KTsKK30KKwordm9pZCBKSVQ6OmVtaXRT
bG93X29wX3N1YihJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
fQorCisjZWxzZQordm9pZCBKSVQ6OmVtaXRfb3BfbXVsKEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCit7CisgICAgLyogaW4gdGhlIHNoNCBpbnN0cnVjdGlvbiBzZXQgbXVsIGRvZXMn
bnQgZGV0ZWN0IG92ZXJmbG93ICovCisgICAgdW5zaWduZWQgcmVzdWx0ID0gY3VycmVudEluc3Ry
dWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICB1bnNpZ25lZCBvcDEgPSBjdXJyZW50SW5zdHJ1Y3Rp
b25bMl0udS5vcGVyYW5kOworICAgIHVuc2lnbmVkIG9wMiA9IGN1cnJlbnRJbnN0cnVjdGlvblsz
XS51Lm9wZXJhbmQ7CisgICAgCisgICAgY29tcGlsZUJpbmFyeUFyaXRoT3Aob3BfbXVsLCByZXN1
bHQsIG9wMSwgb3AyLCBPcGVyYW5kVHlwZXM6OmZyb21JbnQoY3VycmVudEluc3RydWN0aW9uWzRd
LnUub3BlcmFuZCkpOworfQorCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbXVsKEluc3RydWN0aW9u
KiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpCit7CisgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7Cit9CisKK3ZvaWQgSklUOjpjb21waWxlQmluYXJ5QXJpdGhPcChPcGNvZGVJRCBv
cGNvZGVJRCwgdW5zaWduZWQgZHN0LCB1bnNpZ25lZCBzcmMxLCB1bnNpZ25lZCBzcmMyLCBPcGVy
YW5kVHlwZXMgdHlwZXMpCit7CisKKyAgICBTdHJ1Y3R1cmUqIG51bWJlclN0cnVjdHVyZSA9IG1f
Z2xvYmFsRGF0YS0+bnVtYmVyU3RydWN0dXJlLmdldCgpOworICAgIEp1bXAgd2FzSlNOdW1iZXJD
ZWxsOworICAgIEp1bXAgbm90bnVtYjI7CisgICAgSnVtcCBub3RudW1iMlM7CisgICAgCisgICAg
SnVtcCBub3RudW1iMTsKKyAgICBKdW1wIG5vdG51bWIxUzsKKyAgICAKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVycyhzcmMxLCByZWdUMCwgc3JjMiwgcmVnVDEpOworICAgIAorICAgIGlmICh0
eXBlcy5zZWNvbmQoKS5pc1JldXNhYmxlKCkgJiYgc3VwcG9ydHNGbG9hdGluZ1BvaW50KCkpIHsK
KyAgICAgICAgQVNTRVJUKHR5cGVzLnNlY29uZCgpLm1pZ2h0QmVOdW1iZXIoKSk7CisKKyAgICAg
ICAgLy8gQ2hlY2sgb3AyIGlzIGEgbnVtYmVyCisgICAgICAgIG1fYXNzZW1ibGVyLkxvYWRDb25z
dGFudCgoaW50KUpTSW1tZWRpYXRlOjpUYWdUeXBlTnVtYmVyLCByZWdUMyk7CisgICAgICAgIG1f
YXNzZW1ibGVyLnRlc3RsX3JyKHJlZ1QzLCByZWdUMSk7CisgICAgICAgIEp1bXAgb3AyaW1tID0g
SnVtcChtX2Fzc2VtYmxlci5qbmUoKSk7CisgICAgICAgIG1fYXNzZW1ibGVyLm5vcCgpOworICAg
ICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKKworICAgICAgICBpZiAoIXR5cGVzLnNlY29uZCgpLmRl
ZmluaXRlbHlJc051bWJlcigpKSB7CisgICAgICAgICAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tu
b3duTm90SW1tZWRpYXRlKHNyYzIpKSB7CisgICAgICAgICAgICAgICAgbV9hc3NlbWJsZXIudGVz
dGxfaTMycihKU0ltbWVkaWF0ZTo6VGFnTWFzaywgcmVnVDEpOworICAgICAgICAgICAgICAgIG5v
dG51bWIyID0gSnVtcChtX2Fzc2VtYmxlci5qbmUoKSk7CisgICAgICAgICAgICAgICAgbV9hc3Nl
bWJsZXIubm9wKCk7CisgICAgICAgICAgICAgICAgbV9hc3NlbWJsZXIubm9wKCk7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmNtcGxfaW0oKGludCludW1iZXJTdHJ1
Y3R1cmUsIE9CSkVDVF9PRkZTRVRPRihKU0NlbGwsIG1fc3RydWN0dXJlKSwgcmVnVDEsIE5vdEVx
dWFsKTsKKyAgICAgICAgICAgIG5vdG51bWIyUyA9IEp1bXAobV9hc3NlbWJsZXIuam5lKCkpOwor
ICAgICAgICAgICAgbV9hc3NlbWJsZXIubm9wKCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5u
b3AoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgbV9hc3NlbWJsZXIuTG9hZENvbnN0
YW50KF9fZnBzY3JfdmFsdWVzWzFdLCByZWdUMik7CisgICAgICAgIG1fYXNzZW1ibGVyLmxkc2Zw
c2NyKHJlZ1QyKTsKKworICAgICAgICAvLyAoMSkgSW4gdGhpcyBjYXNlIHNyYzIgaXMgYSByZXVz
YWJsZSBudW1iZXIgY2VsbC4KKyAgICAgICAgLy8gICAgIFNsb3cgY2FzZSBpZiBzcmMxIGlzIG5v
dCBhIG51bWJlciB0eXBlLgorICAgICAgICAKKyAgICAgICAgbV9hc3NlbWJsZXIudGVzdGxfcnIo
cmVnVDMsIHJlZ1QwKTsKKyAgICAgICAgSnVtcCBvcDFpbW0gPSBKdW1wKG1fYXNzZW1ibGVyLmpu
ZSgpKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubm9wKCk7CisgICAgICAgIG1fYXNzZW1ibGVyLm5v
cCgpOworCisgICAgICAgICBpZiAoIXR5cGVzLmZpcnN0KCkuZGVmaW5pdGVseUlzTnVtYmVyKCkp
IHsKKyAgICAgICAgICAgIGlmICghbV9jb2RlQmxvY2stPmlzS25vd25Ob3RJbW1lZGlhdGUoc3Jj
MSkpIHsKKyAgICAgICAgICAgICAgICBtX2Fzc2VtYmxlci50ZXN0bF9pMzJyKEpTSW1tZWRpYXRl
OjpUYWdNYXNrLCByZWdUMCk7CisgICAgICAgICAgICAgICAgbm90bnVtYjEgPSBKdW1wKG1fYXNz
ZW1ibGVyLmpuZSgpKTsKKyAgICAgICAgICAgICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKKyAgICAg
ICAgICAgICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgbV9hc3NlbWJsZXIuY21wbF9pbSgoaW50KW51bWJlclN0cnVjdHVyZSwgT0JKRUNUX09GRlNF
VE9GKEpTQ2VsbCwgbV9zdHJ1Y3R1cmUpLCByZWdUMCwgTm90RXF1YWwpOworICAgICAgICAgICAg
bm90bnVtYjFTID0gSnVtcChtX2Fzc2VtYmxlci5qbmUoKSk7CisgICAgICAgICAgICBtX2Fzc2Vt
Ymxlci5ub3AoKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLm5vcCgpOworICAgICAgICB9Cisg
ICAgCisKKyAgICAgICAgLy8gKDFhKSBpZiB3ZSBnZXQgaGVyZSwgc3JjMSBpcyBhbHNvIGEgbnVt
YmVyIGNlbGwKKworICAgICAgICBtX2Fzc2VtYmxlci5Mb2FkQ29uc3RhbnQoT0JKRUNUX09GRlNF
VE9GKEpTTnVtYmVyQ2VsbCwgbV92YWx1ZSksIHJlZ1QzKTsKKyAgICAgICAgCisgICAgICAgIG1f
YXNzZW1ibGVyLmZtb3ZzX3JlYWRfcjByKHJlZ1QzLCBTSDQ6OkZSMSk7CisgICAgICAgIG1fYXNz
ZW1ibGVyLmFkZGxfaThyKDQsIHJlZ1QzKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuZm1vdnNfcmVh
ZF9yMHIocmVnVDMsIFNINDo6RlIwKTsKKyAgICAgICAgCisgICAgICAgIAorICAgICAgICBKdW1w
IGxvYWRlZERvdWJsZSA9IGp1bXAoKTsKKyAgICAgICAgLy8gKDFiKSBpZiB3ZSBnZXQgaGVyZSwg
c3JjMSBpcyBhbiBpbW1lZGlhdGUKKyAgICAgICAgb3AxaW1tLmxpbmsodGhpcyk7CisgICAgICAg
IAorICAgICAgICBtX2Fzc2VtYmxlci5Mb2FkQ29uc3RhbnQoT0JKRUNUX09GRlNFVE9GKEpTTnVt
YmVyQ2VsbCwgbV92YWx1ZSkgKyA0LCByZWdUMyk7CisgICAgICAgIAorICAgICAgICBlbWl0RmFz
dEFyaXRoSW1tVG9JbnQocmVnVDApOworICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShyZWdU
MCwgZnBSZWdUMCk7CisgICAgICAgIC8vICgxYykgCisgICAgICAgIGxvYWRlZERvdWJsZS5saW5r
KHRoaXMpOworCisgICAgICAgIG1fYXNzZW1ibGVyLmFkZGxfcnIocmVnVDEsIHJlZ1QzKTsKKyAg
ICAgICAgbV9hc3NlbWJsZXIuZm1vdnNfcmVhZF9ybShyZWdUMywgU0g0OjpGUjIpOworICAgICAg
ICBtX2Fzc2VtYmxlci5hZGRsX2k4cigtNCwgcmVnVDMpOworICAgICAgICBtX2Fzc2VtYmxlci5m
bW92c19yZWFkX3JtKHJlZ1QzLCBTSDQ6OkZSMyk7CisgICAgICAgIAorICAgICAgICBpZiAob3Bj
b2RlSUQgPT0gb3BfYWRkKSB7CisgICAgICAgICAgICBhZGREb3VibGUoZnBSZWdUMSwgZnBSZWdU
MCk7CisgICAgICAgIH0gZWxzZSBpZiAob3Bjb2RlSUQgPT0gb3Bfc3ViKSB7CisgICAgICAgICAg
ICBzdWJEb3VibGUoZnBSZWdUMSwgZnBSZWdUMCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICBBU1NFUlQob3Bjb2RlSUQgPT0gb3BfbXVsKTsKKyAgICAgICAgICAgIG11bERvdWJsZShm
cFJlZ1QxLCBmcFJlZ1QwKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFN0b3JlIHRoZSByZXN1
bHQgdG8gdGhlIEpTTnVtYmVyQ2VsbCBhbmQganVtcC4KKyAgICAgICAgbV9hc3NlbWJsZXIuZm1v
dnNfd3JpdGVfcm0oU0g0OjpGUjEsIHJlZ1QzKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuYWRkbF9p
OHIoNCwgcmVnVDMpOworICAgICAgICBtX2Fzc2VtYmxlci5mbW92c193cml0ZV9ybShTSDQ6OkZS
MCwgcmVnVDMpOworICAgICAgICBtb3ZlKHJlZ1QxLCByZWdUMCk7CisgICAgCisgICAgICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAKKyAgICAgICAgd2FzSlNOdW1iZXJDZWxs
ID0ganVtcCgpOworCisgICAgICAgIC8vICgyKSBUaGlzIGhhbmRsZXMgY2FzZXMgd2hlcmUgc3Jj
MiBpcyBhbiBpbW1lZGlhdGUgbnVtYmVyLgorICAgICAgICAvLyAgICAgVHdvIHNsb3cgY2FzZXMg
LSBlaXRoZXIgc3JjMSBpc24ndCBhbiBpbW1lZGlhdGUsIG9yIHRoZSBzdWJ0cmFjdCBvdmVyZmxv
d3MuCisgICAgICAgIG9wMmltbS5saW5rKHRoaXMpOworICAgIH0gZWxzZSBpZiAodHlwZXMuZmly
c3QoKS5pc1JldXNhYmxlKCkgJiYgc3VwcG9ydHNGbG9hdGluZ1BvaW50KCkpIHsKKyAgICAgICAg
QVNTRVJUKHR5cGVzLmZpcnN0KCkubWlnaHRCZU51bWJlcigpKTsKKworICAgICAgICAvLyBDaGVj
ayBvcDEgaXMgYSBudW1iZXIKKyAgICAgICAgCisgICAgICAgIG1fYXNzZW1ibGVyLkxvYWRDb25z
dGFudCgoaW50KUpTSW1tZWRpYXRlOjpUYWdUeXBlTnVtYmVyLCByZWdUMyk7CisgICAgICAgIG1f
YXNzZW1ibGVyLnRlc3RsX3JyKHJlZ1QzLCByZWdUMCk7CisgICAgICAgIEp1bXAgb3AxaW1tID0g
SnVtcChtX2Fzc2VtYmxlci5qbmUoKSk7CisgICAgICAgIG1fYXNzZW1ibGVyLm5vcCgpOworICAg
ICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKKyAgICAKKyAgICAgICAgaWYgKCF0eXBlcy5maXJzdCgp
LmRlZmluaXRlbHlJc051bWJlcigpKSB7CisgICAgICAgICAgICBpZiAoIW1fY29kZUJsb2NrLT5p
c0tub3duTm90SW1tZWRpYXRlKHNyYzEpKSB7CisgICAgICAgICAgICAgICAgbV9hc3NlbWJsZXIu
dGVzdGxfaTMycihKU0ltbWVkaWF0ZTo6VGFnTWFzaywgcmVnVDApOworICAgICAgICAgICAgICAg
IG5vdG51bWIxID0gSnVtcChtX2Fzc2VtYmxlci5qbmUoKSk7CisgICAgICAgICAgICAgICAgbV9h
c3NlbWJsZXIubm9wKCk7CisgICAgICAgICAgICAgICAgbV9hc3NlbWJsZXIubm9wKCk7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmNtcGxfaW0oKGludCludW1iZXJT
dHJ1Y3R1cmUsIE9CSkVDVF9PRkZTRVRPRihKU0NlbGwsIG1fc3RydWN0dXJlKSwgcmVnVDAsIE5v
dEVxdWFsKTsKKyAgICAgICAgICAgIG5vdG51bWIxUyA9IEp1bXAobV9hc3NlbWJsZXIuam5lKCkp
OworICAgICAgICAgICAgbV9hc3NlbWJsZXIubm9wKCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxl
ci5ub3AoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgbV9hc3NlbWJsZXIuTG9hZENv
bnN0YW50KF9fZnBzY3JfdmFsdWVzWzFdLCByZWdUMik7CisgICAgICAgIG1fYXNzZW1ibGVyLmxk
c2Zwc2NyKHJlZ1QyKTsKKworICAgICAgICAvLyAoMSkgSW4gdGhpcyBjYXNlIHNyYzEgaXMgYSBy
ZXVzYWJsZSBudW1iZXIgY2VsbC4KKyAgICAgICAgLy8gICAgIFNsb3cgY2FzZSBpZiBzcmMyIGlz
IG5vdCBhIG51bWJlciB0eXBlLgorICAgICAgICAKKyAgICAgICAgbV9hc3NlbWJsZXIudGVzdGxf
cnIocmVnVDMsIHJlZ1QxKTsKKyAgICAgICAgSnVtcCBvcDJpbW0gPSBKdW1wKG1fYXNzZW1ibGVy
LmpuZSgpKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubm9wKCk7CisgICAgICAgIG1fYXNzZW1ibGVy
Lm5vcCgpOworCisgICAgICAgIGlmICghdHlwZXMuc2Vjb25kKCkuZGVmaW5pdGVseUlzTnVtYmVy
KCkpIHsKKyAgICAgICAgICAgIGlmICghbV9jb2RlQmxvY2stPmlzS25vd25Ob3RJbW1lZGlhdGUo
c3JjMikpIHsKKyAgICAgICAgICAgICAgICBtX2Fzc2VtYmxlci50ZXN0bF9pMzJyKEpTSW1tZWRp
YXRlOjpUYWdNYXNrLCByZWdUMSk7CisgICAgICAgICAgICAgICAgbm90bnVtYjIgPSBKdW1wKG1f
YXNzZW1ibGVyLmpuZSgpKTsKKyAgICAgICAgICAgICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKKyAg
ICAgICAgICAgICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgbV9hc3NlbWJsZXIuY21wbF9pbSgoaW50KW51bWJlclN0cnVjdHVyZSwgT0JKRUNUX09G
RlNFVE9GKEpTQ2VsbCwgbV9zdHJ1Y3R1cmUpLCByZWdUMSwgTm90RXF1YWwpOworICAgICAgICAg
ICAgbm90bnVtYjJTID0gSnVtcChtX2Fzc2VtYmxlci5qbmUoKSk7CisgICAgICAgICAgICBtX2Fz
c2VtYmxlci5ub3AoKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLm5vcCgpOworICAgICAgICB9
CisKKyAgICAgICAgLy8gKDFhKSBpZiB3ZSBnZXQgaGVyZSwgc3JjMiBpcyBhbHNvIGEgbnVtYmVy
IGNlbGwKKyAgICAgICAgLy8gbG9hZERvdWJsZShBZGRyZXNzKHJlZ1QxLCBPQkpFQ1RfT0ZGU0VU
T0YoSlNOdW1iZXJDZWxsLCBtX3ZhbHVlKSksIGZwUmVnVDEpOworICAgICAgICAKKyAgICAgICAg
bV9hc3NlbWJsZXIuTG9hZENvbnN0YW50KE9CSkVDVF9PRkZTRVRPRihKU051bWJlckNlbGwsIG1f
dmFsdWUpLCByZWdUMyk7CisgICAgICAgIG1fYXNzZW1ibGVyLmFkZGxfcnIocmVnVDEsIHJlZ1Qz
KTsKKyAgICAgICAgCisgICAgICAgIG1fYXNzZW1ibGVyLmZtb3ZzX3JlYWRfcm0ocmVnVDMsIFNI
NDo6RlIzKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuYWRkbF9pOHIoNCwgcmVnVDMpOworICAgICAg
ICBtX2Fzc2VtYmxlci5mbW92c19yZWFkX3JtKHJlZ1QzLCBTSDQ6OkZSMik7CisgICAgCisgICAg
ICAgIAorICAgICAgICAKKyAgICAgICAgSnVtcCBsb2FkZWREb3VibGUgPSBqdW1wKCk7CisgICAg
ICAgIC8vICgxYikgaWYgd2UgZ2V0IGhlcmUsIHNyYzIgaXMgYW4gaW1tZWRpYXRlCisgICAgICAg
IG9wMmltbS5saW5rKHRoaXMpOworCisgICAgICAgIGVtaXRGYXN0QXJpdGhJbW1Ub0ludChyZWdU
MSk7CisgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKHJlZ1QxLCBmcFJlZ1QxKTsKKyAgICAg
ICAgLy8gKDFjKSAKKyAgICAgICAgbG9hZGVkRG91YmxlLmxpbmsodGhpcyk7CisgICAgICAgIC8v
IGxvYWREb3VibGUoQWRkcmVzcyhyZWdUMCwgT0JKRUNUX09GRlNFVE9GKEpTTnVtYmVyQ2VsbCwg
bV92YWx1ZSkpLCBmcFJlZ1QwKTsKKyAgICAKKyAgICAgICAgbV9hc3NlbWJsZXIuTG9hZENvbnN0
YW50KE9CSkVDVF9PRkZTRVRPRihKU051bWJlckNlbGwsIG1fdmFsdWUpLCByZWdUMyk7CisgICAg
ICAgIAorICAgICAgICBtX2Fzc2VtYmxlci5mbW92c19yZWFkX3IwcihyZWdUMywgU0g0OjpGUjEp
OworICAgICAgICBtX2Fzc2VtYmxlci5hZGRsX2k4cig0LCByZWdUMyk7CisgICAgICAgIG1fYXNz
ZW1ibGVyLmZtb3ZzX3JlYWRfcjByKHJlZ1QzLCBTSDQ6OkZSMCk7CisgICAgCisgICAgICAgIGlm
IChvcGNvZGVJRCA9PSBvcF9hZGQpCisgICAgICAgICAgICBhZGREb3VibGUoZnBSZWdUMSwgZnBS
ZWdUMCk7CisgICAgICAgIGVsc2UgaWYgKG9wY29kZUlEID09IG9wX3N1YikKKyAgICAgICAgICAg
IHN1YkRvdWJsZShmcFJlZ1QxLCBmcFJlZ1QwKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICBBU1NFUlQob3Bjb2RlSUQgPT0gb3BfbXVsKTsKKyAgICAgICAgICAgIG11bERvdWJsZShmcFJl
Z1QxLCBmcFJlZ1QwKTsKKyAgICAgICAgfQorICAgICAgICAvLyBTdG9yZSB0aGUgcmVzdWx0IHRv
IHRoZSBKU051bWJlckNlbGwgYW5kIGp1bXAuCisKKyAgICAgICAgbV9hc3NlbWJsZXIuZm1vdnNf
d3JpdGVfcjByKFNINDo6RlIwLCByZWdUMyk7CisgICAgICAgIG1fYXNzZW1ibGVyLmFkZGxfaThy
KC00LCByZWdUMyk7CisgICAgICAgIG1fYXNzZW1ibGVyLmZtb3ZzX3dyaXRlX3IwcihTSDQ6OkZS
MSwgcmVnVDMpOworICAgIAorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Cisg
ICAgCisgICAgICAgIHdhc0pTTnVtYmVyQ2VsbCA9IGp1bXAoKTsKKworICAgICAgICAvLyAoMikg
VGhpcyBoYW5kbGVzIGNhc2VzIHdoZXJlIHNyYzEgaXMgYW4gaW1tZWRpYXRlIG51bWJlci4KKyAg
ICAgICAgLy8gICAgIFR3byBzbG93IGNhc2VzIC0gZWl0aGVyIHNyYzIgaXNuJ3QgYW4gaW1tZWRp
YXRlLCBvciB0aGUgc3VidHJhY3Qgb3ZlcmZsb3dzLgorICAgICAgICBvcDFpbW0ubGluayh0aGlz
KTsKKyAgICB9CisKKworICAgIGlmIChvcGNvZGVJRCA9PSBvcF9hZGQpIHsKKyAgICAgICAgSnVt
cCBub3RJbW07CisgICAgICAgIGlmICh0eXBlcy5zZWNvbmQoKS5pc1JldXNhYmxlKCkgJiYgc3Vw
cG9ydHNGbG9hdGluZ1BvaW50KCkpIHsKKyAgICAgICAgICAgIC8vIHNyYzIgaXMgYW4gaW1tZWRp
YXRlIG51bWJlcgorICAgICAgICAgICAgbV9hc3NlbWJsZXIudGVzdGxfaTMycigoaW50KUpTSW1t
ZWRpYXRlOjpUYWdUeXBlTnVtYmVyLCByZWdUMCk7CisgICAgICAgICAgICBub3RJbW0gPSBKdW1w
KG1fYXNzZW1ibGVyLmplKCkpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIubm9wKCk7CisgICAg
ICAgICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKKyAgICAgICAgfSBlbHNlIGlmICh0eXBlcy5maXJz
dCgpLmlzUmV1c2FibGUoKSAmJiBzdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSkgeworICAgICAgICAg
ICAgLy8gc3JjMSBpcyBhbiBpbW1lZGlhdGUgbnVtYmVyCisgICAgICAgICAgICBtX2Fzc2VtYmxl
ci50ZXN0bF9pMzJyKChpbnQpSlNJbW1lZGlhdGU6OlRhZ1R5cGVOdW1iZXIsIHJlZ1QxKTsKKyAg
ICAgICAgICAgIG5vdEltbSA9IEp1bXAobV9hc3NlbWJsZXIuamUoKSk7CisgICAgICAgICAgICBt
X2Fzc2VtYmxlci5ub3AoKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLm5vcCgpOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgbW92ZShyZWdUMCwgcmVnVDIpOworICAgICAgICAgICAg
YW5kUHRyKHJlZ1QxLCByZWdUMik7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci50ZXN0bF9pMzJy
KChpbnQpSlNJbW1lZGlhdGU6OlRhZ1R5cGVOdW1iZXIsIHJlZ1QyKTsKKyAgICAgICAgICAgIG5v
dEltbSA9IEp1bXAobV9hc3NlbWJsZXIuamUoKSk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5u
b3AoKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLm5vcCgpOworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBtX2Fzc2VtYmxlci5hZGRsX2k4cigtMSwgcmVnVDApOworICAgICAgICBtX2Fz
c2VtYmxlci5hZGR2bF9ycihyZWdUMSwgcmVnVDApOworICAgICAgICAKKyAgICAgICAgSnVtcCBv
dmVyZmxvdyA9IEp1bXAobV9hc3NlbWJsZXIuam5lKCkpOworICAgICAgICBtX2Fzc2VtYmxlci5u
b3AoKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubm9wKCk7CisgICAgICAgIAorICAgICAgICBub3RJ
bW0ubGluayh0aGlzKTsKKworICAgICAgICBpZiAoKHR5cGVzLnNlY29uZCgpLmlzUmV1c2FibGUo
KSAmJiBzdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSkgfHwgKHR5cGVzLmZpcnN0KCkuaXNSZXVzYWJs
ZSgpICYmIHN1cHBvcnRzRmxvYXRpbmdQb2ludCgpKSkgeworICAgICAgICAgICAgaWYgKCF0eXBl
cy5maXJzdCgpLmRlZmluaXRlbHlJc051bWJlcigpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFt
X2NvZGVCbG9jay0+aXNLbm93bk5vdEltbWVkaWF0ZShzcmMxKSkKKyAgICAgICAgICAgICAgICAg
ICAgbm90bnVtYjEubGluayh0aGlzKTsKKyAgICAgICAgICAgICAgICBub3RudW1iMVMubGluayh0
aGlzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghdHlwZXMuc2Vjb25kKCkuZGVm
aW5pdGVseUlzTnVtYmVyKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoIW1fY29kZUJsb2NrLT5p
c0tub3duTm90SW1tZWRpYXRlKHNyYzIpKQorICAgICAgICAgICAgICAgICAgICBub3RudW1iMi5s
aW5rKHRoaXMpOworICAgICAgICAgICAgICAgIG5vdG51bWIyUy5saW5rKHRoaXMpOworICAgICAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgSklUU3R1YkNh
bGwgc3R1YkNhbGwodGhpcywgY3RpX29wX2FkZCk7CisgICAgICAgIHN0dWJDYWxsLmFkZEFyZ3Vt
ZW50KHNyYzEsIHJlZ1QwKTsKKyAgICAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQocmVnVDEpOwor
ICAgICAgICBzdHViQ2FsbC5jYWxsKCk7CisgICAgICAgIG92ZXJmbG93LmxpbmsodGhpcyk7Cisg
ICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICB9IGVsc2UgIGlmIChvcGNv
ZGVJRCA9PSBvcF9zdWIpIHsKKyAgICAgICAgSnVtcCBub3RJbW07CisgICAgICAgIGlmICh0eXBl
cy5zZWNvbmQoKS5pc1JldXNhYmxlKCkgJiYgc3VwcG9ydHNGbG9hdGluZ1BvaW50KCkpIHsKKyAg
ICAgICAgICAgIC8vIHNyYzIgaXMgYW4gaW1tZWRpYXRlIG51bWJlcgorICAgICAgICAgICAgbV9h
c3NlbWJsZXIudGVzdGxfaTMycigoaW50KUpTSW1tZWRpYXRlOjpUYWdUeXBlTnVtYmVyLCByZWdU
MCk7CisgICAgICAgICAgICBub3RJbW0gPSBKdW1wKG1fYXNzZW1ibGVyLmplKCkpOworICAgICAg
ICAgICAgbV9hc3NlbWJsZXIubm9wKCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5ub3AoKTsK
KyAgICAgICAgfSBlbHNlIGlmICh0eXBlcy5maXJzdCgpLmlzUmV1c2FibGUoKSAmJiBzdXBwb3J0
c0Zsb2F0aW5nUG9pbnQoKSkgeworICAgICAgICAgICAgLy8gc3JjMSBpcyBhbiBpbW1lZGlhdGUg
bnVtYmVyCisgICAgICAgICAgICBtX2Fzc2VtYmxlci50ZXN0bF9pMzJyKChpbnQpSlNJbW1lZGlh
dGU6OlRhZ1R5cGVOdW1iZXIsIHJlZ1QxKTsKKyAgICAgICAgICAgIG5vdEltbSA9IEp1bXAobV9h
c3NlbWJsZXIuamUoKSk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKKyAgICAgICAg
ICAgIG1fYXNzZW1ibGVyLm5vcCgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbW92
ZShyZWdUMCwgcmVnVDIpOworICAgICAgICAgICAgYW5kUHRyKHJlZ1QxLCByZWdUMik7CisgICAg
ICAgICAgICBtX2Fzc2VtYmxlci50ZXN0bF9pMzJyKChpbnQpSlNJbW1lZGlhdGU6OlRhZ1R5cGVO
dW1iZXIsIHJlZ1QyKTsKKyAgICAgICAgICAgIG5vdEltbSA9IEp1bXAobV9hc3NlbWJsZXIuamUo
KSk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKKyAgICAgICAgICAgIG1fYXNzZW1i
bGVyLm5vcCgpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBtX2Fzc2VtYmxlci5zdWJ2
bF9ycihyZWdUMSwgcmVnVDApOworICAgICAgICBlbWl0RmFzdEFyaXRoUmVUYWdJbW1lZGlhdGUo
cmVnVDAsIHJlZ1QwKTsKKyAgICAgICAgCisgICAgICAgIEp1bXAgb3ZlcmZsb3cgPSBKdW1wKG1f
YXNzZW1ibGVyLmpuZSgpKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubm9wKCk7CisgICAgICAgIG1f
YXNzZW1ibGVyLm5vcCgpOworICAgICAgICAKKyAgICAgICAgbm90SW1tLmxpbmsodGhpcyk7Cisg
ICAgICAgIGlmICgodHlwZXMuc2Vjb25kKCkuaXNSZXVzYWJsZSgpICYmIHN1cHBvcnRzRmxvYXRp
bmdQb2ludCgpKSB8fCAodHlwZXMuZmlyc3QoKS5pc1JldXNhYmxlKCkgJiYgc3VwcG9ydHNGbG9h
dGluZ1BvaW50KCkpKSB7CisgICAgICAgICAgICBpZiAoIXR5cGVzLmZpcnN0KCkuZGVmaW5pdGVs
eUlzTnVtYmVyKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3du
Tm90SW1tZWRpYXRlKHNyYzEpKQorICAgICAgICAgICAgICAgICAgICBub3RudW1iMS5saW5rKHRo
aXMpOworICAgICAgICAgICAgICAgIG5vdG51bWIxUy5saW5rKHRoaXMpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgaWYgKCF0eXBlcy5zZWNvbmQoKS5kZWZpbml0ZWx5SXNOdW1iZXIoKSkg
eworICAgICAgICAgICAgICAgIGlmICghbV9jb2RlQmxvY2stPmlzS25vd25Ob3RJbW1lZGlhdGUo
c3JjMikpCisgICAgICAgICAgICAgICAgICAgIG5vdG51bWIyLmxpbmsodGhpcyk7CisgICAgICAg
ICAgICAgICAgbm90bnVtYjJTLmxpbmsodGhpcyk7CisgICAgICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxs
KHRoaXMsIGN0aV9vcF9zdWIpOworICAgICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChzcmMxLCBy
ZWdUMCk7CisgICAgICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KHJlZ1QxKTsKKyAgICAgICAgc3R1
YkNhbGwuY2FsbCgpOworICAgICAgICBvdmVyZmxvdy5saW5rKHRoaXMpOworICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgfSBlbHNlIGlmIChvcGNvZGVJRCA9PSBvcF9t
dWwpIHsKKyAgICAgICAgCisgICAgICAgIGlmICgodHlwZXMuc2Vjb25kKCkuaXNSZXVzYWJsZSgp
ICYmIHN1cHBvcnRzRmxvYXRpbmdQb2ludCgpKSB8fCAodHlwZXMuZmlyc3QoKS5pc1JldXNhYmxl
KCkgJiYgc3VwcG9ydHNGbG9hdGluZ1BvaW50KCkpKSB7CisgICAgICAgICAgICBpZiAoIXR5cGVz
LmZpcnN0KCkuZGVmaW5pdGVseUlzTnVtYmVyKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoIW1f
Y29kZUJsb2NrLT5pc0tub3duTm90SW1tZWRpYXRlKHNyYzEpKQorICAgICAgICAgICAgICAgICAg
ICBub3RudW1iMS5saW5rKHRoaXMpOworICAgICAgICAgICAgICAgIG5vdG51bWIxUy5saW5rKHRo
aXMpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCF0eXBlcy5zZWNvbmQoKS5kZWZp
bml0ZWx5SXNOdW1iZXIoKSkgeworICAgICAgICAgICAgICAgIGlmICghbV9jb2RlQmxvY2stPmlz
S25vd25Ob3RJbW1lZGlhdGUoc3JjMikpCisgICAgICAgICAgICAgICAgICAgIG5vdG51bWIyLmxp
bmsodGhpcyk7CisgICAgICAgICAgICAgICAgbm90bnVtYjJTLmxpbmsodGhpcyk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKworICAgICAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBj
dGlfb3BfbXVsKTsKKyAgICAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQocmVnVDApOworICAgICAg
ICBzdHViQ2FsbC5hZGRBcmd1bWVudChyZWdUMSk7CisgICAgICAgIHN0dWJDYWxsLmNhbGwoKTsK
KyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIH0KKworICAgIGlmICgo
dHlwZXMuc2Vjb25kKCkuaXNSZXVzYWJsZSgpICYmIHN1cHBvcnRzRmxvYXRpbmdQb2ludCgpKSB8
fCAodHlwZXMuZmlyc3QoKS5pc1JldXNhYmxlKCkgJiYgc3VwcG9ydHNGbG9hdGluZ1BvaW50KCkp
KQorICAgICAgICB3YXNKU051bWJlckNlbGwubGluayh0aGlzKTsKKworfQorCit2b2lkIEpJVDo6
Y29tcGlsZUJpbmFyeUFyaXRoT3BTbG93Q2FzZShPcGNvZGVJRCBvcGNvZGVJRCwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgdW5zaWduZWQgZHN0LCB1bnNpZ25lZCBzcmMx
LCB1bnNpZ25lZCBzcmMyLCBPcGVyYW5kVHlwZXMgdHlwZXMpCit7CisgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX2FkZChJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQoreworICAgIHVuc2lnbmVkIHJlc3VsdCA9IGN1cnJlbnRJbnN0cnVjdGlv
blsxXS51Lm9wZXJhbmQ7CisgICAgdW5zaWduZWQgb3AxID0gY3VycmVudEluc3RydWN0aW9uWzJd
LnUub3BlcmFuZDsKKyAgICB1bnNpZ25lZCBvcDIgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5v
cGVyYW5kOworICAgIAorICAgIEp1bXAgbm90SW1tOworICAgIAorICAgIGlmIChpc09wZXJhbmRD
b25zdGFudEltbWVkaWF0ZUludChvcDEpKSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIob3AyLCByZWdUMSk7CisgICAgICAgIAorICAgICAgICBtX2Fzc2VtYmxlci50ZXN0bF9pMzJy
KChpbnQpSlNJbW1lZGlhdGU6OlRhZ1R5cGVOdW1iZXIsIHJlZ1QxKTsKKyAgICAgICAgbm90SW1t
ID0gSnVtcChtX2Fzc2VtYmxlci5qZSgpKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubm9wKCk7Cisg
ICAgICAgIG1fYXNzZW1ibGVyLm5vcCgpOworIAorICAgICAgICBtb3ZlKEltbTMyKGdldENvbnN0
YW50T3BlcmFuZEltbWVkaWF0ZUludChvcDEpIDw8IEpTSW1tZWRpYXRlOjpJbnRlZ2VyUGF5bG9h
ZFNoaWZ0KSwgcmVnVDApOworICAgICAgICBtX2Fzc2VtYmxlci5hZGR2bF9ycihyZWdUMSwgcmVn
VDApOworICAgICAgICAKKyAgICAgICAgSnVtcCBvdmVyZmxvdyA9IEp1bXAobV9hc3NlbWJsZXIu
am5lKCkpOworICAgICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKKyAgICAgICAgbV9hc3NlbWJsZXIu
bm9wKCk7CisgICAgICAgIAorICAgICAgICBub3RJbW0ubGluayh0aGlzKTsKKyAgICAgICAgSklU
U3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wX2FkZCk7CisgICAgICAgIHN0dWJDYWxsLmFk
ZEFyZ3VtZW50KG9wMSwgcmVnVDApOworICAgICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChyZWdU
MSk7CisgCisgICAgICAgIHN0dWJDYWxsLmNhbGwoKTsKKyAgICAgICAgb3ZlcmZsb3cubGluayh0
aGlzKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQpOworICAgIAorICAg
IH0gZWxzZSBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbW1lZGlhdGVJbnQob3AyKSkgeworICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgcmVnVDEpOworICAgICAgICBtX2Fzc2VtYmxl
ci50ZXN0bF9pMzJyKChpbnQpSlNJbW1lZGlhdGU6OlRhZ1R5cGVOdW1iZXIsIHJlZ1QxKTsKKyAg
ICAgICAgbm90SW1tID0gSnVtcChtX2Fzc2VtYmxlci5qZSgpKTsKKyAgICAgICAgbV9hc3NlbWJs
ZXIubm9wKCk7CisgICAgICAgIG1fYXNzZW1ibGVyLm5vcCgpOworCisgICAgICAgIG1vdmUoSW1t
MzIoZ2V0Q29uc3RhbnRPcGVyYW5kSW1tZWRpYXRlSW50KG9wMikgPDwgSlNJbW1lZGlhdGU6Oklu
dGVnZXJQYXlsb2FkU2hpZnQpLCByZWdUMCk7CisgICAgICAgIG1fYXNzZW1ibGVyLmFkZHZsX3Jy
KHJlZ1QxLCByZWdUMCk7CisgICAgICAgIAorICAgICAgICBKdW1wIG92ZXJmbG93ID0gSnVtcCht
X2Fzc2VtYmxlci5qbmUoKSk7CisgICAgICAgIG1fYXNzZW1ibGVyLm5vcCgpOworICAgICAgICBt
X2Fzc2VtYmxlci5ub3AoKTsKKyAgICAKKyAgICAgICAgbm90SW1tLmxpbmsodGhpcyk7CisgICAg
ICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9hZGQpOworICAgICAgICBzdHVi
Q2FsbC5hZGRBcmd1bWVudChyZWdUMSk7CisgICAgICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KG9w
MiwgcmVnVDApOworICAgICAgICBzdHViQ2FsbC5jYWxsKCk7CisgICAgICAgIG92ZXJmbG93Lmxp
bmsodGhpcyk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0KTsKKyAgICAK
KyAgICB9IGVsc2UgeworICAgICAgICBPcGVyYW5kVHlwZXMgdHlwZXMgPSBPcGVyYW5kVHlwZXM6
OmZyb21JbnQoY3VycmVudEluc3RydWN0aW9uWzRdLnUub3BlcmFuZCk7CisgICAgICAgIGlmICh0
eXBlcy5maXJzdCgpLm1pZ2h0QmVOdW1iZXIoKSAmJiB0eXBlcy5zZWNvbmQoKS5taWdodEJlTnVt
YmVyKCkpCisgICAgICAgICAgICBjb21waWxlQmluYXJ5QXJpdGhPcChvcF9hZGQsIHJlc3VsdCwg
b3AxLCBvcDIsIHR5cGVzKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBKSVRTdHViQ2Fs
bCBzdHViQ2FsbCh0aGlzLCBjdGlfb3BfYWRkKTsKKyAgICAgICAgICAgIHN0dWJDYWxsLmFkZEFy
Z3VtZW50KG9wMSwgcmVnVDIpOworICAgICAgICAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQob3Ay
LCByZWdUMik7CisgICAgICAgICAgICBzdHViQ2FsbC5jYWxsKHJlc3VsdCk7CisgICAgICAgIH0K
KyAgICB9Cit9Cit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfYWRkKEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit7Cisg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX3N1YihJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIHVuc2lnbmVkIHJlc3VsdCA9IGN1
cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgdW5zaWduZWQgb3AxID0gY3VycmVu
dEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKyAgICB1bnNpZ25lZCBvcDIgPSBjdXJyZW50SW5z
dHJ1Y3Rpb25bM10udS5vcGVyYW5kOworICAgIAorICAgIGNvbXBpbGVCaW5hcnlBcml0aE9wKG9w
X3N1YiwgcmVzdWx0LCBvcDEsIG9wMiwgT3BlcmFuZFR5cGVzOjpmcm9tSW50KGN1cnJlbnRJbnN0
cnVjdGlvbls0XS51Lm9wZXJhbmQpKTsKK30KKwordm9pZCBKSVQ6OmVtaXRTbG93X29wX3N1YihJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorI2VuZGlmCisK
K3ZvaWQgSklUOjplbWl0X29wX2pubGVzcyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQoreworICAgIHVuc2lnbmVkIG9wMSA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7
CisgICAgdW5zaWduZWQgb3AyID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKyAg
ICB1bnNpZ25lZCB0YXJnZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworCisK
KyAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbW1lZGlhdGVJbnQob3AyKSkgeworICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgcmVnVDApOworICAgICAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RJbW1lZGlhdGVJbnRlZ2VyKHJlZ1QwKTsKKyAgICAgICAgaW50MzJfdCBvcDJpbW0g
PSBzdGF0aWNfY2FzdDxpbnQzMl90PihKU0ltbWVkaWF0ZTo6cmF3VmFsdWUoZ2V0Q29uc3RhbnRP
cGVyYW5kKG9wMikpKTsKKworICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKEdyZWF0ZXJUaGFuT3JF
cXVhbCwgcmVnVDAsIEltbTMyKG9wMmltbSkpLCB0YXJnZXQpOworICAgIH0gZWxzZSBpZiAoaXNP
cGVyYW5kQ29uc3RhbnRJbW1lZGlhdGVJbnQob3AxKSkgeworICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKG9wMiwgcmVnVDEpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1l
ZGlhdGVJbnRlZ2VyKHJlZ1QxKTsKKyAgICAgICAgaW50MzJfdCBvcDFpbW0gPSBzdGF0aWNfY2Fz
dDxpbnQzMl90PihKU0ltbWVkaWF0ZTo6cmF3VmFsdWUoZ2V0Q29uc3RhbnRPcGVyYW5kKG9wMSkp
KTsKKyAgICAgICAgYWRkSnVtcChicmFuY2gzMihMZXNzVGhhbk9yRXF1YWwsIHJlZ1QxLCBJbW0z
MihvcDFpbW0pKSwgdGFyZ2V0KTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVycyhvcDEsIHJlZ1QwLCBvcDIsIHJlZ1QxKTsKKyAgICAgICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SW1tZWRpYXRlSW50ZWdlcihyZWdUMCk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEltbWVkaWF0ZUludGVnZXIocmVnVDEpOworCisgICAgICAgIGFkZEp1bXAoYnJhbmNo
MzIoR3JlYXRlclRoYW5PckVxdWFsLCByZWdUMCwgcmVnVDEpLCB0YXJnZXQpOworICAgIH0KKwor
fQorCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5sZXNzKEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit7CisgICAg
dW5zaWduZWQgb3AxID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICB1bnNp
Z25lZCBvcDIgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworICAgIHVuc2lnbmVk
IHRhcmdldCA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CisKKyAgICBpZiAoaXNP
cGVyYW5kQ29uc3RhbnRJbW1lZGlhdGVJbnQob3AyKSkgeworICAgICAgICBsaW5rU2xvd0Nhc2Uo
aXRlcik7CisKKyAgICAgICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wX2psZXNz
KTsKKyAgICAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQocmVnVDApOworICAgICAgICBzdHViQ2Fs
bC5hZGRBcmd1bWVudChvcDIsIHJlZ1QyKTsKKyAgICAgICAgc3R1YkNhbGwuY2FsbCgpOworICAg
ICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoWmVybywgcmVnVDApLCB0YXJnZXQp
OworCisgICAgfSBlbHNlIGlmIChpc09wZXJhbmRDb25zdGFudEltbWVkaWF0ZUludChvcDEpKSB7
CisgICAgICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKKworICAgICAgICBKSVRTdHViQ2FsbCBzdHVi
Q2FsbCh0aGlzLCBjdGlfb3Bfamxlc3MpOworICAgICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChv
cDEsIHJlZ1QyKTsKKyAgICAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQocmVnVDEpOworICAgICAg
ICBzdHViQ2FsbC5jYWxsKCk7CisgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3Qz
MihaZXJvLCByZWdUMCksIHRhcmdldCk7CisKKyAgICB9IGVsc2UgeworICAgICAgICBsaW5rU2xv
d0Nhc2UoaXRlcik7CisgICAgICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKKworICAgICAgICBKSVRT
dHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3Bfamxlc3MpOworICAgICAgICBzdHViQ2FsbC5h
ZGRBcmd1bWVudChyZWdUMCk7CisgICAgICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KHJlZ1QxKTsK
KyAgICAgICAgc3R1YkNhbGwuY2FsbCgpOworICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFu
Y2hUZXN0MzIoWmVybywgcmVnVDApLCB0YXJnZXQpOworICAgIH0KKworfQorCit2b2lkIEpJVDo6
ZW1pdF9vcF9qbmxlc3NlcShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAg
IHVuc2lnbmVkIG9wMSA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgdW5z
aWduZWQgb3AyID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKyAgICB1bnNpZ25l
ZCB0YXJnZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworCisKKyAgICBpZiAo
aXNPcGVyYW5kQ29uc3RhbnRJbW1lZGlhdGVJbnQob3AyKSkgeworICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKG9wMSwgcmVnVDApOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJ
bW1lZGlhdGVJbnRlZ2VyKHJlZ1QwKTsKKworICAgICAgICBpbnQzMl90IG9wMmltbSA9IHN0YXRp
Y19jYXN0PGludDMyX3Q+KEpTSW1tZWRpYXRlOjpyYXdWYWx1ZShnZXRDb25zdGFudE9wZXJhbmQo
b3AyKSkpOworCisgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoR3JlYXRlclRoYW4sIHJlZ1QwLCBJ
bW0zMihvcDJpbW0pKSwgdGFyZ2V0KTsKKyAgICB9IGVsc2UgaWYgKGlzT3BlcmFuZENvbnN0YW50
SW1tZWRpYXRlSW50KG9wMSkpIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIs
IHJlZ1QxKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tZWRpYXRlSW50ZWdlcihy
ZWdUMSk7CisKKyAgICAgICAgaW50MzJfdCBvcDFpbW0gPSBzdGF0aWNfY2FzdDxpbnQzMl90PihK
U0ltbWVkaWF0ZTo6cmF3VmFsdWUoZ2V0Q29uc3RhbnRPcGVyYW5kKG9wMSkpKTsKKworICAgICAg
ICBhZGRKdW1wKGJyYW5jaDMyKExlc3NUaGFuLCByZWdUMSwgSW1tMzIob3AxaW1tKSksIHRhcmdl
dCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMob3AxLCBy
ZWdUMCwgb3AyLCByZWdUMSk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbWVkaWF0
ZUludGVnZXIocmVnVDApOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1lZGlhdGVJ
bnRlZ2VyKHJlZ1QxKTsKKworICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKEdyZWF0ZXJUaGFuLCBy
ZWdUMCwgcmVnVDEpLCB0YXJnZXQpOworICAgIH0KKworfQorCit2b2lkIEpJVDo6ZW1pdFNsb3df
b3Bfam5sZXNzZXEoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3sKKyAgICB1bnNpZ25lZCBvcDEgPSBjdXJyZW50
SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIHVuc2lnbmVkIG9wMiA9IGN1cnJlbnRJbnN0
cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisgICAgdW5zaWduZWQgdGFyZ2V0ID0gY3VycmVudEluc3Ry
dWN0aW9uWzNdLnUub3BlcmFuZDsKKworICAgIGlmIChpc09wZXJhbmRDb25zdGFudEltbWVkaWF0
ZUludChvcDIpKSB7CisgICAgICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKKworICAgICAgICBKSVRT
dHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3Bfamxlc3NlcSk7CisgICAgICAgIHN0dWJDYWxs
LmFkZEFyZ3VtZW50KHJlZ1QwKTsKKyAgICAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQob3AyLCBy
ZWdUMik7CisgICAgICAgIHN0dWJDYWxsLmNhbGwoKTsKKyAgICAgICAgZW1pdEp1bXBTbG93VG9I
b3QoYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QwKSwgdGFyZ2V0KTsKKworICAgIH0gZWxzZSBpZiAo
aXNPcGVyYW5kQ29uc3RhbnRJbW1lZGlhdGVJbnQob3AxKSkgeworICAgICAgICBsaW5rU2xvd0Nh
c2UoaXRlcik7CisKKyAgICAgICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wX2ps
ZXNzZXEpOworICAgICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChvcDEsIHJlZ1QyKTsKKyAgICAg
ICAgc3R1YkNhbGwuYWRkQXJndW1lbnQocmVnVDEpOworICAgICAgICBzdHViQ2FsbC5jYWxsKCk7
CisgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihaZXJvLCByZWdUMCksIHRh
cmdldCk7CisKKyAgICB9IGVsc2UgeworICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7CisgICAg
ICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKKyAgICAKKyAgICAgICAgSklUU3R1YkNhbGwgc3R1YkNh
bGwodGhpcywgY3RpX29wX2psZXNzZXEpOworICAgICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChy
ZWdUMCk7CisgICAgICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KHJlZ1QxKTsKKyAgICAgICAgc3R1
YkNhbGwuY2FsbCgpOworICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoWmVy
bywgcmVnVDApLCB0YXJnZXQpOworICAgIH0KK30KKworCit2b2lkIEpJVDo6ZW1pdF9vcF9qbGVz
cyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIHVuc2lnbmVkIG9wMSA9
IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgdW5zaWduZWQgb3AyID0gY3Vy
cmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKyAgICB1bnNpZ25lZCB0YXJnZXQgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworCisgICAgLy8gV2UgZ2VuZXJhdGUgaW5saW5l
IGNvZGUgZm9yIHRoZSBmb2xsb3dpbmcgY2FzZXMgaW4gdGhlIGZhc3QgcGF0aDoKKyAgICAvLyAt
IGludCBpbW1lZGlhdGUgdG8gY29uc3RhbnQgaW50IGltbWVkaWF0ZQorICAgIC8vIC0gY29uc3Rh
bnQgaW50IGltbWVkaWF0ZSB0byBpbnQgaW1tZWRpYXRlCisgICAgLy8gLSBpbnQgaW1tZWRpYXRl
IHRvIGludCBpbW1lZGlhdGUKKworICAgIGlmIChpc09wZXJhbmRDb25zdGFudEltbWVkaWF0ZUlu
dChvcDIpKSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByZWdUMCk7Cisg
ICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbWVkaWF0ZUludGVnZXIocmVnVDApOworICAg
ICAgICBpbnQzMl90IG9wMmltbSA9IHN0YXRpY19jYXN0PGludDMyX3Q+KEpTSW1tZWRpYXRlOjpy
YXdWYWx1ZShnZXRDb25zdGFudE9wZXJhbmQob3AyKSkpOworICAgICAgICBhZGRKdW1wKGJyYW5j
aDMyKExlc3NUaGFuLCByZWdUMCwgSW1tMzIob3AyaW1tKSksIHRhcmdldCk7CisgICAgfSBlbHNl
IGlmIChpc09wZXJhbmRDb25zdGFudEltbWVkaWF0ZUludChvcDEpKSB7CisgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByZWdUMSk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEltbWVkaWF0ZUludGVnZXIocmVnVDEpOworICAgICAgICBpbnQzMl90IG9wMWltbSA9IHN0
YXRpY19jYXN0PGludDMyX3Q+KEpTSW1tZWRpYXRlOjpyYXdWYWx1ZShnZXRDb25zdGFudE9wZXJh
bmQob3AxKSkpOworICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKEdyZWF0ZXJUaGFuLCByZWdUMSwg
SW1tMzIob3AxaW1tKSksIHRhcmdldCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcnMob3AxLCByZWdUMCwgb3AyLCByZWdUMSk7CisgICAgICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEltbWVkaWF0ZUludGVnZXIocmVnVDApOworICAgICAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RJbW1lZGlhdGVJbnRlZ2VyKHJlZ1QxKTsKKworICAgICAgICBhZGRKdW1wKGJy
YW5jaDMyKExlc3NUaGFuLCByZWdUMCwgcmVnVDEpLCB0YXJnZXQpOworICAgIH0KKworfQorCit2
b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfamxlc3MoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3sKKyAgICB1bnNpZ25l
ZCBvcDEgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIHVuc2lnbmVkIG9w
MiA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisgICAgdW5zaWduZWQgdGFyZ2V0
ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKworICAgIGlmIChpc09wZXJhbmRD
b25zdGFudEltbWVkaWF0ZUludChvcDIpKSB7CisgICAgICAgIGxpbmtTbG93Q2FzZShpdGVyKTsK
KworICAgICAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3Bfamxlc3MpOworICAg
ICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChyZWdUMCk7CisgICAgICAgIHN0dWJDYWxsLmFkZEFy
Z3VtZW50KG9wMiwgcmVnVDIpOworICAgICAgICBzdHViQ2FsbC5jYWxsKCk7CisgICAgICAgIGVt
aXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihOb25aZXJvLCByZWdUMCksIHRhcmdldCk7CisK
KyAgICB9IGVsc2UgaWYgKGlzT3BlcmFuZENvbnN0YW50SW1tZWRpYXRlSW50KG9wMSkpIHsKKyAg
ICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOworCisgICAgICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxs
KHRoaXMsIGN0aV9vcF9qbGVzcyk7CisgICAgICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KG9wMSwg
cmVnVDIpOworICAgICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChyZWdUMSk7CisgICAgICAgIHN0
dWJDYWxsLmNhbGwoKTsKKyAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKE5v
blplcm8sIHJlZ1QwKSwgdGFyZ2V0KTsKKworICAgIH0gZWxzZSB7CisgICAgICAgIGxpbmtTbG93
Q2FzZShpdGVyKTsKKyAgICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOworICAgICAgICBKSVRTdHVi
Q2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3Bfamxlc3MpOworICAgICAgICBzdHViQ2FsbC5hZGRB
cmd1bWVudChyZWdUMCk7CisgICAgICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KHJlZ1QxKTsKKyAg
ICAgICAgc3R1YkNhbGwuY2FsbCgpOworICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hU
ZXN0MzIoTm9uWmVybywgcmVnVDApLCB0YXJnZXQpOworICAgIH0KK30KKwordm9pZCBKSVQ6OmVt
aXRfb3BfcG9zdF9pbmMoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICB1
bnNpZ25lZCByZXN1bHQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIHVu
c2lnbmVkIHNyY0RzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCwgcmVnVDApOworICAgIG1fYXNzZW1ibGVyLnRl
c3RsX2k4cigoaW50KUpTSW1tZWRpYXRlOjpUYWdUeXBlTnVtYmVyLCByZWdUMCk7CisgICAgSnVt
cCBub3RJbW0gPSBKdW1wKG1fYXNzZW1ibGVyLmplKCkpOworICAgIG1fYXNzZW1ibGVyLm5vcCgp
OworICAgIG1fYXNzZW1ibGVyLm5vcCgpOworCisgICAgbW92ZShJbW0zMigyKSwgcmVnVDEpOwor
ICAgIG1fYXNzZW1ibGVyLmFkZHZsX3JyKHJlZ1QwLCByZWdUMSk7CisgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3RlcihzcmNEc3QsIHJlZ1QxKTsKKyAgICAKKyAgICBKdW1wIG92ZXJmbG93ID0gSnVt
cChtX2Fzc2VtYmxlci5qbmUoKSk7CisgICAgbV9hc3NlbWJsZXIubm9wKCk7CisgICAgbV9hc3Nl
bWJsZXIubm9wKCk7CisgICAgICAgIAorICAgIG5vdEltbS5saW5rKHRoaXMpOworICAgIAorICAg
IEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9wb3N0X2luYyk7CisgICAgc3R1YkNh
bGwuYWRkQXJndW1lbnQocmVnVDApOworICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KEltbTMyKHNy
Y0RzdCkpOworICAgIHN0dWJDYWxsLmNhbGwoKTsKKyAgICAKKyAgICBvdmVyZmxvdy5saW5rKHRo
aXMpOyAgIAorICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZWdUMCk7Cit9Cit2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcG9zdF9pbmMoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3sKKyAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfcG9zdF9kZWMoSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICB1bnNpZ25lZCByZXN1bHQgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIHVuc2lnbmVkIHNyY0RzdCA9IGN1cnJl
bnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisgICAgCisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihzcmNEc3QsIHJlZ1QwKTsKKyAgICBtX2Fzc2VtYmxlci50ZXN0bF9pOHIoKGludClKU0lt
bWVkaWF0ZTo6VGFnVHlwZU51bWJlciwgcmVnVDApOworICAgIEp1bXAgbm90SW1tID0gSnVtcCht
X2Fzc2VtYmxlci5qZSgpKTsKKyAgICBtX2Fzc2VtYmxlci5ub3AoKTsKKyAgICBtX2Fzc2VtYmxl
ci5ub3AoKTsKKworICAgIG1vdmUocmVnVDAsIHJlZ1QxKTsKKyAgICBtb3ZlKEltbTMyKCgxIDw8
IEpTSW1tZWRpYXRlOjpJbnRlZ2VyUGF5bG9hZFNoaWZ0KSksIHJlZ1QyKTsKKyAgICAKKyAgICBt
X2Fzc2VtYmxlci5zdWJ2bF9ycihyZWdUMiwgcmVnVDEpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoc3JjRHN0LCByZWdUMSk7CisgICAgCisgICAgSnVtcCBvdmVyZmxvdyA9IEp1bXAobV9h
c3NlbWJsZXIuam5lKCkpOworICAgIG1fYXNzZW1ibGVyLm5vcCgpOworICAgIG1fYXNzZW1ibGVy
Lm5vcCgpOworICAgICAgICAKKyAgICBub3RJbW0ubGluayh0aGlzKTsKKyAgICAKKyAgICBKSVRT
dHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3BfcG9zdF9kZWMpOworICAgIHN0dWJDYWxsLmFk
ZEFyZ3VtZW50KHJlZ1QwKTsKKyAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChJbW0zMihzcmNEc3Qp
KTsKKyAgICBzdHViQ2FsbC5jYWxsKCk7CisgICAgCisgICAgb3ZlcmZsb3cubGluayh0aGlzKTsK
KyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCk7Cit9Cit2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfcG9zdF9kZWMoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfcHJlX2luYyhJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQoreworICAgIHVuc2lnbmVkIHNyY0RzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsx
XS51Lm9wZXJhbmQ7CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCwgcmVnVDAp
OworICAgIG1fYXNzZW1ibGVyLnRlc3RsX2k4cigoaW50KUpTSW1tZWRpYXRlOjpUYWdUeXBlTnVt
YmVyLCByZWdUMCk7CisgICAgSnVtcCBub3RJbW0gPSBKdW1wKG1fYXNzZW1ibGVyLmplKCkpOwor
ICAgIG1fYXNzZW1ibGVyLm5vcCgpOworICAgIG1fYXNzZW1ibGVyLm5vcCgpOworICAgIAorICAg
IG1vdmUoSW1tMzIoMSA8PCBKU0ltbWVkaWF0ZTo6SW50ZWdlclBheWxvYWRTaGlmdCksIHJlZ1Qx
KTsKKyAgICBtX2Fzc2VtYmxlci5hZGR2bF9ycihyZWdUMSwgcmVnVDApOworICAgIAorICAgIEp1
bXAgb3ZlcmZsb3cgPSBKdW1wKG1fYXNzZW1ibGVyLmpuZSgpKTsKKyAgICBtX2Fzc2VtYmxlci5u
b3AoKTsKKyAgICBtX2Fzc2VtYmxlci5ub3AoKTsKKyAgICAKKyAgICBub3RJbW0ubGluayh0aGlz
KTsKKyAgICAKKyAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3BfcHJlX2luYyk7
CisgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoc3JjRHN0LCByZWdUMCk7IC8vIGlmIG92ZXJmbG93
ID0+IHJlZ1QwIG1vZGlmaWVkCisgICAgc3R1YkNhbGwuY2FsbCgpOworICAgIAorICAgIG92ZXJm
bG93LmxpbmsodGhpcyk7CisKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCwgcmVn
VDApOworfQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3ByZV9pbmMoSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3sK
KyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfcHJlX2Rl
YyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIHVuc2lnbmVkIHNyY0Rz
dCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgCisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihzcmNEc3QsIHJlZ1QwKTsKKyAgICBtX2Fzc2VtYmxlci50ZXN0bF9pOHIo
KGludClKU0ltbWVkaWF0ZTo6VGFnVHlwZU51bWJlciwgcmVnVDApOworICAgIEp1bXAgbm90SW1t
ID0gSnVtcChtX2Fzc2VtYmxlci5qZSgpKTsKKyAgICBtX2Fzc2VtYmxlci5ub3AoKTsKKyAgICBt
X2Fzc2VtYmxlci5ub3AoKTsKKworICAgIG1vdmUoSW1tMzIoKDEgPDwgSlNJbW1lZGlhdGU6Oklu
dGVnZXJQYXlsb2FkU2hpZnQpKSwgcmVnVDIpOworICAgIG1fYXNzZW1ibGVyLnN1YnZsX3JyKHJl
Z1QyLCByZWdUMCk7CisgICAgCisgICAgSnVtcCBvdmVyZmxvdyA9IEp1bXAobV9hc3NlbWJsZXIu
am5lKCkpOworICAgIG1fYXNzZW1ibGVyLm5vcCgpOworICAgIG1fYXNzZW1ibGVyLm5vcCgpOwor
CisgICAgbm90SW1tLmxpbmsodGhpcyk7CisKKyAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlz
LCBjdGlfb3BfcHJlX2RlYyk7CisgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoc3JjRHN0LCByZWdU
MCk7IC8vIGlmIG92ZXJmbG93ID0+IHJlZ1QwIG1vZGlmaWVkCisgICAgc3R1YkNhbGwuY2FsbCgp
OworCisgICAgb3ZlcmZsb3cubGluayh0aGlzKTsKKworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoc3JjRHN0LCByZWdUMCk7Cit9Cit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHJlX2RlYyhJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIEpJVDo6
ZW1pdF9vcF9tb2QoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICB1bnNp
Z25lZCByZXN1bHQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIHVuc2ln
bmVkIG9wMSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisgICAgdW5zaWduZWQg
b3AyID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKworICAgIEpJVFN0dWJDYWxs
IHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9tb2QpOworICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KG9w
MSwgcmVnVDIpOworICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KG9wMiwgcmVnVDIpOworICAgIHN0
dWJDYWxsLmNhbGwocmVzdWx0KTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfbHNoaWZ0KEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgdW5zaWduZWQgcmVzdWx0ID0gY3Vy
cmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICB1bnNpZ25lZCBvcDEgPSBjdXJyZW50
SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworICAgIHVuc2lnbmVkIG9wMiA9IGN1cnJlbnRJbnN0
cnVjdGlvblszXS51Lm9wZXJhbmQ7CisgCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMob3Ax
LCByZWdUMCwgb3AyLCByZWdUMSk7CisgICAgbV9hc3NlbWJsZXIudGVzdGxfaThyKChpbnQpSlNJ
bW1lZGlhdGU6OlRhZ1R5cGVOdW1iZXIsIHJlZ1QwKTsKKyAgICBKdW1wIG5vdEltbTEgPSBKdW1w
KG1fYXNzZW1ibGVyLmplKCkpOworICAgIG1fYXNzZW1ibGVyLm5vcCgpOworICAgIG1fYXNzZW1i
bGVyLm5vcCgpOworCisgICAgbV9hc3NlbWJsZXIubW92X2ltbTgoKGludClKU0ltbWVkaWF0ZTo6
VGFnVHlwZU51bWJlciwgcmVnVDMpOworICAgIG1fYXNzZW1ibGVyLnRlc3RsX3JyKHJlZ1QzLCBy
ZWdUMSk7CisgICAgSnVtcCBub3RJbW0yID0gSnVtcChtX2Fzc2VtYmxlci5qZSgpKTsKKyAgICBt
X2Fzc2VtYmxlci5ub3AoKTsKKyAgICBtX2Fzc2VtYmxlci5ub3AoKTsKKworICAgIG1fYXNzZW1i
bGVyLnNobHJfaThyKDEsIHJlZ1QwKTsKKyAgICBtX2Fzc2VtYmxlci5zaGxyX2k4cigxLCByZWdU
MSk7CisKKyAgICBtX2Fzc2VtYmxlci5tb3ZfaW1tOCgweDFmLCByZWdUMik7IC8vIHNoaWZ0IGFt
b3VudAorICAgIG1fYXNzZW1ibGVyLmFuZGxfcnIocmVnVDIsIHJlZ1QxKTsKKworICAgIGxzaGlm
dDMyKHJlZ1QxLCByZWdUMCk7CisKKyAgICBtX2Fzc2VtYmxlci5hZGR2bF9ycihyZWdUMCwgcmVn
VDApOworICAgIG1fYXNzZW1ibGVyLmFkZGxfaThyKDEsIHJlZ1QwKTsKKyAgICBKdW1wIG92ZXJm
bG93ID0gSnVtcChtX2Fzc2VtYmxlci5qbmUoKSk7CisgICAgbV9hc3NlbWJsZXIubm9wKCk7Cisg
ICAgbV9hc3NlbWJsZXIubm9wKCk7CisKKyAgICBub3RJbW0xLmxpbmsodGhpcyk7CisgICAgbm90
SW1tMi5saW5rKHRoaXMpOworCisgICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29w
X2xzaGlmdCk7CisgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQob3AxLCByZWdUMCk7CisgICAgc3R1
YkNhbGwuYWRkQXJndW1lbnQob3AyLCByZWdUMSk7CisgICAgc3R1YkNhbGwuY2FsbCgpOworICAg
IAorICAgIG92ZXJmbG93LmxpbmsodGhpcyk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihy
ZXN1bHQsIHJlZ1QwKTsKK30KK3ZvaWQgSklUOjplbWl0U2xvd19vcF9sc2hpZnQoSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBKSVQ6OmVtaXRf
b3BfcnNoaWZ0KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgdW5zaWdu
ZWQgcmVzdWx0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICB1bnNpZ25l
ZCBvcDEgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworICAgIHVuc2lnbmVkIG9w
MiA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CisKKyAgICBKdW1wIG5vdEltbTE7
CisgICAgSnVtcCBub3RJbW0yOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMob3AxLCBy
ZWdUMCwgb3AyLCByZWdUMSk7CisgICAgbV9hc3NlbWJsZXIudGVzdGxfaThyKChpbnQpSlNJbW1l
ZGlhdGU6OlRhZ1R5cGVOdW1iZXIsIHJlZ1QwKTsKKyAgICBub3RJbW0xID0gSnVtcChtX2Fzc2Vt
Ymxlci5qZSgpKTsKKyAgICBtX2Fzc2VtYmxlci5ub3AoKTsKKyAgICBtX2Fzc2VtYmxlci5ub3Ao
KTsKKworICAgIG1fYXNzZW1ibGVyLm1vdl9pbW04KChpbnQpSlNJbW1lZGlhdGU6OlRhZ1R5cGVO
dW1iZXIsIHJlZ1QzKTsKKyAgICBtX2Fzc2VtYmxlci50ZXN0bF9ycihyZWdUMywgcmVnVDEpOwor
ICAgIG5vdEltbTIgPSBKdW1wKG1fYXNzZW1ibGVyLmplKCkpOworICAgIG1fYXNzZW1ibGVyLm5v
cCgpOworICAgIG1fYXNzZW1ibGVyLm5vcCgpOworCisgICAgbV9hc3NlbWJsZXIuc2hscl9pOHIo
MSwgcmVnVDEpOworICAgIGFuZDMyKEltbTMyKDB4MWYpLCByZWdUMSk7CisgICAgbV9hc3NlbWJs
ZXIuc2hhcl9ycihyZWdUMCwgcmVnVDEpOworCisgICAgb3JQdHIoSW1tMzIoSlNJbW1lZGlhdGU6
OlRhZ1R5cGVOdW1iZXIpLCByZWdUMCk7CisKKyAgICBKdW1wIGVuZCA9IGp1bXAoKTsKKworICAg
IG5vdEltbTEubGluayh0aGlzKTsKKyAgICBub3RJbW0yLmxpbmsodGhpcyk7CisKKyAgICBKSVRT
dHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3BfcnNoaWZ0KTsgICAKKyAgICBzdHViQ2FsbC5h
ZGRBcmd1bWVudChyZWdUMCk7CisgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQocmVnVDEpOworCisg
ICAgc3R1YkNhbGwuY2FsbCgpOworCisgICAgZW5kLmxpbmsodGhpcyk7CisKKyAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVnVDApOworfQorCit2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfcnNoaWZ0KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9
CisKK3ZvaWQgSklUOjplbWl0X29wX2JpdGFuZChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQoreworICAgIHVuc2lnbmVkIHJlc3VsdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9w
ZXJhbmQ7CisgICAgdW5zaWduZWQgb3AxID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFu
ZDsKKyAgICB1bnNpZ25lZCBvcDIgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwor
ICAgIEp1bXAgbm90SW1tMTsKKworICAgIGlmIChpc09wZXJhbmRDb25zdGFudEltbWVkaWF0ZUlu
dChvcDEpKSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByZWdUMCk7Cisg
ICAgICAgIG1fYXNzZW1ibGVyLnRlc3RsX2k4cigoaW50KUpTSW1tZWRpYXRlOjpUYWdUeXBlTnVt
YmVyLCByZWdUMCk7CisgICAgICAgIG5vdEltbTEgPSBKdW1wKG1fYXNzZW1ibGVyLmplKCkpOwor
ICAgICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubm9wKCk7CisK
KyAgICAgICAgYW5kUHRyKEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KEpTSW1tZWRpYXRlOjpy
YXdWYWx1ZShnZXRDb25zdGFudE9wZXJhbmQob3AxKSkpKSwgcmVnVDApOworICAgIH0gZWxzZSBp
ZiAoaXNPcGVyYW5kQ29uc3RhbnRJbW1lZGlhdGVJbnQob3AyKSkgeworICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKG9wMSwgcmVnVDApOworICAgICAgICBtX2Fzc2VtYmxlci50ZXN0bF9p
OHIoKGludClKU0ltbWVkaWF0ZTo6VGFnVHlwZU51bWJlciwgcmVnVDApOworICAgICAgICBub3RJ
bW0xID0gSnVtcChtX2Fzc2VtYmxlci5qZSgpKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubm9wKCk7
CisgICAgICAgIG1fYXNzZW1ibGVyLm5vcCgpOworCisgICAgICAgIGFuZFB0cihJbW0zMihzdGF0
aWNfY2FzdDxpbnQzMl90PihKU0ltbWVkaWF0ZTo6cmF3VmFsdWUoZ2V0Q29uc3RhbnRPcGVyYW5k
KG9wMikpKSksIHJlZ1QwKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVycyhvcDEsIHJlZ1QwLCBvcDIsIHJlZ1QxKTsKKyAgICAgICAgYW5kUHRyKHJlZ1QxLCBy
ZWdUMCk7CisgICAgICAgIG1fYXNzZW1ibGVyLnRlc3RsX2k4cigoaW50KUpTSW1tZWRpYXRlOjpU
YWdUeXBlTnVtYmVyLCByZWdUMCk7CisgICAgICAgIG5vdEltbTEgPSBKdW1wKG1fYXNzZW1ibGVy
LmpuZSgpKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubm9wKCk7CisgICAgICAgIG1fYXNzZW1ibGVy
Lm5vcCgpOworICAgIH0KKworICAgIGlmIChpc09wZXJhbmRDb25zdGFudEltbWVkaWF0ZUludChv
cDEpKSB7CisgICAgICAgIEp1bXAgZW5kID0ganVtcCgpOworICAgICAgICBub3RJbW0xLmxpbmso
dGhpcyk7CisKKyAgICAgICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wX2JpdGFu
ZCk7CisgICAgICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KG9wMSwgcmVnVDEpOworICAgICAgICBz
dHViQ2FsbC5hZGRBcmd1bWVudChyZWdUMCk7CisgICAgICAgIHN0dWJDYWxsLmNhbGwoKTsKKwor
ICAgICAgICBlbmQubGluayh0aGlzKTsKKyAgICB9IGVsc2UgaWYgKGlzT3BlcmFuZENvbnN0YW50
SW1tZWRpYXRlSW50KG9wMikpIHsKKyAgICAgICAgSnVtcCBlbmQgPSBqdW1wKCk7CisgICAgICAg
IG5vdEltbTEubGluayh0aGlzKTsKKworICAgICAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlz
LCBjdGlfb3BfYml0YW5kKTsKKyAgICAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQocmVnVDApOwor
ICAgICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChvcDIsIHJlZ1QyKTsKKyAgICAgICAgc3R1YkNh
bGwuY2FsbCgpOworCisgICAgICAgIGVuZC5saW5rKHRoaXMpOworICAgIH0gZWxzZSB7CisgICAg
ICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9iaXRhbmQpOworICAgICAgICBz
dHViQ2FsbC5hZGRBcmd1bWVudChvcDEsIHJlZ1QyKTsKKyAgICAgICAgc3R1YkNhbGwuYWRkQXJn
dW1lbnQocmVnVDEpOworICAgICAgICBzdHViQ2FsbC5jYWxsKCk7CisKKyAgICAgICAgbm90SW1t
MS5saW5rKHRoaXMpOworICAgIH0KKyAgICAKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJl
c3VsdCk7Cit9Cit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfYml0YW5kKEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit7
CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9t
b2QoSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJikKK3sKKyAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KK3ZvaWQgSklUOjplbWl0U2xvd19vcF91cnNoaWZ0
KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9Cit2b2lkIEpJ
VDo6ZW1pdF9vcF91cnNoaWZ0KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7Cisg
ICAgdW5zaWduZWQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICB1
bnNpZ25lZCBvcDEgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworICAgIHVuc2ln
bmVkIG9wMiA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CisgICAgCisgICAgSklU
U3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wX3Vyc2hpZnQpOworICAgIHN0dWJDYWxsLmFk
ZEFyZ3VtZW50KG9wMSwgcmVnVDApOworICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KG9wMiwgcmVn
VDEpOworICAgIHN0dWJDYWxsLmNhbGwoZHN0KTsKK30KK3ZvaWQgSklUOjplbWl0U2xvd19vcF9q
bGVzc2VxKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIGJvb2wgaW52ZXJ0KQoreworICAgIHVuc2lnbmVkIG9wMSA9
IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgdW5zaWduZWQgb3AyID0gY3Vy
cmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKyAgICB1bnNpZ25lZCB0YXJnZXQgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworICAgIENvbmRpdGlvbiBpbnYgPSBpbnZlcnQg
PyBTSDRBc3NlbWJsZXI6OkVRIDogU0g0QXNzZW1ibGVyOjpORTsKKworICAgIC8vIFdlIGdlbmVy
YXRlIGlubGluZSBjb2RlIGZvciB0aGUgZm9sbG93aW5nIGNhc2VzIGluIHRoZSBzbG93IHBhdGg6
CisgICAgLy8gLSBmbG9hdGluZy1wb2ludCBudW1iZXIgdG8gY29uc3RhbnQgaW50IGltbWVkaWF0
ZQorICAgIC8vIC0gY29uc3RhbnQgaW50IGltbWVkaWF0ZSB0byBmbG9hdGluZy1wb2ludCBudW1i
ZXIKKyAgICAvLyAtIGZsb2F0aW5nLXBvaW50IG51bWJlciB0byBmbG9hdGluZy1wb2ludCBudW1i
ZXIuCisKKyAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbW1lZGlhdGVDaGFyKG9wMSkgfHwgaXNP
cGVyYW5kQ29uc3RhbnRJbW1lZGlhdGVDaGFyKG9wMikpIHsKKyAgICAgICAgbGlua1Nsb3dDYXNl
KGl0ZXIpOworICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7CisgICAgICAgIGxpbmtTbG93Q2Fz
ZShpdGVyKTsKKyAgICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOworICAgICAgICBKSVRTdHViQ2Fs
bCBzdHViQ2FsbCh0aGlzLCBjdGlfb3Bfamxlc3NlcSk7CisgICAgICAgIHN0dWJDYWxsLmFkZEFy
Z3VtZW50KG9wMSwgcmVnVDApOworICAgICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChvcDIsIHJl
Z1QxKTsKKyAgICAgICAgc3R1YkNhbGwuY2FsbCgpOworICAgICAgICBlbWl0SnVtcFNsb3dUb0hv
dChicmFuY2hUZXN0MzIoaW52LCByZWdUMCksIHRhcmdldCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbW1lZGlhdGVJbnQob3AyKSkgeworICAg
ICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7CisKKyAgICAgICAgSklUU3R1YkNhbGwgc3R1YkNhbGwo
dGhpcywgY3RpX29wX2psZXNzZXEpOworICAgICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChyZWdU
MCk7CisgICAgICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KG9wMiwgcmVnVDIpOworICAgICAgICBz
dHViQ2FsbC5jYWxsKCk7CisgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihp
bnYsIHJlZ1QwKSwgdGFyZ2V0KTsKKworICAgIH0gZWxzZSBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJ
bW1lZGlhdGVJbnQob3AxKSkgeworICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7CisKKyAgICAg
ICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wX2psZXNzZXEpOworICAgICAgICBz
dHViQ2FsbC5hZGRBcmd1bWVudChvcDEsIHJlZ1QyKTsKKyAgICAgICAgc3R1YkNhbGwuYWRkQXJn
dW1lbnQocmVnVDEpOworICAgICAgICBzdHViQ2FsbC5jYWxsKCk7CisgICAgICAgIGVtaXRKdW1w
U2xvd1RvSG90KGJyYW5jaFRlc3QzMihpbnYsIHJlZ1QwKSwgdGFyZ2V0KTsKKworICAgIH0gZWxz
ZSB7CisgICAgICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKKworICAgICAgICBsaW5rU2xvd0Nhc2Uo
aXRlcik7CisgICAgICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9qbGVzc2Vx
KTsKKyAgICAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQocmVnVDApOworICAgICAgICBzdHViQ2Fs
bC5hZGRBcmd1bWVudChyZWdUMSk7CisgICAgICAgIHN0dWJDYWxsLmNhbGwoKTsKKyAgICAgICAg
ZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKGludiwgcmVnVDApLCB0YXJnZXQpOworICAg
IH0KKworfQordm9pZCBKSVQ6OmVtaXRfb3Bfamxlc3NlcShJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBib29sIGludmVydCkKK3sKKyAgICB1bnNpZ25lZCBvcDEgPSBjdXJyZW50SW5z
dHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIHVuc2lnbmVkIG9wMiA9IGN1cnJlbnRJbnN0cnVj
dGlvblsyXS51Lm9wZXJhbmQ7CisgICAgdW5zaWduZWQgdGFyZ2V0ID0gY3VycmVudEluc3RydWN0
aW9uWzNdLnUub3BlcmFuZDsKKyAgICBDb25kaXRpb24gaW52OworCisKKworICAgIGlmIChpc09w
ZXJhbmRDb25zdGFudEltbWVkaWF0ZUNoYXIob3AxKSkgeworICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKG9wMiwgcmVnVDApOworICAgICAgICBhZGRTbG93Q2FzZShlbWl0SnVtcElmTm90
SlNDZWxsKHJlZ1QwKSk7CisgICAgICAgIEp1bXBMaXN0IGZhaWx1cmVzOworICAgICAgICBlbWl0
TG9hZENoYXJhY3RlclN0cmluZyhyZWdUMCwgcmVnVDAsIGZhaWx1cmVzKTsKKyAgICAgICAgYWRk
U2xvd0Nhc2UoZmFpbHVyZXMpOworICAgICAgICBpbnYgPSBpbnZlcnQgPyBTSDRBc3NlbWJsZXI6
OkxUIDogU0g0QXNzZW1ibGVyOjpHRTsKKyAgICAgICAgYWRkSnVtcChicmFuY2gzMihpbnYsIHJl
Z1QwLCBJbW0zMihhc1N0cmluZyhnZXRDb25zdGFudE9wZXJhbmQob3AxKSktPnRyeUdldFZhbHVl
KClbMF0pKSwgdGFyZ2V0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoaXNPcGVy
YW5kQ29uc3RhbnRJbW1lZGlhdGVDaGFyKG9wMikpIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihvcDEsIHJlZ1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoZW1pdEp1bXBJZk5vdEpT
Q2VsbChyZWdUMCkpOworICAgICAgICBKdW1wTGlzdCBmYWlsdXJlczsKKyAgICAgICAgZW1pdExv
YWRDaGFyYWN0ZXJTdHJpbmcocmVnVDAsIHJlZ1QwLCBmYWlsdXJlcyk7CisgICAgICAgIGFkZFNs
b3dDYXNlKGZhaWx1cmVzKTsKKyAgICAgICAgaW52ID0gaW52ZXJ0ID8gU0g0QXNzZW1ibGVyOjpH
VCA6IFNINEFzc2VtYmxlcjo6TEU7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoaW52LCByZWdU
MCwgSW1tMzIoYXNTdHJpbmcoZ2V0Q29uc3RhbnRPcGVyYW5kKG9wMikpLT50cnlHZXRWYWx1ZSgp
WzBdKSksIHRhcmdldCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKGlzT3BlcmFu
ZENvbnN0YW50SW1tZWRpYXRlSW50KG9wMikpIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihvcDEsIHJlZ1QwKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tZWRpYXRl
SW50ZWdlcihyZWdUMCk7CisgICAgICAgIGludiA9IGludmVydCA/IFNINEFzc2VtYmxlcjo6R1Qg
OiBTSDRBc3NlbWJsZXI6OkxFOworCisgICAgICAgIGludDMyX3Qgb3AyaW1tID0gc3RhdGljX2Nh
c3Q8aW50MzJfdD4oSlNJbW1lZGlhdGU6OnJhd1ZhbHVlKGdldENvbnN0YW50T3BlcmFuZChvcDIp
KSk7CisKKyAgICAgICAgYWRkSnVtcChicmFuY2gzMihpbnYsIHJlZ1QwLCBJbW0zMihvcDJpbW0p
KSwgdGFyZ2V0KTsKKyAgICB9IGVsc2UgaWYgKGlzT3BlcmFuZENvbnN0YW50SW1tZWRpYXRlSW50
KG9wMSkpIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJlZ1QxKTsKKyAg
ICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tZWRpYXRlSW50ZWdlcihyZWdUMSk7CisgICAg
ICAgIGludiA9IGludmVydCA/IFNINEFzc2VtYmxlcjo6TFQgOiBTSDRBc3NlbWJsZXI6OkdFOwor
CisgICAgICAgIGludDMyX3Qgb3AxaW1tID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4oSlNJbW1lZGlh
dGU6OnJhd1ZhbHVlKGdldENvbnN0YW50T3BlcmFuZChvcDEpKSk7CisKKyAgICAgICAgYWRkSnVt
cChicmFuY2gzMihpbnYsIHJlZ1QxLCBJbW0zMihvcDFpbW0pKSwgdGFyZ2V0KTsKKyAgICB9IGVs
c2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhvcDEsIHJlZ1QwLCBvcDIsIHJl
Z1QxKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tZWRpYXRlSW50ZWdlcihyZWdU
MCk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbWVkaWF0ZUludGVnZXIocmVnVDEp
OworICAgICAgICBpbnYgPSBpbnZlcnQgPyBTSDRBc3NlbWJsZXI6OkdUIDogU0g0QXNzZW1ibGVy
OjpMRTsKKworICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGludiwgcmVnVDAsIHJlZ1QxKSwgdGFy
Z2V0KTsKKyAgICB9Cit9Cit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShK
SVQpCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAgYi9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAKaW5kZXggMzY4ZWFiOS4uNDI0YTM2NSAxMDA2NDQKLS0t
IGEvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCisrKyBiL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRDYWxsLmNwcApAQCAtMTE4LDcgKzExOCwxMSBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2Fs
bChPcGNvZGVJRCBvcGNvZGVJRCwgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCB1bnNpZ25lZCkK
ICAgICAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoSklUOjpJbW0zMihyZWdpc3Rlck9mZnNldCkp
OwogICAgICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChKSVQ6OkltbTMyKGFyZ0NvdW50KSk7CiAg
ICAgICAgIHN0dWJDYWxsLmNhbGwoKTsKKyNpZiBDUFUoU0g0KQorICAgICAgICB3YXNFdmFsID0g
YnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBJbW0zMigoaW50KUpTVmFsdWU6OmVuY29kZShKU1Zh
bHVlKCkpKSwgZmFsc2UpOworI2Vsc2UKICAgICAgICAgd2FzRXZhbCA9IGJyYW5jaFB0cihOb3RF
cXVhbCwgcmVnVDAsIEltbVB0cihKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKSkpOworI2VuZGlm
CiAgICAgfQogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjYWxsZWUsIHJlZ1QwKTsKQEAg
LTE3NSw3ICsxNzksMTEgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoT3Bjb2RlSUQgb3Bjb2Rl
SUQsIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgdW5zaWduZWQgY2EKICAgICAgICAgc3R1YkNh
bGwuYWRkQXJndW1lbnQoSklUOjpJbW0zMihyZWdpc3Rlck9mZnNldCkpOwogICAgICAgICBzdHVi
Q2FsbC5hZGRBcmd1bWVudChKSVQ6OkltbTMyKGFyZ0NvdW50KSk7CiAgICAgICAgIHN0dWJDYWxs
LmNhbGwoKTsKKyNpZiBDUFUoU0g0KQorICAgICAgICB3YXNFdmFsID0gYnJhbmNoMzIoTm90RXF1
YWwsIHJlZ1QwLCBJbW0zMigoaW50KUpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpKSwgZmFsc2Up
OworI2Vsc2UKICAgICAgICAgd2FzRXZhbCA9IGJyYW5jaFB0cihOb3RFcXVhbCwgcmVnVDAsIElt
bVB0cihKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKSkpOworI2VuZGlmCiAgICAgfQogCiAgICAg
Ly8gVGhpcyBwbGFudHMgYSBjaGVjayBmb3IgYSBjYWNoZWQgSlNGdW5jdGlvbiB2YWx1ZSwgc28g
d2UgY2FuIHBsYW50IGEgZmFzdCBsaW5rIHRvIHRoZSBjYWxsZWUuCkBAIC0yMjMsOCArMjMxLDEz
IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UoSW5zdHJ1Y3Rpb24qIGluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46CiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwogCiAg
ICAgLy8gRmFzdCBjaGVjayBmb3IgSlMgZnVuY3Rpb24uCisjaWYgQ1BVKFNINCkKKyAgICBKdW1w
IGNhbGxMaW5rRmFpbE5vdE9iamVjdCA9IGVtaXRKdW1wSWZOb3RKU0NlbGwocmVnVDAsIGZhbHNl
KTsKKyAgICBKdW1wIGNhbGxMaW5rRmFpbE5vdEpTRnVuY3Rpb24gPSBicmFuY2gzMihOb3RFcXVh
bCwgQWRkcmVzcyhyZWdUMCksIEltbTMyKChpbnQpbV9nbG9iYWxEYXRhLT5qc0Z1bmN0aW9uVlB0
ciksIGZhbHNlKTsKKyNlbHNlCiAgICAgSnVtcCBjYWxsTGlua0ZhaWxOb3RPYmplY3QgPSBlbWl0
SnVtcElmTm90SlNDZWxsKHJlZ1QwKTsKICAgICBKdW1wIGNhbGxMaW5rRmFpbE5vdEpTRnVuY3Rp
b24gPSBicmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDApLCBJbW1QdHIobV9nbG9iYWxE
YXRhLT5qc0Z1bmN0aW9uVlB0cikpOworI2VuZGlmCiAKICAgICAvLyBTcGVjdWxhdGl2ZWx5IHJv
bGwgdGhlIGNhbGxmcmFtZSwgYXNzdW1pbmcgYXJnQ291bnQgd2lsbCBtYXRjaCB0aGUgYXJpdHku
CiAgICAgc3RvcmVQdHIoY2FsbEZyYW1lUmVnaXN0ZXIsIEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0
ZXIsIChSZWdpc3RlckZpbGU6OkNhbGxlckZyYW1lICsgcmVnaXN0ZXJPZmZzZXQpICogc3RhdGlj
X2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSkpOwpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENv
cmUvaml0L0pJVElubGluZU1ldGhvZHMuaCBiL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVN
ZXRob2RzLmgKaW5kZXggZTJlNzdkYi4uNTBkNjAzMiAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENv
cmUvaml0L0pJVElubGluZU1ldGhvZHMuaAorKysgYi9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5s
aW5lTWV0aG9kcy5oCkBAIC0xMDgsNyArMTA4LDEzIEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6
OmJlZ2luVW5pbnRlcnJ1cHRlZFNlcXVlbmNlKGludCBpbnNuU3BhY2UsIGludCBjb25zdFNwYWNl
CiAjZW5kaWYKIAogICAgIGVuc3VyZVNwYWNlKGluc25TcGFjZSwgY29uc3RTcGFjZSk7CisjZWxp
ZiBDUFUoU0g0KQorI2lmbmRlZiBOREVCVUcKKyAgICBpbnNuU3BhY2UgKz0gc2l6ZW9mKFNINFdv
cmQpOworICAgIGNvbnN0U3BhY2UgKz0gc2l6ZW9mKHVpbnQ2NF90KTsKKyNlbmRpZgogCisgICAg
bV9hc3NlbWJsZXIuZW5zdXJlU3BhY2UoaW5zblNwYWNlICArIG1fYXNzZW1ibGVyLm1heEluc3Ry
dWN0aW9uU2l6ZSwgY29uc3RTcGFjZSk7CiAjZW5kaWYKIAogI2lmIGRlZmluZWQoQVNTRU1CTEVS
X0hBU19DT05TVEFOVF9QT09MKSAmJiBBU1NFTUJMRVJfSEFTX0NPTlNUQU5UX1BPT0wKQEAgLTE0
Niw3ICsxNTIsMjIgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6cmVzdG9yZVJldHVybkFkZHJl
c3NCZWZvcmVSZXR1cm4oQWRkcmVzcyBhZGRyZXNzKQogewogICAgIGxvYWRQdHIoYWRkcmVzcywg
bGlua1JlZ2lzdGVyKTsKIH0KKyNlbGlmIENQVShTSDQpCisKK0FMV0FZU19JTkxJTkUgdm9pZCBK
SVQ6OnByZXNlcnZlUmV0dXJuQWRkcmVzc0FmdGVyQ2FsbChSZWdpc3RlcklEIHJlZykKK3sKKyAg
ICBtX2Fzc2VtYmxlci5zdHNwcihyZWcpOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpy
ZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihSZWdpc3RlcklEIHJlZykKK3sKKyAgICBt
X2Fzc2VtYmxlci5sZHNwcihyZWcpOworfQogCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpyZXN0
b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihBZGRyZXNzIGFkZHJlc3MpCit7CisgICAgbG9h
ZFB0ckxpbmtSZWcoYWRkcmVzcyk7Cit9CiAjZWxpZiBDUFUoTUlQUykKIAogQUxXQVlTX0lOTElO
RSB2b2lkIEpJVDo6cHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKFJlZ2lzdGVySUQgcmVn
KQpAQCAtMTk2LDYgKzIxNyw4IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OnJlc3RvcmVBcmd1
bWVudFJlZmVyZW5jZUZvclRyYW1wb2xpbmUoKQogICAgIGFkZFB0cihJbW0zMihzaXplb2Yodm9p
ZCopKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIsIGZpcnN0QXJndW1lbnRSZWdpc3Rlcik7CiAjZWxp
ZiBDUFUoQVJNKQogICAgIG1vdmUoc3RhY2tQb2ludGVyUmVnaXN0ZXIsIGZpcnN0QXJndW1lbnRS
ZWdpc3Rlcik7CisjZWxpZiBDUFUoU0g0KQorICAgIG1vdmUoc3RhY2tQb2ludGVyUmVnaXN0ZXIs
IGZpcnN0QXJndW1lbnRSZWdpc3Rlcik7CiAjZW5kaWYKICAgICAvLyBJbiB0aGUgdHJhbXBvbGlu
ZSBvbiB4ODYtNjQsIHRoZSBmaXJzdCBhcmd1bWVudCByZWdpc3RlciBpcyBub3Qgb3ZlcndyaXR0
ZW4uCiB9CkBAIC02NjksNiArNjkyLDEyIEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRK
dW1wU2xvd0Nhc2VJZkpTQ2VsbChSZWdpc3RlcklEIHJlZykKICAgICBhZGRTbG93Q2FzZShlbWl0
SnVtcElmSlNDZWxsKHJlZykpOwogfQogCisjaWYgQ1BVKFNINCkKK0FMV0FZU19JTkxJTkUgSklU
OjpKdW1wIEpJVDo6ZW1pdEp1bXBJZk5vdEpTQ2VsbChSZWdpc3RlcklEIHJlZywgYm9vbCBuZWVk
Q29uc3RhbnQpCit7CisgICAgcmV0dXJuIGJyYW5jaFRlc3QzMihOb25aZXJvLCByZWcsIEltbTMy
KEpTSW1tZWRpYXRlOjpUYWdNYXNrKSwgbmVlZENvbnN0YW50KTsKK30KKyNlbHNlCiBBTFdBWVNf
SU5MSU5FIEpJVDo6SnVtcCBKSVQ6OmVtaXRKdW1wSWZOb3RKU0NlbGwoUmVnaXN0ZXJJRCByZWcp
CiB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKQEAgLTY3Nyw2ICs3MDYsNyBAQCBBTFdBWVNfSU5MSU5F
IEpJVDo6SnVtcCBKSVQ6OmVtaXRKdW1wSWZOb3RKU0NlbGwoUmVnaXN0ZXJJRCByZWcpCiAgICAg
cmV0dXJuIGJyYW5jaFRlc3QzMihOb25aZXJvLCByZWcsIEltbTMyKEpTSW1tZWRpYXRlOjpUYWdN
YXNrKSk7CiAjZW5kaWYKIH0KKyNlbmRpZgogCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoUmVnaXN0ZXJJRCByZWcpCiB7CkBAIC03MTAsNiArNzQw
LDI0IEBAIGlubGluZSB2b2lkIEpJVDo6ZW1pdExvYWRJbnQzMlRvRG91YmxlKHVuc2lnbmVkIGlu
ZGV4LCBGUFJlZ2lzdGVySUQgdmFsdWUpCiB9CiAjZW5kaWYKIAorI2lmIENQVShTSDQpCitBTFdB
WVNfSU5MSU5FIEpJVDo6SnVtcCBKSVQ6OmVtaXRKdW1wSWZJbW1lZGlhdGVJbnRlZ2VyKFJlZ2lz
dGVySUQgcmVnLCBib29sIG5lZWRDb25zdGFudCkKK3sKKyAgICByZXR1cm4gYnJhbmNoVGVzdDMy
KE5vblplcm8sIHJlZywgSW1tMzIoSlNJbW1lZGlhdGU6OlRhZ1R5cGVOdW1iZXIpLCBuZWVkQ29u
c3RhbnQpOworfQorCitBTFdBWVNfSU5MSU5FIEpJVDo6SnVtcCBKSVQ6OmVtaXRKdW1wSWZOb3RJ
bW1lZGlhdGVJbnRlZ2VyKFJlZ2lzdGVySUQgcmVnLCBib29sIG5lZWRDb25zdGFudCkKK3sKKyAg
ICByZXR1cm4gYnJhbmNoVGVzdDMyKFplcm8sIHJlZywgSW1tMzIoSlNJbW1lZGlhdGU6OlRhZ1R5
cGVOdW1iZXIpLCBuZWVkQ29uc3RhbnQpOworfQorCitBTFdBWVNfSU5MSU5FIEpJVDo6SnVtcCBK
SVQ6OmVtaXRKdW1wSWZOb3RJbW1lZGlhdGVJbnRlZ2VycyhSZWdpc3RlcklEIHJlZzEsIFJlZ2lz
dGVySUQgcmVnMiwgUmVnaXN0ZXJJRCBzY3JhdGNoLCBib29sIG5lZWRDb25zdGFudCkKK3sKKyAg
ICBtb3ZlKHJlZzEsIHNjcmF0Y2gpOworICAgIGFuZFB0cihyZWcyLCBzY3JhdGNoKTsKKyAgICBy
ZXR1cm4gZW1pdEp1bXBJZk5vdEltbWVkaWF0ZUludGVnZXIoc2NyYXRjaCwgbmVlZENvbnN0YW50
KTsKK30KKyNlbHNlCiBBTFdBWVNfSU5MSU5FIEpJVDo6SnVtcCBKSVQ6OmVtaXRKdW1wSWZJbW1l
ZGlhdGVJbnRlZ2VyKFJlZ2lzdGVySUQgcmVnKQogewogI2lmIFVTRShKU1ZBTFVFNjQpCkBAIC03
MzQsNiArNzgyLDcgQEAgQUxXQVlTX0lOTElORSBKSVQ6Okp1bXAgSklUOjplbWl0SnVtcElmTm90
SW1tZWRpYXRlSW50ZWdlcnMoUmVnaXN0ZXJJRCByZWcxLCBSZWcKICAgICBhbmRQdHIocmVnMiwg
c2NyYXRjaCk7CiAgICAgcmV0dXJuIGVtaXRKdW1wSWZOb3RJbW1lZGlhdGVJbnRlZ2VyKHNjcmF0
Y2gpOwogfQorI2VuZGlmCiAKIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEltbWVkaWF0ZUludGVnZXIoUmVnaXN0ZXJJRCByZWcpCiB7CmRpZmYgLS1naXQgYS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAgYi9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
T3Bjb2Rlcy5jcHAKaW5kZXggMjhlZjRjYS4uOTkxNjRhOCAxMDA2NDQKLS0tIGEvSmF2YVNjcmlw
dENvcmUvaml0L0pJVE9wY29kZXMuY3BwCisrKyBiL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNv
ZGVzLmNwcApAQCAtNzYsMTIgKzc2LDEyIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUNUSU1h
Y2hpbmVUcmFtcG9saW5lcyhSZWZQdHI8RXhlY3V0YWJsZVBvb2w+KiBleGVjdXRhYmxlCiAgICAg
SnVtcExpc3QgY2FsbExpbmtGYWlsdXJlczsKICAgICBMYWJlbCB2aXJ0dWFsQ2FsbExpbmtCZWdp
biA9IGFsaWduKCk7CiAgICAgY29tcGlsZU9wQ2FsbEluaXRpYWxpemVDYWxsRnJhbWUoKTsKLSAg
ICBwcmVzZXJ2ZVJldHVybkFkZHJlc3NBZnRlckNhbGwocmVnVDMpOwotICAgIGVtaXRQdXRUb0Nh
bGxGcmFtZUhlYWRlcihyZWdUMywgUmVnaXN0ZXJGaWxlOjpSZXR1cm5QQyk7CisgICAgcHJlc2Vy
dmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKHJldHVyblBDKTsKKyAgICBlbWl0UHV0VG9DYWxsRnJh
bWVIZWFkZXIocmV0dXJuUEMsIFJlZ2lzdGVyRmlsZTo6UmV0dXJuUEMpOwogICAgIHJlc3RvcmVB
cmd1bWVudFJlZmVyZW5jZSgpOwogICAgIENhbGwgY2FsbExhenlMaW5rQ2FsbCA9IGNhbGwoKTsK
ICAgICBjYWxsTGlua0ZhaWx1cmVzLmFwcGVuZChicmFuY2hUZXN0UHRyKFplcm8sIHJlZ1QwKSk7
Ci0gICAgcmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4ocmVnVDMpOworICAgIHJlc3Rv
cmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKHJldHVyblBDKTsKICAgICBlbWl0R2V0RnJvbUNh
bGxGcmFtZUhlYWRlcjMyKFJlZ2lzdGVyRmlsZTo6QXJndW1lbnRDb3VudCwgcmVnVDEpOwogICAg
IGp1bXAocmVnVDApOwogCkBAIC04OSwxMiArODksMTIgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21w
aWxlQ1RJTWFjaGluZVRyYW1wb2xpbmVzKFJlZlB0cjxFeGVjdXRhYmxlUG9vbD4qIGV4ZWN1dGFi
bGUKICAgICAvLyByZWdUMCBob2xkcyBjYWxsZWUsIHJlZ1QxIGhvbGRzIGFyZ0NvdW50LiAgcmVn
VDIgd2lsbCBob2xkIHRoZSBGdW5jdGlvbkV4ZWN1dGFibGUuCiAgICAgTGFiZWwgdmlydHVhbENv
bnN0cnVjdExpbmtCZWdpbiA9IGFsaWduKCk7CiAgICAgY29tcGlsZU9wQ2FsbEluaXRpYWxpemVD
YWxsRnJhbWUoKTsKLSAgICBwcmVzZXJ2ZVJldHVybkFkZHJlc3NBZnRlckNhbGwocmVnVDMpOwot
ICAgIGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihyZWdUMywgUmVnaXN0ZXJGaWxlOjpSZXR1cm5Q
Qyk7CisgICAgcHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKHJldHVyblBDKTsKKyAgICBl
bWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIocmV0dXJuUEMsIFJlZ2lzdGVyRmlsZTo6UmV0dXJuUEMp
OwogICAgIHJlc3RvcmVBcmd1bWVudFJlZmVyZW5jZSgpOwogICAgIENhbGwgY2FsbExhenlMaW5r
Q29uc3RydWN0ID0gY2FsbCgpOwogICAgIGNhbGxMaW5rRmFpbHVyZXMuYXBwZW5kKGJyYW5jaFRl
c3RQdHIoWmVybywgcmVnVDApKTsKLSAgICByZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVy
bihyZWdUMyk7CisgICAgcmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4ocmV0dXJuUEMp
OwogICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyMzIoUmVnaXN0ZXJGaWxlOjpBcmd1bWVu
dENvdW50LCByZWdUMSk7CiAgICAganVtcChyZWdUMCk7CiAKQEAgLTEwNSwxMyArMTA1LDE3IEBA
IHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUNUSU1hY2hpbmVUcmFtcG9saW5lcyhSZWZQdHI8RXhl
Y3V0YWJsZVBvb2w+KiBleGVjdXRhYmxlCiAKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIE9C
SkVDVF9PRkZTRVRPRihKU0Z1bmN0aW9uLCBtX2V4ZWN1dGFibGUpKSwgcmVnVDIpOwogCisjaWYg
Q1BVKFNINCkKKyAgICBKdW1wIGhhc0NvZGVCbG9jazMgPSBicmFuY2gzMihHcmVhdGVyVGhhbk9y
RXF1YWwsIEFkZHJlc3MocmVnVDIsIE9CSkVDVF9PRkZTRVRPRihGdW5jdGlvbkV4ZWN1dGFibGUs
IG1fbnVtUGFyYW1ldGVyc0ZvckNhbGwpKSwgSW1tMzIoMCksIGZhbHNlKTsKKyNlbHNlCiAgICAg
SnVtcCBoYXNDb2RlQmxvY2szID0gYnJhbmNoMzIoR3JlYXRlclRoYW5PckVxdWFsLCBBZGRyZXNz
KHJlZ1QyLCBPQkpFQ1RfT0ZGU0VUT0YoRnVuY3Rpb25FeGVjdXRhYmxlLCBtX251bVBhcmFtZXRl
cnNGb3JDYWxsKSksIEltbTMyKDApKTsKLSAgICBwcmVzZXJ2ZVJldHVybkFkZHJlc3NBZnRlckNh
bGwocmVnVDMpOworI2VuZGlmCisgICAgcHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKHJl
dHVyblBDKTsKICAgICByZXN0b3JlQXJndW1lbnRSZWZlcmVuY2UoKTsKICAgICBDYWxsIGNhbGxD
b21waWxlQ2FsbCA9IGNhbGwoKTsKICAgICBjYWxsTGlua0ZhaWx1cmVzLmFwcGVuZChicmFuY2hU
ZXN0UHRyKFplcm8sIHJlZ1QwKSk7CiAgICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXIzMihS
ZWdpc3RlckZpbGU6OkFyZ3VtZW50Q291bnQsIHJlZ1QxKTsKLSAgICByZXN0b3JlUmV0dXJuQWRk
cmVzc0JlZm9yZVJldHVybihyZWdUMyk7CisgICAgcmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVS
ZXR1cm4ocmV0dXJuUEMpOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgT0JKRUNUX09GRlNF
VE9GKEpTRnVuY3Rpb24sIG1fZXhlY3V0YWJsZSkpLCByZWdUMik7CiAgICAgaGFzQ29kZUJsb2Nr
My5saW5rKHRoaXMpOwogCkBAIC0xMjUsMTMgKzEyOSwxNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNv
bXBpbGVDVElNYWNoaW5lVHJhbXBvbGluZXMoUmVmUHRyPEV4ZWN1dGFibGVQb29sPiogZXhlY3V0
YWJsZQogCiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBPQkpFQ1RfT0ZGU0VUT0YoSlNGdW5j
dGlvbiwgbV9leGVjdXRhYmxlKSksIHJlZ1QyKTsKIAorI2lmIENQVShTSDQpCisgICAgSnVtcCBo
YXNDb2RlQmxvY2s0ID0gYnJhbmNoMzIoR3JlYXRlclRoYW5PckVxdWFsLCBBZGRyZXNzKHJlZ1Qy
LCBPQkpFQ1RfT0ZGU0VUT0YoRnVuY3Rpb25FeGVjdXRhYmxlLCBtX251bVBhcmFtZXRlcnNGb3JD
b25zdHJ1Y3QpKSwgSW1tMzIoMCksIGZhbHNlKTsKKyNlbHNlCiAgICAgSnVtcCBoYXNDb2RlQmxv
Y2s0ID0gYnJhbmNoMzIoR3JlYXRlclRoYW5PckVxdWFsLCBBZGRyZXNzKHJlZ1QyLCBPQkpFQ1Rf
T0ZGU0VUT0YoRnVuY3Rpb25FeGVjdXRhYmxlLCBtX251bVBhcmFtZXRlcnNGb3JDb25zdHJ1Y3Qp
KSwgSW1tMzIoMCkpOwotICAgIHByZXNlcnZlUmV0dXJuQWRkcmVzc0FmdGVyQ2FsbChyZWdUMyk7
CisjZW5kaWYKKyAgICBwcmVzZXJ2ZVJldHVybkFkZHJlc3NBZnRlckNhbGwocmV0dXJuUEMpOwog
ICAgIHJlc3RvcmVBcmd1bWVudFJlZmVyZW5jZSgpOwogICAgIENhbGwgY2FsbENvbXBpbGVDb25z
dHJ1Y3QgPSBjYWxsKCk7CiAgICAgY2FsbExpbmtGYWlsdXJlcy5hcHBlbmQoYnJhbmNoVGVzdFB0
cihaZXJvLCByZWdUMCkpOwogICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyMzIoUmVnaXN0
ZXJGaWxlOjpBcmd1bWVudENvdW50LCByZWdUMSk7Ci0gICAgcmVzdG9yZVJldHVybkFkZHJlc3NC
ZWZvcmVSZXR1cm4ocmVnVDMpOworICAgIHJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJu
KHJldHVyblBDKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIE9CSkVDVF9PRkZTRVRPRihK
U0Z1bmN0aW9uLCBtX2V4ZWN1dGFibGUpKSwgcmVnVDIpOwogICAgIGhhc0NvZGVCbG9jazQubGlu
ayh0aGlzKTsKIApAQCAtMTU0LDExICsxNjIsMTMgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxl
Q1RJTWFjaGluZVRyYW1wb2xpbmVzKFJlZlB0cjxFeGVjdXRhYmxlUG9vbD4qIGV4ZWN1dGFibGUK
ICAgICBMYWJlbCBuYXRpdmVDYWxsVGh1bmsgPSBwcml2YXRlQ29tcGlsZUNUSU5hdGl2ZUNhbGwo
Z2xvYmFsRGF0YSk7ICAgIAogICAgIExhYmVsIG5hdGl2ZUNvbnN0cnVjdFRodW5rID0gcHJpdmF0
ZUNvbXBpbGVDVElOYXRpdmVDYWxsKGdsb2JhbERhdGEsIHRydWUpOyAgICAKIAorI2lmICFDUFUo
U0g0KQogI2lmIEVOQUJMRShKSVRfT1BUSU1JWkVfUFJPUEVSVFlfQUNDRVNTKQogICAgIENhbGwg
c3RyaW5nX2ZhaWx1cmVDYXNlczFDYWxsID0gbWFrZVRhaWxSZWN1cnNpdmVDYWxsKHN0cmluZ19m
YWlsdXJlQ2FzZXMxKTsKICAgICBDYWxsIHN0cmluZ19mYWlsdXJlQ2FzZXMyQ2FsbCA9IG1ha2VU
YWlsUmVjdXJzaXZlQ2FsbChzdHJpbmdfZmFpbHVyZUNhc2VzMik7CiAgICAgQ2FsbCBzdHJpbmdf
ZmFpbHVyZUNhc2VzM0NhbGwgPSBtYWtlVGFpbFJlY3Vyc2l2ZUNhbGwoc3RyaW5nX2ZhaWx1cmVD
YXNlczMpOwogI2VuZGlmCisjZW5kaWYKIAogICAgIC8vIEFsbCB0cmFtcG9saW5lcyBjb25zdHJ1
Y3RlZCEgY29weSB0aGUgY29kZSwgbGluayB1cCBjYWxscywgYW5kIHNldCB0aGUgcG9pbnRlcnMg
b24gdGhlIE1hY2hpbmUgb2JqZWN0LgogICAgICpleGVjdXRhYmxlUG9vbCA9IG1fZ2xvYmFsRGF0
YS0+ZXhlY3V0YWJsZUFsbG9jYXRvci5wb29sRm9yU2l6ZShtX2Fzc2VtYmxlci5zaXplKCkpOwpA
QCAtMTcxLDEwICsxODEsMTYgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlQ1RJTWFjaGluZVRy
YW1wb2xpbmVzKFJlZlB0cjxFeGVjdXRhYmxlUG9vbD4qIGV4ZWN1dGFibGUKICAgICAgICAgQ1JB
U0goKTsKIAogI2lmIEVOQUJMRShKSVRfT1BUSU1JWkVfUFJPUEVSVFlfQUNDRVNTKQorI2lmIENQ
VShTSDQpCisgICAgcGF0Y2hCdWZmZXIubGluayhzdHJpbmdfZmFpbHVyZUNhc2VzMSwgRnVuY3Rp
b25QdHIoY3RpX29wX2dldF9ieV9pZF9zdHJpbmdfZmFpbCkpOworICAgIHBhdGNoQnVmZmVyLmxp
bmsoc3RyaW5nX2ZhaWx1cmVDYXNlczIsIEZ1bmN0aW9uUHRyKGN0aV9vcF9nZXRfYnlfaWRfc3Ry
aW5nX2ZhaWwpKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKHN0cmluZ19mYWlsdXJlQ2FzZXMzLCBG
dW5jdGlvblB0cihjdGlfb3BfZ2V0X2J5X2lkX3N0cmluZ19mYWlsKSk7CisjZWxzZQogICAgIHBh
dGNoQnVmZmVyLmxpbmsoc3RyaW5nX2ZhaWx1cmVDYXNlczFDYWxsLCBGdW5jdGlvblB0cihjdGlf
b3BfZ2V0X2J5X2lkX3N0cmluZ19mYWlsKSk7CiAgICAgcGF0Y2hCdWZmZXIubGluayhzdHJpbmdf
ZmFpbHVyZUNhc2VzMkNhbGwsIEZ1bmN0aW9uUHRyKGN0aV9vcF9nZXRfYnlfaWRfc3RyaW5nX2Zh
aWwpKTsKICAgICBwYXRjaEJ1ZmZlci5saW5rKHN0cmluZ19mYWlsdXJlQ2FzZXMzQ2FsbCwgRnVu
Y3Rpb25QdHIoY3RpX29wX2dldF9ieV9pZF9zdHJpbmdfZmFpbCkpOwogI2VuZGlmCisjZW5kaWYK
ICNpZiBFTkFCTEUoSklUX09QVElNSVpFX0NBTEwpCiAgICAgcGF0Y2hCdWZmZXIubGluayhjYWxs
TGF6eUxpbmtDYWxsLCBGdW5jdGlvblB0cihjdGlfdm1fbGF6eUxpbmtDYWxsKSk7CiAgICAgcGF0
Y2hCdWZmZXIubGluayhjYWxsTGF6eUxpbmtDb25zdHJ1Y3QsIEZ1bmN0aW9uUHRyKGN0aV92bV9s
YXp5TGlua0NvbnN0cnVjdCkpOwpAQCAtMjM0LDggKzI1MCw4IEBAIEpJVDo6TGFiZWwgSklUOjpw
cml2YXRlQ29tcGlsZUNUSU5hdGl2ZUNhbGwoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBib29s
IGlzQ29uCiAgICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoUmVnaXN0ZXJGaWxlOjpT
Y29wZUNoYWluLCByZWdUMSwgcmVnVDIpOwogICAgIGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihy
ZWdUMSwgUmVnaXN0ZXJGaWxlOjpTY29wZUNoYWluKTsKIAotICAgIHByZXNlcnZlUmV0dXJuQWRk
cmVzc0FmdGVyQ2FsbChyZWdUMyk7IC8vIENhbGxlZSBwcmVzZXJ2ZWQKLSAgICBlbWl0UHV0VG9D
YWxsRnJhbWVIZWFkZXIocmVnVDMsIFJlZ2lzdGVyRmlsZTo6UmV0dXJuUEMpOworICAgIHByZXNl
cnZlUmV0dXJuQWRkcmVzc0FmdGVyQ2FsbChyZXR1cm5QQyk7IC8vIENhbGxlZSBwcmVzZXJ2ZWQK
KyAgICBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIocmV0dXJuUEMsIFJlZ2lzdGVyRmlsZTo6UmV0
dXJuUEMpOwogCiAgICAgLy8gQ2FsbGluZyBjb252ZW50aW9uOiAgICAgIGYocjAgPT0gcmVnVDAs
IHIxID09IHJlZ1QxLCAuLi4pOwogICAgIC8vIEhvc3QgZnVuY3Rpb24gc2lnbmF0dXJlOiBmKEV4
ZWNTdGF0ZSopOwpAQCAtMjQ2LDcgKzI2Miw3IEBAIEpJVDo6TGFiZWwgSklUOjpwcml2YXRlQ29t
cGlsZUNUSU5hdGl2ZUNhbGwoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBib29sIGlzQ29uCiAg
ICAgbG9hZFB0cihBZGRyZXNzKEFSTVJlZ2lzdGVyczo6cjEsIE9CSkVDVF9PRkZTRVRPRihKU0Z1
bmN0aW9uLCBtX2V4ZWN1dGFibGUpKSwgcmVnVDIpOwogICAgIGNhbGwoQWRkcmVzcyhyZWdUMiwg
ZXhlY3V0YWJsZU9mZnNldFRvRnVuY3Rpb24pKTsKIAotICAgIHJlc3RvcmVSZXR1cm5BZGRyZXNz
QmVmb3JlUmV0dXJuKHJlZ1QzKTsKKyAgICByZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVy
bihyZXR1cm5QQyk7CiAKICNlbGlmIENQVShNSVBTKQogICAgIC8vIExvYWQgY2FsbGVyIGZyYW1l
J3Mgc2NvcGUgY2hhaW4gaW50byB0aGlzIGNhbGxmcmFtZSBzbyB0aGF0IHdoYXRldmVyIHdlIGNh
bGwgY2FuCkBAIC0yNTUsOCArMjcxLDggQEAgSklUOjpMYWJlbCBKSVQ6OnByaXZhdGVDb21waWxl
Q1RJTmF0aXZlQ2FsbChKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGJvb2wgaXNDb24KICAgICBl
bWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihSZWdpc3RlckZpbGU6OlNjb3BlQ2hhaW4sIHJl
Z1QxLCByZWdUMCk7CiAgICAgZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKHJlZ1QxLCBSZWdpc3Rl
ckZpbGU6OlNjb3BlQ2hhaW4pOwogCi0gICAgcHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxs
KHJlZ1QzKTsgLy8gQ2FsbGVlIHByZXNlcnZlZAotICAgIGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRl
cihyZWdUMywgUmVnaXN0ZXJGaWxlOjpSZXR1cm5QQyk7CisgICAgcHJlc2VydmVSZXR1cm5BZGRy
ZXNzQWZ0ZXJDYWxsKHJldHVyblBDKTsgLy8gQ2FsbGVlIHByZXNlcnZlZAorICAgIGVtaXRQdXRU
b0NhbGxGcmFtZUhlYWRlcihyZXR1cm5QQywgUmVnaXN0ZXJGaWxlOjpSZXR1cm5QQyk7CiAKICAg
ICAvLyBDYWxsaW5nIGNvbnZlbnRpb246ICAgICAgZihhMCwgYTEsIGEyLCBhMyk7CiAgICAgLy8g
SG9zdCBmdW5jdGlvbiBzaWduYXR1cmU6IGYoRXhlY1N0YXRlKik7CkBAIC0yNzcsNyArMjkzLDMw
IEBAIEpJVDo6TGFiZWwgSklUOjpwcml2YXRlQ29tcGlsZUNUSU5hdGl2ZUNhbGwoSlNHbG9iYWxE
YXRhKiBnbG9iYWxEYXRhLCBib29sIGlzQ29uCiAgICAgLy8gUmVzdG9yZSBzdGFjayBzcGFjZQog
ICAgIGFkZFB0cihJbW0zMigxNiksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKIAotICAgIHJlc3Rv
cmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKHJlZ1QzKTsKKyAgICByZXN0b3JlUmV0dXJuQWRk
cmVzc0JlZm9yZVJldHVybihyZXR1cm5QQyk7CisjZWxpZiBDUFUoU0g0KQorICAgIC8vIExvYWQg
Y2FsbGVyIGZyYW1lJ3Mgc2NvcGUgY2hhaW4gaW50byB0aGlzIGNhbGxmcmFtZSBzbyB0aGF0IHdo
YXRldmVyIHdlIGNhbGwgY2FuCisgICAgLy8gZ2V0IHRvIGl0cyBnbG9iYWwgZGF0YS4KKyAgICBl
bWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihSZWdpc3RlckZpbGU6OkNhbGxlckZyYW1lLCBy
ZWdUMik7CisgICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoUmVnaXN0ZXJGaWxlOjpT
Y29wZUNoYWluLCByZWdUMSwgcmVnVDIpOworICAgIGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihy
ZWdUMSwgUmVnaXN0ZXJGaWxlOjpTY29wZUNoYWluKTsKKworICAgIHByZXNlcnZlUmV0dXJuQWRk
cmVzc0FmdGVyQ2FsbChyZXR1cm5QQyk7IC8vIENhbGxlZSBwcmVzZXJ2ZWQKKyAgICBlbWl0UHV0
VG9DYWxsRnJhbWVIZWFkZXIocmV0dXJuUEMsIFJlZ2lzdGVyRmlsZTo6UmV0dXJuUEMpOworCisg
ICAgLy8gQ2FsbGluZyBjb252ZW50aW9uOiAgICAgIGYocjAgPT0gcmVnVDQsIHIxID09IHJlZ1Q1
LCAuLi4pOworICAgIC8vIEhvc3QgZnVuY3Rpb24gc2lnbmF0dXJlOiBmKEV4ZWNTdGF0ZSopOwor
ICAgIG1vdmUoY2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1Q0KTsKKworICAgIGVtaXRHZXRGcm9tQ2Fs
bEZyYW1lSGVhZGVyUHRyKFJlZ2lzdGVyRmlsZTo6Q2FsbGVlLCByZWdUNSk7CisgICAgbW92ZShy
ZWdUMiwgY2FsbEZyYW1lUmVnaXN0ZXIpOyAvLyBFYWdlcmx5IHJlc3RvcmUgY2FsbGVyIGZyYW1l
IHJlZ2lzdGVyIHRvIGF2b2lkIGxvYWRpbmcgZnJvbSBzdGFjay4KKyAgICBsb2FkUHRyKEFkZHJl
c3MocmVnVDUsIE9CSkVDVF9PRkZTRVRPRihKU0Z1bmN0aW9uLCBtX2V4ZWN1dGFibGUpKSwgcmVn
VDIpOworCisgICAgbG9hZDMyKHJlZ1QyLCBleGVjdXRhYmxlT2Zmc2V0VG9GdW5jdGlvbiwgcmVn
VDApOworICAgIG1fYXNzZW1ibGVyLmJyYW5jaChKU1JfT1BDT0RFLCByZWdUMCk7CisgICAgbV9h
c3NlbWJsZXIubm9wKCk7CisKKyAgICByZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihy
ZXR1cm5QQyk7CiAKICNlbGlmIEVOQUJMRShKSVRfT1BUSU1JWkVfTkFUSVZFX0NBTEwpCiAjZXJy
b3IgIkpJVF9PUFRJTUlaRV9OQVRJVkVfQ0FMTCBub3QgeWV0IHN1cHBvcnRlZCBvbiB0aGlzIHBs
YXRmb3JtLiIKQEAgLTI4OCw3ICszMjcsMTEgQEAgSklUOjpMYWJlbCBKSVQ6OnByaXZhdGVDb21w
aWxlQ1RJTmF0aXZlQ2FsbChKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGJvb2wgaXNDb24KIAog
ICAgIC8vIENoZWNrIGZvciBhbiBleGNlcHRpb24KICAgICBsb2FkUHRyKCYoZ2xvYmFsRGF0YS0+
ZXhjZXB0aW9uKSwgcmVnVDIpOworI2lmIENQVShTSDQpCisgICAgSnVtcCBleGNlcHRpb25IYW5k
bGVyID0gYnJhbmNoVGVzdDMyKE5vblplcm8sIHJlZ1QyLCBJbW0zMigtMSksIGZhbHNlKTsKKyNl
bHNlCiAgICAgSnVtcCBleGNlcHRpb25IYW5kbGVyID0gYnJhbmNoVGVzdFB0cihOb25aZXJvLCBy
ZWdUMik7CisjZW5kaWYKIAogICAgIC8vIFJldHVybi4KICAgICByZXQoKTsKQEAgLTM0NCw4ICsz
ODcsMTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW5kKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiAgICAgICAgIEpJVFN0dWJDYWxsKHRoaXMsIGN0aV9vcF9lbmQpLmNhbGwoKTsKICAg
ICBBU1NFUlQocmV0dXJuVmFsdWVSZWdpc3RlciAhPSBjYWxsRnJhbWVSZWdpc3Rlcik7CiAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBy
ZXR1cm5WYWx1ZVJlZ2lzdGVyKTsKKyNpZiBDUFUoU0g0KQorICAgIGxvYWQzMihjYWxsRnJhbWVS
ZWdpc3RlciwgUmVnaXN0ZXJGaWxlOjpSZXR1cm5QQyAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9m
KFJlZ2lzdGVyKSksIHJlZ1QyKTsKKyAgICBqdW1wKHJlZ1QyKTsKKyNlbHNlCiAgICAgcmVzdG9y
ZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4oQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3RlciwgUmVn
aXN0ZXJGaWxlOjpSZXR1cm5QQyAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkp
KTsKICAgICByZXQoKTsKKyNlbmRpZgogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbXAoSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTQxNiwxMyArNDY0LDE4IEBAIHZvaWQgSklU
OjplbWl0X29wX2luc3RhbmNlb2YoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAg
ICAvLyBPdGhlcndpc2UsIGNoZWNrIGlmIHdlJ3ZlIGhpdCBudWxsIC0gaWYgd2UgaGF2ZSB0aGVu
IGRyb3Agb3V0IG9mIHRoZSBsb29wLCBpZiBub3QgZ28gYWdhaW4uCiAgICAgbG9hZFB0cihBZGRy
ZXNzKHJlZ1QyLCBPQkpFQ1RfT0ZGU0VUT0YoSlNDZWxsLCBtX3N0cnVjdHVyZSkpLCByZWdUMik7
CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBPQkpFQ1RfT0ZGU0VUT0YoU3RydWN0dXJlLCBt
X3Byb3RvdHlwZSkpLCByZWdUMik7Ci0gICAgSnVtcCBpc0luc3RhbmNlID0gYnJhbmNoUHRyKEVx
dWFsLCByZWdUMiwgcmVnVDEpOworI2lmIENQVShTSDQpCisgICAgSnVtcCBpc0luc3RhbmNlID0g
YnJhbmNoMzIoRXF1YWwsIHJlZ1QyLCByZWdUMSwgZmFsc2UpOworI2Vsc2UKKyAgICBKdW1wIGlz
SW5zdGFuY2UgPSBicmFuY2gzMihFcXVhbCwgcmVnVDIsIHJlZ1QxKTsKKyNlbmRpZgogICAgIGVt
aXRKdW1wSWZKU0NlbGwocmVnVDIpLmxpbmtUbyhsb29wLCB0aGlzKTsKIAogICAgIC8vIFdlIGdl
dCBoZXJlIGVpdGhlciBieSBkcm9wcGluZyBvdXQgb2YgdGhlIGxvb3AsIG9yIGlmIHZhbHVlIHdh
cyBub3QgYW4gT2JqZWN0LiAgUmVzdWx0IGlzIGZhbHNlLgogICAgIG1vdmUoSW1tUHRyKEpTVmFs
dWU6OmVuY29kZShqc0Jvb2xlYW4oZmFsc2UpKSksIHJlZ1QwKTsKIAogICAgIC8vIGlzSW5zdGFu
Y2UganVtcHMgcmlnaHQgZG93biB0byBoZXJlLCB0byBza2lwIHNldHRpbmcgdGhlIHJlc3VsdCB0
byBmYWxzZSAoaXQgaGFzIGFscmVhZHkgc2V0IHRydWUpLgorCiAgICAgaXNJbnN0YW5jZS5saW5r
KHRoaXMpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KQEAgLTQ4Nyw4ICs1
NDAsMjUgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Njb3BlZF92YXIoSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKICAgICBpbnQgc2tpcCA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51
Lm9wZXJhbmQ7CiAKICAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihSZWdpc3RlckZp
bGU6OlNjb3BlQ2hhaW4sIHJlZ1QwKTsKKyNpZiBDUFUoU0g0KQorICAgIGludCBvZmZzZXQgPSBP
QkpFQ1RfT0ZGU0VUT0YoU2NvcGVDaGFpbk5vZGUsIG5leHQpOworCisgICAgbV9hc3NlbWJsZXIu
ZW5zdXJlU3BhY2Uoc2tpcCoyICsgbV9hc3NlbWJsZXIubWF4SW5zdHJ1Y3Rpb25TaXplKTsKKyAg
ICBpZiAoKHNraXApICYmICgob2Zmc2V0KSA8IDApIHx8ICggb2Zmc2V0ID49IDY0KSkKKyAgICAg
ICAgbV9hc3NlbWJsZXIuTG9hZENvbnN0YW50KG9mZnNldCwgcmVnVDEpOworCisgICAgd2hpbGUg
KHNraXAtLSkgeworICAgICAgICBpZiAoKG9mZnNldCA8IDApIHx8IChvZmZzZXQgPj0gNjQpKQor
ICAgICAgICAgICAgbV9hc3NlbWJsZXIubW92bF9yMG1yKHJlZ1QxLCByZWdUMCk7CisgICAgICAg
IGVsc2UgaWYgKG9mZnNldCkKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLm1vdmxfbXIob2Zmc2V0
ID4+IDIsIHJlZ1QwLCByZWdUMCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fYXNzZW1i
bGVyLm1vdmxfbXIocmVnVDAsIHJlZ1QwKTsKKyAgICB9CisjZWxzZQogICAgIHdoaWxlIChza2lw
LS0pCiAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgT0JKRUNUX09GRlNFVE9GKFNjb3Bl
Q2hhaW5Ob2RlLCBuZXh0KSksIHJlZ1QwKTsKKyNlbmRpZgogCiAgICAgbG9hZFB0cihBZGRyZXNz
KHJlZ1QwLCBPQkpFQ1RfT0ZGU0VUT0YoU2NvcGVDaGFpbk5vZGUsIG9iamVjdCkpLCByZWdUMCk7
CiAgICAgZW1pdEdldFZhcmlhYmxlT2JqZWN0UmVnaXN0ZXIocmVnVDAsIGN1cnJlbnRJbnN0cnVj
dGlvblsyXS51Lm9wZXJhbmQsIHJlZ1QwKTsKQEAgLTUwMCwxMiArNTcwLDMzIEBAIHZvaWQgSklU
OjplbWl0X29wX3B1dF9zY29wZWRfdmFyKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiAgICAgaW50IHNraXAgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwogCiAgICAg
ZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoUmVnaXN0ZXJGaWxlOjpTY29wZUNoYWluLCBy
ZWdUMSk7CisjaWYgQ1BVKFNINCkKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJ
bnN0cnVjdGlvblszXS51Lm9wZXJhbmQsIHJlZ1QzKTsKKyAgICBpbnQgb2Zmc2V0ID0gT0JKRUNU
X09GRlNFVE9GKFNjb3BlQ2hhaW5Ob2RlLCBuZXh0KTsKKworICAgIG1fYXNzZW1ibGVyLmVuc3Vy
ZVNwYWNlKHNraXAqMiArIG1fYXNzZW1ibGVyLm1heEluc3RydWN0aW9uU2l6ZSk7CisgICAgaWYg
KChza2lwKSAmJiAoKG9mZnNldCA8IDApIHx8ICggb2Zmc2V0ID49IDY0KSkpCisgICAgICAgIG1f
YXNzZW1ibGVyLkxvYWRDb25zdGFudChvZmZzZXQsIHJlZ1QwKTsKKworICAgIHdoaWxlIChza2lw
LS0pIHsKKyAgICAgICAgaWYgKChvZmZzZXQgPCAwKSB8fCAob2Zmc2V0ID49IDY0KSkKKyAgICAg
ICAgICAgIG1fYXNzZW1ibGVyLm1vdmxfcjBtcihyZWdUMSwgcmVnVDEpOworICAgICAgICBlbHNl
IGlmIChvZmZzZXQpCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5tb3ZsX21yKG9mZnNldCA+PiAy
LCByZWdUMSwgcmVnVDEpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5t
b3ZsX21yKHJlZ1QxLCByZWdUMSk7CisgICAgfQorCisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1Qx
LCBPQkpFQ1RfT0ZGU0VUT0YoU2NvcGVDaGFpbk5vZGUsIG9iamVjdCkpLCByZWdUMSk7CisgICAg
ZW1pdFB1dFZhcmlhYmxlT2JqZWN0UmVnaXN0ZXIocmVnVDMsIHJlZ1QxLCBjdXJyZW50SW5zdHJ1
Y3Rpb25bMV0udS5vcGVyYW5kKTsKKyNlbHNlCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihj
dXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kLCByZWdUMCk7CiAgICAgd2hpbGUgKHNraXAt
LSkKICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBPQkpFQ1RfT0ZGU0VUT0YoU2NvcGVD
aGFpbk5vZGUsIG5leHQpKSwgcmVnVDEpOwogCiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBP
QkpFQ1RfT0ZGU0VUT0YoU2NvcGVDaGFpbk5vZGUsIG9iamVjdCkpLCByZWdUMSk7CiAgICAgZW1p
dFB1dFZhcmlhYmxlT2JqZWN0UmVnaXN0ZXIocmVnVDAsIHJlZ1QxLCBjdXJyZW50SW5zdHJ1Y3Rp
b25bMV0udS5vcGVyYW5kKTsKKyNlbmRpZgogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90ZWFyX29m
Zl9hY3RpdmF0aW9uKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC01MjAsMTAg
KzYxMSwxNSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90ZWFyX29mZl9hcmd1bWVudHMoSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICB1bnNpZ25lZCBkc3QgPSBjdXJyZW50SW5z
dHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwogCisjaWYgQ1BVKFNINCkKKyAgICBKdW1wIGFyZ3NOb3RD
cmVhdGVkID0gYnJhbmNoVGVzdDMyKFplcm8sIEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIHNp
emVvZihSZWdpc3RlcikgKiAodW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyKGRzdCkpKSwgSW1t
MzIoLTEpLCBmYWxzZSk7CisjZWxzZQogICAgIEp1bXAgYXJnc05vdENyZWF0ZWQgPSBicmFuY2hU
ZXN0UHRyKFplcm8sIEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIHNpemVvZihSZWdpc3Rlcikg
KiAodW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyKGRzdCkpKSk7CisjZW5kaWYKICAgICBKSVRT
dHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3BfdGVhcl9vZmZfYXJndW1lbnRzKTsKICAgICBz
dHViQ2FsbC5hZGRBcmd1bWVudCh1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIoZHN0KSwgcmVn
VDIpOwogICAgIHN0dWJDYWxsLmNhbGwoKTsKKwogICAgIGFyZ3NOb3RDcmVhdGVkLmxpbmsodGhp
cyk7CiB9CiAKQEAgLTU2Myw5ICs2NTksMTUgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmV0X29iamVj
dF9vcl90aGlzKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAKICAgICAvLyBSZXR1
cm4gdGhlIHJlc3VsdCBpbiAlZWF4LgogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY3VycmVu
dEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgcmV0dXJuVmFsdWVSZWdpc3Rlcik7CisjaWYgQ1BV
KFNINCkKKyAgICBKdW1wIG5vdEpTQ2VsbCA9IGVtaXRKdW1wSWZOb3RKU0NlbGwocmV0dXJuVmFs
dWVSZWdpc3RlciwgZmFsc2UpOworICAgIGxvYWRQdHIoQWRkcmVzcyhyZXR1cm5WYWx1ZVJlZ2lz
dGVyLCBPQkpFQ1RfT0ZGU0VUT0YoSlNDZWxsLCBtX3N0cnVjdHVyZSkpLCByZWdUMik7CisgICAg
SnVtcCBub3RPYmplY3QgPSBicmFuY2g4KE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QyLCBPQkpFQ1Rf
T0ZGU0VUT0YoU3RydWN0dXJlLCBtX3R5cGVJbmZvKSArIE9CSkVDVF9PRkZTRVRPRihUeXBlSW5m
bywgbV90eXBlKSksIEltbTMyKE9iamVjdFR5cGUpLCBmYWxzZSk7CisjZWxzZQogICAgIEp1bXAg
bm90SlNDZWxsID0gZW1pdEp1bXBJZk5vdEpTQ2VsbChyZXR1cm5WYWx1ZVJlZ2lzdGVyKTsKICAg
ICBsb2FkUHRyKEFkZHJlc3MocmV0dXJuVmFsdWVSZWdpc3RlciwgT0JKRUNUX09GRlNFVE9GKEpT
Q2VsbCwgbV9zdHJ1Y3R1cmUpKSwgcmVnVDIpOwogICAgIEp1bXAgbm90T2JqZWN0ID0gYnJhbmNo
OChOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMiwgT0JKRUNUX09GRlNFVE9GKFN0cnVjdHVyZSwgbV90
eXBlSW5mbykgKyBPQkpFQ1RfT0ZGU0VUT0YoVHlwZUluZm8sIG1fdHlwZSkpLCBJbW0zMihPYmpl
Y3RUeXBlKSk7CisjZW5kaWYKIAogICAgIC8vIEdyYWIgdGhlIHJldHVybiBhZGRyZXNzLgogICAg
IGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKFJlZ2lzdGVyRmlsZTo6UmV0dXJuUEMsIHJl
Z1QxKTsKQEAgLTYxNCw4ICs3MTYsMTIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJpbWl0aXZl
KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgaW50IHNyYyA9IGN1cnJlbnRJ
bnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNy
YywgcmVnVDApOwotICAgIAorCisjaWYgQ1BVKFNINCkKKyAgICBKdW1wIGlzSW1tID0gZW1pdEp1
bXBJZk5vdEpTQ2VsbChyZWdUMCwgZmFsc2UpOworI2Vsc2UgICAgCiAgICAgSnVtcCBpc0ltbSA9
IGVtaXRKdW1wSWZOb3RKU0NlbGwocmVnVDApOworI2VuZGlmCiAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwKSwgSW1tUHRyKG1fZ2xvYmFsRGF0YS0+anNT
dHJpbmdWUHRyKSkpOwogICAgIGlzSW1tLmxpbmsodGhpcyk7CiAKQEAgLTY5OCw3ICs4MDQsMTEg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfamZhbHNlKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5v
cGVyYW5kLCByZWdUMCk7CiAKICAgICBhZGRKdW1wKGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIElt
bVB0cihKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIobV9nbG9iYWxEYXRhLCAwKSkpKSwgdGFyZ2V0
KTsKKyNpZiBDUFUoU0g0KQorICAgIEp1bXAgaXNOb25aZXJvID0gZW1pdEp1bXBJZkltbWVkaWF0
ZUludGVnZXIocmVnVDAsIGZhbHNlKTsKKyNlbHNlCiAgICAgSnVtcCBpc05vblplcm8gPSBlbWl0
SnVtcElmSW1tZWRpYXRlSW50ZWdlcihyZWdUMCk7CisjZW5kaWYKIAogICAgIGFkZEp1bXAoYnJh
bmNoUHRyKEVxdWFsLCByZWdUMCwgSW1tUHRyKEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oZmFs
c2UpKSkpLCB0YXJnZXQpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaFB0cihOb3RFcXVhbCwgcmVn
VDAsIEltbVB0cihKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRydWUpKSkpKTsKQEAgLTcxMyw3
ICs4MjMsMTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfamVxX251bGwoSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25b
Ml0udS5vcGVyYW5kOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsK
KyNpZiBDUFUoU0g0KQorICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBlbWl0SnVtcElmTm90SlNDZWxs
KHJlZ1QwLCBmYWxzZSk7CisjZWxzZQogICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBlbWl0SnVtcElm
Tm90SlNDZWxsKHJlZ1QwKTsKKyNlbmRpZgogCiAgICAgLy8gRmlyc3QsIGhhbmRsZSBKU0NlbGwg
Y2FzZXMgLSBjaGVjayBNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0dXJl
LgogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgT0JKRUNUX09GRlNFVE9GKEpTQ2VsbCwgbV9z
dHJ1Y3R1cmUpKSwgcmVnVDIpOwpAQCAtNzIyLDYgKzgzNiw3IEBAIHZvaWQgSklUOjplbWl0X29w
X2plcV9udWxsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAKICAgICAvLyBOb3cg
aGFuZGxlIHRoZSBpbW1lZGlhdGUgY2FzZXMgLSB1bmRlZmluZWQgJiBudWxsCiAgICAgaXNJbW1l
ZGlhdGUubGluayh0aGlzKTsKKwogICAgIGFuZFB0cihJbW0zMih+SlNJbW1lZGlhdGU6OkV4dGVu
ZGVkVGFnQml0VW5kZWZpbmVkKSwgcmVnVDApOwogICAgIGFkZEp1bXAoYnJhbmNoUHRyKEVxdWFs
LCByZWdUMCwgSW1tUHRyKEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsgICAg
ICAgICAgICAKIApAQCAtNzM0LDcgKzg0OSwxMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX251
bGwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICB1bnNpZ25lZCB0YXJnZXQg
PSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwogCiAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihzcmMsIHJlZ1QwKTsKKyNpZiBDUFUoU0g0KQorICAgIEp1bXAgaXNJbW1lZGlhdGUg
PSBlbWl0SnVtcElmTm90SlNDZWxsKHJlZ1QwLCBmYWxzZSk7CisjZWxzZQogICAgIEp1bXAgaXNJ
bW1lZGlhdGUgPSBlbWl0SnVtcElmTm90SlNDZWxsKHJlZ1QwKTsKKyNlbmRpZgogCiAgICAgLy8g
Rmlyc3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
IGJpdCBvbiB0aGUgc3RydWN0dXJlLgogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgT0JKRUNU
X09GRlNFVE9GKEpTQ2VsbCwgbV9zdHJ1Y3R1cmUpKSwgcmVnVDIpOwpAQCAtNzQyLDcgKzg2MSw5
IEBAIHZvaWQgSklUOjplbWl0X29wX2puZXFfbnVsbChJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgpOwogCiAgICAgLy8gTm93
IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZpbmVkICYgbnVsbAorCiAgICAgaXNJ
bW1lZGlhdGUubGluayh0aGlzKTsKKwogICAgIGFuZFB0cihJbW0zMih+SlNJbW1lZGlhdGU6OkV4
dGVuZGVkVGFnQml0VW5kZWZpbmVkKSwgcmVnVDApOwogICAgIGFkZEp1bXAoYnJhbmNoUHRyKE5v
dEVxdWFsLCByZWdUMCwgSW1tUHRyKEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0
KTsgICAgICAgICAgICAKIApAQCAtODIxLDEzICs5NDIsMTkgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
anRydWUoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICB1bnNpZ25lZCB0YXJn
ZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwogICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgcmVnVDApOwogCisjaWYg
Q1BVKFNINCkKKyAgICBKdW1wIGlzWmVybyA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgSW1tMzIo
KGludCkoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKG1fZ2xvYmFsRGF0YSwgMCkpKSksIGZhbHNl
KTsKKyNlbHNlCiAgICAgSnVtcCBpc1plcm8gPSBicmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCBJbW1Q
dHIoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKG1fZ2xvYmFsRGF0YSwgMCkpKSk7CisjZW5kaWYK
ICAgICBhZGRKdW1wKGVtaXRKdW1wSWZJbW1lZGlhdGVJbnRlZ2VyKHJlZ1QwKSwgdGFyZ2V0KTsK
IAogICAgIGFkZEp1bXAoYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgSW1tUHRyKEpTVmFsdWU6OmVu
Y29kZShqc0Jvb2xlYW4odHJ1ZSkpKSksIHRhcmdldCk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
UHRyKE5vdEVxdWFsLCByZWdUMCwgSW1tUHRyKEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oZmFs
c2UpKSkpKTsKIAorCiAgICAgaXNaZXJvLmxpbmsodGhpcyk7CisKICAgICBSRUNPUkRfSlVNUF9U
QVJHRVQodGFyZ2V0KTsKIH0KIApAQCAtODM1LDggKzk2MiwxNSBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9uZXEoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVycyhjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kLCByZWdUMCwgY3Vy
cmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEltbWVkaWF0ZUludGVnZXJzKHJlZ1QwLCByZWdUMSwgcmVnVDIpOworI2lmIENQVShT
SDQpCisgICAgbV9hc3NlbWJsZXIuY21wbF9ycihyZWdUMSwgcmVnVDAsIEVxdWFsKTsKKyAgICBt
X2Fzc2VtYmxlci5Mb2FkQ29uc3RhbnQoKGludCkoSlNWYWx1ZTo6ZW5jb2RlKEpTSW1tZWRpYXRl
OjpmYWxzZUltbWVkaWF0ZSgpKSksIHJlZ1QwKTsKKyAgICBtX2Fzc2VtYmxlci5icmFuY2goQlRf
T1BDT0RFLCAwKTsKKyAgICBtX2Fzc2VtYmxlci5Mb2FkQ29uc3RhbnQoKGludCkoSlNWYWx1ZTo6
ZW5jb2RlKEpTSW1tZWRpYXRlOjp0cnVlSW1tZWRpYXRlKCkpKSwgcmVnVDApOworI2Vsc2UKICAg
ICBzZXQzMihOb3RFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7CiAgICAgZW1pdFRhZ0FzQm9v
bEltbWVkaWF0ZShyZWdUMCk7CisjZW5kaWYKIAogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
Y3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7CiAKQEAgLTg4Nyw3ICsxMDIxLDExIEBA
IHZvaWQgSklUOjplbWl0X29wX2dldF9wbmFtZXMoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKICAgICAgICAgaXNOb3RPYmplY3QuYXBwZW5kKGVtaXRKdW1wSWZOb3RKU0NlbGwocmVn
VDApKTsKICAgICBpZiAoYmFzZSAhPSBtX2NvZGVCbG9jay0+dGhpc1JlZ2lzdGVyKCkpIHsKICAg
ICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBPQkpFQ1RfT0ZGU0VUT0YoSlNDZWxsLCBtX3N0
cnVjdHVyZSkpLCByZWdUMik7CisjaWYgQ1BVKFNINCkKKyAgICAgICAgaXNOb3RPYmplY3QuYXBw
ZW5kKGJyYW5jaDgoTm90RXF1YWwsIEFkZHJlc3MocmVnVDIsIE9CSkVDVF9PRkZTRVRPRihTdHJ1
Y3R1cmUsIG1fdHlwZUluZm8ubV90eXBlKSksIEltbTMyKE9iamVjdFR5cGUpLCBmYWxzZSkpOwor
I2Vsc2UKICAgICAgICAgaXNOb3RPYmplY3QuYXBwZW5kKGJyYW5jaDgoTm90RXF1YWwsIEFkZHJl
c3MocmVnVDIsIE9CSkVDVF9PRkZTRVRPRihTdHJ1Y3R1cmUsIG1fdHlwZUluZm8ubV90eXBlKSks
IEltbTMyKE9iamVjdFR5cGUpKSk7CisjZW5kaWYKICAgICB9CiAKICAgICAvLyBXZSBjb3VsZCBp
bmxpbmUgdGhlIGNhc2Ugd2hlcmUgeW91IGhhdmUgYSB2YWxpZCBjYWNoZSwgYnV0CkBAIC0xMDA5
LDEyICsxMTQ3LDI0IEBAIHZvaWQgSklUOjpjb21waWxlT3BTdHJpY3RFcShJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBDb21waWxlT3BTdHJpY3RFcVR5CiAgICAgb3JQdHIocmVnVDEs
IHJlZ1QyKTsKICAgICBhZGRTbG93Q2FzZShlbWl0SnVtcElmSlNDZWxsKHJlZ1QyKSk7CiAgICAg
YWRkU2xvd0Nhc2UoZW1pdEp1bXBJZkltbWVkaWF0ZU51bWJlcihyZWdUMikpOworI2lmIENQVShT
SDQpCisgICAgbV9hc3NlbWJsZXIuY21wbF9ycihyZWdUMSwgcmVnVDAsIEVxdWFsKTsKKyAgICBp
ZiAodHlwZSA9PSBPcFN0cmljdEVxKSB7CisgICAgICAgIG1fYXNzZW1ibGVyLm1vdnQocmVnVDAp
OworICAgICAgICBlbWl0VGFnQXNCb29sSW1tZWRpYXRlKHJlZ1QwKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBtX2Fzc2VtYmxlci5Mb2FkQ29uc3RhbnQoKGludCkoSlNWYWx1ZTo6ZW5jb2RlKEpT
SW1tZWRpYXRlOjpmYWxzZUltbWVkaWF0ZSgpKSksIHJlZ1QwKTsKKyAgICAgICAgbV9hc3NlbWJs
ZXIuYnJhbmNoKEJUX09QQ09ERSwgMCk7CisgICAgICAgIG1fYXNzZW1ibGVyLkxvYWRDb25zdGFu
dCgoaW50KShKU1ZhbHVlOjplbmNvZGUoSlNJbW1lZGlhdGU6OnRydWVJbW1lZGlhdGUoKSkpLCBy
ZWdUMCk7CisgICAgfQorI2Vsc2UKIAogICAgIGlmICh0eXBlID09IE9wU3RyaWN0RXEpCiAgICAg
ICAgIHNldDMyKEVxdWFsLCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsKICAgICBlbHNlCiAgICAgICAg
IHNldDMyKE5vdEVxdWFsLCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsKICAgICBlbWl0VGFnQXNCb29s
SW1tZWRpYXRlKHJlZ1QwKTsKKyNlbmRpZgogCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QpOwogfQpAQCAtMTAzNCw3ICsxMTg0LDExIEBAIHZvaWQgSklUOjplbWl0X29wX3RvX2pzbnVt
YmVyKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgaW50IHNyY1ZSZWcgPSBj
dXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoc3JjVlJlZywgcmVnVDApOwogICAgIAorI2lmIENQVShTSDQpCisgICAgSnVtcCB3YXNJbW1l
ZGlhdGUgPSBlbWl0SnVtcElmSW1tZWRpYXRlSW50ZWdlcihyZWdUMCwgZmFsc2UpOworI2Vsc2UK
ICAgICBKdW1wIHdhc0ltbWVkaWF0ZSA9IGVtaXRKdW1wSWZJbW1lZGlhdGVJbnRlZ2VyKHJlZ1Qw
KTsKKyNlbmRpZgogCiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBzcmNW
UmVnKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIE9CSkVDVF9PRkZTRVRPRihKU0NlbGws
IG1fc3RydWN0dXJlKSksIHJlZ1QyKTsKQEAgLTExNDUsNiArMTI5OSwxMjAgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfZGVidWcoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICNlbmRpZgog
fQogCisjaWYgQ1BVKFNINCkKK3ZvaWQgSklUOjplbWl0X29wX2VxX251bGwoSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICB1bnNpZ25lZCBkc3QgPSBjdXJyZW50SW5zdHJ1
Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIHVuc2lnbmVkIHNyYzEgPSBjdXJyZW50SW5zdHJ1Y3Rp
b25bMl0udS5vcGVyYW5kOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMxLCByZWdU
MCk7CisKKyAgICBtX2Fzc2VtYmxlci50ZXN0bF9pMzJyKEpTSW1tZWRpYXRlOjpUYWdNYXNrLCBy
ZWdUMCk7CisKKyAgICBKdW1wIGlzSW1tZWRpYXRlID0gSnVtcChtX2Fzc2VtYmxlci5qbmUoKSk7
CisgICAgbV9hc3NlbWJsZXIubm9wKCk7CisgICAgbV9hc3NlbWJsZXIubm9wKCk7CisKKyAgICBp
bnQgb2Zmc2V0ID0gT0JKRUNUX09GRlNFVE9GKEpTQ2VsbCwgbV9zdHJ1Y3R1cmUpOworCisgICAg
aWYgKChvZmZzZXQgPCAwKSB8fCAob2Zmc2V0ID49IDY0KSkgeworICAgICAgICBtX2Fzc2VtYmxl
ci5Mb2FkQ29uc3RhbnQoKG9mZnNldCksIHJlZ1QyKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubW92
bF9yMG1yKHJlZ1QyLCByZWdUMik7CisgICAgfSBlbHNlIGlmIChvZmZzZXQpIHsKKyAgICAgICAg
bV9hc3NlbWJsZXIubW92bF9tcihvZmZzZXQgPj4gMiwgcmVnVDAsIHJlZ1QyKTsKKyAgICB9IGVs
c2UgeworICAgICAgICBtX2Fzc2VtYmxlci5tb3ZsX21yKHJlZ1QwLCByZWdUMik7CisgICAgfQor
CisgICAgb2Zmc2V0ID0gT0JKRUNUX09GRlNFVE9GKFN0cnVjdHVyZSwgbV90eXBlSW5mby5tX2Zs
YWdzKTsKKworICAgIGlmICgob2Zmc2V0IDwgMCkgfHwgKG9mZnNldCA+PSA2NCkpIHsKKyAgICAg
ICAgbV9hc3NlbWJsZXIuTG9hZENvbnN0YW50KG9mZnNldCwgcmVnVDApOworICAgICAgICBtX2Fz
c2VtYmxlci5tb3ZiX3IwbXIocmVnVDIsIHJlZ1QwKTsKKyAgICB9IGVsc2UgaWYgKG9mZnNldCkg
eworICAgICAgICBtX2Fzc2VtYmxlci5tb3ZiX21yKG9mZnNldCwgcmVnVDIsIHJlZ1QwKTsKKyAg
ICB9IGVsc2UgeworICAgICAgICBtX2Fzc2VtYmxlci5tb3ZiX21yKHJlZ1QyLCByZWdUMCk7Cisg
ICAgfQorCisgICAgbV9hc3NlbWJsZXIudGVzdGxfaThyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQs
IHJlZ1QwKTsKKyAgICBtX2Fzc2VtYmxlci5Mb2FkQ29uc3RhbnQoKHVpbnQzMl90KShKU1ZhbHVl
OjplbmNvZGUoSlNJbW1lZGlhdGU6OmZhbHNlSW1tZWRpYXRlKCkpKSwgcmVnVDApOworCisgICAg
bV9hc3NlbWJsZXIuYnJhbmNoKEJUX09QQ09ERSwgMCk7CisgICAgbV9hc3NlbWJsZXIuTG9hZENv
bnN0YW50KCh1aW50MzJfdCkoSlNWYWx1ZTo6ZW5jb2RlKEpTSW1tZWRpYXRlOjp0cnVlSW1tZWRp
YXRlKCkpKSwgcmVnVDApOworCisgICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7CisK
KyAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOworCisgICAgYW5kUHRyKEltbTMyKH5KU0ltbWVk
aWF0ZTo6RXh0ZW5kZWRUYWdCaXRVbmRlZmluZWQpLCByZWdUMCk7CisgICAgbV9hc3NlbWJsZXIu
Y21wbF9pcihKU0ltbWVkaWF0ZTo6RnVsbFRhZ1R5cGVOdWxsLCByZWdUMCwgRXF1YWwpOworCisg
ICAgbV9hc3NlbWJsZXIubW92dChyZWdUMCk7CisgICAgZW1pdFRhZ0FzQm9vbEltbWVkaWF0ZShy
ZWdUMCk7CisKKyAgICB3YXNOb3RJbW1lZGlhdGUubGluayh0aGlzKTsKKworICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0KTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfbmVxX251bGwoSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICB1bnNpZ25lZCBkc3QgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIHVuc2lnbmVkIHNyYzEgPSBjdXJyZW50
SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihz
cmMxLCByZWdUMCk7CisKKyAgICBtX2Fzc2VtYmxlci50ZXN0bF9pMzJyKEpTSW1tZWRpYXRlOjpU
YWdNYXNrLCByZWdUMCk7CisKKyAgICBKdW1wIGlzSW1tZWRpYXRlID0gSnVtcChtX2Fzc2VtYmxl
ci5qbmUoKSk7CisgICAgbV9hc3NlbWJsZXIubm9wKCk7CisgICAgbV9hc3NlbWJsZXIubm9wKCk7
CisKKyAgICBpbnQgb2Zmc2V0ID0gT0JKRUNUX09GRlNFVE9GKEpTQ2VsbCwgbV9zdHJ1Y3R1cmUp
OworCisgICAgaWYgKChvZmZzZXQgPCAwKSB8fCAob2Zmc2V0ID49IDY0KSkgeworICAgICAgICBt
X2Fzc2VtYmxlci5Mb2FkQ29uc3RhbnQoKG9mZnNldCksIHJlZ1QyKTsKKyAgICAgICAgbV9hc3Nl
bWJsZXIubW92bF9yMG1yKHJlZ1QyLCByZWdUMik7CisgICAgfSBlbHNlIGlmIChvZmZzZXQpIHsK
KyAgICAgICAgbV9hc3NlbWJsZXIubW92bF9tcihvZmZzZXQgPj4gMiwgcmVnVDAsIHJlZ1QyKTsK
KyAgICB9IGVsc2UgeworICAgICAgICBtX2Fzc2VtYmxlci5tb3ZsX21yKHJlZ1QwLCByZWdUMik7
CisgICAgfQorCisgICAgb2Zmc2V0ID0gT0JKRUNUX09GRlNFVE9GKFN0cnVjdHVyZSwgbV90eXBl
SW5mby5tX2ZsYWdzKTsKKworICAgIGlmICgob2Zmc2V0IDwgMCkgfHwgKG9mZnNldCA+PSA2NCkp
IHsKKyAgICAgICAgbV9hc3NlbWJsZXIuTG9hZENvbnN0YW50KG9mZnNldCwgcmVnVDApOworICAg
ICAgICBtX2Fzc2VtYmxlci5tb3ZiX3IwbXIocmVnVDIsIHJlZ1QwKTsKKyAgICB9IGVsc2UgaWYg
KG9mZnNldCkgeworICAgICAgICBtX2Fzc2VtYmxlci5tb3ZiX21yKG9mZnNldCwgcmVnVDIsIHJl
Z1QwKTsKKyAgICB9IGVsc2UgeworICAgICAgICBtX2Fzc2VtYmxlci5tb3ZiX21yKHJlZ1QyLCBy
ZWdUMCk7CisgICAgfQorCisgICAgbV9hc3NlbWJsZXIudGVzdGxfaThyKE1hc3F1ZXJhZGVzQXNV
bmRlZmluZWQsIHJlZ1QwKTsKKworICAgIG1fYXNzZW1ibGVyLm1vdnQocmVnVDApOworICAgIGVt
aXRUYWdBc0Jvb2xJbW1lZGlhdGUocmVnVDApOworCisgICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUg
PSBqdW1wKCk7CisKKyAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOworCisgICAgYW5kUHRyKElt
bTMyKH5KU0ltbWVkaWF0ZTo6RXh0ZW5kZWRUYWdCaXRVbmRlZmluZWQpLCByZWdUMCk7CisgICAg
bV9hc3NlbWJsZXIuY21wbF9pcihKU0ltbWVkaWF0ZTo6RnVsbFRhZ1R5cGVOdWxsLCByZWdUMCwg
RXF1YWwpOworCisgICAgbV9hc3NlbWJsZXIuTG9hZENvbnN0YW50KCh1aW50MzJfdCkoSlNWYWx1
ZTo6ZW5jb2RlKEpTSW1tZWRpYXRlOjpmYWxzZUltbWVkaWF0ZSgpKSksIHJlZ1QwKTsKKworICAg
IG1fYXNzZW1ibGVyLmJyYW5jaChCVF9PUENPREUsIDApOworICAgIG1fYXNzZW1ibGVyLkxvYWRD
b25zdGFudCgodWludDMyX3QpKEpTVmFsdWU6OmVuY29kZShKU0ltbWVkaWF0ZTo6dHJ1ZUltbWVk
aWF0ZSgpKSksIHJlZ1QwKTsKKworICAgIHdhc05vdEltbWVkaWF0ZS5saW5rKHRoaXMpOworCisg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworfQorI2Vsc2UKIHZvaWQgSklUOjplbWl0
X29wX2VxX251bGwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICB1bnNp
Z25lZCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwpAQCAtMTE5Myw2ICsx
NDYxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmVxX251bGwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKICAgICBlbWl0VGFnQXNCb29sSW1tZWRpYXRlKHJlZ1QwKTsKICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CisjZW5kaWYKIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
ZW50ZXIoSW5zdHJ1Y3Rpb24qKQogewpAQCAtMTIwMCw4ICsxNDY5LDIwIEBAIHZvaWQgSklUOjpl
bWl0X29wX2VudGVyKEluc3RydWN0aW9uKikKICAgICAvLyByZWdpc3RlcnMgdG8gemFwIHN0YWxl
IHBvaW50ZXJzLCB0byBhdm9pZCB1bm5lY2Vzc2FyaWx5IHByb2xvbmdpbmcKICAgICAvLyBvYmpl
Y3QgbGlmZXRpbWUgYW5kIGluY3JlYXNpbmcgR0MgcHJlc3N1cmUuCiAgICAgc2l6ZV90IGNvdW50
ID0gbV9jb2RlQmxvY2stPm1fbnVtVmFyczsKKworI2lmIENQVShTSDQpICAgIAorICAgIGlmIChj
b3VudCAhPSAwKSB7CisgICAgICAgIG1fYXNzZW1ibGVyLkxvYWRDb25zdGFudCgoaW50KShKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSkpLCByZWdUMSk7CisKKyAgICAgICAgZm9yIChzaXpl
X3QgaiA9IDA7IGogPCBjb3VudDsgKytqKQorICAgICAgICAgICAgc3RvcmUzMihyZWdUMSwgaiAq
IHNpemVvZihSZWdpc3RlciksIGNhbGxGcmFtZVJlZ2lzdGVyLCByZWdUMCk7CisgICAgfSAgIAor
I2Vsc2UKKwogICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgY291bnQ7ICsraikKICAgICAgICAg
ZW1pdEluaXRSZWdpc3RlcihqKTsKKyNlbmRpZgorCiAKIH0KIApAQCAtMTIxMSw4ICsxNDkyLDE5
IEBAIHZvaWQgSklUOjplbWl0X29wX2VudGVyX3dpdGhfYWN0aXZhdGlvbihJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogICAgIC8vIHJlZ2lzdGVycyB0byB6YXAgc3RhbGUgcG9pbnRl
cnMsIHRvIGF2b2lkIHVubmVjZXNzYXJpbHkgcHJvbG9uZ2luZwogICAgIC8vIG9iamVjdCBsaWZl
dGltZSBhbmQgaW5jcmVhc2luZyBHQyBwcmVzc3VyZS4KICAgICBzaXplX3QgY291bnQgPSBtX2Nv
ZGVCbG9jay0+bV9udW1WYXJzOworICAgIAorI2lmIENQVShTSDQpICAgIAorICAgIGlmIChjb3Vu
dCAhPSAwKSB7CisgICAgICAgIG1fYXNzZW1ibGVyLkxvYWRDb25zdGFudCgoaW50KShKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSkpLCByZWdUMSk7CisKKyAgICAgICAgZm9yIChzaXplX3Qg
aiA9IDA7IGogPCBjb3VudDsgKytqKQorICAgICAgICAgICAgc3RvcmUzMihyZWdUMSwgaiAqIHNp
emVvZihSZWdpc3RlciksIGNhbGxGcmFtZVJlZ2lzdGVyLCByZWdUMCk7CisgICAgfQorI2Vsc2UK
KwogICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgY291bnQ7ICsraikKICAgICAgICAgZW1pdElu
aXRSZWdpc3RlcihqKTsKKyNlbmRpZgogCiAgICAgSklUU3R1YkNhbGwodGhpcywgY3RpX29wX3B1
c2hfYWN0aXZhdGlvbikuY2FsbChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKIH0K
QEAgLTEyMjEsNyArMTUxMywxMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfYXJndW1lbnRz
KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgdW5zaWduZWQgZHN0ID0g
Y3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKIAorI2lmIENQVShTSDQpCisgICAgSnVt
cCBhcmdzQ3JlYXRlZCA9IGJyYW5jaFRlc3QzMihOb25aZXJvLCBBZGRyZXNzKGNhbGxGcmFtZVJl
Z2lzdGVyLCBzaXplb2YoUmVnaXN0ZXIpICogZHN0KSwgSW1tMzIoLTEpLCBmYWxzZSk7CisjZWxz
ZQogICAgIEp1bXAgYXJnc0NyZWF0ZWQgPSBicmFuY2hUZXN0UHRyKE5vblplcm8sIEFkZHJlc3Mo
Y2FsbEZyYW1lUmVnaXN0ZXIsIHNpemVvZihSZWdpc3RlcikgKiBkc3QpKTsKKyNlbmRpZgogICAg
IGlmIChtX2NvZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJzID09IDEpCiAgICAgICAgIEpJVFN0dWJD
YWxsKHRoaXMsIGN0aV9vcF9jcmVhdGVfYXJndW1lbnRzX25vX3BhcmFtcykuY2FsbCgpOwogICAg
IGVsc2UKQEAgLTEyNjUsNyArMTU2MSwxMiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhp
cyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfcHJv
ZmlsZV93aWxsX2NhbGwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBw
ZWVrKHJlZ1QxLCBPQkpFQ1RfT0ZGU0VUT0YoSklUU3RhY2tGcmFtZSwgZW5hYmxlZFByb2ZpbGVy
UmVmZXJlbmNlKSAvIHNpemVvZiAodm9pZCopKTsKKworI2lmIENQVShTSDQpCisgICAgSnVtcCBu
b1Byb2ZpbGVyID0gYnJhbmNoVGVzdDMyKFplcm8sIEFkZHJlc3MocmVnVDEpLCBJbW0zMigtMSks
IGZhbHNlKTsKKyNlbHNlCiAgICAgSnVtcCBub1Byb2ZpbGVyID0gYnJhbmNoVGVzdFB0cihaZXJv
LCBBZGRyZXNzKHJlZ1QxKSk7CisjZW5kaWYKIAogICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRo
aXMsIGN0aV9vcF9wcm9maWxlX3dpbGxfY2FsbCk7CiAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQo
Y3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgcmVnVDEpOwpAQCAtMTI3Nyw3ICsxNTc4
LDEyIEBAIHZvaWQgSklUOjplbWl0X29wX3Byb2ZpbGVfd2lsbF9jYWxsKEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9wcm9maWxlX2RpZF9jYWxsKElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgcGVlayhyZWdUMSwgT0JKRUNU
X09GRlNFVE9GKEpJVFN0YWNrRnJhbWUsIGVuYWJsZWRQcm9maWxlclJlZmVyZW5jZSkgLyBzaXpl
b2YgKHZvaWQqKSk7CisgICAgCisjaWYgQ1BVKFNINCkKKyAgICBKdW1wIG5vUHJvZmlsZXIgPSBi
cmFuY2hUZXN0MzIoWmVybywgQWRkcmVzcyhyZWdUMSksIEltbTMyKC0xKSwgZmFsc2UpOworI2Vs
c2UKICAgICBKdW1wIG5vUHJvZmlsZXIgPSBicmFuY2hUZXN0UHRyKFplcm8sIEFkZHJlc3MocmVn
VDEpKTsKKyNlbmRpZgogCiAgICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wX3By
b2ZpbGVfZGlkX2NhbGwpOwogICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KGN1cnJlbnRJbnN0cnVj
dGlvblsxXS51Lm9wZXJhbmQsIHJlZ1QxKTsKQEAgLTE0OTQsNiArMTgwMCw0MiBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfdG9fanNudW1iZXIoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX2dsb2JhbF9keW5h
bWljKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CisjaWYgQ1BVKFNINCkKKyAg
ICBpbnQgc2tpcCA9IGN1cnJlbnRJbnN0cnVjdGlvbls1XS51Lm9wZXJhbmQ7CisKKyAgICBlbWl0
R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihSZWdpc3RlckZpbGU6OlNjb3BlQ2hhaW4sIHJlZ1Qw
KTsKKworICAgIGludCBvZmZzZXQgPSBPQkpFQ1RfT0ZGU0VUT0YoU2NvcGVDaGFpbk5vZGUsIG9i
amVjdCk7CisgICAgaW50IG9mZnNldDEgPSBPQkpFQ1RfT0ZGU0VUT0YoU2NvcGVDaGFpbk5vZGUs
IG5leHQpOworICAgIGlmICgoc2tpcCkgJiYgKChvZmZzZXQpIDwgMCkgfHwgKCBvZmZzZXQgPj0g
NjQpKQorICAgICAgICBtX2Fzc2VtYmxlci5Mb2FkQ29uc3RhbnQob2Zmc2V0LCByZWdUMik7CisK
KyAgICBpZiAoKHNraXApICYmICgob2Zmc2V0MSkgPCAwKSB8fCAoIG9mZnNldDEgPj0gNjQpKQor
ICAgICAgICBtX2Fzc2VtYmxlci5Mb2FkQ29uc3RhbnQob2Zmc2V0MSwgcmVnVDMpOworCisgICAg
d2hpbGUgKHNraXAtLSkgeworICAgICAgICBpZiAoKG9mZnNldCA8IDApIHx8IChvZmZzZXQgPj0g
NjQpKSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5tb3ZsX3IwbXIocmVnVDIsIHJlZ1QxKTsK
KyAgICAgICAgfSBlbHNlIGlmIChvZmZzZXQpIHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLm1v
dmxfbXIob2Zmc2V0ID4+IDIsIHJlZ1QwLCByZWdUMSk7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICBtX2Fzc2VtYmxlci5tb3ZsX21yKHJlZ1QwLCByZWdUMSk7CisgICAgICAgIH0KKwor
ICAgICAgICBhZGRTbG93Q2FzZShjaGVja1N0cnVjdHVyZShyZWdUMSwgbV9nbG9iYWxEYXRhLT5h
Y3RpdmF0aW9uU3RydWN0dXJlLmdldCgpKSk7CisKKyAgICAgICAgaWYgKChvZmZzZXQxIDwgMCkg
fHwgKG9mZnNldDEgPj0gNjQpKSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5tb3ZsX3IwbXIo
cmVnVDMsIHJlZ1QwKTsKKyAgICAgICAgfSBlbHNlIGlmIChvZmZzZXQpIHsKKyAgICAgICAgICAg
IG1fYXNzZW1ibGVyLm1vdmxfbXIob2Zmc2V0ID4+IDIsIHJlZ1QwLCByZWdUMCk7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5tb3ZsX21yKHJlZ1QwLCByZWdUMCk7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBlbWl0X29wX3Jlc29sdmVfZ2xvYmFsKGN1cnJlbnRJ
bnN0cnVjdGlvbiwgdHJ1ZSk7CisKKyNlbHNlCiAgICAgaW50IHNraXAgPSBjdXJyZW50SW5zdHJ1
Y3Rpb25bNV0udS5vcGVyYW5kOwogICAgIAogICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVy
UHRyKFJlZ2lzdGVyRmlsZTo6U2NvcGVDaGFpbiwgcmVnVDApOwpAQCAtMTUwMyw2ICsxODQ1LDcg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9nbG9iYWxfZHluYW1pYyhJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIE9CSkVD
VF9PRkZTRVRPRihTY29wZUNoYWluTm9kZSwgbmV4dCkpLCByZWdUMCk7CiAgICAgfQogICAgIGVt
aXRfb3BfcmVzb2x2ZV9nbG9iYWwoY3VycmVudEluc3RydWN0aW9uLCB0cnVlKTsKKyNlbmRpZgog
fQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcmVzb2x2ZV9nbG9iYWxfZHluYW1pYyhJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNz
LmNwcCBiL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKaW5kZXggNmIy
YTJmZS4uNWUxZmZhMiAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5
QWNjZXNzLmNwcAorKysgYi9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3Bw
CkBAIC0yMTgsNyArMjE4LDExIEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWwoSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihBYm92
ZU9yRXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1QwLCBPQkpFQ1RfT0ZGU0VUT0YoSlNBcnJheSwg
bV92ZWN0b3JMZW5ndGgpKSkpOwogCiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBPQkpFQ1Rf
T0ZGU0VUT0YoSlNBcnJheSwgbV9zdG9yYWdlKSksIHJlZ1QyKTsKKyNpZiBDUFUoU0g0KQorICAg
IEp1bXAgZW1wdHkgPSBicmFuY2hUZXN0MzIoWmVybywgQmFzZUluZGV4KHJlZ1QyLCByZWdUMSwg
U2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSksIElt
bTMyKC0xKSwgZmFsc2UpOworI2Vsc2UKICAgICBKdW1wIGVtcHR5ID0gYnJhbmNoVGVzdFB0ciha
ZXJvLCBCYXNlSW5kZXgocmVnVDIsIHJlZ1QxLCBTY2FsZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFy
cmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSk7CisjZW5kaWYKIAogICAgIExhYmVsIHN0b3JlUmVz
dWx0KHRoaXMpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKQEAg
LTIyNiw2ICsyMzAsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgSnVtcCBlbmQgPSBqdW1wKCk7CiAgICAgCiAgICAg
ZW1wdHkubGluayh0aGlzKTsKKwogICAgIGFkZDMyKEltbTMyKDEpLCBBZGRyZXNzKHJlZ1QyLCBP
QkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX251bVZhbHVlc0luVmVjdG9yKSkpOwogICAg
IGJyYW5jaDMyKEJlbG93LCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgT0JKRUNUX09GRlNFVE9GKEFy
cmF5U3RvcmFnZSwgbV9sZW5ndGgpKSkubGlua1RvKHN0b3JlUmVzdWx0LCB0aGlzKTsKIApAQCAt
MzEzLDcgKzMxOCw3IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV9pZChJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYmFzZVZS
ZWcsIHJlZ1QwLCB2YWx1ZVZSZWcsIHJlZ1QxKTsKIAotICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxs
KHRoaXMsIGRpcmVjdCA/IGN0aV9vcF9wdXRfYnlfaWRfZGlyZWN0X2dlbmVyaWMsIGN0aV9vcF9w
dXRfYnlfaWRfZ2VuZXJpYyk7CisgICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgZGlyZWN0
ID8gY3RpX29wX3B1dF9ieV9pZF9kaXJlY3RfZ2VuZXJpYyA6IGN0aV9vcF9wdXRfYnlfaWRfZ2Vu
ZXJpYyk7CiAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQocmVnVDApOwogICAgIHN0dWJDYWxsLmFk
ZEFyZ3VtZW50KEltbVB0cihpZGVudCkpOwogICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KHJlZ1Qx
KTsKQEAgLTM0OSwxMSArMzU0LDE2IEBAIHZvaWQgSklUOjplbWl0X29wX21ldGhvZF9jaGVjayhJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIG1fbWV0aG9kQ2FsbENvbXBpbGF0
aW9uSW5mby5hcHBlbmQoTWV0aG9kQ2FsbENvbXBpbGF0aW9uSW5mbyhtX3Byb3BlcnR5QWNjZXNz
SW5zdHJ1Y3Rpb25JbmRleCkpOwogICAgIE1ldGhvZENhbGxDb21waWxhdGlvbkluZm8mIGluZm8g
PSBtX21ldGhvZENhbGxDb21waWxhdGlvbkluZm8ubGFzdCgpOwogCisjaWYgQ1BVKFNINCkKKyAg
ICBKdW1wIG5vdENlbGwgPSBlbWl0SnVtcElmTm90SlNDZWxsKHJlZ1QwLCBmYWxzZSk7CisjZWxz
ZQogICAgIEp1bXAgbm90Q2VsbCA9IGVtaXRKdW1wSWZOb3RKU0NlbGwocmVnVDApOworI2VuZGlm
CiAKICAgICBCRUdJTl9VTklOVEVSUlVQVEVEX1NFUVVFTkNFKHNlcXVlbmNlTWV0aG9kQ2hlY2sp
OwogCiAgICAgSnVtcCBzdHJ1Y3R1cmVDaGVjayA9IGJyYW5jaFB0cldpdGhQYXRjaChOb3RFcXVh
bCwgQWRkcmVzcyhyZWdUMCwgT0JKRUNUX09GRlNFVE9GKEpTQ2VsbCwgbV9zdHJ1Y3R1cmUpKSwg
aW5mby5zdHJ1Y3R1cmVUb0NvbXBhcmUsIEltbVB0cihyZWludGVycHJldF9jYXN0PHZvaWQqPihw
YXRjaEdldEJ5SWREZWZhdWx0U3RydWN0dXJlKSkpOworCiAgICAgRGF0YUxhYmVsUHRyIHByb3Rv
U3RydWN0dXJlVG9Db21wYXJlLCBwcm90b09iaiA9IG1vdmVXaXRoUGF0Y2goSW1tUHRyKDApLCBy
ZWdUMSk7CiAgICAgSnVtcCBwcm90b1N0cnVjdHVyZUNoZWNrID0gYnJhbmNoUHRyV2l0aFBhdGNo
KE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QxLCBPQkpFQ1RfT0ZGU0VUT0YoSlNDZWxsLCBtX3N0cnVj
dHVyZSkpLCBwcm90b1N0cnVjdHVyZVRvQ29tcGFyZSwgSW1tUHRyKHJlaW50ZXJwcmV0X2Nhc3Q8
dm9pZCo+KHBhdGNoR2V0QnlJZERlZmF1bHRTdHJ1Y3R1cmUpKSk7CiAKQEAgLTQ4MSw3ICs0OTEs
MTYgQEAgdm9pZCBKSVQ6OmNvbXBpbGVHZXRCeUlkU2xvd0Nhc2UoaW50IHJlc3VsdFZSZWcsIGlu
dCBiYXNlVlJlZywgSWRlbnRpZmllciogaWRlbnQKICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChJ
bW1QdHIoaWRlbnQpKTsKICAgICBDYWxsIGNhbGwgPSBzdHViQ2FsbC5jYWxsKHJlc3VsdFZSZWcp
OwogCisjaWYgQ1BVKFNINCkKKyAgICBpZiAoKHJlc3VsdFZSZWcgPj0gMCkgJiYgKHJlc3VsdFZS
ZWcgPD0gMTUpKQorICAgICAgICBFTkRfVU5JTlRFUlJVUFRFRF9TRVFVRU5DRShzZXF1ZW5jZUdl
dEJ5SWRTbG93Q2FzZSk7CisgICAgZWxzZSBpZiAoKHJlc3VsdFZSZWcgPiAzMSkgfHwgKHJlc3Vs
dFZSZWcgPCAtMzIpKSAKKyAgICAgICAgRU5EX1VOSU5URVJSVVBURURfU0VRVUVOQ0VTKHNlcXVl
bmNlR2V0QnlJZFNsb3dDYXNlLCA0LCAxKTsKKyAgICBlbHNlCisgICAgICAgIEVORF9VTklOVEVS
UlVQVEVEX1NFUVVFTkNFUyhzZXF1ZW5jZUdldEJ5SWRTbG93Q2FzZSwgNCwgMCk7CisjZWxzZQog
ICAgIEVORF9VTklOVEVSUlVQVEVEX1NFUVVFTkNFKHNlcXVlbmNlR2V0QnlJZFNsb3dDYXNlKTsK
KyNlbmRpZgogCiAgICAgQVNTRVJUX0pJVF9PRkZTRVQoZGlmZmVyZW5jZUJldHdlZW4oY29sZFBh
dGhCZWdpbiwgY2FsbCksIHBhdGNoT2Zmc2V0R2V0QnlJZFNsb3dDYXNlQ2FsbCk7CiAKQEAgLTYw
NSw4ICs2MjQsMTMgQEAgYm9vbCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlJZFRyYW5zaXRpb24o
U3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBTdHJ1Y3R1cmUKIHsKICAgICBKdW1wTGlzdCBm
YWlsdXJlQ2FzZXM7CiAgICAgLy8gQ2hlY2sgZWF4IGlzIGFuIG9iamVjdCBvZiB0aGUgcmlnaHQg
U3RydWN0dXJlLgorI2lmIENQVShTSDQpCisgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChlbWl0SnVt
cElmTm90SlNDZWxsKHJlZ1QwLCBmYWxzZSkpOworICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoYnJh
bmNoMzIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDAsIE9CSkVDVF9PRkZTRVRPRihKU0NlbGwsIG1f
c3RydWN0dXJlKSksIEltbTMyKChpbnQpb2xkU3RydWN0dXJlKSwgZmFsc2UpKTsKKyNlbHNlCiAg
ICAgZmFpbHVyZUNhc2VzLmFwcGVuZChlbWl0SnVtcElmTm90SlNDZWxsKHJlZ1QwKSk7CiAgICAg
ZmFpbHVyZUNhc2VzLmFwcGVuZChicmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDAsIE9C
SkVDVF9PRkZTRVRPRihKU0NlbGwsIG1fc3RydWN0dXJlKSksIEltbVB0cihvbGRTdHJ1Y3R1cmUp
KSk7CisjZW5kaWYgIAogICAgIHRlc3RQcm90b3R5cGUob2xkU3RydWN0dXJlLT5zdG9yZWRQcm90
b3R5cGUoKSwgZmFpbHVyZUNhc2VzKTsKIAogICAgIC8vIGVjeCA9IGJhc2VPYmplY3QtPm1fc3Ry
dWN0dXJlCkBAIC02MjIsNyArNjQ2LDExIEBAIGJvb2wgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5
SWRUcmFuc2l0aW9uKFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgU3RydWN0dXJlCiAgICAg
aWYgKHdpbGxOZWVkU3RvcmFnZVJlYWxsb2MpIHsKICAgICAgICAgLy8gVGhpcyB0cmFtcG9saW5l
IHdhcyBjYWxsZWQgdG8gbGlrZSBhIEpJVCBzdHViOyBiZWZvcmUgd2UgY2FuIGNhbiBjYWxsIGFn
YWluIHdlIG5lZWQgdG8KICAgICAgICAgLy8gcmVtb3ZlIHRoZSByZXR1cm4gYWRkcmVzcyBmcm9t
IHRoZSBzdGFjaywgdG8gcHJldmVudCB0aGUgc3RhY2sgZnJvbSBiZWNvbWluZyBtaXNhbGlnbmVk
LgorI2lmIENQVShTSDQpCisgICAgICAgIHByZXNlcnZlUmV0dXJuQWRkcmVzc0FmdGVyQ2FsbChy
ZWdUMTMpOworI2Vsc2UKICAgICAgICAgcHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKHJl
Z1QzKTsKKyNlbmRpZgogIAogICAgICAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlf
b3BfcHV0X2J5X2lkX3RyYW5zaXRpb25fcmVhbGxvYyk7CiAgICAgICAgIHN0dWJDYWxsLnNraXBB
cmd1bWVudCgpOyAvLyBiYXNlCkBAIC02MzMsOSArNjYxLDM3IEBAIGJvb2wgSklUOjpwcml2YXRl
Q29tcGlsZVB1dEJ5SWRUcmFuc2l0aW9uKFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgU3Ry
dWN0dXJlCiAgICAgICAgIHN0dWJDYWxsLmNhbGwocmVnVDApOwogICAgICAgICBlbWl0R2V0SklU
U3R1YkFyZygyLCByZWdUMSk7CiAKKyNpZiBDUFUoU0g0KQorICAgICAgICByZXN0b3JlUmV0dXJu
QWRkcmVzc0JlZm9yZVJldHVybihyZWdUMTMpOworI2Vsc2UKICAgICAgICAgcmVzdG9yZVJldHVy
bkFkZHJlc3NCZWZvcmVSZXR1cm4ocmVnVDMpOworI2VuZGlmCiAgICAgfQogCisjaWYgQ1BVKFNI
NCkKKyAgICAvLyBBc3N1bWVzIG1fcmVmQ291bnQgY2FuIGJlIGRlY3JlbWVudGVkIGVhc2lseSwg
cmVmY291bnQgZGVjcmVtZW50IGlzIHNhZmUgYXMgCisgICAgLy8gY29kZWJsb2NrIHNob3VsZCBl
bnN1cmUgb2xkU3RydWN0dXJlLT5tX3JlZkNvdW50ID4gMAorICAgIHN1YjMyKEltbTMyKDEpLCBB
YnNvbHV0ZUFkZHJlc3Mob2xkU3RydWN0dXJlLT5hZGRyZXNzT2ZDb3VudCgpKSwgcmVnVDMpOwor
ICAgIGFkZDMyKEltbTMyKDEpLCBBYnNvbHV0ZUFkZHJlc3MobmV3U3RydWN0dXJlLT5hZGRyZXNz
T2ZDb3VudCgpKSwgcmVnVDMpOworICAgIHN0b3JlUHRyKEltbVB0cihuZXdTdHJ1Y3R1cmUpLCBB
ZGRyZXNzKHJlZ1QwLCBPQkpFQ1RfT0ZGU0VUT0YoSlNDZWxsLCBtX3N0cnVjdHVyZSkpKTsKKwor
ICAgIC8vIHdyaXRlIHRoZSB2YWx1ZQorICAgIGNvbXBpbGVQdXREaXJlY3RPZmZzZXQocmVnVDAs
IHJlZ1QxLCBuZXdTdHJ1Y3R1cmUsIGNhY2hlZE9mZnNldCk7CisKKyAgICByZXQoKTsKKyAgICAK
KyAgICBBU1NFUlQoIWZhaWx1cmVDYXNlcy5lbXB0eSgpKTsKKyAgICBmYWlsdXJlQ2FzZXMubGlu
ayh0aGlzKTsKKyAgICByZXN0b3JlQXJndW1lbnRSZWZlcmVuY2VGb3JUcmFtcG9saW5lKCk7CisK
KyAgICBtb3ZlKEltbTMyKChpbnQpRnVuY3Rpb25QdHIoY3RpX29wX3B1dF9ieV9pZF9mYWlsKS52
YWx1ZSgpKSwgcmVnVDMpOworICAgIG1fYXNzZW1ibGVyLmJyYW5jaChKTVBfT1BDT0RFLCByZWdU
Myk7CisgICAgbV9hc3NlbWJsZXIubm9wKCk7CisgICAgCisgICAgTGlua0J1ZmZlciBwYXRjaEJ1
ZmZlcih0aGlzLCBtX2NvZGVCbG9jay0+ZXhlY3V0YWJsZVBvb2woKSwgMCk7CisgICAgaWYgKCFw
YXRjaEJ1ZmZlci5hbGxvY2F0aW9uU3VjY2Vzc2Z1bCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisjZWxzZQogICAgIC8vIEFzc3VtZXMgbV9yZWZDb3VudCBjYW4gYmUgZGVjcmVtZW50ZWQgZWFz
aWx5LCByZWZjb3VudCBkZWNyZW1lbnQgaXMgc2FmZSBhcyAKICAgICAvLyBjb2RlYmxvY2sgc2hv
dWxkIGVuc3VyZSBvbGRTdHJ1Y3R1cmUtPm1fcmVmQ291bnQgPiAwCiAgICAgc3ViMzIoSW1tMzIo
MSksIEFic29sdXRlQWRkcmVzcyhvbGRTdHJ1Y3R1cmUtPmFkZHJlc3NPZkNvdW50KCkpKTsKQEAg
LTY1Nyw2ICs3MTMsNyBAQCBib29sIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeUlkVHJhbnNpdGlv
bihTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIFN0cnVjdHVyZQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKICAgICBwYXRjaEJ1ZmZlci5saW5rKGZhaWx1cmVDYWxsLCBGdW5jdGlvblB0cihk
aXJlY3QgPyBjdGlfb3BfcHV0X2J5X2lkX2RpcmVjdF9mYWlsIDogY3RpX29wX3B1dF9ieV9pZF9m
YWlsKSk7CisjZW5kaWYgCiAKICAgICBpZiAod2lsbE5lZWRTdG9yYWdlUmVhbGxvYykgewogICAg
ICAgICBBU1NFUlQobV9jYWxscy5zaXplKCkgPT0gMSk7CmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUU3R1YnMuY3BwIGIvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcApp
bmRleCBjNGZmMGNhLi5jZGExYTRhIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
U3R1YnMuY3BwCisrKyBiL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAKQEAgLTYxOCw3
ICs2MTgsNzcgQEAgZXh0ZXJuICJDIiB7CiAjZGVmaW5lIFRIVU5LX1JFVFVSTl9BRERSRVNTX09G
RlNFVCAzMgogI2RlZmluZSBQUkVTRVJWRURSNF9PRkZTRVQgICAgICAgICAgMzYKIC8vIFNlZSBE
RUZJTkVfU1RVQl9GVU5DVElPTiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyNlbGlmIENQVShTSDQp
CisjZGVmaW5lIFNZTUJPTF9TVFJJTkcobmFtZSkgI25hbWUKKy8qIGNvZGUgKHI0KSwgUmVnaXN0
ZXJGaWxlKiAocjUpLCBDYWxsRnJhbWUqIChyNiksIEpTVmFsdWUqIGV4Y2VwdGlvbiAocjcpLCBQ
cm9maWxlcioqKHNwKSwgSlNHbG9iYWxEYXRhIChzcCkqLworYXNtKAorIi5hbGlnbiAyIiAiXG4i
CisiLmdsb2JsICIgU1lNQk9MX1NUUklORyhjdGlUcmFtcG9saW5lKSAiXG4iCitTWU1CT0xfU1RS
SU5HKGN0aVRyYW1wb2xpbmUpICI6IiAiXG4iCisgICAgIm1vdi5sIHI3LCBALXIxNSIgIlxuIgor
ICAgICJtb3YubCByNiwgQC1yMTUiICJcbiIKKyAgICAibW92LmwgcjUsIEAtcjE1IiAiXG4iCisg
ICAgIm1vdi5sIHI4LCBALXIxNSIgIlxuIgorICAgICJtb3YgIzEyNywgcjgiICJcbiIKKyAgICAi
bW92LmwgcjE0LCBALXIxNSIgIlxuIgorICAgICJzdHMubCBwciwgQC1yMTUiICJcbiIKKyAgICAi
bW92LmwgcjEzLCBALXIxNSIgIlxuIgorICAgICJtb3YubCByMTAsIEAtcjE1IiAiXG4iCisgICAg
Im1vdi5sIHIxMSwgQC1yMTUiICJcbiIKKyAgICAiYWRkICMtMzIsIHIxNSIgIlxuIgorICAgICJt
b3YgcjYsIHIxNCIgIlxuIgorICAgICJqc3IgQHI0IiAiXG4iCisgICAgIm5vcCIgIlxuIgorICAg
ICJhZGQgIzMyLCByMTUiICJcbiIKKyAgICAibW92LmwgQHIxNSsscjExIiAiXG4iCisgICAgIm1v
di5sIEByMTUrLHIxMCIgIlxuIgorICAgICJtb3YubCBAcjE1KyxyMTMiICJcbiIKKyAgICAibGRz
LmwgQHIxNSsscHIiICJcbiIKKyAgICAibW92LmwgQHIxNSsscjE0IiAiXG4iCisgICAgIm1vdi5s
IEByMTUrLHI4IiAiXG4iCisgICAgImFkZCAjMTIsIHIxNSIgIlxuIgorICAgICJydHMiICJcbiIK
KyAgICAibm9wIiAiXG4iCispOworCithc20oCisiLmFsaWduIDIiICJcbiIKKyIuZ2xvYmwgIiBT
WU1CT0xfU1RSSU5HKGN0aVZNVGhyb3dUcmFtcG9saW5lKSAiXG4iCitTWU1CT0xfU1RSSU5HKGN0
aVZNVGhyb3dUcmFtcG9saW5lKSAiOiIgIlxuIgorICAgICJtb3YubCAuTDIiU1lNQk9MX1NUUklO
RyhjdGlfdm1fdGhyb3cpIixyMCIgIlxuIgorICAgICJtb3YgcjE1LCByNCIgIlxuIgorICAgICJt
b3YubCBAKHIwLHIxMikscjExIiAiXG4iCisgICAgImpzciBAcjExIiAiXG4iCisgICAgIm5vcCIg
IlxuIgorICAgICJhZGQgIzMyLCByMTUiICJcbiIKKyAgICAibW92LmwgQHIxNSsscjExIiAiXG4i
CisgICAgIm1vdi5sIEByMTUrLHIxMCIgIlxuIgorICAgICJtb3YubCBAcjE1KyxyMTMiICJcbiIK
KyAgICAibGRzLmwgQHIxNSsscHIiICJcbiIKKyAgICAibW92LmwgQHIxNSsscjE0IiAiXG4iCisg
ICAgIm1vdi5sIEByMTUrLHI4IiAiXG4iCisgICAgImFkZCAjMTIsIHIxNSIgIlxuIgorICAgICJy
dHMiICJcbiIKKyAgICAibm9wIiAiXG4iCisgICAgIi5hbGlnbiAyIiAiXG4iCisgICAgIi5MMiJT
WU1CT0xfU1RSSU5HKGN0aV92bV90aHJvdykiOi5sb25nICIgU1lNQk9MX1NUUklORyhjdGlfdm1f
dGhyb3cpIkBHT1QgXG4iCispOwogCithc20oCisiLmFsaWduIDIiICJcbiIKKyIuZ2xvYmwgIiBT
WU1CT0xfU1RSSU5HKGN0aU9wVGhyb3dOb3RDYXVnaHQpICJcbiIKK1NZTUJPTF9TVFJJTkcoY3Rp
T3BUaHJvd05vdENhdWdodCkgIjoiICJcbiIKKyAgICAiYWRkICMzMiwgcjE1IiAiXG4iCisgICAg
Im1vdi5sIEByMTUrLHIxMSIgIlxuIgorICAgICJtb3YubCBAcjE1KyxyMTAiICJcbiIKKyAgICAi
bW92LmwgQHIxNSsscjEzIiAiXG4iCisgICAgImxkcy5sIEByMTUrLHByIiAiXG4iCisgICAgIm1v
di5sIEByMTUrLHIxNCIgIlxuIgorICAgICJtb3YubCBAcjE1KyxyOCIgIlxuIgorICAgICJhZGQg
IzEyLCByMTUiICJcbiIKKyAgICAicnRzIiAiXG4iCisgICAgIm5vcCIgIlxuIgorKTsKICNlbHNl
CiAgICAgI2Vycm9yICJKSVQgbm90IHN1cHBvcnRlZCBvbiB0aGlzIHBsYXRmb3JtLiIKICNlbmRp
ZgpAQCAtMTE5OSw3ICsxMjY5LDMwIEBAIE1TVkMoKQogCiBNU1ZDX0VORCggICAgRU5EKQogKi8K
KyNlbGlmIENQVShTSDQpCiAKKyNkZWZpbmUgREVGSU5FX1NUVUJfRlVOQ1RJT04ocnR5cGUsIG9w
KSBcCisgICAgZXh0ZXJuICJDIiB7IFwKKyAgICAgICAgcnR5cGUgSklUU3R1YlRodW5rZWRfIyNv
cChTVFVCX0FSR1NfREVDTEFSQVRJT04pOyBcCisgICAgfTsgXAorICAgIGFzbSB2b2xhdGlsZSgg
XAorICAgICIuYWxpZ24gMiIgIlxuIiBcCisgICAgIi5nbG9ibCAiIFNZTUJPTF9TVFJJTkcoY3Rp
XyMjb3ApICJcbiIgXAorICAgIFNZTUJPTF9TVFJJTkcoY3RpXyMjb3ApICI6IiAiXG4iIFwKKyAg
ICAic3RzIHByLCByMTEiICJcbiIgXAorICAgICJtb3YubCByMTEsIEAoMHgxYywgcjE1KSIgIlxu
IiBcCisgICAgIm1vdi5sIC5MMiJTWU1CT0xfU1RSSU5HKEpJVFN0dWJUaHVua2VkXyMjb3ApIixy
MCIgIlxuIiBcCisgICAgIm1vdi5sIEAocjAscjEyKSxyMTEiICJcbiIgXAorICAgICJqc3IgQHIx
MSIgIlxuIiBcCisgICAgIm5vcCIgIlxuIiBcCisgICAgIm1vdi5sIEAoMHgxYywgcjE1KSwgcjEx
ICIgIlxuIiBcCisgICAgImxkcyByMTEsIHByICIgIlxuIiBcCisgICAgInJ0cyIgIlxuIiBcCisg
ICAgIm5vcCIgIlxuIiBcCisgICAgIi5hbGlnbiAyIiAiXG4iIFwKKyAgICAiLkwyIlNZTUJPTF9T
VFJJTkcoSklUU3R1YlRodW5rZWRfIyNvcCkiOi5sb25nICIgU1lNQk9MX1NUUklORyhKSVRTdHVi
VGh1bmtlZF8jI29wKSJAR09UIFxuIiBcCisgICAgKTsgXAorICAgIHJ0eXBlIEpJVFN0dWJUaHVu
a2VkXyMjb3AoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKQogI2Vsc2UKICNkZWZpbmUgREVGSU5FX1NU
VUJfRlVOQ1RJT04ocnR5cGUsIG9wKSBydHlwZSBKSVRfU1RVQiBjdGlfIyNvcChTVFVCX0FSR1Nf
REVDTEFSQVRJT04pCiAjZW5kaWYKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRT
dHVicy5oIGIvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmgKaW5kZXggOTRlMzE5Zi4uYjRj
YzBhNyAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmgKKysrIGIvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmgKQEAgLTExMSw2ICsxMTEsMjcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIC8vIFdoZW4gSklUIGNvZGUgbWFrZXMgYSBjYWxsLCBpdCBwdXNoZXMg
aXRzIHJldHVybiBhZGRyZXNzIGp1c3QgYmVsb3cgdGhlIHJlc3Qgb2YgdGhlIHN0YWNrLgogICAg
ICAgICBSZXR1cm5BZGRyZXNzUHRyKiByZXR1cm5BZGRyZXNzU2xvdCgpIHsgcmV0dXJuIHJlaW50
ZXJwcmV0X2Nhc3Q8UmV0dXJuQWRkcmVzc1B0cio+KHRoaXMpIC0gMTsgfQogICAgIH07CisjZWxp
ZiBDUFUoU0g0KQorICAgIHN0cnVjdCBKSVRTdGFja0ZyYW1lIHsKKyAgICAgICAgSklUU3R1YkFy
ZyBwYWRkaW5nOyAvLyBVbnVzZWQKKyAgICAgICAgSklUU3R1YkFyZyBhcmdzWzZdOworCisgICAg
ICAgIFJldHVybkFkZHJlc3NQdHIgdGh1bmtSZXR1cm5BZGRyZXNzOworICAgICAgICB2b2lkKiBz
YXZlZFIxMTsKKyAgICAgICAgdm9pZCogc2F2ZWRSMTA7CisgICAgICAgIHZvaWQqIHNhdmVkUjEz
OworICAgICAgICB2b2lkKiBzYXZlZFJQUjsKKyAgICAgICAgdm9pZCogc2F2ZWRSMTQ7CisgICAg
ICAgIHZvaWQqIHNhdmVkVGltZW91dFJlZzsKKworICAgICAgICBSZWdpc3RlckZpbGUqIHJlZ2lz
dGVyRmlsZTsKKyAgICAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWU7CisgICAgICAgIEpTVmFsdWUq
IGV4Y2VwdGlvbjsKKyAgICAgICAgUHJvZmlsZXIqKiBlbmFibGVkUHJvZmlsZXJSZWZlcmVuY2U7
CisgICAgICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YTsKKworICAgICAgICBSZXR1cm5BZGRy
ZXNzUHRyKiByZXR1cm5BZGRyZXNzU2xvdCgpIHsgcmV0dXJuICZ0aHVua1JldHVybkFkZHJlc3M7
IH0KKyAgICB9OwogI2VsaWYgQ1BVKFg4NikKICNpZiBDT01QSUxFUihNU1ZDKSB8fCAoT1MoV0lO
RE9XUykgJiYgQ09NUElMRVIoR0NDKSkKICNwcmFnbWEgcGFjayhwdXNoKQpkaWZmIC0tZ2l0IGEv
SmF2YVNjcmlwdENvcmUvaml0L0pTSW50ZXJmYWNlSklULmggYi9KYXZhU2NyaXB0Q29yZS9qaXQv
SlNJbnRlcmZhY2VKSVQuaAppbmRleCAwMzFiZmE4Li5kZmJiOGQzIDEwMDY0NAotLS0gYS9KYXZh
U2NyaXB0Q29yZS9qaXQvSlNJbnRlcmZhY2VKSVQuaAorKysgYi9KYXZhU2NyaXB0Q29yZS9qaXQv
SlNJbnRlcmZhY2VKSVQuaApAQCAtNjksNiArNjksNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgc3RhdGljIGNvbnN0IEZQUmVnaXN0ZXJJRCBmcFJlZ1QxID0gWDg2UmVnaXN0ZXJzOjp4bW0x
OwogICAgICAgICBzdGF0aWMgY29uc3QgRlBSZWdpc3RlcklEIGZwUmVnVDIgPSBYODZSZWdpc3Rl
cnM6OnhtbTI7CiAgICAgICAgIHN0YXRpYyBjb25zdCBGUFJlZ2lzdGVySUQgZnBSZWdUMyA9IFg4
NlJlZ2lzdGVyczo6eG1tMzsKKyAgICAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgcmV0dXJu
UEMgICA9IHJlZ1QzOwogI2VsaWYgQ1BVKFg4NikKICAgICAgICAgc3RhdGljIGNvbnN0IFJlZ2lz
dGVySUQgcmV0dXJuVmFsdWVSZWdpc3RlciA9IFg4NlJlZ2lzdGVyczo6ZWF4OwogICAgICAgICBz
dGF0aWMgY29uc3QgUmVnaXN0ZXJJRCBjYWNoZWRSZXN1bHRSZWdpc3RlciA9IFg4NlJlZ2lzdGVy
czo6ZWF4OwpAQCAtODgsNiArODksNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RhdGlj
IGNvbnN0IEZQUmVnaXN0ZXJJRCBmcFJlZ1QxID0gWDg2UmVnaXN0ZXJzOjp4bW0xOwogICAgICAg
ICBzdGF0aWMgY29uc3QgRlBSZWdpc3RlcklEIGZwUmVnVDIgPSBYODZSZWdpc3RlcnM6OnhtbTI7
CiAgICAgICAgIHN0YXRpYyBjb25zdCBGUFJlZ2lzdGVySUQgZnBSZWdUMyA9IFg4NlJlZ2lzdGVy
czo6eG1tMzsKKyAgICAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgcmV0dXJuUEMgICA9IHJl
Z1QzOwogI2VsaWYgQ1BVKEFSTV9USFVNQjIpCiAgICAgICAgIHN0YXRpYyBjb25zdCBSZWdpc3Rl
cklEIHJldHVyblZhbHVlUmVnaXN0ZXIgPSBBUk1SZWdpc3RlcnM6OnIwOwogICAgICAgICBzdGF0
aWMgY29uc3QgUmVnaXN0ZXJJRCBjYWNoZWRSZXN1bHRSZWdpc3RlciA9IEFSTVJlZ2lzdGVyczo6
cjA7CkBAIC0xMDUsNiArMTA3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0YXRpYyBj
b25zdCBGUFJlZ2lzdGVySUQgZnBSZWdUMSA9IEFSTVJlZ2lzdGVyczo6ZDE7CiAgICAgICAgIHN0
YXRpYyBjb25zdCBGUFJlZ2lzdGVySUQgZnBSZWdUMiA9IEFSTVJlZ2lzdGVyczo6ZDI7CiAgICAg
ICAgIHN0YXRpYyBjb25zdCBGUFJlZ2lzdGVySUQgZnBSZWdUMyA9IEFSTVJlZ2lzdGVyczo6ZDM7
CisgICAgICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIHJldHVyblBDICAgPSByZWdUMzsKICNl
bGlmIENQVShBUk1fVFJBRElUSU9OQUwpCiAgICAgICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklE
IHJldHVyblZhbHVlUmVnaXN0ZXIgPSBBUk1SZWdpc3RlcnM6OnIwOwogICAgICAgICBzdGF0aWMg
Y29uc3QgUmVnaXN0ZXJJRCBjYWNoZWRSZXN1bHRSZWdpc3RlciA9IEFSTVJlZ2lzdGVyczo6cjA7
CkBAIC0xMzAsNiArMTMzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0YXRpYyBjb25z
dCBGUFJlZ2lzdGVySUQgZnBSZWdUMSA9IEFSTVJlZ2lzdGVyczo6ZDE7CiAgICAgICAgIHN0YXRp
YyBjb25zdCBGUFJlZ2lzdGVySUQgZnBSZWdUMiA9IEFSTVJlZ2lzdGVyczo6ZDI7CiAgICAgICAg
IHN0YXRpYyBjb25zdCBGUFJlZ2lzdGVySUQgZnBSZWdUMyA9IEFSTVJlZ2lzdGVyczo6ZDM7Cisg
ICAgICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIHJldHVyblBDICAgPSByZWdUMzsKICNlbGlm
IENQVShNSVBTKQogICAgICAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCByZXR1cm5WYWx1ZVJl
Z2lzdGVyID0gTUlQU1JlZ2lzdGVyczo6djA7CiAgICAgICAgIHN0YXRpYyBjb25zdCBSZWdpc3Rl
cklEIGNhY2hlZFJlc3VsdFJlZ2lzdGVyID0gTUlQU1JlZ2lzdGVyczo6djA7CkBAIC0xNTMsNiAr
MTU3LDM0IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdGF0aWMgY29uc3QgRlBSZWdpc3Rl
cklEIGZwUmVnVDEgPSBNSVBTUmVnaXN0ZXJzOjpmNjsKICAgICAgICAgc3RhdGljIGNvbnN0IEZQ
UmVnaXN0ZXJJRCBmcFJlZ1QyID0gTUlQU1JlZ2lzdGVyczo6Zjg7CiAgICAgICAgIHN0YXRpYyBj
b25zdCBGUFJlZ2lzdGVySUQgZnBSZWdUMyA9IE1JUFNSZWdpc3RlcnM6OmYxMDsKKyAgICAgICAg
c3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgcmV0dXJuUEMgICA9IHJlZ1QzOworI2VsaWYgQ1BVKFNI
NCkKKyAgICAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgdGltZW91dENoZWNrUmVnaXN0ZXIg
PSBTSDQ6OlI4OworICAgICAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCBjYWxsRnJhbWVSZWdp
c3RlciA9IFNINDo6RlA7CisKKyAgICAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgcmVnVDAg
PSBTSDQ6OlIwOworICAgICAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCByZWdUMSA9IFNINDo6
UjE7CisgICAgICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIHJlZ1QyID0gU0g0OjpSMjsKKyAg
ICAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgcmVnVDMgPSBTSDQ6OlIzOworICAgICAgICBz
dGF0aWMgY29uc3QgUmVnaXN0ZXJJRCByZWdUNCA9IFNINDo6UjQ7CisgICAgICAgIHN0YXRpYyBj
b25zdCBSZWdpc3RlcklEIHJlZ1Q1ID0gU0g0OjpSNTsKKyAgICAgICAgc3RhdGljIGNvbnN0IFJl
Z2lzdGVySUQgcmVnVDYgPSBTSDQ6OlI2OworICAgICAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJ
RCByZWdUNyA9IFNINDo6Ujc7CisgICAgICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIHJlZ1Qx
MyA9IFNINDo6UjEzOworICAgICAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCBmaXJzdEFyZ3Vt
ZW50UmVnaXN0ZXIgPXJlZ1Q0OworCisgICAgICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIHJl
dHVyblZhbHVlUmVnaXN0ZXIgPSBTSDQ6OlIwOworICAgICAgICBzdGF0aWMgY29uc3QgUmVnaXN0
ZXJJRCBjYWNoZWRSZXN1bHRSZWdpc3RlciA9IFNINDo6UjA7CisKKyAgICAgICAgc3RhdGljIGNv
bnN0IEZQUmVnaXN0ZXJJRCBmcFJlZ1QwICA9IFNINDo6RlIwOworICAgICAgICBzdGF0aWMgY29u
c3QgRlBSZWdpc3RlcklEIGZwUmVnVDEgID0gU0g0OjpGUjI7CisgICAgICAgIHN0YXRpYyBjb25z
dCBGUFJlZ2lzdGVySUQgZnBSZWdUMiAgPSBTSDQ6OkZSNDsKKyAgICAgICAgc3RhdGljIGNvbnN0
IEZQUmVnaXN0ZXJJRCBmcFJlZ1QzICA9IFNINDo6RlI2OworICAgICAgICBzdGF0aWMgY29uc3Qg
RlBSZWdpc3RlcklEIGZwUmVnVDQgID0gU0g0OjpGUjg7CisgICAgICAgIHN0YXRpYyBjb25zdCBG
UFJlZ2lzdGVySUQgZnBSZWdUNSAgPSBTSDQ6OkZSMTA7CisgICAgICAgIHN0YXRpYyBjb25zdCBG
UFJlZ2lzdGVySUQgZnBSZWdUNiAgPSBTSDQ6OkZSMTI7CisgICAgICAgIHN0YXRpYyBjb25zdCBG
UFJlZ2lzdGVySUQgZnBSZWdUNyAgPSBTSDQ6OkZSMTQ7CisgICAgICAgIHN0YXRpYyBjb25zdCBS
ZWdpc3RlcklEIHJldHVyblBDICAgPSBTSDQ6OlIxMzsKICNlbHNlCiAjZXJyb3IgIkpJVCBub3Qg
c3VwcG9ydGVkIG9uIHRoaXMgcGxhdGZvcm0uIgogI2VuZGlmCmRpZmYgLS1naXQgYS9KYXZhU2Ny
aXB0Q29yZS93dGYvUGxhdGZvcm0uaCBiL0phdmFTY3JpcHRDb3JlL3d0Zi9QbGF0Zm9ybS5oCmlu
ZGV4IDNhOTZhYWMuLmZkMmNmODUgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL3d0Zi9QbGF0
Zm9ybS5oCisrKyBiL0phdmFTY3JpcHRDb3JlL3d0Zi9QbGF0Zm9ybS5oCkBAIC05MTQsNiArOTE0
LDggQEAKICNkZWZpbmUgV1RGX1VTRV9KU1ZBTFVFNjQgMQogI2VsaWYgQ1BVKE1JUFMpIHx8IChD
UFUoQVJNX1RSQURJVElPTkFMKSAmJiBDT01QSUxFUihNU1ZDKSkKICNkZWZpbmUgV1RGX1VTRV9K
U1ZBTFVFMzIgMQorI2VsaWYgQ1BVKFNINCkKKyNkZWZpbmUgV1RGX1VTRV9KU1ZBTFVFMzIgMQog
I2VsaWYgT1MoV0lORE9XUykgJiYgQ09NUElMRVIoTUlOR1cpCiAvKiBVc2luZyBKU1ZBTFVFMzJf
NjQgY2F1c2VzIHBhZGRpbmcvYWxpZ25lbWVudCBpc3N1ZXMgZm9yIEpJVFN0dWJBcmcKIG9uIE1p
bkdXLiBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI5MjY4ICov
CmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS95YXJyL1JlZ2V4SklULmNwcCBiL0phdmFTY3Jp
cHRDb3JlL3lhcnIvUmVnZXhKSVQuY3BwCmluZGV4IDVhNTNjZWQuLjVhMTk5ZTcgMTAwNjQ0Ci0t
LSBhL0phdmFTY3JpcHRDb3JlL3lhcnIvUmVnZXhKSVQuY3BwCisrKyBiL0phdmFTY3JpcHRDb3Jl
L3lhcnIvUmVnZXhKSVQuY3BwCkBAIC01Myw2ICs1MywxOCBAQCBjbGFzcyBSZWdleEdlbmVyYXRv
ciA6IHByaXZhdGUgTWFjcm9Bc3NlbWJsZXIgewogICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklE
IHJlZ1QxID0gQVJNUmVnaXN0ZXJzOjpyNjsKIAogICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklE
IHJldHVyblJlZ2lzdGVyID0gQVJNUmVnaXN0ZXJzOjpyMDsKKyNlbGlmIENQVShTSDQpCisgICAg
c3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgaW5wdXQgPSBTSDQ6OlI0OworICAgIHN0YXRpYyBjb25z
dCBSZWdpc3RlcklEIGluZGV4ID0gU0g0OjpSNTsKKyAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJ
RCBsZW5ndGggPSBTSDQ6OlI2OworICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIG91dHB1dCA9
IFNINDo6Ujc7CisKKyAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCByZWdUMCA9IFNINDo6UjA7
CisgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgcmVnVDEgPSBTSDQ6OlIxOworCisgICAgc3Rh
dGljIGNvbnN0IFJlZ2lzdGVySUQgcmV0dXJuUmVnaXN0ZXIgPSBTSDQ6OlIwOworI2RlZmluZSBa
ZXJvIFNINEFzc2VtYmxlcjo6RVEKKyNkZWZpbmUgTm9uWmVybyBTSDRBc3NlbWJsZXI6Ok5FCiAj
ZWxpZiBDUFUoTUlQUykKICAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCBpbnB1dCA9IE1JUFNS
ZWdpc3RlcnM6OmEwOwogICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIGluZGV4ID0gTUlQU1Jl
Z2lzdGVyczo6YTE7CkBAIC01NTUsNiArNTY3LDcgQEAgY2xhc3MgUmVnZXhHZW5lcmF0b3IgOiBw
cml2YXRlIE1hY3JvQXNzZW1ibGVyIHsKICAgICAgICAgfQogICAgIH0KIAorI2lmICFDUFUoU0g0
KQogICAgIHZvaWQgZ2VuZXJhdGVQYXR0ZXJuQ2hhcmFjdGVyUGFpcihUZXJtR2VuZXJhdGlvblN0
YXRlJiBzdGF0ZSkKICAgICB7CiAgICAgICAgIGNvbnN0IFJlZ2lzdGVySUQgY2hhcmFjdGVyID0g
cmVnVDA7CkBAIC01NzgsNiArNTkxLDcgQEAgY2xhc3MgUmVnZXhHZW5lcmF0b3IgOiBwcml2YXRl
IE1hY3JvQXNzZW1ibGVyIHsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBzdGF0ZS5qdW1w
VG9CYWNrdHJhY2soYnJhbmNoMzJXaXRoVW5hbGlnbmVkSGFsZldvcmRzKE5vdEVxdWFsLCBCYXNl
SW5kZXgoaW5wdXQsIGluZGV4LCBUaW1lc1R3bywgc3RhdGUuaW5wdXRPZmZzZXQoKSAqIHNpemVv
ZihVQ2hhcikpLCBJbW0zMihjaFBhaXIpKSwgdGhpcyk7CiAgICAgfQorI2VuZGlmCiAKICAgICB2
b2lkIGdlbmVyYXRlUGF0dGVybkNoYXJhY3RlckZpeGVkKFRlcm1HZW5lcmF0aW9uU3RhdGUmIHN0
YXRlKQogICAgIHsKQEAgLTExNDIsOCArMTE1NiwxMyBAQCBjbGFzcyBSZWdleEdlbmVyYXRvciA6
IHByaXZhdGUgTWFjcm9Bc3NlbWJsZXIgewogICAgICAgICAgICAgY2FzZSBRdWFudGlmaWVyRml4
ZWRDb3VudDoKICAgICAgICAgICAgICAgICBpZiAodGVybS5xdWFudGl0eUNvdW50ID09IDEpIHsK
ICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlLmlzU2luZ2xlUGF0dGVybkNoYXJhY3Rlckxv
b2thaGVhZFRlcm0oKSAmJiAoc3RhdGUubG9va2FoZWFkVGVybSgpLmlucHV0UG9zaXRpb24gPT0g
KHRlcm0uaW5wdXRQb3NpdGlvbiArIDEpKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgCisj
aWYgIUNQVShTSDQpCiAgICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZVBhdHRlcm5DaGFy
YWN0ZXJQYWlyKHN0YXRlKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLm5leHRUZXJt
KCk7CisjZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVQYXR0ZXJuQ2hhcmFj
dGVyU2luZ2xlKHN0YXRlKTsKKyNlbmRpZgogICAgICAgICAgICAgICAgICAgICB9IGVsc2UKICAg
ICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlUGF0dGVybkNoYXJhY3RlclNpbmdsZShzdGF0
ZSk7CiAgICAgICAgICAgICAgICAgfSBlbHNlCkBAIC0xNDE3LDYgKzE0MzYsOSBAQCBjbGFzcyBS
ZWdleEdlbmVyYXRvciA6IHByaXZhdGUgTWFjcm9Bc3NlbWJsZXIgewogICAgICAgICBwdXNoKEFS
TVJlZ2lzdGVyczo6cjUpOwogICAgICAgICBwdXNoKEFSTVJlZ2lzdGVyczo6cjYpOwogICAgICAg
ICBtb3ZlKEFSTVJlZ2lzdGVyczo6cjMsIG91dHB1dCk7CisjZWxpZiBDUFUoU0g0KQorICAgICAg
ICBwdXNoKFNINDo6UjEwKTsKKyAgICAgICAgcHVzaChTSDQ6OlIxMSk7CiAjZWxpZiBDUFUoTUlQ
UykKICAgICAgICAgLy8gRG8gbm90aGluZy4KICNlbmRpZgpAQCAtMTQzNiw2ICsxNDU4LDkgQEAg
Y2xhc3MgUmVnZXhHZW5lcmF0b3IgOiBwcml2YXRlIE1hY3JvQXNzZW1ibGVyIHsKICAgICAgICAg
cG9wKEFSTVJlZ2lzdGVyczo6cjYpOwogICAgICAgICBwb3AoQVJNUmVnaXN0ZXJzOjpyNSk7CiAg
ICAgICAgIHBvcChBUk1SZWdpc3RlcnM6OnI0KTsKKyNlbGlmIENQVShTSDQpCisgICAgICAgIHBv
cChTSDQ6OlIxMSk7CisgICAgICAgIHBvcChTSDQ6OlIxMCk7CiAjZWxpZiBDUFUoTUlQUykKICAg
ICAgICAgLy8gRG8gbm90aGluZwogI2VuZGlmCg==
</data>
<flag name="review"
          id="60640"
          type_id="1"
          status="-"
          setter="ossy"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>70750</attachid>
            <date>2010-10-14 10:45:51 -0700</date>
            <delta_ts>2010-12-10 07:57:20 -0800</delta_ts>
            <desc>JIT ENABLE for SH4</desc>
            <filename>SH4-JIT-ENABLE.patch</filename>
            <type>text/plain</type>
            <size>2049</size>
            <attacher name="thouraya">thouraya.andolsi</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCAyNmMzM2NkLi42YzU5ZTUy
IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTEgQEAK
KzIwMTAtMTAtMTQgIFRob3VyYXlhIEFORE9MU0kgIDx0aG91cmF5YS5hbmRvbHNpQHN0LmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBFbmFibGUg
SklUIHN1cHBvcnQgZm9yIFNINC4KKworICAgICAgICAqIGNvbmZpZ3VyZS5hYzoKKwogMjAxMC0w
OC0xMCAgQmFsYXpzIEtlbGVtZW4gIDxrYkBpbmYudS1zemVnZWQuaHU+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgQW50b25pbyBHb21lcy4KZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZp
Z3VyZS5hYwppbmRleCAzNjVkZTcyLi5kNzBlNTY3IDEwMDY0NAotLS0gYS9jb25maWd1cmUuYWMK
KysrIGIvY29uZmlndXJlLmFjCkBAIC02OTksNiArNjk5LDE1IEBAIGlmIHRlc3QgIiRlbmFibGVf
aml0IiA9ICJ5ZXMiOyB0aGVuCiAgICAgICAgICAgICAgICAgOzsKICAgICAgICAgICAgIGVzYWMK
ICAgICAgICAgOzsKKyAgICAgICAgc2g0KQorICAgICAgICAgICAgQUNfREVGSU5FKFtFTkFCTEVf
WUFSUl0sIFsxXSwgW0RlZmluZSB0byBlbmFibGUgWUFSUl0pCisgICAgICAgICAgICBBQ19ERUZJ
TkUoW0VOQUJMRV9ZQVJSX0pJVF0sIFsxXSwgW0RlZmluZSB0byBlbmFibGUgWUFSUiBKSVRdKQor
ICAgICAgICAgICAgQUNfREVGSU5FKFtFTkFCTEVfSklUXSwgWzFdLCBbRGVmaW5lIHRvIGVuYWJs
ZSBKSVRdKQorICAgICAgICAgICAgQUNfREVGSU5FKFtXVEZfVVNFX0pJVF9TVFVCX0FSR1VNRU5U
X1JFR0lTVEVSXSwgWzFdLCBbVXNlIHN0dWIgcmVnaXN0ZXJdKQorICAgICAgICAgICAgQUNfREVG
SU5FKFtFTkFCTEVfSklUX09QVElNSVpFX1BST1BFUlRZX0FDQ0VTU10sIFsxXSwgW0RlZmluZSB0
byBlbmFibGUgb3B0aW1pemVkIHByb3BlcnR5IGFjY2Vzc10pCisgICAgICAgICAgICBBQ19ERUZJ
TkUoW0VOQUJMRV9KSVRfT1BUSU1JWkVfQ0FMTF0sIFsxXSwgW0RlZmluZSB0byBlbmFibGUgb3B0
aW1pemluZyBjYWxsc10pCisgICAgICAgICAgICBBQ19ERUZJTkUoW0VOQUJMRV9KSVRfT1BUSU1J
WkVfQVJJVEhNRVRJQ10sIFsxXSwgW0RlZmluZSB0byBlbmFibGUgb3B0aW1pemVkIGFyaXRobWV0
aWNdKQorICAgICAgICA7OwogICAgICAgICAqKQogICAgICAgICAgICAgZW5hYmxlX2ppdD0ibm8g
KENQVSAnJGhvc3RfY3B1JyBub3Qgc3VwcG9ydGVkKSIKICAgICAgICAgOzsKQEAgLTc0Niw2ICs3
NTUsMTIgQEAgY2FzZSAiJHdpdGhfZm9udF9iYWNrZW5kIiBpbgogZXNhYwogQUNfTVNHX1JFU1VM
VChbJHdpdGhfZm9udF9iYWNrZW5kXSkKIAorCitpZiB0ZXN0ICIkaG9zdF9jcHUiID0gInNoNCI7
IHRoZW4KKyAgIENYWEZMQUdTPSIkQ1hYRkxBR1MgLW1pZWVlICIKKyAgIENGTEFHUz0iJENGTEFH
UyAtbWllZWUgIgorZmkKKwogIyBBZGQgJy1nJyBmbGFnIHRvIGdjYyBpZiBpdCdzIGRlYnVnIGJ1
aWxkCiBpZiB0ZXN0ICIkZW5hYmxlX2RlYnVnIiA9ICJ5ZXMiOyB0aGVuCiAgICBDWFhGTEFHUz0i
JENYWEZMQUdTIC1nIgpAQCAtOTE5LDYgKzkzNCw3IEBAIEFNX0NPTkRJVElPTkFMKFtTVkdfRkxB
R1NdLFt0ZXN0ICIkc3ZnX2ZsYWdzIiA9ICJ5ZXMiXSkKIEFNX0NPTkRJVElPTkFMKFtIVE1MX0ZM
QUdTXSxbdGVzdCAiJGh0bWxfZmxhZ3MiID0gInllcyJdKQogQU1fQ09ORElUSU9OQUwoW0VOQUJM
RV9XRUJfU09DS0VUU10sW3Rlc3QgIiRlbmFibGVfd2ViX3NvY2tldHMiID0gInllcyJdKQogQU1f
Q09ORElUSU9OQUwoW0VOQUJMRV9XRUJfVElNSU5HXSxbdGVzdCAiJGVuYWJsZV93ZWJfdGltaW5n
IiA9ICJ5ZXMiXSkKK0FNX0NPTkRJVElPTkFMKFtDUFVfU0g0XSwgW3Rlc3QgIiRob3N0X2NwdSIg
PSAic2g0Il0pCiAKICMgR3RrIGNvbmRpdGlvbmFscwogQU1fQ09ORElUSU9OQUwoW0VOQUJMRV9J
TlRST1NQRUNUSU9OXSxbdGVzdCAiJGVuYWJsZV9pbnRyb3NwZWN0aW9uIiA9ICJ5ZXMiXSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>76199</attachid>
            <date>2010-12-10 07:55:26 -0800</date>
            <delta_ts>2010-12-14 01:35:24 -0800</delta_ts>
            <desc>JIT support JSValue32-64</desc>
            <filename>SH4-JIT-1.3.5-JSValue32-64</filename>
            <type>text/plain</type>
            <size>145799</size>
            <attacher>thouraya.andolsi</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwppbmRleCAxMjFlZGQ5Li5iYzc4YzE2IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjY2
IEBACisyMDEwLTEyLTEwICBUaG91cmF5YSBBTkRPTFNJICA8dGhvdXJheWEuYW5kb2xzaUBzdC5j
b20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRk
IEpJVCBzdXBwb3J0IGZvciBTSDQgcGxhdGZvcm1zLgorCisgICAgICAgICogR05VbWFrZWZpbGUu
YW06CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmg6CisgICAgICAgICogYXNz
ZW1ibGVyL01hY3JvQXNzZW1ibGVyU0g0Lmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpNYWNyb0Fz
c2VtYmxlclNINDo6Y2xhaW1TY3JhdGNoKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJT
SDQ6OnJlbGVhc2VTY3JhdGNoKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJTSDQ6OmFk
ZDMyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJTSDQ6OmFuZDMyKToKKyAgICAgICAg
KEpTQzo6TWFjcm9Bc3NlbWJsZXJTSDQ6OmxzaGlmdDMyKToKKyAgICAgICAgKEpTQzo6TWFjcm9B
c3NlbWJsZXJTSDQ6OnJzaGlmdDMyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJTSDQ6
Om11bDMyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJTSDQ6Om5vdDMyKToKKyAgICAg
ICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJTSDQ6Om9yMzIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fz
c2VtYmxlclNINDo6c3ViMzIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclNINDo6eG9y
MzIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclNINDo6bG9hZDMyKToKKyAgICAgICAg
KEpTQzo6TWFjcm9Bc3NlbWJsZXJTSDQ6OmxvYWQ4KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3Nl
bWJsZXJTSDQ6OmxvYWQxNik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyU0g0OjpzdG9y
ZTMyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJTSDQ6OmxvYWQzMldpdGhBZGRyZXNz
T2Zmc2V0UGF0Y2gpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclNINDo6c3RvcmUzMldp
dGhBZGRyZXNzT2Zmc2V0UGF0Y2gpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclNINDo6
bG9hZFB0cldpdGhQYXRjaFRvTEVBKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJTSDQ6
OnN1cHBvcnRzRmxvYXRpbmdQb2ludCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyU0g0
OjpzdXBwb3J0c0Zsb2F0aW5nUG9pbnRUcnVuY2F0ZSk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNz
ZW1ibGVyU0g0OjpzdXBwb3J0c0Zsb2F0aW5nUG9pbnRTcXJ0KToKKyAgICAgICAgKEpTQzo6TWFj
cm9Bc3NlbWJsZXJTSDQ6OmxvYWREb3VibGUpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxl
clNINDo6c3RvcmVEb3VibGUpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclNINDo6YWRk
RG91YmxlKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJTSDQ6OnN1YkRvdWJsZSk6Cisg
ICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyU0g0OjptdWxEb3VibGUpOgorICAgICAgICAoSlND
OjpNYWNyb0Fzc2VtYmxlclNINDo6ZGl2RG91YmxlKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3Nl
bWJsZXJTSDQ6OmNvbnZlcnRJbnQzMlRvRG91YmxlKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3Nl
bWJsZXJTSDQ6Onplcm9Eb3VibGUpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclNINDo6
YnJhbmNoRG91YmxlKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJTSDQ6OmJyYW5jaFRy
dWUpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclNINDo6YnJhbmNoRmFsc2UpOgorICAg
ICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclNINDo6c2V0OCk6CisgICAgICAgIChKU0M6Ok1hY3Jv
QXNzZW1ibGVyU0g0OjpicmFuY2gzMik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyU0g0
OjpzcXJ0RG91YmxlKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJTSDQ6OmJyYW5jaFRl
c3Q4KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJTSDQ6OnNpZ25FeHRlbmQzMlRvUHRy
KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJTSDQ6OmJyYW5jaDgpOgorICAgICAgICAo
SlNDOjpNYWNyb0Fzc2VtYmxlclNINDo6YnJhbmNoVHJ1bmNhdGVEb3VibGVUb0ludDMyKToKKyAg
ICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJTSDQ6OnBvcCk6CisgICAgICAgIChKU0M6Ok1hY3Jv
QXNzZW1ibGVyU0g0OjpwdXNoKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJTSDQ6Om1v
dmUpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclNINDo6bW92ZVdpdGhQYXRjaCk6Cisg
ICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyU0g0OjpleHR1dyk6CisgICAgICAgIChKU0M6Ok1h
Y3JvQXNzZW1ibGVyU0g0OjpzZXQzMik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyU0g0
OjpzZXRUZXN0OCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyU0g0Ojpsb2FkUHRyTGlu
a1JlZyk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyU0g0OjpicmFuY2gxNik6CisgICAg
ICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyU0g0OjpicmFuY2hUZXN0MzIpOgorICAgICAgICAoSlND
OjpNYWNyb0Fzc2VtYmxlclNINDo6anVtcCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVy
U0g0OjpicmFuY2hBZGQzMik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyU0g0OjpicmFu
Y2hNdWwzMik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyU0g0OjpicmFuY2hTdWIzMik6
CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyU0g0OjpicmFuY2hPcjMyKToKKyAgICAgICAg
KEpTQzo6TWFjcm9Bc3NlbWJsZXJTSDQ6OmJyYW5jaENvbnZlcnREb3VibGVUb0ludDMyKToKKyAg
ICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJTSDQ6Om5lZzMyKToKKyAgICAgICAgKEpTQzo6TWFj
cm9Bc3NlbWJsZXJTSDQ6OnVyc2hpZnQzMik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVy
U0g0OjpjYWxsKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJTSDQ6Om5lYXJDYWxsKToK
KyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJTSDQ6OmJyZWFrcG9pbnQpOgorICAgICAgICAo
SlNDOjpNYWNyb0Fzc2VtYmxlclNINDo6cmV0KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJs
ZXJTSDQ6OmJyYW5jaFB0cldpdGhQYXRjaCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVy
U0g0OjpzdG9yZVB0cldpdGhQYXRjaCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyU0g0
Ojp0YWlsUmVjdXJzaXZlQ2FsbCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyU0g0Ojpt
YWtlVGFpbFJlY3Vyc2l2ZUNhbGwpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclNINDo6
c2l6ZU9mQ29uc3RhbnRQb29sKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJTSDQ6Omxp
bmtDYWxsKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJTSDQ6OnJlcGF0Y2hDYWxsKToK
KyAgICAgICAgKiBhc3NlbWJsZXIvU0g0QXNzZW1ibGVyLmg6IEFkZGVkLgorICAgICAgICAoR0VU
T1BDT0RFR1JPVVBFMSk6CisgICAgICAgIChHRVRPUENPREVHUk9VUEUyKToKKyAgICAgICAgKEdF
VE9QQ09ERUdST1VQRTMpOgorICAgICAgICAoR0VUT1BDT0RFR1JPVVBFNCk6CisgICAgICAgIChH
RVRPUENPREVHUk9VUEU1KToKKyAgICAgICAgKEdFVE9QQ09ERUdST1VQRTYpOgorICAgICAgICAo
R0VUT1BDT0RFR1JPVVBFNyk6CisgICAgICAgIChHRVRPUENPREVHUk9VUEU4KToKKyAgICAgICAg
KEdFVE9QQ09ERUdST1VQRTkpOgorICAgICAgICAoR0VUT1BDT0RFR1JPVVBFMTApOgorICAgICAg
ICAoR0VUT1BDT0RFR1JPVVBFMTEpOgorICAgICAgICAoSlNDOjopOgorICAgICAgICAoSlNDOjpT
SDQ6Oik6CisgICAgICAgIChKU0M6OlNINEFzc2VtYmxlcjo6KToKKyAgICAgICAgKEpTQzo6U0g0
QXNzZW1ibGVyOjpTSDRBc3NlbWJsZXIpOgorICAgICAgICAoSlNDOjpTSDRBc3NlbWJsZXI6Okpt
cFNyYzo6Sm1wU3JjKToKKyAgICAgICAgKEpTQzo6U0g0QXNzZW1ibGVyOjpKbXBEc3Q6OkptcERz
dCk6CisgICAgICAgIChKU0M6OlNINEFzc2VtYmxlcjo6Sm1wRHN0Ojppc1VzZWQpOgorICAgICAg
ICAoSlNDOjpTSDRBc3NlbWJsZXI6OkptcERzdDo6dXNlZCk6CisgICAgICAgIChKU0M6OlNINEFz
c2VtYmxlcjo6SXNJbW1lZGlhdGUpOgorICAgICAgICAoSlNDOjpTSDRBc3NlbWJsZXI6OmNsYWlt
U2NyYXRjaCk6CisgICAgICAgIChKU0M6OlNINEFzc2VtYmxlcjo6cmVsZWFzZVNjcmF0Y2gpOgor
ICAgICAgICAoSlNDOjpTSDRBc3NlbWJsZXI6OnB1c2hfcik6CisgICAgICAgIChKU0M6OlNINEFz
c2VtYmxlcjo6cG9wX3IpOgorICAgICAgICAoSlNDOjpTSDRBc3NlbWJsZXI6OnB1c2hfaTMyKToK
KyAgICAgICAgKEpTQzo6U0g0QXNzZW1ibGVyOjpwdXNoX20pOgorICAgICAgICAoSlNDOjpTSDRB
c3NlbWJsZXI6OnBvcF9tKToKKyAgICAgICAgKEpTQzo6U0g0QXNzZW1ibGVyOjptb3Z0KToKKyAg
ICAgICAgKEpTQzo6U0g0QXNzZW1ibGVyOjphZGRsX3JyKToKKyAgICAgICAgKEpTQzo6U0g0QXNz
ZW1ibGVyOjphZGRjbF9ycik6CisgICAgICAgIChKU0M6OlNINEFzc2VtYmxlcjo6YWRkdmxfcnIp
OgorICAgICAgICAoSlNDOjpTSDRBc3NlbWJsZXI6OmFkZGxfaThyKToKKyAgICAgICAgKEpTQzo6
U0g0QXNzZW1ibGVyOjphbmRsX3JyKToKKyAgICAgICAgKEpTQzo6U0g0QXNzZW1ibGVyOjphZGRs
X2lyKToKKyAgICAgICAgKEpTQzo6U0g0QXNzZW1ibGVyOjphbmRsX2k4cik6CisgICAgICAgIChK
U0M6OlNINEFzc2VtYmxlcjo6ZGl2MWxfcnIpOgorICAgICAgICAoSlNDOjpTSDRBc3NlbWJsZXI6
OmRpdjBsX3JyKToKKyAgICAgICAgKEpTQzo6U0g0QXNzZW1ibGVyOjpub3RsX3IpOgorICAgICAg
ICAoSlNDOjpTSDRBc3NlbWJsZXI6Om9ybF9ycik6CisgICAgICAgIChKU0M6OlNINEFzc2VtYmxl
cjo6b3JsX2k4cik6CisgICAgICAgIChKU0M6OlNINEFzc2VtYmxlcjo6c3VibF9ycik6CisgICAg
ICAgIChKU0M6OlNINEFzc2VtYmxlcjo6c3VidmxfcnIpOgorICAgICAgICAoSlNDOjpTSDRBc3Nl
bWJsZXI6OnN1YmxfaW1tcik6CisgICAgICAgIChKU0M6OlNINEFzc2VtYmxlcjo6eG9ybF9ycik6
CisgICAgICAgIChKU0M6OlNINEFzc2VtYmxlcjo6eG9ybF9pOHIpOgorICAgICAgICAoSlNDOjpT
SDRBc3NlbWJsZXI6OnNobGxfaThyKToKKyAgICAgICAgKEpTQzo6U0g0QXNzZW1ibGVyOjpuZWcp
OgorICAgICAgICAoSlNDOjpTSDRBc3NlbWJsZXI6OnNobGxfcnIpOgorICAgICAgICAoSlNDOjpT
SDRBc3NlbWJsZXI6OnNobHJfcnIpOgorICAgICAgICAoSlNDOjpTSDRBc3NlbWJsZXI6OnNoYXJf
cnIpOgorICAgICAgICAoSlNDOjpTSDRBc3NlbWJsZXI6OnNoYV9ycik6CisgICAgICAgIChKU0M6
OlNINEFzc2VtYmxlcjo6c2hscl9pOHIpOgorICAgICAgICAoSlNDOjpTSDRBc3NlbWJsZXI6Omlt
dWxsX3JyKToKKyAgICAgICAgKEpTQzo6U0g0QXNzZW1ibGVyOjpkbXVsbF9ycik6CisgICAgICAg
IChKU0M6OlNINEFzc2VtYmxlcjo6ZG11bHNsX3JyKToKKyAgICAgICAgKEpTQzo6U0g0QXNzZW1i
bGVyOjpzdHNtYWNsKToKKyAgICAgICAgKEpTQzo6U0g0QXNzZW1ibGVyOjpzdHNtYWNoKToKKyAg
ICAgICAgKEpTQzo6U0g0QXNzZW1ibGVyOjpjbXBsX3JyKToKKyAgICAgICAgKEpTQzo6U0g0QXNz
ZW1ibGVyOjpjbXBwbCk6CisgICAgICAgIChKU0M6OlNINEFzc2VtYmxlcjo6Y21wcHopOgorICAg
ICAgICAoSlNDOjpTSDRBc3NlbWJsZXI6OmNtcGxfaXIpOgorICAgICAgICAoSlNDOjpTSDRBc3Nl
bWJsZXI6OmNtcGxfbXIpOgorICAgICAgICAoSlNDOjpTSDRBc3NlbWJsZXI6OmNtcGxfcm0pOgor
ICAgICAgICAoSlNDOjpTSDRBc3NlbWJsZXI6OmNtcGxfaW0pOgorICAgICAgICAoSlNDOjpTSDRB
c3NlbWJsZXI6OnRlc3RsX3JyKToKKyAgICAgICAgKEpTQzo6U0g0QXNzZW1ibGVyOjp0ZXN0bF9p
OHIpOgorICAgICAgICAoSlNDOjpTSDRBc3NlbWJsZXI6OnRlc3RsX2kzMnIpOgorICAgICAgICAo
SlNDOjpTSDRBc3NlbWJsZXI6OnRlc3RsX2kzMm0pOgorICAgICAgICAoSlNDOjpTSDRBc3NlbWJs
ZXI6OnRlc3RiX2k4cik6CisgICAgICAgIChKU0M6OlNINEFzc2VtYmxlcjo6bm9wKToKKyAgICAg
ICAgKEpTQzo6U0g0QXNzZW1ibGVyOjpzZXR0KToKKyAgICAgICAgKEpTQzo6U0g0QXNzZW1ibGVy
OjpjbHJ0KToKKyAgICAgICAgKEpTQzo6U0g0QXNzZW1ibGVyOjpia3B0KToKKyAgICAgICAgKEpT
Qzo6U0g0QXNzZW1ibGVyOjpicmFuY2gpOgorICAgICAgICAoSlNDOjpTSDRBc3NlbWJsZXI6OmR0
KToKKyAgICAgICAgKEpTQzo6U0g0QXNzZW1ibGVyOjpsZHNwcik6CisgICAgICAgIChKU0M6OlNI
NEFzc2VtYmxlcjo6c3RzcHIpOgorICAgICAgICAoSlNDOjpTSDRBc3NlbWJsZXI6OmV4dHV3KToK
KyAgICAgICAgKEpTQzo6U0g0QXNzZW1ibGVyOjpsZHNybV9mcHVsKToKKyAgICAgICAgKEpTQzo6
U0g0QXNzZW1ibGVyOjpmbmVnKToKKyAgICAgICAgKEpTQzo6U0g0QXNzZW1ibGVyOjpmc3FydCk6
CisgICAgICAgIChKU0M6OlNINEFzc2VtYmxlcjo6c3RzX2ZwdWxfcm4pOgorICAgICAgICAoSlND
OjpTSDRBc3NlbWJsZXI6OmZsb2F0X2ZwdWxfZnJuKToKKyAgICAgICAgKEpTQzo6U0g0QXNzZW1i
bGVyOjpmbXVsbCk6CisgICAgICAgIChKU0M6OlNINEFzc2VtYmxlcjo6Zm1vdnNfcmVhZF9ybSk6
CisgICAgICAgIChKU0M6OlNINEFzc2VtYmxlcjo6Zm1vdnNfd3JpdGVfcm0pOgorICAgICAgICAo
SlNDOjpTSDRBc3NlbWJsZXI6OmZtb3ZzX3dyaXRlX3Iwcik6CisgICAgICAgIChKU0M6OlNINEFz
c2VtYmxlcjo6Zm1vdnNfcmVhZF9yMHIpOgorICAgICAgICAoSlNDOjpTSDRBc3NlbWJsZXI6OmZt
b3ZzX3JlYWRfcm1faW5jKToKKyAgICAgICAgKEpTQzo6U0g0QXNzZW1ibGVyOjpmbW92c193cml0
ZV9ybl9kZWMpOgorICAgICAgICAoSlNDOjpTSDRBc3NlbWJsZXI6OmZ0cmNfcm1fZnB1bCk6Cisg
ICAgICAgIChKU0M6OlNINEFzc2VtYmxlcjo6Zmxkc19mcHVsKToKKyAgICAgICAgKEpTQzo6U0g0
QXNzZW1ibGVyOjpmc3RzX2ZwdWwpOgorICAgICAgICAoSlNDOjpTSDRBc3NlbWJsZXI6Omxkc2Zw
c2NyKToKKyAgICAgICAgKEpTQzo6U0g0QXNzZW1ibGVyOjpzdHNmcHNjcik6CisgICAgICAgIChK
U0M6OlNINEFzc2VtYmxlcjo6ZGNtcHBlcSk6CisgICAgICAgIChKU0M6OlNINEFzc2VtYmxlcjo6
ZGNtcHBndCk6CisgICAgICAgIChKU0M6OlNINEFzc2VtYmxlcjo6ZG11bF9ycik6CisgICAgICAg
IChKU0M6OlNINEFzc2VtYmxlcjo6ZHN1Yl9ycik6CisgICAgICAgIChKU0M6OlNINEFzc2VtYmxl
cjo6ZGFkZF9ycik6CisgICAgICAgIChKU0M6OlNINEFzc2VtYmxlcjo6ZG1vdl9ycik6CisgICAg
ICAgIChKU0M6OlNINEFzc2VtYmxlcjo6ZGRpdl9ycik6CisgICAgICAgIChKU0M6OlNINEFzc2Vt
Ymxlcjo6ZHNxcnQpOgorICAgICAgICAoSlNDOjpTSDRBc3NlbWJsZXI6OmRvdWJsZWxvYWQpOgor
ICAgICAgICAoSlNDOjpTSDRBc3NlbWJsZXI6OmRuZWcpOgorICAgICAgICAoSlNDOjpTSDRBc3Nl
bWJsZXI6OmRvdWJsZXN0b3JlKToKKyAgICAgICAgKEpTQzo6U0g0QXNzZW1ibGVyOjpmbW92X3Jl
YWRfcm0pOgorICAgICAgICAoSlNDOjpTSDRBc3NlbWJsZXI6OmZtb3Zfd3JpdGVfcm0pOgorICAg
ICAgICAoSlNDOjpTSDRBc3NlbWJsZXI6OmZtb3Zfd3JpdGVfcjByKToKKyAgICAgICAgKEpTQzo6
U0g0QXNzZW1ibGVyOjpmbW92X3JlYWRfcjByKToKKyAgICAgICAgKEpTQzo6U0g0QXNzZW1ibGVy
OjpmbW92X3JlYWRfcm1faW5jKToKKyAgICAgICAgKEpTQzo6U0g0QXNzZW1ibGVyOjpmbW92X3dy
aXRlX3JuX2RlYyk6CisgICAgICAgIChKU0M6OlNINEFzc2VtYmxlcjo6ZmxvYXRfZnB1bF9kcm4p
OgorICAgICAgICAoSlNDOjpTSDRBc3NlbWJsZXI6OmZ0cmNfZHJtX2ZwdWwpOgorICAgICAgICAo
SlNDOjpTSDRBc3NlbWJsZXI6Om1vdl9pbW04KToKKyAgICAgICAgKEpTQzo6U0g0QXNzZW1ibGVy
Ojptb3ZsX3JyKToKKyAgICAgICAgKEpTQzo6U0g0QXNzZW1ibGVyOjptb3Z3X3JtKToKKyAgICAg
ICAgKEpTQzo6U0g0QXNzZW1ibGVyOjptb3Z3X21yKToKKyAgICAgICAgKEpTQzo6U0g0QXNzZW1i
bGVyOjptb3Z3X3IwbXIpOgorICAgICAgICAoSlNDOjpTSDRBc3NlbWJsZXI6Om1vdmxfcm0pOgor
ICAgICAgICAoSlNDOjpTSDRBc3NlbWJsZXI6Om1vdmxfaTMybSk6CisgICAgICAgIChKU0M6OlNI
NEFzc2VtYmxlcjo6bW92bF9tcik6CisgICAgICAgIChKU0M6OlNINEFzc2VtYmxlcjo6bW92Yl9t
cik6CisgICAgICAgIChKU0M6OlNINEFzc2VtYmxlcjo6bW92Yl9yMG1yKToKKyAgICAgICAgKEpT
Qzo6U0g0QXNzZW1ibGVyOjptb3ZsX3IwbXIpOgorICAgICAgICAoSlNDOjpTSDRBc3NlbWJsZXI6
Om1vdmxfcm1yMCk6CisgICAgICAgIChKU0M6OlNINEFzc2VtYmxlcjo6bW92bF9pOHIpOgorICAg
ICAgICAoSlNDOjpTSDRBc3NlbWJsZXI6Om9ybF9pcik6CisgICAgICAgIChKU0M6OlNINEFzc2Vt
Ymxlcjo6TG9hZENvbnN0YW50KToKKyAgICAgICAgKEpTQzo6U0g0QXNzZW1ibGVyOjpMb2FkQ29u
c3RhbnRVbmNoZWNrZWRTaXplKToKKyAgICAgICAgKEpTQzo6U0g0QXNzZW1ibGVyOjpjYWxsKToK
KyAgICAgICAgKEpTQzo6U0g0QXNzZW1ibGVyOjpqbXApOgorICAgICAgICAoSlNDOjpTSDRBc3Nl
bWJsZXI6OmptcF9yKToKKyAgICAgICAgKEpTQzo6U0g0QXNzZW1ibGVyOjpqbXBfbSk6CisgICAg
ICAgIChKU0M6OlNINEFzc2VtYmxlcjo6am5lKToKKyAgICAgICAgKEpTQzo6U0g0QXNzZW1ibGVy
OjpqZSk6CisgICAgICAgIChKU0M6OlNINEFzc2VtYmxlcjo6cmV0KToKKyAgICAgICAgKEpTQzo6
U0g0QXNzZW1ibGVyOjpsYWJlbCk6CisgICAgICAgIChKU0M6OlNINEFzc2VtYmxlcjo6c2l6ZU9m
Q29uc3RhbnRQb29sKToKKyAgICAgICAgKEpTQzo6U0g0QXNzZW1ibGVyOjphbGlnbik6CisgICAg
ICAgIChKU0M6OlNINEFzc2VtYmxlcjo6bGlua0p1bXApOgorICAgICAgICAoSlNDOjpTSDRBc3Nl
bWJsZXI6OmxpbmtDYWxsKToKKyAgICAgICAgKEpTQzo6U0g0QXNzZW1ibGVyOjpsaW5rUG9pbnRl
cik6CisgICAgICAgIChKU0M6OlNINEFzc2VtYmxlcjo6Z2V0Q2FsbFJldHVybk9mZnNldCk6Cisg
ICAgICAgIChKU0M6OlNINEFzc2VtYmxlcjo6Z2V0TGRySW1tQWRkcmVzc09uUG9vbCk6CisgICAg
ICAgIChKU0M6OlNINEFzc2VtYmxlcjo6cGF0Y2hDb25zdGFudFBvb2xMb2FkKToKKyAgICAgICAg
KEpTQzo6U0g0QXNzZW1ibGVyOjpwbGFjZUNvbnN0YW50UG9vbEJhcnJpZXIpOgorICAgICAgICAo
SlNDOjpTSDRBc3NlbWJsZXI6OnJlcGF0Y2hQb2ludGVyKToKKyAgICAgICAgKEpTQzo6U0g0QXNz
ZW1ibGVyOjpyZXBhdGNoTG9hZFB0clRvTEVBKToKKyAgICAgICAgKEpTQzo6U0g0QXNzZW1ibGVy
OjpyZXBhdGNoSW50MzIpOgorICAgICAgICAoSlNDOjpTSDRBc3NlbWJsZXI6OnJlbGlua0NhbGwp
OgorICAgICAgICAoSlNDOjpTSDRBc3NlbWJsZXI6OnJlbGlua0p1bXApOgorICAgICAgICAoSlND
OjpTSDRBc3NlbWJsZXI6OmdldFJlbG9jYXRlZEFkZHJlc3MpOgorICAgICAgICAoSlNDOjpTSDRB
c3NlbWJsZXI6OmdldERpZmZlcmVuY2VCZXR3ZWVuTGFiZWxzKToKKyAgICAgICAgKEpTQzo6U0g0
QXNzZW1ibGVyOjpwYXRjaFBvaW50ZXIpOgorICAgICAgICAoSlNDOjpTSDRBc3NlbWJsZXI6OnBh
dGNoSW50MzIpOgorICAgICAgICAoSlNDOjpTSDRBc3NlbWJsZXI6OmV4ZWN1dGFibGVDb3B5KToK
KyAgICAgICAgKEpTQzo6U0g0QXNzZW1ibGVyOjpwcmVmaXgpOgorICAgICAgICAoSlNDOjpTSDRB
c3NlbWJsZXI6Om9uZVNob3J0T3ApOgorICAgICAgICAoSlNDOjpTSDRBc3NlbWJsZXI6OmVuc3Vy
ZVNwYWNlKToKKyAgICAgICAgKEpTQzo6U0g0QXNzZW1ibGVyOjpkYXRhKToKKyAgICAgICAgKEpT
Qzo6U0g0QXNzZW1ibGVyOjpzaXplKToKKyAgICAgICAgKiBqaXQvRXhlY3V0YWJsZUFsbG9jYXRv
ci5oOgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQWxsb2NhdG9yOjpjYWNoZUZsdXNoKToKKyAg
ICAgICAgKiBqaXQvSklULmg6CisgICAgICAgICogaml0L0pJVElubGluZU1ldGhvZHMuaDoKKyAg
ICAgICAgKEpTQzo6SklUOjpiZWdpblVuaW50ZXJydXB0ZWRTZXF1ZW5jZSk6CisgICAgICAgIChK
U0M6OkpJVDo6cHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKToKKyAgICAgICAgKEpTQzo6
SklUOjpyZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybik6CisgICAgICAgIChKU0M6OkpJ
VDo6cmVzdG9yZUFyZ3VtZW50UmVmZXJlbmNlRm9yVHJhbXBvbGluZSk6CisgICAgICAgICogaml0
L0pJVE9wY29kZXMzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVD
VElOYXRpdmVDYWxsKToKKyAgICAgICAgKiBqaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHA6
CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZUdldEJ5SWRTbG93Q2FzZSk6CisgICAgICAgIChK
U0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeUlkVHJhbnNpdGlvbik6CisgICAgICAgICogaml0
L0pJVFN0dWJzLmNwcDoKKyAgICAgICAgKiBqaXQvSklUU3R1YnMuaDoKKyAgICAgICAgKEpTQzo6
SklUU3RhY2tGcmFtZTo6cmV0dXJuQWRkcmVzc1Nsb3QpOgorICAgICAgICAqIGppdC9KU0ludGVy
ZmFjZUpJVC5oOgorICAgICAgICAqIHd0Zi9QbGF0Zm9ybS5oOgorICAgICAgICAqIHlhcnIvUmVn
ZXhKSVQuY3BwOgorICAgICAgICAoSlNDOjpZYXJyOjpSZWdleEdlbmVyYXRvcjo6Z2VuZXJhdGVU
ZXJtKToKKyAgICAgICAgKEpTQzo6WWFycjo6UmVnZXhHZW5lcmF0b3I6OmdlbmVyYXRlRW50ZXIp
OgorICAgICAgICAoSlNDOjpZYXJyOjpSZWdleEdlbmVyYXRvcjo6Z2VuZXJhdGVSZXR1cm4pOgor
CiAyMDEwLTExLTAzICBHYWJvciBMb2tpICA8bG9raUB3ZWJraXQub3JnPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IEdlb2ZmcmV5IEdhcmVuLgpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvR05V
bWFrZWZpbGUuYW0gYi9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5hbQppbmRleCBjNTA3ZjVk
Li42ZWY3OWU0IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5hbQorKysg
Yi9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5hbQpAQCAtODYsNiArODYsOCBAQCBqYXZhc2Ny
aXB0Y29yZV9zb3VyY2VzICs9IFwKIAlKYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmLmggXAogCUphdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxl
ci5oIFwKIAlKYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaCBc
CisJSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyU0g0LmggXAorCUphdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9TSDRBc3NlbWJsZXIuaCBcCiAJSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmggXAogCUphdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9NYWNyb0Fzc2VtYmxlclg4Ni5oIFwKIAlKYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvUmVw
YXRjaEJ1ZmZlci5oIFwKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNy
b0Fzc2VtYmxlci5oIGIvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmgK
aW5kZXggY2UxYmU3OC4uMmFlNjQ3MyAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL01hY3JvQXNzZW1ibGVyLmgKKysrIGIvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3Jv
QXNzZW1ibGVyLmgKQEAgLTUwLDYgKzUwLDEwIEBAIG5hbWVzcGFjZSBKU0MgeyB0eXBlZGVmIE1h
Y3JvQXNzZW1ibGVyWDg2IE1hY3JvQXNzZW1ibGVyQmFzZTsgfTsKICNpbmNsdWRlICJNYWNyb0Fz
c2VtYmxlclg4Nl82NC5oIgogbmFtZXNwYWNlIEpTQyB7IHR5cGVkZWYgTWFjcm9Bc3NlbWJsZXJY
ODZfNjQgTWFjcm9Bc3NlbWJsZXJCYXNlOyB9OwogCisjZWxpZiBDUFUoU0g0KQorI2luY2x1ZGUg
Ik1hY3JvQXNzZW1ibGVyU0g0LmgiCituYW1lc3BhY2UgSlNDIHsgdHlwZWRlZiBNYWNyb0Fzc2Vt
YmxlclNINCBNYWNyb0Fzc2VtYmxlckJhc2U7IH07CisKICNlbHNlCiAjZXJyb3IgIlRoZSBNYWNy
b0Fzc2VtYmxlciBpcyBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgcGxhdGZvcm0uIgogI2VuZGlmCmRp
ZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJTSDQuaCBi
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclNINC5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3YTNmOTUKLS0tIC9kZXYvbnVsbAorKysgYi9KYXZh
U2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJTSDQuaApAQCAtMCwwICsxLDE4MzQg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBTVE1pY3JvZWxlY3Ryb25pY3MuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyov
CisKKworI2lmbmRlZiBNYWNyb0Fzc2VtYmxlclNINF9oCisjZGVmaW5lIE1hY3JvQXNzZW1ibGVy
U0g0X2gKKworI2luY2x1ZGUgImFzc2VydC5oIgorI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgor
I2lmIEVOQUJMRShBU1NFTUJMRVIpCisKKyNpbmNsdWRlICJBYnN0cmFjdE1hY3JvQXNzZW1ibGVy
LmgiCisjaW5jbHVkZSAiU0g0QXNzZW1ibGVyLmgiCitleHRlcm4gdW5zaWduZWQgaW50IF9fZnBz
Y3JfdmFsdWVzWzJdOworCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgTWFjcm9Bc3NlbWJsZXJT
SDQgOiBwdWJsaWMgQWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjxTSDRBc3NlbWJsZXI+IHsKK3B1Ymxp
YzoKKworICAgIHR5cGVkZWYgU0g0QXNzZW1ibGVyOjpDb25kaXRpb24gQ29uZGl0aW9uOworICAg
IHR5cGVkZWYgU0g0QXNzZW1ibGVyOjpGUFJlZ2lzdGVySUQgRlBSZWdpc3RlcklEOworCisgICAg
c3RhdGljIGNvbnN0IENvbmRpdGlvbiBFcXVhbCA9IFNINEFzc2VtYmxlcjo6RVE7CisgICAgc3Rh
dGljIGNvbnN0IENvbmRpdGlvbiBOb3RFcXVhbCA9IFNINEFzc2VtYmxlcjo6TkU7CisgICAgc3Rh
dGljIGNvbnN0IENvbmRpdGlvbiBHcmVhdGVyVGhhbiA9IFNINEFzc2VtYmxlcjo6R1Q7CisgICAg
c3RhdGljIGNvbnN0IENvbmRpdGlvbiBHcmVhdGVyVGhhbk9yRXF1YWwgPSBTSDRBc3NlbWJsZXI6
OkdFOworICAgIHN0YXRpYyBjb25zdCBDb25kaXRpb24gTGVzc1RoYW4gPSBTSDRBc3NlbWJsZXI6
OkxUOworICAgIHN0YXRpYyBjb25zdCBDb25kaXRpb24gTGVzc1RoYW5PckVxdWFsID0gU0g0QXNz
ZW1ibGVyOjpMRTsKKyAgICBzdGF0aWMgY29uc3QgQ29uZGl0aW9uIFVHcmVhdGVyVGhhbiA9IFNI
NEFzc2VtYmxlcjo6SEk7IC8vIHVuc2lnZW5kIGdyZWF0ZXIgdGhhbgorICAgIHN0YXRpYyBjb25z
dCBDb25kaXRpb24gVUdyZWF0ZXJUaGFuT3JFcXVhbCA9IFNINEFzc2VtYmxlcjo6SFM7IC8vIHVu
c2lnZW5kIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCAgICAKKyAgICBzdGF0aWMgY29uc3QgQ29uZGl0
aW9uIFVMZXNzVGhhbiA9IFNINEFzc2VtYmxlcjo6TEk7IC8vIHVuc2lnZW5kIGdyZWF0ZXIgdGhh
bgorICAgIHN0YXRpYyBjb25zdCBDb25kaXRpb24gVUxlc3NUaGFuT3JFcXVhbCA9IFNINEFzc2Vt
Ymxlcjo6TFM7IC8vIHVuc2lnZW5kIGdyZWF0ZXIgdGhhbiBvciBlcXVhbAorICAgIHN0YXRpYyBj
b25zdCBDb25kaXRpb24gWmVybyA9IFNINEFzc2VtYmxlcjo6RVE7CisgICAgc3RhdGljIGNvbnN0
IENvbmRpdGlvbiBOb25aZXJvID0gU0g0QXNzZW1ibGVyOjpORTsKKyAgICBzdGF0aWMgY29uc3Qg
Q29uZGl0aW9uIE92ZXJmbG93ID0gU0g0QXNzZW1ibGVyOjpPRjsKKyAgICBzdGF0aWMgY29uc3Qg
Q29uZGl0aW9uIEFib3ZlID0gU0g0QXNzZW1ibGVyOjpISTsKKyAgICBzdGF0aWMgY29uc3QgQ29u
ZGl0aW9uIEFib3ZlT3JFcXVhbCA9IFNINEFzc2VtYmxlcjo6SFM7CisgICAgc3RhdGljIGNvbnN0
IENvbmRpdGlvbiBCZWxvdyA9IFNINEFzc2VtYmxlcjo6TEk7CisgICAgc3RhdGljIGNvbnN0IENv
bmRpdGlvbiBCZWxvd09yRXF1YWwgPSBTSDRBc3NlbWJsZXI6OkxTOworCisgICAgc3RhdGljIGNv
bnN0IFJlZ2lzdGVySUQgc3RhY2tQb2ludGVyUmVnaXN0ZXIgPSBTSDQ6OlNQOworICAgIHN0YXRp
YyBjb25zdCBSZWdpc3RlcklEIGxpbmtSZWdpc3RlciA9IFNINDo6UFI7CisKKyAgICBzdGF0aWMg
Y29uc3QgQ29uZGl0aW9uIERvdWJsZUVxdWFsID0gU0g0QXNzZW1ibGVyOjpFUTsKKyAgICBzdGF0
aWMgY29uc3QgQ29uZGl0aW9uIERvdWJsZU5vdEVxdWFsID0gU0g0QXNzZW1ibGVyOjpORTsKKyAg
ICBzdGF0aWMgY29uc3QgQ29uZGl0aW9uIERvdWJsZUdyZWF0ZXJUaGFuID0gU0g0QXNzZW1ibGVy
OjpHVDsKKyAgICBzdGF0aWMgY29uc3QgQ29uZGl0aW9uIERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVh
bCA9IFNINEFzc2VtYmxlcjo6R0U7CisgICAgc3RhdGljIGNvbnN0IENvbmRpdGlvbiBEb3VibGVM
ZXNzVGhhbiA9IFNINEFzc2VtYmxlcjo6TFQ7CisgICAgc3RhdGljIGNvbnN0IENvbmRpdGlvbiBE
b3VibGVMZXNzVGhhbk9yRXF1YWwgPSBTSDRBc3NlbWJsZXI6OkxFOworICAgIAorICAgIHN0YXRp
YyBjb25zdCBDb25kaXRpb24gRG91YmxlRXF1YWxPclVub3JkZXJlZCA9IFNINEFzc2VtYmxlcjo6
RVFVOworICAgIHN0YXRpYyBjb25zdCBDb25kaXRpb24gRG91YmxlTm90RXF1YWxPclVub3JkZXJl
ZCA9IFNINEFzc2VtYmxlcjo6TkVVOworICAgIHN0YXRpYyBjb25zdCBDb25kaXRpb24gRG91Ymxl
R3JlYXRlclRoYW5PclVub3JkZXJlZCA9IFNINEFzc2VtYmxlcjo6R1RVOworICAgIHN0YXRpYyBj
b25zdCBDb25kaXRpb24gRG91YmxlR3JlYXRlclRoYW5PckVxdWFsT3JVbm9yZGVyZWQgPSBTSDRB
c3NlbWJsZXI6OkdFVTsKKyAgICBzdGF0aWMgY29uc3QgQ29uZGl0aW9uIERvdWJsZUxlc3NUaGFu
T3JVbm9yZGVyZWQgPSBTSDRBc3NlbWJsZXI6OkxUVTsKKyAgICBzdGF0aWMgY29uc3QgQ29uZGl0
aW9uIERvdWJsZUxlc3NUaGFuT3JFcXVhbE9yVW5vcmRlcmVkID0gU0g0QXNzZW1ibGVyOjpMRVU7
CisgICAgc3RhdGljIGNvbnN0IENvbmRpdGlvbiBTaWduZWQgPSBTSDRBc3NlbWJsZXI6OlNJOwor
ICAgIHN0YXRpYyBjb25zdCBGUFJlZ2lzdGVySUQgZnNjcmF0Y2ggPSBTSDQ6OkZSMTA7CisKKyAg
ICBzdGF0aWMgY29uc3QgU2NhbGUgU2NhbGVQdHIgPSBUaW1lc0ZvdXI7CisKKyAgICBSZWdpc3Rl
cklEIGNsYWltU2NyYXRjaCgpCisgICAgeworICAgICAgICAgcmV0dXJuIG1fYXNzZW1ibGVyLmNs
YWltU2NyYXRjaCgpOworICAgIH0KKyAgICAKKyAgICBSZWdpc3RlcklEIHJlbGVhc2VTY3JhdGNo
KFJlZ2lzdGVySUQgcmVnKQorICAgIHsKKyAgICAgICAgIG1fYXNzZW1ibGVyLnJlbGVhc2VTY3Jh
dGNoKHJlZyk7CisgICAgfQorICAgIAorCisgICAgLy8gSW50ZWdlciBhcml0aG1ldGljIG9wZXJh
dGlvbnMKKworICAgIHZvaWQgYWRkMzIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkK
KyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmFkZGxfcnIoc3JjLCBkZXN0KTsKKyAgICB9CisK
KyAgICB2b2lkIGFkZDMyKEltbTMyIGltbSwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAg
ICAgbV9hc3NlbWJsZXIuYWRkbF9pcihpbW0ubV92YWx1ZSwgZGVzdCk7CisgICAgfQorICAgIAor
ICAgIHZvaWQgYWRkMzIoSW1tMzIgaW1tLCBSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0
KQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKworICAg
ICAgICBpZiAoc3JjICE9IGRlc3QpCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5tb3ZsX3JyKHNy
YywgZGVzdCk7CisgICAgICAgIG1fYXNzZW1ibGVyLmFkZGxfaXIoaW1tLm1fdmFsdWUsIGRlc3Qp
OworICAgICAgICAKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKworICAgIH0KKworICAg
IHZvaWQgYWRkMzIoSW1tMzIgaW1tLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBS
ZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBsb2FkMzIoYWRkcmVzcywg
c2NyKTsKKyAgICAgICAgYWRkMzIoaW1tLCBzY3IpOworICAgICAgICBzdG9yZTMyKHNjciwgYWRk
cmVzcyk7CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgfQorICAgIAorICAgIHZv
aWQgYWRkMzIoQWRkcmVzcyBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIFJl
Z2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIGxvYWQzMihzcmMsIHNjcik7
CisgICAgICAgIG1fYXNzZW1ibGVyLmFkZGxfcnIoc2NyLCBkZXN0KTsKKyAgICAgICAgcmVsZWFz
ZVNjcmF0Y2goc2NyKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhbmQzMihSZWdpc3RlcklEIHNy
YywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuYW5kbF9ycihz
cmMsIGRlc3QpOworICAgIH0KKworICAgIHZvaWQgYW5kMzIoSW1tMzIgaW1tLCBSZWdpc3RlcklE
IGRlc3QpCisgICAgeworICAgICAgICBpZiAoKGltbS5tX3ZhbHVlIDw9IDI1NSkgJiYgKGltbS5t
X3ZhbHVlID49IDApICYmIChkZXN0ID09IFNINDo6UjApKQorICAgICAgICAgICAgbV9hc3NlbWJs
ZXIuYW5kbF9pOHIoaW1tLm1fdmFsdWUsIGRlc3QpOworICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgICAgICBtX2Fzc2Vt
Ymxlci5Mb2FkQ29uc3RhbnQoKGltbS5tX3ZhbHVlKSwgc2NyKTsKKyAgICAgICAgICAgIG1fYXNz
ZW1ibGVyLmFuZGxfcnIoc2NyLCBkZXN0KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgcmVs
ZWFzZVNjcmF0Y2goc2NyKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgbHNoaWZ0MzIo
UmVnaXN0ZXJJRCBzaGlmdGFtb3VudCwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAg
bV9hc3NlbWJsZXIuc2hsbF9ycihkZXN0LCBzaGlmdGFtb3VudCk7CisgICAgfQorICAgIAorICAg
IHZvaWQgcnNoaWZ0MzIoaW50IGltbSwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAg
UmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuTG9h
ZENvbnN0YW50KC1pbW0sIHNjcik7CisgICAgICAgIG1fYXNzZW1ibGVyLnNoYV9ycihkZXN0LCBz
Y3IpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgIH0KKyAgICAKKyAgICB2b2lk
IGxzaGlmdDMyKEltbTMyIGltbSwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgaWYg
KCggaW1tLm1fdmFsdWUgPT0gMSkgfHwgKCBpbW0ubV92YWx1ZSA9PSAyKSB8fCAoIGltbS5tX3Zh
bHVlID09IDgpIHx8ICggaW1tLm1fdmFsdWUgPT0gMTYpKQorICAgICAgICAgICAgbV9hc3NlbWJs
ZXIuc2hsbF9pOHIoaW1tLm1fdmFsdWUsIGRlc3QpOworICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgICAgICBtX2Fzc2Vt
Ymxlci5Mb2FkQ29uc3RhbnQoaW1tLm1fdmFsdWUsIHNjcik7CisgICAgICAgICAgICBtX2Fzc2Vt
Ymxlci5zaGxsX3JyKGRlc3QsIHNjcik7CisgICAgICAgICAgICByZWxlYXNlU2NyYXRjaChzY3Ip
OworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHZvaWQgbXVsMzIoUmVnaXN0ZXJJRCBzcmMs
IFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmltdWxsX3JyKHNy
YywgZGVzdCk7CisgICAgICAgIG1fYXNzZW1ibGVyLnN0c21hY2woZGVzdCk7CisgICAgfQorICAg
IAorICAgIAorICAgIHZvaWQgbXVsMzIoSW1tMzIgaW1tLCBSZWdpc3RlcklEIHNyYywgUmVnaXN0
ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2go
KTsKKyAgICAgICAgbW92ZShpbW0sIHNjcik7CisgICAgICAgIGlmICAoc3JjICE9IGRlc3QpCisg
ICAgICAgICAgICBtb3ZlKHNyYywgZGVzdCk7CisgICAgICAgIG11bDMyKHNjciwgIGRlc3QpOwor
ICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgIH0KKyAgIAorICAgIHZvaWQgbm90MzIo
UmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1i
bGVyLm5vdGxfcihzcmMsIGRlc3QpOworICAgIH0KKyAgICAKKyAgICB2b2lkIG9yMzIoUmVnaXN0
ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLm9y
bF9ycihzcmMsIGRlc3QpOworICAgIH0KKworICAgIHZvaWQgb3IzMihJbW0zMiBpbW0sIFJlZ2lz
dGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLm9ybF9pcihpbW0ubV92YWx1
ZSwgZGVzdCk7CisgICAgfQorCisgICAgdm9pZCByc2hpZnQzMihSZWdpc3RlcklEIHNoaWZ0YW1v
dW50LCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5jbXBsX2ly
KDMyLCBzaGlmdGFtb3VudCwgRXF1YWwpOworICAgICAgICBtX2Fzc2VtYmxlci5lbnN1cmVTcGFj
ZShtX2Fzc2VtYmxlci5tYXhJbnN0cnVjdGlvblNpemUgKyA0KTsKKyAgICAgICAgbV9hc3NlbWJs
ZXIuYnJhbmNoKEJUX09QQ09ERSwgMSk7CisgICAgICAgIG1fYXNzZW1ibGVyLm5lZyhzaGlmdGFt
b3VudCwgc2hpZnRhbW91bnQpOworICAgICAgICBtX2Fzc2VtYmxlci5zaGFfcnIoZGVzdCwgc2hp
ZnRhbW91bnQpOworICAgIH0KKworICAgIHZvaWQgcnNoaWZ0MzIoSW1tMzIgaW1tLCBSZWdpc3Rl
cklEIGRlc3QpCisgICAgeworICAgICAgICAvKkluIHRoZSBjYXNlIHdoZXJlIHNoaWZ0YW1vdW50
IGluZGljYXRlcyBhIGxvZ2ljYWwgcmlnaHQgc2hpZnQgYnkgMzIsIHRoZSByZXN1bHQgaXMgMCov
CisgICAgICAgIGlmIChpbW0ubV92YWx1ZSAmIDB4MWYpCisgICAgICAgICAgICByc2hpZnQzMihp
bW0ubV92YWx1ZSAmIDB4MWYsIGRlc3QpOworICAgIH0KKworCisgICAgdm9pZCBzdWIzMihSZWdp
c3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIu
c3VibF9ycihzcmMsIGRlc3QpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHN1YjMyKEltbTMyIGlt
bSwgQWJzb2x1dGVBZGRyZXNzIGFkZHJlc3MsIFJlZ2lzdGVySUQgc2NyYXRjaFJlZykKKyAgICB7
CisgICAgICAgIFJlZ2lzdGVySUQgcmVzdWx0ID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgCisg
ICAgICAgIG1fYXNzZW1ibGVyLkxvYWRDb25zdGFudCgodWludDMyX3QpYWRkcmVzcy5tX3B0ciwg
c2NyYXRjaFJlZyk7CisgICAgICAgIG1fYXNzZW1ibGVyLm1vdmxfbXIoc2NyYXRjaFJlZywgcmVz
dWx0KTsKKworICAgICAgICBpZiAobV9hc3NlbWJsZXIuSXNJbW1lZGlhdGUoLWltbS5tX3ZhbHVl
KSkKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZGxfaThyKC1pbW0ubV92YWx1ZSwgcmVzdWx0
KTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5Mb2FkQ29uc3RhbnQo
aW1tLm1fdmFsdWUsIFNINDo6UjQpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuc3VibF9ycihT
SDQ6OlI0LCByZXN1bHQpOyAgCisgICAgICAgIH0gCisKKyAgICAgICAgc3RvcmUzMihyZXN1bHQs
IHNjcmF0Y2hSZWcpOworICAgICAgICAKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2gocmVzdWx0KTsK
KyAgICB9CisgICAgCisgICAgdm9pZCBzdWIzMihJbW0zMiBpbW0sIEFic29sdXRlQWRkcmVzcyBh
ZGRyZXNzKQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCByZXN1bHQgPSBjbGFpbVNjcmF0Y2go
KTsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3JhdGNoUmVnID0gY2xhaW1TY3JhdGNoKCk7CisKKyAg
ICAgICAgbV9hc3NlbWJsZXIuTG9hZENvbnN0YW50KCh1aW50MzJfdClhZGRyZXNzLm1fcHRyLCBz
Y3JhdGNoUmVnKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubW92bF9tcihzY3JhdGNoUmVnLCByZXN1
bHQpOworCisgICAgICAgIGlmIChtX2Fzc2VtYmxlci5Jc0ltbWVkaWF0ZSgtaW1tLm1fdmFsdWUp
KQorICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRkbF9pOHIoLWltbS5tX3ZhbHVlLCByZXN1bHQp
OworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLkxvYWRDb25zdGFudChp
bW0ubV92YWx1ZSwgU0g0OjpSNCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zdWJsX3JyKFNI
NDo6UjQsIHJlc3VsdCk7ICAKKyAgICAgICAgfQorCisgICAgICAgIHN0b3JlMzIocmVzdWx0LCBz
Y3JhdGNoUmVnKTsKKworICAgICAgICByZWxlYXNlU2NyYXRjaChyZXN1bHQpOworICAgICAgICBy
ZWxlYXNlU2NyYXRjaChzY3JhdGNoUmVnKTsKKyAgICB9CisKKyAgICB2b2lkIGFkZDMyKEltbTMy
IGltbSwgQWJzb2x1dGVBZGRyZXNzIGFkZHJlc3MsIFJlZ2lzdGVySUQgc2NyYXRjaFJlZykKKyAg
ICB7CisgICAgICAgIFJlZ2lzdGVySUQgcmVzdWx0ID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAg
CisgICAgICAgIG1fYXNzZW1ibGVyLkxvYWRDb25zdGFudCgodWludDMyX3QpYWRkcmVzcy5tX3B0
ciwgc2NyYXRjaFJlZyk7CisgICAgICAgIG1fYXNzZW1ibGVyLm1vdmxfbXIoc2NyYXRjaFJlZywg
cmVzdWx0KTsKKworICAgICAgICBpZiAobV9hc3NlbWJsZXIuSXNJbW1lZGlhdGUoaW1tLm1fdmFs
dWUpKQorICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRkbF9pOHIoaW1tLm1fdmFsdWUsIHJlc3Vs
dCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIuTG9hZENvbnN0YW50
KGltbS5tX3ZhbHVlLCBTSDQ6OlI0KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZGxfcnIo
U0g0OjpSNCwgcmVzdWx0KTsgICAKKyAgICAgICAgfQorCisgICAgICAgIHN0b3JlMzIocmVzdWx0
LCBzY3JhdGNoUmVnKTsKKyAgICAgICAgCisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHJlc3VsdCk7
CisgICAgfQorCisgICAgdm9pZCBhZGQzMihJbW0zMiBpbW0sIEFic29sdXRlQWRkcmVzcyBhZGRy
ZXNzKQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCByZXN1bHQgPSBjbGFpbVNjcmF0Y2goKTsK
KyAgICAgICAgUmVnaXN0ZXJJRCBzY3JhdGNoUmVnID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAg
CisgICAgICAgIG1fYXNzZW1ibGVyLkxvYWRDb25zdGFudCgodWludDMyX3QpYWRkcmVzcy5tX3B0
ciwgc2NyYXRjaFJlZyk7CisgICAgICAgIG1fYXNzZW1ibGVyLm1vdmxfbXIoc2NyYXRjaFJlZywg
cmVzdWx0KTsKKworICAgICAgICBpZiAobV9hc3NlbWJsZXIuSXNJbW1lZGlhdGUoaW1tLm1fdmFs
dWUpKQorICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRkbF9pOHIoaW1tLm1fdmFsdWUsIHJlc3Vs
dCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIuTG9hZENvbnN0YW50
KGltbS5tX3ZhbHVlLCBTSDQ6OlI0KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZGxfcnIo
U0g0OjpSNCwgcmVzdWx0KTsgICAKKyAgICAgICAgfSAKKworICAgICAgICBzdG9yZTMyKHJlc3Vs
dCwgc2NyYXRjaFJlZyk7CisgICAgICAgIAorICAgICAgICByZWxlYXNlU2NyYXRjaChyZXN1bHQp
OworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3JhdGNoUmVnKTsKKyAgICB9CisgICAgCisgICAg
dm9pZCBzdWIzMihJbW0zMiBpbW0sIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1f
YXNzZW1ibGVyLnN1YmxfaW1tcihpbW0ubV92YWx1ZSwgZGVzdCk7CisgICAgfQorICAgIAorICAg
IHZvaWQgc3ViMzIoQWRkcmVzcyBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAg
IFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIGxvYWQzMihzcmMsIHNj
cik7CisgICAgICAgIG1fYXNzZW1ibGVyLnN1YmxfcnIoc2NyLCBkZXN0KTsKKyAgICAgICAgcmVs
ZWFzZVNjcmF0Y2goc2NyKTsKKyAgICB9CisKKyAgICAKKyAgICB2b2lkIHhvcjMyKFJlZ2lzdGVy
SUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci54b3Js
X3JyKHNyYywgZGVzdCk7CisgICAgfQorICAgIAorICAgIHZvaWQgeG9yMzIoSW1tMzIgaW1tLCBS
ZWdpc3RlcklEIHNyY0Rlc3QpCisgICAgeworICAgICAgaWYgKChzcmNEZXN0ICE9IFNINDo6UjAp
IHx8IChpbW0ubV92YWx1ZSA+IDI1NSkgfHwgKGltbS5tX3ZhbHVlIDwgMCkpIHsKKyAgICAgICAg
ICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICAgIG1fYXNzZW1ibGVy
LkxvYWRDb25zdGFudCgoaW1tLm1fdmFsdWUpLCBzY3IpOworICAgICAgICAgIG1fYXNzZW1ibGVy
LnhvcmxfcnIoc2NyLCBzcmNEZXN0KTsKKyAgICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOwor
ICAgICAgfSBlbHNlCisgICAgICAgICAgbV9hc3NlbWJsZXIueG9ybF9pOHIoaW1tLm1fdmFsdWUs
IHNyY0Rlc3QpOworICAgIH0KKworCisgICAgLy8gTWVtb3J5IGFjY2VzcyBvcGVyYXRpb24KKyAg
ICAKKyAgICB2b2lkIGxvYWQzMihJbXBsaWNpdEFkZHJlc3MgYWRkcmVzcywgUmVnaXN0ZXJJRCBk
ZXN0KQorICAgIHsKKyAgICAgICAgbG9hZDMyKGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5vZmZzZXQs
IGRlc3QpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGxvYWQ4KEltcGxpY2l0QWRkcmVzcyBhZGRy
ZXNzLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBsb2FkOChhZGRyZXNzLmJhc2Us
IGFkZHJlc3Mub2Zmc2V0LCBkZXN0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBsb2FkMzIoQmFz
ZUluZGV4IGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIFJlZ2lzdGVy
SUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIG1vdmUoYWRkcmVzcy5pbmRleCwgc2Ny
KTsKKyAgICAgICAgCisgICAgICAgIGxzaGlmdDMyKEltbTMyKGFkZHJlc3Muc2NhbGUpLCBzY3Ip
OworICAgICAgICBhZGQzMihhZGRyZXNzLmJhc2UsIHNjcik7CisgICAgICAgIGxvYWQzMihzY3Is
IGFkZHJlc3Mub2Zmc2V0LCBkZXN0KTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAg
ICB9CisgICAgCisgICAgdm9pZCBsb2FkMzIodm9pZCogYWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0
KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuTG9hZENvbnN0YW50KCh1aW50MzJfdCkoYWRk
cmVzcyksIGRlc3QpOworICAgICAgICBtX2Fzc2VtYmxlci5tb3ZsX21yKGRlc3QsIGRlc3QpOwor
ICAgIH0KKyAgICAKKyAgICB2b2lkIGxvYWQzMihSZWdpc3RlcklEIGJhc2UsIGludCBvZmZzZXQs
IFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIGlmICgob2Zmc2V0IDwgMCkgfHwgKG9m
ZnNldCA+PSA2NCkpIHsKKyAgICAgICAgICAgIGlmICgoZGVzdCA9PSBTSDQ6OlIwKSAmJiAoZGVz
dCAhPSBiYXNlKSkgeworICAgICAgICAgICAgICAgIG1fYXNzZW1ibGVyLkxvYWRDb25zdGFudCgo
b2Zmc2V0KSwgZGVzdCk7CisgICAgICAgICAgICAgICAgbV9hc3NlbWJsZXIubW92bF9yMG1yKGJh
c2UsIGRlc3QpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBSZWdpc3Rl
cklEIHNjcjsKKyAgICAgICAgICAgICAgICBpZiAoZGVzdCA9PSBiYXNlKQorICAgICAgICAgICAg
ICAgICAgICBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgICAgIHNjciA9IGRlc3Q7CisKKyAgICAgICAgICAgICAgICBtX2Fzc2VtYmxl
ci5Mb2FkQ29uc3RhbnQoKG9mZnNldCksIHNjcik7CisgICAgICAgICAgICAgICAgbV9hc3NlbWJs
ZXIuYWRkbF9ycihiYXNlLCBzY3IpOworICAgICAgICAgICAgICAgIG1fYXNzZW1ibGVyLm1vdmxf
bXIoc2NyLCBkZXN0KTsKKworICAgICAgICAgICAgICAgIGlmIChkZXN0ID09IGJhc2UpCisgICAg
ICAgICAgICAgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0gZWxzZSBpZiAob2Zmc2V0KQorICAgICAgICAgICAgbV9hc3NlbWJsZXIubW92bF9tcihv
ZmZzZXQgPj4gMiwgYmFzZSwgZGVzdCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fYXNz
ZW1ibGVyLm1vdmxfbXIoYmFzZSwgZGVzdCk7CisgICAgfQorICAgIAorICAgIHZvaWQgbG9hZDgo
UmVnaXN0ZXJJRCBiYXNlLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAg
ICAgICBpZiAoKG9mZnNldCA+IDApICYmIChvZmZzZXQgPCA2NCkgJiYgKGRlc3QgPT0gU0g0OjpS
MCkpCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5tb3ZiX21yKG9mZnNldCwgYmFzZSwgZGVzdCk7
CisKKyAgICAgICAgZWxzZSBpZiAoYmFzZSAhPSBkZXN0KSB7CisgICAgICAgICAgICBtX2Fzc2Vt
Ymxlci5Mb2FkQ29uc3RhbnQoKG9mZnNldCksIGRlc3QpOworICAgICAgICAgICAgbV9hc3NlbWJs
ZXIuYWRkbF9ycihiYXNlLCBkZXN0KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLm1vdmJfbXIo
ZGVzdCwgZGVzdCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBSZWdpc3RlcklEIHNj
ciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX2Fzc2VtYmxl
ci5Mb2FkQ29uc3RhbnQoKG9mZnNldCksIHNjcik7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5h
ZGRsX3JyKGJhc2UsIHNjcik7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5tb3ZiX21yKHNjciwg
ZGVzdCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCBsb2FkMzIoUmVnaXN0ZXJJRCByMCwgUmVn
aXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKHIwID09
IFNINDo6UjApOworICAgICAgICBtX2Fzc2VtYmxlci5tb3ZsX3IwbXIoc3JjLCBkc3QpOworICAg
IH0KKyAgICAKKyAgICB2b2lkIGxvYWQzMihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3Qp
CisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5tb3ZsX21yKHNyYywgZHN0KTsKKyAgICB9Cisg
ICAKKyAgICB2b2lkIGxvYWQxNihJbXBsaWNpdEFkZHJlc3MgYWRkcmVzcywgUmVnaXN0ZXJJRCBk
ZXN0KQorICAgIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorIAorICAg
IHZvaWQgbG9hZDE2KFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAg
ICAgICBtX2Fzc2VtYmxlci5tb3Z3X21yKHNyYywgZGVzdCk7CisgICAgfQorICAgIAorICAgIHZv
aWQgbG9hZDE2KFJlZ2lzdGVySUQgcjAsIFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3Qp
CisgICAgeworICAgICAgICBBU1NFUlQocjAgPT0gU0g0OjpSMCk7CisgICAgICAgIG1fYXNzZW1i
bGVyLm1vdndfcjBtcihzcmMsIGRlc3QpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGxvYWQxNihC
YXNlSW5kZXggYWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgUmVnaXN0
ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgbW92ZShhZGRyZXNzLmluZGV4LCBz
Y3IpOworICAgICAgICBsc2hpZnQzMihJbW0zMihhZGRyZXNzLnNjYWxlKSwgc2NyKTsKKyAgICAg
ICAgbV9hc3NlbWJsZXIuYWRkbF9pcihhZGRyZXNzLm9mZnNldCwgc2NyKTsKKyAgICAgICAgaWYg
KHNjciA9PSBTSDQ6OlIwKQorICAgICAgICAgICAgbV9hc3NlbWJsZXIubW92d19yMG1yKGFkZHJl
c3MuYmFzZSwgc2NyKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBhZGQzMihhZGRyZXNz
LmJhc2UsIHNjcik7CisgICAgICAgICAgICBsb2FkMTYoc2NyLCBzY3IpOworICAgICAgICB9Cisg
ICAgICAgIGV4dHV3KHNjciwgZGVzdCk7CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7Cisg
ICAgfQorCisgICAgdm9pZCBzdG9yZTMyKFJlZ2lzdGVySUQgc3JjLCBJbXBsaWNpdEFkZHJlc3Mg
YWRkcmVzcykKKyAgICB7CisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7
CisgICAgICAgIHN0b3JlMzIoc3JjLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlLCBzY3Ip
OworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgIH0gICAgCisgICAgCisgICAgdm9p
ZCBzdG9yZTMyKFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJl
Z2lzdGVySUQgc2NyKQorICAgIHsgIAorICAgICAgICBpZiAoKG9mZnNldCA8IDApIHx8IChvZmZz
ZXQgPj0gNjQpKSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5Mb2FkQ29uc3RhbnQoKG9mZnNl
dCksIHNjcik7CisgICAgICAgICAgICBpZiAoc2NyID09IFNINDo6UjApCisgICAgICAgICAgICAg
ICAgbV9hc3NlbWJsZXIubW92bF9ybXIwKHNyYywgYmFzZSk7CisgICAgICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGRsX3JyKGJhc2UsIHNjcik7CisgICAgICAg
ICAgICAgICAgbV9hc3NlbWJsZXIubW92bF9ybShzcmMsIHNjcik7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0gZWxzZSBpZiAob2Zmc2V0KQorICAgICAgICAgICAgbV9hc3NlbWJsZXIubW92bF9y
bShzcmMsIG9mZnNldCA+PiAyLCBiYXNlKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9h
c3NlbWJsZXIubW92bF9ybShzcmMsIGJhc2UpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHN0b3Jl
MzIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UpCisg
ICAgeworICAgICAgICBBU1NFUlQob2Zmc2V0ID09IFNINDo6UjApOworICAgICAgICBtX2Fzc2Vt
Ymxlci5tb3ZsX3JtcjAoc3JjLCBiYXNlKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzdG9yZTMy
KFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1i
bGVyLm1vdmxfcm0oc3JjLCBkc3QpOworICAgIH0KKworCisgICAgdm9pZCBzdG9yZTMyKEltbTMy
IGltbSwgSW1wbGljaXRBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBSZWdpc3RlcklE
IHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBSZWdpc3RlcklEIHNjcjEgPSBjbGFpbVNj
cmF0Y2goKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuTG9hZENvbnN0YW50KChpbW0ubV92YWx1ZSks
IHNjcik7CisKKyAgICAgICAgc3RvcmUzMihzY3IsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJh
c2UsIHNjcjEpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgICAgICByZWxlYXNl
U2NyYXRjaChzY3IxKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzdG9yZTMyKFJlZ2lzdGVySUQg
c3JjLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0g
Y2xhaW1TY3JhdGNoKCk7CisgICAgICAgIG1vdmUoYWRkcmVzcy5pbmRleCwgc2NyKTsKKyAgICAg
ICAgCisgICAgICAgIGxzaGlmdDMyKEltbTMyKGFkZHJlc3Muc2NhbGUpLCBzY3IpOworICAgICAg
ICBhZGQzMihhZGRyZXNzLmJhc2UsIHNjcik7CisgICAgICAgIHN0b3JlMzIoc3JjLCBBZGRyZXNz
KHNjciwgYWRkcmVzcy5vZmZzZXQpKTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAg
ICB9CisgICAgCisgICAgdm9pZCBzdG9yZTMyKEltbTMyIGltbSwgdm9pZCogYWRkcmVzcykKKyAg
ICB7CisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIFJl
Z2lzdGVySUQgc2NyMSA9IGNsYWltU2NyYXRjaCgpOworCisgICAgICAgIG1fYXNzZW1ibGVyLkxv
YWRDb25zdGFudCgoaW1tLm1fdmFsdWUpLCBzY3IpOworICAgICAgICBtX2Fzc2VtYmxlci5Mb2Fk
Q29uc3RhbnQoKHVpbnQzMl90KShhZGRyZXNzKSwgc2NyMSk7CisgICAgICAgIG1fYXNzZW1ibGVy
Lm1vdmxfbXIoc2NyLCBzY3IxKTsKKworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAg
ICAgICByZWxlYXNlU2NyYXRjaChzY3IxKTsKKyAgICB9CisgICAgdm9pZCBzdG9yZTMyKFJlZ2lz
dGVySUQgc3JjLCB2b2lkKiBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3Ig
PSBjbGFpbVNjcmF0Y2goKTsKKworICAgICAgICBtX2Fzc2VtYmxlci5Mb2FkQ29uc3RhbnQoKHVp
bnQzMl90KShhZGRyZXNzKSwgc2NyKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubW92bF9tcihzcmMs
IHNjcik7CisKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICB9CisKKyAgICAKKyAg
ICBEYXRhTGFiZWwzMiBsb2FkMzJXaXRoQWRkcmVzc09mZnNldFBhdGNoKEFkZHJlc3MgYWRkcmVz
cywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFp
bVNjcmF0Y2goKTsKKyAgICAgICAgCisgICAgICAgIERhdGFMYWJlbDMyIGxhYmVsKHRoaXMpOwor
ICAgICAgICBtX2Fzc2VtYmxlci5Mb2FkQ29uc3RhbnQoYWRkcmVzcy5vZmZzZXQsIHNjciwgdHJ1
ZSk7CisKKyAgICAgICAgbV9hc3NlbWJsZXIuYWRkbF9ycihhZGRyZXNzLmJhc2UsIHNjcik7Cisg
ICAgICAgIG1fYXNzZW1ibGVyLm1vdmxfbXIoc2NyLCBkZXN0KTsKKyAgICAgICAgcmVsZWFzZVNj
cmF0Y2goc2NyKTsKKyAgICAgICAgcmV0dXJuIGxhYmVsOworICAgIH0KKyAgICAKKyAgICBEYXRh
TGFiZWwzMiBzdG9yZTMyV2l0aEFkZHJlc3NPZmZzZXRQYXRjaChSZWdpc3RlcklEIHNyYywgQWRk
cmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0
Y2goKTsKKyAgICAgICAgCisgICAgICAgIERhdGFMYWJlbDMyIGxhYmVsKHRoaXMpOworICAgICAg
ICBtX2Fzc2VtYmxlci5Mb2FkQ29uc3RhbnQoYWRkcmVzcy5vZmZzZXQsIHNjciwgdHJ1ZSk7CisK
KyAgICAgICAgbV9hc3NlbWJsZXIuYWRkbF9ycihhZGRyZXNzLmJhc2UsIHNjcik7CisgICAgICAg
IG1fYXNzZW1ibGVyLm1vdmxfcm0oc3JjLCBzY3IpOworICAgICAgICAKKyAgICAgICAgcmVsZWFz
ZVNjcmF0Y2goc2NyKTsKKyAgICAgICAgcmV0dXJuIGxhYmVsOworICAgIH0KKyAgICAKKyAgICBM
YWJlbCBsb2FkUHRyV2l0aFBhdGNoVG9MRUEoQWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklEIGRl
c3QpCisgICAgeworICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAg
ICAgICAKKyAgICAgICAgTGFiZWwgbGFiZWwodGhpcyk7CisgICAgICAgIG1fYXNzZW1ibGVyLkxv
YWRDb25zdGFudChhZGRyZXNzLm9mZnNldCwgc2NyLCB0cnVlKTsKKworICAgICAgICBtX2Fzc2Vt
Ymxlci5hZGRsX3JyKGFkZHJlc3MuYmFzZSwgc2NyKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubW92
bF9tcihzY3IsIGRlc3QpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgICAgICBy
ZXR1cm4gbGFiZWw7CisgICAgfQorICAgIAorICAgICAvLyBGbG9hdGluZy1wb2ludCBvcGVyYXRp
b25zCisKKyAgICBib29sIHN1cHBvcnRzRmxvYXRpbmdQb2ludCgpIGNvbnN0IHsgcmV0dXJuIGZh
bHNlOyB9CisgICAgYm9vbCBzdXBwb3J0c0Zsb2F0aW5nUG9pbnRUcnVuY2F0ZSgpIGNvbnN0IHsg
cmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBzdXBwb3J0c0Zsb2F0aW5nUG9pbnRTcXJ0KCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICAKKyAgICB2b2lkIGxvYWREb3VibGUoSW1wbGljaXRB
ZGRyZXNzIGFkZHJlc3MsIEZQUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgUmVnaXN0
ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuTG9hZENvbnN0
YW50KF9fZnBzY3JfdmFsdWVzWzFdLCBzY3IpOworICAgICAgICBtX2Fzc2VtYmxlci5sZHNmcHNj
cihzY3IpOworICAgICAgICBtX2Fzc2VtYmxlci5Mb2FkQ29uc3RhbnQoYWRkcmVzcy5vZmZzZXQs
IHNjcik7CisgICAgICAgIGlmIChhZGRyZXNzLmJhc2UgPT0gU0g0OjpSMCkgeworICAgICAgICAg
ICAgbV9hc3NlbWJsZXIuZm1vdnNfcmVhZF9yMHIoc2NyLCAoRlBSZWdpc3RlcklEKShkZXN0ICsg
MSkpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRkbF9pOHIoNCwgc2NyKTsKKyAgICAgICAg
ICAgIG1fYXNzZW1ibGVyLmZtb3ZzX3JlYWRfcjByKHNjciwgZGVzdCk7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGRsX3JyKGFkZHJlc3MuYmFzZSwgc2NyKTsK
KyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmZtb3ZzX3JlYWRfcm0oc2NyLCAoRlBSZWdpc3RlcklE
KShkZXN0ICsgMSkpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRkbF9pOHIoNCwgc2NyKTsK
KyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmZtb3ZzX3JlYWRfcm0oc2NyLCBkZXN0KTsKKyAgICAg
ICAgfQorICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgIH0KKyAgICAKKyAgICB2b2lk
IGxvYWREb3VibGUoY29uc3Qgdm9pZCogYWRkcmVzcywgRlBSZWdpc3RlcklEIGRlc3QpCisgICAg
eworICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBtX2Fz
c2VtYmxlci5Mb2FkQ29uc3RhbnQoX19mcHNjcl92YWx1ZXNbMV0sIHNjcik7CisgICAgICAgIG1f
YXNzZW1ibGVyLmxkc2Zwc2NyKHNjcik7CisgICAgICAgIG1fYXNzZW1ibGVyLkxvYWRDb25zdGFu
dCgodWludDMyX3QpKGFkZHJlc3MpLCBzY3IpOworICAgICAgICBtX2Fzc2VtYmxlci5mbW92c19y
ZWFkX3JtKHNjciwgKEZQUmVnaXN0ZXJJRCkoZGVzdCArIDEpKTsKKyAgICAgICAgbV9hc3NlbWJs
ZXIuYWRkbF9pOHIoNCwgc2NyKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuZm1vdnNfcmVhZF9ybShz
Y3IsIGRlc3QpOworCisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgfQorCisgICAg
dm9pZCBzdG9yZURvdWJsZShGUFJlZ2lzdGVySUQgc3JjLCBJbXBsaWNpdEFkZHJlc3MgYWRkcmVz
cykKKyAgICB7CisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAg
ICAgIG1fYXNzZW1ibGVyLkxvYWRDb25zdGFudChhZGRyZXNzLm9mZnNldCwgc2NyKTsKKyAgICAg
ICAgbV9hc3NlbWJsZXIuYWRkbF9ycihhZGRyZXNzLmJhc2UsIHNjcik7CisgICAgICAgIG1fYXNz
ZW1ibGVyLmZtb3ZzX3dyaXRlX3JtKChGUFJlZ2lzdGVySUQpKHNyYyArIDEpLCBzY3IpOworICAg
ICAgICBtX2Fzc2VtYmxlci5hZGRsX2k4cig0LCBzY3IpOworICAgICAgICBtX2Fzc2VtYmxlci5m
bW92c193cml0ZV9ybShzcmMsIHNjcik7CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7Cisg
ICAgfQorICAgIAorICAgIHZvaWQgYWRkRG91YmxlKEZQUmVnaXN0ZXJJRCBzcmMsIEZQUmVnaXN0
ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuZGFkZF9ycihzcmMsIGRlc3Qp
OworICAgIH0KKyAgICAKKyAgICB2b2lkIGFkZERvdWJsZShBZGRyZXNzIGFkZHJlc3MsIEZQUmVn
aXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0
Y2goKTsKKworICAgICAgICBtX2Fzc2VtYmxlci5Mb2FkQ29uc3RhbnQoYWRkcmVzcy5vZmZzZXQs
IHNjcik7CisgICAgICAgIGlmIChhZGRyZXNzLmJhc2UgPT0gU0g0OjpSMCkgeworICAgICAgICAg
ICAgbV9hc3NlbWJsZXIuZm1vdnNfcmVhZF9yMHIoc2NyLCAoRlBSZWdpc3RlcklEKShmc2NyYXRj
aCArIDEpKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZGxfaThyKDQsIHNjcik7CisgICAg
ICAgICAgICBtX2Fzc2VtYmxlci5mbW92c19yZWFkX3IwcihzY3IsIGZzY3JhdGNoKTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZGxfcnIoYWRkcmVzcy5iYXNl
LCBzY3IpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuZm1vdnNfcmVhZF9ybShzY3IsIChGUFJl
Z2lzdGVySUQpKGZzY3JhdGNoICsgMSkpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRkbF9p
OHIoNCwgc2NyKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmZtb3ZzX3JlYWRfcm0oc2NyLCBm
c2NyYXRjaCk7CisgICAgICAgIH0KKyAgICAgICAgYWRkRG91YmxlKGZzY3JhdGNoLCBkZXN0KTsK
KworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgIH0KKworICAgIHZvaWQgc3ViRG91
YmxlKEZQUmVnaXN0ZXJJRCBzcmMsIEZQUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAg
bV9hc3NlbWJsZXIuZHN1Yl9ycihzcmMsIGRlc3QpOworICAgIH0KKworICAgIHZvaWQgc3ViRG91
YmxlKEFkZHJlc3MgYWRkcmVzcywgRlBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBS
ZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOyAvLyBmb3IgdGhlIG9mZnNldAorCisgICAg
ICAgLy8gbV9hc3NlbWJsZXIuZG91YmxlbG9hZChhZGRyZXNzLmJhc2UsIGFkZHJlc3Mub2Zmc2V0
LCBmc2NyYXRjaCwgc2NyKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuTG9hZENvbnN0YW50KGFkZHJl
c3Mub2Zmc2V0LCBzY3IpOworICAgICAgICBpZiAoYWRkcmVzcy5iYXNlID09IFNINDo6UjApIHsK
KyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmZtb3ZzX3JlYWRfcjByKHNjciwgKEZQUmVnaXN0ZXJJ
RCkoZnNjcmF0Y2ggKyAxKSk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGRsX2k4cig0LCBz
Y3IpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuZm1vdnNfcmVhZF9yMHIoc2NyLCBmc2NyYXRj
aCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGRsX3JyKGFk
ZHJlc3MuYmFzZSwgc2NyKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmZtb3ZzX3JlYWRfcm0o
c2NyLCAoRlBSZWdpc3RlcklEKShmc2NyYXRjaCArIDEpKTsKKyAgICAgICAgICAgIG1fYXNzZW1i
bGVyLmFkZGxfaThyKDQsIHNjcik7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5mbW92c19yZWFk
X3JtKHNjciwgZnNjcmF0Y2gpOworICAgICAgICB9CisgICAgICAgIHN1YkRvdWJsZShmc2NyYXRj
aCwgZGVzdCk7CisKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICB9CisgICAgCisg
ICAgdm9pZCBtdWxEb3VibGUoRlBSZWdpc3RlcklEIHNyYywgRlBSZWdpc3RlcklEIGRlc3QpCisg
ICAgeworICAgICAgICBtX2Fzc2VtYmxlci5kbXVsX3JyKHNyYywgZGVzdCk7CisgICAgfQorCisg
ICAgdm9pZCBtdWxEb3VibGUoQWRkcmVzcyBhZGRyZXNzLCBGUFJlZ2lzdGVySUQgZGVzdCkKKyAg
ICB7CisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7IC8vIGZvciB0aGUg
b2Zmc2V0CisKKyAgICAgICAgbV9hc3NlbWJsZXIuTG9hZENvbnN0YW50KGFkZHJlc3Mub2Zmc2V0
LCBzY3IpOworICAgICAgICBpZiAoYWRkcmVzcy5iYXNlID09IFNINDo6UjApIHsKKyAgICAgICAg
ICAgIG1fYXNzZW1ibGVyLmZtb3ZzX3JlYWRfcjByKHNjciwgKEZQUmVnaXN0ZXJJRCkoZnNjcmF0
Y2ggKyAxKSk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGRsX2k4cig0LCBzY3IpOworICAg
ICAgICAgICAgbV9hc3NlbWJsZXIuZm1vdnNfcmVhZF9yMHIoc2NyLCBmc2NyYXRjaCk7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGRsX3JyKGFkZHJlc3MuYmFz
ZSwgc2NyKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmZtb3ZzX3JlYWRfcm0oc2NyLCAoRlBS
ZWdpc3RlcklEKShmc2NyYXRjaCArIDEpKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZGxf
aThyKDQsIHNjcik7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5mbW92c19yZWFkX3JtKHNjciwg
ZnNjcmF0Y2gpOworICAgICAgICB9CisgICAgICAgIG11bERvdWJsZShmc2NyYXRjaCwgZGVzdCk7
CisKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBk
aXZEb3VibGUoRlBSZWdpc3RlcklEIHNyYywgRlBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAg
ICAgICBtX2Fzc2VtYmxlci5kZGl2X3JyKHNyYywgZGVzdCk7CisgICAgfQorCisgICAgdm9pZCBj
b252ZXJ0SW50MzJUb0RvdWJsZShSZWdpc3RlcklEIHNyYywgRlBSZWdpc3RlcklEIGRlc3QpCisg
ICAgeworICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBt
X2Fzc2VtYmxlci5Mb2FkQ29uc3RhbnQoX19mcHNjcl92YWx1ZXNbMV0sIHNjcik7CisgICAgICAg
IG1fYXNzZW1ibGVyLmxkc2Zwc2NyKHNjcik7CisgICAgICAgIG1fYXNzZW1ibGVyLmxkc3JtX2Zw
dWwoc3JjKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuZmxvYXRfZnB1bF9kcm4oZGVzdCk7CisgICAg
ICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgfQorCisgICAgdm9pZCBjb252ZXJ0SW50MzJU
b0RvdWJsZShBYnNvbHV0ZUFkZHJlc3Mgc3JjLCBGUFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7Cisg
ICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIG1fYXNzZW1i
bGVyLkxvYWRDb25zdGFudChfX2Zwc2NyX3ZhbHVlc1sxXSwgc2NyKTsKKyAgICAgICAgbV9hc3Nl
bWJsZXIubGRzZnBzY3Ioc2NyKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuTG9hZENvbnN0YW50KCh1
bnNpZ25lZCBpbnQpc3JjLm1fcHRyLCBzY3IpOworICAgICAgICBtX2Fzc2VtYmxlci5sZHNybV9m
cHVsKHNjcik7CisgICAgICAgIG1fYXNzZW1ibGVyLmZsb2F0X2ZwdWxfZHJuKGRlc3QpOworICAg
ICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbnZlcnRJ
bnQzMlRvRG91YmxlKEFkZHJlc3Mgc3JjLCBGUFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAg
ICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIG1fYXNzZW1ibGVy
LkxvYWRDb25zdGFudChfX2Zwc2NyX3ZhbHVlc1sxXSwgc2NyKTsKKyAgICAgICAgbV9hc3NlbWJs
ZXIubGRzZnBzY3Ioc2NyKTsKKyAgICAgICAgbG9hZDMyKHNyYywgc2NyKTsKKyAgICAgICAgY29u
dmVydEludDMyVG9Eb3VibGUoc2NyLCBkZXN0KTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2Ny
KTsKKyAgICB9CisKKyAgICB2b2lkIHplcm9Eb3VibGUoRlBSZWdpc3RlcklEIGRlc3QpCisgICAg
eworICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBtX2Fz
c2VtYmxlci5tb3ZfaW1tOCgwLCBzY3IpOworICAgICAgICBtX2Fzc2VtYmxlci5sZHNybV9mcHVs
KHNjcik7CisgICAgICAgIG1fYXNzZW1ibGVyLmZsb2F0X2ZwdWxfZHJuKGRlc3QpOworICAgICAg
ICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoRG91YmxlKENv
bmRpdGlvbiBjb25kLCBGUFJlZ2lzdGVySUQgbGVmdCwgRlBSZWdpc3RlcklEIHJpZ2h0KQorICAg
IHsKKyAgICAgICAgaWYgKGNvbmQgPT0gRG91YmxlRXF1YWwpIHsKKyAgICAgICAgICAgIG1fYXNz
ZW1ibGVyLmRjbXBwZXEocmlnaHQsIGxlZnQpOworICAgICAgICAgICAgcmV0dXJuIGJyYW5jaFRy
dWUoKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChjb25kID09IERvdWJsZU5vdEVxdWFsKSB7
CisgICAgICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICAg
ICAgUmVnaXN0ZXJJRCBzY3IxID0gY2xhaW1TY3JhdGNoKCk7CisKKyAgICAgICAgICAgIG1fYXNz
ZW1ibGVyLkxvYWRDb25zdGFudChfX2Zwc2NyX3ZhbHVlc1sxXSwgU0g0OjpSNCk7CisgICAgICAg
ICAgICBtX2Fzc2VtYmxlci5sZHNmcHNjcihTSDQ6OlI0KTsKKyAgICAgICAgICAgIG1fYXNzZW1i
bGVyLmRjbXBwZXEocmlnaHQsIGxlZnQpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuZW5zdXJl
U3BhY2UobV9hc3NlbWJsZXIubWF4SW5zdHJ1Y3Rpb25TaXplICsgMTgsIHNpemVvZih1aW50MzJf
dCkpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuYnJhbmNoKEJUX09QQ09ERSwgOCk7IC8vIGVx
dWFsID0+IGRvIG5vdCBicmFuY2gKKworICAgICAgICAgICAgbV9hc3NlbWJsZXIuc3RzZnBzY3Io
c2NyKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmxkc2Zwc2NyKFNINDo6UjQpOworICAgICAg
ICAgICAgbV9hc3NlbWJsZXIubW92X2ltbTgoMHg0MCwgc2NyMSk7CisgICAgICAgICAgICBhbmQz
MihzY3IxLCBzY3IpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuY21wbF9ycihzY3IsIHNjcjEs
IEVxdWFsKTsgLyogaWYgdHJ1ZSA9PiBOQU4qLworCisgICAgICAgICAgICBKdW1wIG1fanVtcCA9
IEp1bXAobV9hc3NlbWJsZXIuam5lKCkpOyAvKiBub3QgTkFOKi8KKyAgICAgICAgICAgIG1fYXNz
ZW1ibGVyLkxvYWRDb25zdGFudFVuY2hlY2tlZFNpemUoMHgwLCBzY3IpOworICAgICAgICAgICAg
bV9hc3NlbWJsZXIubm9wKCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKKyAgICAg
ICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgICAgICAgICByZWxlYXNlU2NyYXRjaChz
Y3IxKTsKKyAgICAgICAgICAgIHJldHVybiBtX2p1bXA7CisgICAgICAgIH0KKworICAgICAgICBp
ZiAoY29uZCA9PSBEb3VibGVHcmVhdGVyVGhhbikgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIu
ZGNtcHBndChyaWdodCwgbGVmdCk7CisgICAgICAgICAgICByZXR1cm4gYnJhbmNoVHJ1ZSgpOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKGNvbmQgPT0gRG91YmxlR3JlYXRlclRoYW5PckVxdWFs
KSB7CisgICAgICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAg
ICAgICAgUmVnaXN0ZXJJRCBzY3IxID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgICAgICBtX2Fz
c2VtYmxlci5Mb2FkQ29uc3RhbnQoX19mcHNjcl92YWx1ZXNbMV0sIFNINDo6UjQpOworICAgICAg
ICAgICAgbV9hc3NlbWJsZXIubGRzZnBzY3IoU0g0OjpSNCk7CisgICAgICAgICAgICBtX2Fzc2Vt
Ymxlci5kY21wcGd0KGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmVuc3Vy
ZVNwYWNlKG1fYXNzZW1ibGVyLm1heEluc3RydWN0aW9uU2l6ZSArIDE4LCBzaXplb2YodWludDMy
X3QpKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmJyYW5jaChCVF9PUENPREUsIDgpOyAvLyBl
cXVhbCA9PiBkbyBub3QgYnJhbmNoCisKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnN0c2Zwc2Ny
KHNjcik7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5sZHNmcHNjcihTSDQ6OlI0KTsKKyAgICAg
ICAgICAgIG1fYXNzZW1ibGVyLm1vdl9pbW04KDB4NDAsIHNjcjEpOworICAgICAgICAgICAgYW5k
MzIoc2NyMSwgc2NyKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmNtcGxfcnIoc2NyLCBzY3Ix
LCBFcXVhbCk7IC8qIGlmIHRydWUgPT4gTkFOKi8KKworICAgICAgICAgICAgSnVtcCBtX2p1bXAg
PSBKdW1wKG1fYXNzZW1ibGVyLmpuZSgpKTsgLyogbm90IE5BTiovCisgICAgICAgICAgICBtX2Fz
c2VtYmxlci5Mb2FkQ29uc3RhbnRVbmNoZWNrZWRTaXplKDB4MCwgc2NyKTsKKyAgICAgICAgICAg
IG1fYXNzZW1ibGVyLm5vcCgpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIubm9wKCk7CisgICAg
ICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgICAgICAgICAgcmVsZWFzZVNjcmF0Y2go
c2NyMSk7CisgICAgICAgICAgICByZXR1cm4gbV9qdW1wOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKGNvbmQgPT0gRG91YmxlTGVzc1RoYW4pIHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmRj
bXBwZ3QobGVmdCwgcmlnaHQpOworICAgICAgICAgICAgcmV0dXJuIGJyYW5jaFRydWUoKTsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmIChjb25kID09IERvdWJsZUxlc3NUaGFuT3JFcXVhbCkgewor
ICAgICAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgICAg
IFJlZ2lzdGVySUQgc2NyMSA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICAgICAgbV9hc3NlbWJs
ZXIuTG9hZENvbnN0YW50KF9fZnBzY3JfdmFsdWVzWzFdLCBTSDQ6OlI0KTsKKyAgICAgICAgICAg
IG1fYXNzZW1ibGVyLmxkc2Zwc2NyKFNINDo6UjQpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIu
ZGNtcHBndChyaWdodCwgbGVmdCk7CisKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmVuc3VyZVNw
YWNlKG1fYXNzZW1ibGVyLm1heEluc3RydWN0aW9uU2l6ZSArIDE4LCBzaXplb2YodWludDMyX3Qp
KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmJyYW5jaChCVF9PUENPREUsIDgpOyAvLyBlcXVh
bCA9PiBkbyBub3QgYnJhbmNoCisKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnN0c2Zwc2NyKHNj
cik7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5sZHNmcHNjcihTSDQ6OlI0KTsKKyAgICAgICAg
ICAgIG1fYXNzZW1ibGVyLm1vdl9pbW04KDB4NDAsIHNjcjEpOworICAgICAgICAgICAgYW5kMzIo
c2NyMSwgc2NyKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmNtcGxfcnIoc2NyLCBzY3IxLCBF
cXVhbCk7IC8qIGlmIHRydWUgPT4gTkFOKi8KKworICAgICAgICAgICAgSnVtcCBtX2p1bXAgPSBK
dW1wKG1fYXNzZW1ibGVyLmpuZSgpKTsgLyogbm90IE5BTiovCisgICAgICAgICAgICBtX2Fzc2Vt
Ymxlci5Mb2FkQ29uc3RhbnRVbmNoZWNrZWRTaXplKDB4MCwgc2NyKTsKKyAgICAgICAgICAgIG1f
YXNzZW1ibGVyLm5vcCgpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIubm9wKCk7CisgICAgICAg
ICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgICAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2Ny
MSk7CisgICAgICAgICAgICByZXR1cm4gbV9qdW1wOworICAgICAgICB9CisKKyAgICAgICAgaWYg
KGNvbmQgPT0gRG91YmxlRXF1YWxPclVub3JkZXJlZCkgeworICAgICAgICAgICAgUmVnaXN0ZXJJ
RCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgICAgIFJlZ2lzdGVySUQgc2NyMSA9IGNs
YWltU2NyYXRjaCgpOworCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5Mb2FkQ29uc3RhbnQoX19m
cHNjcl92YWx1ZXNbMV0sIFNINDo6UjQpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIubGRzZnBz
Y3IoU0g0OjpSNCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5kY21wcGVxKHJpZ2h0LCBsZWZ0
KTsKKworICAgICAgICAgICAgbV9hc3NlbWJsZXIuZW5zdXJlU3BhY2UobV9hc3NlbWJsZXIubWF4
SW5zdHJ1Y3Rpb25TaXplICsgMTgsIHNpemVvZih1aW50MzJfdCkpOworICAgICAgICAgICAgbV9h
c3NlbWJsZXIuYnJhbmNoKEJUX09QQ09ERSwgNCk7CisKKyAgICAgICAgICAgIG1fYXNzZW1ibGVy
LnN0c2Zwc2NyKHNjcik7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5sZHNmcHNjcihTSDQ6OlI0
KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLm1vdl9pbW04KDB4NDAsIHNjcjEpOworICAgICAg
ICAgICAgYW5kMzIoc2NyMSwgc2NyKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmNtcGxfcnIo
c2NyLCBzY3IxLCBFcXVhbCk7IC8qIE5BTiovCisKKyAgICAgICAgICAgIEp1bXAgbV9qdW1wID0g
SnVtcChtX2Fzc2VtYmxlci5qZSgpKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLkxvYWRDb25z
dGFudFVuY2hlY2tlZFNpemUoMHgwLCBzY3IpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIubm9w
KCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKKyAgICAgICAgICAgIHJlbGVhc2VT
Y3JhdGNoKHNjcik7CisgICAgICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IxKTsKKyAgICAgICAg
ICAgIHJldHVybiBtX2p1bXA7CisgICAgICAgIH0KKworICAgICAgICBpZiAoY29uZCA9PSBEb3Vi
bGVHcmVhdGVyVGhhbk9yVW5vcmRlcmVkKSB7CisgICAgICAgICAgICBSZWdpc3RlcklEIHNjciA9
IGNsYWltU2NyYXRjaCgpOworICAgICAgICAgICAgUmVnaXN0ZXJJRCBzY3IxID0gY2xhaW1TY3Jh
dGNoKCk7CisKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLkxvYWRDb25zdGFudChfX2Zwc2NyX3Zh
bHVlc1sxXSwgU0g0OjpSNCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5sZHNmcHNjcihTSDQ6
OlI0KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmRjbXBwZ3QocmlnaHQsIGxlZnQpOworICAg
ICAgICAgICAgbV9hc3NlbWJsZXIuZW5zdXJlU3BhY2UobV9hc3NlbWJsZXIubWF4SW5zdHJ1Y3Rp
b25TaXplICsgMTgsIHNpemVvZih1aW50MzJfdCkpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIu
YnJhbmNoKEJUX09QQ09ERSwgNCk7CisKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnN0c2Zwc2Ny
KHNjcik7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5sZHNmcHNjcihTSDQ6OlI0KTsKKyAgICAg
ICAgICAgIG1fYXNzZW1ibGVyLm1vdl9pbW04KDB4NDAsIHNjcjEpOworICAgICAgICAgICAgYW5k
MzIoc2NyMSwgc2NyKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmNtcGxfcnIoc2NyLCBzY3Ix
LCBFcXVhbCk7IC8qIE5BTiovCisKKyAgICAgICAgICAgIEp1bXAgbV9qdW1wID0gSnVtcChtX2Fz
c2VtYmxlci5qZSgpKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLkxvYWRDb25zdGFudFVuY2hl
Y2tlZFNpemUoMHgwLCBzY3IpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIubm9wKCk7CisgICAg
ICAgICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKKyAgICAgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNj
cik7CisgICAgICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IxKTsKKyAgICAgICAgICAgIHJldHVy
biBtX2p1bXA7CisgICAgICAgIH0KKworICAgICAgICBpZiAoY29uZCA9PSBEb3VibGVHcmVhdGVy
VGhhbk9yRXF1YWxPclVub3JkZXJlZCkgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIuZGNtcHBn
dChsZWZ0LCByaWdodCk7CisgICAgICAgICAgICByZXR1cm4gYnJhbmNoRmFsc2UoKTsKKyAgICAg
ICAgfQorCisgICAgICAgIGlmIChjb25kID09IERvdWJsZUxlc3NUaGFuT3JVbm9yZGVyZWQpIHsK
KyAgICAgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgICAg
ICBSZWdpc3RlcklEIHNjcjEgPSBjbGFpbVNjcmF0Y2goKTsKKworICAgICAgICAgICAgbV9hc3Nl
bWJsZXIuTG9hZENvbnN0YW50KF9fZnBzY3JfdmFsdWVzWzFdLCBTSDQ6OlI0KTsKKyAgICAgICAg
ICAgIG1fYXNzZW1ibGVyLmxkc2Zwc2NyKFNINDo6UjQpOworICAgICAgICAgICAgbV9hc3NlbWJs
ZXIuZGNtcHBndChsZWZ0LCByaWdodCk7CisKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmVuc3Vy
ZVNwYWNlKG1fYXNzZW1ibGVyLm1heEluc3RydWN0aW9uU2l6ZSArIDE4LCBzaXplb2YodWludDMy
X3QpKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmJyYW5jaChCVF9PUENPREUsIDQpOworCisg
ICAgICAgICAgICBtX2Fzc2VtYmxlci5zdHNmcHNjcihzY3IpOworICAgICAgICAgICAgbV9hc3Nl
bWJsZXIubGRzZnBzY3IoU0g0OjpSNCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5tb3ZfaW1t
OCgweDQwLCBzY3IxKTsKKyAgICAgICAgICAgIGFuZDMyKHNjcjEsIHNjcik7CisgICAgICAgICAg
ICBtX2Fzc2VtYmxlci5jbXBsX3JyKHNjciwgc2NyMSwgRXF1YWwpOyAvKiBOQU4qLworCisgICAg
ICAgICAgICBKdW1wIG1fanVtcCA9IEp1bXAobV9hc3NlbWJsZXIuamUoKSk7CisgICAgICAgICAg
ICBtX2Fzc2VtYmxlci5Mb2FkQ29uc3RhbnRVbmNoZWNrZWRTaXplKDB4MCwgc2NyKTsKKyAgICAg
ICAgICAgIG1fYXNzZW1ibGVyLm5vcCgpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIubm9wKCk7
CisgICAgICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgICAgICAgICAgcmVsZWFzZVNj
cmF0Y2goc2NyMSk7CisgICAgICAgICAgICByZXR1cm4gbV9qdW1wOworICAgICAgICB9CisKKyAg
ICAgICAgaWYgKGNvbmQgPT0gRG91YmxlTGVzc1RoYW5PckVxdWFsT3JVbm9yZGVyZWQpIHsKKyAg
ICAgICAgICAgIG1fYXNzZW1ibGVyLmRjbXBwZ3QocmlnaHQsIGxlZnQpOworICAgICAgICAgICAg
cmV0dXJuIGJyYW5jaEZhbHNlKCk7CisgICAgICAgIH0KKworICAgICAgICBBU1NFUlQoY29uZCA9
PSBEb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuZGNtcHBl
cShyaWdodCwgbGVmdCk7CisgICAgICAgIHJldHVybiBicmFuY2hGYWxzZSgpOworICAgIH0KKwor
ICAgIEp1bXAgYnJhbmNoVHJ1ZSgpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5lbnN1cmVT
cGFjZShtX2Fzc2VtYmxlci5tYXhJbnN0cnVjdGlvblNpemUgKyA2LCBzaXplb2YodWludDMyX3Qp
KTsKKyAgICAgICAgSnVtcCBtX2p1bXAgPSBKdW1wKG1fYXNzZW1ibGVyLmplKCkpOworCisgICAg
ICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIG1fYXNzZW1ibGVy
LkxvYWRDb25zdGFudFVuY2hlY2tlZFNpemUoMHgwLCBzY3IpOworICAgICAgICBtX2Fzc2VtYmxl
ci5ub3AoKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubm9wKCk7CisgICAgICAgIHJlbGVhc2VTY3Jh
dGNoKHNjcik7CisKKyAgICAgICAgcmV0dXJuIG1fanVtcDsKKyAgICB9CisKKyAgICBKdW1wIGJy
YW5jaEZhbHNlKCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmVuc3VyZVNwYWNlKG1fYXNz
ZW1ibGVyLm1heEluc3RydWN0aW9uU2l6ZSArIDYsIHNpemVvZih1aW50MzJfdCkpOworICAgICAg
ICBKdW1wIG1fanVtcCA9IEp1bXAobV9hc3NlbWJsZXIuam5lKCkpOworCisgICAgICAgIFJlZ2lz
dGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIG1fYXNzZW1ibGVyLkxvYWRDb25z
dGFudFVuY2hlY2tlZFNpemUoMHgwLCBzY3IpOworICAgICAgICBtX2Fzc2VtYmxlci5ub3AoKTsK
KyAgICAgICAgbV9hc3NlbWJsZXIubm9wKCk7CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7
CisKKyAgICAgICAgcmV0dXJuIG1fanVtcDsKKyAgICB9CisKKyAgICB2b2lkIHNldDgoQ29uZGl0
aW9uIGNvbmQsIFJlZ2lzdGVySUQgbGVmdCwgUmVnaXN0ZXJJRCByaWdodCwgUmVnaXN0ZXJJRCBk
ZXN0KQorICAgIHsKKyAgICAgICAgc2V0MzIoY29uZCwgbGVmdCwgcmlnaHQsIGRlc3QpOworICAg
IH0KKworICAgIHZvaWQgc2V0OChDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBsZWZ0LCBJbW0z
MiByaWdodCwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgaWYgKGxlZnQgIT0gZGVz
dCkgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIuTG9hZENvbnN0YW50KHJpZ2h0Lm1fdmFsdWUs
IGRlc3QpOworICAgICAgICAgICAgc2V0MzIoY29uZCwgbGVmdCwgZGVzdCwgZGVzdCk7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgp
OworICAgICAgICAgICAgbV9hc3NlbWJsZXIuTG9hZENvbnN0YW50KHJpZ2h0Lm1fdmFsdWUsIHNj
cik7CisgICAgICAgICAgICBzZXQzMihjb25kLCBsZWZ0LCBzY3IsIGRlc3QpOworICAgICAgICAg
ICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEp1bXAgYnJh
bmNoMzIoQ29uZGl0aW9uIGNvbmQsIEJhc2VJbmRleCBsZWZ0LCBJbW0zMiByaWdodCkKKyAgICB7
CisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisKKyAgICAgICAgbW92
ZShsZWZ0LmluZGV4LCBzY3IpOworICAgICAgICBsc2hpZnQzMihJbW0zMihsZWZ0LnNjYWxlKSwg
c2NyKTsKKyAgICAgICAgYWRkMzIobGVmdC5iYXNlLCBzY3IpOworICAgICAgICBsb2FkMzIoc2Ny
LCBsZWZ0Lm9mZnNldCwgc2NyKTsKKworICAgICAgICBtX2Fzc2VtYmxlci5jbXBsX2lyKHJpZ2h0
Lm1fdmFsdWUsIHNjciwgY29uZCk7CisKKyAgICAgICAgbV9hc3NlbWJsZXIuZW5zdXJlU3BhY2Uo
bV9hc3NlbWJsZXIubWF4SW5zdHJ1Y3Rpb25TaXplICsgNiwgc2l6ZW9mKHVpbnQzMl90KSk7Cisg
ICAgICAgIEp1bXAgbV9qdW1wID0gKGNvbmQgPT0gTm90RXF1YWwpID8gSnVtcChtX2Fzc2VtYmxl
ci5qbmUoKSkgOiBKdW1wKG1fYXNzZW1ibGVyLmplKCkpOworCisgICAgICAgIG1fYXNzZW1ibGVy
LkxvYWRDb25zdGFudFVuY2hlY2tlZFNpemUoMHgwLCBzY3IpOworICAgICAgICBtX2Fzc2VtYmxl
ci5ub3AoKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubm9wKCk7CisgICAgICAgIHJlbGVhc2VTY3Jh
dGNoKHNjcik7CisKKyAgICAgICAgcmV0dXJuIG1fanVtcDsKKyAgICB9CisKKyAgICB2b2lkIHNx
cnREb3VibGUoRlBSZWdpc3RlcklEIHNyYywgRlBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAg
ICAgICBpZiAoZGVzdCAhPSBzcmMpCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5kbW92X3JyKHNy
YywgZGVzdCk7CisgICAgICAgIG1fYXNzZW1ibGVyLmRzcXJ0KGRlc3QpOworICAgIH0KKworICAg
IEp1bXAgYnJhbmNoVGVzdDgoQ29uZGl0aW9uIGNvbmQsIEFkZHJlc3MgYWRkcmVzcywgSW1tMzIg
bWFzayA9IEltbTMyKC0xKSkKKyAgICB7CisgICAgICAgIFJlZ2lzdGVySUQgYWRkcmVzc1RlbXBS
ZWdpc3RlciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBsb2FkOChhZGRyZXNzLCBhZGRyZXNz
VGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgCisgICAgICAgIEp1bXAgam1wID0gYnJhbmNoVGVzdDMy
KGNvbmQsIGFkZHJlc3NUZW1wUmVnaXN0ZXIsIG1hc2spOworICAgICAgICByZWxlYXNlU2NyYXRj
aChhZGRyZXNzVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgcmV0dXJuIGptcDsKKyAgICB9CisgICAg
CisgICAgdm9pZCBzaWduRXh0ZW5kMzJUb1B0cihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBk
ZXN0KQorICAgIHsKKyAgICAgICAgaWYgKHNyYyAhPSBkZXN0KQorICAgICAgICAgICAgbW92ZShz
cmMsIGRlc3QpOworICAgIH0KKyAgICAKKyAgICBKdW1wIGJyYW5jaDgoQ29uZGl0aW9uIGNvbmQs
IEFkZHJlc3MgbGVmdCwgSW1tMzIgcmlnaHQpCisgICAgeworICAgICAgICBSZWdpc3RlcklEIGFk
ZHJlc3NUZW1wUmVnaXN0ZXIgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgbG9hZDgobGVmdCwg
YWRkcmVzc1RlbXBSZWdpc3Rlcik7CisgICAgICAgIAorICAgICAgICBKdW1wIGptcCA9IGJyYW5j
aDMyKGNvbmQsIGFkZHJlc3NUZW1wUmVnaXN0ZXIsIHJpZ2h0KTsKKyAgICAgICAgcmVsZWFzZVNj
cmF0Y2goYWRkcmVzc1RlbXBSZWdpc3Rlcik7CisgICAgICAgIHJldHVybiBqbXA7CisgICAgfQor
CisgICAgSnVtcCBicmFuY2hUcnVuY2F0ZURvdWJsZVRvSW50MzIoRlBSZWdpc3RlcklEIHNyYywg
UmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuZnRyY19kcm1fZnB1
bChzcmMpOworICAgICAgICBtX2Fzc2VtYmxlci5zdHNfZnB1bF9ybihkZXN0KTsKKyAgICAgICAg
cmV0dXJuIGJyYW5jaDMyKEVxdWFsLCBkZXN0LCBJbW0zMigweDdmZmZmZmZmKSk7CisgICAgfQor
ICAgIAorICAgIC8vIFN0YWNrIG1hbmlwdWxhdGlvbiBvcGVyYXRpb25zCisgICAgCisgICAgdm9p
ZCBwb3AoUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIucG9wX3Io
ZGVzdCk7CisgICAgfQorCisgICAgdm9pZCBwdXNoKFJlZ2lzdGVySUQgc3JjKQorICAgIHsKKyAg
ICAgICAgbV9hc3NlbWJsZXIucHVzaF9yKHNyYyk7CisgICAgfQorCisgICAgdm9pZCBwdXNoKEFk
ZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnB1c2hfbShhZGRyZXNz
Lm9mZnNldCwgYWRkcmVzcy5iYXNlKTsKKyAgICB9CisKKyAgICB2b2lkIHB1c2goSW1tMzIgaW1t
KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIucHVzaF9pMzIoaW1tLm1fdmFsdWUpOworICAg
IH0KKworICAgIC8vIFJlZ2lzdGVyIG1vdmUgb3BlcmF0aW9ucworCisgICAgdm9pZCBtb3ZlKElt
bTMyIGltbSwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICBtX2Fzc2VtYmxlci5Mb2Fk
Q29uc3RhbnQoaW1tLm1fdmFsdWUsIGRlc3QpOworICAgIH0KKyAgICAKKyAgICBEYXRhTGFiZWxQ
dHIgbW92ZVdpdGhQYXRjaChJbW1QdHIgaW5pdGlhbFZhbHVlLCBSZWdpc3RlcklEIGRlc3QpCisg
ICAgeworICAgICAgIERhdGFMYWJlbFB0ciBkYXRhTGFiZWwodGhpcyk7CisgICAgICAgbV9hc3Nl
bWJsZXIuTG9hZENvbnN0YW50KHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3Q+KGluaXRpYWxWYWx1
ZS5tX3ZhbHVlKSwgZGVzdCwgdHJ1ZSk7CisgICAgICAgcmV0dXJuIGRhdGFMYWJlbDsKKyAgICB9
CisKKyAgICB2b2lkIG1vdmUoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7
CisgICAgICAgIG1fYXNzZW1ibGVyLm1vdmxfcnIoc3JjLCBkZXN0KTsKKyAgICB9CisKKyAgICB2
b2lkIG1vdmUoSW1tUHRyIGltbSwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9h
c3NlbWJsZXIuTG9hZENvbnN0YW50KGltbS5hc0ludHB0cigpLCBkZXN0KTsKKyAgICB9CisgICAg
CisgICAgdm9pZCBleHR1dyhSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpCisgICAgewor
ICAgICAgICBtX2Fzc2VtYmxlci5leHR1dyhzcmMsIGRzdCk7CisgICAgfQorCisgICAgdm9pZCBz
ZXQzMihDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBsZWZ0LCBSZWdpc3RlcklEIHJpZ2h0LCBS
ZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5jbXBsX3JyKHJpZ2h0
LCBsZWZ0LCBjb25kKTsKKyAgICAgICAgaWYgKGNvbmQgIT0gTm90RXF1YWwpCisgICAgICAgICAg
ICBtX2Fzc2VtYmxlci5tb3Z0KGRlc3QpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICBt
X2Fzc2VtYmxlci5lbnN1cmVTcGFjZShtX2Fzc2VtYmxlci5tYXhJbnN0cnVjdGlvblNpemUgKyA0
KTsKKyAgICAgICAgICAgICBtX2Fzc2VtYmxlci5tb3ZfaW1tOCgwLCBkZXN0KTsKKyAgICAgICAg
ICAgICBtX2Fzc2VtYmxlci5icmFuY2goQlRfT1BDT0RFLCAwKTsKKyAgICAgICAgICAgICBtX2Fz
c2VtYmxlci5tb3ZfaW1tOCgxLCBkZXN0KTsKKyAgICAgICAgfQorICAgIH0KKworCisgICAgdm9p
ZCBzZXQzMihDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBsZWZ0LCBJbW0zMiByaWdodCwgUmVn
aXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICBpZiAobGVmdCAhPSBkZXN0KSB7CisgICAgICAg
ICAgIG1vdmUocmlnaHQsIGRlc3QpOworICAgICAgICAgICBzZXQzMihjb25kLCBsZWZ0LCBkZXN0
LCBkZXN0KTsKKyAgICAgICB9IGVsc2UgeworICAgICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNs
YWltU2NyYXRjaCgpOworICAgICAgICAgICBtb3ZlKHJpZ2h0LCBzY3IpOworICAgICAgICAgICBz
ZXQzMihjb25kLCBsZWZ0LCBzY3IsIGRlc3QpOworICAgICAgICAgICByZWxlYXNlU2NyYXRjaChz
Y3IpOworICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIHNldFRlc3Q4KENvbmRpdGlvbiBjb25k
LCBBZGRyZXNzIGFkZHJlc3MsIEltbTMyIG1hc2ssIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7Cisg
ICAgICAgIEFTU0VSVCgoY29uZCA9PSBaZXJvKSB8fCAoY29uZCA9PSBOb25aZXJvKSk7CisKKyAg
ICAgICAgbG9hZDgoYWRkcmVzcywgZGVzdCk7CisKKyAgICAgICAgaWYgKG1hc2subV92YWx1ZSA9
PSAtMSkKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmNtcGxfaXIoMCwgZGVzdCwgY29uZCk7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnRlc3RsX2kzMnIobWFzay5tX3Zh
bHVlLCBkZXN0KTsKKworICAgICAgICBpZiAoY29uZCAhPSBOb25aZXJvKQorICAgICAgICAgICAg
bV9hc3NlbWJsZXIubW92dChkZXN0KTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBtX2Fz
c2VtYmxlci5lbnN1cmVTcGFjZShtX2Fzc2VtYmxlci5tYXhJbnN0cnVjdGlvblNpemUgKyA0KTsK
KyAgICAgICAgICAgIG1fYXNzZW1ibGVyLm1vdl9pbW04KDAsIGRlc3QpOworICAgICAgICAgICAg
bV9hc3NlbWJsZXIuYnJhbmNoKEJUX09QQ09ERSwgMCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxl
ci5tb3ZfaW1tOCgxLCBkZXN0KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgbG9hZFB0
ckxpbmtSZWcoSW1wbGljaXRBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBSZWdpc3Rl
cklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBsb2FkMzIoYWRkcmVzcywgc2NyKTsK
KyAgICAgICAgbV9hc3NlbWJsZXIubGRzcHIoc2NyKTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2go
c2NyKTsKKyAgICB9CisKK3B1YmxpYzoKKyAgICBKdW1wIGJyYW5jaDMyKENvbmRpdGlvbiBjb25k
LCBSZWdpc3RlcklEIGxlZnQsIFJlZ2lzdGVySUQgcmlnaHQpCisgICAgeworICAgICAgICBKdW1w
IG1fanVtcDsKKyAgICAgICAgbV9hc3NlbWJsZXIuZW5zdXJlU3BhY2UobV9hc3NlbWJsZXIubWF4
SW5zdHJ1Y3Rpb25TaXplICsgOCwgc2l6ZW9mKHVpbnQzMl90KSk7CisgICAgICAgIG1fYXNzZW1i
bGVyLmNtcGxfcnIocmlnaHQsIGxlZnQsIGNvbmQpOworICAgICAgICAKKyAgICAgICAgLyogQlQg
bGFiZWwgICAgICAgPT4gQkYgb2ZmIAorICAgICAgICAgICBub3AgICAgICAgICAgICAgICBMRFIg
cmVnCisgICAgICAgICAgIG5vcCAgICAgICAgICAgICAgIGJyYWYgQHJlZworICAgICAgICAgICBu
b3AgICAgICAgICAgICAgICBub3AKKyAgICAgICAgICovCisgICAgICAgICAgICAgICAKKyAgICAg
ICAgbV9qdW1wID0gKGNvbmQgPT0gTm90RXF1YWwpID8gSnVtcChtX2Fzc2VtYmxlci5qbmUoKSkg
OiBKdW1wKG1fYXNzZW1ibGVyLmplKCkpOworICAgICAgICAKKyAgICAgICAgUmVnaXN0ZXJJRCBz
Y3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuTG9hZENvbnN0YW50VW5j
aGVja2VkU2l6ZSgweDAsIHNjcik7CisgICAgICAgIG1fYXNzZW1ibGVyLm5vcCgpOworICAgICAg
ICBtX2Fzc2VtYmxlci5ub3AoKTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICAg
ICAgCisgICAgICAgIHJldHVybiBtX2p1bXA7CisgICAgfQorCisgICAgSnVtcCBicmFuY2gzMihD
b25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBsZWZ0LCBJbW0zMiByaWdodCkKKyAgICB7CisgICAg
ICAgIEp1bXAgbV9qdW1wOworICAgICAgICBpZiAoKChjb25kID09IEVxdWFsKSB8fCAoY29uZCA9
PSBOb3RFcXVhbCkpICYmICFyaWdodC5tX3ZhbHVlKQorICAgICAgICAgICAgbV9hc3NlbWJsZXIu
dGVzdGxfcnIobGVmdCwgbGVmdCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fYXNzZW1i
bGVyLmNtcGxfaXIocmlnaHQubV92YWx1ZSwgbGVmdCwgY29uZCk7CisgICAgICAgICAgICAKKyAg
ICAgICAgbV9hc3NlbWJsZXIuZW5zdXJlU3BhY2UobV9hc3NlbWJsZXIubWF4SW5zdHJ1Y3Rpb25T
aXplICsgNiwgc2l6ZW9mKHVpbnQzMl90KSk7CisgICAgICAgIG1fanVtcCA9IChjb25kID09IE5v
dEVxdWFsKSA/IEp1bXAobV9hc3NlbWJsZXIuam5lKCkpIDogSnVtcChtX2Fzc2VtYmxlci5qZSgp
KTsKKyAgICAgICAgCisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7Cisg
ICAgICAgIG1fYXNzZW1ibGVyLkxvYWRDb25zdGFudFVuY2hlY2tlZFNpemUoMHgwLCBzY3IpOwor
ICAgICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubm9wKCk7Cisg
ICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgICAgIAorICAgICAgICByZXR1cm4gbV9q
dW1wOworICAgIH0KKyAgICAKKyAgICBKdW1wIGJyYW5jaDMyKENvbmRpdGlvbiBjb25kLCBSZWdp
c3RlcklEIGxlZnQsIEFkZHJlc3MgcmlnaHQpCisgICAgeworICAgICAgICBKdW1wIG1fanVtcDsK
KyAgICAgICAgbV9hc3NlbWJsZXIuY21wbF9tcihyaWdodC5vZmZzZXQsIHJpZ2h0LmJhc2UsIGxl
ZnQsIGNvbmQpOworICAgICAgICAKKyAgICAgICAgbV9hc3NlbWJsZXIuZW5zdXJlU3BhY2UobV9h
c3NlbWJsZXIubWF4SW5zdHJ1Y3Rpb25TaXplICsgNiwgc2l6ZW9mKHVpbnQzMl90KSk7CisgICAg
ICAgIG1fanVtcCA9IChjb25kID09IE5vdEVxdWFsKSA/IEp1bXAobV9hc3NlbWJsZXIuam5lKCkp
IDogSnVtcChtX2Fzc2VtYmxlci5qZSgpKTsKKyAgICAgICAgCisgICAgICAgIFJlZ2lzdGVySUQg
c2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIG1fYXNzZW1ibGVyLkxvYWRDb25zdGFudFVu
Y2hlY2tlZFNpemUoMHgwLCBzY3IpOworICAgICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKKyAgICAg
ICAgbV9hc3NlbWJsZXIubm9wKCk7CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAg
ICAgIAorICAgICAgICByZXR1cm4gbV9qdW1wOworICAgIH0KKyAgICAKKyAgICBKdW1wIGJyYW5j
aDMyKENvbmRpdGlvbiBjb25kLCBBZGRyZXNzIGxlZnQsIFJlZ2lzdGVySUQgcmlnaHQpCisgICAg
eworICAgICAgICBKdW1wIG1fanVtcDsKKyAgICAgICAgbV9hc3NlbWJsZXIuY21wbF9ybShyaWdo
dCwgbGVmdC5vZmZzZXQsIGxlZnQuYmFzZSwgY29uZCk7CisgICAgICAgICAgICAgICAgCisgICAg
ICAgIG1fYXNzZW1ibGVyLmVuc3VyZVNwYWNlKG1fYXNzZW1ibGVyLm1heEluc3RydWN0aW9uU2l6
ZSArIDYsIHNpemVvZih1aW50MzJfdCkpOworICAgICAgICBtX2p1bXAgPSAoY29uZCA9PSBOb3RF
cXVhbCkgPyBKdW1wKG1fYXNzZW1ibGVyLmpuZSgpKSA6IEp1bXAobV9hc3NlbWJsZXIuamUoKSk7
CisgICAgICAgIAorICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAg
ICAgICBtX2Fzc2VtYmxlci5Mb2FkQ29uc3RhbnRVbmNoZWNrZWRTaXplKDB4MCwgc2NyKTsKKyAg
ICAgICAgbV9hc3NlbWJsZXIubm9wKCk7CisgICAgICAgIG1fYXNzZW1ibGVyLm5vcCgpOworICAg
ICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIG1fanVt
cDsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaDMyKENvbmRpdGlvbiBjb25kLCBBZGRyZXNzIGxl
ZnQsIEltbTMyIHJpZ2h0KQorICAgIHsKKyAgICAgICAgSnVtcCBtX2p1bXA7CisgICAgICAgIG1f
YXNzZW1ibGVyLmNtcGxfaW0ocmlnaHQubV92YWx1ZSwgbGVmdC5vZmZzZXQsIGxlZnQuYmFzZSwg
Y29uZCk7CisgICAgICAgIAorICAgICAgICBtX2Fzc2VtYmxlci5lbnN1cmVTcGFjZShtX2Fzc2Vt
Ymxlci5tYXhJbnN0cnVjdGlvblNpemUgKyA2LCBzaXplb2YodWludDMyX3QpKTsKKyAgICAgICAg
bV9qdW1wID0gKGNvbmQgPT0gTm90RXF1YWwpID8gSnVtcChtX2Fzc2VtYmxlci5qbmUoKSkgOiBK
dW1wKG1fYXNzZW1ibGVyLmplKCkpOworICAgICAgICAKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3Ig
PSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuTG9hZENvbnN0YW50VW5jaGVj
a2VkU2l6ZSgweDAsIHNjcik7CisgICAgICAgIG1fYXNzZW1ibGVyLm5vcCgpOworICAgICAgICBt
X2Fzc2VtYmxlci5ub3AoKTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICAgICAg
CisgICAgICAgIHJldHVybiBtX2p1bXA7CisgICAgfQorCisKKyAgICBKdW1wIGJyYW5jaDMyKENv
bmRpdGlvbiBjb25kLCBBYnNvbHV0ZUFkZHJlc3MgbGVmdCwgUmVnaXN0ZXJJRCByaWdodCkKKyAg
ICB7CisgICAgICAgIEp1bXAgbV9qdW1wOworICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWlt
U2NyYXRjaCgpOworICAgICAgICBtb3ZlKEltbTMyKChpbnQpbGVmdC5tX3B0ciksIHNjcik7Cisg
ICAgICAgIG1fYXNzZW1ibGVyLmNtcGxfcnIocmlnaHQsIHNjciwgY29uZCk7CisKKyAgICAgICAg
bV9hc3NlbWJsZXIuZW5zdXJlU3BhY2UobV9hc3NlbWJsZXIubWF4SW5zdHJ1Y3Rpb25TaXplICsg
Niwgc2l6ZW9mKHVpbnQzMl90KSk7CisgICAgICAgIG1fanVtcCA9IChjb25kID09IE5vdEVxdWFs
KSA/IEp1bXAobV9hc3NlbWJsZXIuam5lKCkpIDogSnVtcChtX2Fzc2VtYmxlci5qZSgpKTsKKwor
ICAgICAgICBtX2Fzc2VtYmxlci5Mb2FkQ29uc3RhbnRVbmNoZWNrZWRTaXplKDB4MCwgc2NyKTsK
KyAgICAgICAgbV9hc3NlbWJsZXIubm9wKCk7CisgICAgICAgIG1fYXNzZW1ibGVyLm5vcCgpOwor
CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgICAgIHJldHVybiBtX2p1bXA7Cisg
ICAgfQorCisKKyAgICBKdW1wIGJyYW5jaDMyKENvbmRpdGlvbiBjb25kLCBBYnNvbHV0ZUFkZHJl
c3MgbGVmdCwgSW1tMzIgcmlnaHQpCisgICAgeworICAgICAgICBKdW1wIG1fanVtcDsKKyAgICAg
ICAgUmVnaXN0ZXJJRCBhZGRyZXNzVGVtcFJlZ2lzdGVyID0gY2xhaW1TY3JhdGNoKCk7CisgICAg
ICAgIGxvYWQzMihsZWZ0Lm1fcHRyLCBhZGRyZXNzVGVtcFJlZ2lzdGVyKTsKKworICAgICAgICBt
X2Fzc2VtYmxlci5jbXBsX2lyKHJpZ2h0Lm1fdmFsdWUsIGFkZHJlc3NUZW1wUmVnaXN0ZXIsIGNv
bmQpOworCisgICAgICAgIG1fYXNzZW1ibGVyLmVuc3VyZVNwYWNlKG1fYXNzZW1ibGVyLm1heElu
c3RydWN0aW9uU2l6ZSArIDYsIHNpemVvZih1aW50MzJfdCkpOworICAgICAgICBtX2p1bXAgPSAo
Y29uZCA9PSBOb3RFcXVhbCkgPyBKdW1wKG1fYXNzZW1ibGVyLmpuZSgpKSA6IEp1bXAobV9hc3Nl
bWJsZXIuamUoKSk7CisKKyAgICAgICAgbV9hc3NlbWJsZXIuTG9hZENvbnN0YW50VW5jaGVja2Vk
U2l6ZSgweDAsIGFkZHJlc3NUZW1wUmVnaXN0ZXIpOworICAgICAgICBtX2Fzc2VtYmxlci5ub3Ao
KTsKKyAgICAgICAgbV9hc3NlbWJsZXIubm9wKCk7CisKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2go
YWRkcmVzc1RlbXBSZWdpc3Rlcik7CisgICAgICAgIHJldHVybiBtX2p1bXA7CisgICAgfQorCisK
KworICAgIEp1bXAgYnJhbmNoMTYoQ29uZGl0aW9uIGNvbmQsICBCYXNlSW5kZXggbGVmdCwgUmVn
aXN0ZXJJRCByaWdodCkKKyAgICB7CisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3Jh
dGNoKCk7CisgICAgICAgIG1vdmUobGVmdC5pbmRleCwgc2NyKTsKKyAgICAgICAgbHNoaWZ0MzIo
SW1tMzIobGVmdC5zY2FsZSksIHNjcik7CisgICAgICAgIG1fYXNzZW1ibGVyLmFkZGxfaXIobGVm
dC5vZmZzZXQsIHNjcik7CisgICAgICAgIGFkZDMyKGxlZnQuYmFzZSwgc2NyKTsKKyAgICAgICAg
bG9hZDE2KHNjciwgc2NyKTsKKyAgICAgICAgZXh0dXcoc2NyLCBzY3IpOworICAgICAgICByZWxl
YXNlU2NyYXRjaChzY3IpOworCisgICAgICAgIHJldHVybiBicmFuY2gzMihjb25kLCBzY3IsIHJp
Z2h0KTsKKyAgICB9CisgICAgCisgICAgSnVtcCBicmFuY2gxNihDb25kaXRpb24gY29uZCwgQmFz
ZUluZGV4IGxlZnQsIEltbTMyIHJpZ2h0KQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3Ig
PSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgbW92ZShsZWZ0LmluZGV4LCBzY3IpOworICAgICAg
ICBsc2hpZnQzMihJbW0zMihsZWZ0LnNjYWxlKSwgc2NyKTsKKyAgICAgICAgbV9hc3NlbWJsZXIu
YWRkbF9pcihsZWZ0Lm9mZnNldCwgc2NyKTsKKyAgICAgICAgYWRkMzIobGVmdC5iYXNlLCBzY3Ip
OworICAgICAgICBsb2FkMTYoc2NyLCBzY3IpOworICAgICAgICBleHR1dyhzY3IsIHNjcik7Cisg
ICAgICAgIAorICAgICAgICBSZWdpc3RlcklEIHNjcjEgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAg
ICAgbV9hc3NlbWJsZXIuTG9hZENvbnN0YW50KHJpZ2h0Lm1fdmFsdWUsIHNjcjEpOworICAgICAg
ICAKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2go
c2NyMSk7CisgICAgICAgIHJldHVybiBicmFuY2gzMihjb25kLCBzY3IsIHNjcjEpOworICAgIH0K
KworICAgIEp1bXAgYnJhbmNoVGVzdDMyKENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIHJlZywg
UmVnaXN0ZXJJRCBtYXNrKQorICAgIHsKKyAgICAgICAgQVNTRVJUKChjb25kID09IFplcm8pIHx8
IChjb25kID09IE5vblplcm8pKTsKKyAgICAgICAgSnVtcCBtX2p1bXA7CisgICAgICAgIG1fYXNz
ZW1ibGVyLnRlc3RsX3JyKHJlZywgbWFzayk7CisKKyAgICAgICAgbV9hc3NlbWJsZXIuZW5zdXJl
U3BhY2UobV9hc3NlbWJsZXIubWF4SW5zdHJ1Y3Rpb25TaXplICsgNiwgc2l6ZW9mKHVpbnQzMl90
KSk7CisgICAgICAgIG1fanVtcCA9IChjb25kID09IE5vdEVxdWFsKSA/IEp1bXAobV9hc3NlbWJs
ZXIuam5lKCkpIDogSnVtcChtX2Fzc2VtYmxlci5qZSgpKTsKKyAgICAgICAgCisgICAgICAgIFJl
Z2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIG1fYXNzZW1ibGVyLkxvYWRD
b25zdGFudFVuY2hlY2tlZFNpemUoMHgwLCBzY3IpOworICAgICAgICBtX2Fzc2VtYmxlci5ub3Ao
KTsKKyAgICAgICAgbV9hc3NlbWJsZXIubm9wKCk7CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNj
cik7CisgICAgICAgIAorICAgICAgICByZXR1cm4gbV9qdW1wOworICAgIH0KKworICAgIEp1bXAg
YnJhbmNoVGVzdDMyKENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIHJlZywgSW1tMzIgbWFzayA9
IEltbTMyKC0xKSkKKyAgICB7CisgICAgICAgIEFTU0VSVCgoY29uZCA9PSBaZXJvKSB8fCAoY29u
ZCA9PSBOb25aZXJvKSk7CisgICAgICAgIEp1bXAgbV9qdW1wOworICAgICAgICAKKyAgICAgICAg
aWYgKG1hc2subV92YWx1ZSA9PSAtMSkKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnRlc3RsX3Jy
KHJlZywgcmVnKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9hc3NlbWJsZXIudGVzdGxf
aTMycihtYXNrLm1fdmFsdWUsIHJlZyk7CisgICAgICAgICAgICAKKyAgICAgICAgbV9hc3NlbWJs
ZXIuZW5zdXJlU3BhY2UobV9hc3NlbWJsZXIubWF4SW5zdHJ1Y3Rpb25TaXplICsgNiwgc2l6ZW9m
KHVpbnQzMl90KSk7CisgICAgICAgIG1fanVtcCA9IChjb25kID09IE5vdEVxdWFsKSA/IEp1bXAo
bV9hc3NlbWJsZXIuam5lKCkpIDogSnVtcChtX2Fzc2VtYmxlci5qZSgpKTsKKyAgICAgICAgCisg
ICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIG1fYXNzZW1i
bGVyLkxvYWRDb25zdGFudFVuY2hlY2tlZFNpemUoMHgwLCBzY3IpOworCisgICAgICAgIG1fYXNz
ZW1ibGVyLm5vcCgpOworICAgICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKKyAgICAgICAgcmVsZWFz
ZVNjcmF0Y2goc2NyKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBtX2p1bXA7CisgICAgfQor
CisgICAgSnVtcCBicmFuY2hUZXN0MzIoQ29uZGl0aW9uIGNvbmQsIEFkZHJlc3MgYWRkcmVzcywg
SW1tMzIgbWFzayA9IEltbTMyKC0xKSkKKyAgICB7CisgICAgICAgIEFTU0VSVCgoY29uZCA9PSBa
ZXJvKSB8fCAoY29uZCA9PSBOb25aZXJvKSk7CisgICAgICAgIEp1bXAgbV9qdW1wOworCisgICAg
ICAgIGlmIChtYXNrLm1fdmFsdWUgPT0gLTEpCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5jbXBs
X2ltKDAsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UsIGNvbmQpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBtX2Fzc2VtYmxlci50ZXN0bF9pMzJtKG1hc2subV92YWx1ZSwgYWRkcmVz
cy5vZmZzZXQsIGFkZHJlc3MuYmFzZSk7CisgICAgICAgICAgICAKKyAgICAgICAgbV9hc3NlbWJs
ZXIuZW5zdXJlU3BhY2UobV9hc3NlbWJsZXIubWF4SW5zdHJ1Y3Rpb25TaXplICsgNiwgc2l6ZW9m
KHVpbnQzMl90KSk7CisgICAgICAgIG1fanVtcCA9IChjb25kID09IE5vdEVxdWFsKSA/IEp1bXAo
bV9hc3NlbWJsZXIuam5lKCkpIDogSnVtcChtX2Fzc2VtYmxlci5qZSgpKTsKKyAgICAgICAgCisg
ICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIG1fYXNzZW1i
bGVyLkxvYWRDb25zdGFudFVuY2hlY2tlZFNpemUoMHgwLCBzY3IpOworICAgICAgICBtX2Fzc2Vt
Ymxlci5ub3AoKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubm9wKCk7CisgICAgICAgIHJlbGVhc2VT
Y3JhdGNoKHNjcik7CisgICAgICAgIAorICAgICAgICByZXR1cm4gbV9qdW1wOworICAgIH0KKyAg
ICAKKyAgICBKdW1wIGJyYW5jaFRlc3QzMihDb25kaXRpb24gY29uZCwgQmFzZUluZGV4IGFkZHJl
c3MsIEltbTMyIG1hc2sgPSBJbW0zMigtMSkpCisgICAgeworICAgICAgICBSZWdpc3RlcklEIHNj
ciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBKdW1wIG1fanVtcDsKKworICAgICAgICBtb3Zl
KGFkZHJlc3MuaW5kZXgsIHNjcik7CisKKyAgICAgICAgbHNoaWZ0MzIoSW1tMzIoYWRkcmVzcy5z
Y2FsZSksIHNjcik7CisgICAgICAgIGFkZDMyKGFkZHJlc3MuYmFzZSwgc2NyKTsKKyAgICAgICAg
bG9hZDMyKHNjciwgYWRkcmVzcy5vZmZzZXQsIHNjcik7CisKKyAgICAgICAgaWYgKG1hc2subV92
YWx1ZSA9PSAtMSkKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnRlc3RsX3JyKHNjciwgc2NyKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9hc3NlbWJsZXIudGVzdGxfaTMycihtYXNrLm1f
dmFsdWUsIHNjcik7CisKKyAgICAgICAgbV9hc3NlbWJsZXIuZW5zdXJlU3BhY2UobV9hc3NlbWJs
ZXIubWF4SW5zdHJ1Y3Rpb25TaXplICsgNiwgc2l6ZW9mKHVpbnQzMl90KSk7CisgICAgICAgIG1f
anVtcCA9IChjb25kID09IE5vdEVxdWFsKSA/IEp1bXAobV9hc3NlbWJsZXIuam5lKCkpIDogSnVt
cChtX2Fzc2VtYmxlci5qZSgpKTsKKworICAgICAgICBtX2Fzc2VtYmxlci5Mb2FkQ29uc3RhbnRV
bmNoZWNrZWRTaXplKDB4MCwgc2NyKTsKKworICAgICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKKyAg
ICAgICAgbV9hc3NlbWJsZXIubm9wKCk7CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7Cisg
ICAgICAgIAorICAgICAgICByZXR1cm4gbV9qdW1wOworICAgIH0KKworICAgIEp1bXAganVtcCgp
CisgICAgeworICAgICAgICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5qbXAoKSk7CisgICAgfQor
CisgICAgdm9pZCBqdW1wKFJlZ2lzdGVySUQgdGFyZ2V0KQorICAgIHsKKyAgICAgICAgbV9hc3Nl
bWJsZXIuam1wX3IodGFyZ2V0KTsKKyAgICB9CisKKyAgICAvLyBBZGRyZXNzIGlzIGEgbWVtb3J5
IGxvY2F0aW9uIGNvbnRhaW5pbmcgdGhlIGFkZHJlc3MgdG8ganVtcCB0bworICAgIHZvaWQganVt
cChBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5qbXBfbShhZGRy
ZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlKTsKKyAgICB9CisKKworICAgIC8vIEFyaXRobWV0aWMg
Y29udHJvbCBmbG93IG9wZXJhdGlvbnMKKyAgICAKKyAgICBKdW1wIGJyYW5jaEFkZDMyKENvbmRp
dGlvbiBjb25kLCBSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKChjb25kID09IE92ZXJmbG93KSB8fCAoY29uZCA9PSBTaWduZWQpKTsKKworICAg
ICAgICBpZiAoY29uZCA9PSBPdmVyZmxvdykgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIuZW5z
dXJlU3BhY2UobV9hc3NlbWJsZXIubWF4SW5zdHJ1Y3Rpb25TaXplICsgOCwgc2l6ZW9mKHVpbnQz
Ml90KSk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGR2bF9ycihzcmMsIGRlc3QpOworICAg
ICAgICB9IGVsc2UgaWYgKGNvbmQgPT0gU2lnbmVkKSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxl
ci5lbnN1cmVTcGFjZShtX2Fzc2VtYmxlci5tYXhJbnN0cnVjdGlvblNpemUgKyAxMCwgc2l6ZW9m
KHVpbnQzMl90KSk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGRsX3JyKHNyYywgZGVzdCk7
CisgICAgICAgICAgICAvLyBDaGVjayBpZiBkZXN0IGlzIG5lZ2F0aXZlLgorICAgICAgICAgICAg
bV9hc3NlbWJsZXIuY21wbF9pcigwLCBkZXN0LCBMZXNzVGhhbik7CisgICAgICAgIH0KKworICAg
ICAgICBKdW1wIG1fanVtcCA9IEp1bXAobV9hc3NlbWJsZXIuamUoKSk7CisKKyAgICAgICAgUmVn
aXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuTG9hZENv
bnN0YW50VW5jaGVja2VkU2l6ZSgweDAsIHNjcik7CisgICAgICAgIG1fYXNzZW1ibGVyLm5vcCgp
OworICAgICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKKworICAgICAgICByZWxlYXNlU2NyYXRjaChz
Y3IpOworICAgICAgICByZXR1cm4gbV9qdW1wOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoQWRk
MzIoQ29uZGl0aW9uIGNvbmQsIEltbTMyIGltbSwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAg
ICAgICAgQVNTRVJUKChjb25kID09IE92ZXJmbG93KSB8fCAoY29uZCA9PSBTaWduZWQpKTsKKyAg
ICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKworICAgICAgICBtb3ZlKGlt
bSwgc2NyKTsKKyAgICAgICAgaWYgKGNvbmQgPT0gT3ZlcmZsb3cpIHsKKyAgICAgICAgICAgIG1f
YXNzZW1ibGVyLmVuc3VyZVNwYWNlKG1fYXNzZW1ibGVyLm1heEluc3RydWN0aW9uU2l6ZSArIDgs
IHNpemVvZih1aW50MzJfdCkpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRkdmxfcnIoc2Ny
LCBkZXN0KTsKKyAgICAgICAgfSBlbHNlIGlmIChjb25kID09IFNpZ25lZCkgeworICAgICAgICAg
ICAgbV9hc3NlbWJsZXIuZW5zdXJlU3BhY2UobV9hc3NlbWJsZXIubWF4SW5zdHJ1Y3Rpb25TaXpl
ICsgMTAsIHNpemVvZih1aW50MzJfdCkpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRkbF9y
cihzY3IsIGRlc3QpOworICAgICAgICAgICAgLy8gQ2hlY2sgaWYgZGVzdCBpcyBuZWdhdGl2ZS4K
KyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmNtcGxfaXIoMCwgZGVzdCwgTGVzc1RoYW4pOworICAg
ICAgICB9CisKKyAgICAgICAgSnVtcCBtX2p1bXAgPSBKdW1wKG1fYXNzZW1ibGVyLmplKCkpOwor
CisgICAgICAgIG1fYXNzZW1ibGVyLkxvYWRDb25zdGFudFVuY2hlY2tlZFNpemUoMHgwLCBzY3Ip
OworICAgICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubm9wKCk7
CisKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICAgICAgcmV0dXJuIG1fanVtcDsK
KyAgICB9CisgICAgCisgICAgSnVtcCBicmFuY2hNdWwzMihDb25kaXRpb24gY29uZCwgUmVnaXN0
ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIEFTU0VSVCgoY29uZCA9
PSBPdmVyZmxvdykgfHwgKGNvbmQgPT0gU2lnbmVkKSB8fCAoY29uZCA9PSBaZXJvKSB8fCAoY29u
ZCA9PSBOb25aZXJvKSk7CisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7
CisgICAgICAgIGlmIChjb25kID09IE92ZXJmbG93KSB7CisgICAgICAgICAgICBSZWdpc3RlcklE
IHNjcjEgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmRtdWxsX3Jy
KHNyYywgZGVzdCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zdHNtYWNsKGRlc3QpOworCisg
ICAgICAgICAgICBtX2Fzc2VtYmxlci5tb3ZfaW1tOCgtMzEsIHNjcik7CisgICAgICAgICAgICBt
X2Fzc2VtYmxlci5tb3ZsX3JyKGRlc3QsIHNjcjEpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIu
c2hhX3JyKHNjcjEsIHNjcik7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zdHNtYWNoKHNjcik7
CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5jbXBsX3JyKHNjciwgc2NyMSwgWmVybyk7CisgICAg
ICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IxKTsKKyAgICAgICAgICAgIGNvbmQgPSBOb3RFcXVh
bDsKKyAgICAgICAgfSBlbHNlIGlmIChjb25kID09IFNpZ25lZCkgeworICAgICAgICAgICAgLy8g
Q2hlY2sgaWYgZGVzdCBpcyBuZWdhdGl2ZS4KKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmltdWxs
X3JyKHNyYywgZGVzdCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zdHNtYWNsKGRlc3QpOwor
ICAgICAgICAgICAgbV9hc3NlbWJsZXIuY21wbF9pcigwLCBkZXN0LCBMZXNzVGhhbik7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5pbXVsbF9ycihzcmMsIGRlc3Qp
OworICAgICAgICAgICAgbV9hc3NlbWJsZXIuc3RzbWFjbChkZXN0KTsKKyAgICAgICAgICAgIG1f
YXNzZW1ibGVyLmNtcGxfaXIoMCwgZGVzdCwgY29uZCk7CisgICAgICAgIH0KKworICAgICAgICBt
X2Fzc2VtYmxlci5lbnN1cmVTcGFjZShtX2Fzc2VtYmxlci5tYXhJbnN0cnVjdGlvblNpemUgKyA2
LCBzaXplb2YodWludDMyX3QpKTsKKyAgICAgICAgSnVtcCBtX2p1bXAgPSAoY29uZCA9PSBOb3RF
cXVhbCkgPyBKdW1wKG1fYXNzZW1ibGVyLmpuZSgpKSA6IEp1bXAobV9hc3NlbWJsZXIuamUoKSk7
CisKKyAgICAgICAgbV9hc3NlbWJsZXIuTG9hZENvbnN0YW50VW5jaGVja2VkU2l6ZSgweDAsIHNj
cik7CisKKyAgICAgICAgbV9hc3NlbWJsZXIubm9wKCk7CisgICAgICAgIG1fYXNzZW1ibGVyLm5v
cCgpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworCisgICAgICAgIHJldHVybiBtX2p1
bXA7CisgICAgfQorICAgIAorICAgIEp1bXAgYnJhbmNoTXVsMzIoQ29uZGl0aW9uIGNvbmQsIElt
bTMyIGltbSwgUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAg
IEFTU0VSVCgoY29uZCA9PSBPdmVyZmxvdykgfHwgKGNvbmQgPT0gU2lnbmVkKSB8fCAoY29uZCA9
PSBaZXJvKSB8fCAoY29uZCA9PSBOb25aZXJvKSk7CisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0g
Y2xhaW1TY3JhdGNoKCk7CisgICAgICAgIG1vdmUoaW1tLCBzY3IpOworICAgICAgICBpZiAoY29u
ZCA9PSBPdmVyZmxvdykgeworICAgICAgICAgICAgUmVnaXN0ZXJJRCBzY3IxID0gY2xhaW1TY3Jh
dGNoKCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5kbXVsbF9ycihzcmMsIHNjcik7CisgICAg
ICAgICAgICBtX2Fzc2VtYmxlci5zdHNtYWNsKGRlc3QpOworCisgICAgICAgICAgICBtX2Fzc2Vt
Ymxlci5tb3ZfaW1tOCgtMzEsIHNjcik7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5tb3ZsX3Jy
KGRlc3QsIHNjcjEpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuc2hhX3JyKHNjcjEsIHNjcik7
CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zdHNtYWNoKHNjcik7CisgICAgICAgICAgICBtX2Fz
c2VtYmxlci5jbXBsX3JyKHNjciwgc2NyMSwgWmVybyk7CisgICAgICAgICAgICByZWxlYXNlU2Ny
YXRjaChzY3IxKTsKKyAgICAgICAgICAgIGNvbmQgPSBOb3RFcXVhbDsKKyAgICAgICAgfSBlbHNl
IGlmIChjb25kID09IFNpZ25lZCkgeworICAgICAgICAgICAgLy8gQ2hlY2sgaWYgZGVzdCBpcyBu
ZWdhdGl2ZS4KKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmltdWxsX3JyKHNyYywgZGVzdCk7Cisg
ICAgICAgICAgICBtX2Fzc2VtYmxlci5zdHNtYWNsKGRlc3QpOworICAgICAgICAgICAgbV9hc3Nl
bWJsZXIuY21wbF9pcigwLCBkZXN0LCBMZXNzVGhhbik7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICBtX2Fzc2VtYmxlci5pbXVsbF9ycihzcmMsIGRlc3QpOworICAgICAgICAgICAgbV9h
c3NlbWJsZXIuc3RzbWFjbChkZXN0KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmNtcGxfaXIo
MCwgZGVzdCwgY29uZCk7CisgICAgICAgIH0KKworICAgICAgICBtX2Fzc2VtYmxlci5lbnN1cmVT
cGFjZShtX2Fzc2VtYmxlci5tYXhJbnN0cnVjdGlvblNpemUgKyA2LCBzaXplb2YodWludDMyX3Qp
KTsKKyAgICAgICAgSnVtcCBtX2p1bXAgPSAoY29uZCA9PSBOb3RFcXVhbCkgPyBKdW1wKG1fYXNz
ZW1ibGVyLmpuZSgpKSA6IEp1bXAobV9hc3NlbWJsZXIuamUoKSk7CisKKyAgICAgICAgbV9hc3Nl
bWJsZXIuTG9hZENvbnN0YW50VW5jaGVja2VkU2l6ZSgweDAsIHNjcik7CisKKyAgICAgICAgbV9h
c3NlbWJsZXIubm9wKCk7CisgICAgICAgIG1fYXNzZW1ibGVyLm5vcCgpOworICAgICAgICByZWxl
YXNlU2NyYXRjaChzY3IpOworCisgICAgICAgIHJldHVybiBtX2p1bXA7CisgICAgfQorICAgIAor
ICAgIEp1bXAgYnJhbmNoU3ViMzIoQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgc3JjLCBSZWdp
c3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBBU1NFUlQoKGNvbmQgPT0gT3ZlcmZsb3cpIHx8
IChjb25kID09IFNpZ25lZCkgfHwgKGNvbmQgPT0gWmVybykgfHwgKGNvbmQgPT0gTm9uWmVybykp
OworICAgICAgICBKdW1wIG1fanVtcDsKKworICAgICAgICBpZiAoY29uZCA9PSBPdmVyZmxvdykg
eworICAgICAgICAgICAgbV9hc3NlbWJsZXIuc3VidmxfcnIoc3JjLCBkZXN0KTsKKyAgICAgICAg
ICAgIG1fYXNzZW1ibGVyLmVuc3VyZVNwYWNlKG1fYXNzZW1ibGVyLm1heEluc3RydWN0aW9uU2l6
ZSArIDgsIHNpemVvZih1aW50MzJfdCkpOworICAgICAgICAgICAgbV9qdW1wID0gSnVtcChtX2Fz
c2VtYmxlci5qZSgpKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChjb25kID09IFNpZ25lZCkg
eworICAgICAgICAgICAgLy8gQ2hlY2sgaWYgZGVzdCBpcyBuZWdhdGl2ZS4KKyAgICAgICAgICAg
IG1fYXNzZW1ibGVyLnN1YmxfcnIoc3JjLCBkZXN0KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVy
LmNtcGxfaXIoMCwgZGVzdCwgTGVzc1RoYW4pOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuZW5z
dXJlU3BhY2UobV9hc3NlbWJsZXIubWF4SW5zdHJ1Y3Rpb25TaXplICsgOCwgc2l6ZW9mKHVpbnQz
Ml90KSk7CisgICAgICAgICAgICBtX2p1bXAgPSBKdW1wKG1fYXNzZW1ibGVyLmplKCkpOworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKChjb25kID09IFplcm8pIHx8IChjb25kID09IE5vblplcm8p
KSB7CisgICAgICAgICAgICBzdWIzMihzcmMsIGRlc3QpOworICAgICAgICAgICAgbV9hc3NlbWJs
ZXIuY21wbF9pcigwLCBkZXN0LCBjb25kKTsKKworICAgICAgICAgICAgbV9hc3NlbWJsZXIuZW5z
dXJlU3BhY2UobV9hc3NlbWJsZXIubWF4SW5zdHJ1Y3Rpb25TaXplICsgOCwgc2l6ZW9mKHVpbnQz
Ml90KSk7CisgICAgICAgICAgICBtX2p1bXAgPSAoY29uZCA9PSBOb3RFcXVhbCkgPyBKdW1wKG1f
YXNzZW1ibGVyLmpuZSgpKSA6IEp1bXAobV9hc3NlbWJsZXIuamUoKSk7CisgICAgICAgIH0KKwor
ICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBtX2Fzc2Vt
Ymxlci5Mb2FkQ29uc3RhbnRVbmNoZWNrZWRTaXplKDB4MCwgc2NyKTsKKyAgICAgICAgbV9hc3Nl
bWJsZXIubm9wKCk7CisgICAgICAgIG1fYXNzZW1ibGVyLm5vcCgpOworICAgICAgICByZWxlYXNl
U2NyYXRjaChzY3IpOworCisgICAgICAgIHJldHVybiBtX2p1bXA7CisgICAgfQorICAgIAorICAg
IEp1bXAgYnJhbmNoU3ViMzIoQ29uZGl0aW9uIGNvbmQsIEltbTMyIGltbSwgUmVnaXN0ZXJJRCBk
ZXN0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKChjb25kID09IE92ZXJmbG93KSB8fCAoY29uZCA9
PSBTaWduZWQpIHx8IChjb25kID09IFplcm8pIHx8IChjb25kID09IE5vblplcm8pKTsKKworICAg
ICAgICBKdW1wIG1fanVtcDsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2go
KTsKKyAgICAgICAgbW92ZShpbW0sIHNjcik7CisKKyAgICAgICAgaWYgKGNvbmQgPT0gT3ZlcmZs
b3cpIHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnN1YnZsX3JyKHNjciwgZGVzdCk7CisgICAg
ICAgICAgICBtX2Fzc2VtYmxlci5lbnN1cmVTcGFjZShtX2Fzc2VtYmxlci5tYXhJbnN0cnVjdGlv
blNpemUgKyA4LCBzaXplb2YodWludDMyX3QpKTsKKyAgICAgICAgICAgIG1fanVtcCA9IEp1bXAo
bV9hc3NlbWJsZXIuamUoKSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNvbmQgPT0gU2lnbmVk
KSB7CisgICAgICAgICAgICAvLyBDaGVjayBpZiBkZXN0IGlzIG5lZ2F0aXZlLgorICAgICAgICAg
ICAgbV9hc3NlbWJsZXIuc3VibF9ycihzY3IsIGRlc3QpOworICAgICAgICAgICAgbV9hc3NlbWJs
ZXIuY21wbF9pcigwLCBkZXN0LCBMZXNzVGhhbik7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5l
bnN1cmVTcGFjZShtX2Fzc2VtYmxlci5tYXhJbnN0cnVjdGlvblNpemUgKyA4LCBzaXplb2YodWlu
dDMyX3QpKTsKKyAgICAgICAgICAgIG1fanVtcCA9IEp1bXAobV9hc3NlbWJsZXIuamUoKSk7Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAoKGNvbmQgPT0gWmVybykgfHwgKGNvbmQgPT0gTm9uWmVy
bykpIHsKKyAgICAgICAgICAgIHN1YjMyKHNjciwgZGVzdCk7CisKKyAgICAgICAgICAgIG1fYXNz
ZW1ibGVyLmNtcGxfaXIoMCwgZGVzdCwgY29uZCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5l
bnN1cmVTcGFjZShtX2Fzc2VtYmxlci5tYXhJbnN0cnVjdGlvblNpemUgKyA4LCBzaXplb2YodWlu
dDMyX3QpKTsKKworICAgICAgICAgICAgbV9qdW1wID0gKGNvbmQgPT0gTm90RXF1YWwpID8gSnVt
cChtX2Fzc2VtYmxlci5qbmUoKSkgOiBKdW1wKG1fYXNzZW1ibGVyLmplKCkpOworICAgICAgICB9
CisKKyAgICAgICAgbV9hc3NlbWJsZXIuTG9hZENvbnN0YW50VW5jaGVja2VkU2l6ZSgweDAsIHNj
cik7CisgICAgICAgIG1fYXNzZW1ibGVyLm5vcCgpOworICAgICAgICBtX2Fzc2VtYmxlci5ub3Ao
KTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKworICAgICAgICByZXR1cm4gbV9qdW1w
OworCisgICAgfQorCisgICAgSnVtcCBicmFuY2hPcjMyKENvbmRpdGlvbiBjb25kLCBSZWdpc3Rl
cklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKChjb25kID09
IFNpZ25lZCkgfHwgKGNvbmQgPT0gWmVybykgfHwgKGNvbmQgPT0gTm9uWmVybykpOworICAgICAg
ICBKdW1wIG1fanVtcDsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsK
KworICAgICAgICBpZiAoY29uZCA9PSBTaWduZWQpIHsKKyAgICAgICAgICAgIG9yMzIoc3JjLCBk
ZXN0KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmNtcGxfaXIoMCwgZGVzdCwgTGVzc1RoYW4p
OworICAgICAgICAgICAgbV9hc3NlbWJsZXIuZW5zdXJlU3BhY2UobV9hc3NlbWJsZXIubWF4SW5z
dHJ1Y3Rpb25TaXplICsgOCwgc2l6ZW9mKHVpbnQzMl90KSk7CisgICAgICAgICAgICBtX2p1bXAg
PSBKdW1wKG1fYXNzZW1ibGVyLmplKCkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
b3IzMihzcmMsIGRlc3QpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuY21wbF9pcigwLCBkZXN0
LCBjb25kKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmVuc3VyZVNwYWNlKG1fYXNzZW1ibGVy
Lm1heEluc3RydWN0aW9uU2l6ZSArIDgsIHNpemVvZih1aW50MzJfdCkpOworICAgICAgICAgICAg
bV9qdW1wID0gKGNvbmQgPT0gTm90RXF1YWwpID8gSnVtcChtX2Fzc2VtYmxlci5qbmUoKSkgOiBK
dW1wKG1fYXNzZW1ibGVyLmplKCkpOworICAgICAgICB9CisKKyAgICAgICAgbV9hc3NlbWJsZXIu
TG9hZENvbnN0YW50VW5jaGVja2VkU2l6ZSgweDAsIHNjcik7CisgICAgICAgIG1fYXNzZW1ibGVy
Lm5vcCgpOworICAgICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKKyAgICAgICAgcmVsZWFzZVNjcmF0
Y2goc2NyKTsKKworICAgICAgICByZXR1cm4gbV9qdW1wOworICAgIH0KKyAgICAKKyAgICB2b2lk
IGJyYW5jaENvbnZlcnREb3VibGVUb0ludDMyKEZQUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQg
ZGVzdCwgSnVtcExpc3QmIGZhaWx1cmVDYXNlcywgRlBSZWdpc3RlcklEIGZwVGVtcCkKKyAgICB7
CisgICAgICAgIG1fYXNzZW1ibGVyLmZ0cmNfZHJtX2ZwdWwoc3JjKTsKKyAgICAgICAgbV9hc3Nl
bWJsZXIuc3RzX2ZwdWxfcm4oZGVzdCk7CisKKyAgICAgICAgLy8gQ29udmVydCB0aGUgaW50ZWdl
ciByZXN1bHQgYmFjayB0byBmbG9hdCAmIGNvbXBhcmUgdG8gdGhlIG9yaWdpbmFsIHZhbHVlIC0g
aWYgbm90IGVxdWFsIG9yIHVub3JkZXJlZCAoTmFOKSB0aGVuIGp1bXAuCisgICAgICAgIG1fYXNz
ZW1ibGVyLmxkc3JtX2ZwdWwoZGVzdCk7CisgICAgICAgIG1fYXNzZW1ibGVyLmZsb2F0X2ZwdWxf
ZHJuKGZzY3JhdGNoKTsKKworICAgICAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKGJyYW5jaERvdWJs
ZShEb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkLCBzcmMsIGZzY3JhdGNoKSk7CisgICAgICAgIGZh
aWx1cmVDYXNlcy5hcHBlbmQoYnJhbmNoVGVzdDMyKFplcm8sIGRlc3QpKTsKKyAgICB9CisKKyAg
ICB2b2lkIG5lZzMyKFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIu
bmVnKGRzdCwgZHN0KTsKKyAgICB9CisKKyAgICB2b2lkIG5vdDMyKFJlZ2lzdGVySUQgZHN0KQor
ICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubm90bF9yKGRzdCwgZHN0KTsKKyAgICB9CisKKyAg
ICB2b2lkIHVyc2hpZnQzMihSZWdpc3RlcklEIHNoaWZ0YW1vdW50LCBSZWdpc3RlcklEIGRlc3Qp
CisgICAgeworICAgICAgICAvKkluIHRoZSBjYXNlIHdoZXJlIHNoaWZ0YW1vdW50IGluZGljYXRl
cyBhIGxvZ2ljYWwgcmlnaHQgc2hpZnQgYnkgMzIsIHRoZSByZXN1bHQgaXMgMCovCisgICAgICAg
IG1fYXNzZW1ibGVyLmNtcGxfaXIoMzIsIHNoaWZ0YW1vdW50LCBFcXVhbCk7CisgICAgICAgIG1f
YXNzZW1ibGVyLmVuc3VyZVNwYWNlKG1fYXNzZW1ibGVyLm1heEluc3RydWN0aW9uU2l6ZSArIDQp
OworICAgICAgICBtX2Fzc2VtYmxlci5icmFuY2goQlRfT1BDT0RFLCAxKTsKKyAgICAgICAgbV9h
c3NlbWJsZXIubmVnKHNoaWZ0YW1vdW50LCBzaGlmdGFtb3VudCk7CisgICAgICAgIG1fYXNzZW1i
bGVyLnNobGxfcnIoZGVzdCwgc2hpZnRhbW91bnQpOworICAgIH0KKworICAgIHZvaWQgdXJzaGlm
dDMyKEltbTMyIGltbSwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJ
RCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuTG9hZENvbnN0YW50
KC0oaW1tLm1fdmFsdWUpLCBzY3IpOworICAgICAgICBtX2Fzc2VtYmxlci5zaGFfcnIoZGVzdCwg
c2NyKTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICB9CisKKyAgICBDYWxsIGNh
bGwoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIENhbGwobV9hc3NlbWJsZXIuY2FsbCgpLCBDYWxs
OjpMaW5rYWJsZSk7CisgICAgfQorICAgIAorICAgIENhbGwgbmVhckNhbGwoKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIENhbGwobV9hc3NlbWJsZXIuY2FsbCgpLCBDYWxsOjpMaW5rYWJsZU5lYXIp
OworICAgIH0KKworICAgIENhbGwgY2FsbChSZWdpc3RlcklEIHRhcmdldCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBDYWxsKG1fYXNzZW1ibGVyLmNhbGwodGFyZ2V0KSwgQ2FsbDo6Tm9uZSk7Cisg
ICAgfQorCisgICAgdm9pZCBicmVha3BvaW50KCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVy
LmJrcHQoKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubm9wKCk7CisgICAgfQorCisgICAgdm9pZCBy
ZXQoKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIucmV0KCk7CisgICAgICAgIG1fYXNzZW1i
bGVyLm5vcCgpOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoUHRyV2l0aFBhdGNoKENvbmRpdGlv
biBjb25kLCBSZWdpc3RlcklEIGxlZnQsIERhdGFMYWJlbFB0ciYgZGF0YUxhYmVsLCBJbW1QdHIg
aW5pdGlhbFJpZ2h0VmFsdWUgPSBJbW1QdHIoMCkpCisgICAgeworICAgICAgICBSZWdpc3RlcklE
IGRhdGFUZW1wUmVnaXN0ZXIgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgSnVtcCBtX2p1bXA7
CisgICAgICAgIAorICAgICAgICBkYXRhTGFiZWwgPSBtb3ZlV2l0aFBhdGNoKGluaXRpYWxSaWdo
dFZhbHVlLCBkYXRhVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgCisgICAgICAgIG1fYXNzZW1ibGVy
LmNtcGxfcnIoZGF0YVRlbXBSZWdpc3RlciwgbGVmdCwgY29uZCk7CisKKyAgICAgICAgbV9qdW1w
ID0gKGNvbmQgPT0gTm90RXF1YWwpID8gSnVtcChtX2Fzc2VtYmxlci5qbmUoKSkgOiBKdW1wKG1f
YXNzZW1ibGVyLmplKCkpOworICAgICAgICAKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFp
bVNjcmF0Y2goKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuTG9hZENvbnN0YW50VW5jaGVja2VkU2l6
ZSgweDAsIHNjcik7CisgICAgICAgIG1fYXNzZW1ibGVyLm5vcCgpOworICAgICAgICBtX2Fzc2Vt
Ymxlci5ub3AoKTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICAgICAgcmVsZWFz
ZVNjcmF0Y2goZGF0YVRlbXBSZWdpc3Rlcik7CisgICAgICAgIAorICAgICAgICByZXR1cm4gbV9q
dW1wOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoUHRyV2l0aFBhdGNoKENvbmRpdGlvbiBjb25k
LCBBZGRyZXNzIGxlZnQsIERhdGFMYWJlbFB0ciYgZGF0YUxhYmVsLCBJbW1QdHIgaW5pdGlhbFJp
Z2h0VmFsdWUgPSBJbW1QdHIoMCkpCisgICAgeworICAgICAgICBKdW1wIG1fanVtcDsKKyAgICAg
ICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKworICAgICAgICBtX2Fzc2VtYmxl
ci5Mb2FkQ29uc3RhbnQobGVmdC5vZmZzZXQsIHNjciwgZmFsc2UpOworICAgICAgICBtX2Fzc2Vt
Ymxlci5hZGRsX3JyKGxlZnQuYmFzZSwgc2NyKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubW92bF9t
cihzY3IsIHNjcik7CisKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IxID0gY2xhaW1TY3JhdGNoKCk7
CisgICAgICAgIGRhdGFMYWJlbCA9IG1vdmVXaXRoUGF0Y2goaW5pdGlhbFJpZ2h0VmFsdWUsIHNj
cjEpOworCisgICAgICAgIG1fYXNzZW1ibGVyLmNtcGxfcnIoc2NyMSwgc2NyLCBjb25kKTsKKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgbV9qdW1wID0gKGNvbmQgPT0gTm90RXF1YWwpID8gSnVt
cChtX2Fzc2VtYmxlci5qbmUoKSkgOiBKdW1wKG1fYXNzZW1ibGVyLmplKCkpOworCisgICAgICAg
IG1fYXNzZW1ibGVyLkxvYWRDb25zdGFudFVuY2hlY2tlZFNpemUoMHgwLCBzY3IpOworICAgICAg
ICBtX2Fzc2VtYmxlci5ub3AoKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubm9wKCk7CisgICAgICAg
IAorICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgICAgICByZWxlYXNlU2NyYXRjaChz
Y3IxKTsKKyAgICAgICAgcmV0dXJuIG1fanVtcDsKKyAgICB9CisgICAgCisgICAgRGF0YUxhYmVs
UHRyIHN0b3JlUHRyV2l0aFBhdGNoKEltbVB0ciBpbml0aWFsVmFsdWUsIEltcGxpY2l0QWRkcmVz
cyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2go
KTsKKyAgICAgICAgRGF0YUxhYmVsUHRyIGxhYmVsID0gbW92ZVdpdGhQYXRjaChpbml0aWFsVmFs
dWUsIHNjcik7CisgICAgICAgIHN0b3JlMzIoc2NyLCBhZGRyZXNzKTsKKyAgICAgICAgcmVsZWFz
ZVNjcmF0Y2goc2NyKTsKKyAgICAgICAgcmV0dXJuIGxhYmVsOworICAgIH0KKworICAgIERhdGFM
YWJlbFB0ciBzdG9yZVB0cldpdGhQYXRjaChJbXBsaWNpdEFkZHJlc3MgYWRkcmVzcykgeyByZXR1
cm4gc3RvcmVQdHJXaXRoUGF0Y2goSW1tUHRyKDApLCBhZGRyZXNzKTsgfQorCisKKyAgICBDYWxs
IHRhaWxSZWN1cnNpdmVDYWxsKCkKKyAgICB7CisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xh
aW1TY3JhdGNoKCk7CisgICAgICAgIG1fYXNzZW1ibGVyLkxvYWRDb25zdGFudCgweDAsIHNjciwg
dHJ1ZSk7CisKKyAgICAgICAgSnVtcCBtX2p1bXAgPSBKdW1wKG1fYXNzZW1ibGVyLmptcChzY3Ip
KTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKworICAgICAgICByZXR1cm4gQ2FsbDo6
ZnJvbVRhaWxKdW1wKG1fanVtcCk7CisgICAgfQorCisgICAgQ2FsbCBtYWtlVGFpbFJlY3Vyc2l2
ZUNhbGwoSnVtcCBvbGRKdW1wKQorICAgIHsKKyAgICAgICAgb2xkSnVtcC5saW5rKHRoaXMpOwor
ICAgICAgICByZXR1cm4gdGFpbFJlY3Vyc2l2ZUNhbGwoKTsKKyAgICB9CisKKyAgICBpbnQgc2l6
ZU9mQ29uc3RhbnRQb29sKCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX2Fzc2VtYmxlci5zaXpl
T2ZDb25zdGFudFBvb2woKTsKKyAgICB9CisKKyAgICBwcml2YXRlOgorICAgIGZyaWVuZCBjbGFz
cyBMaW5rQnVmZmVyOworICAgIGZyaWVuZCBjbGFzcyBSZXBhdGNoQnVmZmVyOworCisgICAgc3Rh
dGljIHZvaWQgbGlua0NhbGwodm9pZCogY29kZSwgQ2FsbCBjYWxsLCBGdW5jdGlvblB0ciBmdW5j
dGlvbikKKyAgICB7CisgICAgICAgIFNINEFzc2VtYmxlcjo6bGlua0NhbGwoY29kZSwgY2FsbC5t
X2ptcCwgZnVuY3Rpb24udmFsdWUoKSk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgcmVwYXRj
aENhbGwoQ29kZUxvY2F0aW9uQ2FsbCBjYWxsLCBDb2RlTG9jYXRpb25MYWJlbCBkZXN0aW5hdGlv
bikKKyAgICB7CisgICAgICAgIFNINEFzc2VtYmxlcjo6cmVsaW5rQ2FsbChjYWxsLmRhdGFMb2Nh
dGlvbigpLCBkZXN0aW5hdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICB9CisKKyAgICBz
dGF0aWMgdm9pZCByZXBhdGNoQ2FsbChDb2RlTG9jYXRpb25DYWxsIGNhbGwsIEZ1bmN0aW9uUHRy
IGRlc3RpbmF0aW9uKQorICAgIHsKKyAgICAgICAgU0g0QXNzZW1ibGVyOjpyZWxpbmtDYWxsKGNh
bGwuZGF0YUxvY2F0aW9uKCksIGRlc3RpbmF0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAg
IH0KKworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoQVNTRU1C
TEVSKQorCisjZW5kaWYgLy8gTWFjcm9Bc3NlbWJsZXJTSDRfaApkaWZmIC0tZ2l0IGEvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL1NINEFzc2VtYmxlci5oIGIvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL1NINEFzc2VtYmxlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYw
ZmFiNzUKLS0tIC9kZXYvbnVsbAorKysgYi9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvU0g0QXNz
ZW1ibGVyLmgKQEAgLTAsMCArMSwxODUzIEBACisKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkt
MjAxMCBTVE1pY3JvZWxlY3Ryb25pY3MuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBTSDRBc3NlbWJsZXJfaAor
I2RlZmluZSBTSDRBc3NlbWJsZXJfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNp
ZiBFTkFCTEUoQVNTRU1CTEVSKSAmJiBDUFUoU0g0KQoraW5saW5lIHVpbnQxNl90IEdFVE9QQ09E
RUdST1VQRTEodWludDE2X3Qgb3BjLCBpbnQgcm0sIGludCBybikKK3sKKyAgICByZXR1cm4gKChv
cGMpIHwgKCgocm0pICYgMHhmKSA8PCA4KSB8KCgocm4pICYgMHhmKSA8PCA0KSk7Cit9CisKK2lu
bGluZSB1aW50MTZfdCBHRVRPUENPREVHUk9VUEUyKHVpbnQxNl90IG9wYywgaW50IHJtKQorewor
ICAgIHJldHVybiAoKG9wYykgfCAoKChybSkgJiAweGYpIDw8IDgpKTsKK30KKworaW5saW5lIHVp
bnQxNl90IEdFVE9QQ09ERUdST1VQRTModWludDE2X3Qgb3BjLCBpbnQgcm0sIGludCBybikKK3sK
KyAgICByZXR1cm4gKChvcGMpIHwgKCgocm0pICYgMHhmKSA8PCA4KSB8KChybikgJiAweGZmKSk7
Cit9CisKK2lubGluZSB1aW50MTZfdCBHRVRPUENPREVHUk9VUEU0KHVpbnQxNl90IG9wYywgaW50
IHJtLCBpbnQgcm4sIGludCBvZmZzZXQpCit7CisgICAgcmV0dXJuICAgKChvcGMpIHwgKCgocm0p
ICYgMHhmKSA8PCA4KSB8KCgocm4pICYgMHhmKSA8PDQpIHwoKG9mZnNldCkgJiAweGYpKTsKK30K
KworaW5saW5lIHVpbnQxNl90IEdFVE9QQ09ERUdST1VQRTUodWludDE2X3Qgb3BjLCBpbnQgcm0p
Cit7CisgICAgcmV0dXJuICAgKChvcGMpIHwgKChybSkgJiAweGZmKSk7Cit9CisKK2lubGluZSB1
aW50MTZfdCBHRVRPUENPREVHUk9VUEU2KHVpbnQxNl90IG9wYywgaW50IHJtKQoreworICAgIHJl
dHVybiAgICgob3BjKSB8ICgocm0pICYgMHhmZmYpKTsKK30KKworaW5saW5lIHVpbnQxNl90IEdF
VE9QQ09ERUdST1VQRTcodWludDE2X3Qgb3BjLCBpbnQgcm0pCit7CisgICAgcmV0dXJuICAgKChv
cGMpIHwgKCgocm0pICYgMHg3KSA8PCA5KSk7Cit9CisKK2lubGluZSB1aW50MTZfdCBHRVRPUENP
REVHUk9VUEU4KHVpbnQxNl90IG9wYywgaW50IHJtLCBpbnQgcm4pCit7CisgICAgcmV0dXJuICAg
KChvcGMpIHwgKCgocm0pICYgMHg3KSA8PCA5KSB8KCgocm4pICYgMHg3KSA8PDUpKTsKK30KKwor
aW5saW5lIHVpbnQxNl90IEdFVE9QQ09ERUdST1VQRTkodWludDE2X3Qgb3BjLCBpbnQgcm0sIGlu
dCBybikKK3sKKyAgICByZXR1cm4gICAoKG9wYykgfCAoKChybSkgJiAweGYpIDw8IDgpIHwoKChy
bikgJiAweDcpIDw8NSkpOworfQorCitpbmxpbmUgdWludDE2X3QgR0VUT1BDT0RFR1JPVVBFMTAo
dWludDE2X3Qgb3BjLCBpbnQgcm0sIGludCBybikKK3sKKyAgICByZXR1cm4gICAoKG9wYykgfCAo
KChybSkgJiAweDcpIDw8IDkpIHwoKChybikgJiAweEYpIDw8NCkpOworfQorCitpbmxpbmUgdWlu
dDE2X3QgR0VUT1BDT0RFR1JPVVBFMTEodWludDE2X3Qgb3BjLCBpbnQgcm0sIGludCBybikKK3sK
KyAgICByZXR1cm4gICAoKG9wYykgfCAoKChybSkgJiAweGYpIDw8IDQpIHwoKChybikgJiAweGYp
KSk7Cit9CisKKyNkZWZpbmUgU0VDT05EXzRfQklUUyh4KSAgICAoKCh4KSAmIDB4ZjAwKSA+PiA4
KQorI2RlZmluZSBUSElSRF80X0JJVFMoeCkgICAgICgoKHgpICYgMHhmMCkgPj4gNCkKKyNkZWZp
bmUgRk9VUlRIXzRfQklUUyh4KSAgICAoKHgpICYgMHhmKQorI2RlZmluZSBTRUNPTkRfOF9CSVRT
KHgpICAgICgoeCkgJiAweGZmKQorI2RlZmluZSBSSUdIVF8xMl9CSVRTKHgpICAgICgoeCkgJiAw
eGZmZikKKyNkZWZpbmUgU0VDT05EX0RfM19CSVRTKHgpICAgICgoKHgpICYgMHhFMDApID4+IDkp
CisjZGVmaW5lIFRISVJEX0RfM19CSVRTKHgpICAgICAoKCh4KSAmIDB4RTApID4+IDUpCisKKwor
I2RlZmluZSBNQVNLNCAgICAgKCgweGYgPDwgMTIpIHwgMHhmKQorI2RlZmluZSBNQVNLMyAgICAg
KCgweGYgPDwgMTIpIHwgMHhmZikKKyNkZWZpbmUgTUFTSzIgICAgICgweGZmIDw8IDgpCisjZGVm
aW5lIE1BU0sxICAgICAoMHhmIDw8IDEyKQorCisjaW5jbHVkZSAiQXNzZW1ibGVyQnVmZmVyLmgi
CisjaW5jbHVkZSAiQXNzZW1ibGVyQnVmZmVyV2l0aENvbnN0YW50UG9vbC5oIgorI2luY2x1ZGUg
PHN0ZGludC5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsKK3R5cGVkZWYgdWludDE2X3QgU0g0V29yZDsKKwor
ZW51bSB7CisgICAgICAgIElOVkFMSURfT1BDT0RFID0gMHhmZmZmLAorICAgICAgICBBRERfT1BD
T0RFID0gMHgzMDBDLAorICAgICAgICBBRERJTU1fT1BDT0RFID0gMHg3MDAwLAorICAgICAgICBB
RERDX09QQ09ERSA9IDB4MzAwRSwKKyAgICAgICAgQUREVl9PUENPREUgPSAweDMwMEYsCisgICAg
ICAgIEFORF9PUENPREUgPSAweDIwMDksCisgICAgICAgIEFORElNTV9PUENPREUgPSAweEM5MDAs
CisgICAgICAgIERJVjBfT1BDT0RFID0gMHgyMDA3LAorICAgICAgICBESVYxX09QQ09ERSA9IDB4
MzAwNCwKKyAgICAgICAgQkZfT1BDT0RFID0gMHg4QjAwLAorICAgICAgICBCRlNfT1BDT0RFID0g
MHg4RjAwLAorICAgICAgICBCUkFfT1BDT0RFID0gMFhBMDAwLAorICAgICAgICBCUkFGX09QQ09E
RSA9IDB4MDAyMywKKyAgICAgICAgTk9QX09QQ09ERSA9IDB4MDAwOSwKKyAgICAgICAgQlNSX09Q
Q09ERSA9IDB4QjAwMCwKKyAgICAgICAgUlRTX09QQ09ERSA9IDB4MDAwQiwKKyAgICAgICAgQlRf
T1BDT0RFID0gMHg4OTAwLAorICAgICAgICBCVFNfT1BDT0RFID0gMHg4RDAwLAorICAgICAgICBC
U1JGX09QQ09ERSA9IDB4MDAwMywKKyAgICAgICAgQlJLX09QQ09ERSA9IDB4MDAzQiwKKyAgICAg
ICAgRlRSQ19PUENPREUgPSAweEYwM0QsCisgICAgICAgIENNUEVRX09QQ09ERSA9IDB4MzAwMCwK
KyAgICAgICAgQ01QRVFJTU1fT1BDT0RFID0gMHg4ODAwLAorICAgICAgICBDTVBHRV9PUENPREUg
PSAweDMwMDMsCisgICAgICAgIENNUEdUX09QQ09ERSA9IDB4MzAwNywKKyAgICAgICAgQ01QSElf
T1BDT0RFID0gMHgzMDA2LAorICAgICAgICBDTVBIU19PUENPREUgPSAweDMwMDIsCisgICAgICAg
IENNUFBMX09QQ09ERSA9IDB4NDAxNSwKKyAgICAgICAgQ01QUFpfT1BDT0RFID0gMHg0MDExLAor
ICAgICAgICBDTVBTVFJfT1BDT0RFID0gMHgyMDBDLAorICAgICAgICBEVF9PUENPREUgPSAweDQw
MTAsCisgICAgICAgIEZDTVBFUV9PUENPREUgPSAweEYwMDQsCisgICAgICAgIEZDTVBHVF9PUENP
REUgPSAweEYwMDUsCisgICAgICAgIEZNT1ZfT1BDT0RFID0gMHhGMDBDLAorICAgICAgICBETU9W
X09QQ09ERSA9IDB4MUUwMTksCisgICAgICAgIERNT1ZfV1JJVEVfUjBSTl9PUENPREUgPSAweDFF
MDBGLAorICAgICAgICBETU9WX1JFQURfUjBSTl9PUENPREUgPSAweDFFMDBELAorICAgICAgICBG
QUREX09QQ09ERSA9IDB4RjAwMCwKKyAgICAgICAgRk1VTF9PUENPREUgPSAweEYwMDIsCisgICAg
ICAgIEZTVUJfT1BDT0RFID0gMHhGMDAxLAorICAgICAgICBGRElWX09QQ09ERSA9IDB4RjAwMywK
KyAgICAgICAgRk5FR19PUENPREUgPSAweEYwNEQsCisgICAgICAgIEpNUF9PUENPREUgPSAweDQw
MkIsCisgICAgICAgIEpTUl9PUENPREUgPSAweDQwMEIsCisgICAgICAgIExEU1BSX09QQ09ERSA9
IDB4NDAyQSwKKyAgICAgICAgTERTTFBSX09QQ09ERSA9IDB4NDAyNiwKKyAgICAgICAgTU9WX09Q
Q09ERSA9IDB4NjAwMywKKyAgICAgICAgTU9WSU1NX09QQ09ERSA9IDB4RTAwMCwKKyAgICAgICAg
TU9WQl9XUklURV9STl9PUENPREUgPSAweDIwMDAsCisgICAgICAgIE1PVkJfV1JJVEVfUk5ERUNf
T1BDT0RFID0gMHgyMDA0LAorICAgICAgICBNT1ZCX1dSSVRFX1IwUk5fT1BDT0RFID0gMHgwMDA0
LAorICAgICAgICBNT1ZCX1dSSVRFX09GRkdCUl9PUENPREUgPSAweEMwMDAsCisgICAgICAgIE1P
VkJfV1JJVEVfT0ZGUk5fT1BDT0RFID0gMHg4MDAwLAorICAgICAgICBNT1ZCX1JFQURfUk1fT1BD
T0RFID0gMHg2MDAwLAorICAgICAgICBNT1ZCX1JFQURfUk1JTkNfT1BDT0RFID0gMHg2MDA0LAor
ICAgICAgICBNT1ZCX1JFQURfUjBSTV9PUENPREUgPSAweDAwMEMsCisgICAgICAgIE1PVkJfUkVB
RF9PRkZHQlJfT1BDT0RFID0gMHhDNDAwLAorICAgICAgICBNT1ZCX1JFQURfT0ZGUk1fT1BDT0RF
ID0gMHg4NDAwLAorICAgICAgICBNT1ZMX1dSSVRFX1JOX09QQ09ERSA9IDB4MjAwMiwKKyAgICAg
ICAgTU9WTF9XUklURV9STkRFQ19PUENPREUgPSAweDIwMDYsCisgICAgICAgIE1PVkxfV1JJVEVf
UjBSTl9PUENPREUgPSAweDAwMDYsCisgICAgICAgIE1PVkxfV1JJVEVfT0ZGR0JSX09QQ09ERSA9
IDB4QzIwMCwKKyAgICAgICAgTU9WTF9XUklURV9PRkZSTl9PUENPREUgPSAweDEwMDAsCisgICAg
ICAgIE1PVkxfUkVBRF9STV9PUENPREUgPSAweDYwMDIsCisgICAgICAgIE1PVkxfUkVBRF9STUlO
Q19PUENPREUgPSAweDYwMDYsCisgICAgICAgIE1PVkxfUkVBRF9SMFJNX09QQ09ERSA9IDB4MDAw
RSwKKyAgICAgICAgTU9WTF9SRUFEX09GRkdCUl9PUENPREUgPSAweEM2MDAsCisgICAgICAgIE1P
VkxfUkVBRF9PRkZQQ19PUENPREUgPSAweEQwMDAsCisgICAgICAgIE1PVkxfUkVBRF9PRkZSTV9P
UENPREUgPSAweDUwMDAsCisgICAgICAgIE1PVldfV1JJVEVfUk5fT1BDT0RFID0gMHgyMDAxLAor
ICAgICAgICBNT1ZXX1JFQURfUk1fT1BDT0RFID0gMHg2MDAxLAorICAgICAgICBNT1ZXX1JFQURf
UjBSTV9PUENPREUgPSAweDAwMEQsCisgICAgICAgIE1PVldfUkVBRF9PRkZQQ19PUENPREUgPSAw
eDkwMDAsCisgICAgICAgIE1PVkFfUkVBRF9PRkZQQ19PUENPREUgPSAweEM3MDAsCisgICAgICAg
IE1PVlRfT1BDT0RFID0gMHgwMDI5LAorICAgICAgICBNVUxMX09QQ09ERSA9IDB4MDAwNywKKyAg
ICAgICAgRE1VTExfTF9PUENPREUgPSAweDMwMDUsCisgICAgICAgIFNUU01BQ0xfT1BDT0RFID0g
MHgwMDFBLAorICAgICAgICBTVFNNQUNIX09QQ09ERSA9IDB4MDAwQSwKKyAgICAgICAgRE1VTFNM
X09QQ09ERSA9IDB4MzAwRCwKKyAgICAgICAgTkVHX09QQ09ERSA9IDB4NjAwQiwKKyAgICAgICAg
TkVHQ19PUENPREUgPSAweDYwMEEsCisgICAgICAgIE5PVF9PUENPREUgPSAweDYwMDcsCisgICAg
ICAgIE9SX09QQ09ERSA9ICAweDIwMEIsCisgICAgICAgIE9SSU1NX09QQ09ERSA9IDB4Q0IwMCwK
KyAgICAgICAgT1JCSU1NX09QQ09ERSA9IDB4Q0YwMCwKKyAgICAgICAgU0VUU19PUENPREUgPSAw
eDAwNTgsCisgICAgICAgIFNFVFRfT1BDT0RFID0gMHgwMDE4LAorICAgICAgICBTSEFEX09QQ09E
RSA9IDB4NDAwQywKKyAgICAgICAgU0hBTF9PUENPREUgPSAweDQwMjAsCisgICAgICAgIFNIQVJf
T1BDT0RFID0gMHg0MDIxLAorICAgICAgICBTSExEX09QQ09ERSA9IDB4NDAwRCwKKyAgICAgICAg
U0hMTF9PUENPREUgPSAweDQwMDAsCisgICAgICAgIFNITEwyX09QQ09ERSA9IDB4NDAwOCwKKyAg
ICAgICAgU0hMTDhfT1BDT0RFID0gMHg0MDE4LAorICAgICAgICBTSExMMTZfT1BDT0RFID0gMHg0
MDI4LAorICAgICAgICBTSExSX09QQ09ERSA9IDB4NDAwMSwKKyAgICAgICAgU0hMUjJfT1BDT0RF
ID0gMHg0MDA5LAorICAgICAgICBTSExSOF9PUENPREUgPSAweDQwMTksCisgICAgICAgIFNITFIx
Nl9PUENPREUgPSAweDQwMjksCisgICAgICAgIFNUU1BSX09QQ09ERSA9IDB4MDAyQSwKKyAgICAg
ICAgU1RTTFBSX09QQ09ERSA9IDB4NDAyMiwKKyAgICAgICAgRkxPQVRfT1BDT0RFID0gMHhGMDJE
LAorICAgICAgICBTVUJfT1BDT0RFID0gMHgzMDA4LAorICAgICAgICBTVUJDX09QQ09ERSA9IDB4
MzAwQSwKKyAgICAgICAgU1VCVl9PUENPREUgPSAweDMwMEIsCisgICAgICAgIFRTVF9PUENPREUg
PSAweDIwMDgsCisgICAgICAgIFRTVElNTV9PUENPREUgPSAweEM4MDAsCisgICAgICAgIFRTVEJf
T1BDT0RFID0gMHhDQzAwLAorICAgICAgICBFWFRVV19PUENPREUgPSAweDYwMEQsCisgICAgICAg
IFhPUl9PUENPREUgPSAweDIwMEEsCisgICAgICAgIFhPUklNTV9PUENPREUgPSAweENBMDAsCisg
ICAgICAgIFhPUkJfT1BDT0RFID0gMHhDRTAwLAorICAgICAgICBGTU9WU19SRUFEX1JNX0lOQ19P
UENPREUgPSAweEYwMDksCisgICAgICAgIEZNT1ZTX1JFQURfUk1fT1BDT0RFID0gMHhGMDA4LAor
ICAgICAgICBGTU9WU19SRUFEX1IwUk1fT1BDT0RFID0gMHhGMDA2LAorICAgICAgICBGTU9WU19X
UklURV9STl9PUENPREUgPSAweEYwMEEsCisgICAgICAgIEZNT1ZTX1dSSVRFX1JOX0RFQ19PUENP
REUgPSAweEYwMEIsCisgICAgICAgIEZNT1ZTX1dSSVRFX1IwUk5fT1BDT0RFID0gMHhGMDA3LAor
ICAgICAgICBMRFNfUk1fRlBVTF9PUENPREUgPSAweDQwNUEsCisgICAgICAgIEZMRFNfRlJNX0ZQ
VUxfT1BDT0RFID0gMHhGMDFELAorICAgICAgICBTVFNfRlBVTF9STl9PUENPREUgPSAweDAwNUEs
CisgICAgICAgIEZTVFNfRlBVTF9GUk5fT1BDT0RFID0gMHhGMDBELAorICAgICAgICBMRFNGUFND
Ul9PUENPREUgPSAweDQwNkEsCisgICAgICAgIFNUU0ZQU0NSX09QQ09ERSA9IDB4MDA2QSwKKyAg
ICAgICAgTERTUk1GUFVMX09QQ09ERSA9IDB4NDA1QSwKKyAgICAgICAgRlNUU0ZQVUxGUk5fT1BD
T0RFID0gMHhGMDBELAorICAgICAgICBGU1FSVF9PUENPREUgPSAweEYwNkQsCisgICAgICAgIENM
UlRfT1BDT0RFID0gOCwKKyAgICB9OworCituYW1lc3BhY2UgU0g0IHsKKwordHlwZWRlZiBlbnVt
IHsKKyAgICAgICAgUjAsCisgICAgICAgIFIxLAorICAgICAgICBSMiwKKyAgICAgICAgUjMsCisg
ICAgICAgIFI0LAorICAgICAgICBSNSwKKyAgICAgICAgUjYsCisgICAgICAgIFI3LAorICAgICAg
ICBSOCwKKyAgICAgICAgUjksCisgICAgICAgIFIxMCwKKyAgICAgICAgUjExLAorICAgICAgICBS
MTIsCisgICAgICAgIFIxMywKKyAgICAgICAgUjE0LCBGUCAgPSBSMTQsCisgICAgICAgIFIxNSwg
U1AgID0gUjE1LAorICAgICAgICBQQywKKyAgICAgICAgUFIsCit9IFJlZ2lzdGVySUQ7CisgICAg
Cit0eXBlZGVmIGVudW0geworICAgICAgICBGUjAsIERSMCAgPSBGUjAsCisgICAgICAgIEZSMSwK
KyAgICAgICAgRlIyLCBEUjIgID0gRlIyLAorICAgICAgICBGUjMsCisgICAgICAgIEZSNCwgRFI0
ICA9IEZSNCwKKyAgICAgICAgRlI1LAorICAgICAgICBGUjYsIERSNiAgPSBGUjYsCisgICAgICAg
IEZSNywKKyAgICAgICAgRlI4LCBEUjggID0gRlI4LAorICAgICAgICBGUjksCisgICAgICAgIEZS
MTAsIERSMTAgPSBGUjEwLAorICAgICAgICBGUjExLAorICAgICAgICBGUjEyLCBEUjEyID0gRlIx
MiwKKyAgICAgICAgRlIxMywKKyAgICAgICAgRlIxNCwgRFIxNCA9IEZSMTQsCisgICAgICAgIEZS
MTUsCit9IEZQUmVnaXN0ZXJJRDsKK30KKworY2xhc3MgU0g0QXNzZW1ibGVyIHsKK3B1YmxpYzoK
KyAgICB0eXBlZGVmIFNINDo6UmVnaXN0ZXJJRCBSZWdpc3RlcklEOworICAgIHR5cGVkZWYgU0g0
OjpGUFJlZ2lzdGVySUQgRlBSZWdpc3RlcklEOworICAgIAorICAgIHR5cGVkZWYgQXNzZW1ibGVy
QnVmZmVyV2l0aENvbnN0YW50UG9vbDw1MTIsIDQsIDE2LCBTSDRBc3NlbWJsZXI+IFNINEJ1ZmZl
cjsKKyAgICAKKyAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCBzY3JhdGNoID0gU0g0OjpSMzsK
KyAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCBzY3JhdGNoMSA9IFNINDo6UjExOworICAgIGlu
dCBjbGFpbXNjcmF0Y2hSZWc7CisgICAgc3RhdGljIGNvbnN0IGludCBtYXhJbnN0cnVjdGlvblNp
emUgPSAxNjsKKworICAgIGVudW0geworICAgICAgICBwYWRGb3JBbGlnbjggID0gMHgwMCwKKyAg
ICAgICAgcGFkRm9yQWxpZ24xNiA9IDB4MDAwOSwKKyAgICAgICAgcGFkRm9yQWxpZ24zMiA9IDB4
MDAwOTAwMDksCisgICAgfTsKKyAgICAgICAKKyAgICBTSDRBc3NlbWJsZXIoKQorICAgIHsKKyAg
ICAgICAgY2xhaW1zY3JhdGNoUmVnID0gMHgwOworICAgIH0gIAorICAgIAorICAgIC8qIFNINCBj
b25kaXRpb24gY29kZXMgKi8KKyAgICAgICAgdHlwZWRlZiBlbnVtIHsKKyAgICAgICAgICAgIEVR
ID0gMHgwLCAvLyBFcXVhbAorICAgICAgICAgICAgTkUgPSAweDEsIC8vIE5vdCBFcXVhbAorICAg
ICAgICAgICAgSFMgPSAweDIsIC8vIFVuc2lnZW5kIEdyZWF0ZXIgVGhhbiBlcXVhbAorICAgICAg
ICAgICAgSEkgPSAweDMsIC8vIFVuc2lnZW5kIEdyZWF0ZXIgVGhhbgorICAgICAgICAgICAgTFMg
PSAweDQsIC8vIFVuc2lnZW5kIExvd2VyIG9yIFNhbWUKKyAgICAgICAgICAgIExJID0gMHg1LCAv
LyBVbnNpZ2VuZCBMb3dlcgorICAgICAgICAgICAgR0UgPSAweDYsIC8vIEdyZWF0ZXIgb3IgRXF1
YWwKKyAgICAgICAgICAgIExUID0gMHg3LCAvLyBMZXNzIFRoYW4KKyAgICAgICAgICAgIEdUID0g
MHg4LCAvLyBHcmVhdGVyIFRoYW4KKyAgICAgICAgICAgIExFID0gMHg5LCAvLyBMZXNzIG9yIEVx
dWFsCisgICAgICAgICAgICBPRiA9IDB4YSwgLy8gT3ZlckZsb3cKKyAgICAgICAgICAgIFNJID0g
MHhiLCAvLyBTaWduZWQKKyAgICAgICAgICAgIEVRVT0gMHhjLCAvLyBFcXVhbCBvciB1bm9yZGVy
ZWQoTmFOKQorICAgICAgICAgICAgTkVVPSAweGQsCisgICAgICAgICAgICBHVFU9IDB4ZSwKKyAg
ICAgICAgICAgIEdFVT0gMHhmLAorICAgICAgICAgICAgTFRVPSAweDEwLAorICAgICAgICAgICAg
TEVVPSAweDExLAorICAgICAgICB9IENvbmRpdGlvbjsKKyAgICAgICAgCisgICAgLy8gT3BhcXVl
IGxhYmVsIHR5cGVzCisgICAgCitwdWJsaWM6CisKKyAgICBjbGFzcyBKbXBTcmMgeworICAgICAg
ICBmcmllbmQgY2xhc3MgU0g0QXNzZW1ibGVyOworICAgIHB1YmxpYzoKKyAgICAgICAgSm1wU3Jj
KCkKKyAgICAgICAgICAgIDogbV9vZmZzZXQoLTEpCisgICAgICAgIHsKKyAgICAgICAgfQorCisg
ICAgcHJpdmF0ZToKKyAgICAgICAgSm1wU3JjKGludCBvZmZzZXQpCisgICAgICAgICAgICA6IG1f
b2Zmc2V0KG9mZnNldCkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgaW50IG1fb2Zm
c2V0OworICAgIH07CisgICAgCisgICAgY2xhc3MgSm1wRHN0IHsKKyAgICAgICAgZnJpZW5kIGNs
YXNzIFNINEFzc2VtYmxlcjsKKyAgICBwdWJsaWM6CisgICAgICAgIEptcERzdCgpCisgICAgICAg
ICAgICA6IG1fb2Zmc2V0KC0xKQorICAgICAgICAgICAgLCBtX3VzZWQoZmFsc2UpCisgICAgICAg
IHsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgaXNVc2VkKCkgY29uc3QgeyByZXR1cm4gbV91
c2VkOyB9CisgICAgICAgIHZvaWQgdXNlZCgpIHsgbV91c2VkID0gdHJ1ZTsgfQorCisKKyAgICBw
cml2YXRlOgorICAgICAgICBKbXBEc3QoaW50IG9mZnNldCkKKyAgICAgICAgICAgIDogbV9vZmZz
ZXQob2Zmc2V0KQorICAgICAgICAgICAgLCBtX3VzZWQoZmFsc2UpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIEFTU0VSVChtX29mZnNldCA9PSBvZmZzZXQpOworICAgICAgICB9CisKKyAgICAgICAg
aW50IG1fb2Zmc2V0IDogMzE7CisgICAgICAgIGludCBtX3VzZWQgOiAxOworICAgIH07CisKKyAg
ICBib29sIElzSW1tZWRpYXRlKGludCBjb25zdGFudCkgCisgICAgeyAgICAgICAgCisgICAgICAg
IGlmICgoY29uc3RhbnQgPD0gMTI3KSAmJiAoY29uc3RhbnQgPj0gLTEyOCkpCisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworCisg
ICAgUmVnaXN0ZXJJRCBjbGFpbVNjcmF0Y2goKQorICAgIHsKKyAgICAgICAgIC8qIDEwMSA9PiBz
Y3JhdGNoMSByZWxlYXNlZCAqLworICAgICAgICAgQVNTRVJUKChjbGFpbXNjcmF0Y2hSZWcgIT0g
MHgzKSk7CisgICAgICAgICBSZWdpc3RlcklEIHNjcmF0Y2hSZWcgPSBzY3JhdGNoOworCisgICAg
ICAgICBpZiAoIShjbGFpbXNjcmF0Y2hSZWcgJiAweDEpKQorICAgICAgICAgICAgIGNsYWltc2Ny
YXRjaFJlZyA9IChjbGFpbXNjcmF0Y2hSZWcgfCAweDEpOworICAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICAgY2xhaW1zY3JhdGNoUmVnID0gKGNsYWltc2NyYXRjaFJlZyB8IDB4Mik7CisgICAg
ICAgICAgICAgc2NyYXRjaFJlZyA9IHNjcmF0Y2gxOworICAgICAgICAgfQorICAgICAgICAgcmV0
dXJuIHNjcmF0Y2hSZWc7CisgICAgIH0KKworICAgICB2b2lkIHJlbGVhc2VTY3JhdGNoKFJlZ2lz
dGVySUQgc2NyYXRjaFIpIAorICAgICB7ICAgCisgICAgICAgICBpZiAoc2NyYXRjaFIgPT0gIHNj
cmF0Y2gpCisgICAgICAgICAgICAgY2xhaW1zY3JhdGNoUmVnID0gKGNsYWltc2NyYXRjaFJlZyAm
IDB4Mik7CisgICAgICAgICBlbHNlCisgICAgICAgICAgICAgY2xhaW1zY3JhdGNoUmVnID0gKGNs
YWltc2NyYXRjaFJlZyAmIDB4MSk7CisgICAgIH0gCisKKyAgICAvLyBTdGFjayBvcGVyYXRpb25z
OgorCisgICAgdm9pZCBwdXNoX3IoUmVnaXN0ZXJJRCByZWcpCisgICAgeworICAgICAgICB1aW50
MTZfdCBvcGM7CisgICAgICAgIAorICAgICAgICBpZiAocmVnID09IFNINDo6UFIpCisgICAgICAg
ICAgICBvcGMgPSBHRVRPUENPREVHUk9VUEUyKFNUU0xQUl9PUENPREUsIFNINDo6U1ApOyAgIC8q
IFNUUy5MIFBSLCBALVIlZCAqLworICAgICAgICBlbHNlCisgICAgICAgICAgICBvcGMgPSBHRVRP
UENPREVHUk9VUEUxKE1PVkxfV1JJVEVfUk5ERUNfT1BDT0RFLCBTSDQ6OlNQLCByZWcpOyAvKiBt
b3YubCByZWcsIEAtU1AgKi8KKworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisg
ICAgdm9pZCBwb3BfcihSZWdpc3RlcklEIHJlZykKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9w
YzsKKyAgICAgICAgCisgICAgICAgIGlmIChyZWcgPT0gU0g0OjpQUikKKyAgICAgICAgICAgIG9w
YyA9IEdFVE9QQ09ERUdST1VQRTIoTERTTFBSX09QQ09ERSwgU0g0OjpTUCk7ICAvKiBMRFMuTCBA
UiVkKywgUFIqLworICAgICAgICBlbHNlCisgICAgICAgICAgICBvcGMgPSBHRVRPUENPREVHUk9V
UEUxKE1PVkxfUkVBRF9STUlOQ19PUENPREUsIHJlZywgU0g0OjpTUCk7IC8qIG1vdi5sIEArc3Jj
LCBkZXN0OyovCisgICAgICAgIAorICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisg
ICAgdm9pZCBwdXNoX2kzMihpbnQgaW1tKQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3Ig
PSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgTG9hZENvbnN0YW50KGltbSwgc2NyKTsKKyAgICAg
ICAgcHVzaF9yKHNjcik7CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgfQorCisg
ICAgdm9pZCBwdXNoX20oaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlKQorICAgIHsKKyAgICAg
ICAgaWYgKChvZmZzZXQgPCAwKSB8fCAob2Zmc2V0ID49IDY0KSkgeworICAgICAgICAgICBSZWdp
c3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOyAKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
TG9hZENvbnN0YW50KG9mZnNldCwgc2NyKTsKKyAgICAgICAgICAgIGFkZGxfcnIoYmFzZSwgc2Ny
KTsKKyAgICAgICAgICAgIG1vdmxfbXIoc2NyLCBTSDQ6OlNQKTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICAgICAgfSBlbHNlIGlmIChvZmZzZXQp
CisgICAgICAgICAgICBtb3ZsX21yKG9mZnNldCA+PiAyLCBiYXNlLCBTSDQ6OlNQKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgbW92bF9tcihiYXNlLCBTSDQ6OlNQKTsKKyAgICAgICAgCisg
ICAgICAgIGFkZGxfaThyKC00LCBTSDQ6OlNQKTsgICAgICAgIAorICAgIH0KKworICAgIHZvaWQg
cG9wX20oaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlKQorICAgIHsgICAgICAgICAKKyAgICAg
ICAgaWYgKChvZmZzZXQgPCAwKSB8fCAob2Zmc2V0ID49IDY0KSkgeworICAgICAgICAgICAgUmVn
aXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgICAgIExvYWRDb25zdGFudChv
ZmZzZXQsIHNjcik7CisgICAgICAgICAgICBhZGRsX3JyKGJhc2UsIHNjcik7CisgICAgICAgICAg
ICBtb3ZsX3JtKFNINDo6U1AsIHNjcik7CisgICAgICAgICAgICByZWxlYXNlU2NyYXRjaChzY3Ip
OworICAgICAgICB9IGVsc2UgaWYgKG9mZnNldCkKKyAgICAgICAgICAgIG1vdmxfcm0oU0g0OjpT
UCwgb2Zmc2V0ID4+IDIsIGJhc2UpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtb3ZsX3Jt
KFNINDo6U1AsIGJhc2UpOworICAgICAgICAKKyAgICAgICAgYWRkbF9pOHIoNCwgU0g0OjpTUCk7
CisgICAgfQorICAgIAorICAgIHZvaWQgbW92dChSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAg
ICAgIHVpbnQxNl90IG9wYyA9IEdFVE9QQ09ERUdST1VQRTIoTU9WVF9PUENPREUsIGRzdCk7Cisg
ICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICAvLyBBcml0aG1ldGljIG9wZXJh
dGlvbnM6CisKKyAgICB2b2lkIGFkZGxfcnIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0
KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gR0VUT1BDT0RFR1JPVVBFMShBRERfT1BD
T0RFLCBkc3QsIHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICB2
b2lkIGFkZGNsX3JyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCkgLy8gVGJpdCBzZXQg
aWYgb3ZlcmZsb3cKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IEdFVE9QQ09ERUdST1VQ
RTEoQUREQ19PUENPREUsIGRzdCwgc3JjKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAg
IH0KKworICAgIHZvaWQgYWRkdmxfcnIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KSAv
LyBUYml0IHNldCBpZiBvdmVyZmxvdworICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gR0VU
T1BDT0RFR1JPVVBFMShBRERWX09QQ09ERSwgZHN0LCBzcmMpOworICAgICAgICBvbmVTaG9ydE9w
KG9wYyk7CisgICAgfSAgICAgCisKKyAgICB2b2lkIGFkZGxfaThyKGludCBpbW04LCBSZWdpc3Rl
cklEIGRzdCkKKyAgICB7CisgICAgICAgIEFTU0VSVCgoaW1tOCA8PSAxMjcpICYmIChpbW04ID49
IC0xMjgpKTsKKyAgICAgICAgCisgICAgICAgIHVpbnQxNl90IG9wYyA9IEdFVE9QQ09ERUdST1VQ
RTMoQURESU1NX09QQ09ERSwgZHN0LCBpbW04KTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOwor
ICAgIH0KKworICAgIHZvaWQgYW5kbF9ycihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3Qp
CisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBHRVRPUENPREVHUk9VUEUxKEFORF9PUENP
REUsIGRzdCwgc3JjKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAgIHZv
aWQgYWRkbF9pcihpbnQgaW1tLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIGlmIChJ
c0ltbWVkaWF0ZShpbW0pKQorICAgICAgICAgICAgYWRkbF9pOHIoaW1tLCBkc3QpOworICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7Cisg
ICAgICAgICAgICBMb2FkQ29uc3RhbnQoaW1tLCBzY3IpOworICAgICAgICAgICAgdWludDE2X3Qg
b3BjID0gR0VUT1BDT0RFR1JPVVBFMShBRERfT1BDT0RFLCBkc3QsIHNjcik7CisgICAgICAgICAg
ICBvbmVTaG9ydE9wKG9wYyk7CisgICAgICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOyAgCisg
ICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIGFuZGxfaThyKGludCBpbW04LCBSZWdpc3RlcklE
IGRzdCkKKyAgICB7CisgICAgICAgIEFTU0VSVCgoaW1tOCA8PSAyNTUpICYmIChpbW04ID49IDAp
KTsKKyAgICAgICAgQVNTRVJUKGRzdCA9PSBTSDQ6OlIwKTsKKyAgICAgICAgCisgICAgICAgIHVp
bnQxNl90IG9wYyA9IEdFVE9QQ09ERUdST1VQRTUoQU5ESU1NX09QQ09ERSwgaW1tOCk7CisgICAg
ICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lkIGRpdjFsX3JyKFJlZ2lzdGVy
SUQgc3JjLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IEdF
VE9QQ09ERUdST1VQRTEoRElWMV9PUENPREUsIGRzdCwgc3JjKTsKKyAgICAgICAgb25lU2hvcnRP
cChvcGMpOworCisgICAgfQorCisgICAgdm9pZCBkaXYwbF9ycihSZWdpc3RlcklEIHNyYywgUmVn
aXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBHRVRPUENPREVHUk9V
UEUxKERJVjBfT1BDT0RFLCBkc3QsIHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKwor
ICAgIH0gICAgCisKKyAgICB2b2lkIG5vdGxfcihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBk
c3QpCisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBHRVRPUENPREVHUk9VUEUxKE5PVF9P
UENPREUsIGRzdCwgc3JjKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAg
IHZvaWQgb3JsX3JyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAg
ICAgIHVpbnQxNl90IG9wYyA9IEdFVE9QQ09ERUdST1VQRTEoT1JfT1BDT0RFLCBkc3QsIHNyYyk7
CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKworICAgIH0KKworICAgIHZvaWQgb3JsX2k4cihp
bnQgaW1tOCwgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICBBU1NFUlQoKGltbTggPD0g
MjU1KSAmJiAoaW1tOCA+PSAwKSk7CisgICAgICAgIEFTU0VSVChkc3QgPT0gU0g0OjpSMCk7Cisg
ICAgICAgIAorICAgICAgICB1aW50MTZfdCBvcGMgPSBHRVRPUENPREVHUk9VUEU1KE9SSU1NX09Q
Q09ERSwgaW1tOCk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lk
IHN1YmxfcnIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAg
IHVpbnQxNl90IG9wYyA9IEdFVE9QQ09ERUdST1VQRTEoU1VCX09QQ09ERSwgZHN0LCBzcmMpOwor
ICAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHN1YnZsX3Jy
KFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCkgLy8gY2hlY2sgb3ZlcmZsb3cKKyAgICB7
CisgICAgICAgICB1aW50MTZfdCBvcGMgPSBHRVRPUENPREVHUk9VUEUxKFNVQlZfT1BDT0RFLCBk
c3QsIHNyYyk7CisgICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCBz
dWJsX2ltbXIoaW50IGltbSwgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICBpZiAoSXNJ
bW1lZGlhdGUoLWltbSkpCisgICAgICAgICAgICBhZGRsX2k4cigtaW1tLCBkc3QpOworICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7Cisg
ICAgICAgICAgICBMb2FkQ29uc3RhbnQoaW1tLCBzY3IpOworICAgICAgICAgICAgdWludDE2X3Qg
b3BjID0gR0VUT1BDT0RFR1JPVVBFMShTVUJfT1BDT0RFLCBkc3QsIHNjcik7CisgICAgICAgICAg
ICBvbmVTaG9ydE9wKG9wYyk7CisgICAgICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOyAgCisg
ICAgICAgIH0KKworICAgIH0KKworICAgIHZvaWQgeG9ybF9ycihSZWdpc3RlcklEIHNyYywgUmVn
aXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBHRVRPUENPREVHUk9V
UEUxKFhPUl9PUENPREUsIGRzdCwgc3JjKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAg
IH0KKworICAgIHZvaWQgeG9ybF9pOHIoaW50IGltbTgsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsK
KyAgICAgICAgQVNTRVJUKChpbW04IDw9IDI1NSkgJiYgKGltbTggPj0gMCkpOworICAgICAgICBB
U1NFUlQoZHN0ID09IFNINDo6UjApOworICAgICAgICAKKyAgICAgICAgdWludDE2X3Qgb3BjID0g
R0VUT1BDT0RFR1JPVVBFNShYT1JJTU1fT1BDT0RFLCBpbW04KTsKKyAgICAgICAgb25lU2hvcnRP
cChvcGMpOworICAgIH0KKworICAgIHZvaWQgc2hsbF9pOHIoaW50IGltbSwgUmVnaXN0ZXJJRCBk
c3QpCisgICAgeworICAgICAgICB1aW50MTZfdCBvcGM7CisgICAgICAgIAorICAgICAgICBzd2l0
Y2ggKGltbSkgeworICAgICAgICBjYXNlIDE6IG9wYyA9IEdFVE9QQ09ERUdST1VQRTIoU0hMTF9P
UENPREUsIGRzdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAyOiBvcGMgPSBH
RVRPUENPREVHUk9VUEUyKFNITEwyX09QQ09ERSwgZHN0KTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIDg6IG9wYyA9IEdFVE9QQ09ERUdST1VQRTIoU0hMTDhfT1BDT0RFLCBkc3Qp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMTY6IG9wYyA9IEdFVE9QQ09ERUdS
T1VQRTIoU0hMTDE2X09QQ09ERSwgZHN0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBk
ZWZhdWx0OiBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAgIHZvaWQgbmVnKFJlZ2lzdGVySUQgZHN0
LCBSZWdpc3RlcklEIHNyYykKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IEdFVE9QQ09E
RUdST1VQRTEoTkVHX09QQ09ERSwgZHN0LCBzcmMpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7
CisgICAgfQorCisgICAgdm9pZCBzaGxsX3JyKFJlZ2lzdGVySUQgZHN0LCBSZWdpc3RlcklEIHJT
aGlmdCkKKyAgICB7IAorICAgICAgICAvKiBzcmMgPDwgclNoaWZ0Ki8KKyAgICAgICAgdWludDE2
X3Qgb3BjID0gR0VUT1BDT0RFR1JPVVBFMShTSExEX09QQ09ERSwgZHN0LCByU2hpZnQpOworICAg
ICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCBzaGxyX3JyKFJlZ2lzdGVy
SUQgZHN0LCBSZWdpc3RlcklEIHJTaGlmdCkKKyAgICB7CisgICAgICAgIC8qIHNyYyA+PiByU2hp
ZnQqLworICAgICAgICBuZWcoclNoaWZ0LCByU2hpZnQpOworICAgICAgICBzaGxsX3JyKGRzdCwg
clNoaWZ0KTsKKyAgICB9CisKKyAgICB2b2lkIHNoYXJfcnIoUmVnaXN0ZXJJRCBkc3QsIFJlZ2lz
dGVySUQgclNoaWZ0KQorICAgIHsKKyAgICAgICAgLyogc3JjID4+PiByU2hpZnQqLworICAgICAg
ICBuZWcoclNoaWZ0LCByU2hpZnQpOworICAgICAgICBzaGFfcnIoZHN0LCByU2hpZnQpOworICAg
IH0KKworICAgIHZvaWQgc2hhX3JyKFJlZ2lzdGVySUQgZHN0LCBSZWdpc3RlcklEIHJTaGlmdCkK
KyAgICB7CisgICAgICAgIC8qIHNyYyA+Pj4gclNoaWZ0Ki8KKyAgICAgICAgdWludDE2X3Qgb3Bj
ID0gR0VUT1BDT0RFR1JPVVBFMShTSEFEX09QQ09ERSwgZHN0LCByU2hpZnQpOworICAgICAgICBv
bmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCBzaGxyX2k4cihpbnQgaW1tLCBSZWdp
c3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYzsKKyAgICAgICAgCisgICAg
ICAgIHN3aXRjaCAoaW1tKSB7CisgICAgICAgIGNhc2UgMTogb3BjID0gR0VUT1BDT0RFR1JPVVBF
MihTSExSX09QQ09ERSwgZHN0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDI6
IG9wYyA9IEdFVE9QQ09ERUdST1VQRTIoU0hMUjJfT1BDT0RFLCBkc3QpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgODogb3BjID0gR0VUT1BDT0RFR1JPVVBFMihTSExSOF9PUENP
REUsIGRzdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAxNjogb3BjID0gR0VU
T1BDT0RFR1JPVVBFMihTSExSMTZfT1BDT0RFLCBkc3QpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGRlZmF1bHQ6IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisKKyAgICB9CisKKyAgICB2b2lkIGltdWxsX3Jy
KFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90
IG9wYyA9IEdFVE9QQ09ERUdST1VQRTEoTVVMTF9PUENPREUsIGRzdCwgc3JjKTsKKyAgICAgICAg
b25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAgIHZvaWQgZG11bGxfcnIoUmVnaXN0ZXJJRCBz
cmMsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gR0VUT1BD
T0RFR1JPVVBFMShETVVMTF9MX09QQ09ERSwgZHN0LCBzcmMpOworICAgICAgICBvbmVTaG9ydE9w
KG9wYyk7CisgICAgfQorCisgICAgdm9pZCBkbXVsc2xfcnIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lz
dGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gR0VUT1BDT0RFR1JPVVBF
MShETVVMU0xfT1BDT0RFLCBkc3QsIHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAg
ICB9ICAgIAorCisgICAgdm9pZCBzdHNtYWNsKFJlZ2lzdGVySUQgcmVnKQorICAgIHsKKyAgICAg
ICAgdWludDE2X3Qgb3BjID0gR0VUT1BDT0RFR1JPVVBFMihTVFNNQUNMX09QQ09ERSwgcmVnKTsK
KyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAgIHZvaWQgc3RzbWFjaChSZWdp
c3RlcklEIHJlZykKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IEdFVE9QQ09ERUdST1VQ
RTIoU1RTTUFDSF9PUENPREUsIHJlZyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9
CisKKyAgICAvLyBDb21wYXJpc29uczoKKworICAgIHZvaWQgY21wbF9ycihSZWdpc3RlcklEIGxl
ZnQsIFJlZ2lzdGVySUQgcmlnaHQsIENvbmRpdGlvbiBjb25kKQorICAgIHsKKyAgICAgICAgdWlu
dDE2X3Qgb3BjOworICAgICAgICAKKyAgICAgICAgc3dpdGNoIChjb25kKSB7CisgICAgICAgIGNh
c2UgTkU6IG9wYyA9IEdFVE9QQ09ERUdST1VQRTEoQ01QRVFfT1BDT0RFLCByaWdodCwgbGVmdCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHVDogb3BjID0gR0VUT1BDT0RFR1JP
VVBFMShDTVBHVF9PUENPREUsIHJpZ2h0LCBsZWZ0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIEVROiBvcGMgPSBHRVRPUENPREVHUk9VUEUxKENNUEVRX09QQ09ERSwgcmlnaHQs
IGxlZnQpOworICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgIAorICAgICAgICBjYXNlIEdFOiBv
cGMgPSBHRVRPUENPREVHUk9VUEUxKENNUEdFX09QQ09ERSwgcmlnaHQsIGxlZnQpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSFM6IG9wYyA9IEdFVE9QQ09ERUdST1VQRTEoQ01Q
SFNfT1BDT0RFLCByaWdodCwgbGVmdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBISTogb3BjID0gR0VUT1BDT0RFR1JPVVBFMShDTVBISV9PUENPREUsIHJpZ2h0LCBsZWZ0KTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIExJOiBvcGMgPSBHRVRPUENPREVHUk9V
UEUxKENNUEhJX09QQ09ERSwgbGVmdCwgcmlnaHQpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgTFM6IG9wYyA9IEdFVE9QQ09ERUdST1VQRTEoQ01QSFNfT1BDT0RFLCBsZWZ0LCBy
aWdodCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBMRTogb3BjID0gR0VUT1BD
T0RFR1JPVVBFMShDTVBHRV9PUENPREUsIGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIExUOiBvcGMgPSBHRVRPUENPREVHUk9VUEUxKENNUEdUX09QQ09ERSwg
bGVmdCwgcmlnaHQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6IEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBvbmVTaG9ydE9w
KG9wYyk7CisgICAgfQorCisgICAgdm9pZCBjbXBwbChSZWdpc3RlcklEIHJlZykgLy9zaWduCisg
ICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBHRVRPUENPREVHUk9VUEUyKENNUFBMX09QQ09E
RSwgcmVnKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAgIHZvaWQgY21w
cHooUmVnaXN0ZXJJRCByZWcpIC8vIHVuc2lnbgorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3Bj
ID0gR0VUT1BDT0RFR1JPVVBFMihDTVBQWl9PUENPREUsIHJlZyk7CisgICAgICAgIG9uZVNob3J0
T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lkIGNtcGxfaXIoaW50IGltbSwgUmVnaXN0ZXJJRCBk
c3QsIENvbmRpdGlvbiBjb25kKQorICAgIHsKKyAgICAgICAgaWYgKCgoY29uZCA9PSBFUSkgfHwg
KGNvbmQgPT0gTkUpKSAmJiAoZHN0ID09IFNINDo6UjApICYmIElzSW1tZWRpYXRlKGltbSkpIHsK
KyAgICAgICAgICAgIHVpbnQxNl90IG9wYyA9IEdFVE9QQ09ERUdST1VQRTUoQ01QRVFJTU1fT1BD
T0RFLCBpbW0pOworICAgICAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAg
CisgICAgICAgICAgICBMb2FkQ29uc3RhbnQoaW1tLCBzY3IpOworICAgICAgICAgICAgY21wbF9y
cihzY3IsIGRzdCwgY29uZCk7CisKKyAgICAgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIGNtcGxfbXIoaW50IG9mZnNldCwgUmVnaXN0ZXJJ
RCBiYXNlLCBSZWdpc3RlcklEIGxlZnQsIENvbmRpdGlvbiBjb25kKQorICAgIHsKKyAgICAgICAg
UmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgIAorICAgICAgICBpZiAo
KG9mZnNldCA8IDApIHx8IChvZmZzZXQgPj0gNjQpKSB7CisgICAgICAgICAgICBMb2FkQ29uc3Rh
bnQob2Zmc2V0LCBzY3IpOworICAgICAgICAgICAgYWRkbF9ycihiYXNlLCBzY3IpOworICAgICAg
ICAgICAgbW92bF9tcihzY3IsIHNjcik7CisgICAgICAgIH0gZWxzZSBpZiAob2Zmc2V0KQorICAg
ICAgICAgICAgbW92bF9tcihvZmZzZXQgPj4gMiwgYmFzZSwgc2NyKTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgbW92bF9tcihiYXNlLCBzY3IpOworICAgICAgICAKKyAgICAgICAgY21wbF9y
cihzY3IsIGxlZnQsIGNvbmQpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgIH0K
KworICAgIHZvaWQgY21wbF9ybShSZWdpc3RlcklEIHJpZ2h0LCBpbnQgb2Zmc2V0LCBSZWdpc3Rl
cklEIGJhc2UsIENvbmRpdGlvbiBjb25kKQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3Ig
PSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgIAorICAgICAgICBpZiAoKG9mZnNldCA8IDApIHx8
IChvZmZzZXQgPj0gNjQpKSB7CisgICAgICAgICAgICBMb2FkQ29uc3RhbnQob2Zmc2V0LCBzY3Ip
OworICAgICAgICAgICAgYWRkbF9ycihiYXNlLCBzY3IpOworICAgICAgICAgICAgbW92bF9tcihz
Y3IsIHNjcik7CisgICAgICAgIH0gZWxzZSBpZiAob2Zmc2V0KQorICAgICAgICAgICAgbW92bF9t
cihvZmZzZXQgPj4gMiwgYmFzZSwgc2NyKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbW92
bF9tcihiYXNlLCBzY3IpOworICAgICAgICAKKyAgICAgICAgY21wbF9ycihyaWdodCwgc2NyLCBj
b25kKTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICB9CisKKyAgICB2b2lkIGNt
cGxfaW0oaW50IGltbSwgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBDb25kaXRpb24gY29u
ZCkgCisgICAgeworICAgIAorICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgp
OworICAgICAgICBSZWdpc3RlcklEIHNjcjEgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgIAor
ICAgICAgICBpZiAoKG9mZnNldCA8IDApIHx8IChvZmZzZXQgPj0gNjQpKSB7CisgICAgICAgICAg
ICBMb2FkQ29uc3RhbnQob2Zmc2V0LCBzY3IpOworICAgICAgICAgICAgYWRkbF9ycihiYXNlLCBz
Y3IpOworICAgICAgICAgICAgbW92bF9tcihzY3IsIHNjcik7CisgICAgICAgIH0gZWxzZSBpZiAo
b2Zmc2V0KQorICAgICAgICAgICAgbW92bF9tcihvZmZzZXQgPj4gMiwgYmFzZSwgc2NyKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgbW92bF9tcihiYXNlLCBzY3IpOworICAgICAgICAKKyAg
ICAgICAgTG9hZENvbnN0YW50KGltbSwgc2NyMSk7ICAgICAgICAKKyAgICAgICAgY21wbF9ycihz
Y3IxLCBzY3IsIGNvbmQpOworICAgICAgICAKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyMSk7
CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgfQorCisgICAgdm9pZCB0ZXN0bF9y
cihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICB1aW50MTZf
dCBvcGMgPSBHRVRPUENPREVHUk9VUEUxKFRTVF9PUENPREUsIGRzdCwgc3JjKTsKKyAgICAgICAg
b25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAgIHZvaWQgdGVzdGxfaThyKGludCBpbW0sIFJl
Z2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKChkc3QgPT0gU0g0OjpSMCkgJiYg
KGltbSA8PSAyNTUpICYmIChpbW0gPj0gMCkpOworICAgICAgICB1aW50MTZfdCBvcGMgPSBHRVRP
UENPREVHUk9VUEU1KFRTVElNTV9PUENPREUsIGltbSk7CisgICAgICAgIG9uZVNob3J0T3Aob3Bj
KTsKKyAgICB9CisKKyAgICB2b2lkIHRlc3RsX2kzMnIoaW50IGltbSwgUmVnaXN0ZXJJRCBkc3Qp
CisgICAgeworICAgICAgICBpZiAoKGRzdCA9PSBTSDQ6OlIwKSAmJiAoaW1tIDw9IDI1NSkgJiYg
KGltbSA+PSAwKSkgeworICAgICAgICAgICAgdWludDE2X3Qgb3BjID0gR0VUT1BDT0RFR1JPVVBF
NShUU1RJTU1fT1BDT0RFLCBpbW0pOworICAgICAgICAgICAgb25lU2hvcnRPcChvcGMpOyAgICAg
ICAgCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWlt
U2NyYXRjaCgpOworICAgICAgICAgICAgTG9hZENvbnN0YW50KGltbSwgc2NyKTsKKyAgICAgICAg
CisgICAgICAgICAgICB0ZXN0bF9ycihzY3IsIGRzdCk7CisgICAgICAgICAgICByZWxlYXNlU2Ny
YXRjaChzY3IpOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCB0ZXN0bF9pMzJtKGludCBp
bW0sIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkKKyAgICB7CisgICAgICAgIFJlZ2lzdGVy
SUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIFJlZ2lzdGVySUQgc2NyMSA9IGNsYWlt
U2NyYXRjaCgpOworICAgICAgICAKKyAgICAgICAgaWYgKChvZmZzZXQgPCAwKSB8fCAob2Zmc2V0
ID49IDY0KSkgeworICAgICAgICAgICAgTG9hZENvbnN0YW50KG9mZnNldCwgc2NyKTsKKyAgICAg
ICAgICAgIGFkZGxfcnIoYmFzZSwgc2NyKTsKKyAgICAgICAgICAgIG1vdmxfbXIoc2NyLCBzY3Ip
OworICAgICAgICB9IGVsc2UgaWYgKG9mZnNldCkKKyAgICAgICAgICAgIG1vdmxfbXIob2Zmc2V0
ID4+IDIsIGJhc2UsIHNjcik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1vdmxfbXIoYmFz
ZSwgc2NyKTsKKyAgICAgICAgCisgICAgICAgIGlmIChJc0ltbWVkaWF0ZShpbW0pKQorICAgICAg
ICAgICAgbW92X2ltbTgoaW1tLCBzY3IxKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgTG9h
ZENvbnN0YW50KGltbSwgc2NyMSk7CisgICAgICAgIAorICAgICAgICB0ZXN0bF9ycihzY3IsIHNj
cjEpOyAgICAgICAgCisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgICAgIHJlbGVh
c2VTY3JhdGNoKHNjcjEpOworICAgIH0KKworICAgIHZvaWQgdGVzdGJfaThyKGludCBpbW0sIFJl
Z2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0
Y2goKTsKKyAgICAgICAgbW92X2ltbTgoaW1tLCBzY3IpOworICAgICAgICB0ZXN0bF9ycihzY3Is
IGRzdCk7CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgfQorCisgICAgdm9pZCBu
b3AoKQorICAgIHsKKyAgICAgICAgbV9idWZmZXIucHV0U2hvcnRVbmNoZWNrZWQoTk9QX09QQ09E
RSk7CisgICAgfQorCisgICAgdm9pZCBzZXR0KCkKKyAgICB7CisgICAgICAgIG9uZVNob3J0T3Ao
U0VUVF9PUENPREUpOworICAgIH0KKworICAgIHZvaWQgY2xydCgpCisgICAgeworICAgICAgICBv
bmVTaG9ydE9wKENMUlRfT1BDT0RFKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBia3B0KCkKKyAg
ICB7CisgICAgICAgIG1fYnVmZmVyLnB1dFNob3J0VW5jaGVja2VkKEJSS19PUENPREUpOworICAg
IH0KKworICAgIAorICAgIHZvaWQgYnJhbmNoKHVpbnQxNl90IG9wYywgaW50IGxhYmVsKQorICAg
IHsKKyAgICAgICAgc3dpdGNoIChvcGMpIHsKKyAgICAgICAgY2FzZSBCVF9PUENPREU6CisgICAg
ICAgICAgICBBU1NFUlQoKGxhYmVsIDw9IDEyNykgJiYgKGxhYmVsID49IC0xMjgpKTsKKyAgICAg
ICAgICAgIG9wYyA9IEdFVE9QQ09ERUdST1VQRTUoQlRfT1BDT0RFLCBsYWJlbCk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBCUkFfT1BDT0RFOgorICAgICAgICAgICAgQVNTRVJU
KChsYWJlbCA8PSAyMDQ3KSAmJiAobGFiZWwgPj0gLTIwNDgpKTsKKyAgICAgICAgICAgIG9wYyA9
IEdFVE9QQ09ERUdST1VQRTYoQlJBX09QQ09ERSwgbGFiZWwpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgQkZfT1BDT0RFOgorICAgICAgICAgICAgQVNTRVJUKChsYWJlbCA8PSAx
MjcpICYmIChsYWJlbCA+PSAtMTI4KSk7CisgICAgICAgICAgICBvcGMgPSBHRVRPUENPREVHUk9V
UEU1KEJGX09QQ09ERSwgbGFiZWwpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1
bHQ6IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBv
bmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCBkdChSZWdpc3RlcklEIHJlZykKKyAg
ICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IEdFVE9QQ09ERUdST1VQRTIoRFRfT1BDT0RFLCBy
ZWcpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfSAgIAorCisgICAgdm9pZCBicmFu
Y2godWludDE2X3Qgb3BjLCBSZWdpc3RlcklEIHJlZykKKyAgICB7CisgICAgICAgIHN3aXRjaCAo
b3BjKSB7ICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQlJBRl9PUENPREU6CisgICAgICAgICAg
ICBvcGMgPSBHRVRPUENPREVHUk9VUEUyKEJSQUZfT1BDT0RFLCByZWcpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgSk1QX09QQ09ERSA6CisgICAgICAgICAgICBvcGMgPSBHRVRP
UENPREVHUk9VUEUyKEpNUF9PUENPREUsIHJlZyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBKU1JfT1BDT0RFIDoKKyAgICAgICAgICAgIG9wYyA9IEdFVE9QQ09ERUdST1VQRTIo
SlNSX09QQ09ERSwgcmVnKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEJTUkZf
T1BDT0RFIDoKKyAgICAgICAgICAgIG9wYyA9IEdFVE9QQ09ERUdST1VQRTIoQlNSRl9PUENPREUs
IHJlZyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDogQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsK
KyAgICB9CisKKyAgICB2b2lkIGxkc3ByKFJlZ2lzdGVySUQgcmVnKQorICAgIHsKKyAgICAgICAg
dWludDE2X3Qgb3BjID0gR0VUT1BDT0RFR1JPVVBFMihMRFNQUl9PUENPREUsIHJlZyk7CisgICAg
ICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lkIHN0c3ByKFJlZ2lzdGVySUQg
cmVnKQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gR0VUT1BDT0RFR1JPVVBFMihTVFNQ
Ul9PUENPREUsIHJlZyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICB2
b2lkIGV4dHV3KFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAg
IHVpbnQxNl90IG9wYyA9IEdFVE9QQ09ERUdST1VQRTEoRVhUVVdfT1BDT0RFLCBkc3QsIHNyYyk7
CisgICAgICAgIAorICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgLyogZmxv
YXQgb3BlcmF0aW9ucyovCisgICAgCisgICAgdm9pZCBsZHNybV9mcHVsKFJlZ2lzdGVySUQgc3Jj
KQorICAgIHsgICAgICAgIAorICAgICAgICB1aW50MTZfdCBvcGMgPSBHRVRPUENPREVHUk9VUEUy
KExEU19STV9GUFVMX09QQ09ERSwgc3JjKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAg
IH0KKyAgICB2b2lkIGZuZWcoRlBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIHVpbnQx
Nl90IG9wYyA9IEdFVE9QQ09ERUdST1VQRTIoRk5FR19PUENPREUsIGRzdCk7CisgICAgICAgIG9u
ZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lkIGZzcXJ0KEZQUmVnaXN0ZXJJRCBkc3Qp
CisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBHRVRPUENPREVHUk9VUEUyKEZTUVJUX09Q
Q09ERSwgZHN0KTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKyAgICAKKyAgICB2
b2lkIHN0c19mcHVsX3JuKFJlZ2lzdGVySUQgc3JjKQorICAgIHsKKyAgICAgICAgdWludDE2X3Qg
b3BjID0gR0VUT1BDT0RFR1JPVVBFMihTVFNfRlBVTF9STl9PUENPREUsIHNyYyk7CisgICAgICAg
IG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBmbG9hdF9mcHVsX2ZybihS
ZWdpc3RlcklEIHNyYykKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IEdFVE9QQ09ERUdS
T1VQRTIoRkxPQVRfT1BDT0RFLCBzcmMpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAg
fQorICAgIAorICAgIHZvaWQgZm11bGwoRlBSZWdpc3RlcklEIHNyYywgRlBSZWdpc3RlcklEIGRz
dCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IEdFVE9QQ09ERUdST1VQRTEoRk1VTF9P
UENPREUsIGRzdCwgc3JjKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKyAgICAK
KyAgICB2b2lkIGZtb3ZzX3JlYWRfcm0oUmVnaXN0ZXJJRCBzcmMsIEZQUmVnaXN0ZXJJRCBkc3Qp
CisgICAgeworICAgICAgICAvKkZNT1YuUyBAUiVkLCBGUiVkXG4qLworICAgICAgICB1aW50MTZf
dCBvcGMgPSBHRVRPUENPREVHUk9VUEUxKEZNT1ZTX1JFQURfUk1fT1BDT0RFLCBkc3QsIHNyYyk7
CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBmbW92c193
cml0ZV9ybShGUFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAg
IC8qIEZNT1YuUyBGUiVkLCBAUiVkXG4gKi8KKyAgICAgICAgdWludDE2X3Qgb3BjID0gR0VUT1BD
T0RFR1JPVVBFMShGTU9WU19XUklURV9STl9PUENPREUsIGRzdCwgc3JjKTsKKyAgICAgICAgb25l
U2hvcnRPcChvcGMpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGZtb3ZzX3dyaXRlX3IwcihGUFJl
Z2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIC8qRk1PVi5TIEZS
JWQsIEAoUjAsIFIlZCkgKi8KKyAgICAgICAgdWludDE2X3Qgb3BjID0gR0VUT1BDT0RFR1JPVVBF
MShGTU9WU19XUklURV9SMFJOX09QQ09ERSwgZHN0LCBzcmMpOworICAgICAgICBvbmVTaG9ydE9w
KG9wYyk7CisgICAgfQorICAgIAorICAgIHZvaWQgZm1vdnNfcmVhZF9yMHIoUmVnaXN0ZXJJRCBz
cmMsIEZQUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICAvKkZNT1YuUyBAKFIwLCBSJWQp
LCBGUiVkKi8KKyAgICAgICAgdWludDE2X3Qgb3BjID0gR0VUT1BDT0RFR1JPVVBFMShGTU9WU19S
RUFEX1IwUk1fT1BDT0RFLCBkc3QsIHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAg
ICB9CisgICAgCisgICAgdm9pZCBmbW92c19yZWFkX3JtX2luYyhSZWdpc3RlcklEIGRzdCwgRlBS
ZWdpc3RlcklEIHNyYykKKyAgICB7CisgICAgICAgIC8qIEZNT1YuUyBAUiVkKywgRlIlZCAqLwor
ICAgICAgICB1aW50MTZfdCBvcGMgPSBHRVRPUENPREVHUk9VUEUxKEZNT1ZTX1JFQURfUk1fSU5D
X09QQ09ERSwgZHN0LCBzcmMpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorICAg
IAorICAgIHZvaWQgZm1vdnNfd3JpdGVfcm5fZGVjKEZQUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVy
SUQgZHN0KQorICAgIHsKKyAgICAgICAgLyogRk1PVi5TIEZSJWQsIEAtUiVkICovCisgICAgICAg
IHVpbnQxNl90IG9wYyA9IEdFVE9QQ09ERUdST1VQRTEoRk1PVlNfV1JJVEVfUk5fREVDX09QQ09E
RSwgZHN0LCBzcmMpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorICAgIAorICAg
IHZvaWQgZnRyY19ybV9mcHVsKEZQUmVnaXN0ZXJJRCBzcmMpCisgICAgeworICAgICAgICB1aW50
MTZfdCBvcGMgPSBHRVRPUENPREVHUk9VUEUyKEZUUkNfT1BDT0RFLCBzcmMpOworICAgICAgICBv
bmVTaG9ydE9wKG9wYyk7CisgICAgfQorICAgIAorICAgIHZvaWQgZmxkc19mcHVsKFJlZ2lzdGVy
SUQgc3JjKQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gR0VUT1BDT0RFR1JPVVBFMihG
TERTX0ZSTV9GUFVMX09QQ09ERSwgc3JjKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAg
IH0KKyAgICAKKyAgICB2b2lkIGZzdHNfZnB1bChSZWdpc3RlcklEIHNyYykKKyAgICB7CisgICAg
ICAgIHVpbnQxNl90IG9wYyA9IEdFVE9QQ09ERUdST1VQRTIoRlNUU19GUFVMX0ZSTl9PUENPREUs
IHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisgICAgCisgICAgCisgICAg
dm9pZCBsZHNmcHNjcihSZWdpc3RlcklEIHJlZykgCisgICAgeworICAgICAgICB1aW50MTZfdCBv
cGMgPSBHRVRPUENPREVHUk9VUEUyKExEU0ZQU0NSX09QQ09ERSwgcmVnKTsKKyAgICAgICAgb25l
U2hvcnRPcChvcGMpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHN0c2Zwc2NyKFJlZ2lzdGVySUQg
cmVnKSAKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IEdFVE9QQ09ERUdST1VQRTIoU1RT
RlBTQ1JfT1BDT0RFLCByZWcpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfSAgICAK
KyAgICAKKyAgICAvKiBkb3VibGUgb3BlcmF0aW9ucyovCisgICAgdm9pZCBkY21wcGVxKEZQUmVn
aXN0ZXJJRCBzcmMsIEZQUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICB1aW50MTZfdCBv
cGMgPSBHRVRPUENPREVHUk9VUEU4KEZDTVBFUV9PUENPREUsIGRzdCA+PiAxLCBzcmMgPj4xKTsK
KyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGRjbXBwZ3Qo
RlBSZWdpc3RlcklEIHNyYywgRlBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIHVpbnQx
Nl90IG9wYyA9IEdFVE9QQ09ERUdST1VQRTgoRkNNUEdUX09QQ09ERSwgZHN0ID4+IDEsIHNyYyA+
PjEpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorICAgIAorICAgIHZvaWQgZG11
bF9ycihGUFJlZ2lzdGVySUQgc3JjLCBGUFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAg
dWludDE2X3Qgb3BjID0gR0VUT1BDT0RFR1JPVVBFOChGTVVMX09QQ09ERSwgZHN0ID4+IDEsIHNy
YyA+PjEpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorICAgIAorICAgIHZvaWQg
ZHN1Yl9ycihGUFJlZ2lzdGVySUQgc3JjLCBGUFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAg
ICAgdWludDE2X3Qgb3BjID0gR0VUT1BDT0RFR1JPVVBFOChGU1VCX09QQ09ERSwgZHN0ID4+IDEs
IHNyYyA+PjEpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorICAgIAorICAgIHZv
aWQgZGFkZF9ycihGUFJlZ2lzdGVySUQgc3JjLCBGUFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAg
ICAgICAgdWludDE2X3Qgb3BjID0gR0VUT1BDT0RFR1JPVVBFOChGQUREX09QQ09ERSwgZHN0ID4+
IDEsIHNyYyA+PjEpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorICAgIAorICAg
IHZvaWQgZG1vdl9ycihGUFJlZ2lzdGVySUQgc3JjLCBGUFJlZ2lzdGVySUQgZHN0KQorICAgIHsK
KyAgICAgICAgdWludDE2X3Qgb3BjID0gR0VUT1BDT0RFR1JPVVBFOChGTU9WX09QQ09ERSwgZHN0
ID4+IDEsIHNyYyA+PjEpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfSAgICAKKyAg
ICAKKyAgICB2b2lkIGRkaXZfcnIoRlBSZWdpc3RlcklEIHNyYywgRlBSZWdpc3RlcklEIGRzdCkK
KyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IEdFVE9QQ09ERUdST1VQRTgoRkRJVl9PUENP
REUsIGRzdCA+PiAxLCBzcmMgPj4xKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0K
KworICAgIHZvaWQgZHNxcnQoRlBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIHVpbnQx
Nl90IG9wYyA9IEdFVE9QQ09ERUdST1VQRTcoRlNRUlRfT1BDT0RFLCBkc3QgPj4gMSk7CisgICAg
ICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9IAorCisgICAgdm9pZCBkb3VibGVsb2FkKFJlZ2lz
dGVySUQgYmFzZSwgaW50IG9mZnNldCwgRlBSZWdpc3RlcklEIGRlc3QsIFJlZ2lzdGVySUQgc2Ny
KSAKKyAgICB7CisgICAgICAgICBMb2FkQ29uc3RhbnQob2Zmc2V0LCBzY3IpOworICAgICAgICAg
aWYgKHNjciA9PSBTSDQ6OlIwKQorICAgICAgICAgICAgIGZtb3ZfcmVhZF9yMHIoYmFzZSwgZGVz
dCk7CisgICAgICAgICBlbHNlIGlmIChiYXNlID09IFNINDo6UjApCisgICAgICAgICAgICAgZm1v
dl9yZWFkX3IwcihzY3IsIGRlc3QpOworICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgYWRk
bF9ycihiYXNlLCBzY3IpOworICAgICAgICAgICAgIGZtb3ZfcmVhZF9ybShzY3IsIGRlc3QpOyAg
ICAgICAgIAorICAgICAgICAgfSAgICAKKyAgICB9CisgICAgCisgICAgdm9pZCBkbmVnKEZQUmVn
aXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBHRVRPUENPREVHUk9V
UEU3KEZORUdfT1BDT0RFLCBkc3QgPj4gMSk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAg
ICB9CisgICAgCisgICAgdm9pZCBkb3VibGVzdG9yZShGUFJlZ2lzdGVySUQgc3JjLCBSZWdpc3Rl
cklEIGJhc2UsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgc2NyKSAKKyAgICB7CisgICAgICAgICBM
b2FkQ29uc3RhbnQob2Zmc2V0LCBzY3IpOworICAgICAgICAgaWYgKHNjciA9PSBTSDQ6OlIwKQor
ICAgICAgICAgICAgIGZtb3Zfd3JpdGVfcjByKHNyYywgYmFzZSk7CisgICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgICBhZGRsX3JyKGJhc2UsIHNjcik7CisgICAgICAgICAgICAgZm1vdl93cml0
ZV9ybShzcmMsIHNjcik7ICAgICAgICAgCisgICAgICAgICB9CisgICAgfQorICAgIAorICAgIHZv
aWQgZm1vdl9yZWFkX3JtKFJlZ2lzdGVySUQgc3JjLCBGUFJlZ2lzdGVySUQgZHN0KQorICAgIHsK
KyAgICAgICAgLypGTU9WIEBSJWQsIERSJWRcbiovCisgICAgICAgIHVpbnQxNl90IG9wYyA9IEdF
VE9QQ09ERUdST1VQRTEwKEZNT1ZTX1JFQURfUk1fT1BDT0RFLCBkc3QgPj4gMSwgc3JjKTsKKyAg
ICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGZtb3Zfd3JpdGVf
cm0oRlBSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICAvKiBG
TU9WIERSJWQsIEBSJWRcbiAqLworICAgICAgICB1aW50MTZfdCBvcGMgPSBHRVRPUENPREVHUk9V
UEU5KEZNT1ZTX1dSSVRFX1JOX09QQ09ERSwgZHN0LCBzcmMgPj4gMSk7CisgICAgICAgIG9uZVNo
b3J0T3Aob3BjKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBmbW92X3dyaXRlX3IwcihGUFJlZ2lz
dGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIC8qRk1PViBEUiVkLCBA
KFIwLCBSJWQpICovCisgICAgICAgIHVpbnQxNl90IG9wYyA9IEdFVE9QQ09ERUdST1VQRTkoRk1P
VlNfV1JJVEVfUjBSTl9PUENPREUsIGRzdCwgc3JjID4+IDEpOworICAgICAgICBvbmVTaG9ydE9w
KG9wYyk7CisgICAgfQorICAgIAorICAgIHZvaWQgZm1vdl9yZWFkX3IwcihSZWdpc3RlcklEIHNy
YywgRlBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIC8qRk1PViBAKFIwLCBSJWQpLCBE
UiVkKi8KKyAgICAgICAgdWludDE2X3Qgb3BjID0gR0VUT1BDT0RFR1JPVVBFMTAoRk1PVlNfUkVB
RF9SMFJNX09QQ09ERSwgZHN0ID4+IDEsIHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsK
KyAgICB9CisgICAgCisgICAgdm9pZCBmbW92X3JlYWRfcm1faW5jKFJlZ2lzdGVySUQgZHN0LCBG
UFJlZ2lzdGVySUQgc3JjKQorICAgIHsKKyAgICAgICAgLyogRk1PViBAUiVkKywgRFIlZCAqLwor
ICAgICAgICB1aW50MTZfdCBvcGMgPSBHRVRPUENPREVHUk9VUEUxMChGTU9WU19SRUFEX1JNX0lO
Q19PUENPREUsIGRzdCA+PiAxICwgc3JjKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAg
IH0KKyAgICAKKyAgICB2b2lkIGZtb3Zfd3JpdGVfcm5fZGVjKEZQUmVnaXN0ZXJJRCBzcmMsIFJl
Z2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgLyogRk1PViBEUiVkLCBALVIlZCAqLworICAg
ICAgICB1aW50MTZfdCBvcGMgPSBHRVRPUENPREVHUk9VUEU5KEZNT1ZTX1dSSVRFX1JOX0RFQ19P
UENPREUsIGRzdCwgc3JjID4+IDEpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQor
ICAgIAorICAgIHZvaWQgZmxvYXRfZnB1bF9kcm4oRlBSZWdpc3RlcklEIHNyYykKKyAgICB7Cisg
ICAgICAgIHVpbnQxNl90IG9wYyA9IEdFVE9QQ09ERUdST1VQRTcoRkxPQVRfT1BDT0RFLCBzcmMg
Pj4gMSk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBm
dHJjX2RybV9mcHVsKEZQUmVnaXN0ZXJJRCBzcmMpCisgICAgeworICAgICAgICB1aW50MTZfdCBv
cGMgPSBHRVRPUENPREVHUk9VUEU3KEZUUkNfT1BDT0RFLCBzcmMgPj4gMSk7CisgICAgICAgIG9u
ZVNob3J0T3Aob3BjKTsKKyAgICB9CisgICAgICAgICAgIAorICAgIC8vIFZhcmlvdXMgbW92ZSBv
cHM6CisgICAgCisgICAgdm9pZCBtb3ZfaW1tOChpbnQgaW1tOCwgUmVnaXN0ZXJJRCBkc3QpCisg
ICAgeworICAgICAgICBBU1NFUlQoKGltbTggPD0gMTI3KSAmJiAoaW1tOCA+PSAtMTI4KSk7Cisg
ICAgICAgIHVpbnQxNl90IG9wYyA9IEdFVE9QQ09ERUdST1VQRTMoTU9WSU1NX09QQ09ERSwgZHN0
LCBpbW04KTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAgIHZvaWQgbW92
bF9ycihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICAvKiBt
b3Ygc3JjLCBkc3QgKi8KKyAgICAgICAgdWludDE2X3Qgb3BjID0gR0VUT1BDT0RFR1JPVVBFMShN
T1ZfT1BDT0RFLCBkc3QsIHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKworICAgIH0K
KyAgICAKKyAgICB2b2lkIG1vdndfcm0oUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQor
ICAgIHsKKyAgICAgICAgLyogbW92Lncgc3JjLCBAZHN0ICovCisgICAgICAgIHVpbnQxNl90IG9w
YyA9IEdFVE9QQ09ERUdST1VQRTEoTU9WV19XUklURV9STl9PUENPREUsIGRzdCwgc3JjKTsKKyAg
ICAgICAgb25lU2hvcnRPcChvcGMpOworCisgICAgfQorICAgIAorICAgIHZvaWQgbW92d19tcihS
ZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICAvKiBtb3YudyBA
IHNyYywgZHN0ICovCisgICAgICAgIHVpbnQxNl90IG9wYyA9IEdFVE9QQ09ERUdST1VQRTEoTU9W
V19SRUFEX1JNX09QQ09ERSwgZHN0LCBzcmMpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisK
KyAgICB9CisgICAgCisgICAgdm9pZCBtb3Z3X21yKGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFz
ZSwgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICB1aW50MTZfdCBvcGM7CisKKyAgICAg
ICAgQVNTRVJUKGJhc2UgPT0gU0g0OjpQQyk7CisgICAgICAgIEFTU0VSVCgob2Zmc2V0IDw9IDI1
NSkgJiYgKG9mZnNldCA+PSAwKSk7CisgICAgICAgIG9wYyA9IEdFVE9QQ09ERUdST1VQRTMoTU9W
V19SRUFEX09GRlBDX09QQ09ERSwgZHN0LCBvZmZzZXQpOworCisgICAgICAgIG9uZVNob3J0T3Ao
b3BjKTsKKworICAgIH0KKyAgICAKKyAgICB2b2lkIG1vdndfcjBtcihSZWdpc3RlcklEIHNyYywg
UmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBHRVRPUENPREVH
Uk9VUEUxKE1PVldfUkVBRF9SMFJNX09QQ09ERSwgZHN0LCBzcmMpOworICAgICAgICBvbmVTaG9y
dE9wKG9wYyk7CisKKyAgICB9CisgICAgCisgICAgdm9pZCBtb3ZsX3JtKFJlZ2lzdGVySUQgc3Jj
LCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UpCisgICAgeworICAgICAgICB1aW50MTZfdCBv
cGM7CisgICAgICAgIAorICAgICAgICBBU1NFUlQoKG9mZnNldCA8PSAxNSkgJiYgKG9mZnNldCA+
PSAwKSk7CisgICAgICAgIAorICAgICAgICBpZiAoIW9mZnNldCkKKyAgICAgICAgICAgIG9wYyA9
IEdFVE9QQ09ERUdST1VQRTEoTU9WTF9XUklURV9STl9PUENPREUsIGJhc2UsIHNyYyk7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIG9wYyA9IEdFVE9QQ09ERUdST1VQRTQoTU9WTF9XUklURV9P
RkZSTl9PUENPREUsIGJhc2UsIHNyYywgb2Zmc2V0KTsKKyAgICAgICAgCisgICAgICAgIG9uZVNo
b3J0T3Aob3BjKTsKKworICAgIH0KKyAgICAKKyAgICB2b2lkIG1vdmxfcm0oUmVnaXN0ZXJJRCBz
cmMsIFJlZ2lzdGVySUQgYmFzZSkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYzsKKyAgICAg
ICAgCisgICAgICAgIG9wYyA9IEdFVE9QQ09ERUdST1VQRTEoTU9WTF9XUklURV9STl9PUENPREUs
IGJhc2UsIHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKworICAgIH0KKyAgICAKKyAg
ICB2b2lkIG1vdmxfaTMybShpbnQgaW1tLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UpCisg
ICAgeworICAgICAgICB1aW50MTZfdCBvcGM7CisgICAgICAgIAorICAgICAgICBBU1NFUlQoKG9m
ZnNldCA8PSAxNSkgJiYgKG9mZnNldCA+PSAwKSk7CisgICAgCisgICAgICAgIFJlZ2lzdGVySUQg
c2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIExvYWRDb25zdGFudChpbW0sIHNjcik7CisK
KyAgICAgICAgCisgICAgICAgIGlmICghb2Zmc2V0KQorICAgICAgICAgICAgb3BjID0gR0VUT1BD
T0RFR1JPVVBFMShNT1ZMX1dSSVRFX1JOX09QQ09ERSwgYmFzZSwgc2NyKTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgb3BjID0gR0VUT1BDT0RFR1JPVVBFNChNT1ZMX1dSSVRFX09GRlJOX09Q
Q09ERSwgYmFzZSwgc2NyLCBvZmZzZXQpOworICAgICAgICAKKyAgICAgICAgb25lU2hvcnRPcChv
cGMpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgIH0KKworCisgICAgdm9pZCBt
b3ZsX21yKGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBkc3QpCisgICAg
eworICAgICAgICB1aW50MTZfdCBvcGM7CisgICAgCisgICAgICAgIGlmIChiYXNlID09IFNINDo6
UEMpIHsKKyAgICAgICAgICAgIEFTU0VSVCgob2Zmc2V0IDw9IDI1NSkgJiYgKG9mZnNldCA+PSAw
KSk7CisgICAgICAgICAgICBvcGMgPSBHRVRPUENPREVHUk9VUEUzKE1PVkxfUkVBRF9PRkZQQ19P
UENPREUsIGRzdCwgb2Zmc2V0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VS
VCgob2Zmc2V0IDw9IDE1KSAmJiAob2Zmc2V0ID49IDApKTsKKyAgICAgICAgICAgIGlmICghb2Zm
c2V0KQorICAgICAgICAgICAgICAgIG9wYyA9IEdFVE9QQ09ERUdST1VQRTEoTU9WTF9SRUFEX1JN
X09QQ09ERSwgZHN0LCBiYXNlKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBv
cGMgPSBHRVRPUENPREVHUk9VUEU0KE1PVkxfUkVBRF9PRkZSTV9PUENPREUsIGRzdCwgYmFzZSwg
b2Zmc2V0KTsKKyAgICAgICAgfQorICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisKKyAgICB9Cisg
ICAgCisgICAgdm9pZCBtb3ZiX21yKGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0
ZXJJRCBkc3QpIC8vIE1PVi5CIEAoZGlzcCwgUm0pLCBSMAorICAgIHsgICAgICAgIAorICAgICAg
ICBBU1NFUlQoZHN0ID09IFNINDo6UjApOworICAgIAorICAgICAgICB1aW50MTZfdCBvcGMgPSBH
RVRPUENPREVHUk9VUEUxMShNT1ZCX1JFQURfT0ZGUk1fT1BDT0RFLCBiYXNlLCBvZmZzZXQpOwor
ICAgICAgICAKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworCisgICAgfQorICAgIAorICAgIHZv
aWQgbW92Yl9yMG1yKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAg
ICAgIHVpbnQxNl90IG9wYyA9IEdFVE9QQ09ERUdST1VQRTEoTU9WQl9SRUFEX1IwUk1fT1BDT0RF
LCBkc3QsIHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKworICAgIH0KKyAgICAKKyAg
ICB2b2lkIG1vdmJfbXIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KSAvLyBNT1YuQiBA
Um0sIFJuCisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBHRVRPUENPREVHUk9VUEUxKE1P
VkJfUkVBRF9STV9PUENPREUsIGRzdCwgc3JjKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOwor
CisgICAgfQorICAgIAorICAgIHZvaWQgbW92bF9tcihSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVy
SUQgZHN0KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gR0VUT1BDT0RFR1JPVVBFMShN
T1ZMX1JFQURfUk1fT1BDT0RFLCBkc3QsIGJhc2UpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7
CisKKyAgICB9CisgICAgCisgICAgdm9pZCBtb3ZsX3IwbXIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lz
dGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gR0VUT1BDT0RFR1JPVVBF
MShNT1ZMX1JFQURfUjBSTV9PUENPREUsIGRzdCwgc3JjKTsKKyAgICAgICAgb25lU2hvcnRPcChv
cGMpOworCisgICAgfQorICAgIAorICAgIHZvaWQgbW92bF9ybXIwKFJlZ2lzdGVySUQgc3JjLCBS
ZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIC8qbW92Lmwgc3JjLCBAKHIwLCBkc3QpKi8K
KyAgICAgICAgdWludDE2X3Qgb3BjID0gR0VUT1BDT0RFR1JPVVBFMShNT1ZMX1dSSVRFX1IwUk5f
T1BDT0RFLCBkc3QsIHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKworICAgIH0KKwor
ICAgIHZvaWQgbW92bF9pOHIoaW50IGltbTgsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKChpbW04IDw9IDEyNykgJiYgKGltbTggPj0gLTEyOCkpOworICAgICAgICB1aW50
MTZfdCBvcGMgPSBHRVRPUENPREVHUk9VUEUzKE1PVklNTV9PUENPREUsIGRzdCwgaW1tOCk7CisK
KyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAgIHZvaWQgb3JsX2lyKGludCBp
bW0sIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgaWYgKChpbW0gPD0gMjU1KSAmJiAo
aW1tID49IDApICYmIChkc3QgPT0gU0g0OjpSMCkpCisgICAgICAgICAgICBvcmxfaThyKGltbSwg
ZHN0KTsKKyAgICAgICAgZWxzZSAgeworICAgICAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFp
bVNjcmF0Y2goKTsKKyAgICAgICAgICAgIExvYWRDb25zdGFudChpbW0sIHNjcik7CisgICAgICAg
ICAgICB1aW50MTZfdCBvcGMgPSBHRVRPUENPREVHUk9VUEUxKE9SX09QQ09ERSwgZHN0LCBzY3Ip
OworICAgICAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgICAgICAgICAgcmVsZWFzZVNjcmF0
Y2goc2NyKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB2b2lkIExvYWRDb25zdGFudCh1
aW50MzJfdCBjb25zdGFudCwgUmVnaXN0ZXJJRCBkc3QsIGJvb2wgd2l0aHBhdGNoID0gZmFsc2Up
CisgICAgeworICAgICAgICBpZiAoKChpbnQpY29uc3RhbnQgPD0weDdmKSAmJiAoKGludCljb25z
dGFudCA+PSAtMHg4MCkgJiYgKCF3aXRocGF0Y2gpKQorICAgICAgICAgICAgbW92X2ltbTgoY29u
c3RhbnQsIGRzdCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgbV9idWZmZXIuZW5zdXJl
U3BhY2UobWF4SW5zdHJ1Y3Rpb25TaXplLCBzaXplb2YodWludDMyX3QpKTsKKyAgICAgICAgICAg
IExvYWRDb25zdGFudFVuY2hlY2tlZFNpemUoY29uc3RhbnQsIGRzdCk7CisgICAgICAgIH0KKyAg
ICB9CisgICAgCisgICAgdm9pZCBMb2FkQ29uc3RhbnRVbmNoZWNrZWRTaXplKHVpbnQzMl90IGNv
bnN0YW50LCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IEdF
VE9QQ09ERUdST1VQRTMoTU9WSU1NX09QQ09ERSwgZHN0LCAwKTsgLy8gd2lsbCBiZSBwYXRjaGVk
IGxhdGVyIHRvIG1vdi5sCisgICAgICAgIG1fYnVmZmVyLnB1dFNob3J0V2l0aENvbnN0YW50SW50
KG9wYywgY29uc3RhbnQpOworICAgIH0KKworICAgIC8vIEZsb3cgY29udHJvbDoKKworICAgIEpt
cFNyYyBjYWxsKCkKKyAgICB7ICAgICAgICAKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFp
bVNjcmF0Y2goKTsKKyAgICAgICAgbV9idWZmZXIuZW5zdXJlU3BhY2UobWF4SW5zdHJ1Y3Rpb25T
aXplICsgNCwgc2l6ZW9mKHVpbnQzMl90KSk7CisgICAgICAgIExvYWRDb25zdGFudFVuY2hlY2tl
ZFNpemUoMHgwLCBzY3IpOworICAgICAgICBicmFuY2goSlNSX09QQ09ERSwgc2NyKTsKKyAgICAg
ICAgbm9wKCk7CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgICAgIHJldHVybiBK
bXBTcmMobV9idWZmZXIudW5jaGVja2VkU2l6ZSgpKTsKKyAgICB9CisKKyAgICBKbXBTcmMgY2Fs
bChSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIG1fYnVmZmVyLmVuc3VyZVNwYWNlKG1h
eEluc3RydWN0aW9uU2l6ZSArIDIpOworICAgICAgICBicmFuY2goSlNSX09QQ09ERSwgZHN0KTsK
KyAgICAgICAgbm9wKCk7CisgICAgICAgIHJldHVybiBKbXBTcmMobV9idWZmZXIudW5jaGVja2Vk
U2l6ZSgpKTsKKyAgICB9CisKKyAgICBKbXBTcmMgam1wKCkKKyAgICB7ICAgICAgICAKKyAgICAg
ICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgbV9idWZmZXIuZW5z
dXJlU3BhY2UobWF4SW5zdHJ1Y3Rpb25TaXplICsgNCwgc2l6ZW9mKHVpbnQzMl90KSk7CisgICAg
ICAgIGludCBtX3NpemUgPSBtX2J1ZmZlci51bmNoZWNrZWRTaXplKCk7CisgICAgICAgIExvYWRD
b25zdGFudFVuY2hlY2tlZFNpemUoMHgwLCBzY3IpOworICAgICAgICBicmFuY2goQlJBRl9PUENP
REUsIHNjcik7ICAgICAgICAKKyAgICAgICAgbm9wKCk7CisgICAgICAgIHJlbGVhc2VTY3JhdGNo
KHNjcik7CisgICAgCisgICAgICAgIHJldHVybiBKbXBTcmMobV9zaXplKTsKKyAgICB9CisgICAg
CisgICAgSm1wU3JjIGptcChSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIGptcF9yKGRz
dCk7CisgICAgICAgIHJldHVybiBKbXBTcmMobV9idWZmZXIudW5jaGVja2VkU2l6ZSgpKTsKKyAg
ICB9CisKKyAgICB2b2lkIGptcF9yKFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgbV9i
dWZmZXIuZW5zdXJlU3BhY2UobWF4SW5zdHJ1Y3Rpb25TaXplICsgMik7CisgICAgICAgIGJyYW5j
aChKTVBfT1BDT0RFLCBkc3QpOworICAgICAgICBub3AoKTsKKyAgICB9CisgICAgCisgICAgdm9p
ZCBqbXBfbShpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UpCisgICAgeworICAgICAgICBSZWdp
c3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICAKKyAgICAgICAgaWYgKChvZmZz
ZXQgPCAwKSB8fCAob2Zmc2V0ID49IDY0KSkgeworICAgICAgICAgICAgTG9hZENvbnN0YW50KG9m
ZnNldCwgc2NyKTsKKyAgICAgICAgICAgIGFkZGxfcnIoYmFzZSwgc2NyKTsKKyAgICAgICAgICAg
IG1vdmxfbXIoc2NyLCBzY3IpOworICAgICAgICB9IGVsc2UgaWYgKG9mZnNldCkgeworICAgICAg
ICAgICAgbW92bF9tcihvZmZzZXQgPj4gMiwgYmFzZSwgc2NyKTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIG1vdmxfbXIoYmFzZSwgc2NyKTsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgbV9idWZmZXIuZW5zdXJlU3BhY2UobWF4SW5zdHJ1Y3Rpb25TaXplICsgMik7CisgICAg
ICAgIGJyYW5jaChKTVBfT1BDT0RFLCBzY3IpOworICAgICAgICBub3AoKTsKKyAgICAgICAgcmVs
ZWFzZVNjcmF0Y2goc2NyKTsKKworICAgIH0KKyAgICAKKyAgICBKbXBTcmMgam5lKCkKKyAgICB7
CisgICAgICAgIGludCBtX3NpemUgPSBtX2J1ZmZlci51bmNoZWNrZWRTaXplKCk7CisgICAgICAg
IGJyYW5jaChCRl9PUENPREUsIDApOworICAgICAgICByZXR1cm4gSm1wU3JjKG1fc2l6ZSk7Cisg
ICAgfQorICAgIAorICAgIEptcFNyYyBqZSgpCisgICAgeworICAgICAgICBpbnQgbV9zaXplID0g
bV9idWZmZXIudW5jaGVja2VkU2l6ZSgpOworICAgICAgICBicmFuY2goQlRfT1BDT0RFLCAwKTsK
KyAgICAgICAgcmV0dXJuIEptcFNyYyhtX3NpemUpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHJl
dCgpCisgICAgeworICAgICAgICBtX2J1ZmZlci5lbnN1cmVTcGFjZShtYXhJbnN0cnVjdGlvblNp
emUgKyAyKTsKKyAgICAgICAgb25lU2hvcnRPcChSVFNfT1BDT0RFLCBmYWxzZSk7CisgICAgfQor
CisgICAgLy8gQXNzZW1ibGVyIGFkbWluIG1ldGhvZHM6CisKKyAgICBKbXBEc3QgbGFiZWwoKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIEptcERzdChtX2J1ZmZlci5zaXplKCkpOworICAgIH0KKyAg
ICAKKyAgICBpbnQgc2l6ZU9mQ29uc3RhbnRQb29sKCkKKyAgICB7CisgICAgICAgICByZXR1cm4g
bV9idWZmZXIuc2l6ZU9mQ29uc3RhbnRQb29sKCk7CisgICAgfQorCisgICAgSm1wRHN0IGFsaWdu
KGludCBhbGlnbm1lbnQpCisgICAgeworICAgICAgICBtX2J1ZmZlci5lbnN1cmVTcGFjZShtYXhJ
bnN0cnVjdGlvblNpemUgKyAyKTsKKyAgICAgICAgd2hpbGUgKCFtX2J1ZmZlci5pc0FsaWduZWQo
YWxpZ25tZW50KSkgeworICAgICAgICAgICAgbm9wKCk7CisgICAgICAgICAgICBtX2J1ZmZlci5l
bnN1cmVTcGFjZShtYXhJbnN0cnVjdGlvblNpemUgKyAyKTsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gbGFiZWwoKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBsaW5rSnVtcCh2b2lkKiBj
b2RlLCBKbXBTcmMgZnJvbSwgdm9pZCogdG8pCisgICAgeworICAgICAgICBBU1NFUlQoZnJvbS5t
X29mZnNldCAhPSAtMSk7CisKKyAgICAgICAgdWludDE2X3QqIGluc3RydWN0aW9uUHRyID0gcmVp
bnRlcnByZXRfY2FzdDx1aW50MTZfdCo+IChyZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGludD4o
Y29kZSkgKyBmcm9tLm1fb2Zmc2V0KTsKKyAgICAgICAgdWludDE2X3QgaW5zdHJ1Y3Rpb24gPSAq
aW5zdHJ1Y3Rpb25QdHI7CisgICAgICAgIGludCBvZmZzZXRCaXRzOworICAgICAgICAKKyAgICAg
ICAgaWYgKCgoaW5zdHJ1Y3Rpb24gJiAweEZGMDApID09IEJUX09QQ09ERSkgfHwgKChpbnN0cnVj
dGlvbiAmIDB4RkYwMCkgPT0gQkZfT1BDT0RFKSkgeworICAgICAgICAKKyAgICAgICAgICAgIC8q
IEJUIGxhYmVsICA9PT4gQkYgMiAKKyAgICAgICAgICAgICAgIG5vcCAgICAgICAgICAgTERSIHJl
ZworICAgICAgICAgICAgICAgbm9wICAgICAgICAgICBicmFmIEByZWcKKyAgICAgICAgICAgICAg
IG5vcCAgICAgICAgICAgbm9wCisgICAgICAgICAgICAqLworICAgICAgICAgICAgb2Zmc2V0Qml0
cyAgPSAoKHVuc2lnbmVkIGludCl0byAtICh1bnNpZ25lZCBpbnQpY29kZSkgLSBmcm9tLm1fb2Zm
c2V0IC0gODsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaW5zdHJ1Y3Rpb24gXj0gMHgwMjAy
OworICAgICAgICAgICAgKmluc3RydWN0aW9uUHRyKysgPSBpbnN0cnVjdGlvbjsKKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgIGludCBvZmZzZXQgPSAgICgqaW5zdHJ1Y3Rpb25QdHIgJiAw
eEZGKTsKKyAgICAgICAgICAgIHVpbnQxNl90KiBhZGRyZXNzICA9ICh1aW50MTZfdCopKChvZmZz
ZXQgPDwgMikgKyAoKCh1bnNpZ25lZCBpbnQpaW5zdHJ1Y3Rpb25QdHIgKyA0KSAmKH4weDMpKSk7
CisgICAgICAgICAgICAqcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBpbnQqPihhZGRyZXNzKSA9
IG9mZnNldEJpdHM7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBpbnN0cnVjdGlvbiA9
ICgweDAwMjMgfCAoKmluc3RydWN0aW9uUHRyKysgJiAweEYwMCkpOworICAgICAgICAgICAgKmlu
c3RydWN0aW9uUHRyKysgPSBpbnN0cnVjdGlvbjsKKyAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgLyogTU9WICNpbW0sIHJlZyAgPT4gTERSIHJlZworICAgICAg
ICAgICAgICAgIGJyYWYgQHJlZyAgICAgICAgYnJhZiBAcmVnCisgICAgICAgICAgICAgICAgbm9w
ICAgICAgICAgICAgICBub3AKKyAgICAgICAgICAgICovCisKKyAgICAgICAgICAgIEFTU0VSVCgo
KihpbnN0cnVjdGlvblB0ciArMSkgJiAweDAwMjMpID09IEJSQUZfT1BDT0RFKTsKKworICAgICAg
ICAgICAgb2Zmc2V0Qml0cyAgPSAoKHVuc2lnbmVkIGludCl0byAtICh1bnNpZ25lZCBpbnQpY29k
ZSkgLSBmcm9tLm1fb2Zmc2V0IC0gNjsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaW50IG9m
ZnNldFRvUEMgPSAoKmluc3RydWN0aW9uUHRyICYgMHhGRik7ICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIHVpbnQxNl90KiBhZGRyZXNzICA9ICh1aW50
MTZfdCopKChvZmZzZXRUb1BDIDw8IDIpICsgKCgodW5zaWduZWQgaW50KWluc3RydWN0aW9uUHRy
ICsgNCkgJih+MHgzKSkpOworICAgICAgICAgICAgKnJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQg
aW50Kj4oYWRkcmVzcykgPSBvZmZzZXRCaXRzOworICAgICAgICAgICAKKyAgICAgICAgIH0KKyAg
ICB9CisKKyAgICBzdGF0aWMgdm9pZCBsaW5rQ2FsbCh2b2lkKiBjb2RlLCBKbXBTcmMgZnJvbSwg
dm9pZCogdG8pCisgICAgeworICAgICAgICB1aW50MTZfdCogaW5zdHJ1Y3Rpb25QdHIgPSByZWlu
dGVycHJldF9jYXN0PHVpbnQxNl90Kj4oKHVuc2lnbmVkIGludCljb2RlICsgZnJvbS5tX29mZnNl
dCk7CisgICAgICAgIGluc3RydWN0aW9uUHRyID0gaW5zdHJ1Y3Rpb25QdHIgLTM7CisKKyAgICAg
ICAgaW50IG9mZnNldCA9ICAgKCooaW5zdHJ1Y3Rpb25QdHIpICYgMHhGRik7CisgICAgICAgIAor
ICAgICAgICB1aW50MTZfdCogYWRkcmVzcyAgPSAodWludDE2X3QqKSgob2Zmc2V0IDw8IDIpICsg
KCgodW5zaWduZWQgaW50KWluc3RydWN0aW9uUHRyICsgNCkgJih+MHgzKSkpOworICAgICAgICAq
cmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBpbnQqPihhZGRyZXNzKSA9ICh1bnNpZ25lZCBpbnQp
dG87CisgICAgfQorICAgIAorICAgIHN0YXRpYyB2b2lkIGxpbmtQb2ludGVyKHZvaWQqIGNvZGUs
IEptcERzdCB3aGVyZSwgdm9pZCogdmFsdWUpCisgICAgeworICAgICAgICB1aW50MTZfdCogaW5z
dHJ1Y3Rpb25QdHIgPSByZWludGVycHJldF9jYXN0PHVpbnQxNl90Kj4oKHVuc2lnbmVkIGludClj
b2RlICsgd2hlcmUubV9vZmZzZXQpOworICAgICAgICAKKyAgICAgICAgaW50IG9mZnNldCA9ICAg
KCppbnN0cnVjdGlvblB0ciAmIDB4RkYpOworICAgICAgICAKKyAgICAgICAgdWludDE2X3QqIGFk
ZHJlc3MgID0gKHVpbnQxNl90KikoKG9mZnNldCA8PCAyKSArICgoKHVuc2lnbmVkIGludClpbnN0
cnVjdGlvblB0ciArIDQpICYofjB4MykpKTsKKyAgICAgICAgKnJlaW50ZXJwcmV0X2Nhc3Q8dW5z
aWduZWQgaW50Kj4oYWRkcmVzcykgPSAodW5zaWduZWQgaW50KXZhbHVlOworICAgIH0KKyAgIAor
ICAgIHN0YXRpYyB1bnNpZ25lZCBnZXRDYWxsUmV0dXJuT2Zmc2V0KEptcFNyYyBjYWxsKQorICAg
IHsKKyAgICAgICAgQVNTRVJUKGNhbGwubV9vZmZzZXQgPj0gMCk7CisgICAgICAgIHJldHVybiBj
YWxsLm1fb2Zmc2V0OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgU0g0V29yZCogZ2V0TGRySW1t
QWRkcmVzc09uUG9vbChTSDRXb3JkKiBpbnNuLCB1aW50MzJfdCogY29uc3RQb29sKQorICAgIHsK
KyAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFNINFdvcmQqPihjb25zdFBvb2wgKyAo
Kmluc24gJiAweGZmKSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBTSDRXb3JkIHBhdGNoQ29u
c3RhbnRQb29sTG9hZChTSDRXb3JkIGxvYWQsIGludCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJl
dHVybiAobG9hZCAmIH4weGZmKSB8IHZhbHVlOworICAgIH0KKworICAgIHN0YXRpYyBTSDRXb3Jk
IHBsYWNlQ29uc3RhbnRQb29sQmFycmllcihpbnQgb2Zmc2V0KQorICAgIHsKKyAgICAgICAgQVNT
RVJUKCgob2Zmc2V0ID4+IDEpIDw9MjA0NykgJiYgKChvZmZzZXQgPj4gMSkgPj0gLTIwNDgpKTsK
KyAgICAgICAgcmV0dXJuICgwWEEwMDAgfChvZmZzZXQgPj4gMSkpOworICAgIH0KKyAgICBzdGF0
aWMgdm9pZCBwYXRjaENvbnN0YW50UG9vbExvYWQodm9pZCogbG9hZEFkZHIsIHZvaWQqIGNvbnN0
UG9vbEFkZHIpCisgICAgeworICAgICAgICB1aW50MTZfdCogaW5zdHJ1Y3Rpb25QdHIgPSByZWlu
dGVycHJldF9jYXN0PFNINFdvcmQqPihsb2FkQWRkcik7CisgICAgICAgIFNINFdvcmQgaW5kZXgg
PSAoKmluc3RydWN0aW9uUHRyICYgMHhmZik7CisgICAgICAgIAorICAgICAgICBBU1NFUlQoKCgo
KHVuc2lnbmVkIGludCljb25zdFBvb2xBZGRyIC0gKHVuc2lnbmVkIGludClsb2FkQWRkcikgKyBp
bmRleCAqIDQpKSA8IDEwMjQpOworICAgICAgICAKKyAgICAgICAgdWludDE2X3QgaW5zdHJ1Y3Rp
b24gPSAqaW5zdHJ1Y3Rpb25QdHIgJiAweGYwMDsKKyAgICAgICAgaW50IG9mZnNldCA9ICh1bnNp
Z25lZCBpbnQpY29uc3RQb29sQWRkciArIChpbmRleCAqIDQpIC0gKCgodW5zaWduZWQgaW50KWlu
c3RydWN0aW9uUHRyICYgfjB4MDMpICsgNCk7CisgICAgCisgICAgCisgICAgICAgIGluc3RydWN0
aW9uIHw9IDB4RDAwMDsKKyAgICAgICAgb2Zmc2V0ICY9IDB4MDNmZjsKKyAgICAgICAgaW5zdHJ1
Y3Rpb24gfD0gKG9mZnNldCA+PiAyKTsKKyAgICAgICAgKmluc3RydWN0aW9uUHRyID0gaW5zdHJ1
Y3Rpb247CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgcmVwYXRjaFBvaW50ZXIodm9pZCogd2hl
cmUsIHZvaWQqIHZhbHVlKQorICAgIHsKKyAgICAgICAgcGF0Y2hQb2ludGVyKHdoZXJlLCB2YWx1
ZSk7ICAgIAorICAgIH0KKyAgICAKKyAgICBzdGF0aWMgdm9pZCByZXBhdGNoTG9hZFB0clRvTEVB
KHZvaWQqIHdoZXJlKQorICAgIHsKKyAgICAgICAgdWludDE2X3QqIGxvYWRPcCA9IHJlaW50ZXJw
cmV0X2Nhc3Q8dWludDE2X3QqPih3aGVyZSkgKyAyOworCisgICAgICAgICpsb2FkT3AgPSAqbG9h
ZE9wIHwgMHgxOworICAgICAgICBFeGVjdXRhYmxlQWxsb2NhdG9yOjpjYWNoZUZsdXNoKGxvYWRP
cCwgc2l6ZW9mKHVpbnQxNl90KSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyB2b2lkIHJlcGF0
Y2hJbnQzMih2b2lkKiB3aGVyZSwgaW50MzJfdCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHVpbnQx
Nl90KiBpbnN0cnVjdGlvblB0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDE2X3QqPih3aGVyZSk7
CisgICAgICAgIAorICAgICAgICBpbnQgb2Zmc2V0ID0gICAoKmluc3RydWN0aW9uUHRyICYgMHhG
Rik7CisgICAgICAgIAorICAgICAgICB1aW50MTZfdCogYWRkcmVzcyAgPSAodWludDE2X3QqKSgo
b2Zmc2V0IDw8IDIpICsgKCgodW5zaWduZWQgaW50KXdoZXJlICsgNCkgJih+MHgzKSkpOworICAg
ICAgICAqcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBpbnQqPihhZGRyZXNzKSA9IHZhbHVlOwor
ICAgIH0KKworICAgIHN0YXRpYyB2b2lkIHJlbGlua0NhbGwodm9pZCogZnJvbSwgdm9pZCogdG8p
CisgICAgeworICAgICAgICB1aW50MTZfdCogaW5zdHJ1Y3Rpb25QdHIgPSByZWludGVycHJldF9j
YXN0PHVpbnQxNl90Kj4oZnJvbSk7CisgICAgICAgIGluc3RydWN0aW9uUHRyID0gaW5zdHJ1Y3Rp
b25QdHIgLSAzOworICAgICAgICAKKyAgICAgICAgaW50IG9mZnNldCA9ICAgKCppbnN0cnVjdGlv
blB0ciAmIDB4RkYpOworICAgICAgICAKKyAgICAgICAgdWludDE2X3QqIGFkZHJlc3MgID0gKHVp
bnQxNl90KikoKG9mZnNldCA8PCAyKSArICgoKHVuc2lnbmVkIGludClpbnN0cnVjdGlvblB0ciAr
IDQpICYofjB4MykpKTsKKyAgICAgICAgKnJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgaW50Kj4o
YWRkcmVzcykgPSAodW5zaWduZWQgaW50KXRvOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgdm9p
ZCByZWxpbmtKdW1wKHZvaWQqIGZyb20sIHZvaWQqIHRvKQorICAgIHsKKyAgICAgICAgdWludDE2
X3QqIGluc3RydWN0aW9uUHRyID0gcmVpbnRlcnByZXRfY2FzdDx1aW50MTZfdCo+IChmcm9tKTsK
KyAgICAgICAgdWludDE2X3QgaW5zdHJ1Y3Rpb24gPSAqaW5zdHJ1Y3Rpb25QdHI7CisgICAgICAg
IGludCBvZmZzZXRCaXRzOworICAgICAgICB1aW50MTZfdCogYWRkcmVzczsKKyAgICAgICAgCisg
ICAgICAgIGlmICgoKCppbnN0cnVjdGlvblB0ciAmIDB4RkYwMCkgPT0gQlRfT1BDT0RFKSB8fCAo
KCppbnN0cnVjdGlvblB0ciAmIDB4RkYwMCkgPT0gQkZfT1BDT0RFKSkgeworCisgICAgICAgICAg
ICBvZmZzZXRCaXRzICA9ICgodW5zaWduZWQgaW50KXRvIC0gKHVuc2lnbmVkIGludClmcm9tKSAt
IDg7CisgICAgICAgICAgICBpbnN0cnVjdGlvblB0cisrOworICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgaW50IG9mZnNldCA9ICAgKCppbnN0cnVjdGlvblB0ciAmIDB4RkYpOworICAgICAg
ICAgICAgYWRkcmVzcyAgPSAodWludDE2X3QqKSgob2Zmc2V0IDw8IDIpICsgKCgodW5zaWduZWQg
aW50KWluc3RydWN0aW9uUHRyICsgNCkgJih+MHgzKSkpOworICAgICAgICAgICAgKnJlaW50ZXJw
cmV0X2Nhc3Q8dW5zaWduZWQgaW50Kj4oYWRkcmVzcykgPSBvZmZzZXRCaXRzOworICAgICAgICAK
KyAgICAgICAgICAgIGluc3RydWN0aW9uID0gKDB4MDAyMyB8ICgqaW5zdHJ1Y3Rpb25QdHIrKyAm
IDB4RjAwKSk7CisgICAgICAgICAgICAqaW5zdHJ1Y3Rpb25QdHIrKyA9IGluc3RydWN0aW9uOwor
ICAgICAgICAgICAgCisgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgIAorICAgICAgICAg
ICAgQVNTRVJUKCgqKGluc3RydWN0aW9uUHRyICsxKSAmIDB4MDAyMykgPT0gQlJBRl9PUENPREUp
OworICAgICAgICAgICAgb2Zmc2V0Qml0cyAgPSAoKHVuc2lnbmVkIGludCl0byAtICh1bnNpZ25l
ZCBpbnQpZnJvbSkgLSA2OworICAgICAgICAgICAgaW50IG9mZnNldFRvUEMgPSAoKmluc3RydWN0
aW9uUHRyICYgMHhGRik7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICBhZGRyZXNzICA9ICh1aW50MTZfdCopKChvZmZzZXRUb1BDIDw8IDIpICsgKCgo
dW5zaWduZWQgaW50KWluc3RydWN0aW9uUHRyICsgNCkgJih+MHgzKSkpOworICAgICAgICAgICAg
KnJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgaW50Kj4oYWRkcmVzcykgPSBvZmZzZXRCaXRzOwor
CisgICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8vIExpbmtpbmcgJiBwYXRjaGluZzoKKwor
ICAgIHZvaWQgbGlua0p1bXAoSm1wU3JjIGZyb20sIEptcERzdCB0bykKKyAgICB7CisgICAgICAg
IEFTU0VSVCh0by5tX29mZnNldCAhPSAtMSk7CisgICAgICAgIEFTU0VSVChmcm9tLm1fb2Zmc2V0
ICE9IC0xKTsKKyAgICAgICAgCisgICAgICAgIHVpbnQxNl90KiBpbnN0cnVjdGlvblB0ciA9IHJl
aW50ZXJwcmV0X2Nhc3Q8dWludDE2X3QqPiAoKHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgaW50
PihkYXRhKCkpICsgZnJvbS5tX29mZnNldCkpOworICAgICAgICB1aW50MTZfdCBpbnN0cnVjdGlv
biA9ICppbnN0cnVjdGlvblB0cjsKKyAgICAgICAgaW50IG9mZnNldEJpdHM7CisgICAgICAgIAor
ICAgICAgICBpZiAoKChpbnN0cnVjdGlvbiAmIDB4RkYwMCkgPT0gQlRfT1BDT0RFKSB8fCAoKGlu
c3RydWN0aW9uICYgMHhGRjAwKSA9PSBCRl9PUENPREUpKSB7CisgICAgICAgIAorICAgICAgICAg
ICAgLyogQlQgbGFiZWwgICAgPT4gQkYgMgorICAgICAgICAgICAgICAgbm9wICAgICAgICAgICAg
TERSIHJlZworICAgICAgICAgICAgICAgbm9wICAgICAgICAgICAgYnJhZiBAcmVnCisgICAgICAg
ICAgICAgICBub3AgICAgICAgICAgICBub3AKKyAgICAgICAgICAgICovCisgICAgICAgICAgICBv
ZmZzZXRCaXRzICA9ICh0by5tX29mZnNldCAtIGZyb20ubV9vZmZzZXQpIC0gODsKKyAgICAgICAg
ICAgIGluc3RydWN0aW9uIF49IDB4MDIwMjsKKyAgICAgICAgICAgICppbnN0cnVjdGlvblB0cisr
ID0gaW5zdHJ1Y3Rpb247CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoKCppbnN0
cnVjdGlvblB0ciAmIDB4RjAwMCkgPT0gMHhFMDAwKSB7CisgICAgICAgICAgICAgICAgU0g0V29y
ZCogYWRkciA9IGdldExkckltbUFkZHJlc3NPblBvb2woaW5zdHJ1Y3Rpb25QdHIsIG1fYnVmZmVy
LnBvb2xBZGRyZXNzKCkpOworICAgICAgICAgICAgICAgICpyZWludGVycHJldF9jYXN0PHVuc2ln
bmVkIGludCo+KGFkZHIpID0gb2Zmc2V0Qml0czsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgaW50IG9mZnNldCA9ICAgKCppbnN0cnVjdGlvblB0ciAmIDB4RkYpOworICAg
ICAgICAgICAgICAgIHVpbnQxNl90KiBhZGRyZXNzICA9ICh1aW50MTZfdCopKChvZmZzZXQgPDwg
MikgKyAoKCh1bnNpZ25lZCBpbnQpaW5zdHJ1Y3Rpb25QdHIgKyA0KSAmKH4weDMpKSk7CisgICAg
ICAgICAgICAgICAgKnJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgaW50Kj4oYWRkcmVzcykgPSBv
ZmZzZXRCaXRzOworICAgICAgICAgICAgfQorICAgICAgICAgICAgIAorICAgICAgICAgICAgaW5z
dHJ1Y3Rpb24gPSAoMHgwMDIzIHwgKCppbnN0cnVjdGlvblB0cisrICYgMHhGMDApKTsKKyAgICAg
ICAgICAgICppbnN0cnVjdGlvblB0cisrID0gaW5zdHJ1Y3Rpb247CisgICAgICAgICAgICAgCisg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgIAorICAgICAgICAgICAgIC8qIE1PViAjIGlt
bSwgcmVnICA9PiBMRFIgcmVnCisgICAgICAgICAgICAgICAgYnJhZiBAcmVnICAgICAgICAgIGJy
YWYgQHJlZworICAgICAgICAgICAgICAgIG5vcCAgICAgICAgICAgICAgICBub3AKKyAgICAgICAg
ICAgICovCisgICAgICAgICAgICAKKyAgICAgICAgICAgIEFTU0VSVCgoKihpbnN0cnVjdGlvblB0
ciArMSkgJiAweDAwMjMpID09IEJSQUZfT1BDT0RFKTsKKyAgICAgICAgICAgIG9mZnNldEJpdHMg
ID0gKHRvLm1fb2Zmc2V0IC0gZnJvbS5tX29mZnNldCkgLSA2OworICAgICAgICAgICAgCisgICAg
ICAgICAgICBpbnN0cnVjdGlvbiA9ICppbnN0cnVjdGlvblB0cjsKKyAgICAgICAgICAgIGludCBv
ZmZzZXRUb1BDID0gKCppbnN0cnVjdGlvblB0ciAmIDB4RkYpOworICAgICAgICAgICAgCisgICAg
ICAgICAgICBpZiAoKGluc3RydWN0aW9uICAmIDB4RjAwMCkgPT0gMHhFMDAwKSB7CisgICAgICAg
ICAgICAgICAgU0g0V29yZCogYWRkciA9IGdldExkckltbUFkZHJlc3NPblBvb2woaW5zdHJ1Y3Rp
b25QdHIsIG1fYnVmZmVyLnBvb2xBZGRyZXNzKCkpOworICAgICAgICAgICAgICAgICpyZWludGVy
cHJldF9jYXN0PHVuc2lnbmVkIGludCo+KGFkZHIpID0gb2Zmc2V0Qml0czsKKyAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHVpbnQxNl90
KiBhZGRyZXNzICA9ICh1aW50MTZfdCopKChvZmZzZXRUb1BDIDw8IDIpICsgKCgodW5zaWduZWQg
aW50KWluc3RydWN0aW9uUHRyICsgNCkgJih+MHgzKSkpOworICAgICAgICAgICAgICAgICpyZWlu
dGVycHJldF9jYXN0PHVuc2lnbmVkIGludCo+KGFkZHJlc3MpID0gb2Zmc2V0Qml0czsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgIH0KKyAgICAgfQorCisgICAgc3RhdGljIHZvaWQqIGdldFJlbG9j
YXRlZEFkZHJlc3Modm9pZCogY29kZSwgSm1wU3JjIGp1bXApCisgICAgeworICAgICAgICByZXR1
cm4gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBpbnQ+
KGNvZGUpICsganVtcC5tX29mZnNldCk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQqIGdldFJl
bG9jYXRlZEFkZHJlc3Modm9pZCogY29kZSwgSm1wRHN0IGRlc3RpbmF0aW9uKQorICAgIHsKKyAg
ICAgICAgQVNTRVJUKGRlc3RpbmF0aW9uLm1fb2Zmc2V0ICE9IC0xKTsKKworICAgICAgICByZXR1
cm4gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBpbnQ+
KGNvZGUpICsgZGVzdGluYXRpb24ubV9vZmZzZXQpOworICAgIH0KKworICAgIHN0YXRpYyBpbnQg
Z2V0RGlmZmVyZW5jZUJldHdlZW5MYWJlbHMoSm1wRHN0IHNyYywgSm1wRHN0IGRzdCkKKyAgICB7
CisgICAgICAgIHJldHVybiBkc3QubV9vZmZzZXQgLSBzcmMubV9vZmZzZXQ7CisgICAgfQorCisg
ICAgc3RhdGljIGludCBnZXREaWZmZXJlbmNlQmV0d2VlbkxhYmVscyhKbXBEc3Qgc3JjLCBKbXBT
cmMgZHN0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGRzdC5tX29mZnNldCAtIHNyYy5tX29mZnNl
dDsKKyAgICB9CisgICAgCisgICAgc3RhdGljIGludCBnZXREaWZmZXJlbmNlQmV0d2VlbkxhYmVs
cyhKbXBTcmMgc3JjLCBKbXBEc3QgZHN0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGRzdC5tX29m
ZnNldCAtIHNyYy5tX29mZnNldDsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBwYXRjaFBvaW50
ZXIodm9pZCogY29kZSwgSm1wRHN0IHdoZXJlLCB2b2lkKiB2YWx1ZSkKKyAgICB7CisgICAgICAg
IHBhdGNoUG9pbnRlcihyZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGludCo+KGNvZGUpICsgd2hl
cmUubV9vZmZzZXQsIHZhbHVlKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIHZvaWQgcGF0Y2hQ
b2ludGVyKHZvaWQqIGNvZGUsIHZvaWQqIHZhbHVlKQorICAgIHsKKyAgICAgICAgcGF0Y2hJbnQz
Mihjb2RlLCByZWludGVycHJldF9jYXN0PHVpbnQzMl90Pih2YWx1ZSkpOworICAgIH0KKworICAg
IHN0YXRpYyB2b2lkIHBhdGNoSW50MzIodm9pZCogY29kZSwgdWludDMyX3QgdmFsdWUpCisgICAg
eworICAgICAgICB1aW50MTZfdCogaW5zdHJ1Y3Rpb25QdHIgPSByZWludGVycHJldF9jYXN0PHVp
bnQxNl90Kj4oY29kZSk7CisgICAgICAgIAorICAgICAgICBpbnQgb2Zmc2V0ID0gICAoKmluc3Ry
dWN0aW9uUHRyICYgMHhGRik7CisgICAgICAgIAorICAgICAgICB1aW50MTZfdCogYWRkcmVzcyAg
PSAodWludDE2X3QqKSgob2Zmc2V0IDw8IDIpICsgKCgodW5zaWduZWQgaW50KWNvZGUgKyA0KSAm
KH4weDMpKSk7CisgICAgICAgICpyZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGludCo+KGFkZHJl
c3MpID0gdmFsdWU7CisgICAgfQorICAgIAorICAgIHZvaWQqIGV4ZWN1dGFibGVDb3B5KEV4ZWN1
dGFibGVQb29sKiBhbGxvY2F0b3IpCisgICAgeworICAgICAgICB2b2lkKiBjb3B5ID0gbV9idWZm
ZXIuZXhlY3V0YWJsZUNvcHkoYWxsb2NhdG9yKTsKKyAgICAgICAgQVNTRVJUKGNvcHkpOworICAg
ICAgICByZXR1cm4gY29weTsKKyAgICB9CisKKyAgICB2b2lkIHByZWZpeCh1aW50MTZfdCBwcmUp
CisgICAgeworICAgICAgICBtX2J1ZmZlci5wdXRCeXRlKHByZSk7CisgICAgfQorCisgICAgdm9p
ZCBvbmVTaG9ydE9wKHVpbnQxNl90IG9wY29kZSwgYm9vbCBjaGVja3NpemUgPSB0cnVlKQorICAg
IHsKKyAgICAgICAgaWYgKGNoZWNrc2l6ZSkKKyAgICAgICAgICAgIG1fYnVmZmVyLmVuc3VyZVNw
YWNlKG1heEluc3RydWN0aW9uU2l6ZSk7CisgICAgICAgIG1fYnVmZmVyLnB1dFNob3J0VW5jaGVj
a2VkKG9wY29kZSk7CisgICAgfQorCisgICAgdm9pZCBlbnN1cmVTcGFjZShpbnQgc3BhY2UpCisg
ICAgeworICAgICAgICBtX2J1ZmZlci5lbnN1cmVTcGFjZShzcGFjZSk7CisgICAgfQorCisgICAg
dm9pZCBlbnN1cmVTcGFjZShpbnQgaW5zblNwYWNlLCBpbnQgY29uc3RTcGFjZSkKKyAgICB7Cisg
ICAgICAgIG1fYnVmZmVyLmVuc3VyZVNwYWNlKGluc25TcGFjZSwgY29uc3RTcGFjZSk7CisgICAg
fQorCisgICAgLy8gQWRtaW5pc3RyYXRpdmUgbWV0aG9kczoKKworICAgIHZvaWQqIGRhdGEoKSBj
b25zdCB7IHJldHVybiBtX2J1ZmZlci5kYXRhKCk7IH0KKyAgICBpbnQgc2l6ZSgpCisgICAgewor
ICAgICAgICByZXR1cm4gbV9idWZmZXIuc2l6ZSgpOworICAgIH0KKworICAgIHByaXZhdGU6Cisg
ICAgICAgIFNINEJ1ZmZlciBtX2J1ZmZlcjsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisj
ZW5kaWYgLy8gRU5BQkxFKEFTU0VNQkxFUikgJiYgQ1BVKFNINCkKKworI2VuZGlmIC8vIFNINEFz
c2VtYmxlcl9oCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9j
YXRvci5oIGIvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaAppbmRleCBm
MzYyNjA1Li40NzUwMGVhIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJs
ZUFsbG9jYXRvci5oCisrKyBiL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9y
LmgKQEAgLTQ3LDYgKzQ3LDEzIEBACiAjaW5jbHVkZSA8c3lzL2NhY2hlY3RsLmg+CiAjZW5kaWYK
IAorI2lmIENQVShTSDQpICYmIE9TKExJTlVYKQorI2luY2x1ZGUgPGFzbS9jYWNoZWN0bC5oPgor
I2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KKyNpbmNsdWRlIDxzeXMvc3lzY2FsbC5oPgorI2luY2x1
ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisKICNpZiBPUyhXSU5DRSkKIC8vIEZyb20gcGtmdW5jcy5o
IChwcml2YXRlIGhlYWRlciBmaWxlIGZyb20gdGhlIFBsYXRmb3JtIEJ1aWxkZXIpCiAjZGVmaW5l
IENBQ0hFX1NZTkNfQUxMIDB4MDdGCkBAIC0zMDcsNiArMzE0LDMwIEBAIHB1YmxpYzoKICAgICAg
ICAgSU1lbUNhY2hlMV9DbGVhckNhY2hlKG1lbUNhY2hlLmdldCgpLCByZWludGVycHJldF9jYXN0
PHVpbnQzMj4oY29kZSksIHNpemUsIE1FTVNQQUNFX0NBQ0hFX0ZMVVNILCBNRU1TUEFDRV9EQVRB
Q0FDSEUpOwogICAgICAgICBJTWVtQ2FjaGUxX0NsZWFyQ2FjaGUobWVtQ2FjaGUuZ2V0KCksIHJl
aW50ZXJwcmV0X2Nhc3Q8dWludDMyPihjb2RlKSwgc2l6ZSwgTUVNU1BBQ0VfQ0FDSEVfSU5WQUxJ
REFURSwgTUVNU1BBQ0VfSU5TVENBQ0hFKTsKICAgICB9CisjZWxpZiBDUFUoU0g0KSAmJiBPUyhM
SU5VWCkKKworI2lmbmRlZiBfX05SX2NhY2hlZmx1c2gKKyNkZWZpbmUgX19OUl9jYWNoZWZsdXNo
IF9fTlJfbW9kaWZ5X2xkdAorI2VuZGlmCisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBkZWZhdWx0
TGludXhQYWdlU2l6ZSA9IDQwOTY7CisKKyAgICBzdGF0aWMgdm9pZCBjYWNoZUZsdXNoKHZvaWQq
IGNvZGUsIHNpemVfdCBzaXplKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgaW50IGEsIGI7Cisg
ICAgICAgIGEgPSAodW5zaWduZWQgaW50KWNvZGUgJiB+KGRlZmF1bHRMaW51eFBhZ2VTaXplIC0g
MSk7CisgICAgICAgIGIgPSAoKHVuc2lnbmVkIGludCljb2RlICsgc2l6ZSArIChkZWZhdWx0TGlu
dXhQYWdlU2l6ZSAtIDEpKSAmIH4oZGVmYXVsdExpbnV4UGFnZVNpemUgLSAxKTsKKworICAgICAg
ICBpbnQgcmVzID0gc3lzY2FsbChfX05SX2NhY2hlZmx1c2gsIGEsIGRlZmF1bHRMaW51eFBhZ2VT
aXplLCBDQUNIRUZMVVNIX0RfV0IgfCBDQUNIRUZMVVNIX0kpOworICAgICAgICBBU1NFUlQoIXJl
cyk7CisKKyAgICAgICAgd2hpbGUgKGIgLSBhID4gZGVmYXVsdExpbnV4UGFnZVNpemUpIHsKKyAg
ICAgICAgICAgIGEgPSBhICsgZGVmYXVsdExpbnV4UGFnZVNpemU7CisgICAgICAgICAgICByZXMg
PSBzeXNjYWxsKF9fTlJfY2FjaGVmbHVzaCwgYSwgZGVmYXVsdExpbnV4UGFnZVNpemUsIENBQ0hF
RkxVU0hfRF9XQiB8IENBQ0hFRkxVU0hfSSk7CisKKyAgICAgICAgICAgIEFTU0VSVCghcmVzKTsK
KyAgICAgICAgfQorICAgIH0KICNlbHNlCiAgICAgI2Vycm9yICJUaGUgY2FjaGVGbHVzaCBzdXBw
b3J0IGlzIG1pc3Npbmcgb24gdGhpcyBwbGF0Zm9ybS4iCiAjZW5kaWYKZGlmZiAtLWdpdCBhL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVQuaCBiL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAppbmRleCAz
ZWYwNTM4Li5hYTA1OTllIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKKysr
IGIvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCkBAIC00OTQsNiArNDk0LDU0IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0TWV0aG9kQ2hlY2tQ
cm90b1N0cnVjdCA9IDUyOwogICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0TWV0
aG9kQ2hlY2tQdXRGdW5jdGlvbiA9IDg0OwogI2VuZGlmCisjZWxpZiBDUFUoU0g0KQorICAgICAg
IC8vIFRoZXNlIGFyY2hpdGVjdHVyZSBzcGVjaWZpYyB2YWx1ZSBhcmUgdXNlZCB0byBlbmFibGUg
cGF0Y2hpbmcgLSBzZWUgY29tbWVudCBvbiBvcF9wdXRfYnlfaWQuCisgICAgICAgIHN0YXRpYyBj
b25zdCBpbnQgcGF0Y2hPZmZzZXRQdXRCeUlkRXh0ZXJuYWxMb2FkID0gMTg7CisgICAgICAgIHN0
YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRHZXRCeUlkU3RydWN0dXJlID0gNjsKKyAgICAgICAg
c3RhdGljIGNvbnN0IGludCBwYXRjaExlbmd0aFB1dEJ5SWRFeHRlcm5hbExvYWQgPSA2OworICAg
ICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoTGVuZ3RoUHV0QnlJZEV4dGVybmFsTG9hZFByZWZp
eCA9IDA7CisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRQdXRCeUlkUHJvcGVy
dHlNYXBPZmZzZXQgPSAyNDsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldFB1
dEJ5SWRTdHJ1Y3R1cmUgPSA2OworICAgICAgICAvLyBUaGVzZSBhcmNoaXRlY3R1cmUgc3BlY2lm
aWMgdmFsdWUgYXJlIHVzZWQgdG8gZW5hYmxlIHBhdGNoaW5nIC0gc2VlIGNvbW1lbnQgb24gb3Bf
Z2V0X2J5X2lkLgorICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0R2V0QnlJZEJy
YW5jaFRvU2xvd0Nhc2UgPSAxMDsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNl
dEdldEJ5SWRFeHRlcm5hbExvYWQgPSAxODsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRj
aExlbmd0aEdldEJ5SWRFeHRlcm5hbExvYWQgPSA2OworICAgICAgICBzdGF0aWMgY29uc3QgaW50
IHBhdGNoTGVuZ3RoR2V0QnlJZEV4dGVybmFsTG9hZFByZWZpeCA9IDA7CisgICAgICAgIHN0YXRp
YyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRHZXRCeUlkUHJvcGVydHlNYXBPZmZzZXQgPSAyNDsKKyAg
ICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldEdldEJ5SWRQdXRSZXN1bHQgPSAzNjsK
KworICAgICAgICAvLyBzZXF1ZW5jZU9wQ2FsbAorICAgICAgICBzdGF0aWMgY29uc3QgaW50IHNl
cXVlbmNlT3BDYWxsSW5zdHJ1Y3Rpb25TcGFjZSA9IDEyOworICAgICAgICBzdGF0aWMgY29uc3Qg
aW50IHNlcXVlbmNlT3BDYWxsQ29uc3RhbnRTcGFjZSA9IDI7CisgICAgICAgIC8vIHNlcXVlbmNl
TWV0aG9kQ2hlY2sKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBzZXF1ZW5jZU1ldGhvZENoZWNr
SW5zdHJ1Y3Rpb25TcGFjZSA9IDQwOworICAgICAgICBzdGF0aWMgY29uc3QgaW50IHNlcXVlbmNl
TWV0aG9kQ2hlY2tDb25zdGFudFNwYWNlID0gNjsKKyAgICAgICAgLy8gc2VxdWVuY2VHZXRCeUlk
SG90UGF0aAorICAgICAgICBzdGF0aWMgY29uc3QgaW50IHNlcXVlbmNlR2V0QnlJZEhvdFBhdGhJ
bnN0cnVjdGlvblNwYWNlID0gMzY7CisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgc2VxdWVuY2VH
ZXRCeUlkSG90UGF0aENvbnN0YW50U3BhY2UgPSA1OworICAgICAgICAvLyBzZXF1ZW5jZUdldEJ5
SWRTbG93Q2FzZQorICAgICAgICBzdGF0aWMgY29uc3QgaW50IHNlcXVlbmNlR2V0QnlJZFNsb3dD
YXNlSW5zdHJ1Y3Rpb25TcGFjZSA9IDI2OworICAgICAgICBzdGF0aWMgY29uc3QgaW50IHNlcXVl
bmNlR2V0QnlJZFNsb3dDYXNlQ29uc3RhbnRTcGFjZSA9IDI7CisgICAgICAgIC8vIHNlcXVlbmNl
UHV0QnlJZAorICAgICAgICBzdGF0aWMgY29uc3QgaW50IHNlcXVlbmNlUHV0QnlJZEluc3RydWN0
aW9uU3BhY2UgPSAzNjsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBzZXF1ZW5jZVB1dEJ5SWRD
b25zdGFudFNwYWNlID0gNTsKKworICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0
R2V0QnlJZFByb3BlcnR5TWFwT2Zmc2V0MSA9IDI0OworICAgICAgICBzdGF0aWMgY29uc3QgaW50
IHBhdGNoT2Zmc2V0R2V0QnlJZFByb3BlcnR5TWFwT2Zmc2V0MiA9IDMwOworCisgICAgICAgIHN0
YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRQdXRCeUlkUHJvcGVydHlNYXBPZmZzZXQxID0gMjQ7
CisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRQdXRCeUlkUHJvcGVydHlNYXBP
ZmZzZXQyID0gMzA7CisKKyNpZiBFTkFCTEUoT1BDT0RFX1NBTVBMSU5HKQorICAgICAgICBzdGF0
aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0R2V0QnlJZFNsb3dDYXNlQ2FsbCA9IDA7IC8vIEZJTVhF
CisjZWxzZQorICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0R2V0QnlJZFNsb3dD
YXNlQ2FsbCA9IDIyOworI2VuZGlmCisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZz
ZXRPcENhbGxDb21wYXJlVG9KdW1wID0gNDsKKworICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBh
dGNoT2Zmc2V0TWV0aG9kQ2hlY2tQcm90b09iaiA9IDEyOworICAgICAgICBzdGF0aWMgY29uc3Qg
aW50IHBhdGNoT2Zmc2V0TWV0aG9kQ2hlY2tQcm90b1N0cnVjdCA9IDIwOworICAgICAgICBzdGF0
aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0TWV0aG9kQ2hlY2tQdXRGdW5jdGlvbiA9IDMyOwogI2Vs
c2UKICNlcnJvciAiSlNWQUxVRTMyXzY0IG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBwbGF0Zm9ybS4i
CiAjZW5kaWYKQEAgLTcxNCw2ICs3NjIsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICNpZiAoZGVmaW5l
ZChBU1NFTUJMRVJfSEFTX0NPTlNUQU5UX1BPT0wpICYmIEFTU0VNQkxFUl9IQVNfQ09OU1RBTlRf
UE9PTCkKICNkZWZpbmUgQkVHSU5fVU5JTlRFUlJVUFRFRF9TRVFVRU5DRShuYW1lKSBkbyB7IGJl
Z2luVW5pbnRlcnJ1cHRlZFNlcXVlbmNlKG5hbWUgIyMgSW5zdHJ1Y3Rpb25TcGFjZSwgbmFtZSAj
IyBDb25zdGFudFNwYWNlKTsgfSB3aGlsZSAoZmFsc2UpCiAjZGVmaW5lIEVORF9VTklOVEVSUlVQ
VEVEX1NFUVVFTkNFKG5hbWUpIGRvIHsgZW5kVW5pbnRlcnJ1cHRlZFNlcXVlbmNlKG5hbWUgIyMg
SW5zdHJ1Y3Rpb25TcGFjZSwgbmFtZSAjIyBDb25zdGFudFNwYWNlKTsgfSB3aGlsZSAoZmFsc2Up
CisjaWYgQ1BVKFNINCkKKyNkZWZpbmUgRU5EX1VOSU5URVJSVVBURURfU0VRVUVOQ0VTKG5hbWUs
IGV4dHJhSSwgZXh0cmFDKSBlbmRVbmludGVycnVwdGVkU2VxdWVuY2UobmFtZSAjIyBJbnN0cnVj
dGlvblNwYWNlICsgZXh0cmFJLCBuYW1lICMjIENvbnN0YW50U3BhY2UgKyBleHRyYUMpCisjZW5k
aWYKIAogICAgICAgICB2b2lkIGJlZ2luVW5pbnRlcnJ1cHRlZFNlcXVlbmNlKGludCwgaW50KTsK
ICAgICAgICAgdm9pZCBlbmRVbmludGVycnVwdGVkU2VxdWVuY2UoaW50LCBpbnQpOwpkaWZmIC0t
Z2l0IGEvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZU1ldGhvZHMuaCBiL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRJbmxpbmVNZXRob2RzLmgKaW5kZXggNzYxMTE1MS4uZTEzNDFhMCAxMDA2NDQK
LS0tIGEvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZU1ldGhvZHMuaAorKysgYi9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUSW5saW5lTWV0aG9kcy5oCkBAIC0xMDksNiArMTA5LDEzIEBAIEFMV0FZ
U19JTkxJTkUgdm9pZCBKSVQ6OmJlZ2luVW5pbnRlcnJ1cHRlZFNlcXVlbmNlKGludCBpbnNuU3Bh
Y2UsIGludCBjb25zdFNwYWNlCiAKICAgICBlbnN1cmVTcGFjZShpbnNuU3BhY2UsIGNvbnN0U3Bh
Y2UpOwogCisjZWxpZiBDUFUoU0g0KQorI2lmbmRlZiBOREVCVUcKKyAgICBpbnNuU3BhY2UgKz0g
c2l6ZW9mKFNINFdvcmQpOworICAgIGNvbnN0U3BhY2UgKz0gc2l6ZW9mKHVpbnQ2NF90KTsKKyNl
bmRpZgorCisgICAgbV9hc3NlbWJsZXIuZW5zdXJlU3BhY2UoaW5zblNwYWNlICArIG1fYXNzZW1i
bGVyLm1heEluc3RydWN0aW9uU2l6ZSArIDIsIGNvbnN0U3BhY2UgKyA4KTsKICNlbmRpZgogCiAj
aWYgZGVmaW5lZChBU1NFTUJMRVJfSEFTX0NPTlNUQU5UX1BPT0wpICYmIEFTU0VNQkxFUl9IQVNf
Q09OU1RBTlRfUE9PTApAQCAtMTQ2LDcgKzE1MywyMiBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklU
OjpyZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihBZGRyZXNzIGFkZHJlc3MpCiB7CiAg
ICAgbG9hZFB0cihhZGRyZXNzLCBsaW5rUmVnaXN0ZXIpOwogfQorI2VsaWYgQ1BVKFNINCkKKwor
QUxXQVlTX0lOTElORSB2b2lkIEpJVDo6cHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKFJl
Z2lzdGVySUQgcmVnKQoreworICAgIG1fYXNzZW1ibGVyLnN0c3ByKHJlZyk7Cit9CiAKK0FMV0FZ
U19JTkxJTkUgdm9pZCBKSVQ6OnJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKFJlZ2lz
dGVySUQgcmVnKQoreworICAgIG1fYXNzZW1ibGVyLmxkc3ByKHJlZyk7Cit9CisKK0FMV0FZU19J
TkxJTkUgdm9pZCBKSVQ6OnJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKEFkZHJlc3Mg
YWRkcmVzcykKK3sKKyAgICBsb2FkUHRyTGlua1JlZyhhZGRyZXNzKTsKK30KICNlbGlmIENQVShN
SVBTKQogCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpwcmVzZXJ2ZVJldHVybkFkZHJlc3NBZnRl
ckNhbGwoUmVnaXN0ZXJJRCByZWcpCkBAIC0xOTYsNiArMjE4LDggQEAgQUxXQVlTX0lOTElORSB2
b2lkIEpJVDo6cmVzdG9yZUFyZ3VtZW50UmVmZXJlbmNlRm9yVHJhbXBvbGluZSgpCiAgICAgYWRk
UHRyKEltbTMyKHNpemVvZih2b2lkKikpLCBzdGFja1BvaW50ZXJSZWdpc3RlciwgZmlyc3RBcmd1
bWVudFJlZ2lzdGVyKTsKICNlbGlmIENQVShBUk0pCiAgICAgbW92ZShzdGFja1BvaW50ZXJSZWdp
c3RlciwgZmlyc3RBcmd1bWVudFJlZ2lzdGVyKTsKKyNlbGlmIENQVShTSDQpCisgICAgbW92ZShz
dGFja1BvaW50ZXJSZWdpc3RlciwgZmlyc3RBcmd1bWVudFJlZ2lzdGVyKTsKICNlbmRpZgogICAg
IC8vIEluIHRoZSB0cmFtcG9saW5lIG9uIHg4Ni02NCwgdGhlIGZpcnN0IGFyZ3VtZW50IHJlZ2lz
dGVyIGlzIG5vdCBvdmVyd3JpdHRlbi4KIH0KZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRPcGNvZGVzMzJfNjQuY3BwIGIvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82
NC5jcHAKaW5kZXggMGEzZDY5ZC4uNGVkM2RhMCAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUv
aml0L0pJVE9wY29kZXMzMl82NC5jcHAKKysrIGIvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29k
ZXMzMl82NC5jcHAKQEAgLTI0NSw3ICsyNDUsMjkgQEAgSklUOjpMYWJlbCBKSVQ6OnByaXZhdGVD
b21waWxlQ1RJTmF0aXZlQ2FsbChKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGJvb2wgaXNDb24K
ICAgICBjYWxsKEFkZHJlc3MocmVnVDIsIGV4ZWN1dGFibGVPZmZzZXRUb0Z1bmN0aW9uKSk7CiAK
ICAgICByZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihyZWdUMyk7CisjZWxpZiBDUFUo
U0g0KQorICAgIC8vIExvYWQgY2FsbGVyIGZyYW1lJ3Mgc2NvcGUgY2hhaW4gaW50byB0aGlzIGNh
bGxmcmFtZSBzbyB0aGF0IHdoYXRldmVyIHdlIGNhbGwgY2FuCisgICAgLy8gZ2V0IHRvIGl0cyBn
bG9iYWwgZGF0YS4KKyAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihSZWdpc3RlckZp
bGU6OkNhbGxlckZyYW1lLCByZWdUMik7CisgICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQ
dHIoUmVnaXN0ZXJGaWxlOjpTY29wZUNoYWluLCByZWdUMSwgcmVnVDIpOworICAgIGVtaXRQdXRU
b0NhbGxGcmFtZUhlYWRlcihyZWdUMSwgUmVnaXN0ZXJGaWxlOjpTY29wZUNoYWluKTsKKworICAg
IHByZXNlcnZlUmV0dXJuQWRkcmVzc0FmdGVyQ2FsbChyZWdUMyk7IC8vIENhbGxlZSBwcmVzZXJ2
ZWQKKyAgICBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIocmVnVDMsIFJlZ2lzdGVyRmlsZTo6UmV0
dXJuUEMpOwogCisgICAgLy8gQ2FsbGluZyBjb252ZW50aW9uOiAgICAgIGYocjAgPT0gcmVnVDQs
IHIxID09IHJlZ1Q1LCAuLi4pOworICAgIC8vIEhvc3QgZnVuY3Rpb24gc2lnbmF0dXJlOiBmKEV4
ZWNTdGF0ZSopOworICAgIG1vdmUoY2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1Q0KTsKKworICAgIGVt
aXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKFJlZ2lzdGVyRmlsZTo6Q2FsbGVlLCByZWdUNSk7
CisgICAgbW92ZShyZWdUMiwgY2FsbEZyYW1lUmVnaXN0ZXIpOyAvLyBFYWdlcmx5IHJlc3RvcmUg
Y2FsbGVyIGZyYW1lIHJlZ2lzdGVyIHRvIGF2b2lkIGxvYWRpbmcgZnJvbSBzdGFjay4KKyAgICBs
b2FkUHRyKEFkZHJlc3MocmVnVDUsIE9CSkVDVF9PRkZTRVRPRihKU0Z1bmN0aW9uLCBtX2V4ZWN1
dGFibGUpKSwgcmVnVDIpOworCisgICAgbG9hZDMyKHJlZ1QyLCBleGVjdXRhYmxlT2Zmc2V0VG9G
dW5jdGlvbiwgcmVnVDApOworICAgIG1fYXNzZW1ibGVyLmJyYW5jaChKU1JfT1BDT0RFLCByZWdU
MCk7CisgICAgbV9hc3NlbWJsZXIubm9wKCk7CisKKyAgICByZXN0b3JlUmV0dXJuQWRkcmVzc0Jl
Zm9yZVJldHVybihyZWdUMyk7CiAjZWxpZiBDUFUoTUlQUykKICAgICAvLyBMb2FkIGNhbGxlciBm
cmFtZSdzIHNjb3BlIGNoYWluIGludG8gdGhpcyBjYWxsZnJhbWUgc28gdGhhdCB3aGF0ZXZlciB3
ZSBjYWxsIGNhbgogICAgIC8vIGdldCB0byBpdHMgZ2xvYmFsIGRhdGEuCkBAIC0zOTQsNiArNDE2
LDI4IEBAIEpJVDo6Q29kZVB0ciBKSVQ6OnByaXZhdGVDb21waWxlQ1RJTmF0aXZlQ2FsbChQYXNz
UmVmUHRyPEV4ZWN1dGFibGVQb29sPiBleGVjdXRhCiAgICAgYWRkUHRyKEltbTMyKDE2KSwgc3Rh
Y2tQb2ludGVyUmVnaXN0ZXIpOwogCiAgICAgcmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1
cm4ocmVnVDMpOworI2VsaWYgQ1BVKFNINCkKKyAgICAvLyBMb2FkIGNhbGxlciBmcmFtZSdzIHNj
b3BlIGNoYWluIGludG8gdGhpcyBjYWxsZnJhbWUgc28gdGhhdCB3aGF0ZXZlciB3ZSBjYWxsIGNh
bgorICAgIC8vIGdldCB0byBpdHMgZ2xvYmFsIGRhdGEuCisgICAgZW1pdEdldEZyb21DYWxsRnJh
bWVIZWFkZXJQdHIoUmVnaXN0ZXJGaWxlOjpDYWxsZXJGcmFtZSwgcmVnVDIpOworICAgIGVtaXRH
ZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKFJlZ2lzdGVyRmlsZTo6U2NvcGVDaGFpbiwgcmVnVDEs
IHJlZ1QyKTsKKyAgICBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIocmVnVDEsIFJlZ2lzdGVyRmls
ZTo6U2NvcGVDaGFpbik7CisKKyAgICBwcmVzZXJ2ZVJldHVybkFkZHJlc3NBZnRlckNhbGwocmVn
VDMpOyAvLyBDYWxsZWUgcHJlc2VydmVkCisgICAgZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKHJl
Z1QzLCBSZWdpc3RlckZpbGU6OlJldHVyblBDKTsKKworICAgIC8vIENhbGxpbmcgY29udmVudGlv
bjogICAgICBmKHIwID09IHJlZ1Q0LCByMSA9PSByZWdUNSwgLi4uKTsKKyAgICAvLyBIb3N0IGZ1
bmN0aW9uIHNpZ25hdHVyZTogZihFeGVjU3RhdGUqKTsKKyAgICBtb3ZlKGNhbGxGcmFtZVJlZ2lz
dGVyLCByZWdUNCk7CisKKyAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihSZWdpc3Rl
ckZpbGU6OkNhbGxlZSwgcmVnVDUpOworICAgIG1vdmUocmVnVDIsIGNhbGxGcmFtZVJlZ2lzdGVy
KTsgLy8gRWFnZXJseSByZXN0b3JlIGNhbGxlciBmcmFtZSByZWdpc3RlciB0byBhdm9pZCBsb2Fk
aW5nIGZyb20gc3RhY2suCisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1Q1LCBPQkpFQ1RfT0ZGU0VU
T0YoSlNGdW5jdGlvbiwgbV9leGVjdXRhYmxlKSksIHJlZ1QyKTsKKworICAgIC8vIGNhbGwgdGhl
IGZ1bmN0aW9uCisgICAgbmF0aXZlQ2FsbCA9IGNhbGwoKTsKKworICAgIHJlc3RvcmVSZXR1cm5B
ZGRyZXNzQmVmb3JlUmV0dXJuKHJlZ1QzKTsKIAogI2VsaWYgRU5BQkxFKEpJVF9PUFRJTUlaRV9O
QVRJVkVfQ0FMTCkKICNlcnJvciAiSklUX09QVElNSVpFX05BVElWRV9DQUxMIG5vdCB5ZXQgc3Vw
cG9ydGVkIG9uIHRoaXMgcGxhdGZvcm0uIgpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvaml0
L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwIGIvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3Bl
cnR5QWNjZXNzMzJfNjQuY3BwCmluZGV4IDcxMGExNTUuLjQ1NjA3MDggMTAwNjQ0Ci0tLSBhL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAorKysgYi9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAKQEAgLTQ3OSw3ICs0NzksMTYg
QEAgdm9pZCBKSVQ6OmNvbXBpbGVHZXRCeUlkU2xvd0Nhc2UoaW50IGRzdCwgaW50IGJhc2UsIElk
ZW50aWZpZXIqIGlkZW50LCBWZWN0b3I8U2wKICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChJbW1Q
dHIoaWRlbnQpKTsKICAgICBDYWxsIGNhbGwgPSBzdHViQ2FsbC5jYWxsKGRzdCk7CiAgICAgCisj
aWYgQ1BVKFNINCkKKyAgICBpZiAoKGRzdCA+PSAwKSAmJiAoZHN0IDw9IDcpKQorICAgICAgICBF
TkRfVU5JTlRFUlJVUFRFRF9TRVFVRU5DRShzZXF1ZW5jZUdldEJ5SWRTbG93Q2FzZSk7CisgICAg
ZWxzZSBpZiAoKGRzdCA+IDE1KSB8fCAoZHN0IDwgLTE2KSkKKyAgICAgICAgRU5EX1VOSU5URVJS
VVBURURfU0VRVUVOQ0VTKHNlcXVlbmNlR2V0QnlJZFNsb3dDYXNlLCA4LCAyKTsKKyAgICBlbHNl
CisgICAgICAgIEVORF9VTklOVEVSUlVQVEVEX1NFUVVFTkNFUyhzZXF1ZW5jZUdldEJ5SWRTbG93
Q2FzZSwgOCwgMCk7CisjZWxzZQogICAgIEVORF9VTklOVEVSUlVQVEVEX1NFUVVFTkNFKHNlcXVl
bmNlR2V0QnlJZFNsb3dDYXNlKTsKKyNlbmRpZgogICAgIAogICAgIEFTU0VSVChkaWZmZXJlbmNl
QmV0d2Vlbihjb2xkUGF0aEJlZ2luLCBjYWxsKSA9PSBwYXRjaE9mZnNldEdldEJ5SWRTbG93Q2Fz
ZUNhbGwpOwogICAgIApAQCAtNjQwLDcgKzY0OSw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGls
ZVB1dEJ5SWRUcmFuc2l0aW9uKFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgU3RydWN0dXJl
CiAgICAgYWRkMzIoSW1tMzIoMSksIEFic29sdXRlQWRkcmVzcyhuZXdTdHJ1Y3R1cmUtPmFkZHJl
c3NPZkNvdW50KCkpKTsKICAgICBzdG9yZVB0cihJbW1QdHIobmV3U3RydWN0dXJlKSwgQWRkcmVz
cyhyZWdUMCwgT0JKRUNUX09GRlNFVE9GKEpTQ2VsbCwgbV9zdHJ1Y3R1cmUpKSk7CiAgICAgCi0j
aWYgQ1BVKE1JUFMpCisjaWYgQ1BVKE1JUFMpIHx8IENQVShTSDQpCiAgICAgLy8gRm9yIE1JUFMs
IHdlIGRvbid0IGFkZCBzaXplb2Yodm9pZCopIHRvIHRoZSBzdGFjayBvZmZzZXQuCiAgICAgbG9h
ZDMyKEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIE9CSkVDVF9PRkZTRVRPRihKSVRTdGFj
a0ZyYW1lLCBhcmdzWzJdKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXls
b2FkKSksIHJlZ1QzKTsKICAgICBsb2FkMzIoQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3Rlciwg
T0JKRUNUX09GRlNFVE9GKEpJVFN0YWNrRnJhbWUsIGFyZ3NbMl0pICsgT0JKRUNUX09GRlNFVE9G
KEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCByZWdUMik7CmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUU3R1YnMuY3BwIGIvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcApp
bmRleCBjNjlhODI4Li40MjQyNGIxIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
U3R1YnMuY3BwCisrKyBiL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAKQEAgLTMxOSw2
ICszMTksNzMgQEAgZXh0ZXJuICJDIiB7CiAjZGVmaW5lIEdMT0JBTF9EQVRBX09GRlNFVCAgICAg
ICAgIDEwMAogI2RlZmluZSBTVEFDS19MRU5HVEggICAgICAgICAgICAgICAxMDQKIAorI2VsaWYg
Q1BVKFNINCkKKyNkZWZpbmUgU1lNQk9MX1NUUklORyhuYW1lKSAjbmFtZQorLyogY29kZSAocjQp
LCBSZWdpc3RlckZpbGUqIChyNSksIENhbGxGcmFtZSogKHI2KSwgSlNWYWx1ZSogZXhjZXB0aW9u
IChyNyksIFByb2ZpbGVyKiooc3ApLCBKU0dsb2JhbERhdGEgKHNwKSovCithc20oCisiLmFsaWdu
IDIiICJcbiIKKyIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5HKGN0aVRyYW1wb2xpbmUpICJcbiIKK1NZ
TUJPTF9TVFJJTkcoY3RpVHJhbXBvbGluZSkgIjoiICJcbiIKKyAgICAibW92LmwgcjcsIEAtcjE1
IiAiXG4iCisgICAgIm1vdi5sIHI2LCBALXIxNSIgIlxuIgorICAgICJtb3YubCByNSwgQC1yMTUi
ICJcbiIKKyAgICAibW92LmwgcjgsIEAtcjE1IiAiXG4iCisgICAgIm1vdiAjMTI3LCByOCIgIlxu
IgorICAgICJtb3YubCByMTQsIEAtcjE1IiAiXG4iCisgICAgInN0cy5sIHByLCBALXIxNSIgIlxu
IgorICAgICJtb3YubCByMTMsIEAtcjE1IiAiXG4iCisgICAgIm1vdi5sIHIxMSwgQC1yMTUiICJc
biIKKyAgICAiYWRkICMtNjAsIHIxNSIgIlxuIgorICAgICJtb3YgcjYsIHIxNCIgIlxuIgorICAg
ICJqc3IgQHI0IiAiXG4iCisgICAgIm5vcCIgIlxuIgorICAgICJhZGQgIzYwLCByMTUiICJcbiIK
KyAgICAibW92LmwgQHIxNSsscjExIiAiXG4iCisgICAgIm1vdi5sIEByMTUrLHIxMyIgIlxuIgor
ICAgICJsZHMubCBAcjE1KyxwciIgIlxuIgorICAgICJtb3YubCBAcjE1KyxyMTQiICJcbiIKKyAg
ICAibW92LmwgQHIxNSsscjgiICJcbiIKKyAgICAiYWRkICMxMiwgcjE1IiAiXG4iCisgICAgInJ0
cyIgIlxuIgorICAgICJub3AiICJcbiIKKyk7CisKK2FzbSgKKyIuYWxpZ24gMiIgIlxuIgorIi5n
bG9ibCAiIFNZTUJPTF9TVFJJTkcoY3RpVk1UaHJvd1RyYW1wb2xpbmUpICJcbiIKK1NZTUJPTF9T
VFJJTkcoY3RpVk1UaHJvd1RyYW1wb2xpbmUpICI6IiAiXG4iCisgICAgIm1vdi5sIC5MMiJTWU1C
T0xfU1RSSU5HKGN0aV92bV90aHJvdykiLHIwIiAiXG4iCisgICAgIm1vdiByMTUsIHI0IiAiXG4i
CisgICAgIm1vdi5sIEAocjAscjEyKSxyMTEiICJcbiIKKyAgICAianNyIEByMTEiICJcbiIKKyAg
ICAibm9wIiAiXG4iCisgICAgImFkZCAjNjAsIHIxNSIgIlxuIgorICAgICJtb3YubCBAcjE1Kyxy
MTEiICJcbiIKKyAgICAibW92LmwgQHIxNSsscjEzIiAiXG4iCisgICAgImxkcy5sIEByMTUrLHBy
IiAiXG4iCisgICAgIm1vdi5sIEByMTUrLHIxNCIgIlxuIgorICAgICJtb3YubCBAcjE1KyxyOCIg
IlxuIgorICAgICJhZGQgIzEyLCByMTUiICJcbiIKKyAgICAicnRzIiAiXG4iCisgICAgIm5vcCIg
IlxuIgorICAgICIuYWxpZ24gMiIgIlxuIgorICAgICIuTDIiU1lNQk9MX1NUUklORyhjdGlfdm1f
dGhyb3cpIjoubG9uZyAiIFNZTUJPTF9TVFJJTkcoY3RpX3ZtX3Rocm93KSJAR09UIFxuIgorKTsK
KworYXNtKAorIi5hbGlnbiAyIiAiXG4iCisiLmdsb2JsICIgU1lNQk9MX1NUUklORyhjdGlPcFRo
cm93Tm90Q2F1Z2h0KSAiXG4iCitTWU1CT0xfU1RSSU5HKGN0aU9wVGhyb3dOb3RDYXVnaHQpICI6
IiAiXG4iCisgICAgImFkZCAjNjAsIHIxNSIgIlxuIgorICAgICJtb3YubCBAcjE1KyxyMTEiICJc
biIKKyAgICAibW92LmwgQHIxNSsscjEzIiAiXG4iCisgICAgImxkcy5sIEByMTUrLHByIiAiXG4i
CisgICAgIm1vdi5sIEByMTUrLHIxNCIgIlxuIgorICAgICJtb3YubCBAcjE1KyxyOCIgIlxuIgor
ICAgICJhZGQgIzEyLCByMTUiICJcbiIKKyAgICAicnRzIiAiXG4iCisgICAgIm5vcCIgIlxuIgor
KTsKICNlbHNlCiAgICAgI2Vycm9yICJKSVQgbm90IHN1cHBvcnRlZCBvbiB0aGlzIHBsYXRmb3Jt
LiIKICNlbmRpZgpAQCAtMTI2MCw2ICsxMzI3LDI5IEBAIE1TVkMoKQogTVNWQ19FTkQoICAgIEVO
RCkKICovCiAKKyNlbGlmIENQVShTSDQpCisjZGVmaW5lIERFRklORV9TVFVCX0ZVTkNUSU9OKHJ0
eXBlLCBvcCkgXAorICAgIGV4dGVybiAiQyIgeyBcCisgICAgICAgIHJ0eXBlIEpJVFN0dWJUaHVu
a2VkXyMjb3AoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKTsgXAorICAgIH07IFwKKyAgICBhc20gdm9s
YXRpbGUoIFwKKyAgICAiLmFsaWduIDIiICJcbiIgXAorICAgICIuZ2xvYmwgIiBTWU1CT0xfU1RS
SU5HKGN0aV8jI29wKSAiXG4iIFwKKyAgICBTWU1CT0xfU1RSSU5HKGN0aV8jI29wKSAiOiIgIlxu
IiBcCisgICAgInN0cyBwciwgcjExIiAiXG4iIFwKKyAgICAibW92LmwgcjExLCBAKDB4MzgsIHIx
NSkiICJcbiIgXAorICAgICJtb3YubCAuTDIiU1lNQk9MX1NUUklORyhKSVRTdHViVGh1bmtlZF8j
I29wKSIscjAiICJcbiIgXAorICAgICJtb3YubCBAKHIwLHIxMikscjExIiAiXG4iIFwKKyAgICAi
anNyIEByMTEiICJcbiIgXAorICAgICJub3AiICJcbiIgXAorICAgICJtb3YubCBAKDB4MzgsIHIx
NSksIHIxMSAiICJcbiIgXAorICAgICJsZHMgcjExLCBwciAiICJcbiIgXAorICAgICJydHMiICJc
biIgXAorICAgICJub3AiICJcbiIgXAorICAgICIuYWxpZ24gMiIgIlxuIiBcCisgICAgIi5MMiJT
WU1CT0xfU1RSSU5HKEpJVFN0dWJUaHVua2VkXyMjb3ApIjoubG9uZyAiIFNZTUJPTF9TVFJJTkco
SklUU3R1YlRodW5rZWRfIyNvcCkiQEdPVCBcbiIgXAorICAgICk7IFwKKyAgICBydHlwZSBKSVRT
dHViVGh1bmtlZF8jI29wKFNUVUJfQVJHU19ERUNMQVJBVElPTikKICNlbHNlCiAjZGVmaW5lIERF
RklORV9TVFVCX0ZVTkNUSU9OKHJ0eXBlLCBvcCkgcnR5cGUgSklUX1NUVUIgY3RpXyMjb3AoU1RV
Ql9BUkdTX0RFQ0xBUkFUSU9OKQogI2VuZGlmCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUU3R1YnMuaCBiL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5oCmluZGV4IGMyN2Vl
NTJiLi5mNzJjOTZmIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuaAor
KysgYi9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuaApAQCAtMjI5LDYgKzIyOSwyNiBAQCBu
YW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBSZXR1cm5BZGRyZXNzUHRyKiByZXR1cm5BZGRyZXNz
U2xvdCgpIHsgcmV0dXJuICZ0aHVua1JldHVybkFkZHJlc3M7IH0KICAgICB9OworICAgICNlbGlm
IENQVShTSDQpCisgICAgc3RydWN0IEpJVFN0YWNrRnJhbWUgeworICAgICAgICBKSVRTdHViQXJn
IHBhZGRpbmc7IC8vIFVudXNlZAorICAgICAgICBKSVRTdHViQXJnIGFyZ3NbNl07CisKKyAgICAg
ICAgUmV0dXJuQWRkcmVzc1B0ciB0aHVua1JldHVybkFkZHJlc3M7CisgICAgICAgIHZvaWQqIHNh
dmVkUjExOworICAgICAgICB2b2lkKiBzYXZlZFIxMzsKKyAgICAgICAgdm9pZCogc2F2ZWRSUFI7
CisgICAgICAgIHZvaWQqIHNhdmVkUjE0OworICAgICAgICB2b2lkKiBzYXZlZFRpbWVvdXRSZWc7
CisKKyAgICAgICAgUmVnaXN0ZXJGaWxlKiByZWdpc3RlckZpbGU7CisgICAgICAgIENhbGxGcmFt
ZSogY2FsbEZyYW1lOworICAgICAgICBKU1ZhbHVlKiBleGNlcHRpb247CisgICAgICAgIFByb2Zp
bGVyKiogZW5hYmxlZFByb2ZpbGVyUmVmZXJlbmNlOworICAgICAgICBKU0dsb2JhbERhdGEqIGds
b2JhbERhdGE7CisKKyAgICAgICAgUmV0dXJuQWRkcmVzc1B0ciogcmV0dXJuQWRkcmVzc1Nsb3Qo
KSB7IHJldHVybiAmdGh1bmtSZXR1cm5BZGRyZXNzOyB9CisgICAgfTsKICNlbHNlCiAjZXJyb3Ig
IkpJVFN0YWNrRnJhbWUgbm90IGRlZmluZWQgZm9yIHRoaXMgcGxhdGZvcm0uIgogI2VuZGlmCmRp
ZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9qaXQvSlNJbnRlcmZhY2VKSVQuaCBiL0phdmFTY3Jp
cHRDb3JlL2ppdC9KU0ludGVyZmFjZUpJVC5oCmluZGV4IDY0NTNiYWIuLmE4MGRmYTcgMTAwNjQ0
Ci0tLSBhL0phdmFTY3JpcHRDb3JlL2ppdC9KU0ludGVyZmFjZUpJVC5oCisrKyBiL0phdmFTY3Jp
cHRDb3JlL2ppdC9KU0ludGVyZmFjZUpJVC5oCkBAIC0xNTMsNiArMTUzLDMyIEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICBzdGF0aWMgY29uc3QgRlBSZWdpc3RlcklEIGZwUmVnVDEgPSBNSVBT
UmVnaXN0ZXJzOjpmNjsKICAgICAgICAgc3RhdGljIGNvbnN0IEZQUmVnaXN0ZXJJRCBmcFJlZ1Qy
ID0gTUlQU1JlZ2lzdGVyczo6Zjg7CiAgICAgICAgIHN0YXRpYyBjb25zdCBGUFJlZ2lzdGVySUQg
ZnBSZWdUMyA9IE1JUFNSZWdpc3RlcnM6OmYxMDsKKyNlbGlmIENQVShTSDQpCisgICAgICAgIHN0
YXRpYyBjb25zdCBSZWdpc3RlcklEIHRpbWVvdXRDaGVja1JlZ2lzdGVyID0gU0g0OjpSODsKKyAg
ICAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgY2FsbEZyYW1lUmVnaXN0ZXIgPSBTSDQ6OkZQ
OworCisgICAgICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIHJlZ1QwID0gU0g0OjpSMDsKKyAg
ICAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgcmVnVDEgPSBTSDQ6OlIxOworICAgICAgICBz
dGF0aWMgY29uc3QgUmVnaXN0ZXJJRCByZWdUMiA9IFNINDo6UjI7CisgICAgICAgIHN0YXRpYyBj
b25zdCBSZWdpc3RlcklEIHJlZ1QzID0gU0g0OjpSMTM7CisgICAgICAgIHN0YXRpYyBjb25zdCBS
ZWdpc3RlcklEIHJlZ1Q0ID0gU0g0OjpSNDsKKyAgICAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVy
SUQgcmVnVDUgPSBTSDQ6OlI1OworICAgICAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCByZWdU
NiA9IFNINDo6UjY7CisgICAgICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIHJlZ1Q3ID0gU0g0
OjpSNzsKKyAgICAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgcmVnVDEzID0gU0g0OjpSMzsK
KyAgICAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgZmlyc3RBcmd1bWVudFJlZ2lzdGVyID1y
ZWdUNDsKKworICAgICAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCByZXR1cm5WYWx1ZVJlZ2lz
dGVyID0gU0g0OjpSMDsKKyAgICAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgY2FjaGVkUmVz
dWx0UmVnaXN0ZXIgPSBTSDQ6OlIwOworCisgICAgICAgIHN0YXRpYyBjb25zdCBGUFJlZ2lzdGVy
SUQgZnBSZWdUMCAgPSBTSDQ6OkZSMDsKKyAgICAgICAgc3RhdGljIGNvbnN0IEZQUmVnaXN0ZXJJ
RCBmcFJlZ1QxICA9IFNINDo6RlIyOworICAgICAgICBzdGF0aWMgY29uc3QgRlBSZWdpc3RlcklE
IGZwUmVnVDIgID0gU0g0OjpGUjQ7CisgICAgICAgIHN0YXRpYyBjb25zdCBGUFJlZ2lzdGVySUQg
ZnBSZWdUMyAgPSBTSDQ6OkZSNjsKKyAgICAgICAgc3RhdGljIGNvbnN0IEZQUmVnaXN0ZXJJRCBm
cFJlZ1Q0ICA9IFNINDo6RlI4OworICAgICAgICBzdGF0aWMgY29uc3QgRlBSZWdpc3RlcklEIGZw
UmVnVDUgID0gU0g0OjpGUjEwOworICAgICAgICBzdGF0aWMgY29uc3QgRlBSZWdpc3RlcklEIGZw
UmVnVDYgID0gU0g0OjpGUjEyOworICAgICAgICBzdGF0aWMgY29uc3QgRlBSZWdpc3RlcklEIGZw
UmVnVDcgID0gU0g0OjpGUjE0OwogI2Vsc2UKICNlcnJvciAiSklUIG5vdCBzdXBwb3J0ZWQgb24g
dGhpcyBwbGF0Zm9ybS4iCiAjZW5kaWYKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3d0Zi9Q
bGF0Zm9ybS5oIGIvSmF2YVNjcmlwdENvcmUvd3RmL1BsYXRmb3JtLmgKaW5kZXggM2IzYWNmNC4u
ZjgxOWRkMiAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvd3RmL1BsYXRmb3JtLmgKKysrIGIv
SmF2YVNjcmlwdENvcmUvd3RmL1BsYXRmb3JtLmgKQEAgLTkzMCw2ICs5MzAsOCBAQAogICAgIHx8
IENQVShTUEFSQzY0KSBcCiAgICAgfHwgQ1BVKFBQQzY0KQogI2RlZmluZSBXVEZfVVNFX0pTVkFM
VUU2NCAxCisjZWxpZiBDUFUoU0g0KQorI2RlZmluZSBXVEZfVVNFX0pTVkFMVUUzMl82NCAxCiAj
ZWxzZQogI2RlZmluZSBXVEZfVVNFX0pTVkFMVUUzMl82NCAxCiAjZW5kaWYKZGlmZiAtLWdpdCBh
L0phdmFTY3JpcHRDb3JlL3lhcnIvUmVnZXhKSVQuY3BwIGIvSmF2YVNjcmlwdENvcmUveWFyci9S
ZWdleEpJVC5jcHAKaW5kZXggMWI4MDQ2NC4uMTM1YzM0ZiAxMDA2NDQKLS0tIGEvSmF2YVNjcmlw
dENvcmUveWFyci9SZWdleEpJVC5jcHAKKysrIGIvSmF2YVNjcmlwdENvcmUveWFyci9SZWdleEpJ
VC5jcHAKQEAgLTYzLDYgKzYzLDE4IEBAIGNsYXNzIFJlZ2V4R2VuZXJhdG9yIDogcHJpdmF0ZSBN
YWNyb0Fzc2VtYmxlciB7CiAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgcmVnVDEgPSBNSVBT
UmVnaXN0ZXJzOjp0NTsKIAogICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIHJldHVyblJlZ2lz
dGVyID0gTUlQU1JlZ2lzdGVyczo6djA7CisjZWxpZiBDUFUoU0g0KQorICAgIHN0YXRpYyBjb25z
dCBSZWdpc3RlcklEIGlucHV0ID0gU0g0OjpSNDsKKyAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJ
RCBpbmRleCA9IFNINDo6UjU7CisgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgbGVuZ3RoID0g
U0g0OjpSNjsKKyAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCBvdXRwdXQgPSBTSDQ6OlI3Owor
CisgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgcmVnVDAgPSBTSDQ6OlIwOworICAgIHN0YXRp
YyBjb25zdCBSZWdpc3RlcklEIHJlZ1QxID0gU0g0OjpSMTsKKworICAgIHN0YXRpYyBjb25zdCBS
ZWdpc3RlcklEIHJldHVyblJlZ2lzdGVyID0gU0g0OjpSMDsKKyNkZWZpbmUgWmVybyBTSDRBc3Nl
bWJsZXI6OkVRCisjZGVmaW5lIE5vblplcm8gU0g0QXNzZW1ibGVyOjpORQogI2VsaWYgQ1BVKFg4
NikKICAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCBpbnB1dCA9IFg4NlJlZ2lzdGVyczo6ZWF4
OwogICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIGluZGV4ID0gWDg2UmVnaXN0ZXJzOjplZHg7
CkBAIC01NTUsNiArNTY3LDcgQEAgY2xhc3MgUmVnZXhHZW5lcmF0b3IgOiBwcml2YXRlIE1hY3Jv
QXNzZW1ibGVyIHsKICAgICAgICAgfQogICAgIH0KIAorI2lmICFDUFUoU0g0KQogICAgIHZvaWQg
Z2VuZXJhdGVQYXR0ZXJuQ2hhcmFjdGVyUGFpcihUZXJtR2VuZXJhdGlvblN0YXRlJiBzdGF0ZSkK
ICAgICB7CiAgICAgICAgIGNvbnN0IFJlZ2lzdGVySUQgY2hhcmFjdGVyID0gcmVnVDA7CkBAIC01
NzgsNiArNTkxLDcgQEAgY2xhc3MgUmVnZXhHZW5lcmF0b3IgOiBwcml2YXRlIE1hY3JvQXNzZW1i
bGVyIHsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBzdGF0ZS5qdW1wVG9CYWNrdHJhY2so
YnJhbmNoMzJXaXRoVW5hbGlnbmVkSGFsZldvcmRzKE5vdEVxdWFsLCBCYXNlSW5kZXgoaW5wdXQs
IGluZGV4LCBUaW1lc1R3bywgc3RhdGUuaW5wdXRPZmZzZXQoKSAqIHNpemVvZihVQ2hhcikpLCBJ
bW0zMihjaFBhaXIpKSwgdGhpcyk7CiAgICAgfQorI2VuZGlmCiAKICAgICB2b2lkIGdlbmVyYXRl
UGF0dGVybkNoYXJhY3RlckZpeGVkKFRlcm1HZW5lcmF0aW9uU3RhdGUmIHN0YXRlKQogICAgIHsK
QEAgLTExNDAsOCArMTE1NCwxMiBAQCBjbGFzcyBSZWdleEdlbmVyYXRvciA6IHByaXZhdGUgTWFj
cm9Bc3NlbWJsZXIgewogICAgICAgICAgICAgY2FzZSBRdWFudGlmaWVyRml4ZWRDb3VudDoKICAg
ICAgICAgICAgICAgICBpZiAodGVybS5xdWFudGl0eUNvdW50ID09IDEpIHsKICAgICAgICAgICAg
ICAgICAgICAgaWYgKHN0YXRlLmlzU2luZ2xlUGF0dGVybkNoYXJhY3Rlckxvb2thaGVhZFRlcm0o
KSAmJiAoc3RhdGUubG9va2FoZWFkVGVybSgpLmlucHV0UG9zaXRpb24gPT0gKHRlcm0uaW5wdXRQ
b3NpdGlvbiArIDEpKSkgeworI2lmICFDUFUoU0g0KQogICAgICAgICAgICAgICAgICAgICAgICAg
Z2VuZXJhdGVQYXR0ZXJuQ2hhcmFjdGVyUGFpcihzdGF0ZSk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBzdGF0ZS5uZXh0VGVybSgpOworI2Vsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGdl
bmVyYXRlUGF0dGVybkNoYXJhY3RlclNpbmdsZShzdGF0ZSk7CisjZW5kaWYKICAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZVBhdHRlcm5D
aGFyYWN0ZXJTaW5nbGUoc3RhdGUpOwogICAgICAgICAgICAgICAgIH0gZWxzZQpAQCAtMTQ2MSw2
ICsxNDc5LDggQEAgY2xhc3MgUmVnZXhHZW5lcmF0b3IgOiBwcml2YXRlIE1hY3JvQXNzZW1ibGVy
IHsKICAgICAgICAgcHVzaChBUk1SZWdpc3RlcnM6OnI4KTsgLy8gc2NyYXRjaCByZWdpc3Rlcgog
I2VuZGlmCiAgICAgICAgIG1vdmUoQVJNUmVnaXN0ZXJzOjpyMywgb3V0cHV0KTsKKyNlbGlmIENQ
VShTSDQpCisgICAgICAgIHB1c2goU0g0OjpSMTEpOwogI2VsaWYgQ1BVKE1JUFMpCiAgICAgICAg
IC8vIERvIG5vdGhpbmcuCiAjZW5kaWYKQEAgLTE0ODMsNiArMTUwMyw4IEBAIGNsYXNzIFJlZ2V4
R2VuZXJhdG9yIDogcHJpdmF0ZSBNYWNyb0Fzc2VtYmxlciB7CiAgICAgICAgIHBvcChBUk1SZWdp
c3RlcnM6OnI2KTsKICAgICAgICAgcG9wKEFSTVJlZ2lzdGVyczo6cjUpOwogICAgICAgICBwb3Ao
QVJNUmVnaXN0ZXJzOjpyNCk7CisjZWxpZiBDUFUoU0g0KQorICAgICAgICBwb3AoU0g0OjpSMTEp
OwogI2VsaWYgQ1BVKE1JUFMpCiAgICAgICAgIC8vIERvIG5vdGhpbmcKICNlbmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>76200</attachid>
            <date>2010-12-10 07:57:20 -0800</date>
            <delta_ts>2010-12-14 01:26:50 -0800</delta_ts>
            <desc>Enable JIT</desc>
            <filename>SH4-ENABLE-JIT-1.3.5</filename>
            <type>text/plain</type>
            <size>1879</size>
            <attacher name="thouraya">thouraya.andolsi</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCA1NzQ5NDg5Li5mMGI0NjU3
IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTEgQEAK
KzIwMTAtMTItMTAgIFRob3VyYXlhIEFORE9MU0kgIDx0aG91cmF5YS5hbmRvbHNpQHN0LmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBFbmFibGUg
SklUIGZvciBTSDQgcGxhdGZvcm1zLgorCisgICAgICAgICogY29uZmlndXJlLmFjOgorCiAyMDEw
LTExLTAxICBWaWF0Y2hlc2xhdiBPc3RhcGVua28gIDxvc3RhcGVua28udmlhdGNoZXNsYXZAbm9r
aWEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFuZHJlYXMgS2xpbmcuCmRpZmYgLS1naXQg
YS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKaW5kZXggNjdiYWI5Zi4uZjdhYTFiZCAxMDA2
NDQKLS0tIGEvY29uZmlndXJlLmFjCisrKyBiL2NvbmZpZ3VyZS5hYwpAQCAtNzEyLDYgKzcxMiwx
NyBAQCBpZiB0ZXN0ICIkZW5hYmxlX2ppdCIgPSAieWVzIjsgdGhlbgogICAgICAgICAgICAgICAg
IDs7CiAgICAgICAgICAgICBlc2FjCiAgICAgICAgIDs7CisgICAgICAgIHNoNCkKKyAgICAgICAg
ICAgIEFDX0RFRklORShbRU5BQkxFX1lBUlJdLCBbMV0sIFtEZWZpbmUgdG8gZW5hYmxlIFlBUlJd
KQorICAgICAgICAgICAgQUNfREVGSU5FKFtFTkFCTEVfWUFSUl9KSVRdLCBbMV0sIFtEZWZpbmUg
dG8gZW5hYmxlIFlBUlIgSklUXSkKKyAgICAgICAgICAgIEFDX0RFRklORShbRU5BQkxFX0pJVF0s
IFsxXSwgW0RlZmluZSB0byBlbmFibGUgSklUXSkKKyAgICAgICAgICAgIEFDX0RFRklORShbV1RG
X1VTRV9KSVRfU1RVQl9BUkdVTUVOVF9SRUdJU1RFUl0sIFsxXSwgW1VzZSBzdHViIHJlZ2lzdGVy
XSkKKyAgICAgICAgICAgIEFDX0RFRklORShbRU5BQkxFX0pJVF9PUFRJTUlaRV9BUklUSE1FVElD
XSwgWzFdLCBbRGVmaW5lIHRvIGVuYWJsZSBvcHRpbWl6ZWQgYXJpdGhtZXRpY10pCisgICAgICAg
ICAgICBBQ19ERUZJTkUoW0VOQUJMRV9KSVRfT1BUSU1JWkVfTkFUSVZFX0NBTExdLCBbMV0sIFtE
ZWZpbmUgdG8gZW5hYmxlIEVOQUJMRV9KSVRfT1BUSU1JWkVfTkFUSVZFX0NBTExdKQorICAgICAg
ICAgICAgQUNfREVGSU5FKFtFTkFCTEVfSklUX09QVElNSVpFX0NBTExdLCBbMV0sIFtEZWZpbmUg
dG8gZW5hYmxlIEVOQUJMRV9KSVRfT1BUSU1JWkVfQ0FMTF0pCisgICAgICAgICAgICBBQ19ERUZJ
TkUoW0VOQUJMRV9KSVRfT1BUSU1JWkVfUFJPUEVSVFlfQUNDRVNTXSwgWzFdLCBbRGVmaW5lIHRv
IGVuYWJsZUVOQUJMRV9KSVRfT1BUSU1JWkVfUFJPUEVSVFlfQUNDRVNTXSkKKyAgICAgICAgICAg
IEFDX0RFRklORShbRU5BQkxFX0pJVF9PUFRJTUlaRV9NRVRIT0RfQ0FMTFNdLCBbMV0sIFtEZWZp
bmUgdG8gZW5hYmxlIEVOQUJMRV9KSVRfT1BUSU1JWkVfTUVUSE9EX0NBTExTXSkKKyAgICAgICAg
OzsKICAgICAgICAgKikKICAgICAgICAgICAgIGVuYWJsZV9qaXQ9Im5vIChDUFUgJyRob3N0X2Nw
dScgbm90IHN1cHBvcnRlZCkiCiAgICAgICAgIDs7CkBAIC03NzUsNiArNzg2LDExIEBAIGNhc2Ug
IiR3aXRoX2ZvbnRfYmFja2VuZCIgaW4KIGVzYWMKIEFDX01TR19SRVNVTFQoWyR3aXRoX2ZvbnRf
YmFja2VuZF0pCiAKK2lmIHRlc3QgIiRob3N0X2NwdSIgPSAic2g0IjsgdGhlbgorICAgQ1hYRkxB
R1M9IiRDWFhGTEFHUyAtbWllZWUgIgorICAgQ0ZMQUdTPSIkQ0ZMQUdTIC1taWVlZSAiCitmaQor
CiAjIEFkZCAnLWcnIGZsYWcgdG8gZ2NjIGlmIGl0J3MgZGVidWcgYnVpbGQKIGlmIHRlc3QgIiRl
bmFibGVfZGVidWciID0gInllcyI7IHRoZW4KICAgIENYWEZMQUdTPSIkQ1hYRkxBR1MgLWciCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>76513</attachid>
            <date>2010-12-14 01:26:50 -0800</date>
            <delta_ts>2011-03-01 05:04:57 -0800</delta_ts>
            <desc>ADD JIT for SH4 platform</desc>
            <filename>SH4-JIT-1.3.7.patch</filename>
            <type>text/plain</type>
            <size>145966</size>
            <attacher name="thouraya">thouraya.andolsi</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwppbmRleCA2ZWJkMDY0Li4xYWFhZjYxIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjY1
IEBACisyMDEwLTEyLTEzICBUaG91cmF5YSBBTkRPTFNJICA8dGhvdXJheWEuYW5kb2xzaUBzdC5j
b20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRk
IEpJVCBzdXBwb3J0IGZvciBTSDQgcGxhdGZvcm1zLgorCisgICAgICAgICogR05VbWFrZWZpbGUu
YW06CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmg6CisgICAgICAgICogYXNz
ZW1ibGVyL01hY3JvQXNzZW1ibGVyU0g0Lmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpNYWNyb0Fz
c2VtYmxlclNINDo6Y2xhaW1TY3JhdGNoKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJT
SDQ6OnJlbGVhc2VTY3JhdGNoKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJTSDQ6OmFk
ZDMyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJTSDQ6OmFuZDMyKToKKyAgICAgICAg
KEpTQzo6TWFjcm9Bc3NlbWJsZXJTSDQ6OmxzaGlmdDMyKToKKyAgICAgICAgKEpTQzo6TWFjcm9B
c3NlbWJsZXJTSDQ6OnJzaGlmdDMyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJTSDQ6
Om11bDMyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJTSDQ6Om5vdDMyKToKKyAgICAg
ICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJTSDQ6Om9yMzIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fz
c2VtYmxlclNINDo6c3ViMzIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclNINDo6eG9y
MzIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclNINDo6bG9hZDMyKToKKyAgICAgICAg
KEpTQzo6TWFjcm9Bc3NlbWJsZXJTSDQ6OmxvYWQ4KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3Nl
bWJsZXJTSDQ6OmxvYWQxNik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyU0g0OjpzdG9y
ZTMyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJTSDQ6OmxvYWQzMldpdGhBZGRyZXNz
T2Zmc2V0UGF0Y2gpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclNINDo6c3RvcmUzMldp
dGhBZGRyZXNzT2Zmc2V0UGF0Y2gpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclNINDo6
bG9hZFB0cldpdGhQYXRjaFRvTEVBKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJTSDQ6
OnN1cHBvcnRzRmxvYXRpbmdQb2ludCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyU0g0
OjpzdXBwb3J0c0Zsb2F0aW5nUG9pbnRUcnVuY2F0ZSk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNz
ZW1ibGVyU0g0OjpzdXBwb3J0c0Zsb2F0aW5nUG9pbnRTcXJ0KToKKyAgICAgICAgKEpTQzo6TWFj
cm9Bc3NlbWJsZXJTSDQ6OmxvYWREb3VibGUpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxl
clNINDo6c3RvcmVEb3VibGUpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclNINDo6YWRk
RG91YmxlKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJTSDQ6OnN1YkRvdWJsZSk6Cisg
ICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyU0g0OjptdWxEb3VibGUpOgorICAgICAgICAoSlND
OjpNYWNyb0Fzc2VtYmxlclNINDo6ZGl2RG91YmxlKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3Nl
bWJsZXJTSDQ6OmNvbnZlcnRJbnQzMlRvRG91YmxlKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3Nl
bWJsZXJTSDQ6Onplcm9Eb3VibGUpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclNINDo6
YnJhbmNoRG91YmxlKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJTSDQ6OmJyYW5jaFRy
dWUpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclNINDo6YnJhbmNoRmFsc2UpOgorICAg
ICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclNINDo6c2V0OENvbXBhcmUzMik6CisgICAgICAgIChK
U0M6Ok1hY3JvQXNzZW1ibGVyU0g0OjpicmFuY2gzMik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNz
ZW1ibGVyU0g0OjpzcXJ0RG91YmxlKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJTSDQ6
OmJyYW5jaFRlc3Q4KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJTSDQ6OnNpZ25FeHRl
bmQzMlRvUHRyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJTSDQ6OmJyYW5jaDgpOgor
ICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclNINDo6YnJhbmNoVHJ1bmNhdGVEb3VibGVUb0lu
dDMyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJTSDQ6OnBvcCk6CisgICAgICAgIChK
U0M6Ok1hY3JvQXNzZW1ibGVyU0g0OjpwdXNoKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJs
ZXJTSDQ6Om1vdmUpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclNINDo6bW92ZVdpdGhQ
YXRjaCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyU0g0OjpleHR1dyk6CisgICAgICAg
IChKU0M6Ok1hY3JvQXNzZW1ibGVyU0g0OjpzZXQzMkNvbXBhcmUzMik6CisgICAgICAgIChKU0M6
Ok1hY3JvQXNzZW1ibGVyU0g0OjpzZXQzMlRlc3Q4KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3Nl
bWJsZXJTSDQ6OmxvYWRQdHJMaW5rUmVnKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJT
SDQ6OmJyYW5jaDE2KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJTSDQ6OmJyYW5jaFRl
c3QzMik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyU0g0OjpqdW1wKToKKyAgICAgICAg
KEpTQzo6TWFjcm9Bc3NlbWJsZXJTSDQ6OmJyYW5jaEFkZDMyKToKKyAgICAgICAgKEpTQzo6TWFj
cm9Bc3NlbWJsZXJTSDQ6OmJyYW5jaE11bDMyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJs
ZXJTSDQ6OmJyYW5jaFN1YjMyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJTSDQ6OmJy
YW5jaE9yMzIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclNINDo6YnJhbmNoQ29udmVy
dERvdWJsZVRvSW50MzIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclNINDo6bmVnMzIp
OgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclNINDo6dXJzaGlmdDMyKToKKyAgICAgICAg
KEpTQzo6TWFjcm9Bc3NlbWJsZXJTSDQ6OmNhbGwpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2Vt
YmxlclNINDo6bmVhckNhbGwpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclNINDo6YnJl
YWtwb2ludCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyU0g0OjpyZXQpOgorICAgICAg
ICAoSlNDOjpNYWNyb0Fzc2VtYmxlclNINDo6YnJhbmNoUHRyV2l0aFBhdGNoKToKKyAgICAgICAg
KEpTQzo6TWFjcm9Bc3NlbWJsZXJTSDQ6OnN0b3JlUHRyV2l0aFBhdGNoKToKKyAgICAgICAgKEpT
Qzo6TWFjcm9Bc3NlbWJsZXJTSDQ6OnRhaWxSZWN1cnNpdmVDYWxsKToKKyAgICAgICAgKEpTQzo6
TWFjcm9Bc3NlbWJsZXJTSDQ6Om1ha2VUYWlsUmVjdXJzaXZlQ2FsbCk6CisgICAgICAgIChKU0M6
Ok1hY3JvQXNzZW1ibGVyU0g0OjpzaXplT2ZDb25zdGFudFBvb2wpOgorICAgICAgICAoSlNDOjpN
YWNyb0Fzc2VtYmxlclNINDo6bGlua0NhbGwpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxl
clNINDo6cmVwYXRjaENhbGwpOgorICAgICAgICAqIGFzc2VtYmxlci9TSDRBc3NlbWJsZXIuaDog
QWRkZWQuCisgICAgICAgIChHRVRPUENPREVHUk9VUEUxKToKKyAgICAgICAgKEdFVE9QQ09ERUdS
T1VQRTIpOgorICAgICAgICAoR0VUT1BDT0RFR1JPVVBFMyk6CisgICAgICAgIChHRVRPUENPREVH
Uk9VUEU0KToKKyAgICAgICAgKEdFVE9QQ09ERUdST1VQRTUpOgorICAgICAgICAoR0VUT1BDT0RF
R1JPVVBFNik6CisgICAgICAgIChHRVRPUENPREVHUk9VUEU3KToKKyAgICAgICAgKEdFVE9QQ09E
RUdST1VQRTgpOgorICAgICAgICAoR0VUT1BDT0RFR1JPVVBFOSk6CisgICAgICAgIChHRVRPUENP
REVHUk9VUEUxMCk6CisgICAgICAgIChHRVRPUENPREVHUk9VUEUxMSk6CisgICAgICAgIChKU0M6
Oik6CisgICAgICAgIChKU0M6OlNINDo6KToKKyAgICAgICAgKEpTQzo6U0g0QXNzZW1ibGVyOjop
OgorICAgICAgICAoSlNDOjpTSDRBc3NlbWJsZXI6OlNINEFzc2VtYmxlcik6CisgICAgICAgIChK
U0M6OlNINEFzc2VtYmxlcjo6Sm1wU3JjOjpKbXBTcmMpOgorICAgICAgICAoSlNDOjpTSDRBc3Nl
bWJsZXI6OkptcERzdDo6Sm1wRHN0KToKKyAgICAgICAgKEpTQzo6U0g0QXNzZW1ibGVyOjpKbXBE
c3Q6OmlzVXNlZCk6CisgICAgICAgIChKU0M6OlNINEFzc2VtYmxlcjo6Sm1wRHN0Ojp1c2VkKToK
KyAgICAgICAgKEpTQzo6U0g0QXNzZW1ibGVyOjpJc0ltbWVkaWF0ZSk6CisgICAgICAgIChKU0M6
OlNINEFzc2VtYmxlcjo6Y2xhaW1TY3JhdGNoKToKKyAgICAgICAgKEpTQzo6U0g0QXNzZW1ibGVy
OjpyZWxlYXNlU2NyYXRjaCk6CisgICAgICAgIChKU0M6OlNINEFzc2VtYmxlcjo6cHVzaF9yKToK
KyAgICAgICAgKEpTQzo6U0g0QXNzZW1ibGVyOjpwb3Bfcik6CisgICAgICAgIChKU0M6OlNINEFz
c2VtYmxlcjo6cHVzaF9pMzIpOgorICAgICAgICAoSlNDOjpTSDRBc3NlbWJsZXI6OnB1c2hfbSk6
CisgICAgICAgIChKU0M6OlNINEFzc2VtYmxlcjo6cG9wX20pOgorICAgICAgICAoSlNDOjpTSDRB
c3NlbWJsZXI6Om1vdnQpOgorICAgICAgICAoSlNDOjpTSDRBc3NlbWJsZXI6OmFkZGxfcnIpOgor
ICAgICAgICAoSlNDOjpTSDRBc3NlbWJsZXI6OmFkZGNsX3JyKToKKyAgICAgICAgKEpTQzo6U0g0
QXNzZW1ibGVyOjphZGR2bF9ycik6CisgICAgICAgIChKU0M6OlNINEFzc2VtYmxlcjo6YWRkbF9p
OHIpOgorICAgICAgICAoSlNDOjpTSDRBc3NlbWJsZXI6OmFuZGxfcnIpOgorICAgICAgICAoSlND
OjpTSDRBc3NlbWJsZXI6OmFkZGxfaXIpOgorICAgICAgICAoSlNDOjpTSDRBc3NlbWJsZXI6OmFu
ZGxfaThyKToKKyAgICAgICAgKEpTQzo6U0g0QXNzZW1ibGVyOjpkaXYxbF9ycik6CisgICAgICAg
IChKU0M6OlNINEFzc2VtYmxlcjo6ZGl2MGxfcnIpOgorICAgICAgICAoSlNDOjpTSDRBc3NlbWJs
ZXI6Om5vdGxfcik6CisgICAgICAgIChKU0M6OlNINEFzc2VtYmxlcjo6b3JsX3JyKToKKyAgICAg
ICAgKEpTQzo6U0g0QXNzZW1ibGVyOjpvcmxfaThyKToKKyAgICAgICAgKEpTQzo6U0g0QXNzZW1i
bGVyOjpzdWJsX3JyKToKKyAgICAgICAgKEpTQzo6U0g0QXNzZW1ibGVyOjpzdWJ2bF9ycik6Cisg
ICAgICAgIChKU0M6OlNINEFzc2VtYmxlcjo6c3VibF9pbW1yKToKKyAgICAgICAgKEpTQzo6U0g0
QXNzZW1ibGVyOjp4b3JsX3JyKToKKyAgICAgICAgKEpTQzo6U0g0QXNzZW1ibGVyOjp4b3JsX2k4
cik6CisgICAgICAgIChKU0M6OlNINEFzc2VtYmxlcjo6c2hsbF9pOHIpOgorICAgICAgICAoSlND
OjpTSDRBc3NlbWJsZXI6Om5lZyk6CisgICAgICAgIChKU0M6OlNINEFzc2VtYmxlcjo6c2hsbF9y
cik6CisgICAgICAgIChKU0M6OlNINEFzc2VtYmxlcjo6c2hscl9ycik6CisgICAgICAgIChKU0M6
OlNINEFzc2VtYmxlcjo6c2hhcl9ycik6CisgICAgICAgIChKU0M6OlNINEFzc2VtYmxlcjo6c2hh
X3JyKToKKyAgICAgICAgKEpTQzo6U0g0QXNzZW1ibGVyOjpzaGxyX2k4cik6CisgICAgICAgIChK
U0M6OlNINEFzc2VtYmxlcjo6aW11bGxfcnIpOgorICAgICAgICAoSlNDOjpTSDRBc3NlbWJsZXI6
OmRtdWxsX3JyKToKKyAgICAgICAgKEpTQzo6U0g0QXNzZW1ibGVyOjpkbXVsc2xfcnIpOgorICAg
ICAgICAoSlNDOjpTSDRBc3NlbWJsZXI6OnN0c21hY2wpOgorICAgICAgICAoSlNDOjpTSDRBc3Nl
bWJsZXI6OnN0c21hY2gpOgorICAgICAgICAoSlNDOjpTSDRBc3NlbWJsZXI6OmNtcGxfcnIpOgor
ICAgICAgICAoSlNDOjpTSDRBc3NlbWJsZXI6OmNtcHBsKToKKyAgICAgICAgKEpTQzo6U0g0QXNz
ZW1ibGVyOjpjbXBweik6CisgICAgICAgIChKU0M6OlNINEFzc2VtYmxlcjo6Y21wbF9pcik6Cisg
ICAgICAgIChKU0M6OlNINEFzc2VtYmxlcjo6Y21wbF9tcik6CisgICAgICAgIChKU0M6OlNINEFz
c2VtYmxlcjo6Y21wbF9ybSk6CisgICAgICAgIChKU0M6OlNINEFzc2VtYmxlcjo6Y21wbF9pbSk6
CisgICAgICAgIChKU0M6OlNINEFzc2VtYmxlcjo6dGVzdGxfcnIpOgorICAgICAgICAoSlNDOjpT
SDRBc3NlbWJsZXI6OnRlc3RsX2k4cik6CisgICAgICAgIChKU0M6OlNINEFzc2VtYmxlcjo6dGVz
dGxfaTMycik6CisgICAgICAgIChKU0M6OlNINEFzc2VtYmxlcjo6dGVzdGxfaTMybSk6CisgICAg
ICAgIChKU0M6OlNINEFzc2VtYmxlcjo6dGVzdGJfaThyKToKKyAgICAgICAgKEpTQzo6U0g0QXNz
ZW1ibGVyOjpub3ApOgorICAgICAgICAoSlNDOjpTSDRBc3NlbWJsZXI6OnNldHQpOgorICAgICAg
ICAoSlNDOjpTSDRBc3NlbWJsZXI6OmNscnQpOgorICAgICAgICAoSlNDOjpTSDRBc3NlbWJsZXI6
OmJrcHQpOgorICAgICAgICAoSlNDOjpTSDRBc3NlbWJsZXI6OmJyYW5jaCk6CisgICAgICAgIChK
U0M6OlNINEFzc2VtYmxlcjo6ZHQpOgorICAgICAgICAoSlNDOjpTSDRBc3NlbWJsZXI6Omxkc3By
KToKKyAgICAgICAgKEpTQzo6U0g0QXNzZW1ibGVyOjpzdHNwcik6CisgICAgICAgIChKU0M6OlNI
NEFzc2VtYmxlcjo6ZXh0dXcpOgorICAgICAgICAoSlNDOjpTSDRBc3NlbWJsZXI6Omxkc3JtX2Zw
dWwpOgorICAgICAgICAoSlNDOjpTSDRBc3NlbWJsZXI6OmZuZWcpOgorICAgICAgICAoSlNDOjpT
SDRBc3NlbWJsZXI6OmZzcXJ0KToKKyAgICAgICAgKEpTQzo6U0g0QXNzZW1ibGVyOjpzdHNfZnB1
bF9ybik6CisgICAgICAgIChKU0M6OlNINEFzc2VtYmxlcjo6ZmxvYXRfZnB1bF9mcm4pOgorICAg
ICAgICAoSlNDOjpTSDRBc3NlbWJsZXI6OmZtdWxsKToKKyAgICAgICAgKEpTQzo6U0g0QXNzZW1i
bGVyOjpmbW92c19yZWFkX3JtKToKKyAgICAgICAgKEpTQzo6U0g0QXNzZW1ibGVyOjpmbW92c193
cml0ZV9ybSk6CisgICAgICAgIChKU0M6OlNINEFzc2VtYmxlcjo6Zm1vdnNfd3JpdGVfcjByKToK
KyAgICAgICAgKEpTQzo6U0g0QXNzZW1ibGVyOjpmbW92c19yZWFkX3Iwcik6CisgICAgICAgIChK
U0M6OlNINEFzc2VtYmxlcjo6Zm1vdnNfcmVhZF9ybV9pbmMpOgorICAgICAgICAoSlNDOjpTSDRB
c3NlbWJsZXI6OmZtb3ZzX3dyaXRlX3JuX2RlYyk6CisgICAgICAgIChKU0M6OlNINEFzc2VtYmxl
cjo6ZnRyY19ybV9mcHVsKToKKyAgICAgICAgKEpTQzo6U0g0QXNzZW1ibGVyOjpmbGRzX2ZwdWwp
OgorICAgICAgICAoSlNDOjpTSDRBc3NlbWJsZXI6OmZzdHNfZnB1bCk6CisgICAgICAgIChKU0M6
OlNINEFzc2VtYmxlcjo6bGRzZnBzY3IpOgorICAgICAgICAoSlNDOjpTSDRBc3NlbWJsZXI6OnN0
c2Zwc2NyKToKKyAgICAgICAgKEpTQzo6U0g0QXNzZW1ibGVyOjpkY21wcGVxKToKKyAgICAgICAg
KEpTQzo6U0g0QXNzZW1ibGVyOjpkY21wcGd0KToKKyAgICAgICAgKEpTQzo6U0g0QXNzZW1ibGVy
OjpkbXVsX3JyKToKKyAgICAgICAgKEpTQzo6U0g0QXNzZW1ibGVyOjpkc3ViX3JyKToKKyAgICAg
ICAgKEpTQzo6U0g0QXNzZW1ibGVyOjpkYWRkX3JyKToKKyAgICAgICAgKEpTQzo6U0g0QXNzZW1i
bGVyOjpkbW92X3JyKToKKyAgICAgICAgKEpTQzo6U0g0QXNzZW1ibGVyOjpkZGl2X3JyKToKKyAg
ICAgICAgKEpTQzo6U0g0QXNzZW1ibGVyOjpkc3FydCk6CisgICAgICAgIChKU0M6OlNINEFzc2Vt
Ymxlcjo6ZG91YmxlbG9hZCk6CisgICAgICAgIChKU0M6OlNINEFzc2VtYmxlcjo6ZG5lZyk6Cisg
ICAgICAgIChKU0M6OlNINEFzc2VtYmxlcjo6ZG91Ymxlc3RvcmUpOgorICAgICAgICAoSlNDOjpT
SDRBc3NlbWJsZXI6OmZtb3ZfcmVhZF9ybSk6CisgICAgICAgIChKU0M6OlNINEFzc2VtYmxlcjo6
Zm1vdl93cml0ZV9ybSk6CisgICAgICAgIChKU0M6OlNINEFzc2VtYmxlcjo6Zm1vdl93cml0ZV9y
MHIpOgorICAgICAgICAoSlNDOjpTSDRBc3NlbWJsZXI6OmZtb3ZfcmVhZF9yMHIpOgorICAgICAg
ICAoSlNDOjpTSDRBc3NlbWJsZXI6OmZtb3ZfcmVhZF9ybV9pbmMpOgorICAgICAgICAoSlNDOjpT
SDRBc3NlbWJsZXI6OmZtb3Zfd3JpdGVfcm5fZGVjKToKKyAgICAgICAgKEpTQzo6U0g0QXNzZW1i
bGVyOjpmbG9hdF9mcHVsX2Rybik6CisgICAgICAgIChKU0M6OlNINEFzc2VtYmxlcjo6ZnRyY19k
cm1fZnB1bCk6CisgICAgICAgIChKU0M6OlNINEFzc2VtYmxlcjo6bW92X2ltbTgpOgorICAgICAg
ICAoSlNDOjpTSDRBc3NlbWJsZXI6Om1vdmxfcnIpOgorICAgICAgICAoSlNDOjpTSDRBc3NlbWJs
ZXI6Om1vdndfcm0pOgorICAgICAgICAoSlNDOjpTSDRBc3NlbWJsZXI6Om1vdndfbXIpOgorICAg
ICAgICAoSlNDOjpTSDRBc3NlbWJsZXI6Om1vdndfcjBtcik6CisgICAgICAgIChKU0M6OlNINEFz
c2VtYmxlcjo6bW92bF9ybSk6CisgICAgICAgIChKU0M6OlNINEFzc2VtYmxlcjo6bW92bF9pMzJt
KToKKyAgICAgICAgKEpTQzo6U0g0QXNzZW1ibGVyOjptb3ZsX21yKToKKyAgICAgICAgKEpTQzo6
U0g0QXNzZW1ibGVyOjptb3ZiX21yKToKKyAgICAgICAgKEpTQzo6U0g0QXNzZW1ibGVyOjptb3Zi
X3IwbXIpOgorICAgICAgICAoSlNDOjpTSDRBc3NlbWJsZXI6Om1vdmxfcjBtcik6CisgICAgICAg
IChKU0M6OlNINEFzc2VtYmxlcjo6bW92bF9ybXIwKToKKyAgICAgICAgKEpTQzo6U0g0QXNzZW1i
bGVyOjptb3ZsX2k4cik6CisgICAgICAgIChKU0M6OlNINEFzc2VtYmxlcjo6b3JsX2lyKToKKyAg
ICAgICAgKEpTQzo6U0g0QXNzZW1ibGVyOjpMb2FkQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpT
SDRBc3NlbWJsZXI6OkxvYWRDb25zdGFudFVuY2hlY2tlZFNpemUpOgorICAgICAgICAoSlNDOjpT
SDRBc3NlbWJsZXI6OmNhbGwpOgorICAgICAgICAoSlNDOjpTSDRBc3NlbWJsZXI6OmptcCk6Cisg
ICAgICAgIChKU0M6OlNINEFzc2VtYmxlcjo6am1wX3IpOgorICAgICAgICAoSlNDOjpTSDRBc3Nl
bWJsZXI6OmptcF9tKToKKyAgICAgICAgKEpTQzo6U0g0QXNzZW1ibGVyOjpqbmUpOgorICAgICAg
ICAoSlNDOjpTSDRBc3NlbWJsZXI6OmplKToKKyAgICAgICAgKEpTQzo6U0g0QXNzZW1ibGVyOjpy
ZXQpOgorICAgICAgICAoSlNDOjpTSDRBc3NlbWJsZXI6OmxhYmVsKToKKyAgICAgICAgKEpTQzo6
U0g0QXNzZW1ibGVyOjpzaXplT2ZDb25zdGFudFBvb2wpOgorICAgICAgICAoSlNDOjpTSDRBc3Nl
bWJsZXI6OmFsaWduKToKKyAgICAgICAgKEpTQzo6U0g0QXNzZW1ibGVyOjpsaW5rSnVtcCk6Cisg
ICAgICAgIChKU0M6OlNINEFzc2VtYmxlcjo6bGlua0NhbGwpOgorICAgICAgICAoSlNDOjpTSDRB
c3NlbWJsZXI6OmxpbmtQb2ludGVyKToKKyAgICAgICAgKEpTQzo6U0g0QXNzZW1ibGVyOjpnZXRD
YWxsUmV0dXJuT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6U0g0QXNzZW1ibGVyOjpnZXRMZHJJbW1B
ZGRyZXNzT25Qb29sKToKKyAgICAgICAgKEpTQzo6U0g0QXNzZW1ibGVyOjpwYXRjaENvbnN0YW50
UG9vbExvYWQpOgorICAgICAgICAoSlNDOjpTSDRBc3NlbWJsZXI6OnBsYWNlQ29uc3RhbnRQb29s
QmFycmllcik6CisgICAgICAgIChKU0M6OlNINEFzc2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIpOgor
ICAgICAgICAoSlNDOjpTSDRBc3NlbWJsZXI6OnJlcGF0Y2hMb2FkUHRyVG9MRUEpOgorICAgICAg
ICAoSlNDOjpTSDRBc3NlbWJsZXI6OnJlcGF0Y2hJbnQzMik6CisgICAgICAgIChKU0M6OlNINEFz
c2VtYmxlcjo6cmVsaW5rQ2FsbCk6CisgICAgICAgIChKU0M6OlNINEFzc2VtYmxlcjo6cmVsaW5r
SnVtcCk6CisgICAgICAgIChKU0M6OlNINEFzc2VtYmxlcjo6Z2V0UmVsb2NhdGVkQWRkcmVzcyk6
CisgICAgICAgIChKU0M6OlNINEFzc2VtYmxlcjo6Z2V0RGlmZmVyZW5jZUJldHdlZW5MYWJlbHMp
OgorICAgICAgICAoSlNDOjpTSDRBc3NlbWJsZXI6OnBhdGNoUG9pbnRlcik6CisgICAgICAgIChK
U0M6OlNINEFzc2VtYmxlcjo6cGF0Y2hJbnQzMik6CisgICAgICAgIChKU0M6OlNINEFzc2VtYmxl
cjo6ZXhlY3V0YWJsZUNvcHkpOgorICAgICAgICAoSlNDOjpTSDRBc3NlbWJsZXI6OnByZWZpeCk6
CisgICAgICAgIChKU0M6OlNINEFzc2VtYmxlcjo6b25lU2hvcnRPcCk6CisgICAgICAgIChKU0M6
OlNINEFzc2VtYmxlcjo6ZW5zdXJlU3BhY2UpOgorICAgICAgICAoSlNDOjpTSDRBc3NlbWJsZXI6
OmRhdGEpOgorICAgICAgICAoSlNDOjpTSDRBc3NlbWJsZXI6OnNpemUpOgorICAgICAgICAqIGpp
dC9FeGVjdXRhYmxlQWxsb2NhdG9yLmg6CisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVBbGxvY2F0
b3I6OmNhY2hlRmx1c2gpOgorICAgICAgICAqIGppdC9KSVQuaDoKKyAgICAgICAgKiBqaXQvSklU
SW5saW5lTWV0aG9kcy5oOgorICAgICAgICAoSlNDOjpKSVQ6OmJlZ2luVW5pbnRlcnJ1cHRlZFNl
cXVlbmNlKToKKyAgICAgICAgKEpTQzo6SklUOjpwcmVzZXJ2ZVJldHVybkFkZHJlc3NBZnRlckNh
bGwpOgorICAgICAgICAoSlNDOjpKSVQ6OnJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJu
KToKKyAgICAgICAgKEpTQzo6SklUOjpyZXN0b3JlQXJndW1lbnRSZWZlcmVuY2VGb3JUcmFtcG9s
aW5lKToKKyAgICAgICAgKiBqaXQvSklUT3Bjb2RlczMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6
SklUOjpwcml2YXRlQ29tcGlsZUNUSU5hdGl2ZUNhbGwpOgorICAgICAgICAqIGppdC9KSVRQcm9w
ZXJ0eUFjY2VzczMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlR2V0QnlJZFNs
b3dDYXNlKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5SWRUcmFuc2l0
aW9uKToKKyAgICAgICAgKiBqaXQvSklUU3R1YnMuY3BwOgorICAgICAgICAqIGppdC9KSVRTdHVi
cy5oOgorICAgICAgICAoSlNDOjpKSVRTdGFja0ZyYW1lOjpyZXR1cm5BZGRyZXNzU2xvdCk6Cisg
ICAgICAgICogaml0L0pTSW50ZXJmYWNlSklULmg6CisgICAgICAgICogeWFyci9SZWdleEpJVC5j
cHA6CisgICAgICAgIChKU0M6OllhcnI6OlJlZ2V4R2VuZXJhdG9yOjpnZW5lcmF0ZVRlcm0pOgor
ICAgICAgICAoSlNDOjpZYXJyOjpSZWdleEdlbmVyYXRvcjo6Z2VuZXJhdGVFbnRlcik6CisgICAg
ICAgIChKU0M6OllhcnI6OlJlZ2V4R2VuZXJhdG9yOjpnZW5lcmF0ZVJldHVybik6CisKIDIwMTAt
MTItMTAgIE1pY2hhZWwgU2Fib2ZmICA8bXNhYm9mZkBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgR2F2aW4gQmFycmFjbG91Z2guCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9H
TlVtYWtlZmlsZS5hbSBiL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtCmluZGV4IDg5Zjlh
YjcuLmE3MTgzOWYgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtCisr
KyBiL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtCkBAIC03OSw2ICs3OSw3IEBAIGphdmFz
Y3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogCUphdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk1Bc3Nl
bWJsZXIuaCBcCiAJSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fzc2VtYmxlckJ1ZmZlci5oIFwK
IAlKYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQXNzZW1ibGVyQnVmZmVyV2l0aENvbnN0YW50UG9v
bC5oIFwKKwlKYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvU0g0QXNzZW1ibGVyQnVmZmVyV2l0aENv
bnN0YW50UG9vbC5oIFwKIAlKYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQ29kZUxvY2F0aW9uLmgg
XAogCUphdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmggXAogCUphdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTS5jcHAgXApAQCAtODYsNiArODcsOCBAQCBq
YXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIAlKYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmLmggXAogCUphdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fz
c2VtYmxlci5oIFwKIAlKYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZf
NjQuaCBcCisJSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyU0g0LmggXAor
CUphdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9TSDRBc3NlbWJsZXIuaCBcCiAJSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmggXAogCUphdmFTY3JpcHRDb3Jl
L2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Ni5oIFwKIAlKYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvUmVwYXRjaEJ1ZmZlci5oIFwKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9NYWNyb0Fzc2VtYmxlci5oIGIvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1i
bGVyLmgKaW5kZXggZmExNjVkZS4uNDMxY2VjYiAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmgKKysrIGIvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L01hY3JvQXNzZW1ibGVyLmgKQEAgLTUwLDYgKzUwLDEwIEBAIG5hbWVzcGFjZSBKU0MgeyB0eXBl
ZGVmIE1hY3JvQXNzZW1ibGVyWDg2IE1hY3JvQXNzZW1ibGVyQmFzZTsgfTsKICNpbmNsdWRlICJN
YWNyb0Fzc2VtYmxlclg4Nl82NC5oIgogbmFtZXNwYWNlIEpTQyB7IHR5cGVkZWYgTWFjcm9Bc3Nl
bWJsZXJYODZfNjQgTWFjcm9Bc3NlbWJsZXJCYXNlOyB9OwogCisjZWxpZiBDUFUoU0g0KQorI2lu
Y2x1ZGUgIk1hY3JvQXNzZW1ibGVyU0g0LmgiCituYW1lc3BhY2UgSlNDIHsgdHlwZWRlZiBNYWNy
b0Fzc2VtYmxlclNINCBNYWNyb0Fzc2VtYmxlckJhc2U7IH07CisKICNlbHNlCiAjZXJyb3IgIlRo
ZSBNYWNyb0Fzc2VtYmxlciBpcyBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgcGxhdGZvcm0uIgogI2Vu
ZGlmCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJT
SDQuaCBiL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclNINC5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3MTdmYjkKLS0tIC9kZXYvbnVsbAorKysg
Yi9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJTSDQuaApAQCAtMCwwICsx
LDE4MzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBTVE1pY3JvZWxlY3Ryb25p
Y3MuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyovCisKKworI2lmbmRlZiBNYWNyb0Fzc2VtYmxlclNINF9oCisjZGVmaW5lIE1hY3JvQXNz
ZW1ibGVyU0g0X2gKKworI2luY2x1ZGUgImFzc2VydC5oIgorI2luY2x1ZGUgPHd0Zi9QbGF0Zm9y
bS5oPgorI2lmIEVOQUJMRShBU1NFTUJMRVIpCisKKyNpbmNsdWRlICJBYnN0cmFjdE1hY3JvQXNz
ZW1ibGVyLmgiCisjaW5jbHVkZSAiU0g0QXNzZW1ibGVyLmgiCitleHRlcm4gdW5zaWduZWQgaW50
IF9fZnBzY3JfdmFsdWVzWzJdOworCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgTWFjcm9Bc3Nl
bWJsZXJTSDQgOiBwdWJsaWMgQWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjxTSDRBc3NlbWJsZXI+IHsK
K3B1YmxpYzoKKworICAgIHR5cGVkZWYgU0g0QXNzZW1ibGVyOjpDb25kaXRpb24gQ29uZGl0aW9u
OworICAgIHR5cGVkZWYgU0g0QXNzZW1ibGVyOjpGUFJlZ2lzdGVySUQgRlBSZWdpc3RlcklEOwor
CisgICAgc3RhdGljIGNvbnN0IENvbmRpdGlvbiBFcXVhbCA9IFNINEFzc2VtYmxlcjo6RVE7Cisg
ICAgc3RhdGljIGNvbnN0IENvbmRpdGlvbiBOb3RFcXVhbCA9IFNINEFzc2VtYmxlcjo6TkU7Cisg
ICAgc3RhdGljIGNvbnN0IENvbmRpdGlvbiBHcmVhdGVyVGhhbiA9IFNINEFzc2VtYmxlcjo6R1Q7
CisgICAgc3RhdGljIGNvbnN0IENvbmRpdGlvbiBHcmVhdGVyVGhhbk9yRXF1YWwgPSBTSDRBc3Nl
bWJsZXI6OkdFOworICAgIHN0YXRpYyBjb25zdCBDb25kaXRpb24gTGVzc1RoYW4gPSBTSDRBc3Nl
bWJsZXI6OkxUOworICAgIHN0YXRpYyBjb25zdCBDb25kaXRpb24gTGVzc1RoYW5PckVxdWFsID0g
U0g0QXNzZW1ibGVyOjpMRTsKKyAgICBzdGF0aWMgY29uc3QgQ29uZGl0aW9uIFVHcmVhdGVyVGhh
biA9IFNINEFzc2VtYmxlcjo6SEk7IC8vIHVuc2lnZW5kIGdyZWF0ZXIgdGhhbgorICAgIHN0YXRp
YyBjb25zdCBDb25kaXRpb24gVUdyZWF0ZXJUaGFuT3JFcXVhbCA9IFNINEFzc2VtYmxlcjo6SFM7
IC8vIHVuc2lnZW5kIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCAgICAKKyAgICBzdGF0aWMgY29uc3Qg
Q29uZGl0aW9uIFVMZXNzVGhhbiA9IFNINEFzc2VtYmxlcjo6TEk7IC8vIHVuc2lnZW5kIGdyZWF0
ZXIgdGhhbgorICAgIHN0YXRpYyBjb25zdCBDb25kaXRpb24gVUxlc3NUaGFuT3JFcXVhbCA9IFNI
NEFzc2VtYmxlcjo6TFM7IC8vIHVuc2lnZW5kIGdyZWF0ZXIgdGhhbiBvciBlcXVhbAorICAgIHN0
YXRpYyBjb25zdCBDb25kaXRpb24gWmVybyA9IFNINEFzc2VtYmxlcjo6RVE7CisgICAgc3RhdGlj
IGNvbnN0IENvbmRpdGlvbiBOb25aZXJvID0gU0g0QXNzZW1ibGVyOjpORTsKKyAgICBzdGF0aWMg
Y29uc3QgQ29uZGl0aW9uIE92ZXJmbG93ID0gU0g0QXNzZW1ibGVyOjpPRjsKKyAgICBzdGF0aWMg
Y29uc3QgQ29uZGl0aW9uIEFib3ZlID0gU0g0QXNzZW1ibGVyOjpISTsKKyAgICBzdGF0aWMgY29u
c3QgQ29uZGl0aW9uIEFib3ZlT3JFcXVhbCA9IFNINEFzc2VtYmxlcjo6SFM7CisgICAgc3RhdGlj
IGNvbnN0IENvbmRpdGlvbiBCZWxvdyA9IFNINEFzc2VtYmxlcjo6TEk7CisgICAgc3RhdGljIGNv
bnN0IENvbmRpdGlvbiBCZWxvd09yRXF1YWwgPSBTSDRBc3NlbWJsZXI6OkxTOworCisgICAgc3Rh
dGljIGNvbnN0IFJlZ2lzdGVySUQgc3RhY2tQb2ludGVyUmVnaXN0ZXIgPSBTSDQ6OlNQOworICAg
IHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIGxpbmtSZWdpc3RlciA9IFNINDo6UFI7CisKKyAgICBz
dGF0aWMgY29uc3QgQ29uZGl0aW9uIERvdWJsZUVxdWFsID0gU0g0QXNzZW1ibGVyOjpFUTsKKyAg
ICBzdGF0aWMgY29uc3QgQ29uZGl0aW9uIERvdWJsZU5vdEVxdWFsID0gU0g0QXNzZW1ibGVyOjpO
RTsKKyAgICBzdGF0aWMgY29uc3QgQ29uZGl0aW9uIERvdWJsZUdyZWF0ZXJUaGFuID0gU0g0QXNz
ZW1ibGVyOjpHVDsKKyAgICBzdGF0aWMgY29uc3QgQ29uZGl0aW9uIERvdWJsZUdyZWF0ZXJUaGFu
T3JFcXVhbCA9IFNINEFzc2VtYmxlcjo6R0U7CisgICAgc3RhdGljIGNvbnN0IENvbmRpdGlvbiBE
b3VibGVMZXNzVGhhbiA9IFNINEFzc2VtYmxlcjo6TFQ7CisgICAgc3RhdGljIGNvbnN0IENvbmRp
dGlvbiBEb3VibGVMZXNzVGhhbk9yRXF1YWwgPSBTSDRBc3NlbWJsZXI6OkxFOworICAgIAorICAg
IHN0YXRpYyBjb25zdCBDb25kaXRpb24gRG91YmxlRXF1YWxPclVub3JkZXJlZCA9IFNINEFzc2Vt
Ymxlcjo6RVFVOworICAgIHN0YXRpYyBjb25zdCBDb25kaXRpb24gRG91YmxlTm90RXF1YWxPclVu
b3JkZXJlZCA9IFNINEFzc2VtYmxlcjo6TkVVOworICAgIHN0YXRpYyBjb25zdCBDb25kaXRpb24g
RG91YmxlR3JlYXRlclRoYW5PclVub3JkZXJlZCA9IFNINEFzc2VtYmxlcjo6R1RVOworICAgIHN0
YXRpYyBjb25zdCBDb25kaXRpb24gRG91YmxlR3JlYXRlclRoYW5PckVxdWFsT3JVbm9yZGVyZWQg
PSBTSDRBc3NlbWJsZXI6OkdFVTsKKyAgICBzdGF0aWMgY29uc3QgQ29uZGl0aW9uIERvdWJsZUxl
c3NUaGFuT3JVbm9yZGVyZWQgPSBTSDRBc3NlbWJsZXI6OkxUVTsKKyAgICBzdGF0aWMgY29uc3Qg
Q29uZGl0aW9uIERvdWJsZUxlc3NUaGFuT3JFcXVhbE9yVW5vcmRlcmVkID0gU0g0QXNzZW1ibGVy
OjpMRVU7CisgICAgc3RhdGljIGNvbnN0IENvbmRpdGlvbiBTaWduZWQgPSBTSDRBc3NlbWJsZXI6
OlNJOworICAgIHN0YXRpYyBjb25zdCBGUFJlZ2lzdGVySUQgZnNjcmF0Y2ggPSBTSDQ6OkZSMTA7
CisKKyAgICBzdGF0aWMgY29uc3QgU2NhbGUgU2NhbGVQdHIgPSBUaW1lc0ZvdXI7CisKKyAgICBS
ZWdpc3RlcklEIGNsYWltU2NyYXRjaCgpCisgICAgeworICAgICAgICAgcmV0dXJuIG1fYXNzZW1i
bGVyLmNsYWltU2NyYXRjaCgpOworICAgIH0KKyAgICAKKyAgICBSZWdpc3RlcklEIHJlbGVhc2VT
Y3JhdGNoKFJlZ2lzdGVySUQgcmVnKQorICAgIHsKKyAgICAgICAgIG1fYXNzZW1ibGVyLnJlbGVh
c2VTY3JhdGNoKHJlZyk7CisgICAgfQorICAgIAorCisgICAgLy8gSW50ZWdlciBhcml0aG1ldGlj
IG9wZXJhdGlvbnMKKworICAgIHZvaWQgYWRkMzIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQg
ZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmFkZGxfcnIoc3JjLCBkZXN0KTsKKyAg
ICB9CisKKyAgICB2b2lkIGFkZDMyKEltbTMyIGltbSwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsK
KyAgICAgICAgbV9hc3NlbWJsZXIuYWRkbF9pcihpbW0ubV92YWx1ZSwgZGVzdCk7CisgICAgfQor
ICAgIAorICAgIHZvaWQgYWRkMzIoSW1tMzIgaW1tLCBSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJ
RCBkZXN0KQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsK
KworICAgICAgICBpZiAoc3JjICE9IGRlc3QpCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5tb3Zs
X3JyKHNyYywgZGVzdCk7CisgICAgICAgIG1fYXNzZW1ibGVyLmFkZGxfaXIoaW1tLm1fdmFsdWUs
IGRlc3QpOworICAgICAgICAKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKworICAgIH0K
KworICAgIHZvaWQgYWRkMzIoSW1tMzIgaW1tLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAg
ICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBsb2FkMzIoYWRk
cmVzcywgc2NyKTsKKyAgICAgICAgYWRkMzIoaW1tLCBzY3IpOworICAgICAgICBzdG9yZTMyKHNj
ciwgYWRkcmVzcyk7CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgfQorICAgIAor
ICAgIHZvaWQgYWRkMzIoQWRkcmVzcyBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAg
ICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIGxvYWQzMihzcmMs
IHNjcik7CisgICAgICAgIG1fYXNzZW1ibGVyLmFkZGxfcnIoc2NyLCBkZXN0KTsKKyAgICAgICAg
cmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhbmQzMihSZWdpc3Rl
cklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuYW5k
bF9ycihzcmMsIGRlc3QpOworICAgIH0KKworICAgIHZvaWQgYW5kMzIoSW1tMzIgaW1tLCBSZWdp
c3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBpZiAoKGltbS5tX3ZhbHVlIDw9IDI1NSkgJiYg
KGltbS5tX3ZhbHVlID49IDApICYmIChkZXN0ID09IFNINDo6UjApKQorICAgICAgICAgICAgbV9h
c3NlbWJsZXIuYW5kbF9pOHIoaW1tLm1fdmFsdWUsIGRlc3QpOworICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgICAgICBt
X2Fzc2VtYmxlci5Mb2FkQ29uc3RhbnQoKGltbS5tX3ZhbHVlKSwgc2NyKTsKKyAgICAgICAgICAg
IG1fYXNzZW1ibGVyLmFuZGxfcnIoc2NyLCBkZXN0KTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgbHNo
aWZ0MzIoUmVnaXN0ZXJJRCBzaGlmdGFtb3VudCwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAg
ICAgICAgbV9hc3NlbWJsZXIuc2hsbF9ycihkZXN0LCBzaGlmdGFtb3VudCk7CisgICAgfQorICAg
IAorICAgIHZvaWQgcnNoaWZ0MzIoaW50IGltbSwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAg
ICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgbV9hc3NlbWJs
ZXIuTG9hZENvbnN0YW50KC1pbW0sIHNjcik7CisgICAgICAgIG1fYXNzZW1ibGVyLnNoYV9ycihk
ZXN0LCBzY3IpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgIH0KKyAgICAKKyAg
ICB2b2lkIGxzaGlmdDMyKEltbTMyIGltbSwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAg
ICAgaWYgKCggaW1tLm1fdmFsdWUgPT0gMSkgfHwgKCBpbW0ubV92YWx1ZSA9PSAyKSB8fCAoIGlt
bS5tX3ZhbHVlID09IDgpIHx8ICggaW1tLm1fdmFsdWUgPT0gMTYpKQorICAgICAgICAgICAgbV9h
c3NlbWJsZXIuc2hsbF9pOHIoaW1tLm1fdmFsdWUsIGRlc3QpOworICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgICAgICBt
X2Fzc2VtYmxlci5Mb2FkQ29uc3RhbnQoaW1tLm1fdmFsdWUsIHNjcik7CisgICAgICAgICAgICBt
X2Fzc2VtYmxlci5zaGxsX3JyKGRlc3QsIHNjcik7CisgICAgICAgICAgICByZWxlYXNlU2NyYXRj
aChzY3IpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHZvaWQgbXVsMzIoUmVnaXN0ZXJJ
RCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmltdWxs
X3JyKHNyYywgZGVzdCk7CisgICAgICAgIG1fYXNzZW1ibGVyLnN0c21hY2woZGVzdCk7CisgICAg
fQorICAgIAorICAgIAorICAgIHZvaWQgbXVsMzIoSW1tMzIgaW1tLCBSZWdpc3RlcklEIHNyYywg
UmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNj
cmF0Y2goKTsKKyAgICAgICAgbW92ZShpbW0sIHNjcik7CisgICAgICAgIGlmICAoc3JjICE9IGRl
c3QpCisgICAgICAgICAgICBtb3ZlKHNyYywgZGVzdCk7CisgICAgICAgIG11bDMyKHNjciwgIGRl
c3QpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgIH0KKyAgIAorICAgIHZvaWQg
bm90MzIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1f
YXNzZW1ibGVyLm5vdGxfcihzcmMsIGRlc3QpOworICAgIH0KKyAgICAKKyAgICB2b2lkIG9yMzIo
UmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1i
bGVyLm9ybF9ycihzcmMsIGRlc3QpOworICAgIH0KKworICAgIHZvaWQgb3IzMihJbW0zMiBpbW0s
IFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLm9ybF9pcihpbW0u
bV92YWx1ZSwgZGVzdCk7CisgICAgfQorCisgICAgdm9pZCByc2hpZnQzMihSZWdpc3RlcklEIHNo
aWZ0YW1vdW50LCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5j
bXBsX2lyKDMyLCBzaGlmdGFtb3VudCwgRXF1YWwpOworICAgICAgICBtX2Fzc2VtYmxlci5lbnN1
cmVTcGFjZShtX2Fzc2VtYmxlci5tYXhJbnN0cnVjdGlvblNpemUgKyA0KTsKKyAgICAgICAgbV9h
c3NlbWJsZXIuYnJhbmNoKEJUX09QQ09ERSwgMSk7CisgICAgICAgIG1fYXNzZW1ibGVyLm5lZyhz
aGlmdGFtb3VudCwgc2hpZnRhbW91bnQpOworICAgICAgICBtX2Fzc2VtYmxlci5zaGFfcnIoZGVz
dCwgc2hpZnRhbW91bnQpOworICAgIH0KKworICAgIHZvaWQgcnNoaWZ0MzIoSW1tMzIgaW1tLCBS
ZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICAvKkluIHRoZSBjYXNlIHdoZXJlIHNoaWZ0
YW1vdW50IGluZGljYXRlcyBhIGxvZ2ljYWwgcmlnaHQgc2hpZnQgYnkgMzIsIHRoZSByZXN1bHQg
aXMgMCovCisgICAgICAgIGlmIChpbW0ubV92YWx1ZSAmIDB4MWYpCisgICAgICAgICAgICByc2hp
ZnQzMihpbW0ubV92YWx1ZSAmIDB4MWYsIGRlc3QpOworICAgIH0KKworCisgICAgdm9pZCBzdWIz
MihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3Nl
bWJsZXIuc3VibF9ycihzcmMsIGRlc3QpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHN1YjMyKElt
bTMyIGltbSwgQWJzb2x1dGVBZGRyZXNzIGFkZHJlc3MsIFJlZ2lzdGVySUQgc2NyYXRjaFJlZykK
KyAgICB7CisgICAgICAgIFJlZ2lzdGVySUQgcmVzdWx0ID0gY2xhaW1TY3JhdGNoKCk7CisgICAg
ICAgCisgICAgICAgIG1fYXNzZW1ibGVyLkxvYWRDb25zdGFudCgodWludDMyX3QpYWRkcmVzcy5t
X3B0ciwgc2NyYXRjaFJlZyk7CisgICAgICAgIG1fYXNzZW1ibGVyLm1vdmxfbXIoc2NyYXRjaFJl
ZywgcmVzdWx0KTsKKworICAgICAgICBpZiAobV9hc3NlbWJsZXIuSXNJbW1lZGlhdGUoLWltbS5t
X3ZhbHVlKSkKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZGxfaThyKC1pbW0ubV92YWx1ZSwg
cmVzdWx0KTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5Mb2FkQ29u
c3RhbnQoaW1tLm1fdmFsdWUsIFNINDo6UjQpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuc3Vi
bF9ycihTSDQ6OlI0LCByZXN1bHQpOyAgCisgICAgICAgIH0gCisKKyAgICAgICAgc3RvcmUzMihy
ZXN1bHQsIHNjcmF0Y2hSZWcpOworICAgICAgICAKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2gocmVz
dWx0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzdWIzMihJbW0zMiBpbW0sIEFic29sdXRlQWRk
cmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCByZXN1bHQgPSBjbGFpbVNj
cmF0Y2goKTsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3JhdGNoUmVnID0gY2xhaW1TY3JhdGNoKCk7
CisKKyAgICAgICAgbV9hc3NlbWJsZXIuTG9hZENvbnN0YW50KCh1aW50MzJfdClhZGRyZXNzLm1f
cHRyLCBzY3JhdGNoUmVnKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubW92bF9tcihzY3JhdGNoUmVn
LCByZXN1bHQpOworCisgICAgICAgIGlmIChtX2Fzc2VtYmxlci5Jc0ltbWVkaWF0ZSgtaW1tLm1f
dmFsdWUpKQorICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRkbF9pOHIoLWltbS5tX3ZhbHVlLCBy
ZXN1bHQpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLkxvYWRDb25z
dGFudChpbW0ubV92YWx1ZSwgU0g0OjpSNCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zdWJs
X3JyKFNINDo6UjQsIHJlc3VsdCk7ICAKKyAgICAgICAgfQorCisgICAgICAgIHN0b3JlMzIocmVz
dWx0LCBzY3JhdGNoUmVnKTsKKworICAgICAgICByZWxlYXNlU2NyYXRjaChyZXN1bHQpOworICAg
ICAgICByZWxlYXNlU2NyYXRjaChzY3JhdGNoUmVnKTsKKyAgICB9CisKKyAgICB2b2lkIGFkZDMy
KEltbTMyIGltbSwgQWJzb2x1dGVBZGRyZXNzIGFkZHJlc3MsIFJlZ2lzdGVySUQgc2NyYXRjaFJl
ZykKKyAgICB7CisgICAgICAgIFJlZ2lzdGVySUQgcmVzdWx0ID0gY2xhaW1TY3JhdGNoKCk7Cisg
ICAgICAgCisgICAgICAgIG1fYXNzZW1ibGVyLkxvYWRDb25zdGFudCgodWludDMyX3QpYWRkcmVz
cy5tX3B0ciwgc2NyYXRjaFJlZyk7CisgICAgICAgIG1fYXNzZW1ibGVyLm1vdmxfbXIoc2NyYXRj
aFJlZywgcmVzdWx0KTsKKworICAgICAgICBpZiAobV9hc3NlbWJsZXIuSXNJbW1lZGlhdGUoaW1t
Lm1fdmFsdWUpKQorICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRkbF9pOHIoaW1tLm1fdmFsdWUs
IHJlc3VsdCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIuTG9hZENv
bnN0YW50KGltbS5tX3ZhbHVlLCBTSDQ6OlI0KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFk
ZGxfcnIoU0g0OjpSNCwgcmVzdWx0KTsgICAKKyAgICAgICAgfQorCisgICAgICAgIHN0b3JlMzIo
cmVzdWx0LCBzY3JhdGNoUmVnKTsKKyAgICAgICAgCisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHJl
c3VsdCk7CisgICAgfQorCisgICAgdm9pZCBhZGQzMihJbW0zMiBpbW0sIEFic29sdXRlQWRkcmVz
cyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCByZXN1bHQgPSBjbGFpbVNjcmF0
Y2goKTsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3JhdGNoUmVnID0gY2xhaW1TY3JhdGNoKCk7Cisg
ICAgICAgCisgICAgICAgIG1fYXNzZW1ibGVyLkxvYWRDb25zdGFudCgodWludDMyX3QpYWRkcmVz
cy5tX3B0ciwgc2NyYXRjaFJlZyk7CisgICAgICAgIG1fYXNzZW1ibGVyLm1vdmxfbXIoc2NyYXRj
aFJlZywgcmVzdWx0KTsKKworICAgICAgICBpZiAobV9hc3NlbWJsZXIuSXNJbW1lZGlhdGUoaW1t
Lm1fdmFsdWUpKQorICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRkbF9pOHIoaW1tLm1fdmFsdWUs
IHJlc3VsdCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIuTG9hZENv
bnN0YW50KGltbS5tX3ZhbHVlLCBTSDQ6OlI0KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFk
ZGxfcnIoU0g0OjpSNCwgcmVzdWx0KTsgICAKKyAgICAgICAgfSAKKworICAgICAgICBzdG9yZTMy
KHJlc3VsdCwgc2NyYXRjaFJlZyk7CisgICAgICAgIAorICAgICAgICByZWxlYXNlU2NyYXRjaChy
ZXN1bHQpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3JhdGNoUmVnKTsKKyAgICB9CisgICAg
CisgICAgdm9pZCBzdWIzMihJbW0zMiBpbW0sIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAg
ICAgIG1fYXNzZW1ibGVyLnN1YmxfaW1tcihpbW0ubV92YWx1ZSwgZGVzdCk7CisgICAgfQorICAg
IAorICAgIHZvaWQgc3ViMzIoQWRkcmVzcyBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7Cisg
ICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIGxvYWQzMihz
cmMsIHNjcik7CisgICAgICAgIG1fYXNzZW1ibGVyLnN1YmxfcnIoc2NyLCBkZXN0KTsKKyAgICAg
ICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICB9CisKKyAgICAKKyAgICB2b2lkIHhvcjMyKFJl
Z2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxl
ci54b3JsX3JyKHNyYywgZGVzdCk7CisgICAgfQorICAgIAorICAgIHZvaWQgeG9yMzIoSW1tMzIg
aW1tLCBSZWdpc3RlcklEIHNyY0Rlc3QpCisgICAgeworICAgICAgaWYgKChzcmNEZXN0ICE9IFNI
NDo6UjApIHx8IChpbW0ubV92YWx1ZSA+IDI1NSkgfHwgKGltbS5tX3ZhbHVlIDwgMCkpIHsKKyAg
ICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICAgIG1fYXNz
ZW1ibGVyLkxvYWRDb25zdGFudCgoaW1tLm1fdmFsdWUpLCBzY3IpOworICAgICAgICAgIG1fYXNz
ZW1ibGVyLnhvcmxfcnIoc2NyLCBzcmNEZXN0KTsKKyAgICAgICAgICByZWxlYXNlU2NyYXRjaChz
Y3IpOworICAgICAgfSBlbHNlCisgICAgICAgICAgbV9hc3NlbWJsZXIueG9ybF9pOHIoaW1tLm1f
dmFsdWUsIHNyY0Rlc3QpOworICAgIH0KKworCisgICAgLy8gTWVtb3J5IGFjY2VzcyBvcGVyYXRp
b24KKyAgICAKKyAgICB2b2lkIGxvYWQzMihJbXBsaWNpdEFkZHJlc3MgYWRkcmVzcywgUmVnaXN0
ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbG9hZDMyKGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5v
ZmZzZXQsIGRlc3QpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGxvYWQ4KEltcGxpY2l0QWRkcmVz
cyBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBsb2FkOChhZGRyZXNz
LmJhc2UsIGFkZHJlc3Mub2Zmc2V0LCBkZXN0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBsb2Fk
MzIoQmFzZUluZGV4IGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIFJl
Z2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIG1vdmUoYWRkcmVzcy5pbmRl
eCwgc2NyKTsKKyAgICAgICAgCisgICAgICAgIGxzaGlmdDMyKEltbTMyKGFkZHJlc3Muc2NhbGUp
LCBzY3IpOworICAgICAgICBhZGQzMihhZGRyZXNzLmJhc2UsIHNjcik7CisgICAgICAgIGxvYWQz
MihzY3IsIGFkZHJlc3Mub2Zmc2V0LCBkZXN0KTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2Ny
KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBsb2FkMzIodm9pZCogYWRkcmVzcywgUmVnaXN0ZXJJ
RCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuTG9hZENvbnN0YW50KCh1aW50MzJf
dCkoYWRkcmVzcyksIGRlc3QpOworICAgICAgICBtX2Fzc2VtYmxlci5tb3ZsX21yKGRlc3QsIGRl
c3QpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGxvYWQzMihSZWdpc3RlcklEIGJhc2UsIGludCBv
ZmZzZXQsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIGlmICgob2Zmc2V0IDwgMCkg
fHwgKG9mZnNldCA+PSA2NCkpIHsKKyAgICAgICAgICAgIGlmICgoZGVzdCA9PSBTSDQ6OlIwKSAm
JiAoZGVzdCAhPSBiYXNlKSkgeworICAgICAgICAgICAgICAgIG1fYXNzZW1ibGVyLkxvYWRDb25z
dGFudCgob2Zmc2V0KSwgZGVzdCk7CisgICAgICAgICAgICAgICAgbV9hc3NlbWJsZXIubW92bF9y
MG1yKGJhc2UsIGRlc3QpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBS
ZWdpc3RlcklEIHNjcjsKKyAgICAgICAgICAgICAgICBpZiAoZGVzdCA9PSBiYXNlKQorICAgICAg
ICAgICAgICAgICAgICBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgICAgIHNjciA9IGRlc3Q7CisKKyAgICAgICAgICAgICAgICBtX2Fz
c2VtYmxlci5Mb2FkQ29uc3RhbnQoKG9mZnNldCksIHNjcik7CisgICAgICAgICAgICAgICAgbV9h
c3NlbWJsZXIuYWRkbF9ycihiYXNlLCBzY3IpOworICAgICAgICAgICAgICAgIG1fYXNzZW1ibGVy
Lm1vdmxfbXIoc2NyLCBkZXN0KTsKKworICAgICAgICAgICAgICAgIGlmIChkZXN0ID09IGJhc2Up
CisgICAgICAgICAgICAgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgICAgICAgICB9
CisgICAgICAgIH0gZWxzZSBpZiAob2Zmc2V0KQorICAgICAgICAgICAgbV9hc3NlbWJsZXIubW92
bF9tcihvZmZzZXQgPj4gMiwgYmFzZSwgZGVzdCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IG1fYXNzZW1ibGVyLm1vdmxfbXIoYmFzZSwgZGVzdCk7CisgICAgfQorICAgIAorICAgIHZvaWQg
bG9hZDgoUmVnaXN0ZXJJRCBiYXNlLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGRlc3QpCisgICAg
eworICAgICAgICBpZiAoKG9mZnNldCA+IDApICYmIChvZmZzZXQgPCA2NCkgJiYgKGRlc3QgPT0g
U0g0OjpSMCkpCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5tb3ZiX21yKG9mZnNldCwgYmFzZSwg
ZGVzdCk7CisKKyAgICAgICAgZWxzZSBpZiAoYmFzZSAhPSBkZXN0KSB7CisgICAgICAgICAgICBt
X2Fzc2VtYmxlci5Mb2FkQ29uc3RhbnQoKG9mZnNldCksIGRlc3QpOworICAgICAgICAgICAgbV9h
c3NlbWJsZXIuYWRkbF9ycihiYXNlLCBkZXN0KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLm1v
dmJfbXIoZGVzdCwgZGVzdCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBSZWdpc3Rl
cklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX2Fz
c2VtYmxlci5Mb2FkQ29uc3RhbnQoKG9mZnNldCksIHNjcik7CisgICAgICAgICAgICBtX2Fzc2Vt
Ymxlci5hZGRsX3JyKGJhc2UsIHNjcik7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5tb3ZiX21y
KHNjciwgZGVzdCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNj
cik7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCBsb2FkMzIoUmVnaXN0ZXJJRCBy
MCwgUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgQVNTRVJU
KHIwID09IFNINDo6UjApOworICAgICAgICBtX2Fzc2VtYmxlci5tb3ZsX3IwbXIoc3JjLCBkc3Qp
OworICAgIH0KKyAgICAKKyAgICB2b2lkIGxvYWQzMihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJ
RCBkc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5tb3ZsX21yKHNyYywgZHN0KTsKKyAg
ICB9CisgICAKKyAgICB2b2lkIGxvYWQxNihJbXBsaWNpdEFkZHJlc3MgYWRkcmVzcywgUmVnaXN0
ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQor
IAorICAgIHZvaWQgbG9hZDE2KFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAg
eworICAgICAgICBtX2Fzc2VtYmxlci5tb3Z3X21yKHNyYywgZGVzdCk7CisgICAgfQorICAgIAor
ICAgIHZvaWQgbG9hZDE2KFJlZ2lzdGVySUQgcjAsIFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklE
IGRlc3QpCisgICAgeworICAgICAgICBBU1NFUlQocjAgPT0gU0g0OjpSMCk7CisgICAgICAgIG1f
YXNzZW1ibGVyLm1vdndfcjBtcihzcmMsIGRlc3QpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGxv
YWQxNihCYXNlSW5kZXggYWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAg
UmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgbW92ZShhZGRyZXNzLmlu
ZGV4LCBzY3IpOworICAgICAgICBsc2hpZnQzMihJbW0zMihhZGRyZXNzLnNjYWxlKSwgc2NyKTsK
KyAgICAgICAgbV9hc3NlbWJsZXIuYWRkbF9pcihhZGRyZXNzLm9mZnNldCwgc2NyKTsKKyAgICAg
ICAgaWYgKHNjciA9PSBTSDQ6OlIwKQorICAgICAgICAgICAgbV9hc3NlbWJsZXIubW92d19yMG1y
KGFkZHJlc3MuYmFzZSwgc2NyKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBhZGQzMihh
ZGRyZXNzLmJhc2UsIHNjcik7CisgICAgICAgICAgICBsb2FkMTYoc2NyLCBzY3IpOworICAgICAg
ICB9CisgICAgICAgIGV4dHV3KHNjciwgZGVzdCk7CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNj
cik7CisgICAgfQorCisgICAgdm9pZCBzdG9yZTMyKFJlZ2lzdGVySUQgc3JjLCBJbXBsaWNpdEFk
ZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3Jh
dGNoKCk7CisgICAgICAgIHN0b3JlMzIoc3JjLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNl
LCBzY3IpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgIH0gICAgCisgICAgCisg
ICAgdm9pZCBzdG9yZTMyKFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJh
c2UsIFJlZ2lzdGVySUQgc2NyKQorICAgIHsgIAorICAgICAgICBpZiAoKG9mZnNldCA8IDApIHx8
IChvZmZzZXQgPj0gNjQpKSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5Mb2FkQ29uc3RhbnQo
KG9mZnNldCksIHNjcik7CisgICAgICAgICAgICBpZiAoc2NyID09IFNINDo6UjApCisgICAgICAg
ICAgICAgICAgbV9hc3NlbWJsZXIubW92bF9ybXIwKHNyYywgYmFzZSk7CisgICAgICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGRsX3JyKGJhc2UsIHNjcik7Cisg
ICAgICAgICAgICAgICAgbV9hc3NlbWJsZXIubW92bF9ybShzcmMsIHNjcik7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0gZWxzZSBpZiAob2Zmc2V0KQorICAgICAgICAgICAgbV9hc3NlbWJsZXIu
bW92bF9ybShzcmMsIG9mZnNldCA+PiAyLCBiYXNlKTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgbV9hc3NlbWJsZXIubW92bF9ybShzcmMsIGJhc2UpOworICAgIH0KKyAgICAKKyAgICB2b2lk
IHN0b3JlMzIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgb2Zmc2V0LCBSZWdpc3RlcklEIGJh
c2UpCisgICAgeworICAgICAgICBBU1NFUlQob2Zmc2V0ID09IFNINDo6UjApOworICAgICAgICBt
X2Fzc2VtYmxlci5tb3ZsX3JtcjAoc3JjLCBiYXNlKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBz
dG9yZTMyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIG1f
YXNzZW1ibGVyLm1vdmxfcm0oc3JjLCBkc3QpOworICAgIH0KKworCisgICAgdm9pZCBzdG9yZTMy
KEltbTMyIGltbSwgSW1wbGljaXRBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBSZWdp
c3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBSZWdpc3RlcklEIHNjcjEgPSBj
bGFpbVNjcmF0Y2goKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuTG9hZENvbnN0YW50KChpbW0ubV92
YWx1ZSksIHNjcik7CisKKyAgICAgICAgc3RvcmUzMihzY3IsIGFkZHJlc3Mub2Zmc2V0LCBhZGRy
ZXNzLmJhc2UsIHNjcjEpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgICAgICBy
ZWxlYXNlU2NyYXRjaChzY3IxKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzdG9yZTMyKFJlZ2lz
dGVySUQgc3JjLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIFJlZ2lzdGVySUQg
c2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIG1vdmUoYWRkcmVzcy5pbmRleCwgc2NyKTsK
KyAgICAgICAgCisgICAgICAgIGxzaGlmdDMyKEltbTMyKGFkZHJlc3Muc2NhbGUpLCBzY3IpOwor
ICAgICAgICBhZGQzMihhZGRyZXNzLmJhc2UsIHNjcik7CisgICAgICAgIHN0b3JlMzIoc3JjLCBB
ZGRyZXNzKHNjciwgYWRkcmVzcy5vZmZzZXQpKTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2Ny
KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzdG9yZTMyKEltbTMyIGltbSwgdm9pZCogYWRkcmVz
cykKKyAgICB7CisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAg
ICAgIFJlZ2lzdGVySUQgc2NyMSA9IGNsYWltU2NyYXRjaCgpOworCisgICAgICAgIG1fYXNzZW1i
bGVyLkxvYWRDb25zdGFudCgoaW1tLm1fdmFsdWUpLCBzY3IpOworICAgICAgICBtX2Fzc2VtYmxl
ci5Mb2FkQ29uc3RhbnQoKHVpbnQzMl90KShhZGRyZXNzKSwgc2NyMSk7CisgICAgICAgIG1fYXNz
ZW1ibGVyLm1vdmxfbXIoc2NyLCBzY3IxKTsKKworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3Ip
OworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IxKTsKKyAgICB9CisgICAgdm9pZCBzdG9yZTMy
KFJlZ2lzdGVySUQgc3JjLCB2b2lkKiBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJ
RCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKworICAgICAgICBtX2Fzc2VtYmxlci5Mb2FkQ29uc3Rh
bnQoKHVpbnQzMl90KShhZGRyZXNzKSwgc2NyKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubW92bF9t
cihzcmMsIHNjcik7CisKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICB9CisKKyAg
ICAKKyAgICBEYXRhTGFiZWwzMiBsb2FkMzJXaXRoQWRkcmVzc09mZnNldFBhdGNoKEFkZHJlc3Mg
YWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3Ig
PSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgCisgICAgICAgIERhdGFMYWJlbDMyIGxhYmVsKHRo
aXMpOworICAgICAgICBtX2Fzc2VtYmxlci5Mb2FkQ29uc3RhbnQoYWRkcmVzcy5vZmZzZXQsIHNj
ciwgdHJ1ZSk7CisKKyAgICAgICAgbV9hc3NlbWJsZXIuYWRkbF9ycihhZGRyZXNzLmJhc2UsIHNj
cik7CisgICAgICAgIG1fYXNzZW1ibGVyLm1vdmxfbXIoc2NyLCBkZXN0KTsKKyAgICAgICAgcmVs
ZWFzZVNjcmF0Y2goc2NyKTsKKyAgICAgICAgcmV0dXJuIGxhYmVsOworICAgIH0KKyAgICAKKyAg
ICBEYXRhTGFiZWwzMiBzdG9yZTMyV2l0aEFkZHJlc3NPZmZzZXRQYXRjaChSZWdpc3RlcklEIHNy
YywgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFp
bVNjcmF0Y2goKTsKKyAgICAgICAgCisgICAgICAgIERhdGFMYWJlbDMyIGxhYmVsKHRoaXMpOwor
ICAgICAgICBtX2Fzc2VtYmxlci5Mb2FkQ29uc3RhbnQoYWRkcmVzcy5vZmZzZXQsIHNjciwgdHJ1
ZSk7CisKKyAgICAgICAgbV9hc3NlbWJsZXIuYWRkbF9ycihhZGRyZXNzLmJhc2UsIHNjcik7Cisg
ICAgICAgIG1fYXNzZW1ibGVyLm1vdmxfcm0oc3JjLCBzY3IpOworICAgICAgICAKKyAgICAgICAg
cmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICAgICAgcmV0dXJuIGxhYmVsOworICAgIH0KKyAgICAK
KyAgICBMYWJlbCBsb2FkUHRyV2l0aFBhdGNoVG9MRUEoQWRkcmVzcyBhZGRyZXNzLCBSZWdpc3Rl
cklEIGRlc3QpCisgICAgeworICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgp
OworICAgICAgICAKKyAgICAgICAgTGFiZWwgbGFiZWwodGhpcyk7CisgICAgICAgIG1fYXNzZW1i
bGVyLkxvYWRDb25zdGFudChhZGRyZXNzLm9mZnNldCwgc2NyLCB0cnVlKTsKKworICAgICAgICBt
X2Fzc2VtYmxlci5hZGRsX3JyKGFkZHJlc3MuYmFzZSwgc2NyKTsKKyAgICAgICAgbV9hc3NlbWJs
ZXIubW92bF9tcihzY3IsIGRlc3QpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAg
ICAgICByZXR1cm4gbGFiZWw7CisgICAgfQorICAgIAorICAgICAvLyBGbG9hdGluZy1wb2ludCBv
cGVyYXRpb25zCisKKyAgICBib29sIHN1cHBvcnRzRmxvYXRpbmdQb2ludCgpIGNvbnN0IHsgcmV0
dXJuIGZhbHNlOyB9CisgICAgYm9vbCBzdXBwb3J0c0Zsb2F0aW5nUG9pbnRUcnVuY2F0ZSgpIGNv
bnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBzdXBwb3J0c0Zsb2F0aW5nUG9pbnRTcXJ0
KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICAKKyAgICB2b2lkIGxvYWREb3VibGUoSW1w
bGljaXRBZGRyZXNzIGFkZHJlc3MsIEZQUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAg
UmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuTG9h
ZENvbnN0YW50KF9fZnBzY3JfdmFsdWVzWzFdLCBzY3IpOworICAgICAgICBtX2Fzc2VtYmxlci5s
ZHNmcHNjcihzY3IpOworICAgICAgICBtX2Fzc2VtYmxlci5Mb2FkQ29uc3RhbnQoYWRkcmVzcy5v
ZmZzZXQsIHNjcik7CisgICAgICAgIGlmIChhZGRyZXNzLmJhc2UgPT0gU0g0OjpSMCkgeworICAg
ICAgICAgICAgbV9hc3NlbWJsZXIuZm1vdnNfcmVhZF9yMHIoc2NyLCAoRlBSZWdpc3RlcklEKShk
ZXN0ICsgMSkpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRkbF9pOHIoNCwgc2NyKTsKKyAg
ICAgICAgICAgIG1fYXNzZW1ibGVyLmZtb3ZzX3JlYWRfcjByKHNjciwgZGVzdCk7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGRsX3JyKGFkZHJlc3MuYmFzZSwg
c2NyKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmZtb3ZzX3JlYWRfcm0oc2NyLCAoRlBSZWdp
c3RlcklEKShkZXN0ICsgMSkpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRkbF9pOHIoNCwg
c2NyKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmZtb3ZzX3JlYWRfcm0oc2NyLCBkZXN0KTsK
KyAgICAgICAgfQorICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgIH0KKyAgICAKKyAg
ICB2b2lkIGxvYWREb3VibGUoY29uc3Qgdm9pZCogYWRkcmVzcywgRlBSZWdpc3RlcklEIGRlc3Qp
CisgICAgeworICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAg
ICBtX2Fzc2VtYmxlci5Mb2FkQ29uc3RhbnQoX19mcHNjcl92YWx1ZXNbMV0sIHNjcik7CisgICAg
ICAgIG1fYXNzZW1ibGVyLmxkc2Zwc2NyKHNjcik7CisgICAgICAgIG1fYXNzZW1ibGVyLkxvYWRD
b25zdGFudCgodWludDMyX3QpKGFkZHJlc3MpLCBzY3IpOworICAgICAgICBtX2Fzc2VtYmxlci5m
bW92c19yZWFkX3JtKHNjciwgKEZQUmVnaXN0ZXJJRCkoZGVzdCArIDEpKTsKKyAgICAgICAgbV9h
c3NlbWJsZXIuYWRkbF9pOHIoNCwgc2NyKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuZm1vdnNfcmVh
ZF9ybShzY3IsIGRlc3QpOworCisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgfQor
CisgICAgdm9pZCBzdG9yZURvdWJsZShGUFJlZ2lzdGVySUQgc3JjLCBJbXBsaWNpdEFkZHJlc3Mg
YWRkcmVzcykKKyAgICB7CisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7
CisgICAgICAgIG1fYXNzZW1ibGVyLkxvYWRDb25zdGFudChhZGRyZXNzLm9mZnNldCwgc2NyKTsK
KyAgICAgICAgbV9hc3NlbWJsZXIuYWRkbF9ycihhZGRyZXNzLmJhc2UsIHNjcik7CisgICAgICAg
IG1fYXNzZW1ibGVyLmZtb3ZzX3dyaXRlX3JtKChGUFJlZ2lzdGVySUQpKHNyYyArIDEpLCBzY3Ip
OworICAgICAgICBtX2Fzc2VtYmxlci5hZGRsX2k4cig0LCBzY3IpOworICAgICAgICBtX2Fzc2Vt
Ymxlci5mbW92c193cml0ZV9ybShzcmMsIHNjcik7CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNj
cik7CisgICAgfQorICAgIAorICAgIHZvaWQgYWRkRG91YmxlKEZQUmVnaXN0ZXJJRCBzcmMsIEZQ
UmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuZGFkZF9ycihzcmMs
IGRlc3QpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGFkZERvdWJsZShBZGRyZXNzIGFkZHJlc3Ms
IEZQUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFp
bVNjcmF0Y2goKTsKKworICAgICAgICBtX2Fzc2VtYmxlci5Mb2FkQ29uc3RhbnQoYWRkcmVzcy5v
ZmZzZXQsIHNjcik7CisgICAgICAgIGlmIChhZGRyZXNzLmJhc2UgPT0gU0g0OjpSMCkgeworICAg
ICAgICAgICAgbV9hc3NlbWJsZXIuZm1vdnNfcmVhZF9yMHIoc2NyLCAoRlBSZWdpc3RlcklEKShm
c2NyYXRjaCArIDEpKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZGxfaThyKDQsIHNjcik7
CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5mbW92c19yZWFkX3IwcihzY3IsIGZzY3JhdGNoKTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZGxfcnIoYWRkcmVz
cy5iYXNlLCBzY3IpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuZm1vdnNfcmVhZF9ybShzY3Is
IChGUFJlZ2lzdGVySUQpKGZzY3JhdGNoICsgMSkpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIu
YWRkbF9pOHIoNCwgc2NyKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmZtb3ZzX3JlYWRfcm0o
c2NyLCBmc2NyYXRjaCk7CisgICAgICAgIH0KKyAgICAgICAgYWRkRG91YmxlKGZzY3JhdGNoLCBk
ZXN0KTsKKworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgIH0KKworICAgIHZvaWQg
c3ViRG91YmxlKEZQUmVnaXN0ZXJJRCBzcmMsIEZQUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAg
ICAgICAgbV9hc3NlbWJsZXIuZHN1Yl9ycihzcmMsIGRlc3QpOworICAgIH0KKworICAgIHZvaWQg
c3ViRG91YmxlKEFkZHJlc3MgYWRkcmVzcywgRlBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAg
ICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOyAvLyBmb3IgdGhlIG9mZnNldAor
CisgICAgICAgLy8gbV9hc3NlbWJsZXIuZG91YmxlbG9hZChhZGRyZXNzLmJhc2UsIGFkZHJlc3Mu
b2Zmc2V0LCBmc2NyYXRjaCwgc2NyKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuTG9hZENvbnN0YW50
KGFkZHJlc3Mub2Zmc2V0LCBzY3IpOworICAgICAgICBpZiAoYWRkcmVzcy5iYXNlID09IFNINDo6
UjApIHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmZtb3ZzX3JlYWRfcjByKHNjciwgKEZQUmVn
aXN0ZXJJRCkoZnNjcmF0Y2ggKyAxKSk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGRsX2k4
cig0LCBzY3IpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuZm1vdnNfcmVhZF9yMHIoc2NyLCBm
c2NyYXRjaCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGRs
X3JyKGFkZHJlc3MuYmFzZSwgc2NyKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmZtb3ZzX3Jl
YWRfcm0oc2NyLCAoRlBSZWdpc3RlcklEKShmc2NyYXRjaCArIDEpKTsKKyAgICAgICAgICAgIG1f
YXNzZW1ibGVyLmFkZGxfaThyKDQsIHNjcik7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5mbW92
c19yZWFkX3JtKHNjciwgZnNjcmF0Y2gpOworICAgICAgICB9CisgICAgICAgIHN1YkRvdWJsZShm
c2NyYXRjaCwgZGVzdCk7CisKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICB9Cisg
ICAgCisgICAgdm9pZCBtdWxEb3VibGUoRlBSZWdpc3RlcklEIHNyYywgRlBSZWdpc3RlcklEIGRl
c3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5kbXVsX3JyKHNyYywgZGVzdCk7CisgICAg
fQorCisgICAgdm9pZCBtdWxEb3VibGUoQWRkcmVzcyBhZGRyZXNzLCBGUFJlZ2lzdGVySUQgZGVz
dCkKKyAgICB7CisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7IC8vIGZv
ciB0aGUgb2Zmc2V0CisKKyAgICAgICAgbV9hc3NlbWJsZXIuTG9hZENvbnN0YW50KGFkZHJlc3Mu
b2Zmc2V0LCBzY3IpOworICAgICAgICBpZiAoYWRkcmVzcy5iYXNlID09IFNINDo6UjApIHsKKyAg
ICAgICAgICAgIG1fYXNzZW1ibGVyLmZtb3ZzX3JlYWRfcjByKHNjciwgKEZQUmVnaXN0ZXJJRCko
ZnNjcmF0Y2ggKyAxKSk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGRsX2k4cig0LCBzY3Ip
OworICAgICAgICAgICAgbV9hc3NlbWJsZXIuZm1vdnNfcmVhZF9yMHIoc2NyLCBmc2NyYXRjaCk7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGRsX3JyKGFkZHJl
c3MuYmFzZSwgc2NyKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmZtb3ZzX3JlYWRfcm0oc2Ny
LCAoRlBSZWdpc3RlcklEKShmc2NyYXRjaCArIDEpKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVy
LmFkZGxfaThyKDQsIHNjcik7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5mbW92c19yZWFkX3Jt
KHNjciwgZnNjcmF0Y2gpOworICAgICAgICB9CisgICAgICAgIG11bERvdWJsZShmc2NyYXRjaCwg
ZGVzdCk7CisKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICB9CisgICAgCisgICAg
dm9pZCBkaXZEb3VibGUoRlBSZWdpc3RlcklEIHNyYywgRlBSZWdpc3RlcklEIGRlc3QpCisgICAg
eworICAgICAgICBtX2Fzc2VtYmxlci5kZGl2X3JyKHNyYywgZGVzdCk7CisgICAgfQorCisgICAg
dm9pZCBjb252ZXJ0SW50MzJUb0RvdWJsZShSZWdpc3RlcklEIHNyYywgRlBSZWdpc3RlcklEIGRl
c3QpCisgICAgeworICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAg
ICAgICBtX2Fzc2VtYmxlci5Mb2FkQ29uc3RhbnQoX19mcHNjcl92YWx1ZXNbMV0sIHNjcik7Cisg
ICAgICAgIG1fYXNzZW1ibGVyLmxkc2Zwc2NyKHNjcik7CisgICAgICAgIG1fYXNzZW1ibGVyLmxk
c3JtX2ZwdWwoc3JjKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuZmxvYXRfZnB1bF9kcm4oZGVzdCk7
CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgfQorCisgICAgdm9pZCBjb252ZXJ0
SW50MzJUb0RvdWJsZShBYnNvbHV0ZUFkZHJlc3Mgc3JjLCBGUFJlZ2lzdGVySUQgZGVzdCkKKyAg
ICB7CisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIG1f
YXNzZW1ibGVyLkxvYWRDb25zdGFudChfX2Zwc2NyX3ZhbHVlc1sxXSwgc2NyKTsKKyAgICAgICAg
bV9hc3NlbWJsZXIubGRzZnBzY3Ioc2NyKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuTG9hZENvbnN0
YW50KCh1bnNpZ25lZCBpbnQpc3JjLm1fcHRyLCBzY3IpOworICAgICAgICBtX2Fzc2VtYmxlci5s
ZHNybV9mcHVsKHNjcik7CisgICAgICAgIG1fYXNzZW1ibGVyLmZsb2F0X2ZwdWxfZHJuKGRlc3Qp
OworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNv
bnZlcnRJbnQzMlRvRG91YmxlKEFkZHJlc3Mgc3JjLCBGUFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7
CisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIG1fYXNz
ZW1ibGVyLkxvYWRDb25zdGFudChfX2Zwc2NyX3ZhbHVlc1sxXSwgc2NyKTsKKyAgICAgICAgbV9h
c3NlbWJsZXIubGRzZnBzY3Ioc2NyKTsKKyAgICAgICAgbG9hZDMyKHNyYywgc2NyKTsKKyAgICAg
ICAgY29udmVydEludDMyVG9Eb3VibGUoc2NyLCBkZXN0KTsKKyAgICAgICAgcmVsZWFzZVNjcmF0
Y2goc2NyKTsKKyAgICB9CisKKyAgICB2b2lkIHplcm9Eb3VibGUoRlBSZWdpc3RlcklEIGRlc3Qp
CisgICAgeworICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAg
ICBtX2Fzc2VtYmxlci5tb3ZfaW1tOCgwLCBzY3IpOworICAgICAgICBtX2Fzc2VtYmxlci5sZHNy
bV9mcHVsKHNjcik7CisgICAgICAgIG1fYXNzZW1ibGVyLmZsb2F0X2ZwdWxfZHJuKGRlc3QpOwor
ICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoRG91
YmxlKENvbmRpdGlvbiBjb25kLCBGUFJlZ2lzdGVySUQgbGVmdCwgRlBSZWdpc3RlcklEIHJpZ2h0
KQorICAgIHsKKyAgICAgICAgaWYgKGNvbmQgPT0gRG91YmxlRXF1YWwpIHsKKyAgICAgICAgICAg
IG1fYXNzZW1ibGVyLmRjbXBwZXEocmlnaHQsIGxlZnQpOworICAgICAgICAgICAgcmV0dXJuIGJy
YW5jaFRydWUoKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChjb25kID09IERvdWJsZU5vdEVx
dWFsKSB7CisgICAgICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAg
ICAgICAgICAgUmVnaXN0ZXJJRCBzY3IxID0gY2xhaW1TY3JhdGNoKCk7CisKKyAgICAgICAgICAg
IG1fYXNzZW1ibGVyLkxvYWRDb25zdGFudChfX2Zwc2NyX3ZhbHVlc1sxXSwgU0g0OjpSNCk7Cisg
ICAgICAgICAgICBtX2Fzc2VtYmxlci5sZHNmcHNjcihTSDQ6OlI0KTsKKyAgICAgICAgICAgIG1f
YXNzZW1ibGVyLmRjbXBwZXEocmlnaHQsIGxlZnQpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIu
ZW5zdXJlU3BhY2UobV9hc3NlbWJsZXIubWF4SW5zdHJ1Y3Rpb25TaXplICsgMTgsIHNpemVvZih1
aW50MzJfdCkpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuYnJhbmNoKEJUX09QQ09ERSwgOCk7
IC8vIGVxdWFsID0+IGRvIG5vdCBicmFuY2gKKworICAgICAgICAgICAgbV9hc3NlbWJsZXIuc3Rz
ZnBzY3Ioc2NyKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmxkc2Zwc2NyKFNINDo6UjQpOwor
ICAgICAgICAgICAgbV9hc3NlbWJsZXIubW92X2ltbTgoMHg0MCwgc2NyMSk7CisgICAgICAgICAg
ICBhbmQzMihzY3IxLCBzY3IpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuY21wbF9ycihzY3Is
IHNjcjEsIEVxdWFsKTsgLyogaWYgdHJ1ZSA9PiBOQU4qLworCisgICAgICAgICAgICBKdW1wIG1f
anVtcCA9IEp1bXAobV9hc3NlbWJsZXIuam5lKCkpOyAvKiBub3QgTkFOKi8KKyAgICAgICAgICAg
IG1fYXNzZW1ibGVyLkxvYWRDb25zdGFudFVuY2hlY2tlZFNpemUoMHgwLCBzY3IpOworICAgICAg
ICAgICAgbV9hc3NlbWJsZXIubm9wKCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5ub3AoKTsK
KyAgICAgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgICAgICAgICByZWxlYXNlU2Ny
YXRjaChzY3IxKTsKKyAgICAgICAgICAgIHJldHVybiBtX2p1bXA7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAoY29uZCA9PSBEb3VibGVHcmVhdGVyVGhhbikgeworICAgICAgICAgICAgbV9hc3Nl
bWJsZXIuZGNtcHBndChyaWdodCwgbGVmdCk7CisgICAgICAgICAgICByZXR1cm4gYnJhbmNoVHJ1
ZSgpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGNvbmQgPT0gRG91YmxlR3JlYXRlclRoYW5P
ckVxdWFsKSB7CisgICAgICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOwor
ICAgICAgICAgICAgUmVnaXN0ZXJJRCBzY3IxID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgICAg
ICBtX2Fzc2VtYmxlci5Mb2FkQ29uc3RhbnQoX19mcHNjcl92YWx1ZXNbMV0sIFNINDo6UjQpOwor
ICAgICAgICAgICAgbV9hc3NlbWJsZXIubGRzZnBzY3IoU0g0OjpSNCk7CisgICAgICAgICAgICBt
X2Fzc2VtYmxlci5kY21wcGd0KGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVy
LmVuc3VyZVNwYWNlKG1fYXNzZW1ibGVyLm1heEluc3RydWN0aW9uU2l6ZSArIDE4LCBzaXplb2Yo
dWludDMyX3QpKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmJyYW5jaChCVF9PUENPREUsIDgp
OyAvLyBlcXVhbCA9PiBkbyBub3QgYnJhbmNoCisKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnN0
c2Zwc2NyKHNjcik7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5sZHNmcHNjcihTSDQ6OlI0KTsK
KyAgICAgICAgICAgIG1fYXNzZW1ibGVyLm1vdl9pbW04KDB4NDAsIHNjcjEpOworICAgICAgICAg
ICAgYW5kMzIoc2NyMSwgc2NyKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmNtcGxfcnIoc2Ny
LCBzY3IxLCBFcXVhbCk7IC8qIGlmIHRydWUgPT4gTkFOKi8KKworICAgICAgICAgICAgSnVtcCBt
X2p1bXAgPSBKdW1wKG1fYXNzZW1ibGVyLmpuZSgpKTsgLyogbm90IE5BTiovCisgICAgICAgICAg
ICBtX2Fzc2VtYmxlci5Mb2FkQ29uc3RhbnRVbmNoZWNrZWRTaXplKDB4MCwgc2NyKTsKKyAgICAg
ICAgICAgIG1fYXNzZW1ibGVyLm5vcCgpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIubm9wKCk7
CisgICAgICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgICAgICAgICAgcmVsZWFzZVNj
cmF0Y2goc2NyMSk7CisgICAgICAgICAgICByZXR1cm4gbV9qdW1wOworICAgICAgICB9CisKKyAg
ICAgICAgaWYgKGNvbmQgPT0gRG91YmxlTGVzc1RoYW4pIHsKKyAgICAgICAgICAgIG1fYXNzZW1i
bGVyLmRjbXBwZ3QobGVmdCwgcmlnaHQpOworICAgICAgICAgICAgcmV0dXJuIGJyYW5jaFRydWUo
KTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChjb25kID09IERvdWJsZUxlc3NUaGFuT3JFcXVh
bCkgeworICAgICAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAg
ICAgICAgIFJlZ2lzdGVySUQgc2NyMSA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICAgICAgbV9h
c3NlbWJsZXIuTG9hZENvbnN0YW50KF9fZnBzY3JfdmFsdWVzWzFdLCBTSDQ6OlI0KTsKKyAgICAg
ICAgICAgIG1fYXNzZW1ibGVyLmxkc2Zwc2NyKFNINDo6UjQpOworICAgICAgICAgICAgbV9hc3Nl
bWJsZXIuZGNtcHBndChyaWdodCwgbGVmdCk7CisKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmVu
c3VyZVNwYWNlKG1fYXNzZW1ibGVyLm1heEluc3RydWN0aW9uU2l6ZSArIDE4LCBzaXplb2YodWlu
dDMyX3QpKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmJyYW5jaChCVF9PUENPREUsIDgpOyAv
LyBlcXVhbCA9PiBkbyBub3QgYnJhbmNoCisKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnN0c2Zw
c2NyKHNjcik7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5sZHNmcHNjcihTSDQ6OlI0KTsKKyAg
ICAgICAgICAgIG1fYXNzZW1ibGVyLm1vdl9pbW04KDB4NDAsIHNjcjEpOworICAgICAgICAgICAg
YW5kMzIoc2NyMSwgc2NyKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmNtcGxfcnIoc2NyLCBz
Y3IxLCBFcXVhbCk7IC8qIGlmIHRydWUgPT4gTkFOKi8KKworICAgICAgICAgICAgSnVtcCBtX2p1
bXAgPSBKdW1wKG1fYXNzZW1ibGVyLmpuZSgpKTsgLyogbm90IE5BTiovCisgICAgICAgICAgICBt
X2Fzc2VtYmxlci5Mb2FkQ29uc3RhbnRVbmNoZWNrZWRTaXplKDB4MCwgc2NyKTsKKyAgICAgICAg
ICAgIG1fYXNzZW1ibGVyLm5vcCgpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIubm9wKCk7Cisg
ICAgICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgICAgICAgICAgcmVsZWFzZVNjcmF0
Y2goc2NyMSk7CisgICAgICAgICAgICByZXR1cm4gbV9qdW1wOworICAgICAgICB9CisKKyAgICAg
ICAgaWYgKGNvbmQgPT0gRG91YmxlRXF1YWxPclVub3JkZXJlZCkgeworICAgICAgICAgICAgUmVn
aXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgICAgIFJlZ2lzdGVySUQgc2Ny
MSA9IGNsYWltU2NyYXRjaCgpOworCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5Mb2FkQ29uc3Rh
bnQoX19mcHNjcl92YWx1ZXNbMV0sIFNINDo6UjQpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIu
bGRzZnBzY3IoU0g0OjpSNCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5kY21wcGVxKHJpZ2h0
LCBsZWZ0KTsKKworICAgICAgICAgICAgbV9hc3NlbWJsZXIuZW5zdXJlU3BhY2UobV9hc3NlbWJs
ZXIubWF4SW5zdHJ1Y3Rpb25TaXplICsgMTgsIHNpemVvZih1aW50MzJfdCkpOworICAgICAgICAg
ICAgbV9hc3NlbWJsZXIuYnJhbmNoKEJUX09QQ09ERSwgNCk7CisKKyAgICAgICAgICAgIG1fYXNz
ZW1ibGVyLnN0c2Zwc2NyKHNjcik7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5sZHNmcHNjcihT
SDQ6OlI0KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLm1vdl9pbW04KDB4NDAsIHNjcjEpOwor
ICAgICAgICAgICAgYW5kMzIoc2NyMSwgc2NyKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmNt
cGxfcnIoc2NyLCBzY3IxLCBFcXVhbCk7IC8qIE5BTiovCisKKyAgICAgICAgICAgIEp1bXAgbV9q
dW1wID0gSnVtcChtX2Fzc2VtYmxlci5qZSgpKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLkxv
YWRDb25zdGFudFVuY2hlY2tlZFNpemUoMHgwLCBzY3IpOworICAgICAgICAgICAgbV9hc3NlbWJs
ZXIubm9wKCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKKyAgICAgICAgICAgIHJl
bGVhc2VTY3JhdGNoKHNjcik7CisgICAgICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IxKTsKKyAg
ICAgICAgICAgIHJldHVybiBtX2p1bXA7CisgICAgICAgIH0KKworICAgICAgICBpZiAoY29uZCA9
PSBEb3VibGVHcmVhdGVyVGhhbk9yVW5vcmRlcmVkKSB7CisgICAgICAgICAgICBSZWdpc3RlcklE
IHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICAgICAgUmVnaXN0ZXJJRCBzY3IxID0gY2xh
aW1TY3JhdGNoKCk7CisKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLkxvYWRDb25zdGFudChfX2Zw
c2NyX3ZhbHVlc1sxXSwgU0g0OjpSNCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5sZHNmcHNj
cihTSDQ6OlI0KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmRjbXBwZ3QocmlnaHQsIGxlZnQp
OworICAgICAgICAgICAgbV9hc3NlbWJsZXIuZW5zdXJlU3BhY2UobV9hc3NlbWJsZXIubWF4SW5z
dHJ1Y3Rpb25TaXplICsgMTgsIHNpemVvZih1aW50MzJfdCkpOworICAgICAgICAgICAgbV9hc3Nl
bWJsZXIuYnJhbmNoKEJUX09QQ09ERSwgNCk7CisKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnN0
c2Zwc2NyKHNjcik7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5sZHNmcHNjcihTSDQ6OlI0KTsK
KyAgICAgICAgICAgIG1fYXNzZW1ibGVyLm1vdl9pbW04KDB4NDAsIHNjcjEpOworICAgICAgICAg
ICAgYW5kMzIoc2NyMSwgc2NyKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmNtcGxfcnIoc2Ny
LCBzY3IxLCBFcXVhbCk7IC8qIE5BTiovCisKKyAgICAgICAgICAgIEp1bXAgbV9qdW1wID0gSnVt
cChtX2Fzc2VtYmxlci5qZSgpKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLkxvYWRDb25zdGFu
dFVuY2hlY2tlZFNpemUoMHgwLCBzY3IpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIubm9wKCk7
CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKKyAgICAgICAgICAgIHJlbGVhc2VTY3Jh
dGNoKHNjcik7CisgICAgICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IxKTsKKyAgICAgICAgICAg
IHJldHVybiBtX2p1bXA7CisgICAgICAgIH0KKworICAgICAgICBpZiAoY29uZCA9PSBEb3VibGVH
cmVhdGVyVGhhbk9yRXF1YWxPclVub3JkZXJlZCkgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIu
ZGNtcHBndChsZWZ0LCByaWdodCk7CisgICAgICAgICAgICByZXR1cm4gYnJhbmNoRmFsc2UoKTsK
KyAgICAgICAgfQorCisgICAgICAgIGlmIChjb25kID09IERvdWJsZUxlc3NUaGFuT3JVbm9yZGVy
ZWQpIHsKKyAgICAgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAg
ICAgICAgICBSZWdpc3RlcklEIHNjcjEgPSBjbGFpbVNjcmF0Y2goKTsKKworICAgICAgICAgICAg
bV9hc3NlbWJsZXIuTG9hZENvbnN0YW50KF9fZnBzY3JfdmFsdWVzWzFdLCBTSDQ6OlI0KTsKKyAg
ICAgICAgICAgIG1fYXNzZW1ibGVyLmxkc2Zwc2NyKFNINDo6UjQpOworICAgICAgICAgICAgbV9h
c3NlbWJsZXIuZGNtcHBndChsZWZ0LCByaWdodCk7CisKKyAgICAgICAgICAgIG1fYXNzZW1ibGVy
LmVuc3VyZVNwYWNlKG1fYXNzZW1ibGVyLm1heEluc3RydWN0aW9uU2l6ZSArIDE4LCBzaXplb2Yo
dWludDMyX3QpKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmJyYW5jaChCVF9PUENPREUsIDQp
OworCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zdHNmcHNjcihzY3IpOworICAgICAgICAgICAg
bV9hc3NlbWJsZXIubGRzZnBzY3IoU0g0OjpSNCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5t
b3ZfaW1tOCgweDQwLCBzY3IxKTsKKyAgICAgICAgICAgIGFuZDMyKHNjcjEsIHNjcik7CisgICAg
ICAgICAgICBtX2Fzc2VtYmxlci5jbXBsX3JyKHNjciwgc2NyMSwgRXF1YWwpOyAvKiBOQU4qLwor
CisgICAgICAgICAgICBKdW1wIG1fanVtcCA9IEp1bXAobV9hc3NlbWJsZXIuamUoKSk7CisgICAg
ICAgICAgICBtX2Fzc2VtYmxlci5Mb2FkQ29uc3RhbnRVbmNoZWNrZWRTaXplKDB4MCwgc2NyKTsK
KyAgICAgICAgICAgIG1fYXNzZW1ibGVyLm5vcCgpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIu
bm9wKCk7CisgICAgICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgICAgICAgICAgcmVs
ZWFzZVNjcmF0Y2goc2NyMSk7CisgICAgICAgICAgICByZXR1cm4gbV9qdW1wOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKGNvbmQgPT0gRG91YmxlTGVzc1RoYW5PckVxdWFsT3JVbm9yZGVyZWQp
IHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmRjbXBwZ3QocmlnaHQsIGxlZnQpOworICAgICAg
ICAgICAgcmV0dXJuIGJyYW5jaEZhbHNlKCk7CisgICAgICAgIH0KKworICAgICAgICBBU1NFUlQo
Y29uZCA9PSBEb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkKTsKKyAgICAgICAgbV9hc3NlbWJsZXIu
ZGNtcHBlcShyaWdodCwgbGVmdCk7CisgICAgICAgIHJldHVybiBicmFuY2hGYWxzZSgpOworICAg
IH0KKworICAgIEp1bXAgYnJhbmNoVHJ1ZSgpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5l
bnN1cmVTcGFjZShtX2Fzc2VtYmxlci5tYXhJbnN0cnVjdGlvblNpemUgKyA2LCBzaXplb2YodWlu
dDMyX3QpKTsKKyAgICAgICAgSnVtcCBtX2p1bXAgPSBKdW1wKG1fYXNzZW1ibGVyLmplKCkpOwor
CisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIG1fYXNz
ZW1ibGVyLkxvYWRDb25zdGFudFVuY2hlY2tlZFNpemUoMHgwLCBzY3IpOworICAgICAgICBtX2Fz
c2VtYmxlci5ub3AoKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubm9wKCk7CisgICAgICAgIHJlbGVh
c2VTY3JhdGNoKHNjcik7CisKKyAgICAgICAgcmV0dXJuIG1fanVtcDsKKyAgICB9CisKKyAgICBK
dW1wIGJyYW5jaEZhbHNlKCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmVuc3VyZVNwYWNl
KG1fYXNzZW1ibGVyLm1heEluc3RydWN0aW9uU2l6ZSArIDYsIHNpemVvZih1aW50MzJfdCkpOwor
ICAgICAgICBKdW1wIG1fanVtcCA9IEp1bXAobV9hc3NlbWJsZXIuam5lKCkpOworCisgICAgICAg
IFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIG1fYXNzZW1ibGVyLkxv
YWRDb25zdGFudFVuY2hlY2tlZFNpemUoMHgwLCBzY3IpOworICAgICAgICBtX2Fzc2VtYmxlci5u
b3AoKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubm9wKCk7CisgICAgICAgIHJlbGVhc2VTY3JhdGNo
KHNjcik7CisKKyAgICAgICAgcmV0dXJuIG1fanVtcDsKKyAgICB9CisKKyAgICB2b2lkIHNldDhD
b21wYXJlMzIoQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgbGVmdCwgUmVnaXN0ZXJJRCByaWdo
dCwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgc2V0MzJDb21wYXJlMzIoY29uZCwg
bGVmdCwgcmlnaHQsIGRlc3QpOworICAgIH0KKworICAgIHZvaWQgc2V0OENvbXBhcmUzMihDb25k
aXRpb24gY29uZCwgUmVnaXN0ZXJJRCBsZWZ0LCBJbW0zMiByaWdodCwgUmVnaXN0ZXJJRCBkZXN0
KQorICAgIHsKKyAgICAgICAgaWYgKGxlZnQgIT0gZGVzdCkgeworICAgICAgICAgICAgbV9hc3Nl
bWJsZXIuTG9hZENvbnN0YW50KHJpZ2h0Lm1fdmFsdWUsIGRlc3QpOworICAgICAgICAgICAgc2V0
MzJDb21wYXJlMzIoY29uZCwgbGVmdCwgZGVzdCwgZGVzdCk7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICAgICAg
bV9hc3NlbWJsZXIuTG9hZENvbnN0YW50KHJpZ2h0Lm1fdmFsdWUsIHNjcik7CisgICAgICAgICAg
ICBzZXQzMkNvbXBhcmUzMihjb25kLCBsZWZ0LCBzY3IsIGRlc3QpOworICAgICAgICAgICAgcmVs
ZWFzZVNjcmF0Y2goc2NyKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEp1bXAgYnJhbmNoMzIo
Q29uZGl0aW9uIGNvbmQsIEJhc2VJbmRleCBsZWZ0LCBJbW0zMiByaWdodCkKKyAgICB7CisgICAg
ICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisKKyAgICAgICAgbW92ZShsZWZ0
LmluZGV4LCBzY3IpOworICAgICAgICBsc2hpZnQzMihJbW0zMihsZWZ0LnNjYWxlKSwgc2NyKTsK
KyAgICAgICAgYWRkMzIobGVmdC5iYXNlLCBzY3IpOworICAgICAgICBsb2FkMzIoc2NyLCBsZWZ0
Lm9mZnNldCwgc2NyKTsKKworICAgICAgICBtX2Fzc2VtYmxlci5jbXBsX2lyKHJpZ2h0Lm1fdmFs
dWUsIHNjciwgY29uZCk7CisKKyAgICAgICAgbV9hc3NlbWJsZXIuZW5zdXJlU3BhY2UobV9hc3Nl
bWJsZXIubWF4SW5zdHJ1Y3Rpb25TaXplICsgNiwgc2l6ZW9mKHVpbnQzMl90KSk7CisgICAgICAg
IEp1bXAgbV9qdW1wID0gKGNvbmQgPT0gTm90RXF1YWwpID8gSnVtcChtX2Fzc2VtYmxlci5qbmUo
KSkgOiBKdW1wKG1fYXNzZW1ibGVyLmplKCkpOworCisgICAgICAgIG1fYXNzZW1ibGVyLkxvYWRD
b25zdGFudFVuY2hlY2tlZFNpemUoMHgwLCBzY3IpOworICAgICAgICBtX2Fzc2VtYmxlci5ub3Ao
KTsKKyAgICAgICAgbV9hc3NlbWJsZXIubm9wKCk7CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNj
cik7CisKKyAgICAgICAgcmV0dXJuIG1fanVtcDsKKyAgICB9CisKKyAgICB2b2lkIHNxcnREb3Vi
bGUoRlBSZWdpc3RlcklEIHNyYywgRlBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBp
ZiAoZGVzdCAhPSBzcmMpCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5kbW92X3JyKHNyYywgZGVz
dCk7CisgICAgICAgIG1fYXNzZW1ibGVyLmRzcXJ0KGRlc3QpOworICAgIH0KKworICAgIEp1bXAg
YnJhbmNoVGVzdDgoQ29uZGl0aW9uIGNvbmQsIEFkZHJlc3MgYWRkcmVzcywgSW1tMzIgbWFzayA9
IEltbTMyKC0xKSkKKyAgICB7CisgICAgICAgIFJlZ2lzdGVySUQgYWRkcmVzc1RlbXBSZWdpc3Rl
ciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBsb2FkOChhZGRyZXNzLCBhZGRyZXNzVGVtcFJl
Z2lzdGVyKTsKKyAgICAgICAgCisgICAgICAgIEp1bXAgam1wID0gYnJhbmNoVGVzdDMyKGNvbmQs
IGFkZHJlc3NUZW1wUmVnaXN0ZXIsIG1hc2spOworICAgICAgICByZWxlYXNlU2NyYXRjaChhZGRy
ZXNzVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgcmV0dXJuIGptcDsKKyAgICB9CisgICAgCisgICAg
dm9pZCBzaWduRXh0ZW5kMzJUb1B0cihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQor
ICAgIHsKKyAgICAgICAgaWYgKHNyYyAhPSBkZXN0KQorICAgICAgICAgICAgbW92ZShzcmMsIGRl
c3QpOworICAgIH0KKyAgICAKKyAgICBKdW1wIGJyYW5jaDgoQ29uZGl0aW9uIGNvbmQsIEFkZHJl
c3MgbGVmdCwgSW1tMzIgcmlnaHQpCisgICAgeworICAgICAgICBSZWdpc3RlcklEIGFkZHJlc3NU
ZW1wUmVnaXN0ZXIgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgbG9hZDgobGVmdCwgYWRkcmVz
c1RlbXBSZWdpc3Rlcik7CisgICAgICAgIAorICAgICAgICBKdW1wIGptcCA9IGJyYW5jaDMyKGNv
bmQsIGFkZHJlc3NUZW1wUmVnaXN0ZXIsIHJpZ2h0KTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2go
YWRkcmVzc1RlbXBSZWdpc3Rlcik7CisgICAgICAgIHJldHVybiBqbXA7CisgICAgfQorCisgICAg
SnVtcCBicmFuY2hUcnVuY2F0ZURvdWJsZVRvSW50MzIoRlBSZWdpc3RlcklEIHNyYywgUmVnaXN0
ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuZnRyY19kcm1fZnB1bChzcmMp
OworICAgICAgICBtX2Fzc2VtYmxlci5zdHNfZnB1bF9ybihkZXN0KTsKKyAgICAgICAgcmV0dXJu
IGJyYW5jaDMyKEVxdWFsLCBkZXN0LCBJbW0zMigweDdmZmZmZmZmKSk7CisgICAgfQorICAgIAor
ICAgIC8vIFN0YWNrIG1hbmlwdWxhdGlvbiBvcGVyYXRpb25zCisgICAgCisgICAgdm9pZCBwb3Ao
UmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIucG9wX3IoZGVzdCk7
CisgICAgfQorCisgICAgdm9pZCBwdXNoKFJlZ2lzdGVySUQgc3JjKQorICAgIHsKKyAgICAgICAg
bV9hc3NlbWJsZXIucHVzaF9yKHNyYyk7CisgICAgfQorCisgICAgdm9pZCBwdXNoKEFkZHJlc3Mg
YWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnB1c2hfbShhZGRyZXNzLm9mZnNl
dCwgYWRkcmVzcy5iYXNlKTsKKyAgICB9CisKKyAgICB2b2lkIHB1c2goSW1tMzIgaW1tKQorICAg
IHsKKyAgICAgICAgbV9hc3NlbWJsZXIucHVzaF9pMzIoaW1tLm1fdmFsdWUpOworICAgIH0KKwor
ICAgIC8vIFJlZ2lzdGVyIG1vdmUgb3BlcmF0aW9ucworCisgICAgdm9pZCBtb3ZlKEltbTMyIGlt
bSwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICBtX2Fzc2VtYmxlci5Mb2FkQ29uc3Rh
bnQoaW1tLm1fdmFsdWUsIGRlc3QpOworICAgIH0KKyAgICAKKyAgICBEYXRhTGFiZWxQdHIgbW92
ZVdpdGhQYXRjaChJbW1QdHIgaW5pdGlhbFZhbHVlLCBSZWdpc3RlcklEIGRlc3QpCisgICAgewor
ICAgICAgIERhdGFMYWJlbFB0ciBkYXRhTGFiZWwodGhpcyk7CisgICAgICAgbV9hc3NlbWJsZXIu
TG9hZENvbnN0YW50KHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3Q+KGluaXRpYWxWYWx1ZS5tX3Zh
bHVlKSwgZGVzdCwgdHJ1ZSk7CisgICAgICAgcmV0dXJuIGRhdGFMYWJlbDsKKyAgICB9CisKKyAg
ICB2b2lkIG1vdmUoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAg
ICAgIG1fYXNzZW1ibGVyLm1vdmxfcnIoc3JjLCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIG1v
dmUoSW1tUHRyIGltbSwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJs
ZXIuTG9hZENvbnN0YW50KGltbS5hc0ludHB0cigpLCBkZXN0KTsKKyAgICB9CisgICAgCisgICAg
dm9pZCBleHR1dyhSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAg
ICBtX2Fzc2VtYmxlci5leHR1dyhzcmMsIGRzdCk7CisgICAgfQorCisgICAgdm9pZCBzZXQzMkNv
bXBhcmUzMihDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBsZWZ0LCBSZWdpc3RlcklEIHJpZ2h0
LCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5jbXBsX3JyKHJp
Z2h0LCBsZWZ0LCBjb25kKTsKKyAgICAgICAgaWYgKGNvbmQgIT0gTm90RXF1YWwpCisgICAgICAg
ICAgICBtX2Fzc2VtYmxlci5tb3Z0KGRlc3QpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
ICBtX2Fzc2VtYmxlci5lbnN1cmVTcGFjZShtX2Fzc2VtYmxlci5tYXhJbnN0cnVjdGlvblNpemUg
KyA0KTsKKyAgICAgICAgICAgICBtX2Fzc2VtYmxlci5tb3ZfaW1tOCgwLCBkZXN0KTsKKyAgICAg
ICAgICAgICBtX2Fzc2VtYmxlci5icmFuY2goQlRfT1BDT0RFLCAwKTsKKyAgICAgICAgICAgICBt
X2Fzc2VtYmxlci5tb3ZfaW1tOCgxLCBkZXN0KTsKKyAgICAgICAgfQorICAgIH0KKworCisgICAg
dm9pZCBzZXQzMkNvbXBhcmUzMihDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBsZWZ0LCBJbW0z
MiByaWdodCwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICBpZiAobGVmdCAhPSBkZXN0
KSB7CisgICAgICAgICAgIG1vdmUocmlnaHQsIGRlc3QpOworICAgICAgICAgICBzZXQzMkNvbXBh
cmUzMihjb25kLCBsZWZ0LCBkZXN0LCBkZXN0KTsKKyAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICAgICBtb3ZlKHJpZ2h0
LCBzY3IpOworICAgICAgICAgICBzZXQzMkNvbXBhcmUzMihjb25kLCBsZWZ0LCBzY3IsIGRlc3Qp
OworICAgICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgICAgIH0KKyAgICB9CisKKyAg
ICB2b2lkIHNldDMyVGVzdDgoQ29uZGl0aW9uIGNvbmQsIEFkZHJlc3MgYWRkcmVzcywgSW1tMzIg
bWFzaywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKChjb25kID09IFpl
cm8pIHx8IChjb25kID09IE5vblplcm8pKTsKKworICAgICAgICBsb2FkOChhZGRyZXNzLCBkZXN0
KTsKKworICAgICAgICBpZiAobWFzay5tX3ZhbHVlID09IC0xKQorICAgICAgICAgICAgbV9hc3Nl
bWJsZXIuY21wbF9pcigwLCBkZXN0LCBjb25kKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
bV9hc3NlbWJsZXIudGVzdGxfaTMycihtYXNrLm1fdmFsdWUsIGRlc3QpOworCisgICAgICAgIGlm
IChjb25kICE9IE5vblplcm8pCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5tb3Z0KGRlc3QpOwor
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmVuc3VyZVNwYWNlKG1fYXNz
ZW1ibGVyLm1heEluc3RydWN0aW9uU2l6ZSArIDQpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIu
bW92X2ltbTgoMCwgZGVzdCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5icmFuY2goQlRfT1BD
T0RFLCAwKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLm1vdl9pbW04KDEsIGRlc3QpOworICAg
ICAgICB9CisgICAgfQorCisgICAgdm9pZCBsb2FkUHRyTGlua1JlZyhJbXBsaWNpdEFkZHJlc3Mg
YWRkcmVzcykKKyAgICB7CisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7
CisgICAgICAgIGxvYWQzMihhZGRyZXNzLCBzY3IpOworICAgICAgICBtX2Fzc2VtYmxlci5sZHNw
cihzY3IpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgIH0KKworcHVibGljOgor
ICAgIEp1bXAgYnJhbmNoMzIoQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgbGVmdCwgUmVnaXN0
ZXJJRCByaWdodCkKKyAgICB7CisgICAgICAgIEp1bXAgbV9qdW1wOworICAgICAgICBtX2Fzc2Vt
Ymxlci5lbnN1cmVTcGFjZShtX2Fzc2VtYmxlci5tYXhJbnN0cnVjdGlvblNpemUgKyA4LCBzaXpl
b2YodWludDMyX3QpKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuY21wbF9ycihyaWdodCwgbGVmdCwg
Y29uZCk7CisgICAgICAgIAorICAgICAgICAvKiBCVCBsYWJlbCAgICAgICA9PiBCRiBvZmYgCisg
ICAgICAgICAgIG5vcCAgICAgICAgICAgICAgIExEUiByZWcKKyAgICAgICAgICAgbm9wICAgICAg
ICAgICAgICAgYnJhZiBAcmVnCisgICAgICAgICAgIG5vcCAgICAgICAgICAgICAgIG5vcAorICAg
ICAgICAgKi8KKyAgICAgICAgICAgICAgIAorICAgICAgICBtX2p1bXAgPSAoY29uZCA9PSBOb3RF
cXVhbCkgPyBKdW1wKG1fYXNzZW1ibGVyLmpuZSgpKSA6IEp1bXAobV9hc3NlbWJsZXIuamUoKSk7
CisgICAgICAgIAorICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAg
ICAgICBtX2Fzc2VtYmxlci5Mb2FkQ29uc3RhbnRVbmNoZWNrZWRTaXplKDB4MCwgc2NyKTsKKyAg
ICAgICAgbV9hc3NlbWJsZXIubm9wKCk7CisgICAgICAgIG1fYXNzZW1ibGVyLm5vcCgpOworICAg
ICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIG1fanVt
cDsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaDMyKENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklE
IGxlZnQsIEltbTMyIHJpZ2h0KQorICAgIHsKKyAgICAgICAgSnVtcCBtX2p1bXA7CisgICAgICAg
IGlmICgoKGNvbmQgPT0gRXF1YWwpIHx8IChjb25kID09IE5vdEVxdWFsKSkgJiYgIXJpZ2h0Lm1f
dmFsdWUpCisgICAgICAgICAgICBtX2Fzc2VtYmxlci50ZXN0bF9ycihsZWZ0LCBsZWZ0KTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgbV9hc3NlbWJsZXIuY21wbF9pcihyaWdodC5tX3ZhbHVl
LCBsZWZ0LCBjb25kKTsKKyAgICAgICAgICAgIAorICAgICAgICBtX2Fzc2VtYmxlci5lbnN1cmVT
cGFjZShtX2Fzc2VtYmxlci5tYXhJbnN0cnVjdGlvblNpemUgKyA2LCBzaXplb2YodWludDMyX3Qp
KTsKKyAgICAgICAgbV9qdW1wID0gKGNvbmQgPT0gTm90RXF1YWwpID8gSnVtcChtX2Fzc2VtYmxl
ci5qbmUoKSkgOiBKdW1wKG1fYXNzZW1ibGVyLmplKCkpOworICAgICAgICAKKyAgICAgICAgUmVn
aXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuTG9hZENv
bnN0YW50VW5jaGVja2VkU2l6ZSgweDAsIHNjcik7CisgICAgICAgIG1fYXNzZW1ibGVyLm5vcCgp
OworICAgICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2Ny
KTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBtX2p1bXA7CisgICAgfQorICAgIAorICAgIEp1
bXAgYnJhbmNoMzIoQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgbGVmdCwgQWRkcmVzcyByaWdo
dCkKKyAgICB7CisgICAgICAgIEp1bXAgbV9qdW1wOworICAgICAgICBtX2Fzc2VtYmxlci5jbXBs
X21yKHJpZ2h0Lm9mZnNldCwgcmlnaHQuYmFzZSwgbGVmdCwgY29uZCk7CisgICAgICAgIAorICAg
ICAgICBtX2Fzc2VtYmxlci5lbnN1cmVTcGFjZShtX2Fzc2VtYmxlci5tYXhJbnN0cnVjdGlvblNp
emUgKyA2LCBzaXplb2YodWludDMyX3QpKTsKKyAgICAgICAgbV9qdW1wID0gKGNvbmQgPT0gTm90
RXF1YWwpID8gSnVtcChtX2Fzc2VtYmxlci5qbmUoKSkgOiBKdW1wKG1fYXNzZW1ibGVyLmplKCkp
OworICAgICAgICAKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAg
ICAgICAgbV9hc3NlbWJsZXIuTG9hZENvbnN0YW50VW5jaGVja2VkU2l6ZSgweDAsIHNjcik7Cisg
ICAgICAgIG1fYXNzZW1ibGVyLm5vcCgpOworICAgICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKKyAg
ICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBtX2p1
bXA7CisgICAgfQorICAgIAorICAgIEp1bXAgYnJhbmNoMzIoQ29uZGl0aW9uIGNvbmQsIEFkZHJl
c3MgbGVmdCwgUmVnaXN0ZXJJRCByaWdodCkKKyAgICB7CisgICAgICAgIEp1bXAgbV9qdW1wOwor
ICAgICAgICBtX2Fzc2VtYmxlci5jbXBsX3JtKHJpZ2h0LCBsZWZ0Lm9mZnNldCwgbGVmdC5iYXNl
LCBjb25kKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgbV9hc3NlbWJsZXIuZW5zdXJlU3Bh
Y2UobV9hc3NlbWJsZXIubWF4SW5zdHJ1Y3Rpb25TaXplICsgNiwgc2l6ZW9mKHVpbnQzMl90KSk7
CisgICAgICAgIG1fanVtcCA9IChjb25kID09IE5vdEVxdWFsKSA/IEp1bXAobV9hc3NlbWJsZXIu
am5lKCkpIDogSnVtcChtX2Fzc2VtYmxlci5qZSgpKTsKKyAgICAgICAgCisgICAgICAgIFJlZ2lz
dGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIG1fYXNzZW1ibGVyLkxvYWRDb25z
dGFudFVuY2hlY2tlZFNpemUoMHgwLCBzY3IpOworICAgICAgICBtX2Fzc2VtYmxlci5ub3AoKTsK
KyAgICAgICAgbV9hc3NlbWJsZXIubm9wKCk7CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7
CisgICAgICAgIAorICAgICAgICByZXR1cm4gbV9qdW1wOworICAgIH0KKworICAgIEp1bXAgYnJh
bmNoMzIoQ29uZGl0aW9uIGNvbmQsIEFkZHJlc3MgbGVmdCwgSW1tMzIgcmlnaHQpCisgICAgewor
ICAgICAgICBKdW1wIG1fanVtcDsKKyAgICAgICAgbV9hc3NlbWJsZXIuY21wbF9pbShyaWdodC5t
X3ZhbHVlLCBsZWZ0Lm9mZnNldCwgbGVmdC5iYXNlLCBjb25kKTsKKyAgICAgICAgCisgICAgICAg
IG1fYXNzZW1ibGVyLmVuc3VyZVNwYWNlKG1fYXNzZW1ibGVyLm1heEluc3RydWN0aW9uU2l6ZSAr
IDYsIHNpemVvZih1aW50MzJfdCkpOworICAgICAgICBtX2p1bXAgPSAoY29uZCA9PSBOb3RFcXVh
bCkgPyBKdW1wKG1fYXNzZW1ibGVyLmpuZSgpKSA6IEp1bXAobV9hc3NlbWJsZXIuamUoKSk7Cisg
ICAgICAgIAorICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAg
ICBtX2Fzc2VtYmxlci5Mb2FkQ29uc3RhbnRVbmNoZWNrZWRTaXplKDB4MCwgc2NyKTsKKyAgICAg
ICAgbV9hc3NlbWJsZXIubm9wKCk7CisgICAgICAgIG1fYXNzZW1ibGVyLm5vcCgpOworICAgICAg
ICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIG1fanVtcDsK
KyAgICB9CisKKworICAgIEp1bXAgYnJhbmNoMzIoQ29uZGl0aW9uIGNvbmQsIEFic29sdXRlQWRk
cmVzcyBsZWZ0LCBSZWdpc3RlcklEIHJpZ2h0KQorICAgIHsKKyAgICAgICAgSnVtcCBtX2p1bXA7
CisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIG1vdmUo
SW1tMzIoKGludClsZWZ0Lm1fcHRyKSwgc2NyKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuY21wbF9y
cihyaWdodCwgc2NyLCBjb25kKTsKKworICAgICAgICBtX2Fzc2VtYmxlci5lbnN1cmVTcGFjZSht
X2Fzc2VtYmxlci5tYXhJbnN0cnVjdGlvblNpemUgKyA2LCBzaXplb2YodWludDMyX3QpKTsKKyAg
ICAgICAgbV9qdW1wID0gKGNvbmQgPT0gTm90RXF1YWwpID8gSnVtcChtX2Fzc2VtYmxlci5qbmUo
KSkgOiBKdW1wKG1fYXNzZW1ibGVyLmplKCkpOworCisgICAgICAgIG1fYXNzZW1ibGVyLkxvYWRD
b25zdGFudFVuY2hlY2tlZFNpemUoMHgwLCBzY3IpOworICAgICAgICBtX2Fzc2VtYmxlci5ub3Ao
KTsKKyAgICAgICAgbV9hc3NlbWJsZXIubm9wKCk7CisKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2go
c2NyKTsKKyAgICAgICAgcmV0dXJuIG1fanVtcDsKKyAgICB9CisKKworICAgIEp1bXAgYnJhbmNo
MzIoQ29uZGl0aW9uIGNvbmQsIEFic29sdXRlQWRkcmVzcyBsZWZ0LCBJbW0zMiByaWdodCkKKyAg
ICB7CisgICAgICAgIEp1bXAgbV9qdW1wOworICAgICAgICBSZWdpc3RlcklEIGFkZHJlc3NUZW1w
UmVnaXN0ZXIgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgbG9hZDMyKGxlZnQubV9wdHIsIGFk
ZHJlc3NUZW1wUmVnaXN0ZXIpOworCisgICAgICAgIG1fYXNzZW1ibGVyLmNtcGxfaXIocmlnaHQu
bV92YWx1ZSwgYWRkcmVzc1RlbXBSZWdpc3RlciwgY29uZCk7CisKKyAgICAgICAgbV9hc3NlbWJs
ZXIuZW5zdXJlU3BhY2UobV9hc3NlbWJsZXIubWF4SW5zdHJ1Y3Rpb25TaXplICsgNiwgc2l6ZW9m
KHVpbnQzMl90KSk7CisgICAgICAgIG1fanVtcCA9IChjb25kID09IE5vdEVxdWFsKSA/IEp1bXAo
bV9hc3NlbWJsZXIuam5lKCkpIDogSnVtcChtX2Fzc2VtYmxlci5qZSgpKTsKKworICAgICAgICBt
X2Fzc2VtYmxlci5Mb2FkQ29uc3RhbnRVbmNoZWNrZWRTaXplKDB4MCwgYWRkcmVzc1RlbXBSZWdp
c3Rlcik7CisgICAgICAgIG1fYXNzZW1ibGVyLm5vcCgpOworICAgICAgICBtX2Fzc2VtYmxlci5u
b3AoKTsKKworICAgICAgICByZWxlYXNlU2NyYXRjaChhZGRyZXNzVGVtcFJlZ2lzdGVyKTsKKyAg
ICAgICAgcmV0dXJuIG1fanVtcDsKKyAgICB9CisKKworCisgICAgSnVtcCBicmFuY2gxNihDb25k
aXRpb24gY29uZCwgIEJhc2VJbmRleCBsZWZ0LCBSZWdpc3RlcklEIHJpZ2h0KQorICAgIHsKKyAg
ICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgbW92ZShsZWZ0
LmluZGV4LCBzY3IpOworICAgICAgICBsc2hpZnQzMihJbW0zMihsZWZ0LnNjYWxlKSwgc2NyKTsK
KyAgICAgICAgbV9hc3NlbWJsZXIuYWRkbF9pcihsZWZ0Lm9mZnNldCwgc2NyKTsKKyAgICAgICAg
YWRkMzIobGVmdC5iYXNlLCBzY3IpOworICAgICAgICBsb2FkMTYoc2NyLCBzY3IpOworICAgICAg
ICBleHR1dyhzY3IsIHNjcik7CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisKKyAgICAg
ICAgcmV0dXJuIGJyYW5jaDMyKGNvbmQsIHNjciwgcmlnaHQpOworICAgIH0KKyAgICAKKyAgICBK
dW1wIGJyYW5jaDE2KENvbmRpdGlvbiBjb25kLCBCYXNlSW5kZXggbGVmdCwgSW1tMzIgcmlnaHQp
CisgICAgeworICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAg
ICBtb3ZlKGxlZnQuaW5kZXgsIHNjcik7CisgICAgICAgIGxzaGlmdDMyKEltbTMyKGxlZnQuc2Nh
bGUpLCBzY3IpOworICAgICAgICBtX2Fzc2VtYmxlci5hZGRsX2lyKGxlZnQub2Zmc2V0LCBzY3Ip
OworICAgICAgICBhZGQzMihsZWZ0LmJhc2UsIHNjcik7CisgICAgICAgIGxvYWQxNihzY3IsIHNj
cik7CisgICAgICAgIGV4dHV3KHNjciwgc2NyKTsKKyAgICAgICAgCisgICAgICAgIFJlZ2lzdGVy
SUQgc2NyMSA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBtX2Fzc2VtYmxlci5Mb2FkQ29uc3Rh
bnQocmlnaHQubV92YWx1ZSwgc2NyMSk7CisgICAgICAgIAorICAgICAgICByZWxlYXNlU2NyYXRj
aChzY3IpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IxKTsKKyAgICAgICAgcmV0dXJuIGJy
YW5jaDMyKGNvbmQsIHNjciwgc2NyMSk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2hUZXN0MzIo
Q29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgcmVnLCBSZWdpc3RlcklEIG1hc2spCisgICAgewor
ICAgICAgICBBU1NFUlQoKGNvbmQgPT0gWmVybykgfHwgKGNvbmQgPT0gTm9uWmVybykpOworICAg
ICAgICBKdW1wIG1fanVtcDsKKyAgICAgICAgbV9hc3NlbWJsZXIudGVzdGxfcnIocmVnLCBtYXNr
KTsKKworICAgICAgICBtX2Fzc2VtYmxlci5lbnN1cmVTcGFjZShtX2Fzc2VtYmxlci5tYXhJbnN0
cnVjdGlvblNpemUgKyA2LCBzaXplb2YodWludDMyX3QpKTsKKyAgICAgICAgbV9qdW1wID0gKGNv
bmQgPT0gTm90RXF1YWwpID8gSnVtcChtX2Fzc2VtYmxlci5qbmUoKSkgOiBKdW1wKG1fYXNzZW1i
bGVyLmplKCkpOworICAgICAgICAKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0
Y2goKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuTG9hZENvbnN0YW50VW5jaGVja2VkU2l6ZSgweDAs
IHNjcik7CisgICAgICAgIG1fYXNzZW1ibGVyLm5vcCgpOworICAgICAgICBtX2Fzc2VtYmxlci5u
b3AoKTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICAgICAgCisgICAgICAgIHJl
dHVybiBtX2p1bXA7CisgICAgfQorCisgICAgSnVtcCBicmFuY2hUZXN0MzIoQ29uZGl0aW9uIGNv
bmQsIFJlZ2lzdGVySUQgcmVnLCBJbW0zMiBtYXNrID0gSW1tMzIoLTEpKQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKChjb25kID09IFplcm8pIHx8IChjb25kID09IE5vblplcm8pKTsKKyAgICAgICAg
SnVtcCBtX2p1bXA7CisgICAgICAgIAorICAgICAgICBpZiAobWFzay5tX3ZhbHVlID09IC0xKQor
ICAgICAgICAgICAgbV9hc3NlbWJsZXIudGVzdGxfcnIocmVnLCByZWcpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBtX2Fzc2VtYmxlci50ZXN0bF9pMzJyKG1hc2subV92YWx1ZSwgcmVnKTsK
KyAgICAgICAgICAgIAorICAgICAgICBtX2Fzc2VtYmxlci5lbnN1cmVTcGFjZShtX2Fzc2VtYmxl
ci5tYXhJbnN0cnVjdGlvblNpemUgKyA2LCBzaXplb2YodWludDMyX3QpKTsKKyAgICAgICAgbV9q
dW1wID0gKGNvbmQgPT0gTm90RXF1YWwpID8gSnVtcChtX2Fzc2VtYmxlci5qbmUoKSkgOiBKdW1w
KG1fYXNzZW1ibGVyLmplKCkpOworICAgICAgICAKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBj
bGFpbVNjcmF0Y2goKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuTG9hZENvbnN0YW50VW5jaGVja2Vk
U2l6ZSgweDAsIHNjcik7CisKKyAgICAgICAgbV9hc3NlbWJsZXIubm9wKCk7CisgICAgICAgIG1f
YXNzZW1ibGVyLm5vcCgpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgICAgICAK
KyAgICAgICAgcmV0dXJuIG1fanVtcDsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaFRlc3QzMihD
b25kaXRpb24gY29uZCwgQWRkcmVzcyBhZGRyZXNzLCBJbW0zMiBtYXNrID0gSW1tMzIoLTEpKQor
ICAgIHsKKyAgICAgICAgQVNTRVJUKChjb25kID09IFplcm8pIHx8IChjb25kID09IE5vblplcm8p
KTsKKyAgICAgICAgSnVtcCBtX2p1bXA7CisKKyAgICAgICAgaWYgKG1hc2subV92YWx1ZSA9PSAt
MSkKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmNtcGxfaW0oMCwgYWRkcmVzcy5vZmZzZXQsIGFk
ZHJlc3MuYmFzZSwgY29uZCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fYXNzZW1ibGVy
LnRlc3RsX2kzMm0obWFzay5tX3ZhbHVlLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlKTsK
KyAgICAgICAgICAgIAorICAgICAgICBtX2Fzc2VtYmxlci5lbnN1cmVTcGFjZShtX2Fzc2VtYmxl
ci5tYXhJbnN0cnVjdGlvblNpemUgKyA2LCBzaXplb2YodWludDMyX3QpKTsKKyAgICAgICAgbV9q
dW1wID0gKGNvbmQgPT0gTm90RXF1YWwpID8gSnVtcChtX2Fzc2VtYmxlci5qbmUoKSkgOiBKdW1w
KG1fYXNzZW1ibGVyLmplKCkpOworICAgICAgICAKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBj
bGFpbVNjcmF0Y2goKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuTG9hZENvbnN0YW50VW5jaGVja2Vk
U2l6ZSgweDAsIHNjcik7CisgICAgICAgIG1fYXNzZW1ibGVyLm5vcCgpOworICAgICAgICBtX2Fz
c2VtYmxlci5ub3AoKTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICAgICAgCisg
ICAgICAgIHJldHVybiBtX2p1bXA7CisgICAgfQorICAgIAorICAgIEp1bXAgYnJhbmNoVGVzdDMy
KENvbmRpdGlvbiBjb25kLCBCYXNlSW5kZXggYWRkcmVzcywgSW1tMzIgbWFzayA9IEltbTMyKC0x
KSkKKyAgICB7CisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAg
ICAgIEp1bXAgbV9qdW1wOworCisgICAgICAgIG1vdmUoYWRkcmVzcy5pbmRleCwgc2NyKTsKKwor
ICAgICAgICBsc2hpZnQzMihJbW0zMihhZGRyZXNzLnNjYWxlKSwgc2NyKTsKKyAgICAgICAgYWRk
MzIoYWRkcmVzcy5iYXNlLCBzY3IpOworICAgICAgICBsb2FkMzIoc2NyLCBhZGRyZXNzLm9mZnNl
dCwgc2NyKTsKKworICAgICAgICBpZiAobWFzay5tX3ZhbHVlID09IC0xKQorICAgICAgICAgICAg
bV9hc3NlbWJsZXIudGVzdGxfcnIoc2NyLCBzY3IpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBtX2Fzc2VtYmxlci50ZXN0bF9pMzJyKG1hc2subV92YWx1ZSwgc2NyKTsKKworICAgICAgICBt
X2Fzc2VtYmxlci5lbnN1cmVTcGFjZShtX2Fzc2VtYmxlci5tYXhJbnN0cnVjdGlvblNpemUgKyA2
LCBzaXplb2YodWludDMyX3QpKTsKKyAgICAgICAgbV9qdW1wID0gKGNvbmQgPT0gTm90RXF1YWwp
ID8gSnVtcChtX2Fzc2VtYmxlci5qbmUoKSkgOiBKdW1wKG1fYXNzZW1ibGVyLmplKCkpOworCisg
ICAgICAgIG1fYXNzZW1ibGVyLkxvYWRDb25zdGFudFVuY2hlY2tlZFNpemUoMHgwLCBzY3IpOwor
CisgICAgICAgIG1fYXNzZW1ibGVyLm5vcCgpOworICAgICAgICBtX2Fzc2VtYmxlci5ub3AoKTsK
KyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBt
X2p1bXA7CisgICAgfQorCisgICAgSnVtcCBqdW1wKCkKKyAgICB7CisgICAgICAgIHJldHVybiBK
dW1wKG1fYXNzZW1ibGVyLmptcCgpKTsKKyAgICB9CisKKyAgICB2b2lkIGp1bXAoUmVnaXN0ZXJJ
RCB0YXJnZXQpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5qbXBfcih0YXJnZXQpOworICAg
IH0KKworICAgIC8vIEFkZHJlc3MgaXMgYSBtZW1vcnkgbG9jYXRpb24gY29udGFpbmluZyB0aGUg
YWRkcmVzcyB0byBqdW1wIHRvCisgICAgdm9pZCBqdW1wKEFkZHJlc3MgYWRkcmVzcykKKyAgICB7
CisgICAgICAgIG1fYXNzZW1ibGVyLmptcF9tKGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2Up
OworICAgIH0KKworCisgICAgLy8gQXJpdGhtZXRpYyBjb250cm9sIGZsb3cgb3BlcmF0aW9ucwor
ICAgIAorICAgIEp1bXAgYnJhbmNoQWRkMzIoQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgc3Jj
LCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBBU1NFUlQoKGNvbmQgPT0gT3ZlcmZs
b3cpIHx8IChjb25kID09IFNpZ25lZCkpOworCisgICAgICAgIGlmIChjb25kID09IE92ZXJmbG93
KSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5lbnN1cmVTcGFjZShtX2Fzc2VtYmxlci5tYXhJ
bnN0cnVjdGlvblNpemUgKyA4LCBzaXplb2YodWludDMyX3QpKTsKKyAgICAgICAgICAgIG1fYXNz
ZW1ibGVyLmFkZHZsX3JyKHNyYywgZGVzdCk7CisgICAgICAgIH0gZWxzZSBpZiAoY29uZCA9PSBT
aWduZWQpIHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmVuc3VyZVNwYWNlKG1fYXNzZW1ibGVy
Lm1heEluc3RydWN0aW9uU2l6ZSArIDEwLCBzaXplb2YodWludDMyX3QpKTsKKyAgICAgICAgICAg
IG1fYXNzZW1ibGVyLmFkZGxfcnIoc3JjLCBkZXN0KTsKKyAgICAgICAgICAgIC8vIENoZWNrIGlm
IGRlc3QgaXMgbmVnYXRpdmUuCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5jbXBsX2lyKDAsIGRl
c3QsIExlc3NUaGFuKTsKKyAgICAgICAgfQorCisgICAgICAgIEp1bXAgbV9qdW1wID0gSnVtcCht
X2Fzc2VtYmxlci5qZSgpKTsKKworICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRj
aCgpOworICAgICAgICBtX2Fzc2VtYmxlci5Mb2FkQ29uc3RhbnRVbmNoZWNrZWRTaXplKDB4MCwg
c2NyKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubm9wKCk7CisgICAgICAgIG1fYXNzZW1ibGVyLm5v
cCgpOworCisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgICAgIHJldHVybiBtX2p1
bXA7CisgICAgfQorCisgICAgSnVtcCBicmFuY2hBZGQzMihDb25kaXRpb24gY29uZCwgSW1tMzIg
aW1tLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBBU1NFUlQoKGNvbmQgPT0gT3Zl
cmZsb3cpIHx8IChjb25kID09IFNpZ25lZCkpOworICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNs
YWltU2NyYXRjaCgpOworCisgICAgICAgIG1vdmUoaW1tLCBzY3IpOworICAgICAgICBpZiAoY29u
ZCA9PSBPdmVyZmxvdykgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIuZW5zdXJlU3BhY2UobV9h
c3NlbWJsZXIubWF4SW5zdHJ1Y3Rpb25TaXplICsgOCwgc2l6ZW9mKHVpbnQzMl90KSk7CisgICAg
ICAgICAgICBtX2Fzc2VtYmxlci5hZGR2bF9ycihzY3IsIGRlc3QpOworICAgICAgICB9IGVsc2Ug
aWYgKGNvbmQgPT0gU2lnbmVkKSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5lbnN1cmVTcGFj
ZShtX2Fzc2VtYmxlci5tYXhJbnN0cnVjdGlvblNpemUgKyAxMCwgc2l6ZW9mKHVpbnQzMl90KSk7
CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGRsX3JyKHNjciwgZGVzdCk7CisgICAgICAgICAg
ICAvLyBDaGVjayBpZiBkZXN0IGlzIG5lZ2F0aXZlLgorICAgICAgICAgICAgbV9hc3NlbWJsZXIu
Y21wbF9pcigwLCBkZXN0LCBMZXNzVGhhbik7CisgICAgICAgIH0KKworICAgICAgICBKdW1wIG1f
anVtcCA9IEp1bXAobV9hc3NlbWJsZXIuamUoKSk7CisKKyAgICAgICAgbV9hc3NlbWJsZXIuTG9h
ZENvbnN0YW50VW5jaGVja2VkU2l6ZSgweDAsIHNjcik7CisgICAgICAgIG1fYXNzZW1ibGVyLm5v
cCgpOworICAgICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKKworICAgICAgICByZWxlYXNlU2NyYXRj
aChzY3IpOworICAgICAgICByZXR1cm4gbV9qdW1wOworICAgIH0KKyAgICAKKyAgICBKdW1wIGJy
YW5jaE11bDMyKENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0
KQorICAgIHsKKyAgICAgICAgQVNTRVJUKChjb25kID09IE92ZXJmbG93KSB8fCAoY29uZCA9PSBT
aWduZWQpIHx8IChjb25kID09IFplcm8pIHx8IChjb25kID09IE5vblplcm8pKTsKKyAgICAgICAg
UmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgaWYgKGNvbmQgPT0gT3Zl
cmZsb3cpIHsKKyAgICAgICAgICAgIFJlZ2lzdGVySUQgc2NyMSA9IGNsYWltU2NyYXRjaCgpOwor
ICAgICAgICAgICAgbV9hc3NlbWJsZXIuZG11bGxfcnIoc3JjLCBkZXN0KTsKKyAgICAgICAgICAg
IG1fYXNzZW1ibGVyLnN0c21hY2woZGVzdCk7CisKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLm1v
dl9pbW04KC0zMSwgc2NyKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLm1vdmxfcnIoZGVzdCwg
c2NyMSk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zaGFfcnIoc2NyMSwgc2NyKTsKKyAgICAg
ICAgICAgIG1fYXNzZW1ibGVyLnN0c21hY2goc2NyKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVy
LmNtcGxfcnIoc2NyLCBzY3IxLCBaZXJvKTsKKyAgICAgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNj
cjEpOworICAgICAgICAgICAgY29uZCA9IE5vdEVxdWFsOworICAgICAgICB9IGVsc2UgaWYgKGNv
bmQgPT0gU2lnbmVkKSB7CisgICAgICAgICAgICAvLyBDaGVjayBpZiBkZXN0IGlzIG5lZ2F0aXZl
LgorICAgICAgICAgICAgbV9hc3NlbWJsZXIuaW11bGxfcnIoc3JjLCBkZXN0KTsKKyAgICAgICAg
ICAgIG1fYXNzZW1ibGVyLnN0c21hY2woZGVzdCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5j
bXBsX2lyKDAsIGRlc3QsIExlc3NUaGFuKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IG1fYXNzZW1ibGVyLmltdWxsX3JyKHNyYywgZGVzdCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxl
ci5zdHNtYWNsKGRlc3QpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuY21wbF9pcigwLCBkZXN0
LCBjb25kKTsKKyAgICAgICAgfQorCisgICAgICAgIG1fYXNzZW1ibGVyLmVuc3VyZVNwYWNlKG1f
YXNzZW1ibGVyLm1heEluc3RydWN0aW9uU2l6ZSArIDYsIHNpemVvZih1aW50MzJfdCkpOworICAg
ICAgICBKdW1wIG1fanVtcCA9IChjb25kID09IE5vdEVxdWFsKSA/IEp1bXAobV9hc3NlbWJsZXIu
am5lKCkpIDogSnVtcChtX2Fzc2VtYmxlci5qZSgpKTsKKworICAgICAgICBtX2Fzc2VtYmxlci5M
b2FkQ29uc3RhbnRVbmNoZWNrZWRTaXplKDB4MCwgc2NyKTsKKworICAgICAgICBtX2Fzc2VtYmxl
ci5ub3AoKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubm9wKCk7CisgICAgICAgIHJlbGVhc2VTY3Jh
dGNoKHNjcik7CisKKyAgICAgICAgcmV0dXJuIG1fanVtcDsKKyAgICB9CisgICAgCisgICAgSnVt
cCBicmFuY2hNdWwzMihDb25kaXRpb24gY29uZCwgSW1tMzIgaW1tLCBSZWdpc3RlcklEIHNyYywg
UmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKChjb25kID09IE92ZXJmbG93
KSB8fCAoY29uZCA9PSBTaWduZWQpIHx8IChjb25kID09IFplcm8pIHx8IChjb25kID09IE5vblpl
cm8pKTsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAg
bW92ZShpbW0sIHNjcik7CisgICAgICAgIGlmIChjb25kID09IE92ZXJmbG93KSB7CisgICAgICAg
ICAgICBSZWdpc3RlcklEIHNjcjEgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgICAgIG1fYXNz
ZW1ibGVyLmRtdWxsX3JyKHNyYywgc2NyKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnN0c21h
Y2woZGVzdCk7CisKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLm1vdl9pbW04KC0zMSwgc2NyKTsK
KyAgICAgICAgICAgIG1fYXNzZW1ibGVyLm1vdmxfcnIoZGVzdCwgc2NyMSk7CisgICAgICAgICAg
ICBtX2Fzc2VtYmxlci5zaGFfcnIoc2NyMSwgc2NyKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVy
LnN0c21hY2goc2NyKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmNtcGxfcnIoc2NyLCBzY3Ix
LCBaZXJvKTsKKyAgICAgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcjEpOworICAgICAgICAgICAg
Y29uZCA9IE5vdEVxdWFsOworICAgICAgICB9IGVsc2UgaWYgKGNvbmQgPT0gU2lnbmVkKSB7Cisg
ICAgICAgICAgICAvLyBDaGVjayBpZiBkZXN0IGlzIG5lZ2F0aXZlLgorICAgICAgICAgICAgbV9h
c3NlbWJsZXIuaW11bGxfcnIoc3JjLCBkZXN0KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnN0
c21hY2woZGVzdCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5jbXBsX2lyKDAsIGRlc3QsIExl
c3NUaGFuKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmltdWxs
X3JyKHNyYywgZGVzdCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zdHNtYWNsKGRlc3QpOwor
ICAgICAgICAgICAgbV9hc3NlbWJsZXIuY21wbF9pcigwLCBkZXN0LCBjb25kKTsKKyAgICAgICAg
fQorCisgICAgICAgIG1fYXNzZW1ibGVyLmVuc3VyZVNwYWNlKG1fYXNzZW1ibGVyLm1heEluc3Ry
dWN0aW9uU2l6ZSArIDYsIHNpemVvZih1aW50MzJfdCkpOworICAgICAgICBKdW1wIG1fanVtcCA9
IChjb25kID09IE5vdEVxdWFsKSA/IEp1bXAobV9hc3NlbWJsZXIuam5lKCkpIDogSnVtcChtX2Fz
c2VtYmxlci5qZSgpKTsKKworICAgICAgICBtX2Fzc2VtYmxlci5Mb2FkQ29uc3RhbnRVbmNoZWNr
ZWRTaXplKDB4MCwgc2NyKTsKKworICAgICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKKyAgICAgICAg
bV9hc3NlbWJsZXIubm9wKCk7CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisKKyAgICAg
ICAgcmV0dXJuIG1fanVtcDsKKyAgICB9CisgICAgCisgICAgSnVtcCBicmFuY2hTdWIzMihDb25k
aXRpb24gY29uZCwgUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAg
ICAgIEFTU0VSVCgoY29uZCA9PSBPdmVyZmxvdykgfHwgKGNvbmQgPT0gU2lnbmVkKSB8fCAoY29u
ZCA9PSBaZXJvKSB8fCAoY29uZCA9PSBOb25aZXJvKSk7CisgICAgICAgIEp1bXAgbV9qdW1wOwor
CisgICAgICAgIGlmIChjb25kID09IE92ZXJmbG93KSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxl
ci5zdWJ2bF9ycihzcmMsIGRlc3QpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuZW5zdXJlU3Bh
Y2UobV9hc3NlbWJsZXIubWF4SW5zdHJ1Y3Rpb25TaXplICsgOCwgc2l6ZW9mKHVpbnQzMl90KSk7
CisgICAgICAgICAgICBtX2p1bXAgPSBKdW1wKG1fYXNzZW1ibGVyLmplKCkpOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKGNvbmQgPT0gU2lnbmVkKSB7CisgICAgICAgICAgICAvLyBDaGVjayBp
ZiBkZXN0IGlzIG5lZ2F0aXZlLgorICAgICAgICAgICAgbV9hc3NlbWJsZXIuc3VibF9ycihzcmMs
IGRlc3QpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuY21wbF9pcigwLCBkZXN0LCBMZXNzVGhh
bik7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5lbnN1cmVTcGFjZShtX2Fzc2VtYmxlci5tYXhJ
bnN0cnVjdGlvblNpemUgKyA4LCBzaXplb2YodWludDMyX3QpKTsKKyAgICAgICAgICAgIG1fanVt
cCA9IEp1bXAobV9hc3NlbWJsZXIuamUoKSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoKGNv
bmQgPT0gWmVybykgfHwgKGNvbmQgPT0gTm9uWmVybykpIHsKKyAgICAgICAgICAgIHN1YjMyKHNy
YywgZGVzdCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5jbXBsX2lyKDAsIGRlc3QsIGNvbmQp
OworCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5lbnN1cmVTcGFjZShtX2Fzc2VtYmxlci5tYXhJ
bnN0cnVjdGlvblNpemUgKyA4LCBzaXplb2YodWludDMyX3QpKTsKKyAgICAgICAgICAgIG1fanVt
cCA9IChjb25kID09IE5vdEVxdWFsKSA/IEp1bXAobV9hc3NlbWJsZXIuam5lKCkpIDogSnVtcCht
X2Fzc2VtYmxlci5qZSgpKTsKKyAgICAgICAgfQorCisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0g
Y2xhaW1TY3JhdGNoKCk7CisgICAgICAgIG1fYXNzZW1ibGVyLkxvYWRDb25zdGFudFVuY2hlY2tl
ZFNpemUoMHgwLCBzY3IpOworICAgICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKKyAgICAgICAgbV9h
c3NlbWJsZXIubm9wKCk7CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisKKyAgICAgICAg
cmV0dXJuIG1fanVtcDsKKyAgICB9CisgICAgCisgICAgSnVtcCBicmFuY2hTdWIzMihDb25kaXRp
b24gY29uZCwgSW1tMzIgaW1tLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBBU1NF
UlQoKGNvbmQgPT0gT3ZlcmZsb3cpIHx8IChjb25kID09IFNpZ25lZCkgfHwgKGNvbmQgPT0gWmVy
bykgfHwgKGNvbmQgPT0gTm9uWmVybykpOworCisgICAgICAgIEp1bXAgbV9qdW1wOworICAgICAg
ICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBtb3ZlKGltbSwgc2Ny
KTsKKworICAgICAgICBpZiAoY29uZCA9PSBPdmVyZmxvdykgeworICAgICAgICAgICAgbV9hc3Nl
bWJsZXIuc3VidmxfcnIoc2NyLCBkZXN0KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmVuc3Vy
ZVNwYWNlKG1fYXNzZW1ibGVyLm1heEluc3RydWN0aW9uU2l6ZSArIDgsIHNpemVvZih1aW50MzJf
dCkpOworICAgICAgICAgICAgbV9qdW1wID0gSnVtcChtX2Fzc2VtYmxlci5qZSgpKTsKKyAgICAg
ICAgfQorICAgICAgICBpZiAoY29uZCA9PSBTaWduZWQpIHsKKyAgICAgICAgICAgIC8vIENoZWNr
IGlmIGRlc3QgaXMgbmVnYXRpdmUuCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zdWJsX3JyKHNj
ciwgZGVzdCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5jbXBsX2lyKDAsIGRlc3QsIExlc3NU
aGFuKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmVuc3VyZVNwYWNlKG1fYXNzZW1ibGVyLm1h
eEluc3RydWN0aW9uU2l6ZSArIDgsIHNpemVvZih1aW50MzJfdCkpOworICAgICAgICAgICAgbV9q
dW1wID0gSnVtcChtX2Fzc2VtYmxlci5qZSgpKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgo
Y29uZCA9PSBaZXJvKSB8fCAoY29uZCA9PSBOb25aZXJvKSkgeworICAgICAgICAgICAgc3ViMzIo
c2NyLCBkZXN0KTsKKworICAgICAgICAgICAgbV9hc3NlbWJsZXIuY21wbF9pcigwLCBkZXN0LCBj
b25kKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmVuc3VyZVNwYWNlKG1fYXNzZW1ibGVyLm1h
eEluc3RydWN0aW9uU2l6ZSArIDgsIHNpemVvZih1aW50MzJfdCkpOworCisgICAgICAgICAgICBt
X2p1bXAgPSAoY29uZCA9PSBOb3RFcXVhbCkgPyBKdW1wKG1fYXNzZW1ibGVyLmpuZSgpKSA6IEp1
bXAobV9hc3NlbWJsZXIuamUoKSk7CisgICAgICAgIH0KKworICAgICAgICBtX2Fzc2VtYmxlci5M
b2FkQ29uc3RhbnRVbmNoZWNrZWRTaXplKDB4MCwgc2NyKTsKKyAgICAgICAgbV9hc3NlbWJsZXIu
bm9wKCk7CisgICAgICAgIG1fYXNzZW1ibGVyLm5vcCgpOworICAgICAgICByZWxlYXNlU2NyYXRj
aChzY3IpOworCisgICAgICAgIHJldHVybiBtX2p1bXA7CisKKyAgICB9CisKKyAgICBKdW1wIGJy
YW5jaE9yMzIoQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3Qp
CisgICAgeworICAgICAgICBBU1NFUlQoKGNvbmQgPT0gU2lnbmVkKSB8fCAoY29uZCA9PSBaZXJv
KSB8fCAoY29uZCA9PSBOb25aZXJvKSk7CisgICAgICAgIEp1bXAgbV9qdW1wOworICAgICAgICBS
ZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworCisgICAgICAgIGlmIChjb25kID09IFNp
Z25lZCkgeworICAgICAgICAgICAgb3IzMihzcmMsIGRlc3QpOworICAgICAgICAgICAgbV9hc3Nl
bWJsZXIuY21wbF9pcigwLCBkZXN0LCBMZXNzVGhhbik7CisgICAgICAgICAgICBtX2Fzc2VtYmxl
ci5lbnN1cmVTcGFjZShtX2Fzc2VtYmxlci5tYXhJbnN0cnVjdGlvblNpemUgKyA4LCBzaXplb2Yo
dWludDMyX3QpKTsKKyAgICAgICAgICAgIG1fanVtcCA9IEp1bXAobV9hc3NlbWJsZXIuamUoKSk7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBvcjMyKHNyYywgZGVzdCk7CisgICAgICAg
ICAgICBtX2Fzc2VtYmxlci5jbXBsX2lyKDAsIGRlc3QsIGNvbmQpOworICAgICAgICAgICAgbV9h
c3NlbWJsZXIuZW5zdXJlU3BhY2UobV9hc3NlbWJsZXIubWF4SW5zdHJ1Y3Rpb25TaXplICsgOCwg
c2l6ZW9mKHVpbnQzMl90KSk7CisgICAgICAgICAgICBtX2p1bXAgPSAoY29uZCA9PSBOb3RFcXVh
bCkgPyBKdW1wKG1fYXNzZW1ibGVyLmpuZSgpKSA6IEp1bXAobV9hc3NlbWJsZXIuamUoKSk7Cisg
ICAgICAgIH0KKworICAgICAgICBtX2Fzc2VtYmxlci5Mb2FkQ29uc3RhbnRVbmNoZWNrZWRTaXpl
KDB4MCwgc2NyKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubm9wKCk7CisgICAgICAgIG1fYXNzZW1i
bGVyLm5vcCgpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworCisgICAgICAgIHJldHVy
biBtX2p1bXA7CisgICAgfQorICAgIAorICAgIHZvaWQgYnJhbmNoQ29udmVydERvdWJsZVRvSW50
MzIoRlBSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0LCBKdW1wTGlzdCYgZmFpbHVyZUNh
c2VzLCBGUFJlZ2lzdGVySUQgZnBUZW1wKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuZnRy
Y19kcm1fZnB1bChzcmMpOworICAgICAgICBtX2Fzc2VtYmxlci5zdHNfZnB1bF9ybihkZXN0KTsK
KworICAgICAgICAvLyBDb252ZXJ0IHRoZSBpbnRlZ2VyIHJlc3VsdCBiYWNrIHRvIGZsb2F0ICYg
Y29tcGFyZSB0byB0aGUgb3JpZ2luYWwgdmFsdWUgLSBpZiBub3QgZXF1YWwgb3IgdW5vcmRlcmVk
IChOYU4pIHRoZW4ganVtcC4KKyAgICAgICAgbV9hc3NlbWJsZXIubGRzcm1fZnB1bChkZXN0KTsK
KyAgICAgICAgbV9hc3NlbWJsZXIuZmxvYXRfZnB1bF9kcm4oZnNjcmF0Y2gpOworCisgICAgICAg
IGZhaWx1cmVDYXNlcy5hcHBlbmQoYnJhbmNoRG91YmxlKERvdWJsZU5vdEVxdWFsT3JVbm9yZGVy
ZWQsIHNyYywgZnNjcmF0Y2gpKTsKKyAgICAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChicmFuY2hU
ZXN0MzIoWmVybywgZGVzdCkpOworICAgIH0KKworICAgIHZvaWQgbmVnMzIoUmVnaXN0ZXJJRCBk
c3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5uZWcoZHN0LCBkc3QpOworICAgIH0KKwor
ICAgIHZvaWQgbm90MzIoUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxl
ci5ub3RsX3IoZHN0LCBkc3QpOworICAgIH0KKworICAgIHZvaWQgdXJzaGlmdDMyKFJlZ2lzdGVy
SUQgc2hpZnRhbW91bnQsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIC8qSW4gdGhl
IGNhc2Ugd2hlcmUgc2hpZnRhbW91bnQgaW5kaWNhdGVzIGEgbG9naWNhbCByaWdodCBzaGlmdCBi
eSAzMiwgdGhlIHJlc3VsdCBpcyAwKi8KKyAgICAgICAgbV9hc3NlbWJsZXIuY21wbF9pcigzMiwg
c2hpZnRhbW91bnQsIEVxdWFsKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuZW5zdXJlU3BhY2UobV9h
c3NlbWJsZXIubWF4SW5zdHJ1Y3Rpb25TaXplICsgNCk7CisgICAgICAgIG1fYXNzZW1ibGVyLmJy
YW5jaChCVF9PUENPREUsIDEpOworICAgICAgICBtX2Fzc2VtYmxlci5uZWcoc2hpZnRhbW91bnQs
IHNoaWZ0YW1vdW50KTsKKyAgICAgICAgbV9hc3NlbWJsZXIuc2hsbF9ycihkZXN0LCBzaGlmdGFt
b3VudCk7CisgICAgfQorCisgICAgdm9pZCB1cnNoaWZ0MzIoSW1tMzIgaW1tLCBSZWdpc3RlcklE
IGRlc3QpCisgICAgeworICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOwor
ICAgICAgICBtX2Fzc2VtYmxlci5Mb2FkQ29uc3RhbnQoLShpbW0ubV92YWx1ZSksIHNjcik7Cisg
ICAgICAgIG1fYXNzZW1ibGVyLnNoYV9ycihkZXN0LCBzY3IpOworICAgICAgICByZWxlYXNlU2Ny
YXRjaChzY3IpOworICAgIH0KKworICAgIENhbGwgY2FsbCgpCisgICAgeworICAgICAgICByZXR1
cm4gQ2FsbChtX2Fzc2VtYmxlci5jYWxsKCksIENhbGw6OkxpbmthYmxlKTsKKyAgICB9CisgICAg
CisgICAgQ2FsbCBuZWFyQ2FsbCgpCisgICAgeworICAgICAgICByZXR1cm4gQ2FsbChtX2Fzc2Vt
Ymxlci5jYWxsKCksIENhbGw6OkxpbmthYmxlTmVhcik7CisgICAgfQorCisgICAgQ2FsbCBjYWxs
KFJlZ2lzdGVySUQgdGFyZ2V0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIENhbGwobV9hc3NlbWJs
ZXIuY2FsbCh0YXJnZXQpLCBDYWxsOjpOb25lKTsKKyAgICB9CisKKyAgICB2b2lkIGJyZWFrcG9p
bnQoKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuYmtwdCgpOworICAgICAgICBtX2Fzc2Vt
Ymxlci5ub3AoKTsKKyAgICB9CisKKyAgICB2b2lkIHJldCgpCisgICAgeworICAgICAgICBtX2Fz
c2VtYmxlci5yZXQoKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubm9wKCk7CisgICAgfQorCisgICAg
SnVtcCBicmFuY2hQdHJXaXRoUGF0Y2goQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgbGVmdCwg
RGF0YUxhYmVsUHRyJiBkYXRhTGFiZWwsIEltbVB0ciBpbml0aWFsUmlnaHRWYWx1ZSA9IEltbVB0
cigwKSkKKyAgICB7CisgICAgICAgIFJlZ2lzdGVySUQgZGF0YVRlbXBSZWdpc3RlciA9IGNsYWlt
U2NyYXRjaCgpOworICAgICAgICBKdW1wIG1fanVtcDsKKyAgICAgICAgCisgICAgICAgIGRhdGFM
YWJlbCA9IG1vdmVXaXRoUGF0Y2goaW5pdGlhbFJpZ2h0VmFsdWUsIGRhdGFUZW1wUmVnaXN0ZXIp
OworICAgICAgICAKKyAgICAgICAgbV9hc3NlbWJsZXIuY21wbF9ycihkYXRhVGVtcFJlZ2lzdGVy
LCBsZWZ0LCBjb25kKTsKKworICAgICAgICBtX2p1bXAgPSAoY29uZCA9PSBOb3RFcXVhbCkgPyBK
dW1wKG1fYXNzZW1ibGVyLmpuZSgpKSA6IEp1bXAobV9hc3NlbWJsZXIuamUoKSk7CisgICAgICAg
IAorICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBtX2Fz
c2VtYmxlci5Mb2FkQ29uc3RhbnRVbmNoZWNrZWRTaXplKDB4MCwgc2NyKTsKKyAgICAgICAgbV9h
c3NlbWJsZXIubm9wKCk7CisgICAgICAgIG1fYXNzZW1ibGVyLm5vcCgpOworICAgICAgICByZWxl
YXNlU2NyYXRjaChzY3IpOworICAgICAgICByZWxlYXNlU2NyYXRjaChkYXRhVGVtcFJlZ2lzdGVy
KTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBtX2p1bXA7CisgICAgfQorCisgICAgSnVtcCBi
cmFuY2hQdHJXaXRoUGF0Y2goQ29uZGl0aW9uIGNvbmQsIEFkZHJlc3MgbGVmdCwgRGF0YUxhYmVs
UHRyJiBkYXRhTGFiZWwsIEltbVB0ciBpbml0aWFsUmlnaHRWYWx1ZSA9IEltbVB0cigwKSkKKyAg
ICB7CisgICAgICAgIEp1bXAgbV9qdW1wOworICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWlt
U2NyYXRjaCgpOworCisgICAgICAgIG1fYXNzZW1ibGVyLkxvYWRDb25zdGFudChsZWZ0Lm9mZnNl
dCwgc2NyLCBmYWxzZSk7CisgICAgICAgIG1fYXNzZW1ibGVyLmFkZGxfcnIobGVmdC5iYXNlLCBz
Y3IpOworICAgICAgICBtX2Fzc2VtYmxlci5tb3ZsX21yKHNjciwgc2NyKTsKKworICAgICAgICBS
ZWdpc3RlcklEIHNjcjEgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgZGF0YUxhYmVsID0gbW92
ZVdpdGhQYXRjaChpbml0aWFsUmlnaHRWYWx1ZSwgc2NyMSk7CisKKyAgICAgICAgbV9hc3NlbWJs
ZXIuY21wbF9ycihzY3IxLCBzY3IsIGNvbmQpOworICAgICAgICAgICAgICAgIAorICAgICAgICBt
X2p1bXAgPSAoY29uZCA9PSBOb3RFcXVhbCkgPyBKdW1wKG1fYXNzZW1ibGVyLmpuZSgpKSA6IEp1
bXAobV9hc3NlbWJsZXIuamUoKSk7CisKKyAgICAgICAgbV9hc3NlbWJsZXIuTG9hZENvbnN0YW50
VW5jaGVja2VkU2l6ZSgweDAsIHNjcik7CisgICAgICAgIG1fYXNzZW1ibGVyLm5vcCgpOworICAg
ICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKKyAgICAgICAgCisgICAgICAgIHJlbGVhc2VTY3JhdGNo
KHNjcik7CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcjEpOworICAgICAgICByZXR1cm4gbV9q
dW1wOworICAgIH0KKyAgICAKKyAgICBEYXRhTGFiZWxQdHIgc3RvcmVQdHJXaXRoUGF0Y2goSW1t
UHRyIGluaXRpYWxWYWx1ZSwgSW1wbGljaXRBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAg
ICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBEYXRhTGFiZWxQdHIg
bGFiZWwgPSBtb3ZlV2l0aFBhdGNoKGluaXRpYWxWYWx1ZSwgc2NyKTsKKyAgICAgICAgc3RvcmUz
MihzY3IsIGFkZHJlc3MpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgICAgICBy
ZXR1cm4gbGFiZWw7CisgICAgfQorCisgICAgRGF0YUxhYmVsUHRyIHN0b3JlUHRyV2l0aFBhdGNo
KEltcGxpY2l0QWRkcmVzcyBhZGRyZXNzKSB7IHJldHVybiBzdG9yZVB0cldpdGhQYXRjaChJbW1Q
dHIoMCksIGFkZHJlc3MpOyB9CisKKworICAgIENhbGwgdGFpbFJlY3Vyc2l2ZUNhbGwoKQorICAg
IHsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgbV9h
c3NlbWJsZXIuTG9hZENvbnN0YW50KDB4MCwgc2NyLCB0cnVlKTsKKworICAgICAgICBKdW1wIG1f
anVtcCA9IEp1bXAobV9hc3NlbWJsZXIuam1wKHNjcikpOworICAgICAgICByZWxlYXNlU2NyYXRj
aChzY3IpOworCisgICAgICAgIHJldHVybiBDYWxsOjpmcm9tVGFpbEp1bXAobV9qdW1wKTsKKyAg
ICB9CisKKyAgICBDYWxsIG1ha2VUYWlsUmVjdXJzaXZlQ2FsbChKdW1wIG9sZEp1bXApCisgICAg
eworICAgICAgICBvbGRKdW1wLmxpbmsodGhpcyk7CisgICAgICAgIHJldHVybiB0YWlsUmVjdXJz
aXZlQ2FsbCgpOworICAgIH0KKworICAgIGludCBzaXplT2ZDb25zdGFudFBvb2woKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIG1fYXNzZW1ibGVyLnNpemVPZkNvbnN0YW50UG9vbCgpOworICAgIH0K
KworICAgIHByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIExpbmtCdWZmZXI7CisgICAgZnJpZW5k
IGNsYXNzIFJlcGF0Y2hCdWZmZXI7CisKKyAgICBzdGF0aWMgdm9pZCBsaW5rQ2FsbCh2b2lkKiBj
b2RlLCBDYWxsIGNhbGwsIEZ1bmN0aW9uUHRyIGZ1bmN0aW9uKQorICAgIHsKKyAgICAgICAgU0g0
QXNzZW1ibGVyOjpsaW5rQ2FsbChjb2RlLCBjYWxsLm1fam1wLCBmdW5jdGlvbi52YWx1ZSgpKTsK
KyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCByZXBhdGNoQ2FsbChDb2RlTG9jYXRpb25DYWxsIGNh
bGwsIENvZGVMb2NhdGlvbkxhYmVsIGRlc3RpbmF0aW9uKQorICAgIHsKKyAgICAgICAgU0g0QXNz
ZW1ibGVyOjpyZWxpbmtDYWxsKGNhbGwuZGF0YUxvY2F0aW9uKCksIGRlc3RpbmF0aW9uLmV4ZWN1
dGFibGVBZGRyZXNzKCkpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIHJlcGF0Y2hDYWxsKENv
ZGVMb2NhdGlvbkNhbGwgY2FsbCwgRnVuY3Rpb25QdHIgZGVzdGluYXRpb24pCisgICAgeworICAg
ICAgICBTSDRBc3NlbWJsZXI6OnJlbGlua0NhbGwoY2FsbC5kYXRhTG9jYXRpb24oKSwgZGVzdGlu
YXRpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgfQorCit9OworCit9IC8vIG5hbWVzcGFj
ZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShBU1NFTUJMRVIpCisKKyNlbmRpZiAvLyBNYWNyb0Fz
c2VtYmxlclNINF9oCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvU0g0QXNz
ZW1ibGVyLmggYi9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvU0g0QXNzZW1ibGVyLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQwYTYxYwotLS0gL2Rldi9udWxsCisrKyBi
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9TSDRBc3NlbWJsZXIuaApAQCAtMCwwICsxLDE4NTQg
QEAKKworLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFNUTWljcm9lbGVjdHJvbmljcy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIFNINEFzc2VtYmxlcl9oCisjZGVmaW5lIFNINEFzc2VtYmxlcl9oCisK
KyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShBU1NFTUJMRVIpICYmIENQ
VShTSDQpCitpbmxpbmUgdWludDE2X3QgR0VUT1BDT0RFR1JPVVBFMSh1aW50MTZfdCBvcGMsIGlu
dCBybSwgaW50IHJuKQoreworICAgIHJldHVybiAoKG9wYykgfCAoKChybSkgJiAweGYpIDw8IDgp
IHwoKChybikgJiAweGYpIDw8IDQpKTsKK30KKworaW5saW5lIHVpbnQxNl90IEdFVE9QQ09ERUdS
T1VQRTIodWludDE2X3Qgb3BjLCBpbnQgcm0pCit7CisgICAgcmV0dXJuICgob3BjKSB8ICgoKHJt
KSAmIDB4ZikgPDwgOCkpOworfQorCitpbmxpbmUgdWludDE2X3QgR0VUT1BDT0RFR1JPVVBFMyh1
aW50MTZfdCBvcGMsIGludCBybSwgaW50IHJuKQoreworICAgIHJldHVybiAoKG9wYykgfCAoKChy
bSkgJiAweGYpIDw8IDgpIHwoKHJuKSAmIDB4ZmYpKTsKK30KKworaW5saW5lIHVpbnQxNl90IEdF
VE9QQ09ERUdST1VQRTQodWludDE2X3Qgb3BjLCBpbnQgcm0sIGludCBybiwgaW50IG9mZnNldCkK
K3sKKyAgICByZXR1cm4gICAoKG9wYykgfCAoKChybSkgJiAweGYpIDw8IDgpIHwoKChybikgJiAw
eGYpIDw8NCkgfCgob2Zmc2V0KSAmIDB4ZikpOworfQorCitpbmxpbmUgdWludDE2X3QgR0VUT1BD
T0RFR1JPVVBFNSh1aW50MTZfdCBvcGMsIGludCBybSkKK3sKKyAgICByZXR1cm4gICAoKG9wYykg
fCAoKHJtKSAmIDB4ZmYpKTsKK30KKworaW5saW5lIHVpbnQxNl90IEdFVE9QQ09ERUdST1VQRTYo
dWludDE2X3Qgb3BjLCBpbnQgcm0pCit7CisgICAgcmV0dXJuICAgKChvcGMpIHwgKChybSkgJiAw
eGZmZikpOworfQorCitpbmxpbmUgdWludDE2X3QgR0VUT1BDT0RFR1JPVVBFNyh1aW50MTZfdCBv
cGMsIGludCBybSkKK3sKKyAgICByZXR1cm4gICAoKG9wYykgfCAoKChybSkgJiAweDcpIDw8IDkp
KTsKK30KKworaW5saW5lIHVpbnQxNl90IEdFVE9QQ09ERUdST1VQRTgodWludDE2X3Qgb3BjLCBp
bnQgcm0sIGludCBybikKK3sKKyAgICByZXR1cm4gICAoKG9wYykgfCAoKChybSkgJiAweDcpIDw8
IDkpIHwoKChybikgJiAweDcpIDw8NSkpOworfQorCitpbmxpbmUgdWludDE2X3QgR0VUT1BDT0RF
R1JPVVBFOSh1aW50MTZfdCBvcGMsIGludCBybSwgaW50IHJuKQoreworICAgIHJldHVybiAgICgo
b3BjKSB8ICgoKHJtKSAmIDB4ZikgPDwgOCkgfCgoKHJuKSAmIDB4NykgPDw1KSk7Cit9CisKK2lu
bGluZSB1aW50MTZfdCBHRVRPUENPREVHUk9VUEUxMCh1aW50MTZfdCBvcGMsIGludCBybSwgaW50
IHJuKQoreworICAgIHJldHVybiAgICgob3BjKSB8ICgoKHJtKSAmIDB4NykgPDwgOSkgfCgoKHJu
KSAmIDB4RikgPDw0KSk7Cit9CisKK2lubGluZSB1aW50MTZfdCBHRVRPUENPREVHUk9VUEUxMSh1
aW50MTZfdCBvcGMsIGludCBybSwgaW50IHJuKQoreworICAgIHJldHVybiAgICgob3BjKSB8ICgo
KHJtKSAmIDB4ZikgPDwgNCkgfCgoKHJuKSAmIDB4ZikpKTsKK30KKworI2RlZmluZSBTRUNPTkRf
NF9CSVRTKHgpICAgICgoKHgpICYgMHhmMDApID4+IDgpCisjZGVmaW5lIFRISVJEXzRfQklUUyh4
KSAgICAgKCgoeCkgJiAweGYwKSA+PiA0KQorI2RlZmluZSBGT1VSVEhfNF9CSVRTKHgpICAgICgo
eCkgJiAweGYpCisjZGVmaW5lIFNFQ09ORF84X0JJVFMoeCkgICAgKCh4KSAmIDB4ZmYpCisjZGVm
aW5lIFJJR0hUXzEyX0JJVFMoeCkgICAgKCh4KSAmIDB4ZmZmKQorI2RlZmluZSBTRUNPTkRfRF8z
X0JJVFMoeCkgICAgKCgoeCkgJiAweEUwMCkgPj4gOSkKKyNkZWZpbmUgVEhJUkRfRF8zX0JJVFMo
eCkgICAgICgoKHgpICYgMHhFMCkgPj4gNSkKKworCisjZGVmaW5lIE1BU0s0ICAgICAoKDB4ZiA8
PCAxMikgfCAweGYpCisjZGVmaW5lIE1BU0szICAgICAoKDB4ZiA8PCAxMikgfCAweGZmKQorI2Rl
ZmluZSBNQVNLMiAgICAgKDB4ZmYgPDwgOCkKKyNkZWZpbmUgTUFTSzEgICAgICgweGYgPDwgMTIp
CisKKyNpbmNsdWRlICJBc3NlbWJsZXJCdWZmZXIuaCIKKyNpbmNsdWRlICJTSDRBc3NlbWJsZXJC
dWZmZXJXaXRoQ29uc3RhbnRQb29sLmgiCisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8
d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBK
U0MgewordHlwZWRlZiB1aW50MTZfdCBTSDRXb3JkOworCitlbnVtIHsKKyAgICAgICAgSU5WQUxJ
RF9PUENPREUgPSAweGZmZmYsCisgICAgICAgIEFERF9PUENPREUgPSAweDMwMEMsCisgICAgICAg
IEFERElNTV9PUENPREUgPSAweDcwMDAsCisgICAgICAgIEFERENfT1BDT0RFID0gMHgzMDBFLAor
ICAgICAgICBBRERWX09QQ09ERSA9IDB4MzAwRiwKKyAgICAgICAgQU5EX09QQ09ERSA9IDB4MjAw
OSwKKyAgICAgICAgQU5ESU1NX09QQ09ERSA9IDB4QzkwMCwKKyAgICAgICAgRElWMF9PUENPREUg
PSAweDIwMDcsCisgICAgICAgIERJVjFfT1BDT0RFID0gMHgzMDA0LAorICAgICAgICBCRl9PUENP
REUgPSAweDhCMDAsCisgICAgICAgIEJGU19PUENPREUgPSAweDhGMDAsCisgICAgICAgIEJSQV9P
UENPREUgPSAwWEEwMDAsCisgICAgICAgIEJSQUZfT1BDT0RFID0gMHgwMDIzLAorICAgICAgICBO
T1BfT1BDT0RFID0gMHgwMDA5LAorICAgICAgICBCU1JfT1BDT0RFID0gMHhCMDAwLAorICAgICAg
ICBSVFNfT1BDT0RFID0gMHgwMDBCLAorICAgICAgICBCVF9PUENPREUgPSAweDg5MDAsCisgICAg
ICAgIEJUU19PUENPREUgPSAweDhEMDAsCisgICAgICAgIEJTUkZfT1BDT0RFID0gMHgwMDAzLAor
ICAgICAgICBCUktfT1BDT0RFID0gMHgwMDNCLAorICAgICAgICBGVFJDX09QQ09ERSA9IDB4RjAz
RCwKKyAgICAgICAgQ01QRVFfT1BDT0RFID0gMHgzMDAwLAorICAgICAgICBDTVBFUUlNTV9PUENP
REUgPSAweDg4MDAsCisgICAgICAgIENNUEdFX09QQ09ERSA9IDB4MzAwMywKKyAgICAgICAgQ01Q
R1RfT1BDT0RFID0gMHgzMDA3LAorICAgICAgICBDTVBISV9PUENPREUgPSAweDMwMDYsCisgICAg
ICAgIENNUEhTX09QQ09ERSA9IDB4MzAwMiwKKyAgICAgICAgQ01QUExfT1BDT0RFID0gMHg0MDE1
LAorICAgICAgICBDTVBQWl9PUENPREUgPSAweDQwMTEsCisgICAgICAgIENNUFNUUl9PUENPREUg
PSAweDIwMEMsCisgICAgICAgIERUX09QQ09ERSA9IDB4NDAxMCwKKyAgICAgICAgRkNNUEVRX09Q
Q09ERSA9IDB4RjAwNCwKKyAgICAgICAgRkNNUEdUX09QQ09ERSA9IDB4RjAwNSwKKyAgICAgICAg
Rk1PVl9PUENPREUgPSAweEYwMEMsCisgICAgICAgIERNT1ZfT1BDT0RFID0gMHgxRTAxOSwKKyAg
ICAgICAgRE1PVl9XUklURV9SMFJOX09QQ09ERSA9IDB4MUUwMEYsCisgICAgICAgIERNT1ZfUkVB
RF9SMFJOX09QQ09ERSA9IDB4MUUwMEQsCisgICAgICAgIEZBRERfT1BDT0RFID0gMHhGMDAwLAor
ICAgICAgICBGTVVMX09QQ09ERSA9IDB4RjAwMiwKKyAgICAgICAgRlNVQl9PUENPREUgPSAweEYw
MDEsCisgICAgICAgIEZESVZfT1BDT0RFID0gMHhGMDAzLAorICAgICAgICBGTkVHX09QQ09ERSA9
IDB4RjA0RCwKKyAgICAgICAgSk1QX09QQ09ERSA9IDB4NDAyQiwKKyAgICAgICAgSlNSX09QQ09E
RSA9IDB4NDAwQiwKKyAgICAgICAgTERTUFJfT1BDT0RFID0gMHg0MDJBLAorICAgICAgICBMRFNM
UFJfT1BDT0RFID0gMHg0MDI2LAorICAgICAgICBNT1ZfT1BDT0RFID0gMHg2MDAzLAorICAgICAg
ICBNT1ZJTU1fT1BDT0RFID0gMHhFMDAwLAorICAgICAgICBNT1ZCX1dSSVRFX1JOX09QQ09ERSA9
IDB4MjAwMCwKKyAgICAgICAgTU9WQl9XUklURV9STkRFQ19PUENPREUgPSAweDIwMDQsCisgICAg
ICAgIE1PVkJfV1JJVEVfUjBSTl9PUENPREUgPSAweDAwMDQsCisgICAgICAgIE1PVkJfV1JJVEVf
T0ZGR0JSX09QQ09ERSA9IDB4QzAwMCwKKyAgICAgICAgTU9WQl9XUklURV9PRkZSTl9PUENPREUg
PSAweDgwMDAsCisgICAgICAgIE1PVkJfUkVBRF9STV9PUENPREUgPSAweDYwMDAsCisgICAgICAg
IE1PVkJfUkVBRF9STUlOQ19PUENPREUgPSAweDYwMDQsCisgICAgICAgIE1PVkJfUkVBRF9SMFJN
X09QQ09ERSA9IDB4MDAwQywKKyAgICAgICAgTU9WQl9SRUFEX09GRkdCUl9PUENPREUgPSAweEM0
MDAsCisgICAgICAgIE1PVkJfUkVBRF9PRkZSTV9PUENPREUgPSAweDg0MDAsCisgICAgICAgIE1P
VkxfV1JJVEVfUk5fT1BDT0RFID0gMHgyMDAyLAorICAgICAgICBNT1ZMX1dSSVRFX1JOREVDX09Q
Q09ERSA9IDB4MjAwNiwKKyAgICAgICAgTU9WTF9XUklURV9SMFJOX09QQ09ERSA9IDB4MDAwNiwK
KyAgICAgICAgTU9WTF9XUklURV9PRkZHQlJfT1BDT0RFID0gMHhDMjAwLAorICAgICAgICBNT1ZM
X1dSSVRFX09GRlJOX09QQ09ERSA9IDB4MTAwMCwKKyAgICAgICAgTU9WTF9SRUFEX1JNX09QQ09E
RSA9IDB4NjAwMiwKKyAgICAgICAgTU9WTF9SRUFEX1JNSU5DX09QQ09ERSA9IDB4NjAwNiwKKyAg
ICAgICAgTU9WTF9SRUFEX1IwUk1fT1BDT0RFID0gMHgwMDBFLAorICAgICAgICBNT1ZMX1JFQURf
T0ZGR0JSX09QQ09ERSA9IDB4QzYwMCwKKyAgICAgICAgTU9WTF9SRUFEX09GRlBDX09QQ09ERSA9
IDB4RDAwMCwKKyAgICAgICAgTU9WTF9SRUFEX09GRlJNX09QQ09ERSA9IDB4NTAwMCwKKyAgICAg
ICAgTU9WV19XUklURV9STl9PUENPREUgPSAweDIwMDEsCisgICAgICAgIE1PVldfUkVBRF9STV9P
UENPREUgPSAweDYwMDEsCisgICAgICAgIE1PVldfUkVBRF9SMFJNX09QQ09ERSA9IDB4MDAwRCwK
KyAgICAgICAgTU9WV19SRUFEX09GRlBDX09QQ09ERSA9IDB4OTAwMCwKKyAgICAgICAgTU9WQV9S
RUFEX09GRlBDX09QQ09ERSA9IDB4QzcwMCwKKyAgICAgICAgTU9WVF9PUENPREUgPSAweDAwMjks
CisgICAgICAgIE1VTExfT1BDT0RFID0gMHgwMDA3LAorICAgICAgICBETVVMTF9MX09QQ09ERSA9
IDB4MzAwNSwKKyAgICAgICAgU1RTTUFDTF9PUENPREUgPSAweDAwMUEsCisgICAgICAgIFNUU01B
Q0hfT1BDT0RFID0gMHgwMDBBLAorICAgICAgICBETVVMU0xfT1BDT0RFID0gMHgzMDBELAorICAg
ICAgICBORUdfT1BDT0RFID0gMHg2MDBCLAorICAgICAgICBORUdDX09QQ09ERSA9IDB4NjAwQSwK
KyAgICAgICAgTk9UX09QQ09ERSA9IDB4NjAwNywKKyAgICAgICAgT1JfT1BDT0RFID0gIDB4MjAw
QiwKKyAgICAgICAgT1JJTU1fT1BDT0RFID0gMHhDQjAwLAorICAgICAgICBPUkJJTU1fT1BDT0RF
ID0gMHhDRjAwLAorICAgICAgICBTRVRTX09QQ09ERSA9IDB4MDA1OCwKKyAgICAgICAgU0VUVF9P
UENPREUgPSAweDAwMTgsCisgICAgICAgIFNIQURfT1BDT0RFID0gMHg0MDBDLAorICAgICAgICBT
SEFMX09QQ09ERSA9IDB4NDAyMCwKKyAgICAgICAgU0hBUl9PUENPREUgPSAweDQwMjEsCisgICAg
ICAgIFNITERfT1BDT0RFID0gMHg0MDBELAorICAgICAgICBTSExMX09QQ09ERSA9IDB4NDAwMCwK
KyAgICAgICAgU0hMTDJfT1BDT0RFID0gMHg0MDA4LAorICAgICAgICBTSExMOF9PUENPREUgPSAw
eDQwMTgsCisgICAgICAgIFNITEwxNl9PUENPREUgPSAweDQwMjgsCisgICAgICAgIFNITFJfT1BD
T0RFID0gMHg0MDAxLAorICAgICAgICBTSExSMl9PUENPREUgPSAweDQwMDksCisgICAgICAgIFNI
TFI4X09QQ09ERSA9IDB4NDAxOSwKKyAgICAgICAgU0hMUjE2X09QQ09ERSA9IDB4NDAyOSwKKyAg
ICAgICAgU1RTUFJfT1BDT0RFID0gMHgwMDJBLAorICAgICAgICBTVFNMUFJfT1BDT0RFID0gMHg0
MDIyLAorICAgICAgICBGTE9BVF9PUENPREUgPSAweEYwMkQsCisgICAgICAgIFNVQl9PUENPREUg
PSAweDMwMDgsCisgICAgICAgIFNVQkNfT1BDT0RFID0gMHgzMDBBLAorICAgICAgICBTVUJWX09Q
Q09ERSA9IDB4MzAwQiwKKyAgICAgICAgVFNUX09QQ09ERSA9IDB4MjAwOCwKKyAgICAgICAgVFNU
SU1NX09QQ09ERSA9IDB4QzgwMCwKKyAgICAgICAgVFNUQl9PUENPREUgPSAweENDMDAsCisgICAg
ICAgIEVYVFVXX09QQ09ERSA9IDB4NjAwRCwKKyAgICAgICAgWE9SX09QQ09ERSA9IDB4MjAwQSwK
KyAgICAgICAgWE9SSU1NX09QQ09ERSA9IDB4Q0EwMCwKKyAgICAgICAgWE9SQl9PUENPREUgPSAw
eENFMDAsCisgICAgICAgIEZNT1ZTX1JFQURfUk1fSU5DX09QQ09ERSA9IDB4RjAwOSwKKyAgICAg
ICAgRk1PVlNfUkVBRF9STV9PUENPREUgPSAweEYwMDgsCisgICAgICAgIEZNT1ZTX1JFQURfUjBS
TV9PUENPREUgPSAweEYwMDYsCisgICAgICAgIEZNT1ZTX1dSSVRFX1JOX09QQ09ERSA9IDB4RjAw
QSwKKyAgICAgICAgRk1PVlNfV1JJVEVfUk5fREVDX09QQ09ERSA9IDB4RjAwQiwKKyAgICAgICAg
Rk1PVlNfV1JJVEVfUjBSTl9PUENPREUgPSAweEYwMDcsCisgICAgICAgIExEU19STV9GUFVMX09Q
Q09ERSA9IDB4NDA1QSwKKyAgICAgICAgRkxEU19GUk1fRlBVTF9PUENPREUgPSAweEYwMUQsCisg
ICAgICAgIFNUU19GUFVMX1JOX09QQ09ERSA9IDB4MDA1QSwKKyAgICAgICAgRlNUU19GUFVMX0ZS
Tl9PUENPREUgPSAweEYwMEQsCisgICAgICAgIExEU0ZQU0NSX09QQ09ERSA9IDB4NDA2QSwKKyAg
ICAgICAgU1RTRlBTQ1JfT1BDT0RFID0gMHgwMDZBLAorICAgICAgICBMRFNSTUZQVUxfT1BDT0RF
ID0gMHg0MDVBLAorICAgICAgICBGU1RTRlBVTEZSTl9PUENPREUgPSAweEYwMEQsCisgICAgICAg
IEZTUVJUX09QQ09ERSA9IDB4RjA2RCwKKyAgICAgICAgQ0xSVF9PUENPREUgPSA4LAorICAgIH07
CisKK25hbWVzcGFjZSBTSDQgeworCit0eXBlZGVmIGVudW0geworICAgICAgICBSMCwKKyAgICAg
ICAgUjEsCisgICAgICAgIFIyLAorICAgICAgICBSMywKKyAgICAgICAgUjQsCisgICAgICAgIFI1
LAorICAgICAgICBSNiwKKyAgICAgICAgUjcsCisgICAgICAgIFI4LAorICAgICAgICBSOSwKKyAg
ICAgICAgUjEwLAorICAgICAgICBSMTEsCisgICAgICAgIFIxMiwKKyAgICAgICAgUjEzLAorICAg
ICAgICBSMTQsIEZQICA9IFIxNCwKKyAgICAgICAgUjE1LCBTUCAgPSBSMTUsCisgICAgICAgIFBD
LAorICAgICAgICBQUiwKK30gUmVnaXN0ZXJJRDsKKyAgICAKK3R5cGVkZWYgZW51bSB7CisgICAg
ICAgIEZSMCwgRFIwICA9IEZSMCwKKyAgICAgICAgRlIxLAorICAgICAgICBGUjIsIERSMiAgPSBG
UjIsCisgICAgICAgIEZSMywKKyAgICAgICAgRlI0LCBEUjQgID0gRlI0LAorICAgICAgICBGUjUs
CisgICAgICAgIEZSNiwgRFI2ICA9IEZSNiwKKyAgICAgICAgRlI3LAorICAgICAgICBGUjgsIERS
OCAgPSBGUjgsCisgICAgICAgIEZSOSwKKyAgICAgICAgRlIxMCwgRFIxMCA9IEZSMTAsCisgICAg
ICAgIEZSMTEsCisgICAgICAgIEZSMTIsIERSMTIgPSBGUjEyLAorICAgICAgICBGUjEzLAorICAg
ICAgICBGUjE0LCBEUjE0ID0gRlIxNCwKKyAgICAgICAgRlIxNSwKK30gRlBSZWdpc3RlcklEOwor
fQorCitjbGFzcyBTSDRBc3NlbWJsZXIgeworcHVibGljOgorICAgIHR5cGVkZWYgU0g0OjpSZWdp
c3RlcklEIFJlZ2lzdGVySUQ7CisgICAgdHlwZWRlZiBTSDQ6OkZQUmVnaXN0ZXJJRCBGUFJlZ2lz
dGVySUQ7CisgICAgCisgICAgdHlwZWRlZiBTSDRBc3NlbWJsZXJCdWZmZXJXaXRoQ29uc3RhbnRQ
b29sPDUxMiwgNCwgMTYsIFNINEFzc2VtYmxlcj4gU0g0QnVmZmVyOworICAgIAorICAgIHN0YXRp
YyBjb25zdCBSZWdpc3RlcklEIHNjcmF0Y2ggPSBTSDQ6OlIzOworICAgIHN0YXRpYyBjb25zdCBS
ZWdpc3RlcklEIHNjcmF0Y2gxID0gU0g0OjpSMTE7CisgICAgaW50IGNsYWltc2NyYXRjaFJlZzsK
KyAgICBzdGF0aWMgY29uc3QgaW50IG1heEluc3RydWN0aW9uU2l6ZSA9IDE2OworCisgICAgZW51
bSB7CisgICAgICAgIHBhZEZvckFsaWduOCAgPSAweDAwLAorICAgICAgICBwYWRGb3JBbGlnbjE2
ID0gMHgwMDA5LAorICAgICAgICBwYWRGb3JBbGlnbjMyID0gMHgwMDA5MDAwOSwKKyAgICB9Owor
ICAgICAgIAorICAgIFNINEFzc2VtYmxlcigpCisgICAgeworICAgICAgICBjbGFpbXNjcmF0Y2hS
ZWcgPSAweDA7CisgICAgfSAgCisgICAgCisgICAgLyogU0g0IGNvbmRpdGlvbiBjb2RlcyAqLwor
ICAgICAgICB0eXBlZGVmIGVudW0geworICAgICAgICAgICAgRVEgPSAweDAsIC8vIEVxdWFsCisg
ICAgICAgICAgICBORSA9IDB4MSwgLy8gTm90IEVxdWFsCisgICAgICAgICAgICBIUyA9IDB4Miwg
Ly8gVW5zaWdlbmQgR3JlYXRlciBUaGFuIGVxdWFsCisgICAgICAgICAgICBISSA9IDB4MywgLy8g
VW5zaWdlbmQgR3JlYXRlciBUaGFuCisgICAgICAgICAgICBMUyA9IDB4NCwgLy8gVW5zaWdlbmQg
TG93ZXIgb3IgU2FtZQorICAgICAgICAgICAgTEkgPSAweDUsIC8vIFVuc2lnZW5kIExvd2VyCisg
ICAgICAgICAgICBHRSA9IDB4NiwgLy8gR3JlYXRlciBvciBFcXVhbAorICAgICAgICAgICAgTFQg
PSAweDcsIC8vIExlc3MgVGhhbgorICAgICAgICAgICAgR1QgPSAweDgsIC8vIEdyZWF0ZXIgVGhh
bgorICAgICAgICAgICAgTEUgPSAweDksIC8vIExlc3Mgb3IgRXF1YWwKKyAgICAgICAgICAgIE9G
ID0gMHhhLCAvLyBPdmVyRmxvdworICAgICAgICAgICAgU0kgPSAweGIsIC8vIFNpZ25lZAorICAg
ICAgICAgICAgRVFVPSAweGMsIC8vIEVxdWFsIG9yIHVub3JkZXJlZChOYU4pCisgICAgICAgICAg
ICBORVU9IDB4ZCwKKyAgICAgICAgICAgIEdUVT0gMHhlLAorICAgICAgICAgICAgR0VVPSAweGYs
CisgICAgICAgICAgICBMVFU9IDB4MTAsCisgICAgICAgICAgICBMRVU9IDB4MTEsCisgICAgICAg
IH0gQ29uZGl0aW9uOworICAgICAgICAKKyAgICAvLyBPcGFxdWUgbGFiZWwgdHlwZXMKKyAgICAK
K3B1YmxpYzoKKworICAgIGNsYXNzIEptcFNyYyB7CisgICAgICAgIGZyaWVuZCBjbGFzcyBTSDRB
c3NlbWJsZXI7CisgICAgcHVibGljOgorICAgICAgICBKbXBTcmMoKQorICAgICAgICAgICAgOiBt
X29mZnNldCgtMSkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAg
ICBKbXBTcmMoaW50IG9mZnNldCkKKyAgICAgICAgICAgIDogbV9vZmZzZXQob2Zmc2V0KQorICAg
ICAgICB7CisgICAgICAgIH0KKworICAgICAgICBpbnQgbV9vZmZzZXQ7CisgICAgfTsKKyAgICAK
KyAgICBjbGFzcyBKbXBEc3QgeworICAgICAgICBmcmllbmQgY2xhc3MgU0g0QXNzZW1ibGVyOwor
ICAgIHB1YmxpYzoKKyAgICAgICAgSm1wRHN0KCkKKyAgICAgICAgICAgIDogbV9vZmZzZXQoLTEp
CisgICAgICAgICAgICAsIG1fdXNlZChmYWxzZSkKKyAgICAgICAgeworICAgICAgICB9CisKKyAg
ICAgICAgYm9vbCBpc1VzZWQoKSBjb25zdCB7IHJldHVybiBtX3VzZWQ7IH0KKyAgICAgICAgYm9v
bCBpc1NldCgpIGNvbnN0IHsgcmV0dXJuIChtX29mZnNldCAhPSAtMSk7IH0KKyAgICAgICAgdm9p
ZCB1c2VkKCkgeyBtX3VzZWQgPSB0cnVlOyB9CisKKworICAgIHByaXZhdGU6CisgICAgICAgIEpt
cERzdChpbnQgb2Zmc2V0KQorICAgICAgICAgICAgOiBtX29mZnNldChvZmZzZXQpCisgICAgICAg
ICAgICAsIG1fdXNlZChmYWxzZSkKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKG1fb2Zm
c2V0ID09IG9mZnNldCk7CisgICAgICAgIH0KKworICAgICAgICBpbnQgbV9vZmZzZXQgOiAzMTsK
KyAgICAgICAgaW50IG1fdXNlZCA6IDE7CisgICAgfTsKKworICAgIGJvb2wgSXNJbW1lZGlhdGUo
aW50IGNvbnN0YW50KSAKKyAgICB7ICAgICAgICAKKyAgICAgICAgaWYgKChjb25zdGFudCA8PSAx
MjcpICYmIChjb25zdGFudCA+PSAtMTI4KSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
IAorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisKKyAgICBSZWdpc3RlcklEIGNsYWlt
U2NyYXRjaCgpCisgICAgeworICAgICAgICAgLyogMTAxID0+IHNjcmF0Y2gxIHJlbGVhc2VkICov
CisgICAgICAgICBBU1NFUlQoKGNsYWltc2NyYXRjaFJlZyAhPSAweDMpKTsKKyAgICAgICAgIFJl
Z2lzdGVySUQgc2NyYXRjaFJlZyA9IHNjcmF0Y2g7CisKKyAgICAgICAgIGlmICghKGNsYWltc2Ny
YXRjaFJlZyAmIDB4MSkpCisgICAgICAgICAgICAgY2xhaW1zY3JhdGNoUmVnID0gKGNsYWltc2Ny
YXRjaFJlZyB8IDB4MSk7CisgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICBjbGFpbXNjcmF0
Y2hSZWcgPSAoY2xhaW1zY3JhdGNoUmVnIHwgMHgyKTsKKyAgICAgICAgICAgICBzY3JhdGNoUmVn
ID0gc2NyYXRjaDE7CisgICAgICAgICB9CisgICAgICAgICByZXR1cm4gc2NyYXRjaFJlZzsKKyAg
ICAgfQorCisgICAgIHZvaWQgcmVsZWFzZVNjcmF0Y2goUmVnaXN0ZXJJRCBzY3JhdGNoUikgCisg
ICAgIHsgICAKKyAgICAgICAgIGlmIChzY3JhdGNoUiA9PSAgc2NyYXRjaCkKKyAgICAgICAgICAg
ICBjbGFpbXNjcmF0Y2hSZWcgPSAoY2xhaW1zY3JhdGNoUmVnICYgMHgyKTsKKyAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICBjbGFpbXNjcmF0Y2hSZWcgPSAoY2xhaW1zY3JhdGNoUmVnICYgMHgx
KTsKKyAgICAgfSAKKworICAgIC8vIFN0YWNrIG9wZXJhdGlvbnM6CisKKyAgICB2b2lkIHB1c2hf
cihSZWdpc3RlcklEIHJlZykKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYzsKKyAgICAgICAg
CisgICAgICAgIGlmIChyZWcgPT0gU0g0OjpQUikKKyAgICAgICAgICAgIG9wYyA9IEdFVE9QQ09E
RUdST1VQRTIoU1RTTFBSX09QQ09ERSwgU0g0OjpTUCk7ICAgLyogU1RTLkwgUFIsIEAtUiVkICov
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG9wYyA9IEdFVE9QQ09ERUdST1VQRTEoTU9WTF9X
UklURV9STkRFQ19PUENPREUsIFNINDo6U1AsIHJlZyk7IC8qIG1vdi5sIHJlZywgQC1TUCAqLwor
CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lkIHBvcF9yKFJlZ2lz
dGVySUQgcmVnKQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjOworICAgICAgICAKKyAgICAg
ICAgaWYgKHJlZyA9PSBTSDQ6OlBSKQorICAgICAgICAgICAgb3BjID0gR0VUT1BDT0RFR1JPVVBF
MihMRFNMUFJfT1BDT0RFLCBTSDQ6OlNQKTsgIC8qIExEUy5MIEBSJWQrLCBQUiovCisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIG9wYyA9IEdFVE9QQ09ERUdST1VQRTEoTU9WTF9SRUFEX1JNSU5D
X09QQ09ERSwgcmVnLCBTSDQ6OlNQKTsgLyogbW92LmwgQCtzcmMsIGRlc3Q7Ki8KKyAgICAgICAg
CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lkIHB1c2hfaTMyKGlu
dCBpbW0pCisgICAgeworICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOwor
ICAgICAgICBMb2FkQ29uc3RhbnQoaW1tLCBzY3IpOworICAgICAgICBwdXNoX3Ioc2NyKTsKKyAg
ICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICB9CisKKyAgICB2b2lkIHB1c2hfbShpbnQg
b2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UpCisgICAgeworICAgICAgICBpZiAoKG9mZnNldCA8IDAp
IHx8IChvZmZzZXQgPj0gNjQpKSB7CisgICAgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1T
Y3JhdGNoKCk7IAorICAgICAgICAgICAgCisgICAgICAgICAgICBMb2FkQ29uc3RhbnQob2Zmc2V0
LCBzY3IpOworICAgICAgICAgICAgYWRkbF9ycihiYXNlLCBzY3IpOworICAgICAgICAgICAgbW92
bF9tcihzY3IsIFNINDo6U1ApOworICAgICAgICAgICAgCisgICAgICAgICAgICByZWxlYXNlU2Ny
YXRjaChzY3IpOworICAgICAgICB9IGVsc2UgaWYgKG9mZnNldCkKKyAgICAgICAgICAgIG1vdmxf
bXIob2Zmc2V0ID4+IDIsIGJhc2UsIFNINDo6U1ApOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBtb3ZsX21yKGJhc2UsIFNINDo6U1ApOworICAgICAgICAKKyAgICAgICAgYWRkbF9pOHIoLTQs
IFNINDo6U1ApOyAgICAgICAgCisgICAgfQorCisgICAgdm9pZCBwb3BfbShpbnQgb2Zmc2V0LCBS
ZWdpc3RlcklEIGJhc2UpCisgICAgeyAgICAgICAgIAorICAgICAgICBpZiAoKG9mZnNldCA8IDAp
IHx8IChvZmZzZXQgPj0gNjQpKSB7CisgICAgICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWlt
U2NyYXRjaCgpOworICAgICAgICAgICAgTG9hZENvbnN0YW50KG9mZnNldCwgc2NyKTsKKyAgICAg
ICAgICAgIGFkZGxfcnIoYmFzZSwgc2NyKTsKKyAgICAgICAgICAgIG1vdmxfcm0oU0g0OjpTUCwg
c2NyKTsKKyAgICAgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgICAgIH0gZWxzZSBp
ZiAob2Zmc2V0KQorICAgICAgICAgICAgbW92bF9ybShTSDQ6OlNQLCBvZmZzZXQgPj4gMiwgYmFz
ZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1vdmxfcm0oU0g0OjpTUCwgYmFzZSk7Cisg
ICAgICAgIAorICAgICAgICBhZGRsX2k4cig0LCBTSDQ6OlNQKTsKKyAgICB9CisgICAgCisgICAg
dm9pZCBtb3Z0KFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0g
R0VUT1BDT0RFR1JPVVBFMihNT1ZUX09QQ09ERSwgZHN0KTsKKyAgICAgICAgb25lU2hvcnRPcChv
cGMpOworICAgIH0KKworICAgIC8vIEFyaXRobWV0aWMgb3BlcmF0aW9uczoKKworICAgIHZvaWQg
YWRkbF9ycihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICB1
aW50MTZfdCBvcGMgPSBHRVRPUENPREVHUk9VUEUxKEFERF9PUENPREUsIGRzdCwgc3JjKTsKKyAg
ICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAgIHZvaWQgYWRkY2xfcnIoUmVnaXN0
ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KSAvLyBUYml0IHNldCBpZiBvdmVyZmxvdworICAgIHsK
KyAgICAgICAgdWludDE2X3Qgb3BjID0gR0VUT1BDT0RFR1JPVVBFMShBRERDX09QQ09ERSwgZHN0
LCBzcmMpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCBhZGR2
bF9ycihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpIC8vIFRiaXQgc2V0IGlmIG92ZXJm
bG93CisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBHRVRPUENPREVHUk9VUEUxKEFERFZf
T1BDT0RFLCBkc3QsIHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9ICAgICAK
KworICAgIHZvaWQgYWRkbF9pOHIoaW50IGltbTgsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAg
ICAgICAgQVNTRVJUKChpbW04IDw9IDEyNykgJiYgKGltbTggPj0gLTEyOCkpOworICAgICAgICAK
KyAgICAgICAgdWludDE2X3Qgb3BjID0gR0VUT1BDT0RFR1JPVVBFMyhBRERJTU1fT1BDT0RFLCBk
c3QsIGltbTgpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCBh
bmRsX3JyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIHVp
bnQxNl90IG9wYyA9IEdFVE9QQ09ERUdST1VQRTEoQU5EX09QQ09ERSwgZHN0LCBzcmMpOworICAg
ICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCBhZGRsX2lyKGludCBpbW0s
IFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgaWYgKElzSW1tZWRpYXRlKGltbSkpCisg
ICAgICAgICAgICBhZGRsX2k4cihpbW0sIGRzdCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgICAgIExvYWRDb25z
dGFudChpbW0sIHNjcik7CisgICAgICAgICAgICB1aW50MTZfdCBvcGMgPSBHRVRPUENPREVHUk9V
UEUxKEFERF9PUENPREUsIGRzdCwgc2NyKTsKKyAgICAgICAgICAgIG9uZVNob3J0T3Aob3BjKTsK
KyAgICAgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7ICAKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIHZvaWQgYW5kbF9pOHIoaW50IGltbTgsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKChpbW04IDw9IDI1NSkgJiYgKGltbTggPj0gMCkpOworICAgICAgICBBU1NFUlQo
ZHN0ID09IFNINDo6UjApOworICAgICAgICAKKyAgICAgICAgdWludDE2X3Qgb3BjID0gR0VUT1BD
T0RFR1JPVVBFNShBTkRJTU1fT1BDT0RFLCBpbW04KTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMp
OworICAgIH0KKworICAgIHZvaWQgZGl2MWxfcnIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQg
ZHN0KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gR0VUT1BDT0RFR1JPVVBFMShESVYx
X09QQ09ERSwgZHN0LCBzcmMpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisKKyAgICB9CisK
KyAgICB2b2lkIGRpdjBsX3JyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7
CisgICAgICAgIHVpbnQxNl90IG9wYyA9IEdFVE9QQ09ERUdST1VQRTEoRElWMF9PUENPREUsIGRz
dCwgc3JjKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworCisgICAgfSAgICAKKworICAgIHZv
aWQgbm90bF9yKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAg
IHVpbnQxNl90IG9wYyA9IEdFVE9QQ09ERUdST1VQRTEoTk9UX09QQ09ERSwgZHN0LCBzcmMpOwor
ICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCBvcmxfcnIoUmVnaXN0
ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0g
R0VUT1BDT0RFR1JPVVBFMShPUl9PUENPREUsIGRzdCwgc3JjKTsKKyAgICAgICAgb25lU2hvcnRP
cChvcGMpOworCisgICAgfQorCisgICAgdm9pZCBvcmxfaThyKGludCBpbW04LCBSZWdpc3RlcklE
IGRzdCkKKyAgICB7CisgICAgICAgIEFTU0VSVCgoaW1tOCA8PSAyNTUpICYmIChpbW04ID49IDAp
KTsKKyAgICAgICAgQVNTRVJUKGRzdCA9PSBTSDQ6OlIwKTsKKyAgICAgICAgCisgICAgICAgIHVp
bnQxNl90IG9wYyA9IEdFVE9QQ09ERUdST1VQRTUoT1JJTU1fT1BDT0RFLCBpbW04KTsKKyAgICAg
ICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAgIHZvaWQgc3VibF9ycihSZWdpc3RlcklE
IHNyYywgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICAgdWludDE2X3Qgb3BjID0gR0VU
T1BDT0RFR1JPVVBFMShTVUJfT1BDT0RFLCBkc3QsIHNyYyk7CisgICAgICAgICBvbmVTaG9ydE9w
KG9wYyk7CisgICAgfQorICAgIAorICAgIHZvaWQgc3VidmxfcnIoUmVnaXN0ZXJJRCBzcmMsIFJl
Z2lzdGVySUQgZHN0KSAvLyBjaGVjayBvdmVyZmxvdworICAgIHsKKyAgICAgICAgIHVpbnQxNl90
IG9wYyA9IEdFVE9QQ09ERUdST1VQRTEoU1VCVl9PUENPREUsIGRzdCwgc3JjKTsKKyAgICAgICAg
IG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lkIHN1YmxfaW1tcihpbnQgaW1tLCBS
ZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIGlmIChJc0ltbWVkaWF0ZSgtaW1tKSkKKyAg
ICAgICAgICAgIGFkZGxfaThyKC1pbW0sIGRzdCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgICAgIExvYWRDb25z
dGFudChpbW0sIHNjcik7CisgICAgICAgICAgICB1aW50MTZfdCBvcGMgPSBHRVRPUENPREVHUk9V
UEUxKFNVQl9PUENPREUsIGRzdCwgc2NyKTsKKyAgICAgICAgICAgIG9uZVNob3J0T3Aob3BjKTsK
KyAgICAgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7ICAKKyAgICAgICAgfQorCisgICAgfQor
CisgICAgdm9pZCB4b3JsX3JyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7
CisgICAgICAgIHVpbnQxNl90IG9wYyA9IEdFVE9QQ09ERUdST1VQRTEoWE9SX09QQ09ERSwgZHN0
LCBzcmMpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCB4b3Js
X2k4cihpbnQgaW1tOCwgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICBBU1NFUlQoKGlt
bTggPD0gMjU1KSAmJiAoaW1tOCA+PSAwKSk7CisgICAgICAgIEFTU0VSVChkc3QgPT0gU0g0OjpS
MCk7CisgICAgICAgIAorICAgICAgICB1aW50MTZfdCBvcGMgPSBHRVRPUENPREVHUk9VUEU1KFhP
UklNTV9PUENPREUsIGltbTgpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisg
ICAgdm9pZCBzaGxsX2k4cihpbnQgaW1tLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAg
IHVpbnQxNl90IG9wYzsKKyAgICAgICAgCisgICAgICAgIHN3aXRjaCAoaW1tKSB7CisgICAgICAg
IGNhc2UgMTogb3BjID0gR0VUT1BDT0RFR1JPVVBFMihTSExMX09QQ09ERSwgZHN0KTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDI6IG9wYyA9IEdFVE9QQ09ERUdST1VQRTIoU0hM
TDJfT1BDT0RFLCBkc3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgODogb3Bj
ID0gR0VUT1BDT0RFR1JPVVBFMihTSExMOF9PUENPREUsIGRzdCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSAxNjogb3BjID0gR0VUT1BDT0RFR1JPVVBFMihTSExMMTZfT1BDT0RF
LCBkc3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6IEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBvbmVTaG9ydE9wKG9wYyk7
CisgICAgfQorCisgICAgdm9pZCBuZWcoUmVnaXN0ZXJJRCBkc3QsIFJlZ2lzdGVySUQgc3JjKQor
ICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gR0VUT1BDT0RFR1JPVVBFMShORUdfT1BDT0RF
LCBkc3QsIHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lk
IHNobGxfcnIoUmVnaXN0ZXJJRCBkc3QsIFJlZ2lzdGVySUQgclNoaWZ0KQorICAgIHsgCisgICAg
ICAgIC8qIHNyYyA8PCByU2hpZnQqLworICAgICAgICB1aW50MTZfdCBvcGMgPSBHRVRPUENPREVH
Uk9VUEUxKFNITERfT1BDT0RFLCBkc3QsIHJTaGlmdCk7CisgICAgICAgIG9uZVNob3J0T3Aob3Bj
KTsKKyAgICB9CisKKyAgICB2b2lkIHNobHJfcnIoUmVnaXN0ZXJJRCBkc3QsIFJlZ2lzdGVySUQg
clNoaWZ0KQorICAgIHsKKyAgICAgICAgLyogc3JjID4+IHJTaGlmdCovCisgICAgICAgIG5lZyhy
U2hpZnQsIHJTaGlmdCk7CisgICAgICAgIHNobGxfcnIoZHN0LCByU2hpZnQpOworICAgIH0KKwor
ICAgIHZvaWQgc2hhcl9ycihSZWdpc3RlcklEIGRzdCwgUmVnaXN0ZXJJRCByU2hpZnQpCisgICAg
eworICAgICAgICAvKiBzcmMgPj4+IHJTaGlmdCovCisgICAgICAgIG5lZyhyU2hpZnQsIHJTaGlm
dCk7CisgICAgICAgIHNoYV9ycihkc3QsIHJTaGlmdCk7CisgICAgfQorCisgICAgdm9pZCBzaGFf
cnIoUmVnaXN0ZXJJRCBkc3QsIFJlZ2lzdGVySUQgclNoaWZ0KQorICAgIHsKKyAgICAgICAgLyog
c3JjID4+PiByU2hpZnQqLworICAgICAgICB1aW50MTZfdCBvcGMgPSBHRVRPUENPREVHUk9VUEUx
KFNIQURfT1BDT0RFLCBkc3QsIHJTaGlmdCk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAg
ICB9CisKKyAgICB2b2lkIHNobHJfaThyKGludCBpbW0sIFJlZ2lzdGVySUQgZHN0KQorICAgIHsK
KyAgICAgICAgdWludDE2X3Qgb3BjOworICAgICAgICAKKyAgICAgICAgc3dpdGNoIChpbW0pIHsK
KyAgICAgICAgY2FzZSAxOiBvcGMgPSBHRVRPUENPREVHUk9VUEUyKFNITFJfT1BDT0RFLCBkc3Qp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMjogb3BjID0gR0VUT1BDT0RFR1JP
VVBFMihTSExSMl9PUENPREUsIGRzdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSA4OiBvcGMgPSBHRVRPUENPREVHUk9VUEUyKFNITFI4X09QQ09ERSwgZHN0KTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIDE2OiBvcGMgPSBHRVRPUENPREVHUk9VUEUyKFNITFIx
Nl9PUENPREUsIGRzdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDogQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIG9uZVNob3J0
T3Aob3BjKTsKKworICAgIH0KKworICAgIHZvaWQgaW11bGxfcnIoUmVnaXN0ZXJJRCBzcmMsIFJl
Z2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gR0VUT1BDT0RFR1JP
VVBFMShNVUxMX09QQ09ERSwgZHN0LCBzcmMpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7Cisg
ICAgfQorCisgICAgdm9pZCBkbXVsbF9ycihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3Qp
CisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBHRVRPUENPREVHUk9VUEUxKERNVUxMX0xf
T1BDT0RFLCBkc3QsIHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAg
ICB2b2lkIGRtdWxzbF9ycihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpCisgICAgewor
ICAgICAgICB1aW50MTZfdCBvcGMgPSBHRVRPUENPREVHUk9VUEUxKERNVUxTTF9PUENPREUsIGRz
dCwgc3JjKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0gICAgCisKKyAgICB2b2lk
IHN0c21hY2woUmVnaXN0ZXJJRCByZWcpCisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBH
RVRPUENPREVHUk9VUEUyKFNUU01BQ0xfT1BDT0RFLCByZWcpOworICAgICAgICBvbmVTaG9ydE9w
KG9wYyk7CisgICAgfQorCisgICAgdm9pZCBzdHNtYWNoKFJlZ2lzdGVySUQgcmVnKQorICAgIHsK
KyAgICAgICAgdWludDE2X3Qgb3BjID0gR0VUT1BDT0RFR1JPVVBFMihTVFNNQUNIX09QQ09ERSwg
cmVnKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAgIC8vIENvbXBhcmlz
b25zOgorCisgICAgdm9pZCBjbXBsX3JyKFJlZ2lzdGVySUQgbGVmdCwgUmVnaXN0ZXJJRCByaWdo
dCwgQ29uZGl0aW9uIGNvbmQpCisgICAgeworICAgICAgICB1aW50MTZfdCBvcGM7CisgICAgICAg
IAorICAgICAgICBzd2l0Y2ggKGNvbmQpIHsKKyAgICAgICAgY2FzZSBORTogb3BjID0gR0VUT1BD
T0RFR1JPVVBFMShDTVBFUV9PUENPREUsIHJpZ2h0LCBsZWZ0KTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIEdUOiBvcGMgPSBHRVRPUENPREVHUk9VUEUxKENNUEdUX09QQ09ERSwg
cmlnaHQsIGxlZnQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRVE6IG9wYyA9
IEdFVE9QQ09ERUdST1VQRTEoQ01QRVFfT1BDT0RFLCByaWdodCwgbGVmdCk7CisgICAgICAgICAg
ICBicmVhazsgICAgICAgICAgCisgICAgICAgIGNhc2UgR0U6IG9wYyA9IEdFVE9QQ09ERUdST1VQ
RTEoQ01QR0VfT1BDT0RFLCByaWdodCwgbGVmdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBIUzogb3BjID0gR0VUT1BDT0RFR1JPVVBFMShDTVBIU19PUENPREUsIHJpZ2h0LCBs
ZWZ0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEhJOiBvcGMgPSBHRVRPUENP
REVHUk9VUEUxKENNUEhJX09QQ09ERSwgcmlnaHQsIGxlZnQpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgTEk6IG9wYyA9IEdFVE9QQ09ERUdST1VQRTEoQ01QSElfT1BDT0RFLCBs
ZWZ0LCByaWdodCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBMUzogb3BjID0g
R0VUT1BDT0RFR1JPVVBFMShDTVBIU19PUENPREUsIGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIExFOiBvcGMgPSBHRVRPUENPREVHUk9VUEUxKENNUEdFX09Q
Q09ERSwgbGVmdCwgcmlnaHQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTFQ6
IG9wYyA9IEdFVE9QQ09ERUdST1VQRTEoQ01QR1RfT1BDT0RFLCBsZWZ0LCByaWdodCk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDogQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAg
ICB2b2lkIGNtcHBsKFJlZ2lzdGVySUQgcmVnKSAvL3NpZ24KKyAgICB7CisgICAgICAgIHVpbnQx
Nl90IG9wYyA9IEdFVE9QQ09ERUdST1VQRTIoQ01QUExfT1BDT0RFLCByZWcpOworICAgICAgICBv
bmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCBjbXBweihSZWdpc3RlcklEIHJlZykg
Ly8gdW5zaWduCisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBHRVRPUENPREVHUk9VUEUy
KENNUFBaX09QQ09ERSwgcmVnKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKwor
ICAgIHZvaWQgY21wbF9pcihpbnQgaW1tLCBSZWdpc3RlcklEIGRzdCwgQ29uZGl0aW9uIGNvbmQp
CisgICAgeworICAgICAgICBpZiAoKChjb25kID09IEVRKSB8fCAoY29uZCA9PSBORSkpICYmIChk
c3QgPT0gU0g0OjpSMCkgJiYgSXNJbW1lZGlhdGUoaW1tKSkgeworICAgICAgICAgICAgdWludDE2
X3Qgb3BjID0gR0VUT1BDT0RFR1JPVVBFNShDTVBFUUlNTV9PUENPREUsIGltbSk7CisgICAgICAg
ICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBSZWdp
c3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICAKKyAgICAgICAgICAgIExvYWRD
b25zdGFudChpbW0sIHNjcik7CisgICAgICAgICAgICBjbXBsX3JyKHNjciwgZHN0LCBjb25kKTsK
KworICAgICAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIHZvaWQgY21wbF9tcihpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQg
bGVmdCwgQ29uZGl0aW9uIGNvbmQpCisgICAgeworICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNs
YWltU2NyYXRjaCgpOworICAgICAgICAgCisgICAgICAgIGlmICgob2Zmc2V0IDwgMCkgfHwgKG9m
ZnNldCA+PSA2NCkpIHsKKyAgICAgICAgICAgIExvYWRDb25zdGFudChvZmZzZXQsIHNjcik7Cisg
ICAgICAgICAgICBhZGRsX3JyKGJhc2UsIHNjcik7CisgICAgICAgICAgICBtb3ZsX21yKHNjciwg
c2NyKTsKKyAgICAgICAgfSBlbHNlIGlmIChvZmZzZXQpCisgICAgICAgICAgICBtb3ZsX21yKG9m
ZnNldCA+PiAyLCBiYXNlLCBzY3IpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtb3ZsX21y
KGJhc2UsIHNjcik7CisgICAgICAgIAorICAgICAgICBjbXBsX3JyKHNjciwgbGVmdCwgY29uZCk7
CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgfQorCisgICAgdm9pZCBjbXBsX3Jt
KFJlZ2lzdGVySUQgcmlnaHQsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgQ29uZGl0aW9u
IGNvbmQpCisgICAgeworICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOwor
ICAgICAgICAgCisgICAgICAgIGlmICgob2Zmc2V0IDwgMCkgfHwgKG9mZnNldCA+PSA2NCkpIHsK
KyAgICAgICAgICAgIExvYWRDb25zdGFudChvZmZzZXQsIHNjcik7CisgICAgICAgICAgICBhZGRs
X3JyKGJhc2UsIHNjcik7CisgICAgICAgICAgICBtb3ZsX21yKHNjciwgc2NyKTsKKyAgICAgICAg
fSBlbHNlIGlmIChvZmZzZXQpCisgICAgICAgICAgICBtb3ZsX21yKG9mZnNldCA+PiAyLCBiYXNl
LCBzY3IpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtb3ZsX21yKGJhc2UsIHNjcik7Cisg
ICAgICAgIAorICAgICAgICBjbXBsX3JyKHJpZ2h0LCBzY3IsIGNvbmQpOworICAgICAgICByZWxl
YXNlU2NyYXRjaChzY3IpOworICAgIH0KKworICAgIHZvaWQgY21wbF9pbShpbnQgaW1tLCBpbnQg
b2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIENvbmRpdGlvbiBjb25kKSAKKyAgICB7CisgICAgCisg
ICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIFJlZ2lzdGVy
SUQgc2NyMSA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICAgCisgICAgICAgIGlmICgob2Zmc2V0
IDwgMCkgfHwgKG9mZnNldCA+PSA2NCkpIHsKKyAgICAgICAgICAgIExvYWRDb25zdGFudChvZmZz
ZXQsIHNjcik7CisgICAgICAgICAgICBhZGRsX3JyKGJhc2UsIHNjcik7CisgICAgICAgICAgICBt
b3ZsX21yKHNjciwgc2NyKTsKKyAgICAgICAgfSBlbHNlIGlmIChvZmZzZXQpCisgICAgICAgICAg
ICBtb3ZsX21yKG9mZnNldCA+PiAyLCBiYXNlLCBzY3IpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBtb3ZsX21yKGJhc2UsIHNjcik7CisgICAgICAgIAorICAgICAgICBMb2FkQ29uc3RhbnQo
aW1tLCBzY3IxKTsgICAgICAgIAorICAgICAgICBjbXBsX3JyKHNjcjEsIHNjciwgY29uZCk7Cisg
ICAgICAgIAorICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IxKTsKKyAgICAgICAgcmVsZWFzZVNj
cmF0Y2goc2NyKTsKKyAgICB9CisKKyAgICB2b2lkIHRlc3RsX3JyKFJlZ2lzdGVySUQgc3JjLCBS
ZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IEdFVE9QQ09ERUdS
T1VQRTEoVFNUX09QQ09ERSwgZHN0LCBzcmMpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7Cisg
ICAgfQorCisgICAgdm9pZCB0ZXN0bF9pOHIoaW50IGltbSwgUmVnaXN0ZXJJRCBkc3QpCisgICAg
eworICAgICAgICBBU1NFUlQoKGRzdCA9PSBTSDQ6OlIwKSAmJiAoaW1tIDw9IDI1NSkgJiYgKGlt
bSA+PSAwKSk7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IEdFVE9QQ09ERUdST1VQRTUoVFNUSU1N
X09QQ09ERSwgaW1tKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAgIHZv
aWQgdGVzdGxfaTMycihpbnQgaW1tLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIGlm
ICgoZHN0ID09IFNINDo6UjApICYmIChpbW0gPD0gMjU1KSAmJiAoaW1tID49IDApKSB7CisgICAg
ICAgICAgICB1aW50MTZfdCBvcGMgPSBHRVRPUENPREVHUk9VUEU1KFRTVElNTV9PUENPREUsIGlt
bSk7CisgICAgICAgICAgICBvbmVTaG9ydE9wKG9wYyk7ICAgICAgICAKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAg
ICAgICBMb2FkQ29uc3RhbnQoaW1tLCBzY3IpOworICAgICAgICAKKyAgICAgICAgICAgIHRlc3Rs
X3JyKHNjciwgZHN0KTsKKyAgICAgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICB2b2lkIHRlc3RsX2kzMm0oaW50IGltbSwgaW50IG9mZnNldCwgUmVn
aXN0ZXJJRCBiYXNlKQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0
Y2goKTsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IxID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAg
IAorICAgICAgICBpZiAoKG9mZnNldCA8IDApIHx8IChvZmZzZXQgPj0gNjQpKSB7CisgICAgICAg
ICAgICBMb2FkQ29uc3RhbnQob2Zmc2V0LCBzY3IpOworICAgICAgICAgICAgYWRkbF9ycihiYXNl
LCBzY3IpOworICAgICAgICAgICAgbW92bF9tcihzY3IsIHNjcik7CisgICAgICAgIH0gZWxzZSBp
ZiAob2Zmc2V0KQorICAgICAgICAgICAgbW92bF9tcihvZmZzZXQgPj4gMiwgYmFzZSwgc2NyKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgbW92bF9tcihiYXNlLCBzY3IpOworICAgICAgICAK
KyAgICAgICAgaWYgKElzSW1tZWRpYXRlKGltbSkpCisgICAgICAgICAgICBtb3ZfaW1tOChpbW0s
IHNjcjEpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBMb2FkQ29uc3RhbnQoaW1tLCBzY3Ix
KTsKKyAgICAgICAgCisgICAgICAgIHRlc3RsX3JyKHNjciwgc2NyMSk7ICAgICAgICAKKyAgICAg
ICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyMSk7Cisg
ICAgfQorCisgICAgdm9pZCB0ZXN0Yl9pOHIoaW50IGltbSwgUmVnaXN0ZXJJRCBkc3QpCisgICAg
eworICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBtb3Zf
aW1tOChpbW0sIHNjcik7CisgICAgICAgIHRlc3RsX3JyKHNjciwgZHN0KTsKKyAgICAgICAgcmVs
ZWFzZVNjcmF0Y2goc2NyKTsKKyAgICB9CisKKyAgICB2b2lkIG5vcCgpCisgICAgeworICAgICAg
ICBtX2J1ZmZlci5wdXRTaG9ydFVuY2hlY2tlZChOT1BfT1BDT0RFKTsKKyAgICB9CisKKyAgICB2
b2lkIHNldHQoKQorICAgIHsKKyAgICAgICAgb25lU2hvcnRPcChTRVRUX09QQ09ERSk7CisgICAg
fQorCisgICAgdm9pZCBjbHJ0KCkKKyAgICB7CisgICAgICAgIG9uZVNob3J0T3AoQ0xSVF9PUENP
REUpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGJrcHQoKQorICAgIHsKKyAgICAgICAgbV9idWZm
ZXIucHV0U2hvcnRVbmNoZWNrZWQoQlJLX09QQ09ERSk7CisgICAgfQorCisgICAgCisgICAgdm9p
ZCBicmFuY2godWludDE2X3Qgb3BjLCBpbnQgbGFiZWwpCisgICAgeworICAgICAgICBzd2l0Y2gg
KG9wYykgeworICAgICAgICBjYXNlIEJUX09QQ09ERToKKyAgICAgICAgICAgIEFTU0VSVCgobGFi
ZWwgPD0gMTI3KSAmJiAobGFiZWwgPj0gLTEyOCkpOworICAgICAgICAgICAgb3BjID0gR0VUT1BD
T0RFR1JPVVBFNShCVF9PUENPREUsIGxhYmVsKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIEJSQV9PUENPREU6CisgICAgICAgICAgICBBU1NFUlQoKGxhYmVsIDw9IDIwNDcpICYm
IChsYWJlbCA+PSAtMjA0OCkpOworICAgICAgICAgICAgb3BjID0gR0VUT1BDT0RFR1JPVVBFNihC
UkFfT1BDT0RFLCBsYWJlbCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBCRl9P
UENPREU6CisgICAgICAgICAgICBBU1NFUlQoKGxhYmVsIDw9IDEyNykgJiYgKGxhYmVsID49IC0x
MjgpKTsKKyAgICAgICAgICAgIG9wYyA9IEdFVE9QQ09ERUdST1VQRTUoQkZfT1BDT0RFLCBsYWJl
bCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDogQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAg
ICB9CisKKyAgICB2b2lkIGR0KFJlZ2lzdGVySUQgcmVnKQorICAgIHsKKyAgICAgICAgdWludDE2
X3Qgb3BjID0gR0VUT1BDT0RFR1JPVVBFMihEVF9PUENPREUsIHJlZyk7CisgICAgICAgIG9uZVNo
b3J0T3Aob3BjKTsKKyAgICB9ICAgCisKKyAgICB2b2lkIGJyYW5jaCh1aW50MTZfdCBvcGMsIFJl
Z2lzdGVySUQgcmVnKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChvcGMpIHsgICAgICAgICAgICAK
KyAgICAgICAgY2FzZSBCUkFGX09QQ09ERToKKyAgICAgICAgICAgIG9wYyA9IEdFVE9QQ09ERUdS
T1VQRTIoQlJBRl9PUENPREUsIHJlZyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBKTVBfT1BDT0RFIDoKKyAgICAgICAgICAgIG9wYyA9IEdFVE9QQ09ERUdST1VQRTIoSk1QX09Q
Q09ERSwgcmVnKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEpTUl9PUENPREUg
OgorICAgICAgICAgICAgb3BjID0gR0VUT1BDT0RFR1JPVVBFMihKU1JfT1BDT0RFLCByZWcpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQlNSRl9PUENPREUgOgorICAgICAgICAg
ICAgb3BjID0gR0VUT1BDT0RFR1JPVVBFMihCU1JGX09QQ09ERSwgcmVnKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBkZWZhdWx0OiBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAgIHZvaWQg
bGRzcHIoUmVnaXN0ZXJJRCByZWcpCisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBHRVRP
UENPREVHUk9VUEUyKExEU1BSX09QQ09ERSwgcmVnKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMp
OworICAgIH0KKworICAgIHZvaWQgc3RzcHIoUmVnaXN0ZXJJRCByZWcpCisgICAgeworICAgICAg
ICB1aW50MTZfdCBvcGMgPSBHRVRPUENPREVHUk9VUEUyKFNUU1BSX09QQ09ERSwgcmVnKTsKKyAg
ICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAgIHZvaWQgZXh0dXcoUmVnaXN0ZXJJ
RCBzcmMsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gR0VU
T1BDT0RFR1JPVVBFMShFWFRVV19PUENPREUsIGRzdCwgc3JjKTsKKyAgICAgICAgCisgICAgICAg
IG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICAvKiBmbG9hdCBvcGVyYXRpb25zKi8KKyAg
ICAKKyAgICB2b2lkIGxkc3JtX2ZwdWwoUmVnaXN0ZXJJRCBzcmMpCisgICAgeyAgICAgICAgCisg
ICAgICAgIHVpbnQxNl90IG9wYyA9IEdFVE9QQ09ERUdST1VQRTIoTERTX1JNX0ZQVUxfT1BDT0RF
LCBzcmMpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorICAgIHZvaWQgZm5lZyhG
UFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gR0VUT1BDT0RF
R1JPVVBFMihGTkVHX09QQ09ERSwgZHN0KTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAg
IH0KKworICAgIHZvaWQgZnNxcnQoRlBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIHVp
bnQxNl90IG9wYyA9IEdFVE9QQ09ERUdST1VQRTIoRlNRUlRfT1BDT0RFLCBkc3QpOworICAgICAg
ICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorICAgIAorICAgIHZvaWQgc3RzX2ZwdWxfcm4oUmVn
aXN0ZXJJRCBzcmMpCisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBHRVRPUENPREVHUk9V
UEUyKFNUU19GUFVMX1JOX09QQ09ERSwgc3JjKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOwor
ICAgIH0KKyAgICAKKyAgICB2b2lkIGZsb2F0X2ZwdWxfZnJuKFJlZ2lzdGVySUQgc3JjKQorICAg
IHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gR0VUT1BDT0RFR1JPVVBFMihGTE9BVF9PUENPREUs
IHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBm
bXVsbChGUFJlZ2lzdGVySUQgc3JjLCBGUFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAg
dWludDE2X3Qgb3BjID0gR0VUT1BDT0RFR1JPVVBFMShGTVVMX09QQ09ERSwgZHN0LCBzcmMpOwor
ICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorICAgIAorICAgIHZvaWQgZm1vdnNfcmVh
ZF9ybShSZWdpc3RlcklEIHNyYywgRlBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIC8q
Rk1PVi5TIEBSJWQsIEZSJWRcbiovCisgICAgICAgIHVpbnQxNl90IG9wYyA9IEdFVE9QQ09ERUdS
T1VQRTEoRk1PVlNfUkVBRF9STV9PUENPREUsIGRzdCwgc3JjKTsKKyAgICAgICAgb25lU2hvcnRP
cChvcGMpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGZtb3ZzX3dyaXRlX3JtKEZQUmVnaXN0ZXJJ
RCBzcmMsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgLyogRk1PVi5TIEZSJWQsIEBS
JWRcbiAqLworICAgICAgICB1aW50MTZfdCBvcGMgPSBHRVRPUENPREVHUk9VUEUxKEZNT1ZTX1dS
SVRFX1JOX09QQ09ERSwgZHN0LCBzcmMpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAg
fQorICAgIAorICAgIHZvaWQgZm1vdnNfd3JpdGVfcjByKEZQUmVnaXN0ZXJJRCBzcmMsIFJlZ2lz
dGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgLypGTU9WLlMgRlIlZCwgQChSMCwgUiVkKSAqLwor
ICAgICAgICB1aW50MTZfdCBvcGMgPSBHRVRPUENPREVHUk9VUEUxKEZNT1ZTX1dSSVRFX1IwUk5f
T1BDT0RFLCBkc3QsIHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisgICAg
CisgICAgdm9pZCBmbW92c19yZWFkX3IwcihSZWdpc3RlcklEIHNyYywgRlBSZWdpc3RlcklEIGRz
dCkKKyAgICB7CisgICAgICAgIC8qRk1PVi5TIEAoUjAsIFIlZCksIEZSJWQqLworICAgICAgICB1
aW50MTZfdCBvcGMgPSBHRVRPUENPREVHUk9VUEUxKEZNT1ZTX1JFQURfUjBSTV9PUENPREUsIGRz
dCwgc3JjKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKyAgICAKKyAgICB2b2lk
IGZtb3ZzX3JlYWRfcm1faW5jKFJlZ2lzdGVySUQgZHN0LCBGUFJlZ2lzdGVySUQgc3JjKQorICAg
IHsKKyAgICAgICAgLyogRk1PVi5TIEBSJWQrLCBGUiVkICovCisgICAgICAgIHVpbnQxNl90IG9w
YyA9IEdFVE9QQ09ERUdST1VQRTEoRk1PVlNfUkVBRF9STV9JTkNfT1BDT0RFLCBkc3QsIHNyYyk7
CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBmbW92c193
cml0ZV9ybl9kZWMoRlBSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAg
ICAgICAvKiBGTU9WLlMgRlIlZCwgQC1SJWQgKi8KKyAgICAgICAgdWludDE2X3Qgb3BjID0gR0VU
T1BDT0RFR1JPVVBFMShGTU9WU19XUklURV9STl9ERUNfT1BDT0RFLCBkc3QsIHNyYyk7CisgICAg
ICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBmdHJjX3JtX2ZwdWwo
RlBSZWdpc3RlcklEIHNyYykKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IEdFVE9QQ09E
RUdST1VQRTIoRlRSQ19PUENPREUsIHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAg
ICB9CisgICAgCisgICAgdm9pZCBmbGRzX2ZwdWwoUmVnaXN0ZXJJRCBzcmMpCisgICAgeworICAg
ICAgICB1aW50MTZfdCBvcGMgPSBHRVRPUENPREVHUk9VUEUyKEZMRFNfRlJNX0ZQVUxfT1BDT0RF
LCBzcmMpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorICAgIAorICAgIHZvaWQg
ZnN0c19mcHVsKFJlZ2lzdGVySUQgc3JjKQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0g
R0VUT1BDT0RFR1JPVVBFMihGU1RTX0ZQVUxfRlJOX09QQ09ERSwgc3JjKTsKKyAgICAgICAgb25l
U2hvcnRPcChvcGMpOworICAgIH0KKyAgICAKKyAgICAKKyAgICB2b2lkIGxkc2Zwc2NyKFJlZ2lz
dGVySUQgcmVnKSAKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IEdFVE9QQ09ERUdST1VQ
RTIoTERTRlBTQ1JfT1BDT0RFLCByZWcpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAg
fQorICAgIAorICAgIHZvaWQgc3RzZnBzY3IoUmVnaXN0ZXJJRCByZWcpIAorICAgIHsKKyAgICAg
ICAgdWludDE2X3Qgb3BjID0gR0VUT1BDT0RFR1JPVVBFMihTVFNGUFNDUl9PUENPREUsIHJlZyk7
CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9ICAgIAorICAgIAorICAgIC8qIGRvdWJs
ZSBvcGVyYXRpb25zKi8KKyAgICB2b2lkIGRjbXBwZXEoRlBSZWdpc3RlcklEIHNyYywgRlBSZWdp
c3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IEdFVE9QQ09ERUdST1VQ
RTgoRkNNUEVRX09QQ09ERSwgZHN0ID4+IDEsIHNyYyA+PjEpOworICAgICAgICBvbmVTaG9ydE9w
KG9wYyk7CisgICAgfQorICAgIAorICAgIHZvaWQgZGNtcHBndChGUFJlZ2lzdGVySUQgc3JjLCBG
UFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gR0VUT1BDT0RF
R1JPVVBFOChGQ01QR1RfT1BDT0RFLCBkc3QgPj4gMSwgc3JjID4+MSk7CisgICAgICAgIG9uZVNo
b3J0T3Aob3BjKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBkbXVsX3JyKEZQUmVnaXN0ZXJJRCBz
cmMsIEZQUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBHRVRP
UENPREVHUk9VUEU4KEZNVUxfT1BDT0RFLCBkc3QgPj4gMSwgc3JjID4+MSk7CisgICAgICAgIG9u
ZVNob3J0T3Aob3BjKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBkc3ViX3JyKEZQUmVnaXN0ZXJJ
RCBzcmMsIEZQUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBH
RVRPUENPREVHUk9VUEU4KEZTVUJfT1BDT0RFLCBkc3QgPj4gMSwgc3JjID4+MSk7CisgICAgICAg
IG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBkYWRkX3JyKEZQUmVnaXN0
ZXJJRCBzcmMsIEZQUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMg
PSBHRVRPUENPREVHUk9VUEU4KEZBRERfT1BDT0RFLCBkc3QgPj4gMSwgc3JjID4+MSk7CisgICAg
ICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBkbW92X3JyKEZQUmVn
aXN0ZXJJRCBzcmMsIEZQUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICB1aW50MTZfdCBv
cGMgPSBHRVRPUENPREVHUk9VUEU4KEZNT1ZfT1BDT0RFLCBkc3QgPj4gMSwgc3JjID4+MSk7Cisg
ICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9ICAgIAorICAgIAorICAgIHZvaWQgZGRpdl9y
cihGUFJlZ2lzdGVySUQgc3JjLCBGUFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgdWlu
dDE2X3Qgb3BjID0gR0VUT1BDT0RFR1JPVVBFOChGRElWX09QQ09ERSwgZHN0ID4+IDEsIHNyYyA+
PjEpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCBkc3FydChG
UFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gR0VUT1BDT0RF
R1JPVVBFNyhGU1FSVF9PUENPREUsIGRzdCA+PiAxKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMp
OworICAgIH0gCisKKyAgICB2b2lkIGRvdWJsZWxvYWQoUmVnaXN0ZXJJRCBiYXNlLCBpbnQgb2Zm
c2V0LCBGUFJlZ2lzdGVySUQgZGVzdCwgUmVnaXN0ZXJJRCBzY3IpIAorICAgIHsKKyAgICAgICAg
IExvYWRDb25zdGFudChvZmZzZXQsIHNjcik7CisgICAgICAgICBpZiAoc2NyID09IFNINDo6UjAp
CisgICAgICAgICAgICAgZm1vdl9yZWFkX3IwcihiYXNlLCBkZXN0KTsKKyAgICAgICAgIGVsc2Ug
aWYgKGJhc2UgPT0gU0g0OjpSMCkKKyAgICAgICAgICAgICBmbW92X3JlYWRfcjByKHNjciwgZGVz
dCk7CisgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICBhZGRsX3JyKGJhc2UsIHNjcik7Cisg
ICAgICAgICAgICAgZm1vdl9yZWFkX3JtKHNjciwgZGVzdCk7ICAgICAgICAgCisgICAgICAgICB9
ICAgIAorICAgIH0KKyAgICAKKyAgICB2b2lkIGRuZWcoRlBSZWdpc3RlcklEIGRzdCkKKyAgICB7
CisgICAgICAgIHVpbnQxNl90IG9wYyA9IEdFVE9QQ09ERUdST1VQRTcoRk5FR19PUENPREUsIGRz
dCA+PiAxKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKyAgICAKKyAgICB2b2lk
IGRvdWJsZXN0b3JlKEZQUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgYmFzZSwgaW50IG9mZnNl
dCwgUmVnaXN0ZXJJRCBzY3IpIAorICAgIHsKKyAgICAgICAgIExvYWRDb25zdGFudChvZmZzZXQs
IHNjcik7CisgICAgICAgICBpZiAoc2NyID09IFNINDo6UjApCisgICAgICAgICAgICAgZm1vdl93
cml0ZV9yMHIoc3JjLCBiYXNlKTsKKyAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIGFkZGxf
cnIoYmFzZSwgc2NyKTsKKyAgICAgICAgICAgICBmbW92X3dyaXRlX3JtKHNyYywgc2NyKTsgICAg
ICAgICAKKyAgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCBmbW92X3JlYWRfcm0oUmVn
aXN0ZXJJRCBzcmMsIEZQUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICAvKkZNT1YgQFIl
ZCwgRFIlZFxuKi8KKyAgICAgICAgdWludDE2X3Qgb3BjID0gR0VUT1BDT0RFR1JPVVBFMTAoRk1P
VlNfUkVBRF9STV9PUENPREUsIGRzdCA+PiAxLCBzcmMpOworICAgICAgICBvbmVTaG9ydE9wKG9w
Yyk7CisgICAgfQorICAgIAorICAgIHZvaWQgZm1vdl93cml0ZV9ybShGUFJlZ2lzdGVySUQgc3Jj
LCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIC8qIEZNT1YgRFIlZCwgQFIlZFxuICov
CisgICAgICAgIHVpbnQxNl90IG9wYyA9IEdFVE9QQ09ERUdST1VQRTkoRk1PVlNfV1JJVEVfUk5f
T1BDT0RFLCBkc3QsIHNyYyA+PiAxKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0K
KyAgICAKKyAgICB2b2lkIGZtb3Zfd3JpdGVfcjByKEZQUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVy
SUQgZHN0KQorICAgIHsKKyAgICAgICAgLypGTU9WIERSJWQsIEAoUjAsIFIlZCkgKi8KKyAgICAg
ICAgdWludDE2X3Qgb3BjID0gR0VUT1BDT0RFR1JPVVBFOShGTU9WU19XUklURV9SMFJOX09QQ09E
RSwgZHN0LCBzcmMgPj4gMSk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisgICAg
CisgICAgdm9pZCBmbW92X3JlYWRfcjByKFJlZ2lzdGVySUQgc3JjLCBGUFJlZ2lzdGVySUQgZHN0
KQorICAgIHsKKyAgICAgICAgLypGTU9WIEAoUjAsIFIlZCksIERSJWQqLworICAgICAgICB1aW50
MTZfdCBvcGMgPSBHRVRPUENPREVHUk9VUEUxMChGTU9WU19SRUFEX1IwUk1fT1BDT0RFLCBkc3Qg
Pj4gMSwgc3JjKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKyAgICAKKyAgICB2
b2lkIGZtb3ZfcmVhZF9ybV9pbmMoUmVnaXN0ZXJJRCBkc3QsIEZQUmVnaXN0ZXJJRCBzcmMpCisg
ICAgeworICAgICAgICAvKiBGTU9WIEBSJWQrLCBEUiVkICovCisgICAgICAgIHVpbnQxNl90IG9w
YyA9IEdFVE9QQ09ERUdST1VQRTEwKEZNT1ZTX1JFQURfUk1fSU5DX09QQ09ERSwgZHN0ID4+IDEg
LCBzcmMpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorICAgIAorICAgIHZvaWQg
Zm1vdl93cml0ZV9ybl9kZWMoRlBSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpCisgICAg
eworICAgICAgICAvKiBGTU9WIERSJWQsIEAtUiVkICovCisgICAgICAgIHVpbnQxNl90IG9wYyA9
IEdFVE9QQ09ERUdST1VQRTkoRk1PVlNfV1JJVEVfUk5fREVDX09QQ09ERSwgZHN0LCBzcmMgPj4g
MSk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBmbG9h
dF9mcHVsX2RybihGUFJlZ2lzdGVySUQgc3JjKQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3Bj
ID0gR0VUT1BDT0RFR1JPVVBFNyhGTE9BVF9PUENPREUsIHNyYyA+PiAxKTsKKyAgICAgICAgb25l
U2hvcnRPcChvcGMpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGZ0cmNfZHJtX2ZwdWwoRlBSZWdp
c3RlcklEIHNyYykKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IEdFVE9QQ09ERUdST1VQ
RTcoRlRSQ19PUENPREUsIHNyYyA+PiAxKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAg
IH0KKyAgICAgICAgICAgCisgICAgLy8gVmFyaW91cyBtb3ZlIG9wczoKKyAgICAKKyAgICB2b2lk
IG1vdl9pbW04KGludCBpbW04LCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIEFTU0VS
VCgoaW1tOCA8PSAxMjcpICYmIChpbW04ID49IC0xMjgpKTsKKyAgICAgICAgdWludDE2X3Qgb3Bj
ID0gR0VUT1BDT0RFR1JPVVBFMyhNT1ZJTU1fT1BDT0RFLCBkc3QsIGltbTgpOworICAgICAgICBv
bmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCBtb3ZsX3JyKFJlZ2lzdGVySUQgc3Jj
LCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIC8qIG1vdiBzcmMsIGRzdCAqLworICAg
ICAgICB1aW50MTZfdCBvcGMgPSBHRVRPUENPREVHUk9VUEUxKE1PVl9PUENPREUsIGRzdCwgc3Jj
KTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworCisgICAgfQorICAgIAorICAgIHZvaWQgbW92
d19ybShSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICAvKiBt
b3YudyBzcmMsIEBkc3QgKi8KKyAgICAgICAgdWludDE2X3Qgb3BjID0gR0VUT1BDT0RFR1JPVVBF
MShNT1ZXX1dSSVRFX1JOX09QQ09ERSwgZHN0LCBzcmMpOworICAgICAgICBvbmVTaG9ydE9wKG9w
Yyk7CisKKyAgICB9CisgICAgCisgICAgdm9pZCBtb3Z3X21yKFJlZ2lzdGVySUQgc3JjLCBSZWdp
c3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIC8qIG1vdi53IEAgc3JjLCBkc3QgKi8KKyAgICAg
ICAgdWludDE2X3Qgb3BjID0gR0VUT1BDT0RFR1JPVVBFMShNT1ZXX1JFQURfUk1fT1BDT0RFLCBk
c3QsIHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKworICAgIH0KKyAgICAKKyAgICB2
b2lkIG1vdndfbXIoaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGRzdCkK
KyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYzsKKworICAgICAgICBBU1NFUlQoYmFzZSA9PSBT
SDQ6OlBDKTsKKyAgICAgICAgQVNTRVJUKChvZmZzZXQgPD0gMjU1KSAmJiAob2Zmc2V0ID49IDAp
KTsKKyAgICAgICAgb3BjID0gR0VUT1BDT0RFR1JPVVBFMyhNT1ZXX1JFQURfT0ZGUENfT1BDT0RF
LCBkc3QsIG9mZnNldCk7CisKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworCisgICAgfQorICAg
IAorICAgIHZvaWQgbW92d19yMG1yKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCkKKyAg
ICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IEdFVE9QQ09ERUdST1VQRTEoTU9WV19SRUFEX1Iw
Uk1fT1BDT0RFLCBkc3QsIHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKworICAgIH0K
KyAgICAKKyAgICB2b2lkIG1vdmxfcm0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lz
dGVySUQgYmFzZSkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYzsKKyAgICAgICAgCisgICAg
ICAgIEFTU0VSVCgob2Zmc2V0IDw9IDE1KSAmJiAob2Zmc2V0ID49IDApKTsKKyAgICAgICAgCisg
ICAgICAgIGlmICghb2Zmc2V0KQorICAgICAgICAgICAgb3BjID0gR0VUT1BDT0RFR1JPVVBFMShN
T1ZMX1dSSVRFX1JOX09QQ09ERSwgYmFzZSwgc3JjKTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgb3BjID0gR0VUT1BDT0RFR1JPVVBFNChNT1ZMX1dSSVRFX09GRlJOX09QQ09ERSwgYmFzZSwg
c3JjLCBvZmZzZXQpOworICAgICAgICAKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworCisgICAg
fQorICAgIAorICAgIHZvaWQgbW92bF9ybShSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBiYXNl
KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjOworICAgICAgICAKKyAgICAgICAgb3BjID0g
R0VUT1BDT0RFR1JPVVBFMShNT1ZMX1dSSVRFX1JOX09QQ09ERSwgYmFzZSwgc3JjKTsKKyAgICAg
ICAgb25lU2hvcnRPcChvcGMpOworCisgICAgfQorICAgIAorICAgIHZvaWQgbW92bF9pMzJtKGlu
dCBpbW0sIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkKKyAgICB7CisgICAgICAgIHVpbnQx
Nl90IG9wYzsKKyAgICAgICAgCisgICAgICAgIEFTU0VSVCgob2Zmc2V0IDw9IDE1KSAmJiAob2Zm
c2V0ID49IDApKTsKKyAgICAKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2go
KTsKKyAgICAgICAgTG9hZENvbnN0YW50KGltbSwgc2NyKTsKKworICAgICAgICAKKyAgICAgICAg
aWYgKCFvZmZzZXQpCisgICAgICAgICAgICBvcGMgPSBHRVRPUENPREVHUk9VUEUxKE1PVkxfV1JJ
VEVfUk5fT1BDT0RFLCBiYXNlLCBzY3IpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBvcGMg
PSBHRVRPUENPREVHUk9VUEU0KE1PVkxfV1JJVEVfT0ZGUk5fT1BDT0RFLCBiYXNlLCBzY3IsIG9m
ZnNldCk7CisgICAgICAgIAorICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgICAgIHJlbGVh
c2VTY3JhdGNoKHNjcik7CisgICAgfQorCisKKyAgICB2b2lkIG1vdmxfbXIoaW50IG9mZnNldCwg
UmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90
IG9wYzsKKyAgICAKKyAgICAgICAgaWYgKGJhc2UgPT0gU0g0OjpQQykgeworICAgICAgICAgICAg
QVNTRVJUKChvZmZzZXQgPD0gMjU1KSAmJiAob2Zmc2V0ID49IDApKTsKKyAgICAgICAgICAgIG9w
YyA9IEdFVE9QQ09ERUdST1VQRTMoTU9WTF9SRUFEX09GRlBDX09QQ09ERSwgZHN0LCBvZmZzZXQp
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgQVNTRVJUKChvZmZzZXQgPD0gMTUpICYm
IChvZmZzZXQgPj0gMCkpOworICAgICAgICAgICAgaWYgKCFvZmZzZXQpCisgICAgICAgICAgICAg
ICAgb3BjID0gR0VUT1BDT0RFR1JPVVBFMShNT1ZMX1JFQURfUk1fT1BDT0RFLCBkc3QsIGJhc2Up
OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG9wYyA9IEdFVE9QQ09ERUdST1VQ
RTQoTU9WTF9SRUFEX09GRlJNX09QQ09ERSwgZHN0LCBiYXNlLCBvZmZzZXQpOworICAgICAgICB9
CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKworICAgIH0KKyAgICAKKyAgICB2b2lkIG1vdmJf
bXIoaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGRzdCkgLy8gTU9WLkIg
QChkaXNwLCBSbSksIFIwCisgICAgeyAgICAgICAgCisgICAgICAgIEFTU0VSVChkc3QgPT0gU0g0
OjpSMCk7CisgICAgCisgICAgICAgIHVpbnQxNl90IG9wYyA9IEdFVE9QQ09ERUdST1VQRTExKE1P
VkJfUkVBRF9PRkZSTV9PUENPREUsIGJhc2UsIG9mZnNldCk7CisgICAgICAgIAorICAgICAgICBv
bmVTaG9ydE9wKG9wYyk7CisKKyAgICB9CisgICAgCisgICAgdm9pZCBtb3ZiX3IwbXIoUmVnaXN0
ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0g
R0VUT1BDT0RFR1JPVVBFMShNT1ZCX1JFQURfUjBSTV9PUENPREUsIGRzdCwgc3JjKTsKKyAgICAg
ICAgb25lU2hvcnRPcChvcGMpOworCisgICAgfQorICAgIAorICAgIHZvaWQgbW92Yl9tcihSZWdp
c3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpIC8vIE1PVi5CIEBSbSwgUm4KKyAgICB7CisgICAg
ICAgIHVpbnQxNl90IG9wYyA9IEdFVE9QQ09ERUdST1VQRTEoTU9WQl9SRUFEX1JNX09QQ09ERSwg
ZHN0LCBzcmMpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisKKyAgICB9CisgICAgCisgICAg
dm9pZCBtb3ZsX21yKFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAg
ICAgICB1aW50MTZfdCBvcGMgPSBHRVRPUENPREVHUk9VUEUxKE1PVkxfUkVBRF9STV9PUENPREUs
IGRzdCwgYmFzZSk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKworICAgIH0KKyAgICAKKyAg
ICB2b2lkIG1vdmxfcjBtcihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpCisgICAgewor
ICAgICAgICB1aW50MTZfdCBvcGMgPSBHRVRPUENPREVHUk9VUEUxKE1PVkxfUkVBRF9SMFJNX09Q
Q09ERSwgZHN0LCBzcmMpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisKKyAgICB9CisgICAg
CisgICAgdm9pZCBtb3ZsX3JtcjAoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQorICAg
IHsKKyAgICAgICAgLyptb3YubCBzcmMsIEAocjAsIGRzdCkqLworICAgICAgICB1aW50MTZfdCBv
cGMgPSBHRVRPUENPREVHUk9VUEUxKE1PVkxfV1JJVEVfUjBSTl9PUENPREUsIGRzdCwgc3JjKTsK
KyAgICAgICAgb25lU2hvcnRPcChvcGMpOworCisgICAgfQorCisgICAgdm9pZCBtb3ZsX2k4cihp
bnQgaW1tOCwgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICBBU1NFUlQoKGltbTggPD0g
MTI3KSAmJiAoaW1tOCA+PSAtMTI4KSk7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IEdFVE9QQ09E
RUdST1VQRTMoTU9WSU1NX09QQ09ERSwgZHN0LCBpbW04KTsKKworICAgICAgICBvbmVTaG9ydE9w
KG9wYyk7CisgICAgfQorCisgICAgdm9pZCBvcmxfaXIoaW50IGltbSwgUmVnaXN0ZXJJRCBkc3Qp
CisgICAgeworICAgICAgICBpZiAoKGltbSA8PSAyNTUpICYmIChpbW0gPj0gMCkgJiYgKGRzdCA9
PSBTSDQ6OlIwKSkKKyAgICAgICAgICAgIG9ybF9pOHIoaW1tLCBkc3QpOworICAgICAgICBlbHNl
ICB7CisgICAgICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAg
ICAgICAgTG9hZENvbnN0YW50KGltbSwgc2NyKTsKKyAgICAgICAgICAgIHVpbnQxNl90IG9wYyA9
IEdFVE9QQ09ERUdST1VQRTEoT1JfT1BDT0RFLCBkc3QsIHNjcik7CisgICAgICAgICAgICBvbmVT
aG9ydE9wKG9wYyk7CisgICAgICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgICAgICB9
CisgICAgfQorICAgIAorICAgIHZvaWQgTG9hZENvbnN0YW50KHVpbnQzMl90IGNvbnN0YW50LCBS
ZWdpc3RlcklEIGRzdCwgYm9vbCB3aXRocGF0Y2ggPSBmYWxzZSkKKyAgICB7CisgICAgICAgIGlm
ICgoKGludCljb25zdGFudCA8PTB4N2YpICYmICgoaW50KWNvbnN0YW50ID49IC0weDgwKSAmJiAo
IXdpdGhwYXRjaCkpCisgICAgICAgICAgICBtb3ZfaW1tOChjb25zdGFudCwgZHN0KTsKKyAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICBtX2J1ZmZlci5lbnN1cmVTcGFjZShtYXhJbnN0cnVjdGlv
blNpemUsIHNpemVvZih1aW50MzJfdCkpOworICAgICAgICAgICAgTG9hZENvbnN0YW50VW5jaGVj
a2VkU2l6ZShjb25zdGFudCwgZHN0KTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB2b2lk
IExvYWRDb25zdGFudFVuY2hlY2tlZFNpemUodWludDMyX3QgY29uc3RhbnQsIFJlZ2lzdGVySUQg
ZHN0KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gR0VUT1BDT0RFR1JPVVBFMyhNT1ZJ
TU1fT1BDT0RFLCBkc3QsIDApOyAvLyB3aWxsIGJlIHBhdGNoZWQgbGF0ZXIgdG8gbW92LmwKKyAg
ICAgICAgbV9idWZmZXIucHV0U2hvcnRXaXRoQ29uc3RhbnRJbnQob3BjLCBjb25zdGFudCk7Cisg
ICAgfQorCisgICAgLy8gRmxvdyBjb250cm9sOgorCisgICAgSm1wU3JjIGNhbGwoKQorICAgIHsg
ICAgICAgIAorICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAg
ICBtX2J1ZmZlci5lbnN1cmVTcGFjZShtYXhJbnN0cnVjdGlvblNpemUgKyA0LCBzaXplb2YodWlu
dDMyX3QpKTsKKyAgICAgICAgTG9hZENvbnN0YW50VW5jaGVja2VkU2l6ZSgweDAsIHNjcik7Cisg
ICAgICAgIGJyYW5jaChKU1JfT1BDT0RFLCBzY3IpOworICAgICAgICBub3AoKTsKKyAgICAgICAg
cmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICAgICAgcmV0dXJuIEptcFNyYyhtX2J1ZmZlci51bmNo
ZWNrZWRTaXplKCkpOworICAgIH0KKworICAgIEptcFNyYyBjYWxsKFJlZ2lzdGVySUQgZHN0KQor
ICAgIHsKKyAgICAgICAgbV9idWZmZXIuZW5zdXJlU3BhY2UobWF4SW5zdHJ1Y3Rpb25TaXplICsg
Mik7CisgICAgICAgIGJyYW5jaChKU1JfT1BDT0RFLCBkc3QpOworICAgICAgICBub3AoKTsKKyAg
ICAgICAgcmV0dXJuIEptcFNyYyhtX2J1ZmZlci51bmNoZWNrZWRTaXplKCkpOworICAgIH0KKwor
ICAgIEptcFNyYyBqbXAoKQorICAgIHsgICAgICAgIAorICAgICAgICBSZWdpc3RlcklEIHNjciA9
IGNsYWltU2NyYXRjaCgpOworICAgICAgICBtX2J1ZmZlci5lbnN1cmVTcGFjZShtYXhJbnN0cnVj
dGlvblNpemUgKyA0LCBzaXplb2YodWludDMyX3QpKTsKKyAgICAgICAgaW50IG1fc2l6ZSA9IG1f
YnVmZmVyLnVuY2hlY2tlZFNpemUoKTsKKyAgICAgICAgTG9hZENvbnN0YW50VW5jaGVja2VkU2l6
ZSgweDAsIHNjcik7CisgICAgICAgIGJyYW5jaChCUkFGX09QQ09ERSwgc2NyKTsgICAgICAgIAor
ICAgICAgICBub3AoKTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICAKKyAgICAg
ICAgcmV0dXJuIEptcFNyYyhtX3NpemUpOworICAgIH0KKyAgICAKKyAgICBKbXBTcmMgam1wKFJl
Z2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgam1wX3IoZHN0KTsKKyAgICAgICAgcmV0dXJu
IEptcFNyYyhtX2J1ZmZlci51bmNoZWNrZWRTaXplKCkpOworICAgIH0KKworICAgIHZvaWQgam1w
X3IoUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICBtX2J1ZmZlci5lbnN1cmVTcGFjZSht
YXhJbnN0cnVjdGlvblNpemUgKyAyKTsKKyAgICAgICAgYnJhbmNoKEpNUF9PUENPREUsIGRzdCk7
CisgICAgICAgIG5vcCgpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGptcF9tKGludCBvZmZzZXQs
IFJlZ2lzdGVySUQgYmFzZSkKKyAgICB7CisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1T
Y3JhdGNoKCk7CisgICAgICAgIAorICAgICAgICBpZiAoKG9mZnNldCA8IDApIHx8IChvZmZzZXQg
Pj0gNjQpKSB7CisgICAgICAgICAgICBMb2FkQ29uc3RhbnQob2Zmc2V0LCBzY3IpOworICAgICAg
ICAgICAgYWRkbF9ycihiYXNlLCBzY3IpOworICAgICAgICAgICAgbW92bF9tcihzY3IsIHNjcik7
CisgICAgICAgIH0gZWxzZSBpZiAob2Zmc2V0KSB7CisgICAgICAgICAgICBtb3ZsX21yKG9mZnNl
dCA+PiAyLCBiYXNlLCBzY3IpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbW92bF9t
cihiYXNlLCBzY3IpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBtX2J1ZmZlci5lbnN1
cmVTcGFjZShtYXhJbnN0cnVjdGlvblNpemUgKyAyKTsKKyAgICAgICAgYnJhbmNoKEpNUF9PUENP
REUsIHNjcik7CisgICAgICAgIG5vcCgpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOwor
CisgICAgfQorICAgIAorICAgIEptcFNyYyBqbmUoKQorICAgIHsKKyAgICAgICAgaW50IG1fc2l6
ZSA9IG1fYnVmZmVyLnVuY2hlY2tlZFNpemUoKTsKKyAgICAgICAgYnJhbmNoKEJGX09QQ09ERSwg
MCk7CisgICAgICAgIHJldHVybiBKbXBTcmMobV9zaXplKTsKKyAgICB9CisgICAgCisgICAgSm1w
U3JjIGplKCkKKyAgICB7CisgICAgICAgIGludCBtX3NpemUgPSBtX2J1ZmZlci51bmNoZWNrZWRT
aXplKCk7CisgICAgICAgIGJyYW5jaChCVF9PUENPREUsIDApOworICAgICAgICByZXR1cm4gSm1w
U3JjKG1fc2l6ZSk7CisgICAgfQorICAgIAorICAgIHZvaWQgcmV0KCkKKyAgICB7CisgICAgICAg
IG1fYnVmZmVyLmVuc3VyZVNwYWNlKG1heEluc3RydWN0aW9uU2l6ZSArIDIpOworICAgICAgICBv
bmVTaG9ydE9wKFJUU19PUENPREUsIGZhbHNlKTsKKyAgICB9CisKKyAgICAvLyBBc3NlbWJsZXIg
YWRtaW4gbWV0aG9kczoKKworICAgIEptcERzdCBsYWJlbCgpCisgICAgeworICAgICAgICByZXR1
cm4gSm1wRHN0KG1fYnVmZmVyLnNpemUoKSk7CisgICAgfQorICAgIAorICAgIGludCBzaXplT2ZD
b25zdGFudFBvb2woKQorICAgIHsKKyAgICAgICAgIHJldHVybiBtX2J1ZmZlci5zaXplT2ZDb25z
dGFudFBvb2woKTsKKyAgICB9CisKKyAgICBKbXBEc3QgYWxpZ24oaW50IGFsaWdubWVudCkKKyAg
ICB7CisgICAgICAgIG1fYnVmZmVyLmVuc3VyZVNwYWNlKG1heEluc3RydWN0aW9uU2l6ZSArIDIp
OworICAgICAgICB3aGlsZSAoIW1fYnVmZmVyLmlzQWxpZ25lZChhbGlnbm1lbnQpKSB7CisgICAg
ICAgICAgICBub3AoKTsKKyAgICAgICAgICAgIG1fYnVmZmVyLmVuc3VyZVNwYWNlKG1heEluc3Ry
dWN0aW9uU2l6ZSArIDIpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBsYWJlbCgpOworICAg
IH0KKworICAgIHN0YXRpYyB2b2lkIGxpbmtKdW1wKHZvaWQqIGNvZGUsIEptcFNyYyBmcm9tLCB2
b2lkKiB0bykKKyAgICB7CisgICAgICAgIEFTU0VSVChmcm9tLm1fb2Zmc2V0ICE9IC0xKTsKKwor
ICAgICAgICB1aW50MTZfdCogaW5zdHJ1Y3Rpb25QdHIgPSByZWludGVycHJldF9jYXN0PHVpbnQx
Nl90Kj4gKHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgaW50Pihjb2RlKSArIGZyb20ubV9vZmZz
ZXQpOworICAgICAgICB1aW50MTZfdCBpbnN0cnVjdGlvbiA9ICppbnN0cnVjdGlvblB0cjsKKyAg
ICAgICAgaW50IG9mZnNldEJpdHM7CisgICAgICAgIAorICAgICAgICBpZiAoKChpbnN0cnVjdGlv
biAmIDB4RkYwMCkgPT0gQlRfT1BDT0RFKSB8fCAoKGluc3RydWN0aW9uICYgMHhGRjAwKSA9PSBC
Rl9PUENPREUpKSB7CisgICAgICAgIAorICAgICAgICAgICAgLyogQlQgbGFiZWwgID09PiBCRiAy
IAorICAgICAgICAgICAgICAgbm9wICAgICAgICAgICBMRFIgcmVnCisgICAgICAgICAgICAgICBu
b3AgICAgICAgICAgIGJyYWYgQHJlZworICAgICAgICAgICAgICAgbm9wICAgICAgICAgICBub3AK
KyAgICAgICAgICAgICovCisgICAgICAgICAgICBvZmZzZXRCaXRzICA9ICgodW5zaWduZWQgaW50
KXRvIC0gKHVuc2lnbmVkIGludCljb2RlKSAtIGZyb20ubV9vZmZzZXQgLSA4OworICAgICAgICAg
ICAgCisgICAgICAgICAgICBpbnN0cnVjdGlvbiBePSAweDAyMDI7CisgICAgICAgICAgICAqaW5z
dHJ1Y3Rpb25QdHIrKyA9IGluc3RydWN0aW9uOworICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgaW50IG9mZnNldCA9ICAgKCppbnN0cnVjdGlvblB0ciAmIDB4RkYpOworICAgICAgICAgICAg
dWludDE2X3QqIGFkZHJlc3MgID0gKHVpbnQxNl90KikoKG9mZnNldCA8PCAyKSArICgoKHVuc2ln
bmVkIGludClpbnN0cnVjdGlvblB0ciArIDQpICYofjB4MykpKTsKKyAgICAgICAgICAgICpyZWlu
dGVycHJldF9jYXN0PHVuc2lnbmVkIGludCo+KGFkZHJlc3MpID0gb2Zmc2V0Qml0czsKKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGluc3RydWN0aW9uID0gKDB4MDAyMyB8ICgqaW5zdHJ1
Y3Rpb25QdHIrKyAmIDB4RjAwKSk7CisgICAgICAgICAgICAqaW5zdHJ1Y3Rpb25QdHIrKyA9IGlu
c3RydWN0aW9uOworICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAvKiBNT1YgI2ltbSwgcmVnICA9PiBMRFIgcmVnCisgICAgICAgICAgICAgICAgYnJhZiBAcmVn
ICAgICAgICBicmFmIEByZWcKKyAgICAgICAgICAgICAgICBub3AgICAgICAgICAgICAgIG5vcAor
ICAgICAgICAgICAgKi8KKworICAgICAgICAgICAgQVNTRVJUKCgqKGluc3RydWN0aW9uUHRyICsx
KSAmIDB4MDAyMykgPT0gQlJBRl9PUENPREUpOworCisgICAgICAgICAgICBvZmZzZXRCaXRzICA9
ICgodW5zaWduZWQgaW50KXRvIC0gKHVuc2lnbmVkIGludCljb2RlKSAtIGZyb20ubV9vZmZzZXQg
LSA2OworICAgICAgICAgICAgCisgICAgICAgICAgICBpbnQgb2Zmc2V0VG9QQyA9ICgqaW5zdHJ1
Y3Rpb25QdHIgJiAweEZGKTsgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgdWludDE2X3QqIGFkZHJlc3MgID0gKHVpbnQxNl90KikoKG9mZnNldFRvUEMg
PDwgMikgKyAoKCh1bnNpZ25lZCBpbnQpaW5zdHJ1Y3Rpb25QdHIgKyA0KSAmKH4weDMpKSk7Cisg
ICAgICAgICAgICAqcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBpbnQqPihhZGRyZXNzKSA9IG9m
ZnNldEJpdHM7CisgICAgICAgICAgIAorICAgICAgICAgfQorICAgIH0KKworICAgIHN0YXRpYyB2
b2lkIGxpbmtDYWxsKHZvaWQqIGNvZGUsIEptcFNyYyBmcm9tLCB2b2lkKiB0bykKKyAgICB7Cisg
ICAgICAgIHVpbnQxNl90KiBpbnN0cnVjdGlvblB0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDE2
X3QqPigodW5zaWduZWQgaW50KWNvZGUgKyBmcm9tLm1fb2Zmc2V0KTsKKyAgICAgICAgaW5zdHJ1
Y3Rpb25QdHIgPSBpbnN0cnVjdGlvblB0ciAtMzsKKworICAgICAgICBpbnQgb2Zmc2V0ID0gICAo
KihpbnN0cnVjdGlvblB0cikgJiAweEZGKTsKKyAgICAgICAgCisgICAgICAgIHVpbnQxNl90KiBh
ZGRyZXNzICA9ICh1aW50MTZfdCopKChvZmZzZXQgPDwgMikgKyAoKCh1bnNpZ25lZCBpbnQpaW5z
dHJ1Y3Rpb25QdHIgKyA0KSAmKH4weDMpKSk7CisgICAgICAgICpyZWludGVycHJldF9jYXN0PHVu
c2lnbmVkIGludCo+KGFkZHJlc3MpID0gKHVuc2lnbmVkIGludCl0bzsKKyAgICB9CisgICAgCisg
ICAgc3RhdGljIHZvaWQgbGlua1BvaW50ZXIodm9pZCogY29kZSwgSm1wRHN0IHdoZXJlLCB2b2lk
KiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHVpbnQxNl90KiBpbnN0cnVjdGlvblB0ciA9IHJlaW50
ZXJwcmV0X2Nhc3Q8dWludDE2X3QqPigodW5zaWduZWQgaW50KWNvZGUgKyB3aGVyZS5tX29mZnNl
dCk7CisgICAgICAgIAorICAgICAgICBpbnQgb2Zmc2V0ID0gICAoKmluc3RydWN0aW9uUHRyICYg
MHhGRik7CisgICAgICAgIAorICAgICAgICB1aW50MTZfdCogYWRkcmVzcyAgPSAodWludDE2X3Qq
KSgob2Zmc2V0IDw8IDIpICsgKCgodW5zaWduZWQgaW50KWluc3RydWN0aW9uUHRyICsgNCkgJih+
MHgzKSkpOworICAgICAgICAqcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBpbnQqPihhZGRyZXNz
KSA9ICh1bnNpZ25lZCBpbnQpdmFsdWU7CisgICAgfQorICAgCisgICAgc3RhdGljIHVuc2lnbmVk
IGdldENhbGxSZXR1cm5PZmZzZXQoSm1wU3JjIGNhbGwpCisgICAgeworICAgICAgICBBU1NFUlQo
Y2FsbC5tX29mZnNldCA+PSAwKTsKKyAgICAgICAgcmV0dXJuIGNhbGwubV9vZmZzZXQ7CisgICAg
fQorICAgIAorICAgIHN0YXRpYyBTSDRXb3JkKiBnZXRMZHJJbW1BZGRyZXNzT25Qb29sKFNINFdv
cmQqIGluc24sIHVpbnQzMl90KiBjb25zdFBvb2wpCisgICAgeworICAgICAgICAgcmV0dXJuIHJl
aW50ZXJwcmV0X2Nhc3Q8U0g0V29yZCo+KGNvbnN0UG9vbCArICgqaW5zbiAmIDB4ZmYpKTsKKyAg
ICB9CisgICAgCisgICAgc3RhdGljIFNINFdvcmQgcGF0Y2hDb25zdGFudFBvb2xMb2FkKFNINFdv
cmQgbG9hZCwgaW50IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIChsb2FkICYgfjB4ZmYp
IHwgdmFsdWU7CisgICAgfQorCisgICAgc3RhdGljIFNINFdvcmQgcGxhY2VDb25zdGFudFBvb2xC
YXJyaWVyKGludCBvZmZzZXQpCisgICAgeworICAgICAgICBBU1NFUlQoKChvZmZzZXQgPj4gMSkg
PD0yMDQ3KSAmJiAoKG9mZnNldCA+PiAxKSA+PSAtMjA0OCkpOworICAgICAgICByZXR1cm4gKDBY
QTAwMCB8KG9mZnNldCA+PiAxKSk7CisgICAgfQorICAgIHN0YXRpYyB2b2lkIHBhdGNoQ29uc3Rh
bnRQb29sTG9hZCh2b2lkKiBsb2FkQWRkciwgdm9pZCogY29uc3RQb29sQWRkcikKKyAgICB7Cisg
ICAgICAgIHVpbnQxNl90KiBpbnN0cnVjdGlvblB0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8U0g0V29y
ZCo+KGxvYWRBZGRyKTsKKyAgICAgICAgU0g0V29yZCBpbmRleCA9ICgqaW5zdHJ1Y3Rpb25QdHIg
JiAweGZmKTsKKyAgICAgICAgCisgICAgICAgIEFTU0VSVCgoKCgodW5zaWduZWQgaW50KWNvbnN0
UG9vbEFkZHIgLSAodW5zaWduZWQgaW50KWxvYWRBZGRyKSArIGluZGV4ICogNCkpIDwgMTAyNCk7
CisgICAgICAgIAorICAgICAgICB1aW50MTZfdCBpbnN0cnVjdGlvbiA9ICppbnN0cnVjdGlvblB0
ciAmIDB4ZjAwOworICAgICAgICBpbnQgb2Zmc2V0ID0gKHVuc2lnbmVkIGludCljb25zdFBvb2xB
ZGRyICsgKGluZGV4ICogNCkgLSAoKCh1bnNpZ25lZCBpbnQpaW5zdHJ1Y3Rpb25QdHIgJiB+MHgw
MykgKyA0KTsKKyAgICAKKyAgICAKKyAgICAgICAgaW5zdHJ1Y3Rpb24gfD0gMHhEMDAwOworICAg
ICAgICBvZmZzZXQgJj0gMHgwM2ZmOworICAgICAgICBpbnN0cnVjdGlvbiB8PSAob2Zmc2V0ID4+
IDIpOworICAgICAgICAqaW5zdHJ1Y3Rpb25QdHIgPSBpbnN0cnVjdGlvbjsKKyAgICB9CisKKyAg
ICBzdGF0aWMgdm9pZCByZXBhdGNoUG9pbnRlcih2b2lkKiB3aGVyZSwgdm9pZCogdmFsdWUpCisg
ICAgeworICAgICAgICBwYXRjaFBvaW50ZXIod2hlcmUsIHZhbHVlKTsgICAgCisgICAgfQorICAg
IAorICAgIHN0YXRpYyB2b2lkIHJlcGF0Y2hMb2FkUHRyVG9MRUEodm9pZCogd2hlcmUpCisgICAg
eworICAgICAgICB1aW50MTZfdCogbG9hZE9wID0gcmVpbnRlcnByZXRfY2FzdDx1aW50MTZfdCo+
KHdoZXJlKSArIDI7CisKKyAgICAgICAgKmxvYWRPcCA9ICpsb2FkT3AgfCAweDE7CisgICAgICAg
IEV4ZWN1dGFibGVBbGxvY2F0b3I6OmNhY2hlRmx1c2gobG9hZE9wLCBzaXplb2YodWludDE2X3Qp
KTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIHZvaWQgcmVwYXRjaEludDMyKHZvaWQqIHdoZXJl
LCBpbnQzMl90IHZhbHVlKQorICAgIHsKKyAgICAgICAgdWludDE2X3QqIGluc3RydWN0aW9uUHRy
ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50MTZfdCo+KHdoZXJlKTsKKyAgICAgICAgCisgICAgICAg
IGludCBvZmZzZXQgPSAgICgqaW5zdHJ1Y3Rpb25QdHIgJiAweEZGKTsKKyAgICAgICAgCisgICAg
ICAgIHVpbnQxNl90KiBhZGRyZXNzICA9ICh1aW50MTZfdCopKChvZmZzZXQgPDwgMikgKyAoKCh1
bnNpZ25lZCBpbnQpd2hlcmUgKyA0KSAmKH4weDMpKSk7CisgICAgICAgICpyZWludGVycHJldF9j
YXN0PHVuc2lnbmVkIGludCo+KGFkZHJlc3MpID0gdmFsdWU7CisgICAgfQorCisgICAgc3RhdGlj
IHZvaWQgcmVsaW5rQ2FsbCh2b2lkKiBmcm9tLCB2b2lkKiB0bykKKyAgICB7CisgICAgICAgIHVp
bnQxNl90KiBpbnN0cnVjdGlvblB0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDE2X3QqPihmcm9t
KTsKKyAgICAgICAgaW5zdHJ1Y3Rpb25QdHIgPSBpbnN0cnVjdGlvblB0ciAtIDM7CisgICAgICAg
IAorICAgICAgICBpbnQgb2Zmc2V0ID0gICAoKmluc3RydWN0aW9uUHRyICYgMHhGRik7CisgICAg
ICAgIAorICAgICAgICB1aW50MTZfdCogYWRkcmVzcyAgPSAodWludDE2X3QqKSgob2Zmc2V0IDw8
IDIpICsgKCgodW5zaWduZWQgaW50KWluc3RydWN0aW9uUHRyICsgNCkgJih+MHgzKSkpOworICAg
ICAgICAqcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBpbnQqPihhZGRyZXNzKSA9ICh1bnNpZ25l
ZCBpbnQpdG87CisgICAgfQorICAgIAorICAgIHN0YXRpYyB2b2lkIHJlbGlua0p1bXAodm9pZCog
ZnJvbSwgdm9pZCogdG8pCisgICAgeworICAgICAgICB1aW50MTZfdCogaW5zdHJ1Y3Rpb25QdHIg
PSByZWludGVycHJldF9jYXN0PHVpbnQxNl90Kj4gKGZyb20pOworICAgICAgICB1aW50MTZfdCBp
bnN0cnVjdGlvbiA9ICppbnN0cnVjdGlvblB0cjsKKyAgICAgICAgaW50IG9mZnNldEJpdHM7Cisg
ICAgICAgIHVpbnQxNl90KiBhZGRyZXNzOworICAgICAgICAKKyAgICAgICAgaWYgKCgoKmluc3Ry
dWN0aW9uUHRyICYgMHhGRjAwKSA9PSBCVF9PUENPREUpIHx8ICgoKmluc3RydWN0aW9uUHRyICYg
MHhGRjAwKSA9PSBCRl9PUENPREUpKSB7CisKKyAgICAgICAgICAgIG9mZnNldEJpdHMgID0gKCh1
bnNpZ25lZCBpbnQpdG8gLSAodW5zaWduZWQgaW50KWZyb20pIC0gODsKKyAgICAgICAgICAgIGlu
c3RydWN0aW9uUHRyKys7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBpbnQgb2Zmc2V0
ID0gICAoKmluc3RydWN0aW9uUHRyICYgMHhGRik7CisgICAgICAgICAgICBhZGRyZXNzICA9ICh1
aW50MTZfdCopKChvZmZzZXQgPDwgMikgKyAoKCh1bnNpZ25lZCBpbnQpaW5zdHJ1Y3Rpb25QdHIg
KyA0KSAmKH4weDMpKSk7CisgICAgICAgICAgICAqcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBp
bnQqPihhZGRyZXNzKSA9IG9mZnNldEJpdHM7CisgICAgICAgIAorICAgICAgICAgICAgaW5zdHJ1
Y3Rpb24gPSAoMHgwMDIzIHwgKCppbnN0cnVjdGlvblB0cisrICYgMHhGMDApKTsKKyAgICAgICAg
ICAgICppbnN0cnVjdGlvblB0cisrID0gaW5zdHJ1Y3Rpb247CisgICAgICAgICAgICAKKyAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgCisgICAgICAgICAgICBBU1NFUlQoKCooaW5zdHJ1
Y3Rpb25QdHIgKzEpICYgMHgwMDIzKSA9PSBCUkFGX09QQ09ERSk7CisgICAgICAgICAgICBvZmZz
ZXRCaXRzICA9ICgodW5zaWduZWQgaW50KXRvIC0gKHVuc2lnbmVkIGludClmcm9tKSAtIDY7Cisg
ICAgICAgICAgICBpbnQgb2Zmc2V0VG9QQyA9ICgqaW5zdHJ1Y3Rpb25QdHIgJiAweEZGKTsKKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGFkZHJlc3Mg
ID0gKHVpbnQxNl90KikoKG9mZnNldFRvUEMgPDwgMikgKyAoKCh1bnNpZ25lZCBpbnQpaW5zdHJ1
Y3Rpb25QdHIgKyA0KSAmKH4weDMpKSk7CisgICAgICAgICAgICAqcmVpbnRlcnByZXRfY2FzdDx1
bnNpZ25lZCBpbnQqPihhZGRyZXNzKSA9IG9mZnNldEJpdHM7CisKKyAgICAgICAgIH0KKyAgICB9
CisgICAgCisgICAgLy8gTGlua2luZyAmIHBhdGNoaW5nOgorCisgICAgdm9pZCBsaW5rSnVtcChK
bXBTcmMgZnJvbSwgSm1wRHN0IHRvKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHRvLm1fb2Zmc2V0
ICE9IC0xKTsKKyAgICAgICAgQVNTRVJUKGZyb20ubV9vZmZzZXQgIT0gLTEpOworICAgICAgICAK
KyAgICAgICAgdWludDE2X3QqIGluc3RydWN0aW9uUHRyID0gcmVpbnRlcnByZXRfY2FzdDx1aW50
MTZfdCo+ICgocmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBpbnQ+KGRhdGEoKSkgKyBmcm9tLm1f
b2Zmc2V0KSk7CisgICAgICAgIHVpbnQxNl90IGluc3RydWN0aW9uID0gKmluc3RydWN0aW9uUHRy
OworICAgICAgICBpbnQgb2Zmc2V0Qml0czsKKyAgICAgICAgCisgICAgICAgIGlmICgoKGluc3Ry
dWN0aW9uICYgMHhGRjAwKSA9PSBCVF9PUENPREUpIHx8ICgoaW5zdHJ1Y3Rpb24gJiAweEZGMDAp
ID09IEJGX09QQ09ERSkpIHsKKyAgICAgICAgCisgICAgICAgICAgICAvKiBCVCBsYWJlbCAgICA9
PiBCRiAyCisgICAgICAgICAgICAgICBub3AgICAgICAgICAgICBMRFIgcmVnCisgICAgICAgICAg
ICAgICBub3AgICAgICAgICAgICBicmFmIEByZWcKKyAgICAgICAgICAgICAgIG5vcCAgICAgICAg
ICAgIG5vcAorICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIG9mZnNldEJpdHMgID0gKHRvLm1f
b2Zmc2V0IC0gZnJvbS5tX29mZnNldCkgLSA4OworICAgICAgICAgICAgaW5zdHJ1Y3Rpb24gXj0g
MHgwMjAyOworICAgICAgICAgICAgKmluc3RydWN0aW9uUHRyKysgPSBpbnN0cnVjdGlvbjsKKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICgoKmluc3RydWN0aW9uUHRyICYgMHhGMDAw
KSA9PSAweEUwMDApIHsKKyAgICAgICAgICAgICAgICBTSDRXb3JkKiBhZGRyID0gZ2V0TGRySW1t
QWRkcmVzc09uUG9vbChpbnN0cnVjdGlvblB0ciwgbV9idWZmZXIucG9vbEFkZHJlc3MoKSk7Cisg
ICAgICAgICAgICAgICAgKnJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgaW50Kj4oYWRkcikgPSBv
ZmZzZXRCaXRzOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpbnQgb2Zm
c2V0ID0gICAoKmluc3RydWN0aW9uUHRyICYgMHhGRik7CisgICAgICAgICAgICAgICAgdWludDE2
X3QqIGFkZHJlc3MgID0gKHVpbnQxNl90KikoKG9mZnNldCA8PCAyKSArICgoKHVuc2lnbmVkIGlu
dClpbnN0cnVjdGlvblB0ciArIDQpICYofjB4MykpKTsKKyAgICAgICAgICAgICAgICAqcmVpbnRl
cnByZXRfY2FzdDx1bnNpZ25lZCBpbnQqPihhZGRyZXNzKSA9IG9mZnNldEJpdHM7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgCisgICAgICAgICAgICBpbnN0cnVjdGlvbiA9ICgweDAwMjMg
fCAoKmluc3RydWN0aW9uUHRyKysgJiAweEYwMCkpOworICAgICAgICAgICAgKmluc3RydWN0aW9u
UHRyKysgPSBpbnN0cnVjdGlvbjsKKyAgICAgICAgICAgICAKKyAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgLyogTU9WICMgaW1tLCByZWcgID0+IExEUiByZWcK
KyAgICAgICAgICAgICAgICBicmFmIEByZWcgICAgICAgICAgYnJhZiBAcmVnCisgICAgICAgICAg
ICAgICAgbm9wICAgICAgICAgICAgICAgIG5vcAorICAgICAgICAgICAgKi8KKyAgICAgICAgICAg
IAorICAgICAgICAgICAgQVNTRVJUKCgqKGluc3RydWN0aW9uUHRyICsxKSAmIDB4MDAyMykgPT0g
QlJBRl9PUENPREUpOworICAgICAgICAgICAgb2Zmc2V0Qml0cyAgPSAodG8ubV9vZmZzZXQgLSBm
cm9tLm1fb2Zmc2V0KSAtIDY7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGluc3RydWN0aW9u
ID0gKmluc3RydWN0aW9uUHRyOworICAgICAgICAgICAgaW50IG9mZnNldFRvUEMgPSAoKmluc3Ry
dWN0aW9uUHRyICYgMHhGRik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICgoaW5zdHJ1
Y3Rpb24gICYgMHhGMDAwKSA9PSAweEUwMDApIHsKKyAgICAgICAgICAgICAgICBTSDRXb3JkKiBh
ZGRyID0gZ2V0TGRySW1tQWRkcmVzc09uUG9vbChpbnN0cnVjdGlvblB0ciwgbV9idWZmZXIucG9v
bEFkZHJlc3MoKSk7CisgICAgICAgICAgICAgICAgKnJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQg
aW50Kj4oYWRkcikgPSBvZmZzZXRCaXRzOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgdWludDE2X3QqIGFkZHJlc3MgID0gKHVpbnQx
Nl90KikoKG9mZnNldFRvUEMgPDwgMikgKyAoKCh1bnNpZ25lZCBpbnQpaW5zdHJ1Y3Rpb25QdHIg
KyA0KSAmKH4weDMpKSk7CisgICAgICAgICAgICAgICAgKnJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWdu
ZWQgaW50Kj4oYWRkcmVzcykgPSBvZmZzZXRCaXRzOworICAgICAgICAgICAgfQorICAgICAgICAg
fQorICAgICB9CisKKyAgICBzdGF0aWMgdm9pZCogZ2V0UmVsb2NhdGVkQWRkcmVzcyh2b2lkKiBj
b2RlLCBKbXBTcmMganVtcCkKKyAgICB7CisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0
PHZvaWQqPihyZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGludD4oY29kZSkgKyBqdW1wLm1fb2Zm
c2V0KTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCogZ2V0UmVsb2NhdGVkQWRkcmVzcyh2b2lk
KiBjb2RlLCBKbXBEc3QgZGVzdGluYXRpb24pCisgICAgeworICAgICAgICBBU1NFUlQoZGVzdGlu
YXRpb24ubV9vZmZzZXQgIT0gLTEpOworCisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0
PHZvaWQqPihyZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGludD4oY29kZSkgKyBkZXN0aW5hdGlv
bi5tX29mZnNldCk7CisgICAgfQorCisgICAgc3RhdGljIGludCBnZXREaWZmZXJlbmNlQmV0d2Vl
bkxhYmVscyhKbXBEc3Qgc3JjLCBKbXBEc3QgZHN0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGRz
dC5tX29mZnNldCAtIHNyYy5tX29mZnNldDsKKyAgICB9CisKKyAgICBzdGF0aWMgaW50IGdldERp
ZmZlcmVuY2VCZXR3ZWVuTGFiZWxzKEptcERzdCBzcmMsIEptcFNyYyBkc3QpCisgICAgeworICAg
ICAgICByZXR1cm4gZHN0Lm1fb2Zmc2V0IC0gc3JjLm1fb2Zmc2V0OworICAgIH0KKyAgICAKKyAg
ICBzdGF0aWMgaW50IGdldERpZmZlcmVuY2VCZXR3ZWVuTGFiZWxzKEptcFNyYyBzcmMsIEptcERz
dCBkc3QpCisgICAgeworICAgICAgICByZXR1cm4gZHN0Lm1fb2Zmc2V0IC0gc3JjLm1fb2Zmc2V0
OworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIHBhdGNoUG9pbnRlcih2b2lkKiBjb2RlLCBKbXBE
c3Qgd2hlcmUsIHZvaWQqIHZhbHVlKQorICAgIHsKKyAgICAgICAgcGF0Y2hQb2ludGVyKHJlaW50
ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgaW50Kj4oY29kZSkgKyB3aGVyZS5tX29mZnNldCwgdmFsdWUp
OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgdm9pZCBwYXRjaFBvaW50ZXIodm9pZCogY29kZSwg
dm9pZCogdmFsdWUpCisgICAgeworICAgICAgICBwYXRjaEludDMyKGNvZGUsIHJlaW50ZXJwcmV0
X2Nhc3Q8dWludDMyX3Q+KHZhbHVlKSk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgcGF0Y2hJ
bnQzMih2b2lkKiBjb2RlLCB1aW50MzJfdCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHVpbnQxNl90
KiBpbnN0cnVjdGlvblB0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDE2X3QqPihjb2RlKTsKKyAg
ICAgICAgCisgICAgICAgIGludCBvZmZzZXQgPSAgICgqaW5zdHJ1Y3Rpb25QdHIgJiAweEZGKTsK
KyAgICAgICAgCisgICAgICAgIHVpbnQxNl90KiBhZGRyZXNzICA9ICh1aW50MTZfdCopKChvZmZz
ZXQgPDwgMikgKyAoKCh1bnNpZ25lZCBpbnQpY29kZSArIDQpICYofjB4MykpKTsKKyAgICAgICAg
KnJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgaW50Kj4oYWRkcmVzcykgPSB2YWx1ZTsKKyAgICB9
CisgICAgCisgICAgdm9pZCogZXhlY3V0YWJsZUNvcHkoRXhlY3V0YWJsZVBvb2wqIGFsbG9jYXRv
cikKKyAgICB7CisgICAgICAgIHZvaWQqIGNvcHkgPSBtX2J1ZmZlci5leGVjdXRhYmxlQ29weShh
bGxvY2F0b3IpOworICAgICAgICBBU1NFUlQoY29weSk7CisgICAgICAgIHJldHVybiBjb3B5Owor
ICAgIH0KKworICAgIHZvaWQgcHJlZml4KHVpbnQxNl90IHByZSkKKyAgICB7CisgICAgICAgIG1f
YnVmZmVyLnB1dEJ5dGUocHJlKTsKKyAgICB9CisKKyAgICB2b2lkIG9uZVNob3J0T3AodWludDE2
X3Qgb3Bjb2RlLCBib29sIGNoZWNrc2l6ZSA9IHRydWUpCisgICAgeworICAgICAgICBpZiAoY2hl
Y2tzaXplKQorICAgICAgICAgICAgbV9idWZmZXIuZW5zdXJlU3BhY2UobWF4SW5zdHJ1Y3Rpb25T
aXplKTsKKyAgICAgICAgbV9idWZmZXIucHV0U2hvcnRVbmNoZWNrZWQob3Bjb2RlKTsKKyAgICB9
CisKKyAgICB2b2lkIGVuc3VyZVNwYWNlKGludCBzcGFjZSkKKyAgICB7CisgICAgICAgIG1fYnVm
ZmVyLmVuc3VyZVNwYWNlKHNwYWNlKTsKKyAgICB9CisKKyAgICB2b2lkIGVuc3VyZVNwYWNlKGlu
dCBpbnNuU3BhY2UsIGludCBjb25zdFNwYWNlKQorICAgIHsKKyAgICAgICAgbV9idWZmZXIuZW5z
dXJlU3BhY2UoaW5zblNwYWNlLCBjb25zdFNwYWNlKTsKKyAgICB9CisKKyAgICAvLyBBZG1pbmlz
dHJhdGl2ZSBtZXRob2RzOgorCisgICAgdm9pZCogZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fYnVm
ZmVyLmRhdGEoKTsgfQorICAgIGludCBzaXplKCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX2J1
ZmZlci5zaXplKCk7CisgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgU0g0QnVmZmVyIG1f
YnVmZmVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoQVNT
RU1CTEVSKSAmJiBDUFUoU0g0KQorCisjZW5kaWYgLy8gU0g0QXNzZW1ibGVyX2gKZGlmZiAtLWdp
dCBhL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmggYi9KYXZhU2NyaXB0
Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5oCmluZGV4IGJlMjBjNzMuLjU3ZjAwZDMgMTAw
NjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmgKKysrIGIv
SmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaApAQCAtNDcsNiArNDcsMTMg
QEAKICNpbmNsdWRlIDxzeXMvY2FjaGVjdGwuaD4KICNlbmRpZgogCisjaWYgQ1BVKFNINCkgJiYg
T1MoTElOVVgpCisjaW5jbHVkZSA8YXNtL2NhY2hlY3RsLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0
ZC5oPgorI2luY2x1ZGUgPHN5cy9zeXNjYWxsLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5k
aWYKKwogI2lmIE9TKFdJTkNFKQogLy8gRnJvbSBwa2Z1bmNzLmggKHByaXZhdGUgaGVhZGVyIGZp
bGUgZnJvbSB0aGUgUGxhdGZvcm0gQnVpbGRlcikKICNkZWZpbmUgQ0FDSEVfU1lOQ19BTEwgMHgw
N0YKQEAgLTMwOSw2ICszMTYsMzAgQEAgcHVibGljOgogICAgICAgICBJTWVtQ2FjaGUxX0NsZWFy
Q2FjaGUobWVtQ2FjaGUuZ2V0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyPihjb2RlKSwgc2l6
ZSwgTUVNU1BBQ0VfQ0FDSEVfRkxVU0gsIE1FTVNQQUNFX0RBVEFDQUNIRSk7CiAgICAgICAgIElN
ZW1DYWNoZTFfQ2xlYXJDYWNoZShtZW1DYWNoZS5nZXQoKSwgcmVpbnRlcnByZXRfY2FzdDx1aW50
MzI+KGNvZGUpLCBzaXplLCBNRU1TUEFDRV9DQUNIRV9JTlZBTElEQVRFLCBNRU1TUEFDRV9JTlNU
Q0FDSEUpOwogICAgIH0KKyNlbGlmIENQVShTSDQpICYmIE9TKExJTlVYKQorCisjaWZuZGVmIF9f
TlJfY2FjaGVmbHVzaAorI2RlZmluZSBfX05SX2NhY2hlZmx1c2ggX19OUl9tb2RpZnlfbGR0Cisj
ZW5kaWYKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGRlZmF1bHRMaW51eFBhZ2VTaXplID0gNDA5
NjsKKworICAgIHN0YXRpYyB2b2lkIGNhY2hlRmx1c2godm9pZCogY29kZSwgc2l6ZV90IHNpemUp
CisgICAgeworICAgICAgICB1bnNpZ25lZCBpbnQgYSwgYjsKKyAgICAgICAgYSA9ICh1bnNpZ25l
ZCBpbnQpY29kZSAmIH4oZGVmYXVsdExpbnV4UGFnZVNpemUgLSAxKTsKKyAgICAgICAgYiA9ICgo
dW5zaWduZWQgaW50KWNvZGUgKyBzaXplICsgKGRlZmF1bHRMaW51eFBhZ2VTaXplIC0gMSkpICYg
fihkZWZhdWx0TGludXhQYWdlU2l6ZSAtIDEpOworCisgICAgICAgIGludCByZXMgPSBzeXNjYWxs
KF9fTlJfY2FjaGVmbHVzaCwgYSwgZGVmYXVsdExpbnV4UGFnZVNpemUsIENBQ0hFRkxVU0hfRF9X
QiB8IENBQ0hFRkxVU0hfSSk7CisgICAgICAgIEFTU0VSVCghcmVzKTsKKworICAgICAgICB3aGls
ZSAoYiAtIGEgPiBkZWZhdWx0TGludXhQYWdlU2l6ZSkgeworICAgICAgICAgICAgYSA9IGEgKyBk
ZWZhdWx0TGludXhQYWdlU2l6ZTsKKyAgICAgICAgICAgIHJlcyA9IHN5c2NhbGwoX19OUl9jYWNo
ZWZsdXNoLCBhLCBkZWZhdWx0TGludXhQYWdlU2l6ZSwgQ0FDSEVGTFVTSF9EX1dCIHwgQ0FDSEVG
TFVTSF9JKTsKKworICAgICAgICAgICAgQVNTRVJUKCFyZXMpOworICAgICAgICB9CisgICAgfQog
I2Vsc2UKICAgICAjZXJyb3IgIlRoZSBjYWNoZUZsdXNoIHN1cHBvcnQgaXMgbWlzc2luZyBvbiB0
aGlzIHBsYXRmb3JtLiIKICNlbmRpZgpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VC5oIGIvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCmluZGV4IDkwN2E3NzRiYi4uYjc3MmZmMyAx
MDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCisrKyBiL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVQuaApAQCAtNDk0LDYgKzQ5NCw1NCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
c3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldE1ldGhvZENoZWNrUHJvdG9TdHJ1Y3QgPSA1MjsK
ICAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldE1ldGhvZENoZWNrUHV0RnVuY3Rp
b24gPSA4NDsKICNlbmRpZgorI2VsaWYgQ1BVKFNINCkKKyAgICAgICAvLyBUaGVzZSBhcmNoaXRl
Y3R1cmUgc3BlY2lmaWMgdmFsdWUgYXJlIHVzZWQgdG8gZW5hYmxlIHBhdGNoaW5nIC0gc2VlIGNv
bW1lbnQgb24gb3BfcHV0X2J5X2lkLgorICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zm
c2V0UHV0QnlJZEV4dGVybmFsTG9hZCA9IDE4OworICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBh
dGNoT2Zmc2V0R2V0QnlJZFN0cnVjdHVyZSA9IDY7CisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQg
cGF0Y2hMZW5ndGhQdXRCeUlkRXh0ZXJuYWxMb2FkID0gNjsKKyAgICAgICAgc3RhdGljIGNvbnN0
IGludCBwYXRjaExlbmd0aFB1dEJ5SWRFeHRlcm5hbExvYWRQcmVmaXggPSAwOworICAgICAgICBz
dGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0UHV0QnlJZFByb3BlcnR5TWFwT2Zmc2V0ID0gMjQ7
CisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRQdXRCeUlkU3RydWN0dXJlID0g
NjsKKyAgICAgICAgLy8gVGhlc2UgYXJjaGl0ZWN0dXJlIHNwZWNpZmljIHZhbHVlIGFyZSB1c2Vk
IHRvIGVuYWJsZSBwYXRjaGluZyAtIHNlZSBjb21tZW50IG9uIG9wX2dldF9ieV9pZC4KKyAgICAg
ICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldEdldEJ5SWRCcmFuY2hUb1Nsb3dDYXNlID0g
MTA7CisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRHZXRCeUlkRXh0ZXJuYWxM
b2FkID0gMTg7CisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hMZW5ndGhHZXRCeUlkRXh0
ZXJuYWxMb2FkID0gNjsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaExlbmd0aEdldEJ5
SWRFeHRlcm5hbExvYWRQcmVmaXggPSAwOworICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNo
T2Zmc2V0R2V0QnlJZFByb3BlcnR5TWFwT2Zmc2V0ID0gMjQ7CisgICAgICAgIHN0YXRpYyBjb25z
dCBpbnQgcGF0Y2hPZmZzZXRHZXRCeUlkUHV0UmVzdWx0ID0gMzY7CisKKyAgICAgICAgLy8gc2Vx
dWVuY2VPcENhbGwKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBzZXF1ZW5jZU9wQ2FsbEluc3Ry
dWN0aW9uU3BhY2UgPSAxMjsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBzZXF1ZW5jZU9wQ2Fs
bENvbnN0YW50U3BhY2UgPSAyOworICAgICAgICAvLyBzZXF1ZW5jZU1ldGhvZENoZWNrCisgICAg
ICAgIHN0YXRpYyBjb25zdCBpbnQgc2VxdWVuY2VNZXRob2RDaGVja0luc3RydWN0aW9uU3BhY2Ug
PSA0MDsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBzZXF1ZW5jZU1ldGhvZENoZWNrQ29uc3Rh
bnRTcGFjZSA9IDY7CisgICAgICAgIC8vIHNlcXVlbmNlR2V0QnlJZEhvdFBhdGgKKyAgICAgICAg
c3RhdGljIGNvbnN0IGludCBzZXF1ZW5jZUdldEJ5SWRIb3RQYXRoSW5zdHJ1Y3Rpb25TcGFjZSA9
IDM2OworICAgICAgICBzdGF0aWMgY29uc3QgaW50IHNlcXVlbmNlR2V0QnlJZEhvdFBhdGhDb25z
dGFudFNwYWNlID0gNTsKKyAgICAgICAgLy8gc2VxdWVuY2VHZXRCeUlkU2xvd0Nhc2UKKyAgICAg
ICAgc3RhdGljIGNvbnN0IGludCBzZXF1ZW5jZUdldEJ5SWRTbG93Q2FzZUluc3RydWN0aW9uU3Bh
Y2UgPSAyNjsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBzZXF1ZW5jZUdldEJ5SWRTbG93Q2Fz
ZUNvbnN0YW50U3BhY2UgPSAyOworICAgICAgICAvLyBzZXF1ZW5jZVB1dEJ5SWQKKyAgICAgICAg
c3RhdGljIGNvbnN0IGludCBzZXF1ZW5jZVB1dEJ5SWRJbnN0cnVjdGlvblNwYWNlID0gMzY7Cisg
ICAgICAgIHN0YXRpYyBjb25zdCBpbnQgc2VxdWVuY2VQdXRCeUlkQ29uc3RhbnRTcGFjZSA9IDU7
CisKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldEdldEJ5SWRQcm9wZXJ0eU1h
cE9mZnNldDEgPSAyNDsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldEdldEJ5
SWRQcm9wZXJ0eU1hcE9mZnNldDIgPSAzMDsKKworICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBh
dGNoT2Zmc2V0UHV0QnlJZFByb3BlcnR5TWFwT2Zmc2V0MSA9IDI0OworICAgICAgICBzdGF0aWMg
Y29uc3QgaW50IHBhdGNoT2Zmc2V0UHV0QnlJZFByb3BlcnR5TWFwT2Zmc2V0MiA9IDMwOworCisj
aWYgRU5BQkxFKE9QQ09ERV9TQU1QTElORykKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRj
aE9mZnNldEdldEJ5SWRTbG93Q2FzZUNhbGwgPSAwOyAvLyBGSU1YRQorI2Vsc2UKKyAgICAgICAg
c3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldEdldEJ5SWRTbG93Q2FzZUNhbGwgPSAyMjsKKyNl
bmRpZgorICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0T3BDYWxsQ29tcGFyZVRv
SnVtcCA9IDQ7CisKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldE1ldGhvZENo
ZWNrUHJvdG9PYmogPSAxMjsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldE1l
dGhvZENoZWNrUHJvdG9TdHJ1Y3QgPSAyMDsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRj
aE9mZnNldE1ldGhvZENoZWNrUHV0RnVuY3Rpb24gPSAzMjsKICNlbHNlCiAjZXJyb3IgIkpTVkFM
VUUzMl82NCBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgcGxhdGZvcm0uIgogI2VuZGlmCkBAIC03MTQs
NiArNzYyLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAjaWYgKGRlZmluZWQoQVNTRU1CTEVSX0hBU19D
T05TVEFOVF9QT09MKSAmJiBBU1NFTUJMRVJfSEFTX0NPTlNUQU5UX1BPT0wpCiAjZGVmaW5lIEJF
R0lOX1VOSU5URVJSVVBURURfU0VRVUVOQ0UobmFtZSkgZG8geyBiZWdpblVuaW50ZXJydXB0ZWRT
ZXF1ZW5jZShuYW1lICMjIEluc3RydWN0aW9uU3BhY2UsIG5hbWUgIyMgQ29uc3RhbnRTcGFjZSk7
IH0gd2hpbGUgKGZhbHNlKQogI2RlZmluZSBFTkRfVU5JTlRFUlJVUFRFRF9TRVFVRU5DRShuYW1l
KSBkbyB7IGVuZFVuaW50ZXJydXB0ZWRTZXF1ZW5jZShuYW1lICMjIEluc3RydWN0aW9uU3BhY2Us
IG5hbWUgIyMgQ29uc3RhbnRTcGFjZSk7IH0gd2hpbGUgKGZhbHNlKQorI2lmIENQVShTSDQpCisj
ZGVmaW5lIEVORF9VTklOVEVSUlVQVEVEX1NFUVVFTkNFUyhuYW1lLCBleHRyYUksIGV4dHJhQykg
ZW5kVW5pbnRlcnJ1cHRlZFNlcXVlbmNlKG5hbWUgIyMgSW5zdHJ1Y3Rpb25TcGFjZSArIGV4dHJh
SSwgbmFtZSAjIyBDb25zdGFudFNwYWNlICsgZXh0cmFDKQorI2VuZGlmCiAKICAgICAgICAgdm9p
ZCBiZWdpblVuaW50ZXJydXB0ZWRTZXF1ZW5jZShpbnQsIGludCk7CiAgICAgICAgIHZvaWQgZW5k
VW5pbnRlcnJ1cHRlZFNlcXVlbmNlKGludCwgaW50KTsKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRJbmxpbmVNZXRob2RzLmggYi9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5l
TWV0aG9kcy5oCmluZGV4IDM5Y2E0YTUuLjBjNTMwZTEgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRJbmxpbmVNZXRob2RzLmgKKysrIGIvSmF2YVNjcmlwdENvcmUvaml0L0pJVElu
bGluZU1ldGhvZHMuaApAQCAtMTA5LDYgKzEwOSwxMyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklU
OjpiZWdpblVuaW50ZXJydXB0ZWRTZXF1ZW5jZShpbnQgaW5zblNwYWNlLCBpbnQgY29uc3RTcGFj
ZQogCiAgICAgZW5zdXJlU3BhY2UoaW5zblNwYWNlLCBjb25zdFNwYWNlKTsKIAorI2VsaWYgQ1BV
KFNINCkKKyNpZm5kZWYgTkRFQlVHCisgICAgaW5zblNwYWNlICs9IHNpemVvZihTSDRXb3JkKTsK
KyAgICBjb25zdFNwYWNlICs9IHNpemVvZih1aW50NjRfdCk7CisjZW5kaWYKKworICAgIG1fYXNz
ZW1ibGVyLmVuc3VyZVNwYWNlKGluc25TcGFjZSAgKyBtX2Fzc2VtYmxlci5tYXhJbnN0cnVjdGlv
blNpemUgKyAyLCBjb25zdFNwYWNlICsgOCk7CiAjZW5kaWYKIAogI2lmIGRlZmluZWQoQVNTRU1C
TEVSX0hBU19DT05TVEFOVF9QT09MKSAmJiBBU1NFTUJMRVJfSEFTX0NPTlNUQU5UX1BPT0wKQEAg
LTE1Myw2ICsxNjAsMjIgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6cmVzdG9yZVJldHVybkFk
ZHJlc3NCZWZvcmVSZXR1cm4oQWRkcmVzcyBhZGRyZXNzKQogewogICAgIGxvYWRQdHIoYWRkcmVz
cywgbGlua1JlZ2lzdGVyKTsKIH0KKyNlbGlmIENQVShTSDQpCisKK0FMV0FZU19JTkxJTkUgdm9p
ZCBKSVQ6OnByZXNlcnZlUmV0dXJuQWRkcmVzc0FmdGVyQ2FsbChSZWdpc3RlcklEIHJlZykKK3sK
KyAgICBtX2Fzc2VtYmxlci5zdHNwcihyZWcpOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgSklU
OjpyZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihSZWdpc3RlcklEIHJlZykKK3sKKyAg
ICBtX2Fzc2VtYmxlci5sZHNwcihyZWcpOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpy
ZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihBZGRyZXNzIGFkZHJlc3MpCit7CisgICAg
bG9hZFB0ckxpbmtSZWcoYWRkcmVzcyk7Cit9CiAKICNlbGlmIENQVShNSVBTKQogCkBAIC0yMDMs
NiArMjI2LDggQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6cmVzdG9yZUFyZ3VtZW50UmVmZXJl
bmNlRm9yVHJhbXBvbGluZSgpCiAgICAgYWRkUHRyKEltbTMyKHNpemVvZih2b2lkKikpLCBzdGFj
a1BvaW50ZXJSZWdpc3RlciwgZmlyc3RBcmd1bWVudFJlZ2lzdGVyKTsKICNlbGlmIENQVShBUk0p
CiAgICAgbW92ZShzdGFja1BvaW50ZXJSZWdpc3RlciwgZmlyc3RBcmd1bWVudFJlZ2lzdGVyKTsK
KyNlbGlmIENQVShTSDQpCisgICAgbW92ZShzdGFja1BvaW50ZXJSZWdpc3RlciwgZmlyc3RBcmd1
bWVudFJlZ2lzdGVyKTsKICNlbmRpZgogICAgIC8vIEluIHRoZSB0cmFtcG9saW5lIG9uIHg4Ni02
NCwgdGhlIGZpcnN0IGFyZ3VtZW50IHJlZ2lzdGVyIGlzIG5vdCBvdmVyd3JpdHRlbi4KIH0KZGlm
ZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwIGIvSmF2YVNj
cmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAKaW5kZXggNGFkOTc0Yy4uOGI5ZDcyOCAx
MDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAKKysrIGIv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAKQEAgLTI0NSw3ICsyNDUsMjkg
QEAgSklUOjpMYWJlbCBKSVQ6OnByaXZhdGVDb21waWxlQ1RJTmF0aXZlQ2FsbChKU0dsb2JhbERh
dGEqIGdsb2JhbERhdGEsIGJvb2wgaXNDb24KICAgICBjYWxsKEFkZHJlc3MocmVnVDIsIGV4ZWN1
dGFibGVPZmZzZXRUb0Z1bmN0aW9uKSk7CiAKICAgICByZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9y
ZVJldHVybihyZWdUMyk7CisjZWxpZiBDUFUoU0g0KQorICAgIC8vIExvYWQgY2FsbGVyIGZyYW1l
J3Mgc2NvcGUgY2hhaW4gaW50byB0aGlzIGNhbGxmcmFtZSBzbyB0aGF0IHdoYXRldmVyIHdlIGNh
bGwgY2FuCisgICAgLy8gZ2V0IHRvIGl0cyBnbG9iYWwgZGF0YS4KKyAgICBlbWl0R2V0RnJvbUNh
bGxGcmFtZUhlYWRlclB0cihSZWdpc3RlckZpbGU6OkNhbGxlckZyYW1lLCByZWdUMik7CisgICAg
ZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoUmVnaXN0ZXJGaWxlOjpTY29wZUNoYWluLCBy
ZWdUMSwgcmVnVDIpOworICAgIGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihyZWdUMSwgUmVnaXN0
ZXJGaWxlOjpTY29wZUNoYWluKTsKKworICAgIHByZXNlcnZlUmV0dXJuQWRkcmVzc0FmdGVyQ2Fs
bChyZWdUMyk7IC8vIENhbGxlZSBwcmVzZXJ2ZWQKKyAgICBlbWl0UHV0VG9DYWxsRnJhbWVIZWFk
ZXIocmVnVDMsIFJlZ2lzdGVyRmlsZTo6UmV0dXJuUEMpOwogCisgICAgLy8gQ2FsbGluZyBjb252
ZW50aW9uOiAgICAgIGYocjAgPT0gcmVnVDQsIHIxID09IHJlZ1Q1LCAuLi4pOworICAgIC8vIEhv
c3QgZnVuY3Rpb24gc2lnbmF0dXJlOiBmKEV4ZWNTdGF0ZSopOworICAgIG1vdmUoY2FsbEZyYW1l
UmVnaXN0ZXIsIHJlZ1Q0KTsKKworICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKFJl
Z2lzdGVyRmlsZTo6Q2FsbGVlLCByZWdUNSk7CisgICAgbW92ZShyZWdUMiwgY2FsbEZyYW1lUmVn
aXN0ZXIpOyAvLyBFYWdlcmx5IHJlc3RvcmUgY2FsbGVyIGZyYW1lIHJlZ2lzdGVyIHRvIGF2b2lk
IGxvYWRpbmcgZnJvbSBzdGFjay4KKyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDUsIE9CSkVDVF9P
RkZTRVRPRihKU0Z1bmN0aW9uLCBtX2V4ZWN1dGFibGUpKSwgcmVnVDIpOworCisgICAgbG9hZDMy
KHJlZ1QyLCBleGVjdXRhYmxlT2Zmc2V0VG9GdW5jdGlvbiwgcmVnVDApOworICAgIG1fYXNzZW1i
bGVyLmJyYW5jaChKU1JfT1BDT0RFLCByZWdUMCk7CisgICAgbV9hc3NlbWJsZXIubm9wKCk7CisK
KyAgICByZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihyZWdUMyk7CiAjZWxpZiBDUFUo
TUlQUykKICAgICAvLyBMb2FkIGNhbGxlciBmcmFtZSdzIHNjb3BlIGNoYWluIGludG8gdGhpcyBj
YWxsZnJhbWUgc28gdGhhdCB3aGF0ZXZlciB3ZSBjYWxsIGNhbgogICAgIC8vIGdldCB0byBpdHMg
Z2xvYmFsIGRhdGEuCkBAIC0zOTQsNyArNDE2LDI4IEBAIEpJVDo6Q29kZVB0ciBKSVQ6OnByaXZh
dGVDb21waWxlQ1RJTmF0aXZlQ2FsbChQYXNzUmVmUHRyPEV4ZWN1dGFibGVQb29sPiBleGVjdXRh
CiAgICAgYWRkUHRyKEltbTMyKDE2KSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogCiAgICAgcmVz
dG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4ocmVnVDMpOworI2VsaWYgQ1BVKFNINCkKKyAg
ICAvLyBMb2FkIGNhbGxlciBmcmFtZSdzIHNjb3BlIGNoYWluIGludG8gdGhpcyBjYWxsZnJhbWUg
c28gdGhhdCB3aGF0ZXZlciB3ZSBjYWxsIGNhbgorICAgIC8vIGdldCB0byBpdHMgZ2xvYmFsIGRh
dGEuCisgICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoUmVnaXN0ZXJGaWxlOjpDYWxs
ZXJGcmFtZSwgcmVnVDIpOworICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKFJlZ2lz
dGVyRmlsZTo6U2NvcGVDaGFpbiwgcmVnVDEsIHJlZ1QyKTsKKyAgICBlbWl0UHV0VG9DYWxsRnJh
bWVIZWFkZXIocmVnVDEsIFJlZ2lzdGVyRmlsZTo6U2NvcGVDaGFpbik7CiAKKyAgICBwcmVzZXJ2
ZVJldHVybkFkZHJlc3NBZnRlckNhbGwocmVnVDMpOyAvLyBDYWxsZWUgcHJlc2VydmVkCisgICAg
ZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKHJlZ1QzLCBSZWdpc3RlckZpbGU6OlJldHVyblBDKTsK
KworICAgIC8vIENhbGxpbmcgY29udmVudGlvbjogICAgICBmKHIwID09IHJlZ1Q0LCByMSA9PSBy
ZWdUNSwgLi4uKTsKKyAgICAvLyBIb3N0IGZ1bmN0aW9uIHNpZ25hdHVyZTogZihFeGVjU3RhdGUq
KTsKKyAgICBtb3ZlKGNhbGxGcmFtZVJlZ2lzdGVyLCByZWdUNCk7CisKKyAgICBlbWl0R2V0RnJv
bUNhbGxGcmFtZUhlYWRlclB0cihSZWdpc3RlckZpbGU6OkNhbGxlZSwgcmVnVDUpOworICAgIG1v
dmUocmVnVDIsIGNhbGxGcmFtZVJlZ2lzdGVyKTsgLy8gRWFnZXJseSByZXN0b3JlIGNhbGxlciBm
cmFtZSByZWdpc3RlciB0byBhdm9pZCBsb2FkaW5nIGZyb20gc3RhY2suCisgICAgbG9hZFB0cihB
ZGRyZXNzKHJlZ1Q1LCBPQkpFQ1RfT0ZGU0VUT0YoSlNGdW5jdGlvbiwgbV9leGVjdXRhYmxlKSks
IHJlZ1QyKTsKKworICAgIC8vIGNhbGwgdGhlIGZ1bmN0aW9uCisgICAgbmF0aXZlQ2FsbCA9IGNh
bGwoKTsKKworICAgIHJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKHJlZ1QzKTsKICNl
bGlmIEVOQUJMRShKSVRfT1BUSU1JWkVfTkFUSVZFX0NBTEwpCiAjZXJyb3IgIkpJVF9PUFRJTUla
RV9OQVRJVkVfQ0FMTCBub3QgeWV0IHN1cHBvcnRlZCBvbiB0aGlzIHBsYXRmb3JtLiIKICNlbHNl
CmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5j
cHAgYi9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAKaW5kZXgg
NzEwYTE1NS4uNDU2MDcwOCAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3Bl
cnR5QWNjZXNzMzJfNjQuY3BwCisrKyBiL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFj
Y2VzczMyXzY0LmNwcApAQCAtNDc5LDcgKzQ3OSwxNiBAQCB2b2lkIEpJVDo6Y29tcGlsZUdldEJ5
SWRTbG93Q2FzZShpbnQgZHN0LCBpbnQgYmFzZSwgSWRlbnRpZmllciogaWRlbnQsIFZlY3RvcjxT
bAogICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KEltbVB0cihpZGVudCkpOwogICAgIENhbGwgY2Fs
bCA9IHN0dWJDYWxsLmNhbGwoZHN0KTsKICAgICAKKyNpZiBDUFUoU0g0KQorICAgIGlmICgoZHN0
ID49IDApICYmIChkc3QgPD0gNykpCisgICAgICAgIEVORF9VTklOVEVSUlVQVEVEX1NFUVVFTkNF
KHNlcXVlbmNlR2V0QnlJZFNsb3dDYXNlKTsKKyAgICBlbHNlIGlmICgoZHN0ID4gMTUpIHx8IChk
c3QgPCAtMTYpKQorICAgICAgICBFTkRfVU5JTlRFUlJVUFRFRF9TRVFVRU5DRVMoc2VxdWVuY2VH
ZXRCeUlkU2xvd0Nhc2UsIDgsIDIpOworICAgIGVsc2UKKyAgICAgICAgRU5EX1VOSU5URVJSVVBU
RURfU0VRVUVOQ0VTKHNlcXVlbmNlR2V0QnlJZFNsb3dDYXNlLCA4LCAwKTsKKyNlbHNlCiAgICAg
RU5EX1VOSU5URVJSVVBURURfU0VRVUVOQ0Uoc2VxdWVuY2VHZXRCeUlkU2xvd0Nhc2UpOworI2Vu
ZGlmCiAgICAgCiAgICAgQVNTRVJUKGRpZmZlcmVuY2VCZXR3ZWVuKGNvbGRQYXRoQmVnaW4sIGNh
bGwpID09IHBhdGNoT2Zmc2V0R2V0QnlJZFNsb3dDYXNlQ2FsbCk7CiAgICAgCkBAIC02NDAsNyAr
NjQ5LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlJZFRyYW5zaXRpb24oU3RydWN0
dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBTdHJ1Y3R1cmUKICAgICBhZGQzMihJbW0zMigxKSwgQWJz
b2x1dGVBZGRyZXNzKG5ld1N0cnVjdHVyZS0+YWRkcmVzc09mQ291bnQoKSkpOwogICAgIHN0b3Jl
UHRyKEltbVB0cihuZXdTdHJ1Y3R1cmUpLCBBZGRyZXNzKHJlZ1QwLCBPQkpFQ1RfT0ZGU0VUT0Yo
SlNDZWxsLCBtX3N0cnVjdHVyZSkpKTsKICAgICAKLSNpZiBDUFUoTUlQUykKKyNpZiBDUFUoTUlQ
UykgfHwgQ1BVKFNINCkKICAgICAvLyBGb3IgTUlQUywgd2UgZG9uJ3QgYWRkIHNpemVvZih2b2lk
KikgdG8gdGhlIHN0YWNrIG9mZnNldC4KICAgICBsb2FkMzIoQWRkcmVzcyhzdGFja1BvaW50ZXJS
ZWdpc3RlciwgT0JKRUNUX09GRlNFVE9GKEpJVFN0YWNrRnJhbWUsIGFyZ3NbMl0pICsgT0JKRUNU
X09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwgcmVnVDMpOwogICAgIGxvYWQz
MihBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBPQkpFQ1RfT0ZGU0VUT0YoSklUU3RhY2tG
cmFtZSwgYXJnc1syXSkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSks
IHJlZ1QyKTsKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAgYi9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCmluZGV4IDA5N2Q1NWIuLjU2YTQ3MWEgMTAw
NjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAKKysrIGIvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFN0dWJzLmNwcApAQCAtMzE4LDcgKzMxOCw3MyBAQCBleHRlcm4gIkMiIHsK
ICNkZWZpbmUgRU5BQkxFX1BST0ZJTEVSX1JFRkVSRU5DRV9PRkZTRVQgOTYKICNkZWZpbmUgR0xP
QkFMX0RBVEFfT0ZGU0VUICAgICAgICAgMTAwCiAjZGVmaW5lIFNUQUNLX0xFTkdUSCAgICAgICAg
ICAgICAgIDEwNAorI2VsaWYgQ1BVKFNINCkKKyNkZWZpbmUgU1lNQk9MX1NUUklORyhuYW1lKSAj
bmFtZQorLyogY29kZSAocjQpLCBSZWdpc3RlckZpbGUqIChyNSksIENhbGxGcmFtZSogKHI2KSwg
SlNWYWx1ZSogZXhjZXB0aW9uIChyNyksIFByb2ZpbGVyKiooc3ApLCBKU0dsb2JhbERhdGEgKHNw
KSovCithc20oCisiLmFsaWduIDIiICJcbiIKKyIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5HKGN0aVRy
YW1wb2xpbmUpICJcbiIKK1NZTUJPTF9TVFJJTkcoY3RpVHJhbXBvbGluZSkgIjoiICJcbiIKKyAg
ICAibW92LmwgcjcsIEAtcjE1IiAiXG4iCisgICAgIm1vdi5sIHI2LCBALXIxNSIgIlxuIgorICAg
ICJtb3YubCByNSwgQC1yMTUiICJcbiIKKyAgICAibW92LmwgcjgsIEAtcjE1IiAiXG4iCisgICAg
Im1vdiAjMTI3LCByOCIgIlxuIgorICAgICJtb3YubCByMTQsIEAtcjE1IiAiXG4iCisgICAgInN0
cy5sIHByLCBALXIxNSIgIlxuIgorICAgICJtb3YubCByMTMsIEAtcjE1IiAiXG4iCisgICAgIm1v
di5sIHIxMSwgQC1yMTUiICJcbiIKKyAgICAiYWRkICMtNjAsIHIxNSIgIlxuIgorICAgICJtb3Yg
cjYsIHIxNCIgIlxuIgorICAgICJqc3IgQHI0IiAiXG4iCisgICAgIm5vcCIgIlxuIgorICAgICJh
ZGQgIzYwLCByMTUiICJcbiIKKyAgICAibW92LmwgQHIxNSsscjExIiAiXG4iCisgICAgIm1vdi5s
IEByMTUrLHIxMyIgIlxuIgorICAgICJsZHMubCBAcjE1KyxwciIgIlxuIgorICAgICJtb3YubCBA
cjE1KyxyMTQiICJcbiIKKyAgICAibW92LmwgQHIxNSsscjgiICJcbiIKKyAgICAiYWRkICMxMiwg
cjE1IiAiXG4iCisgICAgInJ0cyIgIlxuIgorICAgICJub3AiICJcbiIKKyk7CisKK2FzbSgKKyIu
YWxpZ24gMiIgIlxuIgorIi5nbG9ibCAiIFNZTUJPTF9TVFJJTkcoY3RpVk1UaHJvd1RyYW1wb2xp
bmUpICJcbiIKK1NZTUJPTF9TVFJJTkcoY3RpVk1UaHJvd1RyYW1wb2xpbmUpICI6IiAiXG4iCisg
ICAgIm1vdi5sIC5MMiJTWU1CT0xfU1RSSU5HKGN0aV92bV90aHJvdykiLHIwIiAiXG4iCisgICAg
Im1vdiByMTUsIHI0IiAiXG4iCisgICAgIm1vdi5sIEAocjAscjEyKSxyMTEiICJcbiIKKyAgICAi
anNyIEByMTEiICJcbiIKKyAgICAibm9wIiAiXG4iCisgICAgImFkZCAjNjAsIHIxNSIgIlxuIgor
ICAgICJtb3YubCBAcjE1KyxyMTEiICJcbiIKKyAgICAibW92LmwgQHIxNSsscjEzIiAiXG4iCisg
ICAgImxkcy5sIEByMTUrLHByIiAiXG4iCisgICAgIm1vdi5sIEByMTUrLHIxNCIgIlxuIgorICAg
ICJtb3YubCBAcjE1KyxyOCIgIlxuIgorICAgICJhZGQgIzEyLCByMTUiICJcbiIKKyAgICAicnRz
IiAiXG4iCisgICAgIm5vcCIgIlxuIgorICAgICIuYWxpZ24gMiIgIlxuIgorICAgICIuTDIiU1lN
Qk9MX1NUUklORyhjdGlfdm1fdGhyb3cpIjoubG9uZyAiIFNZTUJPTF9TVFJJTkcoY3RpX3ZtX3Ro
cm93KSJAR09UIFxuIgorKTsKIAorYXNtKAorIi5hbGlnbiAyIiAiXG4iCisiLmdsb2JsICIgU1lN
Qk9MX1NUUklORyhjdGlPcFRocm93Tm90Q2F1Z2h0KSAiXG4iCitTWU1CT0xfU1RSSU5HKGN0aU9w
VGhyb3dOb3RDYXVnaHQpICI6IiAiXG4iCisgICAgImFkZCAjNjAsIHIxNSIgIlxuIgorICAgICJt
b3YubCBAcjE1KyxyMTEiICJcbiIKKyAgICAibW92LmwgQHIxNSsscjEzIiAiXG4iCisgICAgImxk
cy5sIEByMTUrLHByIiAiXG4iCisgICAgIm1vdi5sIEByMTUrLHIxNCIgIlxuIgorICAgICJtb3Yu
bCBAcjE1KyxyOCIgIlxuIgorICAgICJhZGQgIzEyLCByMTUiICJcbiIKKyAgICAicnRzIiAiXG4i
CisgICAgIm5vcCIgIlxuIgorKTsKICNlbHNlCiAgICAgI2Vycm9yICJKSVQgbm90IHN1cHBvcnRl
ZCBvbiB0aGlzIHBsYXRmb3JtLiIKICNlbmRpZgpAQCAtMTI1OSw2ICsxMzI1LDI5IEBAIE1TVkMo
KQogTVNWQ19FTkQoICAgIEVORCkKICovCiAKKyNlbGlmIENQVShTSDQpCisjZGVmaW5lIERFRklO
RV9TVFVCX0ZVTkNUSU9OKHJ0eXBlLCBvcCkgXAorICAgIGV4dGVybiAiQyIgeyBcCisgICAgICAg
IHJ0eXBlIEpJVFN0dWJUaHVua2VkXyMjb3AoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKTsgXAorICAg
IH07IFwKKyAgICBhc20gdm9sYXRpbGUoIFwKKyAgICAiLmFsaWduIDIiICJcbiIgXAorICAgICIu
Z2xvYmwgIiBTWU1CT0xfU1RSSU5HKGN0aV8jI29wKSAiXG4iIFwKKyAgICBTWU1CT0xfU1RSSU5H
KGN0aV8jI29wKSAiOiIgIlxuIiBcCisgICAgInN0cyBwciwgcjExIiAiXG4iIFwKKyAgICAibW92
LmwgcjExLCBAKDB4MzgsIHIxNSkiICJcbiIgXAorICAgICJtb3YubCAuTDIiU1lNQk9MX1NUUklO
RyhKSVRTdHViVGh1bmtlZF8jI29wKSIscjAiICJcbiIgXAorICAgICJtb3YubCBAKHIwLHIxMiks
cjExIiAiXG4iIFwKKyAgICAianNyIEByMTEiICJcbiIgXAorICAgICJub3AiICJcbiIgXAorICAg
ICJtb3YubCBAKDB4MzgsIHIxNSksIHIxMSAiICJcbiIgXAorICAgICJsZHMgcjExLCBwciAiICJc
biIgXAorICAgICJydHMiICJcbiIgXAorICAgICJub3AiICJcbiIgXAorICAgICIuYWxpZ24gMiIg
IlxuIiBcCisgICAgIi5MMiJTWU1CT0xfU1RSSU5HKEpJVFN0dWJUaHVua2VkXyMjb3ApIjoubG9u
ZyAiIFNZTUJPTF9TVFJJTkcoSklUU3R1YlRodW5rZWRfIyNvcCkiQEdPVCBcbiIgXAorICAgICk7
IFwKKyAgICBydHlwZSBKSVRTdHViVGh1bmtlZF8jI29wKFNUVUJfQVJHU19ERUNMQVJBVElPTikK
ICNlbHNlCiAjZGVmaW5lIERFRklORV9TVFVCX0ZVTkNUSU9OKHJ0eXBlLCBvcCkgcnR5cGUgSklU
X1NUVUIgY3RpXyMjb3AoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKQogI2VuZGlmCmRpZmYgLS1naXQg
YS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuaCBiL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRT
dHVicy5oCmluZGV4IDkzNzEzNGIuLmE0NjgwMTIgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRTdHVicy5oCisrKyBiL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5oCkBAIC0y
MjksNiArMjI5LDI2IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIFJldHVybkFkZHJlc3NQ
dHIqIHJldHVybkFkZHJlc3NTbG90KCkgeyByZXR1cm4gJnRodW5rUmV0dXJuQWRkcmVzczsgfQog
ICAgIH07CisjZWxpZiBDUFUoU0g0KQorICAgIHN0cnVjdCBKSVRTdGFja0ZyYW1lIHsKKyAgICAg
ICAgSklUU3R1YkFyZyBwYWRkaW5nOyAvLyBVbnVzZWQKKyAgICAgICAgSklUU3R1YkFyZyBhcmdz
WzZdOworCisgICAgICAgIFJldHVybkFkZHJlc3NQdHIgdGh1bmtSZXR1cm5BZGRyZXNzOworICAg
ICAgICB2b2lkKiBzYXZlZFIxMTsKKyAgICAgICAgdm9pZCogc2F2ZWRSMTM7CisgICAgICAgIHZv
aWQqIHNhdmVkUlBSOworICAgICAgICB2b2lkKiBzYXZlZFIxNDsKKyAgICAgICAgdm9pZCogc2F2
ZWRUaW1lb3V0UmVnOworCisgICAgICAgIFJlZ2lzdGVyRmlsZSogcmVnaXN0ZXJGaWxlOworICAg
ICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZTsKKyAgICAgICAgSlNWYWx1ZSogZXhjZXB0aW9uOwor
ICAgICAgICBQcm9maWxlcioqIGVuYWJsZWRQcm9maWxlclJlZmVyZW5jZTsKKyAgICAgICAgSlNH
bG9iYWxEYXRhKiBnbG9iYWxEYXRhOworCisgICAgICAgIFJldHVybkFkZHJlc3NQdHIqIHJldHVy
bkFkZHJlc3NTbG90KCkgeyByZXR1cm4gJnRodW5rUmV0dXJuQWRkcmVzczsgfQorICAgIH07CiAj
ZWxzZQogI2Vycm9yICJKSVRTdGFja0ZyYW1lIG5vdCBkZWZpbmVkIGZvciB0aGlzIHBsYXRmb3Jt
LiIKICNlbmRpZgpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvaml0L0pTSW50ZXJmYWNlSklU
LmggYi9KYXZhU2NyaXB0Q29yZS9qaXQvSlNJbnRlcmZhY2VKSVQuaAppbmRleCA2NDUzYmFiLi5h
ODBkZmE3IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9qaXQvSlNJbnRlcmZhY2VKSVQuaAor
KysgYi9KYXZhU2NyaXB0Q29yZS9qaXQvSlNJbnRlcmZhY2VKSVQuaApAQCAtMTUzLDYgKzE1Mywz
MiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RhdGljIGNvbnN0IEZQUmVnaXN0ZXJJRCBm
cFJlZ1QxID0gTUlQU1JlZ2lzdGVyczo6ZjY7CiAgICAgICAgIHN0YXRpYyBjb25zdCBGUFJlZ2lz
dGVySUQgZnBSZWdUMiA9IE1JUFNSZWdpc3RlcnM6OmY4OwogICAgICAgICBzdGF0aWMgY29uc3Qg
RlBSZWdpc3RlcklEIGZwUmVnVDMgPSBNSVBTUmVnaXN0ZXJzOjpmMTA7CisjZWxpZiBDUFUoU0g0
KQorICAgICAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCB0aW1lb3V0Q2hlY2tSZWdpc3RlciA9
IFNINDo6Ujg7CisgICAgICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIGNhbGxGcmFtZVJlZ2lz
dGVyID0gU0g0OjpGUDsKKworICAgICAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCByZWdUMCA9
IFNINDo6UjA7CisgICAgICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIHJlZ1QxID0gU0g0OjpS
MTsKKyAgICAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgcmVnVDIgPSBTSDQ6OlIyOworICAg
ICAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCByZWdUMyA9IFNINDo6UjEzOworICAgICAgICBz
dGF0aWMgY29uc3QgUmVnaXN0ZXJJRCByZWdUNCA9IFNINDo6UjQ7CisgICAgICAgIHN0YXRpYyBj
b25zdCBSZWdpc3RlcklEIHJlZ1Q1ID0gU0g0OjpSNTsKKyAgICAgICAgc3RhdGljIGNvbnN0IFJl
Z2lzdGVySUQgcmVnVDYgPSBTSDQ6OlI2OworICAgICAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJ
RCByZWdUNyA9IFNINDo6Ujc7CisgICAgICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIHJlZ1Qx
MyA9IFNINDo6UjM7CisgICAgICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIGZpcnN0QXJndW1l
bnRSZWdpc3RlciA9cmVnVDQ7CisKKyAgICAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgcmV0
dXJuVmFsdWVSZWdpc3RlciA9IFNINDo6UjA7CisgICAgICAgIHN0YXRpYyBjb25zdCBSZWdpc3Rl
cklEIGNhY2hlZFJlc3VsdFJlZ2lzdGVyID0gU0g0OjpSMDsKKworICAgICAgICBzdGF0aWMgY29u
c3QgRlBSZWdpc3RlcklEIGZwUmVnVDAgID0gU0g0OjpGUjA7CisgICAgICAgIHN0YXRpYyBjb25z
dCBGUFJlZ2lzdGVySUQgZnBSZWdUMSAgPSBTSDQ6OkZSMjsKKyAgICAgICAgc3RhdGljIGNvbnN0
IEZQUmVnaXN0ZXJJRCBmcFJlZ1QyICA9IFNINDo6RlI0OworICAgICAgICBzdGF0aWMgY29uc3Qg
RlBSZWdpc3RlcklEIGZwUmVnVDMgID0gU0g0OjpGUjY7CisgICAgICAgIHN0YXRpYyBjb25zdCBG
UFJlZ2lzdGVySUQgZnBSZWdUNCAgPSBTSDQ6OkZSODsKKyAgICAgICAgc3RhdGljIGNvbnN0IEZQ
UmVnaXN0ZXJJRCBmcFJlZ1Q1ICA9IFNINDo6RlIxMDsKKyAgICAgICAgc3RhdGljIGNvbnN0IEZQ
UmVnaXN0ZXJJRCBmcFJlZ1Q2ICA9IFNINDo6RlIxMjsKKyAgICAgICAgc3RhdGljIGNvbnN0IEZQ
UmVnaXN0ZXJJRCBmcFJlZ1Q3ICA9IFNINDo6RlIxNDsKICNlbHNlCiAjZXJyb3IgIkpJVCBub3Qg
c3VwcG9ydGVkIG9uIHRoaXMgcGxhdGZvcm0uIgogI2VuZGlmCmRpZmYgLS1naXQgYS9KYXZhU2Ny
aXB0Q29yZS95YXJyL1JlZ2V4SklULmNwcCBiL0phdmFTY3JpcHRDb3JlL3lhcnIvUmVnZXhKSVQu
Y3BwCmluZGV4IGU4ZDM5ZTUuLjM0OWM3YjAgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL3lh
cnIvUmVnZXhKSVQuY3BwCisrKyBiL0phdmFTY3JpcHRDb3JlL3lhcnIvUmVnZXhKSVQuY3BwCkBA
IC02MSw2ICs2MSwxOCBAQCBjbGFzcyBSZWdleEdlbmVyYXRvciA6IHByaXZhdGUgTWFjcm9Bc3Nl
bWJsZXIgewogICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIHJlZ1QxID0gTUlQU1JlZ2lzdGVy
czo6dDU7CiAKICAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCByZXR1cm5SZWdpc3RlciA9IE1J
UFNSZWdpc3RlcnM6OnYwOworI2VsaWYgQ1BVKFNINCkKKyAgICBzdGF0aWMgY29uc3QgUmVnaXN0
ZXJJRCBpbnB1dCA9IFNINDo6UjQ7CisgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgaW5kZXgg
PSBTSDQ6OlI1OworICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIGxlbmd0aCA9IFNINDo6UjY7
CisgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgb3V0cHV0ID0gU0g0OjpSNzsKKworICAgIHN0
YXRpYyBjb25zdCBSZWdpc3RlcklEIHJlZ1QwID0gU0g0OjpSMDsKKyAgICBzdGF0aWMgY29uc3Qg
UmVnaXN0ZXJJRCByZWdUMSA9IFNINDo6UjE7CisKKyAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJ
RCByZXR1cm5SZWdpc3RlciA9IFNINDo6UjA7CisjZGVmaW5lIFplcm8gU0g0QXNzZW1ibGVyOjpF
UQorI2RlZmluZSBOb25aZXJvIFNINEFzc2VtYmxlcjo6TkUKICNlbGlmIENQVShYODYpCiAgICAg
c3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgaW5wdXQgPSBYODZSZWdpc3RlcnM6OmVheDsKICAgICBz
dGF0aWMgY29uc3QgUmVnaXN0ZXJJRCBpbmRleCA9IFg4NlJlZ2lzdGVyczo6ZWR4OwpAQCAtMTIz
OCw2ICsxMjUwLDcgQEAgY2xhc3MgUmVnZXhHZW5lcmF0b3IgOiBwcml2YXRlIE1hY3JvQXNzZW1i
bGVyIHsKICAgICAgICAgfQogICAgIH0KIAorI2lmICFDUFUoU0g0KQogICAgIHZvaWQgZ2VuZXJh
dGVQYXR0ZXJuQ2hhcmFjdGVyUGFpcihUZXJtR2VuZXJhdGlvblN0YXRlJiBzdGF0ZSkKICAgICB7
CiAgICAgICAgIGNvbnN0IFJlZ2lzdGVySUQgY2hhcmFjdGVyID0gcmVnVDA7CkBAIC0xMjYxLDYg
KzEyNzQsNyBAQCBjbGFzcyBSZWdleEdlbmVyYXRvciA6IHByaXZhdGUgTWFjcm9Bc3NlbWJsZXIg
ewogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIHN0YXRlLmp1bXBUb0JhY2t0cmFjayh0aGlz
LCBicmFuY2gzMldpdGhVbmFsaWduZWRIYWxmV29yZHMoTm90RXF1YWwsIEJhc2VJbmRleChpbnB1
dCwgaW5kZXgsIFRpbWVzVHdvLCBzdGF0ZS5pbnB1dE9mZnNldCgpICogc2l6ZW9mKFVDaGFyKSks
IEltbTMyKGNoUGFpcikpKTsKICAgICB9CisjZW5kaWYKIAogICAgIHZvaWQgZ2VuZXJhdGVQYXR0
ZXJuQ2hhcmFjdGVyRml4ZWQoVGVybUdlbmVyYXRpb25TdGF0ZSYgc3RhdGUpCiAgICAgewpAQCAt
MTc5Niw4ICsxODEwLDEyIEBAIGNsYXNzIFJlZ2V4R2VuZXJhdG9yIDogcHJpdmF0ZSBNYWNyb0Fz
c2VtYmxlciB7CiAgICAgICAgICAgICBjYXNlIFF1YW50aWZpZXJGaXhlZENvdW50OgogICAgICAg
ICAgICAgICAgIGlmICh0ZXJtLnF1YW50aXR5Q291bnQgPT0gMSkgewogICAgICAgICAgICAgICAg
ICAgICBpZiAoc3RhdGUuaXNTaW5nbGVQYXR0ZXJuQ2hhcmFjdGVyTG9va2FoZWFkVGVybSgpICYm
IChzdGF0ZS5sb29rYWhlYWRUZXJtKCkuaW5wdXRQb3NpdGlvbiA9PSAodGVybS5pbnB1dFBvc2l0
aW9uICsgMSkpKSB7CisjaWYgIUNQVShTSDQpCiAgICAgICAgICAgICAgICAgICAgICAgICBnZW5l
cmF0ZVBhdHRlcm5DaGFyYWN0ZXJQYWlyKHN0YXRlKTsKICAgICAgICAgICAgICAgICAgICAgICAg
IHN0YXRlLm5leHRUZXJtKCk7CisjZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJh
dGVQYXR0ZXJuQ2hhcmFjdGVyU2luZ2xlKHN0YXRlKTsKKyNlbmRpZgogICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlUGF0dGVybkNoYXJh
Y3RlclNpbmdsZShzdGF0ZSk7CiAgICAgICAgICAgICAgICAgfSBlbHNlCkBAIC0yMTIxLDYgKzIx
MzksOCBAQCBjbGFzcyBSZWdleEdlbmVyYXRvciA6IHByaXZhdGUgTWFjcm9Bc3NlbWJsZXIgewog
ICAgICAgICBwdXNoKEFSTVJlZ2lzdGVyczo6cjgpOyAvLyBzY3JhdGNoIHJlZ2lzdGVyCiAjZW5k
aWYKICAgICAgICAgbW92ZShBUk1SZWdpc3RlcnM6OnIzLCBvdXRwdXQpOworI2VsaWYgQ1BVKFNI
NCkKKyAgICAgICAgcHVzaChTSDQ6OlIxMSk7CiAjZWxpZiBDUFUoTUlQUykKICAgICAgICAgLy8g
RG8gbm90aGluZy4KICNlbmRpZgpAQCAtMjE0Myw2ICsyMTYzLDggQEAgY2xhc3MgUmVnZXhHZW5l
cmF0b3IgOiBwcml2YXRlIE1hY3JvQXNzZW1ibGVyIHsKICAgICAgICAgcG9wKEFSTVJlZ2lzdGVy
czo6cjYpOwogICAgICAgICBwb3AoQVJNUmVnaXN0ZXJzOjpyNSk7CiAgICAgICAgIHBvcChBUk1S
ZWdpc3RlcnM6OnI0KTsKKyNlbGlmIENQVShTSDQpCisgICAgICAgIHBvcChTSDQ6OlIxMSk7CiAj
ZWxpZiBDUFUoTUlQUykKICAgICAgICAgLy8gRG8gbm90aGluZwogI2VuZGlmCg==
</data>
<flag name="review"
          id="67472"
          type_id="1"
          status="-"
          setter="oliver"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>76514</attachid>
            <date>2010-12-14 01:27:55 -0800</date>
            <delta_ts>2011-03-01 05:04:57 -0800</delta_ts>
            <desc>JIT Enable</desc>
            <filename>SH4-ENABLE-JIT-1.3.7.patch</filename>
            <type>text/plain</type>
            <size>1947</size>
            <attacher name="thouraya">thouraya.andolsi</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCAxODc1OThhLi5jMjE0OWZj
IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTEgQEAK
KzIwMTAtMTItMTMgIFRob3VyYXlhIEFORE9MU0kgIDx0aG91cmF5YS5hbmRvbHNpQHN0LmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBFbmFibGUg
SklUIGZvciBTSDQgcGxhdGZvcm1zLgorCisgICAgICAgICogY29uZmlndXJlLmFjOgorCiAyMDEw
LTEyLTA2ICBQaGlsaXBwZSBOb3JtYW5kICA8cG5vcm1hbmRAaWdhbGlhLmNvbT4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBNYXJ0aW4gUm9iaW5zb24uCmRpZmYgLS1naXQgYS9jb25maWd1cmUuYWMg
Yi9jb25maWd1cmUuYWMKaW5kZXggZjczYzJlOC4uODIwZDcwMSAxMDA2NDQKLS0tIGEvY29uZmln
dXJlLmFjCisrKyBiL2NvbmZpZ3VyZS5hYwpAQCAtNzIwLDYgKzcyMCwxOCBAQCBpZiB0ZXN0ICIk
ZW5hYmxlX2ppdCIgPSAieWVzIjsgdGhlbgogICAgICAgICAgICAgICAgIDs7CiAgICAgICAgICAg
ICBlc2FjCiAgICAgICAgIDs7CisgICAgICAgIHNoNCkKKyAgICAgICAgICAgIEFDX0RFRklORShb
RU5BQkxFX1lBUlJdLCBbMV0sIFtEZWZpbmUgdG8gZW5hYmxlIFlBUlJdKQorICAgICAgICAgICAg
QUNfREVGSU5FKFtFTkFCTEVfWUFSUl9KSVRdLCBbMV0sIFtEZWZpbmUgdG8gZW5hYmxlIFlBUlIg
SklUXSkKKyAgICAgICAgICAgIEFDX0RFRklORShbRU5BQkxFX0pJVF0sIFsxXSwgW0RlZmluZSB0
byBlbmFibGUgSklUXSkKKyAgICAgICAgICAgIEFDX0RFRklORShbV1RGX1VTRV9KSVRfU1RVQl9B
UkdVTUVOVF9SRUdJU1RFUl0sIFsxXSwgW1VzZSBzdHViIHJlZ2lzdGVyXSkKKyAgICAgICAgICAg
IEFDX0RFRklORShbRU5BQkxFX0pJVF9PUFRJTUlaRV9BUklUSE1FVElDXSwgWzFdLCBbRGVmaW5l
IHRvIGVuYWJsZSBvcHRpbWl6ZWQgYXJpdGhtZXRpY10pCisgICAgICAgICAgICBBQ19ERUZJTkUo
W0VOQUJMRV9KSVRfT1BUSU1JWkVfTkFUSVZFX0NBTExdLCBbMV0sIFtEZWZpbmUgdG8gZW5hYmxl
IEVOQUJMRV9KSVRfT1BUSU1JWkVfTkFUSVZFX0NBTExdKQorICAgICAgICAgICAgQUNfREVGSU5F
KFtFTkFCTEVfSklUX09QVElNSVpFX0NBTExdLCBbMV0sIFtEZWZpbmUgdG8gZW5hYmxlIEVOQUJM
RV9KSVRfT1BUSU1JWkVfQ0FMTF0pCisgICAgICAgICAgICBBQ19ERUZJTkUoW0VOQUJMRV9KSVRf
T1BUSU1JWkVfUFJPUEVSVFlfQUNDRVNTXSwgWzFdLCBbRGVmaW5lIHRvIGVuYWJsZUVOQUJMRV9K
SVRfT1BUSU1JWkVfUFJPUEVSVFlfQUNDRVNTXSkKKyAgICAgICAgICAgIEFDX0RFRklORShbRU5B
QkxFX0pJVF9PUFRJTUlaRV9NRVRIT0RfQ0FMTFNdLCBbMV0sIFtEZWZpbmUgdG8gZW5hYmxlIEVO
QUJMRV9KSVRfT1BUSU1JWkVfTUVUSE9EX0NBTExTXSkKKyAgICAgICAgICAgIEFDX0RFRklORShb
V1RGX1VTRV9KU1ZBTFVFMzJfNjRdLCBbMV0sIFtlbmFibGUgSlNWYWx1ZTMyXzY0IHN1cHBvcnRd
KQorICAgICAgICA7OwogICAgICAgICAqKQogICAgICAgICAgICAgZW5hYmxlX2ppdD0ibm8gKENQ
VSAnJGhvc3RfY3B1JyBub3Qgc3VwcG9ydGVkKSIKICAgICAgICAgOzsKQEAgLTc5NCw2ICs4MDYs
MTEgQEAgY2FzZSAiJHdpdGhfZm9udF9iYWNrZW5kIiBpbgogZXNhYwogQUNfTVNHX1JFU1VMVChb
JHdpdGhfZm9udF9iYWNrZW5kXSkKIAoraWYgdGVzdCAiJGhvc3RfY3B1IiA9ICJzaDQiOyB0aGVu
CisgICBDWFhGTEFHUz0iJENYWEZMQUdTIC1taWVlZSAiCisgICBDRkxBR1M9IiRDRkxBR1MgLW1p
ZWVlICIKK2ZpCisKICMgQWRkICctZycgZmxhZyB0byBnY2MgaWYgaXQncyBkZWJ1ZyBidWlsZAog
aWYgdGVzdCAiJGVuYWJsZV9kZWJ1ZyIgPSAieWVzIjsgdGhlbgogICAgQ1hYRkxBR1M9IiRDWFhG
TEFHUyAtZyIK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>82973</attachid>
            <date>2011-02-18 09:55:45 -0800</date>
            <delta_ts>2011-02-22 10:14:14 -0800</delta_ts>
            <desc>cacheFlush implementation</desc>
            <filename>cacheFlush-sh4.patch</filename>
            <type>text/plain</type>
            <size>1749</size>
            <attacher name="thouraya">thouraya.andolsi</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRv
ci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmgKaW5k
ZXggNTdlZTA1NC4uNGZmMWM3OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9FeGVjdXRhYmxlQWxsb2NhdG9yLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9F
eGVjdXRhYmxlQWxsb2NhdG9yLmgKQEAgLTQ3LDYgKzQ3LDEzIEBACiAjaW5jbHVkZSA8c3lzL2Nh
Y2hlY3RsLmg+CiAjZW5kaWYKIAorI2lmIENQVShTSDQpICYmIE9TKExJTlVYKQorI2luY2x1ZGUg
PGFzbS9jYWNoZWN0bC5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KKyNpbmNsdWRlIDxzeXMv
c3lzY2FsbC5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisKICNpZiBPUyhXSU5DRSkK
IC8vIEZyb20gcGtmdW5jcy5oIChwcml2YXRlIGhlYWRlciBmaWxlIGZyb20gdGhlIFBsYXRmb3Jt
IEJ1aWxkZXIpCiAjZGVmaW5lIENBQ0hFX1NZTkNfQUxMIDB4MDdGCkBAIC0zMTAsNiArMzE3LDMw
IEBAIHB1YmxpYzoKICAgICAgICAgSU1lbUNhY2hlMV9DbGVhckNhY2hlKG1lbUNhY2hlLmdldCgp
LCByZWludGVycHJldF9jYXN0PHVpbnQzMj4oY29kZSksIHNpemUsIE1FTVNQQUNFX0NBQ0hFX0ZM
VVNILCBNRU1TUEFDRV9EQVRBQ0FDSEUpOwogICAgICAgICBJTWVtQ2FjaGUxX0NsZWFyQ2FjaGUo
bWVtQ2FjaGUuZ2V0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyPihjb2RlKSwgc2l6ZSwgTUVN
U1BBQ0VfQ0FDSEVfSU5WQUxJREFURSwgTUVNU1BBQ0VfSU5TVENBQ0hFKTsKICAgICB9CisjZWxp
ZiBDUFUoU0g0KSAmJiBPUyhMSU5VWCkKKworI2lmbmRlZiBfX05SX2NhY2hlZmx1c2gKKyNkZWZp
bmUgX19OUl9jYWNoZWZsdXNoIF9fTlJfbW9kaWZ5X2xkdAorI2VuZGlmCisKK3N0YXRpYyBjb25z
dCB1bnNpZ25lZCBkZWZhdWx0TGludXhQYWdlU2l6ZSA9IDQwOTY7CisKKyAgICBzdGF0aWMgdm9p
ZCBjYWNoZUZsdXNoKHZvaWQqIGNvZGUsIHNpemVfdCBzaXplKQorICAgIHsKKyAgICAgICAgdW5z
aWduZWQgaW50IGEsIGI7CisgICAgICAgIGEgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGlu
dD4oY29kZSkgJiB+KGRlZmF1bHRMaW51eFBhZ2VTaXplIC0gMSk7CisgICAgICAgIGIgPSAocmVp
bnRlcnByZXRfY2FzdDx1bnNpZ25lZCBpbnQ+KGNvZGUpICsgc2l6ZSArIChkZWZhdWx0TGludXhQ
YWdlU2l6ZSAtIDEpKSAmIH4oZGVmYXVsdExpbnV4UGFnZVNpemUgLSAxKTsKKworICAgICAgICBp
bnQgcmVzID0gc3lzY2FsbChfX05SX2NhY2hlZmx1c2gsIGEsIGRlZmF1bHRMaW51eFBhZ2VTaXpl
LCBDQUNIRUZMVVNIX0RfV0IgfCBDQUNIRUZMVVNIX0kpOworICAgICAgICBBU1NFUlQoIXJlcyk7
CisKKyAgICAgICAgd2hpbGUgKGIgLSBhID4gZGVmYXVsdExpbnV4UGFnZVNpemUpIHsKKyAgICAg
ICAgICAgIGEgPSBhICsgZGVmYXVsdExpbnV4UGFnZVNpemU7CisgICAgICAgICAgICByZXMgPSBz
eXNjYWxsKF9fTlJfY2FjaGVmbHVzaCwgYSwgZGVmYXVsdExpbnV4UGFnZVNpemUsIENBQ0hFRkxV
U0hfRF9XQiB8IENBQ0hFRkxVU0hfSSk7CisKKyAgICAgICAgICAgIEFTU0VSVCghcmVzKTsKKyAg
ICAgICAgfQorICAgIH0KICNlbHNlCiAgICAgI2Vycm9yICJUaGUgY2FjaGVGbHVzaCBzdXBwb3J0
IGlzIG1pc3Npbmcgb24gdGhpcyBwbGF0Zm9ybS4iCiAjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>83336</attachid>
            <date>2011-02-22 10:14:14 -0800</date>
            <delta_ts>2011-02-24 00:26:44 -0800</delta_ts>
            <desc>CacheFlush</desc>
            <filename>cacheFlush-sh4-2.patch</filename>
            <type>text/plain</type>
            <size>1166</size>
            <attacher name="thouraya">thouraya.andolsi</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRv
ci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmgKaW5k
ZXggNTdlZTA1NC4uMDYyMGRkNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9FeGVjdXRhYmxlQWxsb2NhdG9yLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9F
eGVjdXRhYmxlQWxsb2NhdG9yLmgKQEAgLTQ3LDYgKzQ3LDEzIEBACiAjaW5jbHVkZSA8c3lzL2Nh
Y2hlY3RsLmg+CiAjZW5kaWYKIAorI2lmIENQVShTSDQpICYmIE9TKExJTlVYKQorI2luY2x1ZGUg
PGFzbS9jYWNoZWN0bC5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KKyNpbmNsdWRlIDxzeXMv
c3lzY2FsbC5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisKICNpZiBPUyhXSU5DRSkK
IC8vIEZyb20gcGtmdW5jcy5oIChwcml2YXRlIGhlYWRlciBmaWxlIGZyb20gdGhlIFBsYXRmb3Jt
IEJ1aWxkZXIpCiAjZGVmaW5lIENBQ0hFX1NZTkNfQUxMIDB4MDdGCkBAIC0zMTAsNiArMzE3LDEz
IEBAIHB1YmxpYzoKICAgICAgICAgSU1lbUNhY2hlMV9DbGVhckNhY2hlKG1lbUNhY2hlLmdldCgp
LCByZWludGVycHJldF9jYXN0PHVpbnQzMj4oY29kZSksIHNpemUsIE1FTVNQQUNFX0NBQ0hFX0ZM
VVNILCBNRU1TUEFDRV9EQVRBQ0FDSEUpOwogICAgICAgICBJTWVtQ2FjaGUxX0NsZWFyQ2FjaGUo
bWVtQ2FjaGUuZ2V0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyPihjb2RlKSwgc2l6ZSwgTUVN
U1BBQ0VfQ0FDSEVfSU5WQUxJREFURSwgTUVNU1BBQ0VfSU5TVENBQ0hFKTsKICAgICB9CisjZWxp
ZiBDUFUoU0g0KSAmJiBPUyhMSU5VWCkKKworICAgIHN0YXRpYyB2b2lkIGNhY2hlRmx1c2godm9p
ZCogY29kZSwgc2l6ZV90IHNpemUpCisgICAgeworCWludCByZXMgPSBzeXNjYWxsKF9fTlJfY2Fj
aGVmbHVzaCwgcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBpbnQ+KGNvZGUpLCBzaXplLCBDQUNI
RUZMVVNIX0RfV0IgfCBDQUNIRUZMVVNIX0kpOworICAgICAgICBBU1NFUlQoIXJlcyk7CisgICAg
fQogI2Vsc2UKICAgICAjZXJyb3IgIlRoZSBjYWNoZUZsdXNoIHN1cHBvcnQgaXMgbWlzc2luZyBv
biB0aGlzIHBsYXRmb3JtLiIKICNlbmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>83614</attachid>
            <date>2011-02-24 00:26:44 -0800</date>
            <delta_ts>2011-02-24 02:42:47 -0800</delta_ts>
            <desc>CacheFlush</desc>
            <filename>cacheFlush-sh4.patch</filename>
            <type>text/plain</type>
            <size>1807</size>
            <attacher name="thouraya">thouraya.andolsi</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IGU4NDM5NzQuLmIyMzZiM2QgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyIEBACisyMDExLTAyLTIzICBUaG91cmF5YSBBTkRP
TFNJICA8dGhvdXJheWEuYW5kb2xzaUBzdC5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgY2FjaGVGbHVzaCBmb3IgU0g0LgorCisgICAgICAgICog
aml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaDoKKyAgICAgICAgKEpTQzo6RXhlY3V0YWJsZUFsbG9j
YXRvcjo6Y2FjaGVGbHVzaCk6CisKIDIwMTEtMDItMjIgIEFkYW0gQmFydGggIDxhYmFydGhAd2Vi
a2l0Lm9yZz4KCiAgICAgICAgIFJldmlld2VkIGJ5IE9qYW4gVmFmYWkuCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5oCmluZGV4IDU3ZWUwNTQuLjg5
YWU5YWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFs
bG9jYXRvci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9j
YXRvci5oCkBAIC00Nyw2ICs0NywxMyBAQAogI2luY2x1ZGUgPHN5cy9jYWNoZWN0bC5oPgogI2Vu
ZGlmCiAKKyNpZiBDUFUoU0g0KSAmJiBPUyhMSU5VWCkKKyNpbmNsdWRlIDxhc20vY2FjaGVjdGwu
aD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CisjaW5jbHVkZSA8c3lzL3N5c2NhbGwuaD4KKyNp
bmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorCiAjaWYgT1MoV0lOQ0UpCiAvLyBGcm9tIHBrZnVu
Y3MuaCAocHJpdmF0ZSBoZWFkZXIgZmlsZSBmcm9tIHRoZSBQbGF0Zm9ybSBCdWlsZGVyKQogI2Rl
ZmluZSBDQUNIRV9TWU5DX0FMTCAweDA3RgpAQCAtMzEwLDYgKzMxNywxNiBAQCBwdWJsaWM6CiAg
ICAgICAgIElNZW1DYWNoZTFfQ2xlYXJDYWNoZShtZW1DYWNoZS5nZXQoKSwgcmVpbnRlcnByZXRf
Y2FzdDx1aW50MzI+KGNvZGUpLCBzaXplLCBNRU1TUEFDRV9DQUNIRV9GTFVTSCwgTUVNU1BBQ0Vf
REFUQUNBQ0hFKTsKICAgICAgICAgSU1lbUNhY2hlMV9DbGVhckNhY2hlKG1lbUNhY2hlLmdldCgp
LCByZWludGVycHJldF9jYXN0PHVpbnQzMj4oY29kZSksIHNpemUsIE1FTVNQQUNFX0NBQ0hFX0lO
VkFMSURBVEUsIE1FTVNQQUNFX0lOU1RDQUNIRSk7CiAgICAgfQorI2VsaWYgQ1BVKFNINCkgJiYg
T1MoTElOVVgpCisKKyAgICBzdGF0aWMgdm9pZCBjYWNoZUZsdXNoKHZvaWQqIGNvZGUsIHNpemVf
dCBzaXplKQorICAgIHsKKyNpZmRlZiBDQUNIRUZMVVNIX0RfTDIKKyAgICAgICAgc3lzY2FsbChf
X05SX2NhY2hlZmx1c2gsIHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgaW50Pihjb2RlKSwgc2l6
ZSwgQ0FDSEVGTFVTSF9EX1dCIHwgQ0FDSEVGTFVTSF9JIHwgQ0FDSEVGTFVTSF9EX0wyKTsKKyNl
bHNlCisgICAgICAgIHN5c2NhbGwoX19OUl9jYWNoZWZsdXNoLCByZWludGVycHJldF9jYXN0PHVu
c2lnbmVkIGludD4oY29kZSksIHNpemUsIENBQ0hFRkxVU0hfRF9XQiB8IENBQ0hFRkxVU0hfSSk7
CisjZW5kaWYKKyAgICB9CiAjZWxzZQogICAgICNlcnJvciAiVGhlIGNhY2hlRmx1c2ggc3VwcG9y
dCBpcyBtaXNzaW5nIG9uIHRoaXMgcGxhdGZvcm0uIgogI2VuZGlmCg==
</data>
<flag name="review"
          id="75461"
          type_id="1"
          status="-"
          setter="zimmermann"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>83626</attachid>
            <date>2011-02-24 02:42:47 -0800</date>
            <delta_ts>2011-02-26 02:11:25 -0800</delta_ts>
            <desc>CacheFlush implementation</desc>
            <filename>cacheflush.patch</filename>
            <type>text/plain</type>
            <size>1943</size>
            <attacher name="thouraya">thouraya.andolsi</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IGU4NDM5NzQuLjY3M2UxN2MgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDExLTAyLTI0ICBUaG91cmF5YSBBTkRP
TFNJICA8dGhvdXJheWEuYW5kb2xzaUBzdC5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgU0g0IEpJVCBTVVBQT1JUCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NDMyOQorCisgICAgICAgIFByb3ZpZGUg
YW4gRXhlY3V0YWJsZUFsbG9jYXRlcjo6Y2FjaGVGbHVzaCgpIGltcGxlbWVudGF0aW9uIGZvcgor
ICAgICAgICBMaW51eC9TSDQuCisKKyAgICAgICAgKiBqaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5o
OgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQWxsb2NhdG9yOjpjYWNoZUZsdXNoKToKKwogMjAx
MS0wMi0yMiAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgoKICAgICAgICAgUmV2aWV3
ZWQgYnkgT2phbiBWYWZhaS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
RXhlY3V0YWJsZUFsbG9jYXRvci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRh
YmxlQWxsb2NhdG9yLmgKaW5kZXggNTdlZTA1NC4uNzdhMjU2NyAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmgKQEAgLTQ3LDYgKzQ3LDEzIEBA
CiAjaW5jbHVkZSA8c3lzL2NhY2hlY3RsLmg+CiAjZW5kaWYKIAorI2lmIENQVShTSDQpICYmIE9T
KExJTlVYKQorI2luY2x1ZGUgPGFzbS9jYWNoZWN0bC5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQu
aD4KKyNpbmNsdWRlIDxzeXMvc3lzY2FsbC5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlm
CisKICNpZiBPUyhXSU5DRSkKIC8vIEZyb20gcGtmdW5jcy5oIChwcml2YXRlIGhlYWRlciBmaWxl
IGZyb20gdGhlIFBsYXRmb3JtIEJ1aWxkZXIpCiAjZGVmaW5lIENBQ0hFX1NZTkNfQUxMIDB4MDdG
CkBAIC0zMTAsNiArMzE3LDE1IEBAIHB1YmxpYzoKICAgICAgICAgSU1lbUNhY2hlMV9DbGVhckNh
Y2hlKG1lbUNhY2hlLmdldCgpLCByZWludGVycHJldF9jYXN0PHVpbnQzMj4oY29kZSksIHNpemUs
IE1FTVNQQUNFX0NBQ0hFX0ZMVVNILCBNRU1TUEFDRV9EQVRBQ0FDSEUpOwogICAgICAgICBJTWVt
Q2FjaGUxX0NsZWFyQ2FjaGUobWVtQ2FjaGUuZ2V0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMy
Pihjb2RlKSwgc2l6ZSwgTUVNU1BBQ0VfQ0FDSEVfSU5WQUxJREFURSwgTUVNU1BBQ0VfSU5TVENB
Q0hFKTsKICAgICB9CisjZWxpZiBDUFUoU0g0KSAmJiBPUyhMSU5VWCkKKyAgICBzdGF0aWMgdm9p
ZCBjYWNoZUZsdXNoKHZvaWQqIGNvZGUsIHNpemVfdCBzaXplKQorICAgIHsKKyNpZmRlZiBDQUNI
RUZMVVNIX0RfTDIKKyAgICAgICAgc3lzY2FsbChfX05SX2NhY2hlZmx1c2gsIHJlaW50ZXJwcmV0
X2Nhc3Q8dW5zaWduZWQ+KGNvZGUpLCBzaXplLCBDQUNIRUZMVVNIX0RfV0IgfCBDQUNIRUZMVVNI
X0kgfCBDQUNIRUZMVVNIX0RfTDIpOworI2Vsc2UKKyAgICAgICAgc3lzY2FsbChfX05SX2NhY2hl
Zmx1c2gsIHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQ+KGNvZGUpLCBzaXplLCBDQUNIRUZMVVNI
X0RfV0IgfCBDQUNIRUZMVVNIX0kpOworI2VuZGlmCisgICAgfQogI2Vsc2UKICAgICAjZXJyb3Ig
IlRoZSBjYWNoZUZsdXNoIHN1cHBvcnQgaXMgbWlzc2luZyBvbiB0aGlzIHBsYXRmb3JtLiIKICNl
bmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>84214</attachid>
            <date>2011-03-01 05:04:57 -0800</date>
            <delta_ts>2011-03-02 09:10:46 -0800</delta_ts>
            <desc>YARR JIT </desc>
            <filename>0001-SH4-YARR-SUPPORT.patch</filename>
            <type>text/plain</type>
            <size>126356</size>
            <attacher name="thouraya">thouraya.andolsi</attacher>
            
              <data encoding="base64">RnJvbSBhMDk1YWRkYzdmNTNlNGRkYzZjZWVhMzI5ZjIxMjc5YTg3MTdmYTVkIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBUaG91cmF5YSBBTkRPTFNJIDx0aG91cmF5YS5hbmRvbHNpQHN0
LmNvbT4KRGF0ZTogVHVlLCAxIE1hciAyMDExIDEyOjU3OjQ2ICswMTAwClN1YmplY3Q6IFtQQVRD
SF0gU0g0IFlBUlIgU1VQUE9SVC4KCi0tLQogU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxv
ZyAgICAgICAgICAgICAgICAgICAgfCAgMjY1ICsrKwogU291cmNlL0phdmFTY3JpcHRDb3JlL0dO
VW1ha2VmaWxlLmFtICAgICAgICAgICAgICAgfCAgICA0ICsKIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaCAgIHwgICAgNCArCiAuLi4vSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyU0g0LmNwcCB8ICAgNjIgKwogLi4uL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclNINC5oICAgfCAxNDI5ICsrKysrKysrKysr
KysrCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1NINEFzc2VtYmxlci5jcHAgICB8
ICAgMjAgKwogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9TSDRBc3NlbWJsZXIuaCAg
ICAgfCAyMDg1ICsrKysrKysrKysrKysrKysrKysrCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUveWFy
ci9ZYXJySklULmNwcCAgICAgICAgICAgICB8ICAgMTYgKwogOCBmaWxlcyBjaGFuZ2VkLCAzODg1
IGluc2VydGlvbnMoKyksIDAgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclNINC5jcHAKIGNyZWF0ZSBt
b2RlIDEwMDY0NCBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVy
U0g0LmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L1NINEFzc2VtYmxlci5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL1NINEFzc2VtYmxlci5oCgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKaW5kZXgg
NWY5YjdiYy4uZWRjNWMyMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5n
ZUxvZworKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjY4
IEBACisyMDExLTAzLTAxICBUaG91cmF5YSBBTkRPTFNJICA8dGhvdXJheWEuYW5kb2xzaUBzdC5j
b20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU0g0
IEpJVCBTVVBQT1JULgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NDQzMjkuCisKKyAgICAgICAgQWRkIFlBUlIgc3VwcG9ydCBmb3IgU0g0IHBsYXRmb3Jt
cyAoZGlzYWJsZWQgYnkgZGVmYXVsdCkuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAg
ICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaDoKKyAgICAgICAgKiBhc3NlbWJsZXIv
TWFjcm9Bc3NlbWJsZXJTSDQuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJs
ZXJTSDQ6OmxpbmtDYWxsKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJTSDQ6OnJlcGF0
Y2hDYWxsKToKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJTSDQuaDogQWRkZWQu
CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyU0g0OjpjbGFpbVNjcmF0Y2gpOgorICAgICAg
ICAoSlNDOjpNYWNyb0Fzc2VtYmxlclNINDo6cmVsZWFzZVNjcmF0Y2gpOgorICAgICAgICAoSlND
OjpNYWNyb0Fzc2VtYmxlclNINDo6YWRkMzIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxl
clNINDo6YW5kMzIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclNINDo6bHNoaWZ0MzIp
OgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclNINDo6cnNoaWZ0MzIpOgorICAgICAgICAo
SlNDOjpNYWNyb0Fzc2VtYmxlclNINDo6bXVsMzIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2Vt
YmxlclNINDo6bm90MzIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclNINDo6b3IzMik6
CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyU0g0OjpzdWIzMik6CisgICAgICAgIChKU0M6
Ok1hY3JvQXNzZW1ibGVyU0g0Ojp4b3IzMik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVy
U0g0Ojpsb2FkMzIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclNINDo6bG9hZDgpOgor
ICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclNINDo6bG9hZDE2KToKKyAgICAgICAgKEpTQzo6
TWFjcm9Bc3NlbWJsZXJTSDQ6OnN0b3JlMzIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxl
clNINDo6bG9hZDMyV2l0aEFkZHJlc3NPZmZzZXRQYXRjaCk6CisgICAgICAgIChKU0M6Ok1hY3Jv
QXNzZW1ibGVyU0g0OjpzdG9yZTMyV2l0aEFkZHJlc3NPZmZzZXRQYXRjaCk6CisgICAgICAgIChK
U0M6Ok1hY3JvQXNzZW1ibGVyU0g0Ojpsb2FkUHRyV2l0aFBhdGNoVG9MRUEpOgorICAgICAgICAo
SlNDOjpNYWNyb0Fzc2VtYmxlclNINDo6c3VwcG9ydHNGbG9hdGluZ1BvaW50KToKKyAgICAgICAg
KEpTQzo6TWFjcm9Bc3NlbWJsZXJTSDQ6OnN1cHBvcnRzRmxvYXRpbmdQb2ludFRydW5jYXRlKToK
KyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJTSDQ6OnN1cHBvcnRzRmxvYXRpbmdQb2ludFNx
cnQpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclNINDo6bG9hZERvdWJsZSk6CisgICAg
ICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyU0g0OjpzdG9yZURvdWJsZSk6CisgICAgICAgIChKU0M6
Ok1hY3JvQXNzZW1ibGVyU0g0OjphZGREb3VibGUpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2Vt
YmxlclNINDo6c3ViRG91YmxlKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJTSDQ6Om11
bERvdWJsZSk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyU0g0OjpkaXZEb3VibGUpOgor
ICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclNINDo6Y29udmVydEludDMyVG9Eb3VibGUpOgor
ICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclNINDo6emVyb0RvdWJsZSk6CisgICAgICAgIChK
U0M6Ok1hY3JvQXNzZW1ibGVyU0g0Ojpsb2FkMzJXaXRoVW5hbGlnbmVkSGFsZldvcmRzKToKKyAg
ICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJTSDQ6OmJyYW5jaDMyV2l0aFVuYWxpZ25lZEhhbGZX
b3Jkcyk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyU0g0OjpicmFuY2hEb3VibGVOb25a
ZXJvKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJTSDQ6OmJyYW5jaERvdWJsZVplcm9P
ck5hTik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyU0g0OjpicmFuY2hEb3VibGUpOgor
ICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclNINDo6YnJhbmNoVHJ1ZSk6CisgICAgICAgIChK
U0M6Ok1hY3JvQXNzZW1ibGVyU0g0OjpicmFuY2hGYWxzZSk6CisgICAgICAgIChKU0M6Ok1hY3Jv
QXNzZW1ibGVyU0g0OjpzZXQ4Q29tcGFyZTMyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJs
ZXJTSDQ6OmJyYW5jaDMyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJTSDQ6OnNxcnRE
b3VibGUpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclNINDo6YnJhbmNoVGVzdDgpOgor
ICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclNINDo6c2lnbkV4dGVuZDMyVG9QdHIpOgorICAg
ICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclNINDo6YnJhbmNoOCk6CisgICAgICAgIChKU0M6Ok1h
Y3JvQXNzZW1ibGVyU0g0OjpicmFuY2hUcnVuY2F0ZURvdWJsZVRvSW50MzIpOgorICAgICAgICAo
SlNDOjpNYWNyb0Fzc2VtYmxlclNINDo6cG9wKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJs
ZXJTSDQ6OnB1c2gpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclNINDo6bW92ZSk6Cisg
ICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyU0g0Ojptb3ZlV2l0aFBhdGNoKToKKyAgICAgICAg
KEpTQzo6TWFjcm9Bc3NlbWJsZXJTSDQ6OmV4dHV3KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3Nl
bWJsZXJTSDQ6OnNldDMyQ29tcGFyZTMyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJT
SDQ6OnNldDMyVGVzdDgpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclNINDo6bG9hZFB0
ckxpbmtSZWcpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclNINDo6YnJhbmNoMTYpOgor
ICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclNINDo6YnJhbmNoVGVzdDMyKToKKyAgICAgICAg
KEpTQzo6TWFjcm9Bc3NlbWJsZXJTSDQ6Omp1bXApOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2Vt
YmxlclNINDo6YnJhbmNoQWRkMzIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclNINDo6
YnJhbmNoTXVsMzIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclNINDo6YnJhbmNoU3Vi
MzIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclNINDo6YnJhbmNoT3IzMik6CisgICAg
ICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyU0g0OjpicmFuY2hDb252ZXJ0RG91YmxlVG9JbnQzMik6
CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyU0g0OjpuZWczMik6CisgICAgICAgIChKU0M6
Ok1hY3JvQXNzZW1ibGVyU0g0Ojp1cnNoaWZ0MzIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2Vt
YmxlclNINDo6Y2FsbCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyU0g0OjpuZWFyQ2Fs
bCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyU0g0OjpicmVha3BvaW50KToKKyAgICAg
ICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJTSDQ6OmJyYW5jaFB0cldpdGhQYXRjaCk6CisgICAgICAg
IChKU0M6Ok1hY3JvQXNzZW1ibGVyU0g0OjpyZXQpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2Vt
YmxlclNINDo6c3RvcmVQdHJXaXRoUGF0Y2gpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxl
clNINDo6c2l6ZU9mQ29uc3RhbnRQb29sKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJT
SDQ6OnRhaWxSZWN1cnNpdmVDYWxsKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJTSDQ6
Om1ha2VUYWlsUmVjdXJzaXZlQ2FsbCk6CisgICAgICAgICogYXNzZW1ibGVyL1NINEFzc2VtYmxl
ci5jcHA6IEFkZGVkLgorICAgICAgICAqIGFzc2VtYmxlci9TSDRBc3NlbWJsZXIuaDogQWRkZWQu
CisgICAgICAgIChnZXRPcGNvZGVHcm91cDEpOgorICAgICAgICAoZ2V0T3Bjb2RlR3JvdXAyKToK
KyAgICAgICAgKGdldE9wY29kZUdyb3VwMyk6CisgICAgICAgIChnZXRPcGNvZGVHcm91cDQpOgor
ICAgICAgICAoZ2V0T3Bjb2RlR3JvdXA1KToKKyAgICAgICAgKGdldE9wY29kZUdyb3VwNik6Cisg
ICAgICAgIChnZXRPcGNvZGVHcm91cDcpOgorICAgICAgICAoZ2V0T3Bjb2RlR3JvdXA4KToKKyAg
ICAgICAgKGdldE9wY29kZUdyb3VwOSk6CisgICAgICAgIChnZXRPcGNvZGVHcm91cDEwKToKKyAg
ICAgICAgKGdldE9wY29kZUdyb3VwMTEpOgorICAgICAgICAoZ2V0Um4pOgorICAgICAgICAoZ2V0
Um0pOgorICAgICAgICAoZ2V0RGlzcCk6CisgICAgICAgIChnZXRJbW04KToKKyAgICAgICAgKGdl
dEltbTEyKToKKyAgICAgICAgKGdldERSbik6CisgICAgICAgIChnZXREUm0pOgorICAgICAgICAo
SlNDOjopOgorICAgICAgICAoSlNDOjpTSDRSZWdpc3RlcnM6Oik6CisgICAgICAgIChKU0M6OlNI
NEFzc2VtYmxlcjo6KToKKyAgICAgICAgKEpTQzo6U0g0QXNzZW1ibGVyOjpTSDRBc3NlbWJsZXIp
OgorICAgICAgICAoSlNDOjpTSDRBc3NlbWJsZXI6OkptcFNyYzo6Sm1wU3JjKToKKyAgICAgICAg
KEpTQzo6U0g0QXNzZW1ibGVyOjpKbXBEc3Q6OkptcERzdCk6CisgICAgICAgIChKU0M6OlNINEFz
c2VtYmxlcjo6Sm1wRHN0Ojppc1VzZWQpOgorICAgICAgICAoSlNDOjpTSDRBc3NlbWJsZXI6Okpt
cERzdDo6aXNTZXQpOgorICAgICAgICAoSlNDOjpTSDRBc3NlbWJsZXI6OkptcERzdDo6dXNlZCk6
CisgICAgICAgIChKU0M6OlNINEFzc2VtYmxlcjo6aXNJbW1lZGlhdGUpOgorICAgICAgICAoSlND
OjpTSDRBc3NlbWJsZXI6OmNsYWltU2NyYXRjaCk6CisgICAgICAgIChKU0M6OlNINEFzc2VtYmxl
cjo6cmVsZWFzZVNjcmF0Y2gpOgorICAgICAgICAoSlNDOjpTSDRBc3NlbWJsZXI6OnB1c2hfcik6
CisgICAgICAgIChKU0M6OlNINEFzc2VtYmxlcjo6cG9wX3IpOgorICAgICAgICAoSlNDOjpTSDRB
c3NlbWJsZXI6OnB1c2hfaTMyKToKKyAgICAgICAgKEpTQzo6U0g0QXNzZW1ibGVyOjpwdXNoX20p
OgorICAgICAgICAoSlNDOjpTSDRBc3NlbWJsZXI6OnBvcF9tKToKKyAgICAgICAgKEpTQzo6U0g0
QXNzZW1ibGVyOjptb3Z0KToKKyAgICAgICAgKEpTQzo6U0g0QXNzZW1ibGVyOjphZGRsX3JyKToK
KyAgICAgICAgKEpTQzo6U0g0QXNzZW1ibGVyOjphZGRjbF9ycik6CisgICAgICAgIChKU0M6OlNI
NEFzc2VtYmxlcjo6YWRkdmxfcnIpOgorICAgICAgICAoSlNDOjpTSDRBc3NlbWJsZXI6OmFkZGxf
aThyKToKKyAgICAgICAgKEpTQzo6U0g0QXNzZW1ibGVyOjphbmRsX3JyKToKKyAgICAgICAgKEpT
Qzo6U0g0QXNzZW1ibGVyOjphZGRsX2lyKToKKyAgICAgICAgKEpTQzo6U0g0QXNzZW1ibGVyOjph
bmRsX2k4cik6CisgICAgICAgIChKU0M6OlNINEFzc2VtYmxlcjo6ZGl2MWxfcnIpOgorICAgICAg
ICAoSlNDOjpTSDRBc3NlbWJsZXI6OmRpdjBsX3JyKToKKyAgICAgICAgKEpTQzo6U0g0QXNzZW1i
bGVyOjpub3RsX3IpOgorICAgICAgICAoSlNDOjpTSDRBc3NlbWJsZXI6Om9ybF9ycik6CisgICAg
ICAgIChKU0M6OlNINEFzc2VtYmxlcjo6b3JsX2k4cik6CisgICAgICAgIChKU0M6OlNINEFzc2Vt
Ymxlcjo6c3VibF9ycik6CisgICAgICAgIChKU0M6OlNINEFzc2VtYmxlcjo6c3VidmxfcnIpOgor
ICAgICAgICAoSlNDOjpTSDRBc3NlbWJsZXI6OnN1YmxfaW1tcik6CisgICAgICAgIChKU0M6OlNI
NEFzc2VtYmxlcjo6eG9ybF9ycik6CisgICAgICAgIChKU0M6OlNINEFzc2VtYmxlcjo6eG9ybF9p
OHIpOgorICAgICAgICAoSlNDOjpTSDRBc3NlbWJsZXI6OnNobGxfaThyKToKKyAgICAgICAgKEpT
Qzo6U0g0QXNzZW1ibGVyOjpuZWcpOgorICAgICAgICAoSlNDOjpTSDRBc3NlbWJsZXI6OnNobGxf
cnIpOgorICAgICAgICAoSlNDOjpTSDRBc3NlbWJsZXI6OnNobHJfcnIpOgorICAgICAgICAoSlND
OjpTSDRBc3NlbWJsZXI6OnNoYXJfcnIpOgorICAgICAgICAoSlNDOjpTSDRBc3NlbWJsZXI6OnNo
YV9ycik6CisgICAgICAgIChKU0M6OlNINEFzc2VtYmxlcjo6c2hscl9pOHIpOgorICAgICAgICAo
SlNDOjpTSDRBc3NlbWJsZXI6OmltdWxsX3JyKToKKyAgICAgICAgKEpTQzo6U0g0QXNzZW1ibGVy
OjpkbXVsbF9ycik6CisgICAgICAgIChKU0M6OlNINEFzc2VtYmxlcjo6ZG11bHNsX3JyKToKKyAg
ICAgICAgKEpTQzo6U0g0QXNzZW1ibGVyOjpzdHNtYWNsKToKKyAgICAgICAgKEpTQzo6U0g0QXNz
ZW1ibGVyOjpzdHNtYWNoKToKKyAgICAgICAgKEpTQzo6U0g0QXNzZW1ibGVyOjpjbXBsX3JyKToK
KyAgICAgICAgKEpTQzo6U0g0QXNzZW1ibGVyOjpjbXBwbCk6CisgICAgICAgIChKU0M6OlNINEFz
c2VtYmxlcjo6Y21wcHopOgorICAgICAgICAoSlNDOjpTSDRBc3NlbWJsZXI6OmNtcGxfaXIpOgor
ICAgICAgICAoSlNDOjpTSDRBc3NlbWJsZXI6OmNtcGxfbXIpOgorICAgICAgICAoSlNDOjpTSDRB
c3NlbWJsZXI6OmNtcGxfcm0pOgorICAgICAgICAoSlNDOjpTSDRBc3NlbWJsZXI6OmNtcGxfaW0p
OgorICAgICAgICAoSlNDOjpTSDRBc3NlbWJsZXI6OnRlc3RsX3JyKToKKyAgICAgICAgKEpTQzo6
U0g0QXNzZW1ibGVyOjp0ZXN0bF9pOHIpOgorICAgICAgICAoSlNDOjpTSDRBc3NlbWJsZXI6OnRl
c3RsX2kzMnIpOgorICAgICAgICAoSlNDOjpTSDRBc3NlbWJsZXI6OnRlc3RsX2kzMm0pOgorICAg
ICAgICAoSlNDOjpTSDRBc3NlbWJsZXI6OnRlc3RiX2k4cik6CisgICAgICAgIChKU0M6OlNINEFz
c2VtYmxlcjo6bm9wKToKKyAgICAgICAgKEpTQzo6U0g0QXNzZW1ibGVyOjpzZXR0KToKKyAgICAg
ICAgKEpTQzo6U0g0QXNzZW1ibGVyOjpjbHJ0KToKKyAgICAgICAgKEpTQzo6U0g0QXNzZW1ibGVy
Ojpia3B0KToKKyAgICAgICAgKEpTQzo6U0g0QXNzZW1ibGVyOjpicmFuY2gpOgorICAgICAgICAo
SlNDOjpTSDRBc3NlbWJsZXI6Omxkc3ByKToKKyAgICAgICAgKEpTQzo6U0g0QXNzZW1ibGVyOjpz
dHNwcik6CisgICAgICAgIChKU0M6OlNINEFzc2VtYmxlcjo6ZXh0dXcpOgorICAgICAgICAoSlND
OjpTSDRBc3NlbWJsZXI6Omxkc3JtX2ZwdWwpOgorICAgICAgICAoSlNDOjpTSDRBc3NlbWJsZXI6
OmZuZWcpOgorICAgICAgICAoSlNDOjpTSDRBc3NlbWJsZXI6OmZzcXJ0KToKKyAgICAgICAgKEpT
Qzo6U0g0QXNzZW1ibGVyOjpzdHNfZnB1bF9ybik6CisgICAgICAgIChKU0M6OlNINEFzc2VtYmxl
cjo6ZmxvYXRfZnB1bF9mcm4pOgorICAgICAgICAoSlNDOjpTSDRBc3NlbWJsZXI6OmZtdWxsKToK
KyAgICAgICAgKEpTQzo6U0g0QXNzZW1ibGVyOjpmbW92c19yZWFkX3JtKToKKyAgICAgICAgKEpT
Qzo6U0g0QXNzZW1ibGVyOjpmbW92c193cml0ZV9ybSk6CisgICAgICAgIChKU0M6OlNINEFzc2Vt
Ymxlcjo6Zm1vdnNfd3JpdGVfcjByKToKKyAgICAgICAgKEpTQzo6U0g0QXNzZW1ibGVyOjpmbW92
c19yZWFkX3Iwcik6CisgICAgICAgIChKU0M6OlNINEFzc2VtYmxlcjo6Zm1vdnNfcmVhZF9ybV9p
bmMpOgorICAgICAgICAoSlNDOjpTSDRBc3NlbWJsZXI6OmZtb3ZzX3dyaXRlX3JuX2RlYyk6Cisg
ICAgICAgIChKU0M6OlNINEFzc2VtYmxlcjo6ZnRyY19ybV9mcHVsKToKKyAgICAgICAgKEpTQzo6
U0g0QXNzZW1ibGVyOjpmbGRzX2ZwdWwpOgorICAgICAgICAoSlNDOjpTSDRBc3NlbWJsZXI6OmZz
dHNfZnB1bCk6CisgICAgICAgIChKU0M6OlNINEFzc2VtYmxlcjo6bGRzZnBzY3IpOgorICAgICAg
ICAoSlNDOjpTSDRBc3NlbWJsZXI6OnN0c2Zwc2NyKToKKyAgICAgICAgKEpTQzo6U0g0QXNzZW1i
bGVyOjpkY21wcGVxKToKKyAgICAgICAgKEpTQzo6U0g0QXNzZW1ibGVyOjpkY21wcGd0KToKKyAg
ICAgICAgKEpTQzo6U0g0QXNzZW1ibGVyOjpkbXVsX3JyKToKKyAgICAgICAgKEpTQzo6U0g0QXNz
ZW1ibGVyOjpkc3ViX3JyKToKKyAgICAgICAgKEpTQzo6U0g0QXNzZW1ibGVyOjpkYWRkX3JyKToK
KyAgICAgICAgKEpTQzo6U0g0QXNzZW1ibGVyOjpkbW92X3JyKToKKyAgICAgICAgKEpTQzo6U0g0
QXNzZW1ibGVyOjpkZGl2X3JyKToKKyAgICAgICAgKEpTQzo6U0g0QXNzZW1ibGVyOjpkc3FydCk6
CisgICAgICAgIChKU0M6OlNINEFzc2VtYmxlcjo6ZG91YmxlbG9hZCk6CisgICAgICAgIChKU0M6
OlNINEFzc2VtYmxlcjo6ZG5lZyk6CisgICAgICAgIChKU0M6OlNINEFzc2VtYmxlcjo6ZG91Ymxl
c3RvcmUpOgorICAgICAgICAoSlNDOjpTSDRBc3NlbWJsZXI6OmZtb3ZfcmVhZF9ybSk6CisgICAg
ICAgIChKU0M6OlNINEFzc2VtYmxlcjo6Zm1vdl93cml0ZV9ybSk6CisgICAgICAgIChKU0M6OlNI
NEFzc2VtYmxlcjo6Zm1vdl93cml0ZV9yMHIpOgorICAgICAgICAoSlNDOjpTSDRBc3NlbWJsZXI6
OmZtb3ZfcmVhZF9yMHIpOgorICAgICAgICAoSlNDOjpTSDRBc3NlbWJsZXI6OmZtb3ZfcmVhZF9y
bV9pbmMpOgorICAgICAgICAoSlNDOjpTSDRBc3NlbWJsZXI6OmZtb3Zfd3JpdGVfcm5fZGVjKToK
KyAgICAgICAgKEpTQzo6U0g0QXNzZW1ibGVyOjpmbG9hdF9mcHVsX2Rybik6CisgICAgICAgIChK
U0M6OlNINEFzc2VtYmxlcjo6ZnRyY19kcm1fZnB1bCk6CisgICAgICAgIChKU0M6OlNINEFzc2Vt
Ymxlcjo6bW92X2ltbTgpOgorICAgICAgICAoSlNDOjpTSDRBc3NlbWJsZXI6Om1vdmxfcnIpOgor
ICAgICAgICAoSlNDOjpTSDRBc3NlbWJsZXI6Om1vdndfcm0pOgorICAgICAgICAoSlNDOjpTSDRB
c3NlbWJsZXI6Om1vdndfbXIpOgorICAgICAgICAoSlNDOjpTSDRBc3NlbWJsZXI6Om1vdndfcjBt
cik6CisgICAgICAgIChKU0M6OlNINEFzc2VtYmxlcjo6bW92bF9ybSk6CisgICAgICAgIChKU0M6
OlNINEFzc2VtYmxlcjo6bW92bF9pMzJtKToKKyAgICAgICAgKEpTQzo6U0g0QXNzZW1ibGVyOjpt
b3ZsX21yKToKKyAgICAgICAgKEpTQzo6U0g0QXNzZW1ibGVyOjptb3ZiX21yKToKKyAgICAgICAg
KEpTQzo6U0g0QXNzZW1ibGVyOjptb3ZiX3IwbXIpOgorICAgICAgICAoSlNDOjpTSDRBc3NlbWJs
ZXI6Om1vdmxfcjBtcik6CisgICAgICAgIChKU0M6OlNINEFzc2VtYmxlcjo6bW92bF9ybXIwKToK
KyAgICAgICAgKEpTQzo6U0g0QXNzZW1ibGVyOjptb3ZsX2k4cik6CisgICAgICAgIChKU0M6OlNI
NEFzc2VtYmxlcjo6b3JsX2lyKToKKyAgICAgICAgKEpTQzo6U0g0QXNzZW1ibGVyOjpsb2FkQ29u
c3RhbnQpOgorICAgICAgICAoSlNDOjpTSDRBc3NlbWJsZXI6OmxvYWRDb25zdGFudFVuY2hlY2tl
ZFNpemUpOgorICAgICAgICAoSlNDOjpTSDRBc3NlbWJsZXI6OmNhbGwpOgorICAgICAgICAoSlND
OjpTSDRBc3NlbWJsZXI6OmptcCk6CisgICAgICAgIChKU0M6OlNINEFzc2VtYmxlcjo6am1wX3Ip
OgorICAgICAgICAoSlNDOjpTSDRBc3NlbWJsZXI6OmptcF9tKToKKyAgICAgICAgKEpTQzo6U0g0
QXNzZW1ibGVyOjpqbmUpOgorICAgICAgICAoSlNDOjpTSDRBc3NlbWJsZXI6OmplKToKKyAgICAg
ICAgKEpTQzo6U0g0QXNzZW1ibGVyOjpyZXQpOgorICAgICAgICAoSlNDOjpTSDRBc3NlbWJsZXI6
OmxhYmVsKToKKyAgICAgICAgKEpTQzo6U0g0QXNzZW1ibGVyOjpzaXplT2ZDb25zdGFudFBvb2wp
OgorICAgICAgICAoSlNDOjpTSDRBc3NlbWJsZXI6OmFsaWduKToKKyAgICAgICAgKEpTQzo6U0g0
QXNzZW1ibGVyOjpjaGFuZ2VQQ3JlbGF0aXZlQWRkcmVzcyk6CisgICAgICAgIChKU0M6OlNINEFz
c2VtYmxlcjo6Z2V0SW5zdHJ1Y3Rpb25QdHIpOgorICAgICAgICAoSlNDOjpTSDRBc3NlbWJsZXI6
OmxpbmtKdW1wKToKKyAgICAgICAgKEpTQzo6U0g0QXNzZW1ibGVyOjpsaW5rQ2FsbCk6CisgICAg
ICAgIChKU0M6OlNINEFzc2VtYmxlcjo6bGlua1BvaW50ZXIpOgorICAgICAgICAoSlNDOjpTSDRB
c3NlbWJsZXI6OmdldENhbGxSZXR1cm5PZmZzZXQpOgorICAgICAgICAoSlNDOjpTSDRBc3NlbWJs
ZXI6OmdldExkckltbUFkZHJlc3NPblBvb2wpOgorICAgICAgICAoSlNDOjpTSDRBc3NlbWJsZXI6
OnBhdGNoQ29uc3RhbnRQb29sTG9hZCk6CisgICAgICAgIChKU0M6OlNINEFzc2VtYmxlcjo6cGxh
Y2VDb25zdGFudFBvb2xCYXJyaWVyKToKKyAgICAgICAgKEpTQzo6U0g0QXNzZW1ibGVyOjpyZXBh
dGNoUG9pbnRlcik6CisgICAgICAgIChKU0M6OlNINEFzc2VtYmxlcjo6cmVwYXRjaExvYWRQdHJU
b0xFQSk6CisgICAgICAgIChKU0M6OlNINEFzc2VtYmxlcjo6cmVwYXRjaEludDMyKToKKyAgICAg
ICAgKEpTQzo6U0g0QXNzZW1ibGVyOjpyZWxpbmtDYWxsKToKKyAgICAgICAgKEpTQzo6U0g0QXNz
ZW1ibGVyOjpyZWxpbmtKdW1wKToKKyAgICAgICAgKEpTQzo6U0g0QXNzZW1ibGVyOjpnZXRSZWxv
Y2F0ZWRBZGRyZXNzKToKKyAgICAgICAgKEpTQzo6U0g0QXNzZW1ibGVyOjpnZXREaWZmZXJlbmNl
QmV0d2VlbkxhYmVscyk6CisgICAgICAgIChKU0M6OlNINEFzc2VtYmxlcjo6cGF0Y2hQb2ludGVy
KToKKyAgICAgICAgKEpTQzo6U0g0QXNzZW1ibGVyOjpwYXRjaEludDMyKToKKyAgICAgICAgKEpT
Qzo6U0g0QXNzZW1ibGVyOjpleGVjdXRhYmxlQ29weSk6CisgICAgICAgIChKU0M6OlNINEFzc2Vt
Ymxlcjo6cHJlZml4KToKKyAgICAgICAgKEpTQzo6U0g0QXNzZW1ibGVyOjpvbmVTaG9ydE9wKToK
KyAgICAgICAgKEpTQzo6U0g0QXNzZW1ibGVyOjplbnN1cmVTcGFjZSk6CisgICAgICAgIChKU0M6
OlNINEFzc2VtYmxlcjo6ZGF0YSk6CisgICAgICAgIChKU0M6OlNINEFzc2VtYmxlcjo6c2l6ZSk6
CisgICAgICAgIChKU0M6OlNINEFzc2VtYmxlcjo6cHJpbnRJbnN0cik6CisgICAgICAgIChKU0M6
OlNINEFzc2VtYmxlcjo6cHJpbnRmU3Rkb3V0SW5zdHIpOgorICAgICAgICAoSlNDOjpTSDRBc3Nl
bWJsZXI6OnZwcmludGZTdGRvdXRJbnN0cik6CisgICAgICAgICogeWFyci9ZYXJySklULmNwcDoK
KyAgICAgICAgKEpTQzo6WWFycjo6WWFyckdlbmVyYXRvcjo6Z2VuZXJhdGVFbnRlcik6CisgICAg
ICAgIChKU0M6OllhcnI6OllhcnJHZW5lcmF0b3I6OmdlbmVyYXRlUmV0dXJuKToKKwogMjAxMS0w
My0wMSAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2Vk
IGJ5IEVyaWMgU2VpZGVsLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1h
a2VmaWxlLmFtIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtCmluZGV4IDFh
ZmI5NmMuLjMzOTc1ZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtl
ZmlsZS5hbQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUuYW0KQEAgLTkw
LDYgKzkwLDEwIEBAIGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaCBcCiAJU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oIFwKIAlTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2LmggXAorCVNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJTSDQuaCBcCisJU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclNINC5jcHAgXAorCVNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvU0g0QXNzZW1ibGVyLmggXAorCVNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvU0g0QXNzZW1ibGVyLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci9SZXBhdGNoQnVmZmVyLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvWDg2QXNzZW1ibGVyLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvTWFjcm9Bc3NlbWJsZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
TWFjcm9Bc3NlbWJsZXIuaAppbmRleCBmYTE2NWRlLi40MzFjZWNiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5oCkBAIC01MCw2ICs1MCwx
MCBAQCBuYW1lc3BhY2UgSlNDIHsgdHlwZWRlZiBNYWNyb0Fzc2VtYmxlclg4NiBNYWNyb0Fzc2Vt
YmxlckJhc2U7IH07CiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJYODZfNjQuaCIKIG5hbWVzcGFj
ZSBKU0MgeyB0eXBlZGVmIE1hY3JvQXNzZW1ibGVyWDg2XzY0IE1hY3JvQXNzZW1ibGVyQmFzZTsg
fTsKIAorI2VsaWYgQ1BVKFNINCkKKyNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlclNINC5oIgorbmFt
ZXNwYWNlIEpTQyB7IHR5cGVkZWYgTWFjcm9Bc3NlbWJsZXJTSDQgTWFjcm9Bc3NlbWJsZXJCYXNl
OyB9OworCiAjZWxzZQogI2Vycm9yICJUaGUgTWFjcm9Bc3NlbWJsZXIgaXMgbm90IHN1cHBvcnRl
ZCBvbiB0aGlzIHBsYXRmb3JtLiIKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclNINC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyU0g0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi41Y2E2Njc3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclNINC5jcHAKQEAgLTAsMCArMSw2MiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBTVE1pY3JvZWxlY3Ryb25pY3MuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisqLworCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShB
U1NFTUJMRVIpICYmIENQVShTSDQpCisKKyNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlclNINC5oIgor
CisjaW5jbHVkZSAiU0g0QXNzZW1ibGVyLmgiCisKK25hbWVzcGFjZSBKU0MgeworY29uc3QgQ29u
ZGl0aW9uIE1hY3JvQXNzZW1ibGVyU0g0OjpFcXVhbCA9IFNINEFzc2VtYmxlcjo6RVE7Citjb25z
dCBDb25kaXRpb24gTWFjcm9Bc3NlbWJsZXJTSDQ6Ok5vdEVxdWFsID0gU0g0QXNzZW1ibGVyOjpO
RTsKK2NvbnN0IENvbmRpdGlvbiBNYWNyb0Fzc2VtYmxlclNINDo6R3JlYXRlclRoYW4gPSBTSDRB
c3NlbWJsZXI6OkdUOworY29uc3QgQ29uZGl0aW9uIE1hY3JvQXNzZW1ibGVyU0g0OjpHcmVhdGVy
VGhhbk9yRXF1YWwgPSBTSDRBc3NlbWJsZXI6OkdFOworY29uc3QgQ29uZGl0aW9uIE1hY3JvQXNz
ZW1ibGVyU0g0OjpMZXNzVGhhbiA9IFNINEFzc2VtYmxlcjo6TFQ7Citjb25zdCBDb25kaXRpb24g
TWFjcm9Bc3NlbWJsZXJTSDQ6Okxlc3NUaGFuT3JFcXVhbCA9IFNINEFzc2VtYmxlcjo6TEU7Citj
b25zdCBDb25kaXRpb24gTWFjcm9Bc3NlbWJsZXJTSDQ6OlVHcmVhdGVyVGhhbiA9IFNINEFzc2Vt
Ymxlcjo6SEk7IC8vIHVuc2lnZW5kIGdyZWF0ZXIgdGhhbgorY29uc3QgQ29uZGl0aW9uIE1hY3Jv
QXNzZW1ibGVyU0g0OjpVR3JlYXRlclRoYW5PckVxdWFsID0gU0g0QXNzZW1ibGVyOjpIUzsgLy8g
dW5zaWdlbmQgZ3JlYXRlciB0aGFuIG9yIGVxdWFsCitjb25zdCBDb25kaXRpb24gTWFjcm9Bc3Nl
bWJsZXJTSDQ6OlVMZXNzVGhhbiA9IFNINEFzc2VtYmxlcjo6TEk7IC8vIHVuc2lnZW5kIGdyZWF0
ZXIgdGhhbgorY29uc3QgQ29uZGl0aW9uIE1hY3JvQXNzZW1ibGVyU0g0OjpVTGVzc1RoYW5PckVx
dWFsID0gU0g0QXNzZW1ibGVyOjpMUzsgLy8gdW5zaWdlbmQgZ3JlYXRlciB0aGFuIG9yIGVxdWFs
Citjb25zdCBDb25kaXRpb24gTWFjcm9Bc3NlbWJsZXJTSDQ6Olplcm8gPSBTSDRBc3NlbWJsZXI6
OkVROworY29uc3QgQ29uZGl0aW9uIE1hY3JvQXNzZW1ibGVyU0g0OjpOb25aZXJvID0gU0g0QXNz
ZW1ibGVyOjpORTsKK2NvbnN0IENvbmRpdGlvbiBNYWNyb0Fzc2VtYmxlclNINDo6T3ZlcmZsb3cg
PSBTSDRBc3NlbWJsZXI6Ok9GOworY29uc3QgQ29uZGl0aW9uIE1hY3JvQXNzZW1ibGVyU0g0OjpB
Ym92ZSA9IFNINEFzc2VtYmxlcjo6SEk7Citjb25zdCBDb25kaXRpb24gTWFjcm9Bc3NlbWJsZXJT
SDQ6OkFib3ZlT3JFcXVhbCA9IFNINEFzc2VtYmxlcjo6SFM7Citjb25zdCBDb25kaXRpb24gTWFj
cm9Bc3NlbWJsZXJTSDQ6OkJlbG93ID0gU0g0QXNzZW1ibGVyOjpMSTsKK2NvbnN0IENvbmRpdGlv
biBNYWNyb0Fzc2VtYmxlclNINDo6QmVsb3dPckVxdWFsID0gU0g0QXNzZW1ibGVyOjpMUzsKK2Nv
bnN0IENvbmRpdGlvbiBNYWNyb0Fzc2VtYmxlclNINDo6RG91YmxlRXF1YWwgPSBTSDRBc3NlbWJs
ZXI6OkVROworY29uc3QgQ29uZGl0aW9uIE1hY3JvQXNzZW1ibGVyU0g0OjpEb3VibGVOb3RFcXVh
bCA9IFNINEFzc2VtYmxlcjo6TkU7Citjb25zdCBDb25kaXRpb24gTWFjcm9Bc3NlbWJsZXJTSDQ6
OkRvdWJsZUdyZWF0ZXJUaGFuID0gU0g0QXNzZW1ibGVyOjpHVDsKK2NvbnN0IENvbmRpdGlvbiBN
YWNyb0Fzc2VtYmxlclNINDo6RG91YmxlR3JlYXRlclRoYW5PckVxdWFsID0gU0g0QXNzZW1ibGVy
OjpHRTsKK2NvbnN0IENvbmRpdGlvbiBNYWNyb0Fzc2VtYmxlclNINDo6RG91YmxlTGVzc1RoYW4g
PSBTSDRBc3NlbWJsZXI6OkxUOworY29uc3QgQ29uZGl0aW9uIE1hY3JvQXNzZW1ibGVyU0g0OjpE
b3VibGVMZXNzVGhhbk9yRXF1YWwgPSBTSDRBc3NlbWJsZXI6OkxFOworY29uc3QgQ29uZGl0aW9u
IE1hY3JvQXNzZW1ibGVyU0g0OjpEb3VibGVFcXVhbE9yVW5vcmRlcmVkID0gU0g0QXNzZW1ibGVy
OjpFUVU7Citjb25zdCBDb25kaXRpb24gTWFjcm9Bc3NlbWJsZXJTSDQ6OkRvdWJsZU5vdEVxdWFs
T3JVbm9yZGVyZWQgPSBTSDRBc3NlbWJsZXI6Ok5FVTsKK2NvbnN0IENvbmRpdGlvbiBNYWNyb0Fz
c2VtYmxlclNINDo6RG91YmxlR3JlYXRlclRoYW5PclVub3JkZXJlZCA9IFNINEFzc2VtYmxlcjo6
R1RVOworY29uc3QgQ29uZGl0aW9uIE1hY3JvQXNzZW1ibGVyU0g0OjpEb3VibGVHcmVhdGVyVGhh
bk9yRXF1YWxPclVub3JkZXJlZCA9IFNINEFzc2VtYmxlcjo6R0VVOworY29uc3QgQ29uZGl0aW9u
IE1hY3JvQXNzZW1ibGVyU0g0OjpEb3VibGVMZXNzVGhhbk9yVW5vcmRlcmVkID0gU0g0QXNzZW1i
bGVyOjpMVFU7Citjb25zdCBDb25kaXRpb24gTWFjcm9Bc3NlbWJsZXJTSDQ6OkRvdWJsZUxlc3NU
aGFuT3JFcXVhbE9yVW5vcmRlcmVkID0gU0g0QXNzZW1ibGVyOjpMRVU7Citjb25zdCBDb25kaXRp
b24gTWFjcm9Bc3NlbWJsZXJTSDQ6OlNpZ25lZCA9IFNINEFzc2VtYmxlcjo6U0k7CisKK3ZvaWQg
TWFjcm9Bc3NlbWJsZXJTSDQ6OmxpbmtDYWxsKHZvaWQqIGNvZGUsIENhbGwgY2FsbCwgRnVuY3Rp
b25QdHIgZnVuY3Rpb24pCit7CisgICAgU0g0QXNzZW1ibGVyOjpsaW5rQ2FsbChjb2RlLCBjYWxs
Lm1fam1wLCBmdW5jdGlvbi52YWx1ZSgpKTsKK30KKwordm9pZCBNYWNyb0Fzc2VtYmxlclNINDo6
cmVwYXRjaENhbGwoQ29kZUxvY2F0aW9uQ2FsbCBjYWxsLCBDb2RlTG9jYXRpb25MYWJlbCBkZXN0
aW5hdGlvbikKK3sKKyAgICBTSDRBc3NlbWJsZXI6OnJlbGlua0NhbGwoY2FsbC5kYXRhTG9jYXRp
b24oKSwgZGVzdGluYXRpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSk7Cit9CisKK3ZvaWQgTWFjcm9B
c3NlbWJsZXJTSDQ6OnJlcGF0Y2hDYWxsKENvZGVMb2NhdGlvbkNhbGwgY2FsbCwgRnVuY3Rpb25Q
dHIgZGVzdGluYXRpb24pCit7CisgICAgU0g0QXNzZW1ibGVyOjpyZWxpbmtDYWxsKGNhbGwuZGF0
YUxvY2F0aW9uKCksIGRlc3RpbmF0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpOworfQorfSAvLyBu
YW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoQVNTRU1CTEVSKQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclNINC5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclNINC5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzNzgxMjYKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyU0g0LmgKQEAgLTAs
MCArMSwxNDI5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTEgU1RNaWNyb2VsZWN0
cm9uaWNzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisqLworCisjaWZuZGVmIE1hY3JvQXNzZW1ibGVyU0g0X2gKKyNkZWZpbmUgTWFjcm9B
c3NlbWJsZXJTSDRfaAorCisjaW5jbHVkZSAiYXNzZXJ0LmgiCisjaW5jbHVkZSA8d3RmL1BsYXRm
b3JtLmg+CisjaWYgRU5BQkxFKEFTU0VNQkxFUikKKworI2luY2x1ZGUgIkFic3RyYWN0TWFjcm9B
c3NlbWJsZXIuaCIKKyNpbmNsdWRlICJTSDRBc3NlbWJsZXIuaCIKKworbmFtZXNwYWNlIEpTQyB7
Cit0eXBlZGVmIFNINEFzc2VtYmxlcjo6Q29uZGl0aW9uIENvbmRpdGlvbjsKKworY2xhc3MgTWFj
cm9Bc3NlbWJsZXJTSDQgOiBwdWJsaWMgQWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjxTSDRBc3NlbWJs
ZXI+IHsKK3B1YmxpYzoKKworICAgIHR5cGVkZWYgU0g0QXNzZW1ibGVyOjpGUFJlZ2lzdGVySUQg
RlBSZWdpc3RlcklEOworCisgICAgc3RhdGljIGNvbnN0IENvbmRpdGlvbiBFcXVhbDsKKyAgICBz
dGF0aWMgY29uc3QgQ29uZGl0aW9uIE5vdEVxdWFsOworICAgIHN0YXRpYyBjb25zdCBDb25kaXRp
b24gR3JlYXRlclRoYW47CisgICAgc3RhdGljIGNvbnN0IENvbmRpdGlvbiBHcmVhdGVyVGhhbk9y
RXF1YWw7CisgICAgc3RhdGljIGNvbnN0IENvbmRpdGlvbiBMZXNzVGhhbjsKKyAgICBzdGF0aWMg
Y29uc3QgQ29uZGl0aW9uIExlc3NUaGFuT3JFcXVhbDsKKyAgICBzdGF0aWMgY29uc3QgQ29uZGl0
aW9uIFVHcmVhdGVyVGhhbjsKKyAgICBzdGF0aWMgY29uc3QgQ29uZGl0aW9uIFVHcmVhdGVyVGhh
bk9yRXF1YWw7CisgICAgc3RhdGljIGNvbnN0IENvbmRpdGlvbiBVTGVzc1RoYW47CisgICAgc3Rh
dGljIGNvbnN0IENvbmRpdGlvbiBVTGVzc1RoYW5PckVxdWFsOworICAgIHN0YXRpYyBjb25zdCBD
b25kaXRpb24gWmVybzsKKyAgICBzdGF0aWMgY29uc3QgQ29uZGl0aW9uIE5vblplcm87CisgICAg
c3RhdGljIGNvbnN0IENvbmRpdGlvbiBPdmVyZmxvdzsKKyAgICBzdGF0aWMgY29uc3QgQ29uZGl0
aW9uIEFib3ZlOworICAgIHN0YXRpYyBjb25zdCBDb25kaXRpb24gQWJvdmVPckVxdWFsOworICAg
IHN0YXRpYyBjb25zdCBDb25kaXRpb24gQmVsb3c7CisgICAgc3RhdGljIGNvbnN0IENvbmRpdGlv
biBCZWxvd09yRXF1YWw7CisgICAgc3RhdGljIGNvbnN0IENvbmRpdGlvbiBEb3VibGVFcXVhbDsK
KyAgICBzdGF0aWMgY29uc3QgQ29uZGl0aW9uIERvdWJsZU5vdEVxdWFsOworICAgIHN0YXRpYyBj
b25zdCBDb25kaXRpb24gRG91YmxlR3JlYXRlclRoYW47CisgICAgc3RhdGljIGNvbnN0IENvbmRp
dGlvbiBEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWw7CisgICAgc3RhdGljIGNvbnN0IENvbmRpdGlv
biBEb3VibGVMZXNzVGhhbjsKKyAgICBzdGF0aWMgY29uc3QgQ29uZGl0aW9uIERvdWJsZUxlc3NU
aGFuT3JFcXVhbDsKKworICAgIHN0YXRpYyBjb25zdCBDb25kaXRpb24gRG91YmxlRXF1YWxPclVu
b3JkZXJlZDsKKyAgICBzdGF0aWMgY29uc3QgQ29uZGl0aW9uIERvdWJsZU5vdEVxdWFsT3JVbm9y
ZGVyZWQ7CisgICAgc3RhdGljIGNvbnN0IENvbmRpdGlvbiBEb3VibGVHcmVhdGVyVGhhbk9yVW5v
cmRlcmVkOworICAgIHN0YXRpYyBjb25zdCBDb25kaXRpb24gRG91YmxlR3JlYXRlclRoYW5PckVx
dWFsT3JVbm9yZGVyZWQ7CisgICAgc3RhdGljIGNvbnN0IENvbmRpdGlvbiBEb3VibGVMZXNzVGhh
bk9yVW5vcmRlcmVkOworICAgIHN0YXRpYyBjb25zdCBDb25kaXRpb24gRG91YmxlTGVzc1RoYW5P
ckVxdWFsT3JVbm9yZGVyZWQ7CisgICAgc3RhdGljIGNvbnN0IENvbmRpdGlvbiBTaWduZWQ7CisK
KyAgICBzdGF0aWMgY29uc3QgU2NhbGUgU2NhbGVQdHIgPSBUaW1lc0ZvdXI7CisgICAgc3RhdGlj
IGNvbnN0IEZQUmVnaXN0ZXJJRCBmc2NyYXRjaCA9IFNINFJlZ2lzdGVyczo6ZnIxMDsKKyAgICBz
dGF0aWMgY29uc3QgUmVnaXN0ZXJJRCBzdGFja1BvaW50ZXJSZWdpc3RlciA9IFNINFJlZ2lzdGVy
czo6c3A7CisgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgbGlua1JlZ2lzdGVyID0gU0g0UmVn
aXN0ZXJzOjpwcjsKKyAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCBzY3JhdGNoUmVnMyA9IFNI
NFJlZ2lzdGVyczo6cjEzOworCisgICAgUmVnaXN0ZXJJRCBjbGFpbVNjcmF0Y2goKQorICAgIHsK
KyAgICAgICAgIHJldHVybiBtX2Fzc2VtYmxlci5jbGFpbVNjcmF0Y2goKTsKKyAgICB9CisKKyAg
ICB2b2lkIHJlbGVhc2VTY3JhdGNoKFJlZ2lzdGVySUQgcmVnKQorICAgIHsKKyAgICAgICAgIG1f
YXNzZW1ibGVyLnJlbGVhc2VTY3JhdGNoKHJlZyk7CisgICAgfQorCisgICAgLy8gSW50ZWdlciBh
cml0aG1ldGljIG9wZXJhdGlvbnMKKworICAgIHZvaWQgYWRkMzIoUmVnaXN0ZXJJRCBzcmMsIFJl
Z2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmFkZGxfcnIoc3JjLCBk
ZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIGFkZDMyKEltbTMyIGltbSwgUmVnaXN0ZXJJRCBkZXN0
KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuYWRkbF9pcihpbW0ubV92YWx1ZSwgZGVzdCk7
CisgICAgfQorCisgICAgdm9pZCBhZGQzMihJbW0zMiBpbW0sIFJlZ2lzdGVySUQgc3JjLCBSZWdp
c3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBpZiAoc3JjICE9IGRlc3QpCisgICAgICAgICAg
ICBtX2Fzc2VtYmxlci5tb3ZsX3JyKHNyYywgZGVzdCk7CisgICAgICAgIG1fYXNzZW1ibGVyLmFk
ZGxfaXIoaW1tLm1fdmFsdWUsIGRlc3QpOworICAgIH0KKworICAgIHZvaWQgYWRkMzIoSW1tMzIg
aW1tLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNs
YWltU2NyYXRjaCgpOworICAgICAgICBsb2FkMzIoYWRkcmVzcywgc2NyKTsKKyAgICAgICAgYWRk
MzIoaW1tLCBzY3IpOworICAgICAgICBzdG9yZTMyKHNjciwgYWRkcmVzcyk7CisgICAgICAgIHJl
bGVhc2VTY3JhdGNoKHNjcik7CisgICAgfQorCisgICAgdm9pZCBhZGQzMihBZGRyZXNzIHNyYywg
UmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNj
cmF0Y2goKTsKKyAgICAgICAgbG9hZDMyKHNyYywgc2NyKTsKKyAgICAgICAgbV9hc3NlbWJsZXIu
YWRkbF9ycihzY3IsIGRlc3QpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgIH0K
KworICAgIHZvaWQgYW5kMzIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7
CisgICAgICAgIG1fYXNzZW1ibGVyLmFuZGxfcnIoc3JjLCBkZXN0KTsKKyAgICB9CisKKyAgICB2
b2lkIGFuZDMyKEltbTMyIGltbSwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgaWYg
KChpbW0ubV92YWx1ZSA8PSAyNTUpICYmIChpbW0ubV92YWx1ZSA+PSAwKSAmJiAoZGVzdCA9PSBT
SDRSZWdpc3RlcnM6OnIwKSkKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFuZGxfaThyKGltbS5t
X3ZhbHVlLCBkZXN0KTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBSZWdpc3RlcklEIHNj
ciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIubG9hZENvbnN0YW50
KChpbW0ubV92YWx1ZSksIHNjcik7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5hbmRsX3JyKHNj
ciwgZGVzdCk7CisKKyAgICAgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICB2b2lkIGxzaGlmdDMyKFJlZ2lzdGVySUQgc2hpZnRhbW91bnQsIFJlZ2lz
dGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnNobGxfcnIoZGVzdCwgc2hp
ZnRhbW91bnQpOworICAgIH0KKworICAgIHZvaWQgcnNoaWZ0MzIoaW50IGltbSwgUmVnaXN0ZXJJ
RCBkZXN0KQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsK
KyAgICAgICAgbV9hc3NlbWJsZXIubG9hZENvbnN0YW50KC1pbW0sIHNjcik7CisgICAgICAgIG1f
YXNzZW1ibGVyLnNoYV9ycihkZXN0LCBzY3IpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3Ip
OworICAgIH0KKworICAgIHZvaWQgbHNoaWZ0MzIoSW1tMzIgaW1tLCBSZWdpc3RlcklEIGRlc3Qp
CisgICAgeworICAgICAgICBpZiAoKCBpbW0ubV92YWx1ZSA9PSAxKSB8fCAoIGltbS5tX3ZhbHVl
ID09IDIpIHx8ICggaW1tLm1fdmFsdWUgPT0gOCkgfHwgKCBpbW0ubV92YWx1ZSA9PSAxNikpCisg
ICAgICAgICAgICBtX2Fzc2VtYmxlci5zaGxsX2k4cihpbW0ubV92YWx1ZSwgZGVzdCk7CisgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsK
KyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmxvYWRDb25zdGFudChpbW0ubV92YWx1ZSwgc2NyKTsK
KyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnNobGxfcnIoZGVzdCwgc2NyKTsKKyAgICAgICAgICAg
IHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIG11bDMy
KFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2Vt
Ymxlci5pbXVsbF9ycihzcmMsIGRlc3QpOworICAgICAgICBtX2Fzc2VtYmxlci5zdHNtYWNsKGRl
c3QpOworICAgIH0KKworICAgIHZvaWQgbXVsMzIoSW1tMzIgaW1tLCBSZWdpc3RlcklEIHNyYywg
UmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNj
cmF0Y2goKTsKKyAgICAgICAgbW92ZShpbW0sIHNjcik7CisgICAgICAgIGlmICAoc3JjICE9IGRl
c3QpCisgICAgICAgICAgICBtb3ZlKHNyYywgZGVzdCk7CisgICAgICAgIG11bDMyKHNjciwgIGRl
c3QpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgIH0KKworICAgIHZvaWQgbm90
MzIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNz
ZW1ibGVyLm5vdGxfcihzcmMsIGRlc3QpOworICAgIH0KKworICAgIHZvaWQgb3IzMihSZWdpc3Rl
cklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIub3Js
X3JyKHNyYywgZGVzdCk7CisgICAgfQorCisgICAgdm9pZCBvcjMyKEltbTMyIGltbSwgUmVnaXN0
ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIub3JsX2lyKGltbS5tX3ZhbHVl
LCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIHJzaGlmdDMyKFJlZ2lzdGVySUQgc2hpZnRhbW91
bnQsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmNtcGxfaXIo
MzIsIHNoaWZ0YW1vdW50LCBFcXVhbCk7CisgICAgICAgIG1fYXNzZW1ibGVyLmVuc3VyZVNwYWNl
KG1fYXNzZW1ibGVyLm1heEluc3RydWN0aW9uU2l6ZSArIDQpOworICAgICAgICBtX2Fzc2VtYmxl
ci5icmFuY2goQlRfT1BDT0RFLCAxKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubmVnKHNoaWZ0YW1v
dW50LCBzaGlmdGFtb3VudCk7CisgICAgICAgIG1fYXNzZW1ibGVyLnNoYV9ycihkZXN0LCBzaGlm
dGFtb3VudCk7CisgICAgfQorCisgICAgdm9pZCByc2hpZnQzMihJbW0zMiBpbW0sIFJlZ2lzdGVy
SUQgZGVzdCkKKyAgICB7CisgICAgICAgIC8qSW4gdGhlIGNhc2Ugd2hlcmUgc2hpZnRhbW91bnQg
aW5kaWNhdGVzIGEgbG9naWNhbCByaWdodCBzaGlmdCBieSAzMiwgdGhlIHJlc3VsdCBpcyAwKi8K
KyAgICAgICAgaWYgKGltbS5tX3ZhbHVlICYgMHgxZikKKyAgICAgICAgICAgIHJzaGlmdDMyKGlt
bS5tX3ZhbHVlICYgMHgxZiwgZGVzdCk7CisgICAgfQorCisgICAgdm9pZCBzdWIzMihSZWdpc3Rl
cklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuc3Vi
bF9ycihzcmMsIGRlc3QpOworICAgIH0KKworICAgIHZvaWQgc3ViMzIoSW1tMzIgaW1tLCBBYnNv
bHV0ZUFkZHJlc3MgYWRkcmVzcywgUmVnaXN0ZXJJRCBzY3JhdGNoUmVnKQorICAgIHsKKyAgICAg
ICAgUmVnaXN0ZXJJRCByZXN1bHQgPSBjbGFpbVNjcmF0Y2goKTsKKworICAgICAgICBtX2Fzc2Vt
Ymxlci5sb2FkQ29uc3RhbnQocmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdD4oYWRkcmVzcy5tX3B0
ciksIHNjcmF0Y2hSZWcpOworICAgICAgICBtX2Fzc2VtYmxlci5tb3ZsX21yKHNjcmF0Y2hSZWcs
IHJlc3VsdCk7CisKKyAgICAgICAgaWYgKG1fYXNzZW1ibGVyLmlzSW1tZWRpYXRlKC1pbW0ubV92
YWx1ZSkpCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGRsX2k4cigtaW1tLm1fdmFsdWUsIHJl
c3VsdCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIubG9hZENvbnN0
YW50KGltbS5tX3ZhbHVlLCBzY3JhdGNoUmVnMyk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5z
dWJsX3JyKHNjcmF0Y2hSZWczLCByZXN1bHQpOworICAgICAgICB9CisKKyAgICAgICAgc3RvcmUz
MihyZXN1bHQsIHNjcmF0Y2hSZWcpOworCisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHJlc3VsdCk7
CisgICAgfQorCisgICAgdm9pZCBzdWIzMihJbW0zMiBpbW0sIEFic29sdXRlQWRkcmVzcyBhZGRy
ZXNzKQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCByZXN1bHQgPSBjbGFpbVNjcmF0Y2goKTsK
KyAgICAgICAgUmVnaXN0ZXJJRCBzY3JhdGNoUmVnID0gY2xhaW1TY3JhdGNoKCk7CisKKyAgICAg
ICAgbV9hc3NlbWJsZXIubG9hZENvbnN0YW50KHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3Q+KGFk
ZHJlc3MubV9wdHIpLCBzY3JhdGNoUmVnKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubW92bF9tcihz
Y3JhdGNoUmVnLCByZXN1bHQpOworCisgICAgICAgIGlmIChtX2Fzc2VtYmxlci5pc0ltbWVkaWF0
ZSgtaW1tLm1fdmFsdWUpKQorICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRkbF9pOHIoLWltbS5t
X3ZhbHVlLCByZXN1bHQpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVy
LmxvYWRDb25zdGFudChpbW0ubV92YWx1ZSwgc2NyYXRjaFJlZzMpOworICAgICAgICAgICAgbV9h
c3NlbWJsZXIuc3VibF9ycihzY3JhdGNoUmVnMywgcmVzdWx0KTsKKyAgICAgICAgfQorCisgICAg
ICAgIHN0b3JlMzIocmVzdWx0LCBzY3JhdGNoUmVnKTsKKworICAgICAgICByZWxlYXNlU2NyYXRj
aChyZXN1bHQpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3JhdGNoUmVnKTsKKyAgICB9CisK
KyAgICB2b2lkIGFkZDMyKEltbTMyIGltbSwgQWJzb2x1dGVBZGRyZXNzIGFkZHJlc3MsIFJlZ2lz
dGVySUQgc2NyYXRjaFJlZykKKyAgICB7CisgICAgICAgIFJlZ2lzdGVySUQgcmVzdWx0ID0gY2xh
aW1TY3JhdGNoKCk7CisKKyAgICAgICAgbV9hc3NlbWJsZXIubG9hZENvbnN0YW50KHJlaW50ZXJw
cmV0X2Nhc3Q8dWludDMyX3Q+KGFkZHJlc3MubV9wdHIpLCBzY3JhdGNoUmVnKTsKKyAgICAgICAg
bV9hc3NlbWJsZXIubW92bF9tcihzY3JhdGNoUmVnLCByZXN1bHQpOworCisgICAgICAgIGlmICht
X2Fzc2VtYmxlci5pc0ltbWVkaWF0ZShpbW0ubV92YWx1ZSkpCisgICAgICAgICAgICBtX2Fzc2Vt
Ymxlci5hZGRsX2k4cihpbW0ubV92YWx1ZSwgcmVzdWx0KTsKKyAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICBtX2Fzc2VtYmxlci5sb2FkQ29uc3RhbnQoaW1tLm1fdmFsdWUsIHNjcmF0Y2hSZWcz
KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZGxfcnIoc2NyYXRjaFJlZzMsIHJlc3VsdCk7
CisgICAgICAgIH0KKworICAgICAgICBzdG9yZTMyKHJlc3VsdCwgc2NyYXRjaFJlZyk7CisKKyAg
ICAgICAgcmVsZWFzZVNjcmF0Y2gocmVzdWx0KTsKKyAgICB9CisKKyAgICB2b2lkIGFkZDMyKElt
bTMyIGltbSwgQWJzb2x1dGVBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBSZWdpc3Rl
cklEIHJlc3VsdCA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBSZWdpc3RlcklEIHNjcmF0Y2hS
ZWcgPSBjbGFpbVNjcmF0Y2goKTsKKworICAgICAgICBtX2Fzc2VtYmxlci5sb2FkQ29uc3RhbnQo
cmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdD4oYWRkcmVzcy5tX3B0ciksIHNjcmF0Y2hSZWcpOwor
ICAgICAgICBtX2Fzc2VtYmxlci5tb3ZsX21yKHNjcmF0Y2hSZWcsIHJlc3VsdCk7CisKKyAgICAg
ICAgaWYgKG1fYXNzZW1ibGVyLmlzSW1tZWRpYXRlKGltbS5tX3ZhbHVlKSkKKyAgICAgICAgICAg
IG1fYXNzZW1ibGVyLmFkZGxfaThyKGltbS5tX3ZhbHVlLCByZXN1bHQpOworICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmxvYWRDb25zdGFudChpbW0ubV92YWx1ZSwgc2Ny
YXRjaFJlZzMpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRkbF9ycihzY3JhdGNoUmVnMywg
cmVzdWx0KTsKKyAgICAgICAgfQorCisgICAgICAgIHN0b3JlMzIocmVzdWx0LCBzY3JhdGNoUmVn
KTsKKworICAgICAgICByZWxlYXNlU2NyYXRjaChyZXN1bHQpOworICAgICAgICByZWxlYXNlU2Ny
YXRjaChzY3JhdGNoUmVnKTsKKyAgICB9CisKKyAgICB2b2lkIHN1YjMyKEltbTMyIGltbSwgUmVn
aXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuc3VibF9pbW1yKGltbS5t
X3ZhbHVlLCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIHN1YjMyKEFkZHJlc3Mgc3JjLCBSZWdp
c3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRj
aCgpOworICAgICAgICBsb2FkMzIoc3JjLCBzY3IpOworICAgICAgICBtX2Fzc2VtYmxlci5zdWJs
X3JyKHNjciwgZGVzdCk7CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgfQorCisg
ICAgdm9pZCB4b3IzMihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAg
ICAgICAgbV9hc3NlbWJsZXIueG9ybF9ycihzcmMsIGRlc3QpOworICAgIH0KKworICAgIHZvaWQg
eG9yMzIoSW1tMzIgaW1tLCBSZWdpc3RlcklEIHNyY0Rlc3QpCisgICAgeworICAgICAgaWYgKChz
cmNEZXN0ICE9IFNINFJlZ2lzdGVyczo6cjApIHx8IChpbW0ubV92YWx1ZSA+IDI1NSkgfHwgKGlt
bS5tX3ZhbHVlIDwgMCkpIHsKKyAgICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRj
aCgpOworICAgICAgICAgIG1fYXNzZW1ibGVyLmxvYWRDb25zdGFudCgoaW1tLm1fdmFsdWUpLCBz
Y3IpOworICAgICAgICAgIG1fYXNzZW1ibGVyLnhvcmxfcnIoc2NyLCBzcmNEZXN0KTsKKyAgICAg
ICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgICAgfSBlbHNlCisgICAgICAgICAgbV9hc3Nl
bWJsZXIueG9ybF9pOHIoaW1tLm1fdmFsdWUsIHNyY0Rlc3QpOworICAgIH0KKworCisgICAgLy8g
TWVtb3J5IGFjY2VzcyBvcGVyYXRpb24KKyAgICAKKyAgICB2b2lkIGxvYWQzMihJbXBsaWNpdEFk
ZHJlc3MgYWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbG9hZDMyKGFk
ZHJlc3MuYmFzZSwgYWRkcmVzcy5vZmZzZXQsIGRlc3QpOworICAgIH0KKworICAgIHZvaWQgbG9h
ZDgoSW1wbGljaXRBZGRyZXNzIGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAg
ICAgIGxvYWQ4KGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5vZmZzZXQsIGRlc3QpOworICAgIH0KKwor
ICAgIHZvaWQgbG9hZDMyKEJhc2VJbmRleCBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3QpCisgICAg
eworICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBtb3Zl
KGFkZHJlc3MuaW5kZXgsIHNjcik7CisKKyAgICAgICAgbHNoaWZ0MzIoSW1tMzIoYWRkcmVzcy5z
Y2FsZSksIHNjcik7CisgICAgICAgIGFkZDMyKGFkZHJlc3MuYmFzZSwgc2NyKTsKKyAgICAgICAg
bG9hZDMyKHNjciwgYWRkcmVzcy5vZmZzZXQsIGRlc3QpOworICAgICAgICByZWxlYXNlU2NyYXRj
aChzY3IpOworICAgIH0KKworICAgIHZvaWQgbG9hZDMyKHZvaWQqIGFkZHJlc3MsIFJlZ2lzdGVy
SUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvYWRDb25zdGFudChyZWludGVy
cHJldF9jYXN0PHVpbnQzMl90PihhZGRyZXNzKSwgZGVzdCk7CisgICAgICAgIG1fYXNzZW1ibGVy
Lm1vdmxfbXIoZGVzdCwgZGVzdCk7CisgICAgfQorCisgICAgdm9pZCBsb2FkMzIoUmVnaXN0ZXJJ
RCBiYXNlLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBpZiAo
KG9mZnNldCA8IDApIHx8IChvZmZzZXQgPj0gNjQpKSB7CisgICAgICAgICAgICBpZiAoKGRlc3Qg
PT0gU0g0UmVnaXN0ZXJzOjpyMCkgJiYgKGRlc3QgIT0gYmFzZSkpIHsKKyAgICAgICAgICAgICAg
ICBtX2Fzc2VtYmxlci5sb2FkQ29uc3RhbnQoKG9mZnNldCksIGRlc3QpOworICAgICAgICAgICAg
ICAgIG1fYXNzZW1ibGVyLm1vdmxfcjBtcihiYXNlLCBkZXN0KTsKKyAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgUmVnaXN0ZXJJRCBzY3I7CisgICAgICAgICAgICAgICAgaWYg
KGRlc3QgPT0gYmFzZSkKKyAgICAgICAgICAgICAgICAgICAgc2NyID0gY2xhaW1TY3JhdGNoKCk7
CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBzY3IgPSBkZXN0Owor
CisgICAgICAgICAgICAgICAgbV9hc3NlbWJsZXIubG9hZENvbnN0YW50KChvZmZzZXQpLCBzY3Ip
OworICAgICAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZGxfcnIoYmFzZSwgc2NyKTsKKyAgICAg
ICAgICAgICAgICBtX2Fzc2VtYmxlci5tb3ZsX21yKHNjciwgZGVzdCk7CisKKyAgICAgICAgICAg
ICAgICBpZiAoZGVzdCA9PSBiYXNlKQorICAgICAgICAgICAgICAgICAgICByZWxlYXNlU2NyYXRj
aChzY3IpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKG9mZnNldCkKKyAgICAg
ICAgICAgIG1fYXNzZW1ibGVyLm1vdmxfbXIob2Zmc2V0ID4+IDIsIGJhc2UsIGRlc3QpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5tb3ZsX21yKGJhc2UsIGRlc3QpOwor
ICAgIH0KKworICAgIHZvaWQgbG9hZDgoUmVnaXN0ZXJJRCBiYXNlLCBpbnQgb2Zmc2V0LCBSZWdp
c3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBpZiAoKG9mZnNldCA+IDApICYmIChvZmZzZXQg
PCA2NCkgJiYgKGRlc3QgPT0gU0g0UmVnaXN0ZXJzOjpyMCkpCisgICAgICAgICAgICBtX2Fzc2Vt
Ymxlci5tb3ZiX21yKG9mZnNldCwgYmFzZSwgZGVzdCk7CisKKyAgICAgICAgZWxzZSBpZiAoYmFz
ZSAhPSBkZXN0KSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5sb2FkQ29uc3RhbnQoKG9mZnNl
dCksIGRlc3QpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRkbF9ycihiYXNlLCBkZXN0KTsK
KyAgICAgICAgICAgIG1fYXNzZW1ibGVyLm1vdmJfbXIoZGVzdCwgZGVzdCk7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworCisg
ICAgICAgICAgICBtX2Fzc2VtYmxlci5sb2FkQ29uc3RhbnQoKG9mZnNldCksIHNjcik7CisgICAg
ICAgICAgICBtX2Fzc2VtYmxlci5hZGRsX3JyKGJhc2UsIHNjcik7CisgICAgICAgICAgICBtX2Fz
c2VtYmxlci5tb3ZiX21yKHNjciwgZGVzdCk7CisKKyAgICAgICAgICAgIHJlbGVhc2VTY3JhdGNo
KHNjcik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIGxvYWQzMihSZWdpc3RlcklEIHIw
LCBSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICBBU1NFUlQo
cjAgPT0gU0g0UmVnaXN0ZXJzOjpyMCk7CisgICAgICAgIG1fYXNzZW1ibGVyLm1vdmxfcjBtcihz
cmMsIGRzdCk7CisgICAgfQorCisgICAgdm9pZCBsb2FkMzIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lz
dGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubW92bF9tcihzcmMsIGRzdCk7
CisgICAgfQorCisgICAgdm9pZCBsb2FkMTYoSW1wbGljaXRBZGRyZXNzIGFkZHJlc3MsIFJlZ2lz
dGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0K
KyAKKyAgICB2b2lkIGxvYWQxNihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAg
IHsKKyAgICAgICAgbV9hc3NlbWJsZXIubW92d19tcihzcmMsIGRlc3QpOworICAgIH0KKworICAg
IHZvaWQgbG9hZDE2KFJlZ2lzdGVySUQgcjAsIFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRl
c3QpCisgICAgeworICAgICAgICBBU1NFUlQocjAgPT0gU0g0UmVnaXN0ZXJzOjpyMCk7CisgICAg
ICAgIG1fYXNzZW1ibGVyLm1vdndfcjBtcihzcmMsIGRlc3QpOworICAgIH0KKworICAgIHZvaWQg
bG9hZDE2KEJhc2VJbmRleCBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAg
ICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBtb3ZlKGFkZHJlc3Mu
aW5kZXgsIHNjcik7CisgICAgICAgIGxzaGlmdDMyKEltbTMyKGFkZHJlc3Muc2NhbGUpLCBzY3Ip
OworICAgICAgICBtX2Fzc2VtYmxlci5hZGRsX2lyKGFkZHJlc3Mub2Zmc2V0LCBzY3IpOworICAg
ICAgICBpZiAoc2NyID09IFNINFJlZ2lzdGVyczo6cjApCisgICAgICAgICAgICBtX2Fzc2VtYmxl
ci5tb3Z3X3IwbXIoYWRkcmVzcy5iYXNlLCBzY3IpOworICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgIGFkZDMyKGFkZHJlc3MuYmFzZSwgc2NyKTsKKyAgICAgICAgICAgIGxvYWQxNihzY3IsIHNj
cik7CisgICAgICAgIH0KKyAgICAgICAgZXh0dXcoc2NyLCBkZXN0KTsKKyAgICAgICAgcmVsZWFz
ZVNjcmF0Y2goc2NyKTsKKyAgICB9CisKKyAgICB2b2lkIHN0b3JlMzIoUmVnaXN0ZXJJRCBzcmMs
IEltcGxpY2l0QWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3Ig
PSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgc3RvcmUzMihzcmMsIGFkZHJlc3Mub2Zmc2V0LCBh
ZGRyZXNzLmJhc2UsIHNjcik7CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgfQor
CisgICAgdm9pZCBzdG9yZTMyKFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklE
IGJhc2UsIFJlZ2lzdGVySUQgc2NyKQorICAgIHsKKyAgICAgICAgaWYgKChvZmZzZXQgPCAwKSB8
fCAob2Zmc2V0ID49IDY0KSkgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIubG9hZENvbnN0YW50
KChvZmZzZXQpLCBzY3IpOworICAgICAgICAgICAgaWYgKHNjciA9PSBTSDRSZWdpc3RlcnM6OnIw
KQorICAgICAgICAgICAgICAgIG1fYXNzZW1ibGVyLm1vdmxfcm1yMChzcmMsIGJhc2UpOworICAg
ICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRkbF9ycihiYXNl
LCBzY3IpOworICAgICAgICAgICAgICAgIG1fYXNzZW1ibGVyLm1vdmxfcm0oc3JjLCBzY3IpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKG9mZnNldCkKKyAgICAgICAgICAgIG1f
YXNzZW1ibGVyLm1vdmxfcm0oc3JjLCBvZmZzZXQgPj4gMiwgYmFzZSk7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIG1fYXNzZW1ibGVyLm1vdmxfcm0oc3JjLCBiYXNlKTsKKyAgICB9CisKKyAg
ICB2b2lkIHN0b3JlMzIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgb2Zmc2V0LCBSZWdpc3Rl
cklEIGJhc2UpCisgICAgeworICAgICAgICBBU1NFUlQob2Zmc2V0ID09IFNINFJlZ2lzdGVyczo6
cjApOworICAgICAgICBtX2Fzc2VtYmxlci5tb3ZsX3JtcjAoc3JjLCBiYXNlKTsKKyAgICB9CisK
KyAgICB2b2lkIHN0b3JlMzIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsK
KyAgICAgICAgbV9hc3NlbWJsZXIubW92bF9ybShzcmMsIGRzdCk7CisgICAgfQorCisgICAgdm9p
ZCBzdG9yZTMyKEltbTMyIGltbSwgSW1wbGljaXRBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAg
ICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBSZWdpc3RlcklE
IHNjcjEgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9hZENvbnN0YW50
KChpbW0ubV92YWx1ZSksIHNjcik7CisKKyAgICAgICAgc3RvcmUzMihzY3IsIGFkZHJlc3Mub2Zm
c2V0LCBhZGRyZXNzLmJhc2UsIHNjcjEpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOwor
ICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IxKTsKKyAgICB9CisKKyAgICB2b2lkIHN0b3JlMzIo
UmVnaXN0ZXJJRCBzcmMsIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgUmVnaXN0
ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgbW92ZShhZGRyZXNzLmluZGV4LCBz
Y3IpOworICAgICAgICAKKyAgICAgICAgbHNoaWZ0MzIoSW1tMzIoYWRkcmVzcy5zY2FsZSksIHNj
cik7CisgICAgICAgIGFkZDMyKGFkZHJlc3MuYmFzZSwgc2NyKTsKKyAgICAgICAgc3RvcmUzMihz
cmMsIEFkZHJlc3Moc2NyLCBhZGRyZXNzLm9mZnNldCkpOworICAgICAgICByZWxlYXNlU2NyYXRj
aChzY3IpOworICAgIH0KKworICAgIHZvaWQgc3RvcmUzMihJbW0zMiBpbW0sIHZvaWQqIGFkZHJl
c3MpCisgICAgeworICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAg
ICAgICBSZWdpc3RlcklEIHNjcjEgPSBjbGFpbVNjcmF0Y2goKTsKKworICAgICAgICBtX2Fzc2Vt
Ymxlci5sb2FkQ29uc3RhbnQoKGltbS5tX3ZhbHVlKSwgc2NyKTsKKyAgICAgICAgbV9hc3NlbWJs
ZXIubG9hZENvbnN0YW50KHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3Q+KGFkZHJlc3MpLCBzY3Ix
KTsKKyAgICAgICAgbV9hc3NlbWJsZXIubW92bF9tcihzY3IsIHNjcjEpOworCisgICAgICAgIHJl
bGVhc2VTY3JhdGNoKHNjcik7CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcjEpOworICAgIH0K
KworICAgIHZvaWQgc3RvcmUzMihSZWdpc3RlcklEIHNyYywgdm9pZCogYWRkcmVzcykKKyAgICB7
CisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisKKyAgICAgICAgbV9h
c3NlbWJsZXIubG9hZENvbnN0YW50KHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3Q+KGFkZHJlc3Mp
LCBzY3IpOworICAgICAgICBtX2Fzc2VtYmxlci5tb3ZsX21yKHNyYywgc2NyKTsKKworICAgICAg
ICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgIH0KKworICAgIERhdGFMYWJlbDMyIGxvYWQzMldp
dGhBZGRyZXNzT2Zmc2V0UGF0Y2goQWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3QpCisg
ICAgeworICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworCisgICAgICAg
IERhdGFMYWJlbDMyIGxhYmVsKHRoaXMpOworICAgICAgICBtX2Fzc2VtYmxlci5sb2FkQ29uc3Rh
bnQoYWRkcmVzcy5vZmZzZXQsIHNjciwgdHJ1ZSk7CisKKyAgICAgICAgbV9hc3NlbWJsZXIuYWRk
bF9ycihhZGRyZXNzLmJhc2UsIHNjcik7CisgICAgICAgIG1fYXNzZW1ibGVyLm1vdmxfbXIoc2Ny
LCBkZXN0KTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICAgICAgcmV0dXJuIGxh
YmVsOworICAgIH0KKworICAgIERhdGFMYWJlbDMyIHN0b3JlMzJXaXRoQWRkcmVzc09mZnNldFBh
dGNoKFJlZ2lzdGVySUQgc3JjLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBSZWdp
c3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworCisgICAgICAgIERhdGFMYWJlbDMyIGxhYmVs
KHRoaXMpOworICAgICAgICBtX2Fzc2VtYmxlci5sb2FkQ29uc3RhbnQoYWRkcmVzcy5vZmZzZXQs
IHNjciwgdHJ1ZSk7CisKKyAgICAgICAgbV9hc3NlbWJsZXIuYWRkbF9ycihhZGRyZXNzLmJhc2Us
IHNjcik7CisgICAgICAgIG1fYXNzZW1ibGVyLm1vdmxfcm0oc3JjLCBzY3IpOworCisgICAgICAg
IHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgICAgIHJldHVybiBsYWJlbDsKKyAgICB9CisKKyAg
ICBMYWJlbCBsb2FkUHRyV2l0aFBhdGNoVG9MRUEoQWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklE
IGRlc3QpCisgICAgeworICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOwor
CisgICAgICAgIExhYmVsIGxhYmVsKHRoaXMpOworICAgICAgICBtX2Fzc2VtYmxlci5sb2FkQ29u
c3RhbnQoYWRkcmVzcy5vZmZzZXQsIHNjciwgdHJ1ZSk7CisKKyAgICAgICAgbV9hc3NlbWJsZXIu
YWRkbF9ycihhZGRyZXNzLmJhc2UsIHNjcik7CisgICAgICAgIG1fYXNzZW1ibGVyLm1vdmxfbXIo
c2NyLCBkZXN0KTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICAgICAgcmV0dXJu
IGxhYmVsOworICAgIH0KKworICAgICAvLyBGbG9hdGluZy1wb2ludCBvcGVyYXRpb25zCisKKyAg
ICBib29sIHN1cHBvcnRzRmxvYXRpbmdQb2ludCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Cisg
ICAgYm9vbCBzdXBwb3J0c0Zsb2F0aW5nUG9pbnRUcnVuY2F0ZSgpIGNvbnN0IHsgcmV0dXJuIGZh
bHNlOyB9CisgICAgYm9vbCBzdXBwb3J0c0Zsb2F0aW5nUG9pbnRTcXJ0KCkgY29uc3QgeyByZXR1
cm4gZmFsc2U7IH0KKworICAgIHZvaWQgbG9hZERvdWJsZShJbXBsaWNpdEFkZHJlc3MgYWRkcmVz
cywgRlBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICB9CisKKyAgICB2b2lkIGxvYWREb3VibGUoY29uc3Qgdm9pZCogYWRkcmVzcywgRlBS
ZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICB9CisKKyAgICB2b2lkIHN0b3JlRG91YmxlKEZQUmVnaXN0ZXJJRCBzcmMsIEltcGxpY2l0QWRk
cmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
fQorCisgICAgdm9pZCBhZGREb3VibGUoRlBSZWdpc3RlcklEIHNyYywgRlBSZWdpc3RlcklEIGRl
c3QpCisgICAgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICB2
b2lkIGFkZERvdWJsZShBZGRyZXNzIGFkZHJlc3MsIEZQUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsK
KyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorCisgICAgdm9pZCBzdWJEb3Vi
bGUoRlBSZWdpc3RlcklEIHNyYywgRlBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIHZvaWQgc3ViRG91YmxlKEFkZHJlc3Mg
YWRkcmVzcywgRlBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICB9CisKKyAgICB2b2lkIG11bERvdWJsZShGUFJlZ2lzdGVySUQgc3JjLCBG
UFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgIH0KKworICAgIHZvaWQgbXVsRG91YmxlKEFkZHJlc3MgYWRkcmVzcywgRlBSZWdpc3RlcklE
IGRlc3QpCisgICAgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAg
ICB2b2lkIGRpdkRvdWJsZShGUFJlZ2lzdGVySUQgc3JjLCBGUFJlZ2lzdGVySUQgZGVzdCkKKyAg
ICB7CisgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICB2b2lkIGNv
bnZlcnRJbnQzMlRvRG91YmxlKFJlZ2lzdGVySUQgc3JjLCBGUFJlZ2lzdGVySUQgZGVzdCkKKyAg
ICB7CisgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICB2b2lkIGNv
bnZlcnRJbnQzMlRvRG91YmxlKEFic29sdXRlQWRkcmVzcyBzcmMsIEZQUmVnaXN0ZXJJRCBkZXN0
KQorICAgIHsKKyAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIHZv
aWQgY29udmVydEludDMyVG9Eb3VibGUoQWRkcmVzcyBzcmMsIEZQUmVnaXN0ZXJJRCBkZXN0KQor
ICAgIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorCisgICAgdm9pZCB6
ZXJvRG91YmxlKEZQUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgfQorCisgICAgdm9pZCBsb2FkMzJXaXRoVW5hbGlnbmVkSGFsZldvcmRz
KEJhc2VJbmRleCBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBSZWdp
c3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworCisgICAgICAgIG1vdmUoYWRkcmVzcy5pbmRl
eCwgc2NyKTsKKworICAgICAgICBsc2hpZnQzMihJbW0zMihhZGRyZXNzLnNjYWxlKSwgc2NyKTsK
KyAgICAgICAgYWRkMzIoYWRkcmVzcy5iYXNlLCBzY3IpOworCisgICAgICAgIGFkZDMyKEltbTMy
KGFkZHJlc3Mub2Zmc2V0KSwgc2NyKTsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IxID0gY2xhaW1T
Y3JhdGNoKCk7CisgICAgICAgIGxvYWQxNihzY3IsIHNjcjEpOworCisgICAgICAgIGFkZDMyKElt
bTMyKDIpLCBzY3IpOworICAgICAgICBsb2FkMTYoc2NyLCBkZXN0KTsKKworICAgICAgICBtb3Zl
KEltbTMyKDE2KSwgc2NyKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuc2hsbF9ycihkZXN0LCBzY3Ip
OworCisgICAgICAgIG9yMzIoc2NyMSwgZGVzdCk7CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNj
cik7CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcjEpOworICAgIH0KKworICAgIEp1bXAgYnJh
bmNoMzJXaXRoVW5hbGlnbmVkSGFsZldvcmRzKENvbmRpdGlvbiBjb25kLCBCYXNlSW5kZXggbGVm
dCwgSW1tMzIgcmlnaHQpCisgICAgeworICAgICAgICBSZWdpc3RlcklEIHNjciA9IHNjcmF0Y2hS
ZWczOworICAgICAgICBsb2FkMzJXaXRoVW5hbGlnbmVkSGFsZldvcmRzKGxlZnQsIHNjcik7CisK
KyAgICAgICAgaWYgKCgoY29uZCA9PSBFcXVhbCkgfHwgKGNvbmQgPT0gTm90RXF1YWwpKSAmJiAh
cmlnaHQubV92YWx1ZSkKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnRlc3RsX3JyKHNjciwgc2Ny
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9hc3NlbWJsZXIuY21wbF9pcihyaWdodC5t
X3ZhbHVlLCBzY3IsIGNvbmQpOworCisgICAgICAgIGlmIChjb25kID09IE5vdEVxdWFsKQorICAg
ICAgICAgICAgcmV0dXJuIGJyYW5jaEZhbHNlKCk7CisgICAgICAgIHJldHVybiBicmFuY2hUcnVl
KCk7CisKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaERvdWJsZU5vblplcm8oRlBSZWdpc3RlcklE
IHJlZywgRlBSZWdpc3RlcklEIHNjcmF0Y2gpCisgICAgeworICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaERvdWJsZVplcm9Pck5hTihGUFJlZ2lz
dGVySUQgcmVnLCBGUFJlZ2lzdGVySUQgc2NyYXRjaCkKKyAgICB7CisgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoRG91YmxlKENvbmRpdGlvbiBj
b25kLCBGUFJlZ2lzdGVySUQgbGVmdCwgRlBSZWdpc3RlcklEIHJpZ2h0KQorICAgIHsKKyAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2hUcnVlKCkK
KyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmVuc3VyZVNwYWNlKG1fYXNzZW1ibGVyLm1heElu
c3RydWN0aW9uU2l6ZSArIDYsIHNpemVvZih1aW50MzJfdCkpOworICAgICAgICBKdW1wIG1fanVt
cCA9IEp1bXAobV9hc3NlbWJsZXIuamUoKSk7CisKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBj
bGFpbVNjcmF0Y2goKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9hZENvbnN0YW50VW5jaGVja2Vk
U2l6ZSgweDAsIHNjcik7CisgICAgICAgIG1fYXNzZW1ibGVyLm5vcCgpOworICAgICAgICBtX2Fz
c2VtYmxlci5ub3AoKTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKworICAgICAgICBy
ZXR1cm4gbV9qdW1wOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoRmFsc2UoKQorICAgIHsKKyAg
ICAgICAgbV9hc3NlbWJsZXIuZW5zdXJlU3BhY2UobV9hc3NlbWJsZXIubWF4SW5zdHJ1Y3Rpb25T
aXplICsgNiwgc2l6ZW9mKHVpbnQzMl90KSk7CisgICAgICAgIEp1bXAgbV9qdW1wID0gSnVtcCht
X2Fzc2VtYmxlci5qbmUoKSk7CisKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0
Y2goKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9hZENvbnN0YW50VW5jaGVja2VkU2l6ZSgweDAs
IHNjcik7CisgICAgICAgIG1fYXNzZW1ibGVyLm5vcCgpOworICAgICAgICBtX2Fzc2VtYmxlci5u
b3AoKTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKworICAgICAgICByZXR1cm4gbV9q
dW1wOworICAgIH0KKworICAgIHZvaWQgc2V0OENvbXBhcmUzMihDb25kaXRpb24gY29uZCwgUmVn
aXN0ZXJJRCBsZWZ0LCBSZWdpc3RlcklEIHJpZ2h0LCBSZWdpc3RlcklEIGRlc3QpCisgICAgewor
ICAgICAgICBzZXQzMkNvbXBhcmUzMihjb25kLCBsZWZ0LCByaWdodCwgZGVzdCk7CisgICAgfQor
CisgICAgdm9pZCBzZXQ4Q29tcGFyZTMyKENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGxlZnQs
IEltbTMyIHJpZ2h0LCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBpZiAobGVmdCAh
PSBkZXN0KSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5sb2FkQ29uc3RhbnQocmlnaHQubV92
YWx1ZSwgZGVzdCk7CisgICAgICAgICAgICBzZXQzMkNvbXBhcmUzMihjb25kLCBsZWZ0LCBkZXN0
LCBkZXN0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFJlZ2lzdGVySUQgc2NyID0g
Y2xhaW1TY3JhdGNoKCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5sb2FkQ29uc3RhbnQocmln
aHQubV92YWx1ZSwgc2NyKTsKKyAgICAgICAgICAgIHNldDMyQ29tcGFyZTMyKGNvbmQsIGxlZnQs
IHNjciwgZGVzdCk7CisgICAgICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgICAgICB9
CisgICAgfQorCisgICAgSnVtcCBicmFuY2gzMihDb25kaXRpb24gY29uZCwgQmFzZUluZGV4IGxl
ZnQsIEltbTMyIHJpZ2h0KQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNj
cmF0Y2goKTsKKworICAgICAgICBtb3ZlKGxlZnQuaW5kZXgsIHNjcik7CisgICAgICAgIGxzaGlm
dDMyKEltbTMyKGxlZnQuc2NhbGUpLCBzY3IpOworICAgICAgICBhZGQzMihsZWZ0LmJhc2UsIHNj
cik7CisgICAgICAgIGxvYWQzMihzY3IsIGxlZnQub2Zmc2V0LCBzY3IpOworCisgICAgICAgIG1f
YXNzZW1ibGVyLmNtcGxfaXIocmlnaHQubV92YWx1ZSwgc2NyLCBjb25kKTsKKyAgICAgICAgcmVs
ZWFzZVNjcmF0Y2goc2NyKTsKKworICAgICAgICBpZiAoY29uZCA9PSBOb3RFcXVhbCkKKyAgICAg
ICAgICAgIHJldHVybiBicmFuY2hGYWxzZSgpOworICAgICAgICByZXR1cm4gYnJhbmNoVHJ1ZSgp
OworICAgIH0KKworICAgIHZvaWQgc3FydERvdWJsZShGUFJlZ2lzdGVySUQgc3JjLCBGUFJlZ2lz
dGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0K
KworCisKKyAgICBKdW1wIGJyYW5jaFRlc3Q4KENvbmRpdGlvbiBjb25kLCBBZGRyZXNzIGFkZHJl
c3MsIEltbTMyIG1hc2sgPSBJbW0zMigtMSkpCisgICAgeworICAgICAgICBSZWdpc3RlcklEIGFk
ZHJlc3NUZW1wUmVnaXN0ZXIgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgbG9hZDgoYWRkcmVz
cywgYWRkcmVzc1RlbXBSZWdpc3Rlcik7CisgICAgICAgIAorICAgICAgICBKdW1wIGptcCA9IGJy
YW5jaFRlc3QzMihjb25kLCBhZGRyZXNzVGVtcFJlZ2lzdGVyLCBtYXNrKTsKKyAgICAgICAgcmVs
ZWFzZVNjcmF0Y2goYWRkcmVzc1RlbXBSZWdpc3Rlcik7CisgICAgICAgIHJldHVybiBqbXA7Cisg
ICAgfQorCisgICAgdm9pZCBzaWduRXh0ZW5kMzJUb1B0cihSZWdpc3RlcklEIHNyYywgUmVnaXN0
ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgaWYgKHNyYyAhPSBkZXN0KQorICAgICAgICAgICAg
bW92ZShzcmMsIGRlc3QpOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoOChDb25kaXRpb24gY29u
ZCwgQWRkcmVzcyBsZWZ0LCBJbW0zMiByaWdodCkKKyAgICB7CisgICAgICAgIFJlZ2lzdGVySUQg
YWRkcmVzc1RlbXBSZWdpc3RlciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBsb2FkOChsZWZ0
LCBhZGRyZXNzVGVtcFJlZ2lzdGVyKTsKKworICAgICAgICBKdW1wIGptcCA9IGJyYW5jaDMyKGNv
bmQsIGFkZHJlc3NUZW1wUmVnaXN0ZXIsIHJpZ2h0KTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2go
YWRkcmVzc1RlbXBSZWdpc3Rlcik7CisgICAgICAgIHJldHVybiBqbXA7CisgICAgfQorCisgICAg
SnVtcCBicmFuY2hUcnVuY2F0ZURvdWJsZVRvSW50MzIoRlBSZWdpc3RlcklEIHNyYywgUmVnaXN0
ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQor
CisgICAgLy8gU3RhY2sgbWFuaXB1bGF0aW9uIG9wZXJhdGlvbnMKKyAgICAKKyAgICB2b2lkIHBv
cChSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5wb3BfcihkZXN0
KTsKKyAgICB9CisKKyAgICB2b2lkIHB1c2goUmVnaXN0ZXJJRCBzcmMpCisgICAgeworICAgICAg
ICBtX2Fzc2VtYmxlci5wdXNoX3Ioc3JjKTsKKyAgICB9CisKKyAgICB2b2lkIHB1c2goQWRkcmVz
cyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIucHVzaF9tKGFkZHJlc3Mub2Zm
c2V0LCBhZGRyZXNzLmJhc2UpOworICAgIH0KKworICAgIHZvaWQgcHVzaChJbW0zMiBpbW0pCisg
ICAgeworICAgICAgICBtX2Fzc2VtYmxlci5wdXNoX2kzMihpbW0ubV92YWx1ZSk7CisgICAgfQor
CisgICAgLy8gUmVnaXN0ZXIgbW92ZSBvcGVyYXRpb25zCisKKyAgICB2b2lkIG1vdmUoSW1tMzIg
aW1tLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgIG1fYXNzZW1ibGVyLmxvYWRDb25z
dGFudChpbW0ubV92YWx1ZSwgZGVzdCk7CisgICAgfQorCisgICAgRGF0YUxhYmVsUHRyIG1vdmVX
aXRoUGF0Y2goSW1tUHRyIGluaXRpYWxWYWx1ZSwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAg
ICAgICBEYXRhTGFiZWxQdHIgZGF0YUxhYmVsKHRoaXMpOworICAgICAgIG1fYXNzZW1ibGVyLmxv
YWRDb25zdGFudChyZWludGVycHJldF9jYXN0PHVpbnQzMl90Pihpbml0aWFsVmFsdWUubV92YWx1
ZSksIGRlc3QsIHRydWUpOworICAgICAgIHJldHVybiBkYXRhTGFiZWw7CisgICAgfQorCisgICAg
dm9pZCBtb3ZlKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAg
ICBtX2Fzc2VtYmxlci5tb3ZsX3JyKHNyYywgZGVzdCk7CisgICAgfQorCisgICAgdm9pZCBtb3Zl
KEltbVB0ciBpbW0sIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVy
LmxvYWRDb25zdGFudChpbW0uYXNJbnRwdHIoKSwgZGVzdCk7CisgICAgfQorCisgICAgdm9pZCBl
eHR1dyhSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICBtX2Fz
c2VtYmxlci5leHR1dyhzcmMsIGRzdCk7CisgICAgfQorCisgICAgdm9pZCBzZXQzMkNvbXBhcmUz
MihDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBsZWZ0LCBSZWdpc3RlcklEIHJpZ2h0LCBSZWdp
c3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5jbXBsX3JyKHJpZ2h0LCBs
ZWZ0LCBjb25kKTsKKyAgICAgICAgaWYgKGNvbmQgIT0gTm90RXF1YWwpCisgICAgICAgICAgICBt
X2Fzc2VtYmxlci5tb3Z0KGRlc3QpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICBtX2Fz
c2VtYmxlci5lbnN1cmVTcGFjZShtX2Fzc2VtYmxlci5tYXhJbnN0cnVjdGlvblNpemUgKyA0KTsK
KyAgICAgICAgICAgICBtX2Fzc2VtYmxlci5tb3ZfaW1tOCgwLCBkZXN0KTsKKyAgICAgICAgICAg
ICBtX2Fzc2VtYmxlci5icmFuY2goQlRfT1BDT0RFLCAwKTsKKyAgICAgICAgICAgICBtX2Fzc2Vt
Ymxlci5tb3ZfaW1tOCgxLCBkZXN0KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgc2V0
MzJDb21wYXJlMzIoQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgbGVmdCwgSW1tMzIgcmlnaHQs
IFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgaWYgKGxlZnQgIT0gZGVzdCkgeworICAg
ICAgICAgICBtb3ZlKHJpZ2h0LCBkZXN0KTsKKyAgICAgICAgICAgc2V0MzJDb21wYXJlMzIoY29u
ZCwgbGVmdCwgZGVzdCwgZGVzdCk7CisgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgUmVnaXN0
ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgICAgbW92ZShyaWdodCwgc2NyKTsK
KyAgICAgICAgICAgc2V0MzJDb21wYXJlMzIoY29uZCwgbGVmdCwgc2NyLCBkZXN0KTsKKyAgICAg
ICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBz
ZXQzMlRlc3Q4KENvbmRpdGlvbiBjb25kLCBBZGRyZXNzIGFkZHJlc3MsIEltbTMyIG1hc2ssIFJl
Z2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIEFTU0VSVCgoY29uZCA9PSBaZXJvKSB8fCAo
Y29uZCA9PSBOb25aZXJvKSk7CisKKyAgICAgICAgbG9hZDgoYWRkcmVzcywgZGVzdCk7CisKKyAg
ICAgICAgaWYgKG1hc2subV92YWx1ZSA9PSAtMSkKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmNt
cGxfaXIoMCwgZGVzdCwgY29uZCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fYXNzZW1i
bGVyLnRlc3RsX2kzMnIobWFzay5tX3ZhbHVlLCBkZXN0KTsKKworICAgICAgICBpZiAoY29uZCAh
PSBOb25aZXJvKQorICAgICAgICAgICAgbV9hc3NlbWJsZXIubW92dChkZXN0KTsKKyAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5lbnN1cmVTcGFjZShtX2Fzc2VtYmxlci5t
YXhJbnN0cnVjdGlvblNpemUgKyA0KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLm1vdl9pbW04
KDAsIGRlc3QpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuYnJhbmNoKEJUX09QQ09ERSwgMCk7
CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5tb3ZfaW1tOCgxLCBkZXN0KTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIHZvaWQgbG9hZFB0ckxpbmtSZWcoSW1wbGljaXRBZGRyZXNzIGFkZHJlc3Mp
CisgICAgeworICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAg
ICBsb2FkMzIoYWRkcmVzcywgc2NyKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubGRzcHIoc2NyKTsK
KyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICB9CisKK3B1YmxpYzoKKyAgICBKdW1w
IGJyYW5jaDMyKENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGxlZnQsIFJlZ2lzdGVySUQgcmln
aHQpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5lbnN1cmVTcGFjZShtX2Fzc2VtYmxlci5t
YXhJbnN0cnVjdGlvblNpemUgKyA4LCBzaXplb2YodWludDMyX3QpKTsKKyAgICAgICAgbV9hc3Nl
bWJsZXIuY21wbF9ycihyaWdodCwgbGVmdCwgY29uZCk7CisgICAgICAgIAorICAgICAgICAvKiBC
VCBsYWJlbCAgICAgICA9PiBCRiBvZmYgCisgICAgICAgICAgIG5vcCAgICAgICAgICAgICAgIExE
UiByZWcKKyAgICAgICAgICAgbm9wICAgICAgICAgICAgICAgYnJhZiBAcmVnCisgICAgICAgICAg
IG5vcCAgICAgICAgICAgICAgIG5vcAorICAgICAgICAgKi8KKyAgICAgICAgaWYgKGNvbmQgPT0g
Tm90RXF1YWwpCisgICAgICAgICAgICByZXR1cm4gYnJhbmNoRmFsc2UoKTsKKyAgICAgICAgcmV0
dXJuIGJyYW5jaFRydWUoKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaDMyKENvbmRpdGlvbiBj
b25kLCBSZWdpc3RlcklEIGxlZnQsIEltbTMyIHJpZ2h0KQorICAgIHsKKyAgICAgICAgaWYgKCgo
Y29uZCA9PSBFcXVhbCkgfHwgKGNvbmQgPT0gTm90RXF1YWwpKSAmJiAhcmlnaHQubV92YWx1ZSkK
KyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnRlc3RsX3JyKGxlZnQsIGxlZnQpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5jbXBsX2lyKHJpZ2h0Lm1fdmFsdWUsIGxlZnQs
IGNvbmQpOworICAgICAgICAgICAgCisgICAgICAgIGlmIChjb25kID09IE5vdEVxdWFsKQorICAg
ICAgICAgICAgcmV0dXJuIGJyYW5jaEZhbHNlKCk7CisgICAgICAgIHJldHVybiBicmFuY2hUcnVl
KCk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2gzMihDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJ
RCBsZWZ0LCBBZGRyZXNzIHJpZ2h0KQorICAgIHsKKyAgICAgICAgIG1fYXNzZW1ibGVyLmNtcGxf
bXIocmlnaHQub2Zmc2V0LCByaWdodC5iYXNlLCBsZWZ0LCBjb25kKTsKKyAgICAgICAgCisgICAg
ICAgIGlmIChjb25kID09IE5vdEVxdWFsKQorICAgICAgICAgICAgcmV0dXJuIGJyYW5jaEZhbHNl
KCk7CisgICAgICAgIHJldHVybiBicmFuY2hUcnVlKCk7CisgICAgfQorCisgICAgSnVtcCBicmFu
Y2gzMihDb25kaXRpb24gY29uZCwgQWRkcmVzcyBsZWZ0LCBSZWdpc3RlcklEIHJpZ2h0KQorICAg
IHsKKyAgICAgICAgbV9hc3NlbWJsZXIuY21wbF9ybShyaWdodCwgbGVmdC5vZmZzZXQsIGxlZnQu
YmFzZSwgY29uZCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgIGlmIChjb25kID09IE5vdEVx
dWFsKQorICAgICAgICAgICAgcmV0dXJuIGJyYW5jaEZhbHNlKCk7CisgICAgICAgIHJldHVybiBi
cmFuY2hUcnVlKCk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2gzMihDb25kaXRpb24gY29uZCwg
QWRkcmVzcyBsZWZ0LCBJbW0zMiByaWdodCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmNt
cGxfaW0ocmlnaHQubV92YWx1ZSwgbGVmdC5vZmZzZXQsIGxlZnQuYmFzZSwgY29uZCk7CisgICAg
ICAgIAorICAgICAgICBpZiAoY29uZCA9PSBOb3RFcXVhbCkKKyAgICAgICAgICAgIHJldHVybiBi
cmFuY2hGYWxzZSgpOworICAgICAgICByZXR1cm4gYnJhbmNoVHJ1ZSgpOworCisgICAgfQorCisg
ICAgSnVtcCBicmFuY2gzMihDb25kaXRpb24gY29uZCwgQWJzb2x1dGVBZGRyZXNzIGxlZnQsIFJl
Z2lzdGVySUQgcmlnaHQpCisgICAgeworICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2Ny
YXRjaCgpOworICAgICAgICBtb3ZlKEltbTMyKChpbnQpbGVmdC5tX3B0ciksIHNjcik7CisgICAg
ICAgIG1fYXNzZW1ibGVyLmNtcGxfcnIocmlnaHQsIHNjciwgY29uZCk7CisKKyAgICAgICAgcmVs
ZWFzZVNjcmF0Y2goc2NyKTsKKyAgICAgICAgaWYgKGNvbmQgPT0gTm90RXF1YWwpCisgICAgICAg
ICAgICByZXR1cm4gYnJhbmNoRmFsc2UoKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaFRydWUoKTsK
KyAgICB9CisKKyAgICBKdW1wIGJyYW5jaDMyKENvbmRpdGlvbiBjb25kLCBBYnNvbHV0ZUFkZHJl
c3MgbGVmdCwgSW1tMzIgcmlnaHQpCisgICAgeworICAgICAgICBSZWdpc3RlcklEIGFkZHJlc3NU
ZW1wUmVnaXN0ZXIgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgbG9hZDMyKGxlZnQubV9wdHIs
IGFkZHJlc3NUZW1wUmVnaXN0ZXIpOworCisgICAgICAgIG1fYXNzZW1ibGVyLmNtcGxfaXIocmln
aHQubV92YWx1ZSwgYWRkcmVzc1RlbXBSZWdpc3RlciwgY29uZCk7CisKKyAgICAgICAgcmVsZWFz
ZVNjcmF0Y2goYWRkcmVzc1RlbXBSZWdpc3Rlcik7CisgICAgICAgIGlmIChjb25kID09IE5vdEVx
dWFsKQorICAgICAgICAgICAgcmV0dXJuIGJyYW5jaEZhbHNlKCk7CisgICAgICAgIHJldHVybiBi
cmFuY2hUcnVlKCk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2gxNihDb25kaXRpb24gY29uZCwg
IEJhc2VJbmRleCBsZWZ0LCBSZWdpc3RlcklEIHJpZ2h0KQorICAgIHsKKyAgICAgICAgUmVnaXN0
ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgbW92ZShsZWZ0LmluZGV4LCBzY3Ip
OworICAgICAgICBsc2hpZnQzMihJbW0zMihsZWZ0LnNjYWxlKSwgc2NyKTsKKyAgICAgICAgbV9h
c3NlbWJsZXIuYWRkbF9pcihsZWZ0Lm9mZnNldCwgc2NyKTsKKyAgICAgICAgYWRkMzIobGVmdC5i
YXNlLCBzY3IpOworICAgICAgICBsb2FkMTYoc2NyLCBzY3IpOworICAgICAgICBleHR1dyhzY3Is
IHNjcik7CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisKKyAgICAgICAgcmV0dXJuIGJy
YW5jaDMyKGNvbmQsIHNjciwgcmlnaHQpOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoMTYoQ29u
ZGl0aW9uIGNvbmQsIEJhc2VJbmRleCBsZWZ0LCBJbW0zMiByaWdodCkKKyAgICB7CisgICAgICAg
IFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIG1vdmUobGVmdC5pbmRl
eCwgc2NyKTsKKyAgICAgICAgbHNoaWZ0MzIoSW1tMzIobGVmdC5zY2FsZSksIHNjcik7CisgICAg
ICAgIG1fYXNzZW1ibGVyLmFkZGxfaXIobGVmdC5vZmZzZXQsIHNjcik7CisgICAgICAgIGFkZDMy
KGxlZnQuYmFzZSwgc2NyKTsKKyAgICAgICAgbG9hZDE2KHNjciwgc2NyKTsKKyAgICAgICAgZXh0
dXcoc2NyLCBzY3IpOworICAgICAgICAKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IxID0gY2xhaW1T
Y3JhdGNoKCk7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvYWRDb25zdGFudChyaWdodC5tX3ZhbHVl
LCBzY3IxKTsKKyAgICAgICAgCisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgICAg
IHJlbGVhc2VTY3JhdGNoKHNjcjEpOworICAgICAgICByZXR1cm4gYnJhbmNoMzIoY29uZCwgc2Ny
LCBzY3IxKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaFRlc3QzMihDb25kaXRpb24gY29uZCwg
UmVnaXN0ZXJJRCByZWcsIFJlZ2lzdGVySUQgbWFzaykKKyAgICB7CisgICAgICAgIEFTU0VSVCgo
Y29uZCA9PSBaZXJvKSB8fCAoY29uZCA9PSBOb25aZXJvKSk7CisgICAgICAgIG1fYXNzZW1ibGVy
LnRlc3RsX3JyKHJlZywgbWFzayk7CisKKyAgICAgICAgaWYgKGNvbmQgPT0gTm90RXF1YWwpCisg
ICAgICAgICAgICByZXR1cm4gYnJhbmNoRmFsc2UoKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaFRy
dWUoKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaFRlc3QzMihDb25kaXRpb24gY29uZCwgUmVn
aXN0ZXJJRCByZWcsIEltbTMyIG1hc2sgPSBJbW0zMigtMSkpCisgICAgeworICAgICAgICBBU1NF
UlQoKGNvbmQgPT0gWmVybykgfHwgKGNvbmQgPT0gTm9uWmVybykpOworCisgICAgICAgIGlmICht
YXNrLm1fdmFsdWUgPT0gLTEpCisgICAgICAgICAgICBtX2Fzc2VtYmxlci50ZXN0bF9ycihyZWcs
IHJlZyk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnRlc3RsX2kzMnIo
bWFzay5tX3ZhbHVlLCByZWcpOworICAgICAgICAgICAgCisgICAgICAgIGlmIChjb25kID09IE5v
dEVxdWFsKQorICAgICAgICAgICAgcmV0dXJuIGJyYW5jaEZhbHNlKCk7CisgICAgICAgIHJldHVy
biBicmFuY2hUcnVlKCk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2hUZXN0MzIoQ29uZGl0aW9u
IGNvbmQsIEFkZHJlc3MgYWRkcmVzcywgSW1tMzIgbWFzayA9IEltbTMyKC0xKSkKKyAgICB7Cisg
ICAgICAgIEFTU0VSVCgoY29uZCA9PSBaZXJvKSB8fCAoY29uZCA9PSBOb25aZXJvKSk7CisKKyAg
ICAgICAgaWYgKG1hc2subV92YWx1ZSA9PSAtMSkKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmNt
cGxfaW0oMCwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSwgY29uZCk7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnRlc3RsX2kzMm0obWFzay5tX3ZhbHVlLCBhZGRy
ZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlKTsKKyAgICAgICAgICAgIAorICAgICAgICBpZiAoY29u
ZCA9PSBOb3RFcXVhbCkKKyAgICAgICAgICAgIHJldHVybiBicmFuY2hGYWxzZSgpOworICAgICAg
ICByZXR1cm4gYnJhbmNoVHJ1ZSgpOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoVGVzdDMyKENv
bmRpdGlvbiBjb25kLCBCYXNlSW5kZXggYWRkcmVzcywgSW1tMzIgbWFzayA9IEltbTMyKC0xKSkK
KyAgICB7CisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisKKyAgICAg
ICAgbW92ZShhZGRyZXNzLmluZGV4LCBzY3IpOworCisgICAgICAgIGxzaGlmdDMyKEltbTMyKGFk
ZHJlc3Muc2NhbGUpLCBzY3IpOworICAgICAgICBhZGQzMihhZGRyZXNzLmJhc2UsIHNjcik7Cisg
ICAgICAgIGxvYWQzMihzY3IsIGFkZHJlc3Mub2Zmc2V0LCBzY3IpOworCisgICAgICAgIGlmICht
YXNrLm1fdmFsdWUgPT0gLTEpCisgICAgICAgICAgICBtX2Fzc2VtYmxlci50ZXN0bF9ycihzY3Is
IHNjcik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnRlc3RsX2kzMnIo
bWFzay5tX3ZhbHVlLCBzY3IpOworCisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAg
ICAgIAorICAgICAgICBpZiAoY29uZCA9PSBOb3RFcXVhbCkKKyAgICAgICAgICAgIHJldHVybiBi
cmFuY2hGYWxzZSgpOworICAgICAgICByZXR1cm4gYnJhbmNoVHJ1ZSgpOworICAgIH0KKworICAg
IEp1bXAganVtcCgpCisgICAgeworICAgICAgICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5qbXAo
KSk7CisgICAgfQorCisgICAgdm9pZCBqdW1wKFJlZ2lzdGVySUQgdGFyZ2V0KQorICAgIHsKKyAg
ICAgICAgbV9hc3NlbWJsZXIuam1wX3IodGFyZ2V0KTsKKyAgICB9CisKKyAgICAvLyBBZGRyZXNz
IGlzIGEgbWVtb3J5IGxvY2F0aW9uIGNvbnRhaW5pbmcgdGhlIGFkZHJlc3MgdG8ganVtcCB0bwor
ICAgIHZvaWQganVtcChBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxl
ci5qbXBfbShhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlKTsKKyAgICB9CisKKyAgICAvLyBB
cml0aG1ldGljIGNvbnRyb2wgZmxvdyBvcGVyYXRpb25zCisKKyAgICBKdW1wIGJyYW5jaEFkZDMy
KENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsK
KyAgICAgICAgQVNTRVJUKChjb25kID09IE92ZXJmbG93KSB8fCAoY29uZCA9PSBTaWduZWQpKTsK
KworICAgICAgICBpZiAoY29uZCA9PSBPdmVyZmxvdykgeworICAgICAgICAgICAgbV9hc3NlbWJs
ZXIuZW5zdXJlU3BhY2UobV9hc3NlbWJsZXIubWF4SW5zdHJ1Y3Rpb25TaXplICsgOCwgc2l6ZW9m
KHVpbnQzMl90KSk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGR2bF9ycihzcmMsIGRlc3Qp
OworICAgICAgICB9IGVsc2UgaWYgKGNvbmQgPT0gU2lnbmVkKSB7CisgICAgICAgICAgICBtX2Fz
c2VtYmxlci5lbnN1cmVTcGFjZShtX2Fzc2VtYmxlci5tYXhJbnN0cnVjdGlvblNpemUgKyAxMCwg
c2l6ZW9mKHVpbnQzMl90KSk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGRsX3JyKHNyYywg
ZGVzdCk7CisgICAgICAgICAgICAvLyBDaGVjayBpZiBkZXN0IGlzIG5lZ2F0aXZlLgorICAgICAg
ICAgICAgbV9hc3NlbWJsZXIuY21wbF9pcigwLCBkZXN0LCBMZXNzVGhhbik7CisgICAgICAgIH0K
KworICAgICAgICByZXR1cm4gYnJhbmNoVHJ1ZSgpOworICAgIH0KKworICAgIEp1bXAgYnJhbmNo
QWRkMzIoQ29uZGl0aW9uIGNvbmQsIEltbTMyIGltbSwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsK
KyAgICAgICAgQVNTRVJUKChjb25kID09IE92ZXJmbG93KSB8fCAoY29uZCA9PSBTaWduZWQpKTsK
KyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKworICAgICAgICBtb3Zl
KGltbSwgc2NyKTsKKyAgICAgICAgaWYgKGNvbmQgPT0gT3ZlcmZsb3cpIHsKKyAgICAgICAgICAg
IG1fYXNzZW1ibGVyLmVuc3VyZVNwYWNlKG1fYXNzZW1ibGVyLm1heEluc3RydWN0aW9uU2l6ZSAr
IDgsIHNpemVvZih1aW50MzJfdCkpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRkdmxfcnIo
c2NyLCBkZXN0KTsKKyAgICAgICAgfSBlbHNlIGlmIChjb25kID09IFNpZ25lZCkgeworICAgICAg
ICAgICAgbV9hc3NlbWJsZXIuZW5zdXJlU3BhY2UobV9hc3NlbWJsZXIubWF4SW5zdHJ1Y3Rpb25T
aXplICsgMTAsIHNpemVvZih1aW50MzJfdCkpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRk
bF9ycihzY3IsIGRlc3QpOworICAgICAgICAgICAgLy8gQ2hlY2sgaWYgZGVzdCBpcyBuZWdhdGl2
ZS4KKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmNtcGxfaXIoMCwgZGVzdCwgTGVzc1RoYW4pOwor
ICAgICAgICB9CisKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICAgICAgaWYgKGNv
bmQgPT0gTm90RXF1YWwpCisgICAgICAgICAgICByZXR1cm4gYnJhbmNoRmFsc2UoKTsKKyAgICAg
ICAgcmV0dXJuIGJyYW5jaFRydWUoKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaE11bDMyKENv
bmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAg
ICAgICAgQVNTRVJUKChjb25kID09IE92ZXJmbG93KSB8fCAoY29uZCA9PSBTaWduZWQpIHx8IChj
b25kID09IFplcm8pIHx8IChjb25kID09IE5vblplcm8pKTsKKyAgICAgICAgUmVnaXN0ZXJJRCBz
Y3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgaWYgKGNvbmQgPT0gT3ZlcmZsb3cpIHsKKyAg
ICAgICAgICAgIFJlZ2lzdGVySUQgc2NyMSA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICAgICAg
bV9hc3NlbWJsZXIuZG11bGxfcnIoc3JjLCBkZXN0KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVy
LnN0c21hY2woZGVzdCk7CisKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLm1vdl9pbW04KC0zMSwg
c2NyKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLm1vdmxfcnIoZGVzdCwgc2NyMSk7CisgICAg
ICAgICAgICBtX2Fzc2VtYmxlci5zaGFfcnIoc2NyMSwgc2NyKTsKKyAgICAgICAgICAgIG1fYXNz
ZW1ibGVyLnN0c21hY2goc2NyKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmNtcGxfcnIoc2Ny
LCBzY3IxLCBaZXJvKTsKKyAgICAgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcjEpOworICAgICAg
ICAgICAgY29uZCA9IE5vdEVxdWFsOworICAgICAgICB9IGVsc2UgaWYgKGNvbmQgPT0gU2lnbmVk
KSB7CisgICAgICAgICAgICAvLyBDaGVjayBpZiBkZXN0IGlzIG5lZ2F0aXZlLgorICAgICAgICAg
ICAgbV9hc3NlbWJsZXIuaW11bGxfcnIoc3JjLCBkZXN0KTsKKyAgICAgICAgICAgIG1fYXNzZW1i
bGVyLnN0c21hY2woZGVzdCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5jbXBsX2lyKDAsIGRl
c3QsIExlc3NUaGFuKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVy
LmltdWxsX3JyKHNyYywgZGVzdCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zdHNtYWNsKGRl
c3QpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuY21wbF9pcigwLCBkZXN0LCBjb25kKTsKKyAg
ICAgICAgfQorCisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgICAgIGlmIChjb25k
ID09IE5vdEVxdWFsKQorICAgICAgICAgICAgcmV0dXJuIGJyYW5jaEZhbHNlKCk7CisgICAgICAg
IHJldHVybiBicmFuY2hUcnVlKCk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2hNdWwzMihDb25k
aXRpb24gY29uZCwgSW1tMzIgaW1tLCBSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQor
ICAgIHsKKyAgICAgICAgQVNTRVJUKChjb25kID09IE92ZXJmbG93KSB8fCAoY29uZCA9PSBTaWdu
ZWQpIHx8IChjb25kID09IFplcm8pIHx8IChjb25kID09IE5vblplcm8pKTsKKyAgICAgICAgUmVn
aXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgbW92ZShpbW0sIHNjcik7Cisg
ICAgICAgIGlmIChjb25kID09IE92ZXJmbG93KSB7CisgICAgICAgICAgICBSZWdpc3RlcklEIHNj
cjEgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmRtdWxsX3JyKHNy
Yywgc2NyKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnN0c21hY2woZGVzdCk7CisKKyAgICAg
ICAgICAgIG1fYXNzZW1ibGVyLm1vdl9pbW04KC0zMSwgc2NyKTsKKyAgICAgICAgICAgIG1fYXNz
ZW1ibGVyLm1vdmxfcnIoZGVzdCwgc2NyMSk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zaGFf
cnIoc2NyMSwgc2NyKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnN0c21hY2goc2NyKTsKKyAg
ICAgICAgICAgIG1fYXNzZW1ibGVyLmNtcGxfcnIoc2NyLCBzY3IxLCBaZXJvKTsKKyAgICAgICAg
ICAgIHJlbGVhc2VTY3JhdGNoKHNjcjEpOworICAgICAgICAgICAgY29uZCA9IE5vdEVxdWFsOwor
ICAgICAgICB9IGVsc2UgaWYgKGNvbmQgPT0gU2lnbmVkKSB7CisgICAgICAgICAgICAvLyBDaGVj
ayBpZiBkZXN0IGlzIG5lZ2F0aXZlLgorICAgICAgICAgICAgbV9hc3NlbWJsZXIuaW11bGxfcnIo
c3JjLCBkZXN0KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnN0c21hY2woZGVzdCk7CisgICAg
ICAgICAgICBtX2Fzc2VtYmxlci5jbXBsX2lyKDAsIGRlc3QsIExlc3NUaGFuKTsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmltdWxsX3JyKHNyYywgZGVzdCk7Cisg
ICAgICAgICAgICBtX2Fzc2VtYmxlci5zdHNtYWNsKGRlc3QpOworICAgICAgICAgICAgbV9hc3Nl
bWJsZXIuY21wbF9pcigwLCBkZXN0LCBjb25kKTsKKyAgICAgICAgfQorCisgICAgICAgIHJlbGVh
c2VTY3JhdGNoKHNjcik7CisgICAgICAgIGlmIChjb25kID09IE5vdEVxdWFsKQorICAgICAgICAg
ICAgcmV0dXJuIGJyYW5jaEZhbHNlKCk7CisgICAgICAgIHJldHVybiBicmFuY2hUcnVlKCk7Cisg
ICAgfQorCisgICAgSnVtcCBicmFuY2hTdWIzMihDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBz
cmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIEFTU0VSVCgoY29uZCA9PSBPdmVy
ZmxvdykgfHwgKGNvbmQgPT0gU2lnbmVkKSB8fCAoY29uZCA9PSBaZXJvKSB8fCAoY29uZCA9PSBO
b25aZXJvKSk7CisKKyAgICAgICAgaWYgKGNvbmQgPT0gT3ZlcmZsb3cpIHsKKyAgICAgICAgICAg
IG1fYXNzZW1ibGVyLnN1YnZsX3JyKHNyYywgZGVzdCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxl
ci5lbnN1cmVTcGFjZShtX2Fzc2VtYmxlci5tYXhJbnN0cnVjdGlvblNpemUgKyA4LCBzaXplb2Yo
dWludDMyX3QpKTsKKyAgICAgICAgICAgIHJldHVybiBicmFuY2hUcnVlKCk7CisgICAgICAgIH0K
KworICAgICAgICBpZiAoY29uZCA9PSBTaWduZWQpIHsKKyAgICAgICAgICAgIC8vIENoZWNrIGlm
IGRlc3QgaXMgbmVnYXRpdmUuCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zdWJsX3JyKHNyYywg
ZGVzdCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5jbXBsX2lyKDAsIGRlc3QsIExlc3NUaGFu
KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmVuc3VyZVNwYWNlKG1fYXNzZW1ibGVyLm1heElu
c3RydWN0aW9uU2l6ZSArIDgsIHNpemVvZih1aW50MzJfdCkpOworICAgICAgICAgICAgcmV0dXJu
IGJyYW5jaFRydWUoKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgoY29uZCA9PSBaZXJvKSB8
fCAoY29uZCA9PSBOb25aZXJvKSkgeworICAgICAgICAgICAgc3ViMzIoc3JjLCBkZXN0KTsKKyAg
ICAgICAgICAgIG1fYXNzZW1ibGVyLmNtcGxfaXIoMCwgZGVzdCwgY29uZCk7CisKKyAgICAgICAg
ICAgIGlmIChjb25kID09IE5vdEVxdWFsKQorICAgICAgICAgICAgICAgIHJldHVybiBicmFuY2hG
YWxzZSgpOworICAgICAgICAgICAgcmV0dXJuIGJyYW5jaFRydWUoKTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIEp1bXAgYnJhbmNoU3ViMzIoQ29uZGl0aW9uIGNvbmQsIEltbTMyIGltbSwgUmVn
aXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKChjb25kID09IE92ZXJmbG93KSB8
fCAoY29uZCA9PSBTaWduZWQpIHx8IChjb25kID09IFplcm8pIHx8IChjb25kID09IE5vblplcm8p
KTsKKworICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBt
b3ZlKGltbSwgc2NyKTsKKworICAgICAgICBpZiAoY29uZCA9PSBPdmVyZmxvdykgeworICAgICAg
ICAgICAgbV9hc3NlbWJsZXIuc3VidmxfcnIoc2NyLCBkZXN0KTsKKyAgICAgICAgICAgIG1fYXNz
ZW1ibGVyLmVuc3VyZVNwYWNlKG1fYXNzZW1ibGVyLm1heEluc3RydWN0aW9uU2l6ZSArIDgsIHNp
emVvZih1aW50MzJfdCkpOworICAgICAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICAg
ICAgICAgIHJldHVybiBicmFuY2hUcnVlKCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNvbmQg
PT0gU2lnbmVkKSB7CisgICAgICAgICAgICAvLyBDaGVjayBpZiBkZXN0IGlzIG5lZ2F0aXZlLgor
ICAgICAgICAgICAgbV9hc3NlbWJsZXIuc3VibF9ycihzY3IsIGRlc3QpOworICAgICAgICAgICAg
bV9hc3NlbWJsZXIuY21wbF9pcigwLCBkZXN0LCBMZXNzVGhhbik7CisgICAgICAgICAgICBtX2Fz
c2VtYmxlci5lbnN1cmVTcGFjZShtX2Fzc2VtYmxlci5tYXhJbnN0cnVjdGlvblNpemUgKyA4LCBz
aXplb2YodWludDMyX3QpKTsKKyAgICAgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAg
ICAgICAgICByZXR1cm4gYnJhbmNoVHJ1ZSgpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKChj
b25kID09IFplcm8pIHx8IChjb25kID09IE5vblplcm8pKSB7CisgICAgICAgICAgICBzdWIzMihz
Y3IsIGRlc3QpOworCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5jbXBsX2lyKDAsIGRlc3QsIGNv
bmQpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuZW5zdXJlU3BhY2UobV9hc3NlbWJsZXIubWF4
SW5zdHJ1Y3Rpb25TaXplICsgOCwgc2l6ZW9mKHVpbnQzMl90KSk7CisKKyAgICAgICAgICAgIHJl
bGVhc2VTY3JhdGNoKHNjcik7CisgICAgICAgICAgICBpZiAoY29uZCA9PSBOb3RFcXVhbCkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gYnJhbmNoRmFsc2UoKTsKKyAgICAgICAgICAgIHJldHVybiBi
cmFuY2hUcnVlKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaE9yMzIoQ29u
ZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAg
ICAgICBBU1NFUlQoKGNvbmQgPT0gU2lnbmVkKSB8fCAoY29uZCA9PSBaZXJvKSB8fCAoY29uZCA9
PSBOb25aZXJvKSk7CisKKyAgICAgICAgaWYgKGNvbmQgPT0gU2lnbmVkKSB7CisgICAgICAgICAg
ICBvcjMyKHNyYywgZGVzdCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5jbXBsX2lyKDAsIGRl
c3QsIExlc3NUaGFuKTsKKyAgICAgICAgICAgIHJldHVybiBicmFuY2hUcnVlKCk7CisgICAgICAg
IH0KKworICAgICAgICBvcjMyKHNyYywgZGVzdCk7CisgICAgICAgIG1fYXNzZW1ibGVyLmNtcGxf
aXIoMCwgZGVzdCwgY29uZCk7CisgICAgICAgIGlmIChjb25kID09IE5vdEVxdWFsKQorICAgICAg
ICAgICAgcmV0dXJuIGJyYW5jaEZhbHNlKCk7CisgICAgICAgIHJldHVybiBicmFuY2hUcnVlKCk7
CisgICAgfQorCisgICAgdm9pZCBicmFuY2hDb252ZXJ0RG91YmxlVG9JbnQzMihGUFJlZ2lzdGVy
SUQgc3JjLCBSZWdpc3RlcklEIGRlc3QsIEp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIEZQUmVnaXN0
ZXJJRCBmcFRlbXApCisgICAgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9
CisKKyAgICB2b2lkIG5lZzMyKFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgbV9hc3Nl
bWJsZXIubmVnKGRzdCwgZHN0KTsKKyAgICB9CisKKyAgICB2b2lkIG5vdDMyKFJlZ2lzdGVySUQg
ZHN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubm90bF9yKGRzdCwgZHN0KTsKKyAgICB9
CisKKyAgICB2b2lkIHVyc2hpZnQzMihSZWdpc3RlcklEIHNoaWZ0YW1vdW50LCBSZWdpc3RlcklE
IGRlc3QpCisgICAgeworICAgICAgICAvKkluIHRoZSBjYXNlIHdoZXJlIHNoaWZ0YW1vdW50IGlu
ZGljYXRlcyBhIGxvZ2ljYWwgcmlnaHQgc2hpZnQgYnkgMzIsIHRoZSByZXN1bHQgaXMgMCovCisg
ICAgICAgIG1fYXNzZW1ibGVyLmNtcGxfaXIoMzIsIHNoaWZ0YW1vdW50LCBFcXVhbCk7CisgICAg
ICAgIG1fYXNzZW1ibGVyLmVuc3VyZVNwYWNlKG1fYXNzZW1ibGVyLm1heEluc3RydWN0aW9uU2l6
ZSArIDQpOworICAgICAgICBtX2Fzc2VtYmxlci5icmFuY2goQlRfT1BDT0RFLCAxKTsKKyAgICAg
ICAgbV9hc3NlbWJsZXIubmVnKHNoaWZ0YW1vdW50LCBzaGlmdGFtb3VudCk7CisgICAgICAgIG1f
YXNzZW1ibGVyLnNobGxfcnIoZGVzdCwgc2hpZnRhbW91bnQpOworICAgIH0KKworICAgIHZvaWQg
dXJzaGlmdDMyKEltbTMyIGltbSwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgUmVn
aXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9hZENv
bnN0YW50KC0oaW1tLm1fdmFsdWUpLCBzY3IpOworICAgICAgICBtX2Fzc2VtYmxlci5zaGFfcnIo
ZGVzdCwgc2NyKTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICB9CisKKyAgICBD
YWxsIGNhbGwoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIENhbGwobV9hc3NlbWJsZXIuY2FsbCgp
LCBDYWxsOjpMaW5rYWJsZSk7CisgICAgfQorCisgICAgQ2FsbCBuZWFyQ2FsbCgpCisgICAgewor
ICAgICAgICByZXR1cm4gQ2FsbChtX2Fzc2VtYmxlci5jYWxsKCksIENhbGw6OkxpbmthYmxlTmVh
cik7CisgICAgfQorCisgICAgQ2FsbCBjYWxsKFJlZ2lzdGVySUQgdGFyZ2V0KQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIENhbGwobV9hc3NlbWJsZXIuY2FsbCh0YXJnZXQpLCBDYWxsOjpOb25lKTsK
KyAgICB9CisKKyAgICB2b2lkIGJyZWFrcG9pbnQoKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJs
ZXIuYmtwdCgpOworICAgICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKKyAgICB9CisKKyAgICBKdW1w
IGJyYW5jaFB0cldpdGhQYXRjaChDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBsZWZ0LCBEYXRh
TGFiZWxQdHImIGRhdGFMYWJlbCwgSW1tUHRyIGluaXRpYWxSaWdodFZhbHVlID0gSW1tUHRyKDAp
KQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCBkYXRhVGVtcFJlZ2lzdGVyID0gY2xhaW1TY3Jh
dGNoKCk7CisKKyAgICAgICAgZGF0YUxhYmVsID0gbW92ZVdpdGhQYXRjaChpbml0aWFsUmlnaHRW
YWx1ZSwgZGF0YVRlbXBSZWdpc3Rlcik7CisKKyAgICAgICAgbV9hc3NlbWJsZXIuY21wbF9ycihk
YXRhVGVtcFJlZ2lzdGVyLCBsZWZ0LCBjb25kKTsKKworICAgICAgICByZWxlYXNlU2NyYXRjaChk
YXRhVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgaWYgKGNvbmQgPT0gTm90RXF1YWwpCisgICAgICAg
ICAgICByZXR1cm4gYnJhbmNoRmFsc2UoKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaFRydWUoKTsK
KyAgICB9CisKKyAgICBKdW1wIGJyYW5jaFB0cldpdGhQYXRjaChDb25kaXRpb24gY29uZCwgQWRk
cmVzcyBsZWZ0LCBEYXRhTGFiZWxQdHImIGRhdGFMYWJlbCwgSW1tUHRyIGluaXRpYWxSaWdodFZh
bHVlID0gSW1tUHRyKDApKQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNj
cmF0Y2goKTsKKworICAgICAgICBtX2Fzc2VtYmxlci5sb2FkQ29uc3RhbnQobGVmdC5vZmZzZXQs
IHNjciwgZmFsc2UpOworICAgICAgICBtX2Fzc2VtYmxlci5hZGRsX3JyKGxlZnQuYmFzZSwgc2Ny
KTsKKyAgICAgICAgbV9hc3NlbWJsZXIubW92bF9tcihzY3IsIHNjcik7CisKKyAgICAgICAgUmVn
aXN0ZXJJRCBzY3IxID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIGRhdGFMYWJlbCA9IG1vdmVX
aXRoUGF0Y2goaW5pdGlhbFJpZ2h0VmFsdWUsIHNjcjEpOworCisgICAgICAgIG1fYXNzZW1ibGVy
LmNtcGxfcnIoc2NyMSwgc2NyLCBjb25kKTsKKworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3Ip
OworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IxKTsKKyAgICAgICAgaWYgKGNvbmQgPT0gTm90
RXF1YWwpCisgICAgICAgICAgICByZXR1cm4gYnJhbmNoRmFsc2UoKTsKKyAgICAgICAgcmV0dXJu
IGJyYW5jaFRydWUoKTsKKyAgICB9CisKKyAgICB2b2lkIHJldCgpCisgICAgeworICAgICAgICBt
X2Fzc2VtYmxlci5yZXQoKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubm9wKCk7CisgICAgfQorCisg
ICAgRGF0YUxhYmVsUHRyIHN0b3JlUHRyV2l0aFBhdGNoKEltbVB0ciBpbml0aWFsVmFsdWUsIElt
cGxpY2l0QWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBj
bGFpbVNjcmF0Y2goKTsKKyAgICAgICAgRGF0YUxhYmVsUHRyIGxhYmVsID0gbW92ZVdpdGhQYXRj
aChpbml0aWFsVmFsdWUsIHNjcik7CisgICAgICAgIHN0b3JlMzIoc2NyLCBhZGRyZXNzKTsKKyAg
ICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICAgICAgcmV0dXJuIGxhYmVsOworICAgIH0K
KworICAgIERhdGFMYWJlbFB0ciBzdG9yZVB0cldpdGhQYXRjaChJbXBsaWNpdEFkZHJlc3MgYWRk
cmVzcykgeyByZXR1cm4gc3RvcmVQdHJXaXRoUGF0Y2goSW1tUHRyKDApLCBhZGRyZXNzKTsgfQor
CisgICAgaW50IHNpemVPZkNvbnN0YW50UG9vbCgpCisgICAgeworICAgICAgICByZXR1cm4gbV9h
c3NlbWJsZXIuc2l6ZU9mQ29uc3RhbnRQb29sKCk7CisgICAgfQorCisgICAgQ2FsbCB0YWlsUmVj
dXJzaXZlQ2FsbCgpCisgICAgeworICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRj
aCgpOworICAgICAgICBtX2Fzc2VtYmxlci5sb2FkQ29uc3RhbnQoMHgwLCBzY3IsIHRydWUpOwor
CisgICAgICAgIEp1bXAgbV9qdW1wID0gSnVtcChtX2Fzc2VtYmxlci5qbXAoc2NyKSk7CisgICAg
ICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisKKyAgICAgICAgcmV0dXJuIENhbGw6OmZyb21UYWls
SnVtcChtX2p1bXApOworICAgIH0KKworICAgIENhbGwgbWFrZVRhaWxSZWN1cnNpdmVDYWxsKEp1
bXAgb2xkSnVtcCkKKyAgICB7CisgICAgICAgIG9sZEp1bXAubGluayh0aGlzKTsKKyAgICAgICAg
cmV0dXJuIHRhaWxSZWN1cnNpdmVDYWxsKCk7CisgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICBm
cmllbmQgY2xhc3MgTGlua0J1ZmZlcjsKKyAgICBmcmllbmQgY2xhc3MgUmVwYXRjaEJ1ZmZlcjsK
KworICAgIHN0YXRpYyB2b2lkIGxpbmtDYWxsKHZvaWQqIGNvZGUsIENhbGwgY2FsbCwgRnVuY3Rp
b25QdHIgZnVuY3Rpb24pOworCisgICAgc3RhdGljIHZvaWQgcmVwYXRjaENhbGwoQ29kZUxvY2F0
aW9uQ2FsbCBjYWxsLCBDb2RlTG9jYXRpb25MYWJlbCBkZXN0aW5hdGlvbik7CisKKyAgICBzdGF0
aWMgdm9pZCByZXBhdGNoQ2FsbChDb2RlTG9jYXRpb25DYWxsIGNhbGwsIEZ1bmN0aW9uUHRyIGRl
c3RpbmF0aW9uKTsKKworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFC
TEUoQVNTRU1CTEVSKQorCisjZW5kaWYgLy8gTWFjcm9Bc3NlbWJsZXJTSDRfaApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9TSDRBc3NlbWJsZXIuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9TSDRBc3NlbWJsZXIuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3MWZmMTIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1NINEFzc2VtYmxlci5jcHAKQEAgLTAsMCArMSwy
MCBAQAorLyoKKyAqICBTSDRBc3NlbWJsZXIuY3BwCisgKiAgQ29weXJpZ2h0IChDKSAyMDExIFNU
TWljcm9lbGVjdHJvbmljcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyovCisKKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKEFTU0VNQkxFUikgJiYgQ1BVKFNINCkKKyNpbmNsdWRl
ICJTSDRBc3NlbWJsZXIuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKKyNpZmRlZiBTSDRfQVNTRU1C
TEVSX1RSQUNJTkcKK2Jvb2wgU0g0QXNzZW1ibGVyOjpkdW1wTmF0aXZlQ29kZSA9IGZhbHNlOwor
I2VuZGlmCisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxFKEFTU0VNQkxF
UikgJiYgQ1BVKFNINCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvU0g0QXNzZW1ibGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1NINEFz
c2VtYmxlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3YzgxNGQKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1NINEFzc2Vt
Ymxlci5oCkBAIC0wLDAgKzEsMjA4NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEx
IFNUTWljcm9lbGVjdHJvbmljcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFNINEFzc2VtYmxlcl9oCisjZGVm
aW5lIFNINEFzc2VtYmxlcl9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVO
QUJMRShBU1NFTUJMRVIpICYmIENQVShTSDQpCisKKyNpbmNsdWRlICJBc3NlbWJsZXJCdWZmZXIu
aCIKKyNpbmNsdWRlICJBc3NlbWJsZXJCdWZmZXJXaXRoQ29uc3RhbnRQb29sLmgiCisjaW5jbHVk
ZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+CisKKyNpZm5kZWYgdmFfbGlzdAorI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2VuZGlm
CisKKyNpZm5kZWYgTkRFQlVHCisjZGVmaW5lIFNINF9BU1NFTUJMRVJfVFJBQ0lORworI2VuZGlm
CisKK2lubGluZSB1aW50MTZfdCBnZXRPcGNvZGVHcm91cDEodWludDE2X3Qgb3BjLCBpbnQgcm0s
IGludCBybikKK3sKKyAgICByZXR1cm4gKChvcGMpIHwgKCgocm0pICYgMHhmKSA8PCA4KSB8KCgo
cm4pICYgMHhmKSA8PCA0KSk7Cit9CisKK2lubGluZSB1aW50MTZfdCBnZXRPcGNvZGVHcm91cDIo
dWludDE2X3Qgb3BjLCBpbnQgcm0pCit7CisgICAgcmV0dXJuICgob3BjKSB8ICgoKHJtKSAmIDB4
ZikgPDwgOCkpOworfQorCitpbmxpbmUgdWludDE2X3QgZ2V0T3Bjb2RlR3JvdXAzKHVpbnQxNl90
IG9wYywgaW50IHJtLCBpbnQgcm4pCit7CisgICAgcmV0dXJuICgob3BjKSB8ICgoKHJtKSAmIDB4
ZikgPDwgOCkgfCgocm4pICYgMHhmZikpOworfQorCitpbmxpbmUgdWludDE2X3QgZ2V0T3Bjb2Rl
R3JvdXA0KHVpbnQxNl90IG9wYywgaW50IHJtLCBpbnQgcm4sIGludCBvZmZzZXQpCit7CisgICAg
cmV0dXJuICAgKChvcGMpIHwgKCgocm0pICYgMHhmKSA8PCA4KSB8KCgocm4pICYgMHhmKSA8PDQp
IHwoKG9mZnNldCkgJiAweGYpKTsKK30KKworaW5saW5lIHVpbnQxNl90IGdldE9wY29kZUdyb3Vw
NSh1aW50MTZfdCBvcGMsIGludCBybSkKK3sKKyAgICByZXR1cm4gICAoKG9wYykgfCAoKHJtKSAm
IDB4ZmYpKTsKK30KKworaW5saW5lIHVpbnQxNl90IGdldE9wY29kZUdyb3VwNih1aW50MTZfdCBv
cGMsIGludCBybSkKK3sKKyAgICByZXR1cm4gICAoKG9wYykgfCAoKHJtKSAmIDB4ZmZmKSk7Cit9
CisKK2lubGluZSB1aW50MTZfdCBnZXRPcGNvZGVHcm91cDcodWludDE2X3Qgb3BjLCBpbnQgcm0p
Cit7CisgICAgcmV0dXJuICAgKChvcGMpIHwgKCgocm0pICYgMHg3KSA8PCA5KSk7Cit9CisKK2lu
bGluZSB1aW50MTZfdCBnZXRPcGNvZGVHcm91cDgodWludDE2X3Qgb3BjLCBpbnQgcm0sIGludCBy
bikKK3sKKyAgICByZXR1cm4gICAoKG9wYykgfCAoKChybSkgJiAweDcpIDw8IDkpIHwoKChybikg
JiAweDcpIDw8NSkpOworfQorCitpbmxpbmUgdWludDE2X3QgZ2V0T3Bjb2RlR3JvdXA5KHVpbnQx
Nl90IG9wYywgaW50IHJtLCBpbnQgcm4pCit7CisgICAgcmV0dXJuICAgKChvcGMpIHwgKCgocm0p
ICYgMHhmKSA8PCA4KSB8KCgocm4pICYgMHg3KSA8PDUpKTsKK30KKworaW5saW5lIHVpbnQxNl90
IGdldE9wY29kZUdyb3VwMTAodWludDE2X3Qgb3BjLCBpbnQgcm0sIGludCBybikKK3sKKyAgICBy
ZXR1cm4gICAoKG9wYykgfCAoKChybSkgJiAweDcpIDw8IDkpIHwoKChybikgJiAweEYpIDw8NCkp
OworfQorCitpbmxpbmUgdWludDE2X3QgZ2V0T3Bjb2RlR3JvdXAxMSh1aW50MTZfdCBvcGMsIGlu
dCBybSwgaW50IHJuKQoreworICAgIHJldHVybiAgICgob3BjKSB8ICgoKHJtKSAmIDB4ZikgPDwg
NCkgfCgoKHJuKSAmIDB4ZikpKTsKK30KKworaW5saW5lIHVpbnQxNl90IGdldFJuKHVpbnQxNl90
IHgpCit7CisgICAgcmV0dXJuICAgKCgoeCkgJiAweGYwMCkgPj4gOCk7Cit9CisKK2lubGluZSB1
aW50MTZfdCBnZXRSbSh1aW50MTZfdCB4KQoreworICAgIHJldHVybiAgICgoKHgpICYgMHhmMCkg
Pj4gNCk7Cit9CisKK2lubGluZSB1aW50MTZfdCBnZXREaXNwKHVpbnQxNl90IHgpCit7CisgICAg
cmV0dXJuICAgKCh4KSAmIDB4Zik7Cit9CisKK2lubGluZSB1aW50MTZfdCBnZXRJbW04KHVpbnQx
Nl90IHgpCit7CisgICAgcmV0dXJuICAgKCh4KSAmIDB4ZmYpOworfQorCitpbmxpbmUgdWludDE2
X3QgZ2V0SW1tMTIodWludDE2X3QgeCkKK3sKKyAgICByZXR1cm4gICAoKHgpICYgMHhmZmYpOwor
fQorCitpbmxpbmUgdWludDE2X3QgZ2V0RFJuKHVpbnQxNl90IHgpCit7CisgICAgcmV0dXJuICAg
KCgoeCkgJiAweEUwMCkgPj4gOSk7Cit9CisKK2lubGluZSB1aW50MTZfdCBnZXREUm0odWludDE2
X3QgeCkKK3sKKyAgICByZXR1cm4gICAoKCh4KSAmIDB4RTApID4+IDUpOworfQorCituYW1lc3Bh
Y2UgSlNDIHsKKyAgICB0eXBlZGVmIHVpbnQxNl90IFNINFdvcmQ7CisKKyAgICBlbnVtIHsKKyAg
ICAgICAgSU5WQUxJRF9PUENPREUgPSAweGZmZmYsCisgICAgICAgIEFERF9PUENPREUgPSAweDMw
MEMsCisgICAgICAgIEFERElNTV9PUENPREUgPSAweDcwMDAsCisgICAgICAgIEFERENfT1BDT0RF
ID0gMHgzMDBFLAorICAgICAgICBBRERWX09QQ09ERSA9IDB4MzAwRiwKKyAgICAgICAgQU5EX09Q
Q09ERSA9IDB4MjAwOSwKKyAgICAgICAgQU5ESU1NX09QQ09ERSA9IDB4QzkwMCwKKyAgICAgICAg
RElWMF9PUENPREUgPSAweDIwMDcsCisgICAgICAgIERJVjFfT1BDT0RFID0gMHgzMDA0LAorICAg
ICAgICBCRl9PUENPREUgPSAweDhCMDAsCisgICAgICAgIEJGU19PUENPREUgPSAweDhGMDAsCisg
ICAgICAgIEJSQV9PUENPREUgPSAwWEEwMDAsCisgICAgICAgIEJSQUZfT1BDT0RFID0gMHgwMDIz
LAorICAgICAgICBOT1BfT1BDT0RFID0gMHgwMDA5LAorICAgICAgICBCU1JfT1BDT0RFID0gMHhC
MDAwLAorICAgICAgICBSVFNfT1BDT0RFID0gMHgwMDBCLAorICAgICAgICBCVF9PUENPREUgPSAw
eDg5MDAsCisgICAgICAgIEJUU19PUENPREUgPSAweDhEMDAsCisgICAgICAgIEJTUkZfT1BDT0RF
ID0gMHgwMDAzLAorICAgICAgICBCUktfT1BDT0RFID0gMHgwMDNCLAorICAgICAgICBGVFJDX09Q
Q09ERSA9IDB4RjAzRCwKKyAgICAgICAgQ01QRVFfT1BDT0RFID0gMHgzMDAwLAorICAgICAgICBD
TVBFUUlNTV9PUENPREUgPSAweDg4MDAsCisgICAgICAgIENNUEdFX09QQ09ERSA9IDB4MzAwMywK
KyAgICAgICAgQ01QR1RfT1BDT0RFID0gMHgzMDA3LAorICAgICAgICBDTVBISV9PUENPREUgPSAw
eDMwMDYsCisgICAgICAgIENNUEhTX09QQ09ERSA9IDB4MzAwMiwKKyAgICAgICAgQ01QUExfT1BD
T0RFID0gMHg0MDE1LAorICAgICAgICBDTVBQWl9PUENPREUgPSAweDQwMTEsCisgICAgICAgIENN
UFNUUl9PUENPREUgPSAweDIwMEMsCisgICAgICAgIERUX09QQ09ERSA9IDB4NDAxMCwKKyAgICAg
ICAgRkNNUEVRX09QQ09ERSA9IDB4RjAwNCwKKyAgICAgICAgRkNNUEdUX09QQ09ERSA9IDB4RjAw
NSwKKyAgICAgICAgRk1PVl9PUENPREUgPSAweEYwMEMsCisgICAgICAgIERNT1ZfT1BDT0RFID0g
MHgxRTAxOSwKKyAgICAgICAgRE1PVl9XUklURV9SMFJOX09QQ09ERSA9IDB4MUUwMEYsCisgICAg
ICAgIERNT1ZfUkVBRF9SMFJOX09QQ09ERSA9IDB4MUUwMEQsCisgICAgICAgIEZBRERfT1BDT0RF
ID0gMHhGMDAwLAorICAgICAgICBGTVVMX09QQ09ERSA9IDB4RjAwMiwKKyAgICAgICAgRlNVQl9P
UENPREUgPSAweEYwMDEsCisgICAgICAgIEZESVZfT1BDT0RFID0gMHhGMDAzLAorICAgICAgICBG
TkVHX09QQ09ERSA9IDB4RjA0RCwKKyAgICAgICAgSk1QX09QQ09ERSA9IDB4NDAyQiwKKyAgICAg
ICAgSlNSX09QQ09ERSA9IDB4NDAwQiwKKyAgICAgICAgTERTUFJfT1BDT0RFID0gMHg0MDJBLAor
ICAgICAgICBMRFNMUFJfT1BDT0RFID0gMHg0MDI2LAorICAgICAgICBNT1ZfT1BDT0RFID0gMHg2
MDAzLAorICAgICAgICBNT1ZJTU1fT1BDT0RFID0gMHhFMDAwLAorICAgICAgICBNT1ZCX1dSSVRF
X1JOX09QQ09ERSA9IDB4MjAwMCwKKyAgICAgICAgTU9WQl9XUklURV9STkRFQ19PUENPREUgPSAw
eDIwMDQsCisgICAgICAgIE1PVkJfV1JJVEVfUjBSTl9PUENPREUgPSAweDAwMDQsCisgICAgICAg
IE1PVkJfV1JJVEVfT0ZGR0JSX09QQ09ERSA9IDB4QzAwMCwKKyAgICAgICAgTU9WQl9XUklURV9P
RkZSTl9PUENPREUgPSAweDgwMDAsCisgICAgICAgIE1PVkJfUkVBRF9STV9PUENPREUgPSAweDYw
MDAsCisgICAgICAgIE1PVkJfUkVBRF9STUlOQ19PUENPREUgPSAweDYwMDQsCisgICAgICAgIE1P
VkJfUkVBRF9SMFJNX09QQ09ERSA9IDB4MDAwQywKKyAgICAgICAgTU9WQl9SRUFEX09GRkdCUl9P
UENPREUgPSAweEM0MDAsCisgICAgICAgIE1PVkJfUkVBRF9PRkZSTV9PUENPREUgPSAweDg0MDAs
CisgICAgICAgIE1PVkxfV1JJVEVfUk5fT1BDT0RFID0gMHgyMDAyLAorICAgICAgICBNT1ZMX1dS
SVRFX1JOREVDX09QQ09ERSA9IDB4MjAwNiwKKyAgICAgICAgTU9WTF9XUklURV9SMFJOX09QQ09E
RSA9IDB4MDAwNiwKKyAgICAgICAgTU9WTF9XUklURV9PRkZHQlJfT1BDT0RFID0gMHhDMjAwLAor
ICAgICAgICBNT1ZMX1dSSVRFX09GRlJOX09QQ09ERSA9IDB4MTAwMCwKKyAgICAgICAgTU9WTF9S
RUFEX1JNX09QQ09ERSA9IDB4NjAwMiwKKyAgICAgICAgTU9WTF9SRUFEX1JNSU5DX09QQ09ERSA9
IDB4NjAwNiwKKyAgICAgICAgTU9WTF9SRUFEX1IwUk1fT1BDT0RFID0gMHgwMDBFLAorICAgICAg
ICBNT1ZMX1JFQURfT0ZGR0JSX09QQ09ERSA9IDB4QzYwMCwKKyAgICAgICAgTU9WTF9SRUFEX09G
RlBDX09QQ09ERSA9IDB4RDAwMCwKKyAgICAgICAgTU9WTF9SRUFEX09GRlJNX09QQ09ERSA9IDB4
NTAwMCwKKyAgICAgICAgTU9WV19XUklURV9STl9PUENPREUgPSAweDIwMDEsCisgICAgICAgIE1P
VldfUkVBRF9STV9PUENPREUgPSAweDYwMDEsCisgICAgICAgIE1PVldfUkVBRF9SMFJNX09QQ09E
RSA9IDB4MDAwRCwKKyAgICAgICAgTU9WV19SRUFEX09GRlBDX09QQ09ERSA9IDB4OTAwMCwKKyAg
ICAgICAgTU9WQV9SRUFEX09GRlBDX09QQ09ERSA9IDB4QzcwMCwKKyAgICAgICAgTU9WVF9PUENP
REUgPSAweDAwMjksCisgICAgICAgIE1VTExfT1BDT0RFID0gMHgwMDA3LAorICAgICAgICBETVVM
TF9MX09QQ09ERSA9IDB4MzAwNSwKKyAgICAgICAgU1RTTUFDTF9PUENPREUgPSAweDAwMUEsCisg
ICAgICAgIFNUU01BQ0hfT1BDT0RFID0gMHgwMDBBLAorICAgICAgICBETVVMU0xfT1BDT0RFID0g
MHgzMDBELAorICAgICAgICBORUdfT1BDT0RFID0gMHg2MDBCLAorICAgICAgICBORUdDX09QQ09E
RSA9IDB4NjAwQSwKKyAgICAgICAgTk9UX09QQ09ERSA9IDB4NjAwNywKKyAgICAgICAgT1JfT1BD
T0RFID0gIDB4MjAwQiwKKyAgICAgICAgT1JJTU1fT1BDT0RFID0gMHhDQjAwLAorICAgICAgICBP
UkJJTU1fT1BDT0RFID0gMHhDRjAwLAorICAgICAgICBTRVRTX09QQ09ERSA9IDB4MDA1OCwKKyAg
ICAgICAgU0VUVF9PUENPREUgPSAweDAwMTgsCisgICAgICAgIFNIQURfT1BDT0RFID0gMHg0MDBD
LAorICAgICAgICBTSEFMX09QQ09ERSA9IDB4NDAyMCwKKyAgICAgICAgU0hBUl9PUENPREUgPSAw
eDQwMjEsCisgICAgICAgIFNITERfT1BDT0RFID0gMHg0MDBELAorICAgICAgICBTSExMX09QQ09E
RSA9IDB4NDAwMCwKKyAgICAgICAgU0hMTDJfT1BDT0RFID0gMHg0MDA4LAorICAgICAgICBTSExM
OF9PUENPREUgPSAweDQwMTgsCisgICAgICAgIFNITEwxNl9PUENPREUgPSAweDQwMjgsCisgICAg
ICAgIFNITFJfT1BDT0RFID0gMHg0MDAxLAorICAgICAgICBTSExSMl9PUENPREUgPSAweDQwMDks
CisgICAgICAgIFNITFI4X09QQ09ERSA9IDB4NDAxOSwKKyAgICAgICAgU0hMUjE2X09QQ09ERSA9
IDB4NDAyOSwKKyAgICAgICAgU1RTUFJfT1BDT0RFID0gMHgwMDJBLAorICAgICAgICBTVFNMUFJf
T1BDT0RFID0gMHg0MDIyLAorICAgICAgICBGTE9BVF9PUENPREUgPSAweEYwMkQsCisgICAgICAg
IFNVQl9PUENPREUgPSAweDMwMDgsCisgICAgICAgIFNVQkNfT1BDT0RFID0gMHgzMDBBLAorICAg
ICAgICBTVUJWX09QQ09ERSA9IDB4MzAwQiwKKyAgICAgICAgVFNUX09QQ09ERSA9IDB4MjAwOCwK
KyAgICAgICAgVFNUSU1NX09QQ09ERSA9IDB4QzgwMCwKKyAgICAgICAgVFNUQl9PUENPREUgPSAw
eENDMDAsCisgICAgICAgIEVYVFVXX09QQ09ERSA9IDB4NjAwRCwKKyAgICAgICAgWE9SX09QQ09E
RSA9IDB4MjAwQSwKKyAgICAgICAgWE9SSU1NX09QQ09ERSA9IDB4Q0EwMCwKKyAgICAgICAgWE9S
Ql9PUENPREUgPSAweENFMDAsCisgICAgICAgIEZNT1ZTX1JFQURfUk1fSU5DX09QQ09ERSA9IDB4
RjAwOSwKKyAgICAgICAgRk1PVlNfUkVBRF9STV9PUENPREUgPSAweEYwMDgsCisgICAgICAgIEZN
T1ZTX1JFQURfUjBSTV9PUENPREUgPSAweEYwMDYsCisgICAgICAgIEZNT1ZTX1dSSVRFX1JOX09Q
Q09ERSA9IDB4RjAwQSwKKyAgICAgICAgRk1PVlNfV1JJVEVfUk5fREVDX09QQ09ERSA9IDB4RjAw
QiwKKyAgICAgICAgRk1PVlNfV1JJVEVfUjBSTl9PUENPREUgPSAweEYwMDcsCisgICAgICAgIExE
U19STV9GUFVMX09QQ09ERSA9IDB4NDA1QSwKKyAgICAgICAgRkxEU19GUk1fRlBVTF9PUENPREUg
PSAweEYwMUQsCisgICAgICAgIFNUU19GUFVMX1JOX09QQ09ERSA9IDB4MDA1QSwKKyAgICAgICAg
RlNUU19GUFVMX0ZSTl9PUENPREUgPSAweEYwMEQsCisgICAgICAgIExEU0ZQU0NSX09QQ09ERSA9
IDB4NDA2QSwKKyAgICAgICAgU1RTRlBTQ1JfT1BDT0RFID0gMHgwMDZBLAorICAgICAgICBMRFNS
TUZQVUxfT1BDT0RFID0gMHg0MDVBLAorICAgICAgICBGU1RTRlBVTEZSTl9PUENPREUgPSAweEYw
MEQsCisgICAgICAgIEZTUVJUX09QQ09ERSA9IDB4RjA2RCwKKyAgICAgICAgQ0xSVF9PUENPREUg
PSA4LAorICAgIH07CisKKyAgICBuYW1lc3BhY2UgU0g0UmVnaXN0ZXJzIHsKKyAgICAgICAgdHlw
ZWRlZiBlbnVtIHsKKyAgICAgICAgICAgIHIwLAorICAgICAgICAgICAgcjEsCisgICAgICAgICAg
ICByMiwKKyAgICAgICAgICAgIHIzLAorICAgICAgICAgICAgcjQsCisgICAgICAgICAgICByNSwK
KyAgICAgICAgICAgIHI2LAorICAgICAgICAgICAgcjcsCisgICAgICAgICAgICByOCwKKyAgICAg
ICAgICAgIHI5LAorICAgICAgICAgICAgcjEwLAorICAgICAgICAgICAgcjExLAorICAgICAgICAg
ICAgcjEyLAorICAgICAgICAgICAgcjEzLAorICAgICAgICAgICAgcjE0LCBmcCAgPSByMTQsCisg
ICAgICAgICAgICByMTUsIHNwICA9IHIxNSwKKyAgICAgICAgICAgIHBjLAorICAgICAgICAgICAg
cHIsCisgICAgICAgIH0gUmVnaXN0ZXJJRDsKKworICAgICAgICB0eXBlZGVmIGVudW0geworICAg
ICAgICAgICAgZnIwLCBkcjAgID0gZnIwLAorICAgICAgICAgICAgZnIxLAorICAgICAgICAgICAg
ZnIyLCBkcjIgID0gZnIyLAorICAgICAgICAgICAgZnIzLAorICAgICAgICAgICAgZnI0LCBkcjQg
ID0gZnI0LAorICAgICAgICAgICAgZnI1LAorICAgICAgICAgICAgZnI2LCBkcjYgID0gZnI2LAor
ICAgICAgICAgICAgZnI3LAorICAgICAgICAgICAgZnI4LCBkcjggID0gZnI4LAorICAgICAgICAg
ICAgZnI5LAorICAgICAgICAgICAgZnIxMCwgZHIxMCA9IGZyMTAsCisgICAgICAgICAgICBmcjEx
LAorICAgICAgICAgICAgZnIxMiwgZHIxMiA9IGZyMTIsCisgICAgICAgICAgICBmcjEzLAorICAg
ICAgICAgICAgZnIxNCwgZHIxNCA9IGZyMTQsCisgICAgICAgICAgICBmcjE1LAorICAgICAgICB9
IEZQUmVnaXN0ZXJJRDsKKyAgICB9CisKK2NsYXNzIFNINEFzc2VtYmxlciB7CitwdWJsaWM6Cisg
ICAgdHlwZWRlZiBTSDRSZWdpc3RlcnM6OlJlZ2lzdGVySUQgUmVnaXN0ZXJJRDsKKyAgICB0eXBl
ZGVmIFNINFJlZ2lzdGVyczo6RlBSZWdpc3RlcklEIEZQUmVnaXN0ZXJJRDsKKworICAgIHR5cGVk
ZWYgQXNzZW1ibGVyQnVmZmVyV2l0aENvbnN0YW50UG9vbDw1MTIsIDQsIDIsIFNINEFzc2VtYmxl
cj4gU0g0QnVmZmVyOworCisgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgc2NyYXRjaFJlZzEg
PSBTSDRSZWdpc3RlcnM6OnIzOworICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIHNjcmF0Y2hS
ZWcyID0gU0g0UmVnaXN0ZXJzOjpyMTE7CisgICAgaW50IGNsYWltc2NyYXRjaFJlZzsKKyAgICBz
dGF0aWMgY29uc3QgdWludDMyX3QgbWF4SW5zdHJ1Y3Rpb25TaXplID0gMTY7CisKKyNpZmRlZiBT
SDRfQVNTRU1CTEVSX1RSQUNJTkcKKyAgICBzdGF0aWMgYm9vbCBkdW1wTmF0aXZlQ29kZTsKKyNl
bmRpZgorCisgICAgZW51bSB7CisgICAgICAgIHBhZEZvckFsaWduOCAgPSAweDAwLAorICAgICAg
ICBwYWRGb3JBbGlnbjE2ID0gMHgwMDA5LAorICAgICAgICBwYWRGb3JBbGlnbjMyID0gMHgwMDA5
MDAwOSwKKyAgICB9OworCisgICAgU0g0QXNzZW1ibGVyKCkKKyAgICB7CisgICAgICAgIGNsYWlt
c2NyYXRjaFJlZyA9IDB4MDsKKyNpZmRlZiBTSDRfQVNTRU1CTEVSX1RSQUNJTkcKKyAgICAgICAg
ZHVtcE5hdGl2ZUNvZGUgPSBnZXRlbnYoIkphdmFTY3JpcHRDb3JlRHVtcEpJVCIpOworI2VuZGlm
CisgICAgfSAgCisgICAgCisgICAgLyogU0g0IGNvbmRpdGlvbiBjb2RlcyAqLworICAgICAgICB0
eXBlZGVmIGVudW0geworICAgICAgICAgICAgRVEgPSAweDAsIC8vIEVxdWFsCisgICAgICAgICAg
ICBORSA9IDB4MSwgLy8gTm90IEVxdWFsCisgICAgICAgICAgICBIUyA9IDB4MiwgLy8gVW5zaWdl
bmQgR3JlYXRlciBUaGFuIGVxdWFsCisgICAgICAgICAgICBISSA9IDB4MywgLy8gVW5zaWdlbmQg
R3JlYXRlciBUaGFuCisgICAgICAgICAgICBMUyA9IDB4NCwgLy8gVW5zaWdlbmQgTG93ZXIgb3Ig
U2FtZQorICAgICAgICAgICAgTEkgPSAweDUsIC8vIFVuc2lnZW5kIExvd2VyCisgICAgICAgICAg
ICBHRSA9IDB4NiwgLy8gR3JlYXRlciBvciBFcXVhbAorICAgICAgICAgICAgTFQgPSAweDcsIC8v
IExlc3MgVGhhbgorICAgICAgICAgICAgR1QgPSAweDgsIC8vIEdyZWF0ZXIgVGhhbgorICAgICAg
ICAgICAgTEUgPSAweDksIC8vIExlc3Mgb3IgRXF1YWwKKyAgICAgICAgICAgIE9GID0gMHhhLCAv
LyBPdmVyRmxvdworICAgICAgICAgICAgU0kgPSAweGIsIC8vIFNpZ25lZAorICAgICAgICAgICAg
RVFVPSAweGMsIC8vIEVxdWFsIG9yIHVub3JkZXJlZChOYU4pCisgICAgICAgICAgICBORVU9IDB4
ZCwKKyAgICAgICAgICAgIEdUVT0gMHhlLAorICAgICAgICAgICAgR0VVPSAweGYsCisgICAgICAg
ICAgICBMVFU9IDB4MTAsCisgICAgICAgICAgICBMRVU9IDB4MTEsCisgICAgICAgIH0gQ29uZGl0
aW9uOworICAgICAgICAKKyAgICAvLyBPcGFxdWUgbGFiZWwgdHlwZXMKK3B1YmxpYzoKKworICAg
IGNsYXNzIEptcFNyYyB7CisgICAgICAgIGZyaWVuZCBjbGFzcyBTSDRBc3NlbWJsZXI7CisgICAg
cHVibGljOgorICAgICAgICBKbXBTcmMoKQorICAgICAgICAgICAgOiBtX29mZnNldCgtMSkKKyAg
ICAgICAgeworICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBKbXBTcmMoaW50IG9m
ZnNldCkKKyAgICAgICAgICAgIDogbV9vZmZzZXQob2Zmc2V0KQorICAgICAgICB7CisgICAgICAg
IH0KKworICAgICAgICBpbnQgbV9vZmZzZXQ7CisgICAgfTsKKworICAgIGNsYXNzIEptcERzdCB7
CisgICAgICAgIGZyaWVuZCBjbGFzcyBTSDRBc3NlbWJsZXI7CisgICAgcHVibGljOgorICAgICAg
ICBKbXBEc3QoKQorICAgICAgICAgICAgOiBtX29mZnNldCgtMSkKKyAgICAgICAgICAgICwgbV91
c2VkKGZhbHNlKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBib29sIGlzVXNlZCgp
IGNvbnN0IHsgcmV0dXJuIG1fdXNlZDsgfQorICAgICAgICBib29sIGlzU2V0KCkgY29uc3QgeyBy
ZXR1cm4gKG1fb2Zmc2V0ICE9IC0xKTsgfQorICAgICAgICB2b2lkIHVzZWQoKSB7IG1fdXNlZCA9
IHRydWU7IH0KKworCisgICAgcHJpdmF0ZToKKyAgICAgICAgSm1wRHN0KGludCBvZmZzZXQpCisg
ICAgICAgICAgICA6IG1fb2Zmc2V0KG9mZnNldCkKKyAgICAgICAgICAgICwgbV91c2VkKGZhbHNl
KQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQobV9vZmZzZXQgPT0gb2Zmc2V0KTsKKyAg
ICAgICAgfQorCisgICAgICAgIGludCBtX29mZnNldCA6IDMxOworICAgICAgICBpbnQgbV91c2Vk
IDogMTsKKyAgICB9OworCisgICAgYm9vbCBpc0ltbWVkaWF0ZShpbnQgY29uc3RhbnQpCisgICAg
eyAgICAgICAgCisgICAgICAgIHJldHVybiAoKGNvbnN0YW50IDw9IDEyNykgJiYgKGNvbnN0YW50
ID49IC0xMjgpKTsKKyAgICB9CisKKyAgICBSZWdpc3RlcklEIGNsYWltU2NyYXRjaCgpCisgICAg
eworICAgICAgICAgQVNTRVJUKChjbGFpbXNjcmF0Y2hSZWcgIT0gMHgzKSk7CisgICAgICAgICBS
ZWdpc3RlcklEIHNjcmF0Y2hSZWcgPSBzY3JhdGNoUmVnMTsKKworICAgICAgICAgaWYgKCEoY2xh
aW1zY3JhdGNoUmVnICYgMHgxKSkKKyAgICAgICAgICAgICBjbGFpbXNjcmF0Y2hSZWcgPSAoY2xh
aW1zY3JhdGNoUmVnIHwgMHgxKTsKKyAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIGNsYWlt
c2NyYXRjaFJlZyA9IChjbGFpbXNjcmF0Y2hSZWcgfCAweDIpOworICAgICAgICAgICAgIHNjcmF0
Y2hSZWcgPSBzY3JhdGNoUmVnMjsKKyAgICAgICAgIH0KKyAgICAgICAgIHJldHVybiBzY3JhdGNo
UmVnOworICAgICB9CisKKyAgICAgdm9pZCByZWxlYXNlU2NyYXRjaChSZWdpc3RlcklEIHNjcmF0
Y2hSKSAKKyAgICAgeyAgIAorICAgICAgICAgaWYgKHNjcmF0Y2hSID09ICBzY3JhdGNoUmVnMSkK
KyAgICAgICAgICAgICBjbGFpbXNjcmF0Y2hSZWcgPSAoY2xhaW1zY3JhdGNoUmVnICYgMHgyKTsK
KyAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICBjbGFpbXNjcmF0Y2hSZWcgPSAoY2xhaW1zY3Jh
dGNoUmVnICYgMHgxKTsKKyAgICAgfSAKKworICAgIC8vIFN0YWNrIG9wZXJhdGlvbnM6CisKKyAg
ICB2b2lkIHB1c2hfcihSZWdpc3RlcklEIHJlZykKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9w
YzsKKyAgICAgICAgCisgICAgICAgIGlmIChyZWcgPT0gU0g0UmVnaXN0ZXJzOjpwcikKKyAgICAg
ICAgICAgIG9wYyA9IGdldE9wY29kZUdyb3VwMihTVFNMUFJfT1BDT0RFLCBTSDRSZWdpc3RlcnM6
OnNwKTsgICAvKiBTVFMuTCBQUiwgQC1SJWQgKi8KKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
b3BjID0gZ2V0T3Bjb2RlR3JvdXAxKE1PVkxfV1JJVEVfUk5ERUNfT1BDT0RFLCBTSDRSZWdpc3Rl
cnM6OnNwLCByZWcpOyAvKiBtb3YubCByZWcsIEAtU1AgKi8KKworICAgICAgICBvbmVTaG9ydE9w
KG9wYyk7CisgICAgfQorCisgICAgdm9pZCBwb3BfcihSZWdpc3RlcklEIHJlZykKKyAgICB7Cisg
ICAgICAgIHVpbnQxNl90IG9wYzsKKyAgICAgICAgCisgICAgICAgIGlmIChyZWcgPT0gU0g0UmVn
aXN0ZXJzOjpwcikKKyAgICAgICAgICAgIG9wYyA9IGdldE9wY29kZUdyb3VwMihMRFNMUFJfT1BD
T0RFLCBTSDRSZWdpc3RlcnM6OnNwKTsgIC8qIExEUy5MIEBSJWQrLCBQUiovCisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIG9wYyA9IGdldE9wY29kZUdyb3VwMShNT1ZMX1JFQURfUk1JTkNfT1BD
T0RFLCByZWcsIFNINFJlZ2lzdGVyczo6c3ApOyAvKiBtb3YubCBAK3NyYywgZGVzdDsqLworICAg
ICAgICAKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAgIHZvaWQgcHVzaF9p
MzIoaW50IGltbSkKKyAgICB7CisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNo
KCk7CisgICAgICAgIGxvYWRDb25zdGFudChpbW0sIHNjcik7CisgICAgICAgIHB1c2hfcihzY3Ip
OworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgIH0KKworICAgIHZvaWQgcHVzaF9t
KGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkKKyAgICB7CisgICAgICAgIGlmICgob2Zmc2V0
IDwgMCkgfHwgKG9mZnNldCA+PSA2NCkpIHsKKyAgICAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBj
bGFpbVNjcmF0Y2goKTsgCisgICAgICAgICAgICAKKyAgICAgICAgICAgIGxvYWRDb25zdGFudChv
ZmZzZXQsIHNjcik7CisgICAgICAgICAgICBhZGRsX3JyKGJhc2UsIHNjcik7CisgICAgICAgICAg
ICBtb3ZsX21yKHNjciwgU0g0UmVnaXN0ZXJzOjpzcCk7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgICAgIH0gZWxzZSBpZiAob2Zmc2V0KQorICAg
ICAgICAgICAgbW92bF9tcihvZmZzZXQgPj4gMiwgYmFzZSwgU0g0UmVnaXN0ZXJzOjpzcCk7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1vdmxfbXIoYmFzZSwgU0g0UmVnaXN0ZXJzOjpzcCk7
CisgICAgICAgIAorICAgICAgICBhZGRsX2k4cigtNCwgU0g0UmVnaXN0ZXJzOjpzcCk7CisgICAg
fQorCisgICAgdm9pZCBwb3BfbShpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UpCisgICAgeyAg
ICAgICAgIAorICAgICAgICBpZiAoKG9mZnNldCA8IDApIHx8IChvZmZzZXQgPj0gNjQpKSB7Cisg
ICAgICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICAgICAg
bG9hZENvbnN0YW50KG9mZnNldCwgc2NyKTsKKyAgICAgICAgICAgIGFkZGxfcnIoYmFzZSwgc2Ny
KTsKKyAgICAgICAgICAgIG1vdmxfcm0oU0g0UmVnaXN0ZXJzOjpzcCwgc2NyKTsKKyAgICAgICAg
ICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgICAgIH0gZWxzZSBpZiAob2Zmc2V0KQorICAg
ICAgICAgICAgbW92bF9ybShTSDRSZWdpc3RlcnM6OnNwLCBvZmZzZXQgPj4gMiwgYmFzZSk7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1vdmxfcm0oU0g0UmVnaXN0ZXJzOjpzcCwgYmFzZSk7
CisgICAgICAgIAorICAgICAgICBhZGRsX2k4cig0LCBTSDRSZWdpc3RlcnM6OnNwKTsKKyAgICB9
CisKKyAgICB2b2lkIG1vdnQoUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICB1aW50MTZf
dCBvcGMgPSBnZXRPcGNvZGVHcm91cDIoTU9WVF9PUENPREUsIGRzdCk7CisgICAgICAgIG9uZVNo
b3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICAvLyBBcml0aG1ldGljIG9wZXJhdGlvbnM6CisKKyAg
ICB2b2lkIGFkZGxfcnIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAg
ICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXAxKEFERF9PUENPREUsIGRzdCwgc3Jj
KTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAgIHZvaWQgYWRkY2xfcnIo
UmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qg
b3BjID0gZ2V0T3Bjb2RlR3JvdXAxKEFERENfT1BDT0RFLCBkc3QsIHNyYyk7CisgICAgICAgIG9u
ZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lkIGFkZHZsX3JyKFJlZ2lzdGVySUQgc3Jj
LCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29k
ZUdyb3VwMShBRERWX09QQ09ERSwgZHN0LCBzcmMpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7
CisgICAgfSAgICAgCisKKyAgICB2b2lkIGFkZGxfaThyKGludCBpbW04LCBSZWdpc3RlcklEIGRz
dCkKKyAgICB7CisgICAgICAgIEFTU0VSVCgoaW1tOCA8PSAxMjcpICYmIChpbW04ID49IC0xMjgp
KTsKKyAgICAgICAgCisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3VwMyhBRERJ
TU1fT1BDT0RFLCBkc3QsIGltbTgpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQor
CisgICAgdm9pZCBhbmRsX3JyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7
CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3VwMShBTkRfT1BDT0RFLCBkc3Qs
IHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lkIGFkZGxf
aXIoaW50IGltbSwgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICBpZiAoaXNJbW1lZGlh
dGUoaW1tKSkKKyAgICAgICAgICAgIGFkZGxfaThyKGltbSwgZHN0KTsKKyAgICAgICAgZWxzZSB7
CisgICAgICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICAg
ICAgbG9hZENvbnN0YW50KGltbSwgc2NyKTsKKyAgICAgICAgICAgIHVpbnQxNl90IG9wYyA9IGdl
dE9wY29kZUdyb3VwMShBRERfT1BDT0RFLCBkc3QsIHNjcik7CisgICAgICAgICAgICBvbmVTaG9y
dE9wKG9wYyk7CisgICAgICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOyAgCisgICAgICAgIH0K
KyAgICB9CisKKyAgICB2b2lkIGFuZGxfaThyKGludCBpbW04LCBSZWdpc3RlcklEIGRzdCkKKyAg
ICB7CisgICAgICAgIEFTU0VSVCgoaW1tOCA8PSAyNTUpICYmIChpbW04ID49IDApKTsKKyAgICAg
ICAgQVNTRVJUKGRzdCA9PSBTSDRSZWdpc3RlcnM6OnIwKTsKKyAgICAgICAgCisgICAgICAgIHVp
bnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3VwNShBTkRJTU1fT1BDT0RFLCBpbW04KTsKKyAgICAg
ICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAgIHZvaWQgZGl2MWxfcnIoUmVnaXN0ZXJJ
RCBzcmMsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0
T3Bjb2RlR3JvdXAxKERJVjFfT1BDT0RFLCBkc3QsIHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Ao
b3BjKTsKKworICAgIH0KKworICAgIHZvaWQgZGl2MGxfcnIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lz
dGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXAx
KERJVjBfT1BDT0RFLCBkc3QsIHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKworICAg
IH0gICAgCisKKyAgICB2b2lkIG5vdGxfcihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3Qp
CisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDEoTk9UX09QQ09E
RSwgZHN0LCBzcmMpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgdm9p
ZCBvcmxfcnIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAg
dWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXAxKE9SX09QQ09ERSwgZHN0LCBzcmMpOworICAg
ICAgICBvbmVTaG9ydE9wKG9wYyk7CisKKyAgICB9CisKKyAgICB2b2lkIG9ybF9pOHIoaW50IGlt
bTgsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKChpbW04IDw9IDI1NSkg
JiYgKGltbTggPj0gMCkpOworICAgICAgICBBU1NFUlQoZHN0ID09IFNINFJlZ2lzdGVyczo6cjAp
OworICAgICAgICAKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXA1KE9SSU1N
X09QQ09ERSwgaW1tOCk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICB2
b2lkIHN1YmxfcnIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAg
ICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3VwMShTVUJfT1BDT0RFLCBkc3QsIHNyYyk7
CisgICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCBzdWJ2bF9ycihS
ZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICAgdWludDE2X3Qg
b3BjID0gZ2V0T3Bjb2RlR3JvdXAxKFNVQlZfT1BDT0RFLCBkc3QsIHNyYyk7CisgICAgICAgICBv
bmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCBzdWJsX2ltbXIoaW50IGltbSwgUmVn
aXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICBpZiAoaXNJbW1lZGlhdGUoLWltbSkpCisgICAg
ICAgICAgICBhZGRsX2k4cigtaW1tLCBkc3QpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
IFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgICAgICBsb2FkQ29uc3Rh
bnQoaW1tLCBzY3IpOworICAgICAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXAx
KFNVQl9PUENPREUsIGRzdCwgc2NyKTsKKyAgICAgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAg
ICAgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7ICAKKyAgICAgICAgfQorCisgICAgfQorCisg
ICAgdm9pZCB4b3JsX3JyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7Cisg
ICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3VwMShYT1JfT1BDT0RFLCBkc3QsIHNy
Yyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lkIHhvcmxfaThy
KGludCBpbW04LCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIEFTU0VSVCgoaW1tOCA8
PSAyNTUpICYmIChpbW04ID49IDApKTsKKyAgICAgICAgQVNTRVJUKGRzdCA9PSBTSDRSZWdpc3Rl
cnM6OnIwKTsKKyAgICAgICAgCisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3Vw
NShYT1JJTU1fT1BDT0RFLCBpbW04KTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0K
KworICAgIHZvaWQgc2hsbF9pOHIoaW50IGltbSwgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAg
ICAgICB1aW50MTZfdCBvcGM7CisgICAgICAgIAorICAgICAgICBzd2l0Y2ggKGltbSkgeworICAg
ICAgICBjYXNlIDE6IG9wYyA9IGdldE9wY29kZUdyb3VwMihTSExMX09QQ09ERSwgZHN0KTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDI6IG9wYyA9IGdldE9wY29kZUdyb3VwMihT
SExMMl9PUENPREUsIGRzdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSA4OiBv
cGMgPSBnZXRPcGNvZGVHcm91cDIoU0hMTDhfT1BDT0RFLCBkc3QpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgMTY6IG9wYyA9IGdldE9wY29kZUdyb3VwMihTSExMMTZfT1BDT0RF
LCBkc3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6IEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBvbmVTaG9ydE9wKG9wYyk7
CisgICAgfQorCisgICAgdm9pZCBuZWcoUmVnaXN0ZXJJRCBkc3QsIFJlZ2lzdGVySUQgc3JjKQor
ICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXAxKE5FR19PUENPREUs
IGRzdCwgc3JjKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAgIHZvaWQg
c2hsbF9ycihSZWdpc3RlcklEIGRzdCwgUmVnaXN0ZXJJRCByU2hpZnQpCisgICAgeyAKKyAgICAg
ICAgLyogc3JjIDw8IHJTaGlmdCovCisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdy
b3VwMShTSExEX09QQ09ERSwgZHN0LCByU2hpZnQpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7
CisgICAgfQorCisgICAgdm9pZCBzaGxyX3JyKFJlZ2lzdGVySUQgZHN0LCBSZWdpc3RlcklEIHJT
aGlmdCkKKyAgICB7CisgICAgICAgIC8qIHNyYyA+PiByU2hpZnQqLworICAgICAgICBuZWcoclNo
aWZ0LCByU2hpZnQpOworICAgICAgICBzaGxsX3JyKGRzdCwgclNoaWZ0KTsKKyAgICB9CisKKyAg
ICB2b2lkIHNoYXJfcnIoUmVnaXN0ZXJJRCBkc3QsIFJlZ2lzdGVySUQgclNoaWZ0KQorICAgIHsK
KyAgICAgICAgLyogc3JjID4+PiByU2hpZnQqLworICAgICAgICBuZWcoclNoaWZ0LCByU2hpZnQp
OworICAgICAgICBzaGFfcnIoZHN0LCByU2hpZnQpOworICAgIH0KKworICAgIHZvaWQgc2hhX3Jy
KFJlZ2lzdGVySUQgZHN0LCBSZWdpc3RlcklEIHJTaGlmdCkKKyAgICB7CisgICAgICAgIC8qIHNy
YyA+Pj4gclNoaWZ0Ki8KKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXAxKFNI
QURfT1BDT0RFLCBkc3QsIHJTaGlmdCk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9
CisKKyAgICB2b2lkIHNobHJfaThyKGludCBpbW0sIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAg
ICAgICAgdWludDE2X3Qgb3BjOworICAgICAgICAKKyAgICAgICAgc3dpdGNoIChpbW0pIHsKKyAg
ICAgICAgY2FzZSAxOiBvcGMgPSBnZXRPcGNvZGVHcm91cDIoU0hMUl9PUENPREUsIGRzdCk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAyOiBvcGMgPSBnZXRPcGNvZGVHcm91cDIo
U0hMUjJfT1BDT0RFLCBkc3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgODog
b3BjID0gZ2V0T3Bjb2RlR3JvdXAyKFNITFI4X09QQ09ERSwgZHN0KTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIDE2OiBvcGMgPSBnZXRPcGNvZGVHcm91cDIoU0hMUjE2X09QQ09E
RSwgZHN0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OiBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgfQorCisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKworICAg
IH0KKworICAgIHZvaWQgaW11bGxfcnIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQor
ICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXAxKE1VTExfT1BDT0RF
LCBkc3QsIHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lk
IGRtdWxsX3JyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAg
IHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3VwMShETVVMTF9MX09QQ09ERSwgZHN0LCBzcmMp
OworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCBkbXVsc2xfcnIo
UmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qg
b3BjID0gZ2V0T3Bjb2RlR3JvdXAxKERNVUxTTF9PUENPREUsIGRzdCwgc3JjKTsKKyAgICAgICAg
b25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAgIHZvaWQgc3RzbWFjbChSZWdpc3RlcklEIHJl
ZykKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3VwMihTVFNNQUNM
X09QQ09ERSwgcmVnKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAgIHZv
aWQgc3RzbWFjaChSZWdpc3RlcklEIHJlZykKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9
IGdldE9wY29kZUdyb3VwMihTVFNNQUNIX09QQ09ERSwgcmVnKTsKKyAgICAgICAgb25lU2hvcnRP
cChvcGMpOworICAgIH0KKworICAgIC8vIENvbXBhcmlzb25zOgorCisgICAgdm9pZCBjbXBsX3Jy
KFJlZ2lzdGVySUQgbGVmdCwgUmVnaXN0ZXJJRCByaWdodCwgQ29uZGl0aW9uIGNvbmQpCisgICAg
eworICAgICAgICB1aW50MTZfdCBvcGM7CisgICAgICAgIAorICAgICAgICBzd2l0Y2ggKGNvbmQp
IHsKKyAgICAgICAgY2FzZSBORTogb3BjID0gZ2V0T3Bjb2RlR3JvdXAxKENNUEVRX09QQ09ERSwg
cmlnaHQsIGxlZnQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR1Q6IG9wYyA9
IGdldE9wY29kZUdyb3VwMShDTVBHVF9PUENPREUsIHJpZ2h0LCBsZWZ0KTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIEVROiBvcGMgPSBnZXRPcGNvZGVHcm91cDEoQ01QRVFfT1BD
T0RFLCByaWdodCwgbGVmdCk7CisgICAgICAgICAgICBicmVhazsgICAgICAgICAgCisgICAgICAg
IGNhc2UgR0U6IG9wYyA9IGdldE9wY29kZUdyb3VwMShDTVBHRV9PUENPREUsIHJpZ2h0LCBsZWZ0
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEhTOiBvcGMgPSBnZXRPcGNvZGVH
cm91cDEoQ01QSFNfT1BDT0RFLCByaWdodCwgbGVmdCk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBISTogb3BjID0gZ2V0T3Bjb2RlR3JvdXAxKENNUEhJX09QQ09ERSwgcmlnaHQs
IGxlZnQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTEk6IG9wYyA9IGdldE9w
Y29kZUdyb3VwMShDTVBISV9PUENPREUsIGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIExTOiBvcGMgPSBnZXRPcGNvZGVHcm91cDEoQ01QSFNfT1BDT0RFLCBs
ZWZ0LCByaWdodCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBMRTogb3BjID0g
Z2V0T3Bjb2RlR3JvdXAxKENNUEdFX09QQ09ERSwgbGVmdCwgcmlnaHQpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgTFQ6IG9wYyA9IGdldE9wY29kZUdyb3VwMShDTVBHVF9PUENP
REUsIGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OiBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorCisgICAgICAgIG9uZVNob3J0T3Aob3Bj
KTsKKyAgICB9CisKKyAgICB2b2lkIGNtcHBsKFJlZ2lzdGVySUQgcmVnKSAvLyBzaWduCisgICAg
eworICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDIoQ01QUExfT1BDT0RFLCBy
ZWcpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCBjbXBweihS
ZWdpc3RlcklEIHJlZykgLy8gdW5zaWduCisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBn
ZXRPcGNvZGVHcm91cDIoQ01QUFpfT1BDT0RFLCByZWcpOworICAgICAgICBvbmVTaG9ydE9wKG9w
Yyk7CisgICAgfQorCisgICAgdm9pZCBjbXBsX2lyKGludCBpbW0sIFJlZ2lzdGVySUQgZHN0LCBD
b25kaXRpb24gY29uZCkKKyAgICB7CisgICAgICAgIGlmICgoKGNvbmQgPT0gRVEpIHx8IChjb25k
ID09IE5FKSkgJiYgKGRzdCA9PSBTSDRSZWdpc3RlcnM6OnIwKSAmJiBpc0ltbWVkaWF0ZShpbW0p
KSB7CisgICAgICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDUoQ01QRVFJTU1f
T1BDT0RFLCBpbW0pOworICAgICAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAg
ICAgCisgICAgICAgICAgICBsb2FkQ29uc3RhbnQoaW1tLCBzY3IpOworICAgICAgICAgICAgY21w
bF9ycihzY3IsIGRzdCwgY29uZCk7CisKKyAgICAgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIGNtcGxfbXIoaW50IG9mZnNldCwgUmVnaXN0
ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGxlZnQsIENvbmRpdGlvbiBjb25kKQorICAgIHsKKyAgICAg
ICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKworICAgICAgICBpZiAoKG9mZnNl
dCA8IDApIHx8IChvZmZzZXQgPj0gNjQpKSB7CisgICAgICAgICAgICBsb2FkQ29uc3RhbnQob2Zm
c2V0LCBzY3IpOworICAgICAgICAgICAgYWRkbF9ycihiYXNlLCBzY3IpOworICAgICAgICAgICAg
bW92bF9tcihzY3IsIHNjcik7CisgICAgICAgIH0gZWxzZSBpZiAob2Zmc2V0KQorICAgICAgICAg
ICAgbW92bF9tcihvZmZzZXQgPj4gMiwgYmFzZSwgc2NyKTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgbW92bF9tcihiYXNlLCBzY3IpOworCisgICAgICAgIGNtcGxfcnIoc2NyLCBsZWZ0LCBj
b25kKTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICB9CisKKyAgICB2b2lkIGNt
cGxfcm0oUmVnaXN0ZXJJRCByaWdodCwgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBDb25k
aXRpb24gY29uZCkKKyAgICB7CisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNo
KCk7CisKKyAgICAgICAgaWYgKChvZmZzZXQgPCAwKSB8fCAob2Zmc2V0ID49IDY0KSkgeworICAg
ICAgICAgICAgbG9hZENvbnN0YW50KG9mZnNldCwgc2NyKTsKKyAgICAgICAgICAgIGFkZGxfcnIo
YmFzZSwgc2NyKTsKKyAgICAgICAgICAgIG1vdmxfbXIoc2NyLCBzY3IpOworICAgICAgICB9IGVs
c2UgaWYgKG9mZnNldCkKKyAgICAgICAgICAgIG1vdmxfbXIob2Zmc2V0ID4+IDIsIGJhc2UsIHNj
cik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1vdmxfbXIoYmFzZSwgc2NyKTsKKworICAg
ICAgICBjbXBsX3JyKHJpZ2h0LCBzY3IsIGNvbmQpOworICAgICAgICByZWxlYXNlU2NyYXRjaChz
Y3IpOworICAgIH0KKworICAgIHZvaWQgY21wbF9pbShpbnQgaW1tLCBpbnQgb2Zmc2V0LCBSZWdp
c3RlcklEIGJhc2UsIENvbmRpdGlvbiBjb25kKSAKKyAgICB7CisgICAgICAgIFJlZ2lzdGVySUQg
c2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIFJlZ2lzdGVySUQgc2NyMSA9IGNsYWltU2Ny
YXRjaCgpOworCisgICAgICAgIGlmICgob2Zmc2V0IDwgMCkgfHwgKG9mZnNldCA+PSA2NCkpIHsK
KyAgICAgICAgICAgIGxvYWRDb25zdGFudChvZmZzZXQsIHNjcik7CisgICAgICAgICAgICBhZGRs
X3JyKGJhc2UsIHNjcik7CisgICAgICAgICAgICBtb3ZsX21yKHNjciwgc2NyKTsKKyAgICAgICAg
fSBlbHNlIGlmIChvZmZzZXQpCisgICAgICAgICAgICBtb3ZsX21yKG9mZnNldCA+PiAyLCBiYXNl
LCBzY3IpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtb3ZsX21yKGJhc2UsIHNjcik7CisK
KyAgICAgICAgbG9hZENvbnN0YW50KGltbSwgc2NyMSk7CisgICAgICAgIGNtcGxfcnIoc2NyMSwg
c2NyLCBjb25kKTsKKworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IxKTsKKyAgICAgICAgcmVs
ZWFzZVNjcmF0Y2goc2NyKTsKKyAgICB9CisKKyAgICB2b2lkIHRlc3RsX3JyKFJlZ2lzdGVySUQg
c3JjLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9w
Y29kZUdyb3VwMShUU1RfT1BDT0RFLCBkc3QsIHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Aob3Bj
KTsKKyAgICB9CisKKyAgICB2b2lkIHRlc3RsX2k4cihpbnQgaW1tLCBSZWdpc3RlcklEIGRzdCkK
KyAgICB7CisgICAgICAgIEFTU0VSVCgoZHN0ID09IFNINFJlZ2lzdGVyczo6cjApICYmIChpbW0g
PD0gMjU1KSAmJiAoaW1tID49IDApKTsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2Rl
R3JvdXA1KFRTVElNTV9PUENPREUsIGltbSk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAg
ICB9CisKKyAgICB2b2lkIHRlc3RsX2kzMnIoaW50IGltbSwgUmVnaXN0ZXJJRCBkc3QpCisgICAg
eworICAgICAgICBpZiAoKGRzdCA9PSBTSDRSZWdpc3RlcnM6OnIwKSAmJiAoaW1tIDw9IDI1NSkg
JiYgKGltbSA+PSAwKSkgeworICAgICAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3Jv
dXA1KFRTVElNTV9PUENPREUsIGltbSk7CisgICAgICAgICAgICBvbmVTaG9ydE9wKG9wYyk7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRj
aCgpOworICAgICAgICAgICAgbG9hZENvbnN0YW50KGltbSwgc2NyKTsKKworICAgICAgICAgICAg
dGVzdGxfcnIoc2NyLCBkc3QpOworICAgICAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIHZvaWQgdGVzdGxfaTMybShpbnQgaW1tLCBpbnQgb2Zmc2V0
LCBSZWdpc3RlcklEIGJhc2UpCisgICAgeworICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWlt
U2NyYXRjaCgpOworICAgICAgICBSZWdpc3RlcklEIHNjcjEgPSBjbGFpbVNjcmF0Y2goKTsKKwor
ICAgICAgICBpZiAoKG9mZnNldCA8IDApIHx8IChvZmZzZXQgPj0gNjQpKSB7CisgICAgICAgICAg
ICBsb2FkQ29uc3RhbnQob2Zmc2V0LCBzY3IpOworICAgICAgICAgICAgYWRkbF9ycihiYXNlLCBz
Y3IpOworICAgICAgICAgICAgbW92bF9tcihzY3IsIHNjcik7CisgICAgICAgIH0gZWxzZSBpZiAo
b2Zmc2V0KQorICAgICAgICAgICAgbW92bF9tcihvZmZzZXQgPj4gMiwgYmFzZSwgc2NyKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgbW92bF9tcihiYXNlLCBzY3IpOworCisgICAgICAgIGlm
IChpc0ltbWVkaWF0ZShpbW0pKQorICAgICAgICAgICAgbW92X2ltbTgoaW1tLCBzY3IxKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgbG9hZENvbnN0YW50KGltbSwgc2NyMSk7CisKKyAgICAg
ICAgdGVzdGxfcnIoc2NyLCBzY3IxKTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAg
ICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyMSk7CisgICAgfQorCisgICAgdm9pZCB0ZXN0Yl9pOHIo
aW50IGltbSwgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICBSZWdpc3RlcklEIHNjciA9
IGNsYWltU2NyYXRjaCgpOworICAgICAgICBtb3ZfaW1tOChpbW0sIHNjcik7CisgICAgICAgIHRl
c3RsX3JyKHNjciwgZHN0KTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICB9CisK
KyAgICB2b2lkIG5vcCgpCisgICAgeworICAgICAgICBwcmludEluc3RyKE5PUF9PUENPREUsIG1f
YnVmZmVyLnVuY2hlY2tlZFNpemUoKSk7CisgICAgICAgIG1fYnVmZmVyLnB1dFNob3J0VW5jaGVj
a2VkKE5PUF9PUENPREUpOworICAgIH0KKworICAgIHZvaWQgc2V0dCgpCisgICAgeworICAgICAg
ICBvbmVTaG9ydE9wKFNFVFRfT1BDT0RFKTsKKyAgICB9CisKKyAgICB2b2lkIGNscnQoKQorICAg
IHsKKyAgICAgICAgcHJpbnRJbnN0cihOT1BfT1BDT0RFLCBtX2J1ZmZlci51bmNoZWNrZWRTaXpl
KCkpOworICAgICAgICBvbmVTaG9ydE9wKENMUlRfT1BDT0RFKTsKKyAgICB9CisKKyAgICB2b2lk
IGJrcHQoKQorICAgIHsKKyAgICAgICAgbV9idWZmZXIucHV0U2hvcnRVbmNoZWNrZWQoQlJLX09Q
Q09ERSk7CisgICAgfQorCisgICAgdm9pZCBicmFuY2godWludDE2X3Qgb3BjLCBpbnQgbGFiZWwp
CisgICAgeworICAgICAgICBzd2l0Y2ggKG9wYykgeworICAgICAgICBjYXNlIEJUX09QQ09ERToK
KyAgICAgICAgICAgIEFTU0VSVCgobGFiZWwgPD0gMTI3KSAmJiAobGFiZWwgPj0gLTEyOCkpOwor
ICAgICAgICAgICAgb3BjID0gZ2V0T3Bjb2RlR3JvdXA1KEJUX09QQ09ERSwgbGFiZWwpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQlJBX09QQ09ERToKKyAgICAgICAgICAgIEFT
U0VSVCgobGFiZWwgPD0gMjA0NykgJiYgKGxhYmVsID49IC0yMDQ4KSk7CisgICAgICAgICAgICBv
cGMgPSBnZXRPcGNvZGVHcm91cDYoQlJBX09QQ09ERSwgbGFiZWwpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgQkZfT1BDT0RFOgorICAgICAgICAgICAgQVNTRVJUKChsYWJlbCA8
PSAxMjcpICYmIChsYWJlbCA+PSAtMTI4KSk7CisgICAgICAgICAgICBvcGMgPSBnZXRPcGNvZGVH
cm91cDUoQkZfT1BDT0RFLCBsYWJlbCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVm
YXVsdDogQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKworICAgICAgICBvbmVTaG9y
dE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCBicmFuY2godWludDE2X3Qgb3BjLCBSZWdpc3Rl
cklEIHJlZykKKyAgICB7CisgICAgICAgIHN3aXRjaCAob3BjKSB7ICAgICAgICAgICAgCisgICAg
ICAgIGNhc2UgQlJBRl9PUENPREU6CisgICAgICAgICAgICBvcGMgPSBnZXRPcGNvZGVHcm91cDIo
QlJBRl9PUENPREUsIHJlZyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBKTVBf
T1BDT0RFIDoKKyAgICAgICAgICAgIG9wYyA9IGdldE9wY29kZUdyb3VwMihKTVBfT1BDT0RFLCBy
ZWcpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSlNSX09QQ09ERSA6CisgICAg
ICAgICAgICBvcGMgPSBnZXRPcGNvZGVHcm91cDIoSlNSX09QQ09ERSwgcmVnKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIEJTUkZfT1BDT0RFIDoKKyAgICAgICAgICAgIG9wYyA9
IGdldE9wY29kZUdyb3VwMihCU1JGX09QQ09ERSwgcmVnKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBkZWZhdWx0OiBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorCisgICAg
ICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lkIGxkc3ByKFJlZ2lzdGVySUQg
cmVnKQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXAyKExEU1BS
X09QQ09ERSwgcmVnKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAgIHZv
aWQgc3RzcHIoUmVnaXN0ZXJJRCByZWcpCisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBn
ZXRPcGNvZGVHcm91cDIoU1RTUFJfT1BDT0RFLCByZWcpOworICAgICAgICBvbmVTaG9ydE9wKG9w
Yyk7CisgICAgfQorCisgICAgdm9pZCBleHR1dyhSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBk
c3QpCisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDEoRVhUVVdf
T1BDT0RFLCBkc3QsIHNyYyk7CisKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKwor
ICAgIC8qIGZsb2F0IG9wZXJhdGlvbnMqLworCisgICAgdm9pZCBsZHNybV9mcHVsKFJlZ2lzdGVy
SUQgc3JjKQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXAyKExE
U19STV9GUFVMX09QQ09ERSwgc3JjKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0K
KworICAgIHZvaWQgZm5lZyhGUFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgdWludDE2
X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXAyKEZORUdfT1BDT0RFLCBkc3QpOworICAgICAgICBvbmVT
aG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCBmc3FydChGUFJlZ2lzdGVySUQgZHN0KQor
ICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXAyKEZTUVJUX09QQ09E
RSwgZHN0KTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAgIHZvaWQgc3Rz
X2ZwdWxfcm4oUmVnaXN0ZXJJRCBzcmMpCisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBn
ZXRPcGNvZGVHcm91cDIoU1RTX0ZQVUxfUk5fT1BDT0RFLCBzcmMpOworICAgICAgICBvbmVTaG9y
dE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCBmbG9hdF9mcHVsX2ZybihSZWdpc3RlcklEIHNy
YykKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3VwMihGTE9BVF9P
UENPREUsIHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lk
IGZtdWxsKEZQUmVnaXN0ZXJJRCBzcmMsIEZQUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAg
ICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDEoRk1VTF9PUENPREUsIGRzdCwgc3JjKTsK
KyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAgIHZvaWQgZm1vdnNfcmVhZF9y
bShSZWdpc3RlcklEIHNyYywgRlBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIC8qRk1P
Vi5TIEBSJWQsIEZSJWRcbiovCisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3Vw
MShGTU9WU19SRUFEX1JNX09QQ09ERSwgZHN0LCBzcmMpOworICAgICAgICBvbmVTaG9ydE9wKG9w
Yyk7CisgICAgfQorCisgICAgdm9pZCBmbW92c193cml0ZV9ybShGUFJlZ2lzdGVySUQgc3JjLCBS
ZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIC8qIEZNT1YuUyBGUiVkLCBAUiVkXG4gKi8K
KyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXAxKEZNT1ZTX1dSSVRFX1JOX09Q
Q09ERSwgZHN0LCBzcmMpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAg
dm9pZCBmbW92c193cml0ZV9yMHIoRlBSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpCisg
ICAgeworICAgICAgICAvKkZNT1YuUyBGUiVkLCBAKHIwLCBSJWQpICovCisgICAgICAgIHVpbnQx
Nl90IG9wYyA9IGdldE9wY29kZUdyb3VwMShGTU9WU19XUklURV9SMFJOX09QQ09ERSwgZHN0LCBz
cmMpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCBmbW92c19y
ZWFkX3IwcihSZWdpc3RlcklEIHNyYywgRlBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAg
IC8qRk1PVi5TIEAocjAsIFIlZCksIEZSJWQqLworICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRP
cGNvZGVHcm91cDEoRk1PVlNfUkVBRF9SMFJNX09QQ09ERSwgZHN0LCBzcmMpOworICAgICAgICBv
bmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCBmbW92c19yZWFkX3JtX2luYyhSZWdp
c3RlcklEIGRzdCwgRlBSZWdpc3RlcklEIHNyYykKKyAgICB7CisgICAgICAgIC8qIEZNT1YuUyBA
UiVkKywgRlIlZCAqLworICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDEoRk1P
VlNfUkVBRF9STV9JTkNfT1BDT0RFLCBkc3QsIHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Aob3Bj
KTsKKyAgICB9CisKKyAgICB2b2lkIGZtb3ZzX3dyaXRlX3JuX2RlYyhGUFJlZ2lzdGVySUQgc3Jj
LCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIC8qIEZNT1YuUyBGUiVkLCBALVIlZCAq
LworICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDEoRk1PVlNfV1JJVEVfUk5f
REVDX09QQ09ERSwgZHN0LCBzcmMpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQor
CisgICAgdm9pZCBmdHJjX3JtX2ZwdWwoRlBSZWdpc3RlcklEIHNyYykKKyAgICB7CisgICAgICAg
IHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3VwMihGVFJDX09QQ09ERSwgc3JjKTsKKyAgICAg
ICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAgIHZvaWQgZmxkc19mcHVsKFJlZ2lzdGVy
SUQgc3JjKQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXAyKEZM
RFNfRlJNX0ZQVUxfT1BDT0RFLCBzcmMpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAg
fQorCisgICAgdm9pZCBmc3RzX2ZwdWwoUmVnaXN0ZXJJRCBzcmMpCisgICAgeworICAgICAgICB1
aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDIoRlNUU19GUFVMX0ZSTl9PUENPREUsIHNyYyk7
CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lkIGxkc2Zwc2NyKFJl
Z2lzdGVySUQgcmVnKQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3Jv
dXAyKExEU0ZQU0NSX09QQ09ERSwgcmVnKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAg
IH0KKworICAgIHZvaWQgc3RzZnBzY3IoUmVnaXN0ZXJJRCByZWcpCisgICAgeworICAgICAgICB1
aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDIoU1RTRlBTQ1JfT1BDT0RFLCByZWcpOworICAg
ICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgLyogZG91YmxlIG9wZXJhdGlvbnMq
LworICAgIHZvaWQgZGNtcHBlcShGUFJlZ2lzdGVySUQgc3JjLCBGUFJlZ2lzdGVySUQgZHN0KQor
ICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXA4KEZDTVBFUV9PUENP
REUsIGRzdCA+PiAxLCBzcmMgPj4xKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0K
KworICAgIHZvaWQgZGNtcHBndChGUFJlZ2lzdGVySUQgc3JjLCBGUFJlZ2lzdGVySUQgZHN0KQor
ICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXA4KEZDTVBHVF9PUENP
REUsIGRzdCA+PiAxLCBzcmMgPj4xKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0K
KworICAgIHZvaWQgZG11bF9ycihGUFJlZ2lzdGVySUQgc3JjLCBGUFJlZ2lzdGVySUQgZHN0KQor
ICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXA4KEZNVUxfT1BDT0RF
LCBkc3QgPj4gMSwgc3JjID4+MSk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisK
KyAgICB2b2lkIGRzdWJfcnIoRlBSZWdpc3RlcklEIHNyYywgRlBSZWdpc3RlcklEIGRzdCkKKyAg
ICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3VwOChGU1VCX09QQ09ERSwg
ZHN0ID4+IDEsIHNyYyA+PjEpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisg
ICAgdm9pZCBkYWRkX3JyKEZQUmVnaXN0ZXJJRCBzcmMsIEZQUmVnaXN0ZXJJRCBkc3QpCisgICAg
eworICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDgoRkFERF9PUENPREUsIGRz
dCA+PiAxLCBzcmMgPj4xKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAg
IHZvaWQgZG1vdl9ycihGUFJlZ2lzdGVySUQgc3JjLCBGUFJlZ2lzdGVySUQgZHN0KQorICAgIHsK
KyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXA4KEZNT1ZfT1BDT0RFLCBkc3Qg
Pj4gMSwgc3JjID4+MSk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICB2
b2lkIGRkaXZfcnIoRlBSZWdpc3RlcklEIHNyYywgRlBSZWdpc3RlcklEIGRzdCkKKyAgICB7Cisg
ICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3VwOChGRElWX09QQ09ERSwgZHN0ID4+
IDEsIHNyYyA+PjEpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgdm9p
ZCBkc3FydChGUFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0g
Z2V0T3Bjb2RlR3JvdXA3KEZTUVJUX09QQ09ERSwgZHN0ID4+IDEpOworICAgICAgICBvbmVTaG9y
dE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCBkb3VibGVsb2FkKFJlZ2lzdGVySUQgYmFzZSwg
aW50IG9mZnNldCwgRlBSZWdpc3RlcklEIGRlc3QsIFJlZ2lzdGVySUQgc2NyKQorICAgIHsKKyAg
ICAgICAgIGxvYWRDb25zdGFudChvZmZzZXQsIHNjcik7CisgICAgICAgICBpZiAoc2NyID09IFNI
NFJlZ2lzdGVyczo6cjApCisgICAgICAgICAgICAgZm1vdl9yZWFkX3IwcihiYXNlLCBkZXN0KTsK
KyAgICAgICAgIGVsc2UgaWYgKGJhc2UgPT0gU0g0UmVnaXN0ZXJzOjpyMCkKKyAgICAgICAgICAg
ICBmbW92X3JlYWRfcjByKHNjciwgZGVzdCk7CisgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
ICBhZGRsX3JyKGJhc2UsIHNjcik7CisgICAgICAgICAgICAgZm1vdl9yZWFkX3JtKHNjciwgZGVz
dCk7CisgICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBkbmVnKEZQUmVnaXN0ZXJJRCBkc3Qp
CisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDcoRk5FR19PUENP
REUsIGRzdCA+PiAxKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAgIHZv
aWQgZG91Ymxlc3RvcmUoRlBSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBiYXNlLCBpbnQgb2Zm
c2V0LCBSZWdpc3RlcklEIHNjcikKKyAgICB7CisgICAgICAgICBsb2FkQ29uc3RhbnQob2Zmc2V0
LCBzY3IpOworICAgICAgICAgaWYgKHNjciA9PSBTSDRSZWdpc3RlcnM6OnIwKQorICAgICAgICAg
ICAgIGZtb3Zfd3JpdGVfcjByKHNyYywgYmFzZSk7CisgICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgICBhZGRsX3JyKGJhc2UsIHNjcik7CisgICAgICAgICAgICAgZm1vdl93cml0ZV9ybShzcmMs
IHNjcik7CisgICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBmbW92X3JlYWRfcm0oUmVnaXN0
ZXJJRCBzcmMsIEZQUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICAvKkZNT1YgQFIlZCwg
ZHIlZFxuKi8KKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXAxMChGTU9WU19S
RUFEX1JNX09QQ09ERSwgZHN0ID4+IDEsIHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsK
KyAgICB9CisKKyAgICB2b2lkIGZtb3Zfd3JpdGVfcm0oRlBSZWdpc3RlcklEIHNyYywgUmVnaXN0
ZXJJRCBkc3QpCisgICAgeworICAgICAgICAvKiBGTU9WIGRyJWQsIEBSJWRcbiAqLworICAgICAg
ICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDkoRk1PVlNfV1JJVEVfUk5fT1BDT0RFLCBk
c3QsIHNyYyA+PiAxKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAgIHZv
aWQgZm1vdl93cml0ZV9yMHIoRlBSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpCisgICAg
eworICAgICAgICAvKkZNT1YgZHIlZCwgQChyMCwgUiVkKSAqLworICAgICAgICB1aW50MTZfdCBv
cGMgPSBnZXRPcGNvZGVHcm91cDkoRk1PVlNfV1JJVEVfUjBSTl9PUENPREUsIGRzdCwgc3JjID4+
IDEpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCBmbW92X3Jl
YWRfcjByKFJlZ2lzdGVySUQgc3JjLCBGUFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAg
LypGTU9WIEAocjAsIFIlZCksIGRyJWQqLworICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNv
ZGVHcm91cDEwKEZNT1ZTX1JFQURfUjBSTV9PUENPREUsIGRzdCA+PiAxLCBzcmMpOworICAgICAg
ICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCBmbW92X3JlYWRfcm1faW5jKFJl
Z2lzdGVySUQgZHN0LCBGUFJlZ2lzdGVySUQgc3JjKQorICAgIHsKKyAgICAgICAgLyogRk1PViBA
UiVkKywgZHIlZCAqLworICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDEwKEZN
T1ZTX1JFQURfUk1fSU5DX09QQ09ERSwgZHN0ID4+IDEgLCBzcmMpOworICAgICAgICBvbmVTaG9y
dE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCBmbW92X3dyaXRlX3JuX2RlYyhGUFJlZ2lzdGVy
SUQgc3JjLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIC8qIEZNT1YgZHIlZCwgQC1S
JWQgKi8KKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXA5KEZNT1ZTX1dSSVRF
X1JOX0RFQ19PUENPREUsIGRzdCwgc3JjID4+IDEpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7
CisgICAgfQorCisgICAgdm9pZCBmbG9hdF9mcHVsX2RybihGUFJlZ2lzdGVySUQgc3JjKQorICAg
IHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXA3KEZMT0FUX09QQ09ERSwg
c3JjID4+IDEpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCBm
dHJjX2RybV9mcHVsKEZQUmVnaXN0ZXJJRCBzcmMpCisgICAgeworICAgICAgICB1aW50MTZfdCBv
cGMgPSBnZXRPcGNvZGVHcm91cDcoRlRSQ19PUENPREUsIHNyYyA+PiAxKTsKKyAgICAgICAgb25l
U2hvcnRPcChvcGMpOworICAgIH0KKworICAgIC8vIFZhcmlvdXMgbW92ZSBvcHM6CisgICAgCisg
ICAgdm9pZCBtb3ZfaW1tOChpbnQgaW1tOCwgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAg
ICBBU1NFUlQoKGltbTggPD0gMTI3KSAmJiAoaW1tOCA+PSAtMTI4KSk7CisgICAgICAgIHVpbnQx
Nl90IG9wYyA9IGdldE9wY29kZUdyb3VwMyhNT1ZJTU1fT1BDT0RFLCBkc3QsIGltbTgpOworICAg
ICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCBtb3ZsX3JyKFJlZ2lzdGVy
SUQgc3JjLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIC8qIG1vdiBzcmMsIGRzdCAq
LworICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDEoTU9WX09QQ09ERSwgZHN0
LCBzcmMpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisKKyAgICB9CisKKyAgICB2b2lkIG1v
dndfcm0oUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgLyog
bW92Lncgc3JjLCBAZHN0ICovCisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3Vw
MShNT1ZXX1dSSVRFX1JOX09QQ09ERSwgZHN0LCBzcmMpOworICAgICAgICBvbmVTaG9ydE9wKG9w
Yyk7CisKKyAgICB9CisKKyAgICB2b2lkIG1vdndfbXIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVy
SUQgZHN0KQorICAgIHsKKyAgICAgICAgLyogbW92LncgQCBzcmMsIGRzdCAqLworICAgICAgICB1
aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDEoTU9WV19SRUFEX1JNX09QQ09ERSwgZHN0LCBz
cmMpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisKKyAgICB9CisKKyAgICB2b2lkIG1vdndf
bXIoaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7Cisg
ICAgICAgIHVpbnQxNl90IG9wYzsKKworICAgICAgICBBU1NFUlQoYmFzZSA9PSBTSDRSZWdpc3Rl
cnM6OnBjKTsKKyAgICAgICAgQVNTRVJUKChvZmZzZXQgPD0gMjU1KSAmJiAob2Zmc2V0ID49IDAp
KTsKKyAgICAgICAgb3BjID0gZ2V0T3Bjb2RlR3JvdXAzKE1PVldfUkVBRF9PRkZQQ19PUENPREUs
IGRzdCwgb2Zmc2V0KTsKKworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisKKyAgICB9CisKKyAg
ICB2b2lkIG1vdndfcjBtcihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpCisgICAgewor
ICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDEoTU9WV19SRUFEX1IwUk1fT1BD
T0RFLCBkc3QsIHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKworICAgIH0KKworICAg
IHZvaWQgbW92bF9ybShSZWdpc3RlcklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNl
KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjOworCisgICAgICAgIEFTU0VSVCgob2Zmc2V0
IDw9IDE1KSAmJiAob2Zmc2V0ID49IDApKTsKKworICAgICAgICBpZiAoIW9mZnNldCkKKyAgICAg
ICAgICAgIG9wYyA9IGdldE9wY29kZUdyb3VwMShNT1ZMX1dSSVRFX1JOX09QQ09ERSwgYmFzZSwg
c3JjKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgb3BjID0gZ2V0T3Bjb2RlR3JvdXA0KE1P
VkxfV1JJVEVfT0ZGUk5fT1BDT0RFLCBiYXNlLCBzcmMsIG9mZnNldCk7CisKKyAgICAgICAgb25l
U2hvcnRPcChvcGMpOworCisgICAgfQorCisgICAgdm9pZCBtb3ZsX3JtKFJlZ2lzdGVySUQgc3Jj
LCBSZWdpc3RlcklEIGJhc2UpCisgICAgeworICAgICAgICB1aW50MTZfdCBvcGM7CisKKyAgICAg
ICAgb3BjID0gZ2V0T3Bjb2RlR3JvdXAxKE1PVkxfV1JJVEVfUk5fT1BDT0RFLCBiYXNlLCBzcmMp
OworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisKKyAgICB9CisKKyAgICB2b2lkIG1vdmxfaTMy
bShpbnQgaW1tLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UpCisgICAgeworICAgICAgICB1
aW50MTZfdCBvcGM7CisKKyAgICAgICAgQVNTRVJUKChvZmZzZXQgPD0gMTUpICYmIChvZmZzZXQg
Pj0gMCkpOworCisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAg
ICAgIGxvYWRDb25zdGFudChpbW0sIHNjcik7CisKKyAgICAgICAgaWYgKCFvZmZzZXQpCisgICAg
ICAgICAgICBvcGMgPSBnZXRPcGNvZGVHcm91cDEoTU9WTF9XUklURV9STl9PUENPREUsIGJhc2Us
IHNjcik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG9wYyA9IGdldE9wY29kZUdyb3VwNChN
T1ZMX1dSSVRFX09GRlJOX09QQ09ERSwgYmFzZSwgc2NyLCBvZmZzZXQpOworCisgICAgICAgIG9u
ZVNob3J0T3Aob3BjKTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICB9CisKKyAg
ICB2b2lkIG1vdmxfbXIoaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGRz
dCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYzsKKworICAgICAgICBpZiAoYmFzZSA9PSBT
SDRSZWdpc3RlcnM6OnBjKSB7CisgICAgICAgICAgICBBU1NFUlQoKG9mZnNldCA8PSAyNTUpICYm
IChvZmZzZXQgPj0gMCkpOworICAgICAgICAgICAgb3BjID0gZ2V0T3Bjb2RlR3JvdXAzKE1PVkxf
UkVBRF9PRkZQQ19PUENPREUsIGRzdCwgb2Zmc2V0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIEFTU0VSVCgob2Zmc2V0IDw9IDE1KSAmJiAob2Zmc2V0ID49IDApKTsKKyAgICAgICAg
ICAgIGlmICghb2Zmc2V0KQorICAgICAgICAgICAgICAgIG9wYyA9IGdldE9wY29kZUdyb3VwMShN
T1ZMX1JFQURfUk1fT1BDT0RFLCBkc3QsIGJhc2UpOworICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgIG9wYyA9IGdldE9wY29kZUdyb3VwNChNT1ZMX1JFQURfT0ZGUk1fT1BDT0RFLCBk
c3QsIGJhc2UsIG9mZnNldCk7CisgICAgICAgIH0KKyAgICAgICAgb25lU2hvcnRPcChvcGMpOwor
ICAgIH0KKworICAgIHZvaWQgbW92Yl9tcihpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJl
Z2lzdGVySUQgZHN0KSAvLyBNT1YuQiBAKGRpc3AsIFJtKSwgcjAKKyAgICB7CisgICAgICAgIEFT
U0VSVChkc3QgPT0gU0g0UmVnaXN0ZXJzOjpyMCk7CisKKyAgICAgICAgdWludDE2X3Qgb3BjID0g
Z2V0T3Bjb2RlR3JvdXAxMShNT1ZCX1JFQURfT0ZGUk1fT1BDT0RFLCBiYXNlLCBvZmZzZXQpOwor
CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lkIG1vdmJfcjBtcihS
ZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICB1aW50MTZfdCBv
cGMgPSBnZXRPcGNvZGVHcm91cDEoTU9WQl9SRUFEX1IwUk1fT1BDT0RFLCBkc3QsIHNyYyk7Cisg
ICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lkIG1vdmJfbXIoUmVnaXN0
ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KSAvLyBNT1YuQiBAUm0sIFJuCisgICAgeworICAgICAg
ICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDEoTU9WQl9SRUFEX1JNX09QQ09ERSwgZHN0
LCBzcmMpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCBtb3Zs
X21yKFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICB1aW50
MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDEoTU9WTF9SRUFEX1JNX09QQ09ERSwgZHN0LCBiYXNl
KTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAgIHZvaWQgbW92bF9yMG1y
KFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90
IG9wYyA9IGdldE9wY29kZUdyb3VwMShNT1ZMX1JFQURfUjBSTV9PUENPREUsIGRzdCwgc3JjKTsK
KyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAgIHZvaWQgbW92bF9ybXIwKFJl
Z2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIC8qbW92Lmwgc3Jj
LCBAKHIwLCBkc3QpKi8KKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXAxKE1P
VkxfV1JJVEVfUjBSTl9PUENPREUsIGRzdCwgc3JjKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMp
OworICAgIH0KKworICAgIHZvaWQgbW92bF9pOHIoaW50IGltbTgsIFJlZ2lzdGVySUQgZHN0KQor
ICAgIHsKKyAgICAgICAgQVNTRVJUKChpbW04IDw9IDEyNykgJiYgKGltbTggPj0gLTEyOCkpOwor
ICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDMoTU9WSU1NX09QQ09ERSwgZHN0
LCBpbW04KTsKKworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCBv
cmxfaXIoaW50IGltbSwgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICBpZiAoKGltbSA8
PSAyNTUpICYmIChpbW0gPj0gMCkgJiYgKGRzdCA9PSBTSDRSZWdpc3RlcnM6OnIwKSkKKyAgICAg
ICAgICAgIG9ybF9pOHIoaW1tLCBkc3QpOworICAgICAgICBlbHNlICB7CisgICAgICAgICAgICBS
ZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICAgICAgbG9hZENvbnN0YW50
KGltbSwgc2NyKTsKKyAgICAgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3VwMShP
Ul9PUENPREUsIGRzdCwgc2NyKTsKKyAgICAgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICAg
ICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lk
IGxvYWRDb25zdGFudCh1aW50MzJfdCBjb25zdGFudCwgUmVnaXN0ZXJJRCBkc3QsIGJvb2wgd2l0
aHBhdGNoID0gZmFsc2UpCisgICAgeworICAgICAgICBpZiAoKChpbnQpY29uc3RhbnQgPD0weDdm
KSAmJiAoKGludCljb25zdGFudCA+PSAtMHg4MCkgJiYgKCF3aXRocGF0Y2gpKQorICAgICAgICAg
ICAgbW92X2ltbTgoY29uc3RhbnQsIGRzdCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAg
bV9idWZmZXIuZW5zdXJlU3BhY2UobWF4SW5zdHJ1Y3Rpb25TaXplLCBzaXplb2YodWludDMyX3Qp
KTsKKyAgICAgICAgICAgIGxvYWRDb25zdGFudFVuY2hlY2tlZFNpemUoY29uc3RhbnQsIGRzdCk7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIGxvYWRDb25zdGFudFVuY2hlY2tlZFNpemUo
dWludDMyX3QgY29uc3RhbnQsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgdWludDE2
X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXAzKE1PVklNTV9PUENPREUsIGRzdCwgMCk7IC8vIHdpbGwg
YmUgcGF0Y2hlZCBsYXRlciB0byBtb3YubAorICAgICAgICBwcmludEluc3RyKGdldE9wY29kZUdy
b3VwMyhNT1ZJTU1fT1BDT0RFLCBkc3QsIGNvbnN0YW50KSwgbV9idWZmZXIudW5jaGVja2VkU2l6
ZSgpKTsKKyAgICAgICAgbV9idWZmZXIucHV0U2hvcnRXaXRoQ29uc3RhbnRJbnQob3BjLCBjb25z
dGFudCk7CisgICAgfQorCisgICAgLy8gRmxvdyBjb250cm9sOgorCisgICAgSm1wU3JjIGNhbGwo
KQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAg
ICAgbV9idWZmZXIuZW5zdXJlU3BhY2UobWF4SW5zdHJ1Y3Rpb25TaXplICsgNCwgc2l6ZW9mKHVp
bnQzMl90KSk7CisgICAgICAgIGxvYWRDb25zdGFudFVuY2hlY2tlZFNpemUoMHgwLCBzY3IpOwor
ICAgICAgICBicmFuY2goSlNSX09QQ09ERSwgc2NyKTsKKyAgICAgICAgbm9wKCk7CisgICAgICAg
IHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgICAgIHJldHVybiBKbXBTcmMobV9idWZmZXIudW5j
aGVja2VkU2l6ZSgpKTsKKyAgICB9CisKKyAgICBKbXBTcmMgY2FsbChSZWdpc3RlcklEIGRzdCkK
KyAgICB7CisgICAgICAgIG1fYnVmZmVyLmVuc3VyZVNwYWNlKG1heEluc3RydWN0aW9uU2l6ZSAr
IDIpOworICAgICAgICBicmFuY2goSlNSX09QQ09ERSwgZHN0KTsKKyAgICAgICAgbm9wKCk7Cisg
ICAgICAgIHJldHVybiBKbXBTcmMobV9idWZmZXIudW5jaGVja2VkU2l6ZSgpKTsKKyAgICB9CisK
KyAgICBKbXBTcmMgam1wKCkKKyAgICB7CisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1T
Y3JhdGNoKCk7CisgICAgICAgIG1fYnVmZmVyLmVuc3VyZVNwYWNlKG1heEluc3RydWN0aW9uU2l6
ZSArIDQsIHNpemVvZih1aW50MzJfdCkpOworICAgICAgICBpbnQgbV9zaXplID0gbV9idWZmZXIu
dW5jaGVja2VkU2l6ZSgpOworICAgICAgICBsb2FkQ29uc3RhbnRVbmNoZWNrZWRTaXplKDB4MCwg
c2NyKTsKKyAgICAgICAgYnJhbmNoKEJSQUZfT1BDT0RFLCBzY3IpOworICAgICAgICBub3AoKTsK
KyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKworICAgICAgICByZXR1cm4gSm1wU3JjKG1f
c2l6ZSk7CisgICAgfQorCisgICAgSm1wU3JjIGptcChSZWdpc3RlcklEIGRzdCkKKyAgICB7Cisg
ICAgICAgIGptcF9yKGRzdCk7CisgICAgICAgIHJldHVybiBKbXBTcmMobV9idWZmZXIudW5jaGVj
a2VkU2l6ZSgpKTsKKyAgICB9CisKKyAgICB2b2lkIGptcF9yKFJlZ2lzdGVySUQgZHN0KQorICAg
IHsKKyAgICAgICAgbV9idWZmZXIuZW5zdXJlU3BhY2UobWF4SW5zdHJ1Y3Rpb25TaXplICsgMik7
CisgICAgICAgIGJyYW5jaChKTVBfT1BDT0RFLCBkc3QpOworICAgICAgICBub3AoKTsKKyAgICB9
CisKKyAgICB2b2lkIGptcF9tKGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkKKyAgICB7Cisg
ICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisKKyAgICAgICAgaWYgKChv
ZmZzZXQgPCAwKSB8fCAob2Zmc2V0ID49IDY0KSkgeworICAgICAgICAgICAgbG9hZENvbnN0YW50
KG9mZnNldCwgc2NyKTsKKyAgICAgICAgICAgIGFkZGxfcnIoYmFzZSwgc2NyKTsKKyAgICAgICAg
ICAgIG1vdmxfbXIoc2NyLCBzY3IpOworICAgICAgICB9IGVsc2UgaWYgKG9mZnNldCkgeworICAg
ICAgICAgICAgbW92bF9tcihvZmZzZXQgPj4gMiwgYmFzZSwgc2NyKTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIG1vdmxfbXIoYmFzZSwgc2NyKTsKKyAgICAgICAgfQorCisgICAgICAg
IG1fYnVmZmVyLmVuc3VyZVNwYWNlKG1heEluc3RydWN0aW9uU2l6ZSArIDIpOworICAgICAgICBi
cmFuY2goSk1QX09QQ09ERSwgc2NyKTsKKyAgICAgICAgbm9wKCk7CisgICAgICAgIHJlbGVhc2VT
Y3JhdGNoKHNjcik7CisKKyAgICB9CisKKyAgICBKbXBTcmMgam5lKCkKKyAgICB7CisgICAgICAg
IGludCBtX3NpemUgPSBtX2J1ZmZlci51bmNoZWNrZWRTaXplKCk7CisgICAgICAgIGJyYW5jaChC
Rl9PUENPREUsIDApOworICAgICAgICByZXR1cm4gSm1wU3JjKG1fc2l6ZSk7CisgICAgfQorCisg
ICAgSm1wU3JjIGplKCkKKyAgICB7CisgICAgICAgIGludCBtX3NpemUgPSBtX2J1ZmZlci51bmNo
ZWNrZWRTaXplKCk7CisgICAgICAgIGJyYW5jaChCVF9PUENPREUsIDApOworICAgICAgICByZXR1
cm4gSm1wU3JjKG1fc2l6ZSk7CisgICAgfQorCisgICAgdm9pZCByZXQoKQorICAgIHsKKyAgICAg
ICAgbV9idWZmZXIuZW5zdXJlU3BhY2UobWF4SW5zdHJ1Y3Rpb25TaXplICsgMik7CisgICAgICAg
IG9uZVNob3J0T3AoUlRTX09QQ09ERSwgZmFsc2UpOworICAgIH0KKworICAgIC8vIEFzc2VtYmxl
ciBhZG1pbiBtZXRob2RzOgorCisgICAgSm1wRHN0IGxhYmVsKCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBKbXBEc3QobV9idWZmZXIuc2l6ZSgpKTsKKyAgICB9CisKKyAgICBpbnQgc2l6ZU9mQ29u
c3RhbnRQb29sKCkKKyAgICB7CisgICAgICAgICByZXR1cm4gbV9idWZmZXIuc2l6ZU9mQ29uc3Rh
bnRQb29sKCk7CisgICAgfQorCisgICAgSm1wRHN0IGFsaWduKGludCBhbGlnbm1lbnQpCisgICAg
eworICAgICAgICBtX2J1ZmZlci5lbnN1cmVTcGFjZShtYXhJbnN0cnVjdGlvblNpemUgKyAyKTsK
KyAgICAgICAgd2hpbGUgKCFtX2J1ZmZlci5pc0FsaWduZWQoYWxpZ25tZW50KSkgeworICAgICAg
ICAgICAgbm9wKCk7CisgICAgICAgICAgICBtX2J1ZmZlci5lbnN1cmVTcGFjZShtYXhJbnN0cnVj
dGlvblNpemUgKyAyKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbGFiZWwoKTsKKyAgICB9
CisKKyAgICBzdGF0aWMgdm9pZCBjaGFuZ2VQQ3JlbGF0aXZlQWRkcmVzcyhpbnQgb2Zmc2V0LCB1
aW50MTZfdCogaW5zdHJ1Y3Rpb25QdHIsIHVpbnQzMl90IG5ld0FkZHJlc3MpCisgICAgeworICAg
ICAgICB1aW50MzJfdCBhZGRyZXNzICA9IChvZmZzZXQgPDwgMikgKyAoKHJlaW50ZXJwcmV0X2Nh
c3Q8dWludDMyX3Q+KGluc3RydWN0aW9uUHRyKSArIDQpICYofjB4MykpOworICAgICAgICAqcmVp
bnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KGFkZHJlc3MpID0gbmV3QWRkcmVzczsKKyAgICB9CisK
KyAgICBzdGF0aWMgdWludDE2X3QqIGdldEluc3RydWN0aW9uUHRyKHZvaWQqIGNvZGUsIGludCBv
ZmZzZXQpCisgICAgeworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx1aW50MTZfdCo+
IChyZWludGVycHJldF9jYXN0PHVpbnQzMl90Pihjb2RlKSArIG9mZnNldCk7CisgICAgfQorCisg
ICAgc3RhdGljIHZvaWQgbGlua0p1bXAodm9pZCogY29kZSwgSm1wU3JjIGZyb20sIHZvaWQqIHRv
KQorICAgIHsKKyAgICAgICAgQVNTRVJUKGZyb20ubV9vZmZzZXQgIT0gLTEpOworCisgICAgICAg
IHVpbnQxNl90KiBpbnN0cnVjdGlvblB0ciA9IGdldEluc3RydWN0aW9uUHRyKGNvZGUsIGZyb20u
bV9vZmZzZXQpOworICAgICAgICB1aW50MTZfdCBpbnN0cnVjdGlvbiA9ICppbnN0cnVjdGlvblB0
cjsKKyAgICAgICAgaW50IG9mZnNldEJpdHMgPSAocmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdD4o
dG8pIC0gcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdD4oY29kZSkpIC0gZnJvbS5tX29mZnNldDsK
KworICAgICAgICBpZiAoKChpbnN0cnVjdGlvbiAmIDB4RkYwMCkgPT0gQlRfT1BDT0RFKSB8fCAo
KGluc3RydWN0aW9uICYgMHhGRjAwKSA9PSBCRl9PUENPREUpKSB7CisKKyAgICAgICAgICAgIC8q
IEJUIGxhYmVsICA9PT4gQkYgMiAKKyAgICAgICAgICAgICAgIG5vcCAgICAgICAgICAgTERSIHJl
ZworICAgICAgICAgICAgICAgbm9wICAgICAgICAgICBicmFmIEByZWcKKyAgICAgICAgICAgICAg
IG5vcCAgICAgICAgICAgbm9wCisgICAgICAgICAgICAqLworICAgICAgICAgICAgb2Zmc2V0Qml0
cyAtPSA4OworICAgICAgICAgICAgaW5zdHJ1Y3Rpb24gXj0gMHgwMjAyOworICAgICAgICAgICAg
Kmluc3RydWN0aW9uUHRyKysgPSBpbnN0cnVjdGlvbjsKKyAgICAgICAgICAgIGNoYW5nZVBDcmVs
YXRpdmVBZGRyZXNzKCgqaW5zdHJ1Y3Rpb25QdHIgJiAweEZGKSwgaW5zdHJ1Y3Rpb25QdHIsIG9m
ZnNldEJpdHMpOworICAgICAgICAgICAgaW5zdHJ1Y3Rpb24gPSAoMHgwMDIzIHwgKCppbnN0cnVj
dGlvblB0cisrICYgMHhGMDApKTsKKyAgICAgICAgICAgICppbnN0cnVjdGlvblB0cisrID0gaW5z
dHJ1Y3Rpb247CisgICAgICAgICB9IGVsc2UgeworCisgICAgICAgICAgICAgLyogTU9WICNpbW0s
IHJlZyAgPT4gTERSIHJlZworICAgICAgICAgICAgICAgIGJyYWYgQHJlZyAgICAgICAgYnJhZiBA
cmVnCisgICAgICAgICAgICAgICAgbm9wICAgICAgICAgICAgICBub3AKKyAgICAgICAgICAgICov
CisKKyAgICAgICAgICAgIEFTU0VSVCgoKihpbnN0cnVjdGlvblB0ciArMSkgJiAweDAwMjMpID09
IEJSQUZfT1BDT0RFKTsKKworICAgICAgICAgICAgb2Zmc2V0Qml0cyAgLT0gNjsKKyAgICAgICAg
ICAgIGNoYW5nZVBDcmVsYXRpdmVBZGRyZXNzKCgqaW5zdHJ1Y3Rpb25QdHIgJiAweEZGKSwgaW5z
dHJ1Y3Rpb25QdHIsIG9mZnNldEJpdHMpOworCisgICAgICAgICB9CisgICAgfQorCisgICAgc3Rh
dGljIHZvaWQgbGlua0NhbGwodm9pZCogY29kZSwgSm1wU3JjIGZyb20sIHZvaWQqIHRvKQorICAg
IHsKKyAgICAgICAgdWludDE2X3QqIGluc3RydWN0aW9uUHRyID0gZ2V0SW5zdHJ1Y3Rpb25QdHIo
Y29kZSwgZnJvbS5tX29mZnNldCk7CisgICAgICAgIGluc3RydWN0aW9uUHRyIC09IDM7CisKKyAg
ICAgICAgY2hhbmdlUENyZWxhdGl2ZUFkZHJlc3MoKCppbnN0cnVjdGlvblB0ciAmIDB4RkYpLCBp
bnN0cnVjdGlvblB0ciwgcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdD4odG8pKTsKKyAgICB9CisK
KyAgICBzdGF0aWMgdm9pZCBsaW5rUG9pbnRlcih2b2lkKiBjb2RlLCBKbXBEc3Qgd2hlcmUsIHZv
aWQqIHZhbHVlKQorICAgIHsKKyAgICAgICAgdWludDE2X3QqIGluc3RydWN0aW9uUHRyID0gZ2V0
SW5zdHJ1Y3Rpb25QdHIoY29kZSwgd2hlcmUubV9vZmZzZXQpOworCisgICAgICAgIGNoYW5nZVBD
cmVsYXRpdmVBZGRyZXNzKCgqaW5zdHJ1Y3Rpb25QdHIgJiAweEZGKSwgaW5zdHJ1Y3Rpb25QdHIs
IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3Q+KHZhbHVlKSk7CisgICAgfQorCisgICAgc3RhdGlj
IHVuc2lnbmVkIGdldENhbGxSZXR1cm5PZmZzZXQoSm1wU3JjIGNhbGwpCisgICAgeworICAgICAg
ICBBU1NFUlQoY2FsbC5tX29mZnNldCA+PSAwKTsKKyAgICAgICAgcmV0dXJuIGNhbGwubV9vZmZz
ZXQ7CisgICAgfQorCisgICAgc3RhdGljIHVpbnQzMl90KiBnZXRMZHJJbW1BZGRyZXNzT25Qb29s
KFNINFdvcmQqIGluc24sIHVpbnQzMl90KiBjb25zdFBvb2wpCisgICAgeworICAgICAgICAgcmV0
dXJuIChjb25zdFBvb2wgKyAoKmluc24gJiAweGZmKSk7CisgICAgfQorCisgICAgc3RhdGljIFNI
NFdvcmQgcGF0Y2hDb25zdGFudFBvb2xMb2FkKFNINFdvcmQgbG9hZCwgaW50IHZhbHVlKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIChsb2FkICYgfjB4ZmYpIHwgdmFsdWU7CisgICAgfQorCisgICAg
c3RhdGljIEFzc2VtYmxlckJ1ZmZlcjo6YmFycmllclR5cGUgcGxhY2VDb25zdGFudFBvb2xCYXJy
aWVyKGludCBvZmZzZXQpCisgICAgeworICAgICAgICBBU1NFUlQoKChvZmZzZXQgPj4gMSkgPD0y
MDQ3KSAmJiAoKG9mZnNldCA+PiAxKSA+PSAtMjA0OCkpOworICAgICAgICBBc3NlbWJsZXJCdWZm
ZXI6OmJhcnJpZXJUeXBlIG1fYmFycmllcjsKKworICAgICAgICBtX2JhcnJpZXIuaGlnaCA9IChC
UkFfT1BDT0RFIHwgKG9mZnNldCA+PiAxKSk7CisgICAgICAgIG1fYmFycmllci5sb3cgPSBOT1Bf
T1BDT0RFOworCisgICAgICAgIHByaW50SW5zdHIoKChCUkFfT1BDT0RFIHwgKG9mZnNldCA+PiAx
KSkpLCAwKTsKKyAgICAgICAgcHJpbnRJbnN0cihOT1BfT1BDT0RFLCAwKTsKKyAgICAgICAgcmV0
dXJuIG1fYmFycmllcjsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBwYXRjaENvbnN0YW50UG9v
bExvYWQodm9pZCogbG9hZEFkZHIsIHZvaWQqIGNvbnN0UG9vbEFkZHIpCisgICAgeworICAgICAg
ICBTSDRXb3JkKiBpbnN0cnVjdGlvblB0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8U0g0V29yZCo+KGxv
YWRBZGRyKTsKKyAgICAgICAgU0g0V29yZCBpbnN0cnVjdGlvbiA9ICppbnN0cnVjdGlvblB0cjsK
KyAgICAgICAgU0g0V29yZCBpbmRleCA9IGluc3RydWN0aW9uICYgMHhmZjsKKyAgICAgICAgCisg
ICAgICAgIEFTU0VSVCgoKChyZWludGVycHJldF9jYXN0PHVpbnQzMl90Pihjb25zdFBvb2xBZGRy
KSAtIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3Q+KGxvYWRBZGRyKSkgKyBpbmRleCAqIDQpKSA8
IDEwMjQpOworCisgICAgICAgIGludCBvZmZzZXQgPSByZWludGVycHJldF9jYXN0PHVpbnQzMl90
Pihjb25zdFBvb2xBZGRyKSArIChpbmRleCAqIDQpIC0gKChyZWludGVycHJldF9jYXN0PHVpbnQz
Ml90PihpbnN0cnVjdGlvblB0cikgJiB+MHgwMykgKyA0KTsKKworICAgICAgICBpbnN0cnVjdGlv
biAmPTB4ZjAwOworICAgICAgICBpbnN0cnVjdGlvbiB8PSAweEQwMDA7CisgICAgICAgIG9mZnNl
dCAmPSAweDAzZmY7CisgICAgICAgIGluc3RydWN0aW9uIHw9IChvZmZzZXQgPj4gMik7CisgICAg
ICAgICppbnN0cnVjdGlvblB0ciA9IGluc3RydWN0aW9uOworICAgIH0KKworICAgIHN0YXRpYyB2
b2lkIHJlcGF0Y2hQb2ludGVyKHZvaWQqIHdoZXJlLCB2b2lkKiB2YWx1ZSkKKyAgICB7CisgICAg
ICAgIHBhdGNoUG9pbnRlcih3aGVyZSwgdmFsdWUpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lk
IHJlcGF0Y2hMb2FkUHRyVG9MRUEodm9pZCogd2hlcmUpCisgICAgeworICAgICAgICB1aW50MTZf
dCogbG9hZE9wID0gcmVpbnRlcnByZXRfY2FzdDx1aW50MTZfdCo+KHdoZXJlKSArIDI7CisKKyAg
ICAgICAgKmxvYWRPcCA9ICpsb2FkT3AgfCAweDE7CisgICAgICAgIEV4ZWN1dGFibGVBbGxvY2F0
b3I6OmNhY2hlRmx1c2gobG9hZE9wLCBzaXplb2YodWludDE2X3QpKTsKKyAgICB9CisKKyAgICBz
dGF0aWMgdm9pZCByZXBhdGNoSW50MzIodm9pZCogd2hlcmUsIGludDMyX3QgdmFsdWUpCisgICAg
eworICAgICAgICB1aW50MTZfdCogaW5zdHJ1Y3Rpb25QdHIgPSByZWludGVycHJldF9jYXN0PHVp
bnQxNl90Kj4od2hlcmUpOworCisgICAgICAgIGNoYW5nZVBDcmVsYXRpdmVBZGRyZXNzKCgqaW5z
dHJ1Y3Rpb25QdHIgJiAweEZGKSwgaW5zdHJ1Y3Rpb25QdHIsIHZhbHVlKTsKKyAgICB9CisKKyAg
ICBzdGF0aWMgdm9pZCByZWxpbmtDYWxsKHZvaWQqIGZyb20sIHZvaWQqIHRvKQorICAgIHsKKyAg
ICAgICAgdWludDE2X3QqIGluc3RydWN0aW9uUHRyID0gcmVpbnRlcnByZXRfY2FzdDx1aW50MTZf
dCo+KGZyb20pOworICAgICAgICBpbnN0cnVjdGlvblB0ciAtPSAzOworCisgICAgICAgIGNoYW5n
ZVBDcmVsYXRpdmVBZGRyZXNzKCgqaW5zdHJ1Y3Rpb25QdHIgJiAweEZGKSwgaW5zdHJ1Y3Rpb25Q
dHIsIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3Q+KHRvKSk7CisgICAgfQorCisgICAgc3RhdGlj
IHZvaWQgcmVsaW5rSnVtcCh2b2lkKiBmcm9tLCB2b2lkKiB0bykKKyAgICB7CisgICAgICAgIHVp
bnQxNl90KiBpbnN0cnVjdGlvblB0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDE2X3QqPiAoZnJv
bSk7CisgICAgICAgIHVpbnQxNl90IGluc3RydWN0aW9uID0gKmluc3RydWN0aW9uUHRyOworICAg
ICAgICBpbnQzMl90IG9mZnNldEJpdHMgPSAocmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdD4odG8p
IC0gcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdD4oZnJvbSkpOworICAgICAgICB1aW50MTZfdCog
YWRkcmVzczsKKworICAgICAgICBpZiAoKCgqaW5zdHJ1Y3Rpb25QdHIgJiAweEZGMDApID09IEJU
X09QQ09ERSkgfHwgKCgqaW5zdHJ1Y3Rpb25QdHIgJiAweEZGMDApID09IEJGX09QQ09ERSkpIHsK
KworICAgICAgICAgICAgb2Zmc2V0Qml0cyAgLT0gODsKKyAgICAgICAgICAgIGluc3RydWN0aW9u
UHRyKys7CisKKyAgICAgICAgICAgIGNoYW5nZVBDcmVsYXRpdmVBZGRyZXNzKCgqaW5zdHJ1Y3Rp
b25QdHIgJiAweEZGKSwgaW5zdHJ1Y3Rpb25QdHIsIG9mZnNldEJpdHMpOworCisgICAgICAgICAg
ICBpbnN0cnVjdGlvbiA9ICgweDAwMjMgfCAoKmluc3RydWN0aW9uUHRyKysgJiAweEYwMCkpOwor
ICAgICAgICAgICAgKmluc3RydWN0aW9uUHRyKysgPSBpbnN0cnVjdGlvbjsKKworICAgICAgICAg
fSBlbHNlIHsKKyAKKyAgICAgICAgICAgIEFTU0VSVCgoKihpbnN0cnVjdGlvblB0ciArMSkgJiAw
eDAwMjMpID09IEJSQUZfT1BDT0RFKTsKKyAgICAgICAgICAgIG9mZnNldEJpdHMgIC09IDY7Cisg
ICAgICAgICAgICBpbnQgb2Zmc2V0VG9QQyA9ICgqaW5zdHJ1Y3Rpb25QdHIgJiAweEZGKTsKKwor
ICAgICAgICAgICAgY2hhbmdlUENyZWxhdGl2ZUFkZHJlc3MoKCppbnN0cnVjdGlvblB0ciAmIDB4
RkYpLCBpbnN0cnVjdGlvblB0ciwgb2Zmc2V0Qml0cyk7CisKKyAgICAgICAgIH0KKyAgICB9CisK
KyAgICAvLyBMaW5raW5nICYgcGF0Y2hpbmc6CisKKyAgICB2b2lkIGxpbmtKdW1wKEptcFNyYyBm
cm9tLCBKbXBEc3QgdG8pCisgICAgeworICAgICAgICBBU1NFUlQodG8ubV9vZmZzZXQgIT0gLTEp
OworICAgICAgICBBU1NFUlQoZnJvbS5tX29mZnNldCAhPSAtMSk7CisKKyAgICAgICAgdWludDE2
X3QqIGluc3RydWN0aW9uUHRyID0gZ2V0SW5zdHJ1Y3Rpb25QdHIoZGF0YSgpLCBmcm9tLm1fb2Zm
c2V0KTsKKyAgICAgICAgdWludDE2X3QgaW5zdHJ1Y3Rpb24gPSAqaW5zdHJ1Y3Rpb25QdHI7Cisg
ICAgICAgIGludCBvZmZzZXRCaXRzOworCisgICAgICAgIGlmICgoKGluc3RydWN0aW9uICYgMHhG
RjAwKSA9PSBCVF9PUENPREUpIHx8ICgoaW5zdHJ1Y3Rpb24gJiAweEZGMDApID09IEJGX09QQ09E
RSkpIHsKKworICAgICAgICAgICAgLyogQlQgbGFiZWwgICAgPT4gQkYgMgorICAgICAgICAgICAg
ICAgbm9wICAgICAgICAgICAgTERSIHJlZworICAgICAgICAgICAgICAgbm9wICAgICAgICAgICAg
YnJhZiBAcmVnCisgICAgICAgICAgICAgICBub3AgICAgICAgICAgICBub3AKKyAgICAgICAgICAg
ICovCisgICAgICAgICAgICBvZmZzZXRCaXRzICA9ICh0by5tX29mZnNldCAtIGZyb20ubV9vZmZz
ZXQpIC0gODsKKyAgICAgICAgICAgIGluc3RydWN0aW9uIF49IDB4MDIwMjsKKyAgICAgICAgICAg
ICppbnN0cnVjdGlvblB0cisrID0gaW5zdHJ1Y3Rpb247CisKKyAgICAgICAgICAgIGlmICgoKmlu
c3RydWN0aW9uUHRyICYgMHhGMDAwKSA9PSAweEUwMDApIHsKKyAgICAgICAgICAgICAgICB1aW50
MzJfdCogYWRkciA9IGdldExkckltbUFkZHJlc3NPblBvb2woaW5zdHJ1Y3Rpb25QdHIsIG1fYnVm
ZmVyLnBvb2xBZGRyZXNzKCkpOworICAgICAgICAgICAgICAgICphZGRyID0gb2Zmc2V0Qml0czsK
KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgY2hhbmdlUENyZWxhdGl2ZUFk
ZHJlc3MoKCppbnN0cnVjdGlvblB0ciAmIDB4RkYpLCBpbnN0cnVjdGlvblB0ciwgb2Zmc2V0Qml0
cyk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGluc3RydWN0aW9uID0gKDB4MDAyMyB8
ICgqaW5zdHJ1Y3Rpb25QdHIrKyAmIDB4RjAwKSk7CisgICAgICAgICAgICAqaW5zdHJ1Y3Rpb25Q
dHIrKyA9IGluc3RydWN0aW9uOworICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAvKiBN
T1YgIyBpbW0sIHJlZyAgPT4gTERSIHJlZworICAgICAgICAgICAgICAgIGJyYWYgQHJlZyAgICAg
ICAgICBicmFmIEByZWcKKyAgICAgICAgICAgICAgICBub3AgICAgICAgICAgICAgICAgbm9wCisg
ICAgICAgICAgICAqLworCisgICAgICAgICAgICBBU1NFUlQoKCooaW5zdHJ1Y3Rpb25QdHIgKzEp
ICYgMHgwMDIzKSA9PSBCUkFGX09QQ09ERSk7CisgICAgICAgICAgICBvZmZzZXRCaXRzICA9ICh0
by5tX29mZnNldCAtIGZyb20ubV9vZmZzZXQpIC0gNjsKKworICAgICAgICAgICAgaW5zdHJ1Y3Rp
b24gPSAqaW5zdHJ1Y3Rpb25QdHI7CisKKyAgICAgICAgICAgIGlmICgoaW5zdHJ1Y3Rpb24gICYg
MHhGMDAwKSA9PSAweEUwMDApIHsKKyAgICAgICAgICAgICAgICB1aW50MzJfdCogYWRkciA9IGdl
dExkckltbUFkZHJlc3NPblBvb2woaW5zdHJ1Y3Rpb25QdHIsIG1fYnVmZmVyLnBvb2xBZGRyZXNz
KCkpOworICAgICAgICAgICAgICAgICphZGRyID0gb2Zmc2V0Qml0czsKKyAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgY2hhbmdlUENyZWxhdGl2ZUFkZHJlc3MoKCppbnN0cnVj
dGlvblB0ciAmIDB4RkYpLCBpbnN0cnVjdGlvblB0ciwgb2Zmc2V0Qml0cyk7CisgICAgICAgICAg
ICB9CisgICAgICAgICB9CisgICAgIH0KKworICAgIHN0YXRpYyB2b2lkKiBnZXRSZWxvY2F0ZWRB
ZGRyZXNzKHZvaWQqIGNvZGUsIEptcFNyYyBqdW1wKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJl
aW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3Q+KGNvZGUpICsg
anVtcC5tX29mZnNldCk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQqIGdldFJlbG9jYXRlZEFk
ZHJlc3Modm9pZCogY29kZSwgSm1wRHN0IGRlc3RpbmF0aW9uKQorICAgIHsKKyAgICAgICAgQVNT
RVJUKGRlc3RpbmF0aW9uLm1fb2Zmc2V0ICE9IC0xKTsKKworICAgICAgICByZXR1cm4gcmVpbnRl
cnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdD4oY29kZSkgKyBkZXN0
aW5hdGlvbi5tX29mZnNldCk7CisgICAgfQorCisgICAgc3RhdGljIGludCBnZXREaWZmZXJlbmNl
QmV0d2VlbkxhYmVscyhKbXBEc3Qgc3JjLCBKbXBEc3QgZHN0KQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGRzdC5tX29mZnNldCAtIHNyYy5tX29mZnNldDsKKyAgICB9CisKKyAgICBzdGF0aWMgaW50
IGdldERpZmZlcmVuY2VCZXR3ZWVuTGFiZWxzKEptcERzdCBzcmMsIEptcFNyYyBkc3QpCisgICAg
eworICAgICAgICByZXR1cm4gZHN0Lm1fb2Zmc2V0IC0gc3JjLm1fb2Zmc2V0OworICAgIH0KKwor
ICAgIHN0YXRpYyBpbnQgZ2V0RGlmZmVyZW5jZUJldHdlZW5MYWJlbHMoSm1wU3JjIHNyYywgSm1w
RHN0IGRzdCkKKyAgICB7CisgICAgICAgIHJldHVybiBkc3QubV9vZmZzZXQgLSBzcmMubV9vZmZz
ZXQ7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgcGF0Y2hQb2ludGVyKHZvaWQqIGNvZGUsIEpt
cERzdCB3aGVyZSwgdm9pZCogdmFsdWUpCisgICAgeworICAgICAgICBwYXRjaFBvaW50ZXIocmVp
bnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KGNvZGUpICsgd2hlcmUubV9vZmZzZXQsIHZhbHVlKTsK
KyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBwYXRjaFBvaW50ZXIodm9pZCogY29kZSwgdm9pZCog
dmFsdWUpCisgICAgeworICAgICAgICBwYXRjaEludDMyKGNvZGUsIHJlaW50ZXJwcmV0X2Nhc3Q8
dWludDMyX3Q+KHZhbHVlKSk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgcGF0Y2hJbnQzMih2
b2lkKiBjb2RlLCB1aW50MzJfdCB2YWx1ZSkKKyAgICB7CisgICAgICAgIGNoYW5nZVBDcmVsYXRp
dmVBZGRyZXNzKCgqKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDE2X3QqPihjb2RlKSkgJiAweEZGKSwg
cmVpbnRlcnByZXRfY2FzdDx1aW50MTZfdCo+KGNvZGUpLCB2YWx1ZSk7CisgICAgfQorCisgICAg
dm9pZCogZXhlY3V0YWJsZUNvcHkoRXhlY3V0YWJsZVBvb2wqIGFsbG9jYXRvcikKKyAgICB7Cisg
ICAgICAgIHZvaWQqIGNvcHkgPSBtX2J1ZmZlci5leGVjdXRhYmxlQ29weShhbGxvY2F0b3IpOwor
ICAgICAgICBBU1NFUlQoY29weSk7CisgICAgICAgIHJldHVybiBjb3B5OworICAgIH0KKworICAg
IHZvaWQgcHJlZml4KHVpbnQxNl90IHByZSkKKyAgICB7CisgICAgICAgIG1fYnVmZmVyLnB1dEJ5
dGUocHJlKTsKKyAgICB9CisKKyAgICB2b2lkIG9uZVNob3J0T3AodWludDE2X3Qgb3Bjb2RlLCBi
b29sIGNoZWNrc2l6ZSA9IHRydWUpCisgICAgeworICAgICAgICBwcmludEluc3RyKG9wY29kZSwg
bV9idWZmZXIudW5jaGVja2VkU2l6ZSgpKTsKKworICAgICAgICBpZiAoY2hlY2tzaXplKQorICAg
ICAgICAgICAgbV9idWZmZXIuZW5zdXJlU3BhY2UobWF4SW5zdHJ1Y3Rpb25TaXplKTsKKyAgICAg
ICAgbV9idWZmZXIucHV0U2hvcnRVbmNoZWNrZWQob3Bjb2RlKTsKKyAgICB9CisKKyAgICB2b2lk
IGVuc3VyZVNwYWNlKGludCBzcGFjZSkKKyAgICB7CisgICAgICAgIG1fYnVmZmVyLmVuc3VyZVNw
YWNlKHNwYWNlKTsKKyAgICB9CisKKyAgICB2b2lkIGVuc3VyZVNwYWNlKGludCBpbnNuU3BhY2Us
IGludCBjb25zdFNwYWNlKQorICAgIHsKKyAgICAgICAgbV9idWZmZXIuZW5zdXJlU3BhY2UoaW5z
blNwYWNlLCBjb25zdFNwYWNlKTsKKyAgICB9CisKKyAgICAvLyBBZG1pbmlzdHJhdGl2ZSBtZXRo
b2RzOgorCisgICAgdm9pZCogZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fYnVmZmVyLmRhdGEoKTsg
fQorICAgIGludCBzaXplKCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX2J1ZmZlci5zaXplKCk7
CisgICAgfQorCisjaWZkZWYgU0g0X0FTU0VNQkxFUl9UUkFDSU5HCisgICAgc3RhdGljIHZvaWQg
cHJpbnRJbnN0cih1aW50MTZfdCBvcGMsIGludCBzaXplLCBib29sIGlzZG91YmxlSW5zdCA9IHRy
dWUpCisgICAgeworICAgICAgICBpZiAoIWR1bXBOYXRpdmVDb2RlKQorICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICBjb25zdCBjaGFyICpmb3JtYXQgPSAwOworICAgICAgICBwcmludGZTdGRv
dXRJbnN0cigib2Zmc2V0IDogMHglOC44eFx0Iiwgc2l6ZSk7CisKKyAgICAgICAgc3dpdGNoIChv
cGMpIHsKKyAgICAgICAgY2FzZSBCUktfT1BDT0RFOiAgZm9ybWF0ID0gIiAgICBCUktcbiI7IGJy
ZWFrOworICAgICAgICBjYXNlIE5PUF9PUENPREU6ICBmb3JtYXQgPSAiICAgIE5PUFxuIjsgYnJl
YWs7CisgICAgICAgIGNhc2UgUlRTX09QQ09ERTogIGZvcm1hdCA9IiAgICAqUlRTXG4iOyBicmVh
azsKKyAgICAgICAgY2FzZSBTRVRTX09QQ09ERTogZm9ybWF0ID0gIiAgICBTRVRTXG4iOyBicmVh
azsKKyAgICAgICAgY2FzZSBTRVRUX09QQ09ERTogZm9ybWF0ID0gIiAgICBTRVRUXG4iOyBicmVh
azsKKyAgICAgICAgY2FzZSBDTFJUX09QQ09ERTogZm9ybWF0ID0gIiAgICBDTFJUXG4iOyBicmVh
azsKKyAgICAgICAgfQorICAgICAgICBpZiAoZm9ybWF0KSB7CisgICAgICAgICAgICBwcmludGZT
dGRvdXRJbnN0cihmb3JtYXQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAg
ICAgICAgc3dpdGNoIChvcGMgJiAweGYwZmYpIHsKKyAgICAgICAgY2FzZSBCUkFGX09QQ09ERTog
ICAgICAgICAgZm9ybWF0ID0gIiAgICAqQlJBRiBSJWRcbiI7IGJyZWFrOworICAgICAgICBjYXNl
IERUX09QQ09ERSA6ICAgICAgICAgICBmb3JtYXQgPSAiICAgIERUIFIlZFxuIjsgYnJlYWs7Cisg
ICAgICAgIGNhc2UgQ01QUExfT1BDT0RFOiAgICAgICAgIGZvcm1hdCA9ICIgICAgQ01QL1BMIFIl
ZFxuIjsgYnJlYWs7CisgICAgICAgIGNhc2UgQ01QUFpfT1BDT0RFOiAgICAgICAgIGZvcm1hdCA9
ICIgICAgQ01QL1BaIFIlZFxuIjsgYnJlYWs7CisgICAgICAgIGNhc2UgSk1QX09QQ09ERTogICAg
ICAgICAgIGZvcm1hdCA9ICIgICAgKkpNUCBAUiVkXG4iOyBicmVhazsKKyAgICAgICAgY2FzZSBK
U1JfT1BDT0RFOiAgICAgICAgICAgZm9ybWF0ID0gIiAgICAqSlNSIEBSJWRcbiI7IGJyZWFrOwor
ICAgICAgICBjYXNlIExEU1BSX09QQ09ERTogICAgICAgICBmb3JtYXQgPSAiICAgIExEUyBSJWQs
IFBSXG4iOyBicmVhazsKKyAgICAgICAgY2FzZSBMRFNMUFJfT1BDT0RFOiAgICAgICAgZm9ybWF0
ID0gIiAgICBMRFMuTCBAUiVkKywgUFJcbiI7IGJyZWFrOworICAgICAgICBjYXNlIE1PVlRfT1BD
T0RFOiAgICAgICAgICBmb3JtYXQgPSAiICAgIE1PVlQgUiVkXG4iOyBicmVhazsKKyAgICAgICAg
Y2FzZSBTSEFMX09QQ09ERTogICAgICAgICAgZm9ybWF0ID0gIiAgICBTSEFMIFIlZFxuIjsgYnJl
YWs7CisgICAgICAgIGNhc2UgU0hBUl9PUENPREU6ICAgICAgICAgIGZvcm1hdCA9ICIgICAgU0hB
UiBSJWRcbiI7IGJyZWFrOworICAgICAgICBjYXNlIFNITExfT1BDT0RFOiAgICAgICAgICBmb3Jt
YXQgPSAiICAgIFNITEwgUiVkXG4iOyBicmVhazsKKyAgICAgICAgY2FzZSBTSExMMl9PUENPREU6
ICAgICAgICAgZm9ybWF0ID0gIiAgICBTSExMMiBSJWRcbiI7IGJyZWFrOworICAgICAgICBjYXNl
IFNITEw4X09QQ09ERTogICAgICAgICBmb3JtYXQgPSAiICAgIFNITEw4IFIlZFxuIjsgYnJlYWs7
CisgICAgICAgIGNhc2UgU0hMTDE2X09QQ09ERTogICAgICAgIGZvcm1hdCA9ICIgICAgU0hMTDE2
IFIlZFxuIjsgYnJlYWs7CisgICAgICAgIGNhc2UgU0hMUl9PUENPREU6ICAgICAgICAgIGZvcm1h
dCA9ICIgICAgU0hMUiBSJWRcbiI7IGJyZWFrOworICAgICAgICBjYXNlIFNITFIyX09QQ09ERTog
ICAgICAgICBmb3JtYXQgPSAiICAgIFNITFIyIFIlZFxuIjsgYnJlYWs7CisgICAgICAgIGNhc2Ug
U0hMUjhfT1BDT0RFOiAgICAgICAgIGZvcm1hdCA9ICIgICAgU0hMUjggUiVkXG4iOyBicmVhazsK
KyAgICAgICAgY2FzZSBTSExSMTZfT1BDT0RFOiAgICAgICAgZm9ybWF0ID0gIiAgICBTSExSMTYg
UiVkXG4iOyBicmVhazsKKyAgICAgICAgY2FzZSBTVFNQUl9PUENPREU6ICAgICAgICAgZm9ybWF0
ID0gIiAgICBTVFMgUFIsIFIlZFxuIjsgYnJlYWs7CisgICAgICAgIGNhc2UgU1RTTFBSX09QQ09E
RTogICAgICAgIGZvcm1hdCA9ICIgICAgU1RTLkwgUFIsIEAtUiVkXG4iOyBicmVhazsKKyAgICAg
ICAgY2FzZSBMRFNfUk1fRlBVTF9PUENPREU6ICAgZm9ybWF0ID0gIiAgICBMRFMgUiVkLCBGUFVM
XG4iOyBicmVhazsKKyAgICAgICAgY2FzZSBTVFNfRlBVTF9STl9PUENPREU6ICAgZm9ybWF0ID0g
IiAgICBTVFMgRlBVTCwgUiVkIFxuIjsgYnJlYWs7CisgICAgICAgIGNhc2UgRkxEU19GUk1fRlBV
TF9PUENPREU6IGZvcm1hdCA9ICIgICAgRkxEUyBGUiVkLCBGUFVMXG4iOyBicmVhazsKKyAgICAg
ICAgY2FzZSBGU1RTX0ZQVUxfRlJOX09QQ09ERTogZm9ybWF0ID0gIiAgICBGU1RTIEZQVUwsIFIl
ZCBcbiI7IGJyZWFrOworICAgICAgICBjYXNlIExEU0ZQU0NSX09QQ09ERTogICAgICBmb3JtYXQg
PSAiICAgIExEUyBSJWQsIEZQU0NSIFxuIjsgYnJlYWs7CisgICAgICAgIGNhc2UgU1RTRlBTQ1Jf
T1BDT0RFOiAgICAgIGZvcm1hdCA9ICIgICAgU1RTIEZQU0NSLCBSJWQgXG4iOyBicmVhazsKKyAg
ICAgICAgY2FzZSBTVFNNQUNMX09QQ09ERTogICAgICAgZm9ybWF0ID0gIiAgICBTVFMgTUFDTCwg
UiVkIFxuIjsgYnJlYWs7CisgICAgICAgIGNhc2UgU1RTTUFDSF9PUENPREU6ICAgICAgIGZvcm1h
dCA9ICIgICAgU1RTIE1BQ0gsIFIlZCBcbiI7IGJyZWFrOworICAgICAgICBjYXNlIEJTUkZfT1BD
T0RFOiAgICAgICAgICBmb3JtYXQgPSAiICAgICpCU1JGIFIlZCI7IGJyZWFrOworICAgICAgICBj
YXNlIEZUUkNfT1BDT0RFOiAgICAgICAgICBmb3JtYXQgPSAiICAgIEZUUkMgRlIlZCwgRlBVTFxu
IjsgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZm9ybWF0KSB7CisgICAgICAgICAg
ICBwcmludGZTdGRvdXRJbnN0cihmb3JtYXQsIGdldFJuKG9wYykpOworICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKworICAgICAgICBzd2l0Y2ggKG9wYyAmIDB4ZjBmZikgeworICAgICAgICBj
YXNlIEZORUdfT1BDT0RFOiAgICAgZm9ybWF0ID0gIiAgICBGTkVHIERSJWRcbiI7IGJyZWFrOwor
ICAgICAgICBjYXNlIEZMT0FUX09QQ09ERTogICAgZm9ybWF0ID0gIiAgICBGTE9BVCBEUiVkXG4i
OyBicmVhazsKKyAgICAgICAgY2FzZSBGVFJDX09QQ09ERTogICAgIGZvcm1hdCA9ICIgICAgRlRS
QyBGUiVkLCBGUFVMXG4iOyBicmVhazsKKyAgICAgICAgY2FzZSBGU1FSVF9PUENPREU6ICAgIGZv
cm1hdCA9ICIgICAgRlNRUlQgRlIlRFxuIjsgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBp
ZiAoZm9ybWF0KSB7CisgICAgICAgICAgICBpZiAoaXNkb3VibGVJbnN0KQorICAgICAgICAgICAg
ICAgIHByaW50ZlN0ZG91dEluc3RyKGZvcm1hdCwgZ2V0RFJuKG9wYykgPDwgMSk7CisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgcHJpbnRmU3Rkb3V0SW5zdHIoZm9ybWF0LCBnZXRS
bihvcGMpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIHN3aXRj
aCAob3BjICYgMHhmMDBmKSB7CisgICAgICAgIGNhc2UgQUREX09QQ09ERTogICAgICAgICAgICAg
ICBmb3JtYXQgPSAiICAgIEFERCBSJWQsIFIlZFxuIjsgYnJlYWs7CisgICAgICAgIGNhc2UgQURE
Q19PUENPREU6ICAgICAgICAgICAgICBmb3JtYXQgPSAiICAgIEFEREMgUiVkLCBSJWRcbiI7IGJy
ZWFrOworICAgICAgICBjYXNlIEFERFZfT1BDT0RFOiAgICAgICAgICAgICAgZm9ybWF0ID0gIiAg
ICBBRERWIFIlZCwgUiVkXG4iOyBicmVhazsKKyAgICAgICAgY2FzZSBBTkRfT1BDT0RFOiAgICAg
ICAgICAgICAgIGZvcm1hdCA9ICIgICAgQU5EIFIlZCwgUiVkXG4iOyBicmVhazsKKyAgICAgICAg
Y2FzZSBESVYxX09QQ09ERTogICAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgRElWMSBSJWQsIFIl
ZFxuIjsgYnJlYWs7CisgICAgICAgIGNhc2UgQ01QRVFfT1BDT0RFOiAgICAgICAgICAgICBmb3Jt
YXQgPSAiICAgIENNUC9FUSBSJWQsIFIlZFxuIjsgYnJlYWs7CisgICAgICAgIGNhc2UgQ01QR0Vf
T1BDT0RFOiAgICAgICAgICAgICBmb3JtYXQgPSAiICAgIENNUC9HRSBSJWQsIFIlZFxuIjsgYnJl
YWs7CisgICAgICAgIGNhc2UgQ01QR1RfT1BDT0RFOiAgICAgICAgICAgICBmb3JtYXQgPSAiICAg
IENNUC9HVCBSJWQsIFIlZFxuIjsgYnJlYWs7CisgICAgICAgIGNhc2UgQ01QSElfT1BDT0RFOiAg
ICAgICAgICAgICBmb3JtYXQgPSAiICAgIENNUC9ISSBSJWQsIFIlZFxuIjsgYnJlYWs7CisgICAg
ICAgIGNhc2UgQ01QSFNfT1BDT0RFOiAgICAgICAgICAgICBmb3JtYXQgPSAiICAgIENNUC9IUyBS
JWQsIFIlZFxuIjsgYnJlYWs7CisgICAgICAgIGNhc2UgTU9WX09QQ09ERTogICAgICAgICAgICAg
ICBmb3JtYXQgPSAiICAgIE1PViBSJWQsIFIlZFxuIjsgYnJlYWs7CisgICAgICAgIGNhc2UgTU9W
Ql9XUklURV9STl9PUENPREU6ICAgICBmb3JtYXQgPSAiICAgIE1PVi5CIFIlZCwgQFIlZFxuIjsg
YnJlYWs7CisgICAgICAgIGNhc2UgTU9WQl9XUklURV9STkRFQ19PUENPREU6ICBmb3JtYXQgPSAi
ICAgIE1PVi5CIFIlZCwgQC1SJWRcbiI7IGJyZWFrOworICAgICAgICBjYXNlIE1PVkJfV1JJVEVf
UjBSTl9PUENPREU6ICAgZm9ybWF0ID0gIiAgICBNT1YuQiBSJWQsIEAoUjAsIFIlZClcbiI7IGJy
ZWFrOworICAgICAgICBjYXNlIE1PVkJfUkVBRF9STV9PUENPREU6ICAgICAgZm9ybWF0ID0gIiAg
ICBNT1YuQiBAUiVkLCBSJWRcbiI7IGJyZWFrOworICAgICAgICBjYXNlIE1PVkJfUkVBRF9STUlO
Q19PUENPREU6ICAgZm9ybWF0ID0gIiAgICBNT1YuQiBAUiVkKywgUiVkXG4iOyBicmVhazsKKyAg
ICAgICAgY2FzZSBNT1ZCX1JFQURfUjBSTV9PUENPREU6ICAgIGZvcm1hdCA9ICIgICAgTU9WLkIg
QChSMCwgUiVkKSwgUiVkXG4iOyBicmVhazsKKyAgICAgICAgY2FzZSBNT1ZMX1dSSVRFX1JOX09Q
Q09ERTogICAgIGZvcm1hdCA9ICIgICAgTU9WLkwgUiVkLCBAUiVkXG4iOyBicmVhazsKKyAgICAg
ICAgY2FzZSBNT1ZMX1dSSVRFX1JOREVDX09QQ09ERTogIGZvcm1hdCA9ICIgICAgTU9WLkwgUiVk
LCBALVIlZFxuIjsgYnJlYWs7CisgICAgICAgIGNhc2UgTU9WTF9XUklURV9SMFJOX09QQ09ERTog
ICBmb3JtYXQgPSAiICAgIE1PVi5MIFIlZCwgQChSMCwgUiVkKVxuIjsgYnJlYWs7CisgICAgICAg
IGNhc2UgTU9WTF9SRUFEX1JNX09QQ09ERTogICAgICBmb3JtYXQgPSAiICAgIE1PVi5MIEBSJWQs
IFIlZFxuIjsgYnJlYWs7CisgICAgICAgIGNhc2UgTU9WTF9SRUFEX1JNSU5DX09QQ09ERTogICBm
b3JtYXQgPSAiICAgIE1PVi5MIEBSJWQrLCBSJWRcbiI7IGJyZWFrOworICAgICAgICBjYXNlIE1P
VkxfUkVBRF9SMFJNX09QQ09ERTogICAgZm9ybWF0ID0gIiAgICBNT1YuTCBAKFIwLCBSJWQpLCBS
JWRcbiI7IGJyZWFrOworICAgICAgICBjYXNlIE1VTExfT1BDT0RFOiAgICAgICAgICAgICAgZm9y
bWF0ID0gIiAgICBNVUwuTCBSJWQsIFIlZFxuIjsgYnJlYWs7CisgICAgICAgIGNhc2UgRE1VTExf
TF9PUENPREU6ICAgICAgICAgICBmb3JtYXQgPSAiICAgIERNVUxVLkwgUiVkLCBSJWRcbiI7IGJy
ZWFrOworICAgICAgICBjYXNlIERNVUxTTF9PUENPREU6ICAgICAgICAgICAgZm9ybWF0ID0gIiAg
ICBETVVMUy5MIFIlZCwgUiVkXG4iOyBicmVhazsKKyAgICAgICAgY2FzZSBORUdfT1BDT0RFOiAg
ICAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgTkVHIFIlZCwgUiVkXG4iOyBicmVhazsKKyAgICAg
ICAgY2FzZSBORUdDX09QQ09ERTogICAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgTkVHQyBSJWQs
IFIlZFxuIjsgYnJlYWs7CisgICAgICAgIGNhc2UgTk9UX09QQ09ERTogICAgICAgICAgICAgICBm
b3JtYXQgPSAiICAgIE5PVCBSJWQsIFIlZFxuIjsgYnJlYWs7CisgICAgICAgIGNhc2UgT1JfT1BD
T0RFOiAgICAgICAgICAgICAgICBmb3JtYXQgPSAiICAgIE9SIFIlZCwgUiVkXG4iOyBicmVhazsK
KyAgICAgICAgY2FzZSBTSEFEX09QQ09ERTogICAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgU0hB
RCBSJWQsIFIlZFxuIjsgYnJlYWs7CisgICAgICAgIGNhc2UgU0hMRF9PUENPREU6ICAgICAgICAg
ICAgICBmb3JtYXQgPSAiICAgIFNITEQgUiVkLCBSJWRcbiI7IGJyZWFrOworICAgICAgICBjYXNl
IFNVQl9PUENPREU6ICAgICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBTVUIgUiVkLCBSJWRcbiI7
IGJyZWFrOworICAgICAgICBjYXNlIFNVQkNfT1BDT0RFOiAgICAgICAgICAgICAgZm9ybWF0ID0g
IiAgICBTVUJDIFIlZCwgUiVkXG4iOyBicmVhazsKKyAgICAgICAgY2FzZSBTVUJWX09QQ09ERTog
ICAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgU1VCViBSJWQsIFIlZFxuIjsgYnJlYWs7CisgICAg
ICAgIGNhc2UgVFNUX09QQ09ERTogICAgICAgICAgICAgICBmb3JtYXQgPSAiICAgIFRTVCBSJWQs
IFIlZFxuIjsgYnJlYWs7CisgICAgICAgIGNhc2UgWE9SX09QQ09ERTogICAgICAgICAgICAgICBm
b3JtYXQgPSAiICAgIFhPUiBSJWQsIFIlZFxuIjticmVhazsKKyAgICAgICAgY2FzZSBNT1ZXX1dS
SVRFX1JOX09QQ09ERSA6ICAgIGZvcm1hdCA9ICIgICAgTU9WLlcgUiVkLCBAUiVkXG4iOyBicmVh
azsKKyAgICAgICAgY2FzZSBNT1ZXX1JFQURfUk1fT1BDT0RFIDogICAgIGZvcm1hdCA9ICIgICAg
TU9WLlcgQFIlZCwgUiVkXG4iOyBicmVhazsKKyAgICAgICAgY2FzZSBNT1ZXX1JFQURfUjBSTV9P
UENPREUgOiAgIGZvcm1hdCA9ICIgICAgTU9WLlcgQChSMCwgUiVkKSwgUiVkXG4iOyBicmVhazsK
KyAgICAgICAgY2FzZSBFWFRVV19PUENPREUgOiAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgRVhU
VS5XIFIlZCwgUiVkXG4iOyBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChmb3JtYXQp
IHsKKyAgICAgICAgICAgIHByaW50ZlN0ZG91dEluc3RyKGZvcm1hdCwgZ2V0Um0ob3BjKSwgZ2V0
Um4ob3BjKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBzd2l0
Y2ggKG9wYyAmIDB4ZjAwZikgeworICAgICAgICBjYXNlIEZTVUJfT1BDT0RFOiAgICAgICAgICAg
ICAgICAgIGZvcm1hdCA9ICIgICAgRlNVQiBGUiVkLCBGUiVkXG4iOyBicmVhazsKKyAgICAgICAg
Y2FzZSBGQUREX09QQ09ERTogICAgICAgICAgICAgICAgICBmb3JtYXQgPSAiICAgIEZBREQgRlIl
ZCwgRlIlZFxuIjsgYnJlYWs7CisgICAgICAgIGNhc2UgRkRJVl9PUENPREU6ICAgICAgICAgICAg
ICAgICAgZm9ybWF0ID0gIiAgICBGRElWIEZSJWQsIEZSJWRcbiI7IGJyZWFrOworICAgICAgICBj
YXNlIEZNVUxfT1BDT0RFOiAgICAgICAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgRE1VTEwgRlIl
ZCwgRlIlZFxuIjsgYnJlYWs7CisgICAgICAgIGNhc2UgRk1PVlNfUkVBRF9STV9PUENPREU6ICAg
ICAgICAgZm9ybWF0ID0gIiAgICBGTU9WLlMgQFIlZCwgRlIlZFxuIjsgYnJlYWs7CisgICAgICAg
IGNhc2UgRk1PVlNfV1JJVEVfUk5fREVDX09QQ09ERTogICAgZm9ybWF0ID0gIiAgICBGTU9WLlMg
RlIlZCwgQC1SJWRcbiI7IGJyZWFrOworICAgICAgICBjYXNlIEZNT1ZTX1JFQURfUk1fSU5DX09Q
Q09ERTogICAgIGZvcm1hdCA9ICIgICAgRk1PVi5TIEBSJWQrLCBGUiVkXG4iOyBicmVhazsKKyAg
ICAgICAgY2FzZSBGTU9WU19SRUFEX1IwUk1fT1BDT0RFOiAgICAgICBmb3JtYXQgPSAiICAgIEZN
T1YuUyBAKFIwLCBSJWQpLCBGUiVkXG4iOyBicmVhazsKKyAgICAgICAgY2FzZSBGTU9WU19XUklU
RV9STl9PUENPREU6ICAgICAgICBmb3JtYXQgPSAiICAgIEZNT1YuUyBGUiVkLCBAUiVkXG4iOyBi
cmVhazsKKyAgICAgICAgY2FzZSBGTU9WU19XUklURV9SMFJOX09QQ09ERTogICAgICBmb3JtYXQg
PSAiICAgIEZNT1YuUyBGUiVkLCBAKFIwLCBSJWQpXG4iOyBicmVhazsKKyAgICAgICAgY2FzZSBG
TU9WX09QQ09ERTogICAgICAgICAgICAgICAgICBmb3JtYXQgPSAiICAgIEZNT1YgRlIlZCwgRlIl
ZFxuIjsgYnJlYWs7CisgICAgICAgIGNhc2UgRkNNUEVRX09QQ09ERTogICAgICAgICAgICAgICAg
Zm9ybWF0ID0gIiAgICBGQ01QL0VRIEZSJWQsIEZSJWRcbiI7IGJyZWFrOworICAgICAgICBjYXNl
IEZDTVBHVF9PUENPREU6ICAgICAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgRkNNUC9HVCBGUiVk
LCBGUiVkXG4iOyBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgaWYgKGZvcm1hdCkgeworICAg
ICAgICAgICBpZiAoaXNkb3VibGVJbnN0KQorICAgICAgICAgICAgICAgcHJpbnRmU3Rkb3V0SW5z
dHIoZm9ybWF0LCBnZXREUm0ob3BjKSA8PCAxLCBnZXREUm4ob3BjKSA8PCAxKTsKKyAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgcHJpbnRmU3Rkb3V0SW5zdHIoZm9ybWF0LCBnZXRSbShv
cGMpLCBnZXRSbihvcGMpKTsKKyAgICAgICAgICAgcmV0dXJuOworICAgICAgIH0KKworICAgICAg
ICBzd2l0Y2ggKG9wYyAmIDB4ZmYwMCkgeworICAgICAgICBjYXNlIEJGX09QQ09ERTogICAgICAg
ICAgICAgICAgZm9ybWF0ID0gIiAgICBCRiAlZFxuIjsgIGJyZWFrOworICAgICAgICBjYXNlIEJG
U19PUENPREU6ICAgICAgICAgICAgICAgZm9ybWF0ID0gIiAgICAqQkYvUyAlZFxuIjsgIGJyZWFr
OworICAgICAgICBjYXNlIEFORElNTV9PUENPREU6ICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBB
TkQgIyVkLCBSMFxuIjsgIGJyZWFrOworICAgICAgICBjYXNlIEJUX09QQ09ERTogICAgICAgICAg
ICAgICAgZm9ybWF0ID0gIiAgICBCVCAlZFxuIjsgIGJyZWFrOworICAgICAgICBjYXNlIEJUU19P
UENPREU6ICAgICAgICAgICAgICAgZm9ybWF0ID0gIiAgICAqQlQvUyAlZFxuIjsgIGJyZWFrOwor
ICAgICAgICBjYXNlIENNUEVRSU1NX09QQ09ERTogICAgICAgICAgZm9ybWF0ID0gIiAgICBDTVAv
RVEgIyVkLCBSMFxuIjsgIGJyZWFrOworICAgICAgICBjYXNlIE1PVkJfV1JJVEVfT0ZGR0JSX09Q
Q09ERTogZm9ybWF0ID0gIiAgICBNT1YuQiBSMCwgQCglZCwgR0JSKVxuIjsgIGJyZWFrOworICAg
ICAgICBjYXNlIE1PVkJfUkVBRF9PRkZHQlJfT1BDT0RFOiAgZm9ybWF0ID0gIiAgICBNT1YuQiBA
KCVkLCBHQlIpLCBSMFxuIjsgIGJyZWFrOworICAgICAgICBjYXNlIE1PVkxfV1JJVEVfT0ZGR0JS
X09QQ09ERTogZm9ybWF0ID0gIiAgICBNT1YuTCBSMCwgQCglZCwgR0JSKVxuIjsgIGJyZWFrOwor
ICAgICAgICBjYXNlIE1PVkxfUkVBRF9PRkZHQlJfT1BDT0RFOiAgZm9ybWF0ID0gIiAgICBNT1Yu
TCBAKCVkLCBHQlIpLCBSMFxuIjsgIGJyZWFrOworICAgICAgICBjYXNlIE1PVkFfUkVBRF9PRkZQ
Q19PUENPREU6ICAgZm9ybWF0ID0gIiAgICBNT1ZBIEAoJWQsIFBDKSwgUjBcbiI7ICBicmVhazsK
KyAgICAgICAgY2FzZSBPUklNTV9PUENPREU6ICAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgT1Ig
IyVkLCBSMFxuIjsgIGJyZWFrOworICAgICAgICBjYXNlIE9SQklNTV9PUENPREU6ICAgICAgICAg
ICAgZm9ybWF0ID0gIiAgICBPUi5CICMlZCwgQChSMCwgR0JSKVxuIjsgIGJyZWFrOworICAgICAg
ICBjYXNlIFRTVElNTV9PUENPREU6ICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBUU1QgIyVkLCBS
MFxuIjsgIGJyZWFrOworICAgICAgICBjYXNlIFRTVEJfT1BDT0RFOiAgICAgICAgICAgICAgZm9y
bWF0ID0gIiAgICBUU1QuQiAlZCwgQChSMCwgR0JSKVxuIjsgIGJyZWFrOworICAgICAgICBjYXNl
IFhPUklNTV9PUENPREU6ICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBYT1IgIyVkLCBSMFxuIjsg
IGJyZWFrOworICAgICAgICBjYXNlIFhPUkJfT1BDT0RFOiAgICAgICAgICAgICAgZm9ybWF0ID0g
IiAgICBYT1IuQiAlZCwgQChSMCwgR0JSKVxuIjsgYnJlYWs7CisgICAgICAgIH0KKworICAgICAg
ICBpZiAoZm9ybWF0KSB7CisgICAgICAgICAgICBwcmludGZTdGRvdXRJbnN0cihmb3JtYXQsIGdl
dEltbTgob3BjKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBz
d2l0Y2ggKG9wYyAmIDB4ZmYwMCkgeworICAgICAgICBjYXNlIE1PVkJfV1JJVEVfT0ZGUk5fT1BD
T0RFOiAgZm9ybWF0ID0gIiAgICBNT1YuQiBSMCwgQCglZCwgUiVkKVxuIjsgYnJlYWs7CisgICAg
ICAgIGNhc2UgTU9WQl9SRUFEX09GRlJNX09QQ09ERTogICBmb3JtYXQgPSAiICAgIE1PVi5CIEAo
JWQsIFIlZCksIFIwXG4iOyBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChmb3JtYXQp
IHsKKyAgICAgICAgICAgIHByaW50ZlN0ZG91dEluc3RyKGZvcm1hdCwgZ2V0RGlzcChvcGMpLCBn
ZXRSbShvcGMpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIHN3
aXRjaCAob3BjICYgMHhmMDAwKSB7CisgICAgICAgIGNhc2UgQlJBX09QQ09ERTogIGZvcm1hdCA9
ICIgICAgKkJSQSAlZFxuIjsgYnJlYWs7CisgICAgICAgIGNhc2UgQlNSX09QQ09ERTogIGZvcm1h
dCA9ICIgICAgKkJTUiAlZFxuIjsgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZm9y
bWF0KSB7CisgICAgICAgICAgICBwcmludGZTdGRvdXRJbnN0cihmb3JtYXQsIGdldEltbTEyKG9w
YykpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgc3dpdGNoIChv
cGMgJiAweGYwMDApIHsKKyAgICAgICAgY2FzZSBNT1ZMX1JFQURfT0ZGUENfT1BDT0RFOiAgZm9y
bWF0ID0gIiAgICBNT1YuTCBAKCVkLCBQQyksIFIlZFxuIjsgYnJlYWs7CisgICAgICAgIGNhc2Ug
QURESU1NX09QQ09ERTogICAgICAgICAgIGZvcm1hdCA9ICIgICAgQUREICMlZCwgUiVkXG4iOyBi
cmVhazsKKyAgICAgICAgY2FzZSBNT1ZJTU1fT1BDT0RFOiAgICAgICAgICAgZm9ybWF0ID0gIiAg
ICBNT1YgIyVkLCBSJWRcbiI7IGJyZWFrOworICAgICAgICBjYXNlIE1PVldfUkVBRF9PRkZQQ19P
UENPREU6ICBmb3JtYXQgPSAiICAgIE1PVi5XIEAoJWQsIFBDKSwgUiVkXG4iOyBicmVhazsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmIChmb3JtYXQpIHsKKyAgICAgICAgICAgIHByaW50ZlN0ZG91
dEluc3RyKGZvcm1hdCwgZ2V0SW1tOChvcGMpLCBnZXRSbihvcGMpKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorCisgICAgICAgIHN3aXRjaCAob3BjICYgMHhmMDAwKSB7CisgICAg
ICAgIGNhc2UgTU9WTF9XUklURV9PRkZSTl9PUENPREU6ICBmb3JtYXQgPSAiICAgIE1PVi5MIFIl
ZCwgQCglZCwgUiVkKVxuIjsKKyAgICAgICAgICAgIHByaW50ZlN0ZG91dEluc3RyKGZvcm1hdCwg
Z2V0Um0ob3BjKSwgZ2V0RGlzcChvcGMpLCBnZXRSbihvcGMpKTsgYnJlYWs7CisgICAgICAgIGNh
c2UgTU9WTF9SRUFEX09GRlJNX09QQ09ERTogICBmb3JtYXQgPSAiICAgIE1PVi5MIEAoJWQsIFIl
ZCksIFIlZFxuIjsKKyAgICAgICAgICAgIHByaW50ZlN0ZG91dEluc3RyKGZvcm1hdCwgZ2V0RGlz
cChvcGMpLCBnZXRSbShvcGMpLCBnZXRSbihvcGMpKTsgYnJlYWs7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBzdGF0aWMgdm9pZCBwcmludGZTdGRvdXRJbnN0cihjb25zdCBjaGFyKiBmb3JtYXQs
IC4uLikKKyAgICB7CisgICAgICAgIGlmIChkdW1wTmF0aXZlQ29kZSkgeworICAgICAgICAgICAg
dmFfbGlzdCBhcmdzOworICAgICAgICAgICAgdmFfc3RhcnQoYXJncywgZm9ybWF0KTsKKyAgICAg
ICAgICAgIHZwcmludGZTdGRvdXRJbnN0cihmb3JtYXQsIGFyZ3MpOworICAgICAgICAgICAgdmFf
ZW5kKGFyZ3MpOworICAgICAgICB9CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgdnByaW50ZlN0
ZG91dEluc3RyKGNvbnN0IGNoYXIqIGZvcm1hdCwgdmFfbGlzdCBhcmdzKQorICAgIHsKKyAgICAg
ICAgaWYgKGR1bXBOYXRpdmVDb2RlKQorICAgICAgICAgICAgdmZwcmludGYoc3Rkb3V0LCBmb3Jt
YXQsIGFyZ3MpOworICAgIH0KKyNlbHNlCitzdGF0aWMgdm9pZCBwcmludEluc3RyKHVpbnQxNl90
IG9wYywgaW50IHNpemUsIGJvb2wgaXNkb3VibGVJbnN0ID0gdHJ1ZSkge307CisjZW5kaWYKKwor
ICAgIHByaXZhdGU6CisgICAgICAgIFNINEJ1ZmZlciBtX2J1ZmZlcjsKK307CisKK30gLy8gbmFt
ZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxFKEFTU0VNQkxFUikgJiYgQ1BVKFNINCkKKwor
I2VuZGlmIC8vIFNINEFzc2VtYmxlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUveWFyci9ZYXJySklULmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJKSVQu
Y3BwCmluZGV4IGUzNGU2ZjQuLmY0Mzg5MTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS95YXJyL1lhcnJKSVQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lh
cnJKSVQuY3BwCkBAIC01OSw2ICs1OSwxNiBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIDogcHJpdmF0
ZSBNYWNyb0Fzc2VtYmxlciB7CiAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgcmVnVDEgPSBN
SVBTUmVnaXN0ZXJzOjp0NTsKIAogICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIHJldHVyblJl
Z2lzdGVyID0gTUlQU1JlZ2lzdGVyczo6djA7CisjZWxpZiBDUFUoU0g0KQorICAgIHN0YXRpYyBj
b25zdCBSZWdpc3RlcklEIGlucHV0ID0gU0g0UmVnaXN0ZXJzOjpyNDsKKyAgICBzdGF0aWMgY29u
c3QgUmVnaXN0ZXJJRCBpbmRleCA9IFNINFJlZ2lzdGVyczo6cjU7CisgICAgc3RhdGljIGNvbnN0
IFJlZ2lzdGVySUQgbGVuZ3RoID0gU0g0UmVnaXN0ZXJzOjpyNjsKKyAgICBzdGF0aWMgY29uc3Qg
UmVnaXN0ZXJJRCBvdXRwdXQgPSBTSDRSZWdpc3RlcnM6OnI3OworCisgICAgc3RhdGljIGNvbnN0
IFJlZ2lzdGVySUQgcmVnVDAgPSBTSDRSZWdpc3RlcnM6OnIwOworICAgIHN0YXRpYyBjb25zdCBS
ZWdpc3RlcklEIHJlZ1QxID0gU0g0UmVnaXN0ZXJzOjpyMTsKKworICAgIHN0YXRpYyBjb25zdCBS
ZWdpc3RlcklEIHJldHVyblJlZ2lzdGVyID0gU0g0UmVnaXN0ZXJzOjpyMDsKICNlbGlmIENQVShY
ODYpCiAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgaW5wdXQgPSBYODZSZWdpc3RlcnM6OmVh
eDsKICAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCBpbmRleCA9IFg4NlJlZ2lzdGVyczo6ZWR4
OwpAQCAtMjE3OSw2ICsyMTg5LDkgQEAgY2xhc3MgWWFyckdlbmVyYXRvciA6IHByaXZhdGUgTWFj
cm9Bc3NlbWJsZXIgewogICAgICAgICBwdXNoKEFSTVJlZ2lzdGVyczo6cjgpOyAvLyBzY3JhdGNo
IHJlZ2lzdGVyCiAjZW5kaWYKICAgICAgICAgbW92ZShBUk1SZWdpc3RlcnM6OnIzLCBvdXRwdXQp
OworI2VsaWYgQ1BVKFNINCkKKyAgICAgICAgcHVzaChTSDRSZWdpc3RlcnM6OnIxMSk7CisgICAg
ICAgIHB1c2goU0g0UmVnaXN0ZXJzOjpyMTMpOwogI2VsaWYgQ1BVKE1JUFMpCiAgICAgICAgIC8v
IERvIG5vdGhpbmcuCiAjZW5kaWYKQEAgLTIyMDEsNiArMjIxNCw5IEBAIGNsYXNzIFlhcnJHZW5l
cmF0b3IgOiBwcml2YXRlIE1hY3JvQXNzZW1ibGVyIHsKICAgICAgICAgcG9wKEFSTVJlZ2lzdGVy
czo6cjYpOwogICAgICAgICBwb3AoQVJNUmVnaXN0ZXJzOjpyNSk7CiAgICAgICAgIHBvcChBUk1S
ZWdpc3RlcnM6OnI0KTsKKyNlbGlmIENQVShTSDQpCisgICAgICAgIHBvcChTSDRSZWdpc3RlcnM6
OnIxMyk7CisgICAgICAgIHBvcChTSDRSZWdpc3RlcnM6OnIxMSk7CiAjZWxpZiBDUFUoTUlQUykK
ICAgICAgICAgLy8gRG8gbm90aGluZwogI2VuZGlmCi0tIAoxLjcuMi4zCgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>84424</attachid>
            <date>2011-03-02 09:10:46 -0800</date>
            <delta_ts>2011-03-04 05:08:49 -0800</delta_ts>
            <desc>YARR JIT </desc>
            <filename>0001-ADD-YARR-JIT-SH4.patch</filename>
            <type>text/plain</type>
            <size>115738</size>
            <attacher name="thouraya">thouraya.andolsi</attacher>
            
              <data encoding="base64">RnJvbSA3NzU2MzRmMDBiNjkyMzBiOTdmZjFiNjcwZjdlMTcxYjFkNDFkYTQyIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBUaG91cmF5YSBBTkRPTFNJIDx0aG91cmF5YS5hbmRvbHNpQHN0
LmNvbT4KRGF0ZTogV2VkLCAyIE1hciAyMDExIDE3OjA5OjAyICswMTAwClN1YmplY3Q6IFtQQVRD
SF0gQUREIFlBUlIgSklUIFNINC4KCi0tLQogU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxv
ZyAgICAgICAgICAgICAgICAgICAgfCAgIDE3ICsKIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVt
YWtlZmlsZS5hbSAgICAgICAgICAgICAgIHwgICAgNCArCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmggICB8ICAgIDYgKwogLi4uL0phdmFTY3JpcHRDb3Jl
L2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclNINC5jcHAgfCAgIDg0ICsKIC4uLi9KYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJTSDQuaCAgIHwgMTQzMSArKysrKysrKysrKysr
KwogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9TSDRBc3NlbWJsZXIuY3BwICAgfCAg
IDQwICsKIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvU0g0QXNzZW1ibGVyLmggICAg
IHwgMjAzNyArKysrKysrKysrKysrKysrKysrKwogU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIv
WWFyckpJVC5jcHAgICAgICAgICAgICAgfCAgIDE2ICsKIDggZmlsZXMgY2hhbmdlZCwgMzYzNSBp
bnNlcnRpb25zKCspLCAwIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJTSDQuY3BwCiBjcmVhdGUgbW9k
ZSAxMDA2NDQgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclNI
NC5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9T
SDRBc3NlbWJsZXIuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Fzc2VtYmxlci9TSDRBc3NlbWJsZXIuaAoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDk0
MzcyOWIuLmUzNWExMDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VM
b2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwIEBA
CisyMDExLTAzLTAyICBUaG91cmF5YSBBTkRPTFNJICA8dGhvdXJheWEuYW5kb2xzaUBzdC5jb20+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU0g0IEpJ
VCBTVVBQT1JULgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NDQzMjkuCisKKyAgICAgICAgQWRkIFlBUlIgc3VwcG9ydCBmb3IgU0g0IHBsYXRmb3JtcyAo
ZGlzYWJsZWQgYnkgZGVmYXVsdCkuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAg
ICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaDoKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFj
cm9Bc3NlbWJsZXJTSDQuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3Nl
bWJsZXJTSDQuaDogQWRkZWQuCisgICAgICAgICogYXNzZW1ibGVyL1NINEFzc2VtYmxlci5jcHA6
IEFkZGVkLgorICAgICAgICAqIGFzc2VtYmxlci9TSDRBc3NlbWJsZXIuaDogQWRkZWQuCisgICAg
ICAgICogeWFyci9ZYXJySklULmNwcDoKKwogMjAxMS0wMy0wMiAgQWRhbSBCYXJ0aCAgPGFiYXJ0
aEB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERpbWl0cmkgR2xhemtvdi4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5hbSBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5hbQppbmRleCAxYWZiOTZjLi4zMzk3NWVkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUuYW0KKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtCkBAIC05MCw2ICs5MCwxMCBAQCBqYXZhc2Ny
aXB0Y29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01h
Y3JvQXNzZW1ibGVyWDg2XzY0LmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
TWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9NYWNyb0Fzc2VtYmxlclg4Ni5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL01hY3JvQXNzZW1ibGVyU0g0LmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvTWFjcm9Bc3NlbWJsZXJTSDQuY3BwIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL1NINEFzc2VtYmxlci5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1NI
NEFzc2VtYmxlci5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvUmVwYXRj
aEJ1ZmZlci5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1g4NkFzc2VtYmxl
ci5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcCBcCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVy
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmgKaW5k
ZXggZmExNjVkZS4uOWFhMjczOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9NYWNyb0Fzc2VtYmxlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvTWFjcm9Bc3NlbWJsZXIuaApAQCAtNTAsNiArNTAsMTIgQEAgbmFtZXNwYWNlIEpTQyB7
IHR5cGVkZWYgTWFjcm9Bc3NlbWJsZXJYODYgTWFjcm9Bc3NlbWJsZXJCYXNlOyB9OwogI2luY2x1
ZGUgIk1hY3JvQXNzZW1ibGVyWDg2XzY0LmgiCiBuYW1lc3BhY2UgSlNDIHsgdHlwZWRlZiBNYWNy
b0Fzc2VtYmxlclg4Nl82NCBNYWNyb0Fzc2VtYmxlckJhc2U7IH07CiAKKyNlbGlmIENQVShTSDQp
CisjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJTSDQuaCIKK25hbWVzcGFjZSBKU0MgewordHlwZWRl
ZiBNYWNyb0Fzc2VtYmxlclNINCBNYWNyb0Fzc2VtYmxlckJhc2U7Cit9OworCiAjZWxzZQogI2Vy
cm9yICJUaGUgTWFjcm9Bc3NlbWJsZXIgaXMgbm90IHN1cHBvcnRlZCBvbiB0aGlzIHBsYXRmb3Jt
LiIKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9N
YWNyb0Fzc2VtYmxlclNINC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01h
Y3JvQXNzZW1ibGVyU0g0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44
Nzk3MDcyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9NYWNyb0Fzc2VtYmxlclNINC5jcHAKQEAgLTAsMCArMSw4NCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMSBTVE1pY3JvZWxlY3Ryb25pY3MuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KworI2lmIEVOQUJMRShBU1NFTUJMRVIpICYmIENQVShTSDQpCisKKyNpbmNsdWRlICJNYWNyb0Fz
c2VtYmxlclNINC5oIgorCisjaW5jbHVkZSAiU0g0QXNzZW1ibGVyLmgiCisKK25hbWVzcGFjZSBK
U0MgeworY29uc3QgQ29uZGl0aW9uIE1hY3JvQXNzZW1ibGVyU0g0OjpFcXVhbCA9IFNINEFzc2Vt
Ymxlcjo6RVE7Citjb25zdCBDb25kaXRpb24gTWFjcm9Bc3NlbWJsZXJTSDQ6Ok5vdEVxdWFsID0g
U0g0QXNzZW1ibGVyOjpORTsKK2NvbnN0IENvbmRpdGlvbiBNYWNyb0Fzc2VtYmxlclNINDo6R3Jl
YXRlclRoYW4gPSBTSDRBc3NlbWJsZXI6OkdUOworY29uc3QgQ29uZGl0aW9uIE1hY3JvQXNzZW1i
bGVyU0g0OjpHcmVhdGVyVGhhbk9yRXF1YWwgPSBTSDRBc3NlbWJsZXI6OkdFOworY29uc3QgQ29u
ZGl0aW9uIE1hY3JvQXNzZW1ibGVyU0g0OjpMZXNzVGhhbiA9IFNINEFzc2VtYmxlcjo6TFQ7Citj
b25zdCBDb25kaXRpb24gTWFjcm9Bc3NlbWJsZXJTSDQ6Okxlc3NUaGFuT3JFcXVhbCA9IFNINEFz
c2VtYmxlcjo6TEU7Citjb25zdCBDb25kaXRpb24gTWFjcm9Bc3NlbWJsZXJTSDQ6OlVHcmVhdGVy
VGhhbiA9IFNINEFzc2VtYmxlcjo6SEk7Citjb25zdCBDb25kaXRpb24gTWFjcm9Bc3NlbWJsZXJT
SDQ6OlVHcmVhdGVyVGhhbk9yRXF1YWwgPSBTSDRBc3NlbWJsZXI6OkhTOworY29uc3QgQ29uZGl0
aW9uIE1hY3JvQXNzZW1ibGVyU0g0OjpVTGVzc1RoYW4gPSBTSDRBc3NlbWJsZXI6OkxJOworY29u
c3QgQ29uZGl0aW9uIE1hY3JvQXNzZW1ibGVyU0g0OjpVTGVzc1RoYW5PckVxdWFsID0gU0g0QXNz
ZW1ibGVyOjpMUzsKK2NvbnN0IENvbmRpdGlvbiBNYWNyb0Fzc2VtYmxlclNINDo6WmVybyA9IFNI
NEFzc2VtYmxlcjo6RVE7Citjb25zdCBDb25kaXRpb24gTWFjcm9Bc3NlbWJsZXJTSDQ6Ok5vblpl
cm8gPSBTSDRBc3NlbWJsZXI6Ok5FOworY29uc3QgQ29uZGl0aW9uIE1hY3JvQXNzZW1ibGVyU0g0
OjpPdmVyZmxvdyA9IFNINEFzc2VtYmxlcjo6T0Y7Citjb25zdCBDb25kaXRpb24gTWFjcm9Bc3Nl
bWJsZXJTSDQ6OkFib3ZlID0gU0g0QXNzZW1ibGVyOjpISTsKK2NvbnN0IENvbmRpdGlvbiBNYWNy
b0Fzc2VtYmxlclNINDo6QWJvdmVPckVxdWFsID0gU0g0QXNzZW1ibGVyOjpIUzsKK2NvbnN0IENv
bmRpdGlvbiBNYWNyb0Fzc2VtYmxlclNINDo6QmVsb3cgPSBTSDRBc3NlbWJsZXI6OkxJOworY29u
c3QgQ29uZGl0aW9uIE1hY3JvQXNzZW1ibGVyU0g0OjpCZWxvd09yRXF1YWwgPSBTSDRBc3NlbWJs
ZXI6OkxTOworY29uc3QgQ29uZGl0aW9uIE1hY3JvQXNzZW1ibGVyU0g0OjpEb3VibGVFcXVhbCA9
IFNINEFzc2VtYmxlcjo6RVE7Citjb25zdCBDb25kaXRpb24gTWFjcm9Bc3NlbWJsZXJTSDQ6OkRv
dWJsZU5vdEVxdWFsID0gU0g0QXNzZW1ibGVyOjpORTsKK2NvbnN0IENvbmRpdGlvbiBNYWNyb0Fz
c2VtYmxlclNINDo6RG91YmxlR3JlYXRlclRoYW4gPSBTSDRBc3NlbWJsZXI6OkdUOworY29uc3Qg
Q29uZGl0aW9uIE1hY3JvQXNzZW1ibGVyU0g0OjpEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWwgPSBT
SDRBc3NlbWJsZXI6OkdFOworY29uc3QgQ29uZGl0aW9uIE1hY3JvQXNzZW1ibGVyU0g0OjpEb3Vi
bGVMZXNzVGhhbiA9IFNINEFzc2VtYmxlcjo6TFQ7Citjb25zdCBDb25kaXRpb24gTWFjcm9Bc3Nl
bWJsZXJTSDQ6OkRvdWJsZUxlc3NUaGFuT3JFcXVhbCA9IFNINEFzc2VtYmxlcjo6TEU7Citjb25z
dCBDb25kaXRpb24gTWFjcm9Bc3NlbWJsZXJTSDQ6OkRvdWJsZUVxdWFsT3JVbm9yZGVyZWQgPSBT
SDRBc3NlbWJsZXI6OkVRVTsKK2NvbnN0IENvbmRpdGlvbiBNYWNyb0Fzc2VtYmxlclNINDo6RG91
YmxlTm90RXF1YWxPclVub3JkZXJlZCA9IFNINEFzc2VtYmxlcjo6TkVVOworY29uc3QgQ29uZGl0
aW9uIE1hY3JvQXNzZW1ibGVyU0g0OjpEb3VibGVHcmVhdGVyVGhhbk9yVW5vcmRlcmVkID0gU0g0
QXNzZW1ibGVyOjpHVFU7Citjb25zdCBDb25kaXRpb24gTWFjcm9Bc3NlbWJsZXJTSDQ6OkRvdWJs
ZUdyZWF0ZXJUaGFuT3JFcXVhbE9yVW5vcmRlcmVkID0gU0g0QXNzZW1ibGVyOjpHRVU7Citjb25z
dCBDb25kaXRpb24gTWFjcm9Bc3NlbWJsZXJTSDQ6OkRvdWJsZUxlc3NUaGFuT3JVbm9yZGVyZWQg
PSBTSDRBc3NlbWJsZXI6OkxUVTsKK2NvbnN0IENvbmRpdGlvbiBNYWNyb0Fzc2VtYmxlclNINDo6
RG91YmxlTGVzc1RoYW5PckVxdWFsT3JVbm9yZGVyZWQgPSBTSDRBc3NlbWJsZXI6OkxFVTsKK2Nv
bnN0IENvbmRpdGlvbiBNYWNyb0Fzc2VtYmxlclNINDo6U2lnbmVkID0gU0g0QXNzZW1ibGVyOjpT
STsKKwordm9pZCBNYWNyb0Fzc2VtYmxlclNINDo6bGlua0NhbGwodm9pZCogY29kZSwgQ2FsbCBj
YWxsLCBGdW5jdGlvblB0ciBmdW5jdGlvbikKK3sKKyAgICBTSDRBc3NlbWJsZXI6OmxpbmtDYWxs
KGNvZGUsIGNhbGwubV9qbXAsIGZ1bmN0aW9uLnZhbHVlKCkpOworfQorCit2b2lkIE1hY3JvQXNz
ZW1ibGVyU0g0OjpyZXBhdGNoQ2FsbChDb2RlTG9jYXRpb25DYWxsIGNhbGwsIENvZGVMb2NhdGlv
bkxhYmVsIGRlc3RpbmF0aW9uKQoreworICAgIFNINEFzc2VtYmxlcjo6cmVsaW5rQ2FsbChjYWxs
LmRhdGFMb2NhdGlvbigpLCBkZXN0aW5hdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKTsKK30KKwor
dm9pZCBNYWNyb0Fzc2VtYmxlclNINDo6cmVwYXRjaENhbGwoQ29kZUxvY2F0aW9uQ2FsbCBjYWxs
LCBGdW5jdGlvblB0ciBkZXN0aW5hdGlvbikKK3sKKyAgICBTSDRBc3NlbWJsZXI6OnJlbGlua0Nh
bGwoY2FsbC5kYXRhTG9jYXRpb24oKSwgZGVzdGluYXRpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxFKEFTU0VNQkxFUikK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJs
ZXJTSDQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJT
SDQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNmQ4NTM3Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxl
clNINC5oCkBAIC0wLDAgKzEsMTQzMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEx
IFNUTWljcm9lbGVjdHJvbmljcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKworI2lmbmRlZiBNYWNyb0Fzc2VtYmxlclNINF9oCisj
ZGVmaW5lIE1hY3JvQXNzZW1ibGVyU0g0X2gKKworI2luY2x1ZGUgImFzc2VydC5oIgorI2luY2x1
ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorI2lmIEVOQUJMRShBU1NFTUJMRVIpCisKKyNpbmNsdWRlICJB
YnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgiCisjaW5jbHVkZSAiU0g0QXNzZW1ibGVyLmgiCisKK25h
bWVzcGFjZSBKU0MgewordHlwZWRlZiBTSDRBc3NlbWJsZXI6OkNvbmRpdGlvbiBDb25kaXRpb247
CisKK2NsYXNzIE1hY3JvQXNzZW1ibGVyU0g0IDogcHVibGljIEFic3RyYWN0TWFjcm9Bc3NlbWJs
ZXI8U0g0QXNzZW1ibGVyPiB7CitwdWJsaWM6CisKKyAgICB0eXBlZGVmIFNINEFzc2VtYmxlcjo6
RlBSZWdpc3RlcklEIEZQUmVnaXN0ZXJJRDsKKworICAgIHN0YXRpYyBjb25zdCBDb25kaXRpb24g
RXF1YWw7CisgICAgc3RhdGljIGNvbnN0IENvbmRpdGlvbiBOb3RFcXVhbDsKKyAgICBzdGF0aWMg
Y29uc3QgQ29uZGl0aW9uIEdyZWF0ZXJUaGFuOworICAgIHN0YXRpYyBjb25zdCBDb25kaXRpb24g
R3JlYXRlclRoYW5PckVxdWFsOworICAgIHN0YXRpYyBjb25zdCBDb25kaXRpb24gTGVzc1RoYW47
CisgICAgc3RhdGljIGNvbnN0IENvbmRpdGlvbiBMZXNzVGhhbk9yRXF1YWw7CisgICAgc3RhdGlj
IGNvbnN0IENvbmRpdGlvbiBVR3JlYXRlclRoYW47CisgICAgc3RhdGljIGNvbnN0IENvbmRpdGlv
biBVR3JlYXRlclRoYW5PckVxdWFsOworICAgIHN0YXRpYyBjb25zdCBDb25kaXRpb24gVUxlc3NU
aGFuOworICAgIHN0YXRpYyBjb25zdCBDb25kaXRpb24gVUxlc3NUaGFuT3JFcXVhbDsKKyAgICBz
dGF0aWMgY29uc3QgQ29uZGl0aW9uIFplcm87CisgICAgc3RhdGljIGNvbnN0IENvbmRpdGlvbiBO
b25aZXJvOworICAgIHN0YXRpYyBjb25zdCBDb25kaXRpb24gT3ZlcmZsb3c7CisgICAgc3RhdGlj
IGNvbnN0IENvbmRpdGlvbiBBYm92ZTsKKyAgICBzdGF0aWMgY29uc3QgQ29uZGl0aW9uIEFib3Zl
T3JFcXVhbDsKKyAgICBzdGF0aWMgY29uc3QgQ29uZGl0aW9uIEJlbG93OworICAgIHN0YXRpYyBj
b25zdCBDb25kaXRpb24gQmVsb3dPckVxdWFsOworICAgIHN0YXRpYyBjb25zdCBDb25kaXRpb24g
RG91YmxlRXF1YWw7CisgICAgc3RhdGljIGNvbnN0IENvbmRpdGlvbiBEb3VibGVOb3RFcXVhbDsK
KyAgICBzdGF0aWMgY29uc3QgQ29uZGl0aW9uIERvdWJsZUdyZWF0ZXJUaGFuOworICAgIHN0YXRp
YyBjb25zdCBDb25kaXRpb24gRG91YmxlR3JlYXRlclRoYW5PckVxdWFsOworICAgIHN0YXRpYyBj
b25zdCBDb25kaXRpb24gRG91YmxlTGVzc1RoYW47CisgICAgc3RhdGljIGNvbnN0IENvbmRpdGlv
biBEb3VibGVMZXNzVGhhbk9yRXF1YWw7CisgICAgc3RhdGljIGNvbnN0IENvbmRpdGlvbiBEb3Vi
bGVFcXVhbE9yVW5vcmRlcmVkOworICAgIHN0YXRpYyBjb25zdCBDb25kaXRpb24gRG91YmxlTm90
RXF1YWxPclVub3JkZXJlZDsKKyAgICBzdGF0aWMgY29uc3QgQ29uZGl0aW9uIERvdWJsZUdyZWF0
ZXJUaGFuT3JVbm9yZGVyZWQ7CisgICAgc3RhdGljIGNvbnN0IENvbmRpdGlvbiBEb3VibGVHcmVh
dGVyVGhhbk9yRXF1YWxPclVub3JkZXJlZDsKKyAgICBzdGF0aWMgY29uc3QgQ29uZGl0aW9uIERv
dWJsZUxlc3NUaGFuT3JVbm9yZGVyZWQ7CisgICAgc3RhdGljIGNvbnN0IENvbmRpdGlvbiBEb3Vi
bGVMZXNzVGhhbk9yRXF1YWxPclVub3JkZXJlZDsKKyAgICBzdGF0aWMgY29uc3QgQ29uZGl0aW9u
IFNpZ25lZDsKKworICAgIHN0YXRpYyBjb25zdCBTY2FsZSBTY2FsZVB0ciA9IFRpbWVzRm91cjsK
KyAgICBzdGF0aWMgY29uc3QgRlBSZWdpc3RlcklEIGZzY3JhdGNoID0gU0g0UmVnaXN0ZXJzOjpm
cjEwOworICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIHN0YWNrUG9pbnRlclJlZ2lzdGVyID0g
U0g0UmVnaXN0ZXJzOjpzcDsKKyAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCBsaW5rUmVnaXN0
ZXIgPSBTSDRSZWdpc3RlcnM6OnByOworICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIHNjcmF0
Y2hSZWczID0gU0g0UmVnaXN0ZXJzOjpyMTM7CisKKyAgICBSZWdpc3RlcklEIGNsYWltU2NyYXRj
aCgpCisgICAgeworICAgICAgICByZXR1cm4gbV9hc3NlbWJsZXIuY2xhaW1TY3JhdGNoKCk7Cisg
ICAgfQorCisgICAgdm9pZCByZWxlYXNlU2NyYXRjaChSZWdpc3RlcklEIHJlZykKKyAgICB7Cisg
ICAgICAgIG1fYXNzZW1ibGVyLnJlbGVhc2VTY3JhdGNoKHJlZyk7CisgICAgfQorCisgICAgLy8g
SW50ZWdlciBhcml0aG1ldGljIG9wZXJhdGlvbnMKKworICAgIHZvaWQgYWRkMzIoUmVnaXN0ZXJJ
RCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmFkZGxS
ZWdSZWcoc3JjLCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIGFkZDMyKEltbTMyIGltbSwgUmVn
aXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuYWRkbEltbVJlZyhpbW0u
bV92YWx1ZSwgZGVzdCk7CisgICAgfQorCisgICAgdm9pZCBhZGQzMihJbW0zMiBpbW0sIFJlZ2lz
dGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBpZiAoc3JjICE9IGRl
c3QpCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5tb3ZsUmVnUmVnKHNyYywgZGVzdCk7CisgICAg
ICAgIG1fYXNzZW1ibGVyLmFkZGxJbW1SZWcoaW1tLm1fdmFsdWUsIGRlc3QpOworICAgIH0KKwor
ICAgIHZvaWQgYWRkMzIoSW1tMzIgaW1tLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAg
ICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBsb2FkMzIoYWRkcmVz
cywgc2NyKTsKKyAgICAgICAgYWRkMzIoaW1tLCBzY3IpOworICAgICAgICBzdG9yZTMyKHNjciwg
YWRkcmVzcyk7CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgfQorCisgICAgdm9p
ZCBhZGQzMihBZGRyZXNzIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgUmVn
aXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgbG9hZDMyKHNyYywgc2NyKTsK
KyAgICAgICAgbV9hc3NlbWJsZXIuYWRkbFJlZ1JlZyhzY3IsIGRlc3QpOworICAgICAgICByZWxl
YXNlU2NyYXRjaChzY3IpOworICAgIH0KKworICAgIHZvaWQgYW5kMzIoUmVnaXN0ZXJJRCBzcmMs
IFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmFuZGxSZWdSZWco
c3JjLCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIGFuZDMyKEltbTMyIGltbSwgUmVnaXN0ZXJJ
RCBkZXN0KQorICAgIHsKKyAgICAgICAgaWYgKChpbW0ubV92YWx1ZSA8PSAyNTUpICYmIChpbW0u
bV92YWx1ZSA+PSAwKSAmJiAoZGVzdCA9PSBTSDRSZWdpc3RlcnM6OnIwKSkgeworICAgICAgICAg
ICAgbV9hc3NlbWJsZXIuYW5kbEltbThyKGltbS5tX3ZhbHVlLCBkZXN0KTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3Jh
dGNoKCk7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvYWRDb25zdGFudCgoaW1tLm1fdmFsdWUpLCBz
Y3IpOworICAgICAgICBtX2Fzc2VtYmxlci5hbmRsUmVnUmVnKHNjciwgZGVzdCk7CisgICAgICAg
IHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgfQorCisgICAgdm9pZCBsc2hpZnQzMihSZWdpc3Rl
cklEIHNoaWZ0YW1vdW50LCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2Vt
Ymxlci5zaGxsUmVnUmVnKGRlc3QsIHNoaWZ0YW1vdW50KTsKKyAgICB9CisKKyAgICB2b2lkIHJz
aGlmdDMyKGludCBpbW0sIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIFJlZ2lzdGVy
SUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvYWRDb25zdGFu
dCgtaW1tLCBzY3IpOworICAgICAgICBtX2Fzc2VtYmxlci5zaGFSZWdSZWcoZGVzdCwgc2NyKTsK
KyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICB9CisKKyAgICB2b2lkIGxzaGlmdDMy
KEltbTMyIGltbSwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgaWYgKChpbW0ubV92
YWx1ZSA9PSAxKSB8fCAoaW1tLm1fdmFsdWUgPT0gMikgfHwgKGltbS5tX3ZhbHVlID09IDgpIHx8
IChpbW0ubV92YWx1ZSA9PSAxNikpIHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnNobGxJbW04
cihpbW0ubV92YWx1ZSwgZGVzdCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwor
ICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBtX2Fzc2Vt
Ymxlci5sb2FkQ29uc3RhbnQoaW1tLm1fdmFsdWUsIHNjcik7CisgICAgICAgIG1fYXNzZW1ibGVy
LnNobGxSZWdSZWcoZGVzdCwgc2NyKTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAg
ICB9CisKKyAgICB2b2lkIG11bDMyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisg
ICAgeworICAgICAgICBtX2Fzc2VtYmxlci5pbXVsbFJlZ1JlZyhzcmMsIGRlc3QpOworICAgICAg
ICBtX2Fzc2VtYmxlci5zdHNtYWNsKGRlc3QpOworICAgIH0KKworICAgIHZvaWQgbXVsMzIoSW1t
MzIgaW1tLCBSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAg
UmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgbW92ZShpbW0sIHNjcik7
CisgICAgICAgIGlmICAoc3JjICE9IGRlc3QpCisgICAgICAgICAgICBtb3ZlKHNyYywgZGVzdCk7
CisgICAgICAgIG11bDMyKHNjciwgIGRlc3QpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3Ip
OworICAgIH0KKworICAgIHZvaWQgbm90MzIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVz
dCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLm5vdGxSZWcoc3JjLCBkZXN0KTsKKyAgICB9
CisKKyAgICB2b2lkIG9yMzIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7
CisgICAgICAgIG1fYXNzZW1ibGVyLm9ybFJlZ1JlZyhzcmMsIGRlc3QpOworICAgIH0KKworICAg
IHZvaWQgb3IzMihJbW0zMiBpbW0sIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1f
YXNzZW1ibGVyLm9ybEltbVJlZyhpbW0ubV92YWx1ZSwgZGVzdCk7CisgICAgfQorCisgICAgdm9p
ZCByc2hpZnQzMihSZWdpc3RlcklEIHNoaWZ0YW1vdW50LCBSZWdpc3RlcklEIGRlc3QpCisgICAg
eworICAgICAgICBtX2Fzc2VtYmxlci5jbXBsSW1tUmVnKDMyLCBzaGlmdGFtb3VudCwgRXF1YWwp
OworICAgICAgICBtX2Fzc2VtYmxlci5lbnN1cmVTcGFjZShtX2Fzc2VtYmxlci5tYXhJbnN0cnVj
dGlvblNpemUgKyA0KTsKKyAgICAgICAgbV9hc3NlbWJsZXIuYnJhbmNoKEJUX09QQ09ERSwgMSk7
CisgICAgICAgIG1fYXNzZW1ibGVyLm5lZyhzaGlmdGFtb3VudCwgc2hpZnRhbW91bnQpOworICAg
ICAgICBtX2Fzc2VtYmxlci5zaGFSZWdSZWcoZGVzdCwgc2hpZnRhbW91bnQpOworICAgIH0KKwor
ICAgIHZvaWQgcnNoaWZ0MzIoSW1tMzIgaW1tLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAg
ICAgICBpZiAoaW1tLm1fdmFsdWUgJiAweDFmKQorICAgICAgICAgICAgcnNoaWZ0MzIoaW1tLm1f
dmFsdWUgJiAweDFmLCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIHN1YjMyKFJlZ2lzdGVySUQg
c3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5zdWJsUmVn
UmVnKHNyYywgZGVzdCk7CisgICAgfQorCisgICAgdm9pZCBzdWIzMihJbW0zMiBpbW0sIEFic29s
dXRlQWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklEIHNjcmF0Y2hSZWcpCisgICAgeworICAgICAg
ICBSZWdpc3RlcklEIHJlc3VsdCA9IGNsYWltU2NyYXRjaCgpOworCisgICAgICAgIG1fYXNzZW1i
bGVyLmxvYWRDb25zdGFudChyZWludGVycHJldF9jYXN0PHVpbnQzMl90PihhZGRyZXNzLm1fcHRy
KSwgc2NyYXRjaFJlZyk7CisgICAgICAgIG1fYXNzZW1ibGVyLm1vdmxNZW1SZWcoc2NyYXRjaFJl
ZywgcmVzdWx0KTsKKworICAgICAgICBpZiAobV9hc3NlbWJsZXIuaXNJbW1lZGlhdGUoLWltbS5t
X3ZhbHVlKSkKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZGxJbW04cigtaW1tLm1fdmFsdWUs
IHJlc3VsdCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIubG9hZENv
bnN0YW50KGltbS5tX3ZhbHVlLCBzY3JhdGNoUmVnMyk7CisgICAgICAgICAgICBtX2Fzc2VtYmxl
ci5zdWJsUmVnUmVnKHNjcmF0Y2hSZWczLCByZXN1bHQpOworICAgICAgICB9CisKKyAgICAgICAg
c3RvcmUzMihyZXN1bHQsIHNjcmF0Y2hSZWcpOworCisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHJl
c3VsdCk7CisgICAgfQorCisgICAgdm9pZCBzdWIzMihJbW0zMiBpbW0sIEFic29sdXRlQWRkcmVz
cyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCByZXN1bHQgPSBjbGFpbVNjcmF0
Y2goKTsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3JhdGNoUmVnID0gY2xhaW1TY3JhdGNoKCk7CisK
KyAgICAgICAgbV9hc3NlbWJsZXIubG9hZENvbnN0YW50KHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMy
X3Q+KGFkZHJlc3MubV9wdHIpLCBzY3JhdGNoUmVnKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubW92
bE1lbVJlZyhzY3JhdGNoUmVnLCByZXN1bHQpOworCisgICAgICAgIGlmIChtX2Fzc2VtYmxlci5p
c0ltbWVkaWF0ZSgtaW1tLm1fdmFsdWUpKQorICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRkbElt
bThyKC1pbW0ubV92YWx1ZSwgcmVzdWx0KTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBt
X2Fzc2VtYmxlci5sb2FkQ29uc3RhbnQoaW1tLm1fdmFsdWUsIHNjcmF0Y2hSZWczKTsKKyAgICAg
ICAgICAgIG1fYXNzZW1ibGVyLnN1YmxSZWdSZWcoc2NyYXRjaFJlZzMsIHJlc3VsdCk7CisgICAg
ICAgIH0KKworICAgICAgICBzdG9yZTMyKHJlc3VsdCwgc2NyYXRjaFJlZyk7CisKKyAgICAgICAg
cmVsZWFzZVNjcmF0Y2gocmVzdWx0KTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyYXRjaFJl
Zyk7CisgICAgfQorCisgICAgdm9pZCBhZGQzMihJbW0zMiBpbW0sIEFic29sdXRlQWRkcmVzcyBh
ZGRyZXNzLCBSZWdpc3RlcklEIHNjcmF0Y2hSZWcpCisgICAgeworICAgICAgICBSZWdpc3RlcklE
IHJlc3VsdCA9IGNsYWltU2NyYXRjaCgpOworCisgICAgICAgIG1fYXNzZW1ibGVyLmxvYWRDb25z
dGFudChyZWludGVycHJldF9jYXN0PHVpbnQzMl90PihhZGRyZXNzLm1fcHRyKSwgc2NyYXRjaFJl
Zyk7CisgICAgICAgIG1fYXNzZW1ibGVyLm1vdmxNZW1SZWcoc2NyYXRjaFJlZywgcmVzdWx0KTsK
KworICAgICAgICBpZiAobV9hc3NlbWJsZXIuaXNJbW1lZGlhdGUoaW1tLm1fdmFsdWUpKQorICAg
ICAgICAgICAgbV9hc3NlbWJsZXIuYWRkbEltbThyKGltbS5tX3ZhbHVlLCByZXN1bHQpOworICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmxvYWRDb25zdGFudChpbW0ubV92
YWx1ZSwgc2NyYXRjaFJlZzMpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRkbFJlZ1JlZyhz
Y3JhdGNoUmVnMywgcmVzdWx0KTsKKyAgICAgICAgfQorCisgICAgICAgIHN0b3JlMzIocmVzdWx0
LCBzY3JhdGNoUmVnKTsKKworICAgICAgICByZWxlYXNlU2NyYXRjaChyZXN1bHQpOworICAgIH0K
KworICAgIHZvaWQgYWRkMzIoSW1tMzIgaW1tLCBBYnNvbHV0ZUFkZHJlc3MgYWRkcmVzcykKKyAg
ICB7CisgICAgICAgIFJlZ2lzdGVySUQgcmVzdWx0ID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAg
IFJlZ2lzdGVySUQgc2NyYXRjaFJlZyA9IGNsYWltU2NyYXRjaCgpOworCisgICAgICAgIG1fYXNz
ZW1ibGVyLmxvYWRDb25zdGFudChyZWludGVycHJldF9jYXN0PHVpbnQzMl90PihhZGRyZXNzLm1f
cHRyKSwgc2NyYXRjaFJlZyk7CisgICAgICAgIG1fYXNzZW1ibGVyLm1vdmxNZW1SZWcoc2NyYXRj
aFJlZywgcmVzdWx0KTsKKworICAgICAgICBpZiAobV9hc3NlbWJsZXIuaXNJbW1lZGlhdGUoaW1t
Lm1fdmFsdWUpKQorICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRkbEltbThyKGltbS5tX3ZhbHVl
LCByZXN1bHQpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmxvYWRD
b25zdGFudChpbW0ubV92YWx1ZSwgc2NyYXRjaFJlZzMpOworICAgICAgICAgICAgbV9hc3NlbWJs
ZXIuYWRkbFJlZ1JlZyhzY3JhdGNoUmVnMywgcmVzdWx0KTsKKyAgICAgICAgfQorCisgICAgICAg
IHN0b3JlMzIocmVzdWx0LCBzY3JhdGNoUmVnKTsKKworICAgICAgICByZWxlYXNlU2NyYXRjaChy
ZXN1bHQpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3JhdGNoUmVnKTsKKyAgICB9CisKKyAg
ICB2b2lkIHN1YjMyKEltbTMyIGltbSwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAg
bV9hc3NlbWJsZXIuc3VibEltbXIoaW1tLm1fdmFsdWUsIGRlc3QpOworICAgIH0KKworICAgIHZv
aWQgc3ViMzIoQWRkcmVzcyBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIFJl
Z2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIGxvYWQzMihzcmMsIHNjcik7
CisgICAgICAgIG1fYXNzZW1ibGVyLnN1YmxSZWdSZWcoc2NyLCBkZXN0KTsKKyAgICAgICAgcmVs
ZWFzZVNjcmF0Y2goc2NyKTsKKyAgICB9CisKKyAgICB2b2lkIHhvcjMyKFJlZ2lzdGVySUQgc3Jj
LCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci54b3JsUmVnUmVn
KHNyYywgZGVzdCk7CisgICAgfQorCisgICAgdm9pZCB4b3IzMihJbW0zMiBpbW0sIFJlZ2lzdGVy
SUQgc3JjRGVzdCkKKyAgICB7CisgICAgICAgIGlmICgoc3JjRGVzdCAhPSBTSDRSZWdpc3RlcnM6
OnIwKSB8fCAoaW1tLm1fdmFsdWUgPiAyNTUpIHx8IChpbW0ubV92YWx1ZSA8IDApKSB7CisgICAg
ICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICAgICAgbV9h
c3NlbWJsZXIubG9hZENvbnN0YW50KChpbW0ubV92YWx1ZSksIHNjcik7CisgICAgICAgICAgICBt
X2Fzc2VtYmxlci54b3JsUmVnUmVnKHNjciwgc3JjRGVzdCk7CisgICAgICAgICAgICByZWxlYXNl
U2NyYXRjaChzY3IpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAg
bV9hc3NlbWJsZXIueG9ybEltbThyKGltbS5tX3ZhbHVlLCBzcmNEZXN0KTsKKyAgICB9CisKKyAg
ICAvLyBNZW1vcnkgYWNjZXNzIG9wZXJhdGlvbgorICAgIAorICAgIHZvaWQgbG9hZDMyKEltcGxp
Y2l0QWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBsb2Fk
MzIoYWRkcmVzcy5iYXNlLCBhZGRyZXNzLm9mZnNldCwgZGVzdCk7CisgICAgfQorCisgICAgdm9p
ZCBsb2FkOChJbXBsaWNpdEFkZHJlc3MgYWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsK
KyAgICAgICAgbG9hZDgoYWRkcmVzcy5iYXNlLCBhZGRyZXNzLm9mZnNldCwgZGVzdCk7CisgICAg
fQorCisgICAgdm9pZCBsb2FkMzIoQmFzZUluZGV4IGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkK
KyAgICB7CisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAg
IG1vdmUoYWRkcmVzcy5pbmRleCwgc2NyKTsKKworICAgICAgICBsc2hpZnQzMihJbW0zMihhZGRy
ZXNzLnNjYWxlKSwgc2NyKTsKKyAgICAgICAgYWRkMzIoYWRkcmVzcy5iYXNlLCBzY3IpOworICAg
ICAgICBsb2FkMzIoc2NyLCBhZGRyZXNzLm9mZnNldCwgZGVzdCk7CisgICAgICAgIHJlbGVhc2VT
Y3JhdGNoKHNjcik7CisgICAgfQorCisgICAgdm9pZCBsb2FkMzIodm9pZCogYWRkcmVzcywgUmVn
aXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9hZENvbnN0YW50KHJl
aW50ZXJwcmV0X2Nhc3Q8dWludDMyX3Q+KGFkZHJlc3MpLCBkZXN0KTsKKyAgICAgICAgbV9hc3Nl
bWJsZXIubW92bE1lbVJlZyhkZXN0LCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIGxvYWQzMihS
ZWdpc3RlcklEIGJhc2UsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAg
ICAgIGlmICgob2Zmc2V0IDwgMCkgfHwgKG9mZnNldCA+PSA2NCkpIHsKKyAgICAgICAgICAgIGlm
ICgoZGVzdCA9PSBTSDRSZWdpc3RlcnM6OnIwKSAmJiAoZGVzdCAhPSBiYXNlKSkgeworICAgICAg
ICAgICAgICAgIG1fYXNzZW1ibGVyLmxvYWRDb25zdGFudCgob2Zmc2V0KSwgZGVzdCk7CisgICAg
ICAgICAgICAgICAgbV9hc3NlbWJsZXIubW92bFIwbXIoYmFzZSwgZGVzdCk7CisgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgIFJlZ2lzdGVySUQgc2NyOworICAgICAgICAgICAg
ICAgIGlmIChkZXN0ID09IGJhc2UpCisgICAgICAgICAgICAgICAgICAgIHNjciA9IGNsYWltU2Ny
YXRjaCgpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgc2NyID0g
ZGVzdDsKKworICAgICAgICAgICAgICAgIG1fYXNzZW1ibGVyLmxvYWRDb25zdGFudCgob2Zmc2V0
KSwgc2NyKTsKKyAgICAgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGRsUmVnUmVnKGJhc2UsIHNj
cik7CisgICAgICAgICAgICAgICAgbV9hc3NlbWJsZXIubW92bE1lbVJlZyhzY3IsIGRlc3QpOwor
CisgICAgICAgICAgICAgICAgaWYgKGRlc3QgPT0gYmFzZSkKKyAgICAgICAgICAgICAgICAgICAg
cmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChv
ZmZzZXQpCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5tb3ZsTWVtUmVnKG9mZnNldCA+PiAyLCBi
YXNlLCBkZXN0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9hc3NlbWJsZXIubW92bE1l
bVJlZyhiYXNlLCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIGxvYWQ4KFJlZ2lzdGVySUQgYmFz
ZSwgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgaWYgKChvZmZz
ZXQgPiAwKSAmJiAob2Zmc2V0IDwgNjQpICYmIChkZXN0ID09IFNINFJlZ2lzdGVyczo6cjApKQor
ICAgICAgICAgICAgbV9hc3NlbWJsZXIubW92Yk1lbVJlZyhvZmZzZXQsIGJhc2UsIGRlc3QpOwor
ICAgICAgICBlbHNlIGlmIChiYXNlICE9IGRlc3QpIHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVy
LmxvYWRDb25zdGFudCgob2Zmc2V0KSwgZGVzdCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5h
ZGRsUmVnUmVnKGJhc2UsIGRlc3QpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIubW92Yk1lbVJl
ZyhkZXN0LCBkZXN0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFJlZ2lzdGVySUQg
c2NyID0gY2xhaW1TY3JhdGNoKCk7CisKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmxvYWRDb25z
dGFudCgob2Zmc2V0KSwgc2NyKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZGxSZWdSZWco
YmFzZSwgc2NyKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLm1vdmJNZW1SZWcoc2NyLCBkZXN0
KTsKKworICAgICAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIHZvaWQgbG9hZDMyKFJlZ2lzdGVySUQgcjAsIFJlZ2lzdGVySUQgc3JjLCBSZWdpc3Rl
cklEIGRzdCkKKyAgICB7CisgICAgICAgIEFTU0VSVChyMCA9PSBTSDRSZWdpc3RlcnM6OnIwKTsK
KyAgICAgICAgbV9hc3NlbWJsZXIubW92bFIwbXIoc3JjLCBkc3QpOworICAgIH0KKworICAgIHZv
aWQgbG9hZDMyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAg
IG1fYXNzZW1ibGVyLm1vdmxNZW1SZWcoc3JjLCBkc3QpOworICAgIH0KKworICAgIHZvaWQgbG9h
ZDE2KEltcGxpY2l0QWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisgCisgICAgdm9pZCBsb2FkMTYoUmVn
aXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVy
Lm1vdndNZW1SZWcoc3JjLCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIGxvYWQxNihSZWdpc3Rl
cklEIHIwLCBSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAg
QVNTRVJUKHIwID09IFNINFJlZ2lzdGVyczo6cjApOworICAgICAgICBtX2Fzc2VtYmxlci5tb3Z3
UjBtcihzcmMsIGRlc3QpOworICAgIH0KKworICAgIHZvaWQgbG9hZDE2KEJhc2VJbmRleCBhZGRy
ZXNzLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNs
YWltU2NyYXRjaCgpOworICAgICAgICBtb3ZlKGFkZHJlc3MuaW5kZXgsIHNjcik7CisgICAgICAg
IGxzaGlmdDMyKEltbTMyKGFkZHJlc3Muc2NhbGUpLCBzY3IpOworICAgICAgICBtX2Fzc2VtYmxl
ci5hZGRsSW1tUmVnKGFkZHJlc3Mub2Zmc2V0LCBzY3IpOworICAgICAgICBpZiAoc2NyID09IFNI
NFJlZ2lzdGVyczo6cjApCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5tb3Z3UjBtcihhZGRyZXNz
LmJhc2UsIHNjcik7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgYWRkMzIoYWRkcmVzcy5i
YXNlLCBzY3IpOworICAgICAgICAgICAgbG9hZDE2KHNjciwgc2NyKTsKKyAgICAgICAgfQorICAg
ICAgICBleHR1dyhzY3IsIGRlc3QpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAg
IH0KKworICAgIHZvaWQgc3RvcmUzMihSZWdpc3RlcklEIHNyYywgSW1wbGljaXRBZGRyZXNzIGFk
ZHJlc3MpCisgICAgeworICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOwor
ICAgICAgICBzdG9yZTMyKHNyYywgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSwgc2NyKTsK
KyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICB9CisKKyAgICB2b2lkIHN0b3JlMzIo
UmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBz
Y3IpCisgICAgeworICAgICAgICBpZiAoKG9mZnNldCA8IDApIHx8IChvZmZzZXQgPj0gNjQpKSB7
CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5sb2FkQ29uc3RhbnQoKG9mZnNldCksIHNjcik7Cisg
ICAgICAgICAgICBpZiAoc2NyID09IFNINFJlZ2lzdGVyczo6cjApCisgICAgICAgICAgICAgICAg
bV9hc3NlbWJsZXIubW92bFJlZ01lbXIwKHNyYywgYmFzZSk7CisgICAgICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGRsUmVnUmVnKGJhc2UsIHNjcik7CisgICAg
ICAgICAgICAgICAgbV9hc3NlbWJsZXIubW92bFJlZ01lbShzcmMsIHNjcik7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0gZWxzZSBpZiAob2Zmc2V0KQorICAgICAgICAgICAgbV9hc3NlbWJsZXIu
bW92bFJlZ01lbShzcmMsIG9mZnNldCA+PiAyLCBiYXNlKTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgbV9hc3NlbWJsZXIubW92bFJlZ01lbShzcmMsIGJhc2UpOworICAgIH0KKworICAgIHZv
aWQgc3RvcmUzMihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBvZmZzZXQsIFJlZ2lzdGVySUQg
YmFzZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChvZmZzZXQgPT0gU0g0UmVnaXN0ZXJzOjpyMCk7
CisgICAgICAgIG1fYXNzZW1ibGVyLm1vdmxSZWdNZW1yMChzcmMsIGJhc2UpOworICAgIH0KKwor
ICAgIHZvaWQgc3RvcmUzMihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpCisgICAgewor
ICAgICAgICBtX2Fzc2VtYmxlci5tb3ZsUmVnTWVtKHNyYywgZHN0KTsKKyAgICB9CisKKyAgICB2
b2lkIHN0b3JlMzIoSW1tMzIgaW1tLCBJbXBsaWNpdEFkZHJlc3MgYWRkcmVzcykKKyAgICB7Cisg
ICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIFJlZ2lzdGVy
SUQgc2NyMSA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBtX2Fzc2VtYmxlci5sb2FkQ29uc3Rh
bnQoKGltbS5tX3ZhbHVlKSwgc2NyKTsKKworICAgICAgICBzdG9yZTMyKHNjciwgYWRkcmVzcy5v
ZmZzZXQsIGFkZHJlc3MuYmFzZSwgc2NyMSk7CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7
CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcjEpOworICAgIH0KKworICAgIHZvaWQgc3RvcmUz
MihSZWdpc3RlcklEIHNyYywgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBSZWdp
c3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBtb3ZlKGFkZHJlc3MuaW5kZXgs
IHNjcik7CisgICAgICAgIAorICAgICAgICBsc2hpZnQzMihJbW0zMihhZGRyZXNzLnNjYWxlKSwg
c2NyKTsKKyAgICAgICAgYWRkMzIoYWRkcmVzcy5iYXNlLCBzY3IpOworICAgICAgICBzdG9yZTMy
KHNyYywgQWRkcmVzcyhzY3IsIGFkZHJlc3Mub2Zmc2V0KSk7CisgICAgICAgIHJlbGVhc2VTY3Jh
dGNoKHNjcik7CisgICAgfQorCisgICAgdm9pZCBzdG9yZTMyKEltbTMyIGltbSwgdm9pZCogYWRk
cmVzcykKKyAgICB7CisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7Cisg
ICAgICAgIFJlZ2lzdGVySUQgc2NyMSA9IGNsYWltU2NyYXRjaCgpOworCisgICAgICAgIG1fYXNz
ZW1ibGVyLmxvYWRDb25zdGFudCgoaW1tLm1fdmFsdWUpLCBzY3IpOworICAgICAgICBtX2Fzc2Vt
Ymxlci5sb2FkQ29uc3RhbnQocmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdD4oYWRkcmVzcyksIHNj
cjEpOworICAgICAgICBtX2Fzc2VtYmxlci5tb3ZsTWVtUmVnKHNjciwgc2NyMSk7CisKKyAgICAg
ICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyMSk7Cisg
ICAgfQorCisgICAgdm9pZCBzdG9yZTMyKFJlZ2lzdGVySUQgc3JjLCB2b2lkKiBhZGRyZXNzKQor
ICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKworICAgICAg
ICBtX2Fzc2VtYmxlci5sb2FkQ29uc3RhbnQocmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdD4oYWRk
cmVzcyksIHNjcik7CisgICAgICAgIG1fYXNzZW1ibGVyLm1vdmxNZW1SZWcoc3JjLCBzY3IpOwor
CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgfQorCisgICAgRGF0YUxhYmVsMzIg
bG9hZDMyV2l0aEFkZHJlc3NPZmZzZXRQYXRjaChBZGRyZXNzIGFkZHJlc3MsIFJlZ2lzdGVySUQg
ZGVzdCkKKyAgICB7CisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisK
KyAgICAgICAgRGF0YUxhYmVsMzIgbGFiZWwodGhpcyk7CisgICAgICAgIG1fYXNzZW1ibGVyLmxv
YWRDb25zdGFudChhZGRyZXNzLm9mZnNldCwgc2NyLCB0cnVlKTsKKworICAgICAgICBtX2Fzc2Vt
Ymxlci5hZGRsUmVnUmVnKGFkZHJlc3MuYmFzZSwgc2NyKTsKKyAgICAgICAgbV9hc3NlbWJsZXIu
bW92bE1lbVJlZyhzY3IsIGRlc3QpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAg
ICAgICByZXR1cm4gbGFiZWw7CisgICAgfQorCisgICAgRGF0YUxhYmVsMzIgc3RvcmUzMldpdGhB
ZGRyZXNzT2Zmc2V0UGF0Y2goUmVnaXN0ZXJJRCBzcmMsIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7
CisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisKKyAgICAgICAgRGF0
YUxhYmVsMzIgbGFiZWwodGhpcyk7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvYWRDb25zdGFudChh
ZGRyZXNzLm9mZnNldCwgc2NyLCB0cnVlKTsKKworICAgICAgICBtX2Fzc2VtYmxlci5hZGRsUmVn
UmVnKGFkZHJlc3MuYmFzZSwgc2NyKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubW92bFJlZ01lbShz
cmMsIHNjcik7CisKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICAgICAgcmV0dXJu
IGxhYmVsOworICAgIH0KKworICAgICAvLyBGbG9hdGluZy1wb2ludCBvcGVyYXRpb25zCisKKyAg
ICBib29sIHN1cHBvcnRzRmxvYXRpbmdQb2ludCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Cisg
ICAgYm9vbCBzdXBwb3J0c0Zsb2F0aW5nUG9pbnRUcnVuY2F0ZSgpIGNvbnN0IHsgcmV0dXJuIGZh
bHNlOyB9CisgICAgYm9vbCBzdXBwb3J0c0Zsb2F0aW5nUG9pbnRTcXJ0KCkgY29uc3QgeyByZXR1
cm4gZmFsc2U7IH0KKworICAgIHZvaWQgbG9hZERvdWJsZShJbXBsaWNpdEFkZHJlc3MgYWRkcmVz
cywgRlBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICB9CisKKyAgICB2b2lkIGxvYWREb3VibGUoY29uc3Qgdm9pZCogYWRkcmVzcywgRlBS
ZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICB9CisKKyAgICB2b2lkIHN0b3JlRG91YmxlKEZQUmVnaXN0ZXJJRCBzcmMsIEltcGxpY2l0QWRk
cmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
fQorCisgICAgdm9pZCBhZGREb3VibGUoRlBSZWdpc3RlcklEIHNyYywgRlBSZWdpc3RlcklEIGRl
c3QpCisgICAgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICB2
b2lkIGFkZERvdWJsZShBZGRyZXNzIGFkZHJlc3MsIEZQUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsK
KyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorCisgICAgdm9pZCBzdWJEb3Vi
bGUoRlBSZWdpc3RlcklEIHNyYywgRlBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICB2b2lkIHN1YkRvdWJsZShBZGRyZXNz
IGFkZHJlc3MsIEZQUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgfQorCisgICAgdm9pZCBtdWxEb3VibGUoRlBSZWdpc3RlcklEIHNyYywg
RlBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICB9CisKKyAgICB2b2lkIG11bERvdWJsZShBZGRyZXNzIGFkZHJlc3MsIEZQUmVnaXN0ZXJJ
RCBkZXN0KQorICAgIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorCisg
ICAgdm9pZCBkaXZEb3VibGUoRlBSZWdpc3RlcklEIHNyYywgRlBSZWdpc3RlcklEIGRlc3QpCisg
ICAgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICB2b2lkIGNv
bnZlcnRJbnQzMlRvRG91YmxlKFJlZ2lzdGVySUQgc3JjLCBGUFJlZ2lzdGVySUQgZGVzdCkKKyAg
ICB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIHZvaWQgY29u
dmVydEludDMyVG9Eb3VibGUoQWJzb2x1dGVBZGRyZXNzIHNyYywgRlBSZWdpc3RlcklEIGRlc3Qp
CisgICAgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICB2b2lk
IGNvbnZlcnRJbnQzMlRvRG91YmxlKEFkZHJlc3Mgc3JjLCBGUFJlZ2lzdGVySUQgZGVzdCkKKyAg
ICB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIHZvaWQgemVy
b0RvdWJsZShGUFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgIH0KKworICAgIHZvaWQgbG9hZDMyV2l0aFVuYWxpZ25lZEhhbGZXb3JkcyhC
YXNlSW5kZXggYWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgUmVnaXN0
ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKworICAgICAgICBtb3ZlKGFkZHJlc3MuaW5kZXgs
IHNjcik7CisKKyAgICAgICAgbHNoaWZ0MzIoSW1tMzIoYWRkcmVzcy5zY2FsZSksIHNjcik7Cisg
ICAgICAgIGFkZDMyKGFkZHJlc3MuYmFzZSwgc2NyKTsKKworICAgICAgICBhZGQzMihJbW0zMihh
ZGRyZXNzLm9mZnNldCksIHNjcik7CisgICAgICAgIFJlZ2lzdGVySUQgc2NyMSA9IGNsYWltU2Ny
YXRjaCgpOworICAgICAgICBsb2FkMTYoc2NyLCBzY3IxKTsKKworICAgICAgICBhZGQzMihJbW0z
MigyKSwgc2NyKTsKKyAgICAgICAgbG9hZDE2KHNjciwgZGVzdCk7CisKKyAgICAgICAgbW92ZShJ
bW0zMigxNiksIHNjcik7CisgICAgICAgIG1fYXNzZW1ibGVyLnNobGxSZWdSZWcoZGVzdCwgc2Ny
KTsKKworICAgICAgICBvcjMyKHNjcjEsIGRlc3QpOworICAgICAgICByZWxlYXNlU2NyYXRjaChz
Y3IpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IxKTsKKyAgICB9CisKKyAgICBKdW1wIGJy
YW5jaDMyV2l0aFVuYWxpZ25lZEhhbGZXb3JkcyhDb25kaXRpb24gY29uZCwgQmFzZUluZGV4IGxl
ZnQsIEltbTMyIHJpZ2h0KQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBzY3JhdGNo
UmVnMzsKKyAgICAgICAgbG9hZDMyV2l0aFVuYWxpZ25lZEhhbGZXb3JkcyhsZWZ0LCBzY3IpOwor
CisgICAgICAgIGlmICgoKGNvbmQgPT0gRXF1YWwpIHx8IChjb25kID09IE5vdEVxdWFsKSkgJiYg
IXJpZ2h0Lm1fdmFsdWUpCisgICAgICAgICAgICBtX2Fzc2VtYmxlci50ZXN0bFJlZ1JlZyhzY3Is
IHNjcik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmNtcGxJbW1SZWco
cmlnaHQubV92YWx1ZSwgc2NyLCBjb25kKTsKKworICAgICAgICBpZiAoY29uZCA9PSBOb3RFcXVh
bCkKKyAgICAgICAgICAgIHJldHVybiBicmFuY2hGYWxzZSgpOworCisgICAgICAgIHJldHVybiBi
cmFuY2hUcnVlKCk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2hEb3VibGVOb25aZXJvKEZQUmVn
aXN0ZXJJRCByZWcsIEZQUmVnaXN0ZXJJRCBzY3JhdGNoKQorICAgIHsKKyAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2hEb3VibGVaZXJvT3JOYU4o
RlBSZWdpc3RlcklEIHJlZywgRlBSZWdpc3RlcklEIHNjcmF0Y2gpCisgICAgeworICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaERvdWJsZShDb25k
aXRpb24gY29uZCwgRlBSZWdpc3RlcklEIGxlZnQsIEZQUmVnaXN0ZXJJRCByaWdodCkKKyAgICB7
CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIEp1bXAgYnJhbmNo
VHJ1ZSgpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5lbnN1cmVTcGFjZShtX2Fzc2VtYmxl
ci5tYXhJbnN0cnVjdGlvblNpemUgKyA2LCBzaXplb2YodWludDMyX3QpKTsKKyAgICAgICAgSnVt
cCBtX2p1bXAgPSBKdW1wKG1fYXNzZW1ibGVyLmplKCkpOworCisgICAgICAgIFJlZ2lzdGVySUQg
c2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvYWRDb25zdGFudFVu
Y2hlY2tlZFNpemUoMHgwLCBzY3IpOworICAgICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKKyAgICAg
ICAgbV9hc3NlbWJsZXIubm9wKCk7CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisKKyAg
ICAgICAgcmV0dXJuIG1fanVtcDsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaEZhbHNlKCkKKyAg
ICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmVuc3VyZVNwYWNlKG1fYXNzZW1ibGVyLm1heEluc3Ry
dWN0aW9uU2l6ZSArIDYsIHNpemVvZih1aW50MzJfdCkpOworICAgICAgICBKdW1wIG1fanVtcCA9
IEp1bXAobV9hc3NlbWJsZXIuam5lKCkpOworCisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xh
aW1TY3JhdGNoKCk7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvYWRDb25zdGFudFVuY2hlY2tlZFNp
emUoMHgwLCBzY3IpOworICAgICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKKyAgICAgICAgbV9hc3Nl
bWJsZXIubm9wKCk7CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisKKyAgICAgICAgcmV0
dXJuIG1fanVtcDsKKyAgICB9CisKKyAgICB2b2lkIHNldDhDb21wYXJlMzIoQ29uZGl0aW9uIGNv
bmQsIFJlZ2lzdGVySUQgbGVmdCwgUmVnaXN0ZXJJRCByaWdodCwgUmVnaXN0ZXJJRCBkZXN0KQor
ICAgIHsKKyAgICAgICAgc2V0MzJDb21wYXJlMzIoY29uZCwgbGVmdCwgcmlnaHQsIGRlc3QpOwor
ICAgIH0KKworICAgIHZvaWQgc2V0OENvbXBhcmUzMihDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJ
RCBsZWZ0LCBJbW0zMiByaWdodCwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgaWYg
KGxlZnQgIT0gZGVzdCkgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIubG9hZENvbnN0YW50KHJp
Z2h0Lm1fdmFsdWUsIGRlc3QpOworICAgICAgICAgICAgc2V0MzJDb21wYXJlMzIoY29uZCwgbGVm
dCwgZGVzdCwgZGVzdCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAg
ICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBtX2Fzc2VtYmxlci5s
b2FkQ29uc3RhbnQocmlnaHQubV92YWx1ZSwgc2NyKTsKKyAgICAgICAgc2V0MzJDb21wYXJlMzIo
Y29uZCwgbGVmdCwgc2NyLCBkZXN0KTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAg
ICB9CisKKyAgICBKdW1wIGJyYW5jaDMyKENvbmRpdGlvbiBjb25kLCBCYXNlSW5kZXggbGVmdCwg
SW1tMzIgcmlnaHQpCisgICAgeworICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRj
aCgpOworCisgICAgICAgIG1vdmUobGVmdC5pbmRleCwgc2NyKTsKKyAgICAgICAgbHNoaWZ0MzIo
SW1tMzIobGVmdC5zY2FsZSksIHNjcik7CisgICAgICAgIGFkZDMyKGxlZnQuYmFzZSwgc2NyKTsK
KyAgICAgICAgbG9hZDMyKHNjciwgbGVmdC5vZmZzZXQsIHNjcik7CisKKyAgICAgICAgbV9hc3Nl
bWJsZXIuY21wbEltbVJlZyhyaWdodC5tX3ZhbHVlLCBzY3IsIGNvbmQpOworICAgICAgICByZWxl
YXNlU2NyYXRjaChzY3IpOworCisgICAgICAgIGlmIChjb25kID09IE5vdEVxdWFsKQorICAgICAg
ICAgICAgcmV0dXJuIGJyYW5jaEZhbHNlKCk7CisKKyAgICAgICAgcmV0dXJuIGJyYW5jaFRydWUo
KTsKKyAgICB9CisKKyAgICB2b2lkIHNxcnREb3VibGUoRlBSZWdpc3RlcklEIHNyYywgRlBSZWdp
c3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9
CisKKyAgICBKdW1wIGJyYW5jaFRlc3Q4KENvbmRpdGlvbiBjb25kLCBBZGRyZXNzIGFkZHJlc3Ms
IEltbTMyIG1hc2sgPSBJbW0zMigtMSkpCisgICAgeworICAgICAgICBSZWdpc3RlcklEIGFkZHJl
c3NUZW1wUmVnaXN0ZXIgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgbG9hZDgoYWRkcmVzcywg
YWRkcmVzc1RlbXBSZWdpc3Rlcik7CisgICAgICAgIAorICAgICAgICBKdW1wIGptcCA9IGJyYW5j
aFRlc3QzMihjb25kLCBhZGRyZXNzVGVtcFJlZ2lzdGVyLCBtYXNrKTsKKyAgICAgICAgcmVsZWFz
ZVNjcmF0Y2goYWRkcmVzc1RlbXBSZWdpc3Rlcik7CisgICAgICAgIHJldHVybiBqbXA7CisgICAg
fQorCisgICAgdm9pZCBzaWduRXh0ZW5kMzJUb1B0cihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJ
RCBkZXN0KQorICAgIHsKKyAgICAgICAgaWYgKHNyYyAhPSBkZXN0KQorICAgICAgICAgICAgbW92
ZShzcmMsIGRlc3QpOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoOChDb25kaXRpb24gY29uZCwg
QWRkcmVzcyBsZWZ0LCBJbW0zMiByaWdodCkKKyAgICB7CisgICAgICAgIFJlZ2lzdGVySUQgYWRk
cmVzc1RlbXBSZWdpc3RlciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBsb2FkOChsZWZ0LCBh
ZGRyZXNzVGVtcFJlZ2lzdGVyKTsKKworICAgICAgICBKdW1wIGptcCA9IGJyYW5jaDMyKGNvbmQs
IGFkZHJlc3NUZW1wUmVnaXN0ZXIsIHJpZ2h0KTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goYWRk
cmVzc1RlbXBSZWdpc3Rlcik7CisgICAgICAgIHJldHVybiBqbXA7CisgICAgfQorCisgICAgSnVt
cCBicmFuY2hUcnVuY2F0ZURvdWJsZVRvSW50MzIoRlBSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJ
RCBkZXN0KQorICAgIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorCisg
ICAgLy8gU3RhY2sgbWFuaXB1bGF0aW9uIG9wZXJhdGlvbnMKKyAgICAKKyAgICB2b2lkIHBvcChS
ZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5wb3BSZWcoZGVzdCk7
CisgICAgfQorCisgICAgdm9pZCBwdXNoKFJlZ2lzdGVySUQgc3JjKQorICAgIHsKKyAgICAgICAg
bV9hc3NlbWJsZXIucHVzaFJlZyhzcmMpOworICAgIH0KKworICAgIHZvaWQgcHVzaChBZGRyZXNz
IGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5wdXNoTWVtKGFkZHJlc3Mub2Zm
c2V0LCBhZGRyZXNzLmJhc2UpOworICAgIH0KKworICAgIHZvaWQgcHVzaChJbW0zMiBpbW0pCisg
ICAgeworICAgICAgICBtX2Fzc2VtYmxlci5wdXNoSW1tMzIoaW1tLm1fdmFsdWUpOworICAgIH0K
KworICAgIC8vIFJlZ2lzdGVyIG1vdmUgb3BlcmF0aW9ucworCisgICAgdm9pZCBtb3ZlKEltbTMy
IGltbSwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICBtX2Fzc2VtYmxlci5sb2FkQ29u
c3RhbnQoaW1tLm1fdmFsdWUsIGRlc3QpOworICAgIH0KKworICAgIERhdGFMYWJlbFB0ciBtb3Zl
V2l0aFBhdGNoKEltbVB0ciBpbml0aWFsVmFsdWUsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7Cisg
ICAgICAgRGF0YUxhYmVsUHRyIGRhdGFMYWJlbCh0aGlzKTsKKyAgICAgICBtX2Fzc2VtYmxlci5s
b2FkQ29uc3RhbnQocmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdD4oaW5pdGlhbFZhbHVlLm1fdmFs
dWUpLCBkZXN0LCB0cnVlKTsKKyAgICAgICByZXR1cm4gZGF0YUxhYmVsOworICAgIH0KKworICAg
IHZvaWQgbW92ZShSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAg
ICAgbV9hc3NlbWJsZXIubW92bFJlZ1JlZyhzcmMsIGRlc3QpOworICAgIH0KKworICAgIHZvaWQg
bW92ZShJbW1QdHIgaW1tLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2Vt
Ymxlci5sb2FkQ29uc3RhbnQoaW1tLmFzSW50cHRyKCksIGRlc3QpOworICAgIH0KKworICAgIHZv
aWQgZXh0dXcoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAg
bV9hc3NlbWJsZXIuZXh0dXcoc3JjLCBkc3QpOworICAgIH0KKworICAgIHZvaWQgc2V0MzJDb21w
YXJlMzIoQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgbGVmdCwgUmVnaXN0ZXJJRCByaWdodCwg
UmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuY21wbFJlZ1JlZyhy
aWdodCwgbGVmdCwgY29uZCk7CisKKyAgICAgICAgaWYgKGNvbmQgIT0gTm90RXF1YWwpIHsKKyAg
ICAgICAgICAgIG1fYXNzZW1ibGVyLm1vdnQoZGVzdCk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKworICAgICAgICBtX2Fzc2VtYmxlci5lbnN1cmVTcGFjZShtX2Fzc2VtYmxlci5t
YXhJbnN0cnVjdGlvblNpemUgKyA0KTsKKyAgICAgICAgbV9hc3NlbWJsZXIubW92SW1tOCgwLCBk
ZXN0KTsKKyAgICAgICAgbV9hc3NlbWJsZXIuYnJhbmNoKEJUX09QQ09ERSwgMCk7CisgICAgICAg
IG1fYXNzZW1ibGVyLm1vdkltbTgoMSwgZGVzdCk7CisgICAgfQorCisgICAgdm9pZCBzZXQzMkNv
bXBhcmUzMihDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBsZWZ0LCBJbW0zMiByaWdodCwgUmVn
aXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgaWYgKGxlZnQgIT0gZGVzdCkgeworICAgICAg
ICAgICAgbW92ZShyaWdodCwgZGVzdCk7CisgICAgICAgICAgICBzZXQzMkNvbXBhcmUzMihjb25k
LCBsZWZ0LCBkZXN0LCBkZXN0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisg
ICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIG1vdmUocmln
aHQsIHNjcik7CisgICAgICAgIHNldDMyQ29tcGFyZTMyKGNvbmQsIGxlZnQsIHNjciwgZGVzdCk7
CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgfQorCisgICAgdm9pZCBzZXQzMlRl
c3Q4KENvbmRpdGlvbiBjb25kLCBBZGRyZXNzIGFkZHJlc3MsIEltbTMyIG1hc2ssIFJlZ2lzdGVy
SUQgZGVzdCkKKyAgICB7CisgICAgICAgIEFTU0VSVCgoY29uZCA9PSBaZXJvKSB8fCAoY29uZCA9
PSBOb25aZXJvKSk7CisKKyAgICAgICAgbG9hZDgoYWRkcmVzcywgZGVzdCk7CisKKyAgICAgICAg
aWYgKG1hc2subV92YWx1ZSA9PSAtMSkKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmNtcGxJbW1S
ZWcoMCwgZGVzdCwgY29uZCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fYXNzZW1ibGVy
LnRlc3RsSW1tMzJSKG1hc2subV92YWx1ZSwgZGVzdCk7CisKKyAgICAgICAgaWYgKGNvbmQgIT0g
Tm9uWmVybykgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIubW92dChkZXN0KTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIG1fYXNzZW1ibGVyLmVuc3VyZVNwYWNl
KG1fYXNzZW1ibGVyLm1heEluc3RydWN0aW9uU2l6ZSArIDQpOworICAgICAgICBtX2Fzc2VtYmxl
ci5tb3ZJbW04KDAsIGRlc3QpOworICAgICAgICBtX2Fzc2VtYmxlci5icmFuY2goQlRfT1BDT0RF
LCAwKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubW92SW1tOCgxLCBkZXN0KTsKKyAgICB9CisKKyAg
ICB2b2lkIGxvYWRQdHJMaW5rUmVnKEltcGxpY2l0QWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAg
ICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgbG9hZDMyKGFk
ZHJlc3MsIHNjcik7CisgICAgICAgIG1fYXNzZW1ibGVyLmxkc3ByKHNjcik7CisgICAgICAgIHJl
bGVhc2VTY3JhdGNoKHNjcik7CisgICAgfQorCitwdWJsaWM6CisgICAgSnVtcCBicmFuY2gzMihD
b25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBsZWZ0LCBSZWdpc3RlcklEIHJpZ2h0KQorICAgIHsK
KyAgICAgICAgbV9hc3NlbWJsZXIuZW5zdXJlU3BhY2UobV9hc3NlbWJsZXIubWF4SW5zdHJ1Y3Rp
b25TaXplICsgOCwgc2l6ZW9mKHVpbnQzMl90KSk7CisgICAgICAgIG1fYXNzZW1ibGVyLmNtcGxS
ZWdSZWcocmlnaHQsIGxlZnQsIGNvbmQpOworICAgICAgICAKKyAgICAgICAgLyogQlQgbGFiZWwg
PT4gQkYgb2ZmCisgICAgICAgICAgIG5vcCAgICAgICAgIExEUiByZWcKKyAgICAgICAgICAgbm9w
ICAgICAgICAgYnJhZiBAcmVnCisgICAgICAgICAgIG5vcCAgICAgICAgIG5vcAorICAgICAgICAg
Ki8KKyAgICAgICAgaWYgKGNvbmQgPT0gTm90RXF1YWwpCisgICAgICAgICAgICByZXR1cm4gYnJh
bmNoRmFsc2UoKTsKKworICAgICAgICByZXR1cm4gYnJhbmNoVHJ1ZSgpOworICAgIH0KKworICAg
IEp1bXAgYnJhbmNoMzIoQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgbGVmdCwgSW1tMzIgcmln
aHQpCisgICAgeworICAgICAgICBpZiAoKChjb25kID09IEVxdWFsKSB8fCAoY29uZCA9PSBOb3RF
cXVhbCkpICYmICFyaWdodC5tX3ZhbHVlKQorICAgICAgICAgICAgbV9hc3NlbWJsZXIudGVzdGxS
ZWdSZWcobGVmdCwgbGVmdCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fYXNzZW1ibGVy
LmNtcGxJbW1SZWcocmlnaHQubV92YWx1ZSwgbGVmdCwgY29uZCk7CisgICAgICAgICAgICAKKyAg
ICAgICAgaWYgKGNvbmQgPT0gTm90RXF1YWwpCisgICAgICAgICAgICByZXR1cm4gYnJhbmNoRmFs
c2UoKTsKKworICAgICAgICByZXR1cm4gYnJhbmNoVHJ1ZSgpOworICAgIH0KKworICAgIEp1bXAg
YnJhbmNoMzIoQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgbGVmdCwgQWRkcmVzcyByaWdodCkK
KyAgICB7CisgICAgICAgICBtX2Fzc2VtYmxlci5jbXBsTWVtUmVnKHJpZ2h0Lm9mZnNldCwgcmln
aHQuYmFzZSwgbGVmdCwgY29uZCk7CisgICAgICAgIAorICAgICAgICBpZiAoY29uZCA9PSBOb3RF
cXVhbCkKKyAgICAgICAgICAgIHJldHVybiBicmFuY2hGYWxzZSgpOworCisgICAgICAgIHJldHVy
biBicmFuY2hUcnVlKCk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2gzMihDb25kaXRpb24gY29u
ZCwgQWRkcmVzcyBsZWZ0LCBSZWdpc3RlcklEIHJpZ2h0KQorICAgIHsKKyAgICAgICAgbV9hc3Nl
bWJsZXIuY21wbFJlZ01lbShyaWdodCwgbGVmdC5vZmZzZXQsIGxlZnQuYmFzZSwgY29uZCk7Cisg
ICAgICAgICAgICAgICAgCisgICAgICAgIGlmIChjb25kID09IE5vdEVxdWFsKQorICAgICAgICAg
ICAgcmV0dXJuIGJyYW5jaEZhbHNlKCk7CisKKyAgICAgICAgcmV0dXJuIGJyYW5jaFRydWUoKTsK
KyAgICB9CisKKyAgICBKdW1wIGJyYW5jaDMyKENvbmRpdGlvbiBjb25kLCBBZGRyZXNzIGxlZnQs
IEltbTMyIHJpZ2h0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuY21wbEltbU1lbShyaWdo
dC5tX3ZhbHVlLCBsZWZ0Lm9mZnNldCwgbGVmdC5iYXNlLCBjb25kKTsKKyAgICAgICAgCisgICAg
ICAgIGlmIChjb25kID09IE5vdEVxdWFsKQorICAgICAgICAgICAgcmV0dXJuIGJyYW5jaEZhbHNl
KCk7CisKKyAgICAgICAgcmV0dXJuIGJyYW5jaFRydWUoKTsKKyAgICB9CisKKyAgICBKdW1wIGJy
YW5jaDMyKENvbmRpdGlvbiBjb25kLCBBYnNvbHV0ZUFkZHJlc3MgbGVmdCwgUmVnaXN0ZXJJRCBy
aWdodCkKKyAgICB7CisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7Cisg
ICAgICAgIG1vdmUoSW1tMzIoKGludClsZWZ0Lm1fcHRyKSwgc2NyKTsKKyAgICAgICAgbV9hc3Nl
bWJsZXIuY21wbFJlZ1JlZyhyaWdodCwgc2NyLCBjb25kKTsKKyAgICAgICAgcmVsZWFzZVNjcmF0
Y2goc2NyKTsKKworICAgICAgICBpZiAoY29uZCA9PSBOb3RFcXVhbCkKKyAgICAgICAgICAgIHJl
dHVybiBicmFuY2hGYWxzZSgpOworCisgICAgICAgIHJldHVybiBicmFuY2hUcnVlKCk7CisgICAg
fQorCisgICAgSnVtcCBicmFuY2gzMihDb25kaXRpb24gY29uZCwgQWJzb2x1dGVBZGRyZXNzIGxl
ZnQsIEltbTMyIHJpZ2h0KQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCBhZGRyZXNzVGVtcFJl
Z2lzdGVyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIGxvYWQzMihsZWZ0Lm1fcHRyLCBhZGRy
ZXNzVGVtcFJlZ2lzdGVyKTsKKworICAgICAgICBtX2Fzc2VtYmxlci5jbXBsSW1tUmVnKHJpZ2h0
Lm1fdmFsdWUsIGFkZHJlc3NUZW1wUmVnaXN0ZXIsIGNvbmQpOworICAgICAgICByZWxlYXNlU2Ny
YXRjaChhZGRyZXNzVGVtcFJlZ2lzdGVyKTsKKworICAgICAgICBpZiAoY29uZCA9PSBOb3RFcXVh
bCkKKyAgICAgICAgICAgIHJldHVybiBicmFuY2hGYWxzZSgpOworCisgICAgICAgIHJldHVybiBi
cmFuY2hUcnVlKCk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2gxNihDb25kaXRpb24gY29uZCwg
IEJhc2VJbmRleCBsZWZ0LCBSZWdpc3RlcklEIHJpZ2h0KQorICAgIHsKKyAgICAgICAgUmVnaXN0
ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgbW92ZShsZWZ0LmluZGV4LCBzY3Ip
OworICAgICAgICBsc2hpZnQzMihJbW0zMihsZWZ0LnNjYWxlKSwgc2NyKTsKKyAgICAgICAgbV9h
c3NlbWJsZXIuYWRkbEltbVJlZyhsZWZ0Lm9mZnNldCwgc2NyKTsKKyAgICAgICAgYWRkMzIobGVm
dC5iYXNlLCBzY3IpOworICAgICAgICBsb2FkMTYoc2NyLCBzY3IpOworICAgICAgICBleHR1dyhz
Y3IsIHNjcik7CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisKKyAgICAgICAgcmV0dXJu
IGJyYW5jaDMyKGNvbmQsIHNjciwgcmlnaHQpOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoMTYo
Q29uZGl0aW9uIGNvbmQsIEJhc2VJbmRleCBsZWZ0LCBJbW0zMiByaWdodCkKKyAgICB7CisgICAg
ICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIG1vdmUobGVmdC5p
bmRleCwgc2NyKTsKKyAgICAgICAgbHNoaWZ0MzIoSW1tMzIobGVmdC5zY2FsZSksIHNjcik7Cisg
ICAgICAgIG1fYXNzZW1ibGVyLmFkZGxJbW1SZWcobGVmdC5vZmZzZXQsIHNjcik7CisgICAgICAg
IGFkZDMyKGxlZnQuYmFzZSwgc2NyKTsKKyAgICAgICAgbG9hZDE2KHNjciwgc2NyKTsKKyAgICAg
ICAgZXh0dXcoc2NyLCBzY3IpOworICAgICAgICAKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IxID0g
Y2xhaW1TY3JhdGNoKCk7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvYWRDb25zdGFudChyaWdodC5t
X3ZhbHVlLCBzY3IxKTsKKyAgICAgICAgCisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7Cisg
ICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcjEpOworICAgICAgICByZXR1cm4gYnJhbmNoMzIoY29u
ZCwgc2NyLCBzY3IxKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaFRlc3QzMihDb25kaXRpb24g
Y29uZCwgUmVnaXN0ZXJJRCByZWcsIFJlZ2lzdGVySUQgbWFzaykKKyAgICB7CisgICAgICAgIEFT
U0VSVCgoY29uZCA9PSBaZXJvKSB8fCAoY29uZCA9PSBOb25aZXJvKSk7CisgICAgICAgIG1fYXNz
ZW1ibGVyLnRlc3RsUmVnUmVnKHJlZywgbWFzayk7CisKKyAgICAgICAgaWYgKGNvbmQgPT0gTm90
RXF1YWwpCisgICAgICAgICAgICByZXR1cm4gYnJhbmNoRmFsc2UoKTsKKworICAgICAgICByZXR1
cm4gYnJhbmNoVHJ1ZSgpOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoVGVzdDMyKENvbmRpdGlv
biBjb25kLCBSZWdpc3RlcklEIHJlZywgSW1tMzIgbWFzayA9IEltbTMyKC0xKSkKKyAgICB7Cisg
ICAgICAgIEFTU0VSVCgoY29uZCA9PSBaZXJvKSB8fCAoY29uZCA9PSBOb25aZXJvKSk7CisKKyAg
ICAgICAgaWYgKG1hc2subV92YWx1ZSA9PSAtMSkKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnRl
c3RsUmVnUmVnKHJlZywgcmVnKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9hc3NlbWJs
ZXIudGVzdGxJbW0zMlIobWFzay5tX3ZhbHVlLCByZWcpOworICAgICAgICAgICAgCisgICAgICAg
IGlmIChjb25kID09IE5vdEVxdWFsKQorICAgICAgICAgICAgcmV0dXJuIGJyYW5jaEZhbHNlKCk7
CisKKyAgICAgICAgcmV0dXJuIGJyYW5jaFRydWUoKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5j
aFRlc3QzMihDb25kaXRpb24gY29uZCwgQWRkcmVzcyBhZGRyZXNzLCBJbW0zMiBtYXNrID0gSW1t
MzIoLTEpKQorICAgIHsKKyAgICAgICAgQVNTRVJUKChjb25kID09IFplcm8pIHx8IChjb25kID09
IE5vblplcm8pKTsKKworICAgICAgICBpZiAobWFzay5tX3ZhbHVlID09IC0xKQorICAgICAgICAg
ICAgbV9hc3NlbWJsZXIuY21wbEltbU1lbSgwLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNl
LCBjb25kKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9hc3NlbWJsZXIudGVzdGxJbW0z
Mk0obWFzay5tX3ZhbHVlLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlKTsKKyAgICAgICAg
ICAgIAorICAgICAgICBpZiAoY29uZCA9PSBOb3RFcXVhbCkKKyAgICAgICAgICAgIHJldHVybiBi
cmFuY2hGYWxzZSgpOworCisgICAgICAgIHJldHVybiBicmFuY2hUcnVlKCk7CisgICAgfQorCisg
ICAgSnVtcCBicmFuY2hUZXN0MzIoQ29uZGl0aW9uIGNvbmQsIEJhc2VJbmRleCBhZGRyZXNzLCBJ
bW0zMiBtYXNrID0gSW1tMzIoLTEpKQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBj
bGFpbVNjcmF0Y2goKTsKKworICAgICAgICBtb3ZlKGFkZHJlc3MuaW5kZXgsIHNjcik7CisKKyAg
ICAgICAgbHNoaWZ0MzIoSW1tMzIoYWRkcmVzcy5zY2FsZSksIHNjcik7CisgICAgICAgIGFkZDMy
KGFkZHJlc3MuYmFzZSwgc2NyKTsKKyAgICAgICAgbG9hZDMyKHNjciwgYWRkcmVzcy5vZmZzZXQs
IHNjcik7CisKKyAgICAgICAgaWYgKG1hc2subV92YWx1ZSA9PSAtMSkKKyAgICAgICAgICAgIG1f
YXNzZW1ibGVyLnRlc3RsUmVnUmVnKHNjciwgc2NyKTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgbV9hc3NlbWJsZXIudGVzdGxJbW0zMlIobWFzay5tX3ZhbHVlLCBzY3IpOworCisgICAgICAg
IHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgICAgIAorICAgICAgICBpZiAoY29uZCA9PSBOb3RF
cXVhbCkKKyAgICAgICAgICAgIHJldHVybiBicmFuY2hGYWxzZSgpOworCisgICAgICAgIHJldHVy
biBicmFuY2hUcnVlKCk7CisgICAgfQorCisgICAgSnVtcCBqdW1wKCkKKyAgICB7CisgICAgICAg
IHJldHVybiBKdW1wKG1fYXNzZW1ibGVyLmptcCgpKTsKKyAgICB9CisKKyAgICB2b2lkIGp1bXAo
UmVnaXN0ZXJJRCB0YXJnZXQpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5qbXBSZWcodGFy
Z2V0KTsKKyAgICB9CisKKyAgICAvLyBBZGRyZXNzIGlzIGEgbWVtb3J5IGxvY2F0aW9uIGNvbnRh
aW5pbmcgdGhlIGFkZHJlc3MgdG8ganVtcCB0bworICAgIHZvaWQganVtcChBZGRyZXNzIGFkZHJl
c3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5qbXBNZW0oYWRkcmVzcy5vZmZzZXQsIGFk
ZHJlc3MuYmFzZSk7CisgICAgfQorCisgICAgLy8gQXJpdGhtZXRpYyBjb250cm9sIGZsb3cgb3Bl
cmF0aW9ucworCisgICAgSnVtcCBicmFuY2hBZGQzMihDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJ
RCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIEFTU0VSVCgoY29uZCA9PSBP
dmVyZmxvdykgfHwgKGNvbmQgPT0gU2lnbmVkKSk7CisKKyAgICAgICAgaWYgKGNvbmQgPT0gT3Zl
cmZsb3cpIHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmVuc3VyZVNwYWNlKG1fYXNzZW1ibGVy
Lm1heEluc3RydWN0aW9uU2l6ZSArIDgsIHNpemVvZih1aW50MzJfdCkpOworICAgICAgICAgICAg
bV9hc3NlbWJsZXIuYWRkdmxSZWdSZWcoc3JjLCBkZXN0KTsKKyAgICAgICAgICAgIHJldHVybiBi
cmFuY2hUcnVlKCk7CisgICAgICAgIH0KKworICAgICAgICBtX2Fzc2VtYmxlci5lbnN1cmVTcGFj
ZShtX2Fzc2VtYmxlci5tYXhJbnN0cnVjdGlvblNpemUgKyAxMCwgc2l6ZW9mKHVpbnQzMl90KSk7
CisgICAgICAgIG1fYXNzZW1ibGVyLmFkZGxSZWdSZWcoc3JjLCBkZXN0KTsKKyAgICAgICAgLy8g
Q2hlY2sgaWYgZGVzdCBpcyBuZWdhdGl2ZS4KKyAgICAgICAgbV9hc3NlbWJsZXIuY21wbEltbVJl
ZygwLCBkZXN0LCBMZXNzVGhhbik7CisKKyAgICAgICAgcmV0dXJuIGJyYW5jaFRydWUoKTsKKyAg
ICB9CisKKyAgICBKdW1wIGJyYW5jaEFkZDMyKENvbmRpdGlvbiBjb25kLCBJbW0zMiBpbW0sIFJl
Z2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIEFTU0VSVCgoY29uZCA9PSBPdmVyZmxvdykg
fHwgKGNvbmQgPT0gU2lnbmVkKSk7CisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3Jh
dGNoKCk7CisKKyAgICAgICAgbW92ZShpbW0sIHNjcik7CisgICAgICAgIGlmIChjb25kID09IE92
ZXJmbG93KSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5lbnN1cmVTcGFjZShtX2Fzc2VtYmxl
ci5tYXhJbnN0cnVjdGlvblNpemUgKyA4LCBzaXplb2YodWludDMyX3QpKTsKKyAgICAgICAgICAg
IG1fYXNzZW1ibGVyLmFkZHZsUmVnUmVnKHNjciwgZGVzdCk7CisgICAgICAgIH0gZWxzZSBpZiAo
Y29uZCA9PSBTaWduZWQpIHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmVuc3VyZVNwYWNlKG1f
YXNzZW1ibGVyLm1heEluc3RydWN0aW9uU2l6ZSArIDEwLCBzaXplb2YodWludDMyX3QpKTsKKyAg
ICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZGxSZWdSZWcoc2NyLCBkZXN0KTsKKyAgICAgICAgICAg
IC8vIENoZWNrIGlmIGRlc3QgaXMgbmVnYXRpdmUuCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5j
bXBsSW1tUmVnKDAsIGRlc3QsIExlc3NUaGFuKTsKKyAgICAgICAgfQorCisgICAgICAgIHJlbGVh
c2VTY3JhdGNoKHNjcik7CisgICAgICAgIGlmIChjb25kID09IE5vdEVxdWFsKQorICAgICAgICAg
ICAgcmV0dXJuIGJyYW5jaEZhbHNlKCk7CisKKyAgICAgICAgcmV0dXJuIGJyYW5jaFRydWUoKTsK
KyAgICB9CisKKyAgICBKdW1wIGJyYW5jaE11bDMyKENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklE
IHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKChjb25kID09IE92
ZXJmbG93KSB8fCAoY29uZCA9PSBTaWduZWQpIHx8IChjb25kID09IFplcm8pIHx8IChjb25kID09
IE5vblplcm8pKTsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAg
ICAgICAgaWYgKGNvbmQgPT0gT3ZlcmZsb3cpIHsKKyAgICAgICAgICAgIFJlZ2lzdGVySUQgc2Ny
MSA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuZG11bGxSZWdSZWco
c3JjLCBkZXN0KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnN0c21hY2woZGVzdCk7CisKKyAg
ICAgICAgICAgIG1fYXNzZW1ibGVyLm1vdkltbTgoLTMxLCBzY3IpOworICAgICAgICAgICAgbV9h
c3NlbWJsZXIubW92bFJlZ1JlZyhkZXN0LCBzY3IxKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVy
LnNoYVJlZ1JlZyhzY3IxLCBzY3IpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuc3RzbWFjaChz
Y3IpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuY21wbFJlZ1JlZyhzY3IsIHNjcjEsIFplcm8p
OworICAgICAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyMSk7CisgICAgICAgICAgICBjb25kID0g
Tm90RXF1YWw7CisgICAgICAgIH0gZWxzZSBpZiAoY29uZCA9PSBTaWduZWQpIHsKKyAgICAgICAg
ICAgIC8vIENoZWNrIGlmIGRlc3QgaXMgbmVnYXRpdmUuCisgICAgICAgICAgICBtX2Fzc2VtYmxl
ci5pbXVsbFJlZ1JlZyhzcmMsIGRlc3QpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuc3RzbWFj
bChkZXN0KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmNtcGxJbW1SZWcoMCwgZGVzdCwgTGVz
c1RoYW4pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIuaW11bGxS
ZWdSZWcoc3JjLCBkZXN0KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnN0c21hY2woZGVzdCk7
CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5jbXBsSW1tUmVnKDAsIGRlc3QsIGNvbmQpOworICAg
ICAgICB9CisKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICAgICAgaWYgKGNvbmQg
PT0gTm90RXF1YWwpCisgICAgICAgICAgICByZXR1cm4gYnJhbmNoRmFsc2UoKTsKKworICAgICAg
ICByZXR1cm4gYnJhbmNoVHJ1ZSgpOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoTXVsMzIoQ29u
ZGl0aW9uIGNvbmQsIEltbTMyIGltbSwgUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkK
KyAgICB7CisgICAgICAgIEFTU0VSVCgoY29uZCA9PSBPdmVyZmxvdykgfHwgKGNvbmQgPT0gU2ln
bmVkKSB8fCAoY29uZCA9PSBaZXJvKSB8fCAoY29uZCA9PSBOb25aZXJvKSk7CisgICAgICAgIFJl
Z2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIG1vdmUoaW1tLCBzY3IpOwor
ICAgICAgICBpZiAoY29uZCA9PSBPdmVyZmxvdykgeworICAgICAgICAgICAgUmVnaXN0ZXJJRCBz
Y3IxID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5kbXVsbFJlZ1Jl
ZyhzcmMsIHNjcik7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zdHNtYWNsKGRlc3QpOworCisg
ICAgICAgICAgICBtX2Fzc2VtYmxlci5tb3ZJbW04KC0zMSwgc2NyKTsKKyAgICAgICAgICAgIG1f
YXNzZW1ibGVyLm1vdmxSZWdSZWcoZGVzdCwgc2NyMSk7CisgICAgICAgICAgICBtX2Fzc2VtYmxl
ci5zaGFSZWdSZWcoc2NyMSwgc2NyKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnN0c21hY2go
c2NyKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmNtcGxSZWdSZWcoc2NyLCBzY3IxLCBaZXJv
KTsKKyAgICAgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcjEpOworICAgICAgICAgICAgY29uZCA9
IE5vdEVxdWFsOworICAgICAgICB9IGVsc2UgaWYgKGNvbmQgPT0gU2lnbmVkKSB7CisgICAgICAg
ICAgICAvLyBDaGVjayBpZiBkZXN0IGlzIG5lZ2F0aXZlLgorICAgICAgICAgICAgbV9hc3NlbWJs
ZXIuaW11bGxSZWdSZWcoc3JjLCBkZXN0KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnN0c21h
Y2woZGVzdCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5jbXBsSW1tUmVnKDAsIGRlc3QsIExl
c3NUaGFuKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmltdWxs
UmVnUmVnKHNyYywgZGVzdCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zdHNtYWNsKGRlc3Qp
OworICAgICAgICAgICAgbV9hc3NlbWJsZXIuY21wbEltbVJlZygwLCBkZXN0LCBjb25kKTsKKyAg
ICAgICAgfQorCisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgICAgIGlmIChjb25k
ID09IE5vdEVxdWFsKQorICAgICAgICAgICAgcmV0dXJuIGJyYW5jaEZhbHNlKCk7CisKKyAgICAg
ICAgcmV0dXJuIGJyYW5jaFRydWUoKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaFN1YjMyKENv
bmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAg
ICAgICAgQVNTRVJUKChjb25kID09IE92ZXJmbG93KSB8fCAoY29uZCA9PSBTaWduZWQpIHx8IChj
b25kID09IFplcm8pIHx8IChjb25kID09IE5vblplcm8pKTsKKworICAgICAgICBpZiAoY29uZCA9
PSBPdmVyZmxvdykgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIuc3VidmxSZWdSZWcoc3JjLCBk
ZXN0KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmVuc3VyZVNwYWNlKG1fYXNzZW1ibGVyLm1h
eEluc3RydWN0aW9uU2l6ZSArIDgsIHNpemVvZih1aW50MzJfdCkpOworICAgICAgICAgICAgcmV0
dXJuIGJyYW5jaFRydWUoKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChjb25kID09IFNpZ25l
ZCkgeworICAgICAgICAgICAgLy8gQ2hlY2sgaWYgZGVzdCBpcyBuZWdhdGl2ZS4KKyAgICAgICAg
ICAgIG1fYXNzZW1ibGVyLnN1YmxSZWdSZWcoc3JjLCBkZXN0KTsKKyAgICAgICAgICAgIG1fYXNz
ZW1ibGVyLmNtcGxJbW1SZWcoMCwgZGVzdCwgTGVzc1RoYW4pOworICAgICAgICAgICAgbV9hc3Nl
bWJsZXIuZW5zdXJlU3BhY2UobV9hc3NlbWJsZXIubWF4SW5zdHJ1Y3Rpb25TaXplICsgOCwgc2l6
ZW9mKHVpbnQzMl90KSk7CisgICAgICAgICAgICByZXR1cm4gYnJhbmNoVHJ1ZSgpOworICAgICAg
ICB9CisKKyAgICAgICAgc3ViMzIoc3JjLCBkZXN0KTsKKyAgICAgICAgbV9hc3NlbWJsZXIuY21w
bEltbVJlZygwLCBkZXN0LCBjb25kKTsKKworICAgICAgICBpZiAoY29uZCA9PSBOb3RFcXVhbCkK
KyAgICAgICAgICAgIHJldHVybiBicmFuY2hGYWxzZSgpOworCisgICAgICAgIHJldHVybiBicmFu
Y2hUcnVlKCk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2hTdWIzMihDb25kaXRpb24gY29uZCwg
SW1tMzIgaW1tLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBBU1NFUlQoKGNvbmQg
PT0gT3ZlcmZsb3cpIHx8IChjb25kID09IFNpZ25lZCkgfHwgKGNvbmQgPT0gWmVybykgfHwgKGNv
bmQgPT0gTm9uWmVybykpOworCisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNo
KCk7CisgICAgICAgIG1vdmUoaW1tLCBzY3IpOworCisgICAgICAgIGlmIChjb25kID09IE92ZXJm
bG93KSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zdWJ2bFJlZ1JlZyhzY3IsIGRlc3QpOwor
ICAgICAgICAgICAgbV9hc3NlbWJsZXIuZW5zdXJlU3BhY2UobV9hc3NlbWJsZXIubWF4SW5zdHJ1
Y3Rpb25TaXplICsgOCwgc2l6ZW9mKHVpbnQzMl90KSk7CisgICAgICAgICAgICByZWxlYXNlU2Ny
YXRjaChzY3IpOworICAgICAgICAgICAgcmV0dXJuIGJyYW5jaFRydWUoKTsKKyAgICAgICAgfQor
CisgICAgICAgIGlmIChjb25kID09IFNpZ25lZCkgeworICAgICAgICAgICAgLy8gQ2hlY2sgaWYg
ZGVzdCBpcyBuZWdhdGl2ZS4KKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnN1YmxSZWdSZWcoc2Ny
LCBkZXN0KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmNtcGxJbW1SZWcoMCwgZGVzdCwgTGVz
c1RoYW4pOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuZW5zdXJlU3BhY2UobV9hc3NlbWJsZXIu
bWF4SW5zdHJ1Y3Rpb25TaXplICsgOCwgc2l6ZW9mKHVpbnQzMl90KSk7CisgICAgICAgICAgICBy
ZWxlYXNlU2NyYXRjaChzY3IpOworICAgICAgICAgICAgcmV0dXJuIGJyYW5jaFRydWUoKTsKKyAg
ICAgICAgfQorCisgICAgICAgIHN1YjMyKHNjciwgZGVzdCk7CisgICAgICAgIG1fYXNzZW1ibGVy
LmNtcGxJbW1SZWcoMCwgZGVzdCwgY29uZCk7CisgICAgICAgIG1fYXNzZW1ibGVyLmVuc3VyZVNw
YWNlKG1fYXNzZW1ibGVyLm1heEluc3RydWN0aW9uU2l6ZSArIDgsIHNpemVvZih1aW50MzJfdCkp
OworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworCisgICAgICAgIGlmIChjb25kID09IE5v
dEVxdWFsKQorICAgICAgICAgICAgcmV0dXJuIGJyYW5jaEZhbHNlKCk7CisKKyAgICAgICAgcmV0
dXJuIGJyYW5jaFRydWUoKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaE9yMzIoQ29uZGl0aW9u
IGNvbmQsIFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBB
U1NFUlQoKGNvbmQgPT0gU2lnbmVkKSB8fCAoY29uZCA9PSBaZXJvKSB8fCAoY29uZCA9PSBOb25a
ZXJvKSk7CisKKyAgICAgICAgaWYgKGNvbmQgPT0gU2lnbmVkKSB7CisgICAgICAgICAgICBvcjMy
KHNyYywgZGVzdCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5jbXBsSW1tUmVnKDAsIGRlc3Qs
IExlc3NUaGFuKTsKKyAgICAgICAgICAgIHJldHVybiBicmFuY2hUcnVlKCk7CisgICAgICAgIH0K
KworICAgICAgICBvcjMyKHNyYywgZGVzdCk7CisgICAgICAgIG1fYXNzZW1ibGVyLmNtcGxJbW1S
ZWcoMCwgZGVzdCwgY29uZCk7CisgICAgICAgIGlmIChjb25kID09IE5vdEVxdWFsKQorICAgICAg
ICAgICAgcmV0dXJuIGJyYW5jaEZhbHNlKCk7CisKKyAgICAgICAgcmV0dXJuIGJyYW5jaFRydWUo
KTsKKyAgICB9CisKKyAgICB2b2lkIGJyYW5jaENvbnZlcnREb3VibGVUb0ludDMyKEZQUmVnaXN0
ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCwgSnVtcExpc3QmIGZhaWx1cmVDYXNlcywgRlBSZWdp
c3RlcklEIGZwVGVtcCkKKyAgICB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
IH0KKworICAgIHZvaWQgbmVnMzIoUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICBtX2Fz
c2VtYmxlci5uZWcoZHN0LCBkc3QpOworICAgIH0KKworICAgIHZvaWQgbm90MzIoUmVnaXN0ZXJJ
RCBkc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5ub3RsUmVnKGRzdCwgZHN0KTsKKyAg
ICB9CisKKyAgICB2b2lkIHVyc2hpZnQzMihSZWdpc3RlcklEIHNoaWZ0YW1vdW50LCBSZWdpc3Rl
cklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5jbXBsSW1tUmVnKDMyLCBzaGlm
dGFtb3VudCwgRXF1YWwpOworICAgICAgICBtX2Fzc2VtYmxlci5lbnN1cmVTcGFjZShtX2Fzc2Vt
Ymxlci5tYXhJbnN0cnVjdGlvblNpemUgKyA0KTsKKyAgICAgICAgbV9hc3NlbWJsZXIuYnJhbmNo
KEJUX09QQ09ERSwgMSk7CisgICAgICAgIG1fYXNzZW1ibGVyLm5lZyhzaGlmdGFtb3VudCwgc2hp
ZnRhbW91bnQpOworICAgICAgICBtX2Fzc2VtYmxlci5zaGxsUmVnUmVnKGRlc3QsIHNoaWZ0YW1v
dW50KTsKKyAgICB9CisKKyAgICB2b2lkIHVyc2hpZnQzMihJbW0zMiBpbW0sIFJlZ2lzdGVySUQg
ZGVzdCkKKyAgICB7CisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7Cisg
ICAgICAgIG1fYXNzZW1ibGVyLmxvYWRDb25zdGFudCgtKGltbS5tX3ZhbHVlKSwgc2NyKTsKKyAg
ICAgICAgbV9hc3NlbWJsZXIuc2hhUmVnUmVnKGRlc3QsIHNjcik7CisgICAgICAgIHJlbGVhc2VT
Y3JhdGNoKHNjcik7CisgICAgfQorCisgICAgQ2FsbCBjYWxsKCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBDYWxsKG1fYXNzZW1ibGVyLmNhbGwoKSwgQ2FsbDo6TGlua2FibGUpOworICAgIH0KKwor
ICAgIENhbGwgbmVhckNhbGwoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIENhbGwobV9hc3NlbWJs
ZXIuY2FsbCgpLCBDYWxsOjpMaW5rYWJsZU5lYXIpOworICAgIH0KKworICAgIENhbGwgY2FsbChS
ZWdpc3RlcklEIHRhcmdldCkKKyAgICB7CisgICAgICAgIHJldHVybiBDYWxsKG1fYXNzZW1ibGVy
LmNhbGwodGFyZ2V0KSwgQ2FsbDo6Tm9uZSk7CisgICAgfQorCisgICAgdm9pZCBicmVha3BvaW50
KCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmJrcHQoKTsKKyAgICAgICAgbV9hc3NlbWJs
ZXIubm9wKCk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2hQdHJXaXRoUGF0Y2goQ29uZGl0aW9u
IGNvbmQsIFJlZ2lzdGVySUQgbGVmdCwgRGF0YUxhYmVsUHRyJiBkYXRhTGFiZWwsIEltbVB0ciBp
bml0aWFsUmlnaHRWYWx1ZSA9IEltbVB0cigwKSkKKyAgICB7CisgICAgICAgIFJlZ2lzdGVySUQg
ZGF0YVRlbXBSZWdpc3RlciA9IGNsYWltU2NyYXRjaCgpOworCisgICAgICAgIGRhdGFMYWJlbCA9
IG1vdmVXaXRoUGF0Y2goaW5pdGlhbFJpZ2h0VmFsdWUsIGRhdGFUZW1wUmVnaXN0ZXIpOworCisg
ICAgICAgIG1fYXNzZW1ibGVyLmNtcGxSZWdSZWcoZGF0YVRlbXBSZWdpc3RlciwgbGVmdCwgY29u
ZCk7CisKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goZGF0YVRlbXBSZWdpc3Rlcik7CisgICAgICAg
IGlmIChjb25kID09IE5vdEVxdWFsKQorICAgICAgICAgICAgcmV0dXJuIGJyYW5jaEZhbHNlKCk7
CisKKyAgICAgICAgcmV0dXJuIGJyYW5jaFRydWUoKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5j
aFB0cldpdGhQYXRjaChDb25kaXRpb24gY29uZCwgQWRkcmVzcyBsZWZ0LCBEYXRhTGFiZWxQdHIm
IGRhdGFMYWJlbCwgSW1tUHRyIGluaXRpYWxSaWdodFZhbHVlID0gSW1tUHRyKDApKQorICAgIHsK
KyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKworICAgICAgICBtX2Fz
c2VtYmxlci5sb2FkQ29uc3RhbnQobGVmdC5vZmZzZXQsIHNjciwgZmFsc2UpOworICAgICAgICBt
X2Fzc2VtYmxlci5hZGRsUmVnUmVnKGxlZnQuYmFzZSwgc2NyKTsKKyAgICAgICAgbV9hc3NlbWJs
ZXIubW92bE1lbVJlZyhzY3IsIHNjcik7CisKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IxID0gY2xh
aW1TY3JhdGNoKCk7CisgICAgICAgIGRhdGFMYWJlbCA9IG1vdmVXaXRoUGF0Y2goaW5pdGlhbFJp
Z2h0VmFsdWUsIHNjcjEpOworICAgICAgICBtX2Fzc2VtYmxlci5jbXBsUmVnUmVnKHNjcjEsIHNj
ciwgY29uZCk7CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgICAgIHJlbGVhc2VT
Y3JhdGNoKHNjcjEpOworCisgICAgICAgIGlmIChjb25kID09IE5vdEVxdWFsKQorICAgICAgICAg
ICAgcmV0dXJuIGJyYW5jaEZhbHNlKCk7CisKKyAgICAgICAgcmV0dXJuIGJyYW5jaFRydWUoKTsK
KyAgICB9CisKKyAgICB2b2lkIHJldCgpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5yZXQo
KTsKKyAgICAgICAgbV9hc3NlbWJsZXIubm9wKCk7CisgICAgfQorCisgICAgRGF0YUxhYmVsUHRy
IHN0b3JlUHRyV2l0aFBhdGNoKEltbVB0ciBpbml0aWFsVmFsdWUsIEltcGxpY2l0QWRkcmVzcyBh
ZGRyZXNzKQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsK
KyAgICAgICAgRGF0YUxhYmVsUHRyIGxhYmVsID0gbW92ZVdpdGhQYXRjaChpbml0aWFsVmFsdWUs
IHNjcik7CisgICAgICAgIHN0b3JlMzIoc2NyLCBhZGRyZXNzKTsKKyAgICAgICAgcmVsZWFzZVNj
cmF0Y2goc2NyKTsKKyAgICAgICAgcmV0dXJuIGxhYmVsOworICAgIH0KKworICAgIERhdGFMYWJl
bFB0ciBzdG9yZVB0cldpdGhQYXRjaChJbXBsaWNpdEFkZHJlc3MgYWRkcmVzcykgeyByZXR1cm4g
c3RvcmVQdHJXaXRoUGF0Y2goSW1tUHRyKDApLCBhZGRyZXNzKTsgfQorCisgICAgaW50IHNpemVP
ZkNvbnN0YW50UG9vbCgpCisgICAgeworICAgICAgICByZXR1cm4gbV9hc3NlbWJsZXIuc2l6ZU9m
Q29uc3RhbnRQb29sKCk7CisgICAgfQorCisgICAgQ2FsbCB0YWlsUmVjdXJzaXZlQ2FsbCgpCisg
ICAgeworICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBt
X2Fzc2VtYmxlci5sb2FkQ29uc3RhbnQoMHgwLCBzY3IsIHRydWUpOworCisgICAgICAgIEp1bXAg
bV9qdW1wID0gSnVtcChtX2Fzc2VtYmxlci5qbXAoc2NyKSk7CisgICAgICAgIHJlbGVhc2VTY3Jh
dGNoKHNjcik7CisKKyAgICAgICAgcmV0dXJuIENhbGw6OmZyb21UYWlsSnVtcChtX2p1bXApOwor
ICAgIH0KKworICAgIENhbGwgbWFrZVRhaWxSZWN1cnNpdmVDYWxsKEp1bXAgb2xkSnVtcCkKKyAg
ICB7CisgICAgICAgIG9sZEp1bXAubGluayh0aGlzKTsKKyAgICAgICAgcmV0dXJuIHRhaWxSZWN1
cnNpdmVDYWxsKCk7CisgICAgfQorCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBMaW5rQnVm
ZmVyOworICAgIGZyaWVuZCBjbGFzcyBSZXBhdGNoQnVmZmVyOworCisgICAgc3RhdGljIHZvaWQg
bGlua0NhbGwodm9pZCosIENhbGwsIEZ1bmN0aW9uUHRyKTsKKworICAgIHN0YXRpYyB2b2lkIHJl
cGF0Y2hDYWxsKENvZGVMb2NhdGlvbkNhbGwsIENvZGVMb2NhdGlvbkxhYmVsKTsKKworICAgIHN0
YXRpYyB2b2lkIHJlcGF0Y2hDYWxsKENvZGVMb2NhdGlvbkNhbGwsIEZ1bmN0aW9uUHRyKTsKK307
CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxFKEFTU0VNQkxFUikKKwor
I2VuZGlmIC8vIE1hY3JvQXNzZW1ibGVyU0g0X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvU0g0QXNzZW1ibGVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvU0g0QXNzZW1ibGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi5kNmM5NmE5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Fzc2VtYmxlci9TSDRBc3NlbWJsZXIuY3BwCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEgU1RNaWNyb2VsZWN0cm9uaWNzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKworI2lmIEVOQUJMRShBU1NFTUJMRVIpICYmIENQVShTSDQpCisjaW5jbHVkZSAiU0g0
QXNzZW1ibGVyLmgiCisKK25hbWVzcGFjZSBKU0MgeworCisjaWZkZWYgU0g0X0FTU0VNQkxFUl9U
UkFDSU5HCitib29sIFNINEFzc2VtYmxlcjo6ZHVtcE5hdGl2ZUNvZGUgPSBmYWxzZTsKKyNlbmRp
ZgorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShBU1NFTUJMRVIpICYm
IENQVShTSDQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1NI
NEFzc2VtYmxlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9TSDRBc3NlbWJs
ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTYzYjUwCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9TSDRBc3NlbWJsZXIu
aApAQCAtMCwwICsxLDIwMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMSBTVE1p
Y3JvZWxlY3Ryb25pY3MuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBTSDRBc3NlbWJsZXJfaAorI2RlZmluZSBT
SDRBc3NlbWJsZXJfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUo
QVNTRU1CTEVSKSAmJiBDUFUoU0g0KQorCisjaW5jbHVkZSAiQXNzZW1ibGVyQnVmZmVyLmgiCisj
aW5jbHVkZSAiQXNzZW1ibGVyQnVmZmVyV2l0aENvbnN0YW50UG9vbC5oIgorI2luY2x1ZGUgPHN0
ZGludC5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgorCisjaWZuZGVmIHZhX2xpc3QKKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNlbmRpZgorCisj
aWZuZGVmIE5ERUJVRworI2RlZmluZSBTSDRfQVNTRU1CTEVSX1RSQUNJTkcKKyNlbmRpZgorCitp
bmxpbmUgdWludDE2X3QgZ2V0T3Bjb2RlR3JvdXAxKHVpbnQxNl90IG9wYywgaW50IHJtLCBpbnQg
cm4pCit7CisgICAgcmV0dXJuIChvcGMgfCAoKHJtICYgMHhmKSA8PCA4KSB8ICgocm4gJiAweGYp
IDw8IDQpKTsKK30KKworaW5saW5lIHVpbnQxNl90IGdldE9wY29kZUdyb3VwMih1aW50MTZfdCBv
cGMsIGludCBybSkKK3sKKyAgICByZXR1cm4gKG9wYyB8ICgocm0gJiAweGYpIDw8IDgpKTsKK30K
KworaW5saW5lIHVpbnQxNl90IGdldE9wY29kZUdyb3VwMyh1aW50MTZfdCBvcGMsIGludCBybSwg
aW50IHJuKQoreworICAgIHJldHVybiAob3BjIHwgKChybSAmIDB4ZikgPDwgOCkgfCAocm4gJiAw
eGZmKSk7Cit9CisKK2lubGluZSB1aW50MTZfdCBnZXRPcGNvZGVHcm91cDQodWludDE2X3Qgb3Bj
LCBpbnQgcm0sIGludCBybiwgaW50IG9mZnNldCkKK3sKKyAgICByZXR1cm4gKG9wYyB8ICgocm0g
JiAweGYpIDw8IDgpIHwgKChybiAmIDB4ZikgPDwgNCkgfCAob2Zmc2V0ICYgMHhmKSk7Cit9CisK
K2lubGluZSB1aW50MTZfdCBnZXRPcGNvZGVHcm91cDUodWludDE2X3Qgb3BjLCBpbnQgcm0pCit7
CisgICAgcmV0dXJuIChvcGMgfCAocm0gJiAweGZmKSk7Cit9CisKK2lubGluZSB1aW50MTZfdCBn
ZXRPcGNvZGVHcm91cDYodWludDE2X3Qgb3BjLCBpbnQgcm0pCit7CisgICAgcmV0dXJuIChvcGMg
fCAocm0gJiAweGZmZikpOworfQorCitpbmxpbmUgdWludDE2X3QgZ2V0T3Bjb2RlR3JvdXA3KHVp
bnQxNl90IG9wYywgaW50IHJtKQoreworICAgIHJldHVybiAob3BjIHwgKChybSAmIDB4NykgPDwg
OSkpOworfQorCitpbmxpbmUgdWludDE2X3QgZ2V0T3Bjb2RlR3JvdXA4KHVpbnQxNl90IG9wYywg
aW50IHJtLCBpbnQgcm4pCit7CisgICAgcmV0dXJuIChvcGMgfCAoKHJtICYgMHg3KSA8PCA5KSB8
ICgocm4gJiAweDcpIDw8IDUpKTsKK30KKworaW5saW5lIHVpbnQxNl90IGdldE9wY29kZUdyb3Vw
OSh1aW50MTZfdCBvcGMsIGludCBybSwgaW50IHJuKQoreworICAgIHJldHVybiAob3BjIHwgKChy
bSAmIDB4ZikgPDwgOCkgfCAoKHJuICYgMHg3KSA8PCA1KSk7Cit9CisKK2lubGluZSB1aW50MTZf
dCBnZXRPcGNvZGVHcm91cDEwKHVpbnQxNl90IG9wYywgaW50IHJtLCBpbnQgcm4pCit7CisgICAg
cmV0dXJuIChvcGMgfCAoKHJtICYgMHg3KSA8PCA5KSB8ICgocm4gJiAweEYpIDw8IDQpKTsKK30K
KworaW5saW5lIHVpbnQxNl90IGdldE9wY29kZUdyb3VwMTEodWludDE2X3Qgb3BjLCBpbnQgcm0s
IGludCBybikKK3sKKyAgICByZXR1cm4gKG9wYyB8ICgocm0gJiAweGYpIDw8IDQpIHwgKHJuICYg
MHhmKSk7Cit9CisKK2lubGluZSB1aW50MTZfdCBnZXRSbih1aW50MTZfdCB4KQoreworICAgIHJl
dHVybiAoKHggJiAweGYwMCkgPj4gOCk7Cit9CisKK2lubGluZSB1aW50MTZfdCBnZXRSbSh1aW50
MTZfdCB4KQoreworICAgIHJldHVybiAoKHggJiAweGYwKSA+PiA0KTsKK30KKworaW5saW5lIHVp
bnQxNl90IGdldERpc3AodWludDE2X3QgeCkKK3sKKyAgICByZXR1cm4gKHggJiAweGYpOworfQor
CitpbmxpbmUgdWludDE2X3QgZ2V0SW1tOCh1aW50MTZfdCB4KQoreworICAgIHJldHVybiAoeCAm
IDB4ZmYpOworfQorCitpbmxpbmUgdWludDE2X3QgZ2V0SW1tMTIodWludDE2X3QgeCkKK3sKKyAg
ICByZXR1cm4gKHggJiAweGZmZik7Cit9CisKK2lubGluZSB1aW50MTZfdCBnZXREUm4odWludDE2
X3QgeCkKK3sKKyAgICByZXR1cm4gKCh4ICYgMHhFMDApID4+IDkpOworfQorCitpbmxpbmUgdWlu
dDE2X3QgZ2V0RFJtKHVpbnQxNl90IHgpCit7CisgICAgcmV0dXJuICgoeCAmIDB4RTApID4+IDUp
OworfQorCituYW1lc3BhY2UgSlNDIHsKK3R5cGVkZWYgdWludDE2X3QgU0g0V29yZDsKKworZW51
bSB7CisgICAgSU5WQUxJRF9PUENPREUgPSAweGZmZmYsCisgICAgQUREX09QQ09ERSA9IDB4MzAw
QywKKyAgICBBRERJTU1fT1BDT0RFID0gMHg3MDAwLAorICAgIEFERENfT1BDT0RFID0gMHgzMDBF
LAorICAgIEFERFZfT1BDT0RFID0gMHgzMDBGLAorICAgIEFORF9PUENPREUgPSAweDIwMDksCisg
ICAgQU5ESU1NX09QQ09ERSA9IDB4QzkwMCwKKyAgICBESVYwX09QQ09ERSA9IDB4MjAwNywKKyAg
ICBESVYxX09QQ09ERSA9IDB4MzAwNCwKKyAgICBCRl9PUENPREUgPSAweDhCMDAsCisgICAgQkZT
X09QQ09ERSA9IDB4OEYwMCwKKyAgICBCUkFfT1BDT0RFID0gMFhBMDAwLAorICAgIEJSQUZfT1BD
T0RFID0gMHgwMDIzLAorICAgIE5PUF9PUENPREUgPSAweDAwMDksCisgICAgQlNSX09QQ09ERSA9
IDB4QjAwMCwKKyAgICBSVFNfT1BDT0RFID0gMHgwMDBCLAorICAgIEJUX09QQ09ERSA9IDB4ODkw
MCwKKyAgICBCVFNfT1BDT0RFID0gMHg4RDAwLAorICAgIEJTUkZfT1BDT0RFID0gMHgwMDAzLAor
ICAgIEJSS19PUENPREUgPSAweDAwM0IsCisgICAgRlRSQ19PUENPREUgPSAweEYwM0QsCisgICAg
Q01QRVFfT1BDT0RFID0gMHgzMDAwLAorICAgIENNUEVRSU1NX09QQ09ERSA9IDB4ODgwMCwKKyAg
ICBDTVBHRV9PUENPREUgPSAweDMwMDMsCisgICAgQ01QR1RfT1BDT0RFID0gMHgzMDA3LAorICAg
IENNUEhJX09QQ09ERSA9IDB4MzAwNiwKKyAgICBDTVBIU19PUENPREUgPSAweDMwMDIsCisgICAg
Q01QUExfT1BDT0RFID0gMHg0MDE1LAorICAgIENNUFBaX09QQ09ERSA9IDB4NDAxMSwKKyAgICBD
TVBTVFJfT1BDT0RFID0gMHgyMDBDLAorICAgIERUX09QQ09ERSA9IDB4NDAxMCwKKyAgICBGQ01Q
RVFfT1BDT0RFID0gMHhGMDA0LAorICAgIEZDTVBHVF9PUENPREUgPSAweEYwMDUsCisgICAgRk1P
Vl9PUENPREUgPSAweEYwMEMsCisgICAgRE1PVl9PUENPREUgPSAweDFFMDE5LAorICAgIERNT1Zf
V1JJVEVfUjBSTl9PUENPREUgPSAweDFFMDBGLAorICAgIERNT1ZfUkVBRF9SMFJOX09QQ09ERSA9
IDB4MUUwMEQsCisgICAgRkFERF9PUENPREUgPSAweEYwMDAsCisgICAgRk1VTF9PUENPREUgPSAw
eEYwMDIsCisgICAgRlNVQl9PUENPREUgPSAweEYwMDEsCisgICAgRkRJVl9PUENPREUgPSAweEYw
MDMsCisgICAgRk5FR19PUENPREUgPSAweEYwNEQsCisgICAgSk1QX09QQ09ERSA9IDB4NDAyQiwK
KyAgICBKU1JfT1BDT0RFID0gMHg0MDBCLAorICAgIExEU1BSX09QQ09ERSA9IDB4NDAyQSwKKyAg
ICBMRFNMUFJfT1BDT0RFID0gMHg0MDI2LAorICAgIE1PVl9PUENPREUgPSAweDYwMDMsCisgICAg
TU9WSU1NX09QQ09ERSA9IDB4RTAwMCwKKyAgICBNT1ZCX1dSSVRFX1JOX09QQ09ERSA9IDB4MjAw
MCwKKyAgICBNT1ZCX1dSSVRFX1JOREVDX09QQ09ERSA9IDB4MjAwNCwKKyAgICBNT1ZCX1dSSVRF
X1IwUk5fT1BDT0RFID0gMHgwMDA0LAorICAgIE1PVkJfV1JJVEVfT0ZGR0JSX09QQ09ERSA9IDB4
QzAwMCwKKyAgICBNT1ZCX1dSSVRFX09GRlJOX09QQ09ERSA9IDB4ODAwMCwKKyAgICBNT1ZCX1JF
QURfUk1fT1BDT0RFID0gMHg2MDAwLAorICAgIE1PVkJfUkVBRF9STUlOQ19PUENPREUgPSAweDYw
MDQsCisgICAgTU9WQl9SRUFEX1IwUk1fT1BDT0RFID0gMHgwMDBDLAorICAgIE1PVkJfUkVBRF9P
RkZHQlJfT1BDT0RFID0gMHhDNDAwLAorICAgIE1PVkJfUkVBRF9PRkZSTV9PUENPREUgPSAweDg0
MDAsCisgICAgTU9WTF9XUklURV9STl9PUENPREUgPSAweDIwMDIsCisgICAgTU9WTF9XUklURV9S
TkRFQ19PUENPREUgPSAweDIwMDYsCisgICAgTU9WTF9XUklURV9SMFJOX09QQ09ERSA9IDB4MDAw
NiwKKyAgICBNT1ZMX1dSSVRFX09GRkdCUl9PUENPREUgPSAweEMyMDAsCisgICAgTU9WTF9XUklU
RV9PRkZSTl9PUENPREUgPSAweDEwMDAsCisgICAgTU9WTF9SRUFEX1JNX09QQ09ERSA9IDB4NjAw
MiwKKyAgICBNT1ZMX1JFQURfUk1JTkNfT1BDT0RFID0gMHg2MDA2LAorICAgIE1PVkxfUkVBRF9S
MFJNX09QQ09ERSA9IDB4MDAwRSwKKyAgICBNT1ZMX1JFQURfT0ZGR0JSX09QQ09ERSA9IDB4QzYw
MCwKKyAgICBNT1ZMX1JFQURfT0ZGUENfT1BDT0RFID0gMHhEMDAwLAorICAgIE1PVkxfUkVBRF9P
RkZSTV9PUENPREUgPSAweDUwMDAsCisgICAgTU9WV19XUklURV9STl9PUENPREUgPSAweDIwMDEs
CisgICAgTU9WV19SRUFEX1JNX09QQ09ERSA9IDB4NjAwMSwKKyAgICBNT1ZXX1JFQURfUjBSTV9P
UENPREUgPSAweDAwMEQsCisgICAgTU9WV19SRUFEX09GRlBDX09QQ09ERSA9IDB4OTAwMCwKKyAg
ICBNT1ZBX1JFQURfT0ZGUENfT1BDT0RFID0gMHhDNzAwLAorICAgIE1PVlRfT1BDT0RFID0gMHgw
MDI5LAorICAgIE1VTExfT1BDT0RFID0gMHgwMDA3LAorICAgIERNVUxMX0xfT1BDT0RFID0gMHgz
MDA1LAorICAgIFNUU01BQ0xfT1BDT0RFID0gMHgwMDFBLAorICAgIFNUU01BQ0hfT1BDT0RFID0g
MHgwMDBBLAorICAgIERNVUxTTF9PUENPREUgPSAweDMwMEQsCisgICAgTkVHX09QQ09ERSA9IDB4
NjAwQiwKKyAgICBORUdDX09QQ09ERSA9IDB4NjAwQSwKKyAgICBOT1RfT1BDT0RFID0gMHg2MDA3
LAorICAgIE9SX09QQ09ERSA9IDB4MjAwQiwKKyAgICBPUklNTV9PUENPREUgPSAweENCMDAsCisg
ICAgT1JCSU1NX09QQ09ERSA9IDB4Q0YwMCwKKyAgICBTRVRTX09QQ09ERSA9IDB4MDA1OCwKKyAg
ICBTRVRUX09QQ09ERSA9IDB4MDAxOCwKKyAgICBTSEFEX09QQ09ERSA9IDB4NDAwQywKKyAgICBT
SEFMX09QQ09ERSA9IDB4NDAyMCwKKyAgICBTSEFSX09QQ09ERSA9IDB4NDAyMSwKKyAgICBTSExE
X09QQ09ERSA9IDB4NDAwRCwKKyAgICBTSExMX09QQ09ERSA9IDB4NDAwMCwKKyAgICBTSExMMl9P
UENPREUgPSAweDQwMDgsCisgICAgU0hMTDhfT1BDT0RFID0gMHg0MDE4LAorICAgIFNITEwxNl9P
UENPREUgPSAweDQwMjgsCisgICAgU0hMUl9PUENPREUgPSAweDQwMDEsCisgICAgU0hMUjJfT1BD
T0RFID0gMHg0MDA5LAorICAgIFNITFI4X09QQ09ERSA9IDB4NDAxOSwKKyAgICBTSExSMTZfT1BD
T0RFID0gMHg0MDI5LAorICAgIFNUU1BSX09QQ09ERSA9IDB4MDAyQSwKKyAgICBTVFNMUFJfT1BD
T0RFID0gMHg0MDIyLAorICAgIEZMT0FUX09QQ09ERSA9IDB4RjAyRCwKKyAgICBTVUJfT1BDT0RF
ID0gMHgzMDA4LAorICAgIFNVQkNfT1BDT0RFID0gMHgzMDBBLAorICAgIFNVQlZfT1BDT0RFID0g
MHgzMDBCLAorICAgIFRTVF9PUENPREUgPSAweDIwMDgsCisgICAgVFNUSU1NX09QQ09ERSA9IDB4
QzgwMCwKKyAgICBUU1RCX09QQ09ERSA9IDB4Q0MwMCwKKyAgICBFWFRVV19PUENPREUgPSAweDYw
MEQsCisgICAgWE9SX09QQ09ERSA9IDB4MjAwQSwKKyAgICBYT1JJTU1fT1BDT0RFID0gMHhDQTAw
LAorICAgIFhPUkJfT1BDT0RFID0gMHhDRTAwLAorICAgIEZNT1ZTX1JFQURfUk1fSU5DX09QQ09E
RSA9IDB4RjAwOSwKKyAgICBGTU9WU19SRUFEX1JNX09QQ09ERSA9IDB4RjAwOCwKKyAgICBGTU9W
U19SRUFEX1IwUk1fT1BDT0RFID0gMHhGMDA2LAorICAgIEZNT1ZTX1dSSVRFX1JOX09QQ09ERSA9
IDB4RjAwQSwKKyAgICBGTU9WU19XUklURV9STl9ERUNfT1BDT0RFID0gMHhGMDBCLAorICAgIEZN
T1ZTX1dSSVRFX1IwUk5fT1BDT0RFID0gMHhGMDA3LAorICAgIExEU19STV9GUFVMX09QQ09ERSA9
IDB4NDA1QSwKKyAgICBGTERTX0ZSTV9GUFVMX09QQ09ERSA9IDB4RjAxRCwKKyAgICBTVFNfRlBV
TF9STl9PUENPREUgPSAweDAwNUEsCisgICAgRlNUU19GUFVMX0ZSTl9PUENPREUgPSAweEYwMEQs
CisgICAgTERTRlBTQ1JfT1BDT0RFID0gMHg0MDZBLAorICAgIFNUU0ZQU0NSX09QQ09ERSA9IDB4
MDA2QSwKKyAgICBMRFNSTUZQVUxfT1BDT0RFID0gMHg0MDVBLAorICAgIEZTVFNGUFVMRlJOX09Q
Q09ERSA9IDB4RjAwRCwKKyAgICBGU1FSVF9PUENPREUgPSAweEYwNkQsCisgICAgQ0xSVF9PUENP
REUgPSA4LAorfTsKKworbmFtZXNwYWNlIFNINFJlZ2lzdGVycyB7Cit0eXBlZGVmIGVudW0gewor
ICAgIHIwLAorICAgIHIxLAorICAgIHIyLAorICAgIHIzLAorICAgIHI0LAorICAgIHI1LAorICAg
IHI2LAorICAgIHI3LAorICAgIHI4LAorICAgIHI5LAorICAgIHIxMCwKKyAgICByMTEsCisgICAg
cjEyLAorICAgIHIxMywKKyAgICByMTQsIGZwID0gcjE0LAorICAgIHIxNSwgc3AgPSByMTUsCisg
ICAgcGMsCisgICAgcHIsCit9IFJlZ2lzdGVySUQ7CisKK3R5cGVkZWYgZW51bSB7CisgICAgZnIw
LCBkcjAgPSBmcjAsCisgICAgZnIxLAorICAgIGZyMiwgZHIyID0gZnIyLAorICAgIGZyMywKKyAg
ICBmcjQsIGRyNCA9IGZyNCwKKyAgICBmcjUsCisgICAgZnI2LCBkcjYgPSBmcjYsCisgICAgZnI3
LAorICAgIGZyOCwgZHI4ID0gZnI4LAorICAgIGZyOSwKKyAgICBmcjEwLCBkcjEwID0gZnIxMCwK
KyAgICBmcjExLAorICAgIGZyMTIsIGRyMTIgPSBmcjEyLAorICAgIGZyMTMsCisgICAgZnIxNCwg
ZHIxNCA9IGZyMTQsCisgICAgZnIxNSwKK30gRlBSZWdpc3RlcklEOworfQorCitjbGFzcyBTSDRB
c3NlbWJsZXIgeworcHVibGljOgorICAgIHR5cGVkZWYgU0g0UmVnaXN0ZXJzOjpSZWdpc3RlcklE
IFJlZ2lzdGVySUQ7CisgICAgdHlwZWRlZiBTSDRSZWdpc3RlcnM6OkZQUmVnaXN0ZXJJRCBGUFJl
Z2lzdGVySUQ7CisKKyAgICB0eXBlZGVmIEFzc2VtYmxlckJ1ZmZlcldpdGhDb25zdGFudFBvb2w8
NTEyLCA0LCAyLCBTSDRBc3NlbWJsZXI+IFNINEJ1ZmZlcjsKKworICAgIHN0YXRpYyBjb25zdCBS
ZWdpc3RlcklEIHNjcmF0Y2hSZWcxID0gU0g0UmVnaXN0ZXJzOjpyMzsKKyAgICBzdGF0aWMgY29u
c3QgUmVnaXN0ZXJJRCBzY3JhdGNoUmVnMiA9IFNINFJlZ2lzdGVyczo6cjExOworICAgIGludCBj
bGFpbXNjcmF0Y2hSZWc7CisgICAgc3RhdGljIGNvbnN0IHVpbnQzMl90IG1heEluc3RydWN0aW9u
U2l6ZSA9IDE2OworCisjaWZkZWYgU0g0X0FTU0VNQkxFUl9UUkFDSU5HCisgICAgc3RhdGljIGJv
b2wgZHVtcE5hdGl2ZUNvZGU7CisjZW5kaWYKKworICAgIGVudW0geworICAgICAgICBwYWRGb3JB
bGlnbjggPSAweDAwLAorICAgICAgICBwYWRGb3JBbGlnbjE2ID0gMHgwMDA5LAorICAgICAgICBw
YWRGb3JBbGlnbjMyID0gMHgwMDA5MDAwOSwKKyAgICB9OworCisgICAgU0g0QXNzZW1ibGVyKCkK
KyAgICB7CisgICAgICAgIGNsYWltc2NyYXRjaFJlZyA9IDB4MDsKKyNpZmRlZiBTSDRfQVNTRU1C
TEVSX1RSQUNJTkcKKyAgICAgICAgZHVtcE5hdGl2ZUNvZGUgPSBnZXRlbnYoIkphdmFTY3JpcHRD
b3JlRHVtcEpJVCIpOworI2VuZGlmCisgICAgfQorICAgIAorICAgIC8vIFNINCBjb25kaXRpb24g
Y29kZXMuCisgICAgICAgIHR5cGVkZWYgZW51bSB7CisgICAgICAgICAgICBFUSA9IDB4MCwgLy8g
RXF1YWwKKyAgICAgICAgICAgIE5FID0gMHgxLCAvLyBOb3QgRXF1YWwKKyAgICAgICAgICAgIEhT
ID0gMHgyLCAvLyBVbnNpZ2VuZCBHcmVhdGVyIFRoYW4gZXF1YWwKKyAgICAgICAgICAgIEhJID0g
MHgzLCAvLyBVbnNpZ2VuZCBHcmVhdGVyIFRoYW4KKyAgICAgICAgICAgIExTID0gMHg0LCAvLyBV
bnNpZ2VuZCBMb3dlciBvciBTYW1lCisgICAgICAgICAgICBMSSA9IDB4NSwgLy8gVW5zaWdlbmQg
TG93ZXIKKyAgICAgICAgICAgIEdFID0gMHg2LCAvLyBHcmVhdGVyIG9yIEVxdWFsCisgICAgICAg
ICAgICBMVCA9IDB4NywgLy8gTGVzcyBUaGFuCisgICAgICAgICAgICBHVCA9IDB4OCwgLy8gR3Jl
YXRlciBUaGFuCisgICAgICAgICAgICBMRSA9IDB4OSwgLy8gTGVzcyBvciBFcXVhbAorICAgICAg
ICAgICAgT0YgPSAweGEsIC8vIE92ZXJGbG93CisgICAgICAgICAgICBTSSA9IDB4YiwgLy8gU2ln
bmVkCisgICAgICAgICAgICBFUVU9IDB4YywgLy8gRXF1YWwgb3IgdW5vcmRlcmVkKE5hTikKKyAg
ICAgICAgICAgIE5FVT0gMHhkLAorICAgICAgICAgICAgR1RVPSAweGUsCisgICAgICAgICAgICBH
RVU9IDB4ZiwKKyAgICAgICAgICAgIExUVT0gMHgxMCwKKyAgICAgICAgICAgIExFVT0gMHgxMSwK
KyAgICAgICAgfSBDb25kaXRpb247CisgICAgICAgIAorICAgIC8vIE9wYXF1ZSBsYWJlbCB0eXBl
cworcHVibGljOgorCisgICAgY2xhc3MgSm1wU3JjIHsKKyAgICAgICAgZnJpZW5kIGNsYXNzIFNI
NEFzc2VtYmxlcjsKKyAgICBwdWJsaWM6CisgICAgICAgIEptcFNyYygpCisgICAgICAgICAgICA6
IG1fb2Zmc2V0KC0xKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgIHByaXZhdGU6CisgICAg
ICAgIEptcFNyYyhpbnQgb2Zmc2V0KQorICAgICAgICAgICAgOiBtX29mZnNldChvZmZzZXQpCisg
ICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIGludCBtX29mZnNldDsKKyAgICB9OworCisg
ICAgY2xhc3MgSm1wRHN0IHsKKyAgICAgICAgZnJpZW5kIGNsYXNzIFNINEFzc2VtYmxlcjsKKyAg
ICBwdWJsaWM6CisgICAgICAgIEptcERzdCgpCisgICAgICAgICAgICA6IG1fb2Zmc2V0KC0xKQor
ICAgICAgICAgICAgLCBtX3VzZWQoZmFsc2UpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAg
ICAgIGJvb2wgaXNVc2VkKCkgY29uc3QgeyByZXR1cm4gbV91c2VkOyB9CisgICAgICAgIGJvb2wg
aXNTZXQoKSBjb25zdCB7IHJldHVybiAobV9vZmZzZXQgIT0gLTEpOyB9CisgICAgICAgIHZvaWQg
dXNlZCgpIHsgbV91c2VkID0gdHJ1ZTsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgSm1wRHN0
KGludCBvZmZzZXQpCisgICAgICAgICAgICA6IG1fb2Zmc2V0KG9mZnNldCkKKyAgICAgICAgICAg
ICwgbV91c2VkKGZhbHNlKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQobV9vZmZzZXQg
PT0gb2Zmc2V0KTsKKyAgICAgICAgfQorCisgICAgICAgIGludCBtX29mZnNldCA6IDMxOworICAg
ICAgICBpbnQgbV91c2VkIDogMTsKKyAgICB9OworCisgICAgYm9vbCBpc0ltbWVkaWF0ZShpbnQg
Y29uc3RhbnQpCisgICAgeworICAgICAgICByZXR1cm4gKChjb25zdGFudCA8PSAxMjcpICYmIChj
b25zdGFudCA+PSAtMTI4KSk7CisgICAgfQorCisgICAgUmVnaXN0ZXJJRCBjbGFpbVNjcmF0Y2go
KQorICAgIHsKKyAgICAgICAgQVNTRVJUKChjbGFpbXNjcmF0Y2hSZWcgIT0gMHgzKSk7CisKKyAg
ICAgICAgaWYgKCEoY2xhaW1zY3JhdGNoUmVnICYgMHgxKSkgeworICAgICAgICAgICAgY2xhaW1z
Y3JhdGNoUmVnID0gKGNsYWltc2NyYXRjaFJlZyB8IDB4MSk7CisgICAgICAgICAgICByZXR1cm4g
c2NyYXRjaFJlZzE7CisgICAgICAgIH0KKworICAgICAgICBjbGFpbXNjcmF0Y2hSZWcgPSAoY2xh
aW1zY3JhdGNoUmVnIHwgMHgyKTsKKyAgICAgICAgcmV0dXJuIHNjcmF0Y2hSZWcyOworICAgIH0K
KworICAgIHZvaWQgcmVsZWFzZVNjcmF0Y2goUmVnaXN0ZXJJRCBzY3JhdGNoUikgCisgICAgewor
ICAgICAgICBpZiAoc2NyYXRjaFIgPT0gc2NyYXRjaFJlZzEpCisgICAgICAgICAgICBjbGFpbXNj
cmF0Y2hSZWcgPSAoY2xhaW1zY3JhdGNoUmVnICYgMHgyKTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgY2xhaW1zY3JhdGNoUmVnID0gKGNsYWltc2NyYXRjaFJlZyAmIDB4MSk7CisgICAgfQor
CisgICAgLy8gU3RhY2sgb3BlcmF0aW9uczoKKworICAgIHZvaWQgcHVzaFJlZyhSZWdpc3RlcklE
IHJlZykKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYzsKKyAgICAgICAgCisgICAgICAgIGlm
IChyZWcgPT0gU0g0UmVnaXN0ZXJzOjpwcikKKyAgICAgICAgICAgIG9wYyA9IGdldE9wY29kZUdy
b3VwMihTVFNMUFJfT1BDT0RFLCBTSDRSZWdpc3RlcnM6OnNwKTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgb3BjID0gZ2V0T3Bjb2RlR3JvdXAxKE1PVkxfV1JJVEVfUk5ERUNfT1BDT0RFLCBT
SDRSZWdpc3RlcnM6OnNwLCByZWcpOworCisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9
CisKKyAgICB2b2lkIHBvcFJlZyhSZWdpc3RlcklEIHJlZykKKyAgICB7CisgICAgICAgIHVpbnQx
Nl90IG9wYzsKKyAgICAgICAgCisgICAgICAgIGlmIChyZWcgPT0gU0g0UmVnaXN0ZXJzOjpwcikK
KyAgICAgICAgICAgIG9wYyA9IGdldE9wY29kZUdyb3VwMihMRFNMUFJfT1BDT0RFLCBTSDRSZWdp
c3RlcnM6OnNwKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgb3BjID0gZ2V0T3Bjb2RlR3Jv
dXAxKE1PVkxfUkVBRF9STUlOQ19PUENPREUsIHJlZywgU0g0UmVnaXN0ZXJzOjpzcCk7CisgICAg
ICAgIAorICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCBwdXNoSW1t
MzIoaW50IGltbSkKKyAgICB7CisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNo
KCk7CisgICAgICAgIGxvYWRDb25zdGFudChpbW0sIHNjcik7CisgICAgICAgIHB1c2hSZWcoc2Ny
KTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICB9CisKKyAgICB2b2lkIHB1c2hN
ZW0oaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlKQorICAgIHsKKyAgICAgICAgaWYgKChvZmZz
ZXQgPCAwKSB8fCAob2Zmc2V0ID49IDY0KSkgeworICAgICAgICAgICAgUmVnaXN0ZXJJRCBzY3Ig
PSBjbGFpbVNjcmF0Y2goKTsKKworICAgICAgICAgICAgbG9hZENvbnN0YW50KG9mZnNldCwgc2Ny
KTsKKyAgICAgICAgICAgIGFkZGxSZWdSZWcoYmFzZSwgc2NyKTsKKyAgICAgICAgICAgIG1vdmxN
ZW1SZWcoc2NyLCBTSDRSZWdpc3RlcnM6OnNwKTsKKworICAgICAgICAgICAgcmVsZWFzZVNjcmF0
Y2goc2NyKTsKKyAgICAgICAgfSBlbHNlIGlmIChvZmZzZXQpCisgICAgICAgICAgICBtb3ZsTWVt
UmVnKG9mZnNldCA+PiAyLCBiYXNlLCBTSDRSZWdpc3RlcnM6OnNwKTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgbW92bE1lbVJlZyhiYXNlLCBTSDRSZWdpc3RlcnM6OnNwKTsKKworICAgICAg
ICBhZGRsSW1tOHIoLTQsIFNINFJlZ2lzdGVyczo6c3ApOworICAgIH0KKworICAgIHZvaWQgcG9w
TWVtKGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkKKyAgICB7CisgICAgICAgIGlmICgob2Zm
c2V0IDwgMCkgfHwgKG9mZnNldCA+PSA2NCkpIHsKKyAgICAgICAgICAgIFJlZ2lzdGVySUQgc2Ny
ID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgICAgICBsb2FkQ29uc3RhbnQob2Zmc2V0LCBzY3Ip
OworICAgICAgICAgICAgYWRkbFJlZ1JlZyhiYXNlLCBzY3IpOworICAgICAgICAgICAgbW92bFJl
Z01lbShTSDRSZWdpc3RlcnM6OnNwLCBzY3IpOworICAgICAgICAgICAgcmVsZWFzZVNjcmF0Y2go
c2NyKTsKKyAgICAgICAgfSBlbHNlIGlmIChvZmZzZXQpCisgICAgICAgICAgICBtb3ZsUmVnTWVt
KFNINFJlZ2lzdGVyczo6c3AsIG9mZnNldCA+PiAyLCBiYXNlKTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgbW92bFJlZ01lbShTSDRSZWdpc3RlcnM6OnNwLCBiYXNlKTsKKyAgICAgICAgCisg
ICAgICAgIGFkZGxJbW04cig0LCBTSDRSZWdpc3RlcnM6OnNwKTsKKyAgICB9CisKKyAgICB2b2lk
IG1vdnQoUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRP
cGNvZGVHcm91cDIoTU9WVF9PUENPREUsIGRzdCk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsK
KyAgICB9CisKKyAgICAvLyBBcml0aG1ldGljIG9wZXJhdGlvbnM6CisKKyAgICB2b2lkIGFkZGxS
ZWdSZWcoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgdWlu
dDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXAxKEFERF9PUENPREUsIGRzdCwgc3JjKTsKKyAgICAg
ICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAgIHZvaWQgYWRkY2xSZWdSZWcoUmVnaXN0
ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0g
Z2V0T3Bjb2RlR3JvdXAxKEFERENfT1BDT0RFLCBkc3QsIHNyYyk7CisgICAgICAgIG9uZVNob3J0
T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lkIGFkZHZsUmVnUmVnKFJlZ2lzdGVySUQgc3JjLCBS
ZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdy
b3VwMShBRERWX09QQ09ERSwgZHN0LCBzcmMpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7Cisg
ICAgfSAgICAgCisKKyAgICB2b2lkIGFkZGxJbW04cihpbnQgaW1tOCwgUmVnaXN0ZXJJRCBkc3Qp
CisgICAgeworICAgICAgICBBU1NFUlQoKGltbTggPD0gMTI3KSAmJiAoaW1tOCA+PSAtMTI4KSk7
CisgICAgICAgIAorICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDMoQURESU1N
X09QQ09ERSwgZHN0LCBpbW04KTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKwor
ICAgIHZvaWQgYW5kbFJlZ1JlZyhSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpCisgICAg
eworICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDEoQU5EX09QQ09ERSwgZHN0
LCBzcmMpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCBhZGRs
SW1tUmVnKGludCBpbW0sIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgaWYgKGlzSW1t
ZWRpYXRlKGltbSkpIHsKKyAgICAgICAgICAgIGFkZGxJbW04cihpbW0sIGRzdCk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWlt
U2NyYXRjaCgpOworICAgICAgICBsb2FkQ29uc3RhbnQoaW1tLCBzY3IpOworICAgICAgICB1aW50
MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDEoQUREX09QQ09ERSwgZHN0LCBzY3IpOworICAgICAg
ICBvbmVTaG9ydE9wKG9wYyk7CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgfQor
CisgICAgdm9pZCBhbmRsSW1tOHIoaW50IGltbTgsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAg
ICAgICAgQVNTRVJUKChpbW04IDw9IDI1NSkgJiYgKGltbTggPj0gMCkpOworICAgICAgICBBU1NF
UlQoZHN0ID09IFNINFJlZ2lzdGVyczo6cjApOworICAgICAgICAKKyAgICAgICAgdWludDE2X3Qg
b3BjID0gZ2V0T3Bjb2RlR3JvdXA1KEFORElNTV9PUENPREUsIGltbTgpOworICAgICAgICBvbmVT
aG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCBkaXYxbFJlZ1JlZyhSZWdpc3RlcklEIHNy
YywgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNv
ZGVHcm91cDEoRElWMV9PUENPREUsIGRzdCwgc3JjKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMp
OworICAgIH0KKworICAgIHZvaWQgZGl2MGxSZWdSZWcoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVy
SUQgZHN0KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXAxKERJ
VjBfT1BDT0RFLCBkc3QsIHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisK
KyAgICB2b2lkIG5vdGxSZWcoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsK
KyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXAxKE5PVF9PUENPREUsIGRzdCwg
c3JjKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAgIHZvaWQgb3JsUmVn
UmVnKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIHVpbnQx
Nl90IG9wYyA9IGdldE9wY29kZUdyb3VwMShPUl9PUENPREUsIGRzdCwgc3JjKTsKKyAgICAgICAg
b25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAgIHZvaWQgb3JsSW1tOHIoaW50IGltbTgsIFJl
Z2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKChpbW04IDw9IDI1NSkgJiYgKGlt
bTggPj0gMCkpOworICAgICAgICBBU1NFUlQoZHN0ID09IFNINFJlZ2lzdGVyczo6cjApOworICAg
ICAgICAKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXA1KE9SSU1NX09QQ09E
RSwgaW1tOCk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lkIHN1
YmxSZWdSZWcoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAg
IHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3VwMShTVUJfT1BDT0RFLCBkc3QsIHNyYyk7Cisg
ICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCBzdWJ2bFJlZ1JlZyhS
ZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICAgdWludDE2X3Qg
b3BjID0gZ2V0T3Bjb2RlR3JvdXAxKFNVQlZfT1BDT0RFLCBkc3QsIHNyYyk7CisgICAgICAgICBv
bmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCBzdWJsSW1tcihpbnQgaW1tLCBSZWdp
c3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIGlmIChpc0ltbWVkaWF0ZSgtaW1tKSkgeworICAg
ICAgICAgICAgYWRkbEltbThyKC1pbW0sIGRzdCk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKworICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAg
ICBsb2FkQ29uc3RhbnQoaW1tLCBzY3IpOworICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNv
ZGVHcm91cDEoU1VCX09QQ09ERSwgZHN0LCBzY3IpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7
CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgfQorCisgICAgdm9pZCB4b3JsUmVn
UmVnKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIHVpbnQx
Nl90IG9wYyA9IGdldE9wY29kZUdyb3VwMShYT1JfT1BDT0RFLCBkc3QsIHNyYyk7CisgICAgICAg
IG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lkIHhvcmxJbW04cihpbnQgaW1tOCwg
UmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICBBU1NFUlQoKGltbTggPD0gMjU1KSAmJiAo
aW1tOCA+PSAwKSk7CisgICAgICAgIEFTU0VSVChkc3QgPT0gU0g0UmVnaXN0ZXJzOjpyMCk7Cisg
ICAgICAgIAorICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDUoWE9SSU1NX09Q
Q09ERSwgaW1tOCk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lk
IHNobGxJbW04cihpbnQgaW1tLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIHVpbnQx
Nl90IG9wYzsKKyAgICAgICAgCisgICAgICAgIHN3aXRjaCAoaW1tKSB7CisgICAgICAgIGNhc2Ug
MTogb3BjID0gZ2V0T3Bjb2RlR3JvdXAyKFNITExfT1BDT0RFLCBkc3QpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgMjogb3BjID0gZ2V0T3Bjb2RlR3JvdXAyKFNITEwyX09QQ09E
RSwgZHN0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDg6IG9wYyA9IGdldE9w
Y29kZUdyb3VwMihTSExMOF9PUENPREUsIGRzdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSAxNjogb3BjID0gZ2V0T3Bjb2RlR3JvdXAyKFNITEwxNl9PUENPREUsIGRzdCk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDogQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisK
KyAgICB2b2lkIG5lZyhSZWdpc3RlcklEIGRzdCwgUmVnaXN0ZXJJRCBzcmMpCisgICAgeworICAg
ICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDEoTkVHX09QQ09ERSwgZHN0LCBzcmMp
OworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCBzaGxsUmVnUmVn
KFJlZ2lzdGVySUQgZHN0LCBSZWdpc3RlcklEIHJTaGlmdCkKKyAgICB7CisgICAgICAgIHVpbnQx
Nl90IG9wYyA9IGdldE9wY29kZUdyb3VwMShTSExEX09QQ09ERSwgZHN0LCByU2hpZnQpOworICAg
ICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCBzaGxyUmVnUmVnKFJlZ2lz
dGVySUQgZHN0LCBSZWdpc3RlcklEIHJTaGlmdCkKKyAgICB7CisgICAgICAgIG5lZyhyU2hpZnQs
IHJTaGlmdCk7CisgICAgICAgIHNobGxSZWdSZWcoZHN0LCByU2hpZnQpOworICAgIH0KKworICAg
IHZvaWQgc2hhclJlZ1JlZyhSZWdpc3RlcklEIGRzdCwgUmVnaXN0ZXJJRCByU2hpZnQpCisgICAg
eworICAgICAgICBuZWcoclNoaWZ0LCByU2hpZnQpOworICAgICAgICBzaGFSZWdSZWcoZHN0LCBy
U2hpZnQpOworICAgIH0KKworICAgIHZvaWQgc2hhUmVnUmVnKFJlZ2lzdGVySUQgZHN0LCBSZWdp
c3RlcklEIHJTaGlmdCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdy
b3VwMShTSEFEX09QQ09ERSwgZHN0LCByU2hpZnQpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7
CisgICAgfQorCisgICAgdm9pZCBzaGxySW1tOHIoaW50IGltbSwgUmVnaXN0ZXJJRCBkc3QpCisg
ICAgeworICAgICAgICB1aW50MTZfdCBvcGM7CisgICAgICAgIAorICAgICAgICBzd2l0Y2ggKGlt
bSkgeworICAgICAgICBjYXNlIDE6IG9wYyA9IGdldE9wY29kZUdyb3VwMihTSExSX09QQ09ERSwg
ZHN0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDI6IG9wYyA9IGdldE9wY29k
ZUdyb3VwMihTSExSMl9PUENPREUsIGRzdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSA4OiBvcGMgPSBnZXRPcGNvZGVHcm91cDIoU0hMUjhfT1BDT0RFLCBkc3QpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMTY6IG9wYyA9IGdldE9wY29kZUdyb3VwMihTSExS
MTZfT1BDT0RFLCBkc3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6IEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisKKyAgICAgICAgb25lU2hvcnRPcChvcGMp
OworICAgIH0KKworICAgIHZvaWQgaW11bGxSZWdSZWcoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVy
SUQgZHN0KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXAxKE1V
TExfT1BDT0RFLCBkc3QsIHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisK
KyAgICB2b2lkIGRtdWxsUmVnUmVnKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCkKKyAg
ICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3VwMShETVVMTF9MX09QQ09E
RSwgZHN0LCBzcmMpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgdm9p
ZCBkbXVsc2xSZWdSZWcoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAg
ICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXAxKERNVUxTTF9PUENPREUsIGRzdCwg
c3JjKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAgIHZvaWQgc3RzbWFj
bChSZWdpc3RlcklEIHJlZykKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29k
ZUdyb3VwMihTVFNNQUNMX09QQ09ERSwgcmVnKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOwor
ICAgIH0KKworICAgIHZvaWQgc3RzbWFjaChSZWdpc3RlcklEIHJlZykKKyAgICB7CisgICAgICAg
IHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3VwMihTVFNNQUNIX09QQ09ERSwgcmVnKTsKKyAg
ICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAgIC8vIENvbXBhcmlzb25zOgorCisg
ICAgdm9pZCBjbXBsUmVnUmVnKFJlZ2lzdGVySUQgbGVmdCwgUmVnaXN0ZXJJRCByaWdodCwgQ29u
ZGl0aW9uIGNvbmQpCisgICAgeworICAgICAgICB1aW50MTZfdCBvcGM7CisgICAgICAgIAorICAg
ICAgICBzd2l0Y2ggKGNvbmQpIHsKKyAgICAgICAgY2FzZSBORTogb3BjID0gZ2V0T3Bjb2RlR3Jv
dXAxKENNUEVRX09QQ09ERSwgcmlnaHQsIGxlZnQpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgR1Q6IG9wYyA9IGdldE9wY29kZUdyb3VwMShDTVBHVF9PUENPREUsIHJpZ2h0LCBs
ZWZ0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVROiBvcGMgPSBnZXRPcGNv
ZGVHcm91cDEoQ01QRVFfT1BDT0RFLCByaWdodCwgbGVmdCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBHRTogb3BjID0gZ2V0T3Bjb2RlR3JvdXAxKENNUEdFX09QQ09ERSwgcmln
aHQsIGxlZnQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSFM6IG9wYyA9IGdl
dE9wY29kZUdyb3VwMShDTVBIU19PUENPREUsIHJpZ2h0LCBsZWZ0KTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIEhJOiBvcGMgPSBnZXRPcGNvZGVHcm91cDEoQ01QSElfT1BDT0RF
LCByaWdodCwgbGVmdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBMSTogb3Bj
ID0gZ2V0T3Bjb2RlR3JvdXAxKENNUEhJX09QQ09ERSwgbGVmdCwgcmlnaHQpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgTFM6IG9wYyA9IGdldE9wY29kZUdyb3VwMShDTVBIU19P
UENPREUsIGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIExF
OiBvcGMgPSBnZXRPcGNvZGVHcm91cDEoQ01QR0VfT1BDT0RFLCBsZWZ0LCByaWdodCk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBMVDogb3BjID0gZ2V0T3Bjb2RlR3JvdXAxKENN
UEdUX09QQ09ERSwgbGVmdCwgcmlnaHQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRl
ZmF1bHQ6IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisKKyAgICAgICAgb25lU2hv
cnRPcChvcGMpOworICAgIH0KKworICAgIHZvaWQgY21wcGwoUmVnaXN0ZXJJRCByZWcpIC8vIHNp
Z24KKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3VwMihDTVBQTF9P
UENPREUsIHJlZyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lk
IGNtcHB6KFJlZ2lzdGVySUQgcmVnKSAvLyB1bnNpZ24KKyAgICB7CisgICAgICAgIHVpbnQxNl90
IG9wYyA9IGdldE9wY29kZUdyb3VwMihDTVBQWl9PUENPREUsIHJlZyk7CisgICAgICAgIG9uZVNo
b3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lkIGNtcGxJbW1SZWcoaW50IGltbSwgUmVnaXN0
ZXJJRCBkc3QsIENvbmRpdGlvbiBjb25kKQorICAgIHsKKyAgICAgICAgaWYgKCgoY29uZCA9PSBF
USkgfHwgKGNvbmQgPT0gTkUpKSAmJiAoZHN0ID09IFNINFJlZ2lzdGVyczo6cjApICYmIGlzSW1t
ZWRpYXRlKGltbSkpIHsKKyAgICAgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3Vw
NShDTVBFUUlNTV9PUENPREUsIGltbSk7CisgICAgICAgICAgICBvbmVTaG9ydE9wKG9wYyk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBSZWdpc3RlcklEIHNjciA9
IGNsYWltU2NyYXRjaCgpOworICAgICAgICBsb2FkQ29uc3RhbnQoaW1tLCBzY3IpOworICAgICAg
ICBjbXBsUmVnUmVnKHNjciwgZHN0LCBjb25kKTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2Ny
KTsKKyAgICB9CisKKyAgICB2b2lkIGNtcGxNZW1SZWcoaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBi
YXNlLCBSZWdpc3RlcklEIGxlZnQsIENvbmRpdGlvbiBjb25kKQorICAgIHsKKyAgICAgICAgUmVn
aXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKworICAgICAgICBpZiAoKG9mZnNldCA8IDAp
IHx8IChvZmZzZXQgPj0gNjQpKSB7CisgICAgICAgICAgICBsb2FkQ29uc3RhbnQob2Zmc2V0LCBz
Y3IpOworICAgICAgICAgICAgYWRkbFJlZ1JlZyhiYXNlLCBzY3IpOworICAgICAgICAgICAgbW92
bE1lbVJlZyhzY3IsIHNjcik7CisgICAgICAgIH0gZWxzZSBpZiAob2Zmc2V0KQorICAgICAgICAg
ICAgbW92bE1lbVJlZyhvZmZzZXQgPj4gMiwgYmFzZSwgc2NyKTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgbW92bE1lbVJlZyhiYXNlLCBzY3IpOworCisgICAgICAgIGNtcGxSZWdSZWcoc2Ny
LCBsZWZ0LCBjb25kKTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICB9CisKKyAg
ICB2b2lkIGNtcGxSZWdNZW0oUmVnaXN0ZXJJRCByaWdodCwgaW50IG9mZnNldCwgUmVnaXN0ZXJJ
RCBiYXNlLCBDb25kaXRpb24gY29uZCkKKyAgICB7CisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0g
Y2xhaW1TY3JhdGNoKCk7CisKKyAgICAgICAgaWYgKChvZmZzZXQgPCAwKSB8fCAob2Zmc2V0ID49
IDY0KSkgeworICAgICAgICAgICAgbG9hZENvbnN0YW50KG9mZnNldCwgc2NyKTsKKyAgICAgICAg
ICAgIGFkZGxSZWdSZWcoYmFzZSwgc2NyKTsKKyAgICAgICAgICAgIG1vdmxNZW1SZWcoc2NyLCBz
Y3IpOworICAgICAgICB9IGVsc2UgaWYgKG9mZnNldCkKKyAgICAgICAgICAgIG1vdmxNZW1SZWco
b2Zmc2V0ID4+IDIsIGJhc2UsIHNjcik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1vdmxN
ZW1SZWcoYmFzZSwgc2NyKTsKKworICAgICAgICBjbXBsUmVnUmVnKHJpZ2h0LCBzY3IsIGNvbmQp
OworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgIH0KKworICAgIHZvaWQgY21wbElt
bU1lbShpbnQgaW1tLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIENvbmRpdGlvbiBjb25k
KQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAg
ICAgUmVnaXN0ZXJJRCBzY3IxID0gY2xhaW1TY3JhdGNoKCk7CisKKyAgICAgICAgaWYgKChvZmZz
ZXQgPCAwKSB8fCAob2Zmc2V0ID49IDY0KSkgeworICAgICAgICAgICAgbG9hZENvbnN0YW50KG9m
ZnNldCwgc2NyKTsKKyAgICAgICAgICAgIGFkZGxSZWdSZWcoYmFzZSwgc2NyKTsKKyAgICAgICAg
ICAgIG1vdmxNZW1SZWcoc2NyLCBzY3IpOworICAgICAgICB9IGVsc2UgaWYgKG9mZnNldCkKKyAg
ICAgICAgICAgIG1vdmxNZW1SZWcob2Zmc2V0ID4+IDIsIGJhc2UsIHNjcik7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIG1vdmxNZW1SZWcoYmFzZSwgc2NyKTsKKworICAgICAgICBsb2FkQ29u
c3RhbnQoaW1tLCBzY3IxKTsKKyAgICAgICAgY21wbFJlZ1JlZyhzY3IxLCBzY3IsIGNvbmQpOwor
CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcjEpOworICAgICAgICByZWxlYXNlU2NyYXRjaChz
Y3IpOworICAgIH0KKworICAgIHZvaWQgdGVzdGxSZWdSZWcoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lz
dGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXAx
KFRTVF9PUENPREUsIGRzdCwgc3JjKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0K
KworICAgIHZvaWQgdGVzdGxJbW04cihpbnQgaW1tLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7Cisg
ICAgICAgIEFTU0VSVCgoZHN0ID09IFNINFJlZ2lzdGVyczo6cjApICYmIChpbW0gPD0gMjU1KSAm
JiAoaW1tID49IDApKTsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXA1KFRT
VElNTV9PUENPREUsIGltbSk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAg
ICB2b2lkIHRlc3RsSW1tMzJSKGludCBpbW0sIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAg
ICAgaWYgKChkc3QgPT0gU0g0UmVnaXN0ZXJzOjpyMCkgJiYgKGltbSA8PSAyNTUpICYmIChpbW0g
Pj0gMCkpIHsKKyAgICAgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3VwNShUU1RJ
TU1fT1BDT0RFLCBpbW0pOworICAgICAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNj
cmF0Y2goKTsKKyAgICAgICAgbG9hZENvbnN0YW50KGltbSwgc2NyKTsKKyAgICAgICAgdGVzdGxS
ZWdSZWcoc2NyLCBkc3QpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgIH0KKwor
ICAgIHZvaWQgdGVzdGxJbW0zMk0oaW50IGltbSwgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNl
KQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAg
ICAgUmVnaXN0ZXJJRCBzY3IxID0gY2xhaW1TY3JhdGNoKCk7CisKKyAgICAgICAgaWYgKChvZmZz
ZXQgPCAwKSB8fCAob2Zmc2V0ID49IDY0KSkgeworICAgICAgICAgICAgbG9hZENvbnN0YW50KG9m
ZnNldCwgc2NyKTsKKyAgICAgICAgICAgIGFkZGxSZWdSZWcoYmFzZSwgc2NyKTsKKyAgICAgICAg
ICAgIG1vdmxNZW1SZWcoc2NyLCBzY3IpOworICAgICAgICB9IGVsc2UgaWYgKG9mZnNldCkKKyAg
ICAgICAgICAgIG1vdmxNZW1SZWcob2Zmc2V0ID4+IDIsIGJhc2UsIHNjcik7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIG1vdmxNZW1SZWcoYmFzZSwgc2NyKTsKKworICAgICAgICBpZiAoaXNJ
bW1lZGlhdGUoaW1tKSkKKyAgICAgICAgICAgIG1vdkltbTgoaW1tLCBzY3IxKTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgbG9hZENvbnN0YW50KGltbSwgc2NyMSk7CisKKyAgICAgICAgdGVz
dGxSZWdSZWcoc2NyLCBzY3IxKTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICAg
ICAgcmVsZWFzZVNjcmF0Y2goc2NyMSk7CisgICAgfQorCisgICAgdm9pZCB0ZXN0YkltbThyKGlu
dCBpbW0sIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBj
bGFpbVNjcmF0Y2goKTsKKyAgICAgICAgbW92SW1tOChpbW0sIHNjcik7CisgICAgICAgIHRlc3Rs
UmVnUmVnKHNjciwgZHN0KTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICB9CisK
KyAgICB2b2lkIG5vcCgpCisgICAgeworICAgICAgICBwcmludEluc3RyKE5PUF9PUENPREUsIG1f
YnVmZmVyLnVuY2hlY2tlZFNpemUoKSk7CisgICAgICAgIG1fYnVmZmVyLnB1dFNob3J0VW5jaGVj
a2VkKE5PUF9PUENPREUpOworICAgIH0KKworICAgIHZvaWQgc2V0dCgpCisgICAgeworICAgICAg
ICBvbmVTaG9ydE9wKFNFVFRfT1BDT0RFKTsKKyAgICB9CisKKyAgICB2b2lkIGNscnQoKQorICAg
IHsKKyAgICAgICAgcHJpbnRJbnN0cihOT1BfT1BDT0RFLCBtX2J1ZmZlci51bmNoZWNrZWRTaXpl
KCkpOworICAgICAgICBvbmVTaG9ydE9wKENMUlRfT1BDT0RFKTsKKyAgICB9CisKKyAgICB2b2lk
IGJrcHQoKQorICAgIHsKKyAgICAgICAgbV9idWZmZXIucHV0U2hvcnRVbmNoZWNrZWQoQlJLX09Q
Q09ERSk7CisgICAgfQorCisgICAgdm9pZCBicmFuY2godWludDE2X3Qgb3BjLCBpbnQgbGFiZWwp
CisgICAgeworICAgICAgICBzd2l0Y2ggKG9wYykgeworICAgICAgICBjYXNlIEJUX09QQ09ERToK
KyAgICAgICAgICAgIEFTU0VSVCgobGFiZWwgPD0gMTI3KSAmJiAobGFiZWwgPj0gLTEyOCkpOwor
ICAgICAgICAgICAgb3BjID0gZ2V0T3Bjb2RlR3JvdXA1KEJUX09QQ09ERSwgbGFiZWwpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQlJBX09QQ09ERToKKyAgICAgICAgICAgIEFT
U0VSVCgobGFiZWwgPD0gMjA0NykgJiYgKGxhYmVsID49IC0yMDQ4KSk7CisgICAgICAgICAgICBv
cGMgPSBnZXRPcGNvZGVHcm91cDYoQlJBX09QQ09ERSwgbGFiZWwpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgQkZfT1BDT0RFOgorICAgICAgICAgICAgQVNTRVJUKChsYWJlbCA8
PSAxMjcpICYmIChsYWJlbCA+PSAtMTI4KSk7CisgICAgICAgICAgICBvcGMgPSBnZXRPcGNvZGVH
cm91cDUoQkZfT1BDT0RFLCBsYWJlbCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVm
YXVsdDogQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKworICAgICAgICBvbmVTaG9y
dE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCBicmFuY2godWludDE2X3Qgb3BjLCBSZWdpc3Rl
cklEIHJlZykKKyAgICB7CisgICAgICAgIHN3aXRjaCAob3BjKSB7CisgICAgICAgIGNhc2UgQlJB
Rl9PUENPREU6CisgICAgICAgICAgICBvcGMgPSBnZXRPcGNvZGVHcm91cDIoQlJBRl9PUENPREUs
IHJlZyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBKTVBfT1BDT0RFIDoKKyAg
ICAgICAgICAgIG9wYyA9IGdldE9wY29kZUdyb3VwMihKTVBfT1BDT0RFLCByZWcpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSlNSX09QQ09ERSA6CisgICAgICAgICAgICBvcGMg
PSBnZXRPcGNvZGVHcm91cDIoSlNSX09QQ09ERSwgcmVnKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIEJTUkZfT1BDT0RFIDoKKyAgICAgICAgICAgIG9wYyA9IGdldE9wY29kZUdy
b3VwMihCU1JGX09QQ09ERSwgcmVnKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZh
dWx0OiBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorCisgICAgICAgIG9uZVNob3J0
T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lkIGxkc3ByKFJlZ2lzdGVySUQgcmVnKQorICAgIHsK
KyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXAyKExEU1BSX09QQ09ERSwgcmVn
KTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAgIHZvaWQgc3RzcHIoUmVn
aXN0ZXJJRCByZWcpCisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91
cDIoU1RTUFJfT1BDT0RFLCByZWcpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQor
CisgICAgdm9pZCBleHR1dyhSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpCisgICAgewor
ICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDEoRVhUVVdfT1BDT0RFLCBkc3Qs
IHNyYyk7CisKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAgIC8vIGZsb2F0
IG9wZXJhdGlvbnMuCisKKyAgICB2b2lkIGxkc3JtZnB1bChSZWdpc3RlcklEIHNyYykKKyAgICB7
CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3VwMihMRFNfUk1fRlBVTF9PUENP
REUsIHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lkIGZu
ZWcoRlBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9w
Y29kZUdyb3VwMihGTkVHX09QQ09ERSwgZHN0KTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOwor
ICAgIH0KKworICAgIHZvaWQgZnNxcnQoRlBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAg
IHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3VwMihGU1FSVF9PUENPREUsIGRzdCk7CisgICAg
ICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lkIHN0c2ZwdWxSZWcoUmVnaXN0
ZXJJRCBzcmMpCisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDIo
U1RTX0ZQVUxfUk5fT1BDT0RFLCBzcmMpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAg
fQorCisgICAgdm9pZCBmbG9hdGZwdWxmcm4oUmVnaXN0ZXJJRCBzcmMpCisgICAgeworICAgICAg
ICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDIoRkxPQVRfT1BDT0RFLCBzcmMpOworICAg
ICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCBmbXVsbChGUFJlZ2lzdGVy
SUQgc3JjLCBGUFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0g
Z2V0T3Bjb2RlR3JvdXAxKEZNVUxfT1BDT0RFLCBkc3QsIHNyYyk7CisgICAgICAgIG9uZVNob3J0
T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lkIGZtb3ZzUmVhZHJtKFJlZ2lzdGVySUQgc3JjLCBG
UFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2Rl
R3JvdXAxKEZNT1ZTX1JFQURfUk1fT1BDT0RFLCBkc3QsIHNyYyk7CisgICAgICAgIG9uZVNob3J0
T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lkIGZtb3ZzV3JpdGVybShGUFJlZ2lzdGVySUQgc3Jj
LCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29k
ZUdyb3VwMShGTU9WU19XUklURV9STl9PUENPREUsIGRzdCwgc3JjKTsKKyAgICAgICAgb25lU2hv
cnRPcChvcGMpOworICAgIH0KKworICAgIHZvaWQgZm1vdnNXcml0ZXIwcihGUFJlZ2lzdGVySUQg
c3JjLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9w
Y29kZUdyb3VwMShGTU9WU19XUklURV9SMFJOX09QQ09ERSwgZHN0LCBzcmMpOworICAgICAgICBv
bmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCBmbW92c1JlYWRyMHIoUmVnaXN0ZXJJ
RCBzcmMsIEZQUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBn
ZXRPcGNvZGVHcm91cDEoRk1PVlNfUkVBRF9SMFJNX09QQ09ERSwgZHN0LCBzcmMpOworICAgICAg
ICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCBmbW92c1JlYWRybWluYyhSZWdp
c3RlcklEIGRzdCwgRlBSZWdpc3RlcklEIHNyYykKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9w
YyA9IGdldE9wY29kZUdyb3VwMShGTU9WU19SRUFEX1JNX0lOQ19PUENPREUsIGRzdCwgc3JjKTsK
KyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAgIHZvaWQgZm1vdnNXcml0ZXJu
ZGVjKEZQUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgdWlu
dDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXAxKEZNT1ZTX1dSSVRFX1JOX0RFQ19PUENPREUsIGRz
dCwgc3JjKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAgIHZvaWQgZnRy
Y1JlZ2ZwdWwoRlBSZWdpc3RlcklEIHNyYykKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9
IGdldE9wY29kZUdyb3VwMihGVFJDX09QQ09ERSwgc3JjKTsKKyAgICAgICAgb25lU2hvcnRPcChv
cGMpOworICAgIH0KKworICAgIHZvaWQgZmxkc2ZwdWwoUmVnaXN0ZXJJRCBzcmMpCisgICAgewor
ICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDIoRkxEU19GUk1fRlBVTF9PUENP
REUsIHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lkIGZz
dHNmcHVsKFJlZ2lzdGVySUQgc3JjKQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0
T3Bjb2RlR3JvdXAyKEZTVFNfRlBVTF9GUk5fT1BDT0RFLCBzcmMpOworICAgICAgICBvbmVTaG9y
dE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCBsZHNmcHNjcihSZWdpc3RlcklEIHJlZykKKyAg
ICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3VwMihMRFNGUFNDUl9PUENP
REUsIHJlZyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lkIHN0
c2Zwc2NyKFJlZ2lzdGVySUQgcmVnKQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0
T3Bjb2RlR3JvdXAyKFNUU0ZQU0NSX09QQ09ERSwgcmVnKTsKKyAgICAgICAgb25lU2hvcnRPcChv
cGMpOworICAgIH0KKworICAgIC8vIGRvdWJsZSBvcGVyYXRpb25zCisgICAgdm9pZCBkY21wcGVx
KEZQUmVnaXN0ZXJJRCBzcmMsIEZQUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICB1aW50
MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDgoRkNNUEVRX09QQ09ERSwgZHN0ID4+IDEsIHNyYyA+
PjEpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCBkY21wcGd0
KEZQUmVnaXN0ZXJJRCBzcmMsIEZQUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICB1aW50
MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDgoRkNNUEdUX09QQ09ERSwgZHN0ID4+IDEsIHNyYyA+
PjEpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCBkbXVsUmVn
UmVnKEZQUmVnaXN0ZXJJRCBzcmMsIEZQUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICB1
aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDgoRk1VTF9PUENPREUsIGRzdCA+PiAxLCBzcmMg
Pj4xKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAgIHZvaWQgZHN1YlJl
Z1JlZyhGUFJlZ2lzdGVySUQgc3JjLCBGUFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAg
dWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXA4KEZTVUJfT1BDT0RFLCBkc3QgPj4gMSwgc3Jj
ID4+MSk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lkIGRhZGRS
ZWdSZWcoRlBSZWdpc3RlcklEIHNyYywgRlBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAg
IHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3VwOChGQUREX09QQ09ERSwgZHN0ID4+IDEsIHNy
YyA+PjEpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCBkbW92
UmVnUmVnKEZQUmVnaXN0ZXJJRCBzcmMsIEZQUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAg
ICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDgoRk1PVl9PUENPREUsIGRzdCA+PiAxLCBz
cmMgPj4xKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAgIHZvaWQgZGRp
dlJlZ1JlZyhGUFJlZ2lzdGVySUQgc3JjLCBGUFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAg
ICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXA4KEZESVZfT1BDT0RFLCBkc3QgPj4gMSwg
c3JjID4+MSk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lkIGRz
cXJ0KEZQUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRP
cGNvZGVHcm91cDcoRlNRUlRfT1BDT0RFLCBkc3QgPj4gMSk7CisgICAgICAgIG9uZVNob3J0T3Ao
b3BjKTsKKyAgICB9CisKKyAgICB2b2lkIGRvdWJsZWxvYWQoUmVnaXN0ZXJJRCBiYXNlLCBpbnQg
b2Zmc2V0LCBGUFJlZ2lzdGVySUQgZGVzdCwgUmVnaXN0ZXJJRCBzY3IpCisgICAgeworICAgICAg
ICAgbG9hZENvbnN0YW50KG9mZnNldCwgc2NyKTsKKyAgICAgICAgIGlmIChzY3IgPT0gU0g0UmVn
aXN0ZXJzOjpyMCkKKyAgICAgICAgICAgICBmbW92UmVhZHIwcihiYXNlLCBkZXN0KTsKKyAgICAg
ICAgIGVsc2UgaWYgKGJhc2UgPT0gU0g0UmVnaXN0ZXJzOjpyMCkKKyAgICAgICAgICAgICBmbW92
UmVhZHIwcihzY3IsIGRlc3QpOworICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgYWRkbFJl
Z1JlZyhiYXNlLCBzY3IpOworICAgICAgICAgICAgIGZtb3ZSZWFkcm0oc2NyLCBkZXN0KTsKKyAg
ICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIGRuZWcoRlBSZWdpc3RlcklEIGRzdCkKKyAgICB7
CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3VwNyhGTkVHX09QQ09ERSwgZHN0
ID4+IDEpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCBkb3Vi
bGVzdG9yZShGUFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGJhc2UsIGludCBvZmZzZXQsIFJl
Z2lzdGVySUQgc2NyKQorICAgIHsKKyAgICAgICAgbG9hZENvbnN0YW50KG9mZnNldCwgc2NyKTsK
KyAgICAgICAgaWYgKHNjciA9PSBTSDRSZWdpc3RlcnM6OnIwKSB7CisgICAgICAgICAgICBmbW92
V3JpdGVyMHIoc3JjLCBiYXNlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisg
ICAgICAgIGFkZGxSZWdSZWcoYmFzZSwgc2NyKTsKKyAgICAgICAgZm1vdldyaXRlcm0oc3JjLCBz
Y3IpOworICAgIH0KKworICAgIHZvaWQgZm1vdlJlYWRybShSZWdpc3RlcklEIHNyYywgRlBSZWdp
c3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3Vw
MTAoRk1PVlNfUkVBRF9STV9PUENPREUsIGRzdCA+PiAxLCBzcmMpOworICAgICAgICBvbmVTaG9y
dE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCBmbW92V3JpdGVybShGUFJlZ2lzdGVySUQgc3Jj
LCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29k
ZUdyb3VwOShGTU9WU19XUklURV9STl9PUENPREUsIGRzdCwgc3JjID4+IDEpOworICAgICAgICBv
bmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCBmbW92V3JpdGVyMHIoRlBSZWdpc3Rl
cklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBn
ZXRPcGNvZGVHcm91cDkoRk1PVlNfV1JJVEVfUjBSTl9PUENPREUsIGRzdCwgc3JjID4+IDEpOwor
ICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCBmbW92UmVhZHIwcihS
ZWdpc3RlcklEIHNyYywgRlBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90
IG9wYyA9IGdldE9wY29kZUdyb3VwMTAoRk1PVlNfUkVBRF9SMFJNX09QQ09ERSwgZHN0ID4+IDEs
IHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lkIGZtb3ZS
ZWFkcm1pbmMoUmVnaXN0ZXJJRCBkc3QsIEZQUmVnaXN0ZXJJRCBzcmMpCisgICAgeworICAgICAg
ICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDEwKEZNT1ZTX1JFQURfUk1fSU5DX09QQ09E
RSwgZHN0ID4+IDEgLCBzcmMpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisg
ICAgdm9pZCBmbW92V3JpdGVybmRlYyhGUFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCkK
KyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3VwOShGTU9WU19XUklU
RV9STl9ERUNfT1BDT0RFLCBkc3QsIHNyYyA+PiAxKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMp
OworICAgIH0KKworICAgIHZvaWQgZmxvYXRmcHVsRHJlZyhGUFJlZ2lzdGVySUQgc3JjKQorICAg
IHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXA3KEZMT0FUX09QQ09ERSwg
c3JjID4+IDEpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCBm
dHJjZHJtZnB1bChGUFJlZ2lzdGVySUQgc3JjKQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3Bj
ID0gZ2V0T3Bjb2RlR3JvdXA3KEZUUkNfT1BDT0RFLCBzcmMgPj4gMSk7CisgICAgICAgIG9uZVNo
b3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICAvLyBWYXJpb3VzIG1vdmUgb3BzOgorICAgIAorICAg
IHZvaWQgbW92SW1tOChpbnQgaW1tOCwgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICBB
U1NFUlQoKGltbTggPD0gMTI3KSAmJiAoaW1tOCA+PSAtMTI4KSk7CisgICAgICAgIHVpbnQxNl90
IG9wYyA9IGdldE9wY29kZUdyb3VwMyhNT1ZJTU1fT1BDT0RFLCBkc3QsIGltbTgpOworICAgICAg
ICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCBtb3ZsUmVnUmVnKFJlZ2lzdGVy
SUQgc3JjLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdl
dE9wY29kZUdyb3VwMShNT1ZfT1BDT0RFLCBkc3QsIHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Ao
b3BjKTsKKyAgICB9CisKKyAgICB2b2lkIG1vdndSZWdNZW0oUmVnaXN0ZXJJRCBzcmMsIFJlZ2lz
dGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXAx
KE1PVldfV1JJVEVfUk5fT1BDT0RFLCBkc3QsIHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Aob3Bj
KTsKKyAgICB9CisKKyAgICB2b2lkIG1vdndNZW1SZWcoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVy
SUQgZHN0KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXAxKE1P
VldfUkVBRF9STV9PUENPREUsIGRzdCwgc3JjKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOwor
ICAgIH0KKworICAgIHZvaWQgbW92d01lbVJlZyhpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2Us
IFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjOworCisgICAgICAg
IEFTU0VSVChiYXNlID09IFNINFJlZ2lzdGVyczo6cGMpOworICAgICAgICBBU1NFUlQoKG9mZnNl
dCA8PSAyNTUpICYmIChvZmZzZXQgPj0gMCkpOworICAgICAgICBvcGMgPSBnZXRPcGNvZGVHcm91
cDMoTU9WV19SRUFEX09GRlBDX09QQ09ERSwgZHN0LCBvZmZzZXQpOworCisgICAgICAgIG9uZVNo
b3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lkIG1vdndSMG1yKFJlZ2lzdGVySUQgc3JjLCBS
ZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdy
b3VwMShNT1ZXX1JFQURfUjBSTV9PUENPREUsIGRzdCwgc3JjKTsKKyAgICAgICAgb25lU2hvcnRP
cChvcGMpOworICAgIH0KKworICAgIHZvaWQgbW92bFJlZ01lbShSZWdpc3RlcklEIHNyYywgaW50
IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlKQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjOwor
CisgICAgICAgIEFTU0VSVCgob2Zmc2V0IDw9IDE1KSAmJiAob2Zmc2V0ID49IDApKTsKKworICAg
ICAgICBpZiAoIW9mZnNldCkKKyAgICAgICAgICAgIG9wYyA9IGdldE9wY29kZUdyb3VwMShNT1ZM
X1dSSVRFX1JOX09QQ09ERSwgYmFzZSwgc3JjKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
b3BjID0gZ2V0T3Bjb2RlR3JvdXA0KE1PVkxfV1JJVEVfT0ZGUk5fT1BDT0RFLCBiYXNlLCBzcmMs
IG9mZnNldCk7CisKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAgIHZvaWQg
bW92bFJlZ01lbShSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBiYXNlKQorICAgIHsKKyAgICAg
ICAgdWludDE2X3Qgb3BjOworCisgICAgICAgIG9wYyA9IGdldE9wY29kZUdyb3VwMShNT1ZMX1dS
SVRFX1JOX09QQ09ERSwgYmFzZSwgc3JjKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAg
IH0KKworICAgIHZvaWQgbW92bEltbTMyTShpbnQgaW1tLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklE
IGJhc2UpCisgICAgeworICAgICAgICB1aW50MTZfdCBvcGM7CisKKyAgICAgICAgQVNTRVJUKChv
ZmZzZXQgPD0gMTUpICYmIChvZmZzZXQgPj0gMCkpOworCisgICAgICAgIFJlZ2lzdGVySUQgc2Ny
ID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIGxvYWRDb25zdGFudChpbW0sIHNjcik7CisKKyAg
ICAgICAgaWYgKCFvZmZzZXQpCisgICAgICAgICAgICBvcGMgPSBnZXRPcGNvZGVHcm91cDEoTU9W
TF9XUklURV9STl9PUENPREUsIGJhc2UsIHNjcik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IG9wYyA9IGdldE9wY29kZUdyb3VwNChNT1ZMX1dSSVRFX09GRlJOX09QQ09ERSwgYmFzZSwgc2Ny
LCBvZmZzZXQpOworCisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICAgICAgcmVsZWFzZVNj
cmF0Y2goc2NyKTsKKyAgICB9CisKKyAgICB2b2lkIG1vdmxNZW1SZWcoaW50IG9mZnNldCwgUmVn
aXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9w
YzsKKworICAgICAgICBpZiAoYmFzZSA9PSBTSDRSZWdpc3RlcnM6OnBjKSB7CisgICAgICAgICAg
ICBBU1NFUlQoKG9mZnNldCA8PSAyNTUpICYmIChvZmZzZXQgPj0gMCkpOworICAgICAgICAgICAg
b3BjID0gZ2V0T3Bjb2RlR3JvdXAzKE1PVkxfUkVBRF9PRkZQQ19PUENPREUsIGRzdCwgb2Zmc2V0
KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVCgob2Zmc2V0IDw9IDE1KSAm
JiAob2Zmc2V0ID49IDApKTsKKyAgICAgICAgICAgIGlmICghb2Zmc2V0KQorICAgICAgICAgICAg
ICAgIG9wYyA9IGdldE9wY29kZUdyb3VwMShNT1ZMX1JFQURfUk1fT1BDT0RFLCBkc3QsIGJhc2Up
OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG9wYyA9IGdldE9wY29kZUdyb3Vw
NChNT1ZMX1JFQURfT0ZGUk1fT1BDT0RFLCBkc3QsIGJhc2UsIG9mZnNldCk7CisgICAgICAgIH0K
KyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAgIHZvaWQgbW92Yk1lbVJlZyhp
bnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgZHN0KSAvLyBNT1YuQiBAKGRp
c3AsIFJtKSwgcjAKKyAgICB7CisgICAgICAgIEFTU0VSVChkc3QgPT0gU0g0UmVnaXN0ZXJzOjpy
MCk7CisKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXAxMShNT1ZCX1JFQURf
T0ZGUk1fT1BDT0RFLCBiYXNlLCBvZmZzZXQpOworCisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsK
KyAgICB9CisKKyAgICB2b2lkIG1vdmJSMG1yKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRz
dCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3VwMShNT1ZCX1JF
QURfUjBSTV9PUENPREUsIGRzdCwgc3JjKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAg
IH0KKworICAgIHZvaWQgbW92Yk1lbVJlZyhSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3Qp
IC8vIE1PVi5CIEBSbSwgUm4KKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29k
ZUdyb3VwMShNT1ZCX1JFQURfUk1fT1BDT0RFLCBkc3QsIHNyYyk7CisgICAgICAgIG9uZVNob3J0
T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lkIG1vdmxNZW1SZWcoUmVnaXN0ZXJJRCBiYXNlLCBS
ZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdy
b3VwMShNT1ZMX1JFQURfUk1fT1BDT0RFLCBkc3QsIGJhc2UpOworICAgICAgICBvbmVTaG9ydE9w
KG9wYyk7CisgICAgfQorCisgICAgdm9pZCBtb3ZsUjBtcihSZWdpc3RlcklEIHNyYywgUmVnaXN0
ZXJJRCBkc3QpCisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDEo
TU9WTF9SRUFEX1IwUk1fT1BDT0RFLCBkc3QsIHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Aob3Bj
KTsKKyAgICB9CisKKyAgICB2b2lkIG1vdmxSZWdNZW1yMChSZWdpc3RlcklEIHNyYywgUmVnaXN0
ZXJJRCBkc3QpCisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDEo
TU9WTF9XUklURV9SMFJOX09QQ09ERSwgZHN0LCBzcmMpOworICAgICAgICBvbmVTaG9ydE9wKG9w
Yyk7CisgICAgfQorCisgICAgdm9pZCBtb3ZsSW1tOHIoaW50IGltbTgsIFJlZ2lzdGVySUQgZHN0
KQorICAgIHsKKyAgICAgICAgQVNTRVJUKChpbW04IDw9IDEyNykgJiYgKGltbTggPj0gLTEyOCkp
OworICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDMoTU9WSU1NX09QQ09ERSwg
ZHN0LCBpbW04KTsKKworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgdm9p
ZCBvcmxJbW1SZWcoaW50IGltbSwgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICBpZiAo
KGltbSA8PSAyNTUpICYmIChpbW0gPj0gMCkgJiYgKGRzdCA9PSBTSDRSZWdpc3RlcnM6OnIwKSkg
eworICAgICAgICAgICAgb3JsSW1tOHIoaW1tLCBkc3QpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAg
ICAgICAgbG9hZENvbnN0YW50KGltbSwgc2NyKTsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0
T3Bjb2RlR3JvdXAxKE9SX09QQ09ERSwgZHN0LCBzY3IpOworICAgICAgICBvbmVTaG9ydE9wKG9w
Yyk7CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgfQorCisgICAgdm9pZCBsb2Fk
Q29uc3RhbnQodWludDMyX3QgY29uc3RhbnQsIFJlZ2lzdGVySUQgZHN0LCBib29sIHdpdGhwYXRj
aCA9IGZhbHNlKQorICAgIHsKKyAgICAgICAgaWYgKCgoaW50KWNvbnN0YW50IDw9MHg3ZikgJiYg
KChpbnQpY29uc3RhbnQgPj0gLTB4ODApICYmICghd2l0aHBhdGNoKSkgeworICAgICAgICAgICAg
bW92SW1tOChjb25zdGFudCwgZHN0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
CisgICAgICAgIG1fYnVmZmVyLmVuc3VyZVNwYWNlKG1heEluc3RydWN0aW9uU2l6ZSwgc2l6ZW9m
KHVpbnQzMl90KSk7CisgICAgICAgIGxvYWRDb25zdGFudFVuY2hlY2tlZFNpemUoY29uc3RhbnQs
IGRzdCk7CisgICAgfQorCisgICAgdm9pZCBsb2FkQ29uc3RhbnRVbmNoZWNrZWRTaXplKHVpbnQz
Ml90IGNvbnN0YW50LCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9w
YyA9IGdldE9wY29kZUdyb3VwMyhNT1ZJTU1fT1BDT0RFLCBkc3QsIDApOyAvLyB3aWxsIGJlIHBh
dGNoZWQgbGF0ZXIgdG8gbW92LmwKKyAgICAgICAgcHJpbnRJbnN0cihnZXRPcGNvZGVHcm91cDMo
TU9WSU1NX09QQ09ERSwgZHN0LCBjb25zdGFudCksIG1fYnVmZmVyLnVuY2hlY2tlZFNpemUoKSk7
CisgICAgICAgIG1fYnVmZmVyLnB1dFNob3J0V2l0aENvbnN0YW50SW50KG9wYywgY29uc3RhbnQp
OworICAgIH0KKworICAgIC8vIEZsb3cgY29udHJvbDoKKworICAgIEptcFNyYyBjYWxsKCkKKyAg
ICB7CisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIG1f
YnVmZmVyLmVuc3VyZVNwYWNlKG1heEluc3RydWN0aW9uU2l6ZSArIDQsIHNpemVvZih1aW50MzJf
dCkpOworICAgICAgICBsb2FkQ29uc3RhbnRVbmNoZWNrZWRTaXplKDB4MCwgc2NyKTsKKyAgICAg
ICAgYnJhbmNoKEpTUl9PUENPREUsIHNjcik7CisgICAgICAgIG5vcCgpOworICAgICAgICByZWxl
YXNlU2NyYXRjaChzY3IpOworICAgICAgICByZXR1cm4gSm1wU3JjKG1fYnVmZmVyLnVuY2hlY2tl
ZFNpemUoKSk7CisgICAgfQorCisgICAgSm1wU3JjIGNhbGwoUmVnaXN0ZXJJRCBkc3QpCisgICAg
eworICAgICAgICBtX2J1ZmZlci5lbnN1cmVTcGFjZShtYXhJbnN0cnVjdGlvblNpemUgKyAyKTsK
KyAgICAgICAgYnJhbmNoKEpTUl9PUENPREUsIGRzdCk7CisgICAgICAgIG5vcCgpOworICAgICAg
ICByZXR1cm4gSm1wU3JjKG1fYnVmZmVyLnVuY2hlY2tlZFNpemUoKSk7CisgICAgfQorCisgICAg
Sm1wU3JjIGptcCgpCisgICAgeworICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRj
aCgpOworICAgICAgICBtX2J1ZmZlci5lbnN1cmVTcGFjZShtYXhJbnN0cnVjdGlvblNpemUgKyA0
LCBzaXplb2YodWludDMyX3QpKTsKKyAgICAgICAgaW50IG1fc2l6ZSA9IG1fYnVmZmVyLnVuY2hl
Y2tlZFNpemUoKTsKKyAgICAgICAgbG9hZENvbnN0YW50VW5jaGVja2VkU2l6ZSgweDAsIHNjcik7
CisgICAgICAgIGJyYW5jaChCUkFGX09QQ09ERSwgc2NyKTsKKyAgICAgICAgbm9wKCk7CisgICAg
ICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisKKyAgICAgICAgcmV0dXJuIEptcFNyYyhtX3NpemUp
OworICAgIH0KKworICAgIEptcFNyYyBqbXAoUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAg
ICBqbXBSZWcoZHN0KTsKKyAgICAgICAgcmV0dXJuIEptcFNyYyhtX2J1ZmZlci51bmNoZWNrZWRT
aXplKCkpOworICAgIH0KKworICAgIHZvaWQgam1wUmVnKFJlZ2lzdGVySUQgZHN0KQorICAgIHsK
KyAgICAgICAgbV9idWZmZXIuZW5zdXJlU3BhY2UobWF4SW5zdHJ1Y3Rpb25TaXplICsgMik7Cisg
ICAgICAgIGJyYW5jaChKTVBfT1BDT0RFLCBkc3QpOworICAgICAgICBub3AoKTsKKyAgICB9CisK
KyAgICB2b2lkIGptcE1lbShpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UpCisgICAgeworICAg
ICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworCisgICAgICAgIGlmICgob2Zm
c2V0IDwgMCkgfHwgKG9mZnNldCA+PSA2NCkpIHsKKyAgICAgICAgICAgIGxvYWRDb25zdGFudChv
ZmZzZXQsIHNjcik7CisgICAgICAgICAgICBhZGRsUmVnUmVnKGJhc2UsIHNjcik7CisgICAgICAg
ICAgICBtb3ZsTWVtUmVnKHNjciwgc2NyKTsKKyAgICAgICAgfSBlbHNlIGlmIChvZmZzZXQpCisg
ICAgICAgICAgICBtb3ZsTWVtUmVnKG9mZnNldCA+PiAyLCBiYXNlLCBzY3IpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBtb3ZsTWVtUmVnKGJhc2UsIHNjcik7CisKKyAgICAgICAgbV9idWZm
ZXIuZW5zdXJlU3BhY2UobWF4SW5zdHJ1Y3Rpb25TaXplICsgMik7CisgICAgICAgIGJyYW5jaChK
TVBfT1BDT0RFLCBzY3IpOworICAgICAgICBub3AoKTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2go
c2NyKTsKKyAgICB9CisKKyAgICBKbXBTcmMgam5lKCkKKyAgICB7CisgICAgICAgIGludCBtX3Np
emUgPSBtX2J1ZmZlci51bmNoZWNrZWRTaXplKCk7CisgICAgICAgIGJyYW5jaChCRl9PUENPREUs
IDApOworICAgICAgICByZXR1cm4gSm1wU3JjKG1fc2l6ZSk7CisgICAgfQorCisgICAgSm1wU3Jj
IGplKCkKKyAgICB7CisgICAgICAgIGludCBtX3NpemUgPSBtX2J1ZmZlci51bmNoZWNrZWRTaXpl
KCk7CisgICAgICAgIGJyYW5jaChCVF9PUENPREUsIDApOworICAgICAgICByZXR1cm4gSm1wU3Jj
KG1fc2l6ZSk7CisgICAgfQorCisgICAgdm9pZCByZXQoKQorICAgIHsKKyAgICAgICAgbV9idWZm
ZXIuZW5zdXJlU3BhY2UobWF4SW5zdHJ1Y3Rpb25TaXplICsgMik7CisgICAgICAgIG9uZVNob3J0
T3AoUlRTX09QQ09ERSwgZmFsc2UpOworICAgIH0KKworICAgIEptcERzdCBsYWJlbCgpCisgICAg
eworICAgICAgICByZXR1cm4gSm1wRHN0KG1fYnVmZmVyLnNpemUoKSk7CisgICAgfQorCisgICAg
aW50IHNpemVPZkNvbnN0YW50UG9vbCgpCisgICAgeworICAgICAgICAgcmV0dXJuIG1fYnVmZmVy
LnNpemVPZkNvbnN0YW50UG9vbCgpOworICAgIH0KKworICAgIEptcERzdCBhbGlnbihpbnQgYWxp
Z25tZW50KQorICAgIHsKKyAgICAgICAgbV9idWZmZXIuZW5zdXJlU3BhY2UobWF4SW5zdHJ1Y3Rp
b25TaXplICsgMik7CisgICAgICAgIHdoaWxlICghbV9idWZmZXIuaXNBbGlnbmVkKGFsaWdubWVu
dCkpIHsKKyAgICAgICAgICAgIG5vcCgpOworICAgICAgICAgICAgbV9idWZmZXIuZW5zdXJlU3Bh
Y2UobWF4SW5zdHJ1Y3Rpb25TaXplICsgMik7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGxh
YmVsKCk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgY2hhbmdlUENyZWxhdGl2ZUFkZHJlc3Mo
aW50IG9mZnNldCwgdWludDE2X3QqIGluc3RydWN0aW9uUHRyLCB1aW50MzJfdCBuZXdBZGRyZXNz
KQorICAgIHsKKyAgICAgICAgdWludDMyX3QgYWRkcmVzcyA9IChvZmZzZXQgPDwgMikgKyAoKHJl
aW50ZXJwcmV0X2Nhc3Q8dWludDMyX3Q+KGluc3RydWN0aW9uUHRyKSArIDQpICYofjB4MykpOwor
ICAgICAgICAqcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KGFkZHJlc3MpID0gbmV3QWRkcmVz
czsKKyAgICB9CisKKyAgICBzdGF0aWMgdWludDE2X3QqIGdldEluc3RydWN0aW9uUHRyKHZvaWQq
IGNvZGUsIGludCBvZmZzZXQpCisgICAgeworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2Fz
dDx1aW50MTZfdCo+IChyZWludGVycHJldF9jYXN0PHVpbnQzMl90Pihjb2RlKSArIG9mZnNldCk7
CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgbGlua0p1bXAodm9pZCogY29kZSwgSm1wU3JjIGZy
b20sIHZvaWQqIHRvKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGZyb20ubV9vZmZzZXQgIT0gLTEp
OworCisgICAgICAgIHVpbnQxNl90KiBpbnN0cnVjdGlvblB0ciA9IGdldEluc3RydWN0aW9uUHRy
KGNvZGUsIGZyb20ubV9vZmZzZXQpOworICAgICAgICB1aW50MTZfdCBpbnN0cnVjdGlvbiA9ICpp
bnN0cnVjdGlvblB0cjsKKyAgICAgICAgaW50IG9mZnNldEJpdHMgPSAocmVpbnRlcnByZXRfY2Fz
dDx1aW50MzJfdD4odG8pIC0gcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdD4oY29kZSkpIC0gZnJv
bS5tX29mZnNldDsKKworICAgICAgICBpZiAoKChpbnN0cnVjdGlvbiAmIDB4RkYwMCkgPT0gQlRf
T1BDT0RFKSB8fCAoKGluc3RydWN0aW9uICYgMHhGRjAwKSA9PSBCRl9PUENPREUpKSB7CisKKyAg
ICAgICAgICAgIC8qIEJUIGxhYmVsID09PiBCRiAyCisgICAgICAgICAgICAgICBub3AgICAgICAg
ICAgTERSIHJlZworICAgICAgICAgICAgICAgbm9wICAgICAgICAgIGJyYWYgQHJlZworICAgICAg
ICAgICAgICAgbm9wICAgICAgICAgIG5vcAorICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIG9m
ZnNldEJpdHMgLT0gODsKKyAgICAgICAgICAgIGluc3RydWN0aW9uIF49IDB4MDIwMjsKKyAgICAg
ICAgICAgICppbnN0cnVjdGlvblB0cisrID0gaW5zdHJ1Y3Rpb247CisgICAgICAgICAgICBjaGFu
Z2VQQ3JlbGF0aXZlQWRkcmVzcygoKmluc3RydWN0aW9uUHRyICYgMHhGRiksIGluc3RydWN0aW9u
UHRyLCBvZmZzZXRCaXRzKTsKKyAgICAgICAgICAgIGluc3RydWN0aW9uID0gKEJSQUZfT1BDT0RF
IHwgKCppbnN0cnVjdGlvblB0cisrICYgMHhGMDApKTsKKyAgICAgICAgICAgICppbnN0cnVjdGlv
blB0cisrID0gaW5zdHJ1Y3Rpb247CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgICB9Cisg
ICAgICAgICAvKiBNT1YgI2ltbSwgcmVnID0+IExEUiByZWcKKyAgICAgICAgICAgIGJyYWYgQHJl
ZyAgICAgICAgYnJhZiBAcmVnCisgICAgICAgICAgICBub3AgICAgICAgICAgICAgIG5vcAorICAg
ICAgICAgKi8KKworICAgICAgICBBU1NFUlQoKCooaW5zdHJ1Y3Rpb25QdHIgKzEpICYgQlJBRl9P
UENPREUpID09IEJSQUZfT1BDT0RFKTsKKworICAgICAgICBvZmZzZXRCaXRzIC09IDY7CisgICAg
ICAgIGNoYW5nZVBDcmVsYXRpdmVBZGRyZXNzKCgqaW5zdHJ1Y3Rpb25QdHIgJiAweEZGKSwgaW5z
dHJ1Y3Rpb25QdHIsIG9mZnNldEJpdHMpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGxpbmtD
YWxsKHZvaWQqIGNvZGUsIEptcFNyYyBmcm9tLCB2b2lkKiB0bykKKyAgICB7CisgICAgICAgIHVp
bnQxNl90KiBpbnN0cnVjdGlvblB0ciA9IGdldEluc3RydWN0aW9uUHRyKGNvZGUsIGZyb20ubV9v
ZmZzZXQpOworICAgICAgICBpbnN0cnVjdGlvblB0ciAtPSAzOworCisgICAgICAgIGNoYW5nZVBD
cmVsYXRpdmVBZGRyZXNzKCgqaW5zdHJ1Y3Rpb25QdHIgJiAweEZGKSwgaW5zdHJ1Y3Rpb25QdHIs
IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3Q+KHRvKSk7CisgICAgfQorCisgICAgc3RhdGljIHZv
aWQgbGlua1BvaW50ZXIodm9pZCogY29kZSwgSm1wRHN0IHdoZXJlLCB2b2lkKiB2YWx1ZSkKKyAg
ICB7CisgICAgICAgIHVpbnQxNl90KiBpbnN0cnVjdGlvblB0ciA9IGdldEluc3RydWN0aW9uUHRy
KGNvZGUsIHdoZXJlLm1fb2Zmc2V0KTsKKworICAgICAgICBjaGFuZ2VQQ3JlbGF0aXZlQWRkcmVz
cygoKmluc3RydWN0aW9uUHRyICYgMHhGRiksIGluc3RydWN0aW9uUHRyLCByZWludGVycHJldF9j
YXN0PHVpbnQzMl90Pih2YWx1ZSkpOworICAgIH0KKworICAgIHN0YXRpYyB1bnNpZ25lZCBnZXRD
YWxsUmV0dXJuT2Zmc2V0KEptcFNyYyBjYWxsKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGNhbGwu
bV9vZmZzZXQgPj0gMCk7CisgICAgICAgIHJldHVybiBjYWxsLm1fb2Zmc2V0OworICAgIH0KKwor
ICAgIHN0YXRpYyB1aW50MzJfdCogZ2V0TGRySW1tQWRkcmVzc09uUG9vbChTSDRXb3JkKiBpbnNu
LCB1aW50MzJfdCogY29uc3RQb29sKQorICAgIHsKKyAgICAgICAgcmV0dXJuIChjb25zdFBvb2wg
KyAoKmluc24gJiAweGZmKSk7CisgICAgfQorCisgICAgc3RhdGljIFNINFdvcmQgcGF0Y2hDb25z
dGFudFBvb2xMb2FkKFNINFdvcmQgbG9hZCwgaW50IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0
dXJuICgobG9hZCAmIH4weGZmKSB8IHZhbHVlKTsKKyAgICB9CisKKyAgICBzdGF0aWMgQXNzZW1i
bGVyQnVmZmVyOjpUd29TaG9ydHMgcGxhY2VDb25zdGFudFBvb2xCYXJyaWVyKGludCBvZmZzZXQp
CisgICAgeworICAgICAgICBBU1NFUlQoKChvZmZzZXQgPj4gMSkgPD0yMDQ3KSAmJiAoKG9mZnNl
dCA+PiAxKSA+PSAtMjA0OCkpOworICAgICAgICBBc3NlbWJsZXJCdWZmZXI6OlR3b1Nob3J0cyBt
X2JhcnJpZXI7CisKKyAgICAgICAgbV9iYXJyaWVyLmhpZ2ggPSAoQlJBX09QQ09ERSB8IChvZmZz
ZXQgPj4gMSkpOworICAgICAgICBtX2JhcnJpZXIubG93ID0gTk9QX09QQ09ERTsKKworICAgICAg
ICBwcmludEluc3RyKCgoQlJBX09QQ09ERSB8IChvZmZzZXQgPj4gMSkpKSwgMCk7CisgICAgICAg
IHByaW50SW5zdHIoTk9QX09QQ09ERSwgMCk7CisgICAgICAgIHJldHVybiBtX2JhcnJpZXI7Cisg
ICAgfQorCisgICAgc3RhdGljIHZvaWQgcGF0Y2hDb25zdGFudFBvb2xMb2FkKHZvaWQqIGxvYWRB
ZGRyLCB2b2lkKiBjb25zdFBvb2xBZGRyKQorICAgIHsKKyAgICAgICAgU0g0V29yZCogaW5zdHJ1
Y3Rpb25QdHIgPSByZWludGVycHJldF9jYXN0PFNINFdvcmQqPihsb2FkQWRkcik7CisgICAgICAg
IFNINFdvcmQgaW5zdHJ1Y3Rpb24gPSAqaW5zdHJ1Y3Rpb25QdHI7CisgICAgICAgIFNINFdvcmQg
aW5kZXggPSBpbnN0cnVjdGlvbiAmIDB4ZmY7CisgICAgICAgIAorICAgICAgICBBU1NFUlQoKCgo
cmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdD4oY29uc3RQb29sQWRkcikgLSByZWludGVycHJldF9j
YXN0PHVpbnQzMl90Pihsb2FkQWRkcikpICsgaW5kZXggKiA0KSkgPCAxMDI0KTsKKworICAgICAg
ICBpbnQgb2Zmc2V0ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdD4oY29uc3RQb29sQWRkcikg
KyAoaW5kZXggKiA0KSAtICgocmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdD4oaW5zdHJ1Y3Rpb25Q
dHIpICYgfjB4MDMpICsgNCk7CisKKyAgICAgICAgaW5zdHJ1Y3Rpb24gJj0weGYwMDsKKyAgICAg
ICAgaW5zdHJ1Y3Rpb24gfD0gMHhEMDAwOworICAgICAgICBvZmZzZXQgJj0gMHgwM2ZmOworICAg
ICAgICBpbnN0cnVjdGlvbiB8PSAob2Zmc2V0ID4+IDIpOworICAgICAgICAqaW5zdHJ1Y3Rpb25Q
dHIgPSBpbnN0cnVjdGlvbjsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCByZXBhdGNoUG9pbnRl
cih2b2lkKiB3aGVyZSwgdm9pZCogdmFsdWUpCisgICAgeworICAgICAgICBwYXRjaFBvaW50ZXIo
d2hlcmUsIHZhbHVlKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCByZXBhdGNoSW50MzIodm9p
ZCogd2hlcmUsIGludDMyX3QgdmFsdWUpCisgICAgeworICAgICAgICB1aW50MTZfdCogaW5zdHJ1
Y3Rpb25QdHIgPSByZWludGVycHJldF9jYXN0PHVpbnQxNl90Kj4od2hlcmUpOworCisgICAgICAg
IGNoYW5nZVBDcmVsYXRpdmVBZGRyZXNzKCgqaW5zdHJ1Y3Rpb25QdHIgJiAweEZGKSwgaW5zdHJ1
Y3Rpb25QdHIsIHZhbHVlKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCByZWxpbmtDYWxsKHZv
aWQqIGZyb20sIHZvaWQqIHRvKQorICAgIHsKKyAgICAgICAgdWludDE2X3QqIGluc3RydWN0aW9u
UHRyID0gcmVpbnRlcnByZXRfY2FzdDx1aW50MTZfdCo+KGZyb20pOworICAgICAgICBpbnN0cnVj
dGlvblB0ciAtPSAzOworCisgICAgICAgIGNoYW5nZVBDcmVsYXRpdmVBZGRyZXNzKCgqaW5zdHJ1
Y3Rpb25QdHIgJiAweEZGKSwgaW5zdHJ1Y3Rpb25QdHIsIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMy
X3Q+KHRvKSk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgcmVsaW5rSnVtcCh2b2lkKiBmcm9t
LCB2b2lkKiB0bykKKyAgICB7CisgICAgICAgIHVpbnQxNl90KiBpbnN0cnVjdGlvblB0ciA9IHJl
aW50ZXJwcmV0X2Nhc3Q8dWludDE2X3QqPiAoZnJvbSk7CisgICAgICAgIHVpbnQxNl90IGluc3Ry
dWN0aW9uID0gKmluc3RydWN0aW9uUHRyOworICAgICAgICBpbnQzMl90IG9mZnNldEJpdHMgPSAo
cmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdD4odG8pIC0gcmVpbnRlcnByZXRfY2FzdDx1aW50MzJf
dD4oZnJvbSkpOworICAgICAgICB1aW50MTZfdCogYWRkcmVzczsKKworICAgICAgICBpZiAoKCgq
aW5zdHJ1Y3Rpb25QdHIgJiAweEZGMDApID09IEJUX09QQ09ERSkgfHwgKCgqaW5zdHJ1Y3Rpb25Q
dHIgJiAweEZGMDApID09IEJGX09QQ09ERSkpIHsKKworICAgICAgICAgICAgb2Zmc2V0Qml0cyAt
PSA4OworICAgICAgICAgICAgaW5zdHJ1Y3Rpb25QdHIrKzsKKworICAgICAgICAgICAgY2hhbmdl
UENyZWxhdGl2ZUFkZHJlc3MoKCppbnN0cnVjdGlvblB0ciAmIDB4RkYpLCBpbnN0cnVjdGlvblB0
ciwgb2Zmc2V0Qml0cyk7CisKKyAgICAgICAgICAgIGluc3RydWN0aW9uID0gKEJSQUZfT1BDT0RF
IHwgKCppbnN0cnVjdGlvblB0cisrICYgMHhGMDApKTsKKyAgICAgICAgICAgICppbnN0cnVjdGlv
blB0cisrID0gaW5zdHJ1Y3Rpb247CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgICB9CisK
KyAgICAgICAgQVNTRVJUKCgqKGluc3RydWN0aW9uUHRyICsxKSAmIEJSQUZfT1BDT0RFKSA9PSBC
UkFGX09QQ09ERSk7CisgICAgICAgIG9mZnNldEJpdHMgLT0gNjsKKyAgICAgICAgaW50IG9mZnNl
dFRvUEMgPSAoKmluc3RydWN0aW9uUHRyICYgMHhGRik7CisKKyAgICAgICAgY2hhbmdlUENyZWxh
dGl2ZUFkZHJlc3MoKCppbnN0cnVjdGlvblB0ciAmIDB4RkYpLCBpbnN0cnVjdGlvblB0ciwgb2Zm
c2V0Qml0cyk7CisgICAgfQorCisgICAgLy8gTGlua2luZyAmIHBhdGNoaW5nOgorCisgICAgdm9p
ZCBsaW5rSnVtcChKbXBTcmMgZnJvbSwgSm1wRHN0IHRvKQorICAgIHsKKyAgICAgICAgQVNTRVJU
KHRvLm1fb2Zmc2V0ICE9IC0xKTsKKyAgICAgICAgQVNTRVJUKGZyb20ubV9vZmZzZXQgIT0gLTEp
OworCisgICAgICAgIHVpbnQxNl90KiBpbnN0cnVjdGlvblB0ciA9IGdldEluc3RydWN0aW9uUHRy
KGRhdGEoKSwgZnJvbS5tX29mZnNldCk7CisgICAgICAgIHVpbnQxNl90IGluc3RydWN0aW9uID0g
Kmluc3RydWN0aW9uUHRyOworICAgICAgICBpbnQgb2Zmc2V0Qml0czsKKworICAgICAgICBpZiAo
KChpbnN0cnVjdGlvbiAmIDB4RkYwMCkgPT0gQlRfT1BDT0RFKSB8fCAoKGluc3RydWN0aW9uICYg
MHhGRjAwKSA9PSBCRl9PUENPREUpKSB7CisKKyAgICAgICAgICAgIC8qIEJUIGxhYmVsID0+IEJG
IDIKKyAgICAgICAgICAgICAgIG5vcCAgICAgICAgTERSIHJlZworICAgICAgICAgICAgICAgbm9w
ICAgICAgICBicmFmIEByZWcKKyAgICAgICAgICAgICAgIG5vcCAgICAgICAgbm9wCisgICAgICAg
ICAgICAqLworICAgICAgICAgICAgb2Zmc2V0Qml0cyA9ICh0by5tX29mZnNldCAtIGZyb20ubV9v
ZmZzZXQpIC0gODsKKyAgICAgICAgICAgIGluc3RydWN0aW9uIF49IDB4MDIwMjsKKyAgICAgICAg
ICAgICppbnN0cnVjdGlvblB0cisrID0gaW5zdHJ1Y3Rpb247CisKKyAgICAgICAgICAgIGlmICgo
Kmluc3RydWN0aW9uUHRyICYgMHhGMDAwKSA9PSAweEUwMDApIHsKKyAgICAgICAgICAgICAgICB1
aW50MzJfdCogYWRkciA9IGdldExkckltbUFkZHJlc3NPblBvb2woaW5zdHJ1Y3Rpb25QdHIsIG1f
YnVmZmVyLnBvb2xBZGRyZXNzKCkpOworICAgICAgICAgICAgICAgICphZGRyID0gb2Zmc2V0Qml0
czsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIGNoYW5nZVBDcmVsYXRpdmVB
ZGRyZXNzKCgqaW5zdHJ1Y3Rpb25QdHIgJiAweEZGKSwgaW5zdHJ1Y3Rpb25QdHIsIG9mZnNldEJp
dHMpOworCisgICAgICAgICAgICBpbnN0cnVjdGlvbiA9IChCUkFGX09QQ09ERSB8ICgqaW5zdHJ1
Y3Rpb25QdHIrKyAmIDB4RjAwKSk7CisgICAgICAgICAgICAqaW5zdHJ1Y3Rpb25QdHIrKyA9IGlu
c3RydWN0aW9uOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIC8qIE1P
ViAjIGltbSwgcmVnID0+IExEUiByZWcKKyAgICAgICAgICAgYnJhZiBAcmVnICAgICAgICAgYnJh
ZiBAcmVnCisgICAgICAgICAgIG5vcCAgICAgICAgICAgICAgIG5vcAorICAgICAgICAqLworCisg
ICAgICAgIEFTU0VSVCgoKihpbnN0cnVjdGlvblB0ciArMSkgJiBCUkFGX09QQ09ERSkgPT0gQlJB
Rl9PUENPREUpOworICAgICAgICBvZmZzZXRCaXRzID0gKHRvLm1fb2Zmc2V0IC0gZnJvbS5tX29m
ZnNldCkgLSA2OworCisgICAgICAgIGluc3RydWN0aW9uID0gKmluc3RydWN0aW9uUHRyOworCisg
ICAgICAgIGlmICgoaW5zdHJ1Y3Rpb24gICYgMHhGMDAwKSA9PSAweEUwMDApIHsKKyAgICAgICAg
ICAgIHVpbnQzMl90KiBhZGRyID0gZ2V0TGRySW1tQWRkcmVzc09uUG9vbChpbnN0cnVjdGlvblB0
ciwgbV9idWZmZXIucG9vbEFkZHJlc3MoKSk7CisgICAgICAgICAgICAqYWRkciA9IG9mZnNldEJp
dHM7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgY2hhbmdlUENyZWxhdGl2ZUFkZHJlc3Mo
KCppbnN0cnVjdGlvblB0ciAmIDB4RkYpLCBpbnN0cnVjdGlvblB0ciwgb2Zmc2V0Qml0cyk7Cisg
ICAgfQorCisgICAgc3RhdGljIHZvaWQqIGdldFJlbG9jYXRlZEFkZHJlc3Modm9pZCogY29kZSwg
Sm1wU3JjIGp1bXApCisgICAgeworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2b2lk
Kj4ocmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdD4oY29kZSkgKyBqdW1wLm1fb2Zmc2V0KTsKKyAg
ICB9CisKKyAgICBzdGF0aWMgdm9pZCogZ2V0UmVsb2NhdGVkQWRkcmVzcyh2b2lkKiBjb2RlLCBK
bXBEc3QgZGVzdGluYXRpb24pCisgICAgeworICAgICAgICBBU1NFUlQoZGVzdGluYXRpb24ubV9v
ZmZzZXQgIT0gLTEpOworCisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PHZvaWQqPihy
ZWludGVycHJldF9jYXN0PHVpbnQzMl90Pihjb2RlKSArIGRlc3RpbmF0aW9uLm1fb2Zmc2V0KTsK
KyAgICB9CisKKyAgICBzdGF0aWMgaW50IGdldERpZmZlcmVuY2VCZXR3ZWVuTGFiZWxzKEptcERz
dCBzcmMsIEptcERzdCBkc3QpCisgICAgeworICAgICAgICByZXR1cm4gZHN0Lm1fb2Zmc2V0IC0g
c3JjLm1fb2Zmc2V0OworICAgIH0KKworICAgIHN0YXRpYyBpbnQgZ2V0RGlmZmVyZW5jZUJldHdl
ZW5MYWJlbHMoSm1wRHN0IHNyYywgSm1wU3JjIGRzdCkKKyAgICB7CisgICAgICAgIHJldHVybiBk
c3QubV9vZmZzZXQgLSBzcmMubV9vZmZzZXQ7CisgICAgfQorCisgICAgc3RhdGljIGludCBnZXRE
aWZmZXJlbmNlQmV0d2VlbkxhYmVscyhKbXBTcmMgc3JjLCBKbXBEc3QgZHN0KQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGRzdC5tX29mZnNldCAtIHNyYy5tX29mZnNldDsKKyAgICB9CisKKyAgICBz
dGF0aWMgdm9pZCBwYXRjaFBvaW50ZXIodm9pZCogY29kZSwgSm1wRHN0IHdoZXJlLCB2b2lkKiB2
YWx1ZSkKKyAgICB7CisgICAgICAgIHBhdGNoUG9pbnRlcihyZWludGVycHJldF9jYXN0PHVpbnQz
Ml90Kj4oY29kZSkgKyB3aGVyZS5tX29mZnNldCwgdmFsdWUpOworICAgIH0KKworICAgIHN0YXRp
YyB2b2lkIHBhdGNoUG9pbnRlcih2b2lkKiBjb2RlLCB2b2lkKiB2YWx1ZSkKKyAgICB7CisgICAg
ICAgIHBhdGNoSW50MzIoY29kZSwgcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdD4odmFsdWUpKTsK
KyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBwYXRjaEludDMyKHZvaWQqIGNvZGUsIHVpbnQzMl90
IHZhbHVlKQorICAgIHsKKyAgICAgICAgY2hhbmdlUENyZWxhdGl2ZUFkZHJlc3MoKCoocmVpbnRl
cnByZXRfY2FzdDx1aW50MTZfdCo+KGNvZGUpKSAmIDB4RkYpLCByZWludGVycHJldF9jYXN0PHVp
bnQxNl90Kj4oY29kZSksIHZhbHVlKTsKKyAgICB9CisKKyAgICB2b2lkKiBleGVjdXRhYmxlQ29w
eShFeGVjdXRhYmxlUG9vbCogYWxsb2NhdG9yKQorICAgIHsKKyAgICAgICAgdm9pZCogY29weSA9
IG1fYnVmZmVyLmV4ZWN1dGFibGVDb3B5KGFsbG9jYXRvcik7CisgICAgICAgIEFTU0VSVChjb3B5
KTsKKyAgICAgICAgcmV0dXJuIGNvcHk7CisgICAgfQorCisgICAgdm9pZCBwcmVmaXgodWludDE2
X3QgcHJlKQorICAgIHsKKyAgICAgICAgbV9idWZmZXIucHV0Qnl0ZShwcmUpOworICAgIH0KKwor
ICAgIHZvaWQgb25lU2hvcnRPcCh1aW50MTZfdCBvcGNvZGUsIGJvb2wgY2hlY2tzaXplID0gdHJ1
ZSkKKyAgICB7CisgICAgICAgIHByaW50SW5zdHIob3Bjb2RlLCBtX2J1ZmZlci51bmNoZWNrZWRT
aXplKCkpOworCisgICAgICAgIGlmIChjaGVja3NpemUpCisgICAgICAgICAgICBtX2J1ZmZlci5l
bnN1cmVTcGFjZShtYXhJbnN0cnVjdGlvblNpemUpOworICAgICAgICBtX2J1ZmZlci5wdXRTaG9y
dFVuY2hlY2tlZChvcGNvZGUpOworICAgIH0KKworICAgIHZvaWQgZW5zdXJlU3BhY2UoaW50IHNw
YWNlKQorICAgIHsKKyAgICAgICAgbV9idWZmZXIuZW5zdXJlU3BhY2Uoc3BhY2UpOworICAgIH0K
KworICAgIHZvaWQgZW5zdXJlU3BhY2UoaW50IGluc25TcGFjZSwgaW50IGNvbnN0U3BhY2UpCisg
ICAgeworICAgICAgICBtX2J1ZmZlci5lbnN1cmVTcGFjZShpbnNuU3BhY2UsIGNvbnN0U3BhY2Up
OworICAgIH0KKworICAgIC8vIEFkbWluaXN0cmF0aXZlIG1ldGhvZHM6CisKKyAgICB2b2lkKiBk
YXRhKCkgY29uc3QgeyByZXR1cm4gbV9idWZmZXIuZGF0YSgpOyB9CisgICAgaW50IHNpemUoKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIG1fYnVmZmVyLnNpemUoKTsKKyAgICB9CisKKyNpZmRlZiBT
SDRfQVNTRU1CTEVSX1RSQUNJTkcKKyAgICBzdGF0aWMgdm9pZCBwcmludEluc3RyKHVpbnQxNl90
IG9wYywgaW50IHNpemUsIGJvb2wgaXNkb3VibGVJbnN0ID0gdHJ1ZSkKKyAgICB7CisgICAgICAg
IGlmICghZHVtcE5hdGl2ZUNvZGUpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNvbnN0
IGNoYXIgKmZvcm1hdCA9IDA7CisgICAgICAgIHByaW50ZlN0ZG91dEluc3RyKCJvZmZzZXQgOiAw
eCU4Ljh4XHQiLCBzaXplKTsKKworICAgICAgICBzd2l0Y2ggKG9wYykgeworICAgICAgICBjYXNl
IEJSS19PUENPREU6ICBmb3JtYXQgPSAiICAgIEJSS1xuIjsgYnJlYWs7CisgICAgICAgIGNhc2Ug
Tk9QX09QQ09ERTogIGZvcm1hdCA9ICIgICAgTk9QXG4iOyBicmVhazsKKyAgICAgICAgY2FzZSBS
VFNfT1BDT0RFOiAgZm9ybWF0ID0iICAgICpSVFNcbiI7IGJyZWFrOworICAgICAgICBjYXNlIFNF
VFNfT1BDT0RFOiBmb3JtYXQgPSAiICAgIFNFVFNcbiI7IGJyZWFrOworICAgICAgICBjYXNlIFNF
VFRfT1BDT0RFOiBmb3JtYXQgPSAiICAgIFNFVFRcbiI7IGJyZWFrOworICAgICAgICBjYXNlIENM
UlRfT1BDT0RFOiBmb3JtYXQgPSAiICAgIENMUlRcbiI7IGJyZWFrOworICAgICAgICB9CisgICAg
ICAgIGlmIChmb3JtYXQpIHsKKyAgICAgICAgICAgIHByaW50ZlN0ZG91dEluc3RyKGZvcm1hdCk7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBzd2l0Y2ggKG9wYyAm
IDB4ZjBmZikgeworICAgICAgICBjYXNlIEJSQUZfT1BDT0RFOiAgICAgICAgICBmb3JtYXQgPSAi
ICAgICpCUkFGIFIlZFxuIjsgYnJlYWs7CisgICAgICAgIGNhc2UgRFRfT1BDT0RFIDogICAgICAg
ICAgIGZvcm1hdCA9ICIgICAgRFQgUiVkXG4iOyBicmVhazsKKyAgICAgICAgY2FzZSBDTVBQTF9P
UENPREU6ICAgICAgICAgZm9ybWF0ID0gIiAgICBDTVAvUEwgUiVkXG4iOyBicmVhazsKKyAgICAg
ICAgY2FzZSBDTVBQWl9PUENPREU6ICAgICAgICAgZm9ybWF0ID0gIiAgICBDTVAvUFogUiVkXG4i
OyBicmVhazsKKyAgICAgICAgY2FzZSBKTVBfT1BDT0RFOiAgICAgICAgICAgZm9ybWF0ID0gIiAg
ICAqSk1QIEBSJWRcbiI7IGJyZWFrOworICAgICAgICBjYXNlIEpTUl9PUENPREU6ICAgICAgICAg
ICBmb3JtYXQgPSAiICAgICpKU1IgQFIlZFxuIjsgYnJlYWs7CisgICAgICAgIGNhc2UgTERTUFJf
T1BDT0RFOiAgICAgICAgIGZvcm1hdCA9ICIgICAgTERTIFIlZCwgUFJcbiI7IGJyZWFrOworICAg
ICAgICBjYXNlIExEU0xQUl9PUENPREU6ICAgICAgICBmb3JtYXQgPSAiICAgIExEUy5MIEBSJWQr
LCBQUlxuIjsgYnJlYWs7CisgICAgICAgIGNhc2UgTU9WVF9PUENPREU6ICAgICAgICAgIGZvcm1h
dCA9ICIgICAgTU9WVCBSJWRcbiI7IGJyZWFrOworICAgICAgICBjYXNlIFNIQUxfT1BDT0RFOiAg
ICAgICAgICBmb3JtYXQgPSAiICAgIFNIQUwgUiVkXG4iOyBicmVhazsKKyAgICAgICAgY2FzZSBT
SEFSX09QQ09ERTogICAgICAgICAgZm9ybWF0ID0gIiAgICBTSEFSIFIlZFxuIjsgYnJlYWs7Cisg
ICAgICAgIGNhc2UgU0hMTF9PUENPREU6ICAgICAgICAgIGZvcm1hdCA9ICIgICAgU0hMTCBSJWRc
biI7IGJyZWFrOworICAgICAgICBjYXNlIFNITEwyX09QQ09ERTogICAgICAgICBmb3JtYXQgPSAi
ICAgIFNITEwyIFIlZFxuIjsgYnJlYWs7CisgICAgICAgIGNhc2UgU0hMTDhfT1BDT0RFOiAgICAg
ICAgIGZvcm1hdCA9ICIgICAgU0hMTDggUiVkXG4iOyBicmVhazsKKyAgICAgICAgY2FzZSBTSExM
MTZfT1BDT0RFOiAgICAgICAgZm9ybWF0ID0gIiAgICBTSExMMTYgUiVkXG4iOyBicmVhazsKKyAg
ICAgICAgY2FzZSBTSExSX09QQ09ERTogICAgICAgICAgZm9ybWF0ID0gIiAgICBTSExSIFIlZFxu
IjsgYnJlYWs7CisgICAgICAgIGNhc2UgU0hMUjJfT1BDT0RFOiAgICAgICAgIGZvcm1hdCA9ICIg
ICAgU0hMUjIgUiVkXG4iOyBicmVhazsKKyAgICAgICAgY2FzZSBTSExSOF9PUENPREU6ICAgICAg
ICAgZm9ybWF0ID0gIiAgICBTSExSOCBSJWRcbiI7IGJyZWFrOworICAgICAgICBjYXNlIFNITFIx
Nl9PUENPREU6ICAgICAgICBmb3JtYXQgPSAiICAgIFNITFIxNiBSJWRcbiI7IGJyZWFrOworICAg
ICAgICBjYXNlIFNUU1BSX09QQ09ERTogICAgICAgICBmb3JtYXQgPSAiICAgIFNUUyBQUiwgUiVk
XG4iOyBicmVhazsKKyAgICAgICAgY2FzZSBTVFNMUFJfT1BDT0RFOiAgICAgICAgZm9ybWF0ID0g
IiAgICBTVFMuTCBQUiwgQC1SJWRcbiI7IGJyZWFrOworICAgICAgICBjYXNlIExEU19STV9GUFVM
X09QQ09ERTogICBmb3JtYXQgPSAiICAgIExEUyBSJWQsIEZQVUxcbiI7IGJyZWFrOworICAgICAg
ICBjYXNlIFNUU19GUFVMX1JOX09QQ09ERTogICBmb3JtYXQgPSAiICAgIFNUUyBGUFVMLCBSJWQg
XG4iOyBicmVhazsKKyAgICAgICAgY2FzZSBGTERTX0ZSTV9GUFVMX09QQ09ERTogZm9ybWF0ID0g
IiAgICBGTERTIEZSJWQsIEZQVUxcbiI7IGJyZWFrOworICAgICAgICBjYXNlIEZTVFNfRlBVTF9G
Uk5fT1BDT0RFOiBmb3JtYXQgPSAiICAgIEZTVFMgRlBVTCwgUiVkIFxuIjsgYnJlYWs7CisgICAg
ICAgIGNhc2UgTERTRlBTQ1JfT1BDT0RFOiAgICAgIGZvcm1hdCA9ICIgICAgTERTIFIlZCwgRlBT
Q1IgXG4iOyBicmVhazsKKyAgICAgICAgY2FzZSBTVFNGUFNDUl9PUENPREU6ICAgICAgZm9ybWF0
ID0gIiAgICBTVFMgRlBTQ1IsIFIlZCBcbiI7IGJyZWFrOworICAgICAgICBjYXNlIFNUU01BQ0xf
T1BDT0RFOiAgICAgICBmb3JtYXQgPSAiICAgIFNUUyBNQUNMLCBSJWQgXG4iOyBicmVhazsKKyAg
ICAgICAgY2FzZSBTVFNNQUNIX09QQ09ERTogICAgICAgZm9ybWF0ID0gIiAgICBTVFMgTUFDSCwg
UiVkIFxuIjsgYnJlYWs7CisgICAgICAgIGNhc2UgQlNSRl9PUENPREU6ICAgICAgICAgIGZvcm1h
dCA9ICIgICAgKkJTUkYgUiVkIjsgYnJlYWs7CisgICAgICAgIGNhc2UgRlRSQ19PUENPREU6ICAg
ICAgICAgIGZvcm1hdCA9ICIgICAgRlRSQyBGUiVkLCBGUFVMXG4iOyBicmVhazsKKyAgICAgICAg
fQorCisgICAgICAgIGlmIChmb3JtYXQpIHsKKyAgICAgICAgICAgIHByaW50ZlN0ZG91dEluc3Ry
KGZvcm1hdCwgZ2V0Um4ob3BjKSk7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAg
ICAgIHN3aXRjaCAob3BjICYgMHhmMGZmKSB7CisgICAgICAgIGNhc2UgRk5FR19PUENPREU6ICAg
ICBmb3JtYXQgPSAiICAgIEZORUcgRFIlZFxuIjsgYnJlYWs7CisgICAgICAgIGNhc2UgRkxPQVRf
T1BDT0RFOiAgICBmb3JtYXQgPSAiICAgIEZMT0FUIERSJWRcbiI7IGJyZWFrOworICAgICAgICBj
YXNlIEZUUkNfT1BDT0RFOiAgICAgZm9ybWF0ID0gIiAgICBGVFJDIEZSJWQsIEZQVUxcbiI7IGJy
ZWFrOworICAgICAgICBjYXNlIEZTUVJUX09QQ09ERTogICAgZm9ybWF0ID0gIiAgICBGU1FSVCBG
UiVEXG4iOyBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChmb3JtYXQpIHsKKyAgICAg
ICAgICAgIGlmIChpc2RvdWJsZUluc3QpCisgICAgICAgICAgICAgICAgcHJpbnRmU3Rkb3V0SW5z
dHIoZm9ybWF0LCBnZXREUm4ob3BjKSA8PCAxKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICBwcmludGZTdGRvdXRJbnN0cihmb3JtYXQsIGdldFJuKG9wYykpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgc3dpdGNoIChvcGMgJiAweGYwMGYpIHsK
KyAgICAgICAgY2FzZSBBRERfT1BDT0RFOiAgICAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgQURE
IFIlZCwgUiVkXG4iOyBicmVhazsKKyAgICAgICAgY2FzZSBBRERDX09QQ09ERTogICAgICAgICAg
ICAgIGZvcm1hdCA9ICIgICAgQUREQyBSJWQsIFIlZFxuIjsgYnJlYWs7CisgICAgICAgIGNhc2Ug
QUREVl9PUENPREU6ICAgICAgICAgICAgICBmb3JtYXQgPSAiICAgIEFERFYgUiVkLCBSJWRcbiI7
IGJyZWFrOworICAgICAgICBjYXNlIEFORF9PUENPREU6ICAgICAgICAgICAgICAgZm9ybWF0ID0g
IiAgICBBTkQgUiVkLCBSJWRcbiI7IGJyZWFrOworICAgICAgICBjYXNlIERJVjFfT1BDT0RFOiAg
ICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBESVYxIFIlZCwgUiVkXG4iOyBicmVhazsKKyAgICAg
ICAgY2FzZSBDTVBFUV9PUENPREU6ICAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgQ01QL0VRIFIl
ZCwgUiVkXG4iOyBicmVhazsKKyAgICAgICAgY2FzZSBDTVBHRV9PUENPREU6ICAgICAgICAgICAg
IGZvcm1hdCA9ICIgICAgQ01QL0dFIFIlZCwgUiVkXG4iOyBicmVhazsKKyAgICAgICAgY2FzZSBD
TVBHVF9PUENPREU6ICAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgQ01QL0dUIFIlZCwgUiVkXG4i
OyBicmVhazsKKyAgICAgICAgY2FzZSBDTVBISV9PUENPREU6ICAgICAgICAgICAgIGZvcm1hdCA9
ICIgICAgQ01QL0hJIFIlZCwgUiVkXG4iOyBicmVhazsKKyAgICAgICAgY2FzZSBDTVBIU19PUENP
REU6ICAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgQ01QL0hTIFIlZCwgUiVkXG4iOyBicmVhazsK
KyAgICAgICAgY2FzZSBNT1ZfT1BDT0RFOiAgICAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgTU9W
IFIlZCwgUiVkXG4iOyBicmVhazsKKyAgICAgICAgY2FzZSBNT1ZCX1dSSVRFX1JOX09QQ09ERTog
ICAgIGZvcm1hdCA9ICIgICAgTU9WLkIgUiVkLCBAUiVkXG4iOyBicmVhazsKKyAgICAgICAgY2Fz
ZSBNT1ZCX1dSSVRFX1JOREVDX09QQ09ERTogIGZvcm1hdCA9ICIgICAgTU9WLkIgUiVkLCBALVIl
ZFxuIjsgYnJlYWs7CisgICAgICAgIGNhc2UgTU9WQl9XUklURV9SMFJOX09QQ09ERTogICBmb3Jt
YXQgPSAiICAgIE1PVi5CIFIlZCwgQChSMCwgUiVkKVxuIjsgYnJlYWs7CisgICAgICAgIGNhc2Ug
TU9WQl9SRUFEX1JNX09QQ09ERTogICAgICBmb3JtYXQgPSAiICAgIE1PVi5CIEBSJWQsIFIlZFxu
IjsgYnJlYWs7CisgICAgICAgIGNhc2UgTU9WQl9SRUFEX1JNSU5DX09QQ09ERTogICBmb3JtYXQg
PSAiICAgIE1PVi5CIEBSJWQrLCBSJWRcbiI7IGJyZWFrOworICAgICAgICBjYXNlIE1PVkJfUkVB
RF9SMFJNX09QQ09ERTogICAgZm9ybWF0ID0gIiAgICBNT1YuQiBAKFIwLCBSJWQpLCBSJWRcbiI7
IGJyZWFrOworICAgICAgICBjYXNlIE1PVkxfV1JJVEVfUk5fT1BDT0RFOiAgICAgZm9ybWF0ID0g
IiAgICBNT1YuTCBSJWQsIEBSJWRcbiI7IGJyZWFrOworICAgICAgICBjYXNlIE1PVkxfV1JJVEVf
Uk5ERUNfT1BDT0RFOiAgZm9ybWF0ID0gIiAgICBNT1YuTCBSJWQsIEAtUiVkXG4iOyBicmVhazsK
KyAgICAgICAgY2FzZSBNT1ZMX1dSSVRFX1IwUk5fT1BDT0RFOiAgIGZvcm1hdCA9ICIgICAgTU9W
LkwgUiVkLCBAKFIwLCBSJWQpXG4iOyBicmVhazsKKyAgICAgICAgY2FzZSBNT1ZMX1JFQURfUk1f
T1BDT0RFOiAgICAgIGZvcm1hdCA9ICIgICAgTU9WLkwgQFIlZCwgUiVkXG4iOyBicmVhazsKKyAg
ICAgICAgY2FzZSBNT1ZMX1JFQURfUk1JTkNfT1BDT0RFOiAgIGZvcm1hdCA9ICIgICAgTU9WLkwg
QFIlZCssIFIlZFxuIjsgYnJlYWs7CisgICAgICAgIGNhc2UgTU9WTF9SRUFEX1IwUk1fT1BDT0RF
OiAgICBmb3JtYXQgPSAiICAgIE1PVi5MIEAoUjAsIFIlZCksIFIlZFxuIjsgYnJlYWs7CisgICAg
ICAgIGNhc2UgTVVMTF9PUENPREU6ICAgICAgICAgICAgICBmb3JtYXQgPSAiICAgIE1VTC5MIFIl
ZCwgUiVkXG4iOyBicmVhazsKKyAgICAgICAgY2FzZSBETVVMTF9MX09QQ09ERTogICAgICAgICAg
IGZvcm1hdCA9ICIgICAgRE1VTFUuTCBSJWQsIFIlZFxuIjsgYnJlYWs7CisgICAgICAgIGNhc2Ug
RE1VTFNMX09QQ09ERTogICAgICAgICAgICBmb3JtYXQgPSAiICAgIERNVUxTLkwgUiVkLCBSJWRc
biI7IGJyZWFrOworICAgICAgICBjYXNlIE5FR19PUENPREU6ICAgICAgICAgICAgICAgZm9ybWF0
ID0gIiAgICBORUcgUiVkLCBSJWRcbiI7IGJyZWFrOworICAgICAgICBjYXNlIE5FR0NfT1BDT0RF
OiAgICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBORUdDIFIlZCwgUiVkXG4iOyBicmVhazsKKyAg
ICAgICAgY2FzZSBOT1RfT1BDT0RFOiAgICAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgTk9UIFIl
ZCwgUiVkXG4iOyBicmVhazsKKyAgICAgICAgY2FzZSBPUl9PUENPREU6ICAgICAgICAgICAgICAg
IGZvcm1hdCA9ICIgICAgT1IgUiVkLCBSJWRcbiI7IGJyZWFrOworICAgICAgICBjYXNlIFNIQURf
T1BDT0RFOiAgICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBTSEFEIFIlZCwgUiVkXG4iOyBicmVh
azsKKyAgICAgICAgY2FzZSBTSExEX09QQ09ERTogICAgICAgICAgICAgIGZvcm1hdCA9ICIgICAg
U0hMRCBSJWQsIFIlZFxuIjsgYnJlYWs7CisgICAgICAgIGNhc2UgU1VCX09QQ09ERTogICAgICAg
ICAgICAgICBmb3JtYXQgPSAiICAgIFNVQiBSJWQsIFIlZFxuIjsgYnJlYWs7CisgICAgICAgIGNh
c2UgU1VCQ19PUENPREU6ICAgICAgICAgICAgICBmb3JtYXQgPSAiICAgIFNVQkMgUiVkLCBSJWRc
biI7IGJyZWFrOworICAgICAgICBjYXNlIFNVQlZfT1BDT0RFOiAgICAgICAgICAgICAgZm9ybWF0
ID0gIiAgICBTVUJWIFIlZCwgUiVkXG4iOyBicmVhazsKKyAgICAgICAgY2FzZSBUU1RfT1BDT0RF
OiAgICAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgVFNUIFIlZCwgUiVkXG4iOyBicmVhazsKKyAg
ICAgICAgY2FzZSBYT1JfT1BDT0RFOiAgICAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgWE9SIFIl
ZCwgUiVkXG4iO2JyZWFrOworICAgICAgICBjYXNlIE1PVldfV1JJVEVfUk5fT1BDT0RFIDogICAg
Zm9ybWF0ID0gIiAgICBNT1YuVyBSJWQsIEBSJWRcbiI7IGJyZWFrOworICAgICAgICBjYXNlIE1P
VldfUkVBRF9STV9PUENPREUgOiAgICAgZm9ybWF0ID0gIiAgICBNT1YuVyBAUiVkLCBSJWRcbiI7
IGJyZWFrOworICAgICAgICBjYXNlIE1PVldfUkVBRF9SMFJNX09QQ09ERSA6ICAgZm9ybWF0ID0g
IiAgICBNT1YuVyBAKFIwLCBSJWQpLCBSJWRcbiI7IGJyZWFrOworICAgICAgICBjYXNlIEVYVFVX
X09QQ09ERSA6ICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBFWFRVLlcgUiVkLCBSJWRcbiI7IGJy
ZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGZvcm1hdCkgeworICAgICAgICAgICAgcHJp
bnRmU3Rkb3V0SW5zdHIoZm9ybWF0LCBnZXRSbShvcGMpLCBnZXRSbihvcGMpKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIHN3aXRjaCAob3BjICYgMHhmMDBmKSB7
CisgICAgICAgIGNhc2UgRlNVQl9PUENPREU6ICAgICAgICAgICAgICAgICAgZm9ybWF0ID0gIiAg
ICBGU1VCIEZSJWQsIEZSJWRcbiI7IGJyZWFrOworICAgICAgICBjYXNlIEZBRERfT1BDT0RFOiAg
ICAgICAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgRkFERCBGUiVkLCBGUiVkXG4iOyBicmVhazsK
KyAgICAgICAgY2FzZSBGRElWX09QQ09ERTogICAgICAgICAgICAgICAgICBmb3JtYXQgPSAiICAg
IEZESVYgRlIlZCwgRlIlZFxuIjsgYnJlYWs7CisgICAgICAgIGNhc2UgRk1VTF9PUENPREU6ICAg
ICAgICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBETVVMTCBGUiVkLCBGUiVkXG4iOyBicmVhazsK
KyAgICAgICAgY2FzZSBGTU9WU19SRUFEX1JNX09QQ09ERTogICAgICAgICBmb3JtYXQgPSAiICAg
IEZNT1YuUyBAUiVkLCBGUiVkXG4iOyBicmVhazsKKyAgICAgICAgY2FzZSBGTU9WU19XUklURV9S
Tl9ERUNfT1BDT0RFOiAgICBmb3JtYXQgPSAiICAgIEZNT1YuUyBGUiVkLCBALVIlZFxuIjsgYnJl
YWs7CisgICAgICAgIGNhc2UgRk1PVlNfUkVBRF9STV9JTkNfT1BDT0RFOiAgICAgZm9ybWF0ID0g
IiAgICBGTU9WLlMgQFIlZCssIEZSJWRcbiI7IGJyZWFrOworICAgICAgICBjYXNlIEZNT1ZTX1JF
QURfUjBSTV9PUENPREU6ICAgICAgIGZvcm1hdCA9ICIgICAgRk1PVi5TIEAoUjAsIFIlZCksIEZS
JWRcbiI7IGJyZWFrOworICAgICAgICBjYXNlIEZNT1ZTX1dSSVRFX1JOX09QQ09ERTogICAgICAg
IGZvcm1hdCA9ICIgICAgRk1PVi5TIEZSJWQsIEBSJWRcbiI7IGJyZWFrOworICAgICAgICBjYXNl
IEZNT1ZTX1dSSVRFX1IwUk5fT1BDT0RFOiAgICAgIGZvcm1hdCA9ICIgICAgRk1PVi5TIEZSJWQs
IEAoUjAsIFIlZClcbiI7IGJyZWFrOworICAgICAgICBjYXNlIEZNT1ZfT1BDT0RFOiAgICAgICAg
ICAgICAgICAgIGZvcm1hdCA9ICIgICAgRk1PViBGUiVkLCBGUiVkXG4iOyBicmVhazsKKyAgICAg
ICAgY2FzZSBGQ01QRVFfT1BDT0RFOiAgICAgICAgICAgICAgICBmb3JtYXQgPSAiICAgIEZDTVAv
RVEgRlIlZCwgRlIlZFxuIjsgYnJlYWs7CisgICAgICAgIGNhc2UgRkNNUEdUX09QQ09ERTogICAg
ICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBGQ01QL0dUIEZSJWQsIEZSJWRcbiI7IGJyZWFrOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKGZvcm1hdCkgeworICAgICAgICAgICAgaWYgKGlzZG91
YmxlSW5zdCkKKyAgICAgICAgICAgICAgICBwcmludGZTdGRvdXRJbnN0cihmb3JtYXQsIGdldERS
bShvcGMpIDw8IDEsIGdldERSbihvcGMpIDw8IDEpOworICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgIHByaW50ZlN0ZG91dEluc3RyKGZvcm1hdCwgZ2V0Um0ob3BjKSwgZ2V0Um4ob3Bj
KSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBzd2l0Y2ggKG9w
YyAmIDB4ZmYwMCkgeworICAgICAgICBjYXNlIEJGX09QQ09ERTogICAgICAgICAgICAgICAgZm9y
bWF0ID0gIiAgICBCRiAlZFxuIjsgIGJyZWFrOworICAgICAgICBjYXNlIEJGU19PUENPREU6ICAg
ICAgICAgICAgICAgZm9ybWF0ID0gIiAgICAqQkYvUyAlZFxuIjsgIGJyZWFrOworICAgICAgICBj
YXNlIEFORElNTV9PUENPREU6ICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBBTkQgIyVkLCBSMFxu
IjsgIGJyZWFrOworICAgICAgICBjYXNlIEJUX09QQ09ERTogICAgICAgICAgICAgICAgZm9ybWF0
ID0gIiAgICBCVCAlZFxuIjsgIGJyZWFrOworICAgICAgICBjYXNlIEJUU19PUENPREU6ICAgICAg
ICAgICAgICAgZm9ybWF0ID0gIiAgICAqQlQvUyAlZFxuIjsgIGJyZWFrOworICAgICAgICBjYXNl
IENNUEVRSU1NX09QQ09ERTogICAgICAgICAgZm9ybWF0ID0gIiAgICBDTVAvRVEgIyVkLCBSMFxu
IjsgIGJyZWFrOworICAgICAgICBjYXNlIE1PVkJfV1JJVEVfT0ZGR0JSX09QQ09ERTogZm9ybWF0
ID0gIiAgICBNT1YuQiBSMCwgQCglZCwgR0JSKVxuIjsgIGJyZWFrOworICAgICAgICBjYXNlIE1P
VkJfUkVBRF9PRkZHQlJfT1BDT0RFOiAgZm9ybWF0ID0gIiAgICBNT1YuQiBAKCVkLCBHQlIpLCBS
MFxuIjsgIGJyZWFrOworICAgICAgICBjYXNlIE1PVkxfV1JJVEVfT0ZGR0JSX09QQ09ERTogZm9y
bWF0ID0gIiAgICBNT1YuTCBSMCwgQCglZCwgR0JSKVxuIjsgIGJyZWFrOworICAgICAgICBjYXNl
IE1PVkxfUkVBRF9PRkZHQlJfT1BDT0RFOiAgZm9ybWF0ID0gIiAgICBNT1YuTCBAKCVkLCBHQlIp
LCBSMFxuIjsgIGJyZWFrOworICAgICAgICBjYXNlIE1PVkFfUkVBRF9PRkZQQ19PUENPREU6ICAg
Zm9ybWF0ID0gIiAgICBNT1ZBIEAoJWQsIFBDKSwgUjBcbiI7ICBicmVhazsKKyAgICAgICAgY2Fz
ZSBPUklNTV9PUENPREU6ICAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgT1IgIyVkLCBSMFxuIjsg
IGJyZWFrOworICAgICAgICBjYXNlIE9SQklNTV9PUENPREU6ICAgICAgICAgICAgZm9ybWF0ID0g
IiAgICBPUi5CICMlZCwgQChSMCwgR0JSKVxuIjsgIGJyZWFrOworICAgICAgICBjYXNlIFRTVElN
TV9PUENPREU6ICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBUU1QgIyVkLCBSMFxuIjsgIGJyZWFr
OworICAgICAgICBjYXNlIFRTVEJfT1BDT0RFOiAgICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBU
U1QuQiAlZCwgQChSMCwgR0JSKVxuIjsgIGJyZWFrOworICAgICAgICBjYXNlIFhPUklNTV9PUENP
REU6ICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBYT1IgIyVkLCBSMFxuIjsgIGJyZWFrOworICAg
ICAgICBjYXNlIFhPUkJfT1BDT0RFOiAgICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBYT1IuQiAl
ZCwgQChSMCwgR0JSKVxuIjsgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZm9ybWF0
KSB7CisgICAgICAgICAgICBwcmludGZTdGRvdXRJbnN0cihmb3JtYXQsIGdldEltbTgob3BjKSk7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBzd2l0Y2ggKG9wYyAm
IDB4ZmYwMCkgeworICAgICAgICBjYXNlIE1PVkJfV1JJVEVfT0ZGUk5fT1BDT0RFOiAgZm9ybWF0
ID0gIiAgICBNT1YuQiBSMCwgQCglZCwgUiVkKVxuIjsgYnJlYWs7CisgICAgICAgIGNhc2UgTU9W
Ql9SRUFEX09GRlJNX09QQ09ERTogICBmb3JtYXQgPSAiICAgIE1PVi5CIEAoJWQsIFIlZCksIFIw
XG4iOyBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChmb3JtYXQpIHsKKyAgICAgICAg
ICAgIHByaW50ZlN0ZG91dEluc3RyKGZvcm1hdCwgZ2V0RGlzcChvcGMpLCBnZXRSbShvcGMpKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIHN3aXRjaCAob3BjICYg
MHhmMDAwKSB7CisgICAgICAgIGNhc2UgQlJBX09QQ09ERTogIGZvcm1hdCA9ICIgICAgKkJSQSAl
ZFxuIjsgYnJlYWs7CisgICAgICAgIGNhc2UgQlNSX09QQ09ERTogIGZvcm1hdCA9ICIgICAgKkJT
UiAlZFxuIjsgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZm9ybWF0KSB7CisgICAg
ICAgICAgICBwcmludGZTdGRvdXRJbnN0cihmb3JtYXQsIGdldEltbTEyKG9wYykpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgc3dpdGNoIChvcGMgJiAweGYwMDAp
IHsKKyAgICAgICAgY2FzZSBNT1ZMX1JFQURfT0ZGUENfT1BDT0RFOiAgZm9ybWF0ID0gIiAgICBN
T1YuTCBAKCVkLCBQQyksIFIlZFxuIjsgYnJlYWs7CisgICAgICAgIGNhc2UgQURESU1NX09QQ09E
RTogICAgICAgICAgIGZvcm1hdCA9ICIgICAgQUREICMlZCwgUiVkXG4iOyBicmVhazsKKyAgICAg
ICAgY2FzZSBNT1ZJTU1fT1BDT0RFOiAgICAgICAgICAgZm9ybWF0ID0gIiAgICBNT1YgIyVkLCBS
JWRcbiI7IGJyZWFrOworICAgICAgICBjYXNlIE1PVldfUkVBRF9PRkZQQ19PUENPREU6ICBmb3Jt
YXQgPSAiICAgIE1PVi5XIEAoJWQsIFBDKSwgUiVkXG4iOyBicmVhazsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmIChmb3JtYXQpIHsKKyAgICAgICAgICAgIHByaW50ZlN0ZG91dEluc3RyKGZvcm1h
dCwgZ2V0SW1tOChvcGMpLCBnZXRSbihvcGMpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorCisgICAgICAgIHN3aXRjaCAob3BjICYgMHhmMDAwKSB7CisgICAgICAgIGNhc2UgTU9W
TF9XUklURV9PRkZSTl9PUENPREU6ICBmb3JtYXQgPSAiICAgIE1PVi5MIFIlZCwgQCglZCwgUiVk
KVxuIjsKKyAgICAgICAgICAgIHByaW50ZlN0ZG91dEluc3RyKGZvcm1hdCwgZ2V0Um0ob3BjKSwg
Z2V0RGlzcChvcGMpLCBnZXRSbihvcGMpKTsgYnJlYWs7CisgICAgICAgIGNhc2UgTU9WTF9SRUFE
X09GRlJNX09QQ09ERTogICBmb3JtYXQgPSAiICAgIE1PVi5MIEAoJWQsIFIlZCksIFIlZFxuIjsK
KyAgICAgICAgICAgIHByaW50ZlN0ZG91dEluc3RyKGZvcm1hdCwgZ2V0RGlzcChvcGMpLCBnZXRS
bShvcGMpLCBnZXRSbihvcGMpKTsgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzdGF0
aWMgdm9pZCBwcmludGZTdGRvdXRJbnN0cihjb25zdCBjaGFyKiBmb3JtYXQsIC4uLikKKyAgICB7
CisgICAgICAgIGlmIChkdW1wTmF0aXZlQ29kZSkgeworICAgICAgICAgICAgdmFfbGlzdCBhcmdz
OworICAgICAgICAgICAgdmFfc3RhcnQoYXJncywgZm9ybWF0KTsKKyAgICAgICAgICAgIHZwcmlu
dGZTdGRvdXRJbnN0cihmb3JtYXQsIGFyZ3MpOworICAgICAgICAgICAgdmFfZW5kKGFyZ3MpOwor
ICAgICAgICB9CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgdnByaW50ZlN0ZG91dEluc3RyKGNv
bnN0IGNoYXIqIGZvcm1hdCwgdmFfbGlzdCBhcmdzKQorICAgIHsKKyAgICAgICAgaWYgKGR1bXBO
YXRpdmVDb2RlKQorICAgICAgICAgICAgdmZwcmludGYoc3Rkb3V0LCBmb3JtYXQsIGFyZ3MpOwor
ICAgIH0KKyNlbHNlCisgICAgc3RhdGljIHZvaWQgcHJpbnRJbnN0cih1aW50MTZfdCBvcGMsIGlu
dCBzaXplLCBib29sIGlzZG91YmxlSW5zdCA9IHRydWUpIHt9OworI2VuZGlmCisKK3ByaXZhdGU6
CisgICAgU0g0QnVmZmVyIG1fYnVmZmVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNl
bmRpZiAvLyBFTkFCTEUoQVNTRU1CTEVSKSAmJiBDUFUoU0g0KQorCisjZW5kaWYgLy8gU0g0QXNz
ZW1ibGVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJKSVQu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckpJVC5jcHAKaW5kZXggZTM0ZTZm
NC4uZjQzODkxNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckpJ
VC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckpJVC5jcHAKQEAgLTU5
LDYgKzU5LDE2IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgOiBwcml2YXRlIE1hY3JvQXNzZW1ibGVy
IHsKICAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCByZWdUMSA9IE1JUFNSZWdpc3RlcnM6OnQ1
OwogCiAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgcmV0dXJuUmVnaXN0ZXIgPSBNSVBTUmVn
aXN0ZXJzOjp2MDsKKyNlbGlmIENQVShTSDQpCisgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQg
aW5wdXQgPSBTSDRSZWdpc3RlcnM6OnI0OworICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIGlu
ZGV4ID0gU0g0UmVnaXN0ZXJzOjpyNTsKKyAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCBsZW5n
dGggPSBTSDRSZWdpc3RlcnM6OnI2OworICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIG91dHB1
dCA9IFNINFJlZ2lzdGVyczo6cjc7CisKKyAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCByZWdU
MCA9IFNINFJlZ2lzdGVyczo6cjA7CisgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgcmVnVDEg
PSBTSDRSZWdpc3RlcnM6OnIxOworCisgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgcmV0dXJu
UmVnaXN0ZXIgPSBTSDRSZWdpc3RlcnM6OnIwOwogI2VsaWYgQ1BVKFg4NikKICAgICBzdGF0aWMg
Y29uc3QgUmVnaXN0ZXJJRCBpbnB1dCA9IFg4NlJlZ2lzdGVyczo6ZWF4OwogICAgIHN0YXRpYyBj
b25zdCBSZWdpc3RlcklEIGluZGV4ID0gWDg2UmVnaXN0ZXJzOjplZHg7CkBAIC0yMTc5LDYgKzIx
ODksOSBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIDogcHJpdmF0ZSBNYWNyb0Fzc2VtYmxlciB7CiAg
ICAgICAgIHB1c2goQVJNUmVnaXN0ZXJzOjpyOCk7IC8vIHNjcmF0Y2ggcmVnaXN0ZXIKICNlbmRp
ZgogICAgICAgICBtb3ZlKEFSTVJlZ2lzdGVyczo6cjMsIG91dHB1dCk7CisjZWxpZiBDUFUoU0g0
KQorICAgICAgICBwdXNoKFNINFJlZ2lzdGVyczo6cjExKTsKKyAgICAgICAgcHVzaChTSDRSZWdp
c3RlcnM6OnIxMyk7CiAjZWxpZiBDUFUoTUlQUykKICAgICAgICAgLy8gRG8gbm90aGluZy4KICNl
bmRpZgpAQCAtMjIwMSw2ICsyMjE0LDkgQEAgY2xhc3MgWWFyckdlbmVyYXRvciA6IHByaXZhdGUg
TWFjcm9Bc3NlbWJsZXIgewogICAgICAgICBwb3AoQVJNUmVnaXN0ZXJzOjpyNik7CiAgICAgICAg
IHBvcChBUk1SZWdpc3RlcnM6OnI1KTsKICAgICAgICAgcG9wKEFSTVJlZ2lzdGVyczo6cjQpOwor
I2VsaWYgQ1BVKFNINCkKKyAgICAgICAgcG9wKFNINFJlZ2lzdGVyczo6cjEzKTsKKyAgICAgICAg
cG9wKFNINFJlZ2lzdGVyczo6cjExKTsKICNlbGlmIENQVShNSVBTKQogICAgICAgICAvLyBEbyBu
b3RoaW5nCiAjZW5kaWYKLS0gCjEuNy4yLjMKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>84728</attachid>
            <date>2011-03-04 05:08:49 -0800</date>
            <delta_ts>2011-03-14 07:52:40 -0700</delta_ts>
            <desc>YARR JIT </desc>
            <filename>0001-ADD-YARR-JIT-SH4-Platform.patch</filename>
            <type>text/plain</type>
            <size>111259</size>
            <attacher name="thouraya">thouraya.andolsi</attacher>
            
              <data encoding="base64">RnJvbSA2NmU2NzMzOTBjZTczMjVhMmJlMzQzYTg3OTI2MDNiMGMwNWY3NjJhIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBUaG91cmF5YSBBTkRPTFNJIDx0aG91cmF5YS5hbmRvbHNpQHN0
LmNvbT4KRGF0ZTogRnJpLCA0IE1hciAyMDExIDEzOjEwOjU5ICswMTAwClN1YmplY3Q6IFtQQVRD
SF0gQUREIFlBUlIgSklUIFNINCBQbGF0Zm9ybS4KCi0tLQogU291cmNlL0phdmFTY3JpcHRDb3Jl
L0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgfCAgIDE2ICsKIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9HTlVtYWtlZmlsZS5hbSAgICAgICAgICAgICAgIHwgICAgMyArCiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmggICB8ICAgIDYgKwogLi4uL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclNINC5jcHAgfCAgIDgyICsKIC4uLi9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJTSDQuaCAgIHwgMTQxOSArKysr
KysrKysrKysrKwogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9TSDRBc3NlbWJsZXIu
aCAgICAgfCAxOTMyICsrKysrKysrKysrKysrKysrKysrCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
eWFyci9ZYXJySklULmNwcCAgICAgICAgICAgICB8ICAgMTYgKwogNyBmaWxlcyBjaGFuZ2VkLCAz
NDc0IGluc2VydGlvbnMoKyksIDAgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclNINC5jcHAKIGNyZWF0
ZSBtb2RlIDEwMDY0NCBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1i
bGVyU0g0LmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL1NINEFzc2VtYmxlci5oCgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKaW5kZXggNDllYzhmOC4u
Yzg3NzA3YiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTEt
MDMtMDQgIFRob3VyYXlhIEFORE9MU0kgIDx0aG91cmF5YS5hbmRvbHNpQHN0LmNvbT4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTSDQgSklUIFNVUFBP
UlQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NDMy
OS4KKworICAgICAgICBBZGQgWUFSUiBzdXBwb3J0IGZvciBTSDQgcGxhdGZvcm1zIChkaXNhYmxl
ZCBieSBkZWZhdWx0KS4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOgorICAgICAgICAqIGFz
c2VtYmxlci9NYWNyb0Fzc2VtYmxlci5oOgorICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2Vt
YmxlclNINC5jcHA6IEFkZGVkLgorICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclNI
NC5oOiBBZGRlZC4KKyAgICAgICAgKiBhc3NlbWJsZXIvU0g0QXNzZW1ibGVyLmg6IEFkZGVkLgor
ICAgICAgICAqIHlhcnIvWWFyckpJVC5jcHA6CisKIDIwMTEtMDMtMDMgIFJ5b3N1a2UgTml3YSAg
PHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUuYW0gYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUuYW0KaW5kZXggYmFiYWM4OS4uMmE0M2JmNyAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5hbQpAQCAtOTAsNiArOTAsOSBAQCBqYXZhc2Ny
aXB0Y29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01h
Y3JvQXNzZW1ibGVyWDg2XzY0LmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
TWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9NYWNyb0Fzc2VtYmxlclg4Ni5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL01hY3JvQXNzZW1ibGVyU0g0LmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvTWFjcm9Bc3NlbWJsZXJTSDQuY3BwIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL1NINEFzc2VtYmxlci5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1Jl
cGF0Y2hCdWZmZXIuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9YODZBc3Nl
bWJsZXIuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAg
XApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2Vt
Ymxlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5o
CmluZGV4IGZhMTY1ZGUuLjlhYTI3MzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmgKQEAgLTUwLDYgKzUwLDEyIEBAIG5hbWVzcGFjZSBK
U0MgeyB0eXBlZGVmIE1hY3JvQXNzZW1ibGVyWDg2IE1hY3JvQXNzZW1ibGVyQmFzZTsgfTsKICNp
bmNsdWRlICJNYWNyb0Fzc2VtYmxlclg4Nl82NC5oIgogbmFtZXNwYWNlIEpTQyB7IHR5cGVkZWYg
TWFjcm9Bc3NlbWJsZXJYODZfNjQgTWFjcm9Bc3NlbWJsZXJCYXNlOyB9OwogCisjZWxpZiBDUFUo
U0g0KQorI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyU0g0LmgiCituYW1lc3BhY2UgSlNDIHsKK3R5
cGVkZWYgTWFjcm9Bc3NlbWJsZXJTSDQgTWFjcm9Bc3NlbWJsZXJCYXNlOworfTsKKwogI2Vsc2UK
ICNlcnJvciAiVGhlIE1hY3JvQXNzZW1ibGVyIGlzIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBwbGF0
Zm9ybS4iCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvTWFjcm9Bc3NlbWJsZXJTSDQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9NYWNyb0Fzc2VtYmxlclNINC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uZjcxODg0NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvTWFjcm9Bc3NlbWJsZXJTSDQuY3BwCkBAIC0wLDAgKzEsODIgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEgU1RNaWNyb2VsZWN0cm9uaWNzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisKKyNpZiBFTkFCTEUoQVNTRU1CTEVSKSAmJiBDUFUoU0g0KQorCisjaW5jbHVkZSAiTWFj
cm9Bc3NlbWJsZXJTSDQuaCIKKworbmFtZXNwYWNlIEpTQyB7Citjb25zdCBDb25kaXRpb24gTWFj
cm9Bc3NlbWJsZXJTSDQ6OkVxdWFsID0gU0g0QXNzZW1ibGVyOjpFUTsKK2NvbnN0IENvbmRpdGlv
biBNYWNyb0Fzc2VtYmxlclNINDo6Tm90RXF1YWwgPSBTSDRBc3NlbWJsZXI6Ok5FOworY29uc3Qg
Q29uZGl0aW9uIE1hY3JvQXNzZW1ibGVyU0g0OjpHcmVhdGVyVGhhbiA9IFNINEFzc2VtYmxlcjo6
R1Q7Citjb25zdCBDb25kaXRpb24gTWFjcm9Bc3NlbWJsZXJTSDQ6OkdyZWF0ZXJUaGFuT3JFcXVh
bCA9IFNINEFzc2VtYmxlcjo6R0U7Citjb25zdCBDb25kaXRpb24gTWFjcm9Bc3NlbWJsZXJTSDQ6
Okxlc3NUaGFuID0gU0g0QXNzZW1ibGVyOjpMVDsKK2NvbnN0IENvbmRpdGlvbiBNYWNyb0Fzc2Vt
YmxlclNINDo6TGVzc1RoYW5PckVxdWFsID0gU0g0QXNzZW1ibGVyOjpMRTsKK2NvbnN0IENvbmRp
dGlvbiBNYWNyb0Fzc2VtYmxlclNINDo6VUdyZWF0ZXJUaGFuID0gU0g0QXNzZW1ibGVyOjpISTsK
K2NvbnN0IENvbmRpdGlvbiBNYWNyb0Fzc2VtYmxlclNINDo6VUdyZWF0ZXJUaGFuT3JFcXVhbCA9
IFNINEFzc2VtYmxlcjo6SFM7Citjb25zdCBDb25kaXRpb24gTWFjcm9Bc3NlbWJsZXJTSDQ6OlVM
ZXNzVGhhbiA9IFNINEFzc2VtYmxlcjo6TEk7Citjb25zdCBDb25kaXRpb24gTWFjcm9Bc3NlbWJs
ZXJTSDQ6OlVMZXNzVGhhbk9yRXF1YWwgPSBTSDRBc3NlbWJsZXI6OkxTOworY29uc3QgQ29uZGl0
aW9uIE1hY3JvQXNzZW1ibGVyU0g0OjpaZXJvID0gU0g0QXNzZW1ibGVyOjpFUTsKK2NvbnN0IENv
bmRpdGlvbiBNYWNyb0Fzc2VtYmxlclNINDo6Tm9uWmVybyA9IFNINEFzc2VtYmxlcjo6TkU7Citj
b25zdCBDb25kaXRpb24gTWFjcm9Bc3NlbWJsZXJTSDQ6Ok92ZXJmbG93ID0gU0g0QXNzZW1ibGVy
OjpPRjsKK2NvbnN0IENvbmRpdGlvbiBNYWNyb0Fzc2VtYmxlclNINDo6QWJvdmUgPSBTSDRBc3Nl
bWJsZXI6OkhJOworY29uc3QgQ29uZGl0aW9uIE1hY3JvQXNzZW1ibGVyU0g0OjpBYm92ZU9yRXF1
YWwgPSBTSDRBc3NlbWJsZXI6OkhTOworY29uc3QgQ29uZGl0aW9uIE1hY3JvQXNzZW1ibGVyU0g0
OjpCZWxvdyA9IFNINEFzc2VtYmxlcjo6TEk7Citjb25zdCBDb25kaXRpb24gTWFjcm9Bc3NlbWJs
ZXJTSDQ6OkJlbG93T3JFcXVhbCA9IFNINEFzc2VtYmxlcjo6TFM7Citjb25zdCBDb25kaXRpb24g
TWFjcm9Bc3NlbWJsZXJTSDQ6OkRvdWJsZUVxdWFsID0gU0g0QXNzZW1ibGVyOjpFUTsKK2NvbnN0
IENvbmRpdGlvbiBNYWNyb0Fzc2VtYmxlclNINDo6RG91YmxlTm90RXF1YWwgPSBTSDRBc3NlbWJs
ZXI6Ok5FOworY29uc3QgQ29uZGl0aW9uIE1hY3JvQXNzZW1ibGVyU0g0OjpEb3VibGVHcmVhdGVy
VGhhbiA9IFNINEFzc2VtYmxlcjo6R1Q7Citjb25zdCBDb25kaXRpb24gTWFjcm9Bc3NlbWJsZXJT
SDQ6OkRvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbCA9IFNINEFzc2VtYmxlcjo6R0U7Citjb25zdCBD
b25kaXRpb24gTWFjcm9Bc3NlbWJsZXJTSDQ6OkRvdWJsZUxlc3NUaGFuID0gU0g0QXNzZW1ibGVy
OjpMVDsKK2NvbnN0IENvbmRpdGlvbiBNYWNyb0Fzc2VtYmxlclNINDo6RG91YmxlTGVzc1RoYW5P
ckVxdWFsID0gU0g0QXNzZW1ibGVyOjpMRTsKK2NvbnN0IENvbmRpdGlvbiBNYWNyb0Fzc2VtYmxl
clNINDo6RG91YmxlRXF1YWxPclVub3JkZXJlZCA9IFNINEFzc2VtYmxlcjo6RVFVOworY29uc3Qg
Q29uZGl0aW9uIE1hY3JvQXNzZW1ibGVyU0g0OjpEb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkID0g
U0g0QXNzZW1ibGVyOjpORVU7Citjb25zdCBDb25kaXRpb24gTWFjcm9Bc3NlbWJsZXJTSDQ6OkRv
dWJsZUdyZWF0ZXJUaGFuT3JVbm9yZGVyZWQgPSBTSDRBc3NlbWJsZXI6OkdUVTsKK2NvbnN0IENv
bmRpdGlvbiBNYWNyb0Fzc2VtYmxlclNINDo6RG91YmxlR3JlYXRlclRoYW5PckVxdWFsT3JVbm9y
ZGVyZWQgPSBTSDRBc3NlbWJsZXI6OkdFVTsKK2NvbnN0IENvbmRpdGlvbiBNYWNyb0Fzc2VtYmxl
clNINDo6RG91YmxlTGVzc1RoYW5PclVub3JkZXJlZCA9IFNINEFzc2VtYmxlcjo6TFRVOworY29u
c3QgQ29uZGl0aW9uIE1hY3JvQXNzZW1ibGVyU0g0OjpEb3VibGVMZXNzVGhhbk9yRXF1YWxPclVu
b3JkZXJlZCA9IFNINEFzc2VtYmxlcjo6TEVVOworY29uc3QgQ29uZGl0aW9uIE1hY3JvQXNzZW1i
bGVyU0g0OjpTaWduZWQgPSBTSDRBc3NlbWJsZXI6OlNJOworCit2b2lkIE1hY3JvQXNzZW1ibGVy
U0g0OjpsaW5rQ2FsbCh2b2lkKiBjb2RlLCBDYWxsIGNhbGwsIEZ1bmN0aW9uUHRyIGZ1bmN0aW9u
KQoreworICAgIFNINEFzc2VtYmxlcjo6bGlua0NhbGwoY29kZSwgY2FsbC5tX2ptcCwgZnVuY3Rp
b24udmFsdWUoKSk7Cit9CisKK3ZvaWQgTWFjcm9Bc3NlbWJsZXJTSDQ6OnJlcGF0Y2hDYWxsKENv
ZGVMb2NhdGlvbkNhbGwgY2FsbCwgQ29kZUxvY2F0aW9uTGFiZWwgZGVzdGluYXRpb24pCit7Cisg
ICAgU0g0QXNzZW1ibGVyOjpyZWxpbmtDYWxsKGNhbGwuZGF0YUxvY2F0aW9uKCksIGRlc3RpbmF0
aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpOworfQorCit2b2lkIE1hY3JvQXNzZW1ibGVyU0g0Ojpy
ZXBhdGNoQ2FsbChDb2RlTG9jYXRpb25DYWxsIGNhbGwsIEZ1bmN0aW9uUHRyIGRlc3RpbmF0aW9u
KQoreworICAgIFNINEFzc2VtYmxlcjo6cmVsaW5rQ2FsbChjYWxsLmRhdGFMb2NhdGlvbigpLCBk
ZXN0aW5hdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlND
CisKKyNlbmRpZiAvLyBFTkFCTEUoQVNTRU1CTEVSKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclNINC5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclNINC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjJjYTBkYTIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyU0g0LmgKQEAgLTAsMCArMSwxNDE5IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTEgU1RNaWNyb2VsZWN0cm9uaWNzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqLwor
CisjaWZuZGVmIE1hY3JvQXNzZW1ibGVyU0g0X2gKKyNkZWZpbmUgTWFjcm9Bc3NlbWJsZXJTSDRf
aAorCisjaWYgRU5BQkxFKEFTU0VNQkxFUikgJiYgQ1BVKFNINCkKKworI2luY2x1ZGUgIkFic3Ry
YWN0TWFjcm9Bc3NlbWJsZXIuaCIKKyNpbmNsdWRlICJTSDRBc3NlbWJsZXIuaCIKKyNpbmNsdWRl
IDx3dGYvQXNzZXJ0aW9ucy5oPgorCituYW1lc3BhY2UgSlNDIHsKK3R5cGVkZWYgU0g0QXNzZW1i
bGVyOjpDb25kaXRpb24gQ29uZGl0aW9uOworCitjbGFzcyBNYWNyb0Fzc2VtYmxlclNINCA6IHB1
YmxpYyBBYnN0cmFjdE1hY3JvQXNzZW1ibGVyPFNINEFzc2VtYmxlcj4geworcHVibGljOgorICAg
IHR5cGVkZWYgU0g0QXNzZW1ibGVyOjpGUFJlZ2lzdGVySUQgRlBSZWdpc3RlcklEOworCisgICAg
c3RhdGljIGNvbnN0IENvbmRpdGlvbiBFcXVhbDsKKyAgICBzdGF0aWMgY29uc3QgQ29uZGl0aW9u
IE5vdEVxdWFsOworICAgIHN0YXRpYyBjb25zdCBDb25kaXRpb24gR3JlYXRlclRoYW47CisgICAg
c3RhdGljIGNvbnN0IENvbmRpdGlvbiBHcmVhdGVyVGhhbk9yRXF1YWw7CisgICAgc3RhdGljIGNv
bnN0IENvbmRpdGlvbiBMZXNzVGhhbjsKKyAgICBzdGF0aWMgY29uc3QgQ29uZGl0aW9uIExlc3NU
aGFuT3JFcXVhbDsKKyAgICBzdGF0aWMgY29uc3QgQ29uZGl0aW9uIFVHcmVhdGVyVGhhbjsKKyAg
ICBzdGF0aWMgY29uc3QgQ29uZGl0aW9uIFVHcmVhdGVyVGhhbk9yRXF1YWw7CisgICAgc3RhdGlj
IGNvbnN0IENvbmRpdGlvbiBVTGVzc1RoYW47CisgICAgc3RhdGljIGNvbnN0IENvbmRpdGlvbiBV
TGVzc1RoYW5PckVxdWFsOworICAgIHN0YXRpYyBjb25zdCBDb25kaXRpb24gWmVybzsKKyAgICBz
dGF0aWMgY29uc3QgQ29uZGl0aW9uIE5vblplcm87CisgICAgc3RhdGljIGNvbnN0IENvbmRpdGlv
biBPdmVyZmxvdzsKKyAgICBzdGF0aWMgY29uc3QgQ29uZGl0aW9uIEFib3ZlOworICAgIHN0YXRp
YyBjb25zdCBDb25kaXRpb24gQWJvdmVPckVxdWFsOworICAgIHN0YXRpYyBjb25zdCBDb25kaXRp
b24gQmVsb3c7CisgICAgc3RhdGljIGNvbnN0IENvbmRpdGlvbiBCZWxvd09yRXF1YWw7CisgICAg
c3RhdGljIGNvbnN0IENvbmRpdGlvbiBEb3VibGVFcXVhbDsKKyAgICBzdGF0aWMgY29uc3QgQ29u
ZGl0aW9uIERvdWJsZU5vdEVxdWFsOworICAgIHN0YXRpYyBjb25zdCBDb25kaXRpb24gRG91Ymxl
R3JlYXRlclRoYW47CisgICAgc3RhdGljIGNvbnN0IENvbmRpdGlvbiBEb3VibGVHcmVhdGVyVGhh
bk9yRXF1YWw7CisgICAgc3RhdGljIGNvbnN0IENvbmRpdGlvbiBEb3VibGVMZXNzVGhhbjsKKyAg
ICBzdGF0aWMgY29uc3QgQ29uZGl0aW9uIERvdWJsZUxlc3NUaGFuT3JFcXVhbDsKKyAgICBzdGF0
aWMgY29uc3QgQ29uZGl0aW9uIERvdWJsZUVxdWFsT3JVbm9yZGVyZWQ7CisgICAgc3RhdGljIGNv
bnN0IENvbmRpdGlvbiBEb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkOworICAgIHN0YXRpYyBjb25z
dCBDb25kaXRpb24gRG91YmxlR3JlYXRlclRoYW5PclVub3JkZXJlZDsKKyAgICBzdGF0aWMgY29u
c3QgQ29uZGl0aW9uIERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbE9yVW5vcmRlcmVkOworICAgIHN0
YXRpYyBjb25zdCBDb25kaXRpb24gRG91YmxlTGVzc1RoYW5PclVub3JkZXJlZDsKKyAgICBzdGF0
aWMgY29uc3QgQ29uZGl0aW9uIERvdWJsZUxlc3NUaGFuT3JFcXVhbE9yVW5vcmRlcmVkOworICAg
IHN0YXRpYyBjb25zdCBDb25kaXRpb24gU2lnbmVkOworICAgIHN0YXRpYyBjb25zdCBTY2FsZSBT
Y2FsZVB0ciA9IFRpbWVzRm91cjsKKyAgICBzdGF0aWMgY29uc3QgRlBSZWdpc3RlcklEIGZzY3Jh
dGNoID0gU0g0UmVnaXN0ZXJzOjpmcjEwOworICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIHN0
YWNrUG9pbnRlclJlZ2lzdGVyID0gU0g0UmVnaXN0ZXJzOjpzcDsKKyAgICBzdGF0aWMgY29uc3Qg
UmVnaXN0ZXJJRCBsaW5rUmVnaXN0ZXIgPSBTSDRSZWdpc3RlcnM6OnByOworICAgIHN0YXRpYyBj
b25zdCBSZWdpc3RlcklEIHNjcmF0Y2hSZWczID0gU0g0UmVnaXN0ZXJzOjpyMTM7CisKKyAgICBS
ZWdpc3RlcklEIGNsYWltU2NyYXRjaCgpCisgICAgeworICAgICAgICByZXR1cm4gbV9hc3NlbWJs
ZXIuY2xhaW1TY3JhdGNoKCk7CisgICAgfQorCisgICAgdm9pZCByZWxlYXNlU2NyYXRjaChSZWdp
c3RlcklEIHJlZykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnJlbGVhc2VTY3JhdGNoKHJl
Zyk7CisgICAgfQorCisgICAgLy8gSW50ZWdlciBhcml0aG1ldGljIG9wZXJhdGlvbnMKKworICAg
IHZvaWQgYWRkMzIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAg
ICAgIG1fYXNzZW1ibGVyLmFkZGxSZWdSZWcoc3JjLCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lk
IGFkZDMyKEltbTMyIGltbSwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgaWYgKG1f
YXNzZW1ibGVyLmlzSW1tZWRpYXRlKGltbS5tX3ZhbHVlKSkgeworICAgICAgICAgICAgbV9hc3Nl
bWJsZXIuYWRkbEltbThyKGltbS5tX3ZhbHVlLCBkZXN0KTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAg
ICAgICBtX2Fzc2VtYmxlci5sb2FkQ29uc3RhbnQoaW1tLm1fdmFsdWUsIHNjcik7CisgICAgICAg
IG1fYXNzZW1ibGVyLmFkZGxSZWdSZWcoc2NyLCBkZXN0KTsKKyAgICAgICAgcmVsZWFzZVNjcmF0
Y2goc2NyKTsKKyAgICB9CisKKyAgICB2b2lkIGFkZDMyKEltbTMyIGltbSwgUmVnaXN0ZXJJRCBz
cmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIGlmIChzcmMgIT0gZGVzdCkKKyAg
ICAgICAgICAgIG1fYXNzZW1ibGVyLm1vdmxSZWdSZWcoc3JjLCBkZXN0KTsKKyAgICAgICAgYWRk
MzIoaW1tLCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIGFkZDMyKEltbTMyIGltbSwgQWRkcmVz
cyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2go
KTsKKyAgICAgICAgbG9hZDMyKGFkZHJlc3MsIHNjcik7CisgICAgICAgIGFkZDMyKGltbSwgc2Ny
KTsKKyAgICAgICAgc3RvcmUzMihzY3IsIGFkZHJlc3MpOworICAgICAgICByZWxlYXNlU2NyYXRj
aChzY3IpOworICAgIH0KKworICAgIHZvaWQgYWRkMzIoQWRkcmVzcyBzcmMsIFJlZ2lzdGVySUQg
ZGVzdCkKKyAgICB7CisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7Cisg
ICAgICAgIGxvYWQzMihzcmMsIHNjcik7CisgICAgICAgIG1fYXNzZW1ibGVyLmFkZGxSZWdSZWco
c2NyLCBkZXN0KTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICB9CisKKyAgICB2
b2lkIGFuZDMyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAg
ICBtX2Fzc2VtYmxlci5hbmRsUmVnUmVnKHNyYywgZGVzdCk7CisgICAgfQorCisgICAgdm9pZCBh
bmQzMihJbW0zMiBpbW0sIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIGlmICgoaW1t
Lm1fdmFsdWUgPD0gMjU1KSAmJiAoaW1tLm1fdmFsdWUgPj0gMCkgJiYgKGRlc3QgPT0gU0g0UmVn
aXN0ZXJzOjpyMCkpIHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFuZGxJbW04cihpbW0ubV92
YWx1ZSwgZGVzdCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgUmVn
aXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9hZENv
bnN0YW50KChpbW0ubV92YWx1ZSksIHNjcik7CisgICAgICAgIG1fYXNzZW1ibGVyLmFuZGxSZWdS
ZWcoc2NyLCBkZXN0KTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICB9CisKKyAg
ICB2b2lkIGxzaGlmdDMyKFJlZ2lzdGVySUQgc2hpZnRhbW91bnQsIFJlZ2lzdGVySUQgZGVzdCkK
KyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnNobGxSZWdSZWcoZGVzdCwgc2hpZnRhbW91bnQp
OworICAgIH0KKworICAgIHZvaWQgcnNoaWZ0MzIoaW50IGltbSwgUmVnaXN0ZXJJRCBkZXN0KQor
ICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAg
bV9hc3NlbWJsZXIubG9hZENvbnN0YW50KC1pbW0sIHNjcik7CisgICAgICAgIG1fYXNzZW1ibGVy
LnNoYVJlZ1JlZyhkZXN0LCBzY3IpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAg
IH0KKworICAgIHZvaWQgbHNoaWZ0MzIoSW1tMzIgaW1tLCBSZWdpc3RlcklEIGRlc3QpCisgICAg
eworICAgICAgICBpZiAoKGltbS5tX3ZhbHVlID09IDEpIHx8IChpbW0ubV92YWx1ZSA9PSAyKSB8
fCAoaW1tLm1fdmFsdWUgPT0gOCkgfHwgKGltbS5tX3ZhbHVlID09IDE2KSkgeworICAgICAgICAg
ICAgbV9hc3NlbWJsZXIuc2hsbEltbThyKGltbS5tX3ZhbHVlLCBkZXN0KTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRj
aCgpOworICAgICAgICBtX2Fzc2VtYmxlci5sb2FkQ29uc3RhbnQoaW1tLm1fdmFsdWUsIHNjcik7
CisgICAgICAgIG1fYXNzZW1ibGVyLnNobGxSZWdSZWcoZGVzdCwgc2NyKTsKKyAgICAgICAgcmVs
ZWFzZVNjcmF0Y2goc2NyKTsKKyAgICB9CisKKyAgICB2b2lkIG11bDMyKFJlZ2lzdGVySUQgc3Jj
LCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5pbXVsbFJlZ1Jl
ZyhzcmMsIGRlc3QpOworICAgICAgICBtX2Fzc2VtYmxlci5zdHNtYWNsKGRlc3QpOworICAgIH0K
KworICAgIHZvaWQgbXVsMzIoSW1tMzIgaW1tLCBSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBk
ZXN0KQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAg
ICAgICAgbW92ZShpbW0sIHNjcik7CisgICAgICAgIGlmICAoc3JjICE9IGRlc3QpCisgICAgICAg
ICAgICBtb3ZlKHNyYywgZGVzdCk7CisgICAgICAgIG11bDMyKHNjciwgIGRlc3QpOworICAgICAg
ICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgIH0KKworICAgIHZvaWQgbm90MzIoUmVnaXN0ZXJJ
RCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLm5vdGxS
ZWcoc3JjLCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIG9yMzIoUmVnaXN0ZXJJRCBzcmMsIFJl
Z2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLm9ybFJlZ1JlZyhzcmMs
IGRlc3QpOworICAgIH0KKworICAgIHZvaWQgb3IzMihJbW0zMiBpbW0sIFJlZ2lzdGVySUQgZGVz
dCkKKyAgICB7CisgICAgICAgIGlmICgoaW1tLm1fdmFsdWUgPD0gMjU1KSAmJiAoaW1tLm1fdmFs
dWUgPj0gMCkgJiYgKGRlc3QgPT0gU0g0UmVnaXN0ZXJzOjpyMCkpIHsKKyAgICAgICAgICAgIG1f
YXNzZW1ibGVyLm9ybEltbThyKGltbS5tX3ZhbHVlLCBkZXN0KTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOwor
ICAgICAgICBtX2Fzc2VtYmxlci5sb2FkQ29uc3RhbnQoaW1tLm1fdmFsdWUsIHNjcik7CisgICAg
ICAgIG1fYXNzZW1ibGVyLm9ybFJlZ1JlZyhzY3IsIGRlc3QpOworICAgICAgICByZWxlYXNlU2Ny
YXRjaChzY3IpOworICAgIH0KKworICAgIHZvaWQgcnNoaWZ0MzIoUmVnaXN0ZXJJRCBzaGlmdGFt
b3VudCwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgY29tcGFyZTMyKDMyLCBzaGlm
dGFtb3VudCwgRXF1YWwpOworICAgICAgICBtX2Fzc2VtYmxlci5lbnN1cmVTcGFjZShtX2Fzc2Vt
Ymxlci5tYXhJbnN0cnVjdGlvblNpemUgKyA0KTsKKyAgICAgICAgbV9hc3NlbWJsZXIuYnJhbmNo
KEJUX09QQ09ERSwgMSk7CisgICAgICAgIG1fYXNzZW1ibGVyLm5lZyhzaGlmdGFtb3VudCwgc2hp
ZnRhbW91bnQpOworICAgICAgICBtX2Fzc2VtYmxlci5zaGFSZWdSZWcoZGVzdCwgc2hpZnRhbW91
bnQpOworICAgIH0KKworICAgIHZvaWQgcnNoaWZ0MzIoSW1tMzIgaW1tLCBSZWdpc3RlcklEIGRl
c3QpCisgICAgeworICAgICAgICBpZiAoaW1tLm1fdmFsdWUgJiAweDFmKQorICAgICAgICAgICAg
cnNoaWZ0MzIoaW1tLm1fdmFsdWUgJiAweDFmLCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIHN1
YjMyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fz
c2VtYmxlci5zdWJsUmVnUmVnKHNyYywgZGVzdCk7CisgICAgfQorCisgICAgdm9pZCBzdWIzMihJ
bW0zMiBpbW0sIEFic29sdXRlQWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklEIHNjcmF0Y2hSZWcp
CisgICAgeworICAgICAgICBSZWdpc3RlcklEIHJlc3VsdCA9IGNsYWltU2NyYXRjaCgpOworICAg
ICAgICBtX2Fzc2VtYmxlci5sb2FkQ29uc3RhbnQocmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdD4o
YWRkcmVzcy5tX3B0ciksIHNjcmF0Y2hSZWcpOworICAgICAgICBtX2Fzc2VtYmxlci5tb3ZsTWVt
UmVnKHNjcmF0Y2hSZWcsIHJlc3VsdCk7CisgICAgICAgIGlmIChtX2Fzc2VtYmxlci5pc0ltbWVk
aWF0ZSgtaW1tLm1fdmFsdWUpKQorICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRkbEltbThyKC1p
bW0ubV92YWx1ZSwgcmVzdWx0KTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBtX2Fzc2Vt
Ymxlci5sb2FkQ29uc3RhbnQoaW1tLm1fdmFsdWUsIHNjcmF0Y2hSZWczKTsKKyAgICAgICAgICAg
IG1fYXNzZW1ibGVyLnN1YmxSZWdSZWcoc2NyYXRjaFJlZzMsIHJlc3VsdCk7CisgICAgICAgIH0K
KyAgICAgICAgc3RvcmUzMihyZXN1bHQsIHNjcmF0Y2hSZWcpOworICAgICAgICByZWxlYXNlU2Ny
YXRjaChyZXN1bHQpOworICAgIH0KKworICAgIHZvaWQgc3ViMzIoSW1tMzIgaW1tLCBBYnNvbHV0
ZUFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIFJlZ2lzdGVySUQgcmVzdWx0ID0gY2xh
aW1TY3JhdGNoKCk7CisgICAgICAgIFJlZ2lzdGVySUQgc2NyYXRjaFJlZyA9IGNsYWltU2NyYXRj
aCgpOworICAgICAgICBtX2Fzc2VtYmxlci5sb2FkQ29uc3RhbnQocmVpbnRlcnByZXRfY2FzdDx1
aW50MzJfdD4oYWRkcmVzcy5tX3B0ciksIHNjcmF0Y2hSZWcpOworICAgICAgICBtX2Fzc2VtYmxl
ci5tb3ZsTWVtUmVnKHNjcmF0Y2hSZWcsIHJlc3VsdCk7CisgICAgICAgIGlmIChtX2Fzc2VtYmxl
ci5pc0ltbWVkaWF0ZSgtaW1tLm1fdmFsdWUpKQorICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRk
bEltbThyKC1pbW0ubV92YWx1ZSwgcmVzdWx0KTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICBtX2Fzc2VtYmxlci5sb2FkQ29uc3RhbnQoaW1tLm1fdmFsdWUsIHNjcmF0Y2hSZWczKTsKKyAg
ICAgICAgICAgIG1fYXNzZW1ibGVyLnN1YmxSZWdSZWcoc2NyYXRjaFJlZzMsIHJlc3VsdCk7Cisg
ICAgICAgIH0KKyAgICAgICAgc3RvcmUzMihyZXN1bHQsIHNjcmF0Y2hSZWcpOworICAgICAgICBy
ZWxlYXNlU2NyYXRjaChyZXN1bHQpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3JhdGNoUmVn
KTsKKyAgICB9CisKKyAgICB2b2lkIGFkZDMyKEltbTMyIGltbSwgQWJzb2x1dGVBZGRyZXNzIGFk
ZHJlc3MsIFJlZ2lzdGVySUQgc2NyYXRjaFJlZykKKyAgICB7CisgICAgICAgIFJlZ2lzdGVySUQg
cmVzdWx0ID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvYWRDb25zdGFu
dChyZWludGVycHJldF9jYXN0PHVpbnQzMl90PihhZGRyZXNzLm1fcHRyKSwgc2NyYXRjaFJlZyk7
CisgICAgICAgIG1fYXNzZW1ibGVyLm1vdmxNZW1SZWcoc2NyYXRjaFJlZywgcmVzdWx0KTsKKyAg
ICAgICAgaWYgKG1fYXNzZW1ibGVyLmlzSW1tZWRpYXRlKGltbS5tX3ZhbHVlKSkKKyAgICAgICAg
ICAgIG1fYXNzZW1ibGVyLmFkZGxJbW04cihpbW0ubV92YWx1ZSwgcmVzdWx0KTsKKyAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5sb2FkQ29uc3RhbnQoaW1tLm1fdmFsdWUs
IHNjcmF0Y2hSZWczKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZGxSZWdSZWcoc2NyYXRj
aFJlZzMsIHJlc3VsdCk7CisgICAgICAgIH0KKyAgICAgICAgc3RvcmUzMihyZXN1bHQsIHNjcmF0
Y2hSZWcpOworICAgICAgICByZWxlYXNlU2NyYXRjaChyZXN1bHQpOworICAgIH0KKworICAgIHZv
aWQgYWRkMzIoSW1tMzIgaW1tLCBBYnNvbHV0ZUFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAg
ICAgIFJlZ2lzdGVySUQgcmVzdWx0ID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIFJlZ2lzdGVy
SUQgc2NyYXRjaFJlZyA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBtX2Fzc2VtYmxlci5sb2Fk
Q29uc3RhbnQocmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdD4oYWRkcmVzcy5tX3B0ciksIHNjcmF0
Y2hSZWcpOworICAgICAgICBtX2Fzc2VtYmxlci5tb3ZsTWVtUmVnKHNjcmF0Y2hSZWcsIHJlc3Vs
dCk7CisgICAgICAgIGlmIChtX2Fzc2VtYmxlci5pc0ltbWVkaWF0ZShpbW0ubV92YWx1ZSkpCisg
ICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGRsSW1tOHIoaW1tLm1fdmFsdWUsIHJlc3VsdCk7Cisg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIubG9hZENvbnN0YW50KGltbS5t
X3ZhbHVlLCBzY3JhdGNoUmVnMyk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGRsUmVnUmVn
KHNjcmF0Y2hSZWczLCByZXN1bHQpOworICAgICAgICB9CisgICAgICAgIHN0b3JlMzIocmVzdWx0
LCBzY3JhdGNoUmVnKTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2gocmVzdWx0KTsKKyAgICAgICAg
cmVsZWFzZVNjcmF0Y2goc2NyYXRjaFJlZyk7CisgICAgfQorCisgICAgdm9pZCBzdWIzMihJbW0z
MiBpbW0sIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIGlmIChtX2Fzc2VtYmxlci5p
c0ltbWVkaWF0ZSgtaW1tLm1fdmFsdWUpKSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGRs
SW1tOHIoLWltbS5tX3ZhbHVlLCBkZXN0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBtX2Fz
c2VtYmxlci5sb2FkQ29uc3RhbnQoaW1tLm1fdmFsdWUsIHNjcik7CisgICAgICAgIG1fYXNzZW1i
bGVyLnN1YmxSZWdSZWcoc2NyLCBkZXN0KTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsK
KyAgICB9CisKKyAgICB2b2lkIHN1YjMyKEFkZHJlc3Mgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisg
ICAgeworICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBs
b2FkMzIoc3JjLCBzY3IpOworICAgICAgICBtX2Fzc2VtYmxlci5zdWJsUmVnUmVnKHNjciwgZGVz
dCk7CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgfQorCisgICAgdm9pZCB4b3Iz
MihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3Nl
bWJsZXIueG9ybFJlZ1JlZyhzcmMsIGRlc3QpOworICAgIH0KKworICAgIHZvaWQgeG9yMzIoSW1t
MzIgaW1tLCBSZWdpc3RlcklEIHNyY0Rlc3QpCisgICAgeworICAgICAgICBpZiAoKHNyY0Rlc3Qg
IT0gU0g0UmVnaXN0ZXJzOjpyMCkgfHwgKGltbS5tX3ZhbHVlID4gMjU1KSB8fCAoaW1tLm1fdmFs
dWUgPCAwKSkgeworICAgICAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsK
KyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmxvYWRDb25zdGFudCgoaW1tLm1fdmFsdWUpLCBzY3Ip
OworICAgICAgICAgICAgbV9hc3NlbWJsZXIueG9ybFJlZ1JlZyhzY3IsIHNyY0Rlc3QpOworICAg
ICAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgICAgICBtX2Fzc2VtYmxlci54b3JsSW1tOHIoaW1tLm1fdmFsdWUsIHNyY0Rlc3Qp
OworICAgIH0KKworICAgIHZvaWQgY29tcGFyZTMyKGludCBpbW0sIFJlZ2lzdGVySUQgZHN0LCBD
b25kaXRpb24gY29uZCkKKyAgICB7CisgICAgICAgIGlmICgoKGNvbmQgPT0gRXF1YWwpIHx8IChj
b25kID09IE5vdEVxdWFsKSkgJiYgKGRzdCA9PSBTSDRSZWdpc3RlcnM6OnIwKSAmJiBtX2Fzc2Vt
Ymxlci5pc0ltbWVkaWF0ZShpbW0pKSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5jbXBFcUlt
bVIwKGltbSwgZHN0LCBjb25kKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
ICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBtX2Fzc2VtYmxl
ci5sb2FkQ29uc3RhbnQoaW1tLCBzY3IpOworICAgICAgICBtX2Fzc2VtYmxlci5jbXBsUmVnUmVn
KHNjciwgZHN0LCBjb25kKTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICB9CisK
KyAgICB2b2lkIGNvbXBhcmUzMihpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVy
SUQgbGVmdCwgQ29uZGl0aW9uIGNvbmQpCisgICAgeworICAgICAgICBSZWdpc3RlcklEIHNjciA9
IGNsYWltU2NyYXRjaCgpOworICAgICAgICBpZiAoIW9mZnNldCkgeworICAgICAgICAgICAgbV9h
c3NlbWJsZXIubW92bE1lbVJlZyhiYXNlLCBzY3IpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIu
Y21wbFJlZ1JlZyhzY3IsIGxlZnQsIGNvbmQpOworICAgICAgICAgICAgcmVsZWFzZVNjcmF0Y2go
c2NyKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAoKG9mZnNl
dCA8IDApIHx8IChvZmZzZXQgPj0gNjQpKSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5sb2Fk
Q29uc3RhbnQob2Zmc2V0LCBzY3IpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRkbFJlZ1Jl
ZyhiYXNlLCBzY3IpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIubW92bE1lbVJlZyhzY3IsIHNj
cik7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5jbXBsUmVnUmVnKHNjciwgbGVmdCwgY29uZCk7
CisgICAgICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgICAgIG1fYXNzZW1ibGVyLm1vdmxNZW1SZWcob2Zmc2V0ID4+IDIsIGJh
c2UsIHNjcik7CisgICAgICAgIG1fYXNzZW1ibGVyLmNtcGxSZWdSZWcoc2NyLCBsZWZ0LCBjb25k
KTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICB9CisKKyAgICB2b2lkIHRlc3RJ
bW0oaW50IGltbSwgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlKQorICAgIHsKKyAgICAgICAg
UmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3Ix
ID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIGlmICgob2Zmc2V0IDwgMCkgfHwgKG9mZnNldCA+
PSA2NCkpIHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmxvYWRDb25zdGFudChvZmZzZXQsIHNj
cik7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGRsUmVnUmVnKGJhc2UsIHNjcik7CisgICAg
ICAgICAgICBtX2Fzc2VtYmxlci5tb3ZsTWVtUmVnKHNjciwgc2NyKTsKKyAgICAgICAgfSBlbHNl
IGlmIChvZmZzZXQpCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5tb3ZsTWVtUmVnKG9mZnNldCA+
PiAyLCBiYXNlLCBzY3IpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5t
b3ZsTWVtUmVnKGJhc2UsIHNjcik7CisgICAgICAgIGlmIChtX2Fzc2VtYmxlci5pc0ltbWVkaWF0
ZShpbW0pKQorICAgICAgICAgICAgbV9hc3NlbWJsZXIubW92SW1tOChpbW0sIHNjcjEpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5sb2FkQ29uc3RhbnQoaW1tLCBzY3Ix
KTsKKyAgICAgICAgbV9hc3NlbWJsZXIudGVzdGxSZWdSZWcoc2NyLCBzY3IxKTsKKyAgICAgICAg
cmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyMSk7CisgICAg
fQorCisgICAgdm9pZCB0ZXN0bEltbShpbnQgaW1tLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7Cisg
ICAgICAgIGlmICgoZHN0ID09IFNINFJlZ2lzdGVyczo6cjApICYmIChpbW0gPD0gMjU1KSAmJiAo
aW1tID49IDApKSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci50ZXN0bEltbThyKGltbSwgZHN0
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBSZWdpc3RlcklEIHNj
ciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBtX2Fzc2VtYmxlci5sb2FkQ29uc3RhbnQoaW1t
LCBzY3IpOworICAgICAgICBtX2Fzc2VtYmxlci50ZXN0bFJlZ1JlZyhzY3IsIGRzdCk7CisgICAg
ICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgfQorCisgICAgdm9pZCBjb21wYXJlMzIoUmVn
aXN0ZXJJRCByaWdodCwgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBDb25kaXRpb24gY29u
ZCkKKyAgICB7CisgICAgICAgIGlmICghb2Zmc2V0KSB7CisgICAgICAgICAgICBSZWdpc3RlcklE
IHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIubW92bE1lbVJl
ZyhiYXNlLCBzY3IpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuY21wbFJlZ1JlZyhyaWdodCwg
c2NyLCBjb25kKTsKKyAgICAgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKChvZmZzZXQgPCAwKSB8fCAob2Zmc2V0
ID49IDY0KSkgeworICAgICAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsK
KyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmxvYWRDb25zdGFudChvZmZzZXQsIHNjcik7CisgICAg
ICAgICAgICBtX2Fzc2VtYmxlci5hZGRsUmVnUmVnKGJhc2UsIHNjcik7CisgICAgICAgICAgICBt
X2Fzc2VtYmxlci5tb3ZsTWVtUmVnKHNjciwgc2NyKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVy
LmNtcGxSZWdSZWcocmlnaHQsIHNjciwgY29uZCk7CisgICAgICAgICAgICByZWxlYXNlU2NyYXRj
aChzY3IpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIFJlZ2lzdGVy
SUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIG1fYXNzZW1ibGVyLm1vdmxNZW1SZWco
b2Zmc2V0ID4+IDIsIGJhc2UsIHNjcik7CisgICAgICAgIG1fYXNzZW1ibGVyLmNtcGxSZWdSZWco
cmlnaHQsIHNjciwgY29uZCk7CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgfQor
CisgICAgdm9pZCBjb21wYXJlMzIoaW50IGltbSwgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNl
LCBDb25kaXRpb24gY29uZCkKKyAgICB7CisgICAgICAgIGlmICghb2Zmc2V0KSB7CisgICAgICAg
ICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICAgICAgUmVnaXN0
ZXJJRCBzY3IxID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5tb3Zs
TWVtUmVnKGJhc2UsIHNjcik7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5sb2FkQ29uc3RhbnQo
aW1tLCBzY3IxKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmNtcGxSZWdSZWcoc2NyMSwgc2Ny
LCBjb25kKTsKKyAgICAgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcjEpOworICAgICAgICAgICAg
cmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
ICAgICBpZiAoKG9mZnNldCA8IDApIHx8IChvZmZzZXQgPj0gNjQpKSB7CisgICAgICAgICAgICBS
ZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICAgICAgUmVnaXN0ZXJJRCBz
Y3IxID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5sb2FkQ29uc3Rh
bnQob2Zmc2V0LCBzY3IpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRkbFJlZ1JlZyhiYXNl
LCBzY3IpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIubW92bE1lbVJlZyhzY3IsIHNjcik7Cisg
ICAgICAgICAgICBtX2Fzc2VtYmxlci5sb2FkQ29uc3RhbnQoaW1tLCBzY3IxKTsKKyAgICAgICAg
ICAgIG1fYXNzZW1ibGVyLmNtcGxSZWdSZWcoc2NyMSwgc2NyLCBjb25kKTsKKyAgICAgICAgICAg
IHJlbGVhc2VTY3JhdGNoKHNjcjEpOworICAgICAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBSZWdpc3RlcklEIHNjciA9
IGNsYWltU2NyYXRjaCgpOworICAgICAgICBSZWdpc3RlcklEIHNjcjEgPSBjbGFpbVNjcmF0Y2go
KTsKKyAgICAgICAgbV9hc3NlbWJsZXIubW92bE1lbVJlZyhvZmZzZXQgPj4gMiwgYmFzZSwgc2Ny
KTsgICAgICAgIAorICAgICAgICBtX2Fzc2VtYmxlci5sb2FkQ29uc3RhbnQoaW1tLCBzY3IxKTsK
KyAgICAgICAgbV9hc3NlbWJsZXIuY21wbFJlZ1JlZyhzY3IxLCBzY3IsIGNvbmQpOworICAgICAg
ICByZWxlYXNlU2NyYXRjaChzY3IxKTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAg
ICB9CisKKyAgICAvLyBNZW1vcnkgYWNjZXNzIG9wZXJhdGlvbgorICAgIAorICAgIHZvaWQgbG9h
ZDMyKEltcGxpY2l0QWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAg
ICAgICBsb2FkMzIoYWRkcmVzcy5iYXNlLCBhZGRyZXNzLm9mZnNldCwgZGVzdCk7CisgICAgfQor
CisgICAgdm9pZCBsb2FkOChJbXBsaWNpdEFkZHJlc3MgYWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0
KQorICAgIHsKKyAgICAgICAgbG9hZDgoYWRkcmVzcy5iYXNlLCBhZGRyZXNzLm9mZnNldCwgZGVz
dCk7CisgICAgfQorCisgICAgdm9pZCBsb2FkMzIoQmFzZUluZGV4IGFkZHJlc3MsIFJlZ2lzdGVy
SUQgZGVzdCkKKyAgICB7CisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7
CisgICAgICAgIG1vdmUoYWRkcmVzcy5pbmRleCwgc2NyKTsKKyAgICAgICAgbHNoaWZ0MzIoSW1t
MzIoYWRkcmVzcy5zY2FsZSksIHNjcik7CisgICAgICAgIGFkZDMyKGFkZHJlc3MuYmFzZSwgc2Ny
KTsKKyAgICAgICAgbG9hZDMyKHNjciwgYWRkcmVzcy5vZmZzZXQsIGRlc3QpOworICAgICAgICBy
ZWxlYXNlU2NyYXRjaChzY3IpOworICAgIH0KKworICAgIHZvaWQgbG9hZDMyKHZvaWQqIGFkZHJl
c3MsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvYWRDb25z
dGFudChyZWludGVycHJldF9jYXN0PHVpbnQzMl90PihhZGRyZXNzKSwgZGVzdCk7CisgICAgICAg
IG1fYXNzZW1ibGVyLm1vdmxNZW1SZWcoZGVzdCwgZGVzdCk7CisgICAgfQorCisgICAgdm9pZCBs
b2FkMzIoUmVnaXN0ZXJJRCBiYXNlLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGRlc3QpCisgICAg
eworICAgICAgICBpZiAoIW9mZnNldCkgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIubW92bE1l
bVJlZyhiYXNlLCBkZXN0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAg
ICBpZiAoKG9mZnNldCA+PSAwKSAmJiAob2Zmc2V0IDwgNjQpKSB7CisgICAgICAgICAgICBtX2Fz
c2VtYmxlci5tb3ZsTWVtUmVnKG9mZnNldCA+PiAyLCBiYXNlLCBkZXN0KTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAoKGRlc3QgPT0gU0g0UmVnaXN0ZXJzOjpy
MCkgJiYgKGRlc3QgIT0gYmFzZSkpIHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmxvYWRDb25z
dGFudCgob2Zmc2V0KSwgZGVzdCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5tb3ZsUjBtcihi
YXNlLCBkZXN0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBSZWdp
c3RlcklEIHNjcjsKKyAgICAgICAgaWYgKGRlc3QgPT0gYmFzZSkKKyAgICAgICAgICAgIHNjciA9
IGNsYWltU2NyYXRjaCgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzY3IgPSBkZXN0Owor
ICAgICAgICBtX2Fzc2VtYmxlci5sb2FkQ29uc3RhbnQoKG9mZnNldCksIHNjcik7CisgICAgICAg
IG1fYXNzZW1ibGVyLmFkZGxSZWdSZWcoYmFzZSwgc2NyKTsKKyAgICAgICAgbV9hc3NlbWJsZXIu
bW92bE1lbVJlZyhzY3IsIGRlc3QpOworICAgICAgICBpZiAoZGVzdCA9PSBiYXNlKQorICAgICAg
ICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICB9CisKKyAgICB2b2lkIGxvYWQ4KFJlZ2lz
dGVySUQgYmFzZSwgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAg
aWYgKChvZmZzZXQgPiAwKSAmJiAob2Zmc2V0IDwgNjQpICYmIChkZXN0ID09IFNINFJlZ2lzdGVy
czo6cjApKSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5tb3ZiTWVtUmVnKG9mZnNldCwgYmFz
ZSwgZGVzdCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKGJh
c2UgIT0gZGVzdCkgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIubG9hZENvbnN0YW50KChvZmZz
ZXQpLCBkZXN0KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZGxSZWdSZWcoYmFzZSwgZGVz
dCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5tb3ZiTWVtUmVnKGRlc3QsIGRlc3QpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xh
aW1TY3JhdGNoKCk7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvYWRDb25zdGFudCgob2Zmc2V0KSwg
c2NyKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuYWRkbFJlZ1JlZyhiYXNlLCBzY3IpOworICAgICAg
ICBtX2Fzc2VtYmxlci5tb3ZiTWVtUmVnKHNjciwgZGVzdCk7CisgICAgICAgIHJlbGVhc2VTY3Jh
dGNoKHNjcik7CisgICAgfQorCisgICAgdm9pZCBsb2FkMzIoUmVnaXN0ZXJJRCByMCwgUmVnaXN0
ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKHIwID09IFNI
NFJlZ2lzdGVyczo6cjApOworICAgICAgICBtX2Fzc2VtYmxlci5tb3ZsUjBtcihzcmMsIGRzdCk7
CisgICAgfQorCisgICAgdm9pZCBsb2FkMzIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0
KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubW92bE1lbVJlZyhzcmMsIGRzdCk7CisgICAg
fQorCisgICAgdm9pZCBsb2FkMTYoSW1wbGljaXRBZGRyZXNzIGFkZHJlc3MsIFJlZ2lzdGVySUQg
ZGVzdCkKKyAgICB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAKKyAg
ICB2b2lkIGxvYWQxNihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAg
ICAgICAgbV9hc3NlbWJsZXIubW92d01lbVJlZyhzcmMsIGRlc3QpOworICAgIH0KKworICAgIHZv
aWQgbG9hZDE2KFJlZ2lzdGVySUQgcjAsIFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3Qp
CisgICAgeworICAgICAgICBBU1NFUlQocjAgPT0gU0g0UmVnaXN0ZXJzOjpyMCk7CisgICAgICAg
IG1fYXNzZW1ibGVyLm1vdndSMG1yKHNyYywgZGVzdCk7CisgICAgfQorCisgICAgdm9pZCBsb2Fk
MTYoQmFzZUluZGV4IGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIFJl
Z2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIG1vdmUoYWRkcmVzcy5pbmRl
eCwgc2NyKTsKKyAgICAgICAgbHNoaWZ0MzIoSW1tMzIoYWRkcmVzcy5zY2FsZSksIHNjcik7Cisg
ICAgICAgIGFkZDMyKEltbTMyKGFkZHJlc3Mub2Zmc2V0KSwgc2NyKTsKKyAgICAgICAgaWYgKHNj
ciA9PSBTSDRSZWdpc3RlcnM6OnIwKQorICAgICAgICAgICAgbV9hc3NlbWJsZXIubW92d1IwbXIo
YWRkcmVzcy5iYXNlLCBzY3IpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGFkZDMyKGFk
ZHJlc3MuYmFzZSwgc2NyKTsKKyAgICAgICAgICAgIGxvYWQxNihzY3IsIHNjcik7CisgICAgICAg
IH0KKyAgICAgICAgZXh0dXcoc2NyLCBkZXN0KTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2Ny
KTsKKyAgICB9CisKKyAgICB2b2lkIHN0b3JlMzIoUmVnaXN0ZXJJRCBzcmMsIEltcGxpY2l0QWRk
cmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0
Y2goKTsKKyAgICAgICAgc3RvcmUzMihzcmMsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2Us
IHNjcik7CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgfQorCisgICAgdm9pZCBz
dG9yZTMyKFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lz
dGVySUQgc2NyKQorICAgIHsKKyAgICAgICAgaWYgKCFvZmZzZXQpIHsKKyAgICAgICAgICAgIG1f
YXNzZW1ibGVyLm1vdmxSZWdNZW0oc3JjLCBiYXNlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgICAgICBpZiAoKG9mZnNldCA+PTApICYmIChvZmZzZXQgPCA2NCkpIHsKKyAg
ICAgICAgICAgIG1fYXNzZW1ibGVyLm1vdmxSZWdNZW0oc3JjLCBvZmZzZXQgPj4gMiwgYmFzZSk7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgbV9hc3NlbWJsZXIubG9h
ZENvbnN0YW50KChvZmZzZXQpLCBzY3IpOworICAgICAgICBpZiAoc2NyID09IFNINFJlZ2lzdGVy
czo6cjApIHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLm1vdmxSZWdNZW1yMChzcmMsIGJhc2Up
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIG1fYXNzZW1ibGVyLmFk
ZGxSZWdSZWcoYmFzZSwgc2NyKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubW92bFJlZ01lbShzcmMs
IHNjcik7CisgICAgfQorCisgICAgdm9pZCBzdG9yZTMyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3Rl
cklEIG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG9mZnNl
dCA9PSBTSDRSZWdpc3RlcnM6OnIwKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubW92bFJlZ01lbXIw
KHNyYywgYmFzZSk7CisgICAgfQorCisgICAgdm9pZCBzdG9yZTMyKFJlZ2lzdGVySUQgc3JjLCBS
ZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLm1vdmxSZWdNZW0oc3Jj
LCBkc3QpOworICAgIH0KKworICAgIHZvaWQgc3RvcmUzMihJbW0zMiBpbW0sIEltcGxpY2l0QWRk
cmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0
Y2goKTsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IxID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAg
IG1fYXNzZW1ibGVyLmxvYWRDb25zdGFudCgoaW1tLm1fdmFsdWUpLCBzY3IpOworICAgICAgICBz
dG9yZTMyKHNjciwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSwgc2NyMSk7CisgICAgICAg
IHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcjEpOworICAg
IH0KKworICAgIHZvaWQgc3RvcmUzMihSZWdpc3RlcklEIHNyYywgQmFzZUluZGV4IGFkZHJlc3Mp
CisgICAgeworICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAg
ICBtb3ZlKGFkZHJlc3MuaW5kZXgsIHNjcik7CisgICAgICAgIAorICAgICAgICBsc2hpZnQzMihJ
bW0zMihhZGRyZXNzLnNjYWxlKSwgc2NyKTsKKyAgICAgICAgYWRkMzIoYWRkcmVzcy5iYXNlLCBz
Y3IpOworICAgICAgICBzdG9yZTMyKHNyYywgQWRkcmVzcyhzY3IsIGFkZHJlc3Mub2Zmc2V0KSk7
CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgfQorCisgICAgdm9pZCBzdG9yZTMy
KEltbTMyIGltbSwgdm9pZCogYWRkcmVzcykKKyAgICB7CisgICAgICAgIFJlZ2lzdGVySUQgc2Ny
ID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIFJlZ2lzdGVySUQgc2NyMSA9IGNsYWltU2NyYXRj
aCgpOworICAgICAgICBtX2Fzc2VtYmxlci5sb2FkQ29uc3RhbnQoKGltbS5tX3ZhbHVlKSwgc2Ny
KTsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9hZENvbnN0YW50KHJlaW50ZXJwcmV0X2Nhc3Q8dWlu
dDMyX3Q+KGFkZHJlc3MpLCBzY3IxKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubW92bE1lbVJlZyhz
Y3IsIHNjcjEpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgICAgICByZWxlYXNl
U2NyYXRjaChzY3IxKTsKKyAgICB9CisKKyAgICB2b2lkIHN0b3JlMzIoUmVnaXN0ZXJJRCBzcmMs
IHZvaWQqIGFkZHJlc3MpCisgICAgeworICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2Ny
YXRjaCgpOworICAgICAgICBtX2Fzc2VtYmxlci5sb2FkQ29uc3RhbnQocmVpbnRlcnByZXRfY2Fz
dDx1aW50MzJfdD4oYWRkcmVzcyksIHNjcik7CisgICAgICAgIG1fYXNzZW1ibGVyLm1vdmxNZW1S
ZWcoc3JjLCBzY3IpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgIH0KKworICAg
IERhdGFMYWJlbDMyIGxvYWQzMldpdGhBZGRyZXNzT2Zmc2V0UGF0Y2goQWRkcmVzcyBhZGRyZXNz
LCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWlt
U2NyYXRjaCgpOworICAgICAgICBEYXRhTGFiZWwzMiBsYWJlbCh0aGlzKTsKKyAgICAgICAgbV9h
c3NlbWJsZXIubG9hZENvbnN0YW50VW5SZXVzYWJsZShhZGRyZXNzLm9mZnNldCwgc2NyKTsKKyAg
ICAgICAgbV9hc3NlbWJsZXIuYWRkbFJlZ1JlZyhhZGRyZXNzLmJhc2UsIHNjcik7CisgICAgICAg
IG1fYXNzZW1ibGVyLm1vdmxNZW1SZWcoc2NyLCBkZXN0KTsKKyAgICAgICAgcmVsZWFzZVNjcmF0
Y2goc2NyKTsKKyAgICAgICAgcmV0dXJuIGxhYmVsOworICAgIH0KKworICAgIERhdGFMYWJlbDMy
IHN0b3JlMzJXaXRoQWRkcmVzc09mZnNldFBhdGNoKFJlZ2lzdGVySUQgc3JjLCBBZGRyZXNzIGFk
ZHJlc3MpCisgICAgeworICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOwor
ICAgICAgICBEYXRhTGFiZWwzMiBsYWJlbCh0aGlzKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9h
ZENvbnN0YW50VW5SZXVzYWJsZShhZGRyZXNzLm9mZnNldCwgc2NyKTsKKyAgICAgICAgbV9hc3Nl
bWJsZXIuYWRkbFJlZ1JlZyhhZGRyZXNzLmJhc2UsIHNjcik7CisgICAgICAgIG1fYXNzZW1ibGVy
Lm1vdmxSZWdNZW0oc3JjLCBzY3IpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAg
ICAgICByZXR1cm4gbGFiZWw7CisgICAgfQorCisgICAgIC8vIEZsb2F0aW5nLXBvaW50IG9wZXJh
dGlvbnMKKworICAgIGJvb2wgc3VwcG9ydHNGbG9hdGluZ1BvaW50KCkgY29uc3QgeyByZXR1cm4g
ZmFsc2U7IH0KKyAgICBib29sIHN1cHBvcnRzRmxvYXRpbmdQb2ludFRydW5jYXRlKCkgY29uc3Qg
eyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIHN1cHBvcnRzRmxvYXRpbmdQb2ludFNxcnQoKSBj
b25zdCB7IHJldHVybiBmYWxzZTsgfQorCisgICAgdm9pZCBsb2FkRG91YmxlKEltcGxpY2l0QWRk
cmVzcyBhZGRyZXNzLCBGUFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIHZvaWQgbG9hZERvdWJsZShjb25zdCB2b2lkKiBh
ZGRyZXNzLCBGUFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgIH0KKworICAgIHZvaWQgc3RvcmVEb3VibGUoRlBSZWdpc3RlcklEIHNyYywg
SW1wbGljaXRBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICB9CisKKyAgICB2b2lkIGFkZERvdWJsZShGUFJlZ2lzdGVySUQgc3JjLCBGUFJl
Z2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
IH0KKworICAgIHZvaWQgYWRkRG91YmxlKEFkZHJlc3MgYWRkcmVzcywgRlBSZWdpc3RlcklEIGRl
c3QpCisgICAgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICB2
b2lkIHN1YkRvdWJsZShGUFJlZ2lzdGVySUQgc3JjLCBGUFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7
CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIHZvaWQgc3ViRG91
YmxlKEFkZHJlc3MgYWRkcmVzcywgRlBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICB2b2lkIG11bERvdWJsZShGUFJlZ2lz
dGVySUQgc3JjLCBGUFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgIH0KKworICAgIHZvaWQgbXVsRG91YmxlKEFkZHJlc3MgYWRkcmVzcywg
RlBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICB9CisKKyAgICB2b2lkIGRpdkRvdWJsZShGUFJlZ2lzdGVySUQgc3JjLCBGUFJlZ2lzdGVy
SUQgZGVzdCkKKyAgICB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKwor
ICAgIHZvaWQgY29udmVydEludDMyVG9Eb3VibGUoUmVnaXN0ZXJJRCBzcmMsIEZQUmVnaXN0ZXJJ
RCBkZXN0KQorICAgIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorCisg
ICAgdm9pZCBjb252ZXJ0SW50MzJUb0RvdWJsZShBYnNvbHV0ZUFkZHJlc3Mgc3JjLCBGUFJlZ2lz
dGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0K
KworICAgIHZvaWQgY29udmVydEludDMyVG9Eb3VibGUoQWRkcmVzcyBzcmMsIEZQUmVnaXN0ZXJJ
RCBkZXN0KQorICAgIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorCisg
ICAgdm9pZCB6ZXJvRG91YmxlKEZQUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorCisgICAgdm9pZCBsb2FkMzJXaXRoVW5hbGlnbmVk
SGFsZldvcmRzKEJhc2VJbmRleCBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAg
ICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBtb3ZlKGFkZHJl
c3MuaW5kZXgsIHNjcik7CisgICAgICAgIGxzaGlmdDMyKEltbTMyKGFkZHJlc3Muc2NhbGUpLCBz
Y3IpOworICAgICAgICBhZGQzMihhZGRyZXNzLmJhc2UsIHNjcik7CisgICAgICAgIGFkZDMyKElt
bTMyKGFkZHJlc3Mub2Zmc2V0KSwgc2NyKTsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IxID0gY2xh
aW1TY3JhdGNoKCk7CisgICAgICAgIGxvYWQxNihzY3IsIHNjcjEpOworICAgICAgICBhZGQzMihJ
bW0zMigyKSwgc2NyKTsKKyAgICAgICAgbG9hZDE2KHNjciwgZGVzdCk7CisgICAgICAgIG1vdmUo
SW1tMzIoMTYpLCBzY3IpOworICAgICAgICBtX2Fzc2VtYmxlci5zaGxsUmVnUmVnKGRlc3QsIHNj
cik7CisgICAgICAgIG9yMzIoc2NyMSwgZGVzdCk7CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNj
cik7CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcjEpOworICAgIH0KKworICAgIEp1bXAgYnJh
bmNoMzJXaXRoVW5hbGlnbmVkSGFsZldvcmRzKENvbmRpdGlvbiBjb25kLCBCYXNlSW5kZXggbGVm
dCwgSW1tMzIgcmlnaHQpCisgICAgeworICAgICAgICBSZWdpc3RlcklEIHNjciA9IHNjcmF0Y2hS
ZWczOworICAgICAgICBsb2FkMzJXaXRoVW5hbGlnbmVkSGFsZldvcmRzKGxlZnQsIHNjcik7Cisg
ICAgICAgIGlmICgoKGNvbmQgPT0gRXF1YWwpIHx8IChjb25kID09IE5vdEVxdWFsKSkgJiYgIXJp
Z2h0Lm1fdmFsdWUpCisgICAgICAgICAgICBtX2Fzc2VtYmxlci50ZXN0bFJlZ1JlZyhzY3IsIHNj
cik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNvbXBhcmUzMihyaWdodC5tX3ZhbHVlLCBz
Y3IsIGNvbmQpOworICAgICAgICBpZiAoY29uZCA9PSBOb3RFcXVhbCkKKyAgICAgICAgICAgIHJl
dHVybiBicmFuY2hGYWxzZSgpOworICAgICAgICByZXR1cm4gYnJhbmNoVHJ1ZSgpOworICAgIH0K
KworICAgIEp1bXAgYnJhbmNoRG91YmxlTm9uWmVybyhGUFJlZ2lzdGVySUQgcmVnLCBGUFJlZ2lz
dGVySUQgc2NyYXRjaCkKKyAgICB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
IH0KKworICAgIEp1bXAgYnJhbmNoRG91YmxlWmVyb09yTmFOKEZQUmVnaXN0ZXJJRCByZWcsIEZQ
UmVnaXN0ZXJJRCBzY3JhdGNoKQorICAgIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgfQorCisgICAgSnVtcCBicmFuY2hEb3VibGUoQ29uZGl0aW9uIGNvbmQsIEZQUmVnaXN0
ZXJJRCBsZWZ0LCBGUFJlZ2lzdGVySUQgcmlnaHQpCisgICAgeworICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaFRydWUoKQorICAgIHsKKyAgICAg
ICAgbV9hc3NlbWJsZXIuZW5zdXJlU3BhY2UobV9hc3NlbWJsZXIubWF4SW5zdHJ1Y3Rpb25TaXpl
ICsgNiwgc2l6ZW9mKHVpbnQzMl90KSk7CisgICAgICAgIEp1bXAgbV9qdW1wID0gSnVtcChtX2Fz
c2VtYmxlci5qZSgpKTsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsK
KyAgICAgICAgbV9hc3NlbWJsZXIubG9hZENvbnN0YW50VW5SZXVzYWJsZSgweDAsIHNjcik7Cisg
ICAgICAgIG1fYXNzZW1ibGVyLm5vcCgpOworICAgICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKKyAg
ICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICAgICAgcmV0dXJuIG1fanVtcDsKKyAgICB9
CisKKyAgICBKdW1wIGJyYW5jaEZhbHNlKCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmVu
c3VyZVNwYWNlKG1fYXNzZW1ibGVyLm1heEluc3RydWN0aW9uU2l6ZSArIDYsIHNpemVvZih1aW50
MzJfdCkpOworICAgICAgICBKdW1wIG1fanVtcCA9IEp1bXAobV9hc3NlbWJsZXIuam5lKCkpOwor
ICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBtX2Fzc2Vt
Ymxlci5sb2FkQ29uc3RhbnRVblJldXNhYmxlKDB4MCwgc2NyKTsKKyAgICAgICAgbV9hc3NlbWJs
ZXIubm9wKCk7CisgICAgICAgIG1fYXNzZW1ibGVyLm5vcCgpOworICAgICAgICByZWxlYXNlU2Ny
YXRjaChzY3IpOworICAgICAgICByZXR1cm4gbV9qdW1wOworICAgIH0KKworICAgIHZvaWQgc2V0
OENvbXBhcmUzMihDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBsZWZ0LCBSZWdpc3RlcklEIHJp
Z2h0LCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBzZXQzMkNvbXBhcmUzMihjb25k
LCBsZWZ0LCByaWdodCwgZGVzdCk7CisgICAgfQorCisgICAgdm9pZCBzZXQ4Q29tcGFyZTMyKENv
bmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGxlZnQsIEltbTMyIHJpZ2h0LCBSZWdpc3RlcklEIGRl
c3QpCisgICAgeworICAgICAgICBpZiAobGVmdCAhPSBkZXN0KSB7CisgICAgICAgICAgICBtX2Fz
c2VtYmxlci5sb2FkQ29uc3RhbnQocmlnaHQubV92YWx1ZSwgZGVzdCk7CisgICAgICAgICAgICBz
ZXQzMkNvbXBhcmUzMihjb25kLCBsZWZ0LCBkZXN0LCBkZXN0KTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOwor
ICAgICAgICBtX2Fzc2VtYmxlci5sb2FkQ29uc3RhbnQocmlnaHQubV92YWx1ZSwgc2NyKTsKKyAg
ICAgICAgc2V0MzJDb21wYXJlMzIoY29uZCwgbGVmdCwgc2NyLCBkZXN0KTsKKyAgICAgICAgcmVs
ZWFzZVNjcmF0Y2goc2NyKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaDMyKENvbmRpdGlvbiBj
b25kLCBCYXNlSW5kZXggbGVmdCwgSW1tMzIgcmlnaHQpCisgICAgeworICAgICAgICBSZWdpc3Rl
cklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBtb3ZlKGxlZnQuaW5kZXgsIHNjcik7
CisgICAgICAgIGxzaGlmdDMyKEltbTMyKGxlZnQuc2NhbGUpLCBzY3IpOworICAgICAgICBhZGQz
MihsZWZ0LmJhc2UsIHNjcik7CisgICAgICAgIGxvYWQzMihzY3IsIGxlZnQub2Zmc2V0LCBzY3Ip
OworICAgICAgICBjb21wYXJlMzIocmlnaHQubV92YWx1ZSwgc2NyLCBjb25kKTsKKyAgICAgICAg
cmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICAgICAgaWYgKGNvbmQgPT0gTm90RXF1YWwpCisgICAg
ICAgICAgICByZXR1cm4gYnJhbmNoRmFsc2UoKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaFRydWUo
KTsKKyAgICB9CisKKyAgICB2b2lkIHNxcnREb3VibGUoRlBSZWdpc3RlcklEIHNyYywgRlBSZWdp
c3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9
CisKKyAgICBKdW1wIGJyYW5jaFRlc3Q4KENvbmRpdGlvbiBjb25kLCBBZGRyZXNzIGFkZHJlc3Ms
IEltbTMyIG1hc2sgPSBJbW0zMigtMSkpCisgICAgeworICAgICAgICBSZWdpc3RlcklEIGFkZHJl
c3NUZW1wUmVnaXN0ZXIgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgbG9hZDgoYWRkcmVzcywg
YWRkcmVzc1RlbXBSZWdpc3Rlcik7CisgICAgICAgIEp1bXAgam1wID0gYnJhbmNoVGVzdDMyKGNv
bmQsIGFkZHJlc3NUZW1wUmVnaXN0ZXIsIG1hc2spOworICAgICAgICByZWxlYXNlU2NyYXRjaChh
ZGRyZXNzVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgcmV0dXJuIGptcDsKKyAgICB9CisKKyAgICB2
b2lkIHNpZ25FeHRlbmQzMlRvUHRyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisg
ICAgeworICAgICAgICBpZiAoc3JjICE9IGRlc3QpCisgICAgICAgICAgICBtb3ZlKHNyYywgZGVz
dCk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2g4KENvbmRpdGlvbiBjb25kLCBBZGRyZXNzIGxl
ZnQsIEltbTMyIHJpZ2h0KQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCBhZGRyZXNzVGVtcFJl
Z2lzdGVyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIGxvYWQ4KGxlZnQsIGFkZHJlc3NUZW1w
UmVnaXN0ZXIpOworICAgICAgICBKdW1wIGptcCA9IGJyYW5jaDMyKGNvbmQsIGFkZHJlc3NUZW1w
UmVnaXN0ZXIsIHJpZ2h0KTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goYWRkcmVzc1RlbXBSZWdp
c3Rlcik7CisgICAgICAgIHJldHVybiBqbXA7CisgICAgfQorCisgICAgSnVtcCBicmFuY2hUcnVu
Y2F0ZURvdWJsZVRvSW50MzIoRlBSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAg
IHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorCisgICAgLy8gU3RhY2sg
bWFuaXB1bGF0aW9uIG9wZXJhdGlvbnMKKworICAgIHZvaWQgcG9wKFJlZ2lzdGVySUQgZGVzdCkK
KyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnBvcFJlZyhkZXN0KTsKKyAgICB9CisKKyAgICB2
b2lkIHB1c2goUmVnaXN0ZXJJRCBzcmMpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5wdXNo
UmVnKHNyYyk7CisgICAgfQorCisgICAgdm9pZCBwdXNoKEFkZHJlc3MgYWRkcmVzcykKKyAgICB7
CisgICAgICAgIGlmICghYWRkcmVzcy5vZmZzZXQpIHsKKyAgICAgICAgICAgIHB1c2goYWRkcmVz
cy5iYXNlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAoKGFk
ZHJlc3Mub2Zmc2V0IDwgMCkgfHwgKGFkZHJlc3Mub2Zmc2V0ID49IDY0KSkgeworICAgICAgICAg
ICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgICAgIG1fYXNzZW1i
bGVyLmxvYWRDb25zdGFudChhZGRyZXNzLm9mZnNldCwgc2NyKTsKKyAgICAgICAgICAgIG1fYXNz
ZW1ibGVyLmFkZGxSZWdSZWcoYWRkcmVzcy5iYXNlLCBzY3IpOworICAgICAgICAgICAgbV9hc3Nl
bWJsZXIubW92bE1lbVJlZyhzY3IsIFNINFJlZ2lzdGVyczo6c3ApOworICAgICAgICAgICAgcmVs
ZWFzZVNjcmF0Y2goc2NyKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZGxJbW04cigtNCwg
U0g0UmVnaXN0ZXJzOjpzcCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAg
ICAgbV9hc3NlbWJsZXIubW92bE1lbVJlZyhhZGRyZXNzLm9mZnNldCA+PiAyLCBhZGRyZXNzLmJh
c2UsIFNINFJlZ2lzdGVyczo6c3ApOworICAgICAgICBtX2Fzc2VtYmxlci5hZGRsSW1tOHIoLTQs
IFNINFJlZ2lzdGVyczo6c3ApOworICAgIH0KKworICAgIHZvaWQgcHVzaChJbW0zMiBpbW0pCisg
ICAgeworICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBt
X2Fzc2VtYmxlci5sb2FkQ29uc3RhbnQoaW1tLm1fdmFsdWUsIHNjcik7CisgICAgICAgIHB1c2go
c2NyKTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICB9CisKKyAgICAvLyBSZWdp
c3RlciBtb3ZlIG9wZXJhdGlvbnMKKworICAgIHZvaWQgbW92ZShJbW0zMiBpbW0sIFJlZ2lzdGVy
SUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvYWRDb25zdGFudChpbW0ubV92
YWx1ZSwgZGVzdCk7CisgICAgfQorCisgICAgRGF0YUxhYmVsUHRyIG1vdmVXaXRoUGF0Y2goSW1t
UHRyIGluaXRpYWxWYWx1ZSwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgRGF0YUxh
YmVsUHRyIGRhdGFMYWJlbCh0aGlzKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9hZENvbnN0YW50
VW5SZXVzYWJsZShyZWludGVycHJldF9jYXN0PHVpbnQzMl90Pihpbml0aWFsVmFsdWUubV92YWx1
ZSksIGRlc3QsIHRydWUpOworICAgICAgICByZXR1cm4gZGF0YUxhYmVsOworICAgIH0KKworICAg
IHZvaWQgbW92ZShSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAg
ICAgbV9hc3NlbWJsZXIubW92bFJlZ1JlZyhzcmMsIGRlc3QpOworICAgIH0KKworICAgIHZvaWQg
bW92ZShJbW1QdHIgaW1tLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2Vt
Ymxlci5sb2FkQ29uc3RhbnQoaW1tLmFzSW50cHRyKCksIGRlc3QpOworICAgIH0KKworICAgIHZv
aWQgZXh0dXcoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAg
bV9hc3NlbWJsZXIuZXh0dXcoc3JjLCBkc3QpOworICAgIH0KKworICAgIHZvaWQgc2V0MzJDb21w
YXJlMzIoQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgbGVmdCwgUmVnaXN0ZXJJRCByaWdodCwg
UmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuY21wbFJlZ1JlZyhy
aWdodCwgbGVmdCwgY29uZCk7CisgICAgICAgIGlmIChjb25kICE9IE5vdEVxdWFsKSB7CisgICAg
ICAgICAgICBtX2Fzc2VtYmxlci5tb3Z0KGRlc3QpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgICAgIG1fYXNzZW1ibGVyLmVuc3VyZVNwYWNlKG1fYXNzZW1ibGVyLm1heElu
c3RydWN0aW9uU2l6ZSArIDQpOworICAgICAgICBtX2Fzc2VtYmxlci5tb3ZJbW04KDAsIGRlc3Qp
OworICAgICAgICBtX2Fzc2VtYmxlci5icmFuY2goQlRfT1BDT0RFLCAwKTsKKyAgICAgICAgbV9h
c3NlbWJsZXIubW92SW1tOCgxLCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIHNldDMyQ29tcGFy
ZTMyKENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGxlZnQsIEltbTMyIHJpZ2h0LCBSZWdpc3Rl
cklEIGRlc3QpCisgICAgeworICAgICAgICBpZiAobGVmdCAhPSBkZXN0KSB7CisgICAgICAgICAg
ICBtb3ZlKHJpZ2h0LCBkZXN0KTsKKyAgICAgICAgICAgIHNldDMyQ29tcGFyZTMyKGNvbmQsIGxl
ZnQsIGRlc3QsIGRlc3QpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAg
IFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIG1vdmUocmlnaHQsIHNj
cik7CisgICAgICAgIHNldDMyQ29tcGFyZTMyKGNvbmQsIGxlZnQsIHNjciwgZGVzdCk7CisgICAg
ICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgfQorCisgICAgdm9pZCBzZXQzMlRlc3Q4KENv
bmRpdGlvbiBjb25kLCBBZGRyZXNzIGFkZHJlc3MsIEltbTMyIG1hc2ssIFJlZ2lzdGVySUQgZGVz
dCkKKyAgICB7CisgICAgICAgIEFTU0VSVCgoY29uZCA9PSBaZXJvKSB8fCAoY29uZCA9PSBOb25a
ZXJvKSk7CisgICAgICAgIGxvYWQ4KGFkZHJlc3MsIGRlc3QpOworICAgICAgICBpZiAobWFzay5t
X3ZhbHVlID09IC0xKQorICAgICAgICAgICAgY29tcGFyZTMyKDAsIGRlc3QsIGNvbmQpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICB0ZXN0bEltbShtYXNrLm1fdmFsdWUsIGRlc3QpOworICAg
ICAgICBpZiAoY29uZCAhPSBOb25aZXJvKSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5tb3Z0
KGRlc3QpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIG1fYXNzZW1i
bGVyLmVuc3VyZVNwYWNlKG1fYXNzZW1ibGVyLm1heEluc3RydWN0aW9uU2l6ZSArIDQpOworICAg
ICAgICBtX2Fzc2VtYmxlci5tb3ZJbW04KDAsIGRlc3QpOworICAgICAgICBtX2Fzc2VtYmxlci5i
cmFuY2goQlRfT1BDT0RFLCAwKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubW92SW1tOCgxLCBkZXN0
KTsKKyAgICB9CisKKyAgICB2b2lkIGxvYWRQdHJMaW5rUmVnKEltcGxpY2l0QWRkcmVzcyBhZGRy
ZXNzKQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAg
ICAgICAgbG9hZDMyKGFkZHJlc3MsIHNjcik7CisgICAgICAgIG1fYXNzZW1ibGVyLmxkc3ByKHNj
cik7CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgfQorCisgICAgSnVtcCBicmFu
Y2gzMihDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBsZWZ0LCBSZWdpc3RlcklEIHJpZ2h0KQor
ICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuY21wbFJlZ1JlZyhyaWdodCwgbGVmdCwgY29uZCk7
CisgICAgICAgIC8qIEJUIGxhYmVsID0+IEJGIG9mZgorICAgICAgICAgICBub3AgICAgICAgICBM
RFIgcmVnCisgICAgICAgICAgIG5vcCAgICAgICAgIGJyYWYgQHJlZworICAgICAgICAgICBub3Ag
ICAgICAgICBub3AKKyAgICAgICAgICovCisgICAgICAgIGlmIChjb25kID09IE5vdEVxdWFsKQor
ICAgICAgICAgICAgcmV0dXJuIGJyYW5jaEZhbHNlKCk7CisgICAgICAgIHJldHVybiBicmFuY2hU
cnVlKCk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2gzMihDb25kaXRpb24gY29uZCwgUmVnaXN0
ZXJJRCBsZWZ0LCBJbW0zMiByaWdodCkKKyAgICB7CisgICAgICAgIGlmICgoKGNvbmQgPT0gRXF1
YWwpIHx8IChjb25kID09IE5vdEVxdWFsKSkgJiYgIXJpZ2h0Lm1fdmFsdWUpCisgICAgICAgICAg
ICBtX2Fzc2VtYmxlci50ZXN0bFJlZ1JlZyhsZWZ0LCBsZWZ0KTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgY29tcGFyZTMyKHJpZ2h0Lm1fdmFsdWUsIGxlZnQsIGNvbmQpOworICAgICAgICBp
ZiAoY29uZCA9PSBOb3RFcXVhbCkKKyAgICAgICAgICAgIHJldHVybiBicmFuY2hGYWxzZSgpOwor
ICAgICAgICByZXR1cm4gYnJhbmNoVHJ1ZSgpOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoMzIo
Q29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgbGVmdCwgQWRkcmVzcyByaWdodCkKKyAgICB7Cisg
ICAgICAgIGNvbXBhcmUzMihyaWdodC5vZmZzZXQsIHJpZ2h0LmJhc2UsIGxlZnQsIGNvbmQpOwor
ICAgICAgICBpZiAoY29uZCA9PSBOb3RFcXVhbCkKKyAgICAgICAgICAgIHJldHVybiBicmFuY2hG
YWxzZSgpOworICAgICAgICByZXR1cm4gYnJhbmNoVHJ1ZSgpOworICAgIH0KKworICAgIEp1bXAg
YnJhbmNoMzIoQ29uZGl0aW9uIGNvbmQsIEFkZHJlc3MgbGVmdCwgUmVnaXN0ZXJJRCByaWdodCkK
KyAgICB7CisgICAgICAgIGNvbXBhcmUzMihyaWdodCwgbGVmdC5vZmZzZXQsIGxlZnQuYmFzZSwg
Y29uZCk7CisgICAgICAgIGlmIChjb25kID09IE5vdEVxdWFsKQorICAgICAgICAgICAgcmV0dXJu
IGJyYW5jaEZhbHNlKCk7CisgICAgICAgIHJldHVybiBicmFuY2hUcnVlKCk7CisgICAgfQorCisg
ICAgSnVtcCBicmFuY2gzMihDb25kaXRpb24gY29uZCwgQWRkcmVzcyBsZWZ0LCBJbW0zMiByaWdo
dCkKKyAgICB7CisgICAgICAgIGNvbXBhcmUzMihyaWdodC5tX3ZhbHVlLCBsZWZ0Lm9mZnNldCwg
bGVmdC5iYXNlLCBjb25kKTsKKyAgICAgICAgaWYgKGNvbmQgPT0gTm90RXF1YWwpCisgICAgICAg
ICAgICByZXR1cm4gYnJhbmNoRmFsc2UoKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaFRydWUoKTsK
KyAgICB9CisKKyAgICBKdW1wIGJyYW5jaDMyKENvbmRpdGlvbiBjb25kLCBBYnNvbHV0ZUFkZHJl
c3MgbGVmdCwgUmVnaXN0ZXJJRCByaWdodCkKKyAgICB7CisgICAgICAgIFJlZ2lzdGVySUQgc2Ny
ID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIG1vdmUoSW1tMzIoKGludClsZWZ0Lm1fcHRyKSwg
c2NyKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuY21wbFJlZ1JlZyhyaWdodCwgc2NyLCBjb25kKTsK
KyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICAgICAgaWYgKGNvbmQgPT0gTm90RXF1
YWwpCisgICAgICAgICAgICByZXR1cm4gYnJhbmNoRmFsc2UoKTsKKyAgICAgICAgcmV0dXJuIGJy
YW5jaFRydWUoKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaDMyKENvbmRpdGlvbiBjb25kLCBB
YnNvbHV0ZUFkZHJlc3MgbGVmdCwgSW1tMzIgcmlnaHQpCisgICAgeworICAgICAgICBSZWdpc3Rl
cklEIGFkZHJlc3NUZW1wUmVnaXN0ZXIgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgbG9hZDMy
KGxlZnQubV9wdHIsIGFkZHJlc3NUZW1wUmVnaXN0ZXIpOworICAgICAgICBjb21wYXJlMzIocmln
aHQubV92YWx1ZSwgYWRkcmVzc1RlbXBSZWdpc3RlciwgY29uZCk7CisgICAgICAgIHJlbGVhc2VT
Y3JhdGNoKGFkZHJlc3NUZW1wUmVnaXN0ZXIpOworICAgICAgICBpZiAoY29uZCA9PSBOb3RFcXVh
bCkKKyAgICAgICAgICAgIHJldHVybiBicmFuY2hGYWxzZSgpOworICAgICAgICByZXR1cm4gYnJh
bmNoVHJ1ZSgpOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoMTYoQ29uZGl0aW9uIGNvbmQsICBC
YXNlSW5kZXggbGVmdCwgUmVnaXN0ZXJJRCByaWdodCkKKyAgICB7CisgICAgICAgIFJlZ2lzdGVy
SUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIG1vdmUobGVmdC5pbmRleCwgc2NyKTsK
KyAgICAgICAgbHNoaWZ0MzIoSW1tMzIobGVmdC5zY2FsZSksIHNjcik7CisgICAgICAgIGFkZDMy
KEltbTMyKGxlZnQub2Zmc2V0KSwgc2NyKTsKKyAgICAgICAgYWRkMzIobGVmdC5iYXNlLCBzY3Ip
OworICAgICAgICBsb2FkMTYoc2NyLCBzY3IpOworICAgICAgICBleHR1dyhzY3IsIHNjcik7Cisg
ICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgICAgIHJldHVybiBicmFuY2gzMihjb25k
LCBzY3IsIHJpZ2h0KTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaDE2KENvbmRpdGlvbiBjb25k
LCBCYXNlSW5kZXggbGVmdCwgSW1tMzIgcmlnaHQpCisgICAgeworICAgICAgICBSZWdpc3RlcklE
IHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBtb3ZlKGxlZnQuaW5kZXgsIHNjcik7Cisg
ICAgICAgIGxzaGlmdDMyKEltbTMyKGxlZnQuc2NhbGUpLCBzY3IpOworICAgICAgICBhZGQzMihJ
bW0zMihsZWZ0Lm9mZnNldCksIHNjcik7CisgICAgICAgIGFkZDMyKGxlZnQuYmFzZSwgc2NyKTsK
KyAgICAgICAgbG9hZDE2KHNjciwgc2NyKTsKKyAgICAgICAgZXh0dXcoc2NyLCBzY3IpOworICAg
ICAgICBSZWdpc3RlcklEIHNjcjEgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgbV9hc3NlbWJs
ZXIubG9hZENvbnN0YW50KHJpZ2h0Lm1fdmFsdWUsIHNjcjEpOworICAgICAgICByZWxlYXNlU2Ny
YXRjaChzY3IpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IxKTsKKyAgICAgICAgcmV0dXJu
IGJyYW5jaDMyKGNvbmQsIHNjciwgc2NyMSk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2hUZXN0
MzIoQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgcmVnLCBSZWdpc3RlcklEIG1hc2spCisgICAg
eworICAgICAgICBBU1NFUlQoKGNvbmQgPT0gWmVybykgfHwgKGNvbmQgPT0gTm9uWmVybykpOwor
ICAgICAgICBtX2Fzc2VtYmxlci50ZXN0bFJlZ1JlZyhyZWcsIG1hc2spOworICAgICAgICBpZiAo
Y29uZCA9PSBOb3RFcXVhbCkKKyAgICAgICAgICAgIHJldHVybiBicmFuY2hGYWxzZSgpOworICAg
ICAgICByZXR1cm4gYnJhbmNoVHJ1ZSgpOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoVGVzdDMy
KENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIHJlZywgSW1tMzIgbWFzayA9IEltbTMyKC0xKSkK
KyAgICB7CisgICAgICAgIEFTU0VSVCgoY29uZCA9PSBaZXJvKSB8fCAoY29uZCA9PSBOb25aZXJv
KSk7CisgICAgICAgIGlmIChtYXNrLm1fdmFsdWUgPT0gLTEpCisgICAgICAgICAgICBtX2Fzc2Vt
Ymxlci50ZXN0bFJlZ1JlZyhyZWcsIHJlZyk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHRl
c3RsSW1tKG1hc2subV92YWx1ZSwgcmVnKTsKKyAgICAgICAgaWYgKGNvbmQgPT0gTm90RXF1YWwp
CisgICAgICAgICAgICByZXR1cm4gYnJhbmNoRmFsc2UoKTsKKyAgICAgICAgcmV0dXJuIGJyYW5j
aFRydWUoKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaFRlc3QzMihDb25kaXRpb24gY29uZCwg
QWRkcmVzcyBhZGRyZXNzLCBJbW0zMiBtYXNrID0gSW1tMzIoLTEpKQorICAgIHsKKyAgICAgICAg
QVNTRVJUKChjb25kID09IFplcm8pIHx8IChjb25kID09IE5vblplcm8pKTsKKyAgICAgICAgaWYg
KG1hc2subV92YWx1ZSA9PSAtMSkKKyAgICAgICAgICAgIGNvbXBhcmUzMigwLCBhZGRyZXNzLm9m
ZnNldCwgYWRkcmVzcy5iYXNlLCBjb25kKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdGVz
dEltbShtYXNrLm1fdmFsdWUsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UpOworICAgICAg
ICBpZiAoY29uZCA9PSBOb3RFcXVhbCkKKyAgICAgICAgICAgIHJldHVybiBicmFuY2hGYWxzZSgp
OworICAgICAgICByZXR1cm4gYnJhbmNoVHJ1ZSgpOworICAgIH0KKworICAgIEp1bXAgYnJhbmNo
VGVzdDMyKENvbmRpdGlvbiBjb25kLCBCYXNlSW5kZXggYWRkcmVzcywgSW1tMzIgbWFzayA9IElt
bTMyKC0xKSkKKyAgICB7CisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7
CisgICAgICAgIG1vdmUoYWRkcmVzcy5pbmRleCwgc2NyKTsKKyAgICAgICAgbHNoaWZ0MzIoSW1t
MzIoYWRkcmVzcy5zY2FsZSksIHNjcik7CisgICAgICAgIGFkZDMyKGFkZHJlc3MuYmFzZSwgc2Ny
KTsKKyAgICAgICAgbG9hZDMyKHNjciwgYWRkcmVzcy5vZmZzZXQsIHNjcik7CisgICAgICAgIGlm
IChtYXNrLm1fdmFsdWUgPT0gLTEpCisgICAgICAgICAgICBtX2Fzc2VtYmxlci50ZXN0bFJlZ1Jl
ZyhzY3IsIHNjcik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHRlc3RsSW1tKG1hc2subV92
YWx1ZSwgc2NyKTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICAgICAgaWYgKGNv
bmQgPT0gTm90RXF1YWwpCisgICAgICAgICAgICByZXR1cm4gYnJhbmNoRmFsc2UoKTsKKyAgICAg
ICAgcmV0dXJuIGJyYW5jaFRydWUoKTsKKyAgICB9CisKKyAgICBKdW1wIGp1bXAoKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIEp1bXAobV9hc3NlbWJsZXIuam1wKCkpOworICAgIH0KKworICAgIHZv
aWQganVtcChSZWdpc3RlcklEIHRhcmdldCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmpt
cFJlZyh0YXJnZXQpOworICAgIH0KKworICAgIHZvaWQganVtcChBZGRyZXNzIGFkZHJlc3MpCisg
ICAgeworICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBp
ZiAoKGFkZHJlc3Mub2Zmc2V0IDwgMCkgfHwgKGFkZHJlc3Mub2Zmc2V0ID49IDY0KSkgeworICAg
ICAgICAgICAgbV9hc3NlbWJsZXIubG9hZENvbnN0YW50KGFkZHJlc3Mub2Zmc2V0LCBzY3IpOwor
ICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRkbFJlZ1JlZyhhZGRyZXNzLmJhc2UsIHNjcik7Cisg
ICAgICAgICAgICBtX2Fzc2VtYmxlci5tb3ZsTWVtUmVnKHNjciwgc2NyKTsKKyAgICAgICAgfSBl
bHNlIGlmIChhZGRyZXNzLm9mZnNldCkKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLm1vdmxNZW1S
ZWcoYWRkcmVzcy5vZmZzZXQgPj4gMiwgYWRkcmVzcy5iYXNlLCBzY3IpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5tb3ZsTWVtUmVnKGFkZHJlc3MuYmFzZSwgc2NyKTsK
KyAgICAgICAgbV9hc3NlbWJsZXIuam1wUmVnKHNjcik7CisgICAgICAgIHJlbGVhc2VTY3JhdGNo
KHNjcik7CisgICAgfQorCisgICAgLy8gQXJpdGhtZXRpYyBjb250cm9sIGZsb3cgb3BlcmF0aW9u
cworCisgICAgSnVtcCBicmFuY2hBZGQzMihDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBzcmMs
IFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIEFTU0VSVCgoY29uZCA9PSBPdmVyZmxv
dykgfHwgKGNvbmQgPT0gU2lnbmVkKSB8fCAoY29uZCA9PSBaZXJvKSB8fCAoY29uZCA9PSBOb25a
ZXJvKSk7CisgICAgICAgIGlmIChjb25kID09IE92ZXJmbG93KSB7CisgICAgICAgICAgICBtX2Fz
c2VtYmxlci5hZGR2bFJlZ1JlZyhzcmMsIGRlc3QpOworICAgICAgICAgICAgcmV0dXJuIGJyYW5j
aFRydWUoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoY29uZCA9PSBTaWduZWQpIHsKKyAgICAg
ICAgICAgIG1fYXNzZW1ibGVyLmFkZGxSZWdSZWcoc3JjLCBkZXN0KTsKKyAgICAgICAgICAgIC8v
IENoZWNrIGlmIGRlc3QgaXMgbmVnYXRpdmUKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmNtcHB6
KGRlc3QpOworICAgICAgICAgICAgcmV0dXJuIGJyYW5jaEZhbHNlKCk7CisgICAgICAgIH0KKyAg
ICAgICAgbV9hc3NlbWJsZXIuYWRkbFJlZ1JlZyhzcmMsIGRlc3QpOworICAgICAgICBjb21wYXJl
MzIoMCwgZGVzdCwgRXF1YWwpOworICAgICAgICBpZiAoY29uZCA9PSBOb3RFcXVhbCkKKyAgICAg
ICAgICAgIHJldHVybiBicmFuY2hGYWxzZSgpOworICAgICAgICByZXR1cm4gYnJhbmNoVHJ1ZSgp
OworICAgIH0KKworICAgIEp1bXAgYnJhbmNoQWRkMzIoQ29uZGl0aW9uIGNvbmQsIEltbTMyIGlt
bSwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKChjb25kID09IE92ZXJm
bG93KSB8fCAoY29uZCA9PSBTaWduZWQpIHx8IChjb25kID09IFplcm8pIHx8IChjb25kID09IE5v
blplcm8pKTsKKyAgICAgICAgbW92ZShpbW0sIHNjcmF0Y2hSZWczKTsKKyAgICAgICAgcmV0dXJu
IGJyYW5jaEFkZDMyKGNvbmQsIHNjcmF0Y2hSZWczLCBkZXN0KTsKKyAgICB9CisKKyAgICBKdW1w
IGJyYW5jaE11bDMyKENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBk
ZXN0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKChjb25kID09IE92ZXJmbG93KSB8fCAoY29uZCA9
PSBTaWduZWQpIHx8IChjb25kID09IFplcm8pIHx8IChjb25kID09IE5vblplcm8pKTsKKyAgICAg
ICAgaWYgKGNvbmQgPT0gT3ZlcmZsb3cpIHsKKyAgICAgICAgICAgIFJlZ2lzdGVySUQgc2NyMSA9
IGNsYWltU2NyYXRjaCgpOworICAgICAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0
Y2goKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmRtdWxsUmVnUmVnKHNyYywgZGVzdCk7Cisg
ICAgICAgICAgICBtX2Fzc2VtYmxlci5zdHNtYWNsKGRlc3QpOworICAgICAgICAgICAgbV9hc3Nl
bWJsZXIubW92SW1tOCgtMzEsIHNjcik7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5tb3ZsUmVn
UmVnKGRlc3QsIHNjcjEpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuc2hhUmVnUmVnKHNjcjEs
IHNjcik7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zdHNtYWNoKHNjcik7CisgICAgICAgICAg
ICBtX2Fzc2VtYmxlci5jbXBsUmVnUmVnKHNjciwgc2NyMSwgWmVybyk7CisgICAgICAgICAgICBy
ZWxlYXNlU2NyYXRjaChzY3IxKTsKKyAgICAgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7Cisg
ICAgICAgICAgICByZXR1cm4gYnJhbmNoRmFsc2UoKTsKKyAgICAgICAgfQorICAgICAgICBtX2Fz
c2VtYmxlci5pbXVsbFJlZ1JlZyhzcmMsIGRlc3QpOworICAgICAgICBtX2Fzc2VtYmxlci5zdHNt
YWNsKGRlc3QpOworICAgICAgICBpZiAoY29uZCA9PSBTaWduZWQpIHsKKyAgICAgICAgICAgIC8v
IENoZWNrIGlmIGRlc3QgaXMgbmVnYXRpdmUKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmNtcHB6
KGRlc3QpOworICAgICAgICAgICAgcmV0dXJuIGJyYW5jaEZhbHNlKCk7CisgICAgICAgIH0KKyAg
ICAgICAgY29tcGFyZTMyKDAsIGRlc3QsIGNvbmQpOworICAgICAgICBpZiAoY29uZCA9PSBOb3RF
cXVhbCkKKyAgICAgICAgICAgIHJldHVybiBicmFuY2hGYWxzZSgpOworICAgICAgICByZXR1cm4g
YnJhbmNoVHJ1ZSgpOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoTXVsMzIoQ29uZGl0aW9uIGNv
bmQsIEltbTMyIGltbSwgUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7Cisg
ICAgICAgIEFTU0VSVCgoY29uZCA9PSBPdmVyZmxvdykgfHwgKGNvbmQgPT0gU2lnbmVkKSB8fCAo
Y29uZCA9PSBaZXJvKSB8fCAoY29uZCA9PSBOb25aZXJvKSk7CisgICAgICAgIG1vdmUoaW1tLCBz
Y3JhdGNoUmVnMyk7ICAgICAgCisgICAgICAgIGlmIChzcmMgIT0gZGVzdCkKKyAgICAgICAgICAg
IG1vdmUoc3JjLCBkZXN0KTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaE11bDMyKGNvbmQsIHNjcmF0
Y2hSZWczLCBkZXN0KTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaFN1YjMyKENvbmRpdGlvbiBj
b25kLCBSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgQVNT
RVJUKChjb25kID09IE92ZXJmbG93KSB8fCAoY29uZCA9PSBTaWduZWQpIHx8IChjb25kID09IFpl
cm8pIHx8IChjb25kID09IE5vblplcm8pKTsKKyAgICAgICAgaWYgKGNvbmQgPT0gT3ZlcmZsb3cp
IHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnN1YnZsUmVnUmVnKHNyYywgZGVzdCk7CisgICAg
ICAgICAgICByZXR1cm4gYnJhbmNoVHJ1ZSgpOworICAgICAgICB9CisgICAgICAgIGlmIChjb25k
ID09IFNpZ25lZCkgeworICAgICAgICAgICAgLy8gQ2hlY2sgaWYgZGVzdCBpcyBuZWdhdGl2ZQor
ICAgICAgICAgICAgbV9hc3NlbWJsZXIuc3VibFJlZ1JlZyhzcmMsIGRlc3QpOworICAgICAgICAg
ICAgY29tcGFyZTMyKDAsIGRlc3QsIExlc3NUaGFuKTsKKyAgICAgICAgICAgIHJldHVybiBicmFu
Y2hUcnVlKCk7CisgICAgICAgIH0KKyAgICAgICAgc3ViMzIoc3JjLCBkZXN0KTsKKyAgICAgICAg
Y29tcGFyZTMyKDAsIGRlc3QsIGNvbmQpOworICAgICAgICBpZiAoY29uZCA9PSBOb3RFcXVhbCkK
KyAgICAgICAgICAgIHJldHVybiBicmFuY2hGYWxzZSgpOworICAgICAgICByZXR1cm4gYnJhbmNo
VHJ1ZSgpOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoU3ViMzIoQ29uZGl0aW9uIGNvbmQsIElt
bTMyIGltbSwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKChjb25kID09
IE92ZXJmbG93KSB8fCAoY29uZCA9PSBTaWduZWQpIHx8IChjb25kID09IFplcm8pIHx8IChjb25k
ID09IE5vblplcm8pKTsKKyAgICAgICAgbW92ZShpbW0sIHNjcmF0Y2hSZWczKTsKKyAgICAgICAg
cmV0dXJuIGJyYW5jaFN1YjMyKGNvbmQsIHNjcmF0Y2hSZWczLCBkZXN0KTsKKyAgICB9CisKKyAg
ICBKdW1wIGJyYW5jaE9yMzIoQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgc3JjLCBSZWdpc3Rl
cklEIGRlc3QpCisgICAgeworICAgICAgICBBU1NFUlQoKGNvbmQgPT0gU2lnbmVkKSB8fCAoY29u
ZCA9PSBaZXJvKSB8fCAoY29uZCA9PSBOb25aZXJvKSk7CisgICAgICAgIGlmIChjb25kID09IFNp
Z25lZCkgeworICAgICAgICAgICAgb3IzMihzcmMsIGRlc3QpOworICAgICAgICAgICAgY29tcGFy
ZTMyKDAsIGRlc3QsIExlc3NUaGFuKTsKKyAgICAgICAgICAgIHJldHVybiBicmFuY2hUcnVlKCk7
CisgICAgICAgIH0KKyAgICAgICAgb3IzMihzcmMsIGRlc3QpOworICAgICAgICBjb21wYXJlMzIo
MCwgZGVzdCwgY29uZCk7CisgICAgICAgIGlmIChjb25kID09IE5vdEVxdWFsKQorICAgICAgICAg
ICAgcmV0dXJuIGJyYW5jaEZhbHNlKCk7CisgICAgICAgIHJldHVybiBicmFuY2hUcnVlKCk7Cisg
ICAgfQorCisgICAgdm9pZCBicmFuY2hDb252ZXJ0RG91YmxlVG9JbnQzMihGUFJlZ2lzdGVySUQg
c3JjLCBSZWdpc3RlcklEIGRlc3QsIEp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIEZQUmVnaXN0ZXJJ
RCBmcFRlbXApCisgICAgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisK
KyAgICB2b2lkIG5lZzMyKFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJs
ZXIubmVnKGRzdCwgZHN0KTsKKyAgICB9CisKKyAgICB2b2lkIG5vdDMyKFJlZ2lzdGVySUQgZHN0
KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubm90bFJlZyhkc3QsIGRzdCk7CisgICAgfQor
CisgICAgdm9pZCB1cnNoaWZ0MzIoUmVnaXN0ZXJJRCBzaGlmdGFtb3VudCwgUmVnaXN0ZXJJRCBk
ZXN0KQorICAgIHsKKyAgICAgICAgY29tcGFyZTMyKDMyLCBzaGlmdGFtb3VudCwgRXF1YWwpOwor
ICAgICAgICBtX2Fzc2VtYmxlci5lbnN1cmVTcGFjZShtX2Fzc2VtYmxlci5tYXhJbnN0cnVjdGlv
blNpemUgKyA0KTsKKyAgICAgICAgbV9hc3NlbWJsZXIuYnJhbmNoKEJUX09QQ09ERSwgMSk7Cisg
ICAgICAgIG1fYXNzZW1ibGVyLm5lZyhzaGlmdGFtb3VudCwgc2hpZnRhbW91bnQpOworICAgICAg
ICBtX2Fzc2VtYmxlci5zaGxsUmVnUmVnKGRlc3QsIHNoaWZ0YW1vdW50KTsKKyAgICB9CisKKyAg
ICB2b2lkIHVyc2hpZnQzMihJbW0zMiBpbW0sIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAg
ICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIG1fYXNzZW1ibGVy
LmxvYWRDb25zdGFudCgtKGltbS5tX3ZhbHVlKSwgc2NyKTsKKyAgICAgICAgbV9hc3NlbWJsZXIu
c2hhUmVnUmVnKGRlc3QsIHNjcik7CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAg
fQorCisgICAgQ2FsbCBjYWxsKCkKKyAgICB7CisgICAgICAgIHJldHVybiBDYWxsKG1fYXNzZW1i
bGVyLmNhbGwoKSwgQ2FsbDo6TGlua2FibGUpOworICAgIH0KKworICAgIENhbGwgbmVhckNhbGwo
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIENhbGwobV9hc3NlbWJsZXIuY2FsbCgpLCBDYWxsOjpM
aW5rYWJsZU5lYXIpOworICAgIH0KKworICAgIENhbGwgY2FsbChSZWdpc3RlcklEIHRhcmdldCkK
KyAgICB7CisgICAgICAgIHJldHVybiBDYWxsKG1fYXNzZW1ibGVyLmNhbGwodGFyZ2V0KSwgQ2Fs
bDo6Tm9uZSk7CisgICAgfQorCisgICAgdm9pZCBicmVha3BvaW50KCkKKyAgICB7CisgICAgICAg
IG1fYXNzZW1ibGVyLmJrcHQoKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubm9wKCk7CisgICAgfQor
CisgICAgSnVtcCBicmFuY2hQdHJXaXRoUGF0Y2goQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQg
bGVmdCwgRGF0YUxhYmVsUHRyJiBkYXRhTGFiZWwsIEltbVB0ciBpbml0aWFsUmlnaHRWYWx1ZSA9
IEltbVB0cigwKSkKKyAgICB7CisgICAgICAgIFJlZ2lzdGVySUQgZGF0YVRlbXBSZWdpc3RlciA9
IGNsYWltU2NyYXRjaCgpOworICAgICAgICBkYXRhTGFiZWwgPSBtb3ZlV2l0aFBhdGNoKGluaXRp
YWxSaWdodFZhbHVlLCBkYXRhVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuY21w
bFJlZ1JlZyhkYXRhVGVtcFJlZ2lzdGVyLCBsZWZ0LCBjb25kKTsKKyAgICAgICAgcmVsZWFzZVNj
cmF0Y2goZGF0YVRlbXBSZWdpc3Rlcik7CisgICAgICAgIGlmIChjb25kID09IE5vdEVxdWFsKQor
ICAgICAgICAgICAgcmV0dXJuIGJyYW5jaEZhbHNlKCk7CisgICAgICAgIHJldHVybiBicmFuY2hU
cnVlKCk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2hQdHJXaXRoUGF0Y2goQ29uZGl0aW9uIGNv
bmQsIEFkZHJlc3MgbGVmdCwgRGF0YUxhYmVsUHRyJiBkYXRhTGFiZWwsIEltbVB0ciBpbml0aWFs
UmlnaHRWYWx1ZSA9IEltbVB0cigwKSkKKyAgICB7CisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0g
Y2xhaW1TY3JhdGNoKCk7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvYWRDb25zdGFudChsZWZ0Lm9m
ZnNldCwgc2NyKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuYWRkbFJlZ1JlZyhsZWZ0LmJhc2UsIHNj
cik7CisgICAgICAgIG1fYXNzZW1ibGVyLm1vdmxNZW1SZWcoc2NyLCBzY3IpOworICAgICAgICBS
ZWdpc3RlcklEIHNjcjEgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgZGF0YUxhYmVsID0gbW92
ZVdpdGhQYXRjaChpbml0aWFsUmlnaHRWYWx1ZSwgc2NyMSk7CisgICAgICAgIG1fYXNzZW1ibGVy
LmNtcGxSZWdSZWcoc2NyMSwgc2NyLCBjb25kKTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2Ny
KTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyMSk7CisgICAgICAgIGlmIChjb25kID09IE5v
dEVxdWFsKQorICAgICAgICAgICAgcmV0dXJuIGJyYW5jaEZhbHNlKCk7CisgICAgICAgIHJldHVy
biBicmFuY2hUcnVlKCk7CisgICAgfQorCisgICAgdm9pZCByZXQoKQorICAgIHsKKyAgICAgICAg
bV9hc3NlbWJsZXIucmV0KCk7CisgICAgICAgIG1fYXNzZW1ibGVyLm5vcCgpOworICAgIH0KKwor
ICAgIERhdGFMYWJlbFB0ciBzdG9yZVB0cldpdGhQYXRjaChJbW1QdHIgaW5pdGlhbFZhbHVlLCBJ
bXBsaWNpdEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0g
Y2xhaW1TY3JhdGNoKCk7CisgICAgICAgIERhdGFMYWJlbFB0ciBsYWJlbCA9IG1vdmVXaXRoUGF0
Y2goaW5pdGlhbFZhbHVlLCBzY3IpOworICAgICAgICBzdG9yZTMyKHNjciwgYWRkcmVzcyk7Cisg
ICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgICAgIHJldHVybiBsYWJlbDsKKyAgICB9
CisKKyAgICBEYXRhTGFiZWxQdHIgc3RvcmVQdHJXaXRoUGF0Y2goSW1wbGljaXRBZGRyZXNzIGFk
ZHJlc3MpIHsgcmV0dXJuIHN0b3JlUHRyV2l0aFBhdGNoKEltbVB0cigwKSwgYWRkcmVzcyk7IH0K
KworICAgIGludCBzaXplT2ZDb25zdGFudFBvb2woKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1f
YXNzZW1ibGVyLnNpemVPZkNvbnN0YW50UG9vbCgpOworICAgIH0KKworICAgIENhbGwgdGFpbFJl
Y3Vyc2l2ZUNhbGwoKQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0
Y2goKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9hZENvbnN0YW50VW5SZXVzYWJsZSgweDAsIHNj
ciwgdHJ1ZSk7CisgICAgICAgIEp1bXAgbV9qdW1wID0gSnVtcChtX2Fzc2VtYmxlci5qbXAoc2Ny
KSk7CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgICAgIHJldHVybiBDYWxsOjpm
cm9tVGFpbEp1bXAobV9qdW1wKTsKKyAgICB9CisKKyAgICBDYWxsIG1ha2VUYWlsUmVjdXJzaXZl
Q2FsbChKdW1wIG9sZEp1bXApCisgICAgeworICAgICAgICBvbGRKdW1wLmxpbmsodGhpcyk7Cisg
ICAgICAgIHJldHVybiB0YWlsUmVjdXJzaXZlQ2FsbCgpOworICAgIH0KKworcHJpdmF0ZToKKyAg
ICBmcmllbmQgY2xhc3MgTGlua0J1ZmZlcjsKKyAgICBmcmllbmQgY2xhc3MgUmVwYXRjaEJ1ZmZl
cjsKKworICAgIHN0YXRpYyB2b2lkIGxpbmtDYWxsKHZvaWQqLCBDYWxsLCBGdW5jdGlvblB0cik7
CisgICAgc3RhdGljIHZvaWQgcmVwYXRjaENhbGwoQ29kZUxvY2F0aW9uQ2FsbCwgQ29kZUxvY2F0
aW9uTGFiZWwpOworICAgIHN0YXRpYyB2b2lkIHJlcGF0Y2hDYWxsKENvZGVMb2NhdGlvbkNhbGws
IEZ1bmN0aW9uUHRyKTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5B
QkxFKEFTU0VNQkxFUikKKworI2VuZGlmIC8vIE1hY3JvQXNzZW1ibGVyU0g0X2gKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvU0g0QXNzZW1ibGVyLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1NINEFzc2VtYmxlci5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1MGYxZjkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1NINEFzc2VtYmxlci5oCkBAIC0wLDAgKzEsMTkzMiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDExIFNUTWljcm9lbGVjdHJvbmljcy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmIFNINEFzc2VtYmxlcl9oCisjZGVmaW5lIFNINEFzc2VtYmxlcl9oCisKKyNp
ZiBFTkFCTEUoQVNTRU1CTEVSKSAmJiBDUFUoU0g0KQorCisjaW5jbHVkZSAiQXNzZW1ibGVyQnVm
ZmVyLmgiCisjaW5jbHVkZSAiQXNzZW1ibGVyQnVmZmVyV2l0aENvbnN0YW50UG9vbC5oIgorI2lu
Y2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPHd0Zi9Bc3Nl
cnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCisjaWZuZGVmIE5ERUJVRworI2Rl
ZmluZSBTSDRfQVNTRU1CTEVSX1RSQUNJTkcKKyNlbmRpZgorCituYW1lc3BhY2UgSlNDIHsKK3R5
cGVkZWYgdWludDE2X3QgU0g0V29yZDsKKworZW51bSB7CisgICAgSU5WQUxJRF9PUENPREUgPSAw
eGZmZmYsCisgICAgQUREX09QQ09ERSA9IDB4MzAwQywKKyAgICBBRERJTU1fT1BDT0RFID0gMHg3
MDAwLAorICAgIEFERENfT1BDT0RFID0gMHgzMDBFLAorICAgIEFERFZfT1BDT0RFID0gMHgzMDBG
LAorICAgIEFORF9PUENPREUgPSAweDIwMDksCisgICAgQU5ESU1NX09QQ09ERSA9IDB4QzkwMCwK
KyAgICBESVYwX09QQ09ERSA9IDB4MjAwNywKKyAgICBESVYxX09QQ09ERSA9IDB4MzAwNCwKKyAg
ICBCRl9PUENPREUgPSAweDhCMDAsCisgICAgQkZTX09QQ09ERSA9IDB4OEYwMCwKKyAgICBCUkFf
T1BDT0RFID0gMFhBMDAwLAorICAgIEJSQUZfT1BDT0RFID0gMHgwMDIzLAorICAgIE5PUF9PUENP
REUgPSAweDAwMDksCisgICAgQlNSX09QQ09ERSA9IDB4QjAwMCwKKyAgICBSVFNfT1BDT0RFID0g
MHgwMDBCLAorICAgIEJUX09QQ09ERSA9IDB4ODkwMCwKKyAgICBCVFNfT1BDT0RFID0gMHg4RDAw
LAorICAgIEJTUkZfT1BDT0RFID0gMHgwMDAzLAorICAgIEJSS19PUENPREUgPSAweDAwM0IsCisg
ICAgRlRSQ19PUENPREUgPSAweEYwM0QsCisgICAgQ01QRVFfT1BDT0RFID0gMHgzMDAwLAorICAg
IENNUEVRSU1NX09QQ09ERSA9IDB4ODgwMCwKKyAgICBDTVBHRV9PUENPREUgPSAweDMwMDMsCisg
ICAgQ01QR1RfT1BDT0RFID0gMHgzMDA3LAorICAgIENNUEhJX09QQ09ERSA9IDB4MzAwNiwKKyAg
ICBDTVBIU19PUENPREUgPSAweDMwMDIsCisgICAgQ01QUExfT1BDT0RFID0gMHg0MDE1LAorICAg
IENNUFBaX09QQ09ERSA9IDB4NDAxMSwKKyAgICBDTVBTVFJfT1BDT0RFID0gMHgyMDBDLAorICAg
IERUX09QQ09ERSA9IDB4NDAxMCwKKyAgICBGQ01QRVFfT1BDT0RFID0gMHhGMDA0LAorICAgIEZD
TVBHVF9PUENPREUgPSAweEYwMDUsCisgICAgRk1PVl9PUENPREUgPSAweEYwMEMsCisgICAgRE1P
Vl9PUENPREUgPSAweDFFMDE5LAorICAgIERNT1ZfV1JJVEVfUjBSTl9PUENPREUgPSAweDFFMDBG
LAorICAgIERNT1ZfUkVBRF9SMFJOX09QQ09ERSA9IDB4MUUwMEQsCisgICAgRkFERF9PUENPREUg
PSAweEYwMDAsCisgICAgRk1VTF9PUENPREUgPSAweEYwMDIsCisgICAgRlNVQl9PUENPREUgPSAw
eEYwMDEsCisgICAgRkRJVl9PUENPREUgPSAweEYwMDMsCisgICAgRk5FR19PUENPREUgPSAweEYw
NEQsCisgICAgSk1QX09QQ09ERSA9IDB4NDAyQiwKKyAgICBKU1JfT1BDT0RFID0gMHg0MDBCLAor
ICAgIExEU1BSX09QQ09ERSA9IDB4NDAyQSwKKyAgICBMRFNMUFJfT1BDT0RFID0gMHg0MDI2LAor
ICAgIE1PVl9PUENPREUgPSAweDYwMDMsCisgICAgTU9WSU1NX09QQ09ERSA9IDB4RTAwMCwKKyAg
ICBNT1ZCX1dSSVRFX1JOX09QQ09ERSA9IDB4MjAwMCwKKyAgICBNT1ZCX1dSSVRFX1JOREVDX09Q
Q09ERSA9IDB4MjAwNCwKKyAgICBNT1ZCX1dSSVRFX1IwUk5fT1BDT0RFID0gMHgwMDA0LAorICAg
IE1PVkJfV1JJVEVfT0ZGR0JSX09QQ09ERSA9IDB4QzAwMCwKKyAgICBNT1ZCX1dSSVRFX09GRlJO
X09QQ09ERSA9IDB4ODAwMCwKKyAgICBNT1ZCX1JFQURfUk1fT1BDT0RFID0gMHg2MDAwLAorICAg
IE1PVkJfUkVBRF9STUlOQ19PUENPREUgPSAweDYwMDQsCisgICAgTU9WQl9SRUFEX1IwUk1fT1BD
T0RFID0gMHgwMDBDLAorICAgIE1PVkJfUkVBRF9PRkZHQlJfT1BDT0RFID0gMHhDNDAwLAorICAg
IE1PVkJfUkVBRF9PRkZSTV9PUENPREUgPSAweDg0MDAsCisgICAgTU9WTF9XUklURV9STl9PUENP
REUgPSAweDIwMDIsCisgICAgTU9WTF9XUklURV9STkRFQ19PUENPREUgPSAweDIwMDYsCisgICAg
TU9WTF9XUklURV9SMFJOX09QQ09ERSA9IDB4MDAwNiwKKyAgICBNT1ZMX1dSSVRFX09GRkdCUl9P
UENPREUgPSAweEMyMDAsCisgICAgTU9WTF9XUklURV9PRkZSTl9PUENPREUgPSAweDEwMDAsCisg
ICAgTU9WTF9SRUFEX1JNX09QQ09ERSA9IDB4NjAwMiwKKyAgICBNT1ZMX1JFQURfUk1JTkNfT1BD
T0RFID0gMHg2MDA2LAorICAgIE1PVkxfUkVBRF9SMFJNX09QQ09ERSA9IDB4MDAwRSwKKyAgICBN
T1ZMX1JFQURfT0ZGR0JSX09QQ09ERSA9IDB4QzYwMCwKKyAgICBNT1ZMX1JFQURfT0ZGUENfT1BD
T0RFID0gMHhEMDAwLAorICAgIE1PVkxfUkVBRF9PRkZSTV9PUENPREUgPSAweDUwMDAsCisgICAg
TU9WV19XUklURV9STl9PUENPREUgPSAweDIwMDEsCisgICAgTU9WV19SRUFEX1JNX09QQ09ERSA9
IDB4NjAwMSwKKyAgICBNT1ZXX1JFQURfUjBSTV9PUENPREUgPSAweDAwMEQsCisgICAgTU9WV19S
RUFEX09GRlBDX09QQ09ERSA9IDB4OTAwMCwKKyAgICBNT1ZBX1JFQURfT0ZGUENfT1BDT0RFID0g
MHhDNzAwLAorICAgIE1PVlRfT1BDT0RFID0gMHgwMDI5LAorICAgIE1VTExfT1BDT0RFID0gMHgw
MDA3LAorICAgIERNVUxMX0xfT1BDT0RFID0gMHgzMDA1LAorICAgIFNUU01BQ0xfT1BDT0RFID0g
MHgwMDFBLAorICAgIFNUU01BQ0hfT1BDT0RFID0gMHgwMDBBLAorICAgIERNVUxTTF9PUENPREUg
PSAweDMwMEQsCisgICAgTkVHX09QQ09ERSA9IDB4NjAwQiwKKyAgICBORUdDX09QQ09ERSA9IDB4
NjAwQSwKKyAgICBOT1RfT1BDT0RFID0gMHg2MDA3LAorICAgIE9SX09QQ09ERSA9IDB4MjAwQiwK
KyAgICBPUklNTV9PUENPREUgPSAweENCMDAsCisgICAgT1JCSU1NX09QQ09ERSA9IDB4Q0YwMCwK
KyAgICBTRVRTX09QQ09ERSA9IDB4MDA1OCwKKyAgICBTRVRUX09QQ09ERSA9IDB4MDAxOCwKKyAg
ICBTSEFEX09QQ09ERSA9IDB4NDAwQywKKyAgICBTSEFMX09QQ09ERSA9IDB4NDAyMCwKKyAgICBT
SEFSX09QQ09ERSA9IDB4NDAyMSwKKyAgICBTSExEX09QQ09ERSA9IDB4NDAwRCwKKyAgICBTSExM
X09QQ09ERSA9IDB4NDAwMCwKKyAgICBTSExMMl9PUENPREUgPSAweDQwMDgsCisgICAgU0hMTDhf
T1BDT0RFID0gMHg0MDE4LAorICAgIFNITEwxNl9PUENPREUgPSAweDQwMjgsCisgICAgU0hMUl9P
UENPREUgPSAweDQwMDEsCisgICAgU0hMUjJfT1BDT0RFID0gMHg0MDA5LAorICAgIFNITFI4X09Q
Q09ERSA9IDB4NDAxOSwKKyAgICBTSExSMTZfT1BDT0RFID0gMHg0MDI5LAorICAgIFNUU1BSX09Q
Q09ERSA9IDB4MDAyQSwKKyAgICBTVFNMUFJfT1BDT0RFID0gMHg0MDIyLAorICAgIEZMT0FUX09Q
Q09ERSA9IDB4RjAyRCwKKyAgICBTVUJfT1BDT0RFID0gMHgzMDA4LAorICAgIFNVQkNfT1BDT0RF
ID0gMHgzMDBBLAorICAgIFNVQlZfT1BDT0RFID0gMHgzMDBCLAorICAgIFRTVF9PUENPREUgPSAw
eDIwMDgsCisgICAgVFNUSU1NX09QQ09ERSA9IDB4QzgwMCwKKyAgICBUU1RCX09QQ09ERSA9IDB4
Q0MwMCwKKyAgICBFWFRVV19PUENPREUgPSAweDYwMEQsCisgICAgWE9SX09QQ09ERSA9IDB4MjAw
QSwKKyAgICBYT1JJTU1fT1BDT0RFID0gMHhDQTAwLAorICAgIFhPUkJfT1BDT0RFID0gMHhDRTAw
LAorICAgIEZNT1ZTX1JFQURfUk1fSU5DX09QQ09ERSA9IDB4RjAwOSwKKyAgICBGTU9WU19SRUFE
X1JNX09QQ09ERSA9IDB4RjAwOCwKKyAgICBGTU9WU19SRUFEX1IwUk1fT1BDT0RFID0gMHhGMDA2
LAorICAgIEZNT1ZTX1dSSVRFX1JOX09QQ09ERSA9IDB4RjAwQSwKKyAgICBGTU9WU19XUklURV9S
Tl9ERUNfT1BDT0RFID0gMHhGMDBCLAorICAgIEZNT1ZTX1dSSVRFX1IwUk5fT1BDT0RFID0gMHhG
MDA3LAorICAgIExEU19STV9GUFVMX09QQ09ERSA9IDB4NDA1QSwKKyAgICBGTERTX0ZSTV9GUFVM
X09QQ09ERSA9IDB4RjAxRCwKKyAgICBTVFNfRlBVTF9STl9PUENPREUgPSAweDAwNUEsCisgICAg
RlNUU19GUFVMX0ZSTl9PUENPREUgPSAweEYwMEQsCisgICAgTERTRlBTQ1JfT1BDT0RFID0gMHg0
MDZBLAorICAgIFNUU0ZQU0NSX09QQ09ERSA9IDB4MDA2QSwKKyAgICBMRFNSTUZQVUxfT1BDT0RF
ID0gMHg0MDVBLAorICAgIEZTVFNGUFVMRlJOX09QQ09ERSA9IDB4RjAwRCwKKyAgICBGU1FSVF9P
UENPREUgPSAweEYwNkQsCisgICAgQ0xSVF9PUENPREUgPSA4LAorfTsKKworbmFtZXNwYWNlIFNI
NFJlZ2lzdGVycyB7Cit0eXBlZGVmIGVudW0geworICAgIHIwLAorICAgIHIxLAorICAgIHIyLAor
ICAgIHIzLAorICAgIHI0LAorICAgIHI1LAorICAgIHI2LAorICAgIHI3LAorICAgIHI4LAorICAg
IHI5LAorICAgIHIxMCwKKyAgICByMTEsCisgICAgcjEyLAorICAgIHIxMywKKyAgICByMTQsIGZw
ID0gcjE0LAorICAgIHIxNSwgc3AgPSByMTUsCisgICAgcGMsCisgICAgcHIsCit9IFJlZ2lzdGVy
SUQ7CisKK3R5cGVkZWYgZW51bSB7CisgICAgZnIwLCBkcjAgPSBmcjAsCisgICAgZnIxLAorICAg
IGZyMiwgZHIyID0gZnIyLAorICAgIGZyMywKKyAgICBmcjQsIGRyNCA9IGZyNCwKKyAgICBmcjUs
CisgICAgZnI2LCBkcjYgPSBmcjYsCisgICAgZnI3LAorICAgIGZyOCwgZHI4ID0gZnI4LAorICAg
IGZyOSwKKyAgICBmcjEwLCBkcjEwID0gZnIxMCwKKyAgICBmcjExLAorICAgIGZyMTIsIGRyMTIg
PSBmcjEyLAorICAgIGZyMTMsCisgICAgZnIxNCwgZHIxNCA9IGZyMTQsCisgICAgZnIxNSwKK30g
RlBSZWdpc3RlcklEOworfQorCitpbmxpbmUgdWludDE2X3QgZ2V0T3Bjb2RlR3JvdXAxKHVpbnQx
Nl90IG9wYywgaW50IHJtLCBpbnQgcm4pCit7CisgICAgcmV0dXJuIChvcGMgfCAoKHJtICYgMHhm
KSA8PCA4KSB8ICgocm4gJiAweGYpIDw8IDQpKTsKK30KKworaW5saW5lIHVpbnQxNl90IGdldE9w
Y29kZUdyb3VwMih1aW50MTZfdCBvcGMsIGludCBybSkKK3sKKyAgICByZXR1cm4gKG9wYyB8ICgo
cm0gJiAweGYpIDw8IDgpKTsKK30KKworaW5saW5lIHVpbnQxNl90IGdldE9wY29kZUdyb3VwMyh1
aW50MTZfdCBvcGMsIGludCBybSwgaW50IHJuKQoreworICAgIHJldHVybiAob3BjIHwgKChybSAm
IDB4ZikgPDwgOCkgfCAocm4gJiAweGZmKSk7Cit9CisKK2lubGluZSB1aW50MTZfdCBnZXRPcGNv
ZGVHcm91cDQodWludDE2X3Qgb3BjLCBpbnQgcm0sIGludCBybiwgaW50IG9mZnNldCkKK3sKKyAg
ICByZXR1cm4gKG9wYyB8ICgocm0gJiAweGYpIDw8IDgpIHwgKChybiAmIDB4ZikgPDwgNCkgfCAo
b2Zmc2V0ICYgMHhmKSk7Cit9CisKK2lubGluZSB1aW50MTZfdCBnZXRPcGNvZGVHcm91cDUodWlu
dDE2X3Qgb3BjLCBpbnQgcm0pCit7CisgICAgcmV0dXJuIChvcGMgfCAocm0gJiAweGZmKSk7Cit9
CisKK2lubGluZSB1aW50MTZfdCBnZXRPcGNvZGVHcm91cDYodWludDE2X3Qgb3BjLCBpbnQgcm0p
Cit7CisgICAgcmV0dXJuIChvcGMgfCAocm0gJiAweGZmZikpOworfQorCitpbmxpbmUgdWludDE2
X3QgZ2V0T3Bjb2RlR3JvdXA3KHVpbnQxNl90IG9wYywgaW50IHJtKQoreworICAgIHJldHVybiAo
b3BjIHwgKChybSAmIDB4NykgPDwgOSkpOworfQorCitpbmxpbmUgdWludDE2X3QgZ2V0T3Bjb2Rl
R3JvdXA4KHVpbnQxNl90IG9wYywgaW50IHJtLCBpbnQgcm4pCit7CisgICAgcmV0dXJuIChvcGMg
fCAoKHJtICYgMHg3KSA8PCA5KSB8ICgocm4gJiAweDcpIDw8IDUpKTsKK30KKworaW5saW5lIHVp
bnQxNl90IGdldE9wY29kZUdyb3VwOSh1aW50MTZfdCBvcGMsIGludCBybSwgaW50IHJuKQorewor
ICAgIHJldHVybiAob3BjIHwgKChybSAmIDB4ZikgPDwgOCkgfCAoKHJuICYgMHg3KSA8PCA1KSk7
Cit9CisKK2lubGluZSB1aW50MTZfdCBnZXRPcGNvZGVHcm91cDEwKHVpbnQxNl90IG9wYywgaW50
IHJtLCBpbnQgcm4pCit7CisgICAgcmV0dXJuIChvcGMgfCAoKHJtICYgMHg3KSA8PCA5KSB8ICgo
cm4gJiAweEYpIDw8IDQpKTsKK30KKworaW5saW5lIHVpbnQxNl90IGdldE9wY29kZUdyb3VwMTEo
dWludDE2X3Qgb3BjLCBpbnQgcm0sIGludCBybikKK3sKKyAgICByZXR1cm4gKG9wYyB8ICgocm0g
JiAweGYpIDw8IDQpIHwgKHJuICYgMHhmKSk7Cit9CisKK2lubGluZSB1aW50MTZfdCBnZXRSbih1
aW50MTZfdCB4KQoreworICAgIHJldHVybiAoKHggJiAweGYwMCkgPj4gOCk7Cit9CisKK2lubGlu
ZSB1aW50MTZfdCBnZXRSbSh1aW50MTZfdCB4KQoreworICAgIHJldHVybiAoKHggJiAweGYwKSA+
PiA0KTsKK30KKworaW5saW5lIHVpbnQxNl90IGdldERpc3AodWludDE2X3QgeCkKK3sKKyAgICBy
ZXR1cm4gKHggJiAweGYpOworfQorCitpbmxpbmUgdWludDE2X3QgZ2V0SW1tOCh1aW50MTZfdCB4
KQoreworICAgIHJldHVybiAoeCAmIDB4ZmYpOworfQorCitpbmxpbmUgdWludDE2X3QgZ2V0SW1t
MTIodWludDE2X3QgeCkKK3sKKyAgICByZXR1cm4gKHggJiAweGZmZik7Cit9CisKK2lubGluZSB1
aW50MTZfdCBnZXREUm4odWludDE2X3QgeCkKK3sKKyAgICByZXR1cm4gKCh4ICYgMHhFMDApID4+
IDkpOworfQorCitpbmxpbmUgdWludDE2X3QgZ2V0RFJtKHVpbnQxNl90IHgpCit7CisgICAgcmV0
dXJuICgoeCAmIDB4RTApID4+IDUpOworfQorCitjbGFzcyBTSDRBc3NlbWJsZXIgeworcHVibGlj
OgorICAgIHR5cGVkZWYgU0g0UmVnaXN0ZXJzOjpSZWdpc3RlcklEIFJlZ2lzdGVySUQ7CisgICAg
dHlwZWRlZiBTSDRSZWdpc3RlcnM6OkZQUmVnaXN0ZXJJRCBGUFJlZ2lzdGVySUQ7CisgICAgdHlw
ZWRlZiBBc3NlbWJsZXJCdWZmZXJXaXRoQ29uc3RhbnRQb29sPDUxMiwgNCwgMiwgU0g0QXNzZW1i
bGVyPiBTSDRCdWZmZXI7CisgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgc2NyYXRjaFJlZzEg
PSBTSDRSZWdpc3RlcnM6OnIzOworICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIHNjcmF0Y2hS
ZWcyID0gU0g0UmVnaXN0ZXJzOjpyMTE7CisgICAgaW50IGNsYWltc2NyYXRjaFJlZzsKKyAgICBz
dGF0aWMgY29uc3QgdWludDMyX3QgbWF4SW5zdHJ1Y3Rpb25TaXplID0gMTY7CisKKyAgICBlbnVt
IHsKKyAgICAgICAgcGFkRm9yQWxpZ244ID0gMHgwMCwKKyAgICAgICAgcGFkRm9yQWxpZ24xNiA9
IDB4MDAwOSwKKyAgICAgICAgcGFkRm9yQWxpZ24zMiA9IDB4MDAwOTAwMDksCisgICAgfTsKKwor
ICAgIFNINEFzc2VtYmxlcigpCisgICAgeworICAgICAgICBjbGFpbXNjcmF0Y2hSZWcgPSAweDA7
CisgICAgfQorCisgICAgLy8gU0g0IGNvbmRpdGlvbiBjb2RlcworICAgIHR5cGVkZWYgZW51bSB7
CisgICAgICAgIEVRID0gMHgwLCAvLyBFcXVhbAorICAgICAgICBORSA9IDB4MSwgLy8gTm90IEVx
dWFsCisgICAgICAgIEhTID0gMHgyLCAvLyBVbnNpZ2VuZCBHcmVhdGVyIFRoYW4gZXF1YWwKKyAg
ICAgICAgSEkgPSAweDMsIC8vIFVuc2lnZW5kIEdyZWF0ZXIgVGhhbgorICAgICAgICBMUyA9IDB4
NCwgLy8gVW5zaWdlbmQgTG93ZXIgb3IgU2FtZQorICAgICAgICBMSSA9IDB4NSwgLy8gVW5zaWdl
bmQgTG93ZXIKKyAgICAgICAgR0UgPSAweDYsIC8vIEdyZWF0ZXIgb3IgRXF1YWwKKyAgICAgICAg
TFQgPSAweDcsIC8vIExlc3MgVGhhbgorICAgICAgICBHVCA9IDB4OCwgLy8gR3JlYXRlciBUaGFu
CisgICAgICAgIExFID0gMHg5LCAvLyBMZXNzIG9yIEVxdWFsCisgICAgICAgIE9GID0gMHhhLCAv
LyBPdmVyRmxvdworICAgICAgICBTSSA9IDB4YiwgLy8gU2lnbmVkCisgICAgICAgIEVRVT0gMHhj
LCAvLyBFcXVhbCBvciB1bm9yZGVyZWQoTmFOKQorICAgICAgICBORVU9IDB4ZCwKKyAgICAgICAg
R1RVPSAweGUsCisgICAgICAgIEdFVT0gMHhmLAorICAgICAgICBMVFU9IDB4MTAsCisgICAgICAg
IExFVT0gMHgxMSwKKyAgICB9IENvbmRpdGlvbjsKKworICAgIC8vIE9wYXF1ZSBsYWJlbCB0eXBl
cworcHVibGljOgorICAgIGNsYXNzIEptcFNyYyB7CisgICAgICAgIGZyaWVuZCBjbGFzcyBTSDRB
c3NlbWJsZXI7CisgICAgcHVibGljOgorICAgICAgICBKbXBTcmMoKQorICAgICAgICAgICAgOiBt
X29mZnNldCgtMSkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAg
ICBKbXBTcmMoaW50IG9mZnNldCkKKyAgICAgICAgICAgIDogbV9vZmZzZXQob2Zmc2V0KQorICAg
ICAgICB7CisgICAgICAgIH0KKworICAgICAgICBpbnQgbV9vZmZzZXQ7CisgICAgfTsKKworICAg
IGNsYXNzIEptcERzdCB7CisgICAgICAgIGZyaWVuZCBjbGFzcyBTSDRBc3NlbWJsZXI7CisgICAg
cHVibGljOgorICAgICAgICBKbXBEc3QoKQorICAgICAgICAgICAgOiBtX29mZnNldCgtMSkKKyAg
ICAgICAgICAgICwgbV91c2VkKGZhbHNlKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAg
ICBib29sIGlzVXNlZCgpIGNvbnN0IHsgcmV0dXJuIG1fdXNlZDsgfQorICAgICAgICBib29sIGlz
U2V0KCkgY29uc3QgeyByZXR1cm4gKG1fb2Zmc2V0ICE9IC0xKTsgfQorICAgICAgICB2b2lkIHVz
ZWQoKSB7IG1fdXNlZCA9IHRydWU7IH0KKworICAgIHByaXZhdGU6CisgICAgICAgIEptcERzdChp
bnQgb2Zmc2V0KQorICAgICAgICAgICAgOiBtX29mZnNldChvZmZzZXQpCisgICAgICAgICAgICAs
IG1fdXNlZChmYWxzZSkKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKG1fb2Zmc2V0ID09
IG9mZnNldCk7CisgICAgICAgIH0KKworICAgICAgICBpbnQgbV9vZmZzZXQgOiAzMTsKKyAgICAg
ICAgaW50IG1fdXNlZCA6IDE7CisgICAgfTsKKworICAgIGJvb2wgaXNJbW1lZGlhdGUoaW50IGNv
bnN0YW50KQorICAgIHsKKyAgICAgICAgcmV0dXJuICgoY29uc3RhbnQgPD0gMTI3KSAmJiAoY29u
c3RhbnQgPj0gLTEyOCkpOworICAgIH0KKworICAgIFJlZ2lzdGVySUQgY2xhaW1TY3JhdGNoKCkK
KyAgICB7CisgICAgICAgIEFTU0VSVCgoY2xhaW1zY3JhdGNoUmVnICE9IDB4MykpOworICAgICAg
ICBpZiAoIShjbGFpbXNjcmF0Y2hSZWcgJiAweDEpKSB7CisgICAgICAgICAgICBjbGFpbXNjcmF0
Y2hSZWcgPSAoY2xhaW1zY3JhdGNoUmVnIHwgMHgxKTsKKyAgICAgICAgICAgIHJldHVybiBzY3Jh
dGNoUmVnMTsKKyAgICAgICAgfQorICAgICAgICBjbGFpbXNjcmF0Y2hSZWcgPSAoY2xhaW1zY3Jh
dGNoUmVnIHwgMHgyKTsKKyAgICAgICAgcmV0dXJuIHNjcmF0Y2hSZWcyOworICAgIH0KKworICAg
IHZvaWQgcmVsZWFzZVNjcmF0Y2goUmVnaXN0ZXJJRCBzY3JhdGNoUikgCisgICAgeworICAgICAg
ICBpZiAoc2NyYXRjaFIgPT0gc2NyYXRjaFJlZzEpCisgICAgICAgICAgICBjbGFpbXNjcmF0Y2hS
ZWcgPSAoY2xhaW1zY3JhdGNoUmVnICYgMHgyKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
Y2xhaW1zY3JhdGNoUmVnID0gKGNsYWltc2NyYXRjaFJlZyAmIDB4MSk7CisgICAgfQorCisgICAg
Ly8gU3RhY2sgb3BlcmF0aW9ucworCisgICAgdm9pZCBwdXNoUmVnKFJlZ2lzdGVySUQgcmVnKQor
ICAgIHsKKyAgICAgICAgaWYgKHJlZyA9PSBTSDRSZWdpc3RlcnM6OnByKSB7CisgICAgICAgICAg
ICBvbmVTaG9ydE9wKGdldE9wY29kZUdyb3VwMihTVFNMUFJfT1BDT0RFLCBTSDRSZWdpc3RlcnM6
OnNwKSk7CisgICAgICAgICAgICByZXR1cm47IAorICAgICAgICB9CisgICAgICAgIG9uZVNob3J0
T3AoZ2V0T3Bjb2RlR3JvdXAxKE1PVkxfV1JJVEVfUk5ERUNfT1BDT0RFLCBTSDRSZWdpc3RlcnM6
OnNwLCByZWcpKTsKKyAgICB9CisKKyAgICB2b2lkIHBvcFJlZyhSZWdpc3RlcklEIHJlZykKKyAg
ICB7CisgICAgICAgIGlmIChyZWcgPT0gU0g0UmVnaXN0ZXJzOjpwcikgeworICAgICAgICAgICAg
b25lU2hvcnRPcChnZXRPcGNvZGVHcm91cDIoTERTTFBSX09QQ09ERSwgU0g0UmVnaXN0ZXJzOjpz
cCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIG9uZVNob3J0T3Ao
Z2V0T3Bjb2RlR3JvdXAxKE1PVkxfUkVBRF9STUlOQ19PUENPREUsIHJlZywgU0g0UmVnaXN0ZXJz
OjpzcCkpOworICAgIH0KKworICAgIHZvaWQgbW92dChSZWdpc3RlcklEIGRzdCkKKyAgICB7Cisg
ICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3VwMihNT1ZUX09QQ09ERSwgZHN0KTsK
KyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAgIC8vIEFyaXRobWV0aWMgb3Bl
cmF0aW9ucworCisgICAgdm9pZCBhZGRsUmVnUmVnKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklE
IGRzdCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3VwMShBRERf
T1BDT0RFLCBkc3QsIHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAg
ICB2b2lkIGFkZGNsUmVnUmVnKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7
CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3VwMShBRERDX09QQ09ERSwgZHN0
LCBzcmMpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCBhZGR2
bFJlZ1JlZyhSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICB1
aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDEoQUREVl9PUENPREUsIGRzdCwgc3JjKTsKKyAg
ICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAgIHZvaWQgYWRkbEltbThyKGludCBp
bW04LCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIEFTU0VSVCgoaW1tOCA8PSAxMjcp
ICYmIChpbW04ID49IC0xMjgpKTsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3Jv
dXAzKEFERElNTV9PUENPREUsIGRzdCwgaW1tOCk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsK
KyAgICB9CisKKyAgICB2b2lkIGFuZGxSZWdSZWcoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQg
ZHN0KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXAxKEFORF9P
UENPREUsIGRzdCwgc3JjKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAg
IHZvaWQgYW5kbEltbThyKGludCBpbW04LCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAg
IEFTU0VSVCgoaW1tOCA8PSAyNTUpICYmIChpbW04ID49IDApKTsKKyAgICAgICAgQVNTRVJUKGRz
dCA9PSBTSDRSZWdpc3RlcnM6OnIwKTsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2Rl
R3JvdXA1KEFORElNTV9PUENPREUsIGltbTgpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7Cisg
ICAgfQorCisgICAgdm9pZCBkaXYxbFJlZ1JlZyhSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBk
c3QpCisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDEoRElWMV9P
UENPREUsIGRzdCwgc3JjKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAg
IHZvaWQgZGl2MGxSZWdSZWcoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsK
KyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXAxKERJVjBfT1BDT0RFLCBkc3Qs
IHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lkIG5vdGxS
ZWcoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgdWludDE2
X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXAxKE5PVF9PUENPREUsIGRzdCwgc3JjKTsKKyAgICAgICAg
b25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAgIHZvaWQgb3JsUmVnUmVnKFJlZ2lzdGVySUQg
c3JjLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9w
Y29kZUdyb3VwMShPUl9PUENPREUsIGRzdCwgc3JjKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMp
OworICAgIH0KKworICAgIHZvaWQgb3JsSW1tOHIoaW50IGltbTgsIFJlZ2lzdGVySUQgZHN0KQor
ICAgIHsKKyAgICAgICAgQVNTRVJUKChpbW04IDw9IDI1NSkgJiYgKGltbTggPj0gMCkpOworICAg
ICAgICBBU1NFUlQoZHN0ID09IFNINFJlZ2lzdGVyczo6cjApOworICAgICAgICB1aW50MTZfdCBv
cGMgPSBnZXRPcGNvZGVHcm91cDUoT1JJTU1fT1BDT0RFLCBpbW04KTsKKyAgICAgICAgb25lU2hv
cnRPcChvcGMpOworICAgIH0KKworICAgIHZvaWQgc3VibFJlZ1JlZyhSZWdpc3RlcklEIHNyYywg
UmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2Rl
R3JvdXAxKFNVQl9PUENPREUsIGRzdCwgc3JjKTsKKyAgICAgICAgIG9uZVNob3J0T3Aob3BjKTsK
KyAgICB9CisKKyAgICB2b2lkIHN1YnZsUmVnUmVnKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklE
IGRzdCkKKyAgICB7CisgICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDEoU1VC
Vl9PUENPREUsIGRzdCwgc3JjKTsKKyAgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisK
KyAgICB2b2lkIHhvcmxSZWdSZWcoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQorICAg
IHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXAxKFhPUl9PUENPREUsIGRz
dCwgc3JjKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAgIHZvaWQgeG9y
bEltbThyKGludCBpbW04LCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIEFTU0VSVCgo
aW1tOCA8PSAyNTUpICYmIChpbW04ID49IDApKTsKKyAgICAgICAgQVNTRVJUKGRzdCA9PSBTSDRS
ZWdpc3RlcnM6OnIwKTsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXA1KFhP
UklNTV9PUENPREUsIGltbTgpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisg
ICAgdm9pZCBzaGxsSW1tOHIoaW50IGltbSwgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAg
ICBzd2l0Y2ggKGltbSkgeworICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICBvbmVTaG9ydE9w
KGdldE9wY29kZUdyb3VwMihTSExMX09QQ09ERSwgZHN0KSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgb25lU2hvcnRPcChnZXRPcGNvZGVHcm91cDIo
U0hMTDJfT1BDT0RFLCBkc3QpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDg6
CisgICAgICAgICAgICBvbmVTaG9ydE9wKGdldE9wY29kZUdyb3VwMihTSExMOF9PUENPREUsIGRz
dCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMTY6CisgICAgICAgICAgICBv
bmVTaG9ydE9wKGdldE9wY29kZUdyb3VwMihTSExMMTZfT1BDT0RFLCBkc3QpKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIG5lZyhSZWdpc3RlcklEIGRzdCwg
UmVnaXN0ZXJJRCBzcmMpCisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVH
cm91cDEoTkVHX09QQ09ERSwgZHN0LCBzcmMpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7Cisg
ICAgfQorCisgICAgdm9pZCBzaGxsUmVnUmVnKFJlZ2lzdGVySUQgZHN0LCBSZWdpc3RlcklEIHJT
aGlmdCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3VwMShTSExE
X09QQ09ERSwgZHN0LCByU2hpZnQpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQor
CisgICAgdm9pZCBzaGxyUmVnUmVnKFJlZ2lzdGVySUQgZHN0LCBSZWdpc3RlcklEIHJTaGlmdCkK
KyAgICB7CisgICAgICAgIG5lZyhyU2hpZnQsIHJTaGlmdCk7CisgICAgICAgIHNobGxSZWdSZWco
ZHN0LCByU2hpZnQpOworICAgIH0KKworICAgIHZvaWQgc2hhclJlZ1JlZyhSZWdpc3RlcklEIGRz
dCwgUmVnaXN0ZXJJRCByU2hpZnQpCisgICAgeworICAgICAgICBuZWcoclNoaWZ0LCByU2hpZnQp
OworICAgICAgICBzaGFSZWdSZWcoZHN0LCByU2hpZnQpOworICAgIH0KKworICAgIHZvaWQgc2hh
UmVnUmVnKFJlZ2lzdGVySUQgZHN0LCBSZWdpc3RlcklEIHJTaGlmdCkKKyAgICB7CisgICAgICAg
IHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3VwMShTSEFEX09QQ09ERSwgZHN0LCByU2hpZnQp
OworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCBzaGxySW1tOHIo
aW50IGltbSwgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICBzd2l0Y2ggKGltbSkgewor
ICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICBvbmVTaG9ydE9wKGdldE9wY29kZUdyb3VwMihT
SExSX09QQ09ERSwgZHN0KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAyOgor
ICAgICAgICAgICAgb25lU2hvcnRPcChnZXRPcGNvZGVHcm91cDIoU0hMUjJfT1BDT0RFLCBkc3Qp
KTsKKyAgICAgICAgICAgIGJyZWFrOyAKKyAgICAgICAgY2FzZSA4OgorICAgICAgICAgICAgb25l
U2hvcnRPcChnZXRPcGNvZGVHcm91cDIoU0hMUjhfT1BDT0RFLCBkc3QpKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIDE2OgorICAgICAgICAgICAgb25lU2hvcnRPcChnZXRPcGNv
ZGVHcm91cDIoU0hMUjE2X09QQ09ERSwgZHN0KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9
CisgICAgfQorCisgICAgdm9pZCBpbXVsbFJlZ1JlZyhSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJ
RCBkc3QpCisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDEoTVVM
TF9PUENPREUsIGRzdCwgc3JjKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKwor
ICAgIHZvaWQgZG11bGxSZWdSZWcoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQorICAg
IHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXAxKERNVUxMX0xfT1BDT0RF
LCBkc3QsIHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lk
IGRtdWxzbFJlZ1JlZyhSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAg
ICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDEoRE1VTFNMX09QQ09ERSwgZHN0LCBz
cmMpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCBzdHNtYWNs
KFJlZ2lzdGVySUQgcmVnKQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2Rl
R3JvdXAyKFNUU01BQ0xfT1BDT0RFLCByZWcpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7Cisg
ICAgfQorCisgICAgdm9pZCBzdHNtYWNoKFJlZ2lzdGVySUQgcmVnKQorICAgIHsKKyAgICAgICAg
dWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXAyKFNUU01BQ0hfT1BDT0RFLCByZWcpOworICAg
ICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgLy8gQ29tcGFyaXNvbnMKKworICAg
IHZvaWQgY21wbFJlZ1JlZyhSZWdpc3RlcklEIGxlZnQsIFJlZ2lzdGVySUQgcmlnaHQsIENvbmRp
dGlvbiBjb25kKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChjb25kKSB7CisgICAgICAgIGNhc2Ug
TkU6CisgICAgICAgICAgICBvbmVTaG9ydE9wKGdldE9wY29kZUdyb3VwMShDTVBFUV9PUENPREUs
IHJpZ2h0LCBsZWZ0KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHVDoKKyAg
ICAgICAgICAgIG9uZVNob3J0T3AoZ2V0T3Bjb2RlR3JvdXAxKENNUEdUX09QQ09ERSwgcmlnaHQs
IGxlZnQpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVROgorICAgICAgICAg
ICAgb25lU2hvcnRPcChnZXRPcGNvZGVHcm91cDEoQ01QRVFfT1BDT0RFLCByaWdodCwgbGVmdCkp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR0U6CisgICAgICAgICAgICBvbmVT
aG9ydE9wKGdldE9wY29kZUdyb3VwMShDTVBHRV9PUENPREUsIHJpZ2h0LCBsZWZ0KSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBIUzoKKyAgICAgICAgICAgIG9uZVNob3J0T3Ao
Z2V0T3Bjb2RlR3JvdXAxKENNUEhTX09QQ09ERSwgcmlnaHQsIGxlZnQpKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIEhJOgorICAgICAgICAgICAgb25lU2hvcnRPcChnZXRPcGNv
ZGVHcm91cDEoQ01QSElfT1BDT0RFLCByaWdodCwgbGVmdCkpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgTEk6CisgICAgICAgICAgICBvbmVTaG9ydE9wKGdldE9wY29kZUdyb3Vw
MShDTVBISV9PUENPREUsIGxlZnQsIHJpZ2h0KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBMUzoKKyAgICAgICAgICAgIG9uZVNob3J0T3AoZ2V0T3Bjb2RlR3JvdXAxKENNUEhT
X09QQ09ERSwgbGVmdCwgcmlnaHQpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IExFOgorICAgICAgICAgICAgb25lU2hvcnRPcChnZXRPcGNvZGVHcm91cDEoQ01QR0VfT1BDT0RF
LCBsZWZ0LCByaWdodCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTFQ6Cisg
ICAgICAgICAgICBvbmVTaG9ydE9wKGdldE9wY29kZUdyb3VwMShDTVBHVF9PUENPREUsIGxlZnQs
IHJpZ2h0KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBj
bXBwbChSZWdpc3RlcklEIHJlZykKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9w
Y29kZUdyb3VwMihDTVBQTF9PUENPREUsIHJlZyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsK
KyAgICB9CisKKyAgICB2b2lkIGNtcHB6KFJlZ2lzdGVySUQgcmVnKQorICAgIHsKKyAgICAgICAg
dWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXAyKENNUFBaX09QQ09ERSwgcmVnKTsKKyAgICAg
ICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAgIHZvaWQgY21wRXFJbW1SMChpbnQgaW1t
LCBSZWdpc3RlcklEIGRzdCwgQ29uZGl0aW9uIGNvbmQpCisgICAgeworICAgICAgICB1aW50MTZf
dCBvcGMgPSBnZXRPcGNvZGVHcm91cDUoQ01QRVFJTU1fT1BDT0RFLCBpbW0pOworICAgICAgICBv
bmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCB0ZXN0bFJlZ1JlZyhSZWdpc3RlcklE
IHNyYywgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRP
cGNvZGVHcm91cDEoVFNUX09QQ09ERSwgZHN0LCBzcmMpOworICAgICAgICBvbmVTaG9ydE9wKG9w
Yyk7CisgICAgfQorCisgICAgdm9pZCB0ZXN0bEltbThyKGludCBpbW0sIFJlZ2lzdGVySUQgZHN0
KQorICAgIHsKKyAgICAgICAgQVNTRVJUKChkc3QgPT0gU0g0UmVnaXN0ZXJzOjpyMCkgJiYgKGlt
bSA8PSAyNTUpICYmIChpbW0gPj0gMCkpOworICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNv
ZGVHcm91cDUoVFNUSU1NX09QQ09ERSwgaW1tKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOwor
ICAgIH0KKworICAgIHZvaWQgbm9wKCkKKyAgICB7CisgICAgICAgIHByaW50SW5zdHIoTk9QX09Q
Q09ERSwgbV9idWZmZXIudW5jaGVja2VkU2l6ZSgpKTsKKyAgICAgICAgbV9idWZmZXIucHV0U2hv
cnRVbmNoZWNrZWQoTk9QX09QQ09ERSk7CisgICAgfQorCisgICAgdm9pZCBzZXR0KCkKKyAgICB7
CisgICAgICAgIG9uZVNob3J0T3AoU0VUVF9PUENPREUpOworICAgIH0KKworICAgIHZvaWQgY2xy
dCgpCisgICAgeworICAgICAgICBwcmludEluc3RyKE5PUF9PUENPREUsIG1fYnVmZmVyLnVuY2hl
Y2tlZFNpemUoKSk7CisgICAgICAgIG9uZVNob3J0T3AoQ0xSVF9PUENPREUpOworICAgIH0KKwor
ICAgIHZvaWQgYmtwdCgpCisgICAgeworICAgICAgICBtX2J1ZmZlci5wdXRTaG9ydFVuY2hlY2tl
ZChCUktfT1BDT0RFKTsKKyAgICB9CisKKyAgICB2b2lkIGJyYW5jaCh1aW50MTZfdCBvcGMsIGlu
dCBsYWJlbCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAob3BjKSB7CisgICAgICAgIGNhc2UgQlRf
T1BDT0RFOgorICAgICAgICAgICAgQVNTRVJUKChsYWJlbCA8PSAxMjcpICYmIChsYWJlbCA+PSAt
MTI4KSk7CisgICAgICAgICAgICBvbmVTaG9ydE9wKGdldE9wY29kZUdyb3VwNShCVF9PUENPREUs
IGxhYmVsKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBCUkFfT1BDT0RFOgor
ICAgICAgICAgICAgQVNTRVJUKChsYWJlbCA8PSAyMDQ3KSAmJiAobGFiZWwgPj0gLTIwNDgpKTsK
KyAgICAgICAgICAgIG9uZVNob3J0T3AoZ2V0T3Bjb2RlR3JvdXA2KEJSQV9PUENPREUsIGxhYmVs
KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBCRl9PUENPREU6CisgICAgICAg
ICAgICBBU1NFUlQoKGxhYmVsIDw9IDEyNykgJiYgKGxhYmVsID49IC0xMjgpKTsKKyAgICAgICAg
ICAgIG9uZVNob3J0T3AoZ2V0T3Bjb2RlR3JvdXA1KEJGX09QQ09ERSwgbGFiZWwpKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIGJyYW5jaCh1aW50MTZfdCBv
cGMsIFJlZ2lzdGVySUQgcmVnKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChvcGMpIHsKKyAgICAg
ICAgY2FzZSBCUkFGX09QQ09ERToKKyAgICAgICAgICAgIG9uZVNob3J0T3AoZ2V0T3Bjb2RlR3Jv
dXAyKEJSQUZfT1BDT0RFLCByZWcpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IEpNUF9PUENPREUgOgorICAgICAgICAgICAgb25lU2hvcnRPcChnZXRPcGNvZGVHcm91cDIoSk1Q
X09QQ09ERSwgcmVnKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBKU1JfT1BD
T0RFIDoKKyAgICAgICAgICAgIG9uZVNob3J0T3AoZ2V0T3Bjb2RlR3JvdXAyKEpTUl9PUENPREUs
IHJlZykpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQlNSRl9PUENPREUgOgor
ICAgICAgICAgICAgb25lU2hvcnRPcChnZXRPcGNvZGVHcm91cDIoQlNSRl9PUENPREUsIHJlZykp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgbGRzcHIoUmVn
aXN0ZXJJRCByZWcpCisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91
cDIoTERTUFJfT1BDT0RFLCByZWcpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQor
CisgICAgdm9pZCBzdHNwcihSZWdpc3RlcklEIHJlZykKKyAgICB7CisgICAgICAgIHVpbnQxNl90
IG9wYyA9IGdldE9wY29kZUdyb3VwMihTVFNQUl9PUENPREUsIHJlZyk7CisgICAgICAgIG9uZVNo
b3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lkIGV4dHV3KFJlZ2lzdGVySUQgc3JjLCBSZWdp
c3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3Vw
MShFWFRVV19PUENPREUsIGRzdCwgc3JjKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAg
IH0KKworICAgIC8vIGZsb2F0IG9wZXJhdGlvbnMKKworICAgIHZvaWQgbGRzcm1mcHVsKFJlZ2lz
dGVySUQgc3JjKQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXAy
KExEU19STV9GUFVMX09QQ09ERSwgc3JjKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAg
IH0KKworICAgIHZvaWQgZm5lZyhGUFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgdWlu
dDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXAyKEZORUdfT1BDT0RFLCBkc3QpOworICAgICAgICBv
bmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCBmc3FydChGUFJlZ2lzdGVySUQgZHN0
KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXAyKEZTUVJUX09Q
Q09ERSwgZHN0KTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAgIHZvaWQg
c3RzZnB1bFJlZyhSZWdpc3RlcklEIHNyYykKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9
IGdldE9wY29kZUdyb3VwMihTVFNfRlBVTF9STl9PUENPREUsIHNyYyk7CisgICAgICAgIG9uZVNo
b3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lkIGZsb2F0ZnB1bGZybihSZWdpc3RlcklEIHNy
YykKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3VwMihGTE9BVF9P
UENPREUsIHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lk
IGZtdWxsKEZQUmVnaXN0ZXJJRCBzcmMsIEZQUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAg
ICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDEoRk1VTF9PUENPREUsIGRzdCwgc3JjKTsK
KyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAgIHZvaWQgZm1vdnNSZWFkcm0o
UmVnaXN0ZXJJRCBzcmMsIEZQUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICB1aW50MTZf
dCBvcGMgPSBnZXRPcGNvZGVHcm91cDEoRk1PVlNfUkVBRF9STV9PUENPREUsIGRzdCwgc3JjKTsK
KyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAgIHZvaWQgZm1vdnNXcml0ZXJt
KEZQUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgdWludDE2
X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXAxKEZNT1ZTX1dSSVRFX1JOX09QQ09ERSwgZHN0LCBzcmMp
OworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCBmbW92c1dyaXRl
cjByKEZQUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgdWlu
dDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXAxKEZNT1ZTX1dSSVRFX1IwUk5fT1BDT0RFLCBkc3Qs
IHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lkIGZtb3Zz
UmVhZHIwcihSZWdpc3RlcklEIHNyYywgRlBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAg
IHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3VwMShGTU9WU19SRUFEX1IwUk1fT1BDT0RFLCBk
c3QsIHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lkIGZt
b3ZzUmVhZHJtaW5jKFJlZ2lzdGVySUQgZHN0LCBGUFJlZ2lzdGVySUQgc3JjKQorICAgIHsKKyAg
ICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXAxKEZNT1ZTX1JFQURfUk1fSU5DX09Q
Q09ERSwgZHN0LCBzcmMpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAg
dm9pZCBmbW92c1dyaXRlcm5kZWMoRlBSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpCisg
ICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDEoRk1PVlNfV1JJVEVf
Uk5fREVDX09QQ09ERSwgZHN0LCBzcmMpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAg
fQorCisgICAgdm9pZCBmdHJjUmVnZnB1bChGUFJlZ2lzdGVySUQgc3JjKQorICAgIHsKKyAgICAg
ICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXAyKEZUUkNfT1BDT0RFLCBzcmMpOworICAg
ICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCBmbGRzZnB1bChSZWdpc3Rl
cklEIHNyYykKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3VwMihG
TERTX0ZSTV9GUFVMX09QQ09ERSwgc3JjKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAg
IH0KKworICAgIHZvaWQgZnN0c2ZwdWwoUmVnaXN0ZXJJRCBzcmMpCisgICAgeworICAgICAgICB1
aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDIoRlNUU19GUFVMX0ZSTl9PUENPREUsIHNyYyk7
CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lkIGxkc2Zwc2NyKFJl
Z2lzdGVySUQgcmVnKQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3Jv
dXAyKExEU0ZQU0NSX09QQ09ERSwgcmVnKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAg
IH0KKworICAgIHZvaWQgc3RzZnBzY3IoUmVnaXN0ZXJJRCByZWcpCisgICAgeworICAgICAgICB1
aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDIoU1RTRlBTQ1JfT1BDT0RFLCByZWcpOworICAg
ICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgLy8gZG91YmxlIG9wZXJhdGlvbnMK
KworICAgIHZvaWQgZGNtcHBlcShGUFJlZ2lzdGVySUQgc3JjLCBGUFJlZ2lzdGVySUQgZHN0KQor
ICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXA4KEZDTVBFUV9PUENP
REUsIGRzdCA+PiAxLCBzcmMgPj4xKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0K
KworICAgIHZvaWQgZGNtcHBndChGUFJlZ2lzdGVySUQgc3JjLCBGUFJlZ2lzdGVySUQgZHN0KQor
ICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXA4KEZDTVBHVF9PUENP
REUsIGRzdCA+PiAxLCBzcmMgPj4xKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0K
KworICAgIHZvaWQgZG11bFJlZ1JlZyhGUFJlZ2lzdGVySUQgc3JjLCBGUFJlZ2lzdGVySUQgZHN0
KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXA4KEZNVUxfT1BD
T0RFLCBkc3QgPj4gMSwgc3JjID4+MSk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9
CisKKyAgICB2b2lkIGRzdWJSZWdSZWcoRlBSZWdpc3RlcklEIHNyYywgRlBSZWdpc3RlcklEIGRz
dCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3VwOChGU1VCX09Q
Q09ERSwgZHN0ID4+IDEsIHNyYyA+PjEpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAg
fQorCisgICAgdm9pZCBkYWRkUmVnUmVnKEZQUmVnaXN0ZXJJRCBzcmMsIEZQUmVnaXN0ZXJJRCBk
c3QpCisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDgoRkFERF9P
UENPREUsIGRzdCA+PiAxLCBzcmMgPj4xKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAg
IH0KKworICAgIHZvaWQgZG1vdlJlZ1JlZyhGUFJlZ2lzdGVySUQgc3JjLCBGUFJlZ2lzdGVySUQg
ZHN0KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXA4KEZNT1Zf
T1BDT0RFLCBkc3QgPj4gMSwgc3JjID4+MSk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAg
ICB9CisKKyAgICB2b2lkIGRkaXZSZWdSZWcoRlBSZWdpc3RlcklEIHNyYywgRlBSZWdpc3RlcklE
IGRzdCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3VwOChGRElW
X09QQ09ERSwgZHN0ID4+IDEsIHNyYyA+PjEpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7Cisg
ICAgfQorCisgICAgdm9pZCBkc3FydChGUFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAg
dWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXA3KEZTUVJUX09QQ09ERSwgZHN0ID4+IDEpOwor
ICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCBkbmVnKEZQUmVnaXN0
ZXJJRCBkc3QpCisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDco
Rk5FR19PUENPREUsIGRzdCA+PiAxKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0K
KworICAgIHZvaWQgZm1vdlJlYWRybShSZWdpc3RlcklEIHNyYywgRlBSZWdpc3RlcklEIGRzdCkK
KyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3VwMTAoRk1PVlNfUkVB
RF9STV9PUENPREUsIGRzdCA+PiAxLCBzcmMpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7Cisg
ICAgfQorCisgICAgdm9pZCBmbW92V3JpdGVybShGUFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklE
IGRzdCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3VwOShGTU9W
U19XUklURV9STl9PUENPREUsIGRzdCwgc3JjID4+IDEpOworICAgICAgICBvbmVTaG9ydE9wKG9w
Yyk7CisgICAgfQorCisgICAgdm9pZCBmbW92V3JpdGVyMHIoRlBSZWdpc3RlcklEIHNyYywgUmVn
aXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91
cDkoRk1PVlNfV1JJVEVfUjBSTl9PUENPREUsIGRzdCwgc3JjID4+IDEpOworICAgICAgICBvbmVT
aG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCBmbW92UmVhZHIwcihSZWdpc3RlcklEIHNy
YywgRlBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9w
Y29kZUdyb3VwMTAoRk1PVlNfUkVBRF9SMFJNX09QQ09ERSwgZHN0ID4+IDEsIHNyYyk7CisgICAg
ICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lkIGZtb3ZSZWFkcm1pbmMoUmVn
aXN0ZXJJRCBkc3QsIEZQUmVnaXN0ZXJJRCBzcmMpCisgICAgeworICAgICAgICB1aW50MTZfdCBv
cGMgPSBnZXRPcGNvZGVHcm91cDEwKEZNT1ZTX1JFQURfUk1fSU5DX09QQ09ERSwgZHN0ID4+IDEg
LCBzcmMpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCBmbW92
V3JpdGVybmRlYyhGUFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAg
ICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3VwOShGTU9WU19XUklURV9STl9ERUNfT1BD
T0RFLCBkc3QsIHNyYyA+PiAxKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKwor
ICAgIHZvaWQgZmxvYXRmcHVsRHJlZyhGUFJlZ2lzdGVySUQgc3JjKQorICAgIHsKKyAgICAgICAg
dWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXA3KEZMT0FUX09QQ09ERSwgc3JjID4+IDEpOwor
ICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCBmdHJjZHJtZnB1bChG
UFJlZ2lzdGVySUQgc3JjKQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2Rl
R3JvdXA3KEZUUkNfT1BDT0RFLCBzcmMgPj4gMSk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsK
KyAgICB9CisKKyAgICAvLyBWYXJpb3VzIG1vdmUgb3BzCisgICAgCisgICAgdm9pZCBtb3ZJbW04
KGludCBpbW04LCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIEFTU0VSVCgoaW1tOCA8
PSAxMjcpICYmIChpbW04ID49IC0xMjgpKTsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bj
b2RlR3JvdXAzKE1PVklNTV9PUENPREUsIGRzdCwgaW1tOCk7CisgICAgICAgIG9uZVNob3J0T3Ao
b3BjKTsKKyAgICB9CisKKyAgICB2b2lkIG1vdmxSZWdSZWcoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lz
dGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXAx
KE1PVl9PUENPREUsIGRzdCwgc3JjKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0K
KworICAgIHZvaWQgbW92d1JlZ01lbShSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpCisg
ICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDEoTU9WV19XUklURV9S
Tl9PUENPREUsIGRzdCwgc3JjKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKwor
ICAgIHZvaWQgbW92d01lbVJlZyhSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpCisgICAg
eworICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDEoTU9WV19SRUFEX1JNX09Q
Q09ERSwgZHN0LCBzcmMpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAg
dm9pZCBtb3Z3TWVtUmVnKGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBk
c3QpCisgICAgeworICAgICAgICB1aW50MTZfdCBvcGM7CisgICAgICAgIEFTU0VSVChiYXNlID09
IFNINFJlZ2lzdGVyczo6cGMpOworICAgICAgICBBU1NFUlQoKG9mZnNldCA8PSAyNTUpICYmIChv
ZmZzZXQgPj0gMCkpOworICAgICAgICBvcGMgPSBnZXRPcGNvZGVHcm91cDMoTU9WV19SRUFEX09G
RlBDX09QQ09ERSwgZHN0LCBvZmZzZXQpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAg
fQorCisgICAgdm9pZCBtb3Z3UjBtcihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpCisg
ICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDEoTU9WV19SRUFEX1Iw
Uk1fT1BDT0RFLCBkc3QsIHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisK
KyAgICB2b2lkIG1vdmxSZWdNZW0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVy
SUQgYmFzZSkKKyAgICB7CisgICAgICAgIEFTU0VSVCgob2Zmc2V0IDw9IDE1KSAmJiAob2Zmc2V0
ID49IDApKTsKKyAgICAgICAgaWYgKCFvZmZzZXQpIHsKKyAgICAgICAgICAgIG9uZVNob3J0T3Ao
Z2V0T3Bjb2RlR3JvdXAxKE1PVkxfV1JJVEVfUk5fT1BDT0RFLCBiYXNlLCBzcmMpKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBvbmVTaG9ydE9wKGdldE9wY29kZUdy
b3VwNChNT1ZMX1dSSVRFX09GRlJOX09QQ09ERSwgYmFzZSwgc3JjLCBvZmZzZXQpKTsKKyAgICB9
CisKKyAgICB2b2lkIG1vdmxSZWdNZW0oUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgYmFzZSkK
KyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYzsKKyAgICAgICAgb3BjID0gZ2V0T3Bjb2RlR3Jv
dXAxKE1PVkxfV1JJVEVfUk5fT1BDT0RFLCBiYXNlLCBzcmMpOworICAgICAgICBvbmVTaG9ydE9w
KG9wYyk7CisgICAgfQorCisgICAgdm9pZCBtb3ZsTWVtUmVnKGludCBvZmZzZXQsIFJlZ2lzdGVy
SUQgYmFzZSwgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICBpZiAoYmFzZSA9PSBTSDRS
ZWdpc3RlcnM6OnBjKSB7CisgICAgICAgICAgICBBU1NFUlQoKG9mZnNldCA8PSAyNTUpICYmIChv
ZmZzZXQgPj0gMCkpOworICAgICAgICAgICAgb25lU2hvcnRPcChnZXRPcGNvZGVHcm91cDMoTU9W
TF9SRUFEX09GRlBDX09QQ09ERSwgZHN0LCBvZmZzZXQpKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorICAgICAgICBBU1NFUlQoKG9mZnNldCA8PSAxNSkgJiYgKG9mZnNldCA+PSAw
KSk7CisgICAgICAgIGlmICghb2Zmc2V0KSB7CisgICAgICAgICAgICBvbmVTaG9ydE9wKGdldE9w
Y29kZUdyb3VwMShNT1ZMX1JFQURfUk1fT1BDT0RFLCBkc3QsIGJhc2UpKTsKKyAgICAgICAgICAg
IHJldHVybjsgCisgICAgICAgIH0KKyAgICAgICAgb25lU2hvcnRPcChnZXRPcGNvZGVHcm91cDQo
TU9WTF9SRUFEX09GRlJNX09QQ09ERSwgZHN0LCBiYXNlLCBvZmZzZXQpKTsKKyAgICB9CisKKyAg
ICB2b2lkIG1vdmJNZW1SZWcoaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklE
IGRzdCkKKyAgICB7CisgICAgICAgIEFTU0VSVChkc3QgPT0gU0g0UmVnaXN0ZXJzOjpyMCk7Cisg
ICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3VwMTEoTU9WQl9SRUFEX09GRlJNX09Q
Q09ERSwgYmFzZSwgb2Zmc2V0KTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKwor
ICAgIHZvaWQgbW92YlIwbXIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsK
KyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXAxKE1PVkJfUkVBRF9SMFJNX09Q
Q09ERSwgZHN0LCBzcmMpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAg
dm9pZCBtb3ZiTWVtUmVnKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7Cisg
ICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3VwMShNT1ZCX1JFQURfUk1fT1BDT0RF
LCBkc3QsIHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lk
IG1vdmxNZW1SZWcoUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAg
ICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3VwMShNT1ZMX1JFQURfUk1fT1BDT0RFLCBk
c3QsIGJhc2UpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCBt
b3ZsUjBtcihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICB1
aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDEoTU9WTF9SRUFEX1IwUk1fT1BDT0RFLCBkc3Qs
IHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lkIG1vdmxS
ZWdNZW1yMChSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICB1
aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDEoTU9WTF9XUklURV9SMFJOX09QQ09ERSwgZHN0
LCBzcmMpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCBtb3Zs
SW1tOHIoaW50IGltbTgsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKChp
bW04IDw9IDEyNykgJiYgKGltbTggPj0gLTEyOCkpOworICAgICAgICB1aW50MTZfdCBvcGMgPSBn
ZXRPcGNvZGVHcm91cDMoTU9WSU1NX09QQ09ERSwgZHN0LCBpbW04KTsKKyAgICAgICAgb25lU2hv
cnRPcChvcGMpOworICAgIH0KKworICAgIHZvaWQgbG9hZENvbnN0YW50KHVpbnQzMl90IGNvbnN0
YW50LCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIGlmICgoKGludCljb25zdGFudCA8
PTB4N2YpICYmICgoaW50KWNvbnN0YW50ID49IC0weDgwKSkgeworICAgICAgICAgICAgbW92SW1t
OChjb25zdGFudCwgZHN0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAg
ICBtX2J1ZmZlci5lbnN1cmVTcGFjZShtYXhJbnN0cnVjdGlvblNpemUsIHNpemVvZih1aW50MzJf
dCkpOworICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDMoTU9WSU1NX09QQ09E
RSwgZHN0LCAwKTsKKyAgICAgICAgcHJpbnRJbnN0cihnZXRPcGNvZGVHcm91cDMoTU9WSU1NX09Q
Q09ERSwgZHN0LCBjb25zdGFudCksIG1fYnVmZmVyLnVuY2hlY2tlZFNpemUoKSk7CisgICAgICAg
IG1fYnVmZmVyLnB1dFNob3J0V2l0aENvbnN0YW50SW50KG9wYywgY29uc3RhbnQsIHRydWUpOwor
ICAgIH0KKworICAgIHZvaWQgbG9hZENvbnN0YW50VW5SZXVzYWJsZSh1aW50MzJfdCBjb25zdGFu
dCwgUmVnaXN0ZXJJRCBkc3QsIGJvb2wgZW5zdXJlU3BhY2UgPSBmYWxzZSkKKyAgICB7CisgICAg
ICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3VwMyhNT1ZJTU1fT1BDT0RFLCBkc3QsIDAp
OworICAgICAgICBpZiAoZW5zdXJlU3BhY2UpCisgICAgICAgICAgIG1fYnVmZmVyLmVuc3VyZVNw
YWNlKG1heEluc3RydWN0aW9uU2l6ZSwgc2l6ZW9mKHVpbnQzMl90KSk7CisgICAgICAgIHByaW50
SW5zdHIoZ2V0T3Bjb2RlR3JvdXAzKE1PVklNTV9PUENPREUsIGRzdCwgY29uc3RhbnQpLCBtX2J1
ZmZlci51bmNoZWNrZWRTaXplKCkpOworICAgICAgICBtX2J1ZmZlci5wdXRTaG9ydFdpdGhDb25z
dGFudEludChvcGMsIGNvbnN0YW50KTsKKyAgICB9CisKKyAgICAvLyBGbG93IGNvbnRyb2wKKwor
ICAgIEptcFNyYyBjYWxsKCkKKyAgICB7CisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1T
Y3JhdGNoKCk7CisgICAgICAgIG1fYnVmZmVyLmVuc3VyZVNwYWNlKG1heEluc3RydWN0aW9uU2l6
ZSArIDQsIHNpemVvZih1aW50MzJfdCkpOworICAgICAgICBsb2FkQ29uc3RhbnRVblJldXNhYmxl
KDB4MCwgc2NyKTsKKyAgICAgICAgYnJhbmNoKEpTUl9PUENPREUsIHNjcik7CisgICAgICAgIG5v
cCgpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgICAgICByZXR1cm4gSm1wU3Jj
KG1fYnVmZmVyLnVuY2hlY2tlZFNpemUoKSk7CisgICAgfQorCisgICAgSm1wU3JjIGNhbGwoUmVn
aXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICBtX2J1ZmZlci5lbnN1cmVTcGFjZShtYXhJbnN0
cnVjdGlvblNpemUgKyAyKTsKKyAgICAgICAgYnJhbmNoKEpTUl9PUENPREUsIGRzdCk7CisgICAg
ICAgIG5vcCgpOworICAgICAgICByZXR1cm4gSm1wU3JjKG1fYnVmZmVyLnVuY2hlY2tlZFNpemUo
KSk7CisgICAgfQorCisgICAgSm1wU3JjIGptcCgpCisgICAgeworICAgICAgICBSZWdpc3RlcklE
IHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBtX2J1ZmZlci5lbnN1cmVTcGFjZShtYXhJ
bnN0cnVjdGlvblNpemUgKyA0LCBzaXplb2YodWludDMyX3QpKTsKKyAgICAgICAgaW50IG1fc2l6
ZSA9IG1fYnVmZmVyLnVuY2hlY2tlZFNpemUoKTsKKyAgICAgICAgbG9hZENvbnN0YW50VW5SZXVz
YWJsZSgweDAsIHNjcik7CisgICAgICAgIGJyYW5jaChCUkFGX09QQ09ERSwgc2NyKTsKKyAgICAg
ICAgbm9wKCk7CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgICAgIHJldHVybiBK
bXBTcmMobV9zaXplKTsKKyAgICB9CisKKyAgICBKbXBTcmMgam1wKFJlZ2lzdGVySUQgZHN0KQor
ICAgIHsKKyAgICAgICAgam1wUmVnKGRzdCk7CisgICAgICAgIHJldHVybiBKbXBTcmMobV9idWZm
ZXIudW5jaGVja2VkU2l6ZSgpKTsKKyAgICB9CisKKyAgICB2b2lkIGptcFJlZyhSZWdpc3RlcklE
IGRzdCkKKyAgICB7CisgICAgICAgIG1fYnVmZmVyLmVuc3VyZVNwYWNlKG1heEluc3RydWN0aW9u
U2l6ZSArIDIpOworICAgICAgICBicmFuY2goSk1QX09QQ09ERSwgZHN0KTsKKyAgICAgICAgbm9w
KCk7CisgICAgfQorCisgICAgSm1wU3JjIGpuZSgpCisgICAgeworICAgICAgICBpbnQgbV9zaXpl
ID0gbV9idWZmZXIudW5jaGVja2VkU2l6ZSgpOworICAgICAgICBicmFuY2goQkZfT1BDT0RFLCAw
KTsKKyAgICAgICAgcmV0dXJuIEptcFNyYyhtX3NpemUpOworICAgIH0KKworICAgIEptcFNyYyBq
ZSgpCisgICAgeworICAgICAgICBpbnQgbV9zaXplID0gbV9idWZmZXIudW5jaGVja2VkU2l6ZSgp
OworICAgICAgICBicmFuY2goQlRfT1BDT0RFLCAwKTsKKyAgICAgICAgcmV0dXJuIEptcFNyYyht
X3NpemUpOworICAgIH0KKworICAgIHZvaWQgcmV0KCkKKyAgICB7CisgICAgICAgIG1fYnVmZmVy
LmVuc3VyZVNwYWNlKG1heEluc3RydWN0aW9uU2l6ZSArIDIpOworICAgICAgICBvbmVTaG9ydE9w
KFJUU19PUENPREUsIGZhbHNlKTsKKyAgICB9CisKKyAgICBKbXBEc3QgbGFiZWwoKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIEptcERzdChtX2J1ZmZlci5zaXplKCkpOworICAgIH0KKworICAgIGlu
dCBzaXplT2ZDb25zdGFudFBvb2woKQorICAgIHsKKyAgICAgICAgIHJldHVybiBtX2J1ZmZlci5z
aXplT2ZDb25zdGFudFBvb2woKTsKKyAgICB9CisKKyAgICBKbXBEc3QgYWxpZ24oaW50IGFsaWdu
bWVudCkKKyAgICB7CisgICAgICAgIG1fYnVmZmVyLmVuc3VyZVNwYWNlKG1heEluc3RydWN0aW9u
U2l6ZSArIDIpOworICAgICAgICB3aGlsZSAoIW1fYnVmZmVyLmlzQWxpZ25lZChhbGlnbm1lbnQp
KSB7CisgICAgICAgICAgICBub3AoKTsKKyAgICAgICAgICAgIG1fYnVmZmVyLmVuc3VyZVNwYWNl
KG1heEluc3RydWN0aW9uU2l6ZSArIDIpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBsYWJl
bCgpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGNoYW5nZVBDcmVsYXRpdmVBZGRyZXNzKGlu
dCBvZmZzZXQsIHVpbnQxNl90KiBpbnN0cnVjdGlvblB0ciwgdWludDMyX3QgbmV3QWRkcmVzcykK
KyAgICB7CisgICAgICAgIHVpbnQzMl90IGFkZHJlc3MgPSAob2Zmc2V0IDw8IDIpICsgKChyZWlu
dGVycHJldF9jYXN0PHVpbnQzMl90PihpbnN0cnVjdGlvblB0cikgKyA0KSAmKH4weDMpKTsKKyAg
ICAgICAgKnJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihhZGRyZXNzKSA9IG5ld0FkZHJlc3M7
CisgICAgfQorCisgICAgc3RhdGljIHVpbnQxNl90KiBnZXRJbnN0cnVjdGlvblB0cih2b2lkKiBj
b2RlLCBpbnQgb2Zmc2V0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8
dWludDE2X3QqPiAocmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdD4oY29kZSkgKyBvZmZzZXQpOwor
ICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGxpbmtKdW1wKHZvaWQqIGNvZGUsIEptcFNyYyBmcm9t
LCB2b2lkKiB0bykKKyAgICB7CisgICAgICAgIEFTU0VSVChmcm9tLm1fb2Zmc2V0ICE9IC0xKTsK
KyAgICAgICAgdWludDE2X3QqIGluc3RydWN0aW9uUHRyID0gZ2V0SW5zdHJ1Y3Rpb25QdHIoY29k
ZSwgZnJvbS5tX29mZnNldCk7CisgICAgICAgIHVpbnQxNl90IGluc3RydWN0aW9uID0gKmluc3Ry
dWN0aW9uUHRyOworICAgICAgICBpbnQgb2Zmc2V0Qml0cyA9IChyZWludGVycHJldF9jYXN0PHVp
bnQzMl90Pih0bykgLSByZWludGVycHJldF9jYXN0PHVpbnQzMl90Pihjb2RlKSkgLSBmcm9tLm1f
b2Zmc2V0OworICAgICAgICBpZiAoKChpbnN0cnVjdGlvbiAmIDB4RkYwMCkgPT0gQlRfT1BDT0RF
KSB8fCAoKGluc3RydWN0aW9uICYgMHhGRjAwKSA9PSBCRl9PUENPREUpKSB7CisgICAgICAgICAg
ICAvKiBCVCBsYWJlbCA9PT4gQkYgMgorICAgICAgICAgICAgICAgbm9wICAgICAgICAgIExEUiBy
ZWcKKyAgICAgICAgICAgICAgIG5vcCAgICAgICAgICBicmFmIEByZWcKKyAgICAgICAgICAgICAg
IG5vcCAgICAgICAgICBub3AKKyAgICAgICAgICAgICovCisgICAgICAgICAgICBvZmZzZXRCaXRz
IC09IDg7CisgICAgICAgICAgICBpbnN0cnVjdGlvbiBePSAweDAyMDI7CisgICAgICAgICAgICAq
aW5zdHJ1Y3Rpb25QdHIrKyA9IGluc3RydWN0aW9uOworICAgICAgICAgICAgY2hhbmdlUENyZWxh
dGl2ZUFkZHJlc3MoKCppbnN0cnVjdGlvblB0ciAmIDB4RkYpLCBpbnN0cnVjdGlvblB0ciwgb2Zm
c2V0Qml0cyk7CisgICAgICAgICAgICBpbnN0cnVjdGlvbiA9IChCUkFGX09QQ09ERSB8ICgqaW5z
dHJ1Y3Rpb25QdHIrKyAmIDB4RjAwKSk7CisgICAgICAgICAgICAqaW5zdHJ1Y3Rpb25QdHIrKyA9
IGluc3RydWN0aW9uOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgfQorICAgICAgICAg
LyogTU9WICNpbW0sIHJlZyA9PiBMRFIgcmVnCisgICAgICAgICAgICBicmFmIEByZWcgICAgICAg
IGJyYWYgQHJlZworICAgICAgICAgICAgbm9wICAgICAgICAgICAgICBub3AKKyAgICAgICAgICov
CisgICAgICAgIEFTU0VSVCgoKihpbnN0cnVjdGlvblB0ciArMSkgJiBCUkFGX09QQ09ERSkgPT0g
QlJBRl9PUENPREUpOworICAgICAgICBvZmZzZXRCaXRzIC09IDY7CisgICAgICAgIGNoYW5nZVBD
cmVsYXRpdmVBZGRyZXNzKCgqaW5zdHJ1Y3Rpb25QdHIgJiAweEZGKSwgaW5zdHJ1Y3Rpb25QdHIs
IG9mZnNldEJpdHMpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGxpbmtDYWxsKHZvaWQqIGNv
ZGUsIEptcFNyYyBmcm9tLCB2b2lkKiB0bykKKyAgICB7CisgICAgICAgIHVpbnQxNl90KiBpbnN0
cnVjdGlvblB0ciA9IGdldEluc3RydWN0aW9uUHRyKGNvZGUsIGZyb20ubV9vZmZzZXQpOworICAg
ICAgICBpbnN0cnVjdGlvblB0ciAtPSAzOworICAgICAgICBjaGFuZ2VQQ3JlbGF0aXZlQWRkcmVz
cygoKmluc3RydWN0aW9uUHRyICYgMHhGRiksIGluc3RydWN0aW9uUHRyLCByZWludGVycHJldF9j
YXN0PHVpbnQzMl90Pih0bykpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGxpbmtQb2ludGVy
KHZvaWQqIGNvZGUsIEptcERzdCB3aGVyZSwgdm9pZCogdmFsdWUpCisgICAgeworICAgICAgICB1
aW50MTZfdCogaW5zdHJ1Y3Rpb25QdHIgPSBnZXRJbnN0cnVjdGlvblB0cihjb2RlLCB3aGVyZS5t
X29mZnNldCk7CisgICAgICAgIGNoYW5nZVBDcmVsYXRpdmVBZGRyZXNzKCgqaW5zdHJ1Y3Rpb25Q
dHIgJiAweEZGKSwgaW5zdHJ1Y3Rpb25QdHIsIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3Q+KHZh
bHVlKSk7CisgICAgfQorCisgICAgc3RhdGljIHVuc2lnbmVkIGdldENhbGxSZXR1cm5PZmZzZXQo
Sm1wU3JjIGNhbGwpCisgICAgeworICAgICAgICBBU1NFUlQoY2FsbC5tX29mZnNldCA+PSAwKTsK
KyAgICAgICAgcmV0dXJuIGNhbGwubV9vZmZzZXQ7CisgICAgfQorCisgICAgc3RhdGljIHVpbnQz
Ml90KiBnZXRMZHJJbW1BZGRyZXNzT25Qb29sKFNINFdvcmQqIGluc24sIHVpbnQzMl90KiBjb25z
dFBvb2wpCisgICAgeworICAgICAgICByZXR1cm4gKGNvbnN0UG9vbCArICgqaW5zbiAmIDB4ZmYp
KTsKKyAgICB9CisKKyAgICBzdGF0aWMgU0g0V29yZCBwYXRjaENvbnN0YW50UG9vbExvYWQoU0g0
V29yZCBsb2FkLCBpbnQgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gKChsb2FkICYgfjB4
ZmYpIHwgdmFsdWUpOworICAgIH0KKworICAgIHN0YXRpYyBBc3NlbWJsZXJCdWZmZXI6OlR3b1No
b3J0cyBwbGFjZUNvbnN0YW50UG9vbEJhcnJpZXIoaW50IG9mZnNldCkKKyAgICB7CisgICAgICAg
IEFTU0VSVCgoKG9mZnNldCA+PiAxKSA8PTIwNDcpICYmICgob2Zmc2V0ID4+IDEpID49IC0yMDQ4
KSk7CisgICAgICAgIEFzc2VtYmxlckJ1ZmZlcjo6VHdvU2hvcnRzIG1fYmFycmllcjsKKyAgICAg
ICAgbV9iYXJyaWVyLmhpZ2ggPSAoQlJBX09QQ09ERSB8IChvZmZzZXQgPj4gMSkpOworICAgICAg
ICBtX2JhcnJpZXIubG93ID0gTk9QX09QQ09ERTsKKyAgICAgICAgcHJpbnRJbnN0cigoKEJSQV9P
UENPREUgfCAob2Zmc2V0ID4+IDEpKSksIDApOworICAgICAgICBwcmludEluc3RyKE5PUF9PUENP
REUsIDApOworICAgICAgICByZXR1cm4gbV9iYXJyaWVyOworICAgIH0KKworICAgIHN0YXRpYyB2
b2lkIHBhdGNoQ29uc3RhbnRQb29sTG9hZCh2b2lkKiBsb2FkQWRkciwgdm9pZCogY29uc3RQb29s
QWRkcikKKyAgICB7CisgICAgICAgIFNINFdvcmQqIGluc3RydWN0aW9uUHRyID0gcmVpbnRlcnBy
ZXRfY2FzdDxTSDRXb3JkKj4obG9hZEFkZHIpOworICAgICAgICBTSDRXb3JkIGluc3RydWN0aW9u
ID0gKmluc3RydWN0aW9uUHRyOworICAgICAgICBTSDRXb3JkIGluZGV4ID0gaW5zdHJ1Y3Rpb24g
JiAweGZmOworICAgICAgICBBU1NFUlQoKCgocmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdD4oY29u
c3RQb29sQWRkcikgLSByZWludGVycHJldF9jYXN0PHVpbnQzMl90Pihsb2FkQWRkcikpICsgaW5k
ZXggKiA0KSkgPCAxMDI0KTsKKyAgICAgICAgaW50IG9mZnNldCA9IHJlaW50ZXJwcmV0X2Nhc3Q8
dWludDMyX3Q+KGNvbnN0UG9vbEFkZHIpICsgKGluZGV4ICogNCkgLSAoKHJlaW50ZXJwcmV0X2Nh
c3Q8dWludDMyX3Q+KGluc3RydWN0aW9uUHRyKSAmIH4weDAzKSArIDQpOworICAgICAgICBpbnN0
cnVjdGlvbiAmPTB4ZjAwOworICAgICAgICBpbnN0cnVjdGlvbiB8PSAweEQwMDA7CisgICAgICAg
IG9mZnNldCAmPSAweDAzZmY7CisgICAgICAgIGluc3RydWN0aW9uIHw9IChvZmZzZXQgPj4gMik7
CisgICAgICAgICppbnN0cnVjdGlvblB0ciA9IGluc3RydWN0aW9uOworICAgIH0KKworICAgIHN0
YXRpYyB2b2lkIHJlcGF0Y2hQb2ludGVyKHZvaWQqIHdoZXJlLCB2b2lkKiB2YWx1ZSkKKyAgICB7
CisgICAgICAgIHBhdGNoUG9pbnRlcih3aGVyZSwgdmFsdWUpOworICAgIH0KKworICAgIHN0YXRp
YyB2b2lkIHJlcGF0Y2hJbnQzMih2b2lkKiB3aGVyZSwgaW50MzJfdCB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIHVpbnQxNl90KiBpbnN0cnVjdGlvblB0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDE2
X3QqPih3aGVyZSk7CisgICAgICAgIGNoYW5nZVBDcmVsYXRpdmVBZGRyZXNzKCgqaW5zdHJ1Y3Rp
b25QdHIgJiAweEZGKSwgaW5zdHJ1Y3Rpb25QdHIsIHZhbHVlKTsKKyAgICB9CisKKyAgICBzdGF0
aWMgdm9pZCByZWxpbmtDYWxsKHZvaWQqIGZyb20sIHZvaWQqIHRvKQorICAgIHsKKyAgICAgICAg
dWludDE2X3QqIGluc3RydWN0aW9uUHRyID0gcmVpbnRlcnByZXRfY2FzdDx1aW50MTZfdCo+KGZy
b20pOworICAgICAgICBpbnN0cnVjdGlvblB0ciAtPSAzOworICAgICAgICBjaGFuZ2VQQ3JlbGF0
aXZlQWRkcmVzcygoKmluc3RydWN0aW9uUHRyICYgMHhGRiksIGluc3RydWN0aW9uUHRyLCByZWlu
dGVycHJldF9jYXN0PHVpbnQzMl90Pih0bykpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIHJl
bGlua0p1bXAodm9pZCogZnJvbSwgdm9pZCogdG8pCisgICAgeworICAgICAgICB1aW50MTZfdCog
aW5zdHJ1Y3Rpb25QdHIgPSByZWludGVycHJldF9jYXN0PHVpbnQxNl90Kj4gKGZyb20pOworICAg
ICAgICB1aW50MTZfdCBpbnN0cnVjdGlvbiA9ICppbnN0cnVjdGlvblB0cjsKKyAgICAgICAgaW50
MzJfdCBvZmZzZXRCaXRzID0gKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3Q+KHRvKSAtIHJlaW50
ZXJwcmV0X2Nhc3Q8dWludDMyX3Q+KGZyb20pKTsKKyAgICAgICAgdWludDE2X3QqIGFkZHJlc3M7
CisgICAgICAgIGlmICgoKCppbnN0cnVjdGlvblB0ciAmIDB4RkYwMCkgPT0gQlRfT1BDT0RFKSB8
fCAoKCppbnN0cnVjdGlvblB0ciAmIDB4RkYwMCkgPT0gQkZfT1BDT0RFKSkgeworICAgICAgICAg
ICAgb2Zmc2V0Qml0cyAtPSA4OworICAgICAgICAgICAgaW5zdHJ1Y3Rpb25QdHIrKzsKKyAgICAg
ICAgICAgIGNoYW5nZVBDcmVsYXRpdmVBZGRyZXNzKCgqaW5zdHJ1Y3Rpb25QdHIgJiAweEZGKSwg
aW5zdHJ1Y3Rpb25QdHIsIG9mZnNldEJpdHMpOworICAgICAgICAgICAgaW5zdHJ1Y3Rpb24gPSAo
QlJBRl9PUENPREUgfCAoKmluc3RydWN0aW9uUHRyKysgJiAweEYwMCkpOworICAgICAgICAgICAg
Kmluc3RydWN0aW9uUHRyKysgPSBpbnN0cnVjdGlvbjsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgICAgICBBU1NFUlQoKCooaW5zdHJ1Y3Rpb25QdHIgKzEpICYgQlJBRl9PUENP
REUpID09IEJSQUZfT1BDT0RFKTsKKyAgICAgICAgb2Zmc2V0Qml0cyAtPSA2OworICAgICAgICBp
bnQgb2Zmc2V0VG9QQyA9ICgqaW5zdHJ1Y3Rpb25QdHIgJiAweEZGKTsKKyAgICAgICAgY2hhbmdl
UENyZWxhdGl2ZUFkZHJlc3MoKCppbnN0cnVjdGlvblB0ciAmIDB4RkYpLCBpbnN0cnVjdGlvblB0
ciwgb2Zmc2V0Qml0cyk7CisgICAgfQorCisgICAgLy8gTGlua2luZyAmIHBhdGNoaW5nCisKKyAg
ICB2b2lkIGxpbmtKdW1wKEptcFNyYyBmcm9tLCBKbXBEc3QgdG8pCisgICAgeworICAgICAgICBB
U1NFUlQodG8ubV9vZmZzZXQgIT0gLTEpOworICAgICAgICBBU1NFUlQoZnJvbS5tX29mZnNldCAh
PSAtMSk7CisgICAgICAgIHVpbnQxNl90KiBpbnN0cnVjdGlvblB0ciA9IGdldEluc3RydWN0aW9u
UHRyKGRhdGEoKSwgZnJvbS5tX29mZnNldCk7CisgICAgICAgIHVpbnQxNl90IGluc3RydWN0aW9u
ID0gKmluc3RydWN0aW9uUHRyOworICAgICAgICBpbnQgb2Zmc2V0Qml0czsKKyAgICAgICAgaWYg
KCgoaW5zdHJ1Y3Rpb24gJiAweEZGMDApID09IEJUX09QQ09ERSkgfHwgKChpbnN0cnVjdGlvbiAm
IDB4RkYwMCkgPT0gQkZfT1BDT0RFKSkgeworICAgICAgICAgICAgLyogQlQgbGFiZWwgPT4gQkYg
MgorICAgICAgICAgICAgICAgbm9wICAgICAgICBMRFIgcmVnCisgICAgICAgICAgICAgICBub3Ag
ICAgICAgIGJyYWYgQHJlZworICAgICAgICAgICAgICAgbm9wICAgICAgICBub3AKKyAgICAgICAg
ICAgICovCisgICAgICAgICAgICBvZmZzZXRCaXRzID0gKHRvLm1fb2Zmc2V0IC0gZnJvbS5tX29m
ZnNldCkgLSA4OworICAgICAgICAgICAgaW5zdHJ1Y3Rpb24gXj0gMHgwMjAyOworICAgICAgICAg
ICAgKmluc3RydWN0aW9uUHRyKysgPSBpbnN0cnVjdGlvbjsKKyAgICAgICAgICAgIGlmICgoKmlu
c3RydWN0aW9uUHRyICYgMHhGMDAwKSA9PSAweEUwMDApIHsKKyAgICAgICAgICAgICAgICB1aW50
MzJfdCogYWRkciA9IGdldExkckltbUFkZHJlc3NPblBvb2woaW5zdHJ1Y3Rpb25QdHIsIG1fYnVm
ZmVyLnBvb2xBZGRyZXNzKCkpOworICAgICAgICAgICAgICAgICphZGRyID0gb2Zmc2V0Qml0czsK
KyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIGNoYW5nZVBDcmVsYXRpdmVBZGRy
ZXNzKCgqaW5zdHJ1Y3Rpb25QdHIgJiAweEZGKSwgaW5zdHJ1Y3Rpb25QdHIsIG9mZnNldEJpdHMp
OworICAgICAgICAgICAgaW5zdHJ1Y3Rpb24gPSAoQlJBRl9PUENPREUgfCAoKmluc3RydWN0aW9u
UHRyKysgJiAweEYwMCkpOworICAgICAgICAgICAgKmluc3RydWN0aW9uUHRyKysgPSBpbnN0cnVj
dGlvbjsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAvKiBNT1YgIyBp
bW0sIHJlZyA9PiBMRFIgcmVnCisgICAgICAgICAgIGJyYWYgQHJlZyAgICAgICAgIGJyYWYgQHJl
ZworICAgICAgICAgICBub3AgICAgICAgICAgICAgICBub3AKKyAgICAgICAgKi8KKyAgICAgICAg
QVNTRVJUKCgqKGluc3RydWN0aW9uUHRyICsxKSAmIEJSQUZfT1BDT0RFKSA9PSBCUkFGX09QQ09E
RSk7CisgICAgICAgIG9mZnNldEJpdHMgPSAodG8ubV9vZmZzZXQgLSBmcm9tLm1fb2Zmc2V0KSAt
IDY7CisgICAgICAgIGluc3RydWN0aW9uID0gKmluc3RydWN0aW9uUHRyOworICAgICAgICBpZiAo
KGluc3RydWN0aW9uICAmIDB4RjAwMCkgPT0gMHhFMDAwKSB7CisgICAgICAgICAgICB1aW50MzJf
dCogYWRkciA9IGdldExkckltbUFkZHJlc3NPblBvb2woaW5zdHJ1Y3Rpb25QdHIsIG1fYnVmZmVy
LnBvb2xBZGRyZXNzKCkpOworICAgICAgICAgICAgKmFkZHIgPSBvZmZzZXRCaXRzOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGNoYW5nZVBDcmVsYXRpdmVBZGRyZXNz
KCgqaW5zdHJ1Y3Rpb25QdHIgJiAweEZGKSwgaW5zdHJ1Y3Rpb25QdHIsIG9mZnNldEJpdHMpOwor
ICAgIH0KKworICAgIHN0YXRpYyB2b2lkKiBnZXRSZWxvY2F0ZWRBZGRyZXNzKHZvaWQqIGNvZGUs
IEptcFNyYyBqdW1wKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dm9p
ZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3Q+KGNvZGUpICsganVtcC5tX29mZnNldCk7Cisg
ICAgfQorCisgICAgc3RhdGljIHZvaWQqIGdldFJlbG9jYXRlZEFkZHJlc3Modm9pZCogY29kZSwg
Sm1wRHN0IGRlc3RpbmF0aW9uKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGRlc3RpbmF0aW9uLm1f
b2Zmc2V0ICE9IC0xKTsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJl
aW50ZXJwcmV0X2Nhc3Q8dWludDMyX3Q+KGNvZGUpICsgZGVzdGluYXRpb24ubV9vZmZzZXQpOwor
ICAgIH0KKworICAgIHN0YXRpYyBpbnQgZ2V0RGlmZmVyZW5jZUJldHdlZW5MYWJlbHMoSm1wRHN0
IHNyYywgSm1wRHN0IGRzdCkKKyAgICB7CisgICAgICAgIHJldHVybiBkc3QubV9vZmZzZXQgLSBz
cmMubV9vZmZzZXQ7CisgICAgfQorCisgICAgc3RhdGljIGludCBnZXREaWZmZXJlbmNlQmV0d2Vl
bkxhYmVscyhKbXBEc3Qgc3JjLCBKbXBTcmMgZHN0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGRz
dC5tX29mZnNldCAtIHNyYy5tX29mZnNldDsKKyAgICB9CisKKyAgICBzdGF0aWMgaW50IGdldERp
ZmZlcmVuY2VCZXR3ZWVuTGFiZWxzKEptcFNyYyBzcmMsIEptcERzdCBkc3QpCisgICAgeworICAg
ICAgICByZXR1cm4gZHN0Lm1fb2Zmc2V0IC0gc3JjLm1fb2Zmc2V0OworICAgIH0KKworICAgIHN0
YXRpYyB2b2lkIHBhdGNoUG9pbnRlcih2b2lkKiBjb2RlLCBKbXBEc3Qgd2hlcmUsIHZvaWQqIHZh
bHVlKQorICAgIHsKKyAgICAgICAgcGF0Y2hQb2ludGVyKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMy
X3QqPihjb2RlKSArIHdoZXJlLm1fb2Zmc2V0LCB2YWx1ZSk7CisgICAgfQorCisgICAgc3RhdGlj
IHZvaWQgcGF0Y2hQb2ludGVyKHZvaWQqIGNvZGUsIHZvaWQqIHZhbHVlKQorICAgIHsKKyAgICAg
ICAgcGF0Y2hJbnQzMihjb2RlLCByZWludGVycHJldF9jYXN0PHVpbnQzMl90Pih2YWx1ZSkpOwor
ICAgIH0KKworICAgIHN0YXRpYyB2b2lkIHBhdGNoSW50MzIodm9pZCogY29kZSwgdWludDMyX3Qg
dmFsdWUpCisgICAgeworICAgICAgICBjaGFuZ2VQQ3JlbGF0aXZlQWRkcmVzcygoKihyZWludGVy
cHJldF9jYXN0PHVpbnQxNl90Kj4oY29kZSkpICYgMHhGRiksIHJlaW50ZXJwcmV0X2Nhc3Q8dWlu
dDE2X3QqPihjb2RlKSwgdmFsdWUpOworICAgIH0KKworICAgIHZvaWQqIGV4ZWN1dGFibGVDb3B5
KEV4ZWN1dGFibGVQb29sKiBhbGxvY2F0b3IpCisgICAgeworICAgICAgICB2b2lkKiBjb3B5ID0g
bV9idWZmZXIuZXhlY3V0YWJsZUNvcHkoYWxsb2NhdG9yKTsKKyAgICAgICAgQVNTRVJUKGNvcHkp
OworICAgICAgICByZXR1cm4gY29weTsKKyAgICB9CisKKyAgICB2b2lkIHByZWZpeCh1aW50MTZf
dCBwcmUpCisgICAgeworICAgICAgICBtX2J1ZmZlci5wdXRCeXRlKHByZSk7CisgICAgfQorCisg
ICAgdm9pZCBvbmVTaG9ydE9wKHVpbnQxNl90IG9wY29kZSwgYm9vbCBjaGVja3NpemUgPSB0cnVl
KQorICAgIHsKKyAgICAgICAgcHJpbnRJbnN0cihvcGNvZGUsIG1fYnVmZmVyLnVuY2hlY2tlZFNp
emUoKSk7CisgICAgICAgIGlmIChjaGVja3NpemUpCisgICAgICAgICAgICBtX2J1ZmZlci5lbnN1
cmVTcGFjZShtYXhJbnN0cnVjdGlvblNpemUpOworICAgICAgICBtX2J1ZmZlci5wdXRTaG9ydFVu
Y2hlY2tlZChvcGNvZGUpOworICAgIH0KKworICAgIHZvaWQgZW5zdXJlU3BhY2UoaW50IHNwYWNl
KQorICAgIHsKKyAgICAgICAgbV9idWZmZXIuZW5zdXJlU3BhY2Uoc3BhY2UpOworICAgIH0KKwor
ICAgIHZvaWQgZW5zdXJlU3BhY2UoaW50IGluc25TcGFjZSwgaW50IGNvbnN0U3BhY2UpCisgICAg
eworICAgICAgICBtX2J1ZmZlci5lbnN1cmVTcGFjZShpbnNuU3BhY2UsIGNvbnN0U3BhY2UpOwor
ICAgIH0KKworICAgIC8vIEFkbWluaXN0cmF0aXZlIG1ldGhvZHMKKworICAgIHZvaWQqIGRhdGEo
KSBjb25zdCB7IHJldHVybiBtX2J1ZmZlci5kYXRhKCk7IH0KKyAgICBpbnQgc2l6ZSgpCisgICAg
eworICAgICAgICByZXR1cm4gbV9idWZmZXIuc2l6ZSgpOworICAgIH0KKworI2lmZGVmIFNINF9B
U1NFTUJMRVJfVFJBQ0lORworICAgIHN0YXRpYyB2b2lkIHByaW50SW5zdHIodWludDE2X3Qgb3Bj
LCBpbnQgc2l6ZSwgYm9vbCBpc2RvdWJsZUluc3QgPSB0cnVlKQorICAgIHsKKyAgICAgICAgaWYg
KCFnZXRlbnYoIkphdmFTY3JpcHRDb3JlRHVtcEpJVCIpKQorICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICBjb25zdCBjaGFyICpmb3JtYXQgPSAwOworICAgICAgICBwcmludGZTdGRvdXRJbnN0
cigib2Zmc2V0IDogMHglOC44eFx0Iiwgc2l6ZSk7CisgICAgICAgIHN3aXRjaCAob3BjKSB7Cisg
ICAgICAgIGNhc2UgQlJLX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgQlJLXG4i
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTk9QX09QQ09ERToKKyAgICAgICAg
ICAgIGZvcm1hdCA9ICIgICAgTk9QXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgUlRTX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9IiAgICAqUlRTXG4iOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU0VUU19PUENPREU6CisgICAgICAgICAgICBmb3Jt
YXQgPSAiICAgIFNFVFNcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTRVRU
X09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgU0VUVFxuIjsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIENMUlRfT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0g
IiAgICBDTFJUXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYg
KGZvcm1hdCkgeworICAgICAgICAgICAgcHJpbnRmU3Rkb3V0SW5zdHIoZm9ybWF0KTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBzd2l0Y2ggKG9wYyAmIDB4ZjBmZikg
eworICAgICAgICBjYXNlIEJSQUZfT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICAq
QlJBRiBSJWRcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBEVF9PUENPREUg
OgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBEVCBSJWRcbiI7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBDTVBQTF9PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAg
IENNUC9QTCBSJWRcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDTVBQWl9P
UENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIENNUC9QWiBSJWRcbiI7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBKTVBfT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0
ID0gIiAgICAqSk1QIEBSJWRcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBK
U1JfT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICAqSlNSIEBSJWRcbiI7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBMRFNQUl9PUENPREU6CisgICAgICAgICAgICBm
b3JtYXQgPSAiICAgIExEUyBSJWQsIFBSXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgTERTTFBSX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgTERTLkwgQFIl
ZCssIFBSXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTU9WVF9PUENPREU6
CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIE1PVlQgUiVkXG4iOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgU0hBTF9PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAg
IFNIQUwgUiVkXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU0hBUl9PUENP
REU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIFNIQVIgUiVkXG4iOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgU0hMTF9PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAi
ICAgIFNITEwgUiVkXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU0hMTDJf
T1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBTSExMMiBSJWRcbiI7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTSExMOF9PUENPREU6CisgICAgICAgICAgICBmb3Jt
YXQgPSAiICAgIFNITEw4IFIlZFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IFNITEwxNl9PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIFNITEwxNiBSJWRcbiI7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTSExSX09QQ09ERToKKyAgICAgICAg
ICAgIGZvcm1hdCA9ICIgICAgU0hMUiBSJWRcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBTSExSMl9PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIFNITFIyIFIl
ZFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNITFI4X09QQ09ERToKKyAg
ICAgICAgICAgIGZvcm1hdCA9ICIgICAgU0hMUjggUiVkXG4iOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgU0hMUjE2X09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAg
U0hMUjE2IFIlZFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNUU1BSX09Q
Q09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgU1RTIFBSLCBSJWRcbiI7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTVFNMUFJfT1BDT0RFOgorICAgICAgICAgICAgZm9y
bWF0ID0gIiAgICBTVFMuTCBQUiwgQC1SJWRcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBMRFNfUk1fRlBVTF9PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIExE
UyBSJWQsIEZQVUxcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTVFNfRlBV
TF9STl9PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIFNUUyBGUFVMLCBSJWQgXG4i
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRkxEU19GUk1fRlBVTF9PUENPREU6
CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIEZMRFMgRlIlZCwgRlBVTFxuIjsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIEZTVFNfRlBVTF9GUk5fT1BDT0RFOgorICAgICAgICAg
ICAgZm9ybWF0ID0gIiAgICBGU1RTIEZQVUwsIFIlZCBcbiI7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBMRFNGUFNDUl9PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAg
IExEUyBSJWQsIEZQU0NSIFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNU
U0ZQU0NSX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgU1RTIEZQU0NSLCBSJWQg
XG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU1RTTUFDTF9PUENPREU6Cisg
ICAgICAgICAgICBmb3JtYXQgPSAiICAgIFNUUyBNQUNMLCBSJWQgXG4iOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgU1RTTUFDSF9PUENPREU6CisgICAgICAgICAgICBmb3JtYXQg
PSAiICAgIFNUUyBNQUNILCBSJWQgXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgQlNSRl9PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgICpCU1JGIFIlZCI7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBGVFJDX09QQ09ERToKKyAgICAgICAgICAg
IGZvcm1hdCA9ICIgICAgRlRSQyBGUiVkLCBGUFVMXG4iOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKGZvcm1hdCkgeworICAgICAgICAgICAgcHJpbnRmU3Rkb3V0
SW5zdHIoZm9ybWF0LCBnZXRSbihvcGMpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorICAgICAgICBzd2l0Y2ggKG9wYyAmIDB4ZjBmZikgeworICAgICAgICBjYXNlIEZORUdfT1BD
T0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBGTkVHIERSJWRcbiI7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBGTE9BVF9PUENPREU6CisgICAgICAgICAgICBmb3JtYXQg
PSAiICAgIEZMT0FUIERSJWRcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBG
VFJDX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgRlRSQyBGUiVkLCBGUFVMXG4i
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRlNRUlRfT1BDT0RFOgorICAgICAg
ICAgICAgZm9ybWF0ID0gIiAgICBGU1FSVCBGUiVEXG4iOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKGZvcm1hdCkgeworICAgICAgICAgICAgaWYgKGlzZG91Ymxl
SW5zdCkKKyAgICAgICAgICAgICAgICBwcmludGZTdGRvdXRJbnN0cihmb3JtYXQsIGdldERSbihv
cGMpIDw8IDEpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHByaW50ZlN0ZG91
dEluc3RyKGZvcm1hdCwgZ2V0Um4ob3BjKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKyAgICAgICAgc3dpdGNoIChvcGMgJiAweGYwMGYpIHsKKyAgICAgICAgY2FzZSBBRERfT1BD
T0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBBREQgUiVkLCBSJWRcbiI7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBRERDX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1h
dCA9ICIgICAgQUREQyBSJWQsIFIlZFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIEFERFZfT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBBRERWIFIlZCwgUiVk
XG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQU5EX09QQ09ERToKKyAgICAg
ICAgICAgIGZvcm1hdCA9ICIgICAgQU5EIFIlZCwgUiVkXG4iOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgRElWMV9PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIERJ
VjEgUiVkLCBSJWRcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDTVBFUV9P
UENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIENNUC9FUSBSJWQsIFIlZFxuIjsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENNUEdFX09QQ09ERToKKyAgICAgICAgICAg
IGZvcm1hdCA9ICIgICAgQ01QL0dFIFIlZCwgUiVkXG4iOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgQ01QR1RfT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBDTVAv
R1QgUiVkLCBSJWRcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDTVBISV9P
UENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIENNUC9ISSBSJWQsIFIlZFxuIjsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENNUEhTX09QQ09ERToKKyAgICAgICAgICAg
IGZvcm1hdCA9ICIgICAgQ01QL0hTIFIlZCwgUiVkXG4iOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgTU9WX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgTU9WIFIl
ZCwgUiVkXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTU9WQl9XUklURV9S
Tl9PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIE1PVi5CIFIlZCwgQFIlZFxuIjsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE1PVkJfV1JJVEVfUk5ERUNfT1BDT0RF
OgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBNT1YuQiBSJWQsIEAtUiVkXG4iOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTU9WQl9XUklURV9SMFJOX09QQ09ERToKKyAgICAg
ICAgICAgIGZvcm1hdCA9ICIgICAgTU9WLkIgUiVkLCBAKFIwLCBSJWQpXG4iOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgTU9WQl9SRUFEX1JNX09QQ09ERToKKyAgICAgICAgICAg
IGZvcm1hdCA9ICIgICAgTU9WLkIgQFIlZCwgUiVkXG4iOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgTU9WQl9SRUFEX1JNSU5DX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9
ICIgICAgTU9WLkIgQFIlZCssIFIlZFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIE1PVkJfUkVBRF9SMFJNX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgTU9W
LkIgQChSMCwgUiVkKSwgUiVkXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
TU9WTF9XUklURV9STl9PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIE1PVi5MIFIl
ZCwgQFIlZFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE1PVkxfV1JJVEVf
Uk5ERUNfT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBNT1YuTCBSJWQsIEAtUiVk
XG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTU9WTF9XUklURV9SMFJOX09Q
Q09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgTU9WLkwgUiVkLCBAKFIwLCBSJWQpXG4i
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTU9WTF9SRUFEX1JNX09QQ09ERToK
KyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgTU9WLkwgQFIlZCwgUiVkXG4iOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgTU9WTF9SRUFEX1JNSU5DX09QQ09ERToKKyAgICAgICAg
ICAgIGZvcm1hdCA9ICIgICAgTU9WLkwgQFIlZCssIFIlZFxuIjsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIE1PVkxfUkVBRF9SMFJNX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1h
dCA9ICIgICAgTU9WLkwgQChSMCwgUiVkKSwgUiVkXG4iOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgTVVMTF9PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIE1VTC5M
IFIlZCwgUiVkXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRE1VTExfTF9P
UENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIERNVUxVLkwgUiVkLCBSJWRcbiI7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBETVVMU0xfT1BDT0RFOgorICAgICAgICAg
ICAgZm9ybWF0ID0gIiAgICBETVVMUy5MIFIlZCwgUiVkXG4iOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgTkVHX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgTkVH
IFIlZCwgUiVkXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTkVHQ19PUENP
REU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIE5FR0MgUiVkLCBSJWRcbiI7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBOT1RfT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0
ID0gIiAgICBOT1QgUiVkLCBSJWRcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBPUl9PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIE9SIFIlZCwgUiVkXG4iOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU0hBRF9PUENPREU6CisgICAgICAgICAg
ICBmb3JtYXQgPSAiICAgIFNIQUQgUiVkLCBSJWRcbiI7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBTSExEX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgU0hMRCBS
JWQsIFIlZFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNVQl9PUENPREU6
CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIFNVQiBSJWQsIFIlZFxuIjsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIFNVQkNfT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0g
IiAgICBTVUJDIFIlZCwgUiVkXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
U1VCVl9PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIFNVQlYgUiVkLCBSJWRcbiI7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUU1RfT1BDT0RFOgorICAgICAgICAg
ICAgZm9ybWF0ID0gIiAgICBUU1QgUiVkLCBSJWRcbiI7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBYT1JfT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBYT1IgUiVk
LCBSJWRcbiI7YnJlYWs7CisgICAgICAgIGNhc2UgTU9WV19XUklURV9STl9PUENPREU6IAorICAg
ICAgICAgICAgZm9ybWF0ID0gIiAgICBNT1YuVyBSJWQsIEBSJWRcbiI7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBNT1ZXX1JFQURfUk1fT1BDT0RFOiAKKyAgICAgICAgICAgIGZv
cm1hdCA9ICIgICAgTU9WLlcgQFIlZCwgUiVkXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgTU9WV19SRUFEX1IwUk1fT1BDT0RFOiAKKyAgICAgICAgICAgIGZvcm1hdCA9ICIg
ICAgTU9WLlcgQChSMCwgUiVkKSwgUiVkXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgRVhUVVdfT1BDT0RFOiAKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgRVhUVS5XIFIl
ZCwgUiVkXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGZv
cm1hdCkgeworICAgICAgICAgICAgcHJpbnRmU3Rkb3V0SW5zdHIoZm9ybWF0LCBnZXRSbShvcGMp
LCBnZXRSbihvcGMpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBz
d2l0Y2ggKG9wYyAmIDB4ZjAwZikgeworICAgICAgICBjYXNlIEZTVUJfT1BDT0RFOgorICAgICAg
ICAgICAgZm9ybWF0ID0gIiAgICBGU1VCIEZSJWQsIEZSJWRcbiI7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBGQUREX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAg
RkFERCBGUiVkLCBGUiVkXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRkRJ
Vl9PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIEZESVYgRlIlZCwgRlIlZFxuIjsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEZNVUxfT1BDT0RFOgorICAgICAgICAg
ICAgZm9ybWF0ID0gIiAgICBETVVMTCBGUiVkLCBGUiVkXG4iOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgRk1PVlNfUkVBRF9STV9PUENPREU6CisgICAgICAgICAgICBmb3JtYXQg
PSAiICAgIEZNT1YuUyBAUiVkLCBGUiVkXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgRk1PVlNfV1JJVEVfUk5fREVDX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIg
ICAgRk1PVi5TIEZSJWQsIEAtUiVkXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgRk1PVlNfUkVBRF9STV9JTkNfT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBG
TU9WLlMgQFIlZCssIEZSJWRcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBG
TU9WU19SRUFEX1IwUk1fT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBGTU9WLlMg
QChSMCwgUiVkKSwgRlIlZFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEZN
T1ZTX1dSSVRFX1JOX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgRk1PVi5TIEZS
JWQsIEBSJWRcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBGTU9WU19XUklU
RV9SMFJOX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgRk1PVi5TIEZSJWQsIEAo
UjAsIFIlZClcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBGTU9WX09QQ09E
RToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgRk1PViBGUiVkLCBGUiVkXG4iOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRkNNUEVRX09QQ09ERToKKyAgICAgICAgICAgIGZv
cm1hdCA9ICIgICAgRkNNUC9FUSBGUiVkLCBGUiVkXG4iOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgRkNNUEdUX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgRkNN
UC9HVCBGUiVkLCBGUiVkXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKGZvcm1hdCkgeworICAgICAgICAgICAgaWYgKGlzZG91YmxlSW5zdCkKKyAgICAgICAg
ICAgICAgICBwcmludGZTdGRvdXRJbnN0cihmb3JtYXQsIGdldERSbShvcGMpIDw8IDEsIGdldERS
bihvcGMpIDw8IDEpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHByaW50ZlN0
ZG91dEluc3RyKGZvcm1hdCwgZ2V0Um0ob3BjKSwgZ2V0Um4ob3BjKSk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgc3dpdGNoIChvcGMgJiAweGZmMDApIHsKKyAgICAg
ICAgY2FzZSBCRl9PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIEJGICVkXG4iOyAg
YnJlYWs7CisgICAgICAgIGNhc2UgQkZTX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIg
ICAgKkJGL1MgJWRcbiI7ICBicmVhazsKKyAgICAgICAgY2FzZSBBTkRJTU1fT1BDT0RFOgorICAg
ICAgICAgICAgZm9ybWF0ID0gIiAgICBBTkQgIyVkLCBSMFxuIjsgIGJyZWFrOworICAgICAgICBj
YXNlIEJUX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgQlQgJWRcbiI7ICBicmVh
azsKKyAgICAgICAgY2FzZSBCVFNfT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICAq
QlQvUyAlZFxuIjsgIGJyZWFrOworICAgICAgICBjYXNlIENNUEVRSU1NX09QQ09ERToKKyAgICAg
ICAgICAgIGZvcm1hdCA9ICIgICAgQ01QL0VRICMlZCwgUjBcbiI7ICBicmVhazsKKyAgICAgICAg
Y2FzZSBNT1ZCX1dSSVRFX09GRkdCUl9PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAg
IE1PVi5CIFIwLCBAKCVkLCBHQlIpXG4iOyAgYnJlYWs7CisgICAgICAgIGNhc2UgTU9WQl9SRUFE
X09GRkdCUl9PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIE1PVi5CIEAoJWQsIEdC
UiksIFIwXG4iOyAgYnJlYWs7CisgICAgICAgIGNhc2UgTU9WTF9XUklURV9PRkZHQlJfT1BDT0RF
OgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBNT1YuTCBSMCwgQCglZCwgR0JSKVxuIjsgIGJy
ZWFrOworICAgICAgICBjYXNlIE1PVkxfUkVBRF9PRkZHQlJfT1BDT0RFOgorICAgICAgICAgICAg
Zm9ybWF0ID0gIiAgICBNT1YuTCBAKCVkLCBHQlIpLCBSMFxuIjsgIGJyZWFrOworICAgICAgICBj
YXNlIE1PVkFfUkVBRF9PRkZQQ19PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIE1P
VkEgQCglZCwgUEMpLCBSMFxuIjsgIGJyZWFrOworICAgICAgICBjYXNlIE9SSU1NX09QQ09ERToK
KyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgT1IgIyVkLCBSMFxuIjsgIGJyZWFrOworICAgICAg
ICBjYXNlIE9SQklNTV9PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIE9SLkIgIyVk
LCBAKFIwLCBHQlIpXG4iOyAgYnJlYWs7CisgICAgICAgIGNhc2UgVFNUSU1NX09QQ09ERToKKyAg
ICAgICAgICAgIGZvcm1hdCA9ICIgICAgVFNUICMlZCwgUjBcbiI7ICBicmVhazsKKyAgICAgICAg
Y2FzZSBUU1RCX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgVFNULkIgJWQsIEAo
UjAsIEdCUilcbiI7ICBicmVhazsKKyAgICAgICAgY2FzZSBYT1JJTU1fT1BDT0RFOgorICAgICAg
ICAgICAgZm9ybWF0ID0gIiAgICBYT1IgIyVkLCBSMFxuIjsgIGJyZWFrOworICAgICAgICBjYXNl
IFhPUkJfT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBYT1IuQiAlZCwgQChSMCwg
R0JSKVxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmIChmb3Jt
YXQpIHsKKyAgICAgICAgICAgIHByaW50ZlN0ZG91dEluc3RyKGZvcm1hdCwgZ2V0SW1tOChvcGMp
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBzd2l0Y2ggKG9wYyAm
IDB4ZmYwMCkgeworICAgICAgICBjYXNlIE1PVkJfV1JJVEVfT0ZGUk5fT1BDT0RFOgorICAgICAg
ICAgICAgZm9ybWF0ID0gIiAgICBNT1YuQiBSMCwgQCglZCwgUiVkKVxuIjsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIE1PVkJfUkVBRF9PRkZSTV9PUENPREU6CisgICAgICAgICAg
ICBmb3JtYXQgPSAiICAgIE1PVi5CIEAoJWQsIFIlZCksIFIwXG4iOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGZvcm1hdCkgeworICAgICAgICAgICAgcHJpbnRm
U3Rkb3V0SW5zdHIoZm9ybWF0LCBnZXREaXNwKG9wYyksIGdldFJtKG9wYykpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHN3aXRjaCAob3BjICYgMHhmMDAwKSB7Cisg
ICAgICAgIGNhc2UgQlJBX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgKkJSQSAl
ZFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEJTUl9PUENPREU6CisgICAg
ICAgICAgICBmb3JtYXQgPSAiICAgICpCU1IgJWRcbiI7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgICAgICBpZiAoZm9ybWF0KSB7CisgICAgICAgICAgICBwcmludGZTdGRvdXRJ
bnN0cihmb3JtYXQsIGdldEltbTEyKG9wYykpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgICAgIHN3aXRjaCAob3BjICYgMHhmMDAwKSB7CisgICAgICAgIGNhc2UgTU9WTF9S
RUFEX09GRlBDX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgTU9WLkwgQCglZCwg
UEMpLCBSJWRcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBRERJTU1fT1BD
T0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBBREQgIyVkLCBSJWRcbiI7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBNT1ZJTU1fT1BDT0RFOgorICAgICAgICAgICAgZm9y
bWF0ID0gIiAgICBNT1YgIyVkLCBSJWRcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBNT1ZXX1JFQURfT0ZGUENfT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBN
T1YuVyBAKCVkLCBQQyksIFIlZFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgICAgIGlmIChmb3JtYXQpIHsKKyAgICAgICAgICAgIHByaW50ZlN0ZG91dEluc3RyKGZvcm1h
dCwgZ2V0SW1tOChvcGMpLCBnZXRSbihvcGMpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgICAgICBzd2l0Y2ggKG9wYyAmIDB4ZjAwMCkgeworICAgICAgICBjYXNlIE1PVkxf
V1JJVEVfT0ZGUk5fT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBNT1YuTCBSJWQs
IEAoJWQsIFIlZClcbiI7CisgICAgICAgICAgICBwcmludGZTdGRvdXRJbnN0cihmb3JtYXQsIGdl
dFJtKG9wYyksIGdldERpc3Aob3BjKSwgZ2V0Um4ob3BjKSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBNT1ZMX1JFQURfT0ZGUk1fT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0
ID0gIiAgICBNT1YuTCBAKCVkLCBSJWQpLCBSJWRcbiI7CisgICAgICAgICAgICBwcmludGZTdGRv
dXRJbnN0cihmb3JtYXQsIGdldERpc3Aob3BjKSwgZ2V0Um0ob3BjKSwgZ2V0Um4ob3BjKSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN0YXRpYyB2b2lkIHBy
aW50ZlN0ZG91dEluc3RyKGNvbnN0IGNoYXIqIGZvcm1hdCwgLi4uKQorICAgIHsKKyAgICAgICAg
aWYgKGdldGVudigiSmF2YVNjcmlwdENvcmVEdW1wSklUIikpIHsKKyAgICAgICAgICAgIHZhX2xp
c3QgYXJnczsKKyAgICAgICAgICAgIHZhX3N0YXJ0KGFyZ3MsIGZvcm1hdCk7CisgICAgICAgICAg
ICB2cHJpbnRmU3Rkb3V0SW5zdHIoZm9ybWF0LCBhcmdzKTsKKyAgICAgICAgICAgIHZhX2VuZChh
cmdzKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN0YXRpYyB2b2lkIHZwcmludGZTdGRvdXRJ
bnN0cihjb25zdCBjaGFyKiBmb3JtYXQsIHZhX2xpc3QgYXJncykKKyAgICB7CisgICAgICAgIGlm
IChnZXRlbnYoIkphdmFTY3JpcHRDb3JlRHVtcEpJVCIpKQorICAgICAgICAgICAgdmZwcmludGYo
c3Rkb3V0LCBmb3JtYXQsIGFyZ3MpOworICAgIH0KKyNlbHNlCisgICAgc3RhdGljIHZvaWQgcHJp
bnRJbnN0cih1aW50MTZfdCBvcGMsIGludCBzaXplLCBib29sIGlzZG91YmxlSW5zdCA9IHRydWUp
IHt9OworI2VuZGlmCisKK3ByaXZhdGU6CisgICAgU0g0QnVmZmVyIG1fYnVmZmVyOworfTsKKwor
fSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoQVNTRU1CTEVSKSAmJiBDUFUo
U0g0KQorCisjZW5kaWYgLy8gU0g0QXNzZW1ibGVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS95YXJyL1lhcnJKSVQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIv
WWFyckpJVC5jcHAKaW5kZXggZTM0ZTZmNC4uZjQzODkxNyAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3lhcnIvWWFyckpJVC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3lhcnIvWWFyckpJVC5jcHAKQEAgLTU5LDYgKzU5LDE2IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3Ig
OiBwcml2YXRlIE1hY3JvQXNzZW1ibGVyIHsKICAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCBy
ZWdUMSA9IE1JUFNSZWdpc3RlcnM6OnQ1OwogCiAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQg
cmV0dXJuUmVnaXN0ZXIgPSBNSVBTUmVnaXN0ZXJzOjp2MDsKKyNlbGlmIENQVShTSDQpCisgICAg
c3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgaW5wdXQgPSBTSDRSZWdpc3RlcnM6OnI0OworICAgIHN0
YXRpYyBjb25zdCBSZWdpc3RlcklEIGluZGV4ID0gU0g0UmVnaXN0ZXJzOjpyNTsKKyAgICBzdGF0
aWMgY29uc3QgUmVnaXN0ZXJJRCBsZW5ndGggPSBTSDRSZWdpc3RlcnM6OnI2OworICAgIHN0YXRp
YyBjb25zdCBSZWdpc3RlcklEIG91dHB1dCA9IFNINFJlZ2lzdGVyczo6cjc7CisKKyAgICBzdGF0
aWMgY29uc3QgUmVnaXN0ZXJJRCByZWdUMCA9IFNINFJlZ2lzdGVyczo6cjA7CisgICAgc3RhdGlj
IGNvbnN0IFJlZ2lzdGVySUQgcmVnVDEgPSBTSDRSZWdpc3RlcnM6OnIxOworCisgICAgc3RhdGlj
IGNvbnN0IFJlZ2lzdGVySUQgcmV0dXJuUmVnaXN0ZXIgPSBTSDRSZWdpc3RlcnM6OnIwOwogI2Vs
aWYgQ1BVKFg4NikKICAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCBpbnB1dCA9IFg4NlJlZ2lz
dGVyczo6ZWF4OwogICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIGluZGV4ID0gWDg2UmVnaXN0
ZXJzOjplZHg7CkBAIC0yMTc5LDYgKzIxODksOSBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIDogcHJp
dmF0ZSBNYWNyb0Fzc2VtYmxlciB7CiAgICAgICAgIHB1c2goQVJNUmVnaXN0ZXJzOjpyOCk7IC8v
IHNjcmF0Y2ggcmVnaXN0ZXIKICNlbmRpZgogICAgICAgICBtb3ZlKEFSTVJlZ2lzdGVyczo6cjMs
IG91dHB1dCk7CisjZWxpZiBDUFUoU0g0KQorICAgICAgICBwdXNoKFNINFJlZ2lzdGVyczo6cjEx
KTsKKyAgICAgICAgcHVzaChTSDRSZWdpc3RlcnM6OnIxMyk7CiAjZWxpZiBDUFUoTUlQUykKICAg
ICAgICAgLy8gRG8gbm90aGluZy4KICNlbmRpZgpAQCAtMjIwMSw2ICsyMjE0LDkgQEAgY2xhc3Mg
WWFyckdlbmVyYXRvciA6IHByaXZhdGUgTWFjcm9Bc3NlbWJsZXIgewogICAgICAgICBwb3AoQVJN
UmVnaXN0ZXJzOjpyNik7CiAgICAgICAgIHBvcChBUk1SZWdpc3RlcnM6OnI1KTsKICAgICAgICAg
cG9wKEFSTVJlZ2lzdGVyczo6cjQpOworI2VsaWYgQ1BVKFNINCkKKyAgICAgICAgcG9wKFNINFJl
Z2lzdGVyczo6cjEzKTsKKyAgICAgICAgcG9wKFNINFJlZ2lzdGVyczo6cjExKTsKICNlbGlmIENQ
VShNSVBTKQogICAgICAgICAvLyBEbyBub3RoaW5nCiAjZW5kaWYKLS0gCjEuNy4yLjMKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>85674</attachid>
            <date>2011-03-14 07:52:40 -0700</date>
            <delta_ts>2011-03-25 07:57:49 -0700</delta_ts>
            <desc>YAR JIT + Floating point support</desc>
            <filename>0001-YARR-JIT-SUPPORT.patch</filename>
            <type>text/plain</type>
            <size>122335</size>
            <attacher name="thouraya">thouraya.andolsi</attacher>
            
              <data encoding="base64">RnJvbSA0MWU0YzEwZWEyNTY1ZTk5NDZkZDgxNjI4M2U5MzNhNjJlYWU4ZmE5IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBUaG91cmF5YSBBTkRPTFNJIDx0aG91cmF5YS5hbmRvbHNpQHN0
LmNvbT4KRGF0ZTogTW9uLCAxNCBNYXIgMjAxMSAxNDozNzoyNSArMDEwMApTdWJqZWN0OiBbUEFU
Q0hdIFlBUlIgSklUIFNVUFBPUlQuCgotLS0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VM
b2cgICAgICAgICAgICAgICAgICAgIHwgICAxNSArCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05V
bWFrZWZpbGUuYW0gICAgICAgICAgICAgICB8ICAgIDMgKwogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5oICAgfCAgICA2ICsKIC4uLi9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJTSDQuY3BwIHwgICA4MiArCiAuLi4vSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyU0g0LmggICB8IDE2NDMgKysrKysrKysrKysr
KysrKwogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9TSDRBc3NlbWJsZXIuaCAgICAg
fCAxOTY1ICsrKysrKysrKysrKysrKysrKysrCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9Z
YXJySklULmNwcCAgICAgICAgICAgICB8ICAgMTYgKwogNyBmaWxlcyBjaGFuZ2VkLCAzNzMwIGlu
c2VydGlvbnMoKyksIDAgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclNINC5jcHAKIGNyZWF0ZSBtb2Rl
IDEwMDY0NCBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyU0g0
LmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1NI
NEFzc2VtYmxlci5oCgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxv
ZyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKaW5kZXggYzI0ZDM2Zi4uMDNiZDJl
OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMTEtMDMtMTQg
IFRob3VyYXlhIEFORE9MU0kgIDx0aG91cmF5YS5hbmRvbHNpQHN0LmNvbT4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTSDQgSklUIFNVUFBPUlQuCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NDMyOS4KKyAg
ICAgICAgQWRkIFlBUlIgc3VwcG9ydCBmb3IgU0g0IHBsYXRmb3JtcyAoZGlzYWJsZWQgYnkgZGVm
YXVsdCkuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBhc3NlbWJsZXIv
TWFjcm9Bc3NlbWJsZXIuaDoKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJTSDQu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJTSDQuaDogQWRk
ZWQuCisgICAgICAgICogYXNzZW1ibGVyL1NINEFzc2VtYmxlci5oOiBBZGRlZC4KKyAgICAgICAg
KiB5YXJyL1lhcnJKSVQuY3BwOgorCiAyMDExLTAzLTEzICBHZW9mZnJleSBHYXJlbiAgPGdnYXJl
bkBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2FtIFdlaW5pZy4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5hbSBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9HTlVtYWtlZmlsZS5hbQppbmRleCA5NzdjYjE4Li4yZjY2YTBiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUuYW0KKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtCkBAIC05MSw2ICs5MSw5IEBAIGphdmFzY3JpcHRjb3Jl
X3NvdXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3Nl
bWJsZXJYODZfNjQuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fz
c2VtYmxlclg4NkNvbW1vbi5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01h
Y3JvQXNzZW1ibGVyWDg2LmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFj
cm9Bc3NlbWJsZXJTSDQuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNy
b0Fzc2VtYmxlclNINC5jcHAgXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvU0g0
QXNzZW1ibGVyLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvUmVwYXRjaEJ1
ZmZlci5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5o
IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcCBcCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmgKaW5kZXgg
ZmExNjVkZS4uOWFhMjczOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9NYWNyb0Fzc2VtYmxlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvTWFjcm9Bc3NlbWJsZXIuaApAQCAtNTAsNiArNTAsMTIgQEAgbmFtZXNwYWNlIEpTQyB7IHR5
cGVkZWYgTWFjcm9Bc3NlbWJsZXJYODYgTWFjcm9Bc3NlbWJsZXJCYXNlOyB9OwogI2luY2x1ZGUg
Ik1hY3JvQXNzZW1ibGVyWDg2XzY0LmgiCiBuYW1lc3BhY2UgSlNDIHsgdHlwZWRlZiBNYWNyb0Fz
c2VtYmxlclg4Nl82NCBNYWNyb0Fzc2VtYmxlckJhc2U7IH07CiAKKyNlbGlmIENQVShTSDQpCisj
aW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJTSDQuaCIKK25hbWVzcGFjZSBKU0MgewordHlwZWRlZiBN
YWNyb0Fzc2VtYmxlclNINCBNYWNyb0Fzc2VtYmxlckJhc2U7Cit9OworCiAjZWxzZQogI2Vycm9y
ICJUaGUgTWFjcm9Bc3NlbWJsZXIgaXMgbm90IHN1cHBvcnRlZCBvbiB0aGlzIHBsYXRmb3JtLiIK
ICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNy
b0Fzc2VtYmxlclNINC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3Jv
QXNzZW1ibGVyU0g0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzE4
ODQ1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9N
YWNyb0Fzc2VtYmxlclNINC5jcHAKQEAgLTAsMCArMSw4MiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMSBTVE1pY3JvZWxlY3Ryb25pY3MuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKwor
I2lmIEVOQUJMRShBU1NFTUJMRVIpICYmIENQVShTSDQpCisKKyNpbmNsdWRlICJNYWNyb0Fzc2Vt
YmxlclNINC5oIgorCituYW1lc3BhY2UgSlNDIHsKK2NvbnN0IENvbmRpdGlvbiBNYWNyb0Fzc2Vt
YmxlclNINDo6RXF1YWwgPSBTSDRBc3NlbWJsZXI6OkVROworY29uc3QgQ29uZGl0aW9uIE1hY3Jv
QXNzZW1ibGVyU0g0OjpOb3RFcXVhbCA9IFNINEFzc2VtYmxlcjo6TkU7Citjb25zdCBDb25kaXRp
b24gTWFjcm9Bc3NlbWJsZXJTSDQ6OkdyZWF0ZXJUaGFuID0gU0g0QXNzZW1ibGVyOjpHVDsKK2Nv
bnN0IENvbmRpdGlvbiBNYWNyb0Fzc2VtYmxlclNINDo6R3JlYXRlclRoYW5PckVxdWFsID0gU0g0
QXNzZW1ibGVyOjpHRTsKK2NvbnN0IENvbmRpdGlvbiBNYWNyb0Fzc2VtYmxlclNINDo6TGVzc1Ro
YW4gPSBTSDRBc3NlbWJsZXI6OkxUOworY29uc3QgQ29uZGl0aW9uIE1hY3JvQXNzZW1ibGVyU0g0
OjpMZXNzVGhhbk9yRXF1YWwgPSBTSDRBc3NlbWJsZXI6OkxFOworY29uc3QgQ29uZGl0aW9uIE1h
Y3JvQXNzZW1ibGVyU0g0OjpVR3JlYXRlclRoYW4gPSBTSDRBc3NlbWJsZXI6OkhJOworY29uc3Qg
Q29uZGl0aW9uIE1hY3JvQXNzZW1ibGVyU0g0OjpVR3JlYXRlclRoYW5PckVxdWFsID0gU0g0QXNz
ZW1ibGVyOjpIUzsKK2NvbnN0IENvbmRpdGlvbiBNYWNyb0Fzc2VtYmxlclNINDo6VUxlc3NUaGFu
ID0gU0g0QXNzZW1ibGVyOjpMSTsKK2NvbnN0IENvbmRpdGlvbiBNYWNyb0Fzc2VtYmxlclNINDo6
VUxlc3NUaGFuT3JFcXVhbCA9IFNINEFzc2VtYmxlcjo6TFM7Citjb25zdCBDb25kaXRpb24gTWFj
cm9Bc3NlbWJsZXJTSDQ6Olplcm8gPSBTSDRBc3NlbWJsZXI6OkVROworY29uc3QgQ29uZGl0aW9u
IE1hY3JvQXNzZW1ibGVyU0g0OjpOb25aZXJvID0gU0g0QXNzZW1ibGVyOjpORTsKK2NvbnN0IENv
bmRpdGlvbiBNYWNyb0Fzc2VtYmxlclNINDo6T3ZlcmZsb3cgPSBTSDRBc3NlbWJsZXI6Ok9GOwor
Y29uc3QgQ29uZGl0aW9uIE1hY3JvQXNzZW1ibGVyU0g0OjpBYm92ZSA9IFNINEFzc2VtYmxlcjo6
SEk7Citjb25zdCBDb25kaXRpb24gTWFjcm9Bc3NlbWJsZXJTSDQ6OkFib3ZlT3JFcXVhbCA9IFNI
NEFzc2VtYmxlcjo6SFM7Citjb25zdCBDb25kaXRpb24gTWFjcm9Bc3NlbWJsZXJTSDQ6OkJlbG93
ID0gU0g0QXNzZW1ibGVyOjpMSTsKK2NvbnN0IENvbmRpdGlvbiBNYWNyb0Fzc2VtYmxlclNINDo6
QmVsb3dPckVxdWFsID0gU0g0QXNzZW1ibGVyOjpMUzsKK2NvbnN0IENvbmRpdGlvbiBNYWNyb0Fz
c2VtYmxlclNINDo6RG91YmxlRXF1YWwgPSBTSDRBc3NlbWJsZXI6OkVROworY29uc3QgQ29uZGl0
aW9uIE1hY3JvQXNzZW1ibGVyU0g0OjpEb3VibGVOb3RFcXVhbCA9IFNINEFzc2VtYmxlcjo6TkU7
Citjb25zdCBDb25kaXRpb24gTWFjcm9Bc3NlbWJsZXJTSDQ6OkRvdWJsZUdyZWF0ZXJUaGFuID0g
U0g0QXNzZW1ibGVyOjpHVDsKK2NvbnN0IENvbmRpdGlvbiBNYWNyb0Fzc2VtYmxlclNINDo6RG91
YmxlR3JlYXRlclRoYW5PckVxdWFsID0gU0g0QXNzZW1ibGVyOjpHRTsKK2NvbnN0IENvbmRpdGlv
biBNYWNyb0Fzc2VtYmxlclNINDo6RG91YmxlTGVzc1RoYW4gPSBTSDRBc3NlbWJsZXI6OkxUOwor
Y29uc3QgQ29uZGl0aW9uIE1hY3JvQXNzZW1ibGVyU0g0OjpEb3VibGVMZXNzVGhhbk9yRXF1YWwg
PSBTSDRBc3NlbWJsZXI6OkxFOworY29uc3QgQ29uZGl0aW9uIE1hY3JvQXNzZW1ibGVyU0g0OjpE
b3VibGVFcXVhbE9yVW5vcmRlcmVkID0gU0g0QXNzZW1ibGVyOjpFUVU7Citjb25zdCBDb25kaXRp
b24gTWFjcm9Bc3NlbWJsZXJTSDQ6OkRvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQgPSBTSDRBc3Nl
bWJsZXI6Ok5FVTsKK2NvbnN0IENvbmRpdGlvbiBNYWNyb0Fzc2VtYmxlclNINDo6RG91YmxlR3Jl
YXRlclRoYW5PclVub3JkZXJlZCA9IFNINEFzc2VtYmxlcjo6R1RVOworY29uc3QgQ29uZGl0aW9u
IE1hY3JvQXNzZW1ibGVyU0g0OjpEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxPclVub3JkZXJlZCA9
IFNINEFzc2VtYmxlcjo6R0VVOworY29uc3QgQ29uZGl0aW9uIE1hY3JvQXNzZW1ibGVyU0g0OjpE
b3VibGVMZXNzVGhhbk9yVW5vcmRlcmVkID0gU0g0QXNzZW1ibGVyOjpMVFU7Citjb25zdCBDb25k
aXRpb24gTWFjcm9Bc3NlbWJsZXJTSDQ6OkRvdWJsZUxlc3NUaGFuT3JFcXVhbE9yVW5vcmRlcmVk
ID0gU0g0QXNzZW1ibGVyOjpMRVU7Citjb25zdCBDb25kaXRpb24gTWFjcm9Bc3NlbWJsZXJTSDQ6
OlNpZ25lZCA9IFNINEFzc2VtYmxlcjo6U0k7CisKK3ZvaWQgTWFjcm9Bc3NlbWJsZXJTSDQ6Omxp
bmtDYWxsKHZvaWQqIGNvZGUsIENhbGwgY2FsbCwgRnVuY3Rpb25QdHIgZnVuY3Rpb24pCit7Cisg
ICAgU0g0QXNzZW1ibGVyOjpsaW5rQ2FsbChjb2RlLCBjYWxsLm1fam1wLCBmdW5jdGlvbi52YWx1
ZSgpKTsKK30KKwordm9pZCBNYWNyb0Fzc2VtYmxlclNINDo6cmVwYXRjaENhbGwoQ29kZUxvY2F0
aW9uQ2FsbCBjYWxsLCBDb2RlTG9jYXRpb25MYWJlbCBkZXN0aW5hdGlvbikKK3sKKyAgICBTSDRB
c3NlbWJsZXI6OnJlbGlua0NhbGwoY2FsbC5kYXRhTG9jYXRpb24oKSwgZGVzdGluYXRpb24uZXhl
Y3V0YWJsZUFkZHJlc3MoKSk7Cit9CisKK3ZvaWQgTWFjcm9Bc3NlbWJsZXJTSDQ6OnJlcGF0Y2hD
YWxsKENvZGVMb2NhdGlvbkNhbGwgY2FsbCwgRnVuY3Rpb25QdHIgZGVzdGluYXRpb24pCit7Cisg
ICAgU0g0QXNzZW1ibGVyOjpyZWxpbmtDYWxsKGNhbGwuZGF0YUxvY2F0aW9uKCksIGRlc3RpbmF0
aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2Vu
ZGlmIC8vIEVOQUJMRShBU1NFTUJMRVIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyU0g0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyU0g0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uMWQ5MmNkZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJTSDQuaApAQCAtMCwwICsxLDE2NDMgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMSBTVE1pY3JvZWxlY3Ryb25pY3MuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKyNpZm5k
ZWYgTWFjcm9Bc3NlbWJsZXJTSDRfaAorI2RlZmluZSBNYWNyb0Fzc2VtYmxlclNINF9oCisKKyNp
ZiBFTkFCTEUoQVNTRU1CTEVSKSAmJiBDUFUoU0g0KQorCisjaW5jbHVkZSAiQWJzdHJhY3RNYWNy
b0Fzc2VtYmxlci5oIgorI2luY2x1ZGUgIlNINEFzc2VtYmxlci5oIgorI2luY2x1ZGUgPHd0Zi9B
c3NlcnRpb25zLmg+CisKK2V4dGVybiB1bnNpZ25lZCBpbnQgX19mcHNjcl92YWx1ZXNbMl07CisK
K25hbWVzcGFjZSBKU0MgewordHlwZWRlZiBTSDRBc3NlbWJsZXI6OkNvbmRpdGlvbiBDb25kaXRp
b247CisKK2NsYXNzIE1hY3JvQXNzZW1ibGVyU0g0IDogcHVibGljIEFic3RyYWN0TWFjcm9Bc3Nl
bWJsZXI8U0g0QXNzZW1ibGVyPiB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBTSDRBc3NlbWJsZXI6
OkZQUmVnaXN0ZXJJRCBGUFJlZ2lzdGVySUQ7CisKKyAgICBzdGF0aWMgY29uc3QgQ29uZGl0aW9u
IEVxdWFsOworICAgIHN0YXRpYyBjb25zdCBDb25kaXRpb24gTm90RXF1YWw7CisgICAgc3RhdGlj
IGNvbnN0IENvbmRpdGlvbiBHcmVhdGVyVGhhbjsKKyAgICBzdGF0aWMgY29uc3QgQ29uZGl0aW9u
IEdyZWF0ZXJUaGFuT3JFcXVhbDsKKyAgICBzdGF0aWMgY29uc3QgQ29uZGl0aW9uIExlc3NUaGFu
OworICAgIHN0YXRpYyBjb25zdCBDb25kaXRpb24gTGVzc1RoYW5PckVxdWFsOworICAgIHN0YXRp
YyBjb25zdCBDb25kaXRpb24gVUdyZWF0ZXJUaGFuOworICAgIHN0YXRpYyBjb25zdCBDb25kaXRp
b24gVUdyZWF0ZXJUaGFuT3JFcXVhbDsKKyAgICBzdGF0aWMgY29uc3QgQ29uZGl0aW9uIFVMZXNz
VGhhbjsKKyAgICBzdGF0aWMgY29uc3QgQ29uZGl0aW9uIFVMZXNzVGhhbk9yRXF1YWw7CisgICAg
c3RhdGljIGNvbnN0IENvbmRpdGlvbiBaZXJvOworICAgIHN0YXRpYyBjb25zdCBDb25kaXRpb24g
Tm9uWmVybzsKKyAgICBzdGF0aWMgY29uc3QgQ29uZGl0aW9uIE92ZXJmbG93OworICAgIHN0YXRp
YyBjb25zdCBDb25kaXRpb24gQWJvdmU7CisgICAgc3RhdGljIGNvbnN0IENvbmRpdGlvbiBBYm92
ZU9yRXF1YWw7CisgICAgc3RhdGljIGNvbnN0IENvbmRpdGlvbiBCZWxvdzsKKyAgICBzdGF0aWMg
Y29uc3QgQ29uZGl0aW9uIEJlbG93T3JFcXVhbDsKKyAgICBzdGF0aWMgY29uc3QgQ29uZGl0aW9u
IERvdWJsZUVxdWFsOworICAgIHN0YXRpYyBjb25zdCBDb25kaXRpb24gRG91YmxlTm90RXF1YWw7
CisgICAgc3RhdGljIGNvbnN0IENvbmRpdGlvbiBEb3VibGVHcmVhdGVyVGhhbjsKKyAgICBzdGF0
aWMgY29uc3QgQ29uZGl0aW9uIERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbDsKKyAgICBzdGF0aWMg
Y29uc3QgQ29uZGl0aW9uIERvdWJsZUxlc3NUaGFuOworICAgIHN0YXRpYyBjb25zdCBDb25kaXRp
b24gRG91YmxlTGVzc1RoYW5PckVxdWFsOworICAgIHN0YXRpYyBjb25zdCBDb25kaXRpb24gRG91
YmxlRXF1YWxPclVub3JkZXJlZDsKKyAgICBzdGF0aWMgY29uc3QgQ29uZGl0aW9uIERvdWJsZU5v
dEVxdWFsT3JVbm9yZGVyZWQ7CisgICAgc3RhdGljIGNvbnN0IENvbmRpdGlvbiBEb3VibGVHcmVh
dGVyVGhhbk9yVW5vcmRlcmVkOworICAgIHN0YXRpYyBjb25zdCBDb25kaXRpb24gRG91YmxlR3Jl
YXRlclRoYW5PckVxdWFsT3JVbm9yZGVyZWQ7CisgICAgc3RhdGljIGNvbnN0IENvbmRpdGlvbiBE
b3VibGVMZXNzVGhhbk9yVW5vcmRlcmVkOworICAgIHN0YXRpYyBjb25zdCBDb25kaXRpb24gRG91
YmxlTGVzc1RoYW5PckVxdWFsT3JVbm9yZGVyZWQ7CisgICAgc3RhdGljIGNvbnN0IENvbmRpdGlv
biBTaWduZWQ7CisgICAgc3RhdGljIGNvbnN0IFNjYWxlIFNjYWxlUHRyID0gVGltZXNGb3VyOwor
ICAgIHN0YXRpYyBjb25zdCBGUFJlZ2lzdGVySUQgZnNjcmF0Y2ggPSBTSDRSZWdpc3RlcnM6OmZy
MTA7CisgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgc3RhY2tQb2ludGVyUmVnaXN0ZXIgPSBT
SDRSZWdpc3RlcnM6OnNwOworICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIGxpbmtSZWdpc3Rl
ciA9IFNINFJlZ2lzdGVyczo6cHI7CisgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgc2NyYXRj
aFJlZzMgPSBTSDRSZWdpc3RlcnM6OnIxMzsKKworICAgIFJlZ2lzdGVySUQgY2xhaW1TY3JhdGNo
KCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX2Fzc2VtYmxlci5jbGFpbVNjcmF0Y2goKTsKKyAg
ICB9CisKKyAgICB2b2lkIHJlbGVhc2VTY3JhdGNoKFJlZ2lzdGVySUQgcmVnKQorICAgIHsKKyAg
ICAgICAgbV9hc3NlbWJsZXIucmVsZWFzZVNjcmF0Y2gocmVnKTsKKyAgICB9CisKKyAgICAvLyBJ
bnRlZ2VyIGFyaXRobWV0aWMgb3BlcmF0aW9ucworCisgICAgdm9pZCBhZGQzMihSZWdpc3RlcklE
IHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuYWRkbFJl
Z1JlZyhzcmMsIGRlc3QpOworICAgIH0KKworICAgIHZvaWQgYWRkMzIoSW1tMzIgaW1tLCBSZWdp
c3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBpZiAobV9hc3NlbWJsZXIuaXNJbW1lZGlhdGUo
aW1tLm1fdmFsdWUpKSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGRsSW1tOHIoaW1tLm1f
dmFsdWUsIGRlc3QpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIFJl
Z2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvYWRD
b25zdGFudChpbW0ubV92YWx1ZSwgc2NyKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuYWRkbFJlZ1Jl
ZyhzY3IsIGRlc3QpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgIH0KKworICAg
IHZvaWQgYWRkMzIoSW1tMzIgaW1tLCBSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQor
ICAgIHsKKyAgICAgICAgaWYgKHNyYyAhPSBkZXN0KQorICAgICAgICAgICAgbV9hc3NlbWJsZXIu
bW92bFJlZ1JlZyhzcmMsIGRlc3QpOworICAgICAgICBhZGQzMihpbW0sIGRlc3QpOworICAgIH0K
KworICAgIHZvaWQgYWRkMzIoSW1tMzIgaW1tLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAg
ICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBsb2FkMzIoYWRk
cmVzcywgc2NyKTsKKyAgICAgICAgYWRkMzIoaW1tLCBzY3IpOworICAgICAgICBzdG9yZTMyKHNj
ciwgYWRkcmVzcyk7CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgfQorCisgICAg
dm9pZCBhZGQzMihBZGRyZXNzIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAg
UmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgbG9hZDMyKHNyYywgc2Ny
KTsKKyAgICAgICAgbV9hc3NlbWJsZXIuYWRkbFJlZ1JlZyhzY3IsIGRlc3QpOworICAgICAgICBy
ZWxlYXNlU2NyYXRjaChzY3IpOworICAgIH0KKworICAgIHZvaWQgYW5kMzIoUmVnaXN0ZXJJRCBz
cmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmFuZGxSZWdS
ZWcoc3JjLCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIGFuZDMyKEltbTMyIGltbSwgUmVnaXN0
ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgaWYgKChpbW0ubV92YWx1ZSA8PSAyNTUpICYmIChp
bW0ubV92YWx1ZSA+PSAwKSAmJiAoZGVzdCA9PSBTSDRSZWdpc3RlcnM6OnIwKSkgeworICAgICAg
ICAgICAgbV9hc3NlbWJsZXIuYW5kbEltbThyKGltbS5tX3ZhbHVlLCBkZXN0KTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2Ny
YXRjaCgpOworICAgICAgICBtX2Fzc2VtYmxlci5sb2FkQ29uc3RhbnQoKGltbS5tX3ZhbHVlKSwg
c2NyKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuYW5kbFJlZ1JlZyhzY3IsIGRlc3QpOworICAgICAg
ICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgIH0KKworICAgIHZvaWQgbHNoaWZ0MzIoUmVnaXN0
ZXJJRCBzaGlmdGFtb3VudCwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3Nl
bWJsZXIuc2hsbFJlZ1JlZyhkZXN0LCBzaGlmdGFtb3VudCk7CisgICAgfQorCisgICAgdm9pZCBy
c2hpZnQzMihpbnQgaW1tLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBSZWdpc3Rl
cklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBtX2Fzc2VtYmxlci5sb2FkQ29uc3Rh
bnQoLWltbSwgc2NyKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuc2hhUmVnUmVnKGRlc3QsIHNjcik7
CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgfQorCisgICAgdm9pZCBsc2hpZnQz
MihJbW0zMiBpbW0sIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIGlmICgoaW1tLm1f
dmFsdWUgPT0gMSkgfHwgKGltbS5tX3ZhbHVlID09IDIpIHx8IChpbW0ubV92YWx1ZSA9PSA4KSB8
fCAoaW1tLm1fdmFsdWUgPT0gMTYpKSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zaGxsSW1t
OHIoaW1tLm1fdmFsdWUsIGRlc3QpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg
ICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIG1fYXNzZW1i
bGVyLmxvYWRDb25zdGFudChpbW0ubV92YWx1ZSwgc2NyKTsKKyAgICAgICAgbV9hc3NlbWJsZXIu
c2hsbFJlZ1JlZyhkZXN0LCBzY3IpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAg
IH0KKworICAgIHZvaWQgbXVsMzIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAg
ICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmltdWxsUmVnUmVnKHNyYywgZGVzdCk7CisgICAgICAg
IG1fYXNzZW1ibGVyLnN0c21hY2woZGVzdCk7CisgICAgfQorCisgICAgdm9pZCBtdWwzMihJbW0z
MiBpbW0sIFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBS
ZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBtb3ZlKGltbSwgc2NyKTsK
KyAgICAgICAgaWYgIChzcmMgIT0gZGVzdCkKKyAgICAgICAgICAgIG1vdmUoc3JjLCBkZXN0KTsK
KyAgICAgICAgbXVsMzIoc2NyLCAgZGVzdCk7CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7
CisgICAgfQorCisgICAgdm9pZCBub3QzMihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0
KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubm90bFJlZyhzcmMsIGRlc3QpOworICAgIH0K
KworICAgIHZvaWQgb3IzMihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsK
KyAgICAgICAgbV9hc3NlbWJsZXIub3JsUmVnUmVnKHNyYywgZGVzdCk7CisgICAgfQorCisgICAg
dm9pZCBvcjMyKEltbTMyIGltbSwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgaWYg
KChpbW0ubV92YWx1ZSA8PSAyNTUpICYmIChpbW0ubV92YWx1ZSA+PSAwKSAmJiAoZGVzdCA9PSBT
SDRSZWdpc3RlcnM6OnIwKSkgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIub3JsSW1tOHIoaW1t
Lm1fdmFsdWUsIGRlc3QpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAg
IFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIG1fYXNzZW1ibGVyLmxv
YWRDb25zdGFudChpbW0ubV92YWx1ZSwgc2NyKTsKKyAgICAgICAgbV9hc3NlbWJsZXIub3JsUmVn
UmVnKHNjciwgZGVzdCk7CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgfQorCisg
ICAgdm9pZCByc2hpZnQzMihSZWdpc3RlcklEIHNoaWZ0YW1vdW50LCBSZWdpc3RlcklEIGRlc3Qp
CisgICAgeworICAgICAgICBjb21wYXJlMzIoMzIsIHNoaWZ0YW1vdW50LCBFcXVhbCk7CisgICAg
ICAgIG1fYXNzZW1ibGVyLmVuc3VyZVNwYWNlKG1fYXNzZW1ibGVyLm1heEluc3RydWN0aW9uU2l6
ZSArIDQpOworICAgICAgICBtX2Fzc2VtYmxlci5icmFuY2goQlRfT1BDT0RFLCAxKTsKKyAgICAg
ICAgbV9hc3NlbWJsZXIubmVnKHNoaWZ0YW1vdW50LCBzaGlmdGFtb3VudCk7CisgICAgICAgIG1f
YXNzZW1ibGVyLnNoYVJlZ1JlZyhkZXN0LCBzaGlmdGFtb3VudCk7CisgICAgfQorCisgICAgdm9p
ZCByc2hpZnQzMihJbW0zMiBpbW0sIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIGlm
IChpbW0ubV92YWx1ZSAmIDB4MWYpCisgICAgICAgICAgICByc2hpZnQzMihpbW0ubV92YWx1ZSAm
IDB4MWYsIGRlc3QpOworICAgIH0KKworICAgIHZvaWQgc3ViMzIoUmVnaXN0ZXJJRCBzcmMsIFJl
Z2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnN1YmxSZWdSZWcoc3Jj
LCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIHN1YjMyKEltbTMyIGltbSwgQWJzb2x1dGVBZGRy
ZXNzIGFkZHJlc3MsIFJlZ2lzdGVySUQgc2NyYXRjaFJlZykKKyAgICB7CisgICAgICAgIFJlZ2lz
dGVySUQgcmVzdWx0ID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvYWRD
b25zdGFudChyZWludGVycHJldF9jYXN0PHVpbnQzMl90PihhZGRyZXNzLm1fcHRyKSwgc2NyYXRj
aFJlZyk7CisgICAgICAgIG1fYXNzZW1ibGVyLm1vdmxNZW1SZWcoc2NyYXRjaFJlZywgcmVzdWx0
KTsKKyAgICAgICAgaWYgKG1fYXNzZW1ibGVyLmlzSW1tZWRpYXRlKC1pbW0ubV92YWx1ZSkpCisg
ICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGRsSW1tOHIoLWltbS5tX3ZhbHVlLCByZXN1bHQpOwor
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmxvYWRDb25zdGFudChpbW0u
bV92YWx1ZSwgc2NyYXRjaFJlZzMpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuc3VibFJlZ1Jl
ZyhzY3JhdGNoUmVnMywgcmVzdWx0KTsKKyAgICAgICAgfQorICAgICAgICBzdG9yZTMyKHJlc3Vs
dCwgc2NyYXRjaFJlZyk7CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHJlc3VsdCk7CisgICAgfQor
CisgICAgdm9pZCBzdWIzMihJbW0zMiBpbW0sIEFic29sdXRlQWRkcmVzcyBhZGRyZXNzKQorICAg
IHsKKyAgICAgICAgUmVnaXN0ZXJJRCByZXN1bHQgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAg
UmVnaXN0ZXJJRCBzY3JhdGNoUmVnID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIG1fYXNzZW1i
bGVyLmxvYWRDb25zdGFudChyZWludGVycHJldF9jYXN0PHVpbnQzMl90PihhZGRyZXNzLm1fcHRy
KSwgc2NyYXRjaFJlZyk7CisgICAgICAgIG1fYXNzZW1ibGVyLm1vdmxNZW1SZWcoc2NyYXRjaFJl
ZywgcmVzdWx0KTsKKyAgICAgICAgaWYgKG1fYXNzZW1ibGVyLmlzSW1tZWRpYXRlKC1pbW0ubV92
YWx1ZSkpCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGRsSW1tOHIoLWltbS5tX3ZhbHVlLCBy
ZXN1bHQpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmxvYWRDb25z
dGFudChpbW0ubV92YWx1ZSwgc2NyYXRjaFJlZzMpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIu
c3VibFJlZ1JlZyhzY3JhdGNoUmVnMywgcmVzdWx0KTsKKyAgICAgICAgfQorICAgICAgICBzdG9y
ZTMyKHJlc3VsdCwgc2NyYXRjaFJlZyk7CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHJlc3VsdCk7
CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcmF0Y2hSZWcpOworICAgIH0KKworICAgIHZvaWQg
YWRkMzIoSW1tMzIgaW1tLCBBYnNvbHV0ZUFkZHJlc3MgYWRkcmVzcywgUmVnaXN0ZXJJRCBzY3Jh
dGNoUmVnKQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCByZXN1bHQgPSBjbGFpbVNjcmF0Y2go
KTsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9hZENvbnN0YW50KHJlaW50ZXJwcmV0X2Nhc3Q8dWlu
dDMyX3Q+KGFkZHJlc3MubV9wdHIpLCBzY3JhdGNoUmVnKTsKKyAgICAgICAgbV9hc3NlbWJsZXIu
bW92bE1lbVJlZyhzY3JhdGNoUmVnLCByZXN1bHQpOworICAgICAgICBpZiAobV9hc3NlbWJsZXIu
aXNJbW1lZGlhdGUoaW1tLm1fdmFsdWUpKQorICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRkbElt
bThyKGltbS5tX3ZhbHVlLCByZXN1bHQpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIG1f
YXNzZW1ibGVyLmxvYWRDb25zdGFudChpbW0ubV92YWx1ZSwgc2NyYXRjaFJlZzMpOworICAgICAg
ICAgICAgbV9hc3NlbWJsZXIuYWRkbFJlZ1JlZyhzY3JhdGNoUmVnMywgcmVzdWx0KTsKKyAgICAg
ICAgfQorICAgICAgICBzdG9yZTMyKHJlc3VsdCwgc2NyYXRjaFJlZyk7CisgICAgICAgIHJlbGVh
c2VTY3JhdGNoKHJlc3VsdCk7CisgICAgfQorCisgICAgdm9pZCBhZGQzMihJbW0zMiBpbW0sIEFi
c29sdXRlQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCByZXN1bHQg
PSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3JhdGNoUmVnID0gY2xhaW1T
Y3JhdGNoKCk7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvYWRDb25zdGFudChyZWludGVycHJldF9j
YXN0PHVpbnQzMl90PihhZGRyZXNzLm1fcHRyKSwgc2NyYXRjaFJlZyk7CisgICAgICAgIG1fYXNz
ZW1ibGVyLm1vdmxNZW1SZWcoc2NyYXRjaFJlZywgcmVzdWx0KTsKKyAgICAgICAgaWYgKG1fYXNz
ZW1ibGVyLmlzSW1tZWRpYXRlKGltbS5tX3ZhbHVlKSkKKyAgICAgICAgICAgIG1fYXNzZW1ibGVy
LmFkZGxJbW04cihpbW0ubV92YWx1ZSwgcmVzdWx0KTsKKyAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICBtX2Fzc2VtYmxlci5sb2FkQ29uc3RhbnQoaW1tLm1fdmFsdWUsIHNjcmF0Y2hSZWczKTsK
KyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZGxSZWdSZWcoc2NyYXRjaFJlZzMsIHJlc3VsdCk7
CisgICAgICAgIH0KKyAgICAgICAgc3RvcmUzMihyZXN1bHQsIHNjcmF0Y2hSZWcpOworICAgICAg
ICByZWxlYXNlU2NyYXRjaChyZXN1bHQpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3JhdGNo
UmVnKTsKKyAgICB9CisKKyAgICB2b2lkIHN1YjMyKEltbTMyIGltbSwgUmVnaXN0ZXJJRCBkZXN0
KQorICAgIHsKKyAgICAgICAgaWYgKG1fYXNzZW1ibGVyLmlzSW1tZWRpYXRlKC1pbW0ubV92YWx1
ZSkpIHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZGxJbW04cigtaW1tLm1fdmFsdWUsIGRl
c3QpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIFJlZ2lzdGVySUQg
c2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvYWRDb25zdGFudChp
bW0ubV92YWx1ZSwgc2NyKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuc3VibFJlZ1JlZyhzY3IsIGRl
c3QpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgIH0KKworICAgIHZvaWQgc3Vi
MzIoQWRkcmVzcyBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIFJlZ2lzdGVy
SUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIGxvYWQzMihzcmMsIHNjcik7CisgICAg
ICAgIG1fYXNzZW1ibGVyLnN1YmxSZWdSZWcoc2NyLCBkZXN0KTsKKyAgICAgICAgcmVsZWFzZVNj
cmF0Y2goc2NyKTsKKyAgICB9CisKKyAgICB2b2lkIHhvcjMyKFJlZ2lzdGVySUQgc3JjLCBSZWdp
c3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci54b3JsUmVnUmVnKHNyYywg
ZGVzdCk7CisgICAgfQorCisgICAgdm9pZCB4b3IzMihJbW0zMiBpbW0sIFJlZ2lzdGVySUQgc3Jj
RGVzdCkKKyAgICB7CisgICAgICAgIGlmICgoc3JjRGVzdCAhPSBTSDRSZWdpc3RlcnM6OnIwKSB8
fCAoaW1tLm1fdmFsdWUgPiAyNTUpIHx8IChpbW0ubV92YWx1ZSA8IDApKSB7CisgICAgICAgICAg
ICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICAgICAgbV9hc3NlbWJs
ZXIubG9hZENvbnN0YW50KChpbW0ubV92YWx1ZSksIHNjcik7CisgICAgICAgICAgICBtX2Fzc2Vt
Ymxlci54b3JsUmVnUmVnKHNjciwgc3JjRGVzdCk7CisgICAgICAgICAgICByZWxlYXNlU2NyYXRj
aChzY3IpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIG1fYXNzZW1i
bGVyLnhvcmxJbW04cihpbW0ubV92YWx1ZSwgc3JjRGVzdCk7CisgICAgfQorCisgICAgdm9pZCBj
b21wYXJlMzIoaW50IGltbSwgUmVnaXN0ZXJJRCBkc3QsIENvbmRpdGlvbiBjb25kKQorICAgIHsK
KyAgICAgICAgaWYgKCgoY29uZCA9PSBFcXVhbCkgfHwgKGNvbmQgPT0gTm90RXF1YWwpKSAmJiAo
ZHN0ID09IFNINFJlZ2lzdGVyczo6cjApICYmIG1fYXNzZW1ibGVyLmlzSW1tZWRpYXRlKGltbSkp
IHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmNtcEVxSW1tUjAoaW1tLCBkc3QsIGNvbmQpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0g
Y2xhaW1TY3JhdGNoKCk7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvYWRDb25zdGFudChpbW0sIHNj
cik7CisgICAgICAgIG1fYXNzZW1ibGVyLmNtcGxSZWdSZWcoc2NyLCBkc3QsIGNvbmQpOworICAg
ICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgIH0KKworICAgIHZvaWQgY29tcGFyZTMyKGlu
dCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBsZWZ0LCBDb25kaXRpb24gY29u
ZCkKKyAgICB7CisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAg
ICAgIGlmICghb2Zmc2V0KSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5tb3ZsTWVtUmVnKGJh
c2UsIHNjcik7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5jbXBsUmVnUmVnKHNjciwgbGVmdCwg
Y29uZCk7CisgICAgICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisgICAgICAgIGlmICgob2Zmc2V0IDwgMCkgfHwgKG9mZnNldCA+PSA2
NCkpIHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmxvYWRDb25zdGFudChvZmZzZXQsIHNjcik7
CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGRsUmVnUmVnKGJhc2UsIHNjcik7CisgICAgICAg
ICAgICBtX2Fzc2VtYmxlci5tb3ZsTWVtUmVnKHNjciwgc2NyKTsKKyAgICAgICAgICAgIG1fYXNz
ZW1ibGVyLmNtcGxSZWdSZWcoc2NyLCBsZWZ0LCBjb25kKTsKKyAgICAgICAgICAgIHJlbGVhc2VT
Y3JhdGNoKHNjcik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgbV9h
c3NlbWJsZXIubW92bE1lbVJlZyhvZmZzZXQgPj4gMiwgYmFzZSwgc2NyKTsKKyAgICAgICAgbV9h
c3NlbWJsZXIuY21wbFJlZ1JlZyhzY3IsIGxlZnQsIGNvbmQpOworICAgICAgICByZWxlYXNlU2Ny
YXRjaChzY3IpOworICAgIH0KKworICAgIHZvaWQgdGVzdEltbShpbnQgaW1tLCBpbnQgb2Zmc2V0
LCBSZWdpc3RlcklEIGJhc2UpCisgICAgeworICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWlt
U2NyYXRjaCgpOworICAgICAgICBSZWdpc3RlcklEIHNjcjEgPSBjbGFpbVNjcmF0Y2goKTsKKyAg
ICAgICAgaWYgKChvZmZzZXQgPCAwKSB8fCAob2Zmc2V0ID49IDY0KSkgeworICAgICAgICAgICAg
bV9hc3NlbWJsZXIubG9hZENvbnN0YW50KG9mZnNldCwgc2NyKTsKKyAgICAgICAgICAgIG1fYXNz
ZW1ibGVyLmFkZGxSZWdSZWcoYmFzZSwgc2NyKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLm1v
dmxNZW1SZWcoc2NyLCBzY3IpOworICAgICAgICB9IGVsc2UgaWYgKG9mZnNldCkKKyAgICAgICAg
ICAgIG1fYXNzZW1ibGVyLm1vdmxNZW1SZWcob2Zmc2V0ID4+IDIsIGJhc2UsIHNjcik7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLm1vdmxNZW1SZWcoYmFzZSwgc2NyKTsK
KyAgICAgICAgaWYgKG1fYXNzZW1ibGVyLmlzSW1tZWRpYXRlKGltbSkpCisgICAgICAgICAgICBt
X2Fzc2VtYmxlci5tb3ZJbW04KGltbSwgc2NyMSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IG1fYXNzZW1ibGVyLmxvYWRDb25zdGFudChpbW0sIHNjcjEpOworICAgICAgICBtX2Fzc2VtYmxl
ci50ZXN0bFJlZ1JlZyhzY3IsIHNjcjEpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOwor
ICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IxKTsKKyAgICB9CisKKyAgICB2b2lkIHRlc3RsSW1t
KGludCBpbW0sIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgaWYgKChkc3QgPT0gU0g0
UmVnaXN0ZXJzOjpyMCkgJiYgKGltbSA8PSAyNTUpICYmIChpbW0gPj0gMCkpIHsKKyAgICAgICAg
ICAgIG1fYXNzZW1ibGVyLnRlc3RsSW1tOHIoaW1tLCBkc3QpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7Cisg
ICAgICAgIG1fYXNzZW1ibGVyLmxvYWRDb25zdGFudChpbW0sIHNjcik7CisgICAgICAgIG1fYXNz
ZW1ibGVyLnRlc3RsUmVnUmVnKHNjciwgZHN0KTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2Ny
KTsKKyAgICB9CisKKyAgICB2b2lkIGNvbXBhcmUzMihSZWdpc3RlcklEIHJpZ2h0LCBpbnQgb2Zm
c2V0LCBSZWdpc3RlcklEIGJhc2UsIENvbmRpdGlvbiBjb25kKQorICAgIHsKKyAgICAgICAgaWYg
KCFvZmZzZXQpIHsKKyAgICAgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7
CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5tb3ZsTWVtUmVnKGJhc2UsIHNjcik7CisgICAgICAg
ICAgICBtX2Fzc2VtYmxlci5jbXBsUmVnUmVnKHJpZ2h0LCBzY3IsIGNvbmQpOworICAgICAgICAg
ICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
ICAgICAgICBpZiAoKG9mZnNldCA8IDApIHx8IChvZmZzZXQgPj0gNjQpKSB7CisgICAgICAgICAg
ICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICAgICAgbV9hc3NlbWJs
ZXIubG9hZENvbnN0YW50KG9mZnNldCwgc2NyKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFk
ZGxSZWdSZWcoYmFzZSwgc2NyKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLm1vdmxNZW1SZWco
c2NyLCBzY3IpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuY21wbFJlZ1JlZyhyaWdodCwgc2Ny
LCBjb25kKTsKKyAgICAgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2go
KTsKKyAgICAgICAgbV9hc3NlbWJsZXIubW92bE1lbVJlZyhvZmZzZXQgPj4gMiwgYmFzZSwgc2Ny
KTsKKyAgICAgICAgbV9hc3NlbWJsZXIuY21wbFJlZ1JlZyhyaWdodCwgc2NyLCBjb25kKTsKKyAg
ICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICB9CisKKyAgICB2b2lkIGNvbXBhcmUzMihp
bnQgaW1tLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIENvbmRpdGlvbiBjb25kKQorICAg
IHsKKyAgICAgICAgaWYgKCFvZmZzZXQpIHsKKyAgICAgICAgICAgIFJlZ2lzdGVySUQgc2NyID0g
Y2xhaW1TY3JhdGNoKCk7CisgICAgICAgICAgICBSZWdpc3RlcklEIHNjcjEgPSBjbGFpbVNjcmF0
Y2goKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLm1vdmxNZW1SZWcoYmFzZSwgc2NyKTsKKyAg
ICAgICAgICAgIG1fYXNzZW1ibGVyLmxvYWRDb25zdGFudChpbW0sIHNjcjEpOworICAgICAgICAg
ICAgbV9hc3NlbWJsZXIuY21wbFJlZ1JlZyhzY3IxLCBzY3IsIGNvbmQpOworICAgICAgICAgICAg
cmVsZWFzZVNjcmF0Y2goc2NyMSk7CisgICAgICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlmICgob2Zmc2V0IDwgMCkg
fHwgKG9mZnNldCA+PSA2NCkpIHsKKyAgICAgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1T
Y3JhdGNoKCk7CisgICAgICAgICAgICBSZWdpc3RlcklEIHNjcjEgPSBjbGFpbVNjcmF0Y2goKTsK
KyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmxvYWRDb25zdGFudChvZmZzZXQsIHNjcik7CisgICAg
ICAgICAgICBtX2Fzc2VtYmxlci5hZGRsUmVnUmVnKGJhc2UsIHNjcik7CisgICAgICAgICAgICBt
X2Fzc2VtYmxlci5tb3ZsTWVtUmVnKHNjciwgc2NyKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVy
LmxvYWRDb25zdGFudChpbW0sIHNjcjEpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuY21wbFJl
Z1JlZyhzY3IxLCBzY3IsIGNvbmQpOworICAgICAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyMSk7
CisgICAgICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAg
ICAgIFJlZ2lzdGVySUQgc2NyMSA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBtX2Fzc2VtYmxl
ci5tb3ZsTWVtUmVnKG9mZnNldCA+PiAyLCBiYXNlLCBzY3IpOworICAgICAgICBtX2Fzc2VtYmxl
ci5sb2FkQ29uc3RhbnQoaW1tLCBzY3IxKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuY21wbFJlZ1Jl
ZyhzY3IxLCBzY3IsIGNvbmQpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IxKTsKKyAgICAg
ICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICB9CisKKyAgICAvLyBNZW1vcnkgYWNjZXNzIG9w
ZXJhdGlvbgorICAgIAorICAgIHZvaWQgbG9hZDMyKEltcGxpY2l0QWRkcmVzcyBhZGRyZXNzLCBS
ZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBsb2FkMzIoYWRkcmVzcy5iYXNlLCBhZGRy
ZXNzLm9mZnNldCwgZGVzdCk7CisgICAgfQorCisgICAgdm9pZCBsb2FkOChJbXBsaWNpdEFkZHJl
c3MgYWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbG9hZDgoYWRkcmVz
cy5iYXNlLCBhZGRyZXNzLm9mZnNldCwgZGVzdCk7CisgICAgfQorCisgICAgdm9pZCBsb2FkMzIo
QmFzZUluZGV4IGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIFJlZ2lz
dGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIG1vdmUoYWRkcmVzcy5pbmRleCwg
c2NyKTsKKyAgICAgICAgbHNoaWZ0MzIoSW1tMzIoYWRkcmVzcy5zY2FsZSksIHNjcik7CisgICAg
ICAgIGFkZDMyKGFkZHJlc3MuYmFzZSwgc2NyKTsKKyAgICAgICAgbG9hZDMyKHNjciwgYWRkcmVz
cy5vZmZzZXQsIGRlc3QpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgIH0KKwor
ICAgIHZvaWQgbG9hZDMyKHZvaWQqIGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7Cisg
ICAgICAgIG1fYXNzZW1ibGVyLmxvYWRDb25zdGFudChyZWludGVycHJldF9jYXN0PHVpbnQzMl90
PihhZGRyZXNzKSwgZGVzdCk7CisgICAgICAgIG1fYXNzZW1ibGVyLm1vdmxNZW1SZWcoZGVzdCwg
ZGVzdCk7CisgICAgfQorCisgICAgdm9pZCBsb2FkMzIoUmVnaXN0ZXJJRCBiYXNlLCBpbnQgb2Zm
c2V0LCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBpZiAoIW9mZnNldCkgeworICAg
ICAgICAgICAgbV9hc3NlbWJsZXIubW92bE1lbVJlZyhiYXNlLCBkZXN0KTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAoKG9mZnNldCA+PSAwKSAmJiAob2Zmc2V0
IDwgNjQpKSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5tb3ZsTWVtUmVnKG9mZnNldCA+PiAy
LCBiYXNlLCBkZXN0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBp
ZiAoKGRlc3QgPT0gU0g0UmVnaXN0ZXJzOjpyMCkgJiYgKGRlc3QgIT0gYmFzZSkpIHsKKyAgICAg
ICAgICAgIG1fYXNzZW1ibGVyLmxvYWRDb25zdGFudCgob2Zmc2V0KSwgZGVzdCk7CisgICAgICAg
ICAgICBtX2Fzc2VtYmxlci5tb3ZsUjBtcihiYXNlLCBkZXN0KTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgICAgICBSZWdpc3RlcklEIHNjcjsKKyAgICAgICAgaWYgKGRlc3Qg
PT0gYmFzZSkKKyAgICAgICAgICAgIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBzY3IgPSBkZXN0OworICAgICAgICBtX2Fzc2VtYmxlci5sb2FkQ29uc3Rh
bnQoKG9mZnNldCksIHNjcik7CisgICAgICAgIG1fYXNzZW1ibGVyLmFkZGxSZWdSZWcoYmFzZSwg
c2NyKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubW92bE1lbVJlZyhzY3IsIGRlc3QpOworICAgICAg
ICBpZiAoZGVzdCA9PSBiYXNlKQorICAgICAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAg
ICB9CisKKyAgICB2b2lkIGxvYWQ4KFJlZ2lzdGVySUQgYmFzZSwgaW50IG9mZnNldCwgUmVnaXN0
ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgaWYgKCFvZmZzZXQpIHsKKyAgICAgICAgICAgIG1f
YXNzZW1ibGVyLm1vdmJNZW1SZWcoYmFzZSwgZGVzdCk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKChvZmZzZXQgPiAwKSAmJiAob2Zmc2V0IDwgNjQpICYmIChk
ZXN0ID09IFNINFJlZ2lzdGVyczo6cjApKSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5tb3Zi
TWVtUmVnKG9mZnNldCwgYmFzZSwgZGVzdCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKyAgICAgICAgaWYgKGJhc2UgIT0gZGVzdCkgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIu
bG9hZENvbnN0YW50KChvZmZzZXQpLCBkZXN0KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFk
ZGxSZWdSZWcoYmFzZSwgZGVzdCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5tb3ZiTWVtUmVn
KGRlc3QsIGRlc3QpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIFJl
Z2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvYWRD
b25zdGFudCgob2Zmc2V0KSwgc2NyKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuYWRkbFJlZ1JlZyhi
YXNlLCBzY3IpOworICAgICAgICBtX2Fzc2VtYmxlci5tb3ZiTWVtUmVnKHNjciwgZGVzdCk7Cisg
ICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgfQorCisgICAgdm9pZCBsb2FkMzIoUmVn
aXN0ZXJJRCByMCwgUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKHIwID09IFNINFJlZ2lzdGVyczo6cjApOworICAgICAgICBtX2Fzc2VtYmxlci5t
b3ZsUjBtcihzcmMsIGRzdCk7CisgICAgfQorCisgICAgdm9pZCBsb2FkMzIoUmVnaXN0ZXJJRCBz
cmMsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubW92bE1lbVJl
ZyhzcmMsIGRzdCk7CisgICAgfQorCisgICAgdm9pZCBsb2FkMTYoSW1wbGljaXRBZGRyZXNzIGFk
ZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgIH0KKyAKKyAgICB2b2lkIGxvYWQxNihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJ
RCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubW92d01lbVJlZyhzcmMsIGRlc3Qp
OworICAgIH0KKworICAgIHZvaWQgbG9hZDE2KFJlZ2lzdGVySUQgcjAsIFJlZ2lzdGVySUQgc3Jj
LCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBBU1NFUlQocjAgPT0gU0g0UmVnaXN0
ZXJzOjpyMCk7CisgICAgICAgIG1fYXNzZW1ibGVyLm1vdndSMG1yKHNyYywgZGVzdCk7CisgICAg
fQorCisgICAgdm9pZCBsb2FkMTYoQmFzZUluZGV4IGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkK
KyAgICB7CisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAg
IG1vdmUoYWRkcmVzcy5pbmRleCwgc2NyKTsKKyAgICAgICAgbHNoaWZ0MzIoSW1tMzIoYWRkcmVz
cy5zY2FsZSksIHNjcik7CisgICAgICAgIGlmIChhZGRyZXNzLm9mZnNldCkKKyAgICAgICAgICAg
IGFkZDMyKEltbTMyKGFkZHJlc3Mub2Zmc2V0KSwgc2NyKTsKKyAgICAgICAgaWYgKHNjciA9PSBT
SDRSZWdpc3RlcnM6OnIwKQorICAgICAgICAgICAgbV9hc3NlbWJsZXIubW92d1IwbXIoYWRkcmVz
cy5iYXNlLCBzY3IpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGFkZDMyKGFkZHJlc3Mu
YmFzZSwgc2NyKTsKKyAgICAgICAgICAgIGxvYWQxNihzY3IsIHNjcik7CisgICAgICAgIH0KKyAg
ICAgICAgZXh0dXcoc2NyLCBkZXN0KTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAg
ICB9CisKKyAgICB2b2lkIHN0b3JlMzIoUmVnaXN0ZXJJRCBzcmMsIEltcGxpY2l0QWRkcmVzcyBh
ZGRyZXNzKQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsK
KyAgICAgICAgc3RvcmUzMihzcmMsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UsIHNjcik7
CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgfQorCisgICAgdm9pZCBzdG9yZTMy
KFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQg
c2NyKQorICAgIHsKKyAgICAgICAgaWYgKCFvZmZzZXQpIHsKKyAgICAgICAgICAgIG1fYXNzZW1i
bGVyLm1vdmxSZWdNZW0oc3JjLCBiYXNlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorICAgICAgICBpZiAoKG9mZnNldCA+PTApICYmIChvZmZzZXQgPCA2NCkpIHsKKyAgICAgICAg
ICAgIG1fYXNzZW1ibGVyLm1vdmxSZWdNZW0oc3JjLCBvZmZzZXQgPj4gMiwgYmFzZSk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgbV9hc3NlbWJsZXIubG9hZENvbnN0
YW50KChvZmZzZXQpLCBzY3IpOworICAgICAgICBpZiAoc2NyID09IFNINFJlZ2lzdGVyczo6cjAp
IHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLm1vdmxSZWdNZW1yMChzcmMsIGJhc2UpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIG1fYXNzZW1ibGVyLmFkZGxSZWdS
ZWcoYmFzZSwgc2NyKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubW92bFJlZ01lbShzcmMsIHNjcik7
CisgICAgfQorCisgICAgdm9pZCBzdG9yZTMyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIG9m
ZnNldCwgUmVnaXN0ZXJJRCBiYXNlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG9mZnNldCA9PSBT
SDRSZWdpc3RlcnM6OnIwKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubW92bFJlZ01lbXIwKHNyYywg
YmFzZSk7CisgICAgfQorCisgICAgdm9pZCBzdG9yZTMyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3Rl
cklEIGRzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLm1vdmxSZWdNZW0oc3JjLCBkc3Qp
OworICAgIH0KKworICAgIHZvaWQgc3RvcmUzMihJbW0zMiBpbW0sIEltcGxpY2l0QWRkcmVzcyBh
ZGRyZXNzKQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsK
KyAgICAgICAgUmVnaXN0ZXJJRCBzY3IxID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIG1fYXNz
ZW1ibGVyLmxvYWRDb25zdGFudCgoaW1tLm1fdmFsdWUpLCBzY3IpOworICAgICAgICBzdG9yZTMy
KHNjciwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSwgc2NyMSk7CisgICAgICAgIHJlbGVh
c2VTY3JhdGNoKHNjcik7CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcjEpOworICAgIH0KKwor
ICAgIHZvaWQgc3RvcmUzMihSZWdpc3RlcklEIHNyYywgQmFzZUluZGV4IGFkZHJlc3MpCisgICAg
eworICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBtb3Zl
KGFkZHJlc3MuaW5kZXgsIHNjcik7CisgICAgICAgIAorICAgICAgICBsc2hpZnQzMihJbW0zMihh
ZGRyZXNzLnNjYWxlKSwgc2NyKTsKKyAgICAgICAgYWRkMzIoYWRkcmVzcy5iYXNlLCBzY3IpOwor
ICAgICAgICBzdG9yZTMyKHNyYywgQWRkcmVzcyhzY3IsIGFkZHJlc3Mub2Zmc2V0KSk7CisgICAg
ICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgfQorCisgICAgdm9pZCBzdG9yZTMyKEltbTMy
IGltbSwgdm9pZCogYWRkcmVzcykKKyAgICB7CisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xh
aW1TY3JhdGNoKCk7CisgICAgICAgIFJlZ2lzdGVySUQgc2NyMSA9IGNsYWltU2NyYXRjaCgpOwor
ICAgICAgICBtX2Fzc2VtYmxlci5sb2FkQ29uc3RhbnQoKGltbS5tX3ZhbHVlKSwgc2NyKTsKKyAg
ICAgICAgbV9hc3NlbWJsZXIubG9hZENvbnN0YW50KHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3Q+
KGFkZHJlc3MpLCBzY3IxKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubW92bE1lbVJlZyhzY3IsIHNj
cjEpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgICAgICByZWxlYXNlU2NyYXRj
aChzY3IxKTsKKyAgICB9CisKKyAgICB2b2lkIHN0b3JlMzIoUmVnaXN0ZXJJRCBzcmMsIHZvaWQq
IGFkZHJlc3MpCisgICAgeworICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgp
OworICAgICAgICBtX2Fzc2VtYmxlci5sb2FkQ29uc3RhbnQocmVpbnRlcnByZXRfY2FzdDx1aW50
MzJfdD4oYWRkcmVzcyksIHNjcik7CisgICAgICAgIG1fYXNzZW1ibGVyLm1vdmxNZW1SZWcoc3Jj
LCBzY3IpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgIH0KKworICAgIERhdGFM
YWJlbDMyIGxvYWQzMldpdGhBZGRyZXNzT2Zmc2V0UGF0Y2goQWRkcmVzcyBhZGRyZXNzLCBSZWdp
c3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRj
aCgpOworICAgICAgICBEYXRhTGFiZWwzMiBsYWJlbCh0aGlzKTsKKyAgICAgICAgbV9hc3NlbWJs
ZXIubG9hZENvbnN0YW50VW5SZXVzYWJsZShhZGRyZXNzLm9mZnNldCwgc2NyKTsKKyAgICAgICAg
bV9hc3NlbWJsZXIuYWRkbFJlZ1JlZyhhZGRyZXNzLmJhc2UsIHNjcik7CisgICAgICAgIG1fYXNz
ZW1ibGVyLm1vdmxNZW1SZWcoc2NyLCBkZXN0KTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2Ny
KTsKKyAgICAgICAgcmV0dXJuIGxhYmVsOworICAgIH0KKworICAgIERhdGFMYWJlbDMyIHN0b3Jl
MzJXaXRoQWRkcmVzc09mZnNldFBhdGNoKFJlZ2lzdGVySUQgc3JjLCBBZGRyZXNzIGFkZHJlc3Mp
CisgICAgeworICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAg
ICBEYXRhTGFiZWwzMiBsYWJlbCh0aGlzKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9hZENvbnN0
YW50VW5SZXVzYWJsZShhZGRyZXNzLm9mZnNldCwgc2NyKTsKKyAgICAgICAgbV9hc3NlbWJsZXIu
YWRkbFJlZ1JlZyhhZGRyZXNzLmJhc2UsIHNjcik7CisgICAgICAgIG1fYXNzZW1ibGVyLm1vdmxS
ZWdNZW0oc3JjLCBzY3IpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgICAgICBy
ZXR1cm4gbGFiZWw7CisgICAgfQorCisgICAgIC8vIEZsb2F0aW5nLXBvaW50IG9wZXJhdGlvbnMK
KworICAgIGJvb2wgc3VwcG9ydHNGbG9hdGluZ1BvaW50KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsg
fQorICAgIGJvb2wgc3VwcG9ydHNGbG9hdGluZ1BvaW50VHJ1bmNhdGUoKSBjb25zdCB7IHJldHVy
biB0cnVlOyB9CisgICAgYm9vbCBzdXBwb3J0c0Zsb2F0aW5nUG9pbnRTcXJ0KCkgY29uc3QgeyBy
ZXR1cm4gdHJ1ZTsgfQorCisgICAgdm9pZCBsb2FkRG91YmxlKEltcGxpY2l0QWRkcmVzcyBhZGRy
ZXNzLCBGUFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0g
Y2xhaW1TY3JhdGNoKCk7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvYWRDb25zdGFudChhZGRyZXNz
Lm9mZnNldCwgc2NyKTsKKyAgICAgICAgaWYgKGFkZHJlc3MuYmFzZSA9PSBTSDRSZWdpc3RlcnM6
OnIwKSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5mbW92c1JlYWRyMHIoc2NyLCAoRlBSZWdp
c3RlcklEKShkZXN0ICsgMSkpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRkbEltbThyKDQs
IHNjcik7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5mbW92c1JlYWRyMHIoc2NyLCBkZXN0KTsK
KyAgICAgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICAgICAgbV9hc3NlbWJsZXIuYWRkbFJlZ1JlZyhhZGRyZXNzLmJhc2UsIHNj
cik7CisgICAgICAgIG1fYXNzZW1ibGVyLmZtb3ZzUmVhZHJtaW5jKHNjciwgKEZQUmVnaXN0ZXJJ
RCkoZGVzdCArIDEpKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuZm1vdnNSZWFkcm0oc2NyLCBkZXN0
KTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICB9CisKKyAgICB2b2lkIGxvYWRE
b3VibGUoY29uc3Qgdm9pZCogYWRkcmVzcywgRlBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAg
ICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBtX2Fzc2VtYmxl
ci5sb2FkQ29uc3RhbnQocmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdD4oYWRkcmVzcyksIHNjcik7
CisgICAgICAgIG1fYXNzZW1ibGVyLmZtb3ZzUmVhZHJtaW5jKHNjciwgKEZQUmVnaXN0ZXJJRCko
ZGVzdCArIDEpKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuZm1vdnNSZWFkcm0oc2NyLCBkZXN0KTsK
KyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICB9CisKKyAgICB2b2lkIHN0b3JlRG91
YmxlKEZQUmVnaXN0ZXJJRCBzcmMsIEltcGxpY2l0QWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAg
ICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgbV9hc3NlbWJs
ZXIubG9hZENvbnN0YW50KGFkZHJlc3Mub2Zmc2V0LCBzY3IpOworICAgICAgICBtX2Fzc2VtYmxl
ci5hZGRsUmVnUmVnKGFkZHJlc3MuYmFzZSwgc2NyKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuZm1v
dnNXcml0ZXJtKChGUFJlZ2lzdGVySUQpKHNyYyArIDEpLCBzY3IpOworICAgICAgICBtX2Fzc2Vt
Ymxlci5hZGRsSW1tOHIoNCwgc2NyKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuZm1vdnNXcml0ZXJt
KHNyYywgc2NyKTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICB9CisKKyAgICB2
b2lkIGFkZERvdWJsZShGUFJlZ2lzdGVySUQgc3JjLCBGUFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7
CisgICAgICAgIG1fYXNzZW1ibGVyLmRhZGRSZWdSZWcoc3JjLCBkZXN0KTsKKyAgICB9CisKKyAg
ICB2b2lkIGFkZERvdWJsZShBZGRyZXNzIGFkZHJlc3MsIEZQUmVnaXN0ZXJJRCBkZXN0KQorICAg
IHsKKyAgICAgICAgbG9hZERvdWJsZShhZGRyZXNzLCBmc2NyYXRjaCk7CisgICAgICAgIGFkZERv
dWJsZShmc2NyYXRjaCwgZGVzdCk7CisgICAgfQorCisgICAgdm9pZCBzdWJEb3VibGUoRlBSZWdp
c3RlcklEIHNyYywgRlBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxl
ci5kc3ViUmVnUmVnKHNyYywgZGVzdCk7CisgICAgfQorCisgICAgdm9pZCBzdWJEb3VibGUoQWRk
cmVzcyBhZGRyZXNzLCBGUFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIGxvYWREb3Vi
bGUoYWRkcmVzcywgZnNjcmF0Y2gpOworICAgICAgICBzdWJEb3VibGUoZnNjcmF0Y2gsIGRlc3Qp
OworICAgIH0KKworICAgIHZvaWQgbXVsRG91YmxlKEZQUmVnaXN0ZXJJRCBzcmMsIEZQUmVnaXN0
ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuZG11bFJlZ1JlZyhzcmMsIGRl
c3QpOworICAgIH0KKworICAgIHZvaWQgbXVsRG91YmxlKEFkZHJlc3MgYWRkcmVzcywgRlBSZWdp
c3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBsb2FkRG91YmxlKGFkZHJlc3MsIGZzY3JhdGNo
KTsKKyAgICAgICAgbXVsRG91YmxlKGZzY3JhdGNoLCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lk
IGRpdkRvdWJsZShGUFJlZ2lzdGVySUQgc3JjLCBGUFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7Cisg
ICAgICAgIG1fYXNzZW1ibGVyLmRkaXZSZWdSZWcoc3JjLCBkZXN0KTsKKyAgICB9CisKKyAgICB2
b2lkIGNvbnZlcnRJbnQzMlRvRG91YmxlKFJlZ2lzdGVySUQgc3JjLCBGUFJlZ2lzdGVySUQgZGVz
dCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxkc3JtZnB1bChzcmMpOworICAgICAgICBt
X2Fzc2VtYmxlci5mbG9hdGZwdWxEcmVnKGRlc3QpOworICAgIH0KKworICAgIHZvaWQgY29udmVy
dEludDMyVG9Eb3VibGUoQWJzb2x1dGVBZGRyZXNzIHNyYywgRlBSZWdpc3RlcklEIGRlc3QpCisg
ICAgeworICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBt
X2Fzc2VtYmxlci5sb2FkQ29uc3RhbnQoKHVuc2lnbmVkIGludClzcmMubV9wdHIsIHNjcik7Cisg
ICAgICAgIG1fYXNzZW1ibGVyLmxkc3JtZnB1bChzY3IpOworICAgICAgICBtX2Fzc2VtYmxlci5m
bG9hdGZwdWxEcmVnKGRlc3QpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgIH0K
KworICAgIHZvaWQgY29udmVydEludDMyVG9Eb3VibGUoQWRkcmVzcyBzcmMsIEZQUmVnaXN0ZXJJ
RCBkZXN0KQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsK
KyAgICAgICAgbG9hZDMyKHNyYywgc2NyKTsKKyAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUo
c2NyLCBkZXN0KTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICB9CisKKyAgICB2
b2lkIGxvYWQzMldpdGhVbmFsaWduZWRIYWxmV29yZHMoQmFzZUluZGV4IGFkZHJlc3MsIFJlZ2lz
dGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNo
KCk7CisgICAgICAgIG1vdmUoYWRkcmVzcy5pbmRleCwgc2NyKTsKKyAgICAgICAgbHNoaWZ0MzIo
SW1tMzIoYWRkcmVzcy5zY2FsZSksIHNjcik7CisgICAgICAgIGFkZDMyKGFkZHJlc3MuYmFzZSwg
c2NyKTsKKyAgICAgICAgaWYgKGFkZHJlc3Mub2Zmc2V0KQorICAgICAgICAgICAgYWRkMzIoSW1t
MzIoYWRkcmVzcy5vZmZzZXQpLCBzY3IpOworICAgICAgICBSZWdpc3RlcklEIHNjcjEgPSBjbGFp
bVNjcmF0Y2goKTsKKyAgICAgICAgbG9hZDE2KHNjciwgc2NyMSk7CisgICAgICAgIGFkZDMyKElt
bTMyKDIpLCBzY3IpOworICAgICAgICBsb2FkMTYoc2NyLCBkZXN0KTsKKyAgICAgICAgbW92ZShJ
bW0zMigxNiksIHNjcik7CisgICAgICAgIG1fYXNzZW1ibGVyLnNobGxSZWdSZWcoZGVzdCwgc2Ny
KTsKKyAgICAgICAgb3IzMihzY3IxLCBkZXN0KTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2Ny
KTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyMSk7CisgICAgfQorCisgICAgSnVtcCBicmFu
Y2gzMldpdGhVbmFsaWduZWRIYWxmV29yZHMoQ29uZGl0aW9uIGNvbmQsIEJhc2VJbmRleCBsZWZ0
LCBJbW0zMiByaWdodCkKKyAgICB7CisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gc2NyYXRjaFJl
ZzM7CisgICAgICAgIGxvYWQzMldpdGhVbmFsaWduZWRIYWxmV29yZHMobGVmdCwgc2NyKTsKKyAg
ICAgICAgaWYgKCgoY29uZCA9PSBFcXVhbCkgfHwgKGNvbmQgPT0gTm90RXF1YWwpKSAmJiAhcmln
aHQubV92YWx1ZSkKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnRlc3RsUmVnUmVnKHNjciwgc2Ny
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY29tcGFyZTMyKHJpZ2h0Lm1fdmFsdWUsIHNj
ciwgY29uZCk7CisgICAgICAgIGlmIChjb25kID09IE5vdEVxdWFsKQorICAgICAgICAgICAgcmV0
dXJuIGJyYW5jaEZhbHNlKCk7CisgICAgICAgIHJldHVybiBicmFuY2hUcnVlKCk7CisgICAgfQor
CisgICAgSnVtcCBicmFuY2hEb3VibGVOb25aZXJvKEZQUmVnaXN0ZXJJRCByZWcsIEZQUmVnaXN0
ZXJJRCBzY3JhdGNoKQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0
Y2goKTsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IxID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAg
IG1fYXNzZW1ibGVyLm1vdkltbTgoMCwgc2NyKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubGRzcm1m
cHVsKHNjcik7CisgICAgICAgIG1fYXNzZW1ibGVyLmZsb2F0ZnB1bERyZWcoc2NyYXRjaCk7Cisg
ICAgICAgIG1fYXNzZW1ibGVyLmRjbXBwZXEoc2NyYXRjaCwgcmVnKTsKKyAgICAgICAgbV9hc3Nl
bWJsZXIuZW5zdXJlU3BhY2UobV9hc3NlbWJsZXIubWF4SW5zdHJ1Y3Rpb25TaXplICsgMjAsIHNp
emVvZih1aW50MzJfdCkpOworICAgICAgICBtX2Fzc2VtYmxlci5icmFuY2goQlRfT1BDT0RFLCA3
KTsKKyAgICAgICAgbV9hc3NlbWJsZXIuc3RzZnBzY3Ioc2NyKTsKKyAgICAgICAgbV9hc3NlbWJs
ZXIubW92SW1tOCgweDQwLCBzY3IxKTsKKyAgICAgICAgYW5kMzIoc2NyMSwgc2NyKTsKKyAgICAg
ICAgbV9hc3NlbWJsZXIuY21wbFJlZ1JlZyhzY3IsIHNjcjEsIEVxdWFsKTsKKyAgICAgICAgcmVs
ZWFzZVNjcmF0Y2goc2NyKTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyMSk7CisgICAgICAg
IHJldHVybiBicmFuY2hGYWxzZSgpOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoRG91YmxlWmVy
b09yTmFOKEZQUmVnaXN0ZXJJRCByZWcsIEZQUmVnaXN0ZXJJRCBzY3JhdGNoKQorICAgIHsKKyAg
ICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgbV9hc3NlbWJs
ZXIubW92SW1tOCgwLCBzY3IpOworICAgICAgICBtX2Fzc2VtYmxlci5sZHNybWZwdWwoc2NyKTsK
KyAgICAgICAgbV9hc3NlbWJsZXIuZmxvYXRmcHVsRHJlZyhzY3JhdGNoKTsKKyAgICAgICAgcmVs
ZWFzZVNjcmF0Y2goc2NyKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaERvdWJsZShEb3VibGVFcXVh
bE9yVW5vcmRlcmVkLCByZWcsIHNjcmF0Y2gpOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoRG91
YmxlKENvbmRpdGlvbiBjb25kLCBGUFJlZ2lzdGVySUQgbGVmdCwgRlBSZWdpc3RlcklEIHJpZ2h0
KQorICAgIHsKKyAgICAgICAgaWYgKGNvbmQgPT0gRG91YmxlRXF1YWwpIHsKKyAgICAgICAgICAg
IFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxl
ci5sb2FkQ29uc3RhbnQoX19mcHNjcl92YWx1ZXNbMV0sIHNjcik7CisgICAgICAgICAgICBtX2Fz
c2VtYmxlci5sZHNmcHNjcihzY3IpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuZGNtcHBlcShy
aWdodCwgbGVmdCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5sZHNmcHNjcihzY3IpOworICAg
ICAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICAgICAgICAgIHJldHVybiBicmFuY2hU
cnVlKCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNvbmQgPT0gRG91YmxlTm90RXF1YWwpIHsK
KyAgICAgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgICAg
ICBSZWdpc3RlcklEIHNjcjEgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgICAgIG1fYXNzZW1i
bGVyLmxvYWRDb25zdGFudChfX2Zwc2NyX3ZhbHVlc1sxXSwgc2NyYXRjaFJlZzMpOworICAgICAg
ICAgICAgbV9hc3NlbWJsZXIubGRzZnBzY3Ioc2NyYXRjaFJlZzMpOworICAgICAgICAgICAgbV9h
c3NlbWJsZXIuZGNtcHBlcShyaWdodCwgbGVmdCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5l
bnN1cmVTcGFjZShtX2Fzc2VtYmxlci5tYXhJbnN0cnVjdGlvblNpemUgKyAxOCwgc2l6ZW9mKHVp
bnQzMl90KSk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5icmFuY2goQlRfT1BDT0RFLCA4KTsK
KyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnN0c2Zwc2NyKHNjcik7CisgICAgICAgICAgICBtX2Fz
c2VtYmxlci5sZHNmcHNjcihzY3JhdGNoUmVnMyk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5t
b3ZJbW04KDB4NDAsIHNjcjEpOworICAgICAgICAgICAgYW5kMzIoc2NyMSwgc2NyKTsKKyAgICAg
ICAgICAgIG1fYXNzZW1ibGVyLmNtcGxSZWdSZWcoc2NyLCBzY3IxLCBFcXVhbCk7CisgICAgICAg
ICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgICAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2Ny
MSk7CisgICAgICAgICAgICByZXR1cm4gYnJhbmNoRmFsc2UoKTsKKyAgICAgICAgfQorICAgICAg
ICBpZiAoY29uZCA9PSBEb3VibGVHcmVhdGVyVGhhbikgeworICAgICAgICAgICAgUmVnaXN0ZXJJ
RCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmxvYWRDb25z
dGFudChfX2Zwc2NyX3ZhbHVlc1sxXSwgc2NyKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmxk
c2Zwc2NyKHNjcik7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5kY21wcGd0KHJpZ2h0LCBsZWZ0
KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmxkc2Zwc2NyKHNjcik7CisgICAgICAgICAgICBy
ZWxlYXNlU2NyYXRjaChzY3IpOworICAgICAgICAgICAgcmV0dXJuIGJyYW5jaFRydWUoKTsKKyAg
ICAgICAgfQorICAgICAgICBpZiAoY29uZCA9PSBEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWwpIHsK
KyAgICAgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgICAg
ICBSZWdpc3RlcklEIHNjcjEgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgICAgIG1fYXNzZW1i
bGVyLmxvYWRDb25zdGFudChfX2Zwc2NyX3ZhbHVlc1sxXSwgc2NyYXRjaFJlZzMpOworICAgICAg
ICAgICAgbV9hc3NlbWJsZXIubGRzZnBzY3Ioc2NyYXRjaFJlZzMpOworICAgICAgICAgICAgbV9h
c3NlbWJsZXIuZGNtcHBndChsZWZ0LCByaWdodCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5l
bnN1cmVTcGFjZShtX2Fzc2VtYmxlci5tYXhJbnN0cnVjdGlvblNpemUgKyAxOCwgc2l6ZW9mKHVp
bnQzMl90KSk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5icmFuY2goQlRfT1BDT0RFLCA4KTsK
KyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnN0c2Zwc2NyKHNjcik7CisgICAgICAgICAgICBtX2Fz
c2VtYmxlci5sZHNmcHNjcihzY3JhdGNoUmVnMyk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5t
b3ZJbW04KDB4NDAsIHNjcjEpOworICAgICAgICAgICAgYW5kMzIoc2NyMSwgc2NyKTsKKyAgICAg
ICAgICAgIG1fYXNzZW1ibGVyLmNtcGxSZWdSZWcoc2NyLCBzY3IxLCBFcXVhbCk7CisgICAgICAg
ICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgICAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2Ny
MSk7CisgICAgICAgICAgICByZXR1cm4gYnJhbmNoRmFsc2UoKTsKKyAgICAgICAgfQorICAgICAg
ICBpZiAoY29uZCA9PSBEb3VibGVMZXNzVGhhbikgeworICAgICAgICAgICAgUmVnaXN0ZXJJRCBz
Y3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmxvYWRDb25zdGFu
dChfX2Zwc2NyX3ZhbHVlc1sxXSwgc2NyKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmxkc2Zw
c2NyKHNjcik7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5kY21wcGd0KGxlZnQsIHJpZ2h0KTsK
KyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmxkc2Zwc2NyKHNjcik7CisgICAgICAgICAgICByZWxl
YXNlU2NyYXRjaChzY3IpOworICAgICAgICAgICAgcmV0dXJuIGJyYW5jaFRydWUoKTsKKyAgICAg
ICAgfQorICAgICAgICBpZiAoY29uZCA9PSBEb3VibGVMZXNzVGhhbk9yRXF1YWwpIHsKKyAgICAg
ICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgICAgICBSZWdp
c3RlcklEIHNjcjEgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmxv
YWRDb25zdGFudChfX2Zwc2NyX3ZhbHVlc1sxXSwgc2NyYXRjaFJlZzMpOworICAgICAgICAgICAg
bV9hc3NlbWJsZXIubGRzZnBzY3Ioc2NyYXRjaFJlZzMpOworICAgICAgICAgICAgbV9hc3NlbWJs
ZXIuZGNtcHBndChyaWdodCwgbGVmdCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5lbnN1cmVT
cGFjZShtX2Fzc2VtYmxlci5tYXhJbnN0cnVjdGlvblNpemUgKyAxOCwgc2l6ZW9mKHVpbnQzMl90
KSk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5icmFuY2goQlRfT1BDT0RFLCA4KTsKKyAgICAg
ICAgICAgIG1fYXNzZW1ibGVyLnN0c2Zwc2NyKHNjcik7CisgICAgICAgICAgICBtX2Fzc2VtYmxl
ci5sZHNmcHNjcihzY3JhdGNoUmVnMyk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5tb3ZJbW04
KDB4NDAsIHNjcjEpOworICAgICAgICAgICAgYW5kMzIoc2NyMSwgc2NyKTsKKyAgICAgICAgICAg
IG1fYXNzZW1ibGVyLmNtcGxSZWdSZWcoc2NyLCBzY3IxLCBFcXVhbCk7CisgICAgICAgICAgICBy
ZWxlYXNlU2NyYXRjaChzY3IpOworICAgICAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyMSk7Cisg
ICAgICAgICAgICByZXR1cm4gYnJhbmNoRmFsc2UoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAo
Y29uZCA9PSBEb3VibGVFcXVhbE9yVW5vcmRlcmVkKSB7CisgICAgICAgICAgICBSZWdpc3RlcklE
IHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICAgICAgUmVnaXN0ZXJJRCBzY3IxID0gY2xh
aW1TY3JhdGNoKCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5sb2FkQ29uc3RhbnQoX19mcHNj
cl92YWx1ZXNbMV0sIHNjcmF0Y2hSZWczKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmxkc2Zw
c2NyKHNjcmF0Y2hSZWczKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmRjbXBwZXEocmlnaHQs
IGxlZnQpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuZW5zdXJlU3BhY2UobV9hc3NlbWJsZXIu
bWF4SW5zdHJ1Y3Rpb25TaXplICsgMTgsIHNpemVvZih1aW50MzJfdCkpOworICAgICAgICAgICAg
bV9hc3NlbWJsZXIuYnJhbmNoKEJUX09QQ09ERSwgNCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxl
ci5zdHNmcHNjcihzY3IpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIubGRzZnBzY3Ioc2NyYXRj
aFJlZzMpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIubW92SW1tOCgweDQwLCBzY3IxKTsKKyAg
ICAgICAgICAgIGFuZDMyKHNjcjEsIHNjcik7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5jbXBs
UmVnUmVnKHNjciwgc2NyMSwgRXF1YWwpOworICAgICAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2Ny
KTsKKyAgICAgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcjEpOworICAgICAgICAgICAgcmV0dXJu
IGJyYW5jaFRydWUoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoY29uZCA9PSBEb3VibGVHcmVh
dGVyVGhhbk9yVW5vcmRlcmVkKSB7CisgICAgICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWlt
U2NyYXRjaCgpOworICAgICAgICAgICAgUmVnaXN0ZXJJRCBzY3IxID0gY2xhaW1TY3JhdGNoKCk7
CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5sb2FkQ29uc3RhbnQoX19mcHNjcl92YWx1ZXNbMV0s
IHNjcmF0Y2hSZWczKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmxkc2Zwc2NyKHNjcmF0Y2hS
ZWczKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmRjbXBwZ3QocmlnaHQsIGxlZnQpOworICAg
ICAgICAgICAgbV9hc3NlbWJsZXIuZW5zdXJlU3BhY2UobV9hc3NlbWJsZXIubWF4SW5zdHJ1Y3Rp
b25TaXplICsgMTgsIHNpemVvZih1aW50MzJfdCkpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIu
YnJhbmNoKEJUX09QQ09ERSwgNCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zdHNmcHNjcihz
Y3IpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIubGRzZnBzY3Ioc2NyYXRjaFJlZzMpOworICAg
ICAgICAgICAgbV9hc3NlbWJsZXIubW92SW1tOCgweDQwLCBzY3IxKTsKKyAgICAgICAgICAgIGFu
ZDMyKHNjcjEsIHNjcik7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5jbXBsUmVnUmVnKHNjciwg
c2NyMSwgRXF1YWwpOworICAgICAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICAgICAg
ICAgIHJlbGVhc2VTY3JhdGNoKHNjcjEpOworICAgICAgICAgICAgcmV0dXJuIGJyYW5jaFRydWUo
KTsKKyAgICAgICAgfQorICAgICAgICBpZiAoY29uZCA9PSBEb3VibGVHcmVhdGVyVGhhbk9yRXF1
YWxPclVub3JkZXJlZCkgeworICAgICAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0
Y2goKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmxvYWRDb25zdGFudChfX2Zwc2NyX3ZhbHVl
c1sxXSwgc2NyKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmxkc2Zwc2NyKHNjcik7CisgICAg
ICAgICAgICBtX2Fzc2VtYmxlci5kY21wcGd0KGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgIG1f
YXNzZW1ibGVyLmxkc2Zwc2NyKHNjcik7CisgICAgICAgICAgICByZXR1cm4gYnJhbmNoRmFsc2Uo
KTsKKyAgICAgICAgfQorICAgICAgICBpZiAoY29uZCA9PSBEb3VibGVMZXNzVGhhbk9yVW5vcmRl
cmVkKSB7CisgICAgICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAg
ICAgICAgICAgUmVnaXN0ZXJJRCBzY3IxID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgICAgICBt
X2Fzc2VtYmxlci5sb2FkQ29uc3RhbnQoX19mcHNjcl92YWx1ZXNbMV0sIHNjcmF0Y2hSZWczKTsK
KyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmxkc2Zwc2NyKHNjcmF0Y2hSZWczKTsKKyAgICAgICAg
ICAgIG1fYXNzZW1ibGVyLmRjbXBwZ3QobGVmdCwgcmlnaHQpOworICAgICAgICAgICAgbV9hc3Nl
bWJsZXIuZW5zdXJlU3BhY2UobV9hc3NlbWJsZXIubWF4SW5zdHJ1Y3Rpb25TaXplICsgMTgsIHNp
emVvZih1aW50MzJfdCkpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuYnJhbmNoKEJUX09QQ09E
RSwgNCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zdHNmcHNjcihzY3IpOworICAgICAgICAg
ICAgbV9hc3NlbWJsZXIubGRzZnBzY3Ioc2NyYXRjaFJlZzMpOworICAgICAgICAgICAgbV9hc3Nl
bWJsZXIubW92SW1tOCgweDQwLCBzY3IxKTsKKyAgICAgICAgICAgIGFuZDMyKHNjcjEsIHNjcik7
CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5jbXBsUmVnUmVnKHNjciwgc2NyMSwgRXF1YWwpOwor
ICAgICAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICAgICAgICAgIHJlbGVhc2VTY3Jh
dGNoKHNjcjEpOworICAgICAgICAgICAgcmV0dXJuIGJyYW5jaFRydWUoKTsKKyAgICAgICAgfQor
ICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBtX2Fzc2Vt
Ymxlci5sb2FkQ29uc3RhbnQoX19mcHNjcl92YWx1ZXNbMV0sIHNjcik7CisgICAgICAgIG1fYXNz
ZW1ibGVyLmxkc2Zwc2NyKHNjcik7CisgICAgICAgIGlmIChjb25kID09IERvdWJsZUxlc3NUaGFu
T3JFcXVhbE9yVW5vcmRlcmVkKSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5kY21wcGd0KHJp
Z2h0LCBsZWZ0KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmxkc2Zwc2NyKHNjcik7CisgICAg
ICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgICAgICAgICAgcmV0dXJuIGJyYW5jaEZh
bHNlKCk7CisgICAgICAgIH0KKyAgICAgICAgQVNTRVJUKGNvbmQgPT0gRG91YmxlTm90RXF1YWxP
clVub3JkZXJlZCk7CisgICAgICAgIG1fYXNzZW1ibGVyLmRjbXBwZXEocmlnaHQsIGxlZnQpOwor
ICAgICAgICBtX2Fzc2VtYmxlci5sZHNmcHNjcihzY3IpOworICAgICAgICByZWxlYXNlU2NyYXRj
aChzY3IpOworICAgICAgICByZXR1cm4gYnJhbmNoRmFsc2UoKTsKKyAgICB9CisKKyAgICBKdW1w
IGJyYW5jaFRydWUoKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuZW5zdXJlU3BhY2UobV9h
c3NlbWJsZXIubWF4SW5zdHJ1Y3Rpb25TaXplICsgNiwgc2l6ZW9mKHVpbnQzMl90KSk7CisgICAg
ICAgIEp1bXAgbV9qdW1wID0gSnVtcChtX2Fzc2VtYmxlci5qZSgpKTsKKyAgICAgICAgUmVnaXN0
ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9hZENvbnN0
YW50VW5SZXVzYWJsZSgweDAsIHNjcik7CisgICAgICAgIG1fYXNzZW1ibGVyLm5vcCgpOworICAg
ICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAg
ICAgICAgcmV0dXJuIG1fanVtcDsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaEZhbHNlKCkKKyAg
ICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmVuc3VyZVNwYWNlKG1fYXNzZW1ibGVyLm1heEluc3Ry
dWN0aW9uU2l6ZSArIDYsIHNpemVvZih1aW50MzJfdCkpOworICAgICAgICBKdW1wIG1fanVtcCA9
IEp1bXAobV9hc3NlbWJsZXIuam5lKCkpOworICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWlt
U2NyYXRjaCgpOworICAgICAgICBtX2Fzc2VtYmxlci5sb2FkQ29uc3RhbnRVblJldXNhYmxlKDB4
MCwgc2NyKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubm9wKCk7CisgICAgICAgIG1fYXNzZW1ibGVy
Lm5vcCgpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgICAgICByZXR1cm4gbV9q
dW1wOworICAgIH0KKworICAgIHZvaWQgc2V0OENvbXBhcmUzMihDb25kaXRpb24gY29uZCwgUmVn
aXN0ZXJJRCBsZWZ0LCBSZWdpc3RlcklEIHJpZ2h0LCBSZWdpc3RlcklEIGRlc3QpCisgICAgewor
ICAgICAgICBzZXQzMkNvbXBhcmUzMihjb25kLCBsZWZ0LCByaWdodCwgZGVzdCk7CisgICAgfQor
CisgICAgdm9pZCBzZXQ4Q29tcGFyZTMyKENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGxlZnQs
IEltbTMyIHJpZ2h0LCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBpZiAobGVmdCAh
PSBkZXN0KSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5sb2FkQ29uc3RhbnQocmlnaHQubV92
YWx1ZSwgZGVzdCk7CisgICAgICAgICAgICBzZXQzMkNvbXBhcmUzMihjb25kLCBsZWZ0LCBkZXN0
LCBkZXN0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBSZWdpc3Rl
cklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBtX2Fzc2VtYmxlci5sb2FkQ29uc3Rh
bnQocmlnaHQubV92YWx1ZSwgc2NyKTsKKyAgICAgICAgc2V0MzJDb21wYXJlMzIoY29uZCwgbGVm
dCwgc2NyLCBkZXN0KTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICB9CisKKyAg
ICBKdW1wIGJyYW5jaDMyKENvbmRpdGlvbiBjb25kLCBCYXNlSW5kZXggbGVmdCwgSW1tMzIgcmln
aHQpCisgICAgeworICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAg
ICAgICBtb3ZlKGxlZnQuaW5kZXgsIHNjcik7CisgICAgICAgIGxzaGlmdDMyKEltbTMyKGxlZnQu
c2NhbGUpLCBzY3IpOworICAgICAgICBhZGQzMihsZWZ0LmJhc2UsIHNjcik7CisgICAgICAgIGxv
YWQzMihzY3IsIGxlZnQub2Zmc2V0LCBzY3IpOworICAgICAgICBjb21wYXJlMzIocmlnaHQubV92
YWx1ZSwgc2NyLCBjb25kKTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICAgICAg
aWYgKGNvbmQgPT0gTm90RXF1YWwpCisgICAgICAgICAgICByZXR1cm4gYnJhbmNoRmFsc2UoKTsK
KyAgICAgICAgcmV0dXJuIGJyYW5jaFRydWUoKTsKKyAgICB9CisKKyAgICB2b2lkIHNxcnREb3Vi
bGUoRlBSZWdpc3RlcklEIHNyYywgRlBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBp
ZiAoZGVzdCAhPSBzcmMpCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5kbW92UmVnUmVnKHNyYywg
ZGVzdCk7CisgICAgICAgIG1fYXNzZW1ibGVyLmRzcXJ0KGRlc3QpOworICAgIH0KKworICAgIEp1
bXAgYnJhbmNoVGVzdDgoQ29uZGl0aW9uIGNvbmQsIEFkZHJlc3MgYWRkcmVzcywgSW1tMzIgbWFz
ayA9IEltbTMyKC0xKSkKKyAgICB7CisgICAgICAgIFJlZ2lzdGVySUQgYWRkcmVzc1RlbXBSZWdp
c3RlciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBsb2FkOChhZGRyZXNzLCBhZGRyZXNzVGVt
cFJlZ2lzdGVyKTsKKyAgICAgICAgSnVtcCBqbXAgPSBicmFuY2hUZXN0MzIoY29uZCwgYWRkcmVz
c1RlbXBSZWdpc3RlciwgbWFzayk7CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKGFkZHJlc3NUZW1w
UmVnaXN0ZXIpOworICAgICAgICByZXR1cm4gam1wOworICAgIH0KKworICAgIHZvaWQgc2lnbkV4
dGVuZDMyVG9QdHIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAg
ICAgIGlmIChzcmMgIT0gZGVzdCkKKyAgICAgICAgICAgIG1vdmUoc3JjLCBkZXN0KTsKKyAgICB9
CisKKyAgICBKdW1wIGJyYW5jaDgoQ29uZGl0aW9uIGNvbmQsIEFkZHJlc3MgbGVmdCwgSW1tMzIg
cmlnaHQpCisgICAgeworICAgICAgICBSZWdpc3RlcklEIGFkZHJlc3NUZW1wUmVnaXN0ZXIgPSBj
bGFpbVNjcmF0Y2goKTsKKyAgICAgICAgbG9hZDgobGVmdCwgYWRkcmVzc1RlbXBSZWdpc3Rlcik7
CisgICAgICAgIEp1bXAgam1wID0gYnJhbmNoMzIoY29uZCwgYWRkcmVzc1RlbXBSZWdpc3Rlciwg
cmlnaHQpOworICAgICAgICByZWxlYXNlU2NyYXRjaChhZGRyZXNzVGVtcFJlZ2lzdGVyKTsKKyAg
ICAgICAgcmV0dXJuIGptcDsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaFRydW5jYXRlRG91Ymxl
VG9JbnQzMihGUFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAg
ICBtX2Fzc2VtYmxlci5sb2FkQ29uc3RhbnQoX19mcHNjcl92YWx1ZXNbMV0sIHNjcmF0Y2hSZWcz
KTsKKyAgICAgICAgbV9hc3NlbWJsZXIubGRzZnBzY3Ioc2NyYXRjaFJlZzMpOworICAgICAgICBt
X2Fzc2VtYmxlci5mdHJjZHJtZnB1bChzcmMpOworICAgICAgICBtX2Fzc2VtYmxlci5zdHNmcHVs
UmVnKGRlc3QpOworICAgICAgICBtX2Fzc2VtYmxlci5sZHNmcHNjcihzY3JhdGNoUmVnMyk7Cisg
ICAgICAgIHJldHVybiBicmFuY2gzMihFcXVhbCwgZGVzdCwgSW1tMzIoMHg3ZmZmZmZmZikpOwor
ICAgIH0KKworICAgIC8vIFN0YWNrIG1hbmlwdWxhdGlvbiBvcGVyYXRpb25zCisKKyAgICB2b2lk
IHBvcChSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5wb3BSZWco
ZGVzdCk7CisgICAgfQorCisgICAgdm9pZCBwdXNoKFJlZ2lzdGVySUQgc3JjKQorICAgIHsKKyAg
ICAgICAgbV9hc3NlbWJsZXIucHVzaFJlZyhzcmMpOworICAgIH0KKworICAgIHZvaWQgcHVzaChB
ZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBpZiAoIWFkZHJlc3Mub2Zmc2V0KSB7Cisg
ICAgICAgICAgICBwdXNoKGFkZHJlc3MuYmFzZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICAgICAgaWYgKChhZGRyZXNzLm9mZnNldCA8IDApIHx8IChhZGRyZXNzLm9mZnNl
dCA+PSA2NCkpIHsKKyAgICAgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7
CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5sb2FkQ29uc3RhbnQoYWRkcmVzcy5vZmZzZXQsIHNj
cik7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGRsUmVnUmVnKGFkZHJlc3MuYmFzZSwgc2Ny
KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLm1vdmxNZW1SZWcoc2NyLCBTSDRSZWdpc3RlcnM6
OnNwKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZGxJbW04cigtNCwgU0g0UmVnaXN0ZXJz
OjpzcCk7CisgICAgICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisgICAgICAgIG1fYXNzZW1ibGVyLm1vdmxNZW1SZWcoYWRkcmVzcy5v
ZmZzZXQgPj4gMiwgYWRkcmVzcy5iYXNlLCBTSDRSZWdpc3RlcnM6OnNwKTsKKyAgICAgICAgbV9h
c3NlbWJsZXIuYWRkbEltbThyKC00LCBTSDRSZWdpc3RlcnM6OnNwKTsKKyAgICB9CisKKyAgICB2
b2lkIHB1c2goSW1tMzIgaW1tKQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFp
bVNjcmF0Y2goKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9hZENvbnN0YW50KGltbS5tX3ZhbHVl
LCBzY3IpOworICAgICAgICBwdXNoKHNjcik7CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7
CisgICAgfQorCisgICAgLy8gUmVnaXN0ZXIgbW92ZSBvcGVyYXRpb25zCisKKyAgICB2b2lkIG1v
dmUoSW1tMzIgaW1tLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxl
ci5sb2FkQ29uc3RhbnQoaW1tLm1fdmFsdWUsIGRlc3QpOworICAgIH0KKworICAgIERhdGFMYWJl
bFB0ciBtb3ZlV2l0aFBhdGNoKEltbVB0ciBpbml0aWFsVmFsdWUsIFJlZ2lzdGVySUQgZGVzdCkK
KyAgICB7CisgICAgICAgIERhdGFMYWJlbFB0ciBkYXRhTGFiZWwodGhpcyk7CisgICAgICAgIG1f
YXNzZW1ibGVyLmxvYWRDb25zdGFudFVuUmV1c2FibGUocmVpbnRlcnByZXRfY2FzdDx1aW50MzJf
dD4oaW5pdGlhbFZhbHVlLm1fdmFsdWUpLCBkZXN0LCB0cnVlKTsKKyAgICAgICAgcmV0dXJuIGRh
dGFMYWJlbDsKKyAgICB9CisKKyAgICB2b2lkIG1vdmUoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVy
SUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLm1vdmxSZWdSZWcoc3JjLCBkZXN0
KTsKKyAgICB9CisKKyAgICB2b2lkIG1vdmUoSW1tUHRyIGltbSwgUmVnaXN0ZXJJRCBkZXN0KQor
ICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9hZENvbnN0YW50KGltbS5hc0ludHB0cigpLCBk
ZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIGV4dHV3KFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklE
IGRzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmV4dHV3KHNyYywgZHN0KTsKKyAgICB9
CisKKyAgICB2b2lkIHNldDMyQ29tcGFyZTMyKENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGxl
ZnQsIFJlZ2lzdGVySUQgcmlnaHQsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1f
YXNzZW1ibGVyLmNtcGxSZWdSZWcocmlnaHQsIGxlZnQsIGNvbmQpOworICAgICAgICBpZiAoY29u
ZCAhPSBOb3RFcXVhbCkgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIubW92dChkZXN0KTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBtX2Fzc2VtYmxlci5lbnN1cmVT
cGFjZShtX2Fzc2VtYmxlci5tYXhJbnN0cnVjdGlvblNpemUgKyA0KTsKKyAgICAgICAgbV9hc3Nl
bWJsZXIubW92SW1tOCgwLCBkZXN0KTsKKyAgICAgICAgbV9hc3NlbWJsZXIuYnJhbmNoKEJUX09Q
Q09ERSwgMCk7CisgICAgICAgIG1fYXNzZW1ibGVyLm1vdkltbTgoMSwgZGVzdCk7CisgICAgfQor
CisgICAgdm9pZCBzZXQzMkNvbXBhcmUzMihDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBsZWZ0
LCBJbW0zMiByaWdodCwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgaWYgKGxlZnQg
IT0gZGVzdCkgeworICAgICAgICAgICAgbW92ZShyaWdodCwgZGVzdCk7CisgICAgICAgICAgICBz
ZXQzMkNvbXBhcmUzMihjb25kLCBsZWZ0LCBkZXN0LCBkZXN0KTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOwor
ICAgICAgICBtb3ZlKHJpZ2h0LCBzY3IpOworICAgICAgICBzZXQzMkNvbXBhcmUzMihjb25kLCBs
ZWZ0LCBzY3IsIGRlc3QpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgIH0KKwor
ICAgIHZvaWQgc2V0MzJUZXN0OChDb25kaXRpb24gY29uZCwgQWRkcmVzcyBhZGRyZXNzLCBJbW0z
MiBtYXNrLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBBU1NFUlQoKGNvbmQgPT0g
WmVybykgfHwgKGNvbmQgPT0gTm9uWmVybykpOworICAgICAgICBsb2FkOChhZGRyZXNzLCBkZXN0
KTsKKyAgICAgICAgaWYgKG1hc2subV92YWx1ZSA9PSAtMSkKKyAgICAgICAgICAgIGNvbXBhcmUz
MigwLCBkZXN0LCBjb25kKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdGVzdGxJbW0obWFz
ay5tX3ZhbHVlLCBkZXN0KTsKKyAgICAgICAgaWYgKGNvbmQgIT0gTm9uWmVybykgeworICAgICAg
ICAgICAgbV9hc3NlbWJsZXIubW92dChkZXN0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgICAgICBtX2Fzc2VtYmxlci5lbnN1cmVTcGFjZShtX2Fzc2VtYmxlci5tYXhJbnN0
cnVjdGlvblNpemUgKyA0KTsKKyAgICAgICAgbV9hc3NlbWJsZXIubW92SW1tOCgwLCBkZXN0KTsK
KyAgICAgICAgbV9hc3NlbWJsZXIuYnJhbmNoKEJUX09QQ09ERSwgMCk7CisgICAgICAgIG1fYXNz
ZW1ibGVyLm1vdkltbTgoMSwgZGVzdCk7CisgICAgfQorCisgICAgdm9pZCBsb2FkUHRyTGlua1Jl
ZyhJbXBsaWNpdEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIFJlZ2lzdGVySUQgc2Ny
ID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIGxvYWQzMihhZGRyZXNzLCBzY3IpOworICAgICAg
ICBtX2Fzc2VtYmxlci5sZHNwcihzY3IpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOwor
ICAgIH0KKworICAgIEp1bXAgYnJhbmNoMzIoQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgbGVm
dCwgUmVnaXN0ZXJJRCByaWdodCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmNtcGxSZWdS
ZWcocmlnaHQsIGxlZnQsIGNvbmQpOworICAgICAgICAvKiBCVCBsYWJlbCA9PiBCRiBvZmYKKyAg
ICAgICAgICAgbm9wICAgICAgICAgTERSIHJlZworICAgICAgICAgICBub3AgICAgICAgICBicmFm
IEByZWcKKyAgICAgICAgICAgbm9wICAgICAgICAgbm9wCisgICAgICAgICAqLworICAgICAgICBp
ZiAoY29uZCA9PSBOb3RFcXVhbCkKKyAgICAgICAgICAgIHJldHVybiBicmFuY2hGYWxzZSgpOwor
ICAgICAgICByZXR1cm4gYnJhbmNoVHJ1ZSgpOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoMzIo
Q29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgbGVmdCwgSW1tMzIgcmlnaHQpCisgICAgeworICAg
ICAgICBpZiAoKChjb25kID09IEVxdWFsKSB8fCAoY29uZCA9PSBOb3RFcXVhbCkpICYmICFyaWdo
dC5tX3ZhbHVlKQorICAgICAgICAgICAgbV9hc3NlbWJsZXIudGVzdGxSZWdSZWcobGVmdCwgbGVm
dCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNvbXBhcmUzMihyaWdodC5tX3ZhbHVlLCBs
ZWZ0LCBjb25kKTsKKyAgICAgICAgaWYgKGNvbmQgPT0gTm90RXF1YWwpCisgICAgICAgICAgICBy
ZXR1cm4gYnJhbmNoRmFsc2UoKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaFRydWUoKTsKKyAgICB9
CisKKyAgICBKdW1wIGJyYW5jaDMyKENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGxlZnQsIEFk
ZHJlc3MgcmlnaHQpCisgICAgeworICAgICAgICBjb21wYXJlMzIocmlnaHQub2Zmc2V0LCByaWdo
dC5iYXNlLCBsZWZ0LCBjb25kKTsKKyAgICAgICAgaWYgKGNvbmQgPT0gTm90RXF1YWwpCisgICAg
ICAgICAgICByZXR1cm4gYnJhbmNoRmFsc2UoKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaFRydWUo
KTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaDMyKENvbmRpdGlvbiBjb25kLCBBZGRyZXNzIGxl
ZnQsIFJlZ2lzdGVySUQgcmlnaHQpCisgICAgeworICAgICAgICBjb21wYXJlMzIocmlnaHQsIGxl
ZnQub2Zmc2V0LCBsZWZ0LmJhc2UsIGNvbmQpOworICAgICAgICBpZiAoY29uZCA9PSBOb3RFcXVh
bCkKKyAgICAgICAgICAgIHJldHVybiBicmFuY2hGYWxzZSgpOworICAgICAgICByZXR1cm4gYnJh
bmNoVHJ1ZSgpOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoMzIoQ29uZGl0aW9uIGNvbmQsIEFk
ZHJlc3MgbGVmdCwgSW1tMzIgcmlnaHQpCisgICAgeworICAgICAgICBjb21wYXJlMzIocmlnaHQu
bV92YWx1ZSwgbGVmdC5vZmZzZXQsIGxlZnQuYmFzZSwgY29uZCk7CisgICAgICAgIGlmIChjb25k
ID09IE5vdEVxdWFsKQorICAgICAgICAgICAgcmV0dXJuIGJyYW5jaEZhbHNlKCk7CisgICAgICAg
IHJldHVybiBicmFuY2hUcnVlKCk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2gzMihDb25kaXRp
b24gY29uZCwgQWJzb2x1dGVBZGRyZXNzIGxlZnQsIFJlZ2lzdGVySUQgcmlnaHQpCisgICAgewor
ICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBtb3ZlKElt
bTMyKChpbnQpbGVmdC5tX3B0ciksIHNjcik7CisgICAgICAgIG1fYXNzZW1ibGVyLmNtcGxSZWdS
ZWcocmlnaHQsIHNjciwgY29uZCk7CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAg
ICAgIGlmIChjb25kID09IE5vdEVxdWFsKQorICAgICAgICAgICAgcmV0dXJuIGJyYW5jaEZhbHNl
KCk7CisgICAgICAgIHJldHVybiBicmFuY2hUcnVlKCk7CisgICAgfQorCisgICAgSnVtcCBicmFu
Y2gzMihDb25kaXRpb24gY29uZCwgQWJzb2x1dGVBZGRyZXNzIGxlZnQsIEltbTMyIHJpZ2h0KQor
ICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCBhZGRyZXNzVGVtcFJlZ2lzdGVyID0gY2xhaW1TY3Jh
dGNoKCk7CisgICAgICAgIGxvYWQzMihsZWZ0Lm1fcHRyLCBhZGRyZXNzVGVtcFJlZ2lzdGVyKTsK
KyAgICAgICAgY29tcGFyZTMyKHJpZ2h0Lm1fdmFsdWUsIGFkZHJlc3NUZW1wUmVnaXN0ZXIsIGNv
bmQpOworICAgICAgICByZWxlYXNlU2NyYXRjaChhZGRyZXNzVGVtcFJlZ2lzdGVyKTsKKyAgICAg
ICAgaWYgKGNvbmQgPT0gTm90RXF1YWwpCisgICAgICAgICAgICByZXR1cm4gYnJhbmNoRmFsc2Uo
KTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaFRydWUoKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5j
aDE2KENvbmRpdGlvbiBjb25kLCAgQmFzZUluZGV4IGxlZnQsIFJlZ2lzdGVySUQgcmlnaHQpCisg
ICAgeworICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBt
b3ZlKGxlZnQuaW5kZXgsIHNjcik7CisgICAgICAgIGxzaGlmdDMyKEltbTMyKGxlZnQuc2NhbGUp
LCBzY3IpOworICAgICAgICBpZiAobGVmdC5vZmZzZXQpCisgICAgICAgICAgICBhZGQzMihJbW0z
MihsZWZ0Lm9mZnNldCksIHNjcik7CisgICAgICAgIGFkZDMyKGxlZnQuYmFzZSwgc2NyKTsKKyAg
ICAgICAgbG9hZDE2KHNjciwgc2NyKTsKKyAgICAgICAgZXh0dXcoc2NyLCBzY3IpOworICAgICAg
ICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgICAgICByZXR1cm4gYnJhbmNoMzIoY29uZCwgc2Ny
LCByaWdodCk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2gxNihDb25kaXRpb24gY29uZCwgQmFz
ZUluZGV4IGxlZnQsIEltbTMyIHJpZ2h0KQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3Ig
PSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgbW92ZShsZWZ0LmluZGV4LCBzY3IpOworICAgICAg
ICBsc2hpZnQzMihJbW0zMihsZWZ0LnNjYWxlKSwgc2NyKTsKKyAgICAgICAgaWYgKGxlZnQub2Zm
c2V0KQorICAgICAgICAgICAgYWRkMzIoSW1tMzIobGVmdC5vZmZzZXQpLCBzY3IpOworICAgICAg
ICBhZGQzMihsZWZ0LmJhc2UsIHNjcik7CisgICAgICAgIGxvYWQxNihzY3IsIHNjcik7CisgICAg
ICAgIGV4dHV3KHNjciwgc2NyKTsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IxID0gY2xhaW1TY3Jh
dGNoKCk7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvYWRDb25zdGFudChyaWdodC5tX3ZhbHVlLCBz
Y3IxKTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICAgICAgcmVsZWFzZVNjcmF0
Y2goc2NyMSk7CisgICAgICAgIHJldHVybiBicmFuY2gzMihjb25kLCBzY3IsIHNjcjEpOworICAg
IH0KKworICAgIEp1bXAgYnJhbmNoVGVzdDMyKENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIHJl
ZywgUmVnaXN0ZXJJRCBtYXNrKQorICAgIHsKKyAgICAgICAgQVNTRVJUKChjb25kID09IFplcm8p
IHx8IChjb25kID09IE5vblplcm8pKTsKKyAgICAgICAgbV9hc3NlbWJsZXIudGVzdGxSZWdSZWco
cmVnLCBtYXNrKTsKKyAgICAgICAgaWYgKGNvbmQgPT0gTm90RXF1YWwpCisgICAgICAgICAgICBy
ZXR1cm4gYnJhbmNoRmFsc2UoKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaFRydWUoKTsKKyAgICB9
CisKKyAgICBKdW1wIGJyYW5jaFRlc3QzMihDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCByZWcs
IEltbTMyIG1hc2sgPSBJbW0zMigtMSkpCisgICAgeworICAgICAgICBBU1NFUlQoKGNvbmQgPT0g
WmVybykgfHwgKGNvbmQgPT0gTm9uWmVybykpOworICAgICAgICBpZiAobWFzay5tX3ZhbHVlID09
IC0xKQorICAgICAgICAgICAgbV9hc3NlbWJsZXIudGVzdGxSZWdSZWcocmVnLCByZWcpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICB0ZXN0bEltbShtYXNrLm1fdmFsdWUsIHJlZyk7CisgICAg
ICAgIGlmIChjb25kID09IE5vdEVxdWFsKQorICAgICAgICAgICAgcmV0dXJuIGJyYW5jaEZhbHNl
KCk7CisgICAgICAgIHJldHVybiBicmFuY2hUcnVlKCk7CisgICAgfQorCisgICAgSnVtcCBicmFu
Y2hUZXN0MzIoQ29uZGl0aW9uIGNvbmQsIEFkZHJlc3MgYWRkcmVzcywgSW1tMzIgbWFzayA9IElt
bTMyKC0xKSkKKyAgICB7CisgICAgICAgIEFTU0VSVCgoY29uZCA9PSBaZXJvKSB8fCAoY29uZCA9
PSBOb25aZXJvKSk7CisgICAgICAgIGlmIChtYXNrLm1fdmFsdWUgPT0gLTEpCisgICAgICAgICAg
ICBjb21wYXJlMzIoMCwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSwgY29uZCk7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIHRlc3RJbW0obWFzay5tX3ZhbHVlLCBhZGRyZXNzLm9mZnNl
dCwgYWRkcmVzcy5iYXNlKTsKKyAgICAgICAgaWYgKGNvbmQgPT0gTm90RXF1YWwpCisgICAgICAg
ICAgICByZXR1cm4gYnJhbmNoRmFsc2UoKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaFRydWUoKTsK
KyAgICB9CisKKyAgICBKdW1wIGJyYW5jaFRlc3QzMihDb25kaXRpb24gY29uZCwgQmFzZUluZGV4
IGFkZHJlc3MsIEltbTMyIG1hc2sgPSBJbW0zMigtMSkpCisgICAgeworICAgICAgICBSZWdpc3Rl
cklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBtb3ZlKGFkZHJlc3MuaW5kZXgsIHNj
cik7CisgICAgICAgIGxzaGlmdDMyKEltbTMyKGFkZHJlc3Muc2NhbGUpLCBzY3IpOworICAgICAg
ICBhZGQzMihhZGRyZXNzLmJhc2UsIHNjcik7CisgICAgICAgIGxvYWQzMihzY3IsIGFkZHJlc3Mu
b2Zmc2V0LCBzY3IpOworICAgICAgICBpZiAobWFzay5tX3ZhbHVlID09IC0xKQorICAgICAgICAg
ICAgbV9hc3NlbWJsZXIudGVzdGxSZWdSZWcoc2NyLCBzY3IpOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICB0ZXN0bEltbShtYXNrLm1fdmFsdWUsIHNjcik7CisgICAgICAgIHJlbGVhc2VTY3Jh
dGNoKHNjcik7CisgICAgICAgIGlmIChjb25kID09IE5vdEVxdWFsKQorICAgICAgICAgICAgcmV0
dXJuIGJyYW5jaEZhbHNlKCk7CisgICAgICAgIHJldHVybiBicmFuY2hUcnVlKCk7CisgICAgfQor
CisgICAgSnVtcCBqdW1wKCkKKyAgICB7CisgICAgICAgIHJldHVybiBKdW1wKG1fYXNzZW1ibGVy
LmptcCgpKTsKKyAgICB9CisKKyAgICB2b2lkIGp1bXAoUmVnaXN0ZXJJRCB0YXJnZXQpCisgICAg
eworICAgICAgICBtX2Fzc2VtYmxlci5qbXBSZWcodGFyZ2V0KTsKKyAgICB9CisKKyAgICB2b2lk
IGp1bXAoQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBj
bGFpbVNjcmF0Y2goKTsKKyAgICAgICAgaWYgKChhZGRyZXNzLm9mZnNldCA8IDApIHx8IChhZGRy
ZXNzLm9mZnNldCA+PSA2NCkpIHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmxvYWRDb25zdGFu
dChhZGRyZXNzLm9mZnNldCwgc2NyKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZGxSZWdS
ZWcoYWRkcmVzcy5iYXNlLCBzY3IpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIubW92bE1lbVJl
ZyhzY3IsIHNjcik7CisgICAgICAgIH0gZWxzZSBpZiAoYWRkcmVzcy5vZmZzZXQpCisgICAgICAg
ICAgICBtX2Fzc2VtYmxlci5tb3ZsTWVtUmVnKGFkZHJlc3Mub2Zmc2V0ID4+IDIsIGFkZHJlc3Mu
YmFzZSwgc2NyKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9hc3NlbWJsZXIubW92bE1l
bVJlZyhhZGRyZXNzLmJhc2UsIHNjcik7CisgICAgICAgIG1fYXNzZW1ibGVyLmptcFJlZyhzY3Ip
OworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgIH0KKworICAgIC8vIEFyaXRobWV0
aWMgY29udHJvbCBmbG93IG9wZXJhdGlvbnMKKworICAgIEp1bXAgYnJhbmNoQWRkMzIoQ29uZGl0
aW9uIGNvbmQsIFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAg
ICBBU1NFUlQoKGNvbmQgPT0gT3ZlcmZsb3cpIHx8IChjb25kID09IFNpZ25lZCkgfHwgKGNvbmQg
PT0gWmVybykgfHwgKGNvbmQgPT0gTm9uWmVybykpOworICAgICAgICBpZiAoY29uZCA9PSBPdmVy
ZmxvdykgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRkdmxSZWdSZWcoc3JjLCBkZXN0KTsK
KyAgICAgICAgICAgIHJldHVybiBicmFuY2hUcnVlKCk7CisgICAgICAgIH0KKyAgICAgICAgaWYg
KGNvbmQgPT0gU2lnbmVkKSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGRsUmVnUmVnKHNy
YywgZGVzdCk7CisgICAgICAgICAgICAvLyBDaGVjayBpZiBkZXN0IGlzIG5lZ2F0aXZlCisgICAg
ICAgICAgICBtX2Fzc2VtYmxlci5jbXBweihkZXN0KTsKKyAgICAgICAgICAgIHJldHVybiBicmFu
Y2hGYWxzZSgpOworICAgICAgICB9CisgICAgICAgIG1fYXNzZW1ibGVyLmFkZGxSZWdSZWcoc3Jj
LCBkZXN0KTsKKyAgICAgICAgY29tcGFyZTMyKDAsIGRlc3QsIEVxdWFsKTsKKyAgICAgICAgaWYg
KGNvbmQgPT0gTm90RXF1YWwpCisgICAgICAgICAgICByZXR1cm4gYnJhbmNoRmFsc2UoKTsKKyAg
ICAgICAgcmV0dXJuIGJyYW5jaFRydWUoKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaEFkZDMy
KENvbmRpdGlvbiBjb25kLCBJbW0zMiBpbW0sIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAg
ICAgIEFTU0VSVCgoY29uZCA9PSBPdmVyZmxvdykgfHwgKGNvbmQgPT0gU2lnbmVkKSB8fCAoY29u
ZCA9PSBaZXJvKSB8fCAoY29uZCA9PSBOb25aZXJvKSk7CisgICAgICAgIG1vdmUoaW1tLCBzY3Jh
dGNoUmVnMyk7CisgICAgICAgIHJldHVybiBicmFuY2hBZGQzMihjb25kLCBzY3JhdGNoUmVnMywg
ZGVzdCk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2hNdWwzMihDb25kaXRpb24gY29uZCwgUmVn
aXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIEFTU0VSVCgoY29u
ZCA9PSBPdmVyZmxvdykgfHwgKGNvbmQgPT0gU2lnbmVkKSB8fCAoY29uZCA9PSBaZXJvKSB8fCAo
Y29uZCA9PSBOb25aZXJvKSk7CisgICAgICAgIGlmIChjb25kID09IE92ZXJmbG93KSB7CisgICAg
ICAgICAgICBSZWdpc3RlcklEIHNjcjEgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgICAgIFJl
Z2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5k
bXVsbFJlZ1JlZyhzcmMsIGRlc3QpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuc3RzbWFjbChk
ZXN0KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLm1vdkltbTgoLTMxLCBzY3IpOworICAgICAg
ICAgICAgbV9hc3NlbWJsZXIubW92bFJlZ1JlZyhkZXN0LCBzY3IxKTsKKyAgICAgICAgICAgIG1f
YXNzZW1ibGVyLnNoYVJlZ1JlZyhzY3IxLCBzY3IpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIu
c3RzbWFjaChzY3IpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuY21wbFJlZ1JlZyhzY3IsIHNj
cjEsIFplcm8pOworICAgICAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyMSk7CisgICAgICAgICAg
ICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgICAgICAgICAgcmV0dXJuIGJyYW5jaEZhbHNlKCk7
CisgICAgICAgIH0KKyAgICAgICAgbV9hc3NlbWJsZXIuaW11bGxSZWdSZWcoc3JjLCBkZXN0KTsK
KyAgICAgICAgbV9hc3NlbWJsZXIuc3RzbWFjbChkZXN0KTsKKyAgICAgICAgaWYgKGNvbmQgPT0g
U2lnbmVkKSB7CisgICAgICAgICAgICAvLyBDaGVjayBpZiBkZXN0IGlzIG5lZ2F0aXZlCisgICAg
ICAgICAgICBtX2Fzc2VtYmxlci5jbXBweihkZXN0KTsKKyAgICAgICAgICAgIHJldHVybiBicmFu
Y2hGYWxzZSgpOworICAgICAgICB9CisgICAgICAgIGNvbXBhcmUzMigwLCBkZXN0LCBjb25kKTsK
KyAgICAgICAgaWYgKGNvbmQgPT0gTm90RXF1YWwpCisgICAgICAgICAgICByZXR1cm4gYnJhbmNo
RmFsc2UoKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaFRydWUoKTsKKyAgICB9CisKKyAgICBKdW1w
IGJyYW5jaE11bDMyKENvbmRpdGlvbiBjb25kLCBJbW0zMiBpbW0sIFJlZ2lzdGVySUQgc3JjLCBS
ZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBBU1NFUlQoKGNvbmQgPT0gT3ZlcmZsb3cp
IHx8IChjb25kID09IFNpZ25lZCkgfHwgKGNvbmQgPT0gWmVybykgfHwgKGNvbmQgPT0gTm9uWmVy
bykpOworICAgICAgICBtb3ZlKGltbSwgc2NyYXRjaFJlZzMpOworICAgICAgICBpZiAoc3JjICE9
IGRlc3QpCisgICAgICAgICAgICBtb3ZlKHNyYywgZGVzdCk7CisgICAgICAgIHJldHVybiBicmFu
Y2hNdWwzMihjb25kLCBzY3JhdGNoUmVnMywgZGVzdCk7CisgICAgfQorCisgICAgSnVtcCBicmFu
Y2hTdWIzMihDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkK
KyAgICB7CisgICAgICAgIEFTU0VSVCgoY29uZCA9PSBPdmVyZmxvdykgfHwgKGNvbmQgPT0gU2ln
bmVkKSB8fCAoY29uZCA9PSBaZXJvKSB8fCAoY29uZCA9PSBOb25aZXJvKSk7CisgICAgICAgIGlm
IChjb25kID09IE92ZXJmbG93KSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zdWJ2bFJlZ1Jl
ZyhzcmMsIGRlc3QpOworICAgICAgICAgICAgcmV0dXJuIGJyYW5jaFRydWUoKTsKKyAgICAgICAg
fQorICAgICAgICBpZiAoY29uZCA9PSBTaWduZWQpIHsKKyAgICAgICAgICAgIC8vIENoZWNrIGlm
IGRlc3QgaXMgbmVnYXRpdmUKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnN1YmxSZWdSZWcoc3Jj
LCBkZXN0KTsKKyAgICAgICAgICAgIGNvbXBhcmUzMigwLCBkZXN0LCBMZXNzVGhhbik7CisgICAg
ICAgICAgICByZXR1cm4gYnJhbmNoVHJ1ZSgpOworICAgICAgICB9CisgICAgICAgIHN1YjMyKHNy
YywgZGVzdCk7CisgICAgICAgIGNvbXBhcmUzMigwLCBkZXN0LCBjb25kKTsKKyAgICAgICAgaWYg
KGNvbmQgPT0gTm90RXF1YWwpCisgICAgICAgICAgICByZXR1cm4gYnJhbmNoRmFsc2UoKTsKKyAg
ICAgICAgcmV0dXJuIGJyYW5jaFRydWUoKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaFN1YjMy
KENvbmRpdGlvbiBjb25kLCBJbW0zMiBpbW0sIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAg
ICAgIEFTU0VSVCgoY29uZCA9PSBPdmVyZmxvdykgfHwgKGNvbmQgPT0gU2lnbmVkKSB8fCAoY29u
ZCA9PSBaZXJvKSB8fCAoY29uZCA9PSBOb25aZXJvKSk7CisgICAgICAgIG1vdmUoaW1tLCBzY3Jh
dGNoUmVnMyk7CisgICAgICAgIHJldHVybiBicmFuY2hTdWIzMihjb25kLCBzY3JhdGNoUmVnMywg
ZGVzdCk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2hPcjMyKENvbmRpdGlvbiBjb25kLCBSZWdp
c3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKChjb25k
ID09IFNpZ25lZCkgfHwgKGNvbmQgPT0gWmVybykgfHwgKGNvbmQgPT0gTm9uWmVybykpOworICAg
ICAgICBpZiAoY29uZCA9PSBTaWduZWQpIHsKKyAgICAgICAgICAgIG9yMzIoc3JjLCBkZXN0KTsK
KyAgICAgICAgICAgIGNvbXBhcmUzMigwLCBkZXN0LCBMZXNzVGhhbik7CisgICAgICAgICAgICBy
ZXR1cm4gYnJhbmNoVHJ1ZSgpOworICAgICAgICB9CisgICAgICAgIG9yMzIoc3JjLCBkZXN0KTsK
KyAgICAgICAgY29tcGFyZTMyKDAsIGRlc3QsIGNvbmQpOworICAgICAgICBpZiAoY29uZCA9PSBO
b3RFcXVhbCkKKyAgICAgICAgICAgIHJldHVybiBicmFuY2hGYWxzZSgpOworICAgICAgICByZXR1
cm4gYnJhbmNoVHJ1ZSgpOworICAgIH0KKworICAgIHZvaWQgYnJhbmNoQ29udmVydERvdWJsZVRv
SW50MzIoRlBSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0LCBKdW1wTGlzdCYgZmFpbHVy
ZUNhc2VzLCBGUFJlZ2lzdGVySUQgZnBUZW1wKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIu
bG9hZENvbnN0YW50KF9fZnBzY3JfdmFsdWVzWzFdLCBzY3JhdGNoUmVnMyk7CisgICAgICAgIG1f
YXNzZW1ibGVyLmxkc2Zwc2NyKHNjcmF0Y2hSZWczKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuZnRy
Y2RybWZwdWwoc3JjKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuc3RzZnB1bFJlZyhkZXN0KTsKKyAg
ICAgICAgLy8gQ29udmVydCB0aGUgaW50ZWdlciByZXN1bHQgYmFjayB0byBmbG9hdCAmIGNvbXBh
cmUgdG8gdGhlIG9yaWdpbmFsIHZhbHVlIC0gaWYgbm90IGVxdWFsIG9yIHVub3JkZXJlZCAoTmFO
KSB0aGVuIGp1bXAKKyAgICAgICAgbV9hc3NlbWJsZXIubGRzcm1mcHVsKGRlc3QpOworICAgICAg
ICBtX2Fzc2VtYmxlci5mbG9hdGZwdWxEcmVnKGZzY3JhdGNoKTsKKyAgICAgICAgbV9hc3NlbWJs
ZXIuZGNtcHBlcShzcmMsIGZzY3JhdGNoKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubGRzZnBzY3Io
c2NyYXRjaFJlZzMpOworICAgICAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKGJyYW5jaEZhbHNlKCkp
OworICAgICAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKGJyYW5jaFRlc3QzMihaZXJvLCBkZXN0KSk7
CisgICAgfQorCisgICAgdm9pZCBuZWczMihSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAg
IG1fYXNzZW1ibGVyLm5lZyhkc3QsIGRzdCk7CisgICAgfQorCisgICAgdm9pZCBub3QzMihSZWdp
c3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLm5vdGxSZWcoZHN0LCBkc3Qp
OworICAgIH0KKworICAgIHZvaWQgdXJzaGlmdDMyKFJlZ2lzdGVySUQgc2hpZnRhbW91bnQsIFJl
Z2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIGNvbXBhcmUzMigzMiwgc2hpZnRhbW91bnQs
IEVxdWFsKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuZW5zdXJlU3BhY2UobV9hc3NlbWJsZXIubWF4
SW5zdHJ1Y3Rpb25TaXplICsgNCk7CisgICAgICAgIG1fYXNzZW1ibGVyLmJyYW5jaChCVF9PUENP
REUsIDEpOworICAgICAgICBtX2Fzc2VtYmxlci5uZWcoc2hpZnRhbW91bnQsIHNoaWZ0YW1vdW50
KTsKKyAgICAgICAgbV9hc3NlbWJsZXIuc2hsbFJlZ1JlZyhkZXN0LCBzaGlmdGFtb3VudCk7Cisg
ICAgfQorCisgICAgdm9pZCB1cnNoaWZ0MzIoSW1tMzIgaW1tLCBSZWdpc3RlcklEIGRlc3QpCisg
ICAgeworICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBt
X2Fzc2VtYmxlci5sb2FkQ29uc3RhbnQoLShpbW0ubV92YWx1ZSksIHNjcik7CisgICAgICAgIG1f
YXNzZW1ibGVyLnNoYVJlZ1JlZyhkZXN0LCBzY3IpOworICAgICAgICByZWxlYXNlU2NyYXRjaChz
Y3IpOworICAgIH0KKworICAgIENhbGwgY2FsbCgpCisgICAgeworICAgICAgICByZXR1cm4gQ2Fs
bChtX2Fzc2VtYmxlci5jYWxsKCksIENhbGw6OkxpbmthYmxlKTsKKyAgICB9CisKKyAgICBDYWxs
IG5lYXJDYWxsKCkKKyAgICB7CisgICAgICAgIHJldHVybiBDYWxsKG1fYXNzZW1ibGVyLmNhbGwo
KSwgQ2FsbDo6TGlua2FibGVOZWFyKTsKKyAgICB9CisKKyAgICBDYWxsIGNhbGwoUmVnaXN0ZXJJ
RCB0YXJnZXQpCisgICAgeworICAgICAgICByZXR1cm4gQ2FsbChtX2Fzc2VtYmxlci5jYWxsKHRh
cmdldCksIENhbGw6Ok5vbmUpOworICAgIH0KKworICAgIHZvaWQgYnJlYWtwb2ludCgpCisgICAg
eworICAgICAgICBtX2Fzc2VtYmxlci5ia3B0KCk7CisgICAgICAgIG1fYXNzZW1ibGVyLm5vcCgp
OworICAgIH0KKworICAgIEp1bXAgYnJhbmNoUHRyV2l0aFBhdGNoKENvbmRpdGlvbiBjb25kLCBS
ZWdpc3RlcklEIGxlZnQsIERhdGFMYWJlbFB0ciYgZGF0YUxhYmVsLCBJbW1QdHIgaW5pdGlhbFJp
Z2h0VmFsdWUgPSBJbW1QdHIoMCkpCisgICAgeworICAgICAgICBSZWdpc3RlcklEIGRhdGFUZW1w
UmVnaXN0ZXIgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgZGF0YUxhYmVsID0gbW92ZVdpdGhQ
YXRjaChpbml0aWFsUmlnaHRWYWx1ZSwgZGF0YVRlbXBSZWdpc3Rlcik7CisgICAgICAgIG1fYXNz
ZW1ibGVyLmNtcGxSZWdSZWcoZGF0YVRlbXBSZWdpc3RlciwgbGVmdCwgY29uZCk7CisgICAgICAg
IHJlbGVhc2VTY3JhdGNoKGRhdGFUZW1wUmVnaXN0ZXIpOworICAgICAgICBpZiAoY29uZCA9PSBO
b3RFcXVhbCkKKyAgICAgICAgICAgIHJldHVybiBicmFuY2hGYWxzZSgpOworICAgICAgICByZXR1
cm4gYnJhbmNoVHJ1ZSgpOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoUHRyV2l0aFBhdGNoKENv
bmRpdGlvbiBjb25kLCBBZGRyZXNzIGxlZnQsIERhdGFMYWJlbFB0ciYgZGF0YUxhYmVsLCBJbW1Q
dHIgaW5pdGlhbFJpZ2h0VmFsdWUgPSBJbW1QdHIoMCkpCisgICAgeworICAgICAgICBSZWdpc3Rl
cklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBtX2Fzc2VtYmxlci5sb2FkQ29uc3Rh
bnQobGVmdC5vZmZzZXQsIHNjcik7CisgICAgICAgIG1fYXNzZW1ibGVyLmFkZGxSZWdSZWcobGVm
dC5iYXNlLCBzY3IpOworICAgICAgICBtX2Fzc2VtYmxlci5tb3ZsTWVtUmVnKHNjciwgc2NyKTsK
KyAgICAgICAgUmVnaXN0ZXJJRCBzY3IxID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIGRhdGFM
YWJlbCA9IG1vdmVXaXRoUGF0Y2goaW5pdGlhbFJpZ2h0VmFsdWUsIHNjcjEpOworICAgICAgICBt
X2Fzc2VtYmxlci5jbXBsUmVnUmVnKHNjcjEsIHNjciwgY29uZCk7CisgICAgICAgIHJlbGVhc2VT
Y3JhdGNoKHNjcik7CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcjEpOworICAgICAgICBpZiAo
Y29uZCA9PSBOb3RFcXVhbCkKKyAgICAgICAgICAgIHJldHVybiBicmFuY2hGYWxzZSgpOworICAg
ICAgICByZXR1cm4gYnJhbmNoVHJ1ZSgpOworICAgIH0KKworICAgIHZvaWQgcmV0KCkKKyAgICB7
CisgICAgICAgIG1fYXNzZW1ibGVyLnJldCgpOworICAgICAgICBtX2Fzc2VtYmxlci5ub3AoKTsK
KyAgICB9CisKKyAgICBEYXRhTGFiZWxQdHIgc3RvcmVQdHJXaXRoUGF0Y2goSW1tUHRyIGluaXRp
YWxWYWx1ZSwgSW1wbGljaXRBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBSZWdpc3Rl
cklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBEYXRhTGFiZWxQdHIgbGFiZWwgPSBt
b3ZlV2l0aFBhdGNoKGluaXRpYWxWYWx1ZSwgc2NyKTsKKyAgICAgICAgc3RvcmUzMihzY3IsIGFk
ZHJlc3MpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgICAgICByZXR1cm4gbGFi
ZWw7CisgICAgfQorCisgICAgRGF0YUxhYmVsUHRyIHN0b3JlUHRyV2l0aFBhdGNoKEltcGxpY2l0
QWRkcmVzcyBhZGRyZXNzKSB7IHJldHVybiBzdG9yZVB0cldpdGhQYXRjaChJbW1QdHIoMCksIGFk
ZHJlc3MpOyB9CisKKyAgICBpbnQgc2l6ZU9mQ29uc3RhbnRQb29sKCkKKyAgICB7CisgICAgICAg
IHJldHVybiBtX2Fzc2VtYmxlci5zaXplT2ZDb25zdGFudFBvb2woKTsKKyAgICB9CisKKyAgICBD
YWxsIHRhaWxSZWN1cnNpdmVDYWxsKCkKKyAgICB7CisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0g
Y2xhaW1TY3JhdGNoKCk7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvYWRDb25zdGFudFVuUmV1c2Fi
bGUoMHgwLCBzY3IsIHRydWUpOworICAgICAgICBKdW1wIG1fanVtcCA9IEp1bXAobV9hc3NlbWJs
ZXIuam1wKHNjcikpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgICAgICByZXR1
cm4gQ2FsbDo6ZnJvbVRhaWxKdW1wKG1fanVtcCk7CisgICAgfQorCisgICAgQ2FsbCBtYWtlVGFp
bFJlY3Vyc2l2ZUNhbGwoSnVtcCBvbGRKdW1wKQorICAgIHsKKyAgICAgICAgb2xkSnVtcC5saW5r
KHRoaXMpOworICAgICAgICByZXR1cm4gdGFpbFJlY3Vyc2l2ZUNhbGwoKTsKKyAgICB9CisKK3By
aXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIExpbmtCdWZmZXI7CisgICAgZnJpZW5kIGNsYXNzIFJl
cGF0Y2hCdWZmZXI7CisKKyAgICBzdGF0aWMgdm9pZCBsaW5rQ2FsbCh2b2lkKiwgQ2FsbCwgRnVu
Y3Rpb25QdHIpOworICAgIHN0YXRpYyB2b2lkIHJlcGF0Y2hDYWxsKENvZGVMb2NhdGlvbkNhbGws
IENvZGVMb2NhdGlvbkxhYmVsKTsKKyAgICBzdGF0aWMgdm9pZCByZXBhdGNoQ2FsbChDb2RlTG9j
YXRpb25DYWxsLCBGdW5jdGlvblB0cik7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2Vu
ZGlmIC8vIEVOQUJMRShBU1NFTUJMRVIpCisKKyNlbmRpZiAvLyBNYWNyb0Fzc2VtYmxlclNINF9o
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1NINEFzc2VtYmxl
ci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9TSDRBc3NlbWJsZXIuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MzNhM2E3Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9TSDRBc3NlbWJsZXIuaApAQCAtMCww
ICsxLDE5NjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMSBTVE1pY3JvZWxlY3Ry
b25pY3MuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBTSDRBc3NlbWJsZXJfaAorI2RlZmluZSBTSDRBc3NlbWJs
ZXJfaAorCisjaWYgRU5BQkxFKEFTU0VNQkxFUikgJiYgQ1BVKFNINCkKKworI2luY2x1ZGUgIkFz
c2VtYmxlckJ1ZmZlci5oIgorI2luY2x1ZGUgIkFzc2VtYmxlckJ1ZmZlcldpdGhDb25zdGFudFBv
b2wuaCIKKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRl
IDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworI2lmbmRlZiBO
REVCVUcKKyNkZWZpbmUgU0g0X0FTU0VNQkxFUl9UUkFDSU5HCisjZW5kaWYKKworbmFtZXNwYWNl
IEpTQyB7Cit0eXBlZGVmIHVpbnQxNl90IFNINFdvcmQ7CisKK2VudW0geworICAgIElOVkFMSURf
T1BDT0RFID0gMHhmZmZmLAorICAgIEFERF9PUENPREUgPSAweDMwMGMsCisgICAgQURESU1NX09Q
Q09ERSA9IDB4NzAwMCwKKyAgICBBRERDX09QQ09ERSA9IDB4MzAwZSwKKyAgICBBRERWX09QQ09E
RSA9IDB4MzAwZiwKKyAgICBBTkRfT1BDT0RFID0gMHgyMDA5LAorICAgIEFORElNTV9PUENPREUg
PSAweGM5MDAsCisgICAgRElWMF9PUENPREUgPSAweDIwMDcsCisgICAgRElWMV9PUENPREUgPSAw
eDMwMDQsCisgICAgQkZfT1BDT0RFID0gMHg4YjAwLAorICAgIEJGU19PUENPREUgPSAweDhmMDAs
CisgICAgQlJBX09QQ09ERSA9IDB4YTAwMCwKKyAgICBCUkFGX09QQ09ERSA9IDB4MDAyMywKKyAg
ICBOT1BfT1BDT0RFID0gMHgwMDA5LAorICAgIEJTUl9PUENPREUgPSAweGIwMDAsCisgICAgUlRT
X09QQ09ERSA9IDB4MDAwYiwKKyAgICBCVF9PUENPREUgPSAweDg5MDAsCisgICAgQlRTX09QQ09E
RSA9IDB4OGQwMCwKKyAgICBCU1JGX09QQ09ERSA9IDB4MDAwMywKKyAgICBCUktfT1BDT0RFID0g
MHgwMDNiLAorICAgIEZUUkNfT1BDT0RFID0gMHhmMDNkLAorICAgIENNUEVRX09QQ09ERSA9IDB4
MzAwMCwKKyAgICBDTVBFUUlNTV9PUENPREUgPSAweDg4MDAsCisgICAgQ01QR0VfT1BDT0RFID0g
MHgzMDAzLAorICAgIENNUEdUX09QQ09ERSA9IDB4MzAwNywKKyAgICBDTVBISV9PUENPREUgPSAw
eDMwMDYsCisgICAgQ01QSFNfT1BDT0RFID0gMHgzMDAyLAorICAgIENNUFBMX09QQ09ERSA9IDB4
NDAxNSwKKyAgICBDTVBQWl9PUENPREUgPSAweDQwMTEsCisgICAgQ01QU1RSX09QQ09ERSA9IDB4
MjAwYywKKyAgICBEVF9PUENPREUgPSAweDQwMTAsCisgICAgRkNNUEVRX09QQ09ERSA9IDB4ZjAw
NCwKKyAgICBGQ01QR1RfT1BDT0RFID0gMHhmMDA1LAorICAgIEZNT1ZfT1BDT0RFID0gMHhmMDBj
LAorICAgIEZBRERfT1BDT0RFID0gMHhmMDAwLAorICAgIEZNVUxfT1BDT0RFID0gMHhmMDAyLAor
ICAgIEZTVUJfT1BDT0RFID0gMHhmMDAxLAorICAgIEZESVZfT1BDT0RFID0gMHhmMDAzLAorICAg
IEZORUdfT1BDT0RFID0gMHhmMDRkLAorICAgIEpNUF9PUENPREUgPSAweDQwMmIsCisgICAgSlNS
X09QQ09ERSA9IDB4NDAwYiwKKyAgICBMRFNQUl9PUENPREUgPSAweDQwMmEsCisgICAgTERTTFBS
X09QQ09ERSA9IDB4NDAyNiwKKyAgICBNT1ZfT1BDT0RFID0gMHg2MDAzLAorICAgIE1PVklNTV9P
UENPREUgPSAweGUwMDAsCisgICAgTU9WQl9XUklURV9STl9PUENPREUgPSAweDIwMDAsCisgICAg
TU9WQl9XUklURV9STkRFQ19PUENPREUgPSAweDIwMDQsCisgICAgTU9WQl9XUklURV9SMFJOX09Q
Q09ERSA9IDB4MDAwNCwKKyAgICBNT1ZCX1dSSVRFX09GRkdCUl9PUENPREUgPSAweGMwMDAsCisg
ICAgTU9WQl9XUklURV9PRkZSTl9PUENPREUgPSAweDgwMDAsCisgICAgTU9WQl9SRUFEX1JNX09Q
Q09ERSA9IDB4NjAwMCwKKyAgICBNT1ZCX1JFQURfUk1JTkNfT1BDT0RFID0gMHg2MDA0LAorICAg
IE1PVkJfUkVBRF9SMFJNX09QQ09ERSA9IDB4MDAwYywKKyAgICBNT1ZCX1JFQURfT0ZGR0JSX09Q
Q09ERSA9IDB4YzQwMCwKKyAgICBNT1ZCX1JFQURfT0ZGUk1fT1BDT0RFID0gMHg4NDAwLAorICAg
IE1PVkxfV1JJVEVfUk5fT1BDT0RFID0gMHgyMDAyLAorICAgIE1PVkxfV1JJVEVfUk5ERUNfT1BD
T0RFID0gMHgyMDA2LAorICAgIE1PVkxfV1JJVEVfUjBSTl9PUENPREUgPSAweDAwMDYsCisgICAg
TU9WTF9XUklURV9PRkZHQlJfT1BDT0RFID0gMHhjMjAwLAorICAgIE1PVkxfV1JJVEVfT0ZGUk5f
T1BDT0RFID0gMHgxMDAwLAorICAgIE1PVkxfUkVBRF9STV9PUENPREUgPSAweDYwMDIsCisgICAg
TU9WTF9SRUFEX1JNSU5DX09QQ09ERSA9IDB4NjAwNiwKKyAgICBNT1ZMX1JFQURfUjBSTV9PUENP
REUgPSAweDAwMGUsCisgICAgTU9WTF9SRUFEX09GRkdCUl9PUENPREUgPSAweGM2MDAsCisgICAg
TU9WTF9SRUFEX09GRlBDX09QQ09ERSA9IDB4ZDAwMCwKKyAgICBNT1ZMX1JFQURfT0ZGUk1fT1BD
T0RFID0gMHg1MDAwLAorICAgIE1PVldfV1JJVEVfUk5fT1BDT0RFID0gMHgyMDAxLAorICAgIE1P
VldfUkVBRF9STV9PUENPREUgPSAweDYwMDEsCisgICAgTU9WV19SRUFEX1IwUk1fT1BDT0RFID0g
MHgwMDBkLAorICAgIE1PVldfUkVBRF9PRkZQQ19PUENPREUgPSAweDkwMDAsCisgICAgTU9WQV9S
RUFEX09GRlBDX09QQ09ERSA9IDB4YzcwMCwKKyAgICBNT1ZUX09QQ09ERSA9IDB4MDAyOSwKKyAg
ICBNVUxMX09QQ09ERSA9IDB4MDAwNywKKyAgICBETVVMTF9MX09QQ09ERSA9IDB4MzAwNSwKKyAg
ICBTVFNNQUNMX09QQ09ERSA9IDB4MDAxYSwKKyAgICBTVFNNQUNIX09QQ09ERSA9IDB4MDAwYSwK
KyAgICBETVVMU0xfT1BDT0RFID0gMHgzMDBkLAorICAgIE5FR19PUENPREUgPSAweDYwMGIsCisg
ICAgTkVHQ19PUENPREUgPSAweDYwMGEsCisgICAgTk9UX09QQ09ERSA9IDB4NjAwNywKKyAgICBP
Ul9PUENPREUgPSAweDIwMGIsCisgICAgT1JJTU1fT1BDT0RFID0gMHhjYjAwLAorICAgIE9SQklN
TV9PUENPREUgPSAweGNmMDAsCisgICAgU0VUU19PUENPREUgPSAweDAwNTgsCisgICAgU0VUVF9P
UENPREUgPSAweDAwMTgsCisgICAgU0hBRF9PUENPREUgPSAweDQwMGMsCisgICAgU0hBTF9PUENP
REUgPSAweDQwMjAsCisgICAgU0hBUl9PUENPREUgPSAweDQwMjEsCisgICAgU0hMRF9PUENPREUg
PSAweDQwMGQsCisgICAgU0hMTF9PUENPREUgPSAweDQwMDAsCisgICAgU0hMTDJfT1BDT0RFID0g
MHg0MDA4LAorICAgIFNITEw4X09QQ09ERSA9IDB4NDAxOCwKKyAgICBTSExMMTZfT1BDT0RFID0g
MHg0MDI4LAorICAgIFNITFJfT1BDT0RFID0gMHg0MDAxLAorICAgIFNITFIyX09QQ09ERSA9IDB4
NDAwOSwKKyAgICBTSExSOF9PUENPREUgPSAweDQwMTksCisgICAgU0hMUjE2X09QQ09ERSA9IDB4
NDAyOSwKKyAgICBTVFNQUl9PUENPREUgPSAweDAwMmEsCisgICAgU1RTTFBSX09QQ09ERSA9IDB4
NDAyMiwKKyAgICBGTE9BVF9PUENPREUgPSAweGYwMmQsCisgICAgU1VCX09QQ09ERSA9IDB4MzAw
OCwKKyAgICBTVUJDX09QQ09ERSA9IDB4MzAwYSwKKyAgICBTVUJWX09QQ09ERSA9IDB4MzAwYiwK
KyAgICBUU1RfT1BDT0RFID0gMHgyMDA4LAorICAgIFRTVElNTV9PUENPREUgPSAweGM4MDAsCisg
ICAgVFNUQl9PUENPREUgPSAweGNjMDAsCisgICAgRVhUVVdfT1BDT0RFID0gMHg2MDBkLAorICAg
IFhPUl9PUENPREUgPSAweDIwMGEsCisgICAgWE9SSU1NX09QQ09ERSA9IDB4Y2EwMCwKKyAgICBY
T1JCX09QQ09ERSA9IDB4Y2UwMCwKKyAgICBGTU9WU19SRUFEX1JNX0lOQ19PUENPREUgPSAweGYw
MDksCisgICAgRk1PVlNfUkVBRF9STV9PUENPREUgPSAweGYwMDgsCisgICAgRk1PVlNfUkVBRF9S
MFJNX09QQ09ERSA9IDB4ZjAwNiwKKyAgICBGTU9WU19XUklURV9STl9PUENPREUgPSAweGYwMGEs
CisgICAgRk1PVlNfV1JJVEVfUk5fREVDX09QQ09ERSA9IDB4ZjAwYiwKKyAgICBGTU9WU19XUklU
RV9SMFJOX09QQ09ERSA9IDB4ZjAwNywKKyAgICBMRFNfUk1fRlBVTF9PUENPREUgPSAweDQwNWEs
CisgICAgRkxEU19GUk1fRlBVTF9PUENPREUgPSAweGYwMWQsCisgICAgU1RTX0ZQVUxfUk5fT1BD
T0RFID0gMHgwMDVhLAorICAgIEZTVFNfRlBVTF9GUk5fT1BDT0RFID0gMHhGMDBkLAorICAgIExE
U0ZQU0NSX09QQ09ERSA9IDB4NDA2YSwKKyAgICBTVFNGUFNDUl9PUENPREUgPSAweDAwNmEsCisg
ICAgTERTUk1GUFVMX09QQ09ERSA9IDB4NDA1YSwKKyAgICBGU1RTRlBVTEZSTl9PUENPREUgPSAw
eGYwMGQsCisgICAgRlNRUlRfT1BDT0RFID0gMHhmMDZkLAorICAgIENMUlRfT1BDT0RFID0gOCwK
K307CisKK25hbWVzcGFjZSBTSDRSZWdpc3RlcnMgewordHlwZWRlZiBlbnVtIHsKKyAgICByMCwK
KyAgICByMSwKKyAgICByMiwKKyAgICByMywKKyAgICByNCwKKyAgICByNSwKKyAgICByNiwKKyAg
ICByNywKKyAgICByOCwKKyAgICByOSwKKyAgICByMTAsCisgICAgcjExLAorICAgIHIxMiwKKyAg
ICByMTMsCisgICAgcjE0LCBmcCA9IHIxNCwKKyAgICByMTUsIHNwID0gcjE1LAorICAgIHBjLAor
ICAgIHByLAorfSBSZWdpc3RlcklEOworCit0eXBlZGVmIGVudW0geworICAgIGZyMCwgZHIwID0g
ZnIwLAorICAgIGZyMSwKKyAgICBmcjIsIGRyMiA9IGZyMiwKKyAgICBmcjMsCisgICAgZnI0LCBk
cjQgPSBmcjQsCisgICAgZnI1LAorICAgIGZyNiwgZHI2ID0gZnI2LAorICAgIGZyNywKKyAgICBm
cjgsIGRyOCA9IGZyOCwKKyAgICBmcjksCisgICAgZnIxMCwgZHIxMCA9IGZyMTAsCisgICAgZnIx
MSwKKyAgICBmcjEyLCBkcjEyID0gZnIxMiwKKyAgICBmcjEzLAorICAgIGZyMTQsIGRyMTQgPSBm
cjE0LAorICAgIGZyMTUsCit9IEZQUmVnaXN0ZXJJRDsKK30KKworaW5saW5lIHVpbnQxNl90IGdl
dE9wY29kZUdyb3VwMSh1aW50MTZfdCBvcGMsIGludCBybSwgaW50IHJuKQoreworICAgIHJldHVy
biAob3BjIHwgKChybSAmIDB4ZikgPDwgOCkgfCAoKHJuICYgMHhmKSA8PCA0KSk7Cit9CisKK2lu
bGluZSB1aW50MTZfdCBnZXRPcGNvZGVHcm91cDIodWludDE2X3Qgb3BjLCBpbnQgcm0pCit7Cisg
ICAgcmV0dXJuIChvcGMgfCAoKHJtICYgMHhmKSA8PCA4KSk7Cit9CisKK2lubGluZSB1aW50MTZf
dCBnZXRPcGNvZGVHcm91cDModWludDE2X3Qgb3BjLCBpbnQgcm0sIGludCBybikKK3sKKyAgICBy
ZXR1cm4gKG9wYyB8ICgocm0gJiAweGYpIDw8IDgpIHwgKHJuICYgMHhmZikpOworfQorCitpbmxp
bmUgdWludDE2X3QgZ2V0T3Bjb2RlR3JvdXA0KHVpbnQxNl90IG9wYywgaW50IHJtLCBpbnQgcm4s
IGludCBvZmZzZXQpCit7CisgICAgcmV0dXJuIChvcGMgfCAoKHJtICYgMHhmKSA8PCA4KSB8ICgo
cm4gJiAweGYpIDw8IDQpIHwgKG9mZnNldCAmIDB4ZikpOworfQorCitpbmxpbmUgdWludDE2X3Qg
Z2V0T3Bjb2RlR3JvdXA1KHVpbnQxNl90IG9wYywgaW50IHJtKQoreworICAgIHJldHVybiAob3Bj
IHwgKHJtICYgMHhmZikpOworfQorCitpbmxpbmUgdWludDE2X3QgZ2V0T3Bjb2RlR3JvdXA2KHVp
bnQxNl90IG9wYywgaW50IHJtKQoreworICAgIHJldHVybiAob3BjIHwgKHJtICYgMHhmZmYpKTsK
K30KKworaW5saW5lIHVpbnQxNl90IGdldE9wY29kZUdyb3VwNyh1aW50MTZfdCBvcGMsIGludCBy
bSkKK3sKKyAgICByZXR1cm4gKG9wYyB8ICgocm0gJiAweDcpIDw8IDkpKTsKK30KKworaW5saW5l
IHVpbnQxNl90IGdldE9wY29kZUdyb3VwOCh1aW50MTZfdCBvcGMsIGludCBybSwgaW50IHJuKQor
eworICAgIHJldHVybiAob3BjIHwgKChybSAmIDB4NykgPDwgOSkgfCAoKHJuICYgMHg3KSA8PCA1
KSk7Cit9CisKK2lubGluZSB1aW50MTZfdCBnZXRPcGNvZGVHcm91cDkodWludDE2X3Qgb3BjLCBp
bnQgcm0sIGludCBybikKK3sKKyAgICByZXR1cm4gKG9wYyB8ICgocm0gJiAweGYpIDw8IDgpIHwg
KChybiAmIDB4NykgPDwgNSkpOworfQorCitpbmxpbmUgdWludDE2X3QgZ2V0T3Bjb2RlR3JvdXAx
MCh1aW50MTZfdCBvcGMsIGludCBybSwgaW50IHJuKQoreworICAgIHJldHVybiAob3BjIHwgKChy
bSAmIDB4NykgPDwgOSkgfCAoKHJuICYgMHhmKSA8PCA0KSk7Cit9CisKK2lubGluZSB1aW50MTZf
dCBnZXRPcGNvZGVHcm91cDExKHVpbnQxNl90IG9wYywgaW50IHJtLCBpbnQgcm4pCit7CisgICAg
cmV0dXJuIChvcGMgfCAoKHJtICYgMHhmKSA8PCA0KSB8IChybiAmIDB4ZikpOworfQorCitpbmxp
bmUgdWludDE2X3QgZ2V0Um4odWludDE2X3QgeCkKK3sKKyAgICByZXR1cm4gKCh4ICYgMHhmMDAp
ID4+IDgpOworfQorCitpbmxpbmUgdWludDE2X3QgZ2V0Um0odWludDE2X3QgeCkKK3sKKyAgICBy
ZXR1cm4gKCh4ICYgMHhmMCkgPj4gNCk7Cit9CisKK2lubGluZSB1aW50MTZfdCBnZXREaXNwKHVp
bnQxNl90IHgpCit7CisgICAgcmV0dXJuICh4ICYgMHhmKTsKK30KKworaW5saW5lIHVpbnQxNl90
IGdldEltbTgodWludDE2X3QgeCkKK3sKKyAgICByZXR1cm4gKHggJiAweGZmKTsKK30KKworaW5s
aW5lIHVpbnQxNl90IGdldEltbTEyKHVpbnQxNl90IHgpCit7CisgICAgcmV0dXJuICh4ICYgMHhm
ZmYpOworfQorCitpbmxpbmUgdWludDE2X3QgZ2V0RFJuKHVpbnQxNl90IHgpCit7CisgICAgcmV0
dXJuICgoeCAmIDB4RTAwKSA+PiA5KTsKK30KKworaW5saW5lIHVpbnQxNl90IGdldERSbSh1aW50
MTZfdCB4KQoreworICAgIHJldHVybiAoKHggJiAweEUwKSA+PiA1KTsKK30KKworY2xhc3MgU0g0
QXNzZW1ibGVyIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIFNINFJlZ2lzdGVyczo6UmVnaXN0ZXJJ
RCBSZWdpc3RlcklEOworICAgIHR5cGVkZWYgU0g0UmVnaXN0ZXJzOjpGUFJlZ2lzdGVySUQgRlBS
ZWdpc3RlcklEOworICAgIHR5cGVkZWYgQXNzZW1ibGVyQnVmZmVyV2l0aENvbnN0YW50UG9vbDw1
MTIsIDQsIDIsIFNINEFzc2VtYmxlcj4gU0g0QnVmZmVyOworICAgIHN0YXRpYyBjb25zdCBSZWdp
c3RlcklEIHNjcmF0Y2hSZWcxID0gU0g0UmVnaXN0ZXJzOjpyMzsKKyAgICBzdGF0aWMgY29uc3Qg
UmVnaXN0ZXJJRCBzY3JhdGNoUmVnMiA9IFNINFJlZ2lzdGVyczo6cjExOworICAgIGludCBjbGFp
bXNjcmF0Y2hSZWc7CisgICAgc3RhdGljIGNvbnN0IHVpbnQzMl90IG1heEluc3RydWN0aW9uU2l6
ZSA9IDE2OworCisgICAgZW51bSB7CisgICAgICAgIHBhZEZvckFsaWduOCA9IDB4MDAsCisgICAg
ICAgIHBhZEZvckFsaWduMTYgPSAweDAwMDksCisgICAgICAgIHBhZEZvckFsaWduMzIgPSAweDAw
MDkwMDA5LAorICAgIH07CisKKyAgICBTSDRBc3NlbWJsZXIoKQorICAgIHsKKyAgICAgICAgY2xh
aW1zY3JhdGNoUmVnID0gMHgwOworICAgIH0KKworICAgIC8vIFNINCBjb25kaXRpb24gY29kZXMK
KyAgICB0eXBlZGVmIGVudW0geworICAgICAgICBFUSA9IDB4MCwgLy8gRXF1YWwKKyAgICAgICAg
TkUgPSAweDEsIC8vIE5vdCBFcXVhbAorICAgICAgICBIUyA9IDB4MiwgLy8gVW5zaWdlbmQgR3Jl
YXRlciBUaGFuIGVxdWFsCisgICAgICAgIEhJID0gMHgzLCAvLyBVbnNpZ2VuZCBHcmVhdGVyIFRo
YW4KKyAgICAgICAgTFMgPSAweDQsIC8vIFVuc2lnZW5kIExvd2VyIG9yIFNhbWUKKyAgICAgICAg
TEkgPSAweDUsIC8vIFVuc2lnZW5kIExvd2VyCisgICAgICAgIEdFID0gMHg2LCAvLyBHcmVhdGVy
IG9yIEVxdWFsCisgICAgICAgIExUID0gMHg3LCAvLyBMZXNzIFRoYW4KKyAgICAgICAgR1QgPSAw
eDgsIC8vIEdyZWF0ZXIgVGhhbgorICAgICAgICBMRSA9IDB4OSwgLy8gTGVzcyBvciBFcXVhbAor
ICAgICAgICBPRiA9IDB4YSwgLy8gT3ZlckZsb3cKKyAgICAgICAgU0kgPSAweGIsIC8vIFNpZ25l
ZAorICAgICAgICBFUVU9IDB4YywgLy8gRXF1YWwgb3IgdW5vcmRlcmVkKE5hTikKKyAgICAgICAg
TkVVPSAweGQsCisgICAgICAgIEdUVT0gMHhlLAorICAgICAgICBHRVU9IDB4ZiwKKyAgICAgICAg
TFRVPSAweDEwLAorICAgICAgICBMRVU9IDB4MTEsCisgICAgfSBDb25kaXRpb247CisKKyAgICAv
LyBPcGFxdWUgbGFiZWwgdHlwZXMKK3B1YmxpYzoKKyAgICBjbGFzcyBKbXBTcmMgeworICAgICAg
ICBmcmllbmQgY2xhc3MgU0g0QXNzZW1ibGVyOworICAgIHB1YmxpYzoKKyAgICAgICAgSm1wU3Jj
KCkKKyAgICAgICAgICAgIDogbV9vZmZzZXQoLTEpCisgICAgICAgIHsKKyAgICAgICAgfQorCisg
ICAgcHJpdmF0ZToKKyAgICAgICAgSm1wU3JjKGludCBvZmZzZXQpCisgICAgICAgICAgICA6IG1f
b2Zmc2V0KG9mZnNldCkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgaW50IG1fb2Zm
c2V0OworICAgIH07CisKKyAgICBjbGFzcyBKbXBEc3QgeworICAgICAgICBmcmllbmQgY2xhc3Mg
U0g0QXNzZW1ibGVyOworICAgIHB1YmxpYzoKKyAgICAgICAgSm1wRHN0KCkKKyAgICAgICAgICAg
IDogbV9vZmZzZXQoLTEpCisgICAgICAgICAgICAsIG1fdXNlZChmYWxzZSkKKyAgICAgICAgewor
ICAgICAgICB9CisKKyAgICAgICAgYm9vbCBpc1VzZWQoKSBjb25zdCB7IHJldHVybiBtX3VzZWQ7
IH0KKyAgICAgICAgYm9vbCBpc1NldCgpIGNvbnN0IHsgcmV0dXJuIChtX29mZnNldCAhPSAtMSk7
IH0KKyAgICAgICAgdm9pZCB1c2VkKCkgeyBtX3VzZWQgPSB0cnVlOyB9CisKKyAgICBwcml2YXRl
OgorICAgICAgICBKbXBEc3QoaW50IG9mZnNldCkKKyAgICAgICAgICAgIDogbV9vZmZzZXQob2Zm
c2V0KQorICAgICAgICAgICAgLCBtX3VzZWQoZmFsc2UpCisgICAgICAgIHsKKyAgICAgICAgICAg
IEFTU0VSVChtX29mZnNldCA9PSBvZmZzZXQpOworICAgICAgICB9CisKKyAgICAgICAgaW50IG1f
b2Zmc2V0IDogMzE7CisgICAgICAgIGludCBtX3VzZWQgOiAxOworICAgIH07CisKKyAgICBib29s
IGlzSW1tZWRpYXRlKGludCBjb25zdGFudCkKKyAgICB7CisgICAgICAgIHJldHVybiAoKGNvbnN0
YW50IDw9IDEyNykgJiYgKGNvbnN0YW50ID49IC0xMjgpKTsKKyAgICB9CisKKyAgICBSZWdpc3Rl
cklEIGNsYWltU2NyYXRjaCgpCisgICAgeworICAgICAgICBBU1NFUlQoKGNsYWltc2NyYXRjaFJl
ZyAhPSAweDMpKTsKKyAgICAgICAgaWYgKCEoY2xhaW1zY3JhdGNoUmVnICYgMHgxKSkgeworICAg
ICAgICAgICAgY2xhaW1zY3JhdGNoUmVnID0gKGNsYWltc2NyYXRjaFJlZyB8IDB4MSk7CisgICAg
ICAgICAgICByZXR1cm4gc2NyYXRjaFJlZzE7CisgICAgICAgIH0KKyAgICAgICAgY2xhaW1zY3Jh
dGNoUmVnID0gKGNsYWltc2NyYXRjaFJlZyB8IDB4Mik7CisgICAgICAgIHJldHVybiBzY3JhdGNo
UmVnMjsKKyAgICB9CisKKyAgICB2b2lkIHJlbGVhc2VTY3JhdGNoKFJlZ2lzdGVySUQgc2NyYXRj
aFIpIAorICAgIHsKKyAgICAgICAgaWYgKHNjcmF0Y2hSID09IHNjcmF0Y2hSZWcxKQorICAgICAg
ICAgICAgY2xhaW1zY3JhdGNoUmVnID0gKGNsYWltc2NyYXRjaFJlZyAmIDB4Mik7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIGNsYWltc2NyYXRjaFJlZyA9IChjbGFpbXNjcmF0Y2hSZWcgJiAw
eDEpOworICAgIH0KKworICAgIC8vIFN0YWNrIG9wZXJhdGlvbnMKKworICAgIHZvaWQgcHVzaFJl
ZyhSZWdpc3RlcklEIHJlZykKKyAgICB7CisgICAgICAgIGlmIChyZWcgPT0gU0g0UmVnaXN0ZXJz
OjpwcikgeworICAgICAgICAgICAgb25lU2hvcnRPcChnZXRPcGNvZGVHcm91cDIoU1RTTFBSX09Q
Q09ERSwgU0g0UmVnaXN0ZXJzOjpzcCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisgICAgICAgIG9uZVNob3J0T3AoZ2V0T3Bjb2RlR3JvdXAxKE1PVkxfV1JJVEVfUk5ERUNfT1BD
T0RFLCBTSDRSZWdpc3RlcnM6OnNwLCByZWcpKTsKKyAgICB9CisKKyAgICB2b2lkIHBvcFJlZyhS
ZWdpc3RlcklEIHJlZykKKyAgICB7CisgICAgICAgIGlmIChyZWcgPT0gU0g0UmVnaXN0ZXJzOjpw
cikgeworICAgICAgICAgICAgb25lU2hvcnRPcChnZXRPcGNvZGVHcm91cDIoTERTTFBSX09QQ09E
RSwgU0g0UmVnaXN0ZXJzOjpzcCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg
ICAgICAgIG9uZVNob3J0T3AoZ2V0T3Bjb2RlR3JvdXAxKE1PVkxfUkVBRF9STUlOQ19PUENPREUs
IHJlZywgU0g0UmVnaXN0ZXJzOjpzcCkpOworICAgIH0KKworICAgIHZvaWQgbW92dChSZWdpc3Rl
cklEIGRzdCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3VwMihN
T1ZUX09QQ09ERSwgZHN0KTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAg
IC8vIEFyaXRobWV0aWMgb3BlcmF0aW9ucworCisgICAgdm9pZCBhZGRsUmVnUmVnKFJlZ2lzdGVy
SUQgc3JjLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdl
dE9wY29kZUdyb3VwMShBRERfT1BDT0RFLCBkc3QsIHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Ao
b3BjKTsKKyAgICB9CisKKyAgICB2b2lkIGFkZGNsUmVnUmVnKFJlZ2lzdGVySUQgc3JjLCBSZWdp
c3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3Vw
MShBRERDX09QQ09ERSwgZHN0LCBzcmMpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAg
fQorCisgICAgdm9pZCBhZGR2bFJlZ1JlZyhSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3Qp
CisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDEoQUREVl9PUENP
REUsIGRzdCwgc3JjKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAgIHZv
aWQgYWRkbEltbThyKGludCBpbW04LCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIEFT
U0VSVCgoaW1tOCA8PSAxMjcpICYmIChpbW04ID49IC0xMjgpKTsKKyAgICAgICAgdWludDE2X3Qg
b3BjID0gZ2V0T3Bjb2RlR3JvdXAzKEFERElNTV9PUENPREUsIGRzdCwgaW1tOCk7CisgICAgICAg
IG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lkIGFuZGxSZWdSZWcoUmVnaXN0ZXJJ
RCBzcmMsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0
T3Bjb2RlR3JvdXAxKEFORF9PUENPREUsIGRzdCwgc3JjKTsKKyAgICAgICAgb25lU2hvcnRPcChv
cGMpOworICAgIH0KKworICAgIHZvaWQgYW5kbEltbThyKGludCBpbW04LCBSZWdpc3RlcklEIGRz
dCkKKyAgICB7CisgICAgICAgIEFTU0VSVCgoaW1tOCA8PSAyNTUpICYmIChpbW04ID49IDApKTsK
KyAgICAgICAgQVNTRVJUKGRzdCA9PSBTSDRSZWdpc3RlcnM6OnIwKTsKKyAgICAgICAgdWludDE2
X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXA1KEFORElNTV9PUENPREUsIGltbTgpOworICAgICAgICBv
bmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCBkaXYxbFJlZ1JlZyhSZWdpc3RlcklE
IHNyYywgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRP
cGNvZGVHcm91cDEoRElWMV9PUENPREUsIGRzdCwgc3JjKTsKKyAgICAgICAgb25lU2hvcnRPcChv
cGMpOworICAgIH0KKworICAgIHZvaWQgZGl2MGxSZWdSZWcoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lz
dGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXAx
KERJVjBfT1BDT0RFLCBkc3QsIHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9
CisKKyAgICB2b2lkIG5vdGxSZWcoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQorICAg
IHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXAxKE5PVF9PUENPREUsIGRz
dCwgc3JjKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAgIHZvaWQgb3Js
UmVnUmVnKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIHVp
bnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3VwMShPUl9PUENPREUsIGRzdCwgc3JjKTsKKyAgICAg
ICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAgIHZvaWQgb3JsSW1tOHIoaW50IGltbTgs
IFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKChpbW04IDw9IDI1NSkgJiYg
KGltbTggPj0gMCkpOworICAgICAgICBBU1NFUlQoZHN0ID09IFNINFJlZ2lzdGVyczo6cjApOwor
ICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDUoT1JJTU1fT1BDT0RFLCBpbW04
KTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAgIHZvaWQgc3VibFJlZ1Jl
ZyhSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICAgdWludDE2
X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXAxKFNVQl9PUENPREUsIGRzdCwgc3JjKTsKKyAgICAgICAg
IG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lkIHN1YnZsUmVnUmVnKFJlZ2lzdGVy
SUQgc3JjLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgICB1aW50MTZfdCBvcGMgPSBn
ZXRPcGNvZGVHcm91cDEoU1VCVl9PUENPREUsIGRzdCwgc3JjKTsKKyAgICAgICAgIG9uZVNob3J0
T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lkIHhvcmxSZWdSZWcoUmVnaXN0ZXJJRCBzcmMsIFJl
Z2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3Jv
dXAxKFhPUl9PUENPREUsIGRzdCwgc3JjKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAg
IH0KKworICAgIHZvaWQgeG9ybEltbThyKGludCBpbW04LCBSZWdpc3RlcklEIGRzdCkKKyAgICB7
CisgICAgICAgIEFTU0VSVCgoaW1tOCA8PSAyNTUpICYmIChpbW04ID49IDApKTsKKyAgICAgICAg
QVNTRVJUKGRzdCA9PSBTSDRSZWdpc3RlcnM6OnIwKTsKKyAgICAgICAgdWludDE2X3Qgb3BjID0g
Z2V0T3Bjb2RlR3JvdXA1KFhPUklNTV9PUENPREUsIGltbTgpOworICAgICAgICBvbmVTaG9ydE9w
KG9wYyk7CisgICAgfQorCisgICAgdm9pZCBzaGxsSW1tOHIoaW50IGltbSwgUmVnaXN0ZXJJRCBk
c3QpCisgICAgeworICAgICAgICBzd2l0Y2ggKGltbSkgeworICAgICAgICBjYXNlIDE6CisgICAg
ICAgICAgICBvbmVTaG9ydE9wKGdldE9wY29kZUdyb3VwMihTSExMX09QQ09ERSwgZHN0KSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgb25lU2hvcnRP
cChnZXRPcGNvZGVHcm91cDIoU0hMTDJfT1BDT0RFLCBkc3QpKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIDg6CisgICAgICAgICAgICBvbmVTaG9ydE9wKGdldE9wY29kZUdyb3Vw
MihTSExMOF9PUENPREUsIGRzdCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
MTY6CisgICAgICAgICAgICBvbmVTaG9ydE9wKGdldE9wY29kZUdyb3VwMihTSExMMTZfT1BDT0RF
LCBkc3QpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIG5l
ZyhSZWdpc3RlcklEIGRzdCwgUmVnaXN0ZXJJRCBzcmMpCisgICAgeworICAgICAgICB1aW50MTZf
dCBvcGMgPSBnZXRPcGNvZGVHcm91cDEoTkVHX09QQ09ERSwgZHN0LCBzcmMpOworICAgICAgICBv
bmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCBzaGxsUmVnUmVnKFJlZ2lzdGVySUQg
ZHN0LCBSZWdpc3RlcklEIHJTaGlmdCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdl
dE9wY29kZUdyb3VwMShTSExEX09QQ09ERSwgZHN0LCByU2hpZnQpOworICAgICAgICBvbmVTaG9y
dE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCBzaGxyUmVnUmVnKFJlZ2lzdGVySUQgZHN0LCBS
ZWdpc3RlcklEIHJTaGlmdCkKKyAgICB7CisgICAgICAgIG5lZyhyU2hpZnQsIHJTaGlmdCk7Cisg
ICAgICAgIHNobGxSZWdSZWcoZHN0LCByU2hpZnQpOworICAgIH0KKworICAgIHZvaWQgc2hhclJl
Z1JlZyhSZWdpc3RlcklEIGRzdCwgUmVnaXN0ZXJJRCByU2hpZnQpCisgICAgeworICAgICAgICBu
ZWcoclNoaWZ0LCByU2hpZnQpOworICAgICAgICBzaGFSZWdSZWcoZHN0LCByU2hpZnQpOworICAg
IH0KKworICAgIHZvaWQgc2hhUmVnUmVnKFJlZ2lzdGVySUQgZHN0LCBSZWdpc3RlcklEIHJTaGlm
dCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3VwMShTSEFEX09Q
Q09ERSwgZHN0LCByU2hpZnQpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisg
ICAgdm9pZCBzaGxySW1tOHIoaW50IGltbSwgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAg
ICBzd2l0Y2ggKGltbSkgeworICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICBvbmVTaG9ydE9w
KGdldE9wY29kZUdyb3VwMihTSExSX09QQ09ERSwgZHN0KSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgb25lU2hvcnRPcChnZXRPcGNvZGVHcm91cDIo
U0hMUjJfT1BDT0RFLCBkc3QpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDg6
CisgICAgICAgICAgICBvbmVTaG9ydE9wKGdldE9wY29kZUdyb3VwMihTSExSOF9PUENPREUsIGRz
dCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMTY6CisgICAgICAgICAgICBv
bmVTaG9ydE9wKGdldE9wY29kZUdyb3VwMihTSExSMTZfT1BDT0RFLCBkc3QpKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIGltdWxsUmVnUmVnKFJlZ2lzdGVy
SUQgc3JjLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdl
dE9wY29kZUdyb3VwMShNVUxMX09QQ09ERSwgZHN0LCBzcmMpOworICAgICAgICBvbmVTaG9ydE9w
KG9wYyk7CisgICAgfQorCisgICAgdm9pZCBkbXVsbFJlZ1JlZyhSZWdpc3RlcklEIHNyYywgUmVn
aXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91
cDEoRE1VTExfTF9PUENPREUsIGRzdCwgc3JjKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOwor
ICAgIH0KKworICAgIHZvaWQgZG11bHNsUmVnUmVnKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklE
IGRzdCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3VwMShETVVM
U0xfT1BDT0RFLCBkc3QsIHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisK
KyAgICB2b2lkIHN0c21hY2woUmVnaXN0ZXJJRCByZWcpCisgICAgeworICAgICAgICB1aW50MTZf
dCBvcGMgPSBnZXRPcGNvZGVHcm91cDIoU1RTTUFDTF9PUENPREUsIHJlZyk7CisgICAgICAgIG9u
ZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lkIHN0c21hY2goUmVnaXN0ZXJJRCByZWcp
CisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDIoU1RTTUFDSF9P
UENPREUsIHJlZyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICAvLyBD
b21wYXJpc29ucworCisgICAgdm9pZCBjbXBsUmVnUmVnKFJlZ2lzdGVySUQgbGVmdCwgUmVnaXN0
ZXJJRCByaWdodCwgQ29uZGl0aW9uIGNvbmQpCisgICAgeworICAgICAgICBzd2l0Y2ggKGNvbmQp
IHsKKyAgICAgICAgY2FzZSBORToKKyAgICAgICAgICAgIG9uZVNob3J0T3AoZ2V0T3Bjb2RlR3Jv
dXAxKENNUEVRX09QQ09ERSwgcmlnaHQsIGxlZnQpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIEdUOgorICAgICAgICAgICAgb25lU2hvcnRPcChnZXRPcGNvZGVHcm91cDEoQ01Q
R1RfT1BDT0RFLCByaWdodCwgbGVmdCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgRVE6CisgICAgICAgICAgICBvbmVTaG9ydE9wKGdldE9wY29kZUdyb3VwMShDTVBFUV9PUENP
REUsIHJpZ2h0LCBsZWZ0KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHRToK
KyAgICAgICAgICAgIG9uZVNob3J0T3AoZ2V0T3Bjb2RlR3JvdXAxKENNUEdFX09QQ09ERSwgcmln
aHQsIGxlZnQpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEhTOgorICAgICAg
ICAgICAgb25lU2hvcnRPcChnZXRPcGNvZGVHcm91cDEoQ01QSFNfT1BDT0RFLCByaWdodCwgbGVm
dCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSEk6CisgICAgICAgICAgICBv
bmVTaG9ydE9wKGdldE9wY29kZUdyb3VwMShDTVBISV9PUENPREUsIHJpZ2h0LCBsZWZ0KSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBMSToKKyAgICAgICAgICAgIG9uZVNob3J0
T3AoZ2V0T3Bjb2RlR3JvdXAxKENNUEhJX09QQ09ERSwgbGVmdCwgcmlnaHQpKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIExTOgorICAgICAgICAgICAgb25lU2hvcnRPcChnZXRP
cGNvZGVHcm91cDEoQ01QSFNfT1BDT0RFLCBsZWZ0LCByaWdodCkpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgTEU6CisgICAgICAgICAgICBvbmVTaG9ydE9wKGdldE9wY29kZUdy
b3VwMShDTVBHRV9PUENPREUsIGxlZnQsIHJpZ2h0KSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBMVDoKKyAgICAgICAgICAgIG9uZVNob3J0T3AoZ2V0T3Bjb2RlR3JvdXAxKENN
UEdUX09QQ09ERSwgbGVmdCwgcmlnaHQpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICB2b2lkIGNtcHBsKFJlZ2lzdGVySUQgcmVnKQorICAgIHsKKyAgICAgICAgdWlu
dDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXAyKENNUFBMX09QQ09ERSwgcmVnKTsKKyAgICAgICAg
b25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAgIHZvaWQgY21wcHooUmVnaXN0ZXJJRCByZWcp
CisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDIoQ01QUFpfT1BD
T0RFLCByZWcpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCBj
bXBFcUltbVIwKGludCBpbW0sIFJlZ2lzdGVySUQgZHN0LCBDb25kaXRpb24gY29uZCkKKyAgICB7
CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3VwNShDTVBFUUlNTV9PUENPREUs
IGltbSk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lkIHRlc3Rs
UmVnUmVnKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIHVp
bnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3VwMShUU1RfT1BDT0RFLCBkc3QsIHNyYyk7CisgICAg
ICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lkIHRlc3RsSW1tOHIoaW50IGlt
bSwgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICBBU1NFUlQoKGRzdCA9PSBTSDRSZWdp
c3RlcnM6OnIwKSAmJiAoaW1tIDw9IDI1NSkgJiYgKGltbSA+PSAwKSk7CisgICAgICAgIHVpbnQx
Nl90IG9wYyA9IGdldE9wY29kZUdyb3VwNShUU1RJTU1fT1BDT0RFLCBpbW0pOworICAgICAgICBv
bmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCBub3AoKQorICAgIHsKKyAgICAgICAg
b25lU2hvcnRPcChOT1BfT1BDT0RFLCBmYWxzZSk7CisgICAgfQorCisgICAgdm9pZCBzZXR0KCkK
KyAgICB7CisgICAgICAgIG9uZVNob3J0T3AoU0VUVF9PUENPREUpOworICAgIH0KKworICAgIHZv
aWQgY2xydCgpCisgICAgeworICAgICAgICBvbmVTaG9ydE9wKENMUlRfT1BDT0RFKTsKKyAgICB9
CisKKyAgICB2b2lkIGJrcHQoKQorICAgIHsKKyAgICAgICAgb25lU2hvcnRPcChCUktfT1BDT0RF
LCBmYWxzZSk7CisgICAgfQorCisgICAgdm9pZCBicmFuY2godWludDE2X3Qgb3BjLCBpbnQgbGFi
ZWwpCisgICAgeworICAgICAgICBzd2l0Y2ggKG9wYykgeworICAgICAgICBjYXNlIEJUX09QQ09E
RToKKyAgICAgICAgICAgIEFTU0VSVCgobGFiZWwgPD0gMTI3KSAmJiAobGFiZWwgPj0gLTEyOCkp
OworICAgICAgICAgICAgb25lU2hvcnRPcChnZXRPcGNvZGVHcm91cDUoQlRfT1BDT0RFLCBsYWJl
bCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQlJBX09QQ09ERToKKyAgICAg
ICAgICAgIEFTU0VSVCgobGFiZWwgPD0gMjA0NykgJiYgKGxhYmVsID49IC0yMDQ4KSk7CisgICAg
ICAgICAgICBvbmVTaG9ydE9wKGdldE9wY29kZUdyb3VwNihCUkFfT1BDT0RFLCBsYWJlbCkpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQkZfT1BDT0RFOgorICAgICAgICAgICAg
QVNTRVJUKChsYWJlbCA8PSAxMjcpICYmIChsYWJlbCA+PSAtMTI4KSk7CisgICAgICAgICAgICBv
bmVTaG9ydE9wKGdldE9wY29kZUdyb3VwNShCRl9PUENPREUsIGxhYmVsKSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBicmFuY2godWludDE2X3Qgb3BjLCBS
ZWdpc3RlcklEIHJlZykKKyAgICB7CisgICAgICAgIHN3aXRjaCAob3BjKSB7CisgICAgICAgIGNh
c2UgQlJBRl9PUENPREU6CisgICAgICAgICAgICBvbmVTaG9ydE9wKGdldE9wY29kZUdyb3VwMihC
UkFGX09QQ09ERSwgcmVnKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBKTVBf
T1BDT0RFIDoKKyAgICAgICAgICAgIG9uZVNob3J0T3AoZ2V0T3Bjb2RlR3JvdXAyKEpNUF9PUENP
REUsIHJlZykpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSlNSX09QQ09ERSA6
CisgICAgICAgICAgICBvbmVTaG9ydE9wKGdldE9wY29kZUdyb3VwMihKU1JfT1BDT0RFLCByZWcp
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEJTUkZfT1BDT0RFIDoKKyAgICAg
ICAgICAgIG9uZVNob3J0T3AoZ2V0T3Bjb2RlR3JvdXAyKEJTUkZfT1BDT0RFLCByZWcpKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIGxkc3ByKFJlZ2lzdGVy
SUQgcmVnKQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXAyKExE
U1BSX09QQ09ERSwgcmVnKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAg
IHZvaWQgc3RzcHIoUmVnaXN0ZXJJRCByZWcpCisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMg
PSBnZXRPcGNvZGVHcm91cDIoU1RTUFJfT1BDT0RFLCByZWcpOworICAgICAgICBvbmVTaG9ydE9w
KG9wYyk7CisgICAgfQorCisgICAgdm9pZCBleHR1dyhSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJ
RCBkc3QpCisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDEoRVhU
VVdfT1BDT0RFLCBkc3QsIHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisK
KyAgICAvLyBmbG9hdCBvcGVyYXRpb25zCisKKyAgICB2b2lkIGxkc3JtZnB1bChSZWdpc3RlcklE
IHNyYykKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3VwMihMRFNf
Uk1fRlBVTF9PUENPREUsIHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisK
KyAgICB2b2lkIGZuZWcoRlBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90
IG9wYyA9IGdldE9wY29kZUdyb3VwMihGTkVHX09QQ09ERSwgZHN0KTsKKyAgICAgICAgb25lU2hv
cnRPcChvcGMsIHRydWUsIGZhbHNlKTsKKyAgICB9CisKKyAgICB2b2lkIGZzcXJ0KEZQUmVnaXN0
ZXJJRCBkc3QpCisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDIo
RlNRUlRfT1BDT0RFLCBkc3QpOworICAgICAgICBvbmVTaG9ydE9wKG9wYywgdHJ1ZSwgZmFsc2Up
OworICAgIH0KKworICAgIHZvaWQgc3RzZnB1bFJlZyhSZWdpc3RlcklEIHNyYykKKyAgICB7Cisg
ICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3VwMihTVFNfRlBVTF9STl9PUENPREUs
IHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lkIGZsb2F0
ZnB1bGZybihSZWdpc3RlcklEIHNyYykKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdl
dE9wY29kZUdyb3VwMihGTE9BVF9PUENPREUsIHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Aob3Bj
LCB0cnVlLCBmYWxzZSk7CisgICAgfQorCisgICAgdm9pZCBmbXVsbChGUFJlZ2lzdGVySUQgc3Jj
LCBGUFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bj
b2RlR3JvdXAxKEZNVUxfT1BDT0RFLCBkc3QsIHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Aob3Bj
LCB0cnVlLCBmYWxzZSk7CisgICAgfQorCisgICAgdm9pZCBmbW92c1JlYWRybShSZWdpc3RlcklE
IHNyYywgRlBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdl
dE9wY29kZUdyb3VwMShGTU9WU19SRUFEX1JNX09QQ09ERSwgZHN0LCBzcmMpOworICAgICAgICBv
bmVTaG9ydE9wKG9wYywgdHJ1ZSwgZmFsc2UpOworICAgIH0KKworICAgIHZvaWQgZm1vdnNXcml0
ZXJtKEZQUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgdWlu
dDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXAxKEZNT1ZTX1dSSVRFX1JOX09QQ09ERSwgZHN0LCBz
cmMpOworICAgICAgICBvbmVTaG9ydE9wKG9wYywgdHJ1ZSwgZmFsc2UpOworICAgIH0KKworICAg
IHZvaWQgZm1vdnNXcml0ZXIwcihGUFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCkKKyAg
ICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3VwMShGTU9WU19XUklURV9S
MFJOX09QQ09ERSwgZHN0LCBzcmMpOworICAgICAgICBvbmVTaG9ydE9wKG9wYywgdHJ1ZSwgZmFs
c2UpOworICAgIH0KKworICAgIHZvaWQgZm1vdnNSZWFkcjByKFJlZ2lzdGVySUQgc3JjLCBGUFJl
Z2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3Jv
dXAxKEZNT1ZTX1JFQURfUjBSTV9PUENPREUsIGRzdCwgc3JjKTsKKyAgICAgICAgb25lU2hvcnRP
cChvcGMsIHRydWUsIGZhbHNlKTsKKyAgICB9CisKKyAgICB2b2lkIGZtb3ZzUmVhZHJtaW5jKFJl
Z2lzdGVySUQgc3JjLCBGUFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qg
b3BjID0gZ2V0T3Bjb2RlR3JvdXAxKEZNT1ZTX1JFQURfUk1fSU5DX09QQ09ERSwgZHN0LCBzcmMp
OworICAgICAgICBvbmVTaG9ydE9wKG9wYywgdHJ1ZSwgZmFsc2UpOworICAgIH0KKworICAgIHZv
aWQgZm1vdnNXcml0ZXJuZGVjKEZQUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQorICAg
IHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXAxKEZNT1ZTX1dSSVRFX1JO
X0RFQ19PUENPREUsIGRzdCwgc3JjKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMsIHRydWUsIGZh
bHNlKTsKKyAgICB9CisKKyAgICB2b2lkIGZ0cmNSZWdmcHVsKEZQUmVnaXN0ZXJJRCBzcmMpCisg
ICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDIoRlRSQ19PUENPREUs
IHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjLCB0cnVlLCBmYWxzZSk7CisgICAgfQorCisg
ICAgdm9pZCBmbGRzZnB1bChSZWdpc3RlcklEIHNyYykKKyAgICB7CisgICAgICAgIHVpbnQxNl90
IG9wYyA9IGdldE9wY29kZUdyb3VwMihGTERTX0ZSTV9GUFVMX09QQ09ERSwgc3JjKTsKKyAgICAg
ICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAgIHZvaWQgZnN0c2ZwdWwoUmVnaXN0ZXJJ
RCBzcmMpCisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDIoRlNU
U19GUFVMX0ZSTl9PUENPREUsIHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9
CisKKyAgICB2b2lkIGxkc2Zwc2NyKFJlZ2lzdGVySUQgcmVnKQorICAgIHsKKyAgICAgICAgdWlu
dDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXAyKExEU0ZQU0NSX09QQ09ERSwgcmVnKTsKKyAgICAg
ICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAgIHZvaWQgc3RzZnBzY3IoUmVnaXN0ZXJJ
RCByZWcpCisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDIoU1RT
RlBTQ1JfT1BDT0RFLCByZWcpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisg
ICAgLy8gZG91YmxlIG9wZXJhdGlvbnMKKworICAgIHZvaWQgZGNtcHBlcShGUFJlZ2lzdGVySUQg
c3JjLCBGUFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0
T3Bjb2RlR3JvdXA4KEZDTVBFUV9PUENPREUsIGRzdCA+PiAxLCBzcmMgPj4xKTsKKyAgICAgICAg
b25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAgIHZvaWQgZGNtcHBndChGUFJlZ2lzdGVySUQg
c3JjLCBGUFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0
T3Bjb2RlR3JvdXA4KEZDTVBHVF9PUENPREUsIGRzdCA+PiAxLCBzcmMgPj4xKTsKKyAgICAgICAg
b25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAgIHZvaWQgZG11bFJlZ1JlZyhGUFJlZ2lzdGVy
SUQgc3JjLCBGUFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0g
Z2V0T3Bjb2RlR3JvdXA4KEZNVUxfT1BDT0RFLCBkc3QgPj4gMSwgc3JjID4+MSk7CisgICAgICAg
IG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lkIGRzdWJSZWdSZWcoRlBSZWdpc3Rl
cklEIHNyYywgRlBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9
IGdldE9wY29kZUdyb3VwOChGU1VCX09QQ09ERSwgZHN0ID4+IDEsIHNyYyA+PjEpOworICAgICAg
ICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCBkYWRkUmVnUmVnKEZQUmVnaXN0
ZXJJRCBzcmMsIEZQUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMg
PSBnZXRPcGNvZGVHcm91cDgoRkFERF9PUENPREUsIGRzdCA+PiAxLCBzcmMgPj4xKTsKKyAgICAg
ICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAgIHZvaWQgZG1vdlJlZ1JlZyhGUFJlZ2lz
dGVySUQgc3JjLCBGUFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3Bj
ID0gZ2V0T3Bjb2RlR3JvdXA4KEZNT1ZfT1BDT0RFLCBkc3QgPj4gMSwgc3JjID4+MSk7CisgICAg
ICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lkIGRkaXZSZWdSZWcoRlBSZWdp
c3RlcklEIHNyYywgRlBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9w
YyA9IGdldE9wY29kZUdyb3VwOChGRElWX09QQ09ERSwgZHN0ID4+IDEsIHNyYyA+PjEpOworICAg
ICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCBkc3FydChGUFJlZ2lzdGVy
SUQgZHN0KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXA3KEZT
UVJUX09QQ09ERSwgZHN0ID4+IDEpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQor
CisgICAgdm9pZCBkbmVnKEZQUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICB1aW50MTZf
dCBvcGMgPSBnZXRPcGNvZGVHcm91cDcoRk5FR19PUENPREUsIGRzdCA+PiAxKTsKKyAgICAgICAg
b25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAgIHZvaWQgZm1vdlJlYWRybShSZWdpc3RlcklE
IHNyYywgRlBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdl
dE9wY29kZUdyb3VwMTAoRk1PVlNfUkVBRF9STV9PUENPREUsIGRzdCA+PiAxLCBzcmMpOworICAg
ICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCBmbW92V3JpdGVybShGUFJl
Z2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9w
YyA9IGdldE9wY29kZUdyb3VwOShGTU9WU19XUklURV9STl9PUENPREUsIGRzdCwgc3JjID4+IDEp
OworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCBmbW92V3JpdGVy
MHIoRlBSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICB1aW50
MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDkoRk1PVlNfV1JJVEVfUjBSTl9PUENPREUsIGRzdCwg
c3JjID4+IDEpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCBm
bW92UmVhZHIwcihSZWdpc3RlcklEIHNyYywgRlBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAg
ICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3VwMTAoRk1PVlNfUkVBRF9SMFJNX09QQ09E
RSwgZHN0ID4+IDEsIHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAg
ICB2b2lkIGZtb3ZSZWFkcm1pbmMoUmVnaXN0ZXJJRCBzcmMsIEZQUmVnaXN0ZXJJRCBkc3QpCisg
ICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDEwKEZNT1ZTX1JFQURf
Uk1fSU5DX09QQ09ERSwgZHN0ID4+IDEsIHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsK
KyAgICB9CisKKyAgICB2b2lkIGZtb3ZXcml0ZXJuZGVjKEZQUmVnaXN0ZXJJRCBzcmMsIFJlZ2lz
dGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXA5
KEZNT1ZTX1dSSVRFX1JOX0RFQ19PUENPREUsIGRzdCwgc3JjID4+IDEpOworICAgICAgICBvbmVT
aG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCBmbG9hdGZwdWxEcmVnKEZQUmVnaXN0ZXJJ
RCBzcmMpCisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDcoRkxP
QVRfT1BDT0RFLCBzcmMgPj4gMSk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisK
KyAgICB2b2lkIGZ0cmNkcm1mcHVsKEZQUmVnaXN0ZXJJRCBzcmMpCisgICAgeworICAgICAgICB1
aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDcoRlRSQ19PUENPREUsIHNyYyA+PiAxKTsKKyAg
ICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAgIC8vIFZhcmlvdXMgbW92ZSBvcHMK
KyAgICAKKyAgICB2b2lkIG1vdkltbTgoaW50IGltbTgsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsK
KyAgICAgICAgQVNTRVJUKChpbW04IDw9IDEyNykgJiYgKGltbTggPj0gLTEyOCkpOworICAgICAg
ICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDMoTU9WSU1NX09QQ09ERSwgZHN0LCBpbW04
KTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAgIHZvaWQgbW92bFJlZ1Jl
ZyhSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICB1aW50MTZf
dCBvcGMgPSBnZXRPcGNvZGVHcm91cDEoTU9WX09QQ09ERSwgZHN0LCBzcmMpOworICAgICAgICBv
bmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCBtb3Z3UmVnTWVtKFJlZ2lzdGVySUQg
c3JjLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9w
Y29kZUdyb3VwMShNT1ZXX1dSSVRFX1JOX09QQ09ERSwgZHN0LCBzcmMpOworICAgICAgICBvbmVT
aG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCBtb3Z3TWVtUmVnKFJlZ2lzdGVySUQgc3Jj
LCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29k
ZUdyb3VwMShNT1ZXX1JFQURfUk1fT1BDT0RFLCBkc3QsIHNyYyk7CisgICAgICAgIG9uZVNob3J0
T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lkIG1vdndNZW1SZWcoaW50IG9mZnNldCwgUmVnaXN0
ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYzsK
KyAgICAgICAgQVNTRVJUKGJhc2UgPT0gU0g0UmVnaXN0ZXJzOjpwYyk7CisgICAgICAgIEFTU0VS
VCgob2Zmc2V0IDw9IDI1NSkgJiYgKG9mZnNldCA+PSAwKSk7CisgICAgICAgIG9wYyA9IGdldE9w
Y29kZUdyb3VwMyhNT1ZXX1JFQURfT0ZGUENfT1BDT0RFLCBkc3QsIG9mZnNldCk7CisgICAgICAg
IG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lkIG1vdndSMG1yKFJlZ2lzdGVySUQg
c3JjLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9w
Y29kZUdyb3VwMShNT1ZXX1JFQURfUjBSTV9PUENPREUsIGRzdCwgc3JjKTsKKyAgICAgICAgb25l
U2hvcnRPcChvcGMpOworICAgIH0KKworICAgIHZvaWQgbW92bFJlZ01lbShSZWdpc3RlcklEIHNy
YywgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKChv
ZmZzZXQgPD0gMTUpICYmIChvZmZzZXQgPj0gMCkpOworICAgICAgICBpZiAoIW9mZnNldCkgewor
ICAgICAgICAgICAgb25lU2hvcnRPcChnZXRPcGNvZGVHcm91cDEoTU9WTF9XUklURV9STl9PUENP
REUsIGJhc2UsIHNyYykpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAg
IG9uZVNob3J0T3AoZ2V0T3Bjb2RlR3JvdXA0KE1PVkxfV1JJVEVfT0ZGUk5fT1BDT0RFLCBiYXNl
LCBzcmMsIG9mZnNldCkpOworICAgIH0KKworICAgIHZvaWQgbW92bFJlZ01lbShSZWdpc3RlcklE
IHNyYywgUmVnaXN0ZXJJRCBiYXNlKQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjOworICAg
ICAgICBvcGMgPSBnZXRPcGNvZGVHcm91cDEoTU9WTF9XUklURV9STl9PUENPREUsIGJhc2UsIHNy
Yyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lkIG1vdmxNZW1S
ZWcoaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7Cisg
ICAgICAgIGlmIChiYXNlID09IFNINFJlZ2lzdGVyczo6cGMpIHsKKyAgICAgICAgICAgIEFTU0VS
VCgob2Zmc2V0IDw9IDI1NSkgJiYgKG9mZnNldCA+PSAwKSk7CisgICAgICAgICAgICBvbmVTaG9y
dE9wKGdldE9wY29kZUdyb3VwMyhNT1ZMX1JFQURfT0ZGUENfT1BDT0RFLCBkc3QsIG9mZnNldCkp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIEFTU0VSVCgob2Zmc2V0
IDw9IDE1KSAmJiAob2Zmc2V0ID49IDApKTsKKyAgICAgICAgaWYgKCFvZmZzZXQpIHsKKyAgICAg
ICAgICAgIG9uZVNob3J0T3AoZ2V0T3Bjb2RlR3JvdXAxKE1PVkxfUkVBRF9STV9PUENPREUsIGRz
dCwgYmFzZSkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIG9uZVNo
b3J0T3AoZ2V0T3Bjb2RlR3JvdXA0KE1PVkxfUkVBRF9PRkZSTV9PUENPREUsIGRzdCwgYmFzZSwg
b2Zmc2V0KSk7CisgICAgfQorCisgICAgdm9pZCBtb3ZiTWVtUmVnKGludCBvZmZzZXQsIFJlZ2lz
dGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICBBU1NFUlQoZHN0ID09
IFNINFJlZ2lzdGVyczo6cjApOworICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91
cDExKE1PVkJfUkVBRF9PRkZSTV9PUENPREUsIGJhc2UsIG9mZnNldCk7CisgICAgICAgIG9uZVNo
b3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lkIG1vdmJSMG1yKFJlZ2lzdGVySUQgc3JjLCBS
ZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdy
b3VwMShNT1ZCX1JFQURfUjBSTV9PUENPREUsIGRzdCwgc3JjKTsKKyAgICAgICAgb25lU2hvcnRP
cChvcGMpOworICAgIH0KKworICAgIHZvaWQgbW92Yk1lbVJlZyhSZWdpc3RlcklEIHNyYywgUmVn
aXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91
cDEoTU9WQl9SRUFEX1JNX09QQ09ERSwgZHN0LCBzcmMpOworICAgICAgICBvbmVTaG9ydE9wKG9w
Yyk7CisgICAgfQorCisgICAgdm9pZCBtb3ZsTWVtUmVnKFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0
ZXJJRCBkc3QpCisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDEo
TU9WTF9SRUFEX1JNX09QQ09ERSwgZHN0LCBiYXNlKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMp
OworICAgIH0KKworICAgIHZvaWQgbW92bE1lbVJlZ0luKFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0
ZXJJRCBkc3QpCisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDEo
TU9WTF9SRUFEX1JNSU5DX09QQ09ERSwgZHN0LCBiYXNlKTsKKyAgICAgICAgb25lU2hvcnRPcChv
cGMpOworICAgIH0KKworICAgIHZvaWQgbW92bFIwbXIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVy
SUQgZHN0KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXAxKE1P
VkxfUkVBRF9SMFJNX09QQ09ERSwgZHN0LCBzcmMpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7
CisgICAgfQorCisgICAgdm9pZCBtb3ZsUmVnTWVtcjAoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVy
SUQgZHN0KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXAxKE1P
VkxfV1JJVEVfUjBSTl9PUENPREUsIGRzdCwgc3JjKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMp
OworICAgIH0KKworICAgIHZvaWQgbW92bEltbThyKGludCBpbW04LCBSZWdpc3RlcklEIGRzdCkK
KyAgICB7CisgICAgICAgIEFTU0VSVCgoaW1tOCA8PSAxMjcpICYmIChpbW04ID49IC0xMjgpKTsK
KyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXAzKE1PVklNTV9PUENPREUsIGRz
dCwgaW1tOCk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lkIGxv
YWRDb25zdGFudCh1aW50MzJfdCBjb25zdGFudCwgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAg
ICAgICBpZiAoKChpbnQpY29uc3RhbnQgPD0gMHg3ZikgJiYgKChpbnQpY29uc3RhbnQgPj0gLTB4
ODApKSB7CisgICAgICAgICAgICBtb3ZJbW04KGNvbnN0YW50LCBkc3QpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisgICAgICAgIG1fYnVmZmVyLmVuc3VyZVNwYWNlKG1heEluc3Ry
dWN0aW9uU2l6ZSwgc2l6ZW9mKHVpbnQzMl90KSk7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdl
dE9wY29kZUdyb3VwMyhNT1ZJTU1fT1BDT0RFLCBkc3QsIDApOworICAgICAgICBwcmludEluc3Ry
KGdldE9wY29kZUdyb3VwMyhNT1ZJTU1fT1BDT0RFLCBkc3QsIGNvbnN0YW50KSwgbV9idWZmZXIu
dW5jaGVja2VkU2l6ZSgpKTsKKyAgICAgICAgbV9idWZmZXIucHV0U2hvcnRXaXRoQ29uc3RhbnRJ
bnQob3BjLCBjb25zdGFudCwgdHJ1ZSk7CisgICAgfQorCisgICAgdm9pZCBsb2FkQ29uc3RhbnRV
blJldXNhYmxlKHVpbnQzMl90IGNvbnN0YW50LCBSZWdpc3RlcklEIGRzdCwgYm9vbCBlbnN1cmVT
cGFjZSA9IGZhbHNlKQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3Jv
dXAzKE1PVklNTV9PUENPREUsIGRzdCwgMCk7CisgICAgICAgIGlmIChlbnN1cmVTcGFjZSkKKyAg
ICAgICAgICAgbV9idWZmZXIuZW5zdXJlU3BhY2UobWF4SW5zdHJ1Y3Rpb25TaXplLCBzaXplb2Yo
dWludDMyX3QpKTsKKyAgICAgICAgcHJpbnRJbnN0cihnZXRPcGNvZGVHcm91cDMoTU9WSU1NX09Q
Q09ERSwgZHN0LCBjb25zdGFudCksIG1fYnVmZmVyLnVuY2hlY2tlZFNpemUoKSk7CisgICAgICAg
IG1fYnVmZmVyLnB1dFNob3J0V2l0aENvbnN0YW50SW50KG9wYywgY29uc3RhbnQpOworICAgIH0K
KworICAgIC8vIEZsb3cgY29udHJvbAorCisgICAgSm1wU3JjIGNhbGwoKQorICAgIHsKKyAgICAg
ICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgbV9idWZmZXIuZW5z
dXJlU3BhY2UobWF4SW5zdHJ1Y3Rpb25TaXplICsgNCwgc2l6ZW9mKHVpbnQzMl90KSk7CisgICAg
ICAgIGxvYWRDb25zdGFudFVuUmV1c2FibGUoMHgwLCBzY3IpOworICAgICAgICBicmFuY2goSlNS
X09QQ09ERSwgc2NyKTsKKyAgICAgICAgbm9wKCk7CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNj
cik7CisgICAgICAgIHJldHVybiBKbXBTcmMobV9idWZmZXIudW5jaGVja2VkU2l6ZSgpKTsKKyAg
ICB9CisKKyAgICBKbXBTcmMgY2FsbChSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIG1f
YnVmZmVyLmVuc3VyZVNwYWNlKG1heEluc3RydWN0aW9uU2l6ZSArIDIpOworICAgICAgICBicmFu
Y2goSlNSX09QQ09ERSwgZHN0KTsKKyAgICAgICAgbm9wKCk7CisgICAgICAgIHJldHVybiBKbXBT
cmMobV9idWZmZXIudW5jaGVja2VkU2l6ZSgpKTsKKyAgICB9CisKKyAgICBKbXBTcmMgam1wKCkK
KyAgICB7CisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAg
IG1fYnVmZmVyLmVuc3VyZVNwYWNlKG1heEluc3RydWN0aW9uU2l6ZSArIDQsIHNpemVvZih1aW50
MzJfdCkpOworICAgICAgICBpbnQgbV9zaXplID0gbV9idWZmZXIudW5jaGVja2VkU2l6ZSgpOwor
ICAgICAgICBsb2FkQ29uc3RhbnRVblJldXNhYmxlKDB4MCwgc2NyKTsKKyAgICAgICAgYnJhbmNo
KEJSQUZfT1BDT0RFLCBzY3IpOworICAgICAgICBub3AoKTsKKyAgICAgICAgcmVsZWFzZVNjcmF0
Y2goc2NyKTsKKyAgICAgICAgcmV0dXJuIEptcFNyYyhtX3NpemUpOworICAgIH0KKworICAgIEpt
cFNyYyBqbXAoUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICBqbXBSZWcoZHN0KTsKKyAg
ICAgICAgcmV0dXJuIEptcFNyYyhtX2J1ZmZlci51bmNoZWNrZWRTaXplKCkpOworICAgIH0KKwor
ICAgIHZvaWQgam1wUmVnKFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgbV9idWZmZXIu
ZW5zdXJlU3BhY2UobWF4SW5zdHJ1Y3Rpb25TaXplICsgMik7CisgICAgICAgIGJyYW5jaChKTVBf
T1BDT0RFLCBkc3QpOworICAgICAgICBub3AoKTsKKyAgICB9CisKKyAgICBKbXBTcmMgam5lKCkK
KyAgICB7CisgICAgICAgIGludCBtX3NpemUgPSBtX2J1ZmZlci51bmNoZWNrZWRTaXplKCk7Cisg
ICAgICAgIGJyYW5jaChCRl9PUENPREUsIDApOworICAgICAgICByZXR1cm4gSm1wU3JjKG1fc2l6
ZSk7CisgICAgfQorCisgICAgSm1wU3JjIGplKCkKKyAgICB7CisgICAgICAgIGludCBtX3NpemUg
PSBtX2J1ZmZlci51bmNoZWNrZWRTaXplKCk7CisgICAgICAgIGJyYW5jaChCVF9PUENPREUsIDAp
OworICAgICAgICByZXR1cm4gSm1wU3JjKG1fc2l6ZSk7CisgICAgfQorCisgICAgdm9pZCByZXQo
KQorICAgIHsKKyAgICAgICAgbV9idWZmZXIuZW5zdXJlU3BhY2UobWF4SW5zdHJ1Y3Rpb25TaXpl
ICsgMik7CisgICAgICAgIG9uZVNob3J0T3AoUlRTX09QQ09ERSwgZmFsc2UpOworICAgIH0KKwor
ICAgIEptcERzdCBsYWJlbCgpCisgICAgeworICAgICAgICByZXR1cm4gSm1wRHN0KG1fYnVmZmVy
LnNpemUoKSk7CisgICAgfQorCisgICAgaW50IHNpemVPZkNvbnN0YW50UG9vbCgpCisgICAgewor
ICAgICAgICAgcmV0dXJuIG1fYnVmZmVyLnNpemVPZkNvbnN0YW50UG9vbCgpOworICAgIH0KKwor
ICAgIEptcERzdCBhbGlnbihpbnQgYWxpZ25tZW50KQorICAgIHsKKyAgICAgICAgbV9idWZmZXIu
ZW5zdXJlU3BhY2UobWF4SW5zdHJ1Y3Rpb25TaXplICsgMik7CisgICAgICAgIHdoaWxlICghbV9i
dWZmZXIuaXNBbGlnbmVkKGFsaWdubWVudCkpIHsKKyAgICAgICAgICAgIG5vcCgpOworICAgICAg
ICAgICAgbV9idWZmZXIuZW5zdXJlU3BhY2UobWF4SW5zdHJ1Y3Rpb25TaXplICsgMik7CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIGxhYmVsKCk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQg
Y2hhbmdlUENyZWxhdGl2ZUFkZHJlc3MoaW50IG9mZnNldCwgdWludDE2X3QqIGluc3RydWN0aW9u
UHRyLCB1aW50MzJfdCBuZXdBZGRyZXNzKQorICAgIHsKKyAgICAgICAgdWludDMyX3QgYWRkcmVz
cyA9IChvZmZzZXQgPDwgMikgKyAoKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3Q+KGluc3RydWN0
aW9uUHRyKSArIDQpICYofjB4MykpOworICAgICAgICAqcmVpbnRlcnByZXRfY2FzdDx1aW50MzJf
dCo+KGFkZHJlc3MpID0gbmV3QWRkcmVzczsKKyAgICB9CisKKyAgICBzdGF0aWMgdWludDE2X3Qq
IGdldEluc3RydWN0aW9uUHRyKHZvaWQqIGNvZGUsIGludCBvZmZzZXQpCisgICAgeworICAgICAg
ICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx1aW50MTZfdCo+IChyZWludGVycHJldF9jYXN0PHVp
bnQzMl90Pihjb2RlKSArIG9mZnNldCk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgbGlua0p1
bXAodm9pZCogY29kZSwgSm1wU3JjIGZyb20sIHZvaWQqIHRvKQorICAgIHsKKyAgICAgICAgQVNT
RVJUKGZyb20ubV9vZmZzZXQgIT0gLTEpOworICAgICAgICB1aW50MTZfdCogaW5zdHJ1Y3Rpb25Q
dHIgPSBnZXRJbnN0cnVjdGlvblB0cihjb2RlLCBmcm9tLm1fb2Zmc2V0KTsKKyAgICAgICAgdWlu
dDE2X3QgaW5zdHJ1Y3Rpb24gPSAqaW5zdHJ1Y3Rpb25QdHI7CisgICAgICAgIGludCBvZmZzZXRC
aXRzID0gKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3Q+KHRvKSAtIHJlaW50ZXJwcmV0X2Nhc3Q8
dWludDMyX3Q+KGNvZGUpKSAtIGZyb20ubV9vZmZzZXQ7CisgICAgICAgIGlmICgoKGluc3RydWN0
aW9uICYgMHhmZjAwKSA9PSBCVF9PUENPREUpIHx8ICgoaW5zdHJ1Y3Rpb24gJiAweGZmMDApID09
IEJGX09QQ09ERSkpIHsKKyAgICAgICAgICAgIC8qIEJUIGxhYmVsID09PiBCRiAyCisgICAgICAg
ICAgICAgICBub3AgICAgICAgICAgTERSIHJlZworICAgICAgICAgICAgICAgbm9wICAgICAgICAg
IGJyYWYgQHJlZworICAgICAgICAgICAgICAgbm9wICAgICAgICAgIG5vcAorICAgICAgICAgICAg
Ki8KKyAgICAgICAgICAgIG9mZnNldEJpdHMgLT0gODsKKyAgICAgICAgICAgIGluc3RydWN0aW9u
IF49IDB4MDIwMjsKKyAgICAgICAgICAgICppbnN0cnVjdGlvblB0cisrID0gaW5zdHJ1Y3Rpb247
CisgICAgICAgICAgICBjaGFuZ2VQQ3JlbGF0aXZlQWRkcmVzcygoKmluc3RydWN0aW9uUHRyICYg
MHhmZiksIGluc3RydWN0aW9uUHRyLCBvZmZzZXRCaXRzKTsKKyAgICAgICAgICAgIGluc3RydWN0
aW9uID0gKEJSQUZfT1BDT0RFIHwgKCppbnN0cnVjdGlvblB0cisrICYgMHhmMDApKTsKKyAgICAg
ICAgICAgICppbnN0cnVjdGlvblB0cisrID0gaW5zdHJ1Y3Rpb247CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICB9CisgICAgICAgICAvKiBNT1YgI2ltbSwgcmVnID0+IExEUiByZWcKKyAg
ICAgICAgICAgIGJyYWYgQHJlZyAgICAgICAgYnJhZiBAcmVnCisgICAgICAgICAgICBub3AgICAg
ICAgICAgICAgIG5vcAorICAgICAgICAgKi8KKyAgICAgICAgQVNTRVJUKCgqKGluc3RydWN0aW9u
UHRyICsgMSkgJiBCUkFGX09QQ09ERSkgPT0gQlJBRl9PUENPREUpOworICAgICAgICBvZmZzZXRC
aXRzIC09IDQ7CisgICAgICAgIGlmIChvZmZzZXRCaXRzID49IC00MDk2ICYmIG9mZnNldEJpdHMg
PD0gNDA5NCkgeworICAgICAgICAgICAgKmluc3RydWN0aW9uUHRyID0gZ2V0T3Bjb2RlR3JvdXA2
KEJSQV9PUENPREUsIG9mZnNldEJpdHMgPj4gMSk7CisgICAgICAgICAgICAqKCsraW5zdHJ1Y3Rp
b25QdHIpID0gTk9QX09QQ09ERTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
ICAgICBjaGFuZ2VQQ3JlbGF0aXZlQWRkcmVzcygoKmluc3RydWN0aW9uUHRyICYgMHhmZiksIGlu
c3RydWN0aW9uUHRyLCBvZmZzZXRCaXRzIC0gMik7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQg
bGlua0NhbGwodm9pZCogY29kZSwgSm1wU3JjIGZyb20sIHZvaWQqIHRvKQorICAgIHsKKyAgICAg
ICAgdWludDE2X3QqIGluc3RydWN0aW9uUHRyID0gZ2V0SW5zdHJ1Y3Rpb25QdHIoY29kZSwgZnJv
bS5tX29mZnNldCk7CisgICAgICAgIGluc3RydWN0aW9uUHRyIC09IDM7CisgICAgICAgIGNoYW5n
ZVBDcmVsYXRpdmVBZGRyZXNzKCgqaW5zdHJ1Y3Rpb25QdHIgJiAweGZmKSwgaW5zdHJ1Y3Rpb25Q
dHIsIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3Q+KHRvKSk7CisgICAgfQorCisgICAgc3RhdGlj
IHZvaWQgbGlua1BvaW50ZXIodm9pZCogY29kZSwgSm1wRHN0IHdoZXJlLCB2b2lkKiB2YWx1ZSkK
KyAgICB7CisgICAgICAgIHVpbnQxNl90KiBpbnN0cnVjdGlvblB0ciA9IGdldEluc3RydWN0aW9u
UHRyKGNvZGUsIHdoZXJlLm1fb2Zmc2V0KTsKKyAgICAgICAgY2hhbmdlUENyZWxhdGl2ZUFkZHJl
c3MoKCppbnN0cnVjdGlvblB0ciAmIDB4ZmYpLCBpbnN0cnVjdGlvblB0ciwgcmVpbnRlcnByZXRf
Y2FzdDx1aW50MzJfdD4odmFsdWUpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdW5zaWduZWQgZ2V0
Q2FsbFJldHVybk9mZnNldChKbXBTcmMgY2FsbCkKKyAgICB7CisgICAgICAgIEFTU0VSVChjYWxs
Lm1fb2Zmc2V0ID49IDApOworICAgICAgICByZXR1cm4gY2FsbC5tX29mZnNldDsKKyAgICB9CisK
KyAgICBzdGF0aWMgdWludDMyX3QqIGdldExkckltbUFkZHJlc3NPblBvb2woU0g0V29yZCogaW5z
biwgdWludDMyX3QqIGNvbnN0UG9vbCkKKyAgICB7CisgICAgICAgIHJldHVybiAoY29uc3RQb29s
ICsgKCppbnNuICYgMHhmZikpOworICAgIH0KKworICAgIHN0YXRpYyBTSDRXb3JkIHBhdGNoQ29u
c3RhbnRQb29sTG9hZChTSDRXb3JkIGxvYWQsIGludCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJl
dHVybiAoKGxvYWQgJiB+MHhmZikgfCB2YWx1ZSk7CisgICAgfQorCisgICAgc3RhdGljIEFzc2Vt
YmxlckJ1ZmZlcjo6VHdvU2hvcnRzIHBsYWNlQ29uc3RhbnRQb29sQmFycmllcihpbnQgb2Zmc2V0
KQorICAgIHsKKyAgICAgICAgQVNTRVJUKCgob2Zmc2V0ID4+IDEpIDw9MjA0NykgJiYgKChvZmZz
ZXQgPj4gMSkgPj0gLTIwNDgpKTsKKyAgICAgICAgQXNzZW1ibGVyQnVmZmVyOjpUd29TaG9ydHMg
bV9iYXJyaWVyOworICAgICAgICBtX2JhcnJpZXIuaGlnaCA9IChCUkFfT1BDT0RFIHwgKG9mZnNl
dCA+PiAxKSk7CisgICAgICAgIG1fYmFycmllci5sb3cgPSBOT1BfT1BDT0RFOworICAgICAgICBw
cmludEluc3RyKCgoQlJBX09QQ09ERSB8IChvZmZzZXQgPj4gMSkpKSwgMCk7CisgICAgICAgIHBy
aW50SW5zdHIoTk9QX09QQ09ERSwgMCk7CisgICAgICAgIHJldHVybiBtX2JhcnJpZXI7CisgICAg
fQorCisgICAgc3RhdGljIHZvaWQgcGF0Y2hDb25zdGFudFBvb2xMb2FkKHZvaWQqIGxvYWRBZGRy
LCB2b2lkKiBjb25zdFBvb2xBZGRyKQorICAgIHsKKyAgICAgICAgU0g0V29yZCogaW5zdHJ1Y3Rp
b25QdHIgPSByZWludGVycHJldF9jYXN0PFNINFdvcmQqPihsb2FkQWRkcik7CisgICAgICAgIFNI
NFdvcmQgaW5zdHJ1Y3Rpb24gPSAqaW5zdHJ1Y3Rpb25QdHI7CisgICAgICAgIFNINFdvcmQgaW5k
ZXggPSBpbnN0cnVjdGlvbiAmIDB4ZmY7CisgICAgICAgIGlmICgoaW5zdHJ1Y3Rpb24gJiAweGYw
MDApICE9IE1PVklNTV9PUENPREUpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIEFTU0VS
VCgoKChyZWludGVycHJldF9jYXN0PHVpbnQzMl90Pihjb25zdFBvb2xBZGRyKSAtIHJlaW50ZXJw
cmV0X2Nhc3Q8dWludDMyX3Q+KGxvYWRBZGRyKSkgKyBpbmRleCAqIDQpKSA8IDEwMjQpOworICAg
ICAgICBpbnQgb2Zmc2V0ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdD4oY29uc3RQb29sQWRk
cikgKyAoaW5kZXggKiA0KSAtICgocmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdD4oaW5zdHJ1Y3Rp
b25QdHIpICYgfjB4MDMpICsgNCk7CisgICAgICAgIGluc3RydWN0aW9uICY9MHhmMDA7CisgICAg
ICAgIGluc3RydWN0aW9uIHw9IDB4ZDAwMDsKKyAgICAgICAgb2Zmc2V0ICY9IDB4MDNmZjsKKyAg
ICAgICAgaW5zdHJ1Y3Rpb24gfD0gKG9mZnNldCA+PiAyKTsKKyAgICAgICAgKmluc3RydWN0aW9u
UHRyID0gaW5zdHJ1Y3Rpb247CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgcmVwYXRjaFBvaW50
ZXIodm9pZCogd2hlcmUsIHZvaWQqIHZhbHVlKQorICAgIHsKKyAgICAgICAgcGF0Y2hQb2ludGVy
KHdoZXJlLCB2YWx1ZSk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgcmVwYXRjaEludDMyKHZv
aWQqIHdoZXJlLCBpbnQzMl90IHZhbHVlKQorICAgIHsKKyAgICAgICAgdWludDE2X3QqIGluc3Ry
dWN0aW9uUHRyID0gcmVpbnRlcnByZXRfY2FzdDx1aW50MTZfdCo+KHdoZXJlKTsKKyAgICAgICAg
Y2hhbmdlUENyZWxhdGl2ZUFkZHJlc3MoKCppbnN0cnVjdGlvblB0ciAmIDB4ZmYpLCBpbnN0cnVj
dGlvblB0ciwgdmFsdWUpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIHJlbGlua0NhbGwodm9p
ZCogZnJvbSwgdm9pZCogdG8pCisgICAgeworICAgICAgICB1aW50MTZfdCogaW5zdHJ1Y3Rpb25Q
dHIgPSByZWludGVycHJldF9jYXN0PHVpbnQxNl90Kj4oZnJvbSk7CisgICAgICAgIGluc3RydWN0
aW9uUHRyIC09IDM7CisgICAgICAgIGNoYW5nZVBDcmVsYXRpdmVBZGRyZXNzKCgqaW5zdHJ1Y3Rp
b25QdHIgJiAweGZmKSwgaW5zdHJ1Y3Rpb25QdHIsIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3Q+
KHRvKSk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgcmVsaW5rSnVtcCh2b2lkKiBmcm9tLCB2
b2lkKiB0bykKKyAgICB7CisgICAgICAgIHVpbnQxNl90KiBpbnN0cnVjdGlvblB0ciA9IHJlaW50
ZXJwcmV0X2Nhc3Q8dWludDE2X3QqPiAoZnJvbSk7CisgICAgICAgIHVpbnQxNl90IGluc3RydWN0
aW9uID0gKmluc3RydWN0aW9uUHRyOworICAgICAgICBpbnQzMl90IG9mZnNldEJpdHMgPSAocmVp
bnRlcnByZXRfY2FzdDx1aW50MzJfdD4odG8pIC0gcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdD4o
ZnJvbSkpOworICAgICAgICB1aW50MTZfdCogYWRkcmVzczsKKyAgICAgICAgaWYgKCgoKmluc3Ry
dWN0aW9uUHRyICYgMHhmZjAwKSA9PSBCVF9PUENPREUpIHx8ICgoKmluc3RydWN0aW9uUHRyICYg
MHhmZjAwKSA9PSBCRl9PUENPREUpKSB7CisgICAgICAgICAgICBvZmZzZXRCaXRzIC09IDg7Cisg
ICAgICAgICAgICBpbnN0cnVjdGlvblB0cisrOworICAgICAgICAgICAgY2hhbmdlUENyZWxhdGl2
ZUFkZHJlc3MoKCppbnN0cnVjdGlvblB0ciAmIDB4ZmYpLCBpbnN0cnVjdGlvblB0ciwgb2Zmc2V0
Qml0cyk7CisgICAgICAgICAgICBpbnN0cnVjdGlvbiA9IChCUkFGX09QQ09ERSB8ICgqaW5zdHJ1
Y3Rpb25QdHIrKyAmIDB4ZjAwKSk7CisgICAgICAgICAgICAqaW5zdHJ1Y3Rpb25QdHIrKyA9IGlu
c3RydWN0aW9uOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIEFTU0VS
VCgoKihpbnN0cnVjdGlvblB0ciArIDEpICYgQlJBRl9PUENPREUpID09IEJSQUZfT1BDT0RFKTsK
KyAgICAgICAgb2Zmc2V0Qml0cyAtPSA0OworICAgICAgICBpZiAob2Zmc2V0Qml0cyA+PSAtNDA5
NiAmJiBvZmZzZXRCaXRzIDw9IDQwOTQpIHsKKyAgICAgICAgICAgICppbnN0cnVjdGlvblB0ciA9
IGdldE9wY29kZUdyb3VwNihCUkFfT1BDT0RFLCBvZmZzZXRCaXRzID4+IDEpOworICAgICAgICAg
ICAgKigrK2luc3RydWN0aW9uUHRyKSA9IE5PUF9PUENPREU7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICAgICAgY2hhbmdlUENyZWxhdGl2ZUFkZHJlc3MoKCppbnN0cnVjdGlv
blB0ciAmIDB4ZmYpLCBpbnN0cnVjdGlvblB0ciwgb2Zmc2V0Qml0cyAtIDIpOworICAgIH0KKwor
ICAgIC8vIExpbmtpbmcgJiBwYXRjaGluZworCisgICAgdm9pZCBsaW5rSnVtcChKbXBTcmMgZnJv
bSwgSm1wRHN0IHRvKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHRvLm1fb2Zmc2V0ICE9IC0xKTsK
KyAgICAgICAgQVNTRVJUKGZyb20ubV9vZmZzZXQgIT0gLTEpOworICAgICAgICB1aW50MTZfdCog
aW5zdHJ1Y3Rpb25QdHIgPSBnZXRJbnN0cnVjdGlvblB0cihkYXRhKCksIGZyb20ubV9vZmZzZXQp
OworICAgICAgICB1aW50MTZfdCBpbnN0cnVjdGlvbiA9ICppbnN0cnVjdGlvblB0cjsKKyAgICAg
ICAgaW50IG9mZnNldEJpdHM7CisgICAgICAgIGlmICgoKGluc3RydWN0aW9uICYgMHhmZjAwKSA9
PSBCVF9PUENPREUpIHx8ICgoaW5zdHJ1Y3Rpb24gJiAweGZmMDApID09IEJGX09QQ09ERSkpIHsK
KyAgICAgICAgICAgIC8qIEJUIGxhYmVsID0+IEJGIDIKKyAgICAgICAgICAgICAgIG5vcCAgICAg
ICAgTERSIHJlZworICAgICAgICAgICAgICAgbm9wICAgICAgICBicmFmIEByZWcKKyAgICAgICAg
ICAgICAgIG5vcCAgICAgICAgbm9wCisgICAgICAgICAgICAqLworICAgICAgICAgICAgb2Zmc2V0
Qml0cyA9ICh0by5tX29mZnNldCAtIGZyb20ubV9vZmZzZXQpIC0gODsKKyAgICAgICAgICAgIGlu
c3RydWN0aW9uIF49IDB4MDIwMjsKKyAgICAgICAgICAgICppbnN0cnVjdGlvblB0cisrID0gaW5z
dHJ1Y3Rpb247CisgICAgICAgICAgICBpZiAoKCppbnN0cnVjdGlvblB0ciAmIDB4ZjAwMCkgPT0g
MHhlMDAwKSB7CisgICAgICAgICAgICAgICAgdWludDMyX3QqIGFkZHIgPSBnZXRMZHJJbW1BZGRy
ZXNzT25Qb29sKGluc3RydWN0aW9uUHRyLCBtX2J1ZmZlci5wb29sQWRkcmVzcygpKTsKKyAgICAg
ICAgICAgICAgICAqYWRkciA9IG9mZnNldEJpdHM7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAg
ICAgICAgICAgICBjaGFuZ2VQQ3JlbGF0aXZlQWRkcmVzcygoKmluc3RydWN0aW9uUHRyICYgMHhm
ZiksIGluc3RydWN0aW9uUHRyLCBvZmZzZXRCaXRzKTsKKyAgICAgICAgICAgIGluc3RydWN0aW9u
ID0gKEJSQUZfT1BDT0RFIHwgKCppbnN0cnVjdGlvblB0cisrICYgMHhmMDApKTsKKyAgICAgICAg
ICAgICppbnN0cnVjdGlvblB0cisrID0gaW5zdHJ1Y3Rpb247CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICAgICAgLyogTU9WICMgaW1tLCByZWcgPT4gTERSIHJlZworICAgICAg
ICAgICBicmFmIEByZWcgICAgICAgICBicmFmIEByZWcKKyAgICAgICAgICAgbm9wICAgICAgICAg
ICAgICAgbm9wCisgICAgICAgICovCisgICAgICAgIEFTU0VSVCgoKihpbnN0cnVjdGlvblB0ciAr
IDEpICYgQlJBRl9PUENPREUpID09IEJSQUZfT1BDT0RFKTsKKyAgICAgICAgb2Zmc2V0Qml0cyA9
ICh0by5tX29mZnNldCAtIGZyb20ubV9vZmZzZXQpIC0gNDsKKyAgICAgICAgaWYgKG9mZnNldEJp
dHMgPj0gLTQwOTYgJiYgb2Zmc2V0Qml0cyA8PSA0MDk0KSB7CisgICAgICAgICAgICAqaW5zdHJ1
Y3Rpb25QdHIgPSBnZXRPcGNvZGVHcm91cDYoQlJBX09QQ09ERSwgb2Zmc2V0Qml0cyA+PiAxKTsK
KyAgICAgICAgICAgICooKytpbnN0cnVjdGlvblB0cikgPSBOT1BfT1BDT0RFOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGluc3RydWN0aW9uID0gKmluc3RydWN0aW9u
UHRyOworICAgICAgICBpZiAoKGluc3RydWN0aW9uICAmIDB4ZjAwMCkgPT0gMHhlMDAwKSB7Cisg
ICAgICAgICAgICB1aW50MzJfdCogYWRkciA9IGdldExkckltbUFkZHJlc3NPblBvb2woaW5zdHJ1
Y3Rpb25QdHIsIG1fYnVmZmVyLnBvb2xBZGRyZXNzKCkpOworICAgICAgICAgICAgKmFkZHIgPSBv
ZmZzZXRCaXRzIC0gMjsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBj
aGFuZ2VQQ3JlbGF0aXZlQWRkcmVzcygoKmluc3RydWN0aW9uUHRyICYgMHhmZiksIGluc3RydWN0
aW9uUHRyLCBvZmZzZXRCaXRzIC0gMik7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQqIGdldFJl
bG9jYXRlZEFkZHJlc3Modm9pZCogY29kZSwgSm1wU3JjIGp1bXApCisgICAgeworICAgICAgICBy
ZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdD4o
Y29kZSkgKyBqdW1wLm1fb2Zmc2V0KTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCogZ2V0UmVs
b2NhdGVkQWRkcmVzcyh2b2lkKiBjb2RlLCBKbXBEc3QgZGVzdGluYXRpb24pCisgICAgeworICAg
ICAgICBBU1NFUlQoZGVzdGluYXRpb24ubV9vZmZzZXQgIT0gLTEpOworICAgICAgICByZXR1cm4g
cmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdD4oY29kZSkg
KyBkZXN0aW5hdGlvbi5tX29mZnNldCk7CisgICAgfQorCisgICAgc3RhdGljIGludCBnZXREaWZm
ZXJlbmNlQmV0d2VlbkxhYmVscyhKbXBEc3Qgc3JjLCBKbXBEc3QgZHN0KQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGRzdC5tX29mZnNldCAtIHNyYy5tX29mZnNldDsKKyAgICB9CisKKyAgICBzdGF0
aWMgaW50IGdldERpZmZlcmVuY2VCZXR3ZWVuTGFiZWxzKEptcERzdCBzcmMsIEptcFNyYyBkc3Qp
CisgICAgeworICAgICAgICByZXR1cm4gZHN0Lm1fb2Zmc2V0IC0gc3JjLm1fb2Zmc2V0OworICAg
IH0KKworICAgIHN0YXRpYyBpbnQgZ2V0RGlmZmVyZW5jZUJldHdlZW5MYWJlbHMoSm1wU3JjIHNy
YywgSm1wRHN0IGRzdCkKKyAgICB7CisgICAgICAgIHJldHVybiBkc3QubV9vZmZzZXQgLSBzcmMu
bV9vZmZzZXQ7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgcGF0Y2hQb2ludGVyKHZvaWQqIGNv
ZGUsIEptcERzdCB3aGVyZSwgdm9pZCogdmFsdWUpCisgICAgeworICAgICAgICBwYXRjaFBvaW50
ZXIocmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KGNvZGUpICsgd2hlcmUubV9vZmZzZXQsIHZh
bHVlKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBwYXRjaFBvaW50ZXIodm9pZCogY29kZSwg
dm9pZCogdmFsdWUpCisgICAgeworICAgICAgICBwYXRjaEludDMyKGNvZGUsIHJlaW50ZXJwcmV0
X2Nhc3Q8dWludDMyX3Q+KHZhbHVlKSk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgcGF0Y2hJ
bnQzMih2b2lkKiBjb2RlLCB1aW50MzJfdCB2YWx1ZSkKKyAgICB7CisgICAgICAgIGNoYW5nZVBD
cmVsYXRpdmVBZGRyZXNzKCgqKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDE2X3QqPihjb2RlKSkgJiAw
eGZmKSwgcmVpbnRlcnByZXRfY2FzdDx1aW50MTZfdCo+KGNvZGUpLCB2YWx1ZSk7CisgICAgfQor
CisgICAgdm9pZCogZXhlY3V0YWJsZUNvcHkoRXhlY3V0YWJsZVBvb2wqIGFsbG9jYXRvcikKKyAg
ICB7CisgICAgICAgIHZvaWQqIGNvcHkgPSBtX2J1ZmZlci5leGVjdXRhYmxlQ29weShhbGxvY2F0
b3IpOworICAgICAgICBBU1NFUlQoY29weSk7CisgICAgICAgIHJldHVybiBjb3B5OworICAgIH0K
KworICAgIHZvaWQgcHJlZml4KHVpbnQxNl90IHByZSkKKyAgICB7CisgICAgICAgIG1fYnVmZmVy
LnB1dEJ5dGUocHJlKTsKKyAgICB9CisKKyAgICB2b2lkIG9uZVNob3J0T3AodWludDE2X3Qgb3Bj
b2RlLCBib29sIGNoZWNrc2l6ZSA9IHRydWUsIGJvb2wgaXNEb3VibGUgPSB0cnVlKQorICAgIHsK
KyAgICAgICAgcHJpbnRJbnN0cihvcGNvZGUsIG1fYnVmZmVyLnVuY2hlY2tlZFNpemUoKSwgaXNE
b3VibGUpOworICAgICAgICBpZiAoY2hlY2tzaXplKQorICAgICAgICAgICAgbV9idWZmZXIuZW5z
dXJlU3BhY2UobWF4SW5zdHJ1Y3Rpb25TaXplKTsKKyAgICAgICAgbV9idWZmZXIucHV0U2hvcnRV
bmNoZWNrZWQob3Bjb2RlKTsKKyAgICB9CisKKyAgICB2b2lkIGVuc3VyZVNwYWNlKGludCBzcGFj
ZSkKKyAgICB7CisgICAgICAgIG1fYnVmZmVyLmVuc3VyZVNwYWNlKHNwYWNlKTsKKyAgICB9CisK
KyAgICB2b2lkIGVuc3VyZVNwYWNlKGludCBpbnNuU3BhY2UsIGludCBjb25zdFNwYWNlKQorICAg
IHsKKyAgICAgICAgbV9idWZmZXIuZW5zdXJlU3BhY2UoaW5zblNwYWNlLCBjb25zdFNwYWNlKTsK
KyAgICB9CisKKyAgICAvLyBBZG1pbmlzdHJhdGl2ZSBtZXRob2RzCisKKyAgICB2b2lkKiBkYXRh
KCkgY29uc3QgeyByZXR1cm4gbV9idWZmZXIuZGF0YSgpOyB9CisgICAgaW50IHNpemUoKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIG1fYnVmZmVyLnNpemUoKTsKKyAgICB9CisKKyNpZmRlZiBTSDRf
QVNTRU1CTEVSX1RSQUNJTkcKKyAgICBzdGF0aWMgdm9pZCBwcmludEluc3RyKHVpbnQxNl90IG9w
YywgaW50IHNpemUsIGJvb2wgaXNkb3VibGVJbnN0ID0gdHJ1ZSkKKyAgICB7CisgICAgICAgIGlm
ICghZ2V0ZW52KCJKYXZhU2NyaXB0Q29yZUR1bXBKSVQiKSkKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgY29uc3QgY2hhciAqZm9ybWF0ID0gMDsKKyAgICAgICAgcHJpbnRmU3Rkb3V0SW5z
dHIoIm9mZnNldCA6IDB4JTguOHhcdCIsIHNpemUpOworICAgICAgICBzd2l0Y2ggKG9wYykgewor
ICAgICAgICBjYXNlIEJSS19PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIEJSS1xu
IjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE5PUF9PUENPREU6CisgICAgICAg
ICAgICBmb3JtYXQgPSAiICAgIE5PUFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIFJUU19PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSIgICAgKlJUU1xuIjsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNFVFNfT1BDT0RFOgorICAgICAgICAgICAgZm9y
bWF0ID0gIiAgICBTRVRTXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU0VU
VF9PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIFNFVFRcbiI7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBDTFJUX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9
ICIgICAgQ0xSVFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlm
IChmb3JtYXQpIHsKKyAgICAgICAgICAgIHByaW50ZlN0ZG91dEluc3RyKGZvcm1hdCk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgc3dpdGNoIChvcGMgJiAweGYwZmYp
IHsKKyAgICAgICAgY2FzZSBCUkFGX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAg
KkJSQUYgUiVkXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRFRfT1BDT0RF
IDoKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgRFQgUiVkXG4iOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgQ01QUExfT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAg
ICBDTVAvUEwgUiVkXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ01QUFpf
T1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBDTVAvUFogUiVkXG4iOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSk1QX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1h
dCA9ICIgICAgKkpNUCBAUiVkXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
SlNSX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgKkpTUiBAUiVkXG4iOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTERTUFJfT1BDT0RFOgorICAgICAgICAgICAg
Zm9ybWF0ID0gIiAgICBMRFMgUiVkLCBQUlxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIExEU0xQUl9PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIExEUy5MIEBS
JWQrLCBQUlxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE1PVlRfT1BDT0RF
OgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBNT1ZUIFIlZFxuIjsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIFNIQUxfT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAg
ICBTSEFMIFIlZFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNIQVJfT1BD
T0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBTSEFSIFIlZFxuIjsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIFNITExfT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0g
IiAgICBTSExMIFIlZFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNITEwy
X09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgU0hMTDIgUiVkXG4iOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU0hMTDhfT1BDT0RFOgorICAgICAgICAgICAgZm9y
bWF0ID0gIiAgICBTSExMOCBSJWRcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBTSExMMTZfT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBTSExMMTYgUiVkXG4i
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU0hMUl9PUENPREU6CisgICAgICAg
ICAgICBmb3JtYXQgPSAiICAgIFNITFIgUiVkXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgU0hMUjJfT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBTSExSMiBS
JWRcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTSExSOF9PUENPREU6Cisg
ICAgICAgICAgICBmb3JtYXQgPSAiICAgIFNITFI4IFIlZFxuIjsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIFNITFIxNl9PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAg
IFNITFIxNiBSJWRcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTVFNQUl9P
UENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIFNUUyBQUiwgUiVkXG4iOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU1RTTFBSX09QQ09ERToKKyAgICAgICAgICAgIGZv
cm1hdCA9ICIgICAgU1RTLkwgUFIsIEAtUiVkXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgTERTX1JNX0ZQVUxfT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBM
RFMgUiVkLCBGUFVMXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU1RTX0ZQ
VUxfUk5fT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBTVFMgRlBVTCwgUiVkIFxu
IjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEZMRFNfRlJNX0ZQVUxfT1BDT0RF
OgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBGTERTIEZSJWQsIEZQVUxcbiI7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBGU1RTX0ZQVUxfRlJOX09QQ09ERToKKyAgICAgICAg
ICAgIGZvcm1hdCA9ICIgICAgRlNUUyBGUFVMLCBSJWQgXG4iOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgTERTRlBTQ1JfT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAg
ICBMRFMgUiVkLCBGUFNDUiBcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBT
VFNGUFNDUl9PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIFNUUyBGUFNDUiwgUiVk
IFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNUU01BQ0xfT1BDT0RFOgor
ICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBTVFMgTUFDTCwgUiVkIFxuIjsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIFNUU01BQ0hfT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0
ID0gIiAgICBTVFMgTUFDSCwgUiVkIFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIEJTUkZfT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICAqQlNSRiBSJWQiOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRlRSQ19PUENPREU6CisgICAgICAgICAg
ICBmb3JtYXQgPSAiICAgIEZUUkMgRlIlZCwgRlBVTFxuIjsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgIGlmIChmb3JtYXQpIHsKKyAgICAgICAgICAgIHByaW50ZlN0ZG91
dEluc3RyKGZvcm1hdCwgZ2V0Um4ob3BjKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKyAgICAgICAgc3dpdGNoIChvcGMgJiAweGYwZmYpIHsKKyAgICAgICAgY2FzZSBGTkVHX09Q
Q09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgRk5FRyBEUiVkXG4iOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgRkxPQVRfT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0
ID0gIiAgICBGTE9BVCBEUiVkXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
RlRSQ19PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIEZUUkMgRlIlZCwgRlBVTFxu
IjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEZTUVJUX09QQ09ERToKKyAgICAg
ICAgICAgIGZvcm1hdCA9ICIgICAgRlNRUlQgRlIlRFxuIjsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgIGlmIChmb3JtYXQpIHsKKyAgICAgICAgICAgIGlmIChpc2RvdWJs
ZUluc3QpCisgICAgICAgICAgICAgICAgcHJpbnRmU3Rkb3V0SW5zdHIoZm9ybWF0LCBnZXREUm4o
b3BjKSA8PCAxKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBwcmludGZTdGRv
dXRJbnN0cihmb3JtYXQsIGdldFJuKG9wYykpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgICAgIHN3aXRjaCAob3BjICYgMHhmMDBmKSB7CisgICAgICAgIGNhc2UgQUREX09Q
Q09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgQUREIFIlZCwgUiVkXG4iOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQUREQ19PUENPREU6CisgICAgICAgICAgICBmb3Jt
YXQgPSAiICAgIEFEREMgUiVkLCBSJWRcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBBRERWX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgQUREViBSJWQsIFIl
ZFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFORF9PUENPREU6CisgICAg
ICAgICAgICBmb3JtYXQgPSAiICAgIEFORCBSJWQsIFIlZFxuIjsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIERJVjFfT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBE
SVYxIFIlZCwgUiVkXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ01QRVFf
T1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBDTVAvRVEgUiVkLCBSJWRcbiI7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDTVBHRV9PUENPREU6CisgICAgICAgICAg
ICBmb3JtYXQgPSAiICAgIENNUC9HRSBSJWQsIFIlZFxuIjsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIENNUEdUX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgQ01Q
L0dUIFIlZCwgUiVkXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ01QSElf
T1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBDTVAvSEkgUiVkLCBSJWRcbiI7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDTVBIU19PUENPREU6CisgICAgICAgICAg
ICBmb3JtYXQgPSAiICAgIENNUC9IUyBSJWQsIFIlZFxuIjsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIE1PVl9PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIE1PViBS
JWQsIFIlZFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE1PVkJfV1JJVEVf
Uk5fT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBNT1YuQiBSJWQsIEBSJWRcbiI7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBNT1ZCX1dSSVRFX1JOREVDX09QQ09E
RToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgTU9WLkIgUiVkLCBALVIlZFxuIjsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE1PVkJfV1JJVEVfUjBSTl9PUENPREU6CisgICAg
ICAgICAgICBmb3JtYXQgPSAiICAgIE1PVi5CIFIlZCwgQChSMCwgUiVkKVxuIjsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIE1PVkJfUkVBRF9STV9PUENPREU6CisgICAgICAgICAg
ICBmb3JtYXQgPSAiICAgIE1PVi5CIEBSJWQsIFIlZFxuIjsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIE1PVkJfUkVBRF9STUlOQ19PUENPREU6CisgICAgICAgICAgICBmb3JtYXQg
PSAiICAgIE1PVi5CIEBSJWQrLCBSJWRcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBNT1ZCX1JFQURfUjBSTV9PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIE1P
Vi5CIEAoUjAsIFIlZCksIFIlZFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IE1PVkxfV1JJVEVfUk5fT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBNT1YuTCBS
JWQsIEBSJWRcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBNT1ZMX1dSSVRF
X1JOREVDX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgTU9WLkwgUiVkLCBALVIl
ZFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE1PVkxfV1JJVEVfUjBSTl9P
UENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIE1PVi5MIFIlZCwgQChSMCwgUiVkKVxu
IjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE1PVkxfUkVBRF9STV9PUENPREU6
CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIE1PVi5MIEBSJWQsIFIlZFxuIjsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIE1PVkxfUkVBRF9STUlOQ19PUENPREU6CisgICAgICAg
ICAgICBmb3JtYXQgPSAiICAgIE1PVi5MIEBSJWQrLCBSJWRcbiI7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBNT1ZMX1JFQURfUjBSTV9PUENPREU6CisgICAgICAgICAgICBmb3Jt
YXQgPSAiICAgIE1PVi5MIEAoUjAsIFIlZCksIFIlZFxuIjsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIE1VTExfT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBNVUwu
TCBSJWQsIFIlZFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIERNVUxMX0xf
T1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBETVVMVS5MIFIlZCwgUiVkXG4iOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRE1VTFNMX09QQ09ERToKKyAgICAgICAg
ICAgIGZvcm1hdCA9ICIgICAgRE1VTFMuTCBSJWQsIFIlZFxuIjsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIE5FR19PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIE5F
RyBSJWQsIFIlZFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE5FR0NfT1BD
T0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBORUdDIFIlZCwgUiVkXG4iOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTk9UX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1h
dCA9ICIgICAgTk9UIFIlZCwgUiVkXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgT1JfT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBPUiBSJWQsIFIlZFxuIjsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNIQURfT1BDT0RFOgorICAgICAgICAg
ICAgZm9ybWF0ID0gIiAgICBTSEFEIFIlZCwgUiVkXG4iOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgU0hMRF9PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIFNITEQg
UiVkLCBSJWRcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTVUJfT1BDT0RF
OgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBTVUIgUiVkLCBSJWRcbiI7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBTVUJDX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9
ICIgICAgU1VCQyBSJWQsIFIlZFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IFNVQlZfT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBTVUJWIFIlZCwgUiVkXG4i
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVFNUX09QQ09ERToKKyAgICAgICAg
ICAgIGZvcm1hdCA9ICIgICAgVFNUIFIlZCwgUiVkXG4iOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgWE9SX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgWE9SIFIl
ZCwgUiVkXG4iO2JyZWFrOworICAgICAgICBjYXNlIE1PVldfV1JJVEVfUk5fT1BDT0RFOgorICAg
ICAgICAgICAgZm9ybWF0ID0gIiAgICBNT1YuVyBSJWQsIEBSJWRcbiI7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBNT1ZXX1JFQURfUk1fT1BDT0RFOgorICAgICAgICAgICAgZm9y
bWF0ID0gIiAgICBNT1YuVyBAUiVkLCBSJWRcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBNT1ZXX1JFQURfUjBSTV9PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAg
IE1PVi5XIEAoUjAsIFIlZCksIFIlZFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIEVYVFVXX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgRVhUVS5XIFIlZCwg
UiVkXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGZvcm1h
dCkgeworICAgICAgICAgICAgcHJpbnRmU3Rkb3V0SW5zdHIoZm9ybWF0LCBnZXRSbShvcGMpLCBn
ZXRSbihvcGMpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBzd2l0
Y2ggKG9wYyAmIDB4ZjAwZikgeworICAgICAgICBjYXNlIEZTVUJfT1BDT0RFOgorICAgICAgICAg
ICAgZm9ybWF0ID0gIiAgICBGU1VCIEZSJWQsIEZSJWRcbiI7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBGQUREX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgRkFE
RCBGUiVkLCBGUiVkXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRkRJVl9P
UENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIEZESVYgRlIlZCwgRlIlZFxuIjsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEZNVUxfT1BDT0RFOgorICAgICAgICAgICAg
Zm9ybWF0ID0gIiAgICBETVVMTCBGUiVkLCBGUiVkXG4iOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgRk1PVlNfUkVBRF9STV9PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAi
ICAgIEZNT1YuUyBAUiVkLCBGUiVkXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgRk1PVlNfV1JJVEVfUk5fREVDX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAg
Rk1PVi5TIEZSJWQsIEAtUiVkXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
Rk1PVlNfUkVBRF9STV9JTkNfT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBGTU9W
LlMgQFIlZCssIEZSJWRcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBGTU9W
U19SRUFEX1IwUk1fT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBGTU9WLlMgQChS
MCwgUiVkKSwgRlIlZFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEZNT1ZT
X1dSSVRFX1JOX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgRk1PVi5TIEZSJWQs
IEBSJWRcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBGTU9WU19XUklURV9S
MFJOX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgRk1PVi5TIEZSJWQsIEAoUjAs
IFIlZClcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBGTU9WX09QQ09ERToK
KyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgRk1PViBGUiVkLCBGUiVkXG4iOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgRkNNUEVRX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1h
dCA9ICIgICAgRkNNUC9FUSBGUiVkLCBGUiVkXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgRkNNUEdUX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgRkNNUC9H
VCBGUiVkLCBGUiVkXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
aWYgKGZvcm1hdCkgeworICAgICAgICAgICAgaWYgKGlzZG91YmxlSW5zdCkKKyAgICAgICAgICAg
ICAgICBwcmludGZTdGRvdXRJbnN0cihmb3JtYXQsIGdldERSbShvcGMpIDw8IDEsIGdldERSbihv
cGMpIDw8IDEpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHByaW50ZlN0ZG91
dEluc3RyKGZvcm1hdCwgZ2V0Um0ob3BjKSwgZ2V0Um4ob3BjKSk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKyAgICAgICAgc3dpdGNoIChvcGMgJiAweGZmMDApIHsKKyAgICAgICAg
Y2FzZSBCRl9PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIEJGICVkXG4iOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQkZTX09QQ09ERToKKyAgICAgICAgICAgIGZv
cm1hdCA9ICIgICAgKkJGL1MgJWRcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBBTkRJTU1fT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBBTkQgIyVkLCBSMFxu
IjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEJUX09QQ09ERToKKyAgICAgICAg
ICAgIGZvcm1hdCA9ICIgICAgQlQgJWRcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBCVFNfT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICAqQlQvUyAlZFxuIjsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENNUEVRSU1NX09QQ09ERToKKyAgICAg
ICAgICAgIGZvcm1hdCA9ICIgICAgQ01QL0VRICMlZCwgUjBcbiI7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBNT1ZCX1dSSVRFX09GRkdCUl9PUENPREU6CisgICAgICAgICAgICBm
b3JtYXQgPSAiICAgIE1PVi5CIFIwLCBAKCVkLCBHQlIpXG4iOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgTU9WQl9SRUFEX09GRkdCUl9PUENPREU6CisgICAgICAgICAgICBmb3Jt
YXQgPSAiICAgIE1PVi5CIEAoJWQsIEdCUiksIFIwXG4iOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgTU9WTF9XUklURV9PRkZHQlJfT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0
ID0gIiAgICBNT1YuTCBSMCwgQCglZCwgR0JSKVxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIE1PVkxfUkVBRF9PRkZHQlJfT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0g
IiAgICBNT1YuTCBAKCVkLCBHQlIpLCBSMFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIE1PVkFfUkVBRF9PRkZQQ19PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAg
IE1PVkEgQCglZCwgUEMpLCBSMFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IE9SSU1NX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgT1IgIyVkLCBSMFxuIjsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE9SQklNTV9PUENPREU6CisgICAgICAg
ICAgICBmb3JtYXQgPSAiICAgIE9SLkIgIyVkLCBAKFIwLCBHQlIpXG4iOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgVFNUSU1NX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9
ICIgICAgVFNUICMlZCwgUjBcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBU
U1RCX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgVFNULkIgJWQsIEAoUjAsIEdC
UilcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBYT1JJTU1fT1BDT0RFOgor
ICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBYT1IgIyVkLCBSMFxuIjsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIFhPUkJfT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAg
ICBYT1IuQiAlZCwgQChSMCwgR0JSKVxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgICAgIGlmIChmb3JtYXQpIHsKKyAgICAgICAgICAgIHByaW50ZlN0ZG91dEluc3RyKGZv
cm1hdCwgZ2V0SW1tOChvcGMpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
ICAgICBzd2l0Y2ggKG9wYyAmIDB4ZmYwMCkgeworICAgICAgICBjYXNlIE1PVkJfV1JJVEVfT0ZG
Uk5fT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBNT1YuQiBSMCwgQCglZCwgUiVk
KVxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE1PVkJfUkVBRF9PRkZSTV9P
UENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIE1PVi5CIEAoJWQsIFIlZCksIFIwXG4i
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGZvcm1hdCkgewor
ICAgICAgICAgICAgcHJpbnRmU3Rkb3V0SW5zdHIoZm9ybWF0LCBnZXREaXNwKG9wYyksIGdldFJt
KG9wYykpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHN3aXRjaCAo
b3BjICYgMHhmMDAwKSB7CisgICAgICAgIGNhc2UgQlJBX09QQ09ERToKKyAgICAgICAgICAgIGZv
cm1hdCA9ICIgICAgKkJSQSAlZFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IEJTUl9PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgICpCU1IgJWRcbiI7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAoZm9ybWF0KSB7CisgICAgICAg
ICAgICBwcmludGZTdGRvdXRJbnN0cihmb3JtYXQsIGdldEltbTEyKG9wYykpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHN3aXRjaCAob3BjICYgMHhmMDAwKSB7Cisg
ICAgICAgIGNhc2UgTU9WTF9SRUFEX09GRlBDX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9
ICIgICAgTU9WLkwgQCglZCwgUEMpLCBSJWRcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBBRERJTU1fT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBBREQgIyVk
LCBSJWRcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBNT1ZJTU1fT1BDT0RF
OgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBNT1YgIyVkLCBSJWRcbiI7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBNT1ZXX1JFQURfT0ZGUENfT1BDT0RFOgorICAgICAgICAg
ICAgZm9ybWF0ID0gIiAgICBNT1YuVyBAKCVkLCBQQyksIFIlZFxuIjsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgICAgIGlmIChmb3JtYXQpIHsKKyAgICAgICAgICAgIHByaW50
ZlN0ZG91dEluc3RyKGZvcm1hdCwgZ2V0SW1tOChvcGMpLCBnZXRSbihvcGMpKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBzd2l0Y2ggKG9wYyAmIDB4ZjAwMCkgewor
ICAgICAgICBjYXNlIE1PVkxfV1JJVEVfT0ZGUk5fT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0
ID0gIiAgICBNT1YuTCBSJWQsIEAoJWQsIFIlZClcbiI7CisgICAgICAgICAgICBwcmludGZTdGRv
dXRJbnN0cihmb3JtYXQsIGdldFJtKG9wYyksIGdldERpc3Aob3BjKSwgZ2V0Um4ob3BjKSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBNT1ZMX1JFQURfT0ZGUk1fT1BDT0RFOgor
ICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBNT1YuTCBAKCVkLCBSJWQpLCBSJWRcbiI7CisgICAg
ICAgICAgICBwcmludGZTdGRvdXRJbnN0cihmb3JtYXQsIGdldERpc3Aob3BjKSwgZ2V0Um0ob3Bj
KSwgZ2V0Um4ob3BjKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIHN0YXRpYyB2b2lkIHByaW50ZlN0ZG91dEluc3RyKGNvbnN0IGNoYXIqIGZvcm1hdCwgLi4u
KQorICAgIHsKKyAgICAgICAgaWYgKGdldGVudigiSmF2YVNjcmlwdENvcmVEdW1wSklUIikpIHsK
KyAgICAgICAgICAgIHZhX2xpc3QgYXJnczsKKyAgICAgICAgICAgIHZhX3N0YXJ0KGFyZ3MsIGZv
cm1hdCk7CisgICAgICAgICAgICB2cHJpbnRmU3Rkb3V0SW5zdHIoZm9ybWF0LCBhcmdzKTsKKyAg
ICAgICAgICAgIHZhX2VuZChhcmdzKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN0YXRpYyB2
b2lkIHZwcmludGZTdGRvdXRJbnN0cihjb25zdCBjaGFyKiBmb3JtYXQsIHZhX2xpc3QgYXJncykK
KyAgICB7CisgICAgICAgIGlmIChnZXRlbnYoIkphdmFTY3JpcHRDb3JlRHVtcEpJVCIpKQorICAg
ICAgICAgICAgdmZwcmludGYoc3Rkb3V0LCBmb3JtYXQsIGFyZ3MpOworICAgIH0KKyNlbHNlCisg
ICAgc3RhdGljIHZvaWQgcHJpbnRJbnN0cih1aW50MTZfdCBvcGMsIGludCBzaXplLCBib29sIGlz
ZG91YmxlSW5zdCA9IHRydWUpIHt9OworI2VuZGlmCisKK3ByaXZhdGU6CisgICAgU0g0QnVmZmVy
IG1fYnVmZmVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUo
QVNTRU1CTEVSKSAmJiBDUFUoU0g0KQorCisjZW5kaWYgLy8gU0g0QXNzZW1ibGVyX2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJKSVQuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3lhcnIvWWFyckpJVC5jcHAKaW5kZXggZTM0ZTZmNC4uZjQzODkxNyAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckpJVC5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckpJVC5jcHAKQEAgLTU5LDYgKzU5LDE2IEBAIGNs
YXNzIFlhcnJHZW5lcmF0b3IgOiBwcml2YXRlIE1hY3JvQXNzZW1ibGVyIHsKICAgICBzdGF0aWMg
Y29uc3QgUmVnaXN0ZXJJRCByZWdUMSA9IE1JUFNSZWdpc3RlcnM6OnQ1OwogCiAgICAgc3RhdGlj
IGNvbnN0IFJlZ2lzdGVySUQgcmV0dXJuUmVnaXN0ZXIgPSBNSVBTUmVnaXN0ZXJzOjp2MDsKKyNl
bGlmIENQVShTSDQpCisgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgaW5wdXQgPSBTSDRSZWdp
c3RlcnM6OnI0OworICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIGluZGV4ID0gU0g0UmVnaXN0
ZXJzOjpyNTsKKyAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCBsZW5ndGggPSBTSDRSZWdpc3Rl
cnM6OnI2OworICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIG91dHB1dCA9IFNINFJlZ2lzdGVy
czo6cjc7CisKKyAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCByZWdUMCA9IFNINFJlZ2lzdGVy
czo6cjA7CisgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgcmVnVDEgPSBTSDRSZWdpc3RlcnM6
OnIxOworCisgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgcmV0dXJuUmVnaXN0ZXIgPSBTSDRS
ZWdpc3RlcnM6OnIwOwogI2VsaWYgQ1BVKFg4NikKICAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJ
RCBpbnB1dCA9IFg4NlJlZ2lzdGVyczo6ZWF4OwogICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklE
IGluZGV4ID0gWDg2UmVnaXN0ZXJzOjplZHg7CkBAIC0yMTc5LDYgKzIxODksOSBAQCBjbGFzcyBZ
YXJyR2VuZXJhdG9yIDogcHJpdmF0ZSBNYWNyb0Fzc2VtYmxlciB7CiAgICAgICAgIHB1c2goQVJN
UmVnaXN0ZXJzOjpyOCk7IC8vIHNjcmF0Y2ggcmVnaXN0ZXIKICNlbmRpZgogICAgICAgICBtb3Zl
KEFSTVJlZ2lzdGVyczo6cjMsIG91dHB1dCk7CisjZWxpZiBDUFUoU0g0KQorICAgICAgICBwdXNo
KFNINFJlZ2lzdGVyczo6cjExKTsKKyAgICAgICAgcHVzaChTSDRSZWdpc3RlcnM6OnIxMyk7CiAj
ZWxpZiBDUFUoTUlQUykKICAgICAgICAgLy8gRG8gbm90aGluZy4KICNlbmRpZgpAQCAtMjIwMSw2
ICsyMjE0LDkgQEAgY2xhc3MgWWFyckdlbmVyYXRvciA6IHByaXZhdGUgTWFjcm9Bc3NlbWJsZXIg
ewogICAgICAgICBwb3AoQVJNUmVnaXN0ZXJzOjpyNik7CiAgICAgICAgIHBvcChBUk1SZWdpc3Rl
cnM6OnI1KTsKICAgICAgICAgcG9wKEFSTVJlZ2lzdGVyczo6cjQpOworI2VsaWYgQ1BVKFNINCkK
KyAgICAgICAgcG9wKFNINFJlZ2lzdGVyczo6cjEzKTsKKyAgICAgICAgcG9wKFNINFJlZ2lzdGVy
czo6cjExKTsKICNlbGlmIENQVShNSVBTKQogICAgICAgICAvLyBEbyBub3RoaW5nCiAjZW5kaWYK
LS0gCjEuNy4yLjMKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>86940</attachid>
            <date>2011-03-25 07:57:49 -0700</date>
            <delta_ts>2011-03-28 11:19:12 -0700</delta_ts>
            <desc>YARR  for SH4</desc>
            <filename>0001-Add-YARR-support-for-SH4-platforms.patch</filename>
            <type>text/plain</type>
            <size>124670</size>
            <attacher name="thouraya">thouraya.andolsi</attacher>
            
              <data encoding="base64">RnJvbSAzMGQxM2Q0ODBiNmFhOGJmMWFkNTI5YjAzOTgwNmFmMmE4NmMzOTY2IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBUaG91cmF5YSBBTkRPTFNJIDx0aG91cmF5YS5hbmRvbHNpQHN0
LmNvbT4KRGF0ZTogRnJpLCAyNSBNYXIgMjAxMSAxNDo0Mzo1NiArMDEwMApTdWJqZWN0OiBbUEFU
Q0ggMS8zXSBBZGQgWUFSUiBzdXBwb3J0IGZvciBTSDQgcGxhdGZvcm1zLgoKLS0tCiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICB8ICAgMTUgKwogU291
cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtICAgICAgICAgICAgICAgfCAgICAzICsK
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaCAgIHwgICAg
NiArCiAuLi4vSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyU0g0LmNwcCB8
ICAgODIgKwogLi4uL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclNINC5o
ICAgfCAxNzQzICsrKysrKysrKysrKysrKysrCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL1NINEFzc2VtYmxlci5oICAgICB8IDIwNjcgKysrKysrKysrKysrKysrKysrKysKIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJKSVQuY3BwICAgICAgICAgICAgIHwgICAxNiArCiA3
IGZpbGVzIGNoYW5nZWQsIDM5MzIgaW5zZXJ0aW9ucygrKSwgMCBkZWxldGlvbnMoLSkKIGNyZWF0
ZSBtb2RlIDEwMDY0NCBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1i
bGVyU0g0LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvTWFjcm9Bc3NlbWJsZXJTSDQuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9hc3NlbWJsZXIvU0g0QXNzZW1ibGVyLmgKCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxv
ZwppbmRleCBmNTYyMTIwLi4wYzhhODkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxOCBAQAorMjAxMS0wMy0yNSAgVGhvdXJheWEgQU5ET0xTSSAgPHRob3VyYXlhLmFuZG9s
c2lAc3QuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFNINCBKSVQgU1VQUE9SVC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTQ0MzI5LgorICAgICAgICBBZGQgWUFSUiBzdXBwb3J0IGZvciBTSDQgcGxh
dGZvcm1zIChkaXNhYmxlZCBieSBkZWZhdWx0KS4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmFt
OgorICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5oOgorICAgICAgICAqIGFzc2Vt
Ymxlci9NYWNyb0Fzc2VtYmxlclNINC5jcHA6IEFkZGVkLgorICAgICAgICAqIGFzc2VtYmxlci9N
YWNyb0Fzc2VtYmxlclNINC5oOiBBZGRlZC4KKyAgICAgICAgKiBhc3NlbWJsZXIvU0g0QXNzZW1i
bGVyLmg6IEFkZGVkLgorICAgICAgICAqIHlhcnIvWWFyckpJVC5jcHA6CisKIDIwMTEtMDMtMjQg
IE5pa29sYXMgWmltbWVybWFubiAgPG56aW1tZXJtYW5uQHJpbS5jb20+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
R05VbWFrZWZpbGUuYW0gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUuYW0KaW5k
ZXggMzFlNzBhMC4uNmIyNWE3YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0dO
VW1ha2VmaWxlLmFtCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5hbQpA
QCAtOTEsNiArOTEsOSBAQCBqYXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0LmggXAogCVNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaCBcCiAJU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Ni5oIFwKKwlTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyU0g0LmggXAorCVNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJTSDQuY3BwIFwKKwlTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1NINEFzc2VtYmxlci5oIFwKIAlTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL1JlcGF0Y2hCdWZmZXIuaCBcCiAJU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9YODZBc3NlbWJsZXIuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NvZGVCbG9jay5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9NYWNyb0Fzc2VtYmxlci5oCmluZGV4IGZhMTY1ZGUuLjlhYTI3MzggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmgKQEAgLTUw
LDYgKzUwLDEyIEBAIG5hbWVzcGFjZSBKU0MgeyB0eXBlZGVmIE1hY3JvQXNzZW1ibGVyWDg2IE1h
Y3JvQXNzZW1ibGVyQmFzZTsgfTsKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlclg4Nl82NC5oIgog
bmFtZXNwYWNlIEpTQyB7IHR5cGVkZWYgTWFjcm9Bc3NlbWJsZXJYODZfNjQgTWFjcm9Bc3NlbWJs
ZXJCYXNlOyB9OwogCisjZWxpZiBDUFUoU0g0KQorI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyU0g0
LmgiCituYW1lc3BhY2UgSlNDIHsKK3R5cGVkZWYgTWFjcm9Bc3NlbWJsZXJTSDQgTWFjcm9Bc3Nl
bWJsZXJCYXNlOworfTsKKwogI2Vsc2UKICNlcnJvciAiVGhlIE1hY3JvQXNzZW1ibGVyIGlzIG5v
dCBzdXBwb3J0ZWQgb24gdGhpcyBwbGF0Zm9ybS4iCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJTSDQuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclNINC5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjcxODg0NQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJTSDQuY3BwCkBAIC0w
LDAgKzEsODIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgU1RNaWNyb2VsZWN0cm9uaWNz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoQVNTRU1CTEVSKSAmJiBD
UFUoU0g0KQorCisjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJTSDQuaCIKKworbmFtZXNwYWNlIEpT
QyB7Citjb25zdCBDb25kaXRpb24gTWFjcm9Bc3NlbWJsZXJTSDQ6OkVxdWFsID0gU0g0QXNzZW1i
bGVyOjpFUTsKK2NvbnN0IENvbmRpdGlvbiBNYWNyb0Fzc2VtYmxlclNINDo6Tm90RXF1YWwgPSBT
SDRBc3NlbWJsZXI6Ok5FOworY29uc3QgQ29uZGl0aW9uIE1hY3JvQXNzZW1ibGVyU0g0OjpHcmVh
dGVyVGhhbiA9IFNINEFzc2VtYmxlcjo6R1Q7Citjb25zdCBDb25kaXRpb24gTWFjcm9Bc3NlbWJs
ZXJTSDQ6OkdyZWF0ZXJUaGFuT3JFcXVhbCA9IFNINEFzc2VtYmxlcjo6R0U7Citjb25zdCBDb25k
aXRpb24gTWFjcm9Bc3NlbWJsZXJTSDQ6Okxlc3NUaGFuID0gU0g0QXNzZW1ibGVyOjpMVDsKK2Nv
bnN0IENvbmRpdGlvbiBNYWNyb0Fzc2VtYmxlclNINDo6TGVzc1RoYW5PckVxdWFsID0gU0g0QXNz
ZW1ibGVyOjpMRTsKK2NvbnN0IENvbmRpdGlvbiBNYWNyb0Fzc2VtYmxlclNINDo6VUdyZWF0ZXJU
aGFuID0gU0g0QXNzZW1ibGVyOjpISTsKK2NvbnN0IENvbmRpdGlvbiBNYWNyb0Fzc2VtYmxlclNI
NDo6VUdyZWF0ZXJUaGFuT3JFcXVhbCA9IFNINEFzc2VtYmxlcjo6SFM7Citjb25zdCBDb25kaXRp
b24gTWFjcm9Bc3NlbWJsZXJTSDQ6OlVMZXNzVGhhbiA9IFNINEFzc2VtYmxlcjo6TEk7Citjb25z
dCBDb25kaXRpb24gTWFjcm9Bc3NlbWJsZXJTSDQ6OlVMZXNzVGhhbk9yRXF1YWwgPSBTSDRBc3Nl
bWJsZXI6OkxTOworY29uc3QgQ29uZGl0aW9uIE1hY3JvQXNzZW1ibGVyU0g0OjpaZXJvID0gU0g0
QXNzZW1ibGVyOjpFUTsKK2NvbnN0IENvbmRpdGlvbiBNYWNyb0Fzc2VtYmxlclNINDo6Tm9uWmVy
byA9IFNINEFzc2VtYmxlcjo6TkU7Citjb25zdCBDb25kaXRpb24gTWFjcm9Bc3NlbWJsZXJTSDQ6
Ok92ZXJmbG93ID0gU0g0QXNzZW1ibGVyOjpPRjsKK2NvbnN0IENvbmRpdGlvbiBNYWNyb0Fzc2Vt
YmxlclNINDo6QWJvdmUgPSBTSDRBc3NlbWJsZXI6OkhJOworY29uc3QgQ29uZGl0aW9uIE1hY3Jv
QXNzZW1ibGVyU0g0OjpBYm92ZU9yRXF1YWwgPSBTSDRBc3NlbWJsZXI6OkhTOworY29uc3QgQ29u
ZGl0aW9uIE1hY3JvQXNzZW1ibGVyU0g0OjpCZWxvdyA9IFNINEFzc2VtYmxlcjo6TEk7Citjb25z
dCBDb25kaXRpb24gTWFjcm9Bc3NlbWJsZXJTSDQ6OkJlbG93T3JFcXVhbCA9IFNINEFzc2VtYmxl
cjo6TFM7Citjb25zdCBDb25kaXRpb24gTWFjcm9Bc3NlbWJsZXJTSDQ6OkRvdWJsZUVxdWFsID0g
U0g0QXNzZW1ibGVyOjpFUTsKK2NvbnN0IENvbmRpdGlvbiBNYWNyb0Fzc2VtYmxlclNINDo6RG91
YmxlTm90RXF1YWwgPSBTSDRBc3NlbWJsZXI6Ok5FOworY29uc3QgQ29uZGl0aW9uIE1hY3JvQXNz
ZW1ibGVyU0g0OjpEb3VibGVHcmVhdGVyVGhhbiA9IFNINEFzc2VtYmxlcjo6R1Q7Citjb25zdCBD
b25kaXRpb24gTWFjcm9Bc3NlbWJsZXJTSDQ6OkRvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbCA9IFNI
NEFzc2VtYmxlcjo6R0U7Citjb25zdCBDb25kaXRpb24gTWFjcm9Bc3NlbWJsZXJTSDQ6OkRvdWJs
ZUxlc3NUaGFuID0gU0g0QXNzZW1ibGVyOjpMVDsKK2NvbnN0IENvbmRpdGlvbiBNYWNyb0Fzc2Vt
YmxlclNINDo6RG91YmxlTGVzc1RoYW5PckVxdWFsID0gU0g0QXNzZW1ibGVyOjpMRTsKK2NvbnN0
IENvbmRpdGlvbiBNYWNyb0Fzc2VtYmxlclNINDo6RG91YmxlRXF1YWxPclVub3JkZXJlZCA9IFNI
NEFzc2VtYmxlcjo6RVFVOworY29uc3QgQ29uZGl0aW9uIE1hY3JvQXNzZW1ibGVyU0g0OjpEb3Vi
bGVOb3RFcXVhbE9yVW5vcmRlcmVkID0gU0g0QXNzZW1ibGVyOjpORVU7Citjb25zdCBDb25kaXRp
b24gTWFjcm9Bc3NlbWJsZXJTSDQ6OkRvdWJsZUdyZWF0ZXJUaGFuT3JVbm9yZGVyZWQgPSBTSDRB
c3NlbWJsZXI6OkdUVTsKK2NvbnN0IENvbmRpdGlvbiBNYWNyb0Fzc2VtYmxlclNINDo6RG91Ymxl
R3JlYXRlclRoYW5PckVxdWFsT3JVbm9yZGVyZWQgPSBTSDRBc3NlbWJsZXI6OkdFVTsKK2NvbnN0
IENvbmRpdGlvbiBNYWNyb0Fzc2VtYmxlclNINDo6RG91YmxlTGVzc1RoYW5PclVub3JkZXJlZCA9
IFNINEFzc2VtYmxlcjo6TFRVOworY29uc3QgQ29uZGl0aW9uIE1hY3JvQXNzZW1ibGVyU0g0OjpE
b3VibGVMZXNzVGhhbk9yRXF1YWxPclVub3JkZXJlZCA9IFNINEFzc2VtYmxlcjo6TEVVOworY29u
c3QgQ29uZGl0aW9uIE1hY3JvQXNzZW1ibGVyU0g0OjpTaWduZWQgPSBTSDRBc3NlbWJsZXI6OlNJ
OworCit2b2lkIE1hY3JvQXNzZW1ibGVyU0g0OjpsaW5rQ2FsbCh2b2lkKiBjb2RlLCBDYWxsIGNh
bGwsIEZ1bmN0aW9uUHRyIGZ1bmN0aW9uKQoreworICAgIFNINEFzc2VtYmxlcjo6bGlua0NhbGwo
Y29kZSwgY2FsbC5tX2ptcCwgZnVuY3Rpb24udmFsdWUoKSk7Cit9CisKK3ZvaWQgTWFjcm9Bc3Nl
bWJsZXJTSDQ6OnJlcGF0Y2hDYWxsKENvZGVMb2NhdGlvbkNhbGwgY2FsbCwgQ29kZUxvY2F0aW9u
TGFiZWwgZGVzdGluYXRpb24pCit7CisgICAgU0g0QXNzZW1ibGVyOjpyZWxpbmtDYWxsKGNhbGwu
ZGF0YUxvY2F0aW9uKCksIGRlc3RpbmF0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpOworfQorCit2
b2lkIE1hY3JvQXNzZW1ibGVyU0g0OjpyZXBhdGNoQ2FsbChDb2RlTG9jYXRpb25DYWxsIGNhbGws
IEZ1bmN0aW9uUHRyIGRlc3RpbmF0aW9uKQoreworICAgIFNINEFzc2VtYmxlcjo6cmVsaW5rQ2Fs
bChjYWxsLmRhdGFMb2NhdGlvbigpLCBkZXN0aW5hdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoQVNTRU1CTEVSKQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxl
clNINC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclNI
NC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjMmEzYjQKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVy
U0g0LmgKQEAgLTAsMCArMSwxNzQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTEg
U1RNaWNyb2VsZWN0cm9uaWNzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisqLworCisjaWZuZGVmIE1hY3JvQXNzZW1ibGVyU0g0X2gKKyNk
ZWZpbmUgTWFjcm9Bc3NlbWJsZXJTSDRfaAorCisjaWYgRU5BQkxFKEFTU0VNQkxFUikgJiYgQ1BV
KFNINCkKKworI2luY2x1ZGUgIkFic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaCIKKyNpbmNsdWRlICJT
SDRBc3NlbWJsZXIuaCIKKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorCituYW1lc3BhY2Ug
SlNDIHsKK3R5cGVkZWYgU0g0QXNzZW1ibGVyOjpDb25kaXRpb24gQ29uZGl0aW9uOworCitjbGFz
cyBNYWNyb0Fzc2VtYmxlclNINCA6IHB1YmxpYyBBYnN0cmFjdE1hY3JvQXNzZW1ibGVyPFNINEFz
c2VtYmxlcj4geworcHVibGljOgorICAgIHR5cGVkZWYgU0g0QXNzZW1ibGVyOjpGUFJlZ2lzdGVy
SUQgRlBSZWdpc3RlcklEOworCisgICAgc3RhdGljIGNvbnN0IENvbmRpdGlvbiBFcXVhbDsKKyAg
ICBzdGF0aWMgY29uc3QgQ29uZGl0aW9uIE5vdEVxdWFsOworICAgIHN0YXRpYyBjb25zdCBDb25k
aXRpb24gR3JlYXRlclRoYW47CisgICAgc3RhdGljIGNvbnN0IENvbmRpdGlvbiBHcmVhdGVyVGhh
bk9yRXF1YWw7CisgICAgc3RhdGljIGNvbnN0IENvbmRpdGlvbiBMZXNzVGhhbjsKKyAgICBzdGF0
aWMgY29uc3QgQ29uZGl0aW9uIExlc3NUaGFuT3JFcXVhbDsKKyAgICBzdGF0aWMgY29uc3QgQ29u
ZGl0aW9uIFVHcmVhdGVyVGhhbjsKKyAgICBzdGF0aWMgY29uc3QgQ29uZGl0aW9uIFVHcmVhdGVy
VGhhbk9yRXF1YWw7CisgICAgc3RhdGljIGNvbnN0IENvbmRpdGlvbiBVTGVzc1RoYW47CisgICAg
c3RhdGljIGNvbnN0IENvbmRpdGlvbiBVTGVzc1RoYW5PckVxdWFsOworICAgIHN0YXRpYyBjb25z
dCBDb25kaXRpb24gWmVybzsKKyAgICBzdGF0aWMgY29uc3QgQ29uZGl0aW9uIE5vblplcm87Cisg
ICAgc3RhdGljIGNvbnN0IENvbmRpdGlvbiBPdmVyZmxvdzsKKyAgICBzdGF0aWMgY29uc3QgQ29u
ZGl0aW9uIEFib3ZlOworICAgIHN0YXRpYyBjb25zdCBDb25kaXRpb24gQWJvdmVPckVxdWFsOwor
ICAgIHN0YXRpYyBjb25zdCBDb25kaXRpb24gQmVsb3c7CisgICAgc3RhdGljIGNvbnN0IENvbmRp
dGlvbiBCZWxvd09yRXF1YWw7CisgICAgc3RhdGljIGNvbnN0IENvbmRpdGlvbiBEb3VibGVFcXVh
bDsKKyAgICBzdGF0aWMgY29uc3QgQ29uZGl0aW9uIERvdWJsZU5vdEVxdWFsOworICAgIHN0YXRp
YyBjb25zdCBDb25kaXRpb24gRG91YmxlR3JlYXRlclRoYW47CisgICAgc3RhdGljIGNvbnN0IENv
bmRpdGlvbiBEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWw7CisgICAgc3RhdGljIGNvbnN0IENvbmRp
dGlvbiBEb3VibGVMZXNzVGhhbjsKKyAgICBzdGF0aWMgY29uc3QgQ29uZGl0aW9uIERvdWJsZUxl
c3NUaGFuT3JFcXVhbDsKKyAgICBzdGF0aWMgY29uc3QgQ29uZGl0aW9uIERvdWJsZUVxdWFsT3JV
bm9yZGVyZWQ7CisgICAgc3RhdGljIGNvbnN0IENvbmRpdGlvbiBEb3VibGVOb3RFcXVhbE9yVW5v
cmRlcmVkOworICAgIHN0YXRpYyBjb25zdCBDb25kaXRpb24gRG91YmxlR3JlYXRlclRoYW5PclVu
b3JkZXJlZDsKKyAgICBzdGF0aWMgY29uc3QgQ29uZGl0aW9uIERvdWJsZUdyZWF0ZXJUaGFuT3JF
cXVhbE9yVW5vcmRlcmVkOworICAgIHN0YXRpYyBjb25zdCBDb25kaXRpb24gRG91YmxlTGVzc1Ro
YW5PclVub3JkZXJlZDsKKyAgICBzdGF0aWMgY29uc3QgQ29uZGl0aW9uIERvdWJsZUxlc3NUaGFu
T3JFcXVhbE9yVW5vcmRlcmVkOworICAgIHN0YXRpYyBjb25zdCBDb25kaXRpb24gU2lnbmVkOwor
ICAgIHN0YXRpYyBjb25zdCBTY2FsZSBTY2FsZVB0ciA9IFRpbWVzRm91cjsKKyAgICBzdGF0aWMg
Y29uc3QgRlBSZWdpc3RlcklEIGZzY3JhdGNoID0gU0g0UmVnaXN0ZXJzOjpmcjEwOworICAgIHN0
YXRpYyBjb25zdCBSZWdpc3RlcklEIHN0YWNrUG9pbnRlclJlZ2lzdGVyID0gU0g0UmVnaXN0ZXJz
OjpzcDsKKyAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCBsaW5rUmVnaXN0ZXIgPSBTSDRSZWdp
c3RlcnM6OnByOworICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIHNjcmF0Y2hSZWczID0gU0g0
UmVnaXN0ZXJzOjpyMTM7CisKKyAgICBSZWdpc3RlcklEIGNsYWltU2NyYXRjaCgpCisgICAgewor
ICAgICAgICByZXR1cm4gbV9hc3NlbWJsZXIuY2xhaW1TY3JhdGNoKCk7CisgICAgfQorCisgICAg
dm9pZCByZWxlYXNlU2NyYXRjaChSZWdpc3RlcklEIHJlZykKKyAgICB7CisgICAgICAgIG1fYXNz
ZW1ibGVyLnJlbGVhc2VTY3JhdGNoKHJlZyk7CisgICAgfQorCisgICAgLy8gSW50ZWdlciBhcml0
aG1ldGljIG9wZXJhdGlvbnMKKworICAgIHZvaWQgYWRkMzIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lz
dGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmFkZGxSZWdSZWcoc3JjLCBk
ZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIGFkZDMyKEltbTMyIGltbSwgUmVnaXN0ZXJJRCBkZXN0
KQorICAgIHsKKyAgICAgICAgaWYgKG1fYXNzZW1ibGVyLmlzSW1tZWRpYXRlKGltbS5tX3ZhbHVl
KSkgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRkbEltbThyKGltbS5tX3ZhbHVlLCBkZXN0
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIFJlZ2lzdGVySUQg
c2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvYWRDb25zdGFudChp
bW0ubV92YWx1ZSwgc2NyKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuYWRkbFJlZ1JlZyhzY3IsIGRl
c3QpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgIH0KKworICAgIHZvaWQgYWRk
MzIoSW1tMzIgaW1tLCBSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAg
ICAgICAgaWYgKHNyYyAhPSBkZXN0KQorICAgICAgICAgICAgbV9hc3NlbWJsZXIubW92bFJlZ1Jl
ZyhzcmMsIGRlc3QpOworICAgICAgICBhZGQzMihpbW0sIGRlc3QpOworICAgIH0KKworICAgIHZv
aWQgYWRkMzIoSW1tMzIgaW1tLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBSZWdp
c3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBsb2FkMzIoYWRkcmVzcywgc2Ny
KTsKKyAgICAgICAgYWRkMzIoaW1tLCBzY3IpOworICAgICAgICBzdG9yZTMyKHNjciwgYWRkcmVz
cyk7CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgfQorCisgICAgdm9pZCBhZGQz
MihBZGRyZXNzIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJ
RCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgbG9hZDMyKHNyYywgc2NyKTsKKyAgICAg
ICAgbV9hc3NlbWJsZXIuYWRkbFJlZ1JlZyhzY3IsIGRlc3QpOworICAgICAgICByZWxlYXNlU2Ny
YXRjaChzY3IpOworICAgIH0KKworICAgIHZvaWQgYW5kMzIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lz
dGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmFuZGxSZWdSZWcoc3JjLCBk
ZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIGFuZDMyKEltbTMyIGltbSwgUmVnaXN0ZXJJRCBkZXN0
KQorICAgIHsKKyAgICAgICAgaWYgKChpbW0ubV92YWx1ZSA8PSAyNTUpICYmIChpbW0ubV92YWx1
ZSA+PSAwKSAmJiAoZGVzdCA9PSBTSDRSZWdpc3RlcnM6OnIwKSkgeworICAgICAgICAgICAgbV9h
c3NlbWJsZXIuYW5kbEltbThyKGltbS5tX3ZhbHVlLCBkZXN0KTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorCisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7
CisgICAgICAgIG1fYXNzZW1ibGVyLmxvYWRDb25zdGFudCgoaW1tLm1fdmFsdWUpLCBzY3IpOwor
ICAgICAgICBtX2Fzc2VtYmxlci5hbmRsUmVnUmVnKHNjciwgZGVzdCk7CisgICAgICAgIHJlbGVh
c2VTY3JhdGNoKHNjcik7CisgICAgfQorCisgICAgdm9pZCBsc2hpZnQzMihSZWdpc3RlcklEIHNo
aWZ0YW1vdW50LCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5z
aGxsUmVnUmVnKGRlc3QsIHNoaWZ0YW1vdW50KTsKKyAgICB9CisKKyAgICB2b2lkIHJzaGlmdDMy
KGludCBpbW0sIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIFJlZ2lzdGVySUQgc2Ny
ID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvYWRDb25zdGFudCgtaW1t
LCBzY3IpOworICAgICAgICBtX2Fzc2VtYmxlci5zaGFSZWdSZWcoZGVzdCwgc2NyKTsKKyAgICAg
ICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICB9CisKKyAgICB2b2lkIGxzaGlmdDMyKEltbTMy
IGltbSwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgaWYgKChpbW0ubV92YWx1ZSA9
PSAxKSB8fCAoaW1tLm1fdmFsdWUgPT0gMikgfHwgKGltbS5tX3ZhbHVlID09IDgpIHx8IChpbW0u
bV92YWx1ZSA9PSAxNikpIHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnNobGxJbW04cihpbW0u
bV92YWx1ZSwgZGVzdCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAg
ICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBtX2Fzc2VtYmxlci5s
b2FkQ29uc3RhbnQoaW1tLm1fdmFsdWUsIHNjcik7CisgICAgICAgIG1fYXNzZW1ibGVyLnNobGxS
ZWdSZWcoZGVzdCwgc2NyKTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICB9CisK
KyAgICB2b2lkIG11bDMyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgewor
ICAgICAgICBtX2Fzc2VtYmxlci5pbXVsbFJlZ1JlZyhzcmMsIGRlc3QpOworICAgICAgICBtX2Fz
c2VtYmxlci5zdHNtYWNsKGRlc3QpOworICAgIH0KKworICAgIHZvaWQgbXVsMzIoSW1tMzIgaW1t
LCBSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgUmVnaXN0
ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgbW92ZShpbW0sIHNjcik7CisgICAg
ICAgIGlmICAoc3JjICE9IGRlc3QpCisgICAgICAgICAgICBtb3ZlKHNyYywgZGVzdCk7CisgICAg
ICAgIG11bDMyKHNjciwgIGRlc3QpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAg
IH0KKworICAgIHZvaWQgbm90MzIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAg
ICB7CisgICAgICAgIG1fYXNzZW1ibGVyLm5vdGxSZWcoc3JjLCBkZXN0KTsKKyAgICB9CisKKyAg
ICB2b2lkIG9yMzIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAg
ICAgIG1fYXNzZW1ibGVyLm9ybFJlZ1JlZyhzcmMsIGRlc3QpOworICAgIH0KKworICAgIHZvaWQg
b3IzMihJbW0zMiBpbW0sIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIGlmICgoaW1t
Lm1fdmFsdWUgPD0gMjU1KSAmJiAoaW1tLm1fdmFsdWUgPj0gMCkgJiYgKGRlc3QgPT0gU0g0UmVn
aXN0ZXJzOjpyMCkpIHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLm9ybEltbThyKGltbS5tX3Zh
bHVlLCBkZXN0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIFJl
Z2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvYWRD
b25zdGFudChpbW0ubV92YWx1ZSwgc2NyKTsKKyAgICAgICAgbV9hc3NlbWJsZXIub3JsUmVnUmVn
KHNjciwgZGVzdCk7CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgfQorCisgICAg
dm9pZCByc2hpZnQzMihSZWdpc3RlcklEIHNoaWZ0YW1vdW50LCBSZWdpc3RlcklEIGRlc3QpCisg
ICAgeworICAgICAgICBjb21wYXJlMzIoMzIsIHNoaWZ0YW1vdW50LCBFcXVhbCk7CisgICAgICAg
IG1fYXNzZW1ibGVyLmVuc3VyZVNwYWNlKG1fYXNzZW1ibGVyLm1heEluc3RydWN0aW9uU2l6ZSAr
IDQpOworICAgICAgICBtX2Fzc2VtYmxlci5icmFuY2goQlRfT1BDT0RFLCAxKTsKKyAgICAgICAg
bV9hc3NlbWJsZXIubmVnKHNoaWZ0YW1vdW50LCBzaGlmdGFtb3VudCk7CisgICAgICAgIG1fYXNz
ZW1ibGVyLnNoYVJlZ1JlZyhkZXN0LCBzaGlmdGFtb3VudCk7CisgICAgfQorCisgICAgdm9pZCBy
c2hpZnQzMihJbW0zMiBpbW0sIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIGlmIChp
bW0ubV92YWx1ZSAmIDB4MWYpCisgICAgICAgICAgICByc2hpZnQzMihpbW0ubV92YWx1ZSAmIDB4
MWYsIGRlc3QpOworICAgIH0KKworICAgIHZvaWQgc3ViMzIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lz
dGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnN1YmxSZWdSZWcoc3JjLCBk
ZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIHN1YjMyKEltbTMyIGltbSwgQWJzb2x1dGVBZGRyZXNz
IGFkZHJlc3MsIFJlZ2lzdGVySUQgc2NyYXRjaFJlZykKKyAgICB7CisgICAgICAgIFJlZ2lzdGVy
SUQgcmVzdWx0ID0gY2xhaW1TY3JhdGNoKCk7CisKKyAgICAgICAgbV9hc3NlbWJsZXIubG9hZENv
bnN0YW50KHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3Q+KGFkZHJlc3MubV9wdHIpLCBzY3JhdGNo
UmVnKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubW92bE1lbVJlZyhzY3JhdGNoUmVnLCByZXN1bHQp
OworCisgICAgICAgIGlmIChtX2Fzc2VtYmxlci5pc0ltbWVkaWF0ZSgtaW1tLm1fdmFsdWUpKQor
ICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRkbEltbThyKC1pbW0ubV92YWx1ZSwgcmVzdWx0KTsK
KyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5sb2FkQ29uc3RhbnQoaW1t
Lm1fdmFsdWUsIHNjcmF0Y2hSZWczKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnN1YmxSZWdS
ZWcoc2NyYXRjaFJlZzMsIHJlc3VsdCk7CisgICAgICAgIH0KKworICAgICAgICBzdG9yZTMyKHJl
c3VsdCwgc2NyYXRjaFJlZyk7CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHJlc3VsdCk7CisgICAg
fQorCisgICAgdm9pZCBzdWIzMihJbW0zMiBpbW0sIEFic29sdXRlQWRkcmVzcyBhZGRyZXNzKQor
ICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCByZXN1bHQgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAg
ICAgUmVnaXN0ZXJJRCBzY3JhdGNoUmVnID0gY2xhaW1TY3JhdGNoKCk7CisKKyAgICAgICAgbV9h
c3NlbWJsZXIubG9hZENvbnN0YW50KHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3Q+KGFkZHJlc3Mu
bV9wdHIpLCBzY3JhdGNoUmVnKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubW92bE1lbVJlZyhzY3Jh
dGNoUmVnLCByZXN1bHQpOworCisgICAgICAgIGlmIChtX2Fzc2VtYmxlci5pc0ltbWVkaWF0ZSgt
aW1tLm1fdmFsdWUpKQorICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRkbEltbThyKC1pbW0ubV92
YWx1ZSwgcmVzdWx0KTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5s
b2FkQ29uc3RhbnQoaW1tLm1fdmFsdWUsIHNjcmF0Y2hSZWczKTsKKyAgICAgICAgICAgIG1fYXNz
ZW1ibGVyLnN1YmxSZWdSZWcoc2NyYXRjaFJlZzMsIHJlc3VsdCk7CisgICAgICAgIH0KKworICAg
ICAgICBzdG9yZTMyKHJlc3VsdCwgc2NyYXRjaFJlZyk7CisgICAgICAgIHJlbGVhc2VTY3JhdGNo
KHJlc3VsdCk7CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcmF0Y2hSZWcpOworICAgIH0KKwor
ICAgIHZvaWQgYWRkMzIoSW1tMzIgaW1tLCBBYnNvbHV0ZUFkZHJlc3MgYWRkcmVzcywgUmVnaXN0
ZXJJRCBzY3JhdGNoUmVnKQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCByZXN1bHQgPSBjbGFp
bVNjcmF0Y2goKTsKKworICAgICAgICBtX2Fzc2VtYmxlci5sb2FkQ29uc3RhbnQocmVpbnRlcnBy
ZXRfY2FzdDx1aW50MzJfdD4oYWRkcmVzcy5tX3B0ciksIHNjcmF0Y2hSZWcpOworICAgICAgICBt
X2Fzc2VtYmxlci5tb3ZsTWVtUmVnKHNjcmF0Y2hSZWcsIHJlc3VsdCk7CisKKyAgICAgICAgaWYg
KG1fYXNzZW1ibGVyLmlzSW1tZWRpYXRlKGltbS5tX3ZhbHVlKSkKKyAgICAgICAgICAgIG1fYXNz
ZW1ibGVyLmFkZGxJbW04cihpbW0ubV92YWx1ZSwgcmVzdWx0KTsKKyAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICBtX2Fzc2VtYmxlci5sb2FkQ29uc3RhbnQoaW1tLm1fdmFsdWUsIHNjcmF0Y2hS
ZWczKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZGxSZWdSZWcoc2NyYXRjaFJlZzMsIHJl
c3VsdCk7CisgICAgICAgIH0KKworICAgICAgICBzdG9yZTMyKHJlc3VsdCwgc2NyYXRjaFJlZyk7
CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHJlc3VsdCk7CisgICAgfQorCisgICAgdm9pZCBhZGQz
MihJbW0zMiBpbW0sIEFic29sdXRlQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgUmVn
aXN0ZXJJRCByZXN1bHQgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3Jh
dGNoUmVnID0gY2xhaW1TY3JhdGNoKCk7CisKKyAgICAgICAgbV9hc3NlbWJsZXIubG9hZENvbnN0
YW50KHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3Q+KGFkZHJlc3MubV9wdHIpLCBzY3JhdGNoUmVn
KTsKKyAgICAgICAgbV9hc3NlbWJsZXIubW92bE1lbVJlZyhzY3JhdGNoUmVnLCByZXN1bHQpOwor
CisgICAgICAgIGlmIChtX2Fzc2VtYmxlci5pc0ltbWVkaWF0ZShpbW0ubV92YWx1ZSkpCisgICAg
ICAgICAgICBtX2Fzc2VtYmxlci5hZGRsSW1tOHIoaW1tLm1fdmFsdWUsIHJlc3VsdCk7CisgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIubG9hZENvbnN0YW50KGltbS5tX3Zh
bHVlLCBzY3JhdGNoUmVnMyk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGRsUmVnUmVnKHNj
cmF0Y2hSZWczLCByZXN1bHQpOworICAgICAgICB9CisKKyAgICAgICAgc3RvcmUzMihyZXN1bHQs
IHNjcmF0Y2hSZWcpOworICAgICAgICByZWxlYXNlU2NyYXRjaChyZXN1bHQpOworICAgICAgICBy
ZWxlYXNlU2NyYXRjaChzY3JhdGNoUmVnKTsKKyAgICB9CisKKyAgICB2b2lkIHN1YjMyKEltbTMy
IGltbSwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgaWYgKG1fYXNzZW1ibGVyLmlz
SW1tZWRpYXRlKC1pbW0ubV92YWx1ZSkpIHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZGxJ
bW04cigtaW1tLm1fdmFsdWUsIGRlc3QpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgbV9h
c3NlbWJsZXIubG9hZENvbnN0YW50KGltbS5tX3ZhbHVlLCBzY3IpOworICAgICAgICBtX2Fzc2Vt
Ymxlci5zdWJsUmVnUmVnKHNjciwgZGVzdCk7CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7
CisgICAgfQorCisgICAgdm9pZCBzdWIzMihBZGRyZXNzIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQor
ICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAg
bG9hZDMyKHNyYywgc2NyKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuc3VibFJlZ1JlZyhzY3IsIGRl
c3QpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgIH0KKworICAgIHZvaWQgeG9y
MzIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNz
ZW1ibGVyLnhvcmxSZWdSZWcoc3JjLCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIHhvcjMyKElt
bTMyIGltbSwgUmVnaXN0ZXJJRCBzcmNEZXN0KQorICAgIHsKKyAgICAgICAgaWYgKChzcmNEZXN0
ICE9IFNINFJlZ2lzdGVyczo6cjApIHx8IChpbW0ubV92YWx1ZSA+IDI1NSkgfHwgKGltbS5tX3Zh
bHVlIDwgMCkpIHsKKyAgICAgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7
CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5sb2FkQ29uc3RhbnQoKGltbS5tX3ZhbHVlKSwgc2Ny
KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnhvcmxSZWdSZWcoc2NyLCBzcmNEZXN0KTsKKyAg
ICAgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKworICAgICAgICBtX2Fzc2VtYmxlci54b3JsSW1tOHIoaW1tLm1fdmFsdWUsIHNyY0Rl
c3QpOworICAgIH0KKworICAgIHZvaWQgY29tcGFyZTMyKGludCBpbW0sIFJlZ2lzdGVySUQgZHN0
LCBDb25kaXRpb24gY29uZCkKKyAgICB7CisgICAgICAgIGlmICgoKGNvbmQgPT0gRXF1YWwpIHx8
IChjb25kID09IE5vdEVxdWFsKSkgJiYgKGRzdCA9PSBTSDRSZWdpc3RlcnM6OnIwKSAmJiBtX2Fz
c2VtYmxlci5pc0ltbWVkaWF0ZShpbW0pKSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5jbXBF
cUltbVIwKGltbSwgZHN0LCBjb25kKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
CisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIG1fYXNz
ZW1ibGVyLmxvYWRDb25zdGFudChpbW0sIHNjcik7CisgICAgICAgIG1fYXNzZW1ibGVyLmNtcGxS
ZWdSZWcoc2NyLCBkc3QsIGNvbmQpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAg
IH0KKworICAgIHZvaWQgY29tcGFyZTMyKGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVn
aXN0ZXJJRCBsZWZ0LCBDb25kaXRpb24gY29uZCkKKyAgICB7CisgICAgICAgIFJlZ2lzdGVySUQg
c2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIGlmICghb2Zmc2V0KSB7CisgICAgICAgICAg
ICBtX2Fzc2VtYmxlci5tb3ZsTWVtUmVnKGJhc2UsIHNjcik7CisgICAgICAgICAgICBtX2Fzc2Vt
Ymxlci5jbXBsUmVnUmVnKHNjciwgbGVmdCwgY29uZCk7CisgICAgICAgICAgICByZWxlYXNlU2Ny
YXRjaChzY3IpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYg
KChvZmZzZXQgPCAwKSB8fCAob2Zmc2V0ID49IDY0KSkgeworICAgICAgICAgICAgbV9hc3NlbWJs
ZXIubG9hZENvbnN0YW50KG9mZnNldCwgc2NyKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFk
ZGxSZWdSZWcoYmFzZSwgc2NyKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLm1vdmxNZW1SZWco
c2NyLCBzY3IpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuY21wbFJlZ1JlZyhzY3IsIGxlZnQs
IGNvbmQpOworICAgICAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorCisgICAgICAgIG1fYXNzZW1ibGVyLm1vdmxNZW1SZWcob2Zmc2V0
ID4+IDIsIGJhc2UsIHNjcik7CisgICAgICAgIG1fYXNzZW1ibGVyLmNtcGxSZWdSZWcoc2NyLCBs
ZWZ0LCBjb25kKTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICB9CisKKyAgICB2
b2lkIHRlc3RJbW0oaW50IGltbSwgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlKQorICAgIHsK
KyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgUmVnaXN0
ZXJJRCBzY3IxID0gY2xhaW1TY3JhdGNoKCk7CisKKyAgICAgICAgaWYgKChvZmZzZXQgPCAwKSB8
fCAob2Zmc2V0ID49IDY0KSkgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIubG9hZENvbnN0YW50
KG9mZnNldCwgc2NyKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZGxSZWdSZWcoYmFzZSwg
c2NyKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLm1vdmxNZW1SZWcoc2NyLCBzY3IpOworICAg
ICAgICB9IGVsc2UgaWYgKG9mZnNldCkKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLm1vdmxNZW1S
ZWcob2Zmc2V0ID4+IDIsIGJhc2UsIHNjcik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1f
YXNzZW1ibGVyLm1vdmxNZW1SZWcoYmFzZSwgc2NyKTsKKyAgICAgICAgaWYgKG1fYXNzZW1ibGVy
LmlzSW1tZWRpYXRlKGltbSkpCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5tb3ZJbW04KGltbSwg
c2NyMSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmxvYWRDb25zdGFu
dChpbW0sIHNjcjEpOworCisgICAgICAgIG1fYXNzZW1ibGVyLnRlc3RsUmVnUmVnKHNjciwgc2Ny
MSk7CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgICAgIHJlbGVhc2VTY3JhdGNo
KHNjcjEpOworICAgIH0KKworICAgIHZvaWQgdGVzdGxJbW0oaW50IGltbSwgUmVnaXN0ZXJJRCBk
c3QpCisgICAgeworICAgICAgICBpZiAoKGRzdCA9PSBTSDRSZWdpc3RlcnM6OnIwKSAmJiAoaW1t
IDw9IDI1NSkgJiYgKGltbSA+PSAwKSkgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIudGVzdGxJ
bW04cihpbW0sIGRzdCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAg
ICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBtX2Fzc2VtYmxlci5s
b2FkQ29uc3RhbnQoaW1tLCBzY3IpOworICAgICAgICBtX2Fzc2VtYmxlci50ZXN0bFJlZ1JlZyhz
Y3IsIGRzdCk7CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgfQorCisgICAgdm9p
ZCBjb21wYXJlMzIoUmVnaXN0ZXJJRCByaWdodCwgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNl
LCBDb25kaXRpb24gY29uZCkKKyAgICB7CisgICAgICAgIGlmICghb2Zmc2V0KSB7CisgICAgICAg
ICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICAgICAgbV9hc3Nl
bWJsZXIubW92bE1lbVJlZyhiYXNlLCBzY3IpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuY21w
bFJlZ1JlZyhyaWdodCwgc2NyLCBjb25kKTsKKyAgICAgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNj
cik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoKG9mZnNl
dCA8IDApIHx8IChvZmZzZXQgPj0gNjQpKSB7CisgICAgICAgICAgICBSZWdpc3RlcklEIHNjciA9
IGNsYWltU2NyYXRjaCgpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIubG9hZENvbnN0YW50KG9m
ZnNldCwgc2NyKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZGxSZWdSZWcoYmFzZSwgc2Ny
KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLm1vdmxNZW1SZWcoc2NyLCBzY3IpOworICAgICAg
ICAgICAgbV9hc3NlbWJsZXIuY21wbFJlZ1JlZyhyaWdodCwgc2NyLCBjb25kKTsKKyAgICAgICAg
ICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KworICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBtX2Fz
c2VtYmxlci5tb3ZsTWVtUmVnKG9mZnNldCA+PiAyLCBiYXNlLCBzY3IpOworICAgICAgICBtX2Fz
c2VtYmxlci5jbXBsUmVnUmVnKHJpZ2h0LCBzY3IsIGNvbmQpOworICAgICAgICByZWxlYXNlU2Ny
YXRjaChzY3IpOworICAgIH0KKworICAgIHZvaWQgY29tcGFyZTMyKGludCBpbW0sIGludCBvZmZz
ZXQsIFJlZ2lzdGVySUQgYmFzZSwgQ29uZGl0aW9uIGNvbmQpCisgICAgeworICAgICAgICBpZiAo
IW9mZnNldCkgeworICAgICAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsK
KyAgICAgICAgICAgIFJlZ2lzdGVySUQgc2NyMSA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICAg
ICAgbV9hc3NlbWJsZXIubW92bE1lbVJlZyhiYXNlLCBzY3IpOworICAgICAgICAgICAgbV9hc3Nl
bWJsZXIubG9hZENvbnN0YW50KGltbSwgc2NyMSk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5j
bXBsUmVnUmVnKHNjcjEsIHNjciwgY29uZCk7CisgICAgICAgICAgICByZWxlYXNlU2NyYXRjaChz
Y3IxKTsKKyAgICAgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoKG9mZnNldCA8IDApIHx8IChvZmZzZXQgPj0g
NjQpKSB7CisgICAgICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAg
ICAgICAgICAgUmVnaXN0ZXJJRCBzY3IxID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgICAgICBt
X2Fzc2VtYmxlci5sb2FkQ29uc3RhbnQob2Zmc2V0LCBzY3IpOworICAgICAgICAgICAgbV9hc3Nl
bWJsZXIuYWRkbFJlZ1JlZyhiYXNlLCBzY3IpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIubW92
bE1lbVJlZyhzY3IsIHNjcik7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5sb2FkQ29uc3RhbnQo
aW1tLCBzY3IxKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmNtcGxSZWdSZWcoc2NyMSwgc2Ny
LCBjb25kKTsKKyAgICAgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcjEpOworICAgICAgICAgICAg
cmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisg
ICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIFJlZ2lzdGVy
SUQgc2NyMSA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBtX2Fzc2VtYmxlci5tb3ZsTWVtUmVn
KG9mZnNldCA+PiAyLCBiYXNlLCBzY3IpOworICAgICAgICBtX2Fzc2VtYmxlci5sb2FkQ29uc3Rh
bnQoaW1tLCBzY3IxKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuY21wbFJlZ1JlZyhzY3IxLCBzY3Is
IGNvbmQpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IxKTsKKyAgICAgICAgcmVsZWFzZVNj
cmF0Y2goc2NyKTsKKyAgICB9CisKKyAgICAvLyBNZW1vcnkgYWNjZXNzIG9wZXJhdGlvbgorICAg
IAorICAgIHZvaWQgbG9hZDMyKEltcGxpY2l0QWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklEIGRl
c3QpCisgICAgeworICAgICAgICBsb2FkMzIoYWRkcmVzcy5iYXNlLCBhZGRyZXNzLm9mZnNldCwg
ZGVzdCk7CisgICAgfQorCisgICAgdm9pZCBsb2FkOChJbXBsaWNpdEFkZHJlc3MgYWRkcmVzcywg
UmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbG9hZDgoYWRkcmVzcy5iYXNlLCBhZGRy
ZXNzLm9mZnNldCwgZGVzdCk7CisgICAgfQorCisgICAgdm9pZCBsb2FkMzIoQmFzZUluZGV4IGFk
ZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0g
Y2xhaW1TY3JhdGNoKCk7CisgICAgICAgIG1vdmUoYWRkcmVzcy5pbmRleCwgc2NyKTsKKyAgICAg
ICAgbHNoaWZ0MzIoSW1tMzIoYWRkcmVzcy5zY2FsZSksIHNjcik7CisgICAgICAgIGFkZDMyKGFk
ZHJlc3MuYmFzZSwgc2NyKTsKKyAgICAgICAgbG9hZDMyKHNjciwgYWRkcmVzcy5vZmZzZXQsIGRl
c3QpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgIH0KKworICAgIHZvaWQgbG9h
ZDMyKHZvaWQqIGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNz
ZW1ibGVyLmxvYWRDb25zdGFudChyZWludGVycHJldF9jYXN0PHVpbnQzMl90PihhZGRyZXNzKSwg
ZGVzdCk7CisgICAgICAgIG1fYXNzZW1ibGVyLm1vdmxNZW1SZWcoZGVzdCwgZGVzdCk7CisgICAg
fQorCisgICAgdm9pZCBsb2FkMzIoUmVnaXN0ZXJJRCBiYXNlLCBpbnQgb2Zmc2V0LCBSZWdpc3Rl
cklEIGRlc3QpCisgICAgeworICAgICAgICBpZiAoIW9mZnNldCkgeworICAgICAgICAgICAgbV9h
c3NlbWJsZXIubW92bE1lbVJlZyhiYXNlLCBkZXN0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmICgob2Zmc2V0ID49IDApICYmIChvZmZzZXQgPCA2NCkpIHsK
KyAgICAgICAgICAgIG1fYXNzZW1ibGVyLm1vdmxNZW1SZWcob2Zmc2V0ID4+IDIsIGJhc2UsIGRl
c3QpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKChkZXN0
ID09IFNINFJlZ2lzdGVyczo6cjApICYmIChkZXN0ICE9IGJhc2UpKSB7CisgICAgICAgICAgICBt
X2Fzc2VtYmxlci5sb2FkQ29uc3RhbnQoKG9mZnNldCksIGRlc3QpOworICAgICAgICAgICAgbV9h
c3NlbWJsZXIubW92bFIwbXIoYmFzZSwgZGVzdCk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKworICAgICAgICBSZWdpc3RlcklEIHNjcjsKKyAgICAgICAgaWYgKGRlc3QgPT0gYmFz
ZSkKKyAgICAgICAgICAgIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBzY3IgPSBkZXN0OworICAgICAgICBtX2Fzc2VtYmxlci5sb2FkQ29uc3RhbnQoKG9m
ZnNldCksIHNjcik7CisgICAgICAgIG1fYXNzZW1ibGVyLmFkZGxSZWdSZWcoYmFzZSwgc2NyKTsK
KyAgICAgICAgbV9hc3NlbWJsZXIubW92bE1lbVJlZyhzY3IsIGRlc3QpOworCisgICAgICAgIGlm
IChkZXN0ID09IGJhc2UpCisgICAgICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgIH0K
KworICAgIHZvaWQgbG9hZDgoUmVnaXN0ZXJJRCBiYXNlLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklE
IGRlc3QpCisgICAgeworICAgICAgICBpZiAoIW9mZnNldCkgeworICAgICAgICAgICAgbV9hc3Nl
bWJsZXIubW92Yk1lbVJlZyhiYXNlLCBkZXN0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorCisgICAgICAgIGlmICgob2Zmc2V0ID4gMCkgJiYgKG9mZnNldCA8IDY0KSAmJiAoZGVz
dCA9PSBTSDRSZWdpc3RlcnM6OnIwKSkgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIubW92Yk1l
bVJlZyhvZmZzZXQsIGJhc2UsIGRlc3QpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKGJhc2UgIT0gZGVzdCkgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIu
bG9hZENvbnN0YW50KChvZmZzZXQpLCBkZXN0KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFk
ZGxSZWdSZWcoYmFzZSwgZGVzdCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5tb3ZiTWVtUmVn
KGRlc3QsIGRlc3QpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAg
UmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9h
ZENvbnN0YW50KChvZmZzZXQpLCBzY3IpOworICAgICAgICBtX2Fzc2VtYmxlci5hZGRsUmVnUmVn
KGJhc2UsIHNjcik7CisgICAgICAgIG1fYXNzZW1ibGVyLm1vdmJNZW1SZWcoc2NyLCBkZXN0KTsK
KyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICB9CisKKyAgICB2b2lkIGxvYWQzMihS
ZWdpc3RlcklEIHIwLCBSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAg
ICAgICBBU1NFUlQocjAgPT0gU0g0UmVnaXN0ZXJzOjpyMCk7CisgICAgICAgIG1fYXNzZW1ibGVy
Lm1vdmxSMG1yKHNyYywgZHN0KTsKKyAgICB9CisKKyAgICB2b2lkIGxvYWQzMihSZWdpc3RlcklE
IHNyYywgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5tb3ZsTWVt
UmVnKHNyYywgZHN0KTsKKyAgICB9CisKKyAgICB2b2lkIGxvYWQxNihJbXBsaWNpdEFkZHJlc3Mg
YWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgaWYgKCFhZGRyZXNzLm9m
ZnNldCkgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIubW92d01lbVJlZyhhZGRyZXNzLmJhc2Us
IGRlc3QpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKChh
ZGRyZXNzLm9mZnNldCA+IDApICYmIChhZGRyZXNzLm9mZnNldCA8IDY0KSAmJiAoZGVzdCA9PSBT
SDRSZWdpc3RlcnM6OnIwKSkgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIubW92d01lbVJlZyhh
ZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlLCBkZXN0KTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorCisgICAgICAgIGlmIChhZGRyZXNzLmJhc2UgIT0gZGVzdCkgeworICAgICAg
ICAgICAgbV9hc3NlbWJsZXIubG9hZENvbnN0YW50KChhZGRyZXNzLm9mZnNldCksIGRlc3QpOwor
ICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRkbFJlZ1JlZyhhZGRyZXNzLmJhc2UsIGRlc3QpOwor
ICAgICAgICAgICAgbV9hc3NlbWJsZXIubW92d01lbVJlZyhkZXN0LCBkZXN0KTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1T
Y3JhdGNoKCk7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvYWRDb25zdGFudCgoYWRkcmVzcy5vZmZz
ZXQpLCBzY3IpOworICAgICAgICBtX2Fzc2VtYmxlci5hZGRsUmVnUmVnKGFkZHJlc3MuYmFzZSwg
c2NyKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubW92d01lbVJlZyhzY3IsIGRlc3QpOworICAgICAg
ICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgIH0KKyAKKyAgICB2b2lkIGxvYWQxNihSZWdpc3Rl
cklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubW92
d01lbVJlZyhzcmMsIGRlc3QpOworICAgIH0KKworICAgIHZvaWQgbG9hZDE2KFJlZ2lzdGVySUQg
cjAsIFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBBU1NF
UlQocjAgPT0gU0g0UmVnaXN0ZXJzOjpyMCk7CisgICAgICAgIG1fYXNzZW1ibGVyLm1vdndSMG1y
KHNyYywgZGVzdCk7CisgICAgfQorCisgICAgdm9pZCBsb2FkMTYoQmFzZUluZGV4IGFkZHJlc3Ms
IFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1T
Y3JhdGNoKCk7CisKKyAgICAgICAgbW92ZShhZGRyZXNzLmluZGV4LCBzY3IpOworICAgICAgICBs
c2hpZnQzMihJbW0zMihhZGRyZXNzLnNjYWxlKSwgc2NyKTsKKworICAgICAgICBpZiAoYWRkcmVz
cy5vZmZzZXQpCisgICAgICAgICAgICBhZGQzMihJbW0zMihhZGRyZXNzLm9mZnNldCksIHNjcik7
CisgICAgICAgIGlmIChzY3IgPT0gU0g0UmVnaXN0ZXJzOjpyMCkKKyAgICAgICAgICAgIG1fYXNz
ZW1ibGVyLm1vdndSMG1yKGFkZHJlc3MuYmFzZSwgc2NyKTsKKyAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICBhZGQzMihhZGRyZXNzLmJhc2UsIHNjcik7CisgICAgICAgICAgICBsb2FkMTYoc2Ny
LCBzY3IpOworICAgICAgICB9CisKKyAgICAgICAgZXh0dXcoc2NyLCBkZXN0KTsKKyAgICAgICAg
cmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICB9CisKKyAgICB2b2lkIHN0b3JlMzIoUmVnaXN0ZXJJ
RCBzcmMsIEltcGxpY2l0QWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJ
RCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgc3RvcmUzMihzcmMsIGFkZHJlc3Mub2Zm
c2V0LCBhZGRyZXNzLmJhc2UsIHNjcik7CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7Cisg
ICAgfQorCisgICAgdm9pZCBzdG9yZTMyKFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdp
c3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgc2NyKQorICAgIHsKKyAgICAgICAgaWYgKCFvZmZzZXQp
IHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLm1vdmxSZWdNZW0oc3JjLCBiYXNlKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgob2Zmc2V0ID49MCkgJiYg
KG9mZnNldCA8IDY0KSkgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIubW92bFJlZ01lbShzcmMs
IG9mZnNldCA+PiAyLCBiYXNlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisg
ICAgICAgIG1fYXNzZW1ibGVyLmxvYWRDb25zdGFudCgob2Zmc2V0KSwgc2NyKTsKKyAgICAgICAg
aWYgKHNjciA9PSBTSDRSZWdpc3RlcnM6OnIwKSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5t
b3ZsUmVnTWVtcjAoc3JjLCBiYXNlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
CisgICAgICAgIG1fYXNzZW1ibGVyLmFkZGxSZWdSZWcoYmFzZSwgc2NyKTsKKyAgICAgICAgbV9h
c3NlbWJsZXIubW92bFJlZ01lbShzcmMsIHNjcik7CisgICAgfQorCisgICAgdm9pZCBzdG9yZTMy
KFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlKQorICAg
IHsKKyAgICAgICAgQVNTRVJUKG9mZnNldCA9PSBTSDRSZWdpc3RlcnM6OnIwKTsKKyAgICAgICAg
bV9hc3NlbWJsZXIubW92bFJlZ01lbXIwKHNyYywgYmFzZSk7CisgICAgfQorCisgICAgdm9pZCBz
dG9yZTMyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIG1f
YXNzZW1ibGVyLm1vdmxSZWdNZW0oc3JjLCBkc3QpOworICAgIH0KKworICAgIHZvaWQgc3RvcmUz
MihJbW0zMiBpbW0sIEltcGxpY2l0QWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgUmVn
aXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IxID0g
Y2xhaW1TY3JhdGNoKCk7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvYWRDb25zdGFudCgoaW1tLm1f
dmFsdWUpLCBzY3IpOworICAgICAgICBzdG9yZTMyKHNjciwgYWRkcmVzcy5vZmZzZXQsIGFkZHJl
c3MuYmFzZSwgc2NyMSk7CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgICAgIHJl
bGVhc2VTY3JhdGNoKHNjcjEpOworICAgIH0KKworICAgIHZvaWQgc3RvcmUzMihSZWdpc3RlcklE
IHNyYywgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBSZWdpc3RlcklEIHNjciA9
IGNsYWltU2NyYXRjaCgpOworCisgICAgICAgIG1vdmUoYWRkcmVzcy5pbmRleCwgc2NyKTsKKyAg
ICAgICAgbHNoaWZ0MzIoSW1tMzIoYWRkcmVzcy5zY2FsZSksIHNjcik7CisgICAgICAgIGFkZDMy
KGFkZHJlc3MuYmFzZSwgc2NyKTsKKyAgICAgICAgc3RvcmUzMihzcmMsIEFkZHJlc3Moc2NyLCBh
ZGRyZXNzLm9mZnNldCkpOworCisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgfQor
CisgICAgdm9pZCBzdG9yZTMyKEltbTMyIGltbSwgdm9pZCogYWRkcmVzcykKKyAgICB7CisgICAg
ICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIFJlZ2lzdGVySUQg
c2NyMSA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBtX2Fzc2VtYmxlci5sb2FkQ29uc3RhbnQo
KGltbS5tX3ZhbHVlKSwgc2NyKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9hZENvbnN0YW50KHJl
aW50ZXJwcmV0X2Nhc3Q8dWludDMyX3Q+KGFkZHJlc3MpLCBzY3IxKTsKKyAgICAgICAgbV9hc3Nl
bWJsZXIubW92bE1lbVJlZyhzY3IsIHNjcjEpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3Ip
OworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IxKTsKKyAgICB9CisKKyAgICB2b2lkIHN0b3Jl
MzIoUmVnaXN0ZXJJRCBzcmMsIHZvaWQqIGFkZHJlc3MpCisgICAgeworICAgICAgICBSZWdpc3Rl
cklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBtX2Fzc2VtYmxlci5sb2FkQ29uc3Rh
bnQocmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdD4oYWRkcmVzcyksIHNjcik7CisgICAgICAgIG1f
YXNzZW1ibGVyLm1vdmxNZW1SZWcoc3JjLCBzY3IpOworICAgICAgICByZWxlYXNlU2NyYXRjaChz
Y3IpOworICAgIH0KKworICAgIERhdGFMYWJlbDMyIGxvYWQzMldpdGhBZGRyZXNzT2Zmc2V0UGF0
Y2goQWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBSZWdp
c3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBEYXRhTGFiZWwzMiBsYWJlbCh0
aGlzKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9hZENvbnN0YW50VW5SZXVzYWJsZShhZGRyZXNz
Lm9mZnNldCwgc2NyKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuYWRkbFJlZ1JlZyhhZGRyZXNzLmJh
c2UsIHNjcik7CisgICAgICAgIG1fYXNzZW1ibGVyLm1vdmxNZW1SZWcoc2NyLCBkZXN0KTsKKyAg
ICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICAgICAgcmV0dXJuIGxhYmVsOworICAgIH0K
KworICAgIERhdGFMYWJlbDMyIHN0b3JlMzJXaXRoQWRkcmVzc09mZnNldFBhdGNoKFJlZ2lzdGVy
SUQgc3JjLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBSZWdpc3RlcklEIHNjciA9
IGNsYWltU2NyYXRjaCgpOworICAgICAgICBEYXRhTGFiZWwzMiBsYWJlbCh0aGlzKTsKKyAgICAg
ICAgbV9hc3NlbWJsZXIubG9hZENvbnN0YW50VW5SZXVzYWJsZShhZGRyZXNzLm9mZnNldCwgc2Ny
KTsKKyAgICAgICAgbV9hc3NlbWJsZXIuYWRkbFJlZ1JlZyhhZGRyZXNzLmJhc2UsIHNjcik7Cisg
ICAgICAgIG1fYXNzZW1ibGVyLm1vdmxSZWdNZW0oc3JjLCBzY3IpOworICAgICAgICByZWxlYXNl
U2NyYXRjaChzY3IpOworICAgICAgICByZXR1cm4gbGFiZWw7CisgICAgfQorCisgICAgIC8vIEZs
b2F0aW5nLXBvaW50IG9wZXJhdGlvbnMKKworICAgIGJvb2wgc3VwcG9ydHNGbG9hdGluZ1BvaW50
KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorICAgIGJvb2wgc3VwcG9ydHNGbG9hdGluZ1BvaW50
VHJ1bmNhdGUoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisgICAgYm9vbCBzdXBwb3J0c0Zsb2F0
aW5nUG9pbnRTcXJ0KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgdm9pZCBsb2FkRG91
YmxlKEltcGxpY2l0QWRkcmVzcyBhZGRyZXNzLCBGUFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7Cisg
ICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisKKyAgICAgICAgbV9hc3Nl
bWJsZXIubG9hZENvbnN0YW50KGFkZHJlc3Mub2Zmc2V0LCBzY3IpOworICAgICAgICBpZiAoYWRk
cmVzcy5iYXNlID09IFNINFJlZ2lzdGVyczo6cjApIHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVy
LmZtb3ZzUmVhZHIwcihzY3IsIChGUFJlZ2lzdGVySUQpKGRlc3QgKyAxKSk7CisgICAgICAgICAg
ICBtX2Fzc2VtYmxlci5hZGRsSW1tOHIoNCwgc2NyKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVy
LmZtb3ZzUmVhZHIwcihzY3IsIGRlc3QpOworICAgICAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2Ny
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIG1fYXNzZW1ibGVy
LmFkZGxSZWdSZWcoYWRkcmVzcy5iYXNlLCBzY3IpOworICAgICAgICBtX2Fzc2VtYmxlci5mbW92
c1JlYWRybWluYyhzY3IsIChGUFJlZ2lzdGVySUQpKGRlc3QgKyAxKSk7CisgICAgICAgIG1fYXNz
ZW1ibGVyLmZtb3ZzUmVhZHJtKHNjciwgZGVzdCk7CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNj
cik7CisgICAgfQorCisgICAgdm9pZCBsb2FkRG91YmxlKGNvbnN0IHZvaWQqIGFkZHJlc3MsIEZQ
UmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNj
cmF0Y2goKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9hZENvbnN0YW50KHJlaW50ZXJwcmV0X2Nh
c3Q8dWludDMyX3Q+KGFkZHJlc3MpLCBzY3IpOworICAgICAgICBtX2Fzc2VtYmxlci5mbW92c1Jl
YWRybWluYyhzY3IsIChGUFJlZ2lzdGVySUQpKGRlc3QgKyAxKSk7CisgICAgICAgIG1fYXNzZW1i
bGVyLmZtb3ZzUmVhZHJtKHNjciwgZGVzdCk7CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7
CisgICAgfQorCisgICAgdm9pZCBzdG9yZURvdWJsZShGUFJlZ2lzdGVySUQgc3JjLCBJbXBsaWNp
dEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1T
Y3JhdGNoKCk7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvYWRDb25zdGFudChhZGRyZXNzLm9mZnNl
dCwgc2NyKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuYWRkbFJlZ1JlZyhhZGRyZXNzLmJhc2UsIHNj
cik7CisgICAgICAgIG1fYXNzZW1ibGVyLmZtb3ZzV3JpdGVybSgoRlBSZWdpc3RlcklEKShzcmMg
KyAxKSwgc2NyKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuYWRkbEltbThyKDQsIHNjcik7CisgICAg
ICAgIG1fYXNzZW1ibGVyLmZtb3ZzV3JpdGVybShzcmMsIHNjcik7CisgICAgICAgIHJlbGVhc2VT
Y3JhdGNoKHNjcik7CisgICAgfQorCisgICAgdm9pZCBhZGREb3VibGUoRlBSZWdpc3RlcklEIHNy
YywgRlBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5kYWRkUmVn
UmVnKHNyYywgZGVzdCk7CisgICAgfQorCisgICAgdm9pZCBhZGREb3VibGUoQWRkcmVzcyBhZGRy
ZXNzLCBGUFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIGxvYWREb3VibGUoYWRkcmVz
cywgZnNjcmF0Y2gpOworICAgICAgICBhZGREb3VibGUoZnNjcmF0Y2gsIGRlc3QpOworICAgIH0K
KworICAgIHZvaWQgc3ViRG91YmxlKEZQUmVnaXN0ZXJJRCBzcmMsIEZQUmVnaXN0ZXJJRCBkZXN0
KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuZHN1YlJlZ1JlZyhzcmMsIGRlc3QpOworICAg
IH0KKworICAgIHZvaWQgc3ViRG91YmxlKEFkZHJlc3MgYWRkcmVzcywgRlBSZWdpc3RlcklEIGRl
c3QpCisgICAgeworICAgICAgICBsb2FkRG91YmxlKGFkZHJlc3MsIGZzY3JhdGNoKTsKKyAgICAg
ICAgc3ViRG91YmxlKGZzY3JhdGNoLCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIG11bERvdWJs
ZShGUFJlZ2lzdGVySUQgc3JjLCBGUFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1f
YXNzZW1ibGVyLmRtdWxSZWdSZWcoc3JjLCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIG11bERv
dWJsZShBZGRyZXNzIGFkZHJlc3MsIEZQUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAg
bG9hZERvdWJsZShhZGRyZXNzLCBmc2NyYXRjaCk7CisgICAgICAgIG11bERvdWJsZShmc2NyYXRj
aCwgZGVzdCk7CisgICAgfQorCisgICAgdm9pZCBkaXZEb3VibGUoRlBSZWdpc3RlcklEIHNyYywg
RlBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5kZGl2UmVnUmVn
KHNyYywgZGVzdCk7CisgICAgfQorCisgICAgdm9pZCBjb252ZXJ0SW50MzJUb0RvdWJsZShSZWdp
c3RlcklEIHNyYywgRlBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxl
ci5sZHNybWZwdWwoc3JjKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuZmxvYXRmcHVsRHJlZyhkZXN0
KTsKKyAgICB9CisKKyAgICB2b2lkIGNvbnZlcnRJbnQzMlRvRG91YmxlKEFic29sdXRlQWRkcmVz
cyBzcmMsIEZQUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3Ig
PSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9hZENvbnN0YW50KHJlaW50
ZXJwcmV0X2Nhc3Q8dWludDMyX3Q+KHNyYy5tX3B0ciksIHNjcik7CisgICAgICAgIGNvbnZlcnRJ
bnQzMlRvRG91YmxlKHNjciwgZGVzdCk7CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7Cisg
ICAgfQorCisgICAgdm9pZCBjb252ZXJ0SW50MzJUb0RvdWJsZShBZGRyZXNzIHNyYywgRlBSZWdp
c3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRj
aCgpOworICAgICAgICBsb2FkMzIoc3JjLCBzY3IpOworICAgICAgICBjb252ZXJ0SW50MzJUb0Rv
dWJsZShzY3IsIGRlc3QpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgIH0KKwor
ICAgIHZvaWQgbG9hZDMyV2l0aFVuYWxpZ25lZEhhbGZXb3JkcyhCYXNlSW5kZXggYWRkcmVzcywg
UmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNj
cmF0Y2goKTsKKworICAgICAgICBtb3ZlKGFkZHJlc3MuaW5kZXgsIHNjcik7CisgICAgICAgIGxz
aGlmdDMyKEltbTMyKGFkZHJlc3Muc2NhbGUpLCBzY3IpOworICAgICAgICBhZGQzMihhZGRyZXNz
LmJhc2UsIHNjcik7CisKKyAgICAgICAgaWYgKGFkZHJlc3Mub2Zmc2V0KQorICAgICAgICAgICAg
YWRkMzIoSW1tMzIoYWRkcmVzcy5vZmZzZXQpLCBzY3IpOworCisgICAgICAgIFJlZ2lzdGVySUQg
c2NyMSA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBsb2FkMTYoc2NyLCBzY3IxKTsKKyAgICAg
ICAgYWRkMzIoSW1tMzIoMiksIHNjcik7CisgICAgICAgIGxvYWQxNihzY3IsIGRlc3QpOworICAg
ICAgICBtb3ZlKEltbTMyKDE2KSwgc2NyKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuc2hsbFJlZ1Jl
ZyhkZXN0LCBzY3IpOworICAgICAgICBvcjMyKHNjcjEsIGRlc3QpOworCisgICAgICAgIHJlbGVh
c2VTY3JhdGNoKHNjcik7CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcjEpOworICAgIH0KKwor
ICAgIEp1bXAgYnJhbmNoMzJXaXRoVW5hbGlnbmVkSGFsZldvcmRzKENvbmRpdGlvbiBjb25kLCBC
YXNlSW5kZXggbGVmdCwgSW1tMzIgcmlnaHQpCisgICAgeworICAgICAgICBSZWdpc3RlcklEIHNj
ciA9IHNjcmF0Y2hSZWczOworICAgICAgICBsb2FkMzJXaXRoVW5hbGlnbmVkSGFsZldvcmRzKGxl
ZnQsIHNjcik7CisgICAgICAgIGlmICgoKGNvbmQgPT0gRXF1YWwpIHx8IChjb25kID09IE5vdEVx
dWFsKSkgJiYgIXJpZ2h0Lm1fdmFsdWUpCisgICAgICAgICAgICBtX2Fzc2VtYmxlci50ZXN0bFJl
Z1JlZyhzY3IsIHNjcik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNvbXBhcmUzMihyaWdo
dC5tX3ZhbHVlLCBzY3IsIGNvbmQpOworCisgICAgICAgIGlmIChjb25kID09IE5vdEVxdWFsKQor
ICAgICAgICAgICAgcmV0dXJuIGJyYW5jaEZhbHNlKCk7CisgICAgICAgIHJldHVybiBicmFuY2hU
cnVlKCk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2hEb3VibGVOb25aZXJvKEZQUmVnaXN0ZXJJ
RCByZWcsIEZQUmVnaXN0ZXJJRCBzY3JhdGNoKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIu
bW92SW1tOCgwLCBzY3JhdGNoUmVnMyk7CisgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKHNj
cmF0Y2hSZWczLCBzY3JhdGNoKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaERvdWJsZShEb3VibGVO
b3RFcXVhbCwgcmVnLCBzY3JhdGNoKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaERvdWJsZVpl
cm9Pck5hTihGUFJlZ2lzdGVySUQgcmVnLCBGUFJlZ2lzdGVySUQgc2NyYXRjaCkKKyAgICB7Cisg
ICAgICAgIG1fYXNzZW1ibGVyLm1vdkltbTgoMCwgc2NyYXRjaFJlZzMpOworICAgICAgICBjb252
ZXJ0SW50MzJUb0RvdWJsZShzY3JhdGNoUmVnMywgc2NyYXRjaCk7CisgICAgICAgIHJldHVybiBi
cmFuY2hEb3VibGUoRG91YmxlRXF1YWxPclVub3JkZXJlZCwgcmVnLCBzY3JhdGNoKTsKKyAgICB9
CisKKyAgICBKdW1wIGJyYW5jaERvdWJsZShDb25kaXRpb24gY29uZCwgRlBSZWdpc3RlcklEIGxl
ZnQsIEZQUmVnaXN0ZXJJRCByaWdodCkKKyAgICB7CisgICAgICAgIGlmIChjb25kID09IERvdWJs
ZUVxdWFsKSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5kY21wcGVxKHJpZ2h0LCBsZWZ0KTsK
KyAgICAgICAgICAgIHJldHVybiBicmFuY2hUcnVlKCk7CisgICAgICAgIH0KKworICAgICAgICBp
ZiAoY29uZCA9PSBEb3VibGVOb3RFcXVhbCkgeworICAgICAgICAgICAgUmVnaXN0ZXJJRCBzY3Ig
PSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmxvYWRDb25zdGFudCgw
eDdmYmZmZmZmLCBzY3JhdGNoUmVnMyk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5kY252ZHMo
cmlnaHQpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuc3RzZnB1bFJlZyhzY3IpOworICAgICAg
ICAgICAgbV9hc3NlbWJsZXIuY21wbFJlZ1JlZyhzY3JhdGNoUmVnMywgc2NyLCBFcXVhbCk7Cisg
ICAgICAgICAgICBtX2Fzc2VtYmxlci5lbnN1cmVTcGFjZShtX2Fzc2VtYmxlci5tYXhJbnN0cnVj
dGlvblNpemUgKyAyMiwgc2l6ZW9mKHVpbnQzMl90KSk7CisgICAgICAgICAgICBtX2Fzc2VtYmxl
ci5icmFuY2goQlRfT1BDT0RFLCA4KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmRjbnZkcyhs
ZWZ0KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnN0c2ZwdWxSZWcoc2NyKTsKKyAgICAgICAg
ICAgIG1fYXNzZW1ibGVyLmNtcGxSZWdSZWcoc2NyYXRjaFJlZzMsIHNjciwgRXF1YWwpOworICAg
ICAgICAgICAgbV9hc3NlbWJsZXIuYnJhbmNoKEJUX09QQ09ERSwgNCk7CisgICAgICAgICAgICBt
X2Fzc2VtYmxlci5kY21wcGVxKHJpZ2h0LCBsZWZ0KTsKKyAgICAgICAgICAgIHJlbGVhc2VTY3Jh
dGNoKHNjcik7CisgICAgICAgICAgICByZXR1cm4gYnJhbmNoRmFsc2UoKTsKKyAgICAgICAgfQor
CisgICAgICAgIGlmIChjb25kID09IERvdWJsZUdyZWF0ZXJUaGFuKSB7CisgICAgICAgICAgICBt
X2Fzc2VtYmxlci5kY21wcGd0KHJpZ2h0LCBsZWZ0KTsKKyAgICAgICAgICAgIHJldHVybiBicmFu
Y2hUcnVlKCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoY29uZCA9PSBEb3VibGVHcmVhdGVy
VGhhbk9yRXF1YWwpIHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmRjbXBwZ3QobGVmdCwgcmln
aHQpOworICAgICAgICAgICAgcmV0dXJuIGJyYW5jaEZhbHNlKCk7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAoY29uZCA9PSBEb3VibGVMZXNzVGhhbikgeworICAgICAgICAgICAgbV9hc3NlbWJs
ZXIuZGNtcHBndChsZWZ0LCByaWdodCk7CisgICAgICAgICAgICByZXR1cm4gYnJhbmNoVHJ1ZSgp
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKGNvbmQgPT0gRG91YmxlTGVzc1RoYW5PckVxdWFs
KSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5kY21wcGd0KHJpZ2h0LCBsZWZ0KTsKKyAgICAg
ICAgICAgIHJldHVybiBicmFuY2hGYWxzZSgpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGNv
bmQgPT0gRG91YmxlRXF1YWxPclVub3JkZXJlZCkgeworICAgICAgICAgICAgUmVnaXN0ZXJJRCBz
Y3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmxvYWRDb25zdGFu
dCgweDdmYmZmZmZmLCBzY3JhdGNoUmVnMyk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5kY252
ZHMocmlnaHQpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuc3RzZnB1bFJlZyhzY3IpOworICAg
ICAgICAgICAgbV9hc3NlbWJsZXIuY21wbFJlZ1JlZyhzY3JhdGNoUmVnMywgc2NyLCBFcXVhbCk7
CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5lbnN1cmVTcGFjZShtX2Fzc2VtYmxlci5tYXhJbnN0
cnVjdGlvblNpemUgKyAyMiwgc2l6ZW9mKHVpbnQzMl90KSk7CisgICAgICAgICAgICBtX2Fzc2Vt
Ymxlci5icmFuY2goQlRfT1BDT0RFLCA1KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmRjbnZk
cyhsZWZ0KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnN0c2ZwdWxSZWcoc2NyKTsKKyAgICAg
ICAgICAgIG1fYXNzZW1ibGVyLmNtcGxSZWdSZWcoc2NyYXRjaFJlZzMsIHNjciwgRXF1YWwpOwor
ICAgICAgICAgICAgbV9hc3NlbWJsZXIuYnJhbmNoKEJUX09QQ09ERSwgMSk7CisgICAgICAgICAg
ICBtX2Fzc2VtYmxlci5kY21wcGVxKGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgIHJlbGVhc2VT
Y3JhdGNoKHNjcik7CisgICAgICAgICAgICByZXR1cm4gYnJhbmNoVHJ1ZSgpOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKGNvbmQgPT0gRG91YmxlR3JlYXRlclRoYW5PclVub3JkZXJlZCkgewor
ICAgICAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgICAg
IG1fYXNzZW1ibGVyLmxvYWRDb25zdGFudCgweDdmYmZmZmZmLCBzY3JhdGNoUmVnMyk7CisgICAg
ICAgICAgICBtX2Fzc2VtYmxlci5kY252ZHMocmlnaHQpOworICAgICAgICAgICAgbV9hc3NlbWJs
ZXIuc3RzZnB1bFJlZyhzY3IpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuY21wbFJlZ1JlZyhz
Y3JhdGNoUmVnMywgc2NyLCBFcXVhbCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5lbnN1cmVT
cGFjZShtX2Fzc2VtYmxlci5tYXhJbnN0cnVjdGlvblNpemUgKyAyMiwgc2l6ZW9mKHVpbnQzMl90
KSk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5icmFuY2goQlRfT1BDT0RFLCA1KTsKKyAgICAg
ICAgICAgIG1fYXNzZW1ibGVyLmRjbnZkcyhsZWZ0KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVy
LnN0c2ZwdWxSZWcoc2NyKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmNtcGxSZWdSZWcoc2Ny
YXRjaFJlZzMsIHNjciwgRXF1YWwpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuYnJhbmNoKEJU
X09QQ09ERSwgMSk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5kY21wcGd0KHJpZ2h0LCBsZWZ0
KTsKKyAgICAgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgICAgICAgICByZXR1cm4g
YnJhbmNoVHJ1ZSgpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGNvbmQgPT0gRG91YmxlR3Jl
YXRlclRoYW5PckVxdWFsT3JVbm9yZGVyZWQpIHsKKyAgICAgICAgICAgIFJlZ2lzdGVySUQgc2Ny
ID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5sb2FkQ29uc3RhbnQo
MHg3ZmJmZmZmZiwgc2NyYXRjaFJlZzMpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuZGNudmRz
KHJpZ2h0KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnN0c2ZwdWxSZWcoc2NyKTsKKyAgICAg
ICAgICAgIG1fYXNzZW1ibGVyLmNtcGxSZWdSZWcoc2NyYXRjaFJlZzMsIHNjciwgRXF1YWwpOwor
ICAgICAgICAgICAgbV9hc3NlbWJsZXIuZW5zdXJlU3BhY2UobV9hc3NlbWJsZXIubWF4SW5zdHJ1
Y3Rpb25TaXplICsgMjIsIHNpemVvZih1aW50MzJfdCkpOworICAgICAgICAgICAgbV9hc3NlbWJs
ZXIuYnJhbmNoKEJUX09QQ09ERSwgNSk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5kY252ZHMo
bGVmdCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zdHNmcHVsUmVnKHNjcik7CisgICAgICAg
ICAgICBtX2Fzc2VtYmxlci5jbXBsUmVnUmVnKHNjcmF0Y2hSZWczLCBzY3IsIEVxdWFsKTsKKyAg
ICAgICAgICAgIG1fYXNzZW1ibGVyLmJyYW5jaChCVF9PUENPREUsIDEpOworICAgICAgICAgICAg
bV9hc3NlbWJsZXIuZGNtcHBndChsZWZ0LCByaWdodCk7CisgICAgICAgICAgICByZWxlYXNlU2Ny
YXRjaChzY3IpOworICAgICAgICAgICAgcmV0dXJuIGJyYW5jaEZhbHNlKCk7CisgICAgICAgIH0K
KworICAgICAgICBpZiAoY29uZCA9PSBEb3VibGVMZXNzVGhhbk9yVW5vcmRlcmVkKSB7CisgICAg
ICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICAgICAgbV9h
c3NlbWJsZXIubG9hZENvbnN0YW50KDB4N2ZiZmZmZmYsIHNjcmF0Y2hSZWczKTsKKyAgICAgICAg
ICAgIG1fYXNzZW1ibGVyLmRjbnZkcyhyaWdodCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5z
dHNmcHVsUmVnKHNjcik7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5jbXBsUmVnUmVnKHNjcmF0
Y2hSZWczLCBzY3IsIEVxdWFsKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmVuc3VyZVNwYWNl
KG1fYXNzZW1ibGVyLm1heEluc3RydWN0aW9uU2l6ZSArIDIyLCBzaXplb2YodWludDMyX3QpKTsK
KyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmJyYW5jaChCVF9PUENPREUsIDUpOworICAgICAgICAg
ICAgbV9hc3NlbWJsZXIuZGNudmRzKGxlZnQpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuc3Rz
ZnB1bFJlZyhzY3IpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuY21wbFJlZ1JlZyhzY3JhdGNo
UmVnMywgc2NyLCBFcXVhbCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5icmFuY2goQlRfT1BD
T0RFLCAxKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmRjbXBwZ3QobGVmdCwgcmlnaHQpOwor
ICAgICAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICAgICAgICAgIHJldHVybiBicmFu
Y2hUcnVlKCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoY29uZCA9PSBEb3VibGVMZXNzVGhh
bk9yRXF1YWxPclVub3JkZXJlZCkgeworICAgICAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFp
bVNjcmF0Y2goKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmxvYWRDb25zdGFudCgweDdmYmZm
ZmZmLCBzY3JhdGNoUmVnMyk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5kY252ZHMocmlnaHQp
OworICAgICAgICAgICAgbV9hc3NlbWJsZXIuc3RzZnB1bFJlZyhzY3IpOworICAgICAgICAgICAg
bV9hc3NlbWJsZXIuY21wbFJlZ1JlZyhzY3JhdGNoUmVnMywgc2NyLCBFcXVhbCk7CisgICAgICAg
ICAgICBtX2Fzc2VtYmxlci5lbnN1cmVTcGFjZShtX2Fzc2VtYmxlci5tYXhJbnN0cnVjdGlvblNp
emUgKyAyMiwgc2l6ZW9mKHVpbnQzMl90KSk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5icmFu
Y2goQlRfT1BDT0RFLCA1KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmRjbnZkcyhsZWZ0KTsK
KyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnN0c2ZwdWxSZWcoc2NyKTsKKyAgICAgICAgICAgIG1f
YXNzZW1ibGVyLmNtcGxSZWdSZWcoc2NyYXRjaFJlZzMsIHNjciwgRXF1YWwpOworICAgICAgICAg
ICAgbV9hc3NlbWJsZXIuYnJhbmNoKEJUX09QQ09ERSwgMSk7CisgICAgICAgICAgICBtX2Fzc2Vt
Ymxlci5kY21wcGd0KHJpZ2h0LCBsZWZ0KTsKKyAgICAgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNj
cik7CisgICAgICAgICAgICByZXR1cm4gYnJhbmNoRmFsc2UoKTsKKyAgICAgICAgfQorCisgICAg
ICAgIEFTU0VSVChjb25kID09IERvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQpOworICAgICAgICBS
ZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBtX2Fzc2VtYmxlci5sb2Fk
Q29uc3RhbnQoMHg3ZmJmZmZmZiwgc2NyYXRjaFJlZzMpOworICAgICAgICBtX2Fzc2VtYmxlci5k
Y252ZHMocmlnaHQpOworICAgICAgICBtX2Fzc2VtYmxlci5zdHNmcHVsUmVnKHNjcik7CisgICAg
ICAgIG1fYXNzZW1ibGVyLmNtcGxSZWdSZWcoc2NyYXRjaFJlZzMsIHNjciwgRXF1YWwpOworICAg
ICAgICBtX2Fzc2VtYmxlci5lbnN1cmVTcGFjZShtX2Fzc2VtYmxlci5tYXhJbnN0cnVjdGlvblNp
emUgKyAyMiwgc2l6ZW9mKHVpbnQzMl90KSk7CisgICAgICAgIG1fYXNzZW1ibGVyLmJyYW5jaChC
VF9PUENPREUsIDUpOworICAgICAgICBtX2Fzc2VtYmxlci5kY252ZHMobGVmdCk7CisgICAgICAg
IG1fYXNzZW1ibGVyLnN0c2ZwdWxSZWcoc2NyKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuY21wbFJl
Z1JlZyhzY3JhdGNoUmVnMywgc2NyLCBFcXVhbCk7CisgICAgICAgIG1fYXNzZW1ibGVyLmJyYW5j
aChCVF9PUENPREUsIDEpOworICAgICAgICBtX2Fzc2VtYmxlci5kY21wcGVxKHJpZ2h0LCBsZWZ0
KTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaEZh
bHNlKCk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2hUcnVlKCkKKyAgICB7CisgICAgICAgIG1f
YXNzZW1ibGVyLmVuc3VyZVNwYWNlKG1fYXNzZW1ibGVyLm1heEluc3RydWN0aW9uU2l6ZSArIDYs
IHNpemVvZih1aW50MzJfdCkpOworICAgICAgICBKdW1wIG1fanVtcCA9IEp1bXAobV9hc3NlbWJs
ZXIuamUoKSk7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvYWRDb25zdGFudFVuUmV1c2FibGUoMHgw
LCBzY3JhdGNoUmVnMyk7CisgICAgICAgIG1fYXNzZW1ibGVyLm5vcCgpOworICAgICAgICBtX2Fz
c2VtYmxlci5ub3AoKTsKKyAgICAgICAgcmV0dXJuIG1fanVtcDsKKyAgICB9CisKKyAgICBKdW1w
IGJyYW5jaEZhbHNlKCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmVuc3VyZVNwYWNlKG1f
YXNzZW1ibGVyLm1heEluc3RydWN0aW9uU2l6ZSArIDYsIHNpemVvZih1aW50MzJfdCkpOworICAg
ICAgICBKdW1wIG1fanVtcCA9IEp1bXAobV9hc3NlbWJsZXIuam5lKCkpOworICAgICAgICBtX2Fz
c2VtYmxlci5sb2FkQ29uc3RhbnRVblJldXNhYmxlKDB4MCwgc2NyYXRjaFJlZzMpOworICAgICAg
ICBtX2Fzc2VtYmxlci5ub3AoKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubm9wKCk7CisgICAgICAg
IHJldHVybiBtX2p1bXA7CisgICAgfQorCisgICAgdm9pZCBzZXQ4Q29tcGFyZTMyKENvbmRpdGlv
biBjb25kLCBSZWdpc3RlcklEIGxlZnQsIFJlZ2lzdGVySUQgcmlnaHQsIFJlZ2lzdGVySUQgZGVz
dCkKKyAgICB7CisgICAgICAgIHNldDMyQ29tcGFyZTMyKGNvbmQsIGxlZnQsIHJpZ2h0LCBkZXN0
KTsKKyAgICB9CisKKyAgICB2b2lkIHNldDhDb21wYXJlMzIoQ29uZGl0aW9uIGNvbmQsIFJlZ2lz
dGVySUQgbGVmdCwgSW1tMzIgcmlnaHQsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAg
IGlmIChsZWZ0ICE9IGRlc3QpIHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmxvYWRDb25zdGFu
dChyaWdodC5tX3ZhbHVlLCBkZXN0KTsKKyAgICAgICAgICAgIHNldDMyQ29tcGFyZTMyKGNvbmQs
IGxlZnQsIGRlc3QsIGRlc3QpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAg
ICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgbV9hc3NlbWJs
ZXIubG9hZENvbnN0YW50KHJpZ2h0Lm1fdmFsdWUsIHNjcik7CisgICAgICAgIHNldDMyQ29tcGFy
ZTMyKGNvbmQsIGxlZnQsIHNjciwgZGVzdCk7CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7
CisgICAgfQorCisgICAgSnVtcCBicmFuY2gzMihDb25kaXRpb24gY29uZCwgQmFzZUluZGV4IGxl
ZnQsIEltbTMyIHJpZ2h0KQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNj
cmF0Y2goKTsKKyAgICAgICAgbW92ZShsZWZ0LmluZGV4LCBzY3IpOworICAgICAgICBsc2hpZnQz
MihJbW0zMihsZWZ0LnNjYWxlKSwgc2NyKTsKKyAgICAgICAgYWRkMzIobGVmdC5iYXNlLCBzY3Ip
OworICAgICAgICBsb2FkMzIoc2NyLCBsZWZ0Lm9mZnNldCwgc2NyKTsKKyAgICAgICAgY29tcGFy
ZTMyKHJpZ2h0Lm1fdmFsdWUsIHNjciwgY29uZCk7CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNj
cik7CisKKyAgICAgICAgaWYgKGNvbmQgPT0gTm90RXF1YWwpCisgICAgICAgICAgICByZXR1cm4g
YnJhbmNoRmFsc2UoKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaFRydWUoKTsKKyAgICB9CisKKyAg
ICB2b2lkIHNxcnREb3VibGUoRlBSZWdpc3RlcklEIHNyYywgRlBSZWdpc3RlcklEIGRlc3QpCisg
ICAgeworICAgICAgICBpZiAoZGVzdCAhPSBzcmMpCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5k
bW92UmVnUmVnKHNyYywgZGVzdCk7CisgICAgICAgIG1fYXNzZW1ibGVyLmRzcXJ0KGRlc3QpOwor
ICAgIH0KKworICAgIEp1bXAgYnJhbmNoVGVzdDgoQ29uZGl0aW9uIGNvbmQsIEFkZHJlc3MgYWRk
cmVzcywgSW1tMzIgbWFzayA9IEltbTMyKC0xKSkKKyAgICB7CisgICAgICAgIFJlZ2lzdGVySUQg
YWRkcmVzc1RlbXBSZWdpc3RlciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBsb2FkOChhZGRy
ZXNzLCBhZGRyZXNzVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgSnVtcCBqbXAgPSBicmFuY2hUZXN0
MzIoY29uZCwgYWRkcmVzc1RlbXBSZWdpc3RlciwgbWFzayk7CisgICAgICAgIHJlbGVhc2VTY3Jh
dGNoKGFkZHJlc3NUZW1wUmVnaXN0ZXIpOworICAgICAgICByZXR1cm4gam1wOworICAgIH0KKwor
ICAgIHZvaWQgc2lnbkV4dGVuZDMyVG9QdHIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVz
dCkKKyAgICB7CisgICAgICAgIGlmIChzcmMgIT0gZGVzdCkKKyAgICAgICAgICAgIG1vdmUoc3Jj
LCBkZXN0KTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaDgoQ29uZGl0aW9uIGNvbmQsIEFkZHJl
c3MgbGVmdCwgSW1tMzIgcmlnaHQpCisgICAgeworICAgICAgICBSZWdpc3RlcklEIGFkZHJlc3NU
ZW1wUmVnaXN0ZXIgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgbG9hZDgobGVmdCwgYWRkcmVz
c1RlbXBSZWdpc3Rlcik7CisgICAgICAgIEp1bXAgam1wID0gYnJhbmNoMzIoY29uZCwgYWRkcmVz
c1RlbXBSZWdpc3RlciwgcmlnaHQpOworICAgICAgICByZWxlYXNlU2NyYXRjaChhZGRyZXNzVGVt
cFJlZ2lzdGVyKTsKKyAgICAgICAgcmV0dXJuIGptcDsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5j
aFRydW5jYXRlRG91YmxlVG9JbnQzMihGUFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3Qp
CisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5mdHJjZHJtZnB1bChzcmMpOworICAgICAgICBt
X2Fzc2VtYmxlci5zdHNmcHVsUmVnKGRlc3QpOworICAgICAgICBtX2Fzc2VtYmxlci5sb2FkQ29u
c3RhbnQoMHg3ZmZmZmZmZiwgc2NyYXRjaFJlZzMpOworICAgICAgICBtX2Fzc2VtYmxlci5jbXBs
UmVnUmVnKGRlc3QsIHNjcmF0Y2hSZWczLCBFcXVhbCk7CisgICAgICAgIG1fYXNzZW1ibGVyLmVu
c3VyZVNwYWNlKG1fYXNzZW1ibGVyLm1heEluc3RydWN0aW9uU2l6ZSArIDE0LCBzaXplb2YodWlu
dDMyX3QpKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuYnJhbmNoKEJUX09QQ09ERSwgMik7CisgICAg
ICAgIG1fYXNzZW1ibGVyLmFkZGxJbW04cigxLCBzY3JhdGNoUmVnMyk7CisgICAgICAgIG1fYXNz
ZW1ibGVyLmNtcGxSZWdSZWcoZGVzdCwgc2NyYXRjaFJlZzMsIEVxdWFsKTsKKyAgICAgICAgcmV0
dXJuIGJyYW5jaFRydWUoKTsKKyAgICB9CisKKyAgICAvLyBTdGFjayBtYW5pcHVsYXRpb24gb3Bl
cmF0aW9ucworCisgICAgdm9pZCBwb3AoUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAg
bV9hc3NlbWJsZXIucG9wUmVnKGRlc3QpOworICAgIH0KKworICAgIHZvaWQgcHVzaChSZWdpc3Rl
cklEIHNyYykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnB1c2hSZWcoc3JjKTsKKyAgICB9
CisKKyAgICB2b2lkIHB1c2goQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgaWYgKCFh
ZGRyZXNzLm9mZnNldCkgeworICAgICAgICAgICAgcHVzaChhZGRyZXNzLmJhc2UpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKChhZGRyZXNzLm9mZnNldCA8
IDApIHx8IChhZGRyZXNzLm9mZnNldCA+PSA2NCkpIHsKKyAgICAgICAgICAgIFJlZ2lzdGVySUQg
c2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5sb2FkQ29uc3Rh
bnQoYWRkcmVzcy5vZmZzZXQsIHNjcik7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGRsUmVn
UmVnKGFkZHJlc3MuYmFzZSwgc2NyKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLm1vdmxNZW1S
ZWcoc2NyLCBTSDRSZWdpc3RlcnM6OnNwKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZGxJ
bW04cigtNCwgU0g0UmVnaXN0ZXJzOjpzcCk7CisgICAgICAgICAgICByZWxlYXNlU2NyYXRjaChz
Y3IpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgbV9hc3NlbWJs
ZXIubW92bE1lbVJlZyhhZGRyZXNzLm9mZnNldCA+PiAyLCBhZGRyZXNzLmJhc2UsIFNINFJlZ2lz
dGVyczo6c3ApOworICAgICAgICBtX2Fzc2VtYmxlci5hZGRsSW1tOHIoLTQsIFNINFJlZ2lzdGVy
czo6c3ApOworICAgIH0KKworICAgIHZvaWQgcHVzaChJbW0zMiBpbW0pCisgICAgeworICAgICAg
ICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBtX2Fzc2VtYmxlci5s
b2FkQ29uc3RhbnQoaW1tLm1fdmFsdWUsIHNjcik7CisgICAgICAgIHB1c2goc2NyKTsKKyAgICAg
ICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICB9CisKKyAgICAvLyBSZWdpc3RlciBtb3ZlIG9w
ZXJhdGlvbnMKKworICAgIHZvaWQgbW92ZShJbW0zMiBpbW0sIFJlZ2lzdGVySUQgZGVzdCkKKyAg
ICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvYWRDb25zdGFudChpbW0ubV92YWx1ZSwgZGVzdCk7
CisgICAgfQorCisgICAgRGF0YUxhYmVsUHRyIG1vdmVXaXRoUGF0Y2goSW1tUHRyIGluaXRpYWxW
YWx1ZSwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgRGF0YUxhYmVsUHRyIGRhdGFM
YWJlbCh0aGlzKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9hZENvbnN0YW50VW5SZXVzYWJsZShy
ZWludGVycHJldF9jYXN0PHVpbnQzMl90Pihpbml0aWFsVmFsdWUubV92YWx1ZSksIGRlc3QsIHRy
dWUpOworICAgICAgICByZXR1cm4gZGF0YUxhYmVsOworICAgIH0KKworICAgIHZvaWQgbW92ZShS
ZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJs
ZXIubW92bFJlZ1JlZyhzcmMsIGRlc3QpOworICAgIH0KKworICAgIHZvaWQgbW92ZShJbW1QdHIg
aW1tLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2FkQ29u
c3RhbnQoaW1tLmFzSW50cHRyKCksIGRlc3QpOworICAgIH0KKworICAgIHZvaWQgZXh0dXcoUmVn
aXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIu
ZXh0dXcoc3JjLCBkc3QpOworICAgIH0KKworICAgIHZvaWQgc2V0MzJDb21wYXJlMzIoQ29uZGl0
aW9uIGNvbmQsIFJlZ2lzdGVySUQgbGVmdCwgUmVnaXN0ZXJJRCByaWdodCwgUmVnaXN0ZXJJRCBk
ZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuY21wbFJlZ1JlZyhyaWdodCwgbGVmdCwg
Y29uZCk7CisgICAgICAgIGlmIChjb25kICE9IE5vdEVxdWFsKSB7CisgICAgICAgICAgICBtX2Fz
c2VtYmxlci5tb3Z0KGRlc3QpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAg
ICAgICAgbV9hc3NlbWJsZXIuZW5zdXJlU3BhY2UobV9hc3NlbWJsZXIubWF4SW5zdHJ1Y3Rpb25T
aXplICsgNCk7CisgICAgICAgIG1fYXNzZW1ibGVyLm1vdkltbTgoMCwgZGVzdCk7CisgICAgICAg
IG1fYXNzZW1ibGVyLmJyYW5jaChCVF9PUENPREUsIDApOworICAgICAgICBtX2Fzc2VtYmxlci5t
b3ZJbW04KDEsIGRlc3QpOworICAgIH0KKworICAgIHZvaWQgc2V0MzJDb21wYXJlMzIoQ29uZGl0
aW9uIGNvbmQsIFJlZ2lzdGVySUQgbGVmdCwgSW1tMzIgcmlnaHQsIFJlZ2lzdGVySUQgZGVzdCkK
KyAgICB7CisgICAgICAgIGlmIChsZWZ0ICE9IGRlc3QpIHsKKyAgICAgICAgICAgIG1vdmUocmln
aHQsIGRlc3QpOworICAgICAgICAgICAgc2V0MzJDb21wYXJlMzIoY29uZCwgbGVmdCwgZGVzdCwg
ZGVzdCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBSZWdpc3Rl
cklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBtb3ZlKHJpZ2h0LCBzY3IpOworICAg
ICAgICBzZXQzMkNvbXBhcmUzMihjb25kLCBsZWZ0LCBzY3IsIGRlc3QpOworICAgICAgICByZWxl
YXNlU2NyYXRjaChzY3IpOworICAgIH0KKworICAgIHZvaWQgc2V0MzJUZXN0OChDb25kaXRpb24g
Y29uZCwgQWRkcmVzcyBhZGRyZXNzLCBJbW0zMiBtYXNrLCBSZWdpc3RlcklEIGRlc3QpCisgICAg
eworICAgICAgICBBU1NFUlQoKGNvbmQgPT0gWmVybykgfHwgKGNvbmQgPT0gTm9uWmVybykpOwor
CisgICAgICAgIGxvYWQ4KGFkZHJlc3MsIGRlc3QpOworICAgICAgICBpZiAobWFzay5tX3ZhbHVl
ID09IC0xKQorICAgICAgICAgICAgY29tcGFyZTMyKDAsIGRlc3QsIGNvbmQpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICB0ZXN0bEltbShtYXNrLm1fdmFsdWUsIGRlc3QpOworICAgICAgICBp
ZiAoY29uZCAhPSBOb25aZXJvKSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5tb3Z0KGRlc3Qp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgbV9hc3NlbWJsZXIu
ZW5zdXJlU3BhY2UobV9hc3NlbWJsZXIubWF4SW5zdHJ1Y3Rpb25TaXplICsgNCk7CisgICAgICAg
IG1fYXNzZW1ibGVyLm1vdkltbTgoMCwgZGVzdCk7CisgICAgICAgIG1fYXNzZW1ibGVyLmJyYW5j
aChCVF9PUENPREUsIDApOworICAgICAgICBtX2Fzc2VtYmxlci5tb3ZJbW04KDEsIGRlc3QpOwor
ICAgIH0KKworICAgIHZvaWQgbG9hZFB0ckxpbmtSZWcoSW1wbGljaXRBZGRyZXNzIGFkZHJlc3Mp
CisgICAgeworICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAg
ICBsb2FkMzIoYWRkcmVzcywgc2NyKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubGRzcHIoc2NyKTsK
KyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaDMy
KENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGxlZnQsIFJlZ2lzdGVySUQgcmlnaHQpCisgICAg
eworICAgICAgICBtX2Fzc2VtYmxlci5jbXBsUmVnUmVnKHJpZ2h0LCBsZWZ0LCBjb25kKTsKKyAg
ICAgICAgLyogQlQgbGFiZWwgPT4gQkYgb2ZmCisgICAgICAgICAgIG5vcCAgICAgICAgIExEUiBy
ZWcKKyAgICAgICAgICAgbm9wICAgICAgICAgYnJhZiBAcmVnCisgICAgICAgICAgIG5vcCAgICAg
ICAgIG5vcAorICAgICAgICAgKi8KKyAgICAgICAgaWYgKGNvbmQgPT0gTm90RXF1YWwpCisgICAg
ICAgICAgICByZXR1cm4gYnJhbmNoRmFsc2UoKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaFRydWUo
KTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaDMyKENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklE
IGxlZnQsIEltbTMyIHJpZ2h0KQorICAgIHsKKyAgICAgICAgaWYgKCgoY29uZCA9PSBFcXVhbCkg
fHwgKGNvbmQgPT0gTm90RXF1YWwpKSAmJiAhcmlnaHQubV92YWx1ZSkKKyAgICAgICAgICAgIG1f
YXNzZW1ibGVyLnRlc3RsUmVnUmVnKGxlZnQsIGxlZnQpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBjb21wYXJlMzIocmlnaHQubV92YWx1ZSwgbGVmdCwgY29uZCk7CisKKyAgICAgICAgaWYg
KGNvbmQgPT0gTm90RXF1YWwpCisgICAgICAgICAgICByZXR1cm4gYnJhbmNoRmFsc2UoKTsKKyAg
ICAgICAgcmV0dXJuIGJyYW5jaFRydWUoKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaDMyKENv
bmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGxlZnQsIEFkZHJlc3MgcmlnaHQpCisgICAgeworICAg
ICAgICBjb21wYXJlMzIocmlnaHQub2Zmc2V0LCByaWdodC5iYXNlLCBsZWZ0LCBjb25kKTsKKyAg
ICAgICAgaWYgKGNvbmQgPT0gTm90RXF1YWwpCisgICAgICAgICAgICByZXR1cm4gYnJhbmNoRmFs
c2UoKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaFRydWUoKTsKKyAgICB9CisKKyAgICBKdW1wIGJy
YW5jaDMyKENvbmRpdGlvbiBjb25kLCBBZGRyZXNzIGxlZnQsIFJlZ2lzdGVySUQgcmlnaHQpCisg
ICAgeworICAgICAgICBjb21wYXJlMzIocmlnaHQsIGxlZnQub2Zmc2V0LCBsZWZ0LmJhc2UsIGNv
bmQpOworICAgICAgICBpZiAoY29uZCA9PSBOb3RFcXVhbCkKKyAgICAgICAgICAgIHJldHVybiBi
cmFuY2hGYWxzZSgpOworICAgICAgICByZXR1cm4gYnJhbmNoVHJ1ZSgpOworICAgIH0KKworICAg
IEp1bXAgYnJhbmNoMzIoQ29uZGl0aW9uIGNvbmQsIEFkZHJlc3MgbGVmdCwgSW1tMzIgcmlnaHQp
CisgICAgeworICAgICAgICBjb21wYXJlMzIocmlnaHQubV92YWx1ZSwgbGVmdC5vZmZzZXQsIGxl
ZnQuYmFzZSwgY29uZCk7CisgICAgICAgIGlmIChjb25kID09IE5vdEVxdWFsKQorICAgICAgICAg
ICAgcmV0dXJuIGJyYW5jaEZhbHNlKCk7CisgICAgICAgIHJldHVybiBicmFuY2hUcnVlKCk7Cisg
ICAgfQorCisgICAgSnVtcCBicmFuY2gzMihDb25kaXRpb24gY29uZCwgQWJzb2x1dGVBZGRyZXNz
IGxlZnQsIFJlZ2lzdGVySUQgcmlnaHQpCisgICAgeworICAgICAgICBSZWdpc3RlcklEIHNjciA9
IGNsYWltU2NyYXRjaCgpOworCisgICAgICAgIG1vdmUoSW1tMzIocmVpbnRlcnByZXRfY2FzdDx1
aW50MzJfdD4obGVmdC5tX3B0cikpLCBzY3IpOworICAgICAgICBtX2Fzc2VtYmxlci5jbXBsUmVn
UmVnKHJpZ2h0LCBzY3IsIGNvbmQpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworCisg
ICAgICAgIGlmIChjb25kID09IE5vdEVxdWFsKQorICAgICAgICAgICAgcmV0dXJuIGJyYW5jaEZh
bHNlKCk7CisgICAgICAgIHJldHVybiBicmFuY2hUcnVlKCk7CisgICAgfQorCisgICAgSnVtcCBi
cmFuY2gzMihDb25kaXRpb24gY29uZCwgQWJzb2x1dGVBZGRyZXNzIGxlZnQsIEltbTMyIHJpZ2h0
KQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCBhZGRyZXNzVGVtcFJlZ2lzdGVyID0gY2xhaW1T
Y3JhdGNoKCk7CisKKyAgICAgICAgbV9hc3NlbWJsZXIubG9hZENvbnN0YW50KHJlaW50ZXJwcmV0
X2Nhc3Q8dWludDMyX3Q+KGxlZnQubV9wdHIpLCBhZGRyZXNzVGVtcFJlZ2lzdGVyKTsKKyAgICAg
ICAgbV9hc3NlbWJsZXIubW92bE1lbVJlZyhhZGRyZXNzVGVtcFJlZ2lzdGVyLCBhZGRyZXNzVGVt
cFJlZ2lzdGVyKTsKKyAgICAgICAgY29tcGFyZTMyKHJpZ2h0Lm1fdmFsdWUsIGFkZHJlc3NUZW1w
UmVnaXN0ZXIsIGNvbmQpOworICAgICAgICByZWxlYXNlU2NyYXRjaChhZGRyZXNzVGVtcFJlZ2lz
dGVyKTsKKworICAgICAgICBpZiAoY29uZCA9PSBOb3RFcXVhbCkKKyAgICAgICAgICAgIHJldHVy
biBicmFuY2hGYWxzZSgpOworICAgICAgICByZXR1cm4gYnJhbmNoVHJ1ZSgpOworICAgIH0KKwor
ICAgIEp1bXAgYnJhbmNoMTYoQ29uZGl0aW9uIGNvbmQsICBCYXNlSW5kZXggbGVmdCwgUmVnaXN0
ZXJJRCByaWdodCkKKyAgICB7CisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNo
KCk7CisKKyAgICAgICAgbW92ZShsZWZ0LmluZGV4LCBzY3IpOworICAgICAgICBsc2hpZnQzMihJ
bW0zMihsZWZ0LnNjYWxlKSwgc2NyKTsKKworICAgICAgICBpZiAobGVmdC5vZmZzZXQpCisgICAg
ICAgICAgICBhZGQzMihJbW0zMihsZWZ0Lm9mZnNldCksIHNjcik7CisgICAgICAgIGFkZDMyKGxl
ZnQuYmFzZSwgc2NyKTsKKyAgICAgICAgbG9hZDE2KHNjciwgc2NyKTsKKyAgICAgICAgZXh0dXco
c2NyLCBzY3IpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworCisgICAgICAgIHJldHVy
biBicmFuY2gzMihjb25kLCBzY3IsIHJpZ2h0KTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaDE2
KENvbmRpdGlvbiBjb25kLCBCYXNlSW5kZXggbGVmdCwgSW1tMzIgcmlnaHQpCisgICAgeworICAg
ICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworCisgICAgICAgIG1vdmUobGVm
dC5pbmRleCwgc2NyKTsKKyAgICAgICAgbHNoaWZ0MzIoSW1tMzIobGVmdC5zY2FsZSksIHNjcik7
CisKKyAgICAgICAgaWYgKGxlZnQub2Zmc2V0KQorICAgICAgICAgICAgYWRkMzIoSW1tMzIobGVm
dC5vZmZzZXQpLCBzY3IpOworICAgICAgICBhZGQzMihsZWZ0LmJhc2UsIHNjcik7CisgICAgICAg
IGxvYWQxNihzY3IsIHNjcik7CisgICAgICAgIGV4dHV3KHNjciwgc2NyKTsKKyAgICAgICAgUmVn
aXN0ZXJJRCBzY3IxID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvYWRD
b25zdGFudChyaWdodC5tX3ZhbHVlLCBzY3IxKTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2Ny
KTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyMSk7CisKKyAgICAgICAgcmV0dXJuIGJyYW5j
aDMyKGNvbmQsIHNjciwgc2NyMSk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2hUZXN0MzIoQ29u
ZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgcmVnLCBSZWdpc3RlcklEIG1hc2spCisgICAgeworICAg
ICAgICBBU1NFUlQoKGNvbmQgPT0gWmVybykgfHwgKGNvbmQgPT0gTm9uWmVybykpOworCisgICAg
ICAgIG1fYXNzZW1ibGVyLnRlc3RsUmVnUmVnKHJlZywgbWFzayk7CisKKyAgICAgICAgaWYgKGNv
bmQgPT0gTm90RXF1YWwpCisgICAgICAgICAgICByZXR1cm4gYnJhbmNoRmFsc2UoKTsKKyAgICAg
ICAgcmV0dXJuIGJyYW5jaFRydWUoKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaFRlc3QzMihD
b25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCByZWcsIEltbTMyIG1hc2sgPSBJbW0zMigtMSkpCisg
ICAgeworICAgICAgICBBU1NFUlQoKGNvbmQgPT0gWmVybykgfHwgKGNvbmQgPT0gTm9uWmVybykp
OworCisgICAgICAgIGlmIChtYXNrLm1fdmFsdWUgPT0gLTEpCisgICAgICAgICAgICBtX2Fzc2Vt
Ymxlci50ZXN0bFJlZ1JlZyhyZWcsIHJlZyk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHRl
c3RsSW1tKG1hc2subV92YWx1ZSwgcmVnKTsKKworICAgICAgICBpZiAoY29uZCA9PSBOb3RFcXVh
bCkKKyAgICAgICAgICAgIHJldHVybiBicmFuY2hGYWxzZSgpOworICAgICAgICByZXR1cm4gYnJh
bmNoVHJ1ZSgpOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoVGVzdDMyKENvbmRpdGlvbiBjb25k
LCBBZGRyZXNzIGFkZHJlc3MsIEltbTMyIG1hc2sgPSBJbW0zMigtMSkpCisgICAgeworICAgICAg
ICBBU1NFUlQoKGNvbmQgPT0gWmVybykgfHwgKGNvbmQgPT0gTm9uWmVybykpOworCisgICAgICAg
IGlmIChtYXNrLm1fdmFsdWUgPT0gLTEpCisgICAgICAgICAgICBjb21wYXJlMzIoMCwgYWRkcmVz
cy5vZmZzZXQsIGFkZHJlc3MuYmFzZSwgY29uZCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IHRlc3RJbW0obWFzay5tX3ZhbHVlLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlKTsKKwor
ICAgICAgICBpZiAoY29uZCA9PSBOb3RFcXVhbCkKKyAgICAgICAgICAgIHJldHVybiBicmFuY2hG
YWxzZSgpOworICAgICAgICByZXR1cm4gYnJhbmNoVHJ1ZSgpOworICAgIH0KKworICAgIEp1bXAg
YnJhbmNoVGVzdDMyKENvbmRpdGlvbiBjb25kLCBCYXNlSW5kZXggYWRkcmVzcywgSW1tMzIgbWFz
ayA9IEltbTMyKC0xKSkKKyAgICB7CisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3Jh
dGNoKCk7CisKKyAgICAgICAgbW92ZShhZGRyZXNzLmluZGV4LCBzY3IpOworICAgICAgICBsc2hp
ZnQzMihJbW0zMihhZGRyZXNzLnNjYWxlKSwgc2NyKTsKKyAgICAgICAgYWRkMzIoYWRkcmVzcy5i
YXNlLCBzY3IpOworICAgICAgICBsb2FkMzIoc2NyLCBhZGRyZXNzLm9mZnNldCwgc2NyKTsKKwor
ICAgICAgICBpZiAobWFzay5tX3ZhbHVlID09IC0xKQorICAgICAgICAgICAgbV9hc3NlbWJsZXIu
dGVzdGxSZWdSZWcoc2NyLCBzY3IpOworICAgICAgICBlbHNlCisgICAgICAgICAgICB0ZXN0bElt
bShtYXNrLm1fdmFsdWUsIHNjcik7CisKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKwor
ICAgICAgICBpZiAoY29uZCA9PSBOb3RFcXVhbCkKKyAgICAgICAgICAgIHJldHVybiBicmFuY2hG
YWxzZSgpOworICAgICAgICByZXR1cm4gYnJhbmNoVHJ1ZSgpOworICAgIH0KKworICAgIEp1bXAg
anVtcCgpCisgICAgeworICAgICAgICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5qbXAoKSk7Cisg
ICAgfQorCisgICAgdm9pZCBqdW1wKFJlZ2lzdGVySUQgdGFyZ2V0KQorICAgIHsKKyAgICAgICAg
bV9hc3NlbWJsZXIuam1wUmVnKHRhcmdldCk7CisgICAgfQorCisgICAgdm9pZCBqdW1wKEFkZHJl
c3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNo
KCk7CisKKyAgICAgICAgaWYgKChhZGRyZXNzLm9mZnNldCA8IDApIHx8IChhZGRyZXNzLm9mZnNl
dCA+PSA2NCkpIHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmxvYWRDb25zdGFudChhZGRyZXNz
Lm9mZnNldCwgc2NyKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZGxSZWdSZWcoYWRkcmVz
cy5iYXNlLCBzY3IpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIubW92bE1lbVJlZyhzY3IsIHNj
cik7CisgICAgICAgIH0gZWxzZSBpZiAoYWRkcmVzcy5vZmZzZXQpCisgICAgICAgICAgICBtX2Fz
c2VtYmxlci5tb3ZsTWVtUmVnKGFkZHJlc3Mub2Zmc2V0ID4+IDIsIGFkZHJlc3MuYmFzZSwgc2Ny
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9hc3NlbWJsZXIubW92bE1lbVJlZyhhZGRy
ZXNzLmJhc2UsIHNjcik7CisgICAgICAgIG1fYXNzZW1ibGVyLmptcFJlZyhzY3IpOworCisgICAg
ICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgfQorCisgICAgLy8gQXJpdGhtZXRpYyBjb250
cm9sIGZsb3cgb3BlcmF0aW9ucworCisgICAgSnVtcCBicmFuY2hBZGQzMihDb25kaXRpb24gY29u
ZCwgUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIEFTU0VS
VCgoY29uZCA9PSBPdmVyZmxvdykgfHwgKGNvbmQgPT0gU2lnbmVkKSB8fCAoY29uZCA9PSBaZXJv
KSB8fCAoY29uZCA9PSBOb25aZXJvKSk7CisKKyAgICAgICAgaWYgKGNvbmQgPT0gT3ZlcmZsb3cp
IHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZHZsUmVnUmVnKHNyYywgZGVzdCk7CisgICAg
ICAgICAgICByZXR1cm4gYnJhbmNoVHJ1ZSgpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGNv
bmQgPT0gU2lnbmVkKSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGRsUmVnUmVnKHNyYywg
ZGVzdCk7CisgICAgICAgICAgICAvLyBDaGVjayBpZiBkZXN0IGlzIG5lZ2F0aXZlCisgICAgICAg
ICAgICBtX2Fzc2VtYmxlci5jbXBweihkZXN0KTsKKyAgICAgICAgICAgIHJldHVybiBicmFuY2hG
YWxzZSgpOworICAgICAgICB9CisKKyAgICAgICAgbV9hc3NlbWJsZXIuYWRkbFJlZ1JlZyhzcmMs
IGRlc3QpOworICAgICAgICBjb21wYXJlMzIoMCwgZGVzdCwgRXF1YWwpOworCisgICAgICAgIGlm
IChjb25kID09IE5vdEVxdWFsKQorICAgICAgICAgICAgcmV0dXJuIGJyYW5jaEZhbHNlKCk7Cisg
ICAgICAgIHJldHVybiBicmFuY2hUcnVlKCk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2hBZGQz
MihDb25kaXRpb24gY29uZCwgSW1tMzIgaW1tLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAg
ICAgICBBU1NFUlQoKGNvbmQgPT0gT3ZlcmZsb3cpIHx8IChjb25kID09IFNpZ25lZCkgfHwgKGNv
bmQgPT0gWmVybykgfHwgKGNvbmQgPT0gTm9uWmVybykpOworCisgICAgICAgIG1vdmUoaW1tLCBz
Y3JhdGNoUmVnMyk7CisgICAgICAgIHJldHVybiBicmFuY2hBZGQzMihjb25kLCBzY3JhdGNoUmVn
MywgZGVzdCk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2hNdWwzMihDb25kaXRpb24gY29uZCwg
UmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIEFTU0VSVCgo
Y29uZCA9PSBPdmVyZmxvdykgfHwgKGNvbmQgPT0gU2lnbmVkKSB8fCAoY29uZCA9PSBaZXJvKSB8
fCAoY29uZCA9PSBOb25aZXJvKSk7CisKKyAgICAgICAgaWYgKGNvbmQgPT0gT3ZlcmZsb3cpIHsK
KyAgICAgICAgICAgIFJlZ2lzdGVySUQgc2NyMSA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICAg
ICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgICAgIG1fYXNzZW1i
bGVyLmRtdWxsUmVnUmVnKHNyYywgZGVzdCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zdHNt
YWNsKGRlc3QpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIubW92SW1tOCgtMzEsIHNjcik7Cisg
ICAgICAgICAgICBtX2Fzc2VtYmxlci5tb3ZsUmVnUmVnKGRlc3QsIHNjcjEpOworICAgICAgICAg
ICAgbV9hc3NlbWJsZXIuc2hhUmVnUmVnKHNjcjEsIHNjcik7CisgICAgICAgICAgICBtX2Fzc2Vt
Ymxlci5zdHNtYWNoKHNjcik7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5jbXBsUmVnUmVnKHNj
ciwgc2NyMSwgWmVybyk7CisgICAgICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IxKTsKKyAgICAg
ICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgICAgICAgICByZXR1cm4gYnJhbmNoRmFs
c2UoKTsKKyAgICAgICAgfQorCisgICAgICAgIG1fYXNzZW1ibGVyLmltdWxsUmVnUmVnKHNyYywg
ZGVzdCk7CisgICAgICAgIG1fYXNzZW1ibGVyLnN0c21hY2woZGVzdCk7CisgICAgICAgIGlmIChj
b25kID09IFNpZ25lZCkgeworICAgICAgICAgICAgLy8gQ2hlY2sgaWYgZGVzdCBpcyBuZWdhdGl2
ZQorICAgICAgICAgICAgbV9hc3NlbWJsZXIuY21wcHooZGVzdCk7CisgICAgICAgICAgICByZXR1
cm4gYnJhbmNoRmFsc2UoKTsKKyAgICAgICAgfQorCisgICAgICAgIGNvbXBhcmUzMigwLCBkZXN0
LCBjb25kKTsKKworICAgICAgICBpZiAoY29uZCA9PSBOb3RFcXVhbCkKKyAgICAgICAgICAgIHJl
dHVybiBicmFuY2hGYWxzZSgpOworICAgICAgICByZXR1cm4gYnJhbmNoVHJ1ZSgpOworICAgIH0K
KworICAgIEp1bXAgYnJhbmNoTXVsMzIoQ29uZGl0aW9uIGNvbmQsIEltbTMyIGltbSwgUmVnaXN0
ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIEFTU0VSVCgoY29uZCA9
PSBPdmVyZmxvdykgfHwgKGNvbmQgPT0gU2lnbmVkKSB8fCAoY29uZCA9PSBaZXJvKSB8fCAoY29u
ZCA9PSBOb25aZXJvKSk7CisKKyAgICAgICAgbW92ZShpbW0sIHNjcmF0Y2hSZWczKTsKKyAgICAg
ICAgaWYgKHNyYyAhPSBkZXN0KQorICAgICAgICAgICAgbW92ZShzcmMsIGRlc3QpOworCisgICAg
ICAgIHJldHVybiBicmFuY2hNdWwzMihjb25kLCBzY3JhdGNoUmVnMywgZGVzdCk7CisgICAgfQor
CisgICAgSnVtcCBicmFuY2hTdWIzMihDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBzcmMsIFJl
Z2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIEFTU0VSVCgoY29uZCA9PSBPdmVyZmxvdykg
fHwgKGNvbmQgPT0gU2lnbmVkKSB8fCAoY29uZCA9PSBaZXJvKSB8fCAoY29uZCA9PSBOb25aZXJv
KSk7CisKKyAgICAgICAgaWYgKGNvbmQgPT0gT3ZlcmZsb3cpIHsKKyAgICAgICAgICAgIG1fYXNz
ZW1ibGVyLnN1YnZsUmVnUmVnKHNyYywgZGVzdCk7CisgICAgICAgICAgICByZXR1cm4gYnJhbmNo
VHJ1ZSgpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGNvbmQgPT0gU2lnbmVkKSB7CisgICAg
ICAgICAgICAvLyBDaGVjayBpZiBkZXN0IGlzIG5lZ2F0aXZlCisgICAgICAgICAgICBtX2Fzc2Vt
Ymxlci5zdWJsUmVnUmVnKHNyYywgZGVzdCk7CisgICAgICAgICAgICBjb21wYXJlMzIoMCwgZGVz
dCwgTGVzc1RoYW4pOworICAgICAgICAgICAgcmV0dXJuIGJyYW5jaFRydWUoKTsKKyAgICAgICAg
fQorCisgICAgICAgIHN1YjMyKHNyYywgZGVzdCk7CisgICAgICAgIGNvbXBhcmUzMigwLCBkZXN0
LCBjb25kKTsKKworICAgICAgICBpZiAoY29uZCA9PSBOb3RFcXVhbCkKKyAgICAgICAgICAgIHJl
dHVybiBicmFuY2hGYWxzZSgpOworICAgICAgICByZXR1cm4gYnJhbmNoVHJ1ZSgpOworICAgIH0K
KworICAgIEp1bXAgYnJhbmNoU3ViMzIoQ29uZGl0aW9uIGNvbmQsIEltbTMyIGltbSwgUmVnaXN0
ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKChjb25kID09IE92ZXJmbG93KSB8fCAo
Y29uZCA9PSBTaWduZWQpIHx8IChjb25kID09IFplcm8pIHx8IChjb25kID09IE5vblplcm8pKTsK
KworICAgICAgICBtb3ZlKGltbSwgc2NyYXRjaFJlZzMpOworICAgICAgICByZXR1cm4gYnJhbmNo
U3ViMzIoY29uZCwgc2NyYXRjaFJlZzMsIGRlc3QpOworICAgIH0KKworICAgIEp1bXAgYnJhbmNo
T3IzMihDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAg
ICB7CisgICAgICAgIEFTU0VSVCgoY29uZCA9PSBTaWduZWQpIHx8IChjb25kID09IFplcm8pIHx8
IChjb25kID09IE5vblplcm8pKTsKKworICAgICAgICBpZiAoY29uZCA9PSBTaWduZWQpIHsKKyAg
ICAgICAgICAgIG9yMzIoc3JjLCBkZXN0KTsKKyAgICAgICAgICAgIGNvbXBhcmUzMigwLCBkZXN0
LCBMZXNzVGhhbik7CisgICAgICAgICAgICByZXR1cm4gYnJhbmNoVHJ1ZSgpOworICAgICAgICB9
CisKKyAgICAgICAgb3IzMihzcmMsIGRlc3QpOworICAgICAgICBjb21wYXJlMzIoMCwgZGVzdCwg
Y29uZCk7CisKKyAgICAgICAgaWYgKGNvbmQgPT0gTm90RXF1YWwpCisgICAgICAgICAgICByZXR1
cm4gYnJhbmNoRmFsc2UoKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaFRydWUoKTsKKyAgICB9CisK
KyAgICB2b2lkIGJyYW5jaENvbnZlcnREb3VibGVUb0ludDMyKEZQUmVnaXN0ZXJJRCBzcmMsIFJl
Z2lzdGVySUQgZGVzdCwgSnVtcExpc3QmIGZhaWx1cmVDYXNlcywgRlBSZWdpc3RlcklEIGZwVGVt
cCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmZ0cmNkcm1mcHVsKHNyYyk7CisgICAgICAg
IG1fYXNzZW1ibGVyLnN0c2ZwdWxSZWcoZGVzdCk7CisgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91
YmxlKGRlc3QsIGZzY3JhdGNoKTsKKyAgICAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChicmFuY2hE
b3VibGUoRG91YmxlTm90RXF1YWxPclVub3JkZXJlZCwgZnNjcmF0Y2gsIHNyYykpOworCisgICAg
ICAgIGlmIChkZXN0ID09IFNINFJlZ2lzdGVyczo6cjApCisgICAgICAgICAgICBtX2Fzc2VtYmxl
ci5jbXBFcUltbVIwKDAsIGRlc3QsIEVxdWFsKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICBtX2Fzc2VtYmxlci5tb3ZJbW04KDAsIHNjcmF0Y2hSZWczKTsKKyAgICAgICAgICAgIG1fYXNz
ZW1ibGVyLmNtcGxSZWdSZWcoc2NyYXRjaFJlZzMsIGRlc3QsIEVxdWFsKTsKKyAgICAgICAgfQor
ICAgICAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKGJyYW5jaFRydWUoKSk7CisgICAgfQorCisgICAg
dm9pZCBuZWczMihSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLm5l
Zyhkc3QsIGRzdCk7CisgICAgfQorCisgICAgdm9pZCBub3QzMihSZWdpc3RlcklEIGRzdCkKKyAg
ICB7CisgICAgICAgIG1fYXNzZW1ibGVyLm5vdGxSZWcoZHN0LCBkc3QpOworICAgIH0KKworICAg
IHZvaWQgdXJzaGlmdDMyKFJlZ2lzdGVySUQgc2hpZnRhbW91bnQsIFJlZ2lzdGVySUQgZGVzdCkK
KyAgICB7CisgICAgICAgIGNvbXBhcmUzMigzMiwgc2hpZnRhbW91bnQsIEVxdWFsKTsKKyAgICAg
ICAgbV9hc3NlbWJsZXIuZW5zdXJlU3BhY2UobV9hc3NlbWJsZXIubWF4SW5zdHJ1Y3Rpb25TaXpl
ICsgNCk7CisgICAgICAgIG1fYXNzZW1ibGVyLmJyYW5jaChCVF9PUENPREUsIDEpOworICAgICAg
ICBtX2Fzc2VtYmxlci5uZWcoc2hpZnRhbW91bnQsIHNoaWZ0YW1vdW50KTsKKyAgICAgICAgbV9h
c3NlbWJsZXIuc2hsbFJlZ1JlZyhkZXN0LCBzaGlmdGFtb3VudCk7CisgICAgfQorCisgICAgdm9p
ZCB1cnNoaWZ0MzIoSW1tMzIgaW1tLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBS
ZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBtX2Fzc2VtYmxlci5sb2Fk
Q29uc3RhbnQoLShpbW0ubV92YWx1ZSksIHNjcik7CisgICAgICAgIG1fYXNzZW1ibGVyLnNoYVJl
Z1JlZyhkZXN0LCBzY3IpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgIH0KKwor
ICAgIENhbGwgY2FsbCgpCisgICAgeworICAgICAgICByZXR1cm4gQ2FsbChtX2Fzc2VtYmxlci5j
YWxsKCksIENhbGw6OkxpbmthYmxlKTsKKyAgICB9CisKKyAgICBDYWxsIG5lYXJDYWxsKCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBDYWxsKG1fYXNzZW1ibGVyLmNhbGwoKSwgQ2FsbDo6TGlua2Fi
bGVOZWFyKTsKKyAgICB9CisKKyAgICBDYWxsIGNhbGwoUmVnaXN0ZXJJRCB0YXJnZXQpCisgICAg
eworICAgICAgICByZXR1cm4gQ2FsbChtX2Fzc2VtYmxlci5jYWxsKHRhcmdldCksIENhbGw6Ok5v
bmUpOworICAgIH0KKworICAgIHZvaWQgYnJlYWtwb2ludCgpCisgICAgeworICAgICAgICBtX2Fz
c2VtYmxlci5ia3B0KCk7CisgICAgICAgIG1fYXNzZW1ibGVyLm5vcCgpOworICAgIH0KKworICAg
IEp1bXAgYnJhbmNoUHRyV2l0aFBhdGNoKENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGxlZnQs
IERhdGFMYWJlbFB0ciYgZGF0YUxhYmVsLCBJbW1QdHIgaW5pdGlhbFJpZ2h0VmFsdWUgPSBJbW1Q
dHIoMCkpCisgICAgeworICAgICAgICBSZWdpc3RlcklEIGRhdGFUZW1wUmVnaXN0ZXIgPSBjbGFp
bVNjcmF0Y2goKTsKKworICAgICAgICBkYXRhTGFiZWwgPSBtb3ZlV2l0aFBhdGNoKGluaXRpYWxS
aWdodFZhbHVlLCBkYXRhVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuY21wbFJl
Z1JlZyhkYXRhVGVtcFJlZ2lzdGVyLCBsZWZ0LCBjb25kKTsKKyAgICAgICAgcmVsZWFzZVNjcmF0
Y2goZGF0YVRlbXBSZWdpc3Rlcik7CisKKyAgICAgICAgaWYgKGNvbmQgPT0gTm90RXF1YWwpCisg
ICAgICAgICAgICByZXR1cm4gYnJhbmNoRmFsc2UoKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaFRy
dWUoKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaFB0cldpdGhQYXRjaChDb25kaXRpb24gY29u
ZCwgQWRkcmVzcyBsZWZ0LCBEYXRhTGFiZWxQdHImIGRhdGFMYWJlbCwgSW1tUHRyIGluaXRpYWxS
aWdodFZhbHVlID0gSW1tUHRyKDApKQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBj
bGFpbVNjcmF0Y2goKTsKKworICAgICAgICBtX2Fzc2VtYmxlci5sb2FkQ29uc3RhbnQobGVmdC5v
ZmZzZXQsIHNjcik7CisgICAgICAgIG1fYXNzZW1ibGVyLmFkZGxSZWdSZWcobGVmdC5iYXNlLCBz
Y3IpOworICAgICAgICBtX2Fzc2VtYmxlci5tb3ZsTWVtUmVnKHNjciwgc2NyKTsKKyAgICAgICAg
UmVnaXN0ZXJJRCBzY3IxID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIGRhdGFMYWJlbCA9IG1v
dmVXaXRoUGF0Y2goaW5pdGlhbFJpZ2h0VmFsdWUsIHNjcjEpOworICAgICAgICBtX2Fzc2VtYmxl
ci5jbXBsUmVnUmVnKHNjcjEsIHNjciwgY29uZCk7CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNj
cik7CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcjEpOworCisgICAgICAgIGlmIChjb25kID09
IE5vdEVxdWFsKQorICAgICAgICAgICAgcmV0dXJuIGJyYW5jaEZhbHNlKCk7CisgICAgICAgIHJl
dHVybiBicmFuY2hUcnVlKCk7CisgICAgfQorCisgICAgdm9pZCByZXQoKQorICAgIHsKKyAgICAg
ICAgbV9hc3NlbWJsZXIucmV0KCk7CisgICAgICAgIG1fYXNzZW1ibGVyLm5vcCgpOworICAgIH0K
KworICAgIERhdGFMYWJlbFB0ciBzdG9yZVB0cldpdGhQYXRjaChJbW1QdHIgaW5pdGlhbFZhbHVl
LCBJbXBsaWNpdEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIFJlZ2lzdGVySUQgc2Ny
ID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIERhdGFMYWJlbFB0ciBsYWJlbCA9IG1vdmVXaXRo
UGF0Y2goaW5pdGlhbFZhbHVlLCBzY3IpOworICAgICAgICBzdG9yZTMyKHNjciwgYWRkcmVzcyk7
CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgICAgIHJldHVybiBsYWJlbDsKKyAg
ICB9CisKKyAgICBEYXRhTGFiZWxQdHIgc3RvcmVQdHJXaXRoUGF0Y2goSW1wbGljaXRBZGRyZXNz
IGFkZHJlc3MpIHsgcmV0dXJuIHN0b3JlUHRyV2l0aFBhdGNoKEltbVB0cigwKSwgYWRkcmVzcyk7
IH0KKworICAgIGludCBzaXplT2ZDb25zdGFudFBvb2woKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IG1fYXNzZW1ibGVyLnNpemVPZkNvbnN0YW50UG9vbCgpOworICAgIH0KKworICAgIENhbGwgdGFp
bFJlY3Vyc2l2ZUNhbGwoKQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNj
cmF0Y2goKTsKKworICAgICAgICBtX2Fzc2VtYmxlci5sb2FkQ29uc3RhbnRVblJldXNhYmxlKDB4
MCwgc2NyLCB0cnVlKTsKKyAgICAgICAgSnVtcCBtX2p1bXAgPSBKdW1wKG1fYXNzZW1ibGVyLmpt
cChzY3IpKTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKworICAgICAgICByZXR1cm4g
Q2FsbDo6ZnJvbVRhaWxKdW1wKG1fanVtcCk7CisgICAgfQorCisgICAgQ2FsbCBtYWtlVGFpbFJl
Y3Vyc2l2ZUNhbGwoSnVtcCBvbGRKdW1wKQorICAgIHsKKyAgICAgICAgb2xkSnVtcC5saW5rKHRo
aXMpOworICAgICAgICByZXR1cm4gdGFpbFJlY3Vyc2l2ZUNhbGwoKTsKKyAgICB9CisKK3ByaXZh
dGU6CisgICAgZnJpZW5kIGNsYXNzIExpbmtCdWZmZXI7CisgICAgZnJpZW5kIGNsYXNzIFJlcGF0
Y2hCdWZmZXI7CisKKyAgICBzdGF0aWMgdm9pZCBsaW5rQ2FsbCh2b2lkKiwgQ2FsbCwgRnVuY3Rp
b25QdHIpOworICAgIHN0YXRpYyB2b2lkIHJlcGF0Y2hDYWxsKENvZGVMb2NhdGlvbkNhbGwsIENv
ZGVMb2NhdGlvbkxhYmVsKTsKKyAgICBzdGF0aWMgdm9pZCByZXBhdGNoQ2FsbChDb2RlTG9jYXRp
b25DYWxsLCBGdW5jdGlvblB0cik7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlm
IC8vIEVOQUJMRShBU1NFTUJMRVIpCisKKyNlbmRpZiAvLyBNYWNyb0Fzc2VtYmxlclNINF9oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1NINEFzc2VtYmxlci5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9TSDRBc3NlbWJsZXIuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzQ0YmMzCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9TSDRBc3NlbWJsZXIuaApAQCAtMCwwICsx
LDIwNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMSBTVE1pY3JvZWxlY3Ryb25p
Y3MuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBTSDRBc3NlbWJsZXJfaAorI2RlZmluZSBTSDRBc3NlbWJsZXJf
aAorCisjaWYgRU5BQkxFKEFTU0VNQkxFUikgJiYgQ1BVKFNINCkKKworI2luY2x1ZGUgIkFzc2Vt
YmxlckJ1ZmZlci5oIgorI2luY2x1ZGUgIkFzc2VtYmxlckJ1ZmZlcldpdGhDb25zdGFudFBvb2wu
aCIKKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDx3
dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworI2lmbmRlZiBOREVC
VUcKKyNkZWZpbmUgU0g0X0FTU0VNQkxFUl9UUkFDSU5HCisjZW5kaWYKKworbmFtZXNwYWNlIEpT
QyB7Cit0eXBlZGVmIHVpbnQxNl90IFNINFdvcmQ7CisKK2VudW0geworICAgIElOVkFMSURfT1BD
T0RFID0gMHhmZmZmLAorICAgIEFERF9PUENPREUgPSAweDMwMGMsCisgICAgQURESU1NX09QQ09E
RSA9IDB4NzAwMCwKKyAgICBBRERDX09QQ09ERSA9IDB4MzAwZSwKKyAgICBBRERWX09QQ09ERSA9
IDB4MzAwZiwKKyAgICBBTkRfT1BDT0RFID0gMHgyMDA5LAorICAgIEFORElNTV9PUENPREUgPSAw
eGM5MDAsCisgICAgRElWMF9PUENPREUgPSAweDIwMDcsCisgICAgRElWMV9PUENPREUgPSAweDMw
MDQsCisgICAgQkZfT1BDT0RFID0gMHg4YjAwLAorICAgIEJGU19PUENPREUgPSAweDhmMDAsCisg
ICAgQlJBX09QQ09ERSA9IDB4YTAwMCwKKyAgICBCUkFGX09QQ09ERSA9IDB4MDAyMywKKyAgICBO
T1BfT1BDT0RFID0gMHgwMDA5LAorICAgIEJTUl9PUENPREUgPSAweGIwMDAsCisgICAgUlRTX09Q
Q09ERSA9IDB4MDAwYiwKKyAgICBCVF9PUENPREUgPSAweDg5MDAsCisgICAgQlRTX09QQ09ERSA9
IDB4OGQwMCwKKyAgICBCU1JGX09QQ09ERSA9IDB4MDAwMywKKyAgICBCUktfT1BDT0RFID0gMHgw
MDNiLAorICAgIEZUUkNfT1BDT0RFID0gMHhmMDNkLAorICAgIENNUEVRX09QQ09ERSA9IDB4MzAw
MCwKKyAgICBDTVBFUUlNTV9PUENPREUgPSAweDg4MDAsCisgICAgQ01QR0VfT1BDT0RFID0gMHgz
MDAzLAorICAgIENNUEdUX09QQ09ERSA9IDB4MzAwNywKKyAgICBDTVBISV9PUENPREUgPSAweDMw
MDYsCisgICAgQ01QSFNfT1BDT0RFID0gMHgzMDAyLAorICAgIENNUFBMX09QQ09ERSA9IDB4NDAx
NSwKKyAgICBDTVBQWl9PUENPREUgPSAweDQwMTEsCisgICAgQ01QU1RSX09QQ09ERSA9IDB4MjAw
YywKKyAgICBEVF9PUENPREUgPSAweDQwMTAsCisgICAgRkNNUEVRX09QQ09ERSA9IDB4ZjAwNCwK
KyAgICBGQ01QR1RfT1BDT0RFID0gMHhmMDA1LAorICAgIEZNT1ZfT1BDT0RFID0gMHhmMDBjLAor
ICAgIEZBRERfT1BDT0RFID0gMHhmMDAwLAorICAgIEZNVUxfT1BDT0RFID0gMHhmMDAyLAorICAg
IEZTVUJfT1BDT0RFID0gMHhmMDAxLAorICAgIEZESVZfT1BDT0RFID0gMHhmMDAzLAorICAgIEZO
RUdfT1BDT0RFID0gMHhmMDRkLAorICAgIEpNUF9PUENPREUgPSAweDQwMmIsCisgICAgSlNSX09Q
Q09ERSA9IDB4NDAwYiwKKyAgICBMRFNQUl9PUENPREUgPSAweDQwMmEsCisgICAgTERTTFBSX09Q
Q09ERSA9IDB4NDAyNiwKKyAgICBNT1ZfT1BDT0RFID0gMHg2MDAzLAorICAgIE1PVklNTV9PUENP
REUgPSAweGUwMDAsCisgICAgTU9WQl9XUklURV9STl9PUENPREUgPSAweDIwMDAsCisgICAgTU9W
Ql9XUklURV9STkRFQ19PUENPREUgPSAweDIwMDQsCisgICAgTU9WQl9XUklURV9SMFJOX09QQ09E
RSA9IDB4MDAwNCwKKyAgICBNT1ZCX1dSSVRFX09GRkdCUl9PUENPREUgPSAweGMwMDAsCisgICAg
TU9WQl9XUklURV9PRkZSTl9PUENPREUgPSAweDgwMDAsCisgICAgTU9WQl9SRUFEX1JNX09QQ09E
RSA9IDB4NjAwMCwKKyAgICBNT1ZCX1JFQURfUk1JTkNfT1BDT0RFID0gMHg2MDA0LAorICAgIE1P
VkJfUkVBRF9SMFJNX09QQ09ERSA9IDB4MDAwYywKKyAgICBNT1ZCX1JFQURfT0ZGR0JSX09QQ09E
RSA9IDB4YzQwMCwKKyAgICBNT1ZCX1JFQURfT0ZGUk1fT1BDT0RFID0gMHg4NDAwLAorICAgIE1P
VkxfV1JJVEVfUk5fT1BDT0RFID0gMHgyMDAyLAorICAgIE1PVkxfV1JJVEVfUk5ERUNfT1BDT0RF
ID0gMHgyMDA2LAorICAgIE1PVkxfV1JJVEVfUjBSTl9PUENPREUgPSAweDAwMDYsCisgICAgTU9W
TF9XUklURV9PRkZHQlJfT1BDT0RFID0gMHhjMjAwLAorICAgIE1PVkxfV1JJVEVfT0ZGUk5fT1BD
T0RFID0gMHgxMDAwLAorICAgIE1PVkxfUkVBRF9STV9PUENPREUgPSAweDYwMDIsCisgICAgTU9W
TF9SRUFEX1JNSU5DX09QQ09ERSA9IDB4NjAwNiwKKyAgICBNT1ZMX1JFQURfUjBSTV9PUENPREUg
PSAweDAwMGUsCisgICAgTU9WTF9SRUFEX09GRkdCUl9PUENPREUgPSAweGM2MDAsCisgICAgTU9W
TF9SRUFEX09GRlBDX09QQ09ERSA9IDB4ZDAwMCwKKyAgICBNT1ZMX1JFQURfT0ZGUk1fT1BDT0RF
ID0gMHg1MDAwLAorICAgIE1PVldfV1JJVEVfUk5fT1BDT0RFID0gMHgyMDAxLAorICAgIE1PVldf
UkVBRF9STV9PUENPREUgPSAweDYwMDEsCisgICAgTU9WV19SRUFEX1IwUk1fT1BDT0RFID0gMHgw
MDBkLAorICAgIE1PVldfUkVBRF9PRkZSTV9PUENPREUgPSAweDg1MDAsCisgICAgTU9WV19SRUFE
X09GRlBDX09QQ09ERSA9IDB4OTAwMCwKKyAgICBNT1ZBX1JFQURfT0ZGUENfT1BDT0RFID0gMHhj
NzAwLAorICAgIE1PVlRfT1BDT0RFID0gMHgwMDI5LAorICAgIE1VTExfT1BDT0RFID0gMHgwMDA3
LAorICAgIERNVUxMX0xfT1BDT0RFID0gMHgzMDA1LAorICAgIFNUU01BQ0xfT1BDT0RFID0gMHgw
MDFhLAorICAgIFNUU01BQ0hfT1BDT0RFID0gMHgwMDBhLAorICAgIERNVUxTTF9PUENPREUgPSAw
eDMwMGQsCisgICAgTkVHX09QQ09ERSA9IDB4NjAwYiwKKyAgICBORUdDX09QQ09ERSA9IDB4NjAw
YSwKKyAgICBOT1RfT1BDT0RFID0gMHg2MDA3LAorICAgIE9SX09QQ09ERSA9IDB4MjAwYiwKKyAg
ICBPUklNTV9PUENPREUgPSAweGNiMDAsCisgICAgT1JCSU1NX09QQ09ERSA9IDB4Y2YwMCwKKyAg
ICBTRVRTX09QQ09ERSA9IDB4MDA1OCwKKyAgICBTRVRUX09QQ09ERSA9IDB4MDAxOCwKKyAgICBT
SEFEX09QQ09ERSA9IDB4NDAwYywKKyAgICBTSEFMX09QQ09ERSA9IDB4NDAyMCwKKyAgICBTSEFS
X09QQ09ERSA9IDB4NDAyMSwKKyAgICBTSExEX09QQ09ERSA9IDB4NDAwZCwKKyAgICBTSExMX09Q
Q09ERSA9IDB4NDAwMCwKKyAgICBTSExMMl9PUENPREUgPSAweDQwMDgsCisgICAgU0hMTDhfT1BD
T0RFID0gMHg0MDE4LAorICAgIFNITEwxNl9PUENPREUgPSAweDQwMjgsCisgICAgU0hMUl9PUENP
REUgPSAweDQwMDEsCisgICAgU0hMUjJfT1BDT0RFID0gMHg0MDA5LAorICAgIFNITFI4X09QQ09E
RSA9IDB4NDAxOSwKKyAgICBTSExSMTZfT1BDT0RFID0gMHg0MDI5LAorICAgIFNUU1BSX09QQ09E
RSA9IDB4MDAyYSwKKyAgICBTVFNMUFJfT1BDT0RFID0gMHg0MDIyLAorICAgIEZMT0FUX09QQ09E
RSA9IDB4ZjAyZCwKKyAgICBTVUJfT1BDT0RFID0gMHgzMDA4LAorICAgIFNVQkNfT1BDT0RFID0g
MHgzMDBhLAorICAgIFNVQlZfT1BDT0RFID0gMHgzMDBiLAorICAgIFRTVF9PUENPREUgPSAweDIw
MDgsCisgICAgVFNUSU1NX09QQ09ERSA9IDB4YzgwMCwKKyAgICBUU1RCX09QQ09ERSA9IDB4Y2Mw
MCwKKyAgICBFWFRVV19PUENPREUgPSAweDYwMGQsCisgICAgWE9SX09QQ09ERSA9IDB4MjAwYSwK
KyAgICBYT1JJTU1fT1BDT0RFID0gMHhjYTAwLAorICAgIFhPUkJfT1BDT0RFID0gMHhjZTAwLAor
ICAgIEZNT1ZTX1JFQURfUk1fSU5DX09QQ09ERSA9IDB4ZjAwOSwKKyAgICBGTU9WU19SRUFEX1JN
X09QQ09ERSA9IDB4ZjAwOCwKKyAgICBGTU9WU19SRUFEX1IwUk1fT1BDT0RFID0gMHhmMDA2LAor
ICAgIEZNT1ZTX1dSSVRFX1JOX09QQ09ERSA9IDB4ZjAwYSwKKyAgICBGTU9WU19XUklURV9STl9E
RUNfT1BDT0RFID0gMHhmMDBiLAorICAgIEZNT1ZTX1dSSVRFX1IwUk5fT1BDT0RFID0gMHhmMDA3
LAorICAgIEZDTlZEU19EUk1fRlBVTF9PUENPREUgPSAweGYwYmQsCisgICAgTERTX1JNX0ZQVUxf
T1BDT0RFID0gMHg0MDVhLAorICAgIEZMRFNfRlJNX0ZQVUxfT1BDT0RFID0gMHhmMDFkLAorICAg
IFNUU19GUFVMX1JOX09QQ09ERSA9IDB4MDA1YSwKKyAgICBGU1RTX0ZQVUxfRlJOX09QQ09ERSA9
IDB4RjAwZCwKKyAgICBMRFNGUFNDUl9PUENPREUgPSAweDQwNmEsCisgICAgU1RTRlBTQ1JfT1BD
T0RFID0gMHgwMDZhLAorICAgIExEU1JNRlBVTF9PUENPREUgPSAweDQwNWEsCisgICAgRlNUU0ZQ
VUxGUk5fT1BDT0RFID0gMHhmMDBkLAorICAgIEZTUVJUX09QQ09ERSA9IDB4ZjA2ZCwKKyAgICBG
U0NIR19PUENPREUgPSAweGYzZmQsCisgICAgQ0xSVF9PUENPREUgPSA4LAorfTsKKworbmFtZXNw
YWNlIFNINFJlZ2lzdGVycyB7Cit0eXBlZGVmIGVudW0geworICAgIHIwLAorICAgIHIxLAorICAg
IHIyLAorICAgIHIzLAorICAgIHI0LAorICAgIHI1LAorICAgIHI2LAorICAgIHI3LAorICAgIHI4
LAorICAgIHI5LAorICAgIHIxMCwKKyAgICByMTEsCisgICAgcjEyLAorICAgIHIxMywKKyAgICBy
MTQsIGZwID0gcjE0LAorICAgIHIxNSwgc3AgPSByMTUsCisgICAgcGMsCisgICAgcHIsCit9IFJl
Z2lzdGVySUQ7CisKK3R5cGVkZWYgZW51bSB7CisgICAgZnIwLCBkcjAgPSBmcjAsCisgICAgZnIx
LAorICAgIGZyMiwgZHIyID0gZnIyLAorICAgIGZyMywKKyAgICBmcjQsIGRyNCA9IGZyNCwKKyAg
ICBmcjUsCisgICAgZnI2LCBkcjYgPSBmcjYsCisgICAgZnI3LAorICAgIGZyOCwgZHI4ID0gZnI4
LAorICAgIGZyOSwKKyAgICBmcjEwLCBkcjEwID0gZnIxMCwKKyAgICBmcjExLAorICAgIGZyMTIs
IGRyMTIgPSBmcjEyLAorICAgIGZyMTMsCisgICAgZnIxNCwgZHIxNCA9IGZyMTQsCisgICAgZnIx
NSwKK30gRlBSZWdpc3RlcklEOworfQorCitpbmxpbmUgdWludDE2X3QgZ2V0T3Bjb2RlR3JvdXAx
KHVpbnQxNl90IG9wYywgaW50IHJtLCBpbnQgcm4pCit7CisgICAgcmV0dXJuIChvcGMgfCAoKHJt
ICYgMHhmKSA8PCA4KSB8ICgocm4gJiAweGYpIDw8IDQpKTsKK30KKworaW5saW5lIHVpbnQxNl90
IGdldE9wY29kZUdyb3VwMih1aW50MTZfdCBvcGMsIGludCBybSkKK3sKKyAgICByZXR1cm4gKG9w
YyB8ICgocm0gJiAweGYpIDw8IDgpKTsKK30KKworaW5saW5lIHVpbnQxNl90IGdldE9wY29kZUdy
b3VwMyh1aW50MTZfdCBvcGMsIGludCBybSwgaW50IHJuKQoreworICAgIHJldHVybiAob3BjIHwg
KChybSAmIDB4ZikgPDwgOCkgfCAocm4gJiAweGZmKSk7Cit9CisKK2lubGluZSB1aW50MTZfdCBn
ZXRPcGNvZGVHcm91cDQodWludDE2X3Qgb3BjLCBpbnQgcm0sIGludCBybiwgaW50IG9mZnNldCkK
K3sKKyAgICByZXR1cm4gKG9wYyB8ICgocm0gJiAweGYpIDw8IDgpIHwgKChybiAmIDB4ZikgPDwg
NCkgfCAob2Zmc2V0ICYgMHhmKSk7Cit9CisKK2lubGluZSB1aW50MTZfdCBnZXRPcGNvZGVHcm91
cDUodWludDE2X3Qgb3BjLCBpbnQgcm0pCit7CisgICAgcmV0dXJuIChvcGMgfCAocm0gJiAweGZm
KSk7Cit9CisKK2lubGluZSB1aW50MTZfdCBnZXRPcGNvZGVHcm91cDYodWludDE2X3Qgb3BjLCBp
bnQgcm0pCit7CisgICAgcmV0dXJuIChvcGMgfCAocm0gJiAweGZmZikpOworfQorCitpbmxpbmUg
dWludDE2X3QgZ2V0T3Bjb2RlR3JvdXA3KHVpbnQxNl90IG9wYywgaW50IHJtKQoreworICAgIHJl
dHVybiAob3BjIHwgKChybSAmIDB4NykgPDwgOSkpOworfQorCitpbmxpbmUgdWludDE2X3QgZ2V0
T3Bjb2RlR3JvdXA4KHVpbnQxNl90IG9wYywgaW50IHJtLCBpbnQgcm4pCit7CisgICAgcmV0dXJu
IChvcGMgfCAoKHJtICYgMHg3KSA8PCA5KSB8ICgocm4gJiAweDcpIDw8IDUpKTsKK30KKworaW5s
aW5lIHVpbnQxNl90IGdldE9wY29kZUdyb3VwOSh1aW50MTZfdCBvcGMsIGludCBybSwgaW50IHJu
KQoreworICAgIHJldHVybiAob3BjIHwgKChybSAmIDB4ZikgPDwgOCkgfCAoKHJuICYgMHg3KSA8
PCA1KSk7Cit9CisKK2lubGluZSB1aW50MTZfdCBnZXRPcGNvZGVHcm91cDEwKHVpbnQxNl90IG9w
YywgaW50IHJtLCBpbnQgcm4pCit7CisgICAgcmV0dXJuIChvcGMgfCAoKHJtICYgMHg3KSA8PCA5
KSB8ICgocm4gJiAweGYpIDw8IDQpKTsKK30KKworaW5saW5lIHVpbnQxNl90IGdldE9wY29kZUdy
b3VwMTEodWludDE2X3Qgb3BjLCBpbnQgcm0sIGludCBybikKK3sKKyAgICByZXR1cm4gKG9wYyB8
ICgocm0gJiAweGYpIDw8IDQpIHwgKHJuICYgMHhmKSk7Cit9CisKK2lubGluZSB1aW50MTZfdCBn
ZXRSbih1aW50MTZfdCB4KQoreworICAgIHJldHVybiAoKHggJiAweGYwMCkgPj4gOCk7Cit9CisK
K2lubGluZSB1aW50MTZfdCBnZXRSbSh1aW50MTZfdCB4KQoreworICAgIHJldHVybiAoKHggJiAw
eGYwKSA+PiA0KTsKK30KKworaW5saW5lIHVpbnQxNl90IGdldERpc3AodWludDE2X3QgeCkKK3sK
KyAgICByZXR1cm4gKHggJiAweGYpOworfQorCitpbmxpbmUgdWludDE2X3QgZ2V0SW1tOCh1aW50
MTZfdCB4KQoreworICAgIHJldHVybiAoeCAmIDB4ZmYpOworfQorCitpbmxpbmUgdWludDE2X3Qg
Z2V0SW1tMTIodWludDE2X3QgeCkKK3sKKyAgICByZXR1cm4gKHggJiAweGZmZik7Cit9CisKK2lu
bGluZSB1aW50MTZfdCBnZXREUm4odWludDE2X3QgeCkKK3sKKyAgICByZXR1cm4gKCh4ICYgMHhl
MDApID4+IDkpOworfQorCitpbmxpbmUgdWludDE2X3QgZ2V0RFJtKHVpbnQxNl90IHgpCit7Cisg
ICAgcmV0dXJuICgoeCAmIDB4ZTApID4+IDUpOworfQorCitjbGFzcyBTSDRBc3NlbWJsZXIgewor
cHVibGljOgorICAgIHR5cGVkZWYgU0g0UmVnaXN0ZXJzOjpSZWdpc3RlcklEIFJlZ2lzdGVySUQ7
CisgICAgdHlwZWRlZiBTSDRSZWdpc3RlcnM6OkZQUmVnaXN0ZXJJRCBGUFJlZ2lzdGVySUQ7Cisg
ICAgdHlwZWRlZiBBc3NlbWJsZXJCdWZmZXJXaXRoQ29uc3RhbnRQb29sPDUxMiwgNCwgMiwgU0g0
QXNzZW1ibGVyPiBTSDRCdWZmZXI7CisgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgc2NyYXRj
aFJlZzEgPSBTSDRSZWdpc3RlcnM6OnIzOworICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIHNj
cmF0Y2hSZWcyID0gU0g0UmVnaXN0ZXJzOjpyMTE7CisgICAgc3RhdGljIGNvbnN0IHVpbnQzMl90
IG1heEluc3RydWN0aW9uU2l6ZSA9IDE2OworCisgICAgZW51bSB7CisgICAgICAgIHBhZEZvckFs
aWduOCA9IDB4MDAsCisgICAgICAgIHBhZEZvckFsaWduMTYgPSAweDAwMDksCisgICAgICAgIHBh
ZEZvckFsaWduMzIgPSAweDAwMDkwMDA5LAorICAgIH07CisKKyAgICBTSDRBc3NlbWJsZXIoKQor
ICAgIHsKKyAgICAgICAgbV9jbGFpbXNjcmF0Y2hSZWcgPSAweDA7CisgICAgfQorCisgICAgLy8g
U0g0IGNvbmRpdGlvbiBjb2RlcworICAgIHR5cGVkZWYgZW51bSB7CisgICAgICAgIEVRID0gMHgw
LCAvLyBFcXVhbAorICAgICAgICBORSA9IDB4MSwgLy8gTm90IEVxdWFsCisgICAgICAgIEhTID0g
MHgyLCAvLyBVbnNpZ2VuZCBHcmVhdGVyIFRoYW4gZXF1YWwKKyAgICAgICAgSEkgPSAweDMsIC8v
IFVuc2lnZW5kIEdyZWF0ZXIgVGhhbgorICAgICAgICBMUyA9IDB4NCwgLy8gVW5zaWdlbmQgTG93
ZXIgb3IgU2FtZQorICAgICAgICBMSSA9IDB4NSwgLy8gVW5zaWdlbmQgTG93ZXIKKyAgICAgICAg
R0UgPSAweDYsIC8vIEdyZWF0ZXIgb3IgRXF1YWwKKyAgICAgICAgTFQgPSAweDcsIC8vIExlc3Mg
VGhhbgorICAgICAgICBHVCA9IDB4OCwgLy8gR3JlYXRlciBUaGFuCisgICAgICAgIExFID0gMHg5
LCAvLyBMZXNzIG9yIEVxdWFsCisgICAgICAgIE9GID0gMHhhLCAvLyBPdmVyRmxvdworICAgICAg
ICBTSSA9IDB4YiwgLy8gU2lnbmVkCisgICAgICAgIEVRVT0gMHhjLCAvLyBFcXVhbCBvciB1bm9y
ZGVyZWQoTmFOKQorICAgICAgICBORVU9IDB4ZCwKKyAgICAgICAgR1RVPSAweGUsCisgICAgICAg
IEdFVT0gMHhmLAorICAgICAgICBMVFU9IDB4MTAsCisgICAgICAgIExFVT0gMHgxMSwKKyAgICB9
IENvbmRpdGlvbjsKKworICAgIC8vIE9wYXF1ZSBsYWJlbCB0eXBlcworcHVibGljOgorICAgIGNs
YXNzIEptcFNyYyB7CisgICAgICAgIGZyaWVuZCBjbGFzcyBTSDRBc3NlbWJsZXI7CisgICAgcHVi
bGljOgorICAgICAgICBKbXBTcmMoKQorICAgICAgICAgICAgOiBtX29mZnNldCgtMSkKKyAgICAg
ICAgeworICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBKbXBTcmMoaW50IG9mZnNl
dCkKKyAgICAgICAgICAgIDogbV9vZmZzZXQob2Zmc2V0KQorICAgICAgICB7CisgICAgICAgIH0K
KworICAgICAgICBpbnQgbV9vZmZzZXQ7CisgICAgfTsKKworICAgIGNsYXNzIEptcERzdCB7Cisg
ICAgICAgIGZyaWVuZCBjbGFzcyBTSDRBc3NlbWJsZXI7CisgICAgcHVibGljOgorICAgICAgICBK
bXBEc3QoKQorICAgICAgICAgICAgOiBtX29mZnNldCgtMSkKKyAgICAgICAgICAgICwgbV91c2Vk
KGZhbHNlKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBib29sIGlzVXNlZCgpIGNv
bnN0IHsgcmV0dXJuIG1fdXNlZDsgfQorICAgICAgICBib29sIGlzU2V0KCkgY29uc3QgeyByZXR1
cm4gKG1fb2Zmc2V0ICE9IC0xKTsgfQorICAgICAgICB2b2lkIHVzZWQoKSB7IG1fdXNlZCA9IHRy
dWU7IH0KKworICAgIHByaXZhdGU6CisgICAgICAgIEptcERzdChpbnQgb2Zmc2V0KQorICAgICAg
ICAgICAgOiBtX29mZnNldChvZmZzZXQpCisgICAgICAgICAgICAsIG1fdXNlZChmYWxzZSkKKyAg
ICAgICAgeworICAgICAgICAgICAgQVNTRVJUKG1fb2Zmc2V0ID09IG9mZnNldCk7CisgICAgICAg
IH0KKworICAgICAgICBpbnQgbV9vZmZzZXQgOiAzMTsKKyAgICAgICAgaW50IG1fdXNlZCA6IDE7
CisgICAgfTsKKworICAgIGJvb2wgaXNJbW1lZGlhdGUoaW50IGNvbnN0YW50KQorICAgIHsKKyAg
ICAgICAgcmV0dXJuICgoY29uc3RhbnQgPD0gMTI3KSAmJiAoY29uc3RhbnQgPj0gLTEyOCkpOwor
ICAgIH0KKworICAgIFJlZ2lzdGVySUQgY2xhaW1TY3JhdGNoKCkKKyAgICB7CisgICAgICAgIEFT
U0VSVCgobV9jbGFpbXNjcmF0Y2hSZWcgIT0gMHgzKSk7CisKKyAgICAgICAgaWYgKCEobV9jbGFp
bXNjcmF0Y2hSZWcgJiAweDEpKSB7CisgICAgICAgICAgICBtX2NsYWltc2NyYXRjaFJlZyA9ICht
X2NsYWltc2NyYXRjaFJlZyB8IDB4MSk7CisgICAgICAgICAgICByZXR1cm4gc2NyYXRjaFJlZzE7
CisgICAgICAgIH0KKworICAgICAgICBtX2NsYWltc2NyYXRjaFJlZyA9IChtX2NsYWltc2NyYXRj
aFJlZyB8IDB4Mik7CisgICAgICAgIHJldHVybiBzY3JhdGNoUmVnMjsKKyAgICB9CisKKyAgICB2
b2lkIHJlbGVhc2VTY3JhdGNoKFJlZ2lzdGVySUQgc2NyYXRjaFIpIAorICAgIHsKKyAgICAgICAg
aWYgKHNjcmF0Y2hSID09IHNjcmF0Y2hSZWcxKQorICAgICAgICAgICAgbV9jbGFpbXNjcmF0Y2hS
ZWcgPSAobV9jbGFpbXNjcmF0Y2hSZWcgJiAweDIpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBtX2NsYWltc2NyYXRjaFJlZyA9IChtX2NsYWltc2NyYXRjaFJlZyAmIDB4MSk7CisgICAgfQor
CisgICAgLy8gU3RhY2sgb3BlcmF0aW9ucworCisgICAgdm9pZCBwdXNoUmVnKFJlZ2lzdGVySUQg
cmVnKQorICAgIHsKKyAgICAgICAgaWYgKHJlZyA9PSBTSDRSZWdpc3RlcnM6OnByKSB7CisgICAg
ICAgICAgICBvbmVTaG9ydE9wKGdldE9wY29kZUdyb3VwMihTVFNMUFJfT1BDT0RFLCBTSDRSZWdp
c3RlcnM6OnNwKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBv
bmVTaG9ydE9wKGdldE9wY29kZUdyb3VwMShNT1ZMX1dSSVRFX1JOREVDX09QQ09ERSwgU0g0UmVn
aXN0ZXJzOjpzcCwgcmVnKSk7CisgICAgfQorCisgICAgdm9pZCBwb3BSZWcoUmVnaXN0ZXJJRCBy
ZWcpCisgICAgeworICAgICAgICBpZiAocmVnID09IFNINFJlZ2lzdGVyczo6cHIpIHsKKyAgICAg
ICAgICAgIG9uZVNob3J0T3AoZ2V0T3Bjb2RlR3JvdXAyKExEU0xQUl9PUENPREUsIFNINFJlZ2lz
dGVyczo6c3ApKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIG9u
ZVNob3J0T3AoZ2V0T3Bjb2RlR3JvdXAxKE1PVkxfUkVBRF9STUlOQ19PUENPREUsIHJlZywgU0g0
UmVnaXN0ZXJzOjpzcCkpOworICAgIH0KKworICAgIHZvaWQgbW92dChSZWdpc3RlcklEIGRzdCkK
KyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3VwMihNT1ZUX09QQ09E
RSwgZHN0KTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAgIC8vIEFyaXRo
bWV0aWMgb3BlcmF0aW9ucworCisgICAgdm9pZCBhZGRsUmVnUmVnKFJlZ2lzdGVySUQgc3JjLCBS
ZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdy
b3VwMShBRERfT1BDT0RFLCBkc3QsIHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAg
ICB9CisKKyAgICB2b2lkIGFkZGNsUmVnUmVnKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRz
dCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3VwMShBRERDX09Q
Q09ERSwgZHN0LCBzcmMpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAg
dm9pZCBhZGR2bFJlZ1JlZyhSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpCisgICAgewor
ICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDEoQUREVl9PUENPREUsIGRzdCwg
c3JjKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAgIHZvaWQgYWRkbElt
bThyKGludCBpbW04LCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIEFTU0VSVCgoaW1t
OCA8PSAxMjcpICYmIChpbW04ID49IC0xMjgpKTsKKworICAgICAgICB1aW50MTZfdCBvcGMgPSBn
ZXRPcGNvZGVHcm91cDMoQURESU1NX09QQ09ERSwgZHN0LCBpbW04KTsKKyAgICAgICAgb25lU2hv
cnRPcChvcGMpOworICAgIH0KKworICAgIHZvaWQgYW5kbFJlZ1JlZyhSZWdpc3RlcklEIHNyYywg
UmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVH
cm91cDEoQU5EX09QQ09ERSwgZHN0LCBzcmMpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7Cisg
ICAgfQorCisgICAgdm9pZCBhbmRsSW1tOHIoaW50IGltbTgsIFJlZ2lzdGVySUQgZHN0KQorICAg
IHsKKyAgICAgICAgQVNTRVJUKChpbW04IDw9IDI1NSkgJiYgKGltbTggPj0gMCkpOworICAgICAg
ICBBU1NFUlQoZHN0ID09IFNINFJlZ2lzdGVyczo6cjApOworCisgICAgICAgIHVpbnQxNl90IG9w
YyA9IGdldE9wY29kZUdyb3VwNShBTkRJTU1fT1BDT0RFLCBpbW04KTsKKyAgICAgICAgb25lU2hv
cnRPcChvcGMpOworICAgIH0KKworICAgIHZvaWQgZGl2MWxSZWdSZWcoUmVnaXN0ZXJJRCBzcmMs
IFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2Rl
R3JvdXAxKERJVjFfT1BDT0RFLCBkc3QsIHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsK
KyAgICB9CisKKyAgICB2b2lkIGRpdjBsUmVnUmVnKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklE
IGRzdCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3VwMShESVYw
X09QQ09ERSwgZHN0LCBzcmMpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisg
ICAgdm9pZCBub3RsUmVnKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7Cisg
ICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3VwMShOT1RfT1BDT0RFLCBkc3QsIHNy
Yyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lkIG9ybFJlZ1Jl
ZyhSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICB1aW50MTZf
dCBvcGMgPSBnZXRPcGNvZGVHcm91cDEoT1JfT1BDT0RFLCBkc3QsIHNyYyk7CisgICAgICAgIG9u
ZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lkIG9ybEltbThyKGludCBpbW04LCBSZWdp
c3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIEFTU0VSVCgoaW1tOCA8PSAyNTUpICYmIChpbW04
ID49IDApKTsKKyAgICAgICAgQVNTRVJUKGRzdCA9PSBTSDRSZWdpc3RlcnM6OnIwKTsKKworICAg
ICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDUoT1JJTU1fT1BDT0RFLCBpbW04KTsK
KyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAgIHZvaWQgc3VibFJlZ1JlZyhS
ZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICAgdWludDE2X3Qg
b3BjID0gZ2V0T3Bjb2RlR3JvdXAxKFNVQl9PUENPREUsIGRzdCwgc3JjKTsKKyAgICAgICAgIG9u
ZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lkIHN1YnZsUmVnUmVnKFJlZ2lzdGVySUQg
c3JjLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRP
cGNvZGVHcm91cDEoU1VCVl9PUENPREUsIGRzdCwgc3JjKTsKKyAgICAgICAgIG9uZVNob3J0T3Ao
b3BjKTsKKyAgICB9CisKKyAgICB2b2lkIHhvcmxSZWdSZWcoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lz
dGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXAx
KFhPUl9PUENPREUsIGRzdCwgc3JjKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0K
KworICAgIHZvaWQgeG9ybEltbThyKGludCBpbW04LCBSZWdpc3RlcklEIGRzdCkKKyAgICB7Cisg
ICAgICAgIEFTU0VSVCgoaW1tOCA8PSAyNTUpICYmIChpbW04ID49IDApKTsKKyAgICAgICAgQVNT
RVJUKGRzdCA9PSBTSDRSZWdpc3RlcnM6OnIwKTsKKworICAgICAgICB1aW50MTZfdCBvcGMgPSBn
ZXRPcGNvZGVHcm91cDUoWE9SSU1NX09QQ09ERSwgaW1tOCk7CisgICAgICAgIG9uZVNob3J0T3Ao
b3BjKTsKKyAgICB9CisKKyAgICB2b2lkIHNobGxJbW04cihpbnQgaW1tLCBSZWdpc3RlcklEIGRz
dCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoaW1tKSB7CisgICAgICAgIGNhc2UgMToKKyAgICAg
ICAgICAgIG9uZVNob3J0T3AoZ2V0T3Bjb2RlR3JvdXAyKFNITExfT1BDT0RFLCBkc3QpKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICBvbmVTaG9ydE9w
KGdldE9wY29kZUdyb3VwMihTSExMMl9PUENPREUsIGRzdCkpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgODoKKyAgICAgICAgICAgIG9uZVNob3J0T3AoZ2V0T3Bjb2RlR3JvdXAy
KFNITEw4X09QQ09ERSwgZHN0KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAx
NjoKKyAgICAgICAgICAgIG9uZVNob3J0T3AoZ2V0T3Bjb2RlR3JvdXAyKFNITEwxNl9PUENPREUs
IGRzdCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgbmVn
KFJlZ2lzdGVySUQgZHN0LCBSZWdpc3RlcklEIHNyYykKKyAgICB7CisgICAgICAgIHVpbnQxNl90
IG9wYyA9IGdldE9wY29kZUdyb3VwMShORUdfT1BDT0RFLCBkc3QsIHNyYyk7CisgICAgICAgIG9u
ZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lkIHNobGxSZWdSZWcoUmVnaXN0ZXJJRCBk
c3QsIFJlZ2lzdGVySUQgclNoaWZ0KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0
T3Bjb2RlR3JvdXAxKFNITERfT1BDT0RFLCBkc3QsIHJTaGlmdCk7CisgICAgICAgIG9uZVNob3J0
T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lkIHNobHJSZWdSZWcoUmVnaXN0ZXJJRCBkc3QsIFJl
Z2lzdGVySUQgclNoaWZ0KQorICAgIHsKKyAgICAgICAgbmVnKHJTaGlmdCwgclNoaWZ0KTsKKyAg
ICAgICAgc2hsbFJlZ1JlZyhkc3QsIHJTaGlmdCk7CisgICAgfQorCisgICAgdm9pZCBzaGFyUmVn
UmVnKFJlZ2lzdGVySUQgZHN0LCBSZWdpc3RlcklEIHJTaGlmdCkKKyAgICB7CisgICAgICAgIG5l
ZyhyU2hpZnQsIHJTaGlmdCk7CisgICAgICAgIHNoYVJlZ1JlZyhkc3QsIHJTaGlmdCk7CisgICAg
fQorCisgICAgdm9pZCBzaGFSZWdSZWcoUmVnaXN0ZXJJRCBkc3QsIFJlZ2lzdGVySUQgclNoaWZ0
KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXAxKFNIQURfT1BD
T0RFLCBkc3QsIHJTaGlmdCk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAg
ICB2b2lkIHNobHJJbW04cihpbnQgaW1tLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAg
IHN3aXRjaCAoaW1tKSB7CisgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgIG9uZVNob3J0T3Ao
Z2V0T3Bjb2RlR3JvdXAyKFNITFJfT1BDT0RFLCBkc3QpKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICBvbmVTaG9ydE9wKGdldE9wY29kZUdyb3VwMihT
SExSMl9PUENPREUsIGRzdCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgODoK
KyAgICAgICAgICAgIG9uZVNob3J0T3AoZ2V0T3Bjb2RlR3JvdXAyKFNITFI4X09QQ09ERSwgZHN0
KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAxNjoKKyAgICAgICAgICAgIG9u
ZVNob3J0T3AoZ2V0T3Bjb2RlR3JvdXAyKFNITFIxNl9PUENPREUsIGRzdCkpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgaW11bGxSZWdSZWcoUmVnaXN0ZXJJ
RCBzcmMsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0
T3Bjb2RlR3JvdXAxKE1VTExfT1BDT0RFLCBkc3QsIHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Ao
b3BjKTsKKyAgICB9CisKKyAgICB2b2lkIGRtdWxsUmVnUmVnKFJlZ2lzdGVySUQgc3JjLCBSZWdp
c3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3Vw
MShETVVMTF9MX09QQ09ERSwgZHN0LCBzcmMpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7Cisg
ICAgfQorCisgICAgdm9pZCBkbXVsc2xSZWdSZWcoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQg
ZHN0KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXAxKERNVUxT
TF9PUENPREUsIGRzdCwgc3JjKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKwor
ICAgIHZvaWQgc3RzbWFjbChSZWdpc3RlcklEIHJlZykKKyAgICB7CisgICAgICAgIHVpbnQxNl90
IG9wYyA9IGdldE9wY29kZUdyb3VwMihTVFNNQUNMX09QQ09ERSwgcmVnKTsKKyAgICAgICAgb25l
U2hvcnRPcChvcGMpOworICAgIH0KKworICAgIHZvaWQgc3RzbWFjaChSZWdpc3RlcklEIHJlZykK
KyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3VwMihTVFNNQUNIX09Q
Q09ERSwgcmVnKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAgIC8vIENv
bXBhcmlzb25zCisKKyAgICB2b2lkIGNtcGxSZWdSZWcoUmVnaXN0ZXJJRCBsZWZ0LCBSZWdpc3Rl
cklEIHJpZ2h0LCBDb25kaXRpb24gY29uZCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoY29uZCkg
eworICAgICAgICBjYXNlIE5FOgorICAgICAgICAgICAgb25lU2hvcnRPcChnZXRPcGNvZGVHcm91
cDEoQ01QRVFfT1BDT0RFLCByaWdodCwgbGVmdCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgR1Q6CisgICAgICAgICAgICBvbmVTaG9ydE9wKGdldE9wY29kZUdyb3VwMShDTVBH
VF9PUENPREUsIHJpZ2h0LCBsZWZ0KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBFUToKKyAgICAgICAgICAgIG9uZVNob3J0T3AoZ2V0T3Bjb2RlR3JvdXAxKENNUEVRX09QQ09E
RSwgcmlnaHQsIGxlZnQpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEdFOgor
ICAgICAgICAgICAgb25lU2hvcnRPcChnZXRPcGNvZGVHcm91cDEoQ01QR0VfT1BDT0RFLCByaWdo
dCwgbGVmdCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSFM6CisgICAgICAg
ICAgICBvbmVTaG9ydE9wKGdldE9wY29kZUdyb3VwMShDTVBIU19PUENPREUsIHJpZ2h0LCBsZWZ0
KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBISToKKyAgICAgICAgICAgIG9u
ZVNob3J0T3AoZ2V0T3Bjb2RlR3JvdXAxKENNUEhJX09QQ09ERSwgcmlnaHQsIGxlZnQpKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIExJOgorICAgICAgICAgICAgb25lU2hvcnRP
cChnZXRPcGNvZGVHcm91cDEoQ01QSElfT1BDT0RFLCBsZWZ0LCByaWdodCkpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgTFM6CisgICAgICAgICAgICBvbmVTaG9ydE9wKGdldE9w
Y29kZUdyb3VwMShDTVBIU19PUENPREUsIGxlZnQsIHJpZ2h0KSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBMRToKKyAgICAgICAgICAgIG9uZVNob3J0T3AoZ2V0T3Bjb2RlR3Jv
dXAxKENNUEdFX09QQ09ERSwgbGVmdCwgcmlnaHQpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIExUOgorICAgICAgICAgICAgb25lU2hvcnRPcChnZXRPcGNvZGVHcm91cDEoQ01Q
R1RfT1BDT0RFLCBsZWZ0LCByaWdodCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIHZvaWQgY21wcGwoUmVnaXN0ZXJJRCByZWcpCisgICAgeworICAgICAgICB1aW50
MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDIoQ01QUExfT1BDT0RFLCByZWcpOworICAgICAgICBv
bmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCBjbXBweihSZWdpc3RlcklEIHJlZykK
KyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3VwMihDTVBQWl9PUENP
REUsIHJlZyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lkIGNt
cEVxSW1tUjAoaW50IGltbSwgUmVnaXN0ZXJJRCBkc3QsIENvbmRpdGlvbiBjb25kKQorICAgIHsK
KyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXA1KENNUEVRSU1NX09QQ09ERSwg
aW1tKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAgIHZvaWQgdGVzdGxS
ZWdSZWcoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgdWlu
dDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXAxKFRTVF9PUENPREUsIGRzdCwgc3JjKTsKKyAgICAg
ICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAgIHZvaWQgdGVzdGxJbW04cihpbnQgaW1t
LCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIEFTU0VSVCgoZHN0ID09IFNINFJlZ2lz
dGVyczo6cjApICYmIChpbW0gPD0gMjU1KSAmJiAoaW1tID49IDApKTsKKworICAgICAgICB1aW50
MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDUoVFNUSU1NX09QQ09ERSwgaW1tKTsKKyAgICAgICAg
b25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAgIHZvaWQgbm9wKCkKKyAgICB7CisgICAgICAg
IG9uZVNob3J0T3AoTk9QX09QQ09ERSwgZmFsc2UpOworICAgIH0KKworICAgIHZvaWQgc2V0dCgp
CisgICAgeworICAgICAgICBvbmVTaG9ydE9wKFNFVFRfT1BDT0RFKTsKKyAgICB9CisKKyAgICB2
b2lkIGNscnQoKQorICAgIHsKKyAgICAgICAgb25lU2hvcnRPcChDTFJUX09QQ09ERSk7CisgICAg
fQorCisgICAgdm9pZCBmc2NoZygpCisgICAgeworICAgICAgICBvbmVTaG9ydE9wKEZTQ0hHX09Q
Q09ERSk7CisgICAgfQorCisgICAgdm9pZCBia3B0KCkKKyAgICB7CisgICAgICAgIG9uZVNob3J0
T3AoQlJLX09QQ09ERSwgZmFsc2UpOworICAgIH0KKworICAgIHZvaWQgYnJhbmNoKHVpbnQxNl90
IG9wYywgaW50IGxhYmVsKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChvcGMpIHsKKyAgICAgICAg
Y2FzZSBCVF9PUENPREU6CisgICAgICAgICAgICBBU1NFUlQoKGxhYmVsIDw9IDEyNykgJiYgKGxh
YmVsID49IC0xMjgpKTsKKyAgICAgICAgICAgIG9uZVNob3J0T3AoZ2V0T3Bjb2RlR3JvdXA1KEJU
X09QQ09ERSwgbGFiZWwpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEJSQV9P
UENPREU6CisgICAgICAgICAgICBBU1NFUlQoKGxhYmVsIDw9IDIwNDcpICYmIChsYWJlbCA+PSAt
MjA0OCkpOworICAgICAgICAgICAgb25lU2hvcnRPcChnZXRPcGNvZGVHcm91cDYoQlJBX09QQ09E
RSwgbGFiZWwpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEJGX09QQ09ERToK
KyAgICAgICAgICAgIEFTU0VSVCgobGFiZWwgPD0gMTI3KSAmJiAobGFiZWwgPj0gLTEyOCkpOwor
ICAgICAgICAgICAgb25lU2hvcnRPcChnZXRPcGNvZGVHcm91cDUoQkZfT1BDT0RFLCBsYWJlbCkp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgYnJhbmNoKHVp
bnQxNl90IG9wYywgUmVnaXN0ZXJJRCByZWcpCisgICAgeworICAgICAgICBzd2l0Y2ggKG9wYykg
eworICAgICAgICBjYXNlIEJSQUZfT1BDT0RFOgorICAgICAgICAgICAgb25lU2hvcnRPcChnZXRP
cGNvZGVHcm91cDIoQlJBRl9PUENPREUsIHJlZykpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgSk1QX09QQ09ERToKKyAgICAgICAgICAgIG9uZVNob3J0T3AoZ2V0T3Bjb2RlR3Jv
dXAyKEpNUF9PUENPREUsIHJlZykpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
SlNSX09QQ09ERToKKyAgICAgICAgICAgIG9uZVNob3J0T3AoZ2V0T3Bjb2RlR3JvdXAyKEpTUl9P
UENPREUsIHJlZykpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQlNSRl9PUENP
REU6CisgICAgICAgICAgICBvbmVTaG9ydE9wKGdldE9wY29kZUdyb3VwMihCU1JGX09QQ09ERSwg
cmVnKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBsZHNw
cihSZWdpc3RlcklEIHJlZykKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29k
ZUdyb3VwMihMRFNQUl9PUENPREUsIHJlZyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAg
ICB9CisKKyAgICB2b2lkIHN0c3ByKFJlZ2lzdGVySUQgcmVnKQorICAgIHsKKyAgICAgICAgdWlu
dDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXAyKFNUU1BSX09QQ09ERSwgcmVnKTsKKyAgICAgICAg
b25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAgIHZvaWQgZXh0dXcoUmVnaXN0ZXJJRCBzcmMs
IFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2Rl
R3JvdXAxKEVYVFVXX09QQ09ERSwgZHN0LCBzcmMpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7
CisgICAgfQorCisgICAgLy8gZmxvYXQgb3BlcmF0aW9ucworCisgICAgdm9pZCBsZHNybWZwdWwo
UmVnaXN0ZXJJRCBzcmMpCisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVH
cm91cDIoTERTX1JNX0ZQVUxfT1BDT0RFLCBzcmMpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7
CisgICAgfQorCisgICAgdm9pZCBmbmVnKEZQUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAg
ICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDIoRk5FR19PUENPREUsIGRzdCk7CisgICAg
ICAgIG9uZVNob3J0T3Aob3BjLCB0cnVlLCBmYWxzZSk7CisgICAgfQorCisgICAgdm9pZCBmc3Fy
dChGUFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bj
b2RlR3JvdXAyKEZTUVJUX09QQ09ERSwgZHN0KTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMsIHRy
dWUsIGZhbHNlKTsKKyAgICB9CisKKyAgICB2b2lkIHN0c2ZwdWxSZWcoUmVnaXN0ZXJJRCBzcmMp
CisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDIoU1RTX0ZQVUxf
Uk5fT1BDT0RFLCBzcmMpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAg
dm9pZCBmbG9hdGZwdWxmcm4oUmVnaXN0ZXJJRCBzcmMpCisgICAgeworICAgICAgICB1aW50MTZf
dCBvcGMgPSBnZXRPcGNvZGVHcm91cDIoRkxPQVRfT1BDT0RFLCBzcmMpOworICAgICAgICBvbmVT
aG9ydE9wKG9wYywgdHJ1ZSwgZmFsc2UpOworICAgIH0KKworICAgIHZvaWQgZm11bGwoRlBSZWdp
c3RlcklEIHNyYywgRlBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9w
YyA9IGdldE9wY29kZUdyb3VwMShGTVVMX09QQ09ERSwgZHN0LCBzcmMpOworICAgICAgICBvbmVT
aG9ydE9wKG9wYywgdHJ1ZSwgZmFsc2UpOworICAgIH0KKworICAgIHZvaWQgZm1vdnNSZWFkcm0o
UmVnaXN0ZXJJRCBzcmMsIEZQUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICB1aW50MTZf
dCBvcGMgPSBnZXRPcGNvZGVHcm91cDEoRk1PVlNfUkVBRF9STV9PUENPREUsIGRzdCwgc3JjKTsK
KyAgICAgICAgb25lU2hvcnRPcChvcGMsIHRydWUsIGZhbHNlKTsKKyAgICB9CisKKyAgICB2b2lk
IGZtb3ZzV3JpdGVybShGUFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7Cisg
ICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3VwMShGTU9WU19XUklURV9STl9PUENP
REUsIGRzdCwgc3JjKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMsIHRydWUsIGZhbHNlKTsKKyAg
ICB9CisKKyAgICB2b2lkIGZtb3ZzV3JpdGVyMHIoRlBSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJ
RCBkc3QpCisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDEoRk1P
VlNfV1JJVEVfUjBSTl9PUENPREUsIGRzdCwgc3JjKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMs
IHRydWUsIGZhbHNlKTsKKyAgICB9CisKKyAgICB2b2lkIGZtb3ZzUmVhZHIwcihSZWdpc3RlcklE
IHNyYywgRlBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdl
dE9wY29kZUdyb3VwMShGTU9WU19SRUFEX1IwUk1fT1BDT0RFLCBkc3QsIHNyYyk7CisgICAgICAg
IG9uZVNob3J0T3Aob3BjLCB0cnVlLCBmYWxzZSk7CisgICAgfQorCisgICAgdm9pZCBmbW92c1Jl
YWRybWluYyhSZWdpc3RlcklEIHNyYywgRlBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAg
IHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3VwMShGTU9WU19SRUFEX1JNX0lOQ19PUENPREUs
IGRzdCwgc3JjKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMsIHRydWUsIGZhbHNlKTsKKyAgICB9
CisKKyAgICB2b2lkIGZtb3ZzV3JpdGVybmRlYyhGUFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklE
IGRzdCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3VwMShGTU9W
U19XUklURV9STl9ERUNfT1BDT0RFLCBkc3QsIHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Aob3Bj
LCB0cnVlLCBmYWxzZSk7CisgICAgfQorCisgICAgdm9pZCBmdHJjUmVnZnB1bChGUFJlZ2lzdGVy
SUQgc3JjKQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXAyKEZU
UkNfT1BDT0RFLCBzcmMpOworICAgICAgICBvbmVTaG9ydE9wKG9wYywgdHJ1ZSwgZmFsc2UpOwor
ICAgIH0KKworICAgIHZvaWQgZmxkc2ZwdWwoUmVnaXN0ZXJJRCBzcmMpCisgICAgeworICAgICAg
ICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDIoRkxEU19GUk1fRlBVTF9PUENPREUsIHNy
Yyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lkIGZzdHNmcHVs
KFJlZ2lzdGVySUQgc3JjKQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2Rl
R3JvdXAyKEZTVFNfRlBVTF9GUk5fT1BDT0RFLCBzcmMpOworICAgICAgICBvbmVTaG9ydE9wKG9w
Yyk7CisgICAgfQorCisgICAgdm9pZCBsZHNmcHNjcihSZWdpc3RlcklEIHJlZykKKyAgICB7Cisg
ICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3VwMihMRFNGUFNDUl9PUENPREUsIHJl
Zyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lkIHN0c2Zwc2Ny
KFJlZ2lzdGVySUQgcmVnKQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2Rl
R3JvdXAyKFNUU0ZQU0NSX09QQ09ERSwgcmVnKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOwor
ICAgIH0KKworICAgIC8vIGRvdWJsZSBvcGVyYXRpb25zCisKKyAgICB2b2lkIGRjbnZkcyhGUFJl
Z2lzdGVySUQgc3JjKQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3Jv
dXA3KEZDTlZEU19EUk1fRlBVTF9PUENPREUsIHNyYyA+PiAxKTsKKyAgICAgICAgb25lU2hvcnRP
cChvcGMpOworICAgIH0KKworICAgIHZvaWQgZGNtcHBlcShGUFJlZ2lzdGVySUQgc3JjLCBGUFJl
Z2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3Jv
dXA4KEZDTVBFUV9PUENPREUsIGRzdCA+PiAxLCBzcmMgPj4gMSk7CisgICAgICAgIG9uZVNob3J0
T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lkIGRjbXBwZ3QoRlBSZWdpc3RlcklEIHNyYywgRlBS
ZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdy
b3VwOChGQ01QR1RfT1BDT0RFLCBkc3QgPj4gMSwgc3JjID4+IDEpOworICAgICAgICBvbmVTaG9y
dE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCBkbXVsUmVnUmVnKEZQUmVnaXN0ZXJJRCBzcmMs
IEZQUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNv
ZGVHcm91cDgoRk1VTF9PUENPREUsIGRzdCA+PiAxLCBzcmMgPj4gMSk7CisgICAgICAgIG9uZVNo
b3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lkIGRzdWJSZWdSZWcoRlBSZWdpc3RlcklEIHNy
YywgRlBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9w
Y29kZUdyb3VwOChGU1VCX09QQ09ERSwgZHN0ID4+IDEsIHNyYyA+PiAxKTsKKyAgICAgICAgb25l
U2hvcnRPcChvcGMpOworICAgIH0KKworICAgIHZvaWQgZGFkZFJlZ1JlZyhGUFJlZ2lzdGVySUQg
c3JjLCBGUFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0
T3Bjb2RlR3JvdXA4KEZBRERfT1BDT0RFLCBkc3QgPj4gMSwgc3JjID4+IDEpOworICAgICAgICBv
bmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCBkbW92UmVnUmVnKEZQUmVnaXN0ZXJJ
RCBzcmMsIEZQUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBn
ZXRPcGNvZGVHcm91cDgoRk1PVl9PUENPREUsIGRzdCA+PiAxLCBzcmMgPj4gMSk7CisgICAgICAg
IG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lkIGRkaXZSZWdSZWcoRlBSZWdpc3Rl
cklEIHNyYywgRlBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9
IGdldE9wY29kZUdyb3VwOChGRElWX09QQ09ERSwgZHN0ID4+IDEsIHNyYyA+PiAxKTsKKyAgICAg
ICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAgIHZvaWQgZHNxcnQoRlBSZWdpc3RlcklE
IGRzdCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3VwNyhGU1FS
VF9PUENPREUsIGRzdCA+PiAxKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKwor
ICAgIHZvaWQgZG5lZyhGUFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qg
b3BjID0gZ2V0T3Bjb2RlR3JvdXA3KEZORUdfT1BDT0RFLCBkc3QgPj4gMSk7CisgICAgICAgIG9u
ZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lkIGZtb3ZSZWFkcm0oUmVnaXN0ZXJJRCBz
cmMsIEZQUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRP
cGNvZGVHcm91cDEwKEZNT1ZTX1JFQURfUk1fT1BDT0RFLCBkc3QgPj4gMSwgc3JjKTsKKyAgICAg
ICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAgIHZvaWQgZm1vdldyaXRlcm0oRlBSZWdp
c3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMg
PSBnZXRPcGNvZGVHcm91cDkoRk1PVlNfV1JJVEVfUk5fT1BDT0RFLCBkc3QsIHNyYyA+PiAxKTsK
KyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAgIHZvaWQgZm1vdldyaXRlcjBy
KEZQUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgdWludDE2
X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXA5KEZNT1ZTX1dSSVRFX1IwUk5fT1BDT0RFLCBkc3QsIHNy
YyA+PiAxKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAgIHZvaWQgZm1v
dlJlYWRyMHIoUmVnaXN0ZXJJRCBzcmMsIEZQUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAg
ICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDEwKEZNT1ZTX1JFQURfUjBSTV9PUENPREUs
IGRzdCA+PiAxLCBzcmMpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAg
dm9pZCBmbW92UmVhZHJtaW5jKFJlZ2lzdGVySUQgc3JjLCBGUFJlZ2lzdGVySUQgZHN0KQorICAg
IHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXAxMChGTU9WU19SRUFEX1JN
X0lOQ19PUENPREUsIGRzdCA+PiAxLCBzcmMpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7Cisg
ICAgfQorCisgICAgdm9pZCBmbW92V3JpdGVybmRlYyhGUFJlZ2lzdGVySUQgc3JjLCBSZWdpc3Rl
cklEIGRzdCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3VwOShG
TU9WU19XUklURV9STl9ERUNfT1BDT0RFLCBkc3QsIHNyYyA+PiAxKTsKKyAgICAgICAgb25lU2hv
cnRPcChvcGMpOworICAgIH0KKworICAgIHZvaWQgZmxvYXRmcHVsRHJlZyhGUFJlZ2lzdGVySUQg
c3JjKQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXA3KEZMT0FU
X09QQ09ERSwgc3JjID4+IDEpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisg
ICAgdm9pZCBmdHJjZHJtZnB1bChGUFJlZ2lzdGVySUQgc3JjKQorICAgIHsKKyAgICAgICAgdWlu
dDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXA3KEZUUkNfT1BDT0RFLCBzcmMgPj4gMSk7CisgICAg
ICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICAvLyBWYXJpb3VzIG1vdmUgb3BzCisg
ICAgCisgICAgdm9pZCBtb3ZJbW04KGludCBpbW04LCBSZWdpc3RlcklEIGRzdCkKKyAgICB7Cisg
ICAgICAgIEFTU0VSVCgoaW1tOCA8PSAxMjcpICYmIChpbW04ID49IC0xMjgpKTsKKworICAgICAg
ICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDMoTU9WSU1NX09QQ09ERSwgZHN0LCBpbW04
KTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAgIHZvaWQgbW92bFJlZ1Jl
ZyhSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICB1aW50MTZf
dCBvcGMgPSBnZXRPcGNvZGVHcm91cDEoTU9WX09QQ09ERSwgZHN0LCBzcmMpOworICAgICAgICBv
bmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCBtb3Z3UmVnTWVtKFJlZ2lzdGVySUQg
c3JjLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9w
Y29kZUdyb3VwMShNT1ZXX1dSSVRFX1JOX09QQ09ERSwgZHN0LCBzcmMpOworICAgICAgICBvbmVT
aG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCBtb3Z3TWVtUmVnKFJlZ2lzdGVySUQgc3Jj
LCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29k
ZUdyb3VwMShNT1ZXX1JFQURfUk1fT1BDT0RFLCBkc3QsIHNyYyk7CisgICAgICAgIG9uZVNob3J0
T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lkIG1vdndQQ1JlZyhpbnQgb2Zmc2V0LCBSZWdpc3Rl
cklEIGJhc2UsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKGJhc2UgPT0g
U0g0UmVnaXN0ZXJzOjpwYyk7CisgICAgICAgIEFTU0VSVCgob2Zmc2V0IDw9IDI1NSkgJiYgKG9m
ZnNldCA+PSAwKSk7CisKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXAzKE1P
VldfUkVBRF9PRkZQQ19PUENPREUsIGRzdCwgb2Zmc2V0KTsKKyAgICAgICAgb25lU2hvcnRPcChv
cGMpOworICAgIH0KKworICAgIHZvaWQgbW92d01lbVJlZyhpbnQgb2Zmc2V0LCBSZWdpc3RlcklE
IGJhc2UsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKGRzdCA9PSBTSDRS
ZWdpc3RlcnM6OnIwKTsKKworICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDEx
KE1PVldfUkVBRF9PRkZSTV9PUENPREUsIGJhc2UsIG9mZnNldCk7CisgICAgICAgIG9uZVNob3J0
T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lkIG1vdndSMG1yKFJlZ2lzdGVySUQgc3JjLCBSZWdp
c3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3Vw
MShNT1ZXX1JFQURfUjBSTV9PUENPREUsIGRzdCwgc3JjKTsKKyAgICAgICAgb25lU2hvcnRPcChv
cGMpOworICAgIH0KKworICAgIHZvaWQgbW92bFJlZ01lbShSZWdpc3RlcklEIHNyYywgaW50IG9m
ZnNldCwgUmVnaXN0ZXJJRCBiYXNlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKChvZmZzZXQgPD0g
MTUpICYmIChvZmZzZXQgPj0gMCkpOworCisgICAgICAgIGlmICghb2Zmc2V0KSB7CisgICAgICAg
ICAgICBvbmVTaG9ydE9wKGdldE9wY29kZUdyb3VwMShNT1ZMX1dSSVRFX1JOX09QQ09ERSwgYmFz
ZSwgc3JjKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBvbmVT
aG9ydE9wKGdldE9wY29kZUdyb3VwNChNT1ZMX1dSSVRFX09GRlJOX09QQ09ERSwgYmFzZSwgc3Jj
LCBvZmZzZXQpKTsKKyAgICB9CisKKyAgICB2b2lkIG1vdmxSZWdNZW0oUmVnaXN0ZXJJRCBzcmMs
IFJlZ2lzdGVySUQgYmFzZSkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29k
ZUdyb3VwMShNT1ZMX1dSSVRFX1JOX09QQ09ERSwgYmFzZSwgc3JjKTsKKyAgICAgICAgb25lU2hv
cnRPcChvcGMpOworICAgIH0KKworICAgIHZvaWQgbW92bE1lbVJlZyhpbnQgb2Zmc2V0LCBSZWdp
c3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgaWYgKGJhc2UgPT0g
U0g0UmVnaXN0ZXJzOjpwYykgeworICAgICAgICAgICAgQVNTRVJUKChvZmZzZXQgPD0gMjU1KSAm
JiAob2Zmc2V0ID49IDApKTsKKyAgICAgICAgICAgIG9uZVNob3J0T3AoZ2V0T3Bjb2RlR3JvdXAz
KE1PVkxfUkVBRF9PRkZQQ19PUENPREUsIGRzdCwgb2Zmc2V0KSk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKworICAgICAgICBBU1NFUlQoKG9mZnNldCA8PSAxNSkgJiYgKG9mZnNl
dCA+PSAwKSk7CisgICAgICAgIGlmICghb2Zmc2V0KSB7CisgICAgICAgICAgICBvbmVTaG9ydE9w
KGdldE9wY29kZUdyb3VwMShNT1ZMX1JFQURfUk1fT1BDT0RFLCBkc3QsIGJhc2UpKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIG9uZVNob3J0T3AoZ2V0T3Bjb2Rl
R3JvdXA0KE1PVkxfUkVBRF9PRkZSTV9PUENPREUsIGRzdCwgYmFzZSwgb2Zmc2V0KSk7CisgICAg
fQorCisgICAgdm9pZCBtb3ZiTWVtUmVnKGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVn
aXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICBBU1NFUlQoZHN0ID09IFNINFJlZ2lzdGVyczo6
cjApOworCisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3VwMTEoTU9WQl9SRUFE
X09GRlJNX09QQ09ERSwgYmFzZSwgb2Zmc2V0KTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOwor
ICAgIH0KKworICAgIHZvaWQgbW92YlIwbXIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0
KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXAxKE1PVkJfUkVB
RF9SMFJNX09QQ09ERSwgZHN0LCBzcmMpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAg
fQorCisgICAgdm9pZCBtb3ZiTWVtUmVnKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCkK
KyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3VwMShNT1ZCX1JFQURf
Uk1fT1BDT0RFLCBkc3QsIHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisK
KyAgICB2b2lkIG1vdmxNZW1SZWcoUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGRzdCkKKyAg
ICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3VwMShNT1ZMX1JFQURfUk1f
T1BDT0RFLCBkc3QsIGJhc2UpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisg
ICAgdm9pZCBtb3ZsTWVtUmVnSW4oUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGRzdCkKKyAg
ICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3VwMShNT1ZMX1JFQURfUk1J
TkNfT1BDT0RFLCBkc3QsIGJhc2UpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQor
CisgICAgdm9pZCBtb3ZsUjBtcihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpCisgICAg
eworICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDEoTU9WTF9SRUFEX1IwUk1f
T1BDT0RFLCBkc3QsIHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAg
ICB2b2lkIG1vdmxSZWdNZW1yMChSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpCisgICAg
eworICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDEoTU9WTF9XUklURV9SMFJO
X09QQ09ERSwgZHN0LCBzcmMpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisg
ICAgdm9pZCBtb3ZsSW1tOHIoaW50IGltbTgsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKChpbW04IDw9IDEyNykgJiYgKGltbTggPj0gLTEyOCkpOworCisgICAgICAgIHVp
bnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3VwMyhNT1ZJTU1fT1BDT0RFLCBkc3QsIGltbTgpOwor
ICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCBsb2FkQ29uc3RhbnQo
dWludDMyX3QgY29uc3RhbnQsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgaWYgKCgo
aW50KWNvbnN0YW50IDw9IDB4N2YpICYmICgoaW50KWNvbnN0YW50ID49IC0weDgwKSkgeworICAg
ICAgICAgICAgbW92SW1tOChjb25zdGFudCwgZHN0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorCisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3VwMyhNT1ZJTU1f
T1BDT0RFLCBkc3QsIDApOworCisgICAgICAgIG1fYnVmZmVyLmVuc3VyZVNwYWNlKG1heEluc3Ry
dWN0aW9uU2l6ZSwgc2l6ZW9mKHVpbnQzMl90KSk7CisgICAgICAgIHByaW50SW5zdHIoZ2V0T3Bj
b2RlR3JvdXAzKE1PVklNTV9PUENPREUsIGRzdCwgY29uc3RhbnQpLCBtX2J1ZmZlci51bmNoZWNr
ZWRTaXplKCkpOworICAgICAgICBtX2J1ZmZlci5wdXRTaG9ydFdpdGhDb25zdGFudEludChvcGMs
IGNvbnN0YW50LCB0cnVlKTsKKyAgICB9CisKKyAgICB2b2lkIGxvYWRDb25zdGFudFVuUmV1c2Fi
bGUodWludDMyX3QgY29uc3RhbnQsIFJlZ2lzdGVySUQgZHN0LCBib29sIGVuc3VyZVNwYWNlID0g
ZmFsc2UpCisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDMoTU9W
SU1NX09QQ09ERSwgZHN0LCAwKTsKKworICAgICAgICBpZiAoZW5zdXJlU3BhY2UpCisgICAgICAg
ICAgICBtX2J1ZmZlci5lbnN1cmVTcGFjZShtYXhJbnN0cnVjdGlvblNpemUsIHNpemVvZih1aW50
MzJfdCkpOworCisgICAgICAgIHByaW50SW5zdHIoZ2V0T3Bjb2RlR3JvdXAzKE1PVklNTV9PUENP
REUsIGRzdCwgY29uc3RhbnQpLCBtX2J1ZmZlci51bmNoZWNrZWRTaXplKCkpOworICAgICAgICBt
X2J1ZmZlci5wdXRTaG9ydFdpdGhDb25zdGFudEludChvcGMsIGNvbnN0YW50KTsKKyAgICB9CisK
KyAgICAvLyBGbG93IGNvbnRyb2wKKworICAgIEptcFNyYyBjYWxsKCkKKyAgICB7CisgICAgICAg
IFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIG1fYnVmZmVyLmVuc3Vy
ZVNwYWNlKG1heEluc3RydWN0aW9uU2l6ZSArIDQsIHNpemVvZih1aW50MzJfdCkpOworICAgICAg
ICBsb2FkQ29uc3RhbnRVblJldXNhYmxlKDB4MCwgc2NyKTsKKyAgICAgICAgYnJhbmNoKEpTUl9P
UENPREUsIHNjcik7CisgICAgICAgIG5vcCgpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3Ip
OworICAgICAgICByZXR1cm4gSm1wU3JjKG1fYnVmZmVyLnVuY2hlY2tlZFNpemUoKSk7CisgICAg
fQorCisgICAgSm1wU3JjIGNhbGwoUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICBtX2J1
ZmZlci5lbnN1cmVTcGFjZShtYXhJbnN0cnVjdGlvblNpemUgKyAyKTsKKyAgICAgICAgYnJhbmNo
KEpTUl9PUENPREUsIGRzdCk7CisgICAgICAgIG5vcCgpOworICAgICAgICByZXR1cm4gSm1wU3Jj
KG1fYnVmZmVyLnVuY2hlY2tlZFNpemUoKSk7CisgICAgfQorCisgICAgSm1wU3JjIGptcCgpCisg
ICAgeworICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBt
X2J1ZmZlci5lbnN1cmVTcGFjZShtYXhJbnN0cnVjdGlvblNpemUgKyA0LCBzaXplb2YodWludDMy
X3QpKTsKKyAgICAgICAgaW50IG1fc2l6ZSA9IG1fYnVmZmVyLnVuY2hlY2tlZFNpemUoKTsKKyAg
ICAgICAgbG9hZENvbnN0YW50VW5SZXVzYWJsZSgweDAsIHNjcik7CisgICAgICAgIGJyYW5jaChC
UkFGX09QQ09ERSwgc2NyKTsKKyAgICAgICAgbm9wKCk7CisgICAgICAgIHJlbGVhc2VTY3JhdGNo
KHNjcik7CisgICAgICAgIHJldHVybiBKbXBTcmMobV9zaXplKTsKKyAgICB9CisKKyAgICBKbXBT
cmMgam1wKFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgam1wUmVnKGRzdCk7CisgICAg
ICAgIHJldHVybiBKbXBTcmMobV9idWZmZXIudW5jaGVja2VkU2l6ZSgpKTsKKyAgICB9CisKKyAg
ICB2b2lkIGptcFJlZyhSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIG1fYnVmZmVyLmVu
c3VyZVNwYWNlKG1heEluc3RydWN0aW9uU2l6ZSArIDIpOworICAgICAgICBicmFuY2goSk1QX09Q
Q09ERSwgZHN0KTsKKyAgICAgICAgbm9wKCk7CisgICAgfQorCisgICAgSm1wU3JjIGpuZSgpCisg
ICAgeworICAgICAgICBpbnQgbV9zaXplID0gbV9idWZmZXIudW5jaGVja2VkU2l6ZSgpOworICAg
ICAgICBicmFuY2goQkZfT1BDT0RFLCAwKTsKKyAgICAgICAgcmV0dXJuIEptcFNyYyhtX3NpemUp
OworICAgIH0KKworICAgIEptcFNyYyBqZSgpCisgICAgeworICAgICAgICBpbnQgbV9zaXplID0g
bV9idWZmZXIudW5jaGVja2VkU2l6ZSgpOworICAgICAgICBicmFuY2goQlRfT1BDT0RFLCAwKTsK
KyAgICAgICAgcmV0dXJuIEptcFNyYyhtX3NpemUpOworICAgIH0KKworICAgIHZvaWQgcmV0KCkK
KyAgICB7CisgICAgICAgIG1fYnVmZmVyLmVuc3VyZVNwYWNlKG1heEluc3RydWN0aW9uU2l6ZSAr
IDIpOworICAgICAgICBvbmVTaG9ydE9wKFJUU19PUENPREUsIGZhbHNlKTsKKyAgICB9CisKKyAg
ICBKbXBEc3QgbGFiZWwoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEptcERzdChtX2J1ZmZlci5z
aXplKCkpOworICAgIH0KKworICAgIGludCBzaXplT2ZDb25zdGFudFBvb2woKQorICAgIHsKKyAg
ICAgICAgIHJldHVybiBtX2J1ZmZlci5zaXplT2ZDb25zdGFudFBvb2woKTsKKyAgICB9CisKKyAg
ICBKbXBEc3QgYWxpZ24oaW50IGFsaWdubWVudCkKKyAgICB7CisgICAgICAgIG1fYnVmZmVyLmVu
c3VyZVNwYWNlKG1heEluc3RydWN0aW9uU2l6ZSArIDIpOworICAgICAgICB3aGlsZSAoIW1fYnVm
ZmVyLmlzQWxpZ25lZChhbGlnbm1lbnQpKSB7CisgICAgICAgICAgICBub3AoKTsKKyAgICAgICAg
ICAgIG1fYnVmZmVyLmVuc3VyZVNwYWNlKG1heEluc3RydWN0aW9uU2l6ZSArIDIpOworICAgICAg
ICB9CisgICAgICAgIHJldHVybiBsYWJlbCgpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGNo
YW5nZVBDcmVsYXRpdmVBZGRyZXNzKGludCBvZmZzZXQsIHVpbnQxNl90KiBpbnN0cnVjdGlvblB0
ciwgdWludDMyX3QgbmV3QWRkcmVzcykKKyAgICB7CisgICAgICAgIHVpbnQzMl90IGFkZHJlc3Mg
PSAob2Zmc2V0IDw8IDIpICsgKChyZWludGVycHJldF9jYXN0PHVpbnQzMl90PihpbnN0cnVjdGlv
blB0cikgKyA0KSAmKH4weDMpKTsKKyAgICAgICAgKnJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3Qq
PihhZGRyZXNzKSA9IG5ld0FkZHJlc3M7CisgICAgfQorCisgICAgc3RhdGljIHVpbnQxNl90KiBn
ZXRJbnN0cnVjdGlvblB0cih2b2lkKiBjb2RlLCBpbnQgb2Zmc2V0KQorICAgIHsKKyAgICAgICAg
cmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDE2X3QqPiAocmVpbnRlcnByZXRfY2FzdDx1aW50
MzJfdD4oY29kZSkgKyBvZmZzZXQpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGxpbmtKdW1w
KHZvaWQqIGNvZGUsIEptcFNyYyBmcm9tLCB2b2lkKiB0bykKKyAgICB7CisgICAgICAgIEFTU0VS
VChmcm9tLm1fb2Zmc2V0ICE9IC0xKTsKKworICAgICAgICB1aW50MTZfdCogaW5zdHJ1Y3Rpb25Q
dHIgPSBnZXRJbnN0cnVjdGlvblB0cihjb2RlLCBmcm9tLm1fb2Zmc2V0KTsKKyAgICAgICAgdWlu
dDE2X3QgaW5zdHJ1Y3Rpb24gPSAqaW5zdHJ1Y3Rpb25QdHI7CisgICAgICAgIGludCBvZmZzZXRC
aXRzID0gKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3Q+KHRvKSAtIHJlaW50ZXJwcmV0X2Nhc3Q8
dWludDMyX3Q+KGNvZGUpKSAtIGZyb20ubV9vZmZzZXQ7CisKKyAgICAgICAgaWYgKCgoaW5zdHJ1
Y3Rpb24gJiAweGZmMDApID09IEJUX09QQ09ERSkgfHwgKChpbnN0cnVjdGlvbiAmIDB4ZmYwMCkg
PT0gQkZfT1BDT0RFKSkgeworICAgICAgICAgICAgLyogQlQgbGFiZWwgPT0+IEJGIDIKKyAgICAg
ICAgICAgICAgIG5vcCAgICAgICAgICBMRFIgcmVnCisgICAgICAgICAgICAgICBub3AgICAgICAg
ICAgYnJhZiBAcmVnCisgICAgICAgICAgICAgICBub3AgICAgICAgICAgbm9wCisgICAgICAgICAg
ICAqLworICAgICAgICAgICAgb2Zmc2V0Qml0cyAtPSA4OworICAgICAgICAgICAgaW5zdHJ1Y3Rp
b24gXj0gMHgwMjAyOworICAgICAgICAgICAgKmluc3RydWN0aW9uUHRyKysgPSBpbnN0cnVjdGlv
bjsKKyAgICAgICAgICAgIGNoYW5nZVBDcmVsYXRpdmVBZGRyZXNzKCgqaW5zdHJ1Y3Rpb25QdHIg
JiAweGZmKSwgaW5zdHJ1Y3Rpb25QdHIsIG9mZnNldEJpdHMpOworICAgICAgICAgICAgaW5zdHJ1
Y3Rpb24gPSAoQlJBRl9PUENPREUgfCAoKmluc3RydWN0aW9uUHRyKysgJiAweGYwMCkpOworICAg
ICAgICAgICAgKmluc3RydWN0aW9uUHRyID0gaW5zdHJ1Y3Rpb247CisgICAgICAgICAgICBwcmlu
dEJsb2NrSW5zdHIoaW5zdHJ1Y3Rpb25QdHIgLSAyLCBmcm9tLm1fb2Zmc2V0LCAzKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgIH0KKworICAgICAgICAgLyogTU9WICNpbW0sIHJlZyA9
PiBMRFIgcmVnCisgICAgICAgICAgICBicmFmIEByZWcgICAgICAgIGJyYWYgQHJlZworICAgICAg
ICAgICAgbm9wICAgICAgICAgICAgICBub3AKKyAgICAgICAgICovCisgICAgICAgIEFTU0VSVCgo
KihpbnN0cnVjdGlvblB0ciArIDEpICYgQlJBRl9PUENPREUpID09IEJSQUZfT1BDT0RFKTsKKwor
ICAgICAgICBvZmZzZXRCaXRzIC09IDQ7CisgICAgICAgIGlmIChvZmZzZXRCaXRzID49IC00MDk2
ICYmIG9mZnNldEJpdHMgPD0gNDA5NCkgeworICAgICAgICAgICAgKmluc3RydWN0aW9uUHRyID0g
Z2V0T3Bjb2RlR3JvdXA2KEJSQV9PUENPREUsIG9mZnNldEJpdHMgPj4gMSk7CisgICAgICAgICAg
ICAqKCsraW5zdHJ1Y3Rpb25QdHIpID0gTk9QX09QQ09ERTsKKyAgICAgICAgICAgIHByaW50Qmxv
Y2tJbnN0cihpbnN0cnVjdGlvblB0ciAtIDEsIGZyb20ubV9vZmZzZXQsIDIpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgY2hhbmdlUENyZWxhdGl2ZUFkZHJlc3Mo
KCppbnN0cnVjdGlvblB0ciAmIDB4ZmYpLCBpbnN0cnVjdGlvblB0ciwgb2Zmc2V0Qml0cyAtIDIp
OworICAgICAgICBwcmludEluc3RyKCppbnN0cnVjdGlvblB0ciwgZnJvbS5tX29mZnNldCArIDIp
OworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGxpbmtDYWxsKHZvaWQqIGNvZGUsIEptcFNyYyBm
cm9tLCB2b2lkKiB0bykKKyAgICB7CisgICAgICAgIHVpbnQxNl90KiBpbnN0cnVjdGlvblB0ciA9
IGdldEluc3RydWN0aW9uUHRyKGNvZGUsIGZyb20ubV9vZmZzZXQpOworICAgICAgICBpbnN0cnVj
dGlvblB0ciAtPSAzOworICAgICAgICBjaGFuZ2VQQ3JlbGF0aXZlQWRkcmVzcygoKmluc3RydWN0
aW9uUHRyICYgMHhmZiksIGluc3RydWN0aW9uUHRyLCByZWludGVycHJldF9jYXN0PHVpbnQzMl90
Pih0bykpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGxpbmtQb2ludGVyKHZvaWQqIGNvZGUs
IEptcERzdCB3aGVyZSwgdm9pZCogdmFsdWUpCisgICAgeworICAgICAgICB1aW50MTZfdCogaW5z
dHJ1Y3Rpb25QdHIgPSBnZXRJbnN0cnVjdGlvblB0cihjb2RlLCB3aGVyZS5tX29mZnNldCk7Cisg
ICAgICAgIGNoYW5nZVBDcmVsYXRpdmVBZGRyZXNzKCgqaW5zdHJ1Y3Rpb25QdHIgJiAweGZmKSwg
aW5zdHJ1Y3Rpb25QdHIsIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3Q+KHZhbHVlKSk7CisgICAg
fQorCisgICAgc3RhdGljIHVuc2lnbmVkIGdldENhbGxSZXR1cm5PZmZzZXQoSm1wU3JjIGNhbGwp
CisgICAgeworICAgICAgICBBU1NFUlQoY2FsbC5tX29mZnNldCA+PSAwKTsKKyAgICAgICAgcmV0
dXJuIGNhbGwubV9vZmZzZXQ7CisgICAgfQorCisgICAgc3RhdGljIHVpbnQzMl90KiBnZXRMZHJJ
bW1BZGRyZXNzT25Qb29sKFNINFdvcmQqIGluc24sIHVpbnQzMl90KiBjb25zdFBvb2wpCisgICAg
eworICAgICAgICByZXR1cm4gKGNvbnN0UG9vbCArICgqaW5zbiAmIDB4ZmYpKTsKKyAgICB9CisK
KyAgICBzdGF0aWMgU0g0V29yZCBwYXRjaENvbnN0YW50UG9vbExvYWQoU0g0V29yZCBsb2FkLCBp
bnQgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gKChsb2FkICYgfjB4ZmYpIHwgdmFsdWUp
OworICAgIH0KKworICAgIHN0YXRpYyBBc3NlbWJsZXJCdWZmZXI6OlR3b1Nob3J0cyBwbGFjZUNv
bnN0YW50UG9vbEJhcnJpZXIoaW50IG9mZnNldCkKKyAgICB7CisgICAgICAgIEFTU0VSVCgoKG9m
ZnNldCA+PiAxKSA8PTIwNDcpICYmICgob2Zmc2V0ID4+IDEpID49IC0yMDQ4KSk7CisKKyAgICAg
ICAgQXNzZW1ibGVyQnVmZmVyOjpUd29TaG9ydHMgbV9iYXJyaWVyOworICAgICAgICBtX2JhcnJp
ZXIuaGlnaCA9IChCUkFfT1BDT0RFIHwgKG9mZnNldCA+PiAxKSk7CisgICAgICAgIG1fYmFycmll
ci5sb3cgPSBOT1BfT1BDT0RFOworICAgICAgICBwcmludEluc3RyKCgoQlJBX09QQ09ERSB8IChv
ZmZzZXQgPj4gMSkpKSwgMCk7CisgICAgICAgIHByaW50SW5zdHIoTk9QX09QQ09ERSwgMCk7Cisg
ICAgICAgIHJldHVybiBtX2JhcnJpZXI7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgcGF0Y2hD
b25zdGFudFBvb2xMb2FkKHZvaWQqIGxvYWRBZGRyLCB2b2lkKiBjb25zdFBvb2xBZGRyKQorICAg
IHsKKyAgICAgICAgU0g0V29yZCogaW5zdHJ1Y3Rpb25QdHIgPSByZWludGVycHJldF9jYXN0PFNI
NFdvcmQqPihsb2FkQWRkcik7CisgICAgICAgIFNINFdvcmQgaW5zdHJ1Y3Rpb24gPSAqaW5zdHJ1
Y3Rpb25QdHI7CisgICAgICAgIFNINFdvcmQgaW5kZXggPSBpbnN0cnVjdGlvbiAmIDB4ZmY7CisK
KyAgICAgICAgaWYgKChpbnN0cnVjdGlvbiAmIDB4ZjAwMCkgIT0gTU9WSU1NX09QQ09ERSkKKyAg
ICAgICAgICAgIHJldHVybjsKKworICAgICAgICBBU1NFUlQoKCgocmVpbnRlcnByZXRfY2FzdDx1
aW50MzJfdD4oY29uc3RQb29sQWRkcikgLSByZWludGVycHJldF9jYXN0PHVpbnQzMl90Pihsb2Fk
QWRkcikpICsgaW5kZXggKiA0KSkgPCAxMDI0KTsKKworICAgICAgICBpbnQgb2Zmc2V0ID0gcmVp
bnRlcnByZXRfY2FzdDx1aW50MzJfdD4oY29uc3RQb29sQWRkcikgKyAoaW5kZXggKiA0KSAtICgo
cmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdD4oaW5zdHJ1Y3Rpb25QdHIpICYgfjB4MDMpICsgNCk7
CisgICAgICAgIGluc3RydWN0aW9uICY9MHhmMDA7CisgICAgICAgIGluc3RydWN0aW9uIHw9IDB4
ZDAwMDsKKyAgICAgICAgb2Zmc2V0ICY9IDB4MDNmZjsKKyAgICAgICAgaW5zdHJ1Y3Rpb24gfD0g
KG9mZnNldCA+PiAyKTsKKyAgICAgICAgKmluc3RydWN0aW9uUHRyID0gaW5zdHJ1Y3Rpb247Cisg
ICAgICAgIHByaW50SW5zdHIoaW5zdHJ1Y3Rpb24sIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3Q+
KGxvYWRBZGRyKSk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgcmVwYXRjaFBvaW50ZXIodm9p
ZCogd2hlcmUsIHZvaWQqIHZhbHVlKQorICAgIHsKKyAgICAgICAgcGF0Y2hQb2ludGVyKHdoZXJl
LCB2YWx1ZSk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgcmVwYXRjaEludDMyKHZvaWQqIHdo
ZXJlLCBpbnQzMl90IHZhbHVlKQorICAgIHsKKyAgICAgICAgdWludDE2X3QqIGluc3RydWN0aW9u
UHRyID0gcmVpbnRlcnByZXRfY2FzdDx1aW50MTZfdCo+KHdoZXJlKTsKKyAgICAgICAgY2hhbmdl
UENyZWxhdGl2ZUFkZHJlc3MoKCppbnN0cnVjdGlvblB0ciAmIDB4ZmYpLCBpbnN0cnVjdGlvblB0
ciwgdmFsdWUpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIHJlbGlua0NhbGwodm9pZCogZnJv
bSwgdm9pZCogdG8pCisgICAgeworICAgICAgICB1aW50MTZfdCogaW5zdHJ1Y3Rpb25QdHIgPSBy
ZWludGVycHJldF9jYXN0PHVpbnQxNl90Kj4oZnJvbSk7CisgICAgICAgIGluc3RydWN0aW9uUHRy
IC09IDM7CisgICAgICAgIGNoYW5nZVBDcmVsYXRpdmVBZGRyZXNzKCgqaW5zdHJ1Y3Rpb25QdHIg
JiAweGZmKSwgaW5zdHJ1Y3Rpb25QdHIsIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3Q+KHRvKSk7
CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgcmVsaW5rSnVtcCh2b2lkKiBmcm9tLCB2b2lkKiB0
bykKKyAgICB7CisgICAgICAgIHVpbnQxNl90KiBpbnN0cnVjdGlvblB0ciA9IHJlaW50ZXJwcmV0
X2Nhc3Q8dWludDE2X3QqPiAoZnJvbSk7CisgICAgICAgIHVpbnQxNl90IGluc3RydWN0aW9uID0g
Kmluc3RydWN0aW9uUHRyOworICAgICAgICBpbnQzMl90IG9mZnNldEJpdHMgPSAocmVpbnRlcnBy
ZXRfY2FzdDx1aW50MzJfdD4odG8pIC0gcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdD4oZnJvbSkp
OworCisgICAgICAgIGlmICgoKCppbnN0cnVjdGlvblB0ciAmIDB4ZmYwMCkgPT0gQlRfT1BDT0RF
KSB8fCAoKCppbnN0cnVjdGlvblB0ciAmIDB4ZmYwMCkgPT0gQkZfT1BDT0RFKSkgeworICAgICAg
ICAgICAgb2Zmc2V0Qml0cyAtPSA4OworICAgICAgICAgICAgaW5zdHJ1Y3Rpb25QdHIrKzsKKyAg
ICAgICAgICAgIGNoYW5nZVBDcmVsYXRpdmVBZGRyZXNzKCgqaW5zdHJ1Y3Rpb25QdHIgJiAweGZm
KSwgaW5zdHJ1Y3Rpb25QdHIsIG9mZnNldEJpdHMpOworICAgICAgICAgICAgaW5zdHJ1Y3Rpb24g
PSAoQlJBRl9PUENPREUgfCAoKmluc3RydWN0aW9uUHRyKysgJiAweGYwMCkpOworICAgICAgICAg
ICAgKmluc3RydWN0aW9uUHRyID0gaW5zdHJ1Y3Rpb247CisgICAgICAgICAgICBwcmludEJsb2Nr
SW5zdHIoaW5zdHJ1Y3Rpb25QdHIsIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3Q+KGZyb20pICsg
MSwgMyk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBBU1NFUlQo
KCooaW5zdHJ1Y3Rpb25QdHIgKyAxKSAmIEJSQUZfT1BDT0RFKSA9PSBCUkFGX09QQ09ERSk7Cisg
ICAgICAgIG9mZnNldEJpdHMgLT0gNDsKKyAgICAgICAgaWYgKG9mZnNldEJpdHMgPj0gLTQwOTYg
JiYgb2Zmc2V0Qml0cyA8PSA0MDk0KSB7CisgICAgICAgICAgICAqaW5zdHJ1Y3Rpb25QdHIgPSBn
ZXRPcGNvZGVHcm91cDYoQlJBX09QQ09ERSwgb2Zmc2V0Qml0cyA+PiAxKTsKKyAgICAgICAgICAg
ICooKytpbnN0cnVjdGlvblB0cikgPSBOT1BfT1BDT0RFOworICAgICAgICAgICAgcHJpbnRCbG9j
a0luc3RyKGluc3RydWN0aW9uUHRyIC0gMiwgcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdD4oZnJv
bSksIDIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgY2hhbmdl
UENyZWxhdGl2ZUFkZHJlc3MoKCppbnN0cnVjdGlvblB0ciAmIDB4ZmYpLCBpbnN0cnVjdGlvblB0
ciwgb2Zmc2V0Qml0cyAtIDIpOworICAgICAgICBwcmludEluc3RyKCppbnN0cnVjdGlvblB0ciwg
cmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdD4oZnJvbSkpOworICAgIH0KKworICAgIC8vIExpbmtp
bmcgJiBwYXRjaGluZworCisgICAgdm9pZCBsaW5rSnVtcChKbXBTcmMgZnJvbSwgSm1wRHN0IHRv
KQorICAgIHsKKyAgICAgICAgQVNTRVJUKHRvLm1fb2Zmc2V0ICE9IC0xKTsKKyAgICAgICAgQVNT
RVJUKGZyb20ubV9vZmZzZXQgIT0gLTEpOworCisgICAgICAgIHVpbnQxNl90KiBpbnN0cnVjdGlv
blB0ciA9IGdldEluc3RydWN0aW9uUHRyKGRhdGEoKSwgZnJvbS5tX29mZnNldCk7CisgICAgICAg
IHVpbnQxNl90IGluc3RydWN0aW9uID0gKmluc3RydWN0aW9uUHRyOworICAgICAgICBpbnQgb2Zm
c2V0Qml0czsKKworICAgICAgICBpZiAoKChpbnN0cnVjdGlvbiAmIDB4ZmYwMCkgPT0gQlRfT1BD
T0RFKSB8fCAoKGluc3RydWN0aW9uICYgMHhmZjAwKSA9PSBCRl9PUENPREUpKSB7CisgICAgICAg
ICAgICAvKiBCVCBsYWJlbCA9PiBCRiAyCisgICAgICAgICAgICAgICBub3AgICAgICAgIExEUiBy
ZWcKKyAgICAgICAgICAgICAgIG5vcCAgICAgICAgYnJhZiBAcmVnCisgICAgICAgICAgICAgICBu
b3AgICAgICAgIG5vcAorICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIG9mZnNldEJpdHMgPSAo
dG8ubV9vZmZzZXQgLSBmcm9tLm1fb2Zmc2V0KSAtIDg7CisgICAgICAgICAgICBpbnN0cnVjdGlv
biBePSAweDAyMDI7CisgICAgICAgICAgICAqaW5zdHJ1Y3Rpb25QdHIrKyA9IGluc3RydWN0aW9u
OworICAgICAgICAgICAgaWYgKCgqaW5zdHJ1Y3Rpb25QdHIgJiAweGYwMDApID09IDB4ZTAwMCkg
eworICAgICAgICAgICAgICAgIHVpbnQzMl90KiBhZGRyID0gZ2V0TGRySW1tQWRkcmVzc09uUG9v
bChpbnN0cnVjdGlvblB0ciwgbV9idWZmZXIucG9vbEFkZHJlc3MoKSk7CisgICAgICAgICAgICAg
ICAgKmFkZHIgPSBvZmZzZXRCaXRzOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAg
ICAgY2hhbmdlUENyZWxhdGl2ZUFkZHJlc3MoKCppbnN0cnVjdGlvblB0ciAmIDB4ZmYpLCBpbnN0
cnVjdGlvblB0ciwgb2Zmc2V0Qml0cyk7CisgICAgICAgICAgICBpbnN0cnVjdGlvbiA9IChCUkFG
X09QQ09ERSB8ICgqaW5zdHJ1Y3Rpb25QdHIrKyAmIDB4ZjAwKSk7CisgICAgICAgICAgICAqaW5z
dHJ1Y3Rpb25QdHIgPSBpbnN0cnVjdGlvbjsKKyAgICAgICAgICAgIHByaW50QmxvY2tJbnN0cihp
bnN0cnVjdGlvblB0ciAtIDIsIGZyb20ubV9vZmZzZXQsIDMpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisKKyAgICAgICAgLyogTU9WICMgaW1tLCByZWcgPT4gTERSIHJlZworICAg
ICAgICAgICBicmFmIEByZWcgICAgICAgICBicmFmIEByZWcKKyAgICAgICAgICAgbm9wICAgICAg
ICAgICAgICAgbm9wCisgICAgICAgICovCisgICAgICAgIEFTU0VSVCgoKihpbnN0cnVjdGlvblB0
ciArIDEpICYgQlJBRl9PUENPREUpID09IEJSQUZfT1BDT0RFKTsKKyAgICAgICAgb2Zmc2V0Qml0
cyA9ICh0by5tX29mZnNldCAtIGZyb20ubV9vZmZzZXQpIC0gNDsKKyAgICAgICAgaWYgKG9mZnNl
dEJpdHMgPj0gLTQwOTYgJiYgb2Zmc2V0Qml0cyA8PSA0MDk0KSB7CisgICAgICAgICAgICAqaW5z
dHJ1Y3Rpb25QdHIgPSBnZXRPcGNvZGVHcm91cDYoQlJBX09QQ09ERSwgb2Zmc2V0Qml0cyA+PiAx
KTsKKyAgICAgICAgICAgICooKytpbnN0cnVjdGlvblB0cikgPSBOT1BfT1BDT0RFOworICAgICAg
ICAgICAgcHJpbnRCbG9ja0luc3RyKGluc3RydWN0aW9uUHRyIC0gMSwgZnJvbS5tX29mZnNldCwg
Mik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpbnN0cnVjdGlv
biA9ICppbnN0cnVjdGlvblB0cjsKKyAgICAgICAgaWYgKChpbnN0cnVjdGlvbiAgJiAweGYwMDAp
ID09IDB4ZTAwMCkgeworICAgICAgICAgICAgdWludDMyX3QqIGFkZHIgPSBnZXRMZHJJbW1BZGRy
ZXNzT25Qb29sKGluc3RydWN0aW9uUHRyLCBtX2J1ZmZlci5wb29sQWRkcmVzcygpKTsKKyAgICAg
ICAgICAgICphZGRyID0gb2Zmc2V0Qml0cyAtIDI7CisgICAgICAgICAgICBwcmludEluc3RyKCpp
bnN0cnVjdGlvblB0ciwgZnJvbS5tX29mZnNldCArIDIpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisKKyAgICAgICAgY2hhbmdlUENyZWxhdGl2ZUFkZHJlc3MoKCppbnN0cnVjdGlv
blB0ciAmIDB4ZmYpLCBpbnN0cnVjdGlvblB0ciwgb2Zmc2V0Qml0cyAtIDIpOworICAgICAgICBw
cmludEluc3RyKCppbnN0cnVjdGlvblB0ciwgZnJvbS5tX29mZnNldCArIDIpOworICAgIH0KKwor
ICAgIHN0YXRpYyB2b2lkKiBnZXRSZWxvY2F0ZWRBZGRyZXNzKHZvaWQqIGNvZGUsIEptcFNyYyBq
dW1wKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50
ZXJwcmV0X2Nhc3Q8dWludDMyX3Q+KGNvZGUpICsganVtcC5tX29mZnNldCk7CisgICAgfQorCisg
ICAgc3RhdGljIHZvaWQqIGdldFJlbG9jYXRlZEFkZHJlc3Modm9pZCogY29kZSwgSm1wRHN0IGRl
c3RpbmF0aW9uKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGRlc3RpbmF0aW9uLm1fb2Zmc2V0ICE9
IC0xKTsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50ZXJwcmV0
X2Nhc3Q8dWludDMyX3Q+KGNvZGUpICsgZGVzdGluYXRpb24ubV9vZmZzZXQpOworICAgIH0KKwor
ICAgIHN0YXRpYyBpbnQgZ2V0RGlmZmVyZW5jZUJldHdlZW5MYWJlbHMoSm1wRHN0IHNyYywgSm1w
RHN0IGRzdCkKKyAgICB7CisgICAgICAgIHJldHVybiBkc3QubV9vZmZzZXQgLSBzcmMubV9vZmZz
ZXQ7CisgICAgfQorCisgICAgc3RhdGljIGludCBnZXREaWZmZXJlbmNlQmV0d2VlbkxhYmVscyhK
bXBEc3Qgc3JjLCBKbXBTcmMgZHN0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGRzdC5tX29mZnNl
dCAtIHNyYy5tX29mZnNldDsKKyAgICB9CisKKyAgICBzdGF0aWMgaW50IGdldERpZmZlcmVuY2VC
ZXR3ZWVuTGFiZWxzKEptcFNyYyBzcmMsIEptcERzdCBkc3QpCisgICAgeworICAgICAgICByZXR1
cm4gZHN0Lm1fb2Zmc2V0IC0gc3JjLm1fb2Zmc2V0OworICAgIH0KKworICAgIHN0YXRpYyB2b2lk
IHBhdGNoUG9pbnRlcih2b2lkKiBjb2RlLCBKbXBEc3Qgd2hlcmUsIHZvaWQqIHZhbHVlKQorICAg
IHsKKyAgICAgICAgcGF0Y2hQb2ludGVyKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihjb2Rl
KSArIHdoZXJlLm1fb2Zmc2V0LCB2YWx1ZSk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgcGF0
Y2hQb2ludGVyKHZvaWQqIGNvZGUsIHZvaWQqIHZhbHVlKQorICAgIHsKKyAgICAgICAgcGF0Y2hJ
bnQzMihjb2RlLCByZWludGVycHJldF9jYXN0PHVpbnQzMl90Pih2YWx1ZSkpOworICAgIH0KKwor
ICAgIHN0YXRpYyB2b2lkIHBhdGNoSW50MzIodm9pZCogY29kZSwgdWludDMyX3QgdmFsdWUpCisg
ICAgeworICAgICAgICBjaGFuZ2VQQ3JlbGF0aXZlQWRkcmVzcygoKihyZWludGVycHJldF9jYXN0
PHVpbnQxNl90Kj4oY29kZSkpICYgMHhmZiksIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDE2X3QqPihj
b2RlKSwgdmFsdWUpOworICAgIH0KKworICAgIHZvaWQqIGV4ZWN1dGFibGVDb3B5KEV4ZWN1dGFi
bGVQb29sKiBhbGxvY2F0b3IpCisgICAgeworICAgICAgICB2b2lkKiBjb3B5ID0gbV9idWZmZXIu
ZXhlY3V0YWJsZUNvcHkoYWxsb2NhdG9yKTsKKyAgICAgICAgQVNTRVJUKGNvcHkpOworICAgICAg
ICByZXR1cm4gY29weTsKKyAgICB9CisKKyAgICB2b2lkIHByZWZpeCh1aW50MTZfdCBwcmUpCisg
ICAgeworICAgICAgICBtX2J1ZmZlci5wdXRCeXRlKHByZSk7CisgICAgfQorCisgICAgdm9pZCBv
bmVTaG9ydE9wKHVpbnQxNl90IG9wY29kZSwgYm9vbCBjaGVja3NpemUgPSB0cnVlLCBib29sIGlz
RG91YmxlID0gdHJ1ZSkKKyAgICB7CisgICAgICAgIHByaW50SW5zdHIob3Bjb2RlLCBtX2J1ZmZl
ci51bmNoZWNrZWRTaXplKCksIGlzRG91YmxlKTsKKyAgICAgICAgaWYgKGNoZWNrc2l6ZSkKKyAg
ICAgICAgICAgIG1fYnVmZmVyLmVuc3VyZVNwYWNlKG1heEluc3RydWN0aW9uU2l6ZSk7CisgICAg
ICAgIG1fYnVmZmVyLnB1dFNob3J0VW5jaGVja2VkKG9wY29kZSk7CisgICAgfQorCisgICAgdm9p
ZCBlbnN1cmVTcGFjZShpbnQgc3BhY2UpCisgICAgeworICAgICAgICBtX2J1ZmZlci5lbnN1cmVT
cGFjZShzcGFjZSk7CisgICAgfQorCisgICAgdm9pZCBlbnN1cmVTcGFjZShpbnQgaW5zblNwYWNl
LCBpbnQgY29uc3RTcGFjZSkKKyAgICB7CisgICAgICAgIG1fYnVmZmVyLmVuc3VyZVNwYWNlKGlu
c25TcGFjZSwgY29uc3RTcGFjZSk7CisgICAgfQorCisgICAgLy8gQWRtaW5pc3RyYXRpdmUgbWV0
aG9kcworCisgICAgdm9pZCogZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fYnVmZmVyLmRhdGEoKTsg
fQorICAgIGludCBzaXplKCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX2J1ZmZlci5zaXplKCk7
CisgICAgfQorCisjaWZkZWYgU0g0X0FTU0VNQkxFUl9UUkFDSU5HCisgICAgc3RhdGljIHZvaWQg
cHJpbnRJbnN0cih1aW50MTZfdCBvcGMsIHVuc2lnbmVkIGludCBzaXplLCBib29sIGlzZG91Ymxl
SW5zdCA9IHRydWUpCisgICAgeworICAgICAgICBpZiAoIWdldGVudigiSmF2YVNjcmlwdENvcmVE
dW1wSklUIikpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgY29uc3QgY2hhciAqZm9y
bWF0ID0gMDsKKyAgICAgICAgcHJpbnRmU3Rkb3V0SW5zdHIoIm9mZnNldDogMHglOC44eFx0Iiwg
c2l6ZSk7CisgICAgICAgIHN3aXRjaCAob3BjKSB7CisgICAgICAgIGNhc2UgQlJLX09QQ09ERToK
KyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgQlJLXG4iOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgTk9QX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgTk9QXG4i
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUlRTX09QQ09ERToKKyAgICAgICAg
ICAgIGZvcm1hdCA9IiAgICAqUlRTXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgU0VUU19PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIFNFVFNcbiI7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTRVRUX09QQ09ERToKKyAgICAgICAgICAgIGZv
cm1hdCA9ICIgICAgU0VUVFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENM
UlRfT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBDTFJUXG4iOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgRlNDSEdfT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0
ID0gIiAgICBGU0NIR1xuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg
IGlmIChmb3JtYXQpIHsKKyAgICAgICAgICAgIHByaW50ZlN0ZG91dEluc3RyKGZvcm1hdCk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgc3dpdGNoIChvcGMgJiAweGYw
ZmYpIHsKKyAgICAgICAgY2FzZSBCUkFGX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIg
ICAgKkJSQUYgUiVkXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRFRfT1BD
T0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBEVCBSJWRcbiI7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBDTVBQTF9PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAi
ICAgIENNUC9QTCBSJWRcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDTVBQ
Wl9PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIENNUC9QWiBSJWRcbiI7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBKTVBfT1BDT0RFOgorICAgICAgICAgICAgZm9y
bWF0ID0gIiAgICAqSk1QIEBSJWRcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBKU1JfT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICAqSlNSIEBSJWRcbiI7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBMRFNQUl9PUENPREU6CisgICAgICAgICAg
ICBmb3JtYXQgPSAiICAgIExEUyBSJWQsIFBSXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgTERTTFBSX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgTERTLkwg
QFIlZCssIFBSXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTU9WVF9PUENP
REU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIE1PVlQgUiVkXG4iOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgU0hBTF9PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAi
ICAgIFNIQUwgUiVkXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU0hBUl9P
UENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIFNIQVIgUiVkXG4iOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgU0hMTF9PUENPREU6CisgICAgICAgICAgICBmb3JtYXQg
PSAiICAgIFNITEwgUiVkXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU0hM
TDJfT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBTSExMMiBSJWRcbiI7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTSExMOF9PUENPREU6CisgICAgICAgICAgICBm
b3JtYXQgPSAiICAgIFNITEw4IFIlZFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIFNITEwxNl9PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIFNITEwxNiBSJWRc
biI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTSExSX09QQ09ERToKKyAgICAg
ICAgICAgIGZvcm1hdCA9ICIgICAgU0hMUiBSJWRcbiI7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBTSExSMl9PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIFNITFIy
IFIlZFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNITFI4X09QQ09ERToK
KyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgU0hMUjggUiVkXG4iOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgU0hMUjE2X09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIg
ICAgU0hMUjE2IFIlZFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNUU1BS
X09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgU1RTIFBSLCBSJWRcbiI7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTVFNMUFJfT1BDT0RFOgorICAgICAgICAgICAg
Zm9ybWF0ID0gIiAgICBTVFMuTCBQUiwgQC1SJWRcbiI7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBMRFNfUk1fRlBVTF9PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAg
IExEUyBSJWQsIEZQVUxcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTVFNf
RlBVTF9STl9PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIFNUUyBGUFVMLCBSJWQg
XG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRkxEU19GUk1fRlBVTF9PUENP
REU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIEZMRFMgRlIlZCwgRlBVTFxuIjsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEZTVFNfRlBVTF9GUk5fT1BDT0RFOgorICAgICAg
ICAgICAgZm9ybWF0ID0gIiAgICBGU1RTIEZQVUwsIFIlZCBcbiI7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBMRFNGUFNDUl9PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAi
ICAgIExEUyBSJWQsIEZQU0NSIFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IFNUU0ZQU0NSX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgU1RTIEZQU0NSLCBS
JWQgXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU1RTTUFDTF9PUENPREU6
CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIFNUUyBNQUNMLCBSJWQgXG4iOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgU1RTTUFDSF9PUENPREU6CisgICAgICAgICAgICBmb3Jt
YXQgPSAiICAgIFNUUyBNQUNILCBSJWQgXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgQlNSRl9PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgICpCU1JGIFIlZCI7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBGVFJDX09QQ09ERToKKyAgICAgICAg
ICAgIGZvcm1hdCA9ICIgICAgRlRSQyBGUiVkLCBGUFVMXG4iOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgaWYgKGZvcm1hdCkgeworICAgICAgICAgICAgcHJpbnRmU3Rk
b3V0SW5zdHIoZm9ybWF0LCBnZXRSbihvcGMpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgICAgICBzd2l0Y2ggKG9wYyAmIDB4ZjBmZikgeworICAgICAgICBjYXNlIEZORUdf
T1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBGTkVHIERSJWRcbiI7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBGTE9BVF9PUENPREU6CisgICAgICAgICAgICBmb3Jt
YXQgPSAiICAgIEZMT0FUIERSJWRcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBGVFJDX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgRlRSQyBGUiVkLCBGUFVM
XG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRlNRUlRfT1BDT0RFOgorICAg
ICAgICAgICAgZm9ybWF0ID0gIiAgICBGU1FSVCBGUiVkXG4iOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgRkNOVkRTX0RSTV9GUFVMX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1h
dCA9ICIgICAgRkNOVkRTIEZSJWQsIEZQVUxcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICBpZiAoZm9ybWF0KSB7CisgICAgICAgICAgICBpZiAoaXNkb3VibGVJbnN0
KQorICAgICAgICAgICAgICAgIHByaW50ZlN0ZG91dEluc3RyKGZvcm1hdCwgZ2V0RFJuKG9wYykg
PDwgMSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcHJpbnRmU3Rkb3V0SW5z
dHIoZm9ybWF0LCBnZXRSbihvcGMpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
ICAgICAgICBzd2l0Y2ggKG9wYyAmIDB4ZjAwZikgeworICAgICAgICBjYXNlIEFERF9PUENPREU6
CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIEFERCBSJWQsIFIlZFxuIjsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIEFERENfT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0g
IiAgICBBRERDIFIlZCwgUiVkXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
QUREVl9PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIEFERFYgUiVkLCBSJWRcbiI7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBTkRfT1BDT0RFOgorICAgICAgICAg
ICAgZm9ybWF0ID0gIiAgICBBTkQgUiVkLCBSJWRcbiI7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBESVYxX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgRElWMSBS
JWQsIFIlZFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENNUEVRX09QQ09E
RToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgQ01QL0VRIFIlZCwgUiVkXG4iOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ01QR0VfT1BDT0RFOgorICAgICAgICAgICAgZm9y
bWF0ID0gIiAgICBDTVAvR0UgUiVkLCBSJWRcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBDTVBHVF9PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIENNUC9HVCBS
JWQsIFIlZFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENNUEhJX09QQ09E
RToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgQ01QL0hJIFIlZCwgUiVkXG4iOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ01QSFNfT1BDT0RFOgorICAgICAgICAgICAgZm9y
bWF0ID0gIiAgICBDTVAvSFMgUiVkLCBSJWRcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBNT1ZfT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBNT1YgUiVkLCBS
JWRcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBNT1ZCX1dSSVRFX1JOX09Q
Q09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgTU9WLkIgUiVkLCBAUiVkXG4iOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTU9WQl9XUklURV9STkRFQ19PUENPREU6Cisg
ICAgICAgICAgICBmb3JtYXQgPSAiICAgIE1PVi5CIFIlZCwgQC1SJWRcbiI7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBNT1ZCX1dSSVRFX1IwUk5fT1BDT0RFOgorICAgICAgICAg
ICAgZm9ybWF0ID0gIiAgICBNT1YuQiBSJWQsIEAoUjAsIFIlZClcbiI7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBNT1ZCX1JFQURfUk1fT1BDT0RFOgorICAgICAgICAgICAgZm9y
bWF0ID0gIiAgICBNT1YuQiBAUiVkLCBSJWRcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBNT1ZCX1JFQURfUk1JTkNfT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAg
ICBNT1YuQiBAUiVkKywgUiVkXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
TU9WQl9SRUFEX1IwUk1fT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBNT1YuQiBA
KFIwLCBSJWQpLCBSJWRcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBNT1ZM
X1dSSVRFX1JOX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgTU9WLkwgUiVkLCBA
UiVkXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTU9WTF9XUklURV9STkRF
Q19PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIE1PVi5MIFIlZCwgQC1SJWRcbiI7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBNT1ZMX1dSSVRFX1IwUk5fT1BDT0RF
OgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBNT1YuTCBSJWQsIEAoUjAsIFIlZClcbiI7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBNT1ZMX1JFQURfUk1fT1BDT0RFOgorICAg
ICAgICAgICAgZm9ybWF0ID0gIiAgICBNT1YuTCBAUiVkLCBSJWRcbiI7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBNT1ZMX1JFQURfUk1JTkNfT1BDT0RFOgorICAgICAgICAgICAg
Zm9ybWF0ID0gIiAgICBNT1YuTCBAUiVkKywgUiVkXG4iOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgTU9WTF9SRUFEX1IwUk1fT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0g
IiAgICBNT1YuTCBAKFIwLCBSJWQpLCBSJWRcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBNVUxMX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgTVVMLkwgUiVk
LCBSJWRcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBETVVMTF9MX09QQ09E
RToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgRE1VTFUuTCBSJWQsIFIlZFxuIjsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIERNVUxTTF9PUENPREU6CisgICAgICAgICAgICBm
b3JtYXQgPSAiICAgIERNVUxTLkwgUiVkLCBSJWRcbiI7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBORUdfT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBORUcgUiVk
LCBSJWRcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBORUdDX09QQ09ERToK
KyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgTkVHQyBSJWQsIFIlZFxuIjsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIE5PVF9PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAi
ICAgIE5PVCBSJWQsIFIlZFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE9S
X09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgT1IgUiVkLCBSJWRcbiI7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTSEFEX09QQ09ERToKKyAgICAgICAgICAgIGZv
cm1hdCA9ICIgICAgU0hBRCBSJWQsIFIlZFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIFNITERfT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBTSExEIFIlZCwg
UiVkXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU1VCX09QQ09ERToKKyAg
ICAgICAgICAgIGZvcm1hdCA9ICIgICAgU1VCIFIlZCwgUiVkXG4iOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgU1VCQ19PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAg
IFNVQkMgUiVkLCBSJWRcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTVUJW
X09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgU1VCViBSJWQsIFIlZFxuIjsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFRTVF9PUENPREU6CisgICAgICAgICAgICBm
b3JtYXQgPSAiICAgIFRTVCBSJWQsIFIlZFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIFhPUl9PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIFhPUiBSJWQsIFIl
ZFxuIjticmVhazsKKyAgICAgICAgY2FzZSBNT1ZXX1dSSVRFX1JOX09QQ09ERToKKyAgICAgICAg
ICAgIGZvcm1hdCA9ICIgICAgTU9WLlcgUiVkLCBAUiVkXG4iOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgTU9WV19SRUFEX1JNX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9
ICIgICAgTU9WLlcgQFIlZCwgUiVkXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgTU9WV19SRUFEX1IwUk1fT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBNT1Yu
VyBAKFIwLCBSJWQpLCBSJWRcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBF
WFRVV19PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIEVYVFUuVyBSJWQsIFIlZFxu
IjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmIChmb3JtYXQpIHsK
KyAgICAgICAgICAgIHByaW50ZlN0ZG91dEluc3RyKGZvcm1hdCwgZ2V0Um0ob3BjKSwgZ2V0Um4o
b3BjKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgc3dpdGNoIChv
cGMgJiAweGYwMGYpIHsKKyAgICAgICAgY2FzZSBGU1VCX09QQ09ERToKKyAgICAgICAgICAgIGZv
cm1hdCA9ICIgICAgRlNVQiBGUiVkLCBGUiVkXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgRkFERF9PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIEZBREQgRlIl
ZCwgRlIlZFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEZESVZfT1BDT0RF
OgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBGRElWIEZSJWQsIEZSJWRcbiI7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBGTVVMX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1h
dCA9ICIgICAgRE1VTEwgRlIlZCwgRlIlZFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIEZNT1ZfT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBGTU9WIEZSJWQs
IEZSJWRcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBGQ01QRVFfT1BDT0RF
OgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBGQ01QL0VRIEZSJWQsIEZSJWRcbiI7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBGQ01QR1RfT1BDT0RFOgorICAgICAgICAgICAg
Zm9ybWF0ID0gIiAgICBGQ01QL0dUIEZSJWQsIEZSJWRcbiI7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICBpZiAoZm9ybWF0KSB7CisgICAgICAgICAgICBpZiAoaXNkb3Vi
bGVJbnN0KQorICAgICAgICAgICAgICAgIHByaW50ZlN0ZG91dEluc3RyKGZvcm1hdCwgZ2V0RFJt
KG9wYykgPDwgMSwgZ2V0RFJuKG9wYykgPDwgMSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgcHJpbnRmU3Rkb3V0SW5zdHIoZm9ybWF0LCBnZXRSbShvcGMpLCBnZXRSbihvcGMp
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBzd2l0Y2ggKG9wYyAm
IDB4ZjAwZikgeworICAgICAgICBjYXNlIEZNT1ZTX1dSSVRFX1JOX0RFQ19PUENPREU6CisgICAg
ICAgICAgICBmb3JtYXQgPSAiICAgICVzIEZSJWQsIEAtUiVkXG4iOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgRk1PVlNfV1JJVEVfUk5fT1BDT0RFOgorICAgICAgICAgICAgZm9y
bWF0ID0gIiAgICAlcyBGUiVkLCBAUiVkXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgRk1PVlNfV1JJVEVfUjBSTl9PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAg
ICVzIEZSJWQsIEAoUjAsIFIlZClcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgICAgICBpZiAoZm9ybWF0KSB7CisgICAgICAgICAgICBpZiAoaXNkb3VibGVJbnN0KQorICAg
ICAgICAgICAgICAgIHByaW50ZlN0ZG91dEluc3RyKGZvcm1hdCwgIkZNT1YiLCBnZXREUm0ob3Bj
KSA8PCAxLCBnZXREUm4ob3BjKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
cHJpbnRmU3Rkb3V0SW5zdHIoZm9ybWF0LCAiRk1PVi5TIiwgZ2V0Um0ob3BjKSwgZ2V0Um4ob3Bj
KSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgc3dpdGNoIChvcGMg
JiAweGYwMGYpIHsKKyAgICAgICAgY2FzZSBGTU9WU19SRUFEX1JNX09QQ09ERToKKyAgICAgICAg
ICAgIGZvcm1hdCA9ICIgICAgJXMgQFIlZCwgRlIlZFxuIjsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIEZNT1ZTX1JFQURfUk1fSU5DX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1h
dCA9ICIgICAgJXMgQFIlZCssIEZSJWRcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBGTU9WU19SRUFEX1IwUk1fT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICAl
cyBAKFIwLCBSJWQpLCBGUiVkXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKGZvcm1hdCkgeworICAgICAgICAgICAgaWYgKGlzZG91YmxlSW5zdCkKKyAgICAg
ICAgICAgICAgICBwcmludGZTdGRvdXRJbnN0cihmb3JtYXQsICJGTU9WIiwgZ2V0RFJtKG9wYyks
IGdldERSbihvcGMpIDw8IDEpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHBy
aW50ZlN0ZG91dEluc3RyKGZvcm1hdCwgIkZNT1YuUyIsIGdldFJtKG9wYyksIGdldFJuKG9wYykp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHN3aXRjaCAob3BjICYg
MHhmZjAwKSB7CisgICAgICAgIGNhc2UgQkZfT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0g
IiAgICBCRiAlZFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEJGU19PUENP
REU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgICpCRi9TICVkXG4iOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgQU5ESU1NX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9
ICIgICAgQU5EICMlZCwgUjBcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBC
VF9PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIEJUICVkXG4iOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgQlRTX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9
ICIgICAgKkJUL1MgJWRcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDTVBF
UUlNTV9PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIENNUC9FUSAjJWQsIFIwXG4i
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTU9WQl9XUklURV9PRkZHQlJfT1BD
T0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBNT1YuQiBSMCwgQCglZCwgR0JSKVxuIjsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE1PVkJfUkVBRF9PRkZHQlJfT1BDT0RF
OgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBNT1YuQiBAKCVkLCBHQlIpLCBSMFxuIjsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE1PVkxfV1JJVEVfT0ZGR0JSX09QQ09ERToK
KyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgTU9WLkwgUjAsIEAoJWQsIEdCUilcbiI7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBNT1ZMX1JFQURfT0ZGR0JSX09QQ09ERToKKyAg
ICAgICAgICAgIGZvcm1hdCA9ICIgICAgTU9WLkwgQCglZCwgR0JSKSwgUjBcbiI7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBNT1ZBX1JFQURfT0ZGUENfT1BDT0RFOgorICAgICAg
ICAgICAgZm9ybWF0ID0gIiAgICBNT1ZBIEAoJWQsIFBDKSwgUjBcbiI7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBPUklNTV9PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAi
ICAgIE9SICMlZCwgUjBcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBPUkJJ
TU1fT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBPUi5CICMlZCwgQChSMCwgR0JS
KVxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFRTVElNTV9PUENPREU6Cisg
ICAgICAgICAgICBmb3JtYXQgPSAiICAgIFRTVCAjJWQsIFIwXG4iOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgVFNUQl9PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAg
IFRTVC5CICVkLCBAKFIwLCBHQlIpXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgWE9SSU1NX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgWE9SICMlZCwgUjBc
biI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBYT1JCX09QQ09ERToKKyAgICAg
ICAgICAgIGZvcm1hdCA9ICIgICAgWE9SLkIgJWQsIEAoUjAsIEdCUilcbiI7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAoZm9ybWF0KSB7CisgICAgICAgICAgICBw
cmludGZTdGRvdXRJbnN0cihmb3JtYXQsIGdldEltbTgob3BjKSk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKyAgICAgICAgc3dpdGNoIChvcGMgJiAweGZmMDApIHsKKyAgICAgICAg
Y2FzZSBNT1ZCX1dSSVRFX09GRlJOX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAg
TU9WLkIgUjAsIEAoJWQsIFIlZClcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBNT1ZCX1JFQURfT0ZGUk1fT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBNT1Yu
QiBAKCVkLCBSJWQpLCBSMFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
ICAgIGlmIChmb3JtYXQpIHsKKyAgICAgICAgICAgIHByaW50ZlN0ZG91dEluc3RyKGZvcm1hdCwg
Z2V0RGlzcChvcGMpLCBnZXRSbShvcGMpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorICAgICAgICBzd2l0Y2ggKG9wYyAmIDB4ZjAwMCkgeworICAgICAgICBjYXNlIEJSQV9PUENP
REU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgICpCUkEgJWRcbiI7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBCU1JfT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAg
ICAqQlNSICVkXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYg
KGZvcm1hdCkgeworICAgICAgICAgICAgcHJpbnRmU3Rkb3V0SW5zdHIoZm9ybWF0LCBnZXRJbW0x
MihvcGMpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBzd2l0Y2gg
KG9wYyAmIDB4ZjAwMCkgeworICAgICAgICBjYXNlIE1PVkxfUkVBRF9PRkZQQ19PUENPREU6Cisg
ICAgICAgICAgICBmb3JtYXQgPSAiICAgIE1PVi5MIEAoJWQsIFBDKSwgUiVkXG4iOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQURESU1NX09QQ09ERToKKyAgICAgICAgICAgIGZv
cm1hdCA9ICIgICAgQUREICMlZCwgUiVkXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgTU9WSU1NX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgTU9WICMlZCwg
UiVkXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTU9WV19SRUFEX09GRlBD
X09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgTU9WLlcgQCglZCwgUEMpLCBSJWRc
biI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAoZm9ybWF0KSB7
CisgICAgICAgICAgICBwcmludGZTdGRvdXRJbnN0cihmb3JtYXQsIGdldEltbTgob3BjKSwgZ2V0
Um4ob3BjKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgc3dpdGNo
IChvcGMgJiAweGYwMDApIHsKKyAgICAgICAgY2FzZSBNT1ZMX1dSSVRFX09GRlJOX09QQ09ERToK
KyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgTU9WLkwgUiVkLCBAKCVkLCBSJWQpXG4iOworICAg
ICAgICAgICAgcHJpbnRmU3Rkb3V0SW5zdHIoZm9ybWF0LCBnZXRSbShvcGMpLCBnZXREaXNwKG9w
YyksIGdldFJuKG9wYykpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTU9WTF9S
RUFEX09GRlJNX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgTU9WLkwgQCglZCwg
UiVkKSwgUiVkXG4iOworICAgICAgICAgICAgcHJpbnRmU3Rkb3V0SW5zdHIoZm9ybWF0LCBnZXRE
aXNwKG9wYyksIGdldFJtKG9wYyksIGdldFJuKG9wYykpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBwcmludGZTdGRvdXRJbnN0cihjb25z
dCBjaGFyKiBmb3JtYXQsIC4uLikKKyAgICB7CisgICAgICAgIGlmIChnZXRlbnYoIkphdmFTY3Jp
cHRDb3JlRHVtcEpJVCIpKSB7CisgICAgICAgICAgICB2YV9saXN0IGFyZ3M7CisgICAgICAgICAg
ICB2YV9zdGFydChhcmdzLCBmb3JtYXQpOworICAgICAgICAgICAgdnByaW50ZlN0ZG91dEluc3Ry
KGZvcm1hdCwgYXJncyk7CisgICAgICAgICAgICB2YV9lbmQoYXJncyk7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBzdGF0aWMgdm9pZCB2cHJpbnRmU3Rkb3V0SW5zdHIoY29uc3QgY2hhciogZm9y
bWF0LCB2YV9saXN0IGFyZ3MpCisgICAgeworICAgICAgICBpZiAoZ2V0ZW52KCJKYXZhU2NyaXB0
Q29yZUR1bXBKSVQiKSkKKyAgICAgICAgICAgIHZmcHJpbnRmKHN0ZG91dCwgZm9ybWF0LCBhcmdz
KTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBwcmludEJsb2NrSW5zdHIodWludDE2X3QqIGZp
cnN0LCB1bnNpZ25lZCBpbnQgb2Zmc2V0LCBpbnQgbmJJbnN0cikKKyAgICB7CisgICAgICAgIHBy
aW50ZlN0ZG91dEluc3RyKCI+PiByZXBhdGNoIGluc3RydWN0aW9ucyBhZnRlciBsaW5rXG4iKTsK
KyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPD0gbmJJbnN0cjsgaSsrKQorICAgICAgICAgICBw
cmludEluc3RyKCooZmlyc3QgKyBpKSwgb2Zmc2V0ICsgaSk7CisgICAgICAgIHByaW50ZlN0ZG91
dEluc3RyKCI+PiBlbmQgcmVwYXRjaFxuIik7CisgICAgfQorI2Vsc2UKKyAgICBzdGF0aWMgdm9p
ZCBwcmludEluc3RyKHVpbnQxNl90IG9wYywgdW5zaWduZWQgaW50IHNpemUsIGJvb2wgaXNkb3Vi
bGVJbnN0ID0gdHJ1ZSkge307CisgICAgc3RhdGljIHZvaWQgcHJpbnRCbG9ja0luc3RyKHVpbnQx
Nl90KiBmaXJzdCwgdW5zaWduZWQgaW50IG9mZnNldCwgaW50IG5iSW5zdHIpIHt9OworI2VuZGlm
CisKK3ByaXZhdGU6CisgICAgU0g0QnVmZmVyIG1fYnVmZmVyOworICAgIGludCBtX2NsYWltc2Ny
YXRjaFJlZzsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxFKEFT
U0VNQkxFUikgJiYgQ1BVKFNINCkKKworI2VuZGlmIC8vIFNINEFzc2VtYmxlcl9oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySklULmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS95YXJyL1lhcnJKSVQuY3BwCmluZGV4IGUzNGU2ZjQuLmY0Mzg5MTcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJKSVQuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJKSVQuY3BwCkBAIC01OSw2ICs1OSwxNiBAQCBjbGFz
cyBZYXJyR2VuZXJhdG9yIDogcHJpdmF0ZSBNYWNyb0Fzc2VtYmxlciB7CiAgICAgc3RhdGljIGNv
bnN0IFJlZ2lzdGVySUQgcmVnVDEgPSBNSVBTUmVnaXN0ZXJzOjp0NTsKIAogICAgIHN0YXRpYyBj
b25zdCBSZWdpc3RlcklEIHJldHVyblJlZ2lzdGVyID0gTUlQU1JlZ2lzdGVyczo6djA7CisjZWxp
ZiBDUFUoU0g0KQorICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIGlucHV0ID0gU0g0UmVnaXN0
ZXJzOjpyNDsKKyAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCBpbmRleCA9IFNINFJlZ2lzdGVy
czo6cjU7CisgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgbGVuZ3RoID0gU0g0UmVnaXN0ZXJz
OjpyNjsKKyAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCBvdXRwdXQgPSBTSDRSZWdpc3RlcnM6
OnI3OworCisgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgcmVnVDAgPSBTSDRSZWdpc3RlcnM6
OnIwOworICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIHJlZ1QxID0gU0g0UmVnaXN0ZXJzOjpy
MTsKKworICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIHJldHVyblJlZ2lzdGVyID0gU0g0UmVn
aXN0ZXJzOjpyMDsKICNlbGlmIENQVShYODYpCiAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQg
aW5wdXQgPSBYODZSZWdpc3RlcnM6OmVheDsKICAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCBp
bmRleCA9IFg4NlJlZ2lzdGVyczo6ZWR4OwpAQCAtMjE3OSw2ICsyMTg5LDkgQEAgY2xhc3MgWWFy
ckdlbmVyYXRvciA6IHByaXZhdGUgTWFjcm9Bc3NlbWJsZXIgewogICAgICAgICBwdXNoKEFSTVJl
Z2lzdGVyczo6cjgpOyAvLyBzY3JhdGNoIHJlZ2lzdGVyCiAjZW5kaWYKICAgICAgICAgbW92ZShB
Uk1SZWdpc3RlcnM6OnIzLCBvdXRwdXQpOworI2VsaWYgQ1BVKFNINCkKKyAgICAgICAgcHVzaChT
SDRSZWdpc3RlcnM6OnIxMSk7CisgICAgICAgIHB1c2goU0g0UmVnaXN0ZXJzOjpyMTMpOwogI2Vs
aWYgQ1BVKE1JUFMpCiAgICAgICAgIC8vIERvIG5vdGhpbmcuCiAjZW5kaWYKQEAgLTIyMDEsNiAr
MjIxNCw5IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgOiBwcml2YXRlIE1hY3JvQXNzZW1ibGVyIHsK
ICAgICAgICAgcG9wKEFSTVJlZ2lzdGVyczo6cjYpOwogICAgICAgICBwb3AoQVJNUmVnaXN0ZXJz
OjpyNSk7CiAgICAgICAgIHBvcChBUk1SZWdpc3RlcnM6OnI0KTsKKyNlbGlmIENQVShTSDQpCisg
ICAgICAgIHBvcChTSDRSZWdpc3RlcnM6OnIxMyk7CisgICAgICAgIHBvcChTSDRSZWdpc3RlcnM6
OnIxMSk7CiAjZWxpZiBDUFUoTUlQUykKICAgICAgICAgLy8gRG8gbm90aGluZwogI2VuZGlmCi0t
IAoxLjcuMi4zCgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>86941</attachid>
            <date>2011-03-25 07:58:46 -0700</date>
            <delta_ts>2011-04-06 07:51:29 -0700</delta_ts>
            <desc>JIT part for sh4</desc>
            <filename>0002-ADD-JIT-SUPPORT.patch</filename>
            <type>text/plain</type>
            <size>17141</size>
            <attacher name="thouraya">thouraya.andolsi</attacher>
            
              <data encoding="base64">RnJvbSA0Y2ViOWQ5MzQ3NmZkODVhZTc2NDdiNGU5NzIxOWE5OWUyOGE3Y2JkIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBUaG91cmF5YSBBTkRPTFNJIDx0aG91cmF5YS5hbmRvbHNpQHN0
LmNvbT4KRGF0ZTogRnJpLCAyNSBNYXIgMjAxMSAxNDo1OToyMSArMDEwMApTdWJqZWN0OiBbUEFU
Q0ggMi8zXSBBREQgSklUIFNVUFBPUlQuCgotLS0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFu
Z2VMb2cgICAgICAgICAgICAgICAgICAgIHwgICAxNiArKysrCiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVC5oICAgICAgICAgICAgICAgICAgICB8ICAgNDUgKysrKysrKysrKwogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVNZXRob2RzLmggICAgICAgfCAgIDI1ICsrKysr
CiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAgICAgICB8ICAg
NDMgKysrKysrKysrCiAuLi4vSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJf
NjQuY3BwICB8ICAgMTEgKystCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNw
cCAgICAgICAgICAgICB8ICAgOTMgKysrKysrKysrKysrKysrKysrKysKIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUU3R1YnMuaCAgICAgICAgICAgICAgIHwgICAyMSArKysrKwogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KU0ludGVyZmFjZUpJVC5oICAgICAgICAgfCAgIDI1ICsrKysr
CiA4IGZpbGVzIGNoYW5nZWQsIDI3OCBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9ucygtKQoKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDBjOGE4OTAuLjEyNzg5ZTIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0NoYW5nZUxvZwpAQCAtNCw2ICs0LDIyIEBACiAKICAgICAgICAgU0g0IEpJVCBTVVBQT1JULgog
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDQzMjkuCisg
ICAgICAgIEFkZCBKSVQgc3VwcG9ydCBmb3IgU0g0IHBsYXRmb3JtcyAoZGlzYWJsZWQgYnkgZGVm
YXVsdCkuCisKKyAgICAgICAgKiBqaXQvSklULmg6CisgICAgICAgICogaml0L0pJVElubGluZU1l
dGhvZHMuaDoKKyAgICAgICAgKiBqaXQvSklUT3Bjb2RlczMyXzY0LmNwcDoKKyAgICAgICAgKiBq
aXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHA6CisgICAgICAgICogaml0L0pJVFN0dWJzLmNw
cDoKKyAgICAgICAgKiBqaXQvSklUU3R1YnMuaDoKKyAgICAgICAgKiBqaXQvSlNJbnRlcmZhY2VK
SVQuaDoKKworMjAxMS0wMy0yNSAgVGhvdXJheWEgQU5ET0xTSSAgPHRob3VyYXlhLmFuZG9sc2lA
c3QuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFNINCBKSVQgU1VQUE9SVC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTQ0MzI5LgogICAgICAgICBBZGQgWUFSUiBzdXBwb3J0IGZvciBTSDQgcGxhdGZv
cm1zIChkaXNhYmxlZCBieSBkZWZhdWx0KS4KIAogICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOgpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklULmgKaW5kZXggYWU2MGNjYi4uOWVkZDRiZSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVC5oCkBAIC00NzMsNiArNDczLDQ4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0TWV0aG9kQ2hlY2tQcm90b1N0cnVjdCA9IDUy
OwogICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0TWV0aG9kQ2hlY2tQdXRGdW5j
dGlvbiA9IDg0OwogI2VuZGlmCisjZWxpZiBDUFUoU0g0KQorICAgICAgIC8vIFRoZXNlIGFyY2hp
dGVjdHVyZSBzcGVjaWZpYyB2YWx1ZSBhcmUgdXNlZCB0byBlbmFibGUgcGF0Y2hpbmcgLSBzZWUg
Y29tbWVudCBvbiBvcF9wdXRfYnlfaWQuCisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hP
ZmZzZXRHZXRCeUlkU3RydWN0dXJlID0gNjsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRj
aE9mZnNldFB1dEJ5SWRQcm9wZXJ0eU1hcE9mZnNldCA9IDI0OworICAgICAgICBzdGF0aWMgY29u
c3QgaW50IHBhdGNoT2Zmc2V0UHV0QnlJZFN0cnVjdHVyZSA9IDY7CisgICAgICAgIC8vIFRoZXNl
IGFyY2hpdGVjdHVyZSBzcGVjaWZpYyB2YWx1ZSBhcmUgdXNlZCB0byBlbmFibGUgcGF0Y2hpbmcg
LSBzZWUgY29tbWVudCBvbiBvcF9nZXRfYnlfaWQuCisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQg
cGF0Y2hPZmZzZXRHZXRCeUlkQnJhbmNoVG9TbG93Q2FzZSA9IDEwOworICAgICAgICBzdGF0aWMg
Y29uc3QgaW50IHBhdGNoT2Zmc2V0R2V0QnlJZFByb3BlcnR5TWFwT2Zmc2V0ID0gMjQ7CisgICAg
ICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRHZXRCeUlkUHV0UmVzdWx0ID0gMzI7CisK
KyAgICAgICAgLy8gc2VxdWVuY2VPcENhbGwKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBzZXF1
ZW5jZU9wQ2FsbEluc3RydWN0aW9uU3BhY2UgPSAxMjsKKyAgICAgICAgc3RhdGljIGNvbnN0IGlu
dCBzZXF1ZW5jZU9wQ2FsbENvbnN0YW50U3BhY2UgPSAyOworICAgICAgICAvLyBzZXF1ZW5jZU1l
dGhvZENoZWNrCisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgc2VxdWVuY2VNZXRob2RDaGVja0lu
c3RydWN0aW9uU3BhY2UgPSA0MDsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBzZXF1ZW5jZU1l
dGhvZENoZWNrQ29uc3RhbnRTcGFjZSA9IDY7CisgICAgICAgIC8vIHNlcXVlbmNlR2V0QnlJZEhv
dFBhdGgKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBzZXF1ZW5jZUdldEJ5SWRIb3RQYXRoSW5z
dHJ1Y3Rpb25TcGFjZSA9IDM2OworICAgICAgICBzdGF0aWMgY29uc3QgaW50IHNlcXVlbmNlR2V0
QnlJZEhvdFBhdGhDb25zdGFudFNwYWNlID0gNTsKKyAgICAgICAgLy8gc2VxdWVuY2VHZXRCeUlk
U2xvd0Nhc2UKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBzZXF1ZW5jZUdldEJ5SWRTbG93Q2Fz
ZUluc3RydWN0aW9uU3BhY2UgPSAyNjsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBzZXF1ZW5j
ZUdldEJ5SWRTbG93Q2FzZUNvbnN0YW50U3BhY2UgPSAyOworICAgICAgICAvLyBzZXF1ZW5jZVB1
dEJ5SWQKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBzZXF1ZW5jZVB1dEJ5SWRJbnN0cnVjdGlv
blNwYWNlID0gMzY7CisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgc2VxdWVuY2VQdXRCeUlkQ29u
c3RhbnRTcGFjZSA9IDU7CisKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldEdl
dEJ5SWRQcm9wZXJ0eU1hcE9mZnNldDEgPSAyMDsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBw
YXRjaE9mZnNldEdldEJ5SWRQcm9wZXJ0eU1hcE9mZnNldDIgPSAyNjsKKworICAgICAgICBzdGF0
aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0UHV0QnlJZFByb3BlcnR5TWFwT2Zmc2V0MSA9IDIwOwor
ICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0UHV0QnlJZFByb3BlcnR5TWFwT2Zm
c2V0MiA9IDI2OworCisjaWYgRU5BQkxFKE9QQ09ERV9TQU1QTElORykKKyAgICAgICAgc3RhdGlj
IGNvbnN0IGludCBwYXRjaE9mZnNldEdldEJ5SWRTbG93Q2FzZUNhbGwgPSAwOyAvLyBGSU1YRQor
I2Vsc2UKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldEdldEJ5SWRTbG93Q2Fz
ZUNhbGwgPSAyMjsKKyNlbmRpZgorICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0
T3BDYWxsQ29tcGFyZVRvSnVtcCA9IDQ7CisKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRj
aE9mZnNldE1ldGhvZENoZWNrUHJvdG9PYmogPSAxMjsKKyAgICAgICAgc3RhdGljIGNvbnN0IGlu
dCBwYXRjaE9mZnNldE1ldGhvZENoZWNrUHJvdG9TdHJ1Y3QgPSAyMDsKKyAgICAgICAgc3RhdGlj
IGNvbnN0IGludCBwYXRjaE9mZnNldE1ldGhvZENoZWNrUHV0RnVuY3Rpb24gPSAzMjsKICNlbHNl
CiAjZXJyb3IgIkpTVkFMVUUzMl82NCBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgcGxhdGZvcm0uIgog
I2VuZGlmCkBAIC02NjYsNiArNzA4LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAjaWYgKGRlZmluZWQo
QVNTRU1CTEVSX0hBU19DT05TVEFOVF9QT09MKSAmJiBBU1NFTUJMRVJfSEFTX0NPTlNUQU5UX1BP
T0wpCiAjZGVmaW5lIEJFR0lOX1VOSU5URVJSVVBURURfU0VRVUVOQ0UobmFtZSkgZG8geyBiZWdp
blVuaW50ZXJydXB0ZWRTZXF1ZW5jZShuYW1lICMjIEluc3RydWN0aW9uU3BhY2UsIG5hbWUgIyMg
Q29uc3RhbnRTcGFjZSk7IH0gd2hpbGUgKGZhbHNlKQogI2RlZmluZSBFTkRfVU5JTlRFUlJVUFRF
RF9TRVFVRU5DRShuYW1lKSBkbyB7IGVuZFVuaW50ZXJydXB0ZWRTZXF1ZW5jZShuYW1lICMjIElu
c3RydWN0aW9uU3BhY2UsIG5hbWUgIyMgQ29uc3RhbnRTcGFjZSk7IH0gd2hpbGUgKGZhbHNlKQor
I2lmIENQVShTSDQpCisjZGVmaW5lIEVORF9VTklOVEVSUlVQVEVEX1NFUVVFTkNFUyhuYW1lLCBl
eHRyYUksIGV4dHJhQykgZW5kVW5pbnRlcnJ1cHRlZFNlcXVlbmNlKG5hbWUgIyMgSW5zdHJ1Y3Rp
b25TcGFjZSArIGV4dHJhSSwgbmFtZSAjIyBDb25zdGFudFNwYWNlICsgZXh0cmFDKQorI2VuZGlm
CiAKICAgICAgICAgdm9pZCBiZWdpblVuaW50ZXJydXB0ZWRTZXF1ZW5jZShpbnQsIGludCk7CiAg
ICAgICAgIHZvaWQgZW5kVW5pbnRlcnJ1cHRlZFNlcXVlbmNlKGludCwgaW50KTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lTWV0aG9kcy5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVNZXRob2RzLmgKaW5kZXggZWYyZjMzYy4uMGYy
ZTg2NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVNZXRo
b2RzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVNZXRob2RzLmgK
QEAgLTEyMyw2ICsxMjMsMTMgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YmVnaW5VbmludGVy
cnVwdGVkU2VxdWVuY2UoaW50IGluc25TcGFjZSwgaW50IGNvbnN0U3BhY2UKIAogICAgIGVuc3Vy
ZVNwYWNlKGluc25TcGFjZSwgY29uc3RTcGFjZSk7CiAKKyNlbGlmIENQVShTSDQpCisjaWZuZGVm
IE5ERUJVRworICAgIGluc25TcGFjZSArPSBzaXplb2YoU0g0V29yZCk7CisgICAgY29uc3RTcGFj
ZSArPSBzaXplb2YodWludDY0X3QpOworI2VuZGlmCisKKyAgICBtX2Fzc2VtYmxlci5lbnN1cmVT
cGFjZShpbnNuU3BhY2UgKyBtX2Fzc2VtYmxlci5tYXhJbnN0cnVjdGlvblNpemUgKyAyLCBjb25z
dFNwYWNlICsgOCk7CiAjZW5kaWYKIAogI2lmIGRlZmluZWQoQVNTRU1CTEVSX0hBU19DT05TVEFO
VF9QT09MKSAmJiBBU1NFTUJMRVJfSEFTX0NPTlNUQU5UX1BPT0wKQEAgLTE2Nyw2ICsxNzQsMjIg
QEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6cmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1
cm4oQWRkcmVzcyBhZGRyZXNzKQogewogICAgIGxvYWRQdHIoYWRkcmVzcywgbGlua1JlZ2lzdGVy
KTsKIH0KKyNlbGlmIENQVShTSDQpCisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OnByZXNlcnZl
UmV0dXJuQWRkcmVzc0FmdGVyQ2FsbChSZWdpc3RlcklEIHJlZykKK3sKKyAgICBtX2Fzc2VtYmxl
ci5zdHNwcihyZWcpOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpyZXN0b3JlUmV0dXJu
QWRkcmVzc0JlZm9yZVJldHVybihSZWdpc3RlcklEIHJlZykKK3sKKyAgICBtX2Fzc2VtYmxlci5s
ZHNwcihyZWcpOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpyZXN0b3JlUmV0dXJuQWRk
cmVzc0JlZm9yZVJldHVybihBZGRyZXNzIGFkZHJlc3MpCit7CisgICAgbG9hZFB0ckxpbmtSZWco
YWRkcmVzcyk7Cit9CiAKICNlbGlmIENQVShNSVBTKQogCkBAIC0yMTcsNiArMjQwLDggQEAgQUxX
QVlTX0lOTElORSB2b2lkIEpJVDo6cmVzdG9yZUFyZ3VtZW50UmVmZXJlbmNlRm9yVHJhbXBvbGlu
ZSgpCiAgICAgYWRkUHRyKEltbTMyKHNpemVvZih2b2lkKikpLCBzdGFja1BvaW50ZXJSZWdpc3Rl
ciwgZmlyc3RBcmd1bWVudFJlZ2lzdGVyKTsKICNlbGlmIENQVShBUk0pCiAgICAgbW92ZShzdGFj
a1BvaW50ZXJSZWdpc3RlciwgZmlyc3RBcmd1bWVudFJlZ2lzdGVyKTsKKyNlbGlmIENQVShTSDQp
CisgICAgbW92ZShzdGFja1BvaW50ZXJSZWdpc3RlciwgZmlyc3RBcmd1bWVudFJlZ2lzdGVyKTsK
ICNlbmRpZgogICAgIC8vIEluIHRoZSB0cmFtcG9saW5lIG9uIHg4Ni02NCwgdGhlIGZpcnN0IGFy
Z3VtZW50IHJlZ2lzdGVyIGlzIG5vdCBvdmVyd3JpdHRlbi4KIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAppbmRleCBlYmZkNzg3Li43OGM4YzQ0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCkBAIC0y
NDUsNyArMjQ1LDI5IEBAIEpJVDo6TGFiZWwgSklUOjpwcml2YXRlQ29tcGlsZUNUSU5hdGl2ZUNh
bGwoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBib29sIGlzQ29uCiAgICAgY2FsbChBZGRyZXNz
KHJlZ1QyLCBleGVjdXRhYmxlT2Zmc2V0VG9GdW5jdGlvbikpOwogCiAgICAgcmVzdG9yZVJldHVy
bkFkZHJlc3NCZWZvcmVSZXR1cm4ocmVnVDMpOworI2VsaWYgQ1BVKFNINCkKKyAgICAvLyBMb2Fk
IGNhbGxlciBmcmFtZSdzIHNjb3BlIGNoYWluIGludG8gdGhpcyBjYWxsZnJhbWUgc28gdGhhdCB3
aGF0ZXZlciB3ZSBjYWxsIGNhbgorICAgIC8vIGdldCB0byBpdHMgZ2xvYmFsIGRhdGEuCisgICAg
ZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoUmVnaXN0ZXJGaWxlOjpDYWxsZXJGcmFtZSwg
cmVnVDIpOworICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKFJlZ2lzdGVyRmlsZTo6
U2NvcGVDaGFpbiwgcmVnVDEsIHJlZ1QyKTsKKyAgICBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIo
cmVnVDEsIFJlZ2lzdGVyRmlsZTo6U2NvcGVDaGFpbik7CisKKyAgICBwcmVzZXJ2ZVJldHVybkFk
ZHJlc3NBZnRlckNhbGwocmVnVDMpOyAvLyBDYWxsZWUgcHJlc2VydmVkCisgICAgZW1pdFB1dFRv
Q2FsbEZyYW1lSGVhZGVyKHJlZ1QzLCBSZWdpc3RlckZpbGU6OlJldHVyblBDKTsKIAorICAgIC8v
IENhbGxpbmcgY29udmVudGlvbjogICAgICBmKHIwID09IHJlZ1Q0LCByMSA9PSByZWdUNSwgLi4u
KTsKKyAgICAvLyBIb3N0IGZ1bmN0aW9uIHNpZ25hdHVyZTogZihFeGVjU3RhdGUqKTsKKyAgICBt
b3ZlKGNhbGxGcmFtZVJlZ2lzdGVyLCByZWdUNCk7CisKKyAgICBlbWl0R2V0RnJvbUNhbGxGcmFt
ZUhlYWRlclB0cihSZWdpc3RlckZpbGU6OkNhbGxlZSwgcmVnVDUpOworICAgIG1vdmUocmVnVDIs
IGNhbGxGcmFtZVJlZ2lzdGVyKTsgLy8gRWFnZXJseSByZXN0b3JlIGNhbGxlciBmcmFtZSByZWdp
c3RlciB0byBhdm9pZCBsb2FkaW5nIGZyb20gc3RhY2suCisgICAgbG9hZFB0cihBZGRyZXNzKHJl
Z1Q1LCBPQkpFQ1RfT0ZGU0VUT0YoSlNGdW5jdGlvbiwgbV9leGVjdXRhYmxlKSksIHJlZ1QyKTsK
KworICAgIGxvYWQzMihyZWdUMiwgZXhlY3V0YWJsZU9mZnNldFRvRnVuY3Rpb24sIHJlZ1QwKTsK
KyAgICBtX2Fzc2VtYmxlci5icmFuY2goSlNSX09QQ09ERSwgcmVnVDApOworICAgIG1fYXNzZW1i
bGVyLm5vcCgpOworCisgICAgcmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4ocmVnVDMp
OwogI2VsaWYgQ1BVKE1JUFMpCiAgICAgLy8gTG9hZCBjYWxsZXIgZnJhbWUncyBzY29wZSBjaGFp
biBpbnRvIHRoaXMgY2FsbGZyYW1lIHNvIHRoYXQgd2hhdGV2ZXIgd2UgY2FsbCBjYW4KICAgICAv
LyBnZXQgdG8gaXRzIGdsb2JhbCBkYXRhLgpAQCAtMzk0LDcgKzQxNiwyOCBAQCBKSVQ6OkNvZGVQ
dHIgSklUOjpwcml2YXRlQ29tcGlsZUNUSU5hdGl2ZUNhbGwoUGFzc1JlZlB0cjxFeGVjdXRhYmxl
UG9vbD4gZXhlY3V0YQogICAgIGFkZFB0cihJbW0zMigxNiksIHN0YWNrUG9pbnRlclJlZ2lzdGVy
KTsKIAogICAgIHJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKHJlZ1QzKTsKKyNlbGlm
IENQVShTSDQpCisgICAgLy8gTG9hZCBjYWxsZXIgZnJhbWUncyBzY29wZSBjaGFpbiBpbnRvIHRo
aXMgY2FsbGZyYW1lIHNvIHRoYXQgd2hhdGV2ZXIgd2UgY2FsbCBjYW4KKyAgICAvLyBnZXQgdG8g
aXRzIGdsb2JhbCBkYXRhLgorICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKFJlZ2lz
dGVyRmlsZTo6Q2FsbGVyRnJhbWUsIHJlZ1QyKTsKKyAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhl
YWRlclB0cihSZWdpc3RlckZpbGU6OlNjb3BlQ2hhaW4sIHJlZ1QxLCByZWdUMik7CisgICAgZW1p
dFB1dFRvQ2FsbEZyYW1lSGVhZGVyKHJlZ1QxLCBSZWdpc3RlckZpbGU6OlNjb3BlQ2hhaW4pOwor
CisgICAgcHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKHJlZ1QzKTsgLy8gQ2FsbGVlIHBy
ZXNlcnZlZAorICAgIGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihyZWdUMywgUmVnaXN0ZXJGaWxl
OjpSZXR1cm5QQyk7CisKKyAgICAvLyBDYWxsaW5nIGNvbnZlbnRpb246ICAgICAgZihyMCA9PSBy
ZWdUNCwgcjEgPT0gcmVnVDUsIC4uLik7CisgICAgLy8gSG9zdCBmdW5jdGlvbiBzaWduYXR1cmU6
IGYoRXhlY1N0YXRlKik7CisgICAgbW92ZShjYWxsRnJhbWVSZWdpc3RlciwgcmVnVDQpOworCisg
ICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoUmVnaXN0ZXJGaWxlOjpDYWxsZWUsIHJl
Z1Q1KTsKKyAgICBtb3ZlKHJlZ1QyLCBjYWxsRnJhbWVSZWdpc3Rlcik7IC8vIEVhZ2VybHkgcmVz
dG9yZSBjYWxsZXIgZnJhbWUgcmVnaXN0ZXIgdG8gYXZvaWQgbG9hZGluZyBmcm9tIHN0YWNrLgor
ICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUNSwgT0JKRUNUX09GRlNFVE9GKEpTRnVuY3Rpb24sIG1f
ZXhlY3V0YWJsZSkpLCByZWdUMik7CiAKKyAgICAvLyBjYWxsIHRoZSBmdW5jdGlvbgorICAgIG5h
dGl2ZUNhbGwgPSBjYWxsKCk7CisKKyAgICByZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVy
bihyZWdUMyk7CiAjZWxpZiBFTkFCTEUoSklUX09QVElNSVpFX05BVElWRV9DQUxMKQogI2Vycm9y
ICJKSVRfT1BUSU1JWkVfTkFUSVZFX0NBTEwgbm90IHlldCBzdXBwb3J0ZWQgb24gdGhpcyBwbGF0
Zm9ybS4iCiAjZWxzZQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQ
cm9wZXJ0eUFjY2VzczMyXzY0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJv
cGVydHlBY2Nlc3MzMl82NC5jcHAKaW5kZXggNzM1YzE5ZC4uZWFiYzY0YyAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCkBA
IC00NzUsNyArNDc1LDE2IEBAIHZvaWQgSklUOjpjb21waWxlR2V0QnlJZFNsb3dDYXNlKGludCBk
c3QsIGludCBiYXNlLCBJZGVudGlmaWVyKiBpZGVudCwgVmVjdG9yPFNsCiAgICAgc3R1YkNhbGwu
YWRkQXJndW1lbnQoSW1tUHRyKGlkZW50KSk7CiAgICAgQ2FsbCBjYWxsID0gc3R1YkNhbGwuY2Fs
bChkc3QpOwogICAgIAorI2lmIENQVShTSDQpCisgICAgaWYgKChkc3QgPj0gMCkgJiYgKGRzdCA8
PSA3KSkKKyAgICAgICAgRU5EX1VOSU5URVJSVVBURURfU0VRVUVOQ0Uoc2VxdWVuY2VHZXRCeUlk
U2xvd0Nhc2UpOworICAgIGVsc2UgaWYgKChkc3QgPiAxNSkgfHwgKGRzdCA8IC0xNikpCisgICAg
ICAgIEVORF9VTklOVEVSUlVQVEVEX1NFUVVFTkNFUyhzZXF1ZW5jZUdldEJ5SWRTbG93Q2FzZSwg
OCwgMik7CisgICAgZWxzZQorICAgICAgICBFTkRfVU5JTlRFUlJVUFRFRF9TRVFVRU5DRVMoc2Vx
dWVuY2VHZXRCeUlkU2xvd0Nhc2UsIDgsIDApOworI2Vsc2UKICAgICBFTkRfVU5JTlRFUlJVUFRF
RF9TRVFVRU5DRShzZXF1ZW5jZUdldEJ5SWRTbG93Q2FzZSk7CisjZW5kaWYKICAgICAKICAgICBB
U1NFUlRfSklUX09GRlNFVChkaWZmZXJlbmNlQmV0d2Vlbihjb2xkUGF0aEJlZ2luLCBjYWxsKSwg
cGF0Y2hPZmZzZXRHZXRCeUlkU2xvd0Nhc2VDYWxsKTsKICAgICAKQEAgLTYyNCw3ICs2MzMsNyBA
QCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeUlkVHJhbnNpdGlvbihTdHJ1Y3R1cmVTdHVi
SW5mbyogc3R1YkluZm8sIFN0cnVjdHVyZQogICAgIGFkZDMyKEltbTMyKDEpLCBBYnNvbHV0ZUFk
ZHJlc3MobmV3U3RydWN0dXJlLT5hZGRyZXNzT2ZDb3VudCgpKSk7CiAgICAgc3RvcmVQdHIoSW1t
UHRyKG5ld1N0cnVjdHVyZSksIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0
KCkpKTsKICAgICAKLSNpZiBDUFUoTUlQUykKKyNpZiBDUFUoTUlQUykgfHwgQ1BVKFNINCkKICAg
ICAvLyBGb3IgTUlQUywgd2UgZG9uJ3QgYWRkIHNpemVvZih2b2lkKikgdG8gdGhlIHN0YWNrIG9m
ZnNldC4KICAgICBsb2FkMzIoQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3RlciwgT0JKRUNUX09G
RlNFVE9GKEpJVFN0YWNrRnJhbWUsIGFyZ3NbMl0pICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUs
IHUuYXNCaXRzLnBheWxvYWQpKSwgcmVnVDMpOwogICAgIGxvYWQzMihBZGRyZXNzKHN0YWNrUG9p
bnRlclJlZ2lzdGVyLCBPQkpFQ1RfT0ZGU0VUT0YoSklUU3RhY2tGcmFtZSwgYXJnc1syXSkgKyBP
QkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksIHJlZ1QyKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAKaW5kZXggYTM4ZjAxZS4uYjNmYmI5YSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAKQEAgLTMxNCw3ICszMTQsNzcgQEAgZXh0
ZXJuICJDIiB7CiAjZGVmaW5lIEVOQUJMRV9QUk9GSUxFUl9SRUZFUkVOQ0VfT0ZGU0VUIDk2CiAj
ZGVmaW5lIEdMT0JBTF9EQVRBX09GRlNFVCAgICAgICAgIDEwMAogI2RlZmluZSBTVEFDS19MRU5H
VEggICAgICAgICAgICAgICAxMDQKKyNlbGlmIENQVShTSDQpCisjZGVmaW5lIFNZTUJPTF9TVFJJ
TkcobmFtZSkgI25hbWUKKy8qIGNvZGUgKHI0KSwgUmVnaXN0ZXJGaWxlKiAocjUpLCBDYWxsRnJh
bWUqIChyNiksIEpTVmFsdWUqIGV4Y2VwdGlvbiAocjcpLCBQcm9maWxlcioqKHNwKSwgSlNHbG9i
YWxEYXRhIChzcCkqLworYXNtKAorIi5hbGlnbiAyIiAiXG4iCisiLmdsb2JsICIgU1lNQk9MX1NU
UklORyhjdGlUcmFtcG9saW5lKSAiXG4iCitTWU1CT0xfU1RSSU5HKGN0aVRyYW1wb2xpbmUpICI6
IiAiXG4iCisgICAgIm1vdi5sIHI3LCBALXIxNSIgIlxuIgorICAgICJtb3YubCByNiwgQC1yMTUi
ICJcbiIKKyAgICAibW92LmwgcjUsIEAtcjE1IiAiXG4iCisgICAgIm1vdi5sIHI4LCBALXIxNSIg
IlxuIgorICAgICJtb3YgIzEyNywgcjgiICJcbiIKKyAgICAibW92LmwgcjE0LCBALXIxNSIgIlxu
IgorICAgICJzdHMubCBwciwgQC1yMTUiICJcbiIKKyAgICAibW92LmwgcjEzLCBALXIxNSIgIlxu
IgorICAgICJtb3YubCByMTEsIEAtcjE1IiAiXG4iCisgICAgIm1vdi5sIHIxMCwgQC1yMTUiICJc
biIKKyAgICAiYWRkICMtNjAsIHIxNSIgIlxuIgorICAgICJtb3YgcjYsIHIxNCIgIlxuIgorICAg
ICJqc3IgQHI0IiAiXG4iCisgICAgIm5vcCIgIlxuIgorICAgICJhZGQgIzYwLCByMTUiICJcbiIK
KyAgICAibW92LmwgQHIxNSsscjEwIiAiXG4iCisgICAgIm1vdi5sIEByMTUrLHIxMSIgIlxuIgor
ICAgICJtb3YubCBAcjE1KyxyMTMiICJcbiIKKyAgICAibGRzLmwgQHIxNSsscHIiICJcbiIKKyAg
ICAibW92LmwgQHIxNSsscjE0IiAiXG4iCisgICAgIm1vdi5sIEByMTUrLHI4IiAiXG4iCisgICAg
ImFkZCAjMTIsIHIxNSIgIlxuIgorICAgICJydHMiICJcbiIKKyAgICAibm9wIiAiXG4iCispOwor
Cithc20oCisiLmFsaWduIDIiICJcbiIKKyIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5HKGN0aVZNVGhy
b3dUcmFtcG9saW5lKSAiXG4iCitTWU1CT0xfU1RSSU5HKGN0aVZNVGhyb3dUcmFtcG9saW5lKSAi
OiIgIlxuIgorICAgICJtb3YubCAuTDIiU1lNQk9MX1NUUklORyhjdGlfdm1fdGhyb3cpIixyMCIg
IlxuIgorICAgICJtb3YgcjE1LCByNCIgIlxuIgorICAgICJtb3YubCBAKHIwLHIxMikscjExIiAi
XG4iCisgICAgImpzciBAcjExIiAiXG4iCisgICAgIm5vcCIgIlxuIgorICAgICJhZGQgIzYwLCBy
MTUiICJcbiIKKyAgICAibW92LmwgQHIxNSsscjEwIiAiXG4iCisgICAgIm1vdi5sIEByMTUrLHIx
MSIgIlxuIgorICAgICJtb3YubCBAcjE1KyxyMTMiICJcbiIKKyAgICAibGRzLmwgQHIxNSsscHIi
ICJcbiIKKyAgICAibW92LmwgQHIxNSsscjE0IiAiXG4iCisgICAgIm1vdi5sIEByMTUrLHI4IiAi
XG4iCisgICAgImFkZCAjMTIsIHIxNSIgIlxuIgorICAgICJydHMiICJcbiIKKyAgICAibm9wIiAi
XG4iCisgICAgIi5hbGlnbiAyIiAiXG4iCisgICAgIi5MMiJTWU1CT0xfU1RSSU5HKGN0aV92bV90
aHJvdykiOi5sb25nICIgU1lNQk9MX1NUUklORyhjdGlfdm1fdGhyb3cpIkBHT1QgXG4iCispOwog
Cithc20oCisiLmFsaWduIDIiICJcbiIKKyIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5HKGN0aU9wVGhy
b3dOb3RDYXVnaHQpICJcbiIKK1NZTUJPTF9TVFJJTkcoY3RpT3BUaHJvd05vdENhdWdodCkgIjoi
ICJcbiIKKyAgICAiYWRkICM2MCwgcjE1IiAiXG4iCisgICAgIm1vdi5sIEByMTUrLHIxMCIgIlxu
IgorICAgICJtb3YubCBAcjE1KyxyMTEiICJcbiIKKyAgICAibW92LmwgQHIxNSsscjEzIiAiXG4i
CisgICAgImxkcy5sIEByMTUrLHByIiAiXG4iCisgICAgIm1vdi5sIEByMTUrLHIxNCIgIlxuIgor
ICAgICJtb3YubCBAcjE1KyxyOCIgIlxuIgorICAgICJhZGQgIzEyLCByMTUiICJcbiIKKyAgICAi
cnRzIiAiXG4iCisgICAgIm5vcCIgIlxuIgorKTsKICNlbHNlCiAgICAgI2Vycm9yICJKSVQgbm90
IHN1cHBvcnRlZCBvbiB0aGlzIHBsYXRmb3JtLiIKICNlbmRpZgpAQCAtMTE1Niw2ICsxMjI2LDI5
IEBAIE1TVkMoKQogTVNWQ19FTkQoICAgIEVORCkKICovCiAKKyNlbGlmIENQVShTSDQpCisjZGVm
aW5lIERFRklORV9TVFVCX0ZVTkNUSU9OKHJ0eXBlLCBvcCkgXAorICAgIGV4dGVybiAiQyIgeyBc
CisgICAgICAgIHJ0eXBlIEpJVFN0dWJUaHVua2VkXyMjb3AoU1RVQl9BUkdTX0RFQ0xBUkFUSU9O
KTsgXAorICAgIH07IFwKKyAgICBhc20gdm9sYXRpbGUoIFwKKyAgICAiLmFsaWduIDIiICJcbiIg
XAorICAgICIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5HKGN0aV8jI29wKSAiXG4iIFwKKyAgICBTWU1C
T0xfU1RSSU5HKGN0aV8jI29wKSAiOiIgIlxuIiBcCisgICAgInN0cyBwciwgcjExIiAiXG4iIFwK
KyAgICAibW92LmwgcjExLCBAKDB4MzgsIHIxNSkiICJcbiIgXAorICAgICJtb3YubCAuTDIiU1lN
Qk9MX1NUUklORyhKSVRTdHViVGh1bmtlZF8jI29wKSIscjAiICJcbiIgXAorICAgICJtb3YubCBA
KHIwLHIxMikscjExIiAiXG4iIFwKKyAgICAianNyIEByMTEiICJcbiIgXAorICAgICJub3AiICJc
biIgXAorICAgICJtb3YubCBAKDB4MzgsIHIxNSksIHIxMSAiICJcbiIgXAorICAgICJsZHMgcjEx
LCBwciAiICJcbiIgXAorICAgICJydHMiICJcbiIgXAorICAgICJub3AiICJcbiIgXAorICAgICIu
YWxpZ24gMiIgIlxuIiBcCisgICAgIi5MMiJTWU1CT0xfU1RSSU5HKEpJVFN0dWJUaHVua2VkXyMj
b3ApIjoubG9uZyAiIFNZTUJPTF9TVFJJTkcoSklUU3R1YlRodW5rZWRfIyNvcCkiQEdPVCBcbiIg
XAorICAgICk7IFwKKyAgICBydHlwZSBKSVRTdHViVGh1bmtlZF8jI29wKFNUVUJfQVJHU19ERUNM
QVJBVElPTikKICNlbHNlCiAjZGVmaW5lIERFRklORV9TVFVCX0ZVTkNUSU9OKHJ0eXBlLCBvcCkg
cnR5cGUgSklUX1NUVUIgY3RpXyMjb3AoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKQogI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmgKaW5kZXggYWY2ZTEzZi4uNGE5MWQ1OCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuaApAQCAtMjI5LDYgKzIyOSwyNyBAQCBuYW1l
c3BhY2UgSlNDIHsKIAogICAgICAgICBSZXR1cm5BZGRyZXNzUHRyKiByZXR1cm5BZGRyZXNzU2xv
dCgpIHsgcmV0dXJuICZ0aHVua1JldHVybkFkZHJlc3M7IH0KICAgICB9OworI2VsaWYgQ1BVKFNI
NCkKKyAgICBzdHJ1Y3QgSklUU3RhY2tGcmFtZSB7CisgICAgICAgIEpJVFN0dWJBcmcgcGFkZGlu
ZzsgLy8gVW51c2VkCisgICAgICAgIEpJVFN0dWJBcmcgYXJnc1s2XTsKKworICAgICAgICBSZXR1
cm5BZGRyZXNzUHRyIHRodW5rUmV0dXJuQWRkcmVzczsKKyAgICAgICAgdm9pZCogc2F2ZWRSMTA7
CisgICAgICAgIHZvaWQqIHNhdmVkUjExOworICAgICAgICB2b2lkKiBzYXZlZFIxMzsKKyAgICAg
ICAgdm9pZCogc2F2ZWRSUFI7CisgICAgICAgIHZvaWQqIHNhdmVkUjE0OworICAgICAgICB2b2lk
KiBzYXZlZFRpbWVvdXRSZWc7CisKKyAgICAgICAgUmVnaXN0ZXJGaWxlKiByZWdpc3RlckZpbGU7
CisgICAgICAgIENhbGxGcmFtZSogY2FsbEZyYW1lOworICAgICAgICBKU1ZhbHVlKiBleGNlcHRp
b247CisgICAgICAgIFByb2ZpbGVyKiogZW5hYmxlZFByb2ZpbGVyUmVmZXJlbmNlOworICAgICAg
ICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGE7CisKKyAgICAgICAgUmV0dXJuQWRkcmVzc1B0ciog
cmV0dXJuQWRkcmVzc1Nsb3QoKSB7IHJldHVybiAmdGh1bmtSZXR1cm5BZGRyZXNzOyB9CisgICAg
fTsKICNlbHNlCiAjZXJyb3IgIkpJVFN0YWNrRnJhbWUgbm90IGRlZmluZWQgZm9yIHRoaXMgcGxh
dGZvcm0uIgogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pT
SW50ZXJmYWNlSklULmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pTSW50ZXJmYWNlSklU
LmgKaW5kZXggMzViYjNiZi4uNTlmZGNmYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KU0ludGVyZmFjZUpJVC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SlNJbnRlcmZhY2VKSVQuaApAQCAtMTU0LDYgKzE1NCwzMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgc3RhdGljIGNvbnN0IEZQUmVnaXN0ZXJJRCBmcFJlZ1QxID0gTUlQU1JlZ2lzdGVyczo6
ZjY7CiAgICAgICAgIHN0YXRpYyBjb25zdCBGUFJlZ2lzdGVySUQgZnBSZWdUMiA9IE1JUFNSZWdp
c3RlcnM6OmY4OwogICAgICAgICBzdGF0aWMgY29uc3QgRlBSZWdpc3RlcklEIGZwUmVnVDMgPSBN
SVBTUmVnaXN0ZXJzOjpmMTA7CisjZWxpZiBDUFUoU0g0KQorICAgICAgICBzdGF0aWMgY29uc3Qg
UmVnaXN0ZXJJRCB0aW1lb3V0Q2hlY2tSZWdpc3RlciA9IFNINFJlZ2lzdGVyczo6cjg7CisgICAg
ICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIGNhbGxGcmFtZVJlZ2lzdGVyID0gU0g0UmVnaXN0
ZXJzOjpmcDsKKworICAgICAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCByZWdUMCA9IFNINFJl
Z2lzdGVyczo6cjA7CisgICAgICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIHJlZ1QxID0gU0g0
UmVnaXN0ZXJzOjpyMTsKKyAgICAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgcmVnVDIgPSBT
SDRSZWdpc3RlcnM6OnIyOworICAgICAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCByZWdUMyA9
IFNINFJlZ2lzdGVyczo6cjEwOworICAgICAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCByZWdU
NCA9IFNINFJlZ2lzdGVyczo6cjQ7CisgICAgICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIHJl
Z1Q1ID0gU0g0UmVnaXN0ZXJzOjpyNTsKKyAgICAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQg
cmVnVDYgPSBTSDRSZWdpc3RlcnM6OnI2OworICAgICAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJ
RCByZWdUNyA9IFNINFJlZ2lzdGVyczo6cjc7CisgICAgICAgIHN0YXRpYyBjb25zdCBSZWdpc3Rl
cklEIGZpcnN0QXJndW1lbnRSZWdpc3RlciA9cmVnVDQ7CisKKyAgICAgICAgc3RhdGljIGNvbnN0
IFJlZ2lzdGVySUQgcmV0dXJuVmFsdWVSZWdpc3RlciA9IFNINFJlZ2lzdGVyczo6cjA7CisgICAg
ICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIGNhY2hlZFJlc3VsdFJlZ2lzdGVyID0gU0g0UmVn
aXN0ZXJzOjpyMDsKKworICAgICAgICBzdGF0aWMgY29uc3QgRlBSZWdpc3RlcklEIGZwUmVnVDAg
ID0gU0g0UmVnaXN0ZXJzOjpmcjA7CisgICAgICAgIHN0YXRpYyBjb25zdCBGUFJlZ2lzdGVySUQg
ZnBSZWdUMSAgPSBTSDRSZWdpc3RlcnM6OmZyMjsKKyAgICAgICAgc3RhdGljIGNvbnN0IEZQUmVn
aXN0ZXJJRCBmcFJlZ1QyICA9IFNINFJlZ2lzdGVyczo6ZnI0OworICAgICAgICBzdGF0aWMgY29u
c3QgRlBSZWdpc3RlcklEIGZwUmVnVDMgID0gU0g0UmVnaXN0ZXJzOjpmcjY7CisgICAgICAgIHN0
YXRpYyBjb25zdCBGUFJlZ2lzdGVySUQgZnBSZWdUNCAgPSBTSDRSZWdpc3RlcnM6OmZyODsKKyAg
ICAgICAgc3RhdGljIGNvbnN0IEZQUmVnaXN0ZXJJRCBmcFJlZ1Q1ICA9IFNINFJlZ2lzdGVyczo6
ZnIxMDsKKyAgICAgICAgc3RhdGljIGNvbnN0IEZQUmVnaXN0ZXJJRCBmcFJlZ1Q2ICA9IFNINFJl
Z2lzdGVyczo6ZnIxMjsKKyAgICAgICAgc3RhdGljIGNvbnN0IEZQUmVnaXN0ZXJJRCBmcFJlZ1Q3
ICA9IFNINFJlZ2lzdGVyczo6ZnIxNDsKICNlbHNlCiAjZXJyb3IgIkpJVCBub3Qgc3VwcG9ydGVk
IG9uIHRoaXMgcGxhdGZvcm0uIgogI2VuZGlmCi0tIAoxLjcuMi4zCgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>86942</attachid>
            <date>2011-03-25 07:59:30 -0700</date>
            <delta_ts>2011-04-08 08:19:54 -0700</delta_ts>
            <desc>Enable JIT build for sh4</desc>
            <filename>0003-Enable-JIT-support-for-sh4-platforms.patch</filename>
            <type>text/plain</type>
            <size>1895</size>
            <attacher name="thouraya">thouraya.andolsi</attacher>
            
              <data encoding="base64">RnJvbSA1N2M1NzcwNDZkZDg5ZmU5ZDhkNDU3YWM1NWM0YWUyYmMwYTlkNDEzIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBUaG91cmF5YSBBTkRPTFNJIDx0aG91cmF5YS5hbmRvbHNpQHN0
LmNvbT4KRGF0ZTogRnJpLCAyNSBNYXIgMjAxMSAxNTowMTo1MSArMDEwMApTdWJqZWN0OiBbUEFU
Q0ggMy8zXSBFbmFibGUgSklUIHN1cHBvcnQgZm9yIHNoNCBwbGF0Zm9ybXMuCgotLS0KIENoYW5n
ZUxvZyAgICB8ICAgMTAgKysrKysrKysrKwogY29uZmlndXJlLmFjIHwgICAxMyArKysrKysrKysr
KysrCiAyIGZpbGVzIGNoYW5nZWQsIDIzIGluc2VydGlvbnMoKyksIDAgZGVsZXRpb25zKC0pCgpk
aWZmIC0tZ2l0IGEvQ2hhbmdlTG9nIGIvQ2hhbmdlTG9nCmluZGV4IDJkNTE4Y2YuLmRlMzE3MWQg
MTAwNjQ0Ci0tLSBhL0NoYW5nZUxvZworKysgYi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAor
MjAxMS0wMy0yNSAgVGhvdXJheWEgQU5ET0xTSSAgPHRob3VyYXlhLmFuZG9sc2lAc3QuY29tPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFNINCBKSVQg
U1VQUE9SVC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTQ0MzI5LgorICAgICAgICBFbmFibGUgSklUIHN1cHBvcnQuCisKKyAgICAgICAgKiBjb25maWd1
cmUuYWM6CisKIDIwMTEtMDMtMjMgIEdlb3JnZSBHdW8gIDxHZW9yZ2UuR3VvQG5va2lhLmNvbT4K
IAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KZGlmZiAtLWdpdCBhL2NvbmZpZ3Vy
ZS5hYyBiL2NvbmZpZ3VyZS5hYwppbmRleCBhMDM0NWQxLi5kMjNjMWQ2IDEwMDY0NAotLS0gYS9j
b25maWd1cmUuYWMKKysrIGIvY29uZmlndXJlLmFjCkBAIC03OTAsNiArNzkwLDE0IEBAIGlmIHRl
c3QgIiRlbmFibGVfaml0IiA9ICJ5ZXMiOyB0aGVuCiAgICAgICAgICAgICAgICAgOzsKICAgICAg
ICAgICAgIGVzYWMKICAgICAgICAgOzsKKyAgICAgICAgc2g0KQorICAgICAgICAgICAgQUNfREVG
SU5FKFtFTkFCTEVfWUFSUl0sIFsxXSwgW0RlZmluZSB0byBlbmFibGUgWUFSUl0pCisgICAgICAg
ICAgICBBQ19ERUZJTkUoW0VOQUJMRV9ZQVJSX0pJVF0sIFsxXSwgW0RlZmluZSB0byBlbmFibGUg
WUFSUiBKSVRdKQorICAgICAgICAgICAgQUNfREVGSU5FKFtFTkFCTEVfSklUXSwgWzFdLCBbRGVm
aW5lIHRvIGVuYWJsZSBKSVRdKQorICAgICAgICAgICAgQUNfREVGSU5FKFtXVEZfVVNFX0pJVF9T
VFVCX0FSR1VNRU5UX1JFR0lTVEVSXSwgWzFdLCBbVXNlIHN0dWIgcmVnaXN0ZXJdKQorICAgICAg
ICAgICAgQUNfREVGSU5FKFtVU0VfU1lTVEVNX01BTExPQ10sIFsxXSwgW0RlZmluZSB0byB1c2Ug
c3lzdGVtIG1hbGxvY10pCisgICAgICAgICAgICBBQ19ERUZJTkUoW0VOQUJMRV9JTlRFUlBSRVRF
Ul0sIFsxXSwgW0RlZmluZSB0byBlbmFibGUgSU5URVJQUkVURVIgYnVpbGRdKQorICAgICAgICA7
OwogICAgICAgICAqKQogICAgICAgICAgICAgZW5hYmxlX2ppdD0ibm8gKENQVSAnJGhvc3RfY3B1
JyBub3Qgc3VwcG9ydGVkKSIKICAgICAgICAgOzsKQEAgLTg2NCw2ICs4NzIsMTEgQEAgY2FzZSAi
JHdpdGhfZm9udF9iYWNrZW5kIiBpbgogZXNhYwogQUNfTVNHX1JFU1VMVChbJHdpdGhfZm9udF9i
YWNrZW5kXSkKIAoraWYgdGVzdCAiJGhvc3RfY3B1IiA9ICJzaDQiOyB0aGVuCisgICBDWFhGTEFH
Uz0iJENYWEZMQUdTIC1taWVlZSAtdyIKKyAgIENGTEFHUz0iJENGTEFHUyAtbWllZWUgLXciCitm
aQorCiAjIEFkZCAnLWcnIGZsYWcgdG8gZ2NjIGlmIGl0J3MgZGVidWcgYnVpbGQKIGlmIHRlc3Qg
IiRlbmFibGVfZGVidWciID0gInllcyI7IHRoZW4KICAgIENYWEZMQUdTPSIkQ1hYRkxBR1MgLWci
Ci0tIAoxLjcuMi4zCgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>87170</attachid>
            <date>2011-03-28 11:19:12 -0700</date>
            <delta_ts>2011-03-31 03:53:54 -0700</delta_ts>
            <desc>YARR for SH4</desc>
            <filename>YARR_JIT_ADD_SH4.patch</filename>
            <type>text/plain</type>
            <size>125391</size>
            <attacher name="thouraya">thouraya.andolsi</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5hbSBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5hbQppbmRleCAzMWU3MGEwLi42YjI1YTdjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUuYW0KKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtCkBAIC05MSw2ICs5MSw5IEBAIGphdmFz
Y3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
TWFjcm9Bc3NlbWJsZXJYODZfNjQuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2LmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvTWFjcm9Bc3NlbWJsZXJTSDQuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9NYWNyb0Fzc2VtYmxlclNINC5jcHAgXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvU0g0QXNzZW1ibGVyLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
UmVwYXRjaEJ1ZmZlci5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1g4NkFz
c2VtYmxlci5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNw
cCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fzc2VtYmxl
ckJ1ZmZlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9Bc3NlbWJsZXJCdWZm
ZXIuaAppbmRleCBhOTBlZmM2Li4wNDU0YTk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL0Fzc2VtYmxlckJ1ZmZlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvQXNzZW1ibGVyQnVmZmVyLmgKQEAgLTExNCwyMSArMTE0LDYgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBwdXRJbnRVbmNoZWNrZWQodmFsdWUpOwogICAgICAg
ICB9CiAKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgSW50ZWdyYWxUeXBlPgotICAgICAgICB2
b2lkIHB1dEludGVncmFsKEludGVncmFsVHlwZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAg
ICAgaWYgKG1fc2l6ZSA+IG1fY2FwYWNpdHkgLSBzaXplb2YoSW50ZWdyYWxUeXBlKSkKLSAgICAg
ICAgICAgICAgICBncm93KCk7Ci0gICAgICAgICAgICBwdXRJbnRlZ3JhbFVuY2hlY2tlZCh2YWx1
ZSk7Ci0gICAgICAgIH0KLQotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJbnRlZ3JhbFR5cGU+
Ci0gICAgICAgIHZvaWQgcHV0SW50ZWdyYWxVbmNoZWNrZWQoSW50ZWdyYWxUeXBlIHZhbHVlKQot
ICAgICAgICB7Ci0gICAgICAgICAgICAqcmVpbnRlcnByZXRfY2FzdF9wdHI8SW50ZWdyYWxUeXBl
Kj4oJm1fYnVmZmVyW21fc2l6ZV0pID0gdmFsdWU7Ci0gICAgICAgICAgICBtX3NpemUgKz0gc2l6
ZW9mKEludGVncmFsVHlwZSk7Ci0gICAgICAgIH0KLQogICAgICAgICB2b2lkKiBkYXRhKCkgY29u
c3QKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIG1fYnVmZmVyOwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9Bc3NlbWJsZXJCdWZmZXJXaXRoQ29uc3Rh
bnRQb29sLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fzc2VtYmxlckJ1ZmZl
cldpdGhDb25zdGFudFBvb2wuaAppbmRleCA5YTk2MThmLi5jZWU1OTdlIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fzc2VtYmxlckJ1ZmZlcldpdGhDb25zdGFu
dFBvb2wuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fzc2VtYmxlckJ1
ZmZlcldpdGhDb25zdGFudFBvb2wuaApAQCAtODYsNiArODYsMTEgQEAgdGVtcGxhdGUgPGludCBt
YXhQb29sU2l6ZSwgaW50IGJhcnJpZXJTaXplLCBpbnQgbWF4SW5zdHJ1Y3Rpb25TaXplLCBjbGFz
cyBBc3NlbWIKIGNsYXNzIEFzc2VtYmxlckJ1ZmZlcldpdGhDb25zdGFudFBvb2w6IHB1YmxpYyBB
c3NlbWJsZXJCdWZmZXIgewogICAgIHR5cGVkZWYgU2VnbWVudGVkVmVjdG9yPHVpbnQzMl90LCA1
MTI+IExvYWRPZmZzZXRzOwogcHVibGljOgorICAgIHR5cGVkZWYgc3RydWN0IHsKKyAgICAgICAg
c2hvcnQgaGlnaDsKKyAgICAgICAgc2hvcnQgbG93OworICAgIH0gVHdvU2hvcnRzOworCiAgICAg
ZW51bSB7CiAgICAgICAgIFVuaXF1ZUNvbnN0LAogICAgICAgICBSZXVzYWJsZUNvbnN0LApAQCAt
MTcxLDYgKzE3NiwzNCBAQCBwdWJsaWM6CiAgICAgICAgIGNvcnJlY3REZWx0YXMoOCk7CiAgICAg
fQogCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSW50ZWdyYWxUeXBlPgorICAgIHZvaWQgcHV0SW50
ZWdyYWwoSW50ZWdyYWxUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKG1fc2l6ZSA+IG1f
Y2FwYWNpdHkgLSBzaXplb2YoSW50ZWdyYWxUeXBlKSkKKyAgICAgICAgICAgIGdyb3coKTsKKyAg
ICAgICAgcHV0SW50ZWdyYWxVbmNoZWNrZWQodmFsdWUpOworICAgIH0KKworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEludGVncmFsVHlwZT4KKyAgICB2b2lkIHB1dEludGVncmFsVW5jaGVja2VkKElu
dGVncmFsVHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgICpyZWludGVycHJldF9jYXN0X3B0cjxJ
bnRlZ3JhbFR5cGUqPigmbV9idWZmZXJbbV9zaXplXSkgPSB2YWx1ZTsKKyAgICAgICAgbV9zaXpl
ICs9IHNpemVvZihJbnRlZ3JhbFR5cGUpOworICAgIH0KKworICAgIHZvaWQgcHV0SW50ZWdyYWwo
VHdvU2hvcnRzIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKG1fc2l6ZSA+IG1fY2FwYWNpdHkg
LSBzaXplb2YoVHdvU2hvcnRzKSkKKyAgICAgICAgICAgIGdyb3coKTsKKyAgICAgICAgcHV0SW50
ZWdyYWxVbmNoZWNrZWQodmFsdWUpOworICAgIH0KKworICAgIHZvaWQgcHV0SW50ZWdyYWxVbmNo
ZWNrZWQoVHdvU2hvcnRzIHZhbHVlKQorICAgIHsKKyAgICAgICAgcHV0SW50ZWdyYWxVbmNoZWNr
ZWQodmFsdWUuaGlnaCk7CisgICAgICAgIHB1dEludGVncmFsVW5jaGVja2VkKHZhbHVlLmxvdyk7
CisgICAgfQorCiAgICAgaW50IHNpemUoKQogICAgIHsKICAgICAgICAgZmx1c2hJZk5vU3BhY2VG
b3IobWF4SW5zdHJ1Y3Rpb25TaXplLCBzaXplb2YodWludDY0X3QpKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAppbmRleCBmYTE2NWRlLi45
YWEyNzM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3Jv
QXNzZW1ibGVyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fz
c2VtYmxlci5oCkBAIC01MCw2ICs1MCwxMiBAQCBuYW1lc3BhY2UgSlNDIHsgdHlwZWRlZiBNYWNy
b0Fzc2VtYmxlclg4NiBNYWNyb0Fzc2VtYmxlckJhc2U7IH07CiAjaW5jbHVkZSAiTWFjcm9Bc3Nl
bWJsZXJYODZfNjQuaCIKIG5hbWVzcGFjZSBKU0MgeyB0eXBlZGVmIE1hY3JvQXNzZW1ibGVyWDg2
XzY0IE1hY3JvQXNzZW1ibGVyQmFzZTsgfTsKIAorI2VsaWYgQ1BVKFNINCkKKyNpbmNsdWRlICJN
YWNyb0Fzc2VtYmxlclNINC5oIgorbmFtZXNwYWNlIEpTQyB7Cit0eXBlZGVmIE1hY3JvQXNzZW1i
bGVyU0g0IE1hY3JvQXNzZW1ibGVyQmFzZTsKK307CisKICNlbHNlCiAjZXJyb3IgIlRoZSBNYWNy
b0Fzc2VtYmxlciBpcyBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgcGxhdGZvcm0uIgogI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVy
U0g0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJT
SDQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3MTg4NDUKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1i
bGVyU0g0LmNwcApAQCAtMCwwICsxLDgyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIFNU
TWljcm9lbGVjdHJvbmljcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxF
KEFTU0VNQkxFUikgJiYgQ1BVKFNINCkKKworI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyU0g0Lmgi
CisKK25hbWVzcGFjZSBKU0MgeworY29uc3QgQ29uZGl0aW9uIE1hY3JvQXNzZW1ibGVyU0g0OjpF
cXVhbCA9IFNINEFzc2VtYmxlcjo6RVE7Citjb25zdCBDb25kaXRpb24gTWFjcm9Bc3NlbWJsZXJT
SDQ6Ok5vdEVxdWFsID0gU0g0QXNzZW1ibGVyOjpORTsKK2NvbnN0IENvbmRpdGlvbiBNYWNyb0Fz
c2VtYmxlclNINDo6R3JlYXRlclRoYW4gPSBTSDRBc3NlbWJsZXI6OkdUOworY29uc3QgQ29uZGl0
aW9uIE1hY3JvQXNzZW1ibGVyU0g0OjpHcmVhdGVyVGhhbk9yRXF1YWwgPSBTSDRBc3NlbWJsZXI6
OkdFOworY29uc3QgQ29uZGl0aW9uIE1hY3JvQXNzZW1ibGVyU0g0OjpMZXNzVGhhbiA9IFNINEFz
c2VtYmxlcjo6TFQ7Citjb25zdCBDb25kaXRpb24gTWFjcm9Bc3NlbWJsZXJTSDQ6Okxlc3NUaGFu
T3JFcXVhbCA9IFNINEFzc2VtYmxlcjo6TEU7Citjb25zdCBDb25kaXRpb24gTWFjcm9Bc3NlbWJs
ZXJTSDQ6OlVHcmVhdGVyVGhhbiA9IFNINEFzc2VtYmxlcjo6SEk7Citjb25zdCBDb25kaXRpb24g
TWFjcm9Bc3NlbWJsZXJTSDQ6OlVHcmVhdGVyVGhhbk9yRXF1YWwgPSBTSDRBc3NlbWJsZXI6OkhT
OworY29uc3QgQ29uZGl0aW9uIE1hY3JvQXNzZW1ibGVyU0g0OjpVTGVzc1RoYW4gPSBTSDRBc3Nl
bWJsZXI6OkxJOworY29uc3QgQ29uZGl0aW9uIE1hY3JvQXNzZW1ibGVyU0g0OjpVTGVzc1RoYW5P
ckVxdWFsID0gU0g0QXNzZW1ibGVyOjpMUzsKK2NvbnN0IENvbmRpdGlvbiBNYWNyb0Fzc2VtYmxl
clNINDo6WmVybyA9IFNINEFzc2VtYmxlcjo6RVE7Citjb25zdCBDb25kaXRpb24gTWFjcm9Bc3Nl
bWJsZXJTSDQ6Ok5vblplcm8gPSBTSDRBc3NlbWJsZXI6Ok5FOworY29uc3QgQ29uZGl0aW9uIE1h
Y3JvQXNzZW1ibGVyU0g0OjpPdmVyZmxvdyA9IFNINEFzc2VtYmxlcjo6T0Y7Citjb25zdCBDb25k
aXRpb24gTWFjcm9Bc3NlbWJsZXJTSDQ6OkFib3ZlID0gU0g0QXNzZW1ibGVyOjpISTsKK2NvbnN0
IENvbmRpdGlvbiBNYWNyb0Fzc2VtYmxlclNINDo6QWJvdmVPckVxdWFsID0gU0g0QXNzZW1ibGVy
OjpIUzsKK2NvbnN0IENvbmRpdGlvbiBNYWNyb0Fzc2VtYmxlclNINDo6QmVsb3cgPSBTSDRBc3Nl
bWJsZXI6OkxJOworY29uc3QgQ29uZGl0aW9uIE1hY3JvQXNzZW1ibGVyU0g0OjpCZWxvd09yRXF1
YWwgPSBTSDRBc3NlbWJsZXI6OkxTOworY29uc3QgQ29uZGl0aW9uIE1hY3JvQXNzZW1ibGVyU0g0
OjpEb3VibGVFcXVhbCA9IFNINEFzc2VtYmxlcjo6RVE7Citjb25zdCBDb25kaXRpb24gTWFjcm9B
c3NlbWJsZXJTSDQ6OkRvdWJsZU5vdEVxdWFsID0gU0g0QXNzZW1ibGVyOjpORTsKK2NvbnN0IENv
bmRpdGlvbiBNYWNyb0Fzc2VtYmxlclNINDo6RG91YmxlR3JlYXRlclRoYW4gPSBTSDRBc3NlbWJs
ZXI6OkdUOworY29uc3QgQ29uZGl0aW9uIE1hY3JvQXNzZW1ibGVyU0g0OjpEb3VibGVHcmVhdGVy
VGhhbk9yRXF1YWwgPSBTSDRBc3NlbWJsZXI6OkdFOworY29uc3QgQ29uZGl0aW9uIE1hY3JvQXNz
ZW1ibGVyU0g0OjpEb3VibGVMZXNzVGhhbiA9IFNINEFzc2VtYmxlcjo6TFQ7Citjb25zdCBDb25k
aXRpb24gTWFjcm9Bc3NlbWJsZXJTSDQ6OkRvdWJsZUxlc3NUaGFuT3JFcXVhbCA9IFNINEFzc2Vt
Ymxlcjo6TEU7Citjb25zdCBDb25kaXRpb24gTWFjcm9Bc3NlbWJsZXJTSDQ6OkRvdWJsZUVxdWFs
T3JVbm9yZGVyZWQgPSBTSDRBc3NlbWJsZXI6OkVRVTsKK2NvbnN0IENvbmRpdGlvbiBNYWNyb0Fz
c2VtYmxlclNINDo6RG91YmxlTm90RXF1YWxPclVub3JkZXJlZCA9IFNINEFzc2VtYmxlcjo6TkVV
OworY29uc3QgQ29uZGl0aW9uIE1hY3JvQXNzZW1ibGVyU0g0OjpEb3VibGVHcmVhdGVyVGhhbk9y
VW5vcmRlcmVkID0gU0g0QXNzZW1ibGVyOjpHVFU7Citjb25zdCBDb25kaXRpb24gTWFjcm9Bc3Nl
bWJsZXJTSDQ6OkRvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbE9yVW5vcmRlcmVkID0gU0g0QXNzZW1i
bGVyOjpHRVU7Citjb25zdCBDb25kaXRpb24gTWFjcm9Bc3NlbWJsZXJTSDQ6OkRvdWJsZUxlc3NU
aGFuT3JVbm9yZGVyZWQgPSBTSDRBc3NlbWJsZXI6OkxUVTsKK2NvbnN0IENvbmRpdGlvbiBNYWNy
b0Fzc2VtYmxlclNINDo6RG91YmxlTGVzc1RoYW5PckVxdWFsT3JVbm9yZGVyZWQgPSBTSDRBc3Nl
bWJsZXI6OkxFVTsKK2NvbnN0IENvbmRpdGlvbiBNYWNyb0Fzc2VtYmxlclNINDo6U2lnbmVkID0g
U0g0QXNzZW1ibGVyOjpTSTsKKwordm9pZCBNYWNyb0Fzc2VtYmxlclNINDo6bGlua0NhbGwodm9p
ZCogY29kZSwgQ2FsbCBjYWxsLCBGdW5jdGlvblB0ciBmdW5jdGlvbikKK3sKKyAgICBTSDRBc3Nl
bWJsZXI6OmxpbmtDYWxsKGNvZGUsIGNhbGwubV9qbXAsIGZ1bmN0aW9uLnZhbHVlKCkpOworfQor
Cit2b2lkIE1hY3JvQXNzZW1ibGVyU0g0OjpyZXBhdGNoQ2FsbChDb2RlTG9jYXRpb25DYWxsIGNh
bGwsIENvZGVMb2NhdGlvbkxhYmVsIGRlc3RpbmF0aW9uKQoreworICAgIFNINEFzc2VtYmxlcjo6
cmVsaW5rQ2FsbChjYWxsLmRhdGFMb2NhdGlvbigpLCBkZXN0aW5hdGlvbi5leGVjdXRhYmxlQWRk
cmVzcygpKTsKK30KKwordm9pZCBNYWNyb0Fzc2VtYmxlclNINDo6cmVwYXRjaENhbGwoQ29kZUxv
Y2F0aW9uQ2FsbCBjYWxsLCBGdW5jdGlvblB0ciBkZXN0aW5hdGlvbikKK3sKKyAgICBTSDRBc3Nl
bWJsZXI6OnJlbGlua0NhbGwoY2FsbC5kYXRhTG9jYXRpb24oKSwgZGVzdGluYXRpb24uZXhlY3V0
YWJsZUFkZHJlc3MoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5B
QkxFKEFTU0VNQkxFUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvTWFjcm9Bc3NlbWJsZXJTSDQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
TWFjcm9Bc3NlbWJsZXJTSDQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5l
MjM1YTZmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9NYWNyb0Fzc2VtYmxlclNINC5oCkBAIC0wLDAgKzEsMTc0MyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAwOS0yMDExIFNUTWljcm9lbGVjdHJvbmljcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKworI2lmbmRlZiBNYWNyb0Fz
c2VtYmxlclNINF9oCisjZGVmaW5lIE1hY3JvQXNzZW1ibGVyU0g0X2gKKworI2lmIEVOQUJMRShB
U1NFTUJMRVIpICYmIENQVShTSDQpCisKKyNpbmNsdWRlICJBYnN0cmFjdE1hY3JvQXNzZW1ibGVy
LmgiCisjaW5jbHVkZSAiU0g0QXNzZW1ibGVyLmgiCisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMu
aD4KKworbmFtZXNwYWNlIEpTQyB7Cit0eXBlZGVmIFNINEFzc2VtYmxlcjo6Q29uZGl0aW9uIENv
bmRpdGlvbjsKKworY2xhc3MgTWFjcm9Bc3NlbWJsZXJTSDQgOiBwdWJsaWMgQWJzdHJhY3RNYWNy
b0Fzc2VtYmxlcjxTSDRBc3NlbWJsZXI+IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIFNINEFzc2Vt
Ymxlcjo6RlBSZWdpc3RlcklEIEZQUmVnaXN0ZXJJRDsKKworICAgIHN0YXRpYyBjb25zdCBDb25k
aXRpb24gRXF1YWw7CisgICAgc3RhdGljIGNvbnN0IENvbmRpdGlvbiBOb3RFcXVhbDsKKyAgICBz
dGF0aWMgY29uc3QgQ29uZGl0aW9uIEdyZWF0ZXJUaGFuOworICAgIHN0YXRpYyBjb25zdCBDb25k
aXRpb24gR3JlYXRlclRoYW5PckVxdWFsOworICAgIHN0YXRpYyBjb25zdCBDb25kaXRpb24gTGVz
c1RoYW47CisgICAgc3RhdGljIGNvbnN0IENvbmRpdGlvbiBMZXNzVGhhbk9yRXF1YWw7CisgICAg
c3RhdGljIGNvbnN0IENvbmRpdGlvbiBVR3JlYXRlclRoYW47CisgICAgc3RhdGljIGNvbnN0IENv
bmRpdGlvbiBVR3JlYXRlclRoYW5PckVxdWFsOworICAgIHN0YXRpYyBjb25zdCBDb25kaXRpb24g
VUxlc3NUaGFuOworICAgIHN0YXRpYyBjb25zdCBDb25kaXRpb24gVUxlc3NUaGFuT3JFcXVhbDsK
KyAgICBzdGF0aWMgY29uc3QgQ29uZGl0aW9uIFplcm87CisgICAgc3RhdGljIGNvbnN0IENvbmRp
dGlvbiBOb25aZXJvOworICAgIHN0YXRpYyBjb25zdCBDb25kaXRpb24gT3ZlcmZsb3c7CisgICAg
c3RhdGljIGNvbnN0IENvbmRpdGlvbiBBYm92ZTsKKyAgICBzdGF0aWMgY29uc3QgQ29uZGl0aW9u
IEFib3ZlT3JFcXVhbDsKKyAgICBzdGF0aWMgY29uc3QgQ29uZGl0aW9uIEJlbG93OworICAgIHN0
YXRpYyBjb25zdCBDb25kaXRpb24gQmVsb3dPckVxdWFsOworICAgIHN0YXRpYyBjb25zdCBDb25k
aXRpb24gRG91YmxlRXF1YWw7CisgICAgc3RhdGljIGNvbnN0IENvbmRpdGlvbiBEb3VibGVOb3RF
cXVhbDsKKyAgICBzdGF0aWMgY29uc3QgQ29uZGl0aW9uIERvdWJsZUdyZWF0ZXJUaGFuOworICAg
IHN0YXRpYyBjb25zdCBDb25kaXRpb24gRG91YmxlR3JlYXRlclRoYW5PckVxdWFsOworICAgIHN0
YXRpYyBjb25zdCBDb25kaXRpb24gRG91YmxlTGVzc1RoYW47CisgICAgc3RhdGljIGNvbnN0IENv
bmRpdGlvbiBEb3VibGVMZXNzVGhhbk9yRXF1YWw7CisgICAgc3RhdGljIGNvbnN0IENvbmRpdGlv
biBEb3VibGVFcXVhbE9yVW5vcmRlcmVkOworICAgIHN0YXRpYyBjb25zdCBDb25kaXRpb24gRG91
YmxlTm90RXF1YWxPclVub3JkZXJlZDsKKyAgICBzdGF0aWMgY29uc3QgQ29uZGl0aW9uIERvdWJs
ZUdyZWF0ZXJUaGFuT3JVbm9yZGVyZWQ7CisgICAgc3RhdGljIGNvbnN0IENvbmRpdGlvbiBEb3Vi
bGVHcmVhdGVyVGhhbk9yRXF1YWxPclVub3JkZXJlZDsKKyAgICBzdGF0aWMgY29uc3QgQ29uZGl0
aW9uIERvdWJsZUxlc3NUaGFuT3JVbm9yZGVyZWQ7CisgICAgc3RhdGljIGNvbnN0IENvbmRpdGlv
biBEb3VibGVMZXNzVGhhbk9yRXF1YWxPclVub3JkZXJlZDsKKyAgICBzdGF0aWMgY29uc3QgQ29u
ZGl0aW9uIFNpZ25lZDsKKyAgICBzdGF0aWMgY29uc3QgU2NhbGUgU2NhbGVQdHIgPSBUaW1lc0Zv
dXI7CisgICAgc3RhdGljIGNvbnN0IEZQUmVnaXN0ZXJJRCBmc2NyYXRjaCA9IFNINFJlZ2lzdGVy
czo6ZnIxMDsKKyAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCBzdGFja1BvaW50ZXJSZWdpc3Rl
ciA9IFNINFJlZ2lzdGVyczo6c3A7CisgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgbGlua1Jl
Z2lzdGVyID0gU0g0UmVnaXN0ZXJzOjpwcjsKKyAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCBz
Y3JhdGNoUmVnMyA9IFNINFJlZ2lzdGVyczo6cjEzOworCisgICAgUmVnaXN0ZXJJRCBjbGFpbVNj
cmF0Y2goKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fYXNzZW1ibGVyLmNsYWltU2NyYXRjaCgp
OworICAgIH0KKworICAgIHZvaWQgcmVsZWFzZVNjcmF0Y2goUmVnaXN0ZXJJRCByZWcpCisgICAg
eworICAgICAgICBtX2Fzc2VtYmxlci5yZWxlYXNlU2NyYXRjaChyZWcpOworICAgIH0KKworICAg
IC8vIEludGVnZXIgYXJpdGhtZXRpYyBvcGVyYXRpb25zCisKKyAgICB2b2lkIGFkZDMyKFJlZ2lz
dGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5h
ZGRsUmVnUmVnKHNyYywgZGVzdCk7CisgICAgfQorCisgICAgdm9pZCBhZGQzMihJbW0zMiBpbW0s
IFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIGlmIChtX2Fzc2VtYmxlci5pc0ltbWVk
aWF0ZShpbW0ubV92YWx1ZSkpIHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZGxJbW04cihp
bW0ubV92YWx1ZSwgZGVzdCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAg
ICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBtX2Fzc2VtYmxl
ci5sb2FkQ29uc3RhbnQoaW1tLm1fdmFsdWUsIHNjcik7CisgICAgICAgIG1fYXNzZW1ibGVyLmFk
ZGxSZWdSZWcoc2NyLCBkZXN0KTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICB9
CisKKyAgICB2b2lkIGFkZDMyKEltbTMyIGltbSwgUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQg
ZGVzdCkKKyAgICB7CisgICAgICAgIGlmIChzcmMgIT0gZGVzdCkKKyAgICAgICAgICAgIG1fYXNz
ZW1ibGVyLm1vdmxSZWdSZWcoc3JjLCBkZXN0KTsKKyAgICAgICAgYWRkMzIoaW1tLCBkZXN0KTsK
KyAgICB9CisKKyAgICB2b2lkIGFkZDMyKEltbTMyIGltbSwgQWRkcmVzcyBhZGRyZXNzKQorICAg
IHsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgbG9h
ZDMyKGFkZHJlc3MsIHNjcik7CisgICAgICAgIGFkZDMyKGltbSwgc2NyKTsKKyAgICAgICAgc3Rv
cmUzMihzY3IsIGFkZHJlc3MpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgIH0K
KworICAgIHZvaWQgYWRkMzIoQWRkcmVzcyBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7Cisg
ICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIGxvYWQzMihz
cmMsIHNjcik7CisgICAgICAgIG1fYXNzZW1ibGVyLmFkZGxSZWdSZWcoc2NyLCBkZXN0KTsKKyAg
ICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICB9CisKKyAgICB2b2lkIGFuZDMyKFJlZ2lz
dGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5h
bmRsUmVnUmVnKHNyYywgZGVzdCk7CisgICAgfQorCisgICAgdm9pZCBhbmQzMihJbW0zMiBpbW0s
IFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIGlmICgoaW1tLm1fdmFsdWUgPD0gMjU1
KSAmJiAoaW1tLm1fdmFsdWUgPj0gMCkgJiYgKGRlc3QgPT0gU0g0UmVnaXN0ZXJzOjpyMCkpIHsK
KyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFuZGxJbW04cihpbW0ubV92YWx1ZSwgZGVzdCk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBSZWdpc3RlcklEIHNjciA9
IGNsYWltU2NyYXRjaCgpOworICAgICAgICBtX2Fzc2VtYmxlci5sb2FkQ29uc3RhbnQoKGltbS5t
X3ZhbHVlKSwgc2NyKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuYW5kbFJlZ1JlZyhzY3IsIGRlc3Qp
OworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgIH0KKworICAgIHZvaWQgbHNoaWZ0
MzIoUmVnaXN0ZXJJRCBzaGlmdGFtb3VudCwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAg
ICAgbV9hc3NlbWJsZXIuc2hsbFJlZ1JlZyhkZXN0LCBzaGlmdGFtb3VudCk7CisgICAgfQorCisg
ICAgdm9pZCByc2hpZnQzMihpbnQgaW1tLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAg
ICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBtX2Fzc2VtYmxlci5s
b2FkQ29uc3RhbnQoLWltbSwgc2NyKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuc2hhUmVnUmVnKGRl
c3QsIHNjcik7CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgfQorCisgICAgdm9p
ZCBsc2hpZnQzMihJbW0zMiBpbW0sIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIGlm
ICgoaW1tLm1fdmFsdWUgPT0gMSkgfHwgKGltbS5tX3ZhbHVlID09IDIpIHx8IChpbW0ubV92YWx1
ZSA9PSA4KSB8fCAoaW1tLm1fdmFsdWUgPT0gMTYpKSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxl
ci5zaGxsSW1tOHIoaW1tLm1fdmFsdWUsIGRlc3QpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAg
ICAgbV9hc3NlbWJsZXIubG9hZENvbnN0YW50KGltbS5tX3ZhbHVlLCBzY3IpOworICAgICAgICBt
X2Fzc2VtYmxlci5zaGxsUmVnUmVnKGRlc3QsIHNjcik7CisgICAgICAgIHJlbGVhc2VTY3JhdGNo
KHNjcik7CisgICAgfQorCisgICAgdm9pZCBtdWwzMihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJ
RCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuaW11bGxSZWdSZWcoc3JjLCBkZXN0
KTsKKyAgICAgICAgbV9hc3NlbWJsZXIuc3RzbWFjbChkZXN0KTsKKyAgICB9CisKKyAgICB2b2lk
IG11bDMyKEltbTMyIGltbSwgUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7
CisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIG1vdmUo
aW1tLCBzY3IpOworICAgICAgICBpZiAgKHNyYyAhPSBkZXN0KQorICAgICAgICAgICAgbW92ZShz
cmMsIGRlc3QpOworICAgICAgICBtdWwzMihzY3IsICBkZXN0KTsKKyAgICAgICAgcmVsZWFzZVNj
cmF0Y2goc2NyKTsKKyAgICB9CisKKyAgICB2b2lkIG5vdDMyKFJlZ2lzdGVySUQgc3JjLCBSZWdp
c3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5ub3RsUmVnKHNyYywgZGVz
dCk7CisgICAgfQorCisgICAgdm9pZCBvcjMyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRl
c3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5vcmxSZWdSZWcoc3JjLCBkZXN0KTsKKyAg
ICB9CisKKyAgICB2b2lkIG9yMzIoSW1tMzIgaW1tLCBSZWdpc3RlcklEIGRlc3QpCisgICAgewor
ICAgICAgICBpZiAoKGltbS5tX3ZhbHVlIDw9IDI1NSkgJiYgKGltbS5tX3ZhbHVlID49IDApICYm
IChkZXN0ID09IFNINFJlZ2lzdGVyczo6cjApKSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5v
cmxJbW04cihpbW0ubV92YWx1ZSwgZGVzdCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKworICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBt
X2Fzc2VtYmxlci5sb2FkQ29uc3RhbnQoaW1tLm1fdmFsdWUsIHNjcik7CisgICAgICAgIG1fYXNz
ZW1ibGVyLm9ybFJlZ1JlZyhzY3IsIGRlc3QpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3Ip
OworICAgIH0KKworICAgIHZvaWQgcnNoaWZ0MzIoUmVnaXN0ZXJJRCBzaGlmdGFtb3VudCwgUmVn
aXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgY29tcGFyZTMyKDMyLCBzaGlmdGFtb3VudCwg
RXF1YWwpOworICAgICAgICBtX2Fzc2VtYmxlci5lbnN1cmVTcGFjZShtX2Fzc2VtYmxlci5tYXhJ
bnN0cnVjdGlvblNpemUgKyA0KTsKKyAgICAgICAgbV9hc3NlbWJsZXIuYnJhbmNoKEJUX09QQ09E
RSwgMSk7CisgICAgICAgIG1fYXNzZW1ibGVyLm5lZyhzaGlmdGFtb3VudCwgc2hpZnRhbW91bnQp
OworICAgICAgICBtX2Fzc2VtYmxlci5zaGFSZWdSZWcoZGVzdCwgc2hpZnRhbW91bnQpOworICAg
IH0KKworICAgIHZvaWQgcnNoaWZ0MzIoSW1tMzIgaW1tLCBSZWdpc3RlcklEIGRlc3QpCisgICAg
eworICAgICAgICBpZiAoaW1tLm1fdmFsdWUgJiAweDFmKQorICAgICAgICAgICAgcnNoaWZ0MzIo
aW1tLm1fdmFsdWUgJiAweDFmLCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIHN1YjMyKFJlZ2lz
dGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5z
dWJsUmVnUmVnKHNyYywgZGVzdCk7CisgICAgfQorCisgICAgdm9pZCBzdWIzMihJbW0zMiBpbW0s
IEFic29sdXRlQWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklEIHNjcmF0Y2hSZWcpCisgICAgewor
ICAgICAgICBSZWdpc3RlcklEIHJlc3VsdCA9IGNsYWltU2NyYXRjaCgpOworCisgICAgICAgIG1f
YXNzZW1ibGVyLmxvYWRDb25zdGFudChyZWludGVycHJldF9jYXN0PHVpbnQzMl90PihhZGRyZXNz
Lm1fcHRyKSwgc2NyYXRjaFJlZyk7CisgICAgICAgIG1fYXNzZW1ibGVyLm1vdmxNZW1SZWcoc2Ny
YXRjaFJlZywgcmVzdWx0KTsKKworICAgICAgICBpZiAobV9hc3NlbWJsZXIuaXNJbW1lZGlhdGUo
LWltbS5tX3ZhbHVlKSkKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZGxJbW04cigtaW1tLm1f
dmFsdWUsIHJlc3VsdCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIu
bG9hZENvbnN0YW50KGltbS5tX3ZhbHVlLCBzY3JhdGNoUmVnMyk7CisgICAgICAgICAgICBtX2Fz
c2VtYmxlci5zdWJsUmVnUmVnKHNjcmF0Y2hSZWczLCByZXN1bHQpOworICAgICAgICB9CisKKyAg
ICAgICAgc3RvcmUzMihyZXN1bHQsIHNjcmF0Y2hSZWcpOworICAgICAgICByZWxlYXNlU2NyYXRj
aChyZXN1bHQpOworICAgIH0KKworICAgIHZvaWQgc3ViMzIoSW1tMzIgaW1tLCBBYnNvbHV0ZUFk
ZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIFJlZ2lzdGVySUQgcmVzdWx0ID0gY2xhaW1T
Y3JhdGNoKCk7CisgICAgICAgIFJlZ2lzdGVySUQgc2NyYXRjaFJlZyA9IGNsYWltU2NyYXRjaCgp
OworCisgICAgICAgIG1fYXNzZW1ibGVyLmxvYWRDb25zdGFudChyZWludGVycHJldF9jYXN0PHVp
bnQzMl90PihhZGRyZXNzLm1fcHRyKSwgc2NyYXRjaFJlZyk7CisgICAgICAgIG1fYXNzZW1ibGVy
Lm1vdmxNZW1SZWcoc2NyYXRjaFJlZywgcmVzdWx0KTsKKworICAgICAgICBpZiAobV9hc3NlbWJs
ZXIuaXNJbW1lZGlhdGUoLWltbS5tX3ZhbHVlKSkKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFk
ZGxJbW04cigtaW1tLm1fdmFsdWUsIHJlc3VsdCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgbV9hc3NlbWJsZXIubG9hZENvbnN0YW50KGltbS5tX3ZhbHVlLCBzY3JhdGNoUmVnMyk7Cisg
ICAgICAgICAgICBtX2Fzc2VtYmxlci5zdWJsUmVnUmVnKHNjcmF0Y2hSZWczLCByZXN1bHQpOwor
ICAgICAgICB9CisKKyAgICAgICAgc3RvcmUzMihyZXN1bHQsIHNjcmF0Y2hSZWcpOworICAgICAg
ICByZWxlYXNlU2NyYXRjaChyZXN1bHQpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3JhdGNo
UmVnKTsKKyAgICB9CisKKyAgICB2b2lkIGFkZDMyKEltbTMyIGltbSwgQWJzb2x1dGVBZGRyZXNz
IGFkZHJlc3MsIFJlZ2lzdGVySUQgc2NyYXRjaFJlZykKKyAgICB7CisgICAgICAgIFJlZ2lzdGVy
SUQgcmVzdWx0ID0gY2xhaW1TY3JhdGNoKCk7CisKKyAgICAgICAgbV9hc3NlbWJsZXIubG9hZENv
bnN0YW50KHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3Q+KGFkZHJlc3MubV9wdHIpLCBzY3JhdGNo
UmVnKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubW92bE1lbVJlZyhzY3JhdGNoUmVnLCByZXN1bHQp
OworCisgICAgICAgIGlmIChtX2Fzc2VtYmxlci5pc0ltbWVkaWF0ZShpbW0ubV92YWx1ZSkpCisg
ICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGRsSW1tOHIoaW1tLm1fdmFsdWUsIHJlc3VsdCk7Cisg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIubG9hZENvbnN0YW50KGltbS5t
X3ZhbHVlLCBzY3JhdGNoUmVnMyk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGRsUmVnUmVn
KHNjcmF0Y2hSZWczLCByZXN1bHQpOworICAgICAgICB9CisKKyAgICAgICAgc3RvcmUzMihyZXN1
bHQsIHNjcmF0Y2hSZWcpOworICAgICAgICByZWxlYXNlU2NyYXRjaChyZXN1bHQpOworICAgIH0K
KworICAgIHZvaWQgYWRkMzIoSW1tMzIgaW1tLCBBYnNvbHV0ZUFkZHJlc3MgYWRkcmVzcykKKyAg
ICB7CisgICAgICAgIFJlZ2lzdGVySUQgcmVzdWx0ID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAg
IFJlZ2lzdGVySUQgc2NyYXRjaFJlZyA9IGNsYWltU2NyYXRjaCgpOworCisgICAgICAgIG1fYXNz
ZW1ibGVyLmxvYWRDb25zdGFudChyZWludGVycHJldF9jYXN0PHVpbnQzMl90PihhZGRyZXNzLm1f
cHRyKSwgc2NyYXRjaFJlZyk7CisgICAgICAgIG1fYXNzZW1ibGVyLm1vdmxNZW1SZWcoc2NyYXRj
aFJlZywgcmVzdWx0KTsKKworICAgICAgICBpZiAobV9hc3NlbWJsZXIuaXNJbW1lZGlhdGUoaW1t
Lm1fdmFsdWUpKQorICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRkbEltbThyKGltbS5tX3ZhbHVl
LCByZXN1bHQpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmxvYWRD
b25zdGFudChpbW0ubV92YWx1ZSwgc2NyYXRjaFJlZzMpOworICAgICAgICAgICAgbV9hc3NlbWJs
ZXIuYWRkbFJlZ1JlZyhzY3JhdGNoUmVnMywgcmVzdWx0KTsKKyAgICAgICAgfQorCisgICAgICAg
IHN0b3JlMzIocmVzdWx0LCBzY3JhdGNoUmVnKTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2gocmVz
dWx0KTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyYXRjaFJlZyk7CisgICAgfQorCisgICAg
dm9pZCBzdWIzMihJbW0zMiBpbW0sIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIGlm
IChtX2Fzc2VtYmxlci5pc0ltbWVkaWF0ZSgtaW1tLm1fdmFsdWUpKSB7CisgICAgICAgICAgICBt
X2Fzc2VtYmxlci5hZGRsSW1tOHIoLWltbS5tX3ZhbHVlLCBkZXN0KTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorCisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNo
KCk7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvYWRDb25zdGFudChpbW0ubV92YWx1ZSwgc2NyKTsK
KyAgICAgICAgbV9hc3NlbWJsZXIuc3VibFJlZ1JlZyhzY3IsIGRlc3QpOworICAgICAgICByZWxl
YXNlU2NyYXRjaChzY3IpOworICAgIH0KKworICAgIHZvaWQgc3ViMzIoQWRkcmVzcyBzcmMsIFJl
Z2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3Jh
dGNoKCk7CisgICAgICAgIGxvYWQzMihzcmMsIHNjcik7CisgICAgICAgIG1fYXNzZW1ibGVyLnN1
YmxSZWdSZWcoc2NyLCBkZXN0KTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICB9
CisKKyAgICB2b2lkIHhvcjMyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAg
eworICAgICAgICBtX2Fzc2VtYmxlci54b3JsUmVnUmVnKHNyYywgZGVzdCk7CisgICAgfQorCisg
ICAgdm9pZCB4b3IzMihJbW0zMiBpbW0sIFJlZ2lzdGVySUQgc3JjRGVzdCkKKyAgICB7CisgICAg
ICAgIGlmICgoc3JjRGVzdCAhPSBTSDRSZWdpc3RlcnM6OnIwKSB8fCAoaW1tLm1fdmFsdWUgPiAy
NTUpIHx8IChpbW0ubV92YWx1ZSA8IDApKSB7CisgICAgICAgICAgICBSZWdpc3RlcklEIHNjciA9
IGNsYWltU2NyYXRjaCgpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIubG9hZENvbnN0YW50KChp
bW0ubV92YWx1ZSksIHNjcik7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci54b3JsUmVnUmVnKHNj
ciwgc3JjRGVzdCk7CisgICAgICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgbV9hc3NlbWJsZXIueG9ybEltbThyKGlt
bS5tX3ZhbHVlLCBzcmNEZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIGNvbXBhcmUzMihpbnQgaW1t
LCBSZWdpc3RlcklEIGRzdCwgQ29uZGl0aW9uIGNvbmQpCisgICAgeworICAgICAgICBpZiAoKChj
b25kID09IEVxdWFsKSB8fCAoY29uZCA9PSBOb3RFcXVhbCkpICYmIChkc3QgPT0gU0g0UmVnaXN0
ZXJzOjpyMCkgJiYgbV9hc3NlbWJsZXIuaXNJbW1lZGlhdGUoaW1tKSkgeworICAgICAgICAgICAg
bV9hc3NlbWJsZXIuY21wRXFJbW1SMChpbW0sIGRzdCwgY29uZCk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKworICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgp
OworICAgICAgICBtX2Fzc2VtYmxlci5sb2FkQ29uc3RhbnQoaW1tLCBzY3IpOworICAgICAgICBt
X2Fzc2VtYmxlci5jbXBsUmVnUmVnKHNjciwgZHN0LCBjb25kKTsKKyAgICAgICAgcmVsZWFzZVNj
cmF0Y2goc2NyKTsKKyAgICB9CisKKyAgICB2b2lkIGNvbXBhcmUzMihpbnQgb2Zmc2V0LCBSZWdp
c3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgbGVmdCwgQ29uZGl0aW9uIGNvbmQpCisgICAgeworICAg
ICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBpZiAoIW9mZnNl
dCkgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIubW92bE1lbVJlZyhiYXNlLCBzY3IpOworICAg
ICAgICAgICAgbV9hc3NlbWJsZXIuY21wbFJlZ1JlZyhzY3IsIGxlZnQsIGNvbmQpOworICAgICAg
ICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorCisgICAgICAgIGlmICgob2Zmc2V0IDwgMCkgfHwgKG9mZnNldCA+PSA2NCkpIHsKKyAgICAg
ICAgICAgIG1fYXNzZW1ibGVyLmxvYWRDb25zdGFudChvZmZzZXQsIHNjcik7CisgICAgICAgICAg
ICBtX2Fzc2VtYmxlci5hZGRsUmVnUmVnKGJhc2UsIHNjcik7CisgICAgICAgICAgICBtX2Fzc2Vt
Ymxlci5tb3ZsTWVtUmVnKHNjciwgc2NyKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmNtcGxS
ZWdSZWcoc2NyLCBsZWZ0LCBjb25kKTsKKyAgICAgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBtX2Fzc2VtYmxlci5t
b3ZsTWVtUmVnKG9mZnNldCA+PiAyLCBiYXNlLCBzY3IpOworICAgICAgICBtX2Fzc2VtYmxlci5j
bXBsUmVnUmVnKHNjciwgbGVmdCwgY29uZCk7CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7
CisgICAgfQorCisgICAgdm9pZCB0ZXN0SW1tKGludCBpbW0sIGludCBvZmZzZXQsIFJlZ2lzdGVy
SUQgYmFzZSkKKyAgICB7CisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7
CisgICAgICAgIFJlZ2lzdGVySUQgc2NyMSA9IGNsYWltU2NyYXRjaCgpOworCisgICAgICAgIGlm
ICgob2Zmc2V0IDwgMCkgfHwgKG9mZnNldCA+PSA2NCkpIHsKKyAgICAgICAgICAgIG1fYXNzZW1i
bGVyLmxvYWRDb25zdGFudChvZmZzZXQsIHNjcik7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5h
ZGRsUmVnUmVnKGJhc2UsIHNjcik7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5tb3ZsTWVtUmVn
KHNjciwgc2NyKTsKKyAgICAgICAgfSBlbHNlIGlmIChvZmZzZXQpCisgICAgICAgICAgICBtX2Fz
c2VtYmxlci5tb3ZsTWVtUmVnKG9mZnNldCA+PiAyLCBiYXNlLCBzY3IpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5tb3ZsTWVtUmVnKGJhc2UsIHNjcik7CisgICAgICAg
IGlmIChtX2Fzc2VtYmxlci5pc0ltbWVkaWF0ZShpbW0pKQorICAgICAgICAgICAgbV9hc3NlbWJs
ZXIubW92SW1tOChpbW0sIHNjcjEpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2Fzc2Vt
Ymxlci5sb2FkQ29uc3RhbnQoaW1tLCBzY3IxKTsKKworICAgICAgICBtX2Fzc2VtYmxlci50ZXN0
bFJlZ1JlZyhzY3IsIHNjcjEpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgICAg
ICByZWxlYXNlU2NyYXRjaChzY3IxKTsKKyAgICB9CisKKyAgICB2b2lkIHRlc3RsSW1tKGludCBp
bW0sIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgaWYgKChkc3QgPT0gU0g0UmVnaXN0
ZXJzOjpyMCkgJiYgKGltbSA8PSAyNTUpICYmIChpbW0gPj0gMCkpIHsKKyAgICAgICAgICAgIG1f
YXNzZW1ibGVyLnRlc3RsSW1tOHIoaW1tLCBkc3QpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAg
ICAgbV9hc3NlbWJsZXIubG9hZENvbnN0YW50KGltbSwgc2NyKTsKKyAgICAgICAgbV9hc3NlbWJs
ZXIudGVzdGxSZWdSZWcoc2NyLCBkc3QpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOwor
ICAgIH0KKworICAgIHZvaWQgY29tcGFyZTMyKFJlZ2lzdGVySUQgcmlnaHQsIGludCBvZmZzZXQs
IFJlZ2lzdGVySUQgYmFzZSwgQ29uZGl0aW9uIGNvbmQpCisgICAgeworICAgICAgICBpZiAoIW9m
ZnNldCkgeworICAgICAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAg
ICAgICAgICAgIG1fYXNzZW1ibGVyLm1vdmxNZW1SZWcoYmFzZSwgc2NyKTsKKyAgICAgICAgICAg
IG1fYXNzZW1ibGVyLmNtcGxSZWdSZWcocmlnaHQsIHNjciwgY29uZCk7CisgICAgICAgICAgICBy
ZWxlYXNlU2NyYXRjaChzY3IpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAg
ICAgICAgaWYgKChvZmZzZXQgPCAwKSB8fCAob2Zmc2V0ID49IDY0KSkgeworICAgICAgICAgICAg
UmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVy
LmxvYWRDb25zdGFudChvZmZzZXQsIHNjcik7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGRs
UmVnUmVnKGJhc2UsIHNjcik7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5tb3ZsTWVtUmVnKHNj
ciwgc2NyKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmNtcGxSZWdSZWcocmlnaHQsIHNjciwg
Y29uZCk7CisgICAgICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2go
KTsKKyAgICAgICAgbV9hc3NlbWJsZXIubW92bE1lbVJlZyhvZmZzZXQgPj4gMiwgYmFzZSwgc2Ny
KTsKKyAgICAgICAgbV9hc3NlbWJsZXIuY21wbFJlZ1JlZyhyaWdodCwgc2NyLCBjb25kKTsKKyAg
ICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICB9CisKKyAgICB2b2lkIGNvbXBhcmUzMihp
bnQgaW1tLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIENvbmRpdGlvbiBjb25kKQorICAg
IHsKKyAgICAgICAgaWYgKCFvZmZzZXQpIHsKKyAgICAgICAgICAgIFJlZ2lzdGVySUQgc2NyID0g
Y2xhaW1TY3JhdGNoKCk7CisgICAgICAgICAgICBSZWdpc3RlcklEIHNjcjEgPSBjbGFpbVNjcmF0
Y2goKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLm1vdmxNZW1SZWcoYmFzZSwgc2NyKTsKKyAg
ICAgICAgICAgIG1fYXNzZW1ibGVyLmxvYWRDb25zdGFudChpbW0sIHNjcjEpOworICAgICAgICAg
ICAgbV9hc3NlbWJsZXIuY21wbFJlZ1JlZyhzY3IxLCBzY3IsIGNvbmQpOworICAgICAgICAgICAg
cmVsZWFzZVNjcmF0Y2goc2NyMSk7CisgICAgICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKChvZmZzZXQgPCAw
KSB8fCAob2Zmc2V0ID49IDY0KSkgeworICAgICAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFp
bVNjcmF0Y2goKTsKKyAgICAgICAgICAgIFJlZ2lzdGVySUQgc2NyMSA9IGNsYWltU2NyYXRjaCgp
OworICAgICAgICAgICAgbV9hc3NlbWJsZXIubG9hZENvbnN0YW50KG9mZnNldCwgc2NyKTsKKyAg
ICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZGxSZWdSZWcoYmFzZSwgc2NyKTsKKyAgICAgICAgICAg
IG1fYXNzZW1ibGVyLm1vdmxNZW1SZWcoc2NyLCBzY3IpOworICAgICAgICAgICAgbV9hc3NlbWJs
ZXIubG9hZENvbnN0YW50KGltbSwgc2NyMSk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5jbXBs
UmVnUmVnKHNjcjEsIHNjciwgY29uZCk7CisgICAgICAgICAgICByZWxlYXNlU2NyYXRjaChzY3Ix
KTsKKyAgICAgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKworICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOwor
ICAgICAgICBSZWdpc3RlcklEIHNjcjEgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgbV9hc3Nl
bWJsZXIubW92bE1lbVJlZyhvZmZzZXQgPj4gMiwgYmFzZSwgc2NyKTsKKyAgICAgICAgbV9hc3Nl
bWJsZXIubG9hZENvbnN0YW50KGltbSwgc2NyMSk7CisgICAgICAgIG1fYXNzZW1ibGVyLmNtcGxS
ZWdSZWcoc2NyMSwgc2NyLCBjb25kKTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyMSk7Cisg
ICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgfQorCisgICAgLy8gTWVtb3J5IGFjY2Vz
cyBvcGVyYXRpb24KKworICAgIHZvaWQgbG9hZDMyKEltcGxpY2l0QWRkcmVzcyBhZGRyZXNzLCBS
ZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBsb2FkMzIoYWRkcmVzcy5iYXNlLCBhZGRy
ZXNzLm9mZnNldCwgZGVzdCk7CisgICAgfQorCisgICAgdm9pZCBsb2FkOChJbXBsaWNpdEFkZHJl
c3MgYWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbG9hZDgoYWRkcmVz
cy5iYXNlLCBhZGRyZXNzLm9mZnNldCwgZGVzdCk7CisgICAgfQorCisgICAgdm9pZCBsb2FkMzIo
QmFzZUluZGV4IGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIFJlZ2lz
dGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIG1vdmUoYWRkcmVzcy5pbmRleCwg
c2NyKTsKKyAgICAgICAgbHNoaWZ0MzIoSW1tMzIoYWRkcmVzcy5zY2FsZSksIHNjcik7CisgICAg
ICAgIGFkZDMyKGFkZHJlc3MuYmFzZSwgc2NyKTsKKyAgICAgICAgbG9hZDMyKHNjciwgYWRkcmVz
cy5vZmZzZXQsIGRlc3QpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgIH0KKwor
ICAgIHZvaWQgbG9hZDMyKHZvaWQqIGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7Cisg
ICAgICAgIG1fYXNzZW1ibGVyLmxvYWRDb25zdGFudChyZWludGVycHJldF9jYXN0PHVpbnQzMl90
PihhZGRyZXNzKSwgZGVzdCk7CisgICAgICAgIG1fYXNzZW1ibGVyLm1vdmxNZW1SZWcoZGVzdCwg
ZGVzdCk7CisgICAgfQorCisgICAgdm9pZCBsb2FkMzIoUmVnaXN0ZXJJRCBiYXNlLCBpbnQgb2Zm
c2V0LCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBpZiAoIW9mZnNldCkgeworICAg
ICAgICAgICAgbV9hc3NlbWJsZXIubW92bE1lbVJlZyhiYXNlLCBkZXN0KTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgob2Zmc2V0ID49IDApICYmIChvZmZz
ZXQgPCA2NCkpIHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLm1vdmxNZW1SZWcob2Zmc2V0ID4+
IDIsIGJhc2UsIGRlc3QpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAg
ICAgaWYgKChkZXN0ID09IFNINFJlZ2lzdGVyczo6cjApICYmIChkZXN0ICE9IGJhc2UpKSB7Cisg
ICAgICAgICAgICBtX2Fzc2VtYmxlci5sb2FkQ29uc3RhbnQoKG9mZnNldCksIGRlc3QpOworICAg
ICAgICAgICAgbV9hc3NlbWJsZXIubW92bFIwbXIoYmFzZSwgZGVzdCk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBSZWdpc3RlcklEIHNjcjsKKyAgICAgICAgaWYg
KGRlc3QgPT0gYmFzZSkKKyAgICAgICAgICAgIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICBzY3IgPSBkZXN0OworICAgICAgICBtX2Fzc2VtYmxlci5sb2Fk
Q29uc3RhbnQoKG9mZnNldCksIHNjcik7CisgICAgICAgIG1fYXNzZW1ibGVyLmFkZGxSZWdSZWco
YmFzZSwgc2NyKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubW92bE1lbVJlZyhzY3IsIGRlc3QpOwor
CisgICAgICAgIGlmIChkZXN0ID09IGJhc2UpCisgICAgICAgICAgICByZWxlYXNlU2NyYXRjaChz
Y3IpOworICAgIH0KKworICAgIHZvaWQgbG9hZDgoUmVnaXN0ZXJJRCBiYXNlLCBpbnQgb2Zmc2V0
LCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBpZiAoIW9mZnNldCkgeworICAgICAg
ICAgICAgbV9hc3NlbWJsZXIubW92Yk1lbVJlZyhiYXNlLCBkZXN0KTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgob2Zmc2V0ID4gMCkgJiYgKG9mZnNldCA8
IDY0KSAmJiAoZGVzdCA9PSBTSDRSZWdpc3RlcnM6OnIwKSkgeworICAgICAgICAgICAgbV9hc3Nl
bWJsZXIubW92Yk1lbVJlZyhvZmZzZXQsIGJhc2UsIGRlc3QpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKGJhc2UgIT0gZGVzdCkgeworICAgICAgICAgICAg
bV9hc3NlbWJsZXIubG9hZENvbnN0YW50KChvZmZzZXQpLCBkZXN0KTsKKyAgICAgICAgICAgIG1f
YXNzZW1ibGVyLmFkZGxSZWdSZWcoYmFzZSwgZGVzdCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxl
ci5tb3ZiTWVtUmVnKGRlc3QsIGRlc3QpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgbV9h
c3NlbWJsZXIubG9hZENvbnN0YW50KChvZmZzZXQpLCBzY3IpOworICAgICAgICBtX2Fzc2VtYmxl
ci5hZGRsUmVnUmVnKGJhc2UsIHNjcik7CisgICAgICAgIG1fYXNzZW1ibGVyLm1vdmJNZW1SZWco
c2NyLCBkZXN0KTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICB9CisKKyAgICB2
b2lkIGxvYWQzMihSZWdpc3RlcklEIHIwLCBSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3Qp
CisgICAgeworICAgICAgICBBU1NFUlQocjAgPT0gU0g0UmVnaXN0ZXJzOjpyMCk7CisgICAgICAg
IG1fYXNzZW1ibGVyLm1vdmxSMG1yKHNyYywgZHN0KTsKKyAgICB9CisKKyAgICB2b2lkIGxvYWQz
MihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICBtX2Fzc2Vt
Ymxlci5tb3ZsTWVtUmVnKHNyYywgZHN0KTsKKyAgICB9CisKKyAgICB2b2lkIGxvYWQxNihJbXBs
aWNpdEFkZHJlc3MgYWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgaWYg
KCFhZGRyZXNzLm9mZnNldCkgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIubW92d01lbVJlZyhh
ZGRyZXNzLmJhc2UsIGRlc3QpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAg
ICAgICAgaWYgKChhZGRyZXNzLm9mZnNldCA+IDApICYmIChhZGRyZXNzLm9mZnNldCA8IDY0KSAm
JiAoZGVzdCA9PSBTSDRSZWdpc3RlcnM6OnIwKSkgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIu
bW92d01lbVJlZyhhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlLCBkZXN0KTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChhZGRyZXNzLmJhc2UgIT0gZGVz
dCkgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIubG9hZENvbnN0YW50KChhZGRyZXNzLm9mZnNl
dCksIGRlc3QpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRkbFJlZ1JlZyhhZGRyZXNzLmJh
c2UsIGRlc3QpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIubW92d01lbVJlZyhkZXN0LCBkZXN0
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIFJlZ2lzdGVySUQg
c2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvYWRDb25zdGFudCgo
YWRkcmVzcy5vZmZzZXQpLCBzY3IpOworICAgICAgICBtX2Fzc2VtYmxlci5hZGRsUmVnUmVnKGFk
ZHJlc3MuYmFzZSwgc2NyKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubW92d01lbVJlZyhzY3IsIGRl
c3QpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgIH0KKworICAgIHZvaWQgbG9h
ZDE2KFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fz
c2VtYmxlci5tb3Z3TWVtUmVnKHNyYywgZGVzdCk7CisgICAgfQorCisgICAgdm9pZCBsb2FkMTYo
UmVnaXN0ZXJJRCByMCwgUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChyMCA9PSBTSDRSZWdpc3RlcnM6OnIwKTsKKyAgICAgICAgbV9hc3NlbWJs
ZXIubW92d1IwbXIoc3JjLCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIGxvYWQxNihCYXNlSW5k
ZXggYWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCBz
Y3IgPSBjbGFpbVNjcmF0Y2goKTsKKworICAgICAgICBtb3ZlKGFkZHJlc3MuaW5kZXgsIHNjcik7
CisgICAgICAgIGxzaGlmdDMyKEltbTMyKGFkZHJlc3Muc2NhbGUpLCBzY3IpOworCisgICAgICAg
IGlmIChhZGRyZXNzLm9mZnNldCkKKyAgICAgICAgICAgIGFkZDMyKEltbTMyKGFkZHJlc3Mub2Zm
c2V0KSwgc2NyKTsKKyAgICAgICAgaWYgKHNjciA9PSBTSDRSZWdpc3RlcnM6OnIwKQorICAgICAg
ICAgICAgbV9hc3NlbWJsZXIubW92d1IwbXIoYWRkcmVzcy5iYXNlLCBzY3IpOworICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgIGFkZDMyKGFkZHJlc3MuYmFzZSwgc2NyKTsKKyAgICAgICAgICAg
IGxvYWQxNihzY3IsIHNjcik7CisgICAgICAgIH0KKworICAgICAgICBleHR1dyhzY3IsIGRlc3Qp
OworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgIH0KKworICAgIHZvaWQgc3RvcmUz
MihSZWdpc3RlcklEIHNyYywgSW1wbGljaXRBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAg
ICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBzdG9yZTMyKHNyYywg
YWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSwgc2NyKTsKKyAgICAgICAgcmVsZWFzZVNjcmF0
Y2goc2NyKTsKKyAgICB9CisKKyAgICB2b2lkIHN0b3JlMzIoUmVnaXN0ZXJJRCBzcmMsIGludCBv
ZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBzY3IpCisgICAgeworICAgICAgICBp
ZiAoIW9mZnNldCkgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIubW92bFJlZ01lbShzcmMsIGJh
c2UpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKChvZmZz
ZXQgPj0wKSAmJiAob2Zmc2V0IDwgNjQpKSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5tb3Zs
UmVnTWVtKHNyYywgb2Zmc2V0ID4+IDIsIGJhc2UpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisKKyAgICAgICAgbV9hc3NlbWJsZXIubG9hZENvbnN0YW50KChvZmZzZXQpLCBzY3Ip
OworICAgICAgICBpZiAoc2NyID09IFNINFJlZ2lzdGVyczo6cjApIHsKKyAgICAgICAgICAgIG1f
YXNzZW1ibGVyLm1vdmxSZWdNZW1yMChzcmMsIGJhc2UpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisKKyAgICAgICAgbV9hc3NlbWJsZXIuYWRkbFJlZ1JlZyhiYXNlLCBzY3IpOwor
ICAgICAgICBtX2Fzc2VtYmxlci5tb3ZsUmVnTWVtKHNyYywgc2NyKTsKKyAgICB9CisKKyAgICB2
b2lkIHN0b3JlMzIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgb2Zmc2V0LCBSZWdpc3RlcklE
IGJhc2UpCisgICAgeworICAgICAgICBBU1NFUlQob2Zmc2V0ID09IFNINFJlZ2lzdGVyczo6cjAp
OworICAgICAgICBtX2Fzc2VtYmxlci5tb3ZsUmVnTWVtcjAoc3JjLCBiYXNlKTsKKyAgICB9CisK
KyAgICB2b2lkIHN0b3JlMzIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsK
KyAgICAgICAgbV9hc3NlbWJsZXIubW92bFJlZ01lbShzcmMsIGRzdCk7CisgICAgfQorCisgICAg
dm9pZCBzdG9yZTMyKEltbTMyIGltbSwgSW1wbGljaXRBZGRyZXNzIGFkZHJlc3MpCisgICAgewor
ICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBSZWdpc3Rl
cklEIHNjcjEgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9hZENvbnN0
YW50KChpbW0ubV92YWx1ZSksIHNjcik7CisgICAgICAgIHN0b3JlMzIoc2NyLCBhZGRyZXNzLm9m
ZnNldCwgYWRkcmVzcy5iYXNlLCBzY3IxKTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsK
KyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyMSk7CisgICAgfQorCisgICAgdm9pZCBzdG9yZTMy
KFJlZ2lzdGVySUQgc3JjLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIFJlZ2lz
dGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisKKyAgICAgICAgbW92ZShhZGRyZXNzLmluZGV4
LCBzY3IpOworICAgICAgICBsc2hpZnQzMihJbW0zMihhZGRyZXNzLnNjYWxlKSwgc2NyKTsKKyAg
ICAgICAgYWRkMzIoYWRkcmVzcy5iYXNlLCBzY3IpOworICAgICAgICBzdG9yZTMyKHNyYywgQWRk
cmVzcyhzY3IsIGFkZHJlc3Mub2Zmc2V0KSk7CisKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2Ny
KTsKKyAgICB9CisKKyAgICB2b2lkIHN0b3JlMzIoSW1tMzIgaW1tLCB2b2lkKiBhZGRyZXNzKQor
ICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAg
UmVnaXN0ZXJJRCBzY3IxID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIG1fYXNzZW1ibGVyLmxv
YWRDb25zdGFudCgoaW1tLm1fdmFsdWUpLCBzY3IpOworICAgICAgICBtX2Fzc2VtYmxlci5sb2Fk
Q29uc3RhbnQocmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdD4oYWRkcmVzcyksIHNjcjEpOworICAg
ICAgICBtX2Fzc2VtYmxlci5tb3ZsTWVtUmVnKHNjciwgc2NyMSk7CisgICAgICAgIHJlbGVhc2VT
Y3JhdGNoKHNjcik7CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcjEpOworICAgIH0KKworICAg
IHZvaWQgc3RvcmUzMihSZWdpc3RlcklEIHNyYywgdm9pZCogYWRkcmVzcykKKyAgICB7CisgICAg
ICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIG1fYXNzZW1ibGVy
LmxvYWRDb25zdGFudChyZWludGVycHJldF9jYXN0PHVpbnQzMl90PihhZGRyZXNzKSwgc2NyKTsK
KyAgICAgICAgbV9hc3NlbWJsZXIubW92bE1lbVJlZyhzcmMsIHNjcik7CisgICAgICAgIHJlbGVh
c2VTY3JhdGNoKHNjcik7CisgICAgfQorCisgICAgRGF0YUxhYmVsMzIgbG9hZDMyV2l0aEFkZHJl
c3NPZmZzZXRQYXRjaChBZGRyZXNzIGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7Cisg
ICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIERhdGFMYWJl
bDMyIGxhYmVsKHRoaXMpOworICAgICAgICBtX2Fzc2VtYmxlci5sb2FkQ29uc3RhbnRVblJldXNh
YmxlKGFkZHJlc3Mub2Zmc2V0LCBzY3IpOworICAgICAgICBtX2Fzc2VtYmxlci5hZGRsUmVnUmVn
KGFkZHJlc3MuYmFzZSwgc2NyKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubW92bE1lbVJlZyhzY3Is
IGRlc3QpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgICAgICByZXR1cm4gbGFi
ZWw7CisgICAgfQorCisgICAgRGF0YUxhYmVsMzIgc3RvcmUzMldpdGhBZGRyZXNzT2Zmc2V0UGF0
Y2goUmVnaXN0ZXJJRCBzcmMsIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIFJlZ2lz
dGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIERhdGFMYWJlbDMyIGxhYmVsKHRo
aXMpOworICAgICAgICBtX2Fzc2VtYmxlci5sb2FkQ29uc3RhbnRVblJldXNhYmxlKGFkZHJlc3Mu
b2Zmc2V0LCBzY3IpOworICAgICAgICBtX2Fzc2VtYmxlci5hZGRsUmVnUmVnKGFkZHJlc3MuYmFz
ZSwgc2NyKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubW92bFJlZ01lbShzcmMsIHNjcik7CisgICAg
ICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgICAgIHJldHVybiBsYWJlbDsKKyAgICB9CisK
KyAgICAgLy8gRmxvYXRpbmctcG9pbnQgb3BlcmF0aW9ucworCisgICAgYm9vbCBzdXBwb3J0c0Zs
b2F0aW5nUG9pbnQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisgICAgYm9vbCBzdXBwb3J0c0Zs
b2F0aW5nUG9pbnRUcnVuY2F0ZSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKyAgICBib29sIHN1
cHBvcnRzRmxvYXRpbmdQb2ludFNxcnQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisKKyAgICB2
b2lkIGxvYWREb3VibGUoSW1wbGljaXRBZGRyZXNzIGFkZHJlc3MsIEZQUmVnaXN0ZXJJRCBkZXN0
KQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKworICAg
ICAgICBtX2Fzc2VtYmxlci5sb2FkQ29uc3RhbnQoYWRkcmVzcy5vZmZzZXQsIHNjcik7CisgICAg
ICAgIGlmIChhZGRyZXNzLmJhc2UgPT0gU0g0UmVnaXN0ZXJzOjpyMCkgeworICAgICAgICAgICAg
bV9hc3NlbWJsZXIuZm1vdnNSZWFkcjByKHNjciwgKEZQUmVnaXN0ZXJJRCkoZGVzdCArIDEpKTsK
KyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZGxJbW04cig0LCBzY3IpOworICAgICAgICAgICAg
bV9hc3NlbWJsZXIuZm1vdnNSZWFkcjByKHNjciwgZGVzdCk7CisgICAgICAgICAgICByZWxlYXNl
U2NyYXRjaChzY3IpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAg
bV9hc3NlbWJsZXIuYWRkbFJlZ1JlZyhhZGRyZXNzLmJhc2UsIHNjcik7CisgICAgICAgIG1fYXNz
ZW1ibGVyLmZtb3ZzUmVhZHJtaW5jKHNjciwgKEZQUmVnaXN0ZXJJRCkoZGVzdCArIDEpKTsKKyAg
ICAgICAgbV9hc3NlbWJsZXIuZm1vdnNSZWFkcm0oc2NyLCBkZXN0KTsKKyAgICAgICAgcmVsZWFz
ZVNjcmF0Y2goc2NyKTsKKyAgICB9CisKKyAgICB2b2lkIGxvYWREb3VibGUoY29uc3Qgdm9pZCog
YWRkcmVzcywgRlBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBSZWdpc3RlcklEIHNj
ciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBtX2Fzc2VtYmxlci5sb2FkQ29uc3RhbnQocmVp
bnRlcnByZXRfY2FzdDx1aW50MzJfdD4oYWRkcmVzcyksIHNjcik7CisgICAgICAgIG1fYXNzZW1i
bGVyLmZtb3ZzUmVhZHJtaW5jKHNjciwgKEZQUmVnaXN0ZXJJRCkoZGVzdCArIDEpKTsKKyAgICAg
ICAgbV9hc3NlbWJsZXIuZm1vdnNSZWFkcm0oc2NyLCBkZXN0KTsKKyAgICAgICAgcmVsZWFzZVNj
cmF0Y2goc2NyKTsKKyAgICB9CisKKyAgICB2b2lkIHN0b3JlRG91YmxlKEZQUmVnaXN0ZXJJRCBz
cmMsIEltcGxpY2l0QWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCBz
Y3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9hZENvbnN0YW50KGFk
ZHJlc3Mub2Zmc2V0LCBzY3IpOworICAgICAgICBtX2Fzc2VtYmxlci5hZGRsUmVnUmVnKGFkZHJl
c3MuYmFzZSwgc2NyKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuZm1vdnNXcml0ZXJtKChGUFJlZ2lz
dGVySUQpKHNyYyArIDEpLCBzY3IpOworICAgICAgICBtX2Fzc2VtYmxlci5hZGRsSW1tOHIoNCwg
c2NyKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuZm1vdnNXcml0ZXJtKHNyYywgc2NyKTsKKyAgICAg
ICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICB9CisKKyAgICB2b2lkIGFkZERvdWJsZShGUFJl
Z2lzdGVySUQgc3JjLCBGUFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1i
bGVyLmRhZGRSZWdSZWcoc3JjLCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIGFkZERvdWJsZShB
ZGRyZXNzIGFkZHJlc3MsIEZQUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbG9hZERv
dWJsZShhZGRyZXNzLCBmc2NyYXRjaCk7CisgICAgICAgIGFkZERvdWJsZShmc2NyYXRjaCwgZGVz
dCk7CisgICAgfQorCisgICAgdm9pZCBzdWJEb3VibGUoRlBSZWdpc3RlcklEIHNyYywgRlBSZWdp
c3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5kc3ViUmVnUmVnKHNyYywg
ZGVzdCk7CisgICAgfQorCisgICAgdm9pZCBzdWJEb3VibGUoQWRkcmVzcyBhZGRyZXNzLCBGUFJl
Z2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIGxvYWREb3VibGUoYWRkcmVzcywgZnNjcmF0
Y2gpOworICAgICAgICBzdWJEb3VibGUoZnNjcmF0Y2gsIGRlc3QpOworICAgIH0KKworICAgIHZv
aWQgbXVsRG91YmxlKEZQUmVnaXN0ZXJJRCBzcmMsIEZQUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsK
KyAgICAgICAgbV9hc3NlbWJsZXIuZG11bFJlZ1JlZyhzcmMsIGRlc3QpOworICAgIH0KKworICAg
IHZvaWQgbXVsRG91YmxlKEFkZHJlc3MgYWRkcmVzcywgRlBSZWdpc3RlcklEIGRlc3QpCisgICAg
eworICAgICAgICBsb2FkRG91YmxlKGFkZHJlc3MsIGZzY3JhdGNoKTsKKyAgICAgICAgbXVsRG91
YmxlKGZzY3JhdGNoLCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIGRpdkRvdWJsZShGUFJlZ2lz
dGVySUQgc3JjLCBGUFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVy
LmRkaXZSZWdSZWcoc3JjLCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIGNvbnZlcnRJbnQzMlRv
RG91YmxlKFJlZ2lzdGVySUQgc3JjLCBGUFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAg
IG1fYXNzZW1ibGVyLmxkc3JtZnB1bChzcmMpOworICAgICAgICBtX2Fzc2VtYmxlci5mbG9hdGZw
dWxEcmVnKGRlc3QpOworICAgIH0KKworICAgIHZvaWQgY29udmVydEludDMyVG9Eb3VibGUoQWJz
b2x1dGVBZGRyZXNzIHNyYywgRlBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBSZWdp
c3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBtX2Fzc2VtYmxlci5sb2FkQ29u
c3RhbnQocmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdD4oc3JjLm1fcHRyKSwgc2NyKTsKKyAgICAg
ICAgY29udmVydEludDMyVG9Eb3VibGUoc2NyLCBkZXN0KTsKKyAgICAgICAgcmVsZWFzZVNjcmF0
Y2goc2NyKTsKKyAgICB9CisKKyAgICB2b2lkIGNvbnZlcnRJbnQzMlRvRG91YmxlKEFkZHJlc3Mg
c3JjLCBGUFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0g
Y2xhaW1TY3JhdGNoKCk7CisgICAgICAgIGxvYWQzMihzcmMsIHNjcik7CisgICAgICAgIGNvbnZl
cnRJbnQzMlRvRG91YmxlKHNjciwgZGVzdCk7CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7
CisgICAgfQorCisgICAgdm9pZCBsb2FkMzJXaXRoVW5hbGlnbmVkSGFsZldvcmRzKEJhc2VJbmRl
eCBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBSZWdpc3RlcklEIHNj
ciA9IGNsYWltU2NyYXRjaCgpOworCisgICAgICAgIG1vdmUoYWRkcmVzcy5pbmRleCwgc2NyKTsK
KyAgICAgICAgbHNoaWZ0MzIoSW1tMzIoYWRkcmVzcy5zY2FsZSksIHNjcik7CisgICAgICAgIGFk
ZDMyKGFkZHJlc3MuYmFzZSwgc2NyKTsKKworICAgICAgICBpZiAoYWRkcmVzcy5vZmZzZXQpCisg
ICAgICAgICAgICBhZGQzMihJbW0zMihhZGRyZXNzLm9mZnNldCksIHNjcik7CisKKyAgICAgICAg
UmVnaXN0ZXJJRCBzY3IxID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIGxvYWQxNihzY3IsIHNj
cjEpOworICAgICAgICBhZGQzMihJbW0zMigyKSwgc2NyKTsKKyAgICAgICAgbG9hZDE2KHNjciwg
ZGVzdCk7CisgICAgICAgIG1vdmUoSW1tMzIoMTYpLCBzY3IpOworICAgICAgICBtX2Fzc2VtYmxl
ci5zaGxsUmVnUmVnKGRlc3QsIHNjcik7CisgICAgICAgIG9yMzIoc2NyMSwgZGVzdCk7CisKKyAg
ICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyMSk7
CisgICAgfQorCisgICAgSnVtcCBicmFuY2gzMldpdGhVbmFsaWduZWRIYWxmV29yZHMoQ29uZGl0
aW9uIGNvbmQsIEJhc2VJbmRleCBsZWZ0LCBJbW0zMiByaWdodCkKKyAgICB7CisgICAgICAgIFJl
Z2lzdGVySUQgc2NyID0gc2NyYXRjaFJlZzM7CisgICAgICAgIGxvYWQzMldpdGhVbmFsaWduZWRI
YWxmV29yZHMobGVmdCwgc2NyKTsKKyAgICAgICAgaWYgKCgoY29uZCA9PSBFcXVhbCkgfHwgKGNv
bmQgPT0gTm90RXF1YWwpKSAmJiAhcmlnaHQubV92YWx1ZSkKKyAgICAgICAgICAgIG1fYXNzZW1i
bGVyLnRlc3RsUmVnUmVnKHNjciwgc2NyKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY29t
cGFyZTMyKHJpZ2h0Lm1fdmFsdWUsIHNjciwgY29uZCk7CisKKyAgICAgICAgaWYgKGNvbmQgPT0g
Tm90RXF1YWwpCisgICAgICAgICAgICByZXR1cm4gYnJhbmNoRmFsc2UoKTsKKyAgICAgICAgcmV0
dXJuIGJyYW5jaFRydWUoKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaERvdWJsZU5vblplcm8o
RlBSZWdpc3RlcklEIHJlZywgRlBSZWdpc3RlcklEIHNjcmF0Y2gpCisgICAgeworICAgICAgICBt
X2Fzc2VtYmxlci5tb3ZJbW04KDAsIHNjcmF0Y2hSZWczKTsKKyAgICAgICAgY29udmVydEludDMy
VG9Eb3VibGUoc2NyYXRjaFJlZzMsIHNjcmF0Y2gpOworICAgICAgICByZXR1cm4gYnJhbmNoRG91
YmxlKERvdWJsZU5vdEVxdWFsLCByZWcsIHNjcmF0Y2gpOworICAgIH0KKworICAgIEp1bXAgYnJh
bmNoRG91YmxlWmVyb09yTmFOKEZQUmVnaXN0ZXJJRCByZWcsIEZQUmVnaXN0ZXJJRCBzY3JhdGNo
KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubW92SW1tOCgwLCBzY3JhdGNoUmVnMyk7Cisg
ICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKHNjcmF0Y2hSZWczLCBzY3JhdGNoKTsKKyAgICAg
ICAgcmV0dXJuIGJyYW5jaERvdWJsZShEb3VibGVFcXVhbE9yVW5vcmRlcmVkLCByZWcsIHNjcmF0
Y2gpOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoRG91YmxlKENvbmRpdGlvbiBjb25kLCBGUFJl
Z2lzdGVySUQgbGVmdCwgRlBSZWdpc3RlcklEIHJpZ2h0KQorICAgIHsKKyAgICAgICAgaWYgKGNv
bmQgPT0gRG91YmxlRXF1YWwpIHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmRjbXBwZXEocmln
aHQsIGxlZnQpOworICAgICAgICAgICAgcmV0dXJuIGJyYW5jaFRydWUoKTsKKyAgICAgICAgfQor
CisgICAgICAgIGlmIChjb25kID09IERvdWJsZU5vdEVxdWFsKSB7CisgICAgICAgICAgICBSZWdp
c3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIubG9h
ZENvbnN0YW50KDB4N2ZiZmZmZmYsIHNjcmF0Y2hSZWczKTsKKyAgICAgICAgICAgIG1fYXNzZW1i
bGVyLmRjbnZkcyhyaWdodCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zdHNmcHVsUmVnKHNj
cik7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5jbXBsUmVnUmVnKHNjcmF0Y2hSZWczLCBzY3Is
IEVxdWFsKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmVuc3VyZVNwYWNlKG1fYXNzZW1ibGVy
Lm1heEluc3RydWN0aW9uU2l6ZSArIDIyLCBzaXplb2YodWludDMyX3QpKTsKKyAgICAgICAgICAg
IG1fYXNzZW1ibGVyLmJyYW5jaChCVF9PUENPREUsIDgpOworICAgICAgICAgICAgbV9hc3NlbWJs
ZXIuZGNudmRzKGxlZnQpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuc3RzZnB1bFJlZyhzY3Ip
OworICAgICAgICAgICAgbV9hc3NlbWJsZXIuY21wbFJlZ1JlZyhzY3JhdGNoUmVnMywgc2NyLCBF
cXVhbCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5icmFuY2goQlRfT1BDT0RFLCA0KTsKKyAg
ICAgICAgICAgIG1fYXNzZW1ibGVyLmRjbXBwZXEocmlnaHQsIGxlZnQpOworICAgICAgICAgICAg
cmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICAgICAgICAgIHJldHVybiBicmFuY2hGYWxzZSgpOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKGNvbmQgPT0gRG91YmxlR3JlYXRlclRoYW4pIHsKKyAg
ICAgICAgICAgIG1fYXNzZW1ibGVyLmRjbXBwZ3QocmlnaHQsIGxlZnQpOworICAgICAgICAgICAg
cmV0dXJuIGJyYW5jaFRydWUoKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChjb25kID09IERv
dWJsZUdyZWF0ZXJUaGFuT3JFcXVhbCkgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIuZGNtcHBn
dChsZWZ0LCByaWdodCk7CisgICAgICAgICAgICByZXR1cm4gYnJhbmNoRmFsc2UoKTsKKyAgICAg
ICAgfQorCisgICAgICAgIGlmIChjb25kID09IERvdWJsZUxlc3NUaGFuKSB7CisgICAgICAgICAg
ICBtX2Fzc2VtYmxlci5kY21wcGd0KGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgIHJldHVybiBi
cmFuY2hUcnVlKCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoY29uZCA9PSBEb3VibGVMZXNz
VGhhbk9yRXF1YWwpIHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmRjbXBwZ3QocmlnaHQsIGxl
ZnQpOworICAgICAgICAgICAgcmV0dXJuIGJyYW5jaEZhbHNlKCk7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAoY29uZCA9PSBEb3VibGVFcXVhbE9yVW5vcmRlcmVkKSB7CisgICAgICAgICAgICBS
ZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIu
bG9hZENvbnN0YW50KDB4N2ZiZmZmZmYsIHNjcmF0Y2hSZWczKTsKKyAgICAgICAgICAgIG1fYXNz
ZW1ibGVyLmRjbnZkcyhyaWdodCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zdHNmcHVsUmVn
KHNjcik7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5jbXBsUmVnUmVnKHNjcmF0Y2hSZWczLCBz
Y3IsIEVxdWFsKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmVuc3VyZVNwYWNlKG1fYXNzZW1i
bGVyLm1heEluc3RydWN0aW9uU2l6ZSArIDIyLCBzaXplb2YodWludDMyX3QpKTsKKyAgICAgICAg
ICAgIG1fYXNzZW1ibGVyLmJyYW5jaChCVF9PUENPREUsIDUpOworICAgICAgICAgICAgbV9hc3Nl
bWJsZXIuZGNudmRzKGxlZnQpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuc3RzZnB1bFJlZyhz
Y3IpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuY21wbFJlZ1JlZyhzY3JhdGNoUmVnMywgc2Ny
LCBFcXVhbCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5icmFuY2goQlRfT1BDT0RFLCAxKTsK
KyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmRjbXBwZXEobGVmdCwgcmlnaHQpOworICAgICAgICAg
ICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICAgICAgICAgIHJldHVybiBicmFuY2hUcnVlKCk7
CisgICAgICAgIH0KKworICAgICAgICBpZiAoY29uZCA9PSBEb3VibGVHcmVhdGVyVGhhbk9yVW5v
cmRlcmVkKSB7CisgICAgICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOwor
ICAgICAgICAgICAgbV9hc3NlbWJsZXIubG9hZENvbnN0YW50KDB4N2ZiZmZmZmYsIHNjcmF0Y2hS
ZWczKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmRjbnZkcyhyaWdodCk7CisgICAgICAgICAg
ICBtX2Fzc2VtYmxlci5zdHNmcHVsUmVnKHNjcik7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5j
bXBsUmVnUmVnKHNjcmF0Y2hSZWczLCBzY3IsIEVxdWFsKTsKKyAgICAgICAgICAgIG1fYXNzZW1i
bGVyLmVuc3VyZVNwYWNlKG1fYXNzZW1ibGVyLm1heEluc3RydWN0aW9uU2l6ZSArIDIyLCBzaXpl
b2YodWludDMyX3QpKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmJyYW5jaChCVF9PUENPREUs
IDUpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuZGNudmRzKGxlZnQpOworICAgICAgICAgICAg
bV9hc3NlbWJsZXIuc3RzZnB1bFJlZyhzY3IpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuY21w
bFJlZ1JlZyhzY3JhdGNoUmVnMywgc2NyLCBFcXVhbCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxl
ci5icmFuY2goQlRfT1BDT0RFLCAxKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmRjbXBwZ3Qo
cmlnaHQsIGxlZnQpOworICAgICAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICAgICAg
ICAgIHJldHVybiBicmFuY2hUcnVlKCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoY29uZCA9
PSBEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxPclVub3JkZXJlZCkgeworICAgICAgICAgICAgUmVn
aXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmxv
YWRDb25zdGFudCgweDdmYmZmZmZmLCBzY3JhdGNoUmVnMyk7CisgICAgICAgICAgICBtX2Fzc2Vt
Ymxlci5kY252ZHMocmlnaHQpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuc3RzZnB1bFJlZyhz
Y3IpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuY21wbFJlZ1JlZyhzY3JhdGNoUmVnMywgc2Ny
LCBFcXVhbCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5lbnN1cmVTcGFjZShtX2Fzc2VtYmxl
ci5tYXhJbnN0cnVjdGlvblNpemUgKyAyMiwgc2l6ZW9mKHVpbnQzMl90KSk7CisgICAgICAgICAg
ICBtX2Fzc2VtYmxlci5icmFuY2goQlRfT1BDT0RFLCA1KTsKKyAgICAgICAgICAgIG1fYXNzZW1i
bGVyLmRjbnZkcyhsZWZ0KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnN0c2ZwdWxSZWcoc2Ny
KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmNtcGxSZWdSZWcoc2NyYXRjaFJlZzMsIHNjciwg
RXF1YWwpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuYnJhbmNoKEJUX09QQ09ERSwgMSk7Cisg
ICAgICAgICAgICBtX2Fzc2VtYmxlci5kY21wcGd0KGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAg
IHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgICAgICAgICByZXR1cm4gYnJhbmNoRmFsc2UoKTsK
KyAgICAgICAgfQorCisgICAgICAgIGlmIChjb25kID09IERvdWJsZUxlc3NUaGFuT3JVbm9yZGVy
ZWQpIHsKKyAgICAgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAg
ICAgICAgICBtX2Fzc2VtYmxlci5sb2FkQ29uc3RhbnQoMHg3ZmJmZmZmZiwgc2NyYXRjaFJlZzMp
OworICAgICAgICAgICAgbV9hc3NlbWJsZXIuZGNudmRzKHJpZ2h0KTsKKyAgICAgICAgICAgIG1f
YXNzZW1ibGVyLnN0c2ZwdWxSZWcoc2NyKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmNtcGxS
ZWdSZWcoc2NyYXRjaFJlZzMsIHNjciwgRXF1YWwpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIu
ZW5zdXJlU3BhY2UobV9hc3NlbWJsZXIubWF4SW5zdHJ1Y3Rpb25TaXplICsgMjIsIHNpemVvZih1
aW50MzJfdCkpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuYnJhbmNoKEJUX09QQ09ERSwgNSk7
CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5kY252ZHMobGVmdCk7CisgICAgICAgICAgICBtX2Fz
c2VtYmxlci5zdHNmcHVsUmVnKHNjcik7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5jbXBsUmVn
UmVnKHNjcmF0Y2hSZWczLCBzY3IsIEVxdWFsKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmJy
YW5jaChCVF9PUENPREUsIDEpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuZGNtcHBndChsZWZ0
LCByaWdodCk7CisgICAgICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgICAgICAgICAg
cmV0dXJuIGJyYW5jaFRydWUoKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChjb25kID09IERv
dWJsZUxlc3NUaGFuT3JFcXVhbE9yVW5vcmRlcmVkKSB7CisgICAgICAgICAgICBSZWdpc3RlcklE
IHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIubG9hZENvbnN0
YW50KDB4N2ZiZmZmZmYsIHNjcmF0Y2hSZWczKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmRj
bnZkcyhyaWdodCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zdHNmcHVsUmVnKHNjcik7Cisg
ICAgICAgICAgICBtX2Fzc2VtYmxlci5jbXBsUmVnUmVnKHNjcmF0Y2hSZWczLCBzY3IsIEVxdWFs
KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmVuc3VyZVNwYWNlKG1fYXNzZW1ibGVyLm1heElu
c3RydWN0aW9uU2l6ZSArIDIyLCBzaXplb2YodWludDMyX3QpKTsKKyAgICAgICAgICAgIG1fYXNz
ZW1ibGVyLmJyYW5jaChCVF9PUENPREUsIDUpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuZGNu
dmRzKGxlZnQpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuc3RzZnB1bFJlZyhzY3IpOworICAg
ICAgICAgICAgbV9hc3NlbWJsZXIuY21wbFJlZ1JlZyhzY3JhdGNoUmVnMywgc2NyLCBFcXVhbCk7
CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5icmFuY2goQlRfT1BDT0RFLCAxKTsKKyAgICAgICAg
ICAgIG1fYXNzZW1ibGVyLmRjbXBwZ3QocmlnaHQsIGxlZnQpOworICAgICAgICAgICAgcmVsZWFz
ZVNjcmF0Y2goc2NyKTsKKyAgICAgICAgICAgIHJldHVybiBicmFuY2hGYWxzZSgpOworICAgICAg
ICB9CisKKyAgICAgICAgQVNTRVJUKGNvbmQgPT0gRG91YmxlTm90RXF1YWxPclVub3JkZXJlZCk7
CisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIG1fYXNz
ZW1ibGVyLmxvYWRDb25zdGFudCgweDdmYmZmZmZmLCBzY3JhdGNoUmVnMyk7CisgICAgICAgIG1f
YXNzZW1ibGVyLmRjbnZkcyhyaWdodCk7CisgICAgICAgIG1fYXNzZW1ibGVyLnN0c2ZwdWxSZWco
c2NyKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuY21wbFJlZ1JlZyhzY3JhdGNoUmVnMywgc2NyLCBF
cXVhbCk7CisgICAgICAgIG1fYXNzZW1ibGVyLmVuc3VyZVNwYWNlKG1fYXNzZW1ibGVyLm1heElu
c3RydWN0aW9uU2l6ZSArIDIyLCBzaXplb2YodWludDMyX3QpKTsKKyAgICAgICAgbV9hc3NlbWJs
ZXIuYnJhbmNoKEJUX09QQ09ERSwgNSk7CisgICAgICAgIG1fYXNzZW1ibGVyLmRjbnZkcyhsZWZ0
KTsKKyAgICAgICAgbV9hc3NlbWJsZXIuc3RzZnB1bFJlZyhzY3IpOworICAgICAgICBtX2Fzc2Vt
Ymxlci5jbXBsUmVnUmVnKHNjcmF0Y2hSZWczLCBzY3IsIEVxdWFsKTsKKyAgICAgICAgbV9hc3Nl
bWJsZXIuYnJhbmNoKEJUX09QQ09ERSwgMSk7CisgICAgICAgIG1fYXNzZW1ibGVyLmRjbXBwZXEo
cmlnaHQsIGxlZnQpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgICAgICByZXR1
cm4gYnJhbmNoRmFsc2UoKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaFRydWUoKQorICAgIHsK
KyAgICAgICAgbV9hc3NlbWJsZXIuZW5zdXJlU3BhY2UobV9hc3NlbWJsZXIubWF4SW5zdHJ1Y3Rp
b25TaXplICsgNiwgc2l6ZW9mKHVpbnQzMl90KSk7CisgICAgICAgIEp1bXAgbV9qdW1wID0gSnVt
cChtX2Fzc2VtYmxlci5qZSgpKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9hZENvbnN0YW50VW5S
ZXVzYWJsZSgweDAsIHNjcmF0Y2hSZWczKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubm9wKCk7Cisg
ICAgICAgIG1fYXNzZW1ibGVyLm5vcCgpOworICAgICAgICByZXR1cm4gbV9qdW1wOworICAgIH0K
KworICAgIEp1bXAgYnJhbmNoRmFsc2UoKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuZW5z
dXJlU3BhY2UobV9hc3NlbWJsZXIubWF4SW5zdHJ1Y3Rpb25TaXplICsgNiwgc2l6ZW9mKHVpbnQz
Ml90KSk7CisgICAgICAgIEp1bXAgbV9qdW1wID0gSnVtcChtX2Fzc2VtYmxlci5qbmUoKSk7Cisg
ICAgICAgIG1fYXNzZW1ibGVyLmxvYWRDb25zdGFudFVuUmV1c2FibGUoMHgwLCBzY3JhdGNoUmVn
Myk7CisgICAgICAgIG1fYXNzZW1ibGVyLm5vcCgpOworICAgICAgICBtX2Fzc2VtYmxlci5ub3Ao
KTsKKyAgICAgICAgcmV0dXJuIG1fanVtcDsKKyAgICB9CisKKyAgICB2b2lkIHNldDhDb21wYXJl
MzIoQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgbGVmdCwgUmVnaXN0ZXJJRCByaWdodCwgUmVn
aXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgc2V0MzJDb21wYXJlMzIoY29uZCwgbGVmdCwg
cmlnaHQsIGRlc3QpOworICAgIH0KKworICAgIHZvaWQgc2V0OENvbXBhcmUzMihDb25kaXRpb24g
Y29uZCwgUmVnaXN0ZXJJRCBsZWZ0LCBJbW0zMiByaWdodCwgUmVnaXN0ZXJJRCBkZXN0KQorICAg
IHsKKyAgICAgICAgaWYgKGxlZnQgIT0gZGVzdCkgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIu
bG9hZENvbnN0YW50KHJpZ2h0Lm1fdmFsdWUsIGRlc3QpOworICAgICAgICAgICAgc2V0MzJDb21w
YXJlMzIoY29uZCwgbGVmdCwgZGVzdCwgZGVzdCk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKworICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAg
ICBtX2Fzc2VtYmxlci5sb2FkQ29uc3RhbnQocmlnaHQubV92YWx1ZSwgc2NyKTsKKyAgICAgICAg
c2V0MzJDb21wYXJlMzIoY29uZCwgbGVmdCwgc2NyLCBkZXN0KTsKKyAgICAgICAgcmVsZWFzZVNj
cmF0Y2goc2NyKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaDMyKENvbmRpdGlvbiBjb25kLCBC
YXNlSW5kZXggbGVmdCwgSW1tMzIgcmlnaHQpCisgICAgeworICAgICAgICBSZWdpc3RlcklEIHNj
ciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBtb3ZlKGxlZnQuaW5kZXgsIHNjcik7CisgICAg
ICAgIGxzaGlmdDMyKEltbTMyKGxlZnQuc2NhbGUpLCBzY3IpOworICAgICAgICBhZGQzMihsZWZ0
LmJhc2UsIHNjcik7CisgICAgICAgIGxvYWQzMihzY3IsIGxlZnQub2Zmc2V0LCBzY3IpOworICAg
ICAgICBjb21wYXJlMzIocmlnaHQubV92YWx1ZSwgc2NyLCBjb25kKTsKKyAgICAgICAgcmVsZWFz
ZVNjcmF0Y2goc2NyKTsKKworICAgICAgICBpZiAoY29uZCA9PSBOb3RFcXVhbCkKKyAgICAgICAg
ICAgIHJldHVybiBicmFuY2hGYWxzZSgpOworICAgICAgICByZXR1cm4gYnJhbmNoVHJ1ZSgpOwor
ICAgIH0KKworICAgIHZvaWQgc3FydERvdWJsZShGUFJlZ2lzdGVySUQgc3JjLCBGUFJlZ2lzdGVy
SUQgZGVzdCkKKyAgICB7CisgICAgICAgIGlmIChkZXN0ICE9IHNyYykKKyAgICAgICAgICAgIG1f
YXNzZW1ibGVyLmRtb3ZSZWdSZWcoc3JjLCBkZXN0KTsKKyAgICAgICAgbV9hc3NlbWJsZXIuZHNx
cnQoZGVzdCk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2hUZXN0OChDb25kaXRpb24gY29uZCwg
QWRkcmVzcyBhZGRyZXNzLCBJbW0zMiBtYXNrID0gSW1tMzIoLTEpKQorICAgIHsKKyAgICAgICAg
UmVnaXN0ZXJJRCBhZGRyZXNzVGVtcFJlZ2lzdGVyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAg
IGxvYWQ4KGFkZHJlc3MsIGFkZHJlc3NUZW1wUmVnaXN0ZXIpOworICAgICAgICBKdW1wIGptcCA9
IGJyYW5jaFRlc3QzMihjb25kLCBhZGRyZXNzVGVtcFJlZ2lzdGVyLCBtYXNrKTsKKyAgICAgICAg
cmVsZWFzZVNjcmF0Y2goYWRkcmVzc1RlbXBSZWdpc3Rlcik7CisgICAgICAgIHJldHVybiBqbXA7
CisgICAgfQorCisgICAgdm9pZCBzaWduRXh0ZW5kMzJUb1B0cihSZWdpc3RlcklEIHNyYywgUmVn
aXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgaWYgKHNyYyAhPSBkZXN0KQorICAgICAgICAg
ICAgbW92ZShzcmMsIGRlc3QpOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoOChDb25kaXRpb24g
Y29uZCwgQWRkcmVzcyBsZWZ0LCBJbW0zMiByaWdodCkKKyAgICB7CisgICAgICAgIFJlZ2lzdGVy
SUQgYWRkcmVzc1RlbXBSZWdpc3RlciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBsb2FkOChs
ZWZ0LCBhZGRyZXNzVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgSnVtcCBqbXAgPSBicmFuY2gzMihj
b25kLCBhZGRyZXNzVGVtcFJlZ2lzdGVyLCByaWdodCk7CisgICAgICAgIHJlbGVhc2VTY3JhdGNo
KGFkZHJlc3NUZW1wUmVnaXN0ZXIpOworICAgICAgICByZXR1cm4gam1wOworICAgIH0KKworICAg
IEp1bXAgYnJhbmNoVHJ1bmNhdGVEb3VibGVUb0ludDMyKEZQUmVnaXN0ZXJJRCBzcmMsIFJlZ2lz
dGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmZ0cmNkcm1mcHVsKHNyYyk7
CisgICAgICAgIG1fYXNzZW1ibGVyLnN0c2ZwdWxSZWcoZGVzdCk7CisgICAgICAgIG1fYXNzZW1i
bGVyLmxvYWRDb25zdGFudCgweDdmZmZmZmZmLCBzY3JhdGNoUmVnMyk7CisgICAgICAgIG1fYXNz
ZW1ibGVyLmNtcGxSZWdSZWcoZGVzdCwgc2NyYXRjaFJlZzMsIEVxdWFsKTsKKyAgICAgICAgbV9h
c3NlbWJsZXIuZW5zdXJlU3BhY2UobV9hc3NlbWJsZXIubWF4SW5zdHJ1Y3Rpb25TaXplICsgMTQs
IHNpemVvZih1aW50MzJfdCkpOworICAgICAgICBtX2Fzc2VtYmxlci5icmFuY2goQlRfT1BDT0RF
LCAyKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuYWRkbEltbThyKDEsIHNjcmF0Y2hSZWczKTsKKyAg
ICAgICAgbV9hc3NlbWJsZXIuY21wbFJlZ1JlZyhkZXN0LCBzY3JhdGNoUmVnMywgRXF1YWwpOwor
ICAgICAgICByZXR1cm4gYnJhbmNoVHJ1ZSgpOworICAgIH0KKworICAgIC8vIFN0YWNrIG1hbmlw
dWxhdGlvbiBvcGVyYXRpb25zCisKKyAgICB2b2lkIHBvcChSZWdpc3RlcklEIGRlc3QpCisgICAg
eworICAgICAgICBtX2Fzc2VtYmxlci5wb3BSZWcoZGVzdCk7CisgICAgfQorCisgICAgdm9pZCBw
dXNoKFJlZ2lzdGVySUQgc3JjKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIucHVzaFJlZyhz
cmMpOworICAgIH0KKworICAgIHZvaWQgcHVzaChBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAg
ICAgICBpZiAoIWFkZHJlc3Mub2Zmc2V0KSB7CisgICAgICAgICAgICBwdXNoKGFkZHJlc3MuYmFz
ZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoKGFkZHJl
c3Mub2Zmc2V0IDwgMCkgfHwgKGFkZHJlc3Mub2Zmc2V0ID49IDY0KSkgeworICAgICAgICAgICAg
UmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVy
LmxvYWRDb25zdGFudChhZGRyZXNzLm9mZnNldCwgc2NyKTsKKyAgICAgICAgICAgIG1fYXNzZW1i
bGVyLmFkZGxSZWdSZWcoYWRkcmVzcy5iYXNlLCBzY3IpOworICAgICAgICAgICAgbV9hc3NlbWJs
ZXIubW92bE1lbVJlZyhzY3IsIFNINFJlZ2lzdGVyczo6c3ApOworICAgICAgICAgICAgbV9hc3Nl
bWJsZXIuYWRkbEltbThyKC00LCBTSDRSZWdpc3RlcnM6OnNwKTsKKyAgICAgICAgICAgIHJlbGVh
c2VTY3JhdGNoKHNjcik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAg
ICBtX2Fzc2VtYmxlci5tb3ZsTWVtUmVnKGFkZHJlc3Mub2Zmc2V0ID4+IDIsIGFkZHJlc3MuYmFz
ZSwgU0g0UmVnaXN0ZXJzOjpzcCk7CisgICAgICAgIG1fYXNzZW1ibGVyLmFkZGxJbW04cigtNCwg
U0g0UmVnaXN0ZXJzOjpzcCk7CisgICAgfQorCisgICAgdm9pZCBwdXNoKEltbTMyIGltbSkKKyAg
ICB7CisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIG1f
YXNzZW1ibGVyLmxvYWRDb25zdGFudChpbW0ubV92YWx1ZSwgc2NyKTsKKyAgICAgICAgcHVzaChz
Y3IpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgIH0KKworICAgIC8vIFJlZ2lz
dGVyIG1vdmUgb3BlcmF0aW9ucworCisgICAgdm9pZCBtb3ZlKEltbTMyIGltbSwgUmVnaXN0ZXJJ
RCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9hZENvbnN0YW50KGltbS5tX3Zh
bHVlLCBkZXN0KTsKKyAgICB9CisKKyAgICBEYXRhTGFiZWxQdHIgbW92ZVdpdGhQYXRjaChJbW1Q
dHIgaW5pdGlhbFZhbHVlLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBEYXRhTGFi
ZWxQdHIgZGF0YUxhYmVsKHRoaXMpOworICAgICAgICBtX2Fzc2VtYmxlci5sb2FkQ29uc3RhbnRV
blJldXNhYmxlKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3Q+KGluaXRpYWxWYWx1ZS5tX3ZhbHVl
KSwgZGVzdCwgdHJ1ZSk7CisgICAgICAgIHJldHVybiBkYXRhTGFiZWw7CisgICAgfQorCisgICAg
dm9pZCBtb3ZlKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAg
ICBtX2Fzc2VtYmxlci5tb3ZsUmVnUmVnKHNyYywgZGVzdCk7CisgICAgfQorCisgICAgdm9pZCBt
b3ZlKEltbVB0ciBpbW0sIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1i
bGVyLmxvYWRDb25zdGFudChpbW0uYXNJbnRwdHIoKSwgZGVzdCk7CisgICAgfQorCisgICAgdm9p
ZCBleHR1dyhSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICBt
X2Fzc2VtYmxlci5leHR1dyhzcmMsIGRzdCk7CisgICAgfQorCisgICAgdm9pZCBzZXQzMkNvbXBh
cmUzMihDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBsZWZ0LCBSZWdpc3RlcklEIHJpZ2h0LCBS
ZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5jbXBsUmVnUmVnKHJp
Z2h0LCBsZWZ0LCBjb25kKTsKKyAgICAgICAgaWYgKGNvbmQgIT0gTm90RXF1YWwpIHsKKyAgICAg
ICAgICAgIG1fYXNzZW1ibGVyLm1vdnQoZGVzdCk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKworICAgICAgICBtX2Fzc2VtYmxlci5lbnN1cmVTcGFjZShtX2Fzc2VtYmxlci5tYXhJ
bnN0cnVjdGlvblNpemUgKyA0KTsKKyAgICAgICAgbV9hc3NlbWJsZXIubW92SW1tOCgwLCBkZXN0
KTsKKyAgICAgICAgbV9hc3NlbWJsZXIuYnJhbmNoKEJUX09QQ09ERSwgMCk7CisgICAgICAgIG1f
YXNzZW1ibGVyLm1vdkltbTgoMSwgZGVzdCk7CisgICAgfQorCisgICAgdm9pZCBzZXQzMkNvbXBh
cmUzMihDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBsZWZ0LCBJbW0zMiByaWdodCwgUmVnaXN0
ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgaWYgKGxlZnQgIT0gZGVzdCkgeworICAgICAgICAg
ICAgbW92ZShyaWdodCwgZGVzdCk7CisgICAgICAgICAgICBzZXQzMkNvbXBhcmUzMihjb25kLCBs
ZWZ0LCBkZXN0LCBkZXN0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAg
ICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIG1vdmUocmlnaHQs
IHNjcik7CisgICAgICAgIHNldDMyQ29tcGFyZTMyKGNvbmQsIGxlZnQsIHNjciwgZGVzdCk7Cisg
ICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgfQorCisgICAgdm9pZCBzZXQzMlRlc3Q4
KENvbmRpdGlvbiBjb25kLCBBZGRyZXNzIGFkZHJlc3MsIEltbTMyIG1hc2ssIFJlZ2lzdGVySUQg
ZGVzdCkKKyAgICB7CisgICAgICAgIEFTU0VSVCgoY29uZCA9PSBaZXJvKSB8fCAoY29uZCA9PSBO
b25aZXJvKSk7CisKKyAgICAgICAgbG9hZDgoYWRkcmVzcywgZGVzdCk7CisgICAgICAgIGlmICht
YXNrLm1fdmFsdWUgPT0gLTEpCisgICAgICAgICAgICBjb21wYXJlMzIoMCwgZGVzdCwgY29uZCk7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHRlc3RsSW1tKG1hc2subV92YWx1ZSwgZGVzdCk7
CisgICAgICAgIGlmIChjb25kICE9IE5vblplcm8pIHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVy
Lm1vdnQoZGVzdCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBt
X2Fzc2VtYmxlci5lbnN1cmVTcGFjZShtX2Fzc2VtYmxlci5tYXhJbnN0cnVjdGlvblNpemUgKyA0
KTsKKyAgICAgICAgbV9hc3NlbWJsZXIubW92SW1tOCgwLCBkZXN0KTsKKyAgICAgICAgbV9hc3Nl
bWJsZXIuYnJhbmNoKEJUX09QQ09ERSwgMCk7CisgICAgICAgIG1fYXNzZW1ibGVyLm1vdkltbTgo
MSwgZGVzdCk7CisgICAgfQorCisgICAgdm9pZCBsb2FkUHRyTGlua1JlZyhJbXBsaWNpdEFkZHJl
c3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNo
KCk7CisgICAgICAgIGxvYWQzMihhZGRyZXNzLCBzY3IpOworICAgICAgICBtX2Fzc2VtYmxlci5s
ZHNwcihzY3IpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgIH0KKworICAgIEp1
bXAgYnJhbmNoMzIoQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgbGVmdCwgUmVnaXN0ZXJJRCBy
aWdodCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmNtcGxSZWdSZWcocmlnaHQsIGxlZnQs
IGNvbmQpOworICAgICAgICAvKiBCVCBsYWJlbCA9PiBCRiBvZmYKKyAgICAgICAgICAgbm9wICAg
ICAgICAgTERSIHJlZworICAgICAgICAgICBub3AgICAgICAgICBicmFmIEByZWcKKyAgICAgICAg
ICAgbm9wICAgICAgICAgbm9wCisgICAgICAgICAqLworICAgICAgICBpZiAoY29uZCA9PSBOb3RF
cXVhbCkKKyAgICAgICAgICAgIHJldHVybiBicmFuY2hGYWxzZSgpOworICAgICAgICByZXR1cm4g
YnJhbmNoVHJ1ZSgpOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoMzIoQ29uZGl0aW9uIGNvbmQs
IFJlZ2lzdGVySUQgbGVmdCwgSW1tMzIgcmlnaHQpCisgICAgeworICAgICAgICBpZiAoKChjb25k
ID09IEVxdWFsKSB8fCAoY29uZCA9PSBOb3RFcXVhbCkpICYmICFyaWdodC5tX3ZhbHVlKQorICAg
ICAgICAgICAgbV9hc3NlbWJsZXIudGVzdGxSZWdSZWcobGVmdCwgbGVmdCk7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIGNvbXBhcmUzMihyaWdodC5tX3ZhbHVlLCBsZWZ0LCBjb25kKTsKKwor
ICAgICAgICBpZiAoY29uZCA9PSBOb3RFcXVhbCkKKyAgICAgICAgICAgIHJldHVybiBicmFuY2hG
YWxzZSgpOworICAgICAgICByZXR1cm4gYnJhbmNoVHJ1ZSgpOworICAgIH0KKworICAgIEp1bXAg
YnJhbmNoMzIoQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgbGVmdCwgQWRkcmVzcyByaWdodCkK
KyAgICB7CisgICAgICAgIGNvbXBhcmUzMihyaWdodC5vZmZzZXQsIHJpZ2h0LmJhc2UsIGxlZnQs
IGNvbmQpOworICAgICAgICBpZiAoY29uZCA9PSBOb3RFcXVhbCkKKyAgICAgICAgICAgIHJldHVy
biBicmFuY2hGYWxzZSgpOworICAgICAgICByZXR1cm4gYnJhbmNoVHJ1ZSgpOworICAgIH0KKwor
ICAgIEp1bXAgYnJhbmNoMzIoQ29uZGl0aW9uIGNvbmQsIEFkZHJlc3MgbGVmdCwgUmVnaXN0ZXJJ
RCByaWdodCkKKyAgICB7CisgICAgICAgIGNvbXBhcmUzMihyaWdodCwgbGVmdC5vZmZzZXQsIGxl
ZnQuYmFzZSwgY29uZCk7CisgICAgICAgIGlmIChjb25kID09IE5vdEVxdWFsKQorICAgICAgICAg
ICAgcmV0dXJuIGJyYW5jaEZhbHNlKCk7CisgICAgICAgIHJldHVybiBicmFuY2hUcnVlKCk7Cisg
ICAgfQorCisgICAgSnVtcCBicmFuY2gzMihDb25kaXRpb24gY29uZCwgQWRkcmVzcyBsZWZ0LCBJ
bW0zMiByaWdodCkKKyAgICB7CisgICAgICAgIGNvbXBhcmUzMihyaWdodC5tX3ZhbHVlLCBsZWZ0
Lm9mZnNldCwgbGVmdC5iYXNlLCBjb25kKTsKKyAgICAgICAgaWYgKGNvbmQgPT0gTm90RXF1YWwp
CisgICAgICAgICAgICByZXR1cm4gYnJhbmNoRmFsc2UoKTsKKyAgICAgICAgcmV0dXJuIGJyYW5j
aFRydWUoKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaDMyKENvbmRpdGlvbiBjb25kLCBBYnNv
bHV0ZUFkZHJlc3MgbGVmdCwgUmVnaXN0ZXJJRCByaWdodCkKKyAgICB7CisgICAgICAgIFJlZ2lz
dGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisKKyAgICAgICAgbW92ZShJbW0zMihyZWludGVy
cHJldF9jYXN0PHVpbnQzMl90PihsZWZ0Lm1fcHRyKSksIHNjcik7CisgICAgICAgIG1fYXNzZW1i
bGVyLmNtcGxSZWdSZWcocmlnaHQsIHNjciwgY29uZCk7CisgICAgICAgIHJlbGVhc2VTY3JhdGNo
KHNjcik7CisKKyAgICAgICAgaWYgKGNvbmQgPT0gTm90RXF1YWwpCisgICAgICAgICAgICByZXR1
cm4gYnJhbmNoRmFsc2UoKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaFRydWUoKTsKKyAgICB9CisK
KyAgICBKdW1wIGJyYW5jaDMyKENvbmRpdGlvbiBjb25kLCBBYnNvbHV0ZUFkZHJlc3MgbGVmdCwg
SW1tMzIgcmlnaHQpCisgICAgeworICAgICAgICBSZWdpc3RlcklEIGFkZHJlc3NUZW1wUmVnaXN0
ZXIgPSBjbGFpbVNjcmF0Y2goKTsKKworICAgICAgICBtX2Fzc2VtYmxlci5sb2FkQ29uc3RhbnQo
cmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdD4obGVmdC5tX3B0ciksIGFkZHJlc3NUZW1wUmVnaXN0
ZXIpOworICAgICAgICBtX2Fzc2VtYmxlci5tb3ZsTWVtUmVnKGFkZHJlc3NUZW1wUmVnaXN0ZXIs
IGFkZHJlc3NUZW1wUmVnaXN0ZXIpOworICAgICAgICBjb21wYXJlMzIocmlnaHQubV92YWx1ZSwg
YWRkcmVzc1RlbXBSZWdpc3RlciwgY29uZCk7CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKGFkZHJl
c3NUZW1wUmVnaXN0ZXIpOworCisgICAgICAgIGlmIChjb25kID09IE5vdEVxdWFsKQorICAgICAg
ICAgICAgcmV0dXJuIGJyYW5jaEZhbHNlKCk7CisgICAgICAgIHJldHVybiBicmFuY2hUcnVlKCk7
CisgICAgfQorCisgICAgSnVtcCBicmFuY2gxNihDb25kaXRpb24gY29uZCwgIEJhc2VJbmRleCBs
ZWZ0LCBSZWdpc3RlcklEIHJpZ2h0KQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBj
bGFpbVNjcmF0Y2goKTsKKworICAgICAgICBtb3ZlKGxlZnQuaW5kZXgsIHNjcik7CisgICAgICAg
IGxzaGlmdDMyKEltbTMyKGxlZnQuc2NhbGUpLCBzY3IpOworCisgICAgICAgIGlmIChsZWZ0Lm9m
ZnNldCkKKyAgICAgICAgICAgIGFkZDMyKEltbTMyKGxlZnQub2Zmc2V0KSwgc2NyKTsKKyAgICAg
ICAgYWRkMzIobGVmdC5iYXNlLCBzY3IpOworICAgICAgICBsb2FkMTYoc2NyLCBzY3IpOworICAg
ICAgICBleHR1dyhzY3IsIHNjcik7CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisKKyAg
ICAgICAgcmV0dXJuIGJyYW5jaDMyKGNvbmQsIHNjciwgcmlnaHQpOworICAgIH0KKworICAgIEp1
bXAgYnJhbmNoMTYoQ29uZGl0aW9uIGNvbmQsIEJhc2VJbmRleCBsZWZ0LCBJbW0zMiByaWdodCkK
KyAgICB7CisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisKKyAgICAg
ICAgbW92ZShsZWZ0LmluZGV4LCBzY3IpOworICAgICAgICBsc2hpZnQzMihJbW0zMihsZWZ0LnNj
YWxlKSwgc2NyKTsKKworICAgICAgICBpZiAobGVmdC5vZmZzZXQpCisgICAgICAgICAgICBhZGQz
MihJbW0zMihsZWZ0Lm9mZnNldCksIHNjcik7CisgICAgICAgIGFkZDMyKGxlZnQuYmFzZSwgc2Ny
KTsKKyAgICAgICAgbG9hZDE2KHNjciwgc2NyKTsKKyAgICAgICAgZXh0dXcoc2NyLCBzY3IpOwor
ICAgICAgICBSZWdpc3RlcklEIHNjcjEgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgbV9hc3Nl
bWJsZXIubG9hZENvbnN0YW50KHJpZ2h0Lm1fdmFsdWUsIHNjcjEpOworICAgICAgICByZWxlYXNl
U2NyYXRjaChzY3IpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IxKTsKKworICAgICAgICBy
ZXR1cm4gYnJhbmNoMzIoY29uZCwgc2NyLCBzY3IxKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5j
aFRlc3QzMihDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCByZWcsIFJlZ2lzdGVySUQgbWFzaykK
KyAgICB7CisgICAgICAgIEFTU0VSVCgoY29uZCA9PSBaZXJvKSB8fCAoY29uZCA9PSBOb25aZXJv
KSk7CisKKyAgICAgICAgbV9hc3NlbWJsZXIudGVzdGxSZWdSZWcocmVnLCBtYXNrKTsKKworICAg
ICAgICBpZiAoY29uZCA9PSBOb3RFcXVhbCkKKyAgICAgICAgICAgIHJldHVybiBicmFuY2hGYWxz
ZSgpOworICAgICAgICByZXR1cm4gYnJhbmNoVHJ1ZSgpOworICAgIH0KKworICAgIEp1bXAgYnJh
bmNoVGVzdDMyKENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIHJlZywgSW1tMzIgbWFzayA9IElt
bTMyKC0xKSkKKyAgICB7CisgICAgICAgIEFTU0VSVCgoY29uZCA9PSBaZXJvKSB8fCAoY29uZCA9
PSBOb25aZXJvKSk7CisKKyAgICAgICAgaWYgKG1hc2subV92YWx1ZSA9PSAtMSkKKyAgICAgICAg
ICAgIG1fYXNzZW1ibGVyLnRlc3RsUmVnUmVnKHJlZywgcmVnKTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgdGVzdGxJbW0obWFzay5tX3ZhbHVlLCByZWcpOworCisgICAgICAgIGlmIChjb25k
ID09IE5vdEVxdWFsKQorICAgICAgICAgICAgcmV0dXJuIGJyYW5jaEZhbHNlKCk7CisgICAgICAg
IHJldHVybiBicmFuY2hUcnVlKCk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2hUZXN0MzIoQ29u
ZGl0aW9uIGNvbmQsIEFkZHJlc3MgYWRkcmVzcywgSW1tMzIgbWFzayA9IEltbTMyKC0xKSkKKyAg
ICB7CisgICAgICAgIEFTU0VSVCgoY29uZCA9PSBaZXJvKSB8fCAoY29uZCA9PSBOb25aZXJvKSk7
CisKKyAgICAgICAgaWYgKG1hc2subV92YWx1ZSA9PSAtMSkKKyAgICAgICAgICAgIGNvbXBhcmUz
MigwLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlLCBjb25kKTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgdGVzdEltbShtYXNrLm1fdmFsdWUsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNz
LmJhc2UpOworCisgICAgICAgIGlmIChjb25kID09IE5vdEVxdWFsKQorICAgICAgICAgICAgcmV0
dXJuIGJyYW5jaEZhbHNlKCk7CisgICAgICAgIHJldHVybiBicmFuY2hUcnVlKCk7CisgICAgfQor
CisgICAgSnVtcCBicmFuY2hUZXN0MzIoQ29uZGl0aW9uIGNvbmQsIEJhc2VJbmRleCBhZGRyZXNz
LCBJbW0zMiBtYXNrID0gSW1tMzIoLTEpKQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3Ig
PSBjbGFpbVNjcmF0Y2goKTsKKworICAgICAgICBtb3ZlKGFkZHJlc3MuaW5kZXgsIHNjcik7Cisg
ICAgICAgIGxzaGlmdDMyKEltbTMyKGFkZHJlc3Muc2NhbGUpLCBzY3IpOworICAgICAgICBhZGQz
MihhZGRyZXNzLmJhc2UsIHNjcik7CisgICAgICAgIGxvYWQzMihzY3IsIGFkZHJlc3Mub2Zmc2V0
LCBzY3IpOworCisgICAgICAgIGlmIChtYXNrLm1fdmFsdWUgPT0gLTEpCisgICAgICAgICAgICBt
X2Fzc2VtYmxlci50ZXN0bFJlZ1JlZyhzY3IsIHNjcik7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIHRlc3RsSW1tKG1hc2subV92YWx1ZSwgc2NyKTsKKworICAgICAgICByZWxlYXNlU2NyYXRj
aChzY3IpOworCisgICAgICAgIGlmIChjb25kID09IE5vdEVxdWFsKQorICAgICAgICAgICAgcmV0
dXJuIGJyYW5jaEZhbHNlKCk7CisgICAgICAgIHJldHVybiBicmFuY2hUcnVlKCk7CisgICAgfQor
CisgICAgSnVtcCBqdW1wKCkKKyAgICB7CisgICAgICAgIHJldHVybiBKdW1wKG1fYXNzZW1ibGVy
LmptcCgpKTsKKyAgICB9CisKKyAgICB2b2lkIGp1bXAoUmVnaXN0ZXJJRCB0YXJnZXQpCisgICAg
eworICAgICAgICBtX2Fzc2VtYmxlci5qbXBSZWcodGFyZ2V0KTsKKyAgICB9CisKKyAgICB2b2lk
IGp1bXAoQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBj
bGFpbVNjcmF0Y2goKTsKKworICAgICAgICBpZiAoKGFkZHJlc3Mub2Zmc2V0IDwgMCkgfHwgKGFk
ZHJlc3Mub2Zmc2V0ID49IDY0KSkgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIubG9hZENvbnN0
YW50KGFkZHJlc3Mub2Zmc2V0LCBzY3IpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRkbFJl
Z1JlZyhhZGRyZXNzLmJhc2UsIHNjcik7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5tb3ZsTWVt
UmVnKHNjciwgc2NyKTsKKyAgICAgICAgfSBlbHNlIGlmIChhZGRyZXNzLm9mZnNldCkKKyAgICAg
ICAgICAgIG1fYXNzZW1ibGVyLm1vdmxNZW1SZWcoYWRkcmVzcy5vZmZzZXQgPj4gMiwgYWRkcmVz
cy5iYXNlLCBzY3IpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5tb3Zs
TWVtUmVnKGFkZHJlc3MuYmFzZSwgc2NyKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuam1wUmVnKHNj
cik7CisKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICB9CisKKyAgICAvLyBBcml0
aG1ldGljIGNvbnRyb2wgZmxvdyBvcGVyYXRpb25zCisKKyAgICBKdW1wIGJyYW5jaEFkZDMyKENv
bmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAg
ICAgICAgQVNTRVJUKChjb25kID09IE92ZXJmbG93KSB8fCAoY29uZCA9PSBTaWduZWQpIHx8IChj
b25kID09IFplcm8pIHx8IChjb25kID09IE5vblplcm8pKTsKKworICAgICAgICBpZiAoY29uZCA9
PSBPdmVyZmxvdykgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRkdmxSZWdSZWcoc3JjLCBk
ZXN0KTsKKyAgICAgICAgICAgIHJldHVybiBicmFuY2hUcnVlKCk7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAoY29uZCA9PSBTaWduZWQpIHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZGxS
ZWdSZWcoc3JjLCBkZXN0KTsKKyAgICAgICAgICAgIC8vIENoZWNrIGlmIGRlc3QgaXMgbmVnYXRp
dmUKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmNtcHB6KGRlc3QpOworICAgICAgICAgICAgcmV0
dXJuIGJyYW5jaEZhbHNlKCk7CisgICAgICAgIH0KKworICAgICAgICBtX2Fzc2VtYmxlci5hZGRs
UmVnUmVnKHNyYywgZGVzdCk7CisgICAgICAgIGNvbXBhcmUzMigwLCBkZXN0LCBFcXVhbCk7CisK
KyAgICAgICAgaWYgKGNvbmQgPT0gTm90RXF1YWwpCisgICAgICAgICAgICByZXR1cm4gYnJhbmNo
RmFsc2UoKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaFRydWUoKTsKKyAgICB9CisKKyAgICBKdW1w
IGJyYW5jaEFkZDMyKENvbmRpdGlvbiBjb25kLCBJbW0zMiBpbW0sIFJlZ2lzdGVySUQgZGVzdCkK
KyAgICB7CisgICAgICAgIEFTU0VSVCgoY29uZCA9PSBPdmVyZmxvdykgfHwgKGNvbmQgPT0gU2ln
bmVkKSB8fCAoY29uZCA9PSBaZXJvKSB8fCAoY29uZCA9PSBOb25aZXJvKSk7CisKKyAgICAgICAg
bW92ZShpbW0sIHNjcmF0Y2hSZWczKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaEFkZDMyKGNvbmQs
IHNjcmF0Y2hSZWczLCBkZXN0KTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaE11bDMyKENvbmRp
dGlvbiBjb25kLCBSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKChjb25kID09IE92ZXJmbG93KSB8fCAoY29uZCA9PSBTaWduZWQpIHx8IChjb25k
ID09IFplcm8pIHx8IChjb25kID09IE5vblplcm8pKTsKKworICAgICAgICBpZiAoY29uZCA9PSBP
dmVyZmxvdykgeworICAgICAgICAgICAgUmVnaXN0ZXJJRCBzY3IxID0gY2xhaW1TY3JhdGNoKCk7
CisgICAgICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICAg
ICAgbV9hc3NlbWJsZXIuZG11bGxSZWdSZWcoc3JjLCBkZXN0KTsKKyAgICAgICAgICAgIG1fYXNz
ZW1ibGVyLnN0c21hY2woZGVzdCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5tb3ZJbW04KC0z
MSwgc2NyKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLm1vdmxSZWdSZWcoZGVzdCwgc2NyMSk7
CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zaGFSZWdSZWcoc2NyMSwgc2NyKTsKKyAgICAgICAg
ICAgIG1fYXNzZW1ibGVyLnN0c21hY2goc2NyKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmNt
cGxSZWdSZWcoc2NyLCBzY3IxLCBaZXJvKTsKKyAgICAgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNj
cjEpOworICAgICAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICAgICAgICAgIHJldHVy
biBicmFuY2hGYWxzZSgpOworICAgICAgICB9CisKKyAgICAgICAgbV9hc3NlbWJsZXIuaW11bGxS
ZWdSZWcoc3JjLCBkZXN0KTsKKyAgICAgICAgbV9hc3NlbWJsZXIuc3RzbWFjbChkZXN0KTsKKyAg
ICAgICAgaWYgKGNvbmQgPT0gU2lnbmVkKSB7CisgICAgICAgICAgICAvLyBDaGVjayBpZiBkZXN0
IGlzIG5lZ2F0aXZlCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5jbXBweihkZXN0KTsKKyAgICAg
ICAgICAgIHJldHVybiBicmFuY2hGYWxzZSgpOworICAgICAgICB9CisKKyAgICAgICAgY29tcGFy
ZTMyKDAsIGRlc3QsIGNvbmQpOworCisgICAgICAgIGlmIChjb25kID09IE5vdEVxdWFsKQorICAg
ICAgICAgICAgcmV0dXJuIGJyYW5jaEZhbHNlKCk7CisgICAgICAgIHJldHVybiBicmFuY2hUcnVl
KCk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2hNdWwzMihDb25kaXRpb24gY29uZCwgSW1tMzIg
aW1tLCBSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgQVNT
RVJUKChjb25kID09IE92ZXJmbG93KSB8fCAoY29uZCA9PSBTaWduZWQpIHx8IChjb25kID09IFpl
cm8pIHx8IChjb25kID09IE5vblplcm8pKTsKKworICAgICAgICBtb3ZlKGltbSwgc2NyYXRjaFJl
ZzMpOworICAgICAgICBpZiAoc3JjICE9IGRlc3QpCisgICAgICAgICAgICBtb3ZlKHNyYywgZGVz
dCk7CisKKyAgICAgICAgcmV0dXJuIGJyYW5jaE11bDMyKGNvbmQsIHNjcmF0Y2hSZWczLCBkZXN0
KTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaFN1YjMyKENvbmRpdGlvbiBjb25kLCBSZWdpc3Rl
cklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKChjb25kID09
IE92ZXJmbG93KSB8fCAoY29uZCA9PSBTaWduZWQpIHx8IChjb25kID09IFplcm8pIHx8IChjb25k
ID09IE5vblplcm8pKTsKKworICAgICAgICBpZiAoY29uZCA9PSBPdmVyZmxvdykgeworICAgICAg
ICAgICAgbV9hc3NlbWJsZXIuc3VidmxSZWdSZWcoc3JjLCBkZXN0KTsKKyAgICAgICAgICAgIHJl
dHVybiBicmFuY2hUcnVlKCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoY29uZCA9PSBTaWdu
ZWQpIHsKKyAgICAgICAgICAgIC8vIENoZWNrIGlmIGRlc3QgaXMgbmVnYXRpdmUKKyAgICAgICAg
ICAgIG1fYXNzZW1ibGVyLnN1YmxSZWdSZWcoc3JjLCBkZXN0KTsKKyAgICAgICAgICAgIGNvbXBh
cmUzMigwLCBkZXN0LCBMZXNzVGhhbik7CisgICAgICAgICAgICByZXR1cm4gYnJhbmNoVHJ1ZSgp
OworICAgICAgICB9CisKKyAgICAgICAgc3ViMzIoc3JjLCBkZXN0KTsKKyAgICAgICAgY29tcGFy
ZTMyKDAsIGRlc3QsIGNvbmQpOworCisgICAgICAgIGlmIChjb25kID09IE5vdEVxdWFsKQorICAg
ICAgICAgICAgcmV0dXJuIGJyYW5jaEZhbHNlKCk7CisgICAgICAgIHJldHVybiBicmFuY2hUcnVl
KCk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2hTdWIzMihDb25kaXRpb24gY29uZCwgSW1tMzIg
aW1tLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBBU1NFUlQoKGNvbmQgPT0gT3Zl
cmZsb3cpIHx8IChjb25kID09IFNpZ25lZCkgfHwgKGNvbmQgPT0gWmVybykgfHwgKGNvbmQgPT0g
Tm9uWmVybykpOworCisgICAgICAgIG1vdmUoaW1tLCBzY3JhdGNoUmVnMyk7CisgICAgICAgIHJl
dHVybiBicmFuY2hTdWIzMihjb25kLCBzY3JhdGNoUmVnMywgZGVzdCk7CisgICAgfQorCisgICAg
SnVtcCBicmFuY2hPcjMyKENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJ
RCBkZXN0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKChjb25kID09IFNpZ25lZCkgfHwgKGNvbmQg
PT0gWmVybykgfHwgKGNvbmQgPT0gTm9uWmVybykpOworCisgICAgICAgIGlmIChjb25kID09IFNp
Z25lZCkgeworICAgICAgICAgICAgb3IzMihzcmMsIGRlc3QpOworICAgICAgICAgICAgY29tcGFy
ZTMyKDAsIGRlc3QsIExlc3NUaGFuKTsKKyAgICAgICAgICAgIHJldHVybiBicmFuY2hUcnVlKCk7
CisgICAgICAgIH0KKworICAgICAgICBvcjMyKHNyYywgZGVzdCk7CisgICAgICAgIGNvbXBhcmUz
MigwLCBkZXN0LCBjb25kKTsKKworICAgICAgICBpZiAoY29uZCA9PSBOb3RFcXVhbCkKKyAgICAg
ICAgICAgIHJldHVybiBicmFuY2hGYWxzZSgpOworICAgICAgICByZXR1cm4gYnJhbmNoVHJ1ZSgp
OworICAgIH0KKworICAgIHZvaWQgYnJhbmNoQ29udmVydERvdWJsZVRvSW50MzIoRlBSZWdpc3Rl
cklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0LCBKdW1wTGlzdCYgZmFpbHVyZUNhc2VzLCBGUFJlZ2lz
dGVySUQgZnBUZW1wKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuZnRyY2RybWZwdWwoc3Jj
KTsKKyAgICAgICAgbV9hc3NlbWJsZXIuc3RzZnB1bFJlZyhkZXN0KTsKKyAgICAgICAgY29udmVy
dEludDMyVG9Eb3VibGUoZGVzdCwgZnNjcmF0Y2gpOworICAgICAgICBmYWlsdXJlQ2FzZXMuYXBw
ZW5kKGJyYW5jaERvdWJsZShEb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkLCBmc2NyYXRjaCwgc3Jj
KSk7CisKKyAgICAgICAgaWYgKGRlc3QgPT0gU0g0UmVnaXN0ZXJzOjpyMCkKKyAgICAgICAgICAg
IG1fYXNzZW1ibGVyLmNtcEVxSW1tUjAoMCwgZGVzdCwgRXF1YWwpOworICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgIG1fYXNzZW1ibGVyLm1vdkltbTgoMCwgc2NyYXRjaFJlZzMpOworICAgICAg
ICAgICAgbV9hc3NlbWJsZXIuY21wbFJlZ1JlZyhzY3JhdGNoUmVnMywgZGVzdCwgRXF1YWwpOwor
ICAgICAgICB9CisgICAgICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoYnJhbmNoVHJ1ZSgpKTsKKyAg
ICB9CisKKyAgICB2b2lkIG5lZzMyKFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgbV9h
c3NlbWJsZXIubmVnKGRzdCwgZHN0KTsKKyAgICB9CisKKyAgICB2b2lkIG5vdDMyKFJlZ2lzdGVy
SUQgZHN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubm90bFJlZyhkc3QsIGRzdCk7Cisg
ICAgfQorCisgICAgdm9pZCB1cnNoaWZ0MzIoUmVnaXN0ZXJJRCBzaGlmdGFtb3VudCwgUmVnaXN0
ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgY29tcGFyZTMyKDMyLCBzaGlmdGFtb3VudCwgRXF1
YWwpOworICAgICAgICBtX2Fzc2VtYmxlci5lbnN1cmVTcGFjZShtX2Fzc2VtYmxlci5tYXhJbnN0
cnVjdGlvblNpemUgKyA0KTsKKyAgICAgICAgbV9hc3NlbWJsZXIuYnJhbmNoKEJUX09QQ09ERSwg
MSk7CisgICAgICAgIG1fYXNzZW1ibGVyLm5lZyhzaGlmdGFtb3VudCwgc2hpZnRhbW91bnQpOwor
ICAgICAgICBtX2Fzc2VtYmxlci5zaGxsUmVnUmVnKGRlc3QsIHNoaWZ0YW1vdW50KTsKKyAgICB9
CisKKyAgICB2b2lkIHVyc2hpZnQzMihJbW0zMiBpbW0sIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7
CisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIG1fYXNz
ZW1ibGVyLmxvYWRDb25zdGFudCgtKGltbS5tX3ZhbHVlKSwgc2NyKTsKKyAgICAgICAgbV9hc3Nl
bWJsZXIuc2hhUmVnUmVnKGRlc3QsIHNjcik7CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7
CisgICAgfQorCisgICAgQ2FsbCBjYWxsKCkKKyAgICB7CisgICAgICAgIHJldHVybiBDYWxsKG1f
YXNzZW1ibGVyLmNhbGwoKSwgQ2FsbDo6TGlua2FibGUpOworICAgIH0KKworICAgIENhbGwgbmVh
ckNhbGwoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIENhbGwobV9hc3NlbWJsZXIuY2FsbCgpLCBD
YWxsOjpMaW5rYWJsZU5lYXIpOworICAgIH0KKworICAgIENhbGwgY2FsbChSZWdpc3RlcklEIHRh
cmdldCkKKyAgICB7CisgICAgICAgIHJldHVybiBDYWxsKG1fYXNzZW1ibGVyLmNhbGwodGFyZ2V0
KSwgQ2FsbDo6Tm9uZSk7CisgICAgfQorCisgICAgdm9pZCBicmVha3BvaW50KCkKKyAgICB7Cisg
ICAgICAgIG1fYXNzZW1ibGVyLmJrcHQoKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubm9wKCk7Cisg
ICAgfQorCisgICAgSnVtcCBicmFuY2hQdHJXaXRoUGF0Y2goQ29uZGl0aW9uIGNvbmQsIFJlZ2lz
dGVySUQgbGVmdCwgRGF0YUxhYmVsUHRyJiBkYXRhTGFiZWwsIEltbVB0ciBpbml0aWFsUmlnaHRW
YWx1ZSA9IEltbVB0cigwKSkKKyAgICB7CisgICAgICAgIFJlZ2lzdGVySUQgZGF0YVRlbXBSZWdp
c3RlciA9IGNsYWltU2NyYXRjaCgpOworCisgICAgICAgIGRhdGFMYWJlbCA9IG1vdmVXaXRoUGF0
Y2goaW5pdGlhbFJpZ2h0VmFsdWUsIGRhdGFUZW1wUmVnaXN0ZXIpOworICAgICAgICBtX2Fzc2Vt
Ymxlci5jbXBsUmVnUmVnKGRhdGFUZW1wUmVnaXN0ZXIsIGxlZnQsIGNvbmQpOworICAgICAgICBy
ZWxlYXNlU2NyYXRjaChkYXRhVGVtcFJlZ2lzdGVyKTsKKworICAgICAgICBpZiAoY29uZCA9PSBO
b3RFcXVhbCkKKyAgICAgICAgICAgIHJldHVybiBicmFuY2hGYWxzZSgpOworICAgICAgICByZXR1
cm4gYnJhbmNoVHJ1ZSgpOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoUHRyV2l0aFBhdGNoKENv
bmRpdGlvbiBjb25kLCBBZGRyZXNzIGxlZnQsIERhdGFMYWJlbFB0ciYgZGF0YUxhYmVsLCBJbW1Q
dHIgaW5pdGlhbFJpZ2h0VmFsdWUgPSBJbW1QdHIoMCkpCisgICAgeworICAgICAgICBSZWdpc3Rl
cklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworCisgICAgICAgIG1fYXNzZW1ibGVyLmxvYWRDb25z
dGFudChsZWZ0Lm9mZnNldCwgc2NyKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuYWRkbFJlZ1JlZyhs
ZWZ0LmJhc2UsIHNjcik7CisgICAgICAgIG1fYXNzZW1ibGVyLm1vdmxNZW1SZWcoc2NyLCBzY3Ip
OworICAgICAgICBSZWdpc3RlcklEIHNjcjEgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgZGF0
YUxhYmVsID0gbW92ZVdpdGhQYXRjaChpbml0aWFsUmlnaHRWYWx1ZSwgc2NyMSk7CisgICAgICAg
IG1fYXNzZW1ibGVyLmNtcGxSZWdSZWcoc2NyMSwgc2NyLCBjb25kKTsKKyAgICAgICAgcmVsZWFz
ZVNjcmF0Y2goc2NyKTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyMSk7CisKKyAgICAgICAg
aWYgKGNvbmQgPT0gTm90RXF1YWwpCisgICAgICAgICAgICByZXR1cm4gYnJhbmNoRmFsc2UoKTsK
KyAgICAgICAgcmV0dXJuIGJyYW5jaFRydWUoKTsKKyAgICB9CisKKyAgICB2b2lkIHJldCgpCisg
ICAgeworICAgICAgICBtX2Fzc2VtYmxlci5yZXQoKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubm9w
KCk7CisgICAgfQorCisgICAgRGF0YUxhYmVsUHRyIHN0b3JlUHRyV2l0aFBhdGNoKEltbVB0ciBp
bml0aWFsVmFsdWUsIEltcGxpY2l0QWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgUmVn
aXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgRGF0YUxhYmVsUHRyIGxhYmVs
ID0gbW92ZVdpdGhQYXRjaChpbml0aWFsVmFsdWUsIHNjcik7CisgICAgICAgIHN0b3JlMzIoc2Ny
LCBhZGRyZXNzKTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICAgICAgcmV0dXJu
IGxhYmVsOworICAgIH0KKworICAgIERhdGFMYWJlbFB0ciBzdG9yZVB0cldpdGhQYXRjaChJbXBs
aWNpdEFkZHJlc3MgYWRkcmVzcykgeyByZXR1cm4gc3RvcmVQdHJXaXRoUGF0Y2goSW1tUHRyKDAp
LCBhZGRyZXNzKTsgfQorCisgICAgaW50IHNpemVPZkNvbnN0YW50UG9vbCgpCisgICAgeworICAg
ICAgICByZXR1cm4gbV9hc3NlbWJsZXIuc2l6ZU9mQ29uc3RhbnRQb29sKCk7CisgICAgfQorCisg
ICAgQ2FsbCB0YWlsUmVjdXJzaXZlQ2FsbCgpCisgICAgeworICAgICAgICBSZWdpc3RlcklEIHNj
ciA9IGNsYWltU2NyYXRjaCgpOworCisgICAgICAgIG1fYXNzZW1ibGVyLmxvYWRDb25zdGFudFVu
UmV1c2FibGUoMHgwLCBzY3IsIHRydWUpOworICAgICAgICBKdW1wIG1fanVtcCA9IEp1bXAobV9h
c3NlbWJsZXIuam1wKHNjcikpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworCisgICAg
ICAgIHJldHVybiBDYWxsOjpmcm9tVGFpbEp1bXAobV9qdW1wKTsKKyAgICB9CisKKyAgICBDYWxs
IG1ha2VUYWlsUmVjdXJzaXZlQ2FsbChKdW1wIG9sZEp1bXApCisgICAgeworICAgICAgICBvbGRK
dW1wLmxpbmsodGhpcyk7CisgICAgICAgIHJldHVybiB0YWlsUmVjdXJzaXZlQ2FsbCgpOworICAg
IH0KKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgTGlua0J1ZmZlcjsKKyAgICBmcmllbmQg
Y2xhc3MgUmVwYXRjaEJ1ZmZlcjsKKworICAgIHN0YXRpYyB2b2lkIGxpbmtDYWxsKHZvaWQqLCBD
YWxsLCBGdW5jdGlvblB0cik7CisgICAgc3RhdGljIHZvaWQgcmVwYXRjaENhbGwoQ29kZUxvY2F0
aW9uQ2FsbCwgQ29kZUxvY2F0aW9uTGFiZWwpOworICAgIHN0YXRpYyB2b2lkIHJlcGF0Y2hDYWxs
KENvZGVMb2NhdGlvbkNhbGwsIEZ1bmN0aW9uUHRyKTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpT
QworCisjZW5kaWYgLy8gRU5BQkxFKEFTU0VNQkxFUikKKworI2VuZGlmIC8vIE1hY3JvQXNzZW1i
bGVyU0g0X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvU0g0
QXNzZW1ibGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1NINEFzc2VtYmxl
ci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3MjZhZTgKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1NINEFzc2VtYmxlci5o
CkBAIC0wLDAgKzEsMjA2NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDExIFNUTWlj
cm9lbGVjdHJvbmljcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAw
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU0g0QXNzZW1ibGVyX2gKKyNkZWZpbmUgU0g0
QXNzZW1ibGVyX2gKKworI2lmIEVOQUJMRShBU1NFTUJMRVIpICYmIENQVShTSDQpCisKKyNpbmNs
dWRlICJBc3NlbWJsZXJCdWZmZXIuaCIKKyNpbmNsdWRlICJBc3NlbWJsZXJCdWZmZXJXaXRoQ29u
c3RhbnRQb29sLmgiCisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+Cisj
aW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKKyNp
Zm5kZWYgTkRFQlVHCisjZGVmaW5lIFNINF9BU1NFTUJMRVJfVFJBQ0lORworI2VuZGlmCisKK25h
bWVzcGFjZSBKU0MgewordHlwZWRlZiB1aW50MTZfdCBTSDRXb3JkOworCitlbnVtIHsKKyAgICBJ
TlZBTElEX09QQ09ERSA9IDB4ZmZmZiwKKyAgICBBRERfT1BDT0RFID0gMHgzMDBjLAorICAgIEFE
RElNTV9PUENPREUgPSAweDcwMDAsCisgICAgQUREQ19PUENPREUgPSAweDMwMGUsCisgICAgQURE
Vl9PUENPREUgPSAweDMwMGYsCisgICAgQU5EX09QQ09ERSA9IDB4MjAwOSwKKyAgICBBTkRJTU1f
T1BDT0RFID0gMHhjOTAwLAorICAgIERJVjBfT1BDT0RFID0gMHgyMDA3LAorICAgIERJVjFfT1BD
T0RFID0gMHgzMDA0LAorICAgIEJGX09QQ09ERSA9IDB4OGIwMCwKKyAgICBCRlNfT1BDT0RFID0g
MHg4ZjAwLAorICAgIEJSQV9PUENPREUgPSAweGEwMDAsCisgICAgQlJBRl9PUENPREUgPSAweDAw
MjMsCisgICAgTk9QX09QQ09ERSA9IDB4MDAwOSwKKyAgICBCU1JfT1BDT0RFID0gMHhiMDAwLAor
ICAgIFJUU19PUENPREUgPSAweDAwMGIsCisgICAgQlRfT1BDT0RFID0gMHg4OTAwLAorICAgIEJU
U19PUENPREUgPSAweDhkMDAsCisgICAgQlNSRl9PUENPREUgPSAweDAwMDMsCisgICAgQlJLX09Q
Q09ERSA9IDB4MDAzYiwKKyAgICBGVFJDX09QQ09ERSA9IDB4ZjAzZCwKKyAgICBDTVBFUV9PUENP
REUgPSAweDMwMDAsCisgICAgQ01QRVFJTU1fT1BDT0RFID0gMHg4ODAwLAorICAgIENNUEdFX09Q
Q09ERSA9IDB4MzAwMywKKyAgICBDTVBHVF9PUENPREUgPSAweDMwMDcsCisgICAgQ01QSElfT1BD
T0RFID0gMHgzMDA2LAorICAgIENNUEhTX09QQ09ERSA9IDB4MzAwMiwKKyAgICBDTVBQTF9PUENP
REUgPSAweDQwMTUsCisgICAgQ01QUFpfT1BDT0RFID0gMHg0MDExLAorICAgIENNUFNUUl9PUENP
REUgPSAweDIwMGMsCisgICAgRFRfT1BDT0RFID0gMHg0MDEwLAorICAgIEZDTVBFUV9PUENPREUg
PSAweGYwMDQsCisgICAgRkNNUEdUX09QQ09ERSA9IDB4ZjAwNSwKKyAgICBGTU9WX09QQ09ERSA9
IDB4ZjAwYywKKyAgICBGQUREX09QQ09ERSA9IDB4ZjAwMCwKKyAgICBGTVVMX09QQ09ERSA9IDB4
ZjAwMiwKKyAgICBGU1VCX09QQ09ERSA9IDB4ZjAwMSwKKyAgICBGRElWX09QQ09ERSA9IDB4ZjAw
MywKKyAgICBGTkVHX09QQ09ERSA9IDB4ZjA0ZCwKKyAgICBKTVBfT1BDT0RFID0gMHg0MDJiLAor
ICAgIEpTUl9PUENPREUgPSAweDQwMGIsCisgICAgTERTUFJfT1BDT0RFID0gMHg0MDJhLAorICAg
IExEU0xQUl9PUENPREUgPSAweDQwMjYsCisgICAgTU9WX09QQ09ERSA9IDB4NjAwMywKKyAgICBN
T1ZJTU1fT1BDT0RFID0gMHhlMDAwLAorICAgIE1PVkJfV1JJVEVfUk5fT1BDT0RFID0gMHgyMDAw
LAorICAgIE1PVkJfV1JJVEVfUk5ERUNfT1BDT0RFID0gMHgyMDA0LAorICAgIE1PVkJfV1JJVEVf
UjBSTl9PUENPREUgPSAweDAwMDQsCisgICAgTU9WQl9XUklURV9PRkZHQlJfT1BDT0RFID0gMHhj
MDAwLAorICAgIE1PVkJfV1JJVEVfT0ZGUk5fT1BDT0RFID0gMHg4MDAwLAorICAgIE1PVkJfUkVB
RF9STV9PUENPREUgPSAweDYwMDAsCisgICAgTU9WQl9SRUFEX1JNSU5DX09QQ09ERSA9IDB4NjAw
NCwKKyAgICBNT1ZCX1JFQURfUjBSTV9PUENPREUgPSAweDAwMGMsCisgICAgTU9WQl9SRUFEX09G
RkdCUl9PUENPREUgPSAweGM0MDAsCisgICAgTU9WQl9SRUFEX09GRlJNX09QQ09ERSA9IDB4ODQw
MCwKKyAgICBNT1ZMX1dSSVRFX1JOX09QQ09ERSA9IDB4MjAwMiwKKyAgICBNT1ZMX1dSSVRFX1JO
REVDX09QQ09ERSA9IDB4MjAwNiwKKyAgICBNT1ZMX1dSSVRFX1IwUk5fT1BDT0RFID0gMHgwMDA2
LAorICAgIE1PVkxfV1JJVEVfT0ZGR0JSX09QQ09ERSA9IDB4YzIwMCwKKyAgICBNT1ZMX1dSSVRF
X09GRlJOX09QQ09ERSA9IDB4MTAwMCwKKyAgICBNT1ZMX1JFQURfUk1fT1BDT0RFID0gMHg2MDAy
LAorICAgIE1PVkxfUkVBRF9STUlOQ19PUENPREUgPSAweDYwMDYsCisgICAgTU9WTF9SRUFEX1Iw
Uk1fT1BDT0RFID0gMHgwMDBlLAorICAgIE1PVkxfUkVBRF9PRkZHQlJfT1BDT0RFID0gMHhjNjAw
LAorICAgIE1PVkxfUkVBRF9PRkZQQ19PUENPREUgPSAweGQwMDAsCisgICAgTU9WTF9SRUFEX09G
RlJNX09QQ09ERSA9IDB4NTAwMCwKKyAgICBNT1ZXX1dSSVRFX1JOX09QQ09ERSA9IDB4MjAwMSwK
KyAgICBNT1ZXX1JFQURfUk1fT1BDT0RFID0gMHg2MDAxLAorICAgIE1PVldfUkVBRF9SMFJNX09Q
Q09ERSA9IDB4MDAwZCwKKyAgICBNT1ZXX1JFQURfT0ZGUk1fT1BDT0RFID0gMHg4NTAwLAorICAg
IE1PVldfUkVBRF9PRkZQQ19PUENPREUgPSAweDkwMDAsCisgICAgTU9WQV9SRUFEX09GRlBDX09Q
Q09ERSA9IDB4YzcwMCwKKyAgICBNT1ZUX09QQ09ERSA9IDB4MDAyOSwKKyAgICBNVUxMX09QQ09E
RSA9IDB4MDAwNywKKyAgICBETVVMTF9MX09QQ09ERSA9IDB4MzAwNSwKKyAgICBTVFNNQUNMX09Q
Q09ERSA9IDB4MDAxYSwKKyAgICBTVFNNQUNIX09QQ09ERSA9IDB4MDAwYSwKKyAgICBETVVMU0xf
T1BDT0RFID0gMHgzMDBkLAorICAgIE5FR19PUENPREUgPSAweDYwMGIsCisgICAgTkVHQ19PUENP
REUgPSAweDYwMGEsCisgICAgTk9UX09QQ09ERSA9IDB4NjAwNywKKyAgICBPUl9PUENPREUgPSAw
eDIwMGIsCisgICAgT1JJTU1fT1BDT0RFID0gMHhjYjAwLAorICAgIE9SQklNTV9PUENPREUgPSAw
eGNmMDAsCisgICAgU0VUU19PUENPREUgPSAweDAwNTgsCisgICAgU0VUVF9PUENPREUgPSAweDAw
MTgsCisgICAgU0hBRF9PUENPREUgPSAweDQwMGMsCisgICAgU0hBTF9PUENPREUgPSAweDQwMjAs
CisgICAgU0hBUl9PUENPREUgPSAweDQwMjEsCisgICAgU0hMRF9PUENPREUgPSAweDQwMGQsCisg
ICAgU0hMTF9PUENPREUgPSAweDQwMDAsCisgICAgU0hMTDJfT1BDT0RFID0gMHg0MDA4LAorICAg
IFNITEw4X09QQ09ERSA9IDB4NDAxOCwKKyAgICBTSExMMTZfT1BDT0RFID0gMHg0MDI4LAorICAg
IFNITFJfT1BDT0RFID0gMHg0MDAxLAorICAgIFNITFIyX09QQ09ERSA9IDB4NDAwOSwKKyAgICBT
SExSOF9PUENPREUgPSAweDQwMTksCisgICAgU0hMUjE2X09QQ09ERSA9IDB4NDAyOSwKKyAgICBT
VFNQUl9PUENPREUgPSAweDAwMmEsCisgICAgU1RTTFBSX09QQ09ERSA9IDB4NDAyMiwKKyAgICBG
TE9BVF9PUENPREUgPSAweGYwMmQsCisgICAgU1VCX09QQ09ERSA9IDB4MzAwOCwKKyAgICBTVUJD
X09QQ09ERSA9IDB4MzAwYSwKKyAgICBTVUJWX09QQ09ERSA9IDB4MzAwYiwKKyAgICBUU1RfT1BD
T0RFID0gMHgyMDA4LAorICAgIFRTVElNTV9PUENPREUgPSAweGM4MDAsCisgICAgVFNUQl9PUENP
REUgPSAweGNjMDAsCisgICAgRVhUVVdfT1BDT0RFID0gMHg2MDBkLAorICAgIFhPUl9PUENPREUg
PSAweDIwMGEsCisgICAgWE9SSU1NX09QQ09ERSA9IDB4Y2EwMCwKKyAgICBYT1JCX09QQ09ERSA9
IDB4Y2UwMCwKKyAgICBGTU9WU19SRUFEX1JNX0lOQ19PUENPREUgPSAweGYwMDksCisgICAgRk1P
VlNfUkVBRF9STV9PUENPREUgPSAweGYwMDgsCisgICAgRk1PVlNfUkVBRF9SMFJNX09QQ09ERSA9
IDB4ZjAwNiwKKyAgICBGTU9WU19XUklURV9STl9PUENPREUgPSAweGYwMGEsCisgICAgRk1PVlNf
V1JJVEVfUk5fREVDX09QQ09ERSA9IDB4ZjAwYiwKKyAgICBGTU9WU19XUklURV9SMFJOX09QQ09E
RSA9IDB4ZjAwNywKKyAgICBGQ05WRFNfRFJNX0ZQVUxfT1BDT0RFID0gMHhmMGJkLAorICAgIExE
U19STV9GUFVMX09QQ09ERSA9IDB4NDA1YSwKKyAgICBGTERTX0ZSTV9GUFVMX09QQ09ERSA9IDB4
ZjAxZCwKKyAgICBTVFNfRlBVTF9STl9PUENPREUgPSAweDAwNWEsCisgICAgRlNUU19GUFVMX0ZS
Tl9PUENPREUgPSAweEYwMGQsCisgICAgTERTRlBTQ1JfT1BDT0RFID0gMHg0MDZhLAorICAgIFNU
U0ZQU0NSX09QQ09ERSA9IDB4MDA2YSwKKyAgICBMRFNSTUZQVUxfT1BDT0RFID0gMHg0MDVhLAor
ICAgIEZTVFNGUFVMRlJOX09QQ09ERSA9IDB4ZjAwZCwKKyAgICBGU1FSVF9PUENPREUgPSAweGYw
NmQsCisgICAgRlNDSEdfT1BDT0RFID0gMHhmM2ZkLAorICAgIENMUlRfT1BDT0RFID0gOCwKK307
CisKK25hbWVzcGFjZSBTSDRSZWdpc3RlcnMgewordHlwZWRlZiBlbnVtIHsKKyAgICByMCwKKyAg
ICByMSwKKyAgICByMiwKKyAgICByMywKKyAgICByNCwKKyAgICByNSwKKyAgICByNiwKKyAgICBy
NywKKyAgICByOCwKKyAgICByOSwKKyAgICByMTAsCisgICAgcjExLAorICAgIHIxMiwKKyAgICBy
MTMsCisgICAgcjE0LCBmcCA9IHIxNCwKKyAgICByMTUsIHNwID0gcjE1LAorICAgIHBjLAorICAg
IHByLAorfSBSZWdpc3RlcklEOworCit0eXBlZGVmIGVudW0geworICAgIGZyMCwgZHIwID0gZnIw
LAorICAgIGZyMSwKKyAgICBmcjIsIGRyMiA9IGZyMiwKKyAgICBmcjMsCisgICAgZnI0LCBkcjQg
PSBmcjQsCisgICAgZnI1LAorICAgIGZyNiwgZHI2ID0gZnI2LAorICAgIGZyNywKKyAgICBmcjgs
IGRyOCA9IGZyOCwKKyAgICBmcjksCisgICAgZnIxMCwgZHIxMCA9IGZyMTAsCisgICAgZnIxMSwK
KyAgICBmcjEyLCBkcjEyID0gZnIxMiwKKyAgICBmcjEzLAorICAgIGZyMTQsIGRyMTQgPSBmcjE0
LAorICAgIGZyMTUsCit9IEZQUmVnaXN0ZXJJRDsKK30KKworaW5saW5lIHVpbnQxNl90IGdldE9w
Y29kZUdyb3VwMSh1aW50MTZfdCBvcGMsIGludCBybSwgaW50IHJuKQoreworICAgIHJldHVybiAo
b3BjIHwgKChybSAmIDB4ZikgPDwgOCkgfCAoKHJuICYgMHhmKSA8PCA0KSk7Cit9CisKK2lubGlu
ZSB1aW50MTZfdCBnZXRPcGNvZGVHcm91cDIodWludDE2X3Qgb3BjLCBpbnQgcm0pCit7CisgICAg
cmV0dXJuIChvcGMgfCAoKHJtICYgMHhmKSA8PCA4KSk7Cit9CisKK2lubGluZSB1aW50MTZfdCBn
ZXRPcGNvZGVHcm91cDModWludDE2X3Qgb3BjLCBpbnQgcm0sIGludCBybikKK3sKKyAgICByZXR1
cm4gKG9wYyB8ICgocm0gJiAweGYpIDw8IDgpIHwgKHJuICYgMHhmZikpOworfQorCitpbmxpbmUg
dWludDE2X3QgZ2V0T3Bjb2RlR3JvdXA0KHVpbnQxNl90IG9wYywgaW50IHJtLCBpbnQgcm4sIGlu
dCBvZmZzZXQpCit7CisgICAgcmV0dXJuIChvcGMgfCAoKHJtICYgMHhmKSA8PCA4KSB8ICgocm4g
JiAweGYpIDw8IDQpIHwgKG9mZnNldCAmIDB4ZikpOworfQorCitpbmxpbmUgdWludDE2X3QgZ2V0
T3Bjb2RlR3JvdXA1KHVpbnQxNl90IG9wYywgaW50IHJtKQoreworICAgIHJldHVybiAob3BjIHwg
KHJtICYgMHhmZikpOworfQorCitpbmxpbmUgdWludDE2X3QgZ2V0T3Bjb2RlR3JvdXA2KHVpbnQx
Nl90IG9wYywgaW50IHJtKQoreworICAgIHJldHVybiAob3BjIHwgKHJtICYgMHhmZmYpKTsKK30K
KworaW5saW5lIHVpbnQxNl90IGdldE9wY29kZUdyb3VwNyh1aW50MTZfdCBvcGMsIGludCBybSkK
K3sKKyAgICByZXR1cm4gKG9wYyB8ICgocm0gJiAweDcpIDw8IDkpKTsKK30KKworaW5saW5lIHVp
bnQxNl90IGdldE9wY29kZUdyb3VwOCh1aW50MTZfdCBvcGMsIGludCBybSwgaW50IHJuKQorewor
ICAgIHJldHVybiAob3BjIHwgKChybSAmIDB4NykgPDwgOSkgfCAoKHJuICYgMHg3KSA8PCA1KSk7
Cit9CisKK2lubGluZSB1aW50MTZfdCBnZXRPcGNvZGVHcm91cDkodWludDE2X3Qgb3BjLCBpbnQg
cm0sIGludCBybikKK3sKKyAgICByZXR1cm4gKG9wYyB8ICgocm0gJiAweGYpIDw8IDgpIHwgKChy
biAmIDB4NykgPDwgNSkpOworfQorCitpbmxpbmUgdWludDE2X3QgZ2V0T3Bjb2RlR3JvdXAxMCh1
aW50MTZfdCBvcGMsIGludCBybSwgaW50IHJuKQoreworICAgIHJldHVybiAob3BjIHwgKChybSAm
IDB4NykgPDwgOSkgfCAoKHJuICYgMHhmKSA8PCA0KSk7Cit9CisKK2lubGluZSB1aW50MTZfdCBn
ZXRPcGNvZGVHcm91cDExKHVpbnQxNl90IG9wYywgaW50IHJtLCBpbnQgcm4pCit7CisgICAgcmV0
dXJuIChvcGMgfCAoKHJtICYgMHhmKSA8PCA0KSB8IChybiAmIDB4ZikpOworfQorCitpbmxpbmUg
dWludDE2X3QgZ2V0Um4odWludDE2X3QgeCkKK3sKKyAgICByZXR1cm4gKCh4ICYgMHhmMDApID4+
IDgpOworfQorCitpbmxpbmUgdWludDE2X3QgZ2V0Um0odWludDE2X3QgeCkKK3sKKyAgICByZXR1
cm4gKCh4ICYgMHhmMCkgPj4gNCk7Cit9CisKK2lubGluZSB1aW50MTZfdCBnZXREaXNwKHVpbnQx
Nl90IHgpCit7CisgICAgcmV0dXJuICh4ICYgMHhmKTsKK30KKworaW5saW5lIHVpbnQxNl90IGdl
dEltbTgodWludDE2X3QgeCkKK3sKKyAgICByZXR1cm4gKHggJiAweGZmKTsKK30KKworaW5saW5l
IHVpbnQxNl90IGdldEltbTEyKHVpbnQxNl90IHgpCit7CisgICAgcmV0dXJuICh4ICYgMHhmZmYp
OworfQorCitpbmxpbmUgdWludDE2X3QgZ2V0RFJuKHVpbnQxNl90IHgpCit7CisgICAgcmV0dXJu
ICgoeCAmIDB4ZTAwKSA+PiA5KTsKK30KKworaW5saW5lIHVpbnQxNl90IGdldERSbSh1aW50MTZf
dCB4KQoreworICAgIHJldHVybiAoKHggJiAweGUwKSA+PiA1KTsKK30KKworY2xhc3MgU0g0QXNz
ZW1ibGVyIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIFNINFJlZ2lzdGVyczo6UmVnaXN0ZXJJRCBS
ZWdpc3RlcklEOworICAgIHR5cGVkZWYgU0g0UmVnaXN0ZXJzOjpGUFJlZ2lzdGVySUQgRlBSZWdp
c3RlcklEOworICAgIHR5cGVkZWYgQXNzZW1ibGVyQnVmZmVyV2l0aENvbnN0YW50UG9vbDw1MTIs
IDQsIDIsIFNINEFzc2VtYmxlcj4gU0g0QnVmZmVyOworICAgIHN0YXRpYyBjb25zdCBSZWdpc3Rl
cklEIHNjcmF0Y2hSZWcxID0gU0g0UmVnaXN0ZXJzOjpyMzsKKyAgICBzdGF0aWMgY29uc3QgUmVn
aXN0ZXJJRCBzY3JhdGNoUmVnMiA9IFNINFJlZ2lzdGVyczo6cjExOworICAgIHN0YXRpYyBjb25z
dCB1aW50MzJfdCBtYXhJbnN0cnVjdGlvblNpemUgPSAxNjsKKworICAgIGVudW0geworICAgICAg
ICBwYWRGb3JBbGlnbjggPSAweDAwLAorICAgICAgICBwYWRGb3JBbGlnbjE2ID0gMHgwMDA5LAor
ICAgICAgICBwYWRGb3JBbGlnbjMyID0gMHgwMDA5MDAwOSwKKyAgICB9OworCisgICAgU0g0QXNz
ZW1ibGVyKCkKKyAgICB7CisgICAgICAgIG1fY2xhaW1zY3JhdGNoUmVnID0gMHgwOworICAgIH0K
KworICAgIC8vIFNINCBjb25kaXRpb24gY29kZXMKKyAgICB0eXBlZGVmIGVudW0geworICAgICAg
ICBFUSA9IDB4MCwgLy8gRXF1YWwKKyAgICAgICAgTkUgPSAweDEsIC8vIE5vdCBFcXVhbAorICAg
ICAgICBIUyA9IDB4MiwgLy8gVW5zaWdlbmQgR3JlYXRlciBUaGFuIGVxdWFsCisgICAgICAgIEhJ
ID0gMHgzLCAvLyBVbnNpZ2VuZCBHcmVhdGVyIFRoYW4KKyAgICAgICAgTFMgPSAweDQsIC8vIFVu
c2lnZW5kIExvd2VyIG9yIFNhbWUKKyAgICAgICAgTEkgPSAweDUsIC8vIFVuc2lnZW5kIExvd2Vy
CisgICAgICAgIEdFID0gMHg2LCAvLyBHcmVhdGVyIG9yIEVxdWFsCisgICAgICAgIExUID0gMHg3
LCAvLyBMZXNzIFRoYW4KKyAgICAgICAgR1QgPSAweDgsIC8vIEdyZWF0ZXIgVGhhbgorICAgICAg
ICBMRSA9IDB4OSwgLy8gTGVzcyBvciBFcXVhbAorICAgICAgICBPRiA9IDB4YSwgLy8gT3ZlckZs
b3cKKyAgICAgICAgU0kgPSAweGIsIC8vIFNpZ25lZAorICAgICAgICBFUVU9IDB4YywgLy8gRXF1
YWwgb3IgdW5vcmRlcmVkKE5hTikKKyAgICAgICAgTkVVPSAweGQsCisgICAgICAgIEdUVT0gMHhl
LAorICAgICAgICBHRVU9IDB4ZiwKKyAgICAgICAgTFRVPSAweDEwLAorICAgICAgICBMRVU9IDB4
MTEsCisgICAgfSBDb25kaXRpb247CisKKyAgICAvLyBPcGFxdWUgbGFiZWwgdHlwZXMKK3B1Ymxp
YzoKKyAgICBjbGFzcyBKbXBTcmMgeworICAgICAgICBmcmllbmQgY2xhc3MgU0g0QXNzZW1ibGVy
OworICAgIHB1YmxpYzoKKyAgICAgICAgSm1wU3JjKCkKKyAgICAgICAgICAgIDogbV9vZmZzZXQo
LTEpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgSm1wU3Jj
KGludCBvZmZzZXQpCisgICAgICAgICAgICA6IG1fb2Zmc2V0KG9mZnNldCkKKyAgICAgICAgewor
ICAgICAgICB9CisKKyAgICAgICAgaW50IG1fb2Zmc2V0OworICAgIH07CisKKyAgICBjbGFzcyBK
bXBEc3QgeworICAgICAgICBmcmllbmQgY2xhc3MgU0g0QXNzZW1ibGVyOworICAgIHB1YmxpYzoK
KyAgICAgICAgSm1wRHN0KCkKKyAgICAgICAgICAgIDogbV9vZmZzZXQoLTEpCisgICAgICAgICAg
ICAsIG1fdXNlZChmYWxzZSkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBp
c1VzZWQoKSBjb25zdCB7IHJldHVybiBtX3VzZWQ7IH0KKyAgICAgICAgYm9vbCBpc1NldCgpIGNv
bnN0IHsgcmV0dXJuIChtX29mZnNldCAhPSAtMSk7IH0KKyAgICAgICAgdm9pZCB1c2VkKCkgeyBt
X3VzZWQgPSB0cnVlOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBKbXBEc3QoaW50IG9mZnNl
dCkKKyAgICAgICAgICAgIDogbV9vZmZzZXQob2Zmc2V0KQorICAgICAgICAgICAgLCBtX3VzZWQo
ZmFsc2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChtX29mZnNldCA9PSBvZmZzZXQp
OworICAgICAgICB9CisKKyAgICAgICAgaW50IG1fb2Zmc2V0IDogMzE7CisgICAgICAgIGludCBt
X3VzZWQgOiAxOworICAgIH07CisKKyAgICBib29sIGlzSW1tZWRpYXRlKGludCBjb25zdGFudCkK
KyAgICB7CisgICAgICAgIHJldHVybiAoKGNvbnN0YW50IDw9IDEyNykgJiYgKGNvbnN0YW50ID49
IC0xMjgpKTsKKyAgICB9CisKKyAgICBSZWdpc3RlcklEIGNsYWltU2NyYXRjaCgpCisgICAgewor
ICAgICAgICBBU1NFUlQoKG1fY2xhaW1zY3JhdGNoUmVnICE9IDB4MykpOworCisgICAgICAgIGlm
ICghKG1fY2xhaW1zY3JhdGNoUmVnICYgMHgxKSkgeworICAgICAgICAgICAgbV9jbGFpbXNjcmF0
Y2hSZWcgPSAobV9jbGFpbXNjcmF0Y2hSZWcgfCAweDEpOworICAgICAgICAgICAgcmV0dXJuIHNj
cmF0Y2hSZWcxOworICAgICAgICB9CisKKyAgICAgICAgbV9jbGFpbXNjcmF0Y2hSZWcgPSAobV9j
bGFpbXNjcmF0Y2hSZWcgfCAweDIpOworICAgICAgICByZXR1cm4gc2NyYXRjaFJlZzI7CisgICAg
fQorCisgICAgdm9pZCByZWxlYXNlU2NyYXRjaChSZWdpc3RlcklEIHNjcmF0Y2hSKQorICAgIHsK
KyAgICAgICAgaWYgKHNjcmF0Y2hSID09IHNjcmF0Y2hSZWcxKQorICAgICAgICAgICAgbV9jbGFp
bXNjcmF0Y2hSZWcgPSAobV9jbGFpbXNjcmF0Y2hSZWcgJiAweDIpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBtX2NsYWltc2NyYXRjaFJlZyA9IChtX2NsYWltc2NyYXRjaFJlZyAmIDB4MSk7
CisgICAgfQorCisgICAgLy8gU3RhY2sgb3BlcmF0aW9ucworCisgICAgdm9pZCBwdXNoUmVnKFJl
Z2lzdGVySUQgcmVnKQorICAgIHsKKyAgICAgICAgaWYgKHJlZyA9PSBTSDRSZWdpc3RlcnM6OnBy
KSB7CisgICAgICAgICAgICBvbmVTaG9ydE9wKGdldE9wY29kZUdyb3VwMihTVFNMUFJfT1BDT0RF
LCBTSDRSZWdpc3RlcnM6OnNwKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwor
ICAgICAgICBvbmVTaG9ydE9wKGdldE9wY29kZUdyb3VwMShNT1ZMX1dSSVRFX1JOREVDX09QQ09E
RSwgU0g0UmVnaXN0ZXJzOjpzcCwgcmVnKSk7CisgICAgfQorCisgICAgdm9pZCBwb3BSZWcoUmVn
aXN0ZXJJRCByZWcpCisgICAgeworICAgICAgICBpZiAocmVnID09IFNINFJlZ2lzdGVyczo6cHIp
IHsKKyAgICAgICAgICAgIG9uZVNob3J0T3AoZ2V0T3Bjb2RlR3JvdXAyKExEU0xQUl9PUENPREUs
IFNINFJlZ2lzdGVyczo6c3ApKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisg
ICAgICAgIG9uZVNob3J0T3AoZ2V0T3Bjb2RlR3JvdXAxKE1PVkxfUkVBRF9STUlOQ19PUENPREUs
IHJlZywgU0g0UmVnaXN0ZXJzOjpzcCkpOworICAgIH0KKworICAgIHZvaWQgbW92dChSZWdpc3Rl
cklEIGRzdCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3VwMihN
T1ZUX09QQ09ERSwgZHN0KTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAg
IC8vIEFyaXRobWV0aWMgb3BlcmF0aW9ucworCisgICAgdm9pZCBhZGRsUmVnUmVnKFJlZ2lzdGVy
SUQgc3JjLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdl
dE9wY29kZUdyb3VwMShBRERfT1BDT0RFLCBkc3QsIHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Ao
b3BjKTsKKyAgICB9CisKKyAgICB2b2lkIGFkZGNsUmVnUmVnKFJlZ2lzdGVySUQgc3JjLCBSZWdp
c3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3Vw
MShBRERDX09QQ09ERSwgZHN0LCBzcmMpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAg
fQorCisgICAgdm9pZCBhZGR2bFJlZ1JlZyhSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3Qp
CisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDEoQUREVl9PUENP
REUsIGRzdCwgc3JjKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAgIHZv
aWQgYWRkbEltbThyKGludCBpbW04LCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIEFT
U0VSVCgoaW1tOCA8PSAxMjcpICYmIChpbW04ID49IC0xMjgpKTsKKworICAgICAgICB1aW50MTZf
dCBvcGMgPSBnZXRPcGNvZGVHcm91cDMoQURESU1NX09QQ09ERSwgZHN0LCBpbW04KTsKKyAgICAg
ICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAgIHZvaWQgYW5kbFJlZ1JlZyhSZWdpc3Rl
cklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBn
ZXRPcGNvZGVHcm91cDEoQU5EX09QQ09ERSwgZHN0LCBzcmMpOworICAgICAgICBvbmVTaG9ydE9w
KG9wYyk7CisgICAgfQorCisgICAgdm9pZCBhbmRsSW1tOHIoaW50IGltbTgsIFJlZ2lzdGVySUQg
ZHN0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKChpbW04IDw9IDI1NSkgJiYgKGltbTggPj0gMCkp
OworICAgICAgICBBU1NFUlQoZHN0ID09IFNINFJlZ2lzdGVyczo6cjApOworCisgICAgICAgIHVp
bnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3VwNShBTkRJTU1fT1BDT0RFLCBpbW04KTsKKyAgICAg
ICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAgIHZvaWQgZGl2MWxSZWdSZWcoUmVnaXN0
ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0g
Z2V0T3Bjb2RlR3JvdXAxKERJVjFfT1BDT0RFLCBkc3QsIHNyYyk7CisgICAgICAgIG9uZVNob3J0
T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lkIGRpdjBsUmVnUmVnKFJlZ2lzdGVySUQgc3JjLCBS
ZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdy
b3VwMShESVYwX09QQ09ERSwgZHN0LCBzcmMpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7Cisg
ICAgfQorCisgICAgdm9pZCBub3RsUmVnKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCkK
KyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3VwMShOT1RfT1BDT0RF
LCBkc3QsIHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lk
IG9ybFJlZ1JlZyhSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAg
ICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDEoT1JfT1BDT0RFLCBkc3QsIHNyYyk7Cisg
ICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lkIG9ybEltbThyKGludCBp
bW04LCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIEFTU0VSVCgoaW1tOCA8PSAyNTUp
ICYmIChpbW04ID49IDApKTsKKyAgICAgICAgQVNTRVJUKGRzdCA9PSBTSDRSZWdpc3RlcnM6OnIw
KTsKKworICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDUoT1JJTU1fT1BDT0RF
LCBpbW04KTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAgIHZvaWQgc3Vi
bFJlZ1JlZyhSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICAg
dWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXAxKFNVQl9PUENPREUsIGRzdCwgc3JjKTsKKyAg
ICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lkIHN1YnZsUmVnUmVnKFJl
Z2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgICB1aW50MTZfdCBv
cGMgPSBnZXRPcGNvZGVHcm91cDEoU1VCVl9PUENPREUsIGRzdCwgc3JjKTsKKyAgICAgICAgIG9u
ZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lkIHhvcmxSZWdSZWcoUmVnaXN0ZXJJRCBz
cmMsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bj
b2RlR3JvdXAxKFhPUl9PUENPREUsIGRzdCwgc3JjKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMp
OworICAgIH0KKworICAgIHZvaWQgeG9ybEltbThyKGludCBpbW04LCBSZWdpc3RlcklEIGRzdCkK
KyAgICB7CisgICAgICAgIEFTU0VSVCgoaW1tOCA8PSAyNTUpICYmIChpbW04ID49IDApKTsKKyAg
ICAgICAgQVNTRVJUKGRzdCA9PSBTSDRSZWdpc3RlcnM6OnIwKTsKKworICAgICAgICB1aW50MTZf
dCBvcGMgPSBnZXRPcGNvZGVHcm91cDUoWE9SSU1NX09QQ09ERSwgaW1tOCk7CisgICAgICAgIG9u
ZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lkIHNobGxJbW04cihpbnQgaW1tLCBSZWdp
c3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoaW1tKSB7CisgICAgICAgIGNhc2Ug
MToKKyAgICAgICAgICAgIG9uZVNob3J0T3AoZ2V0T3Bjb2RlR3JvdXAyKFNITExfT1BDT0RFLCBk
c3QpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICBv
bmVTaG9ydE9wKGdldE9wY29kZUdyb3VwMihTSExMMl9PUENPREUsIGRzdCkpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgODoKKyAgICAgICAgICAgIG9uZVNob3J0T3AoZ2V0T3Bj
b2RlR3JvdXAyKFNITEw4X09QQ09ERSwgZHN0KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSAxNjoKKyAgICAgICAgICAgIG9uZVNob3J0T3AoZ2V0T3Bjb2RlR3JvdXAyKFNITEwx
Nl9PUENPREUsIGRzdCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IHZvaWQgbmVnKFJlZ2lzdGVySUQgZHN0LCBSZWdpc3RlcklEIHNyYykKKyAgICB7CisgICAgICAg
IHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3VwMShORUdfT1BDT0RFLCBkc3QsIHNyYyk7Cisg
ICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lkIHNobGxSZWdSZWcoUmVn
aXN0ZXJJRCBkc3QsIFJlZ2lzdGVySUQgclNoaWZ0KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qg
b3BjID0gZ2V0T3Bjb2RlR3JvdXAxKFNITERfT1BDT0RFLCBkc3QsIHJTaGlmdCk7CisgICAgICAg
IG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lkIHNobHJSZWdSZWcoUmVnaXN0ZXJJ
RCBkc3QsIFJlZ2lzdGVySUQgclNoaWZ0KQorICAgIHsKKyAgICAgICAgbmVnKHJTaGlmdCwgclNo
aWZ0KTsKKyAgICAgICAgc2hsbFJlZ1JlZyhkc3QsIHJTaGlmdCk7CisgICAgfQorCisgICAgdm9p
ZCBzaGFyUmVnUmVnKFJlZ2lzdGVySUQgZHN0LCBSZWdpc3RlcklEIHJTaGlmdCkKKyAgICB7Cisg
ICAgICAgIG5lZyhyU2hpZnQsIHJTaGlmdCk7CisgICAgICAgIHNoYVJlZ1JlZyhkc3QsIHJTaGlm
dCk7CisgICAgfQorCisgICAgdm9pZCBzaGFSZWdSZWcoUmVnaXN0ZXJJRCBkc3QsIFJlZ2lzdGVy
SUQgclNoaWZ0KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXAx
KFNIQURfT1BDT0RFLCBkc3QsIHJTaGlmdCk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAg
ICB9CisKKyAgICB2b2lkIHNobHJJbW04cihpbnQgaW1tLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7
CisgICAgICAgIHN3aXRjaCAoaW1tKSB7CisgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgIG9u
ZVNob3J0T3AoZ2V0T3Bjb2RlR3JvdXAyKFNITFJfT1BDT0RFLCBkc3QpKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICBvbmVTaG9ydE9wKGdldE9wY29k
ZUdyb3VwMihTSExSMl9PUENPREUsIGRzdCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgODoKKyAgICAgICAgICAgIG9uZVNob3J0T3AoZ2V0T3Bjb2RlR3JvdXAyKFNITFI4X09Q
Q09ERSwgZHN0KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAxNjoKKyAgICAg
ICAgICAgIG9uZVNob3J0T3AoZ2V0T3Bjb2RlR3JvdXAyKFNITFIxNl9PUENPREUsIGRzdCkpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgaW11bGxSZWdSZWco
UmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qg
b3BjID0gZ2V0T3Bjb2RlR3JvdXAxKE1VTExfT1BDT0RFLCBkc3QsIHNyYyk7CisgICAgICAgIG9u
ZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lkIGRtdWxsUmVnUmVnKFJlZ2lzdGVySUQg
c3JjLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9w
Y29kZUdyb3VwMShETVVMTF9MX09QQ09ERSwgZHN0LCBzcmMpOworICAgICAgICBvbmVTaG9ydE9w
KG9wYyk7CisgICAgfQorCisgICAgdm9pZCBkbXVsc2xSZWdSZWcoUmVnaXN0ZXJJRCBzcmMsIFJl
Z2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3Jv
dXAxKERNVUxTTF9PUENPREUsIGRzdCwgc3JjKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOwor
ICAgIH0KKworICAgIHZvaWQgc3RzbWFjbChSZWdpc3RlcklEIHJlZykKKyAgICB7CisgICAgICAg
IHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3VwMihTVFNNQUNMX09QQ09ERSwgcmVnKTsKKyAg
ICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAgIHZvaWQgc3RzbWFjaChSZWdpc3Rl
cklEIHJlZykKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3VwMihT
VFNNQUNIX09QQ09ERSwgcmVnKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKwor
ICAgIC8vIENvbXBhcmlzb25zCisKKyAgICB2b2lkIGNtcGxSZWdSZWcoUmVnaXN0ZXJJRCBsZWZ0
LCBSZWdpc3RlcklEIHJpZ2h0LCBDb25kaXRpb24gY29uZCkKKyAgICB7CisgICAgICAgIHN3aXRj
aCAoY29uZCkgeworICAgICAgICBjYXNlIE5FOgorICAgICAgICAgICAgb25lU2hvcnRPcChnZXRP
cGNvZGVHcm91cDEoQ01QRVFfT1BDT0RFLCByaWdodCwgbGVmdCkpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgR1Q6CisgICAgICAgICAgICBvbmVTaG9ydE9wKGdldE9wY29kZUdy
b3VwMShDTVBHVF9PUENPREUsIHJpZ2h0LCBsZWZ0KSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBFUToKKyAgICAgICAgICAgIG9uZVNob3J0T3AoZ2V0T3Bjb2RlR3JvdXAxKENN
UEVRX09QQ09ERSwgcmlnaHQsIGxlZnQpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIEdFOgorICAgICAgICAgICAgb25lU2hvcnRPcChnZXRPcGNvZGVHcm91cDEoQ01QR0VfT1BD
T0RFLCByaWdodCwgbGVmdCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSFM6
CisgICAgICAgICAgICBvbmVTaG9ydE9wKGdldE9wY29kZUdyb3VwMShDTVBIU19PUENPREUsIHJp
Z2h0LCBsZWZ0KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBISToKKyAgICAg
ICAgICAgIG9uZVNob3J0T3AoZ2V0T3Bjb2RlR3JvdXAxKENNUEhJX09QQ09ERSwgcmlnaHQsIGxl
ZnQpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIExJOgorICAgICAgICAgICAg
b25lU2hvcnRPcChnZXRPcGNvZGVHcm91cDEoQ01QSElfT1BDT0RFLCBsZWZ0LCByaWdodCkpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTFM6CisgICAgICAgICAgICBvbmVTaG9y
dE9wKGdldE9wY29kZUdyb3VwMShDTVBIU19PUENPREUsIGxlZnQsIHJpZ2h0KSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBMRToKKyAgICAgICAgICAgIG9uZVNob3J0T3AoZ2V0
T3Bjb2RlR3JvdXAxKENNUEdFX09QQ09ERSwgbGVmdCwgcmlnaHQpKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIExUOgorICAgICAgICAgICAgb25lU2hvcnRPcChnZXRPcGNvZGVH
cm91cDEoQ01QR1RfT1BDT0RFLCBsZWZ0LCByaWdodCkpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIHZvaWQgY21wcGwoUmVnaXN0ZXJJRCByZWcpCisgICAgeworICAg
ICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDIoQ01QUExfT1BDT0RFLCByZWcpOwor
ICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCBjbXBweihSZWdpc3Rl
cklEIHJlZykKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3VwMihD
TVBQWl9PUENPREUsIHJlZyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAg
ICB2b2lkIGNtcEVxSW1tUjAoaW50IGltbSwgUmVnaXN0ZXJJRCBkc3QsIENvbmRpdGlvbiBjb25k
KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXA1KENNUEVRSU1N
X09QQ09ERSwgaW1tKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAgIHZv
aWQgdGVzdGxSZWdSZWcoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAg
ICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXAxKFRTVF9PUENPREUsIGRzdCwgc3Jj
KTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAgIHZvaWQgdGVzdGxJbW04
cihpbnQgaW1tLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIEFTU0VSVCgoZHN0ID09
IFNINFJlZ2lzdGVyczo6cjApICYmIChpbW0gPD0gMjU1KSAmJiAoaW1tID49IDApKTsKKworICAg
ICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDUoVFNUSU1NX09QQ09ERSwgaW1tKTsK
KyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAgIHZvaWQgbm9wKCkKKyAgICB7
CisgICAgICAgIG9uZVNob3J0T3AoTk9QX09QQ09ERSwgZmFsc2UpOworICAgIH0KKworICAgIHZv
aWQgc2V0dCgpCisgICAgeworICAgICAgICBvbmVTaG9ydE9wKFNFVFRfT1BDT0RFKTsKKyAgICB9
CisKKyAgICB2b2lkIGNscnQoKQorICAgIHsKKyAgICAgICAgb25lU2hvcnRPcChDTFJUX09QQ09E
RSk7CisgICAgfQorCisgICAgdm9pZCBmc2NoZygpCisgICAgeworICAgICAgICBvbmVTaG9ydE9w
KEZTQ0hHX09QQ09ERSk7CisgICAgfQorCisgICAgdm9pZCBia3B0KCkKKyAgICB7CisgICAgICAg
IG9uZVNob3J0T3AoQlJLX09QQ09ERSwgZmFsc2UpOworICAgIH0KKworICAgIHZvaWQgYnJhbmNo
KHVpbnQxNl90IG9wYywgaW50IGxhYmVsKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChvcGMpIHsK
KyAgICAgICAgY2FzZSBCVF9PUENPREU6CisgICAgICAgICAgICBBU1NFUlQoKGxhYmVsIDw9IDEy
NykgJiYgKGxhYmVsID49IC0xMjgpKTsKKyAgICAgICAgICAgIG9uZVNob3J0T3AoZ2V0T3Bjb2Rl
R3JvdXA1KEJUX09QQ09ERSwgbGFiZWwpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIEJSQV9PUENPREU6CisgICAgICAgICAgICBBU1NFUlQoKGxhYmVsIDw9IDIwNDcpICYmIChs
YWJlbCA+PSAtMjA0OCkpOworICAgICAgICAgICAgb25lU2hvcnRPcChnZXRPcGNvZGVHcm91cDYo
QlJBX09QQ09ERSwgbGFiZWwpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEJG
X09QQ09ERToKKyAgICAgICAgICAgIEFTU0VSVCgobGFiZWwgPD0gMTI3KSAmJiAobGFiZWwgPj0g
LTEyOCkpOworICAgICAgICAgICAgb25lU2hvcnRPcChnZXRPcGNvZGVHcm91cDUoQkZfT1BDT0RF
LCBsYWJlbCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQg
YnJhbmNoKHVpbnQxNl90IG9wYywgUmVnaXN0ZXJJRCByZWcpCisgICAgeworICAgICAgICBzd2l0
Y2ggKG9wYykgeworICAgICAgICBjYXNlIEJSQUZfT1BDT0RFOgorICAgICAgICAgICAgb25lU2hv
cnRPcChnZXRPcGNvZGVHcm91cDIoQlJBRl9PUENPREUsIHJlZykpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgSk1QX09QQ09ERToKKyAgICAgICAgICAgIG9uZVNob3J0T3AoZ2V0
T3Bjb2RlR3JvdXAyKEpNUF9PUENPREUsIHJlZykpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgSlNSX09QQ09ERToKKyAgICAgICAgICAgIG9uZVNob3J0T3AoZ2V0T3Bjb2RlR3Jv
dXAyKEpTUl9PUENPREUsIHJlZykpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
QlNSRl9PUENPREU6CisgICAgICAgICAgICBvbmVTaG9ydE9wKGdldE9wY29kZUdyb3VwMihCU1JG
X09QQ09ERSwgcmVnKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgfQorCisgICAg
dm9pZCBsZHNwcihSZWdpc3RlcklEIHJlZykKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9
IGdldE9wY29kZUdyb3VwMihMRFNQUl9PUENPREUsIHJlZyk7CisgICAgICAgIG9uZVNob3J0T3Ao
b3BjKTsKKyAgICB9CisKKyAgICB2b2lkIHN0c3ByKFJlZ2lzdGVySUQgcmVnKQorICAgIHsKKyAg
ICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXAyKFNUU1BSX09QQ09ERSwgcmVnKTsK
KyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAgIHZvaWQgZXh0dXcoUmVnaXN0
ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0g
Z2V0T3Bjb2RlR3JvdXAxKEVYVFVXX09QQ09ERSwgZHN0LCBzcmMpOworICAgICAgICBvbmVTaG9y
dE9wKG9wYyk7CisgICAgfQorCisgICAgLy8gZmxvYXQgb3BlcmF0aW9ucworCisgICAgdm9pZCBs
ZHNybWZwdWwoUmVnaXN0ZXJJRCBzcmMpCisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBn
ZXRPcGNvZGVHcm91cDIoTERTX1JNX0ZQVUxfT1BDT0RFLCBzcmMpOworICAgICAgICBvbmVTaG9y
dE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCBmbmVnKEZQUmVnaXN0ZXJJRCBkc3QpCisgICAg
eworICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDIoRk5FR19PUENPREUsIGRz
dCk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjLCB0cnVlLCBmYWxzZSk7CisgICAgfQorCisgICAg
dm9pZCBmc3FydChGUFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3Bj
ID0gZ2V0T3Bjb2RlR3JvdXAyKEZTUVJUX09QQ09ERSwgZHN0KTsKKyAgICAgICAgb25lU2hvcnRP
cChvcGMsIHRydWUsIGZhbHNlKTsKKyAgICB9CisKKyAgICB2b2lkIHN0c2ZwdWxSZWcoUmVnaXN0
ZXJJRCBzcmMpCisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDIo
U1RTX0ZQVUxfUk5fT1BDT0RFLCBzcmMpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAg
fQorCisgICAgdm9pZCBmbG9hdGZwdWxmcm4oUmVnaXN0ZXJJRCBzcmMpCisgICAgeworICAgICAg
ICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDIoRkxPQVRfT1BDT0RFLCBzcmMpOworICAg
ICAgICBvbmVTaG9ydE9wKG9wYywgdHJ1ZSwgZmFsc2UpOworICAgIH0KKworICAgIHZvaWQgZm11
bGwoRlBSZWdpc3RlcklEIHNyYywgRlBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIHVp
bnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3VwMShGTVVMX09QQ09ERSwgZHN0LCBzcmMpOworICAg
ICAgICBvbmVTaG9ydE9wKG9wYywgdHJ1ZSwgZmFsc2UpOworICAgIH0KKworICAgIHZvaWQgZm1v
dnNSZWFkcm0oUmVnaXN0ZXJJRCBzcmMsIEZQUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAg
ICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDEoRk1PVlNfUkVBRF9STV9PUENPREUsIGRz
dCwgc3JjKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMsIHRydWUsIGZhbHNlKTsKKyAgICB9CisK
KyAgICB2b2lkIGZtb3ZzV3JpdGVybShGUFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCkK
KyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3VwMShGTU9WU19XUklU
RV9STl9PUENPREUsIGRzdCwgc3JjKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMsIHRydWUsIGZh
bHNlKTsKKyAgICB9CisKKyAgICB2b2lkIGZtb3ZzV3JpdGVyMHIoRlBSZWdpc3RlcklEIHNyYywg
UmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVH
cm91cDEoRk1PVlNfV1JJVEVfUjBSTl9PUENPREUsIGRzdCwgc3JjKTsKKyAgICAgICAgb25lU2hv
cnRPcChvcGMsIHRydWUsIGZhbHNlKTsKKyAgICB9CisKKyAgICB2b2lkIGZtb3ZzUmVhZHIwcihS
ZWdpc3RlcklEIHNyYywgRlBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90
IG9wYyA9IGdldE9wY29kZUdyb3VwMShGTU9WU19SRUFEX1IwUk1fT1BDT0RFLCBkc3QsIHNyYyk7
CisgICAgICAgIG9uZVNob3J0T3Aob3BjLCB0cnVlLCBmYWxzZSk7CisgICAgfQorCisgICAgdm9p
ZCBmbW92c1JlYWRybWluYyhSZWdpc3RlcklEIHNyYywgRlBSZWdpc3RlcklEIGRzdCkKKyAgICB7
CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3VwMShGTU9WU19SRUFEX1JNX0lO
Q19PUENPREUsIGRzdCwgc3JjKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMsIHRydWUsIGZhbHNl
KTsKKyAgICB9CisKKyAgICB2b2lkIGZtb3ZzV3JpdGVybmRlYyhGUFJlZ2lzdGVySUQgc3JjLCBS
ZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdy
b3VwMShGTU9WU19XUklURV9STl9ERUNfT1BDT0RFLCBkc3QsIHNyYyk7CisgICAgICAgIG9uZVNo
b3J0T3Aob3BjLCB0cnVlLCBmYWxzZSk7CisgICAgfQorCisgICAgdm9pZCBmdHJjUmVnZnB1bChG
UFJlZ2lzdGVySUQgc3JjKQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2Rl
R3JvdXAyKEZUUkNfT1BDT0RFLCBzcmMpOworICAgICAgICBvbmVTaG9ydE9wKG9wYywgdHJ1ZSwg
ZmFsc2UpOworICAgIH0KKworICAgIHZvaWQgZmxkc2ZwdWwoUmVnaXN0ZXJJRCBzcmMpCisgICAg
eworICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDIoRkxEU19GUk1fRlBVTF9P
UENPREUsIHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lk
IGZzdHNmcHVsKFJlZ2lzdGVySUQgc3JjKQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0g
Z2V0T3Bjb2RlR3JvdXAyKEZTVFNfRlBVTF9GUk5fT1BDT0RFLCBzcmMpOworICAgICAgICBvbmVT
aG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCBsZHNmcHNjcihSZWdpc3RlcklEIHJlZykK
KyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3VwMihMRFNGUFNDUl9P
UENPREUsIHJlZyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lk
IHN0c2Zwc2NyKFJlZ2lzdGVySUQgcmVnKQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0g
Z2V0T3Bjb2RlR3JvdXAyKFNUU0ZQU0NSX09QQ09ERSwgcmVnKTsKKyAgICAgICAgb25lU2hvcnRP
cChvcGMpOworICAgIH0KKworICAgIC8vIGRvdWJsZSBvcGVyYXRpb25zCisKKyAgICB2b2lkIGRj
bnZkcyhGUFJlZ2lzdGVySUQgc3JjKQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0
T3Bjb2RlR3JvdXA3KEZDTlZEU19EUk1fRlBVTF9PUENPREUsIHNyYyA+PiAxKTsKKyAgICAgICAg
b25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAgIHZvaWQgZGNtcHBlcShGUFJlZ2lzdGVySUQg
c3JjLCBGUFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0
T3Bjb2RlR3JvdXA4KEZDTVBFUV9PUENPREUsIGRzdCA+PiAxLCBzcmMgPj4gMSk7CisgICAgICAg
IG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lkIGRjbXBwZ3QoRlBSZWdpc3RlcklE
IHNyYywgRlBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdl
dE9wY29kZUdyb3VwOChGQ01QR1RfT1BDT0RFLCBkc3QgPj4gMSwgc3JjID4+IDEpOworICAgICAg
ICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCBkbXVsUmVnUmVnKEZQUmVnaXN0
ZXJJRCBzcmMsIEZQUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMg
PSBnZXRPcGNvZGVHcm91cDgoRk1VTF9PUENPREUsIGRzdCA+PiAxLCBzcmMgPj4gMSk7CisgICAg
ICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lkIGRzdWJSZWdSZWcoRlBSZWdp
c3RlcklEIHNyYywgRlBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9w
YyA9IGdldE9wY29kZUdyb3VwOChGU1VCX09QQ09ERSwgZHN0ID4+IDEsIHNyYyA+PiAxKTsKKyAg
ICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAgIHZvaWQgZGFkZFJlZ1JlZyhGUFJl
Z2lzdGVySUQgc3JjLCBGUFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qg
b3BjID0gZ2V0T3Bjb2RlR3JvdXA4KEZBRERfT1BDT0RFLCBkc3QgPj4gMSwgc3JjID4+IDEpOwor
ICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCBkbW92UmVnUmVnKEZQ
UmVnaXN0ZXJJRCBzcmMsIEZQUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICB1aW50MTZf
dCBvcGMgPSBnZXRPcGNvZGVHcm91cDgoRk1PVl9PUENPREUsIGRzdCA+PiAxLCBzcmMgPj4gMSk7
CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lkIGRkaXZSZWdSZWco
RlBSZWdpc3RlcklEIHNyYywgRlBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIHVpbnQx
Nl90IG9wYyA9IGdldE9wY29kZUdyb3VwOChGRElWX09QQ09ERSwgZHN0ID4+IDEsIHNyYyA+PiAx
KTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAgIHZvaWQgZHNxcnQoRlBS
ZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdy
b3VwNyhGU1FSVF9PUENPREUsIGRzdCA+PiAxKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOwor
ICAgIH0KKworICAgIHZvaWQgZG5lZyhGUFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAg
dWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXA3KEZORUdfT1BDT0RFLCBkc3QgPj4gMSk7Cisg
ICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lkIGZtb3ZSZWFkcm0oUmVn
aXN0ZXJJRCBzcmMsIEZQUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICB1aW50MTZfdCBv
cGMgPSBnZXRPcGNvZGVHcm91cDEwKEZNT1ZTX1JFQURfUk1fT1BDT0RFLCBkc3QgPj4gMSwgc3Jj
KTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAgIHZvaWQgZm1vdldyaXRl
cm0oRlBSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICB1aW50
MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDkoRk1PVlNfV1JJVEVfUk5fT1BDT0RFLCBkc3QsIHNy
YyA+PiAxKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAgIHZvaWQgZm1v
dldyaXRlcjByKEZQUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAg
ICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXA5KEZNT1ZTX1dSSVRFX1IwUk5fT1BDT0RF
LCBkc3QsIHNyYyA+PiAxKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAg
IHZvaWQgZm1vdlJlYWRyMHIoUmVnaXN0ZXJJRCBzcmMsIEZQUmVnaXN0ZXJJRCBkc3QpCisgICAg
eworICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDEwKEZNT1ZTX1JFQURfUjBS
TV9PUENPREUsIGRzdCA+PiAxLCBzcmMpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAg
fQorCisgICAgdm9pZCBmbW92UmVhZHJtaW5jKFJlZ2lzdGVySUQgc3JjLCBGUFJlZ2lzdGVySUQg
ZHN0KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXAxMChGTU9W
U19SRUFEX1JNX0lOQ19PUENPREUsIGRzdCA+PiAxLCBzcmMpOworICAgICAgICBvbmVTaG9ydE9w
KG9wYyk7CisgICAgfQorCisgICAgdm9pZCBmbW92V3JpdGVybmRlYyhGUFJlZ2lzdGVySUQgc3Jj
LCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29k
ZUdyb3VwOShGTU9WU19XUklURV9STl9ERUNfT1BDT0RFLCBkc3QsIHNyYyA+PiAxKTsKKyAgICAg
ICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAgIHZvaWQgZmxvYXRmcHVsRHJlZyhGUFJl
Z2lzdGVySUQgc3JjKQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3Jv
dXA3KEZMT0FUX09QQ09ERSwgc3JjID4+IDEpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7Cisg
ICAgfQorCisgICAgdm9pZCBmdHJjZHJtZnB1bChGUFJlZ2lzdGVySUQgc3JjKQorICAgIHsKKyAg
ICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXA3KEZUUkNfT1BDT0RFLCBzcmMgPj4g
MSk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICAvLyBWYXJpb3VzIG1v
dmUgb3BzCisKKyAgICB2b2lkIG1vdkltbTgoaW50IGltbTgsIFJlZ2lzdGVySUQgZHN0KQorICAg
IHsKKyAgICAgICAgQVNTRVJUKChpbW04IDw9IDEyNykgJiYgKGltbTggPj0gLTEyOCkpOworCisg
ICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3VwMyhNT1ZJTU1fT1BDT0RFLCBkc3Qs
IGltbTgpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCBtb3Zs
UmVnUmVnKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIHVp
bnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3VwMShNT1ZfT1BDT0RFLCBkc3QsIHNyYyk7CisgICAg
ICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lkIG1vdndSZWdNZW0oUmVnaXN0
ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0g
Z2V0T3Bjb2RlR3JvdXAxKE1PVldfV1JJVEVfUk5fT1BDT0RFLCBkc3QsIHNyYyk7CisgICAgICAg
IG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lkIG1vdndNZW1SZWcoUmVnaXN0ZXJJ
RCBzcmMsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0
T3Bjb2RlR3JvdXAxKE1PVldfUkVBRF9STV9PUENPREUsIGRzdCwgc3JjKTsKKyAgICAgICAgb25l
U2hvcnRPcChvcGMpOworICAgIH0KKworICAgIHZvaWQgbW92d1BDUmVnKGludCBvZmZzZXQsIFJl
Z2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICBBU1NFUlQoYmFz
ZSA9PSBTSDRSZWdpc3RlcnM6OnBjKTsKKyAgICAgICAgQVNTRVJUKChvZmZzZXQgPD0gMjU1KSAm
JiAob2Zmc2V0ID49IDApKTsKKworICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91
cDMoTU9WV19SRUFEX09GRlBDX09QQ09ERSwgZHN0LCBvZmZzZXQpOworICAgICAgICBvbmVTaG9y
dE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCBtb3Z3TWVtUmVnKGludCBvZmZzZXQsIFJlZ2lz
dGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICBBU1NFUlQoZHN0ID09
IFNINFJlZ2lzdGVyczo6cjApOworCisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdy
b3VwMTEoTU9WV19SRUFEX09GRlJNX09QQ09ERSwgYmFzZSwgb2Zmc2V0KTsKKyAgICAgICAgb25l
U2hvcnRPcChvcGMpOworICAgIH0KKworICAgIHZvaWQgbW92d1IwbXIoUmVnaXN0ZXJJRCBzcmMs
IFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2Rl
R3JvdXAxKE1PVldfUkVBRF9SMFJNX09QQ09ERSwgZHN0LCBzcmMpOworICAgICAgICBvbmVTaG9y
dE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCBtb3ZsUmVnTWVtKFJlZ2lzdGVySUQgc3JjLCBp
bnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UpCisgICAgeworICAgICAgICBBU1NFUlQoKG9mZnNl
dCA8PSAxNSkgJiYgKG9mZnNldCA+PSAwKSk7CisKKyAgICAgICAgaWYgKCFvZmZzZXQpIHsKKyAg
ICAgICAgICAgIG9uZVNob3J0T3AoZ2V0T3Bjb2RlR3JvdXAxKE1PVkxfV1JJVEVfUk5fT1BDT0RF
LCBiYXNlLCBzcmMpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAg
IG9uZVNob3J0T3AoZ2V0T3Bjb2RlR3JvdXA0KE1PVkxfV1JJVEVfT0ZGUk5fT1BDT0RFLCBiYXNl
LCBzcmMsIG9mZnNldCkpOworICAgIH0KKworICAgIHZvaWQgbW92bFJlZ01lbShSZWdpc3RlcklE
IHNyYywgUmVnaXN0ZXJJRCBiYXNlKQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0
T3Bjb2RlR3JvdXAxKE1PVkxfV1JJVEVfUk5fT1BDT0RFLCBiYXNlLCBzcmMpOworICAgICAgICBv
bmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCBtb3ZsTWVtUmVnKGludCBvZmZzZXQs
IFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICBpZiAoYmFz
ZSA9PSBTSDRSZWdpc3RlcnM6OnBjKSB7CisgICAgICAgICAgICBBU1NFUlQoKG9mZnNldCA8PSAy
NTUpICYmIChvZmZzZXQgPj0gMCkpOworICAgICAgICAgICAgb25lU2hvcnRPcChnZXRPcGNvZGVH
cm91cDMoTU9WTF9SRUFEX09GRlBDX09QQ09ERSwgZHN0LCBvZmZzZXQpKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIEFTU0VSVCgob2Zmc2V0IDw9IDE1KSAmJiAo
b2Zmc2V0ID49IDApKTsKKyAgICAgICAgaWYgKCFvZmZzZXQpIHsKKyAgICAgICAgICAgIG9uZVNo
b3J0T3AoZ2V0T3Bjb2RlR3JvdXAxKE1PVkxfUkVBRF9STV9PUENPREUsIGRzdCwgYmFzZSkpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgb25lU2hvcnRPcChnZXRP
cGNvZGVHcm91cDQoTU9WTF9SRUFEX09GRlJNX09QQ09ERSwgZHN0LCBiYXNlLCBvZmZzZXQpKTsK
KyAgICB9CisKKyAgICB2b2lkIG1vdmJNZW1SZWcoaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNl
LCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIEFTU0VSVChkc3QgPT0gU0g0UmVnaXN0
ZXJzOjpyMCk7CisKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXAxMShNT1ZC
X1JFQURfT0ZGUk1fT1BDT0RFLCBiYXNlLCBvZmZzZXQpOworICAgICAgICBvbmVTaG9ydE9wKG9w
Yyk7CisgICAgfQorCisgICAgdm9pZCBtb3ZiUjBtcihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJ
RCBkc3QpCisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDEoTU9W
Ql9SRUFEX1IwUk1fT1BDT0RFLCBkc3QsIHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsK
KyAgICB9CisKKyAgICB2b2lkIG1vdmJNZW1SZWcoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQg
ZHN0KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXAxKE1PVkJf
UkVBRF9STV9PUENPREUsIGRzdCwgc3JjKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAg
IH0KKworICAgIHZvaWQgbW92bE1lbVJlZyhSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgZHN0
KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXAxKE1PVkxfUkVB
RF9STV9PUENPREUsIGRzdCwgYmFzZSk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9
CisKKyAgICB2b2lkIG1vdmxNZW1SZWdJbihSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgZHN0
KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXAxKE1PVkxfUkVB
RF9STUlOQ19PUENPREUsIGRzdCwgYmFzZSk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAg
ICB9CisKKyAgICB2b2lkIG1vdmxSMG1yKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCkK
KyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3VwMShNT1ZMX1JFQURf
UjBSTV9PUENPREUsIGRzdCwgc3JjKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0K
KworICAgIHZvaWQgbW92bFJlZ01lbXIwKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCkK
KyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3VwMShNT1ZMX1dSSVRF
X1IwUk5fT1BDT0RFLCBkc3QsIHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9
CisKKyAgICB2b2lkIG1vdmxJbW04cihpbnQgaW1tOCwgUmVnaXN0ZXJJRCBkc3QpCisgICAgewor
ICAgICAgICBBU1NFUlQoKGltbTggPD0gMTI3KSAmJiAoaW1tOCA+PSAtMTI4KSk7CisKKyAgICAg
ICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXAzKE1PVklNTV9PUENPREUsIGRzdCwgaW1t
OCk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lkIGxvYWRDb25z
dGFudCh1aW50MzJfdCBjb25zdGFudCwgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICBp
ZiAoKChpbnQpY29uc3RhbnQgPD0gMHg3ZikgJiYgKChpbnQpY29uc3RhbnQgPj0gLTB4ODApKSB7
CisgICAgICAgICAgICBtb3ZJbW04KGNvbnN0YW50LCBkc3QpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXAzKE1P
VklNTV9PUENPREUsIGRzdCwgMCk7CisKKyAgICAgICAgbV9idWZmZXIuZW5zdXJlU3BhY2UobWF4
SW5zdHJ1Y3Rpb25TaXplLCBzaXplb2YodWludDMyX3QpKTsKKyAgICAgICAgcHJpbnRJbnN0cihn
ZXRPcGNvZGVHcm91cDMoTU9WSU1NX09QQ09ERSwgZHN0LCBjb25zdGFudCksIG1fYnVmZmVyLnVu
Y2hlY2tlZFNpemUoKSk7CisgICAgICAgIG1fYnVmZmVyLnB1dFNob3J0V2l0aENvbnN0YW50SW50
KG9wYywgY29uc3RhbnQsIHRydWUpOworICAgIH0KKworICAgIHZvaWQgbG9hZENvbnN0YW50VW5S
ZXVzYWJsZSh1aW50MzJfdCBjb25zdGFudCwgUmVnaXN0ZXJJRCBkc3QsIGJvb2wgZW5zdXJlU3Bh
Y2UgPSBmYWxzZSkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3Vw
MyhNT1ZJTU1fT1BDT0RFLCBkc3QsIDApOworCisgICAgICAgIGlmIChlbnN1cmVTcGFjZSkKKyAg
ICAgICAgICAgIG1fYnVmZmVyLmVuc3VyZVNwYWNlKG1heEluc3RydWN0aW9uU2l6ZSwgc2l6ZW9m
KHVpbnQzMl90KSk7CisKKyAgICAgICAgcHJpbnRJbnN0cihnZXRPcGNvZGVHcm91cDMoTU9WSU1N
X09QQ09ERSwgZHN0LCBjb25zdGFudCksIG1fYnVmZmVyLnVuY2hlY2tlZFNpemUoKSk7CisgICAg
ICAgIG1fYnVmZmVyLnB1dFNob3J0V2l0aENvbnN0YW50SW50KG9wYywgY29uc3RhbnQpOworICAg
IH0KKworICAgIC8vIEZsb3cgY29udHJvbAorCisgICAgSm1wU3JjIGNhbGwoKQorICAgIHsKKyAg
ICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgbV9idWZmZXIu
ZW5zdXJlU3BhY2UobWF4SW5zdHJ1Y3Rpb25TaXplICsgNCwgc2l6ZW9mKHVpbnQzMl90KSk7Cisg
ICAgICAgIGxvYWRDb25zdGFudFVuUmV1c2FibGUoMHgwLCBzY3IpOworICAgICAgICBicmFuY2go
SlNSX09QQ09ERSwgc2NyKTsKKyAgICAgICAgbm9wKCk7CisgICAgICAgIHJlbGVhc2VTY3JhdGNo
KHNjcik7CisgICAgICAgIHJldHVybiBKbXBTcmMobV9idWZmZXIudW5jaGVja2VkU2l6ZSgpKTsK
KyAgICB9CisKKyAgICBKbXBTcmMgY2FsbChSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAg
IG1fYnVmZmVyLmVuc3VyZVNwYWNlKG1heEluc3RydWN0aW9uU2l6ZSArIDIpOworICAgICAgICBi
cmFuY2goSlNSX09QQ09ERSwgZHN0KTsKKyAgICAgICAgbm9wKCk7CisgICAgICAgIHJldHVybiBK
bXBTcmMobV9idWZmZXIudW5jaGVja2VkU2l6ZSgpKTsKKyAgICB9CisKKyAgICBKbXBTcmMgam1w
KCkKKyAgICB7CisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAg
ICAgIG1fYnVmZmVyLmVuc3VyZVNwYWNlKG1heEluc3RydWN0aW9uU2l6ZSArIDQsIHNpemVvZih1
aW50MzJfdCkpOworICAgICAgICBpbnQgbV9zaXplID0gbV9idWZmZXIudW5jaGVja2VkU2l6ZSgp
OworICAgICAgICBsb2FkQ29uc3RhbnRVblJldXNhYmxlKDB4MCwgc2NyKTsKKyAgICAgICAgYnJh
bmNoKEJSQUZfT1BDT0RFLCBzY3IpOworICAgICAgICBub3AoKTsKKyAgICAgICAgcmVsZWFzZVNj
cmF0Y2goc2NyKTsKKyAgICAgICAgcmV0dXJuIEptcFNyYyhtX3NpemUpOworICAgIH0KKworICAg
IEptcFNyYyBqbXAoUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICBqbXBSZWcoZHN0KTsK
KyAgICAgICAgcmV0dXJuIEptcFNyYyhtX2J1ZmZlci51bmNoZWNrZWRTaXplKCkpOworICAgIH0K
KworICAgIHZvaWQgam1wUmVnKFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgbV9idWZm
ZXIuZW5zdXJlU3BhY2UobWF4SW5zdHJ1Y3Rpb25TaXplICsgMik7CisgICAgICAgIGJyYW5jaChK
TVBfT1BDT0RFLCBkc3QpOworICAgICAgICBub3AoKTsKKyAgICB9CisKKyAgICBKbXBTcmMgam5l
KCkKKyAgICB7CisgICAgICAgIGludCBtX3NpemUgPSBtX2J1ZmZlci51bmNoZWNrZWRTaXplKCk7
CisgICAgICAgIGJyYW5jaChCRl9PUENPREUsIDApOworICAgICAgICByZXR1cm4gSm1wU3JjKG1f
c2l6ZSk7CisgICAgfQorCisgICAgSm1wU3JjIGplKCkKKyAgICB7CisgICAgICAgIGludCBtX3Np
emUgPSBtX2J1ZmZlci51bmNoZWNrZWRTaXplKCk7CisgICAgICAgIGJyYW5jaChCVF9PUENPREUs
IDApOworICAgICAgICByZXR1cm4gSm1wU3JjKG1fc2l6ZSk7CisgICAgfQorCisgICAgdm9pZCBy
ZXQoKQorICAgIHsKKyAgICAgICAgbV9idWZmZXIuZW5zdXJlU3BhY2UobWF4SW5zdHJ1Y3Rpb25T
aXplICsgMik7CisgICAgICAgIG9uZVNob3J0T3AoUlRTX09QQ09ERSwgZmFsc2UpOworICAgIH0K
KworICAgIEptcERzdCBsYWJlbCgpCisgICAgeworICAgICAgICByZXR1cm4gSm1wRHN0KG1fYnVm
ZmVyLnNpemUoKSk7CisgICAgfQorCisgICAgaW50IHNpemVPZkNvbnN0YW50UG9vbCgpCisgICAg
eworICAgICAgICAgcmV0dXJuIG1fYnVmZmVyLnNpemVPZkNvbnN0YW50UG9vbCgpOworICAgIH0K
KworICAgIEptcERzdCBhbGlnbihpbnQgYWxpZ25tZW50KQorICAgIHsKKyAgICAgICAgbV9idWZm
ZXIuZW5zdXJlU3BhY2UobWF4SW5zdHJ1Y3Rpb25TaXplICsgMik7CisgICAgICAgIHdoaWxlICgh
bV9idWZmZXIuaXNBbGlnbmVkKGFsaWdubWVudCkpIHsKKyAgICAgICAgICAgIG5vcCgpOworICAg
ICAgICAgICAgbV9idWZmZXIuZW5zdXJlU3BhY2UobWF4SW5zdHJ1Y3Rpb25TaXplICsgMik7Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGxhYmVsKCk7CisgICAgfQorCisgICAgc3RhdGljIHZv
aWQgY2hhbmdlUENyZWxhdGl2ZUFkZHJlc3MoaW50IG9mZnNldCwgdWludDE2X3QqIGluc3RydWN0
aW9uUHRyLCB1aW50MzJfdCBuZXdBZGRyZXNzKQorICAgIHsKKyAgICAgICAgdWludDMyX3QgYWRk
cmVzcyA9IChvZmZzZXQgPDwgMikgKyAoKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3Q+KGluc3Ry
dWN0aW9uUHRyKSArIDQpICYofjB4MykpOworICAgICAgICAqcmVpbnRlcnByZXRfY2FzdDx1aW50
MzJfdCo+KGFkZHJlc3MpID0gbmV3QWRkcmVzczsKKyAgICB9CisKKyAgICBzdGF0aWMgdWludDE2
X3QqIGdldEluc3RydWN0aW9uUHRyKHZvaWQqIGNvZGUsIGludCBvZmZzZXQpCisgICAgeworICAg
ICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx1aW50MTZfdCo+IChyZWludGVycHJldF9jYXN0
PHVpbnQzMl90Pihjb2RlKSArIG9mZnNldCk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgbGlu
a0p1bXAodm9pZCogY29kZSwgSm1wU3JjIGZyb20sIHZvaWQqIHRvKQorICAgIHsKKyAgICAgICAg
QVNTRVJUKGZyb20ubV9vZmZzZXQgIT0gLTEpOworCisgICAgICAgIHVpbnQxNl90KiBpbnN0cnVj
dGlvblB0ciA9IGdldEluc3RydWN0aW9uUHRyKGNvZGUsIGZyb20ubV9vZmZzZXQpOworICAgICAg
ICB1aW50MTZfdCBpbnN0cnVjdGlvbiA9ICppbnN0cnVjdGlvblB0cjsKKyAgICAgICAgaW50IG9m
ZnNldEJpdHMgPSAocmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdD4odG8pIC0gcmVpbnRlcnByZXRf
Y2FzdDx1aW50MzJfdD4oY29kZSkpIC0gZnJvbS5tX29mZnNldDsKKworICAgICAgICBpZiAoKChp
bnN0cnVjdGlvbiAmIDB4ZmYwMCkgPT0gQlRfT1BDT0RFKSB8fCAoKGluc3RydWN0aW9uICYgMHhm
ZjAwKSA9PSBCRl9PUENPREUpKSB7CisgICAgICAgICAgICAvKiBCVCBsYWJlbCA9PT4gQkYgMgor
ICAgICAgICAgICAgICAgbm9wICAgICAgICAgIExEUiByZWcKKyAgICAgICAgICAgICAgIG5vcCAg
ICAgICAgICBicmFmIEByZWcKKyAgICAgICAgICAgICAgIG5vcCAgICAgICAgICBub3AKKyAgICAg
ICAgICAgICovCisgICAgICAgICAgICBvZmZzZXRCaXRzIC09IDg7CisgICAgICAgICAgICBpbnN0
cnVjdGlvbiBePSAweDAyMDI7CisgICAgICAgICAgICAqaW5zdHJ1Y3Rpb25QdHIrKyA9IGluc3Ry
dWN0aW9uOworICAgICAgICAgICAgY2hhbmdlUENyZWxhdGl2ZUFkZHJlc3MoKCppbnN0cnVjdGlv
blB0ciAmIDB4ZmYpLCBpbnN0cnVjdGlvblB0ciwgb2Zmc2V0Qml0cyk7CisgICAgICAgICAgICBp
bnN0cnVjdGlvbiA9IChCUkFGX09QQ09ERSB8ICgqaW5zdHJ1Y3Rpb25QdHIrKyAmIDB4ZjAwKSk7
CisgICAgICAgICAgICAqaW5zdHJ1Y3Rpb25QdHIgPSBpbnN0cnVjdGlvbjsKKyAgICAgICAgICAg
IHByaW50QmxvY2tJbnN0cihpbnN0cnVjdGlvblB0ciAtIDIsIGZyb20ubV9vZmZzZXQsIDMpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgfQorCisgICAgICAgICAvKiBNT1YgI2ltbSwg
cmVnID0+IExEUiByZWcKKyAgICAgICAgICAgIGJyYWYgQHJlZyAgICAgICAgYnJhZiBAcmVnCisg
ICAgICAgICAgICBub3AgICAgICAgICAgICAgIG5vcAorICAgICAgICAgKi8KKyAgICAgICAgQVNT
RVJUKCgqKGluc3RydWN0aW9uUHRyICsgMSkgJiBCUkFGX09QQ09ERSkgPT0gQlJBRl9PUENPREUp
OworCisgICAgICAgIG9mZnNldEJpdHMgLT0gNDsKKyAgICAgICAgaWYgKG9mZnNldEJpdHMgPj0g
LTQwOTYgJiYgb2Zmc2V0Qml0cyA8PSA0MDk0KSB7CisgICAgICAgICAgICAqaW5zdHJ1Y3Rpb25Q
dHIgPSBnZXRPcGNvZGVHcm91cDYoQlJBX09QQ09ERSwgb2Zmc2V0Qml0cyA+PiAxKTsKKyAgICAg
ICAgICAgICooKytpbnN0cnVjdGlvblB0cikgPSBOT1BfT1BDT0RFOworICAgICAgICAgICAgcHJp
bnRCbG9ja0luc3RyKGluc3RydWN0aW9uUHRyIC0gMSwgZnJvbS5tX29mZnNldCwgMik7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBjaGFuZ2VQQ3JlbGF0aXZlQWRk
cmVzcygoKmluc3RydWN0aW9uUHRyICYgMHhmZiksIGluc3RydWN0aW9uUHRyLCBvZmZzZXRCaXRz
IC0gMik7CisgICAgICAgIHByaW50SW5zdHIoKmluc3RydWN0aW9uUHRyLCBmcm9tLm1fb2Zmc2V0
ICsgMik7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgbGlua0NhbGwodm9pZCogY29kZSwgSm1w
U3JjIGZyb20sIHZvaWQqIHRvKQorICAgIHsKKyAgICAgICAgdWludDE2X3QqIGluc3RydWN0aW9u
UHRyID0gZ2V0SW5zdHJ1Y3Rpb25QdHIoY29kZSwgZnJvbS5tX29mZnNldCk7CisgICAgICAgIGlu
c3RydWN0aW9uUHRyIC09IDM7CisgICAgICAgIGNoYW5nZVBDcmVsYXRpdmVBZGRyZXNzKCgqaW5z
dHJ1Y3Rpb25QdHIgJiAweGZmKSwgaW5zdHJ1Y3Rpb25QdHIsIHJlaW50ZXJwcmV0X2Nhc3Q8dWlu
dDMyX3Q+KHRvKSk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgbGlua1BvaW50ZXIodm9pZCog
Y29kZSwgSm1wRHN0IHdoZXJlLCB2b2lkKiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHVpbnQxNl90
KiBpbnN0cnVjdGlvblB0ciA9IGdldEluc3RydWN0aW9uUHRyKGNvZGUsIHdoZXJlLm1fb2Zmc2V0
KTsKKyAgICAgICAgY2hhbmdlUENyZWxhdGl2ZUFkZHJlc3MoKCppbnN0cnVjdGlvblB0ciAmIDB4
ZmYpLCBpbnN0cnVjdGlvblB0ciwgcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdD4odmFsdWUpKTsK
KyAgICB9CisKKyAgICBzdGF0aWMgdW5zaWduZWQgZ2V0Q2FsbFJldHVybk9mZnNldChKbXBTcmMg
Y2FsbCkKKyAgICB7CisgICAgICAgIEFTU0VSVChjYWxsLm1fb2Zmc2V0ID49IDApOworICAgICAg
ICByZXR1cm4gY2FsbC5tX29mZnNldDsKKyAgICB9CisKKyAgICBzdGF0aWMgdWludDMyX3QqIGdl
dExkckltbUFkZHJlc3NPblBvb2woU0g0V29yZCogaW5zbiwgdWludDMyX3QqIGNvbnN0UG9vbCkK
KyAgICB7CisgICAgICAgIHJldHVybiAoY29uc3RQb29sICsgKCppbnNuICYgMHhmZikpOworICAg
IH0KKworICAgIHN0YXRpYyBTSDRXb3JkIHBhdGNoQ29uc3RhbnRQb29sTG9hZChTSDRXb3JkIGxv
YWQsIGludCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiAoKGxvYWQgJiB+MHhmZikgfCB2
YWx1ZSk7CisgICAgfQorCisgICAgc3RhdGljIFNINEJ1ZmZlcjo6VHdvU2hvcnRzIHBsYWNlQ29u
c3RhbnRQb29sQmFycmllcihpbnQgb2Zmc2V0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKCgob2Zm
c2V0ID4+IDEpIDw9MjA0NykgJiYgKChvZmZzZXQgPj4gMSkgPj0gLTIwNDgpKTsKKworICAgICAg
ICBTSDRCdWZmZXI6OlR3b1Nob3J0cyBtX2JhcnJpZXI7CisgICAgICAgIG1fYmFycmllci5oaWdo
ID0gKEJSQV9PUENPREUgfCAob2Zmc2V0ID4+IDEpKTsKKyAgICAgICAgbV9iYXJyaWVyLmxvdyA9
IE5PUF9PUENPREU7CisgICAgICAgIHByaW50SW5zdHIoKChCUkFfT1BDT0RFIHwgKG9mZnNldCA+
PiAxKSkpLCAwKTsKKyAgICAgICAgcHJpbnRJbnN0cihOT1BfT1BDT0RFLCAwKTsKKyAgICAgICAg
cmV0dXJuIG1fYmFycmllcjsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBwYXRjaENvbnN0YW50
UG9vbExvYWQodm9pZCogbG9hZEFkZHIsIHZvaWQqIGNvbnN0UG9vbEFkZHIpCisgICAgeworICAg
ICAgICBTSDRXb3JkKiBpbnN0cnVjdGlvblB0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8U0g0V29yZCo+
KGxvYWRBZGRyKTsKKyAgICAgICAgU0g0V29yZCBpbnN0cnVjdGlvbiA9ICppbnN0cnVjdGlvblB0
cjsKKyAgICAgICAgU0g0V29yZCBpbmRleCA9IGluc3RydWN0aW9uICYgMHhmZjsKKworICAgICAg
ICBpZiAoKGluc3RydWN0aW9uICYgMHhmMDAwKSAhPSBNT1ZJTU1fT1BDT0RFKQorICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgIEFTU0VSVCgoKChyZWludGVycHJldF9jYXN0PHVpbnQzMl90
Pihjb25zdFBvb2xBZGRyKSAtIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3Q+KGxvYWRBZGRyKSkg
KyBpbmRleCAqIDQpKSA8IDEwMjQpOworCisgICAgICAgIGludCBvZmZzZXQgPSByZWludGVycHJl
dF9jYXN0PHVpbnQzMl90Pihjb25zdFBvb2xBZGRyKSArIChpbmRleCAqIDQpIC0gKChyZWludGVy
cHJldF9jYXN0PHVpbnQzMl90PihpbnN0cnVjdGlvblB0cikgJiB+MHgwMykgKyA0KTsKKyAgICAg
ICAgaW5zdHJ1Y3Rpb24gJj0weGYwMDsKKyAgICAgICAgaW5zdHJ1Y3Rpb24gfD0gMHhkMDAwOwor
ICAgICAgICBvZmZzZXQgJj0gMHgwM2ZmOworICAgICAgICBpbnN0cnVjdGlvbiB8PSAob2Zmc2V0
ID4+IDIpOworICAgICAgICAqaW5zdHJ1Y3Rpb25QdHIgPSBpbnN0cnVjdGlvbjsKKyAgICAgICAg
cHJpbnRJbnN0cihpbnN0cnVjdGlvbiwgcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdD4obG9hZEFk
ZHIpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCByZXBhdGNoUG9pbnRlcih2b2lkKiB3aGVy
ZSwgdm9pZCogdmFsdWUpCisgICAgeworICAgICAgICBwYXRjaFBvaW50ZXIod2hlcmUsIHZhbHVl
KTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCByZXBhdGNoSW50MzIodm9pZCogd2hlcmUsIGlu
dDMyX3QgdmFsdWUpCisgICAgeworICAgICAgICB1aW50MTZfdCogaW5zdHJ1Y3Rpb25QdHIgPSBy
ZWludGVycHJldF9jYXN0PHVpbnQxNl90Kj4od2hlcmUpOworICAgICAgICBjaGFuZ2VQQ3JlbGF0
aXZlQWRkcmVzcygoKmluc3RydWN0aW9uUHRyICYgMHhmZiksIGluc3RydWN0aW9uUHRyLCB2YWx1
ZSk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgcmVsaW5rQ2FsbCh2b2lkKiBmcm9tLCB2b2lk
KiB0bykKKyAgICB7CisgICAgICAgIHVpbnQxNl90KiBpbnN0cnVjdGlvblB0ciA9IHJlaW50ZXJw
cmV0X2Nhc3Q8dWludDE2X3QqPihmcm9tKTsKKyAgICAgICAgaW5zdHJ1Y3Rpb25QdHIgLT0gMzsK
KyAgICAgICAgY2hhbmdlUENyZWxhdGl2ZUFkZHJlc3MoKCppbnN0cnVjdGlvblB0ciAmIDB4ZmYp
LCBpbnN0cnVjdGlvblB0ciwgcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdD4odG8pKTsKKyAgICB9
CisKKyAgICBzdGF0aWMgdm9pZCByZWxpbmtKdW1wKHZvaWQqIGZyb20sIHZvaWQqIHRvKQorICAg
IHsKKyAgICAgICAgdWludDE2X3QqIGluc3RydWN0aW9uUHRyID0gcmVpbnRlcnByZXRfY2FzdDx1
aW50MTZfdCo+IChmcm9tKTsKKyAgICAgICAgdWludDE2X3QgaW5zdHJ1Y3Rpb24gPSAqaW5zdHJ1
Y3Rpb25QdHI7CisgICAgICAgIGludDMyX3Qgb2Zmc2V0Qml0cyA9IChyZWludGVycHJldF9jYXN0
PHVpbnQzMl90Pih0bykgLSByZWludGVycHJldF9jYXN0PHVpbnQzMl90Pihmcm9tKSk7CisKKyAg
ICAgICAgaWYgKCgoKmluc3RydWN0aW9uUHRyICYgMHhmZjAwKSA9PSBCVF9PUENPREUpIHx8ICgo
Kmluc3RydWN0aW9uUHRyICYgMHhmZjAwKSA9PSBCRl9PUENPREUpKSB7CisgICAgICAgICAgICBv
ZmZzZXRCaXRzIC09IDg7CisgICAgICAgICAgICBpbnN0cnVjdGlvblB0cisrOworICAgICAgICAg
ICAgY2hhbmdlUENyZWxhdGl2ZUFkZHJlc3MoKCppbnN0cnVjdGlvblB0ciAmIDB4ZmYpLCBpbnN0
cnVjdGlvblB0ciwgb2Zmc2V0Qml0cyk7CisgICAgICAgICAgICBpbnN0cnVjdGlvbiA9IChCUkFG
X09QQ09ERSB8ICgqaW5zdHJ1Y3Rpb25QdHIrKyAmIDB4ZjAwKSk7CisgICAgICAgICAgICAqaW5z
dHJ1Y3Rpb25QdHIgPSBpbnN0cnVjdGlvbjsKKyAgICAgICAgICAgIHByaW50QmxvY2tJbnN0cihp
bnN0cnVjdGlvblB0ciwgcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdD4oZnJvbSkgKyAxLCAzKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIEFTU0VSVCgoKihpbnN0
cnVjdGlvblB0ciArIDEpICYgQlJBRl9PUENPREUpID09IEJSQUZfT1BDT0RFKTsKKyAgICAgICAg
b2Zmc2V0Qml0cyAtPSA0OworICAgICAgICBpZiAob2Zmc2V0Qml0cyA+PSAtNDA5NiAmJiBvZmZz
ZXRCaXRzIDw9IDQwOTQpIHsKKyAgICAgICAgICAgICppbnN0cnVjdGlvblB0ciA9IGdldE9wY29k
ZUdyb3VwNihCUkFfT1BDT0RFLCBvZmZzZXRCaXRzID4+IDEpOworICAgICAgICAgICAgKigrK2lu
c3RydWN0aW9uUHRyKSA9IE5PUF9PUENPREU7CisgICAgICAgICAgICBwcmludEJsb2NrSW5zdHIo
aW5zdHJ1Y3Rpb25QdHIgLSAyLCByZWludGVycHJldF9jYXN0PHVpbnQzMl90Pihmcm9tKSwgMik7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBjaGFuZ2VQQ3JlbGF0
aXZlQWRkcmVzcygoKmluc3RydWN0aW9uUHRyICYgMHhmZiksIGluc3RydWN0aW9uUHRyLCBvZmZz
ZXRCaXRzIC0gMik7CisgICAgICAgIHByaW50SW5zdHIoKmluc3RydWN0aW9uUHRyLCByZWludGVy
cHJldF9jYXN0PHVpbnQzMl90Pihmcm9tKSk7CisgICAgfQorCisgICAgLy8gTGlua2luZyAmIHBh
dGNoaW5nCisKKyAgICB2b2lkIGxpbmtKdW1wKEptcFNyYyBmcm9tLCBKbXBEc3QgdG8pCisgICAg
eworICAgICAgICBBU1NFUlQodG8ubV9vZmZzZXQgIT0gLTEpOworICAgICAgICBBU1NFUlQoZnJv
bS5tX29mZnNldCAhPSAtMSk7CisKKyAgICAgICAgdWludDE2X3QqIGluc3RydWN0aW9uUHRyID0g
Z2V0SW5zdHJ1Y3Rpb25QdHIoZGF0YSgpLCBmcm9tLm1fb2Zmc2V0KTsKKyAgICAgICAgdWludDE2
X3QgaW5zdHJ1Y3Rpb24gPSAqaW5zdHJ1Y3Rpb25QdHI7CisgICAgICAgIGludCBvZmZzZXRCaXRz
OworCisgICAgICAgIGlmICgoKGluc3RydWN0aW9uICYgMHhmZjAwKSA9PSBCVF9PUENPREUpIHx8
ICgoaW5zdHJ1Y3Rpb24gJiAweGZmMDApID09IEJGX09QQ09ERSkpIHsKKyAgICAgICAgICAgIC8q
IEJUIGxhYmVsID0+IEJGIDIKKyAgICAgICAgICAgICAgIG5vcCAgICAgICAgTERSIHJlZworICAg
ICAgICAgICAgICAgbm9wICAgICAgICBicmFmIEByZWcKKyAgICAgICAgICAgICAgIG5vcCAgICAg
ICAgbm9wCisgICAgICAgICAgICAqLworICAgICAgICAgICAgb2Zmc2V0Qml0cyA9ICh0by5tX29m
ZnNldCAtIGZyb20ubV9vZmZzZXQpIC0gODsKKyAgICAgICAgICAgIGluc3RydWN0aW9uIF49IDB4
MDIwMjsKKyAgICAgICAgICAgICppbnN0cnVjdGlvblB0cisrID0gaW5zdHJ1Y3Rpb247CisgICAg
ICAgICAgICBpZiAoKCppbnN0cnVjdGlvblB0ciAmIDB4ZjAwMCkgPT0gMHhlMDAwKSB7CisgICAg
ICAgICAgICAgICAgdWludDMyX3QqIGFkZHIgPSBnZXRMZHJJbW1BZGRyZXNzT25Qb29sKGluc3Ry
dWN0aW9uUHRyLCBtX2J1ZmZlci5wb29sQWRkcmVzcygpKTsKKyAgICAgICAgICAgICAgICAqYWRk
ciA9IG9mZnNldEJpdHM7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBjaGFu
Z2VQQ3JlbGF0aXZlQWRkcmVzcygoKmluc3RydWN0aW9uUHRyICYgMHhmZiksIGluc3RydWN0aW9u
UHRyLCBvZmZzZXRCaXRzKTsKKyAgICAgICAgICAgIGluc3RydWN0aW9uID0gKEJSQUZfT1BDT0RF
IHwgKCppbnN0cnVjdGlvblB0cisrICYgMHhmMDApKTsKKyAgICAgICAgICAgICppbnN0cnVjdGlv
blB0ciA9IGluc3RydWN0aW9uOworICAgICAgICAgICAgcHJpbnRCbG9ja0luc3RyKGluc3RydWN0
aW9uUHRyIC0gMiwgZnJvbS5tX29mZnNldCwgMyk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKworICAgICAgICAvKiBNT1YgIyBpbW0sIHJlZyA9PiBMRFIgcmVnCisgICAgICAgICAg
IGJyYWYgQHJlZyAgICAgICAgIGJyYWYgQHJlZworICAgICAgICAgICBub3AgICAgICAgICAgICAg
ICBub3AKKyAgICAgICAgKi8KKyAgICAgICAgQVNTRVJUKCgqKGluc3RydWN0aW9uUHRyICsgMSkg
JiBCUkFGX09QQ09ERSkgPT0gQlJBRl9PUENPREUpOworICAgICAgICBvZmZzZXRCaXRzID0gKHRv
Lm1fb2Zmc2V0IC0gZnJvbS5tX29mZnNldCkgLSA0OworICAgICAgICBpZiAob2Zmc2V0Qml0cyA+
PSAtNDA5NiAmJiBvZmZzZXRCaXRzIDw9IDQwOTQpIHsKKyAgICAgICAgICAgICppbnN0cnVjdGlv
blB0ciA9IGdldE9wY29kZUdyb3VwNihCUkFfT1BDT0RFLCBvZmZzZXRCaXRzID4+IDEpOworICAg
ICAgICAgICAgKigrK2luc3RydWN0aW9uUHRyKSA9IE5PUF9PUENPREU7CisgICAgICAgICAgICBw
cmludEJsb2NrSW5zdHIoaW5zdHJ1Y3Rpb25QdHIgLSAxLCBmcm9tLm1fb2Zmc2V0LCAyKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGluc3RydWN0aW9uID0gKmlu
c3RydWN0aW9uUHRyOworICAgICAgICBpZiAoKGluc3RydWN0aW9uICAmIDB4ZjAwMCkgPT0gMHhl
MDAwKSB7CisgICAgICAgICAgICB1aW50MzJfdCogYWRkciA9IGdldExkckltbUFkZHJlc3NPblBv
b2woaW5zdHJ1Y3Rpb25QdHIsIG1fYnVmZmVyLnBvb2xBZGRyZXNzKCkpOworICAgICAgICAgICAg
KmFkZHIgPSBvZmZzZXRCaXRzIC0gMjsKKyAgICAgICAgICAgIHByaW50SW5zdHIoKmluc3RydWN0
aW9uUHRyLCBmcm9tLm1fb2Zmc2V0ICsgMik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKworICAgICAgICBjaGFuZ2VQQ3JlbGF0aXZlQWRkcmVzcygoKmluc3RydWN0aW9uUHRyICYg
MHhmZiksIGluc3RydWN0aW9uUHRyLCBvZmZzZXRCaXRzIC0gMik7CisgICAgICAgIHByaW50SW5z
dHIoKmluc3RydWN0aW9uUHRyLCBmcm9tLm1fb2Zmc2V0ICsgMik7CisgICAgfQorCisgICAgc3Rh
dGljIHZvaWQqIGdldFJlbG9jYXRlZEFkZHJlc3Modm9pZCogY29kZSwgSm1wU3JjIGp1bXApCisg
ICAgeworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRf
Y2FzdDx1aW50MzJfdD4oY29kZSkgKyBqdW1wLm1fb2Zmc2V0KTsKKyAgICB9CisKKyAgICBzdGF0
aWMgdm9pZCogZ2V0UmVsb2NhdGVkQWRkcmVzcyh2b2lkKiBjb2RlLCBKbXBEc3QgZGVzdGluYXRp
b24pCisgICAgeworICAgICAgICBBU1NFUlQoZGVzdGluYXRpb24ubV9vZmZzZXQgIT0gLTEpOwor
ICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDx1
aW50MzJfdD4oY29kZSkgKyBkZXN0aW5hdGlvbi5tX29mZnNldCk7CisgICAgfQorCisgICAgc3Rh
dGljIGludCBnZXREaWZmZXJlbmNlQmV0d2VlbkxhYmVscyhKbXBEc3Qgc3JjLCBKbXBEc3QgZHN0
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGRzdC5tX29mZnNldCAtIHNyYy5tX29mZnNldDsKKyAg
ICB9CisKKyAgICBzdGF0aWMgaW50IGdldERpZmZlcmVuY2VCZXR3ZWVuTGFiZWxzKEptcERzdCBz
cmMsIEptcFNyYyBkc3QpCisgICAgeworICAgICAgICByZXR1cm4gZHN0Lm1fb2Zmc2V0IC0gc3Jj
Lm1fb2Zmc2V0OworICAgIH0KKworICAgIHN0YXRpYyBpbnQgZ2V0RGlmZmVyZW5jZUJldHdlZW5M
YWJlbHMoSm1wU3JjIHNyYywgSm1wRHN0IGRzdCkKKyAgICB7CisgICAgICAgIHJldHVybiBkc3Qu
bV9vZmZzZXQgLSBzcmMubV9vZmZzZXQ7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgcGF0Y2hQ
b2ludGVyKHZvaWQqIGNvZGUsIEptcERzdCB3aGVyZSwgdm9pZCogdmFsdWUpCisgICAgeworICAg
ICAgICBwYXRjaFBvaW50ZXIocmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KGNvZGUpICsgd2hl
cmUubV9vZmZzZXQsIHZhbHVlKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBwYXRjaFBvaW50
ZXIodm9pZCogY29kZSwgdm9pZCogdmFsdWUpCisgICAgeworICAgICAgICBwYXRjaEludDMyKGNv
ZGUsIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3Q+KHZhbHVlKSk7CisgICAgfQorCisgICAgc3Rh
dGljIHZvaWQgcGF0Y2hJbnQzMih2b2lkKiBjb2RlLCB1aW50MzJfdCB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIGNoYW5nZVBDcmVsYXRpdmVBZGRyZXNzKCgqKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDE2
X3QqPihjb2RlKSkgJiAweGZmKSwgcmVpbnRlcnByZXRfY2FzdDx1aW50MTZfdCo+KGNvZGUpLCB2
YWx1ZSk7CisgICAgfQorCisgICAgdm9pZCogZXhlY3V0YWJsZUNvcHkoRXhlY3V0YWJsZVBvb2wq
IGFsbG9jYXRvcikKKyAgICB7CisgICAgICAgIHZvaWQqIGNvcHkgPSBtX2J1ZmZlci5leGVjdXRh
YmxlQ29weShhbGxvY2F0b3IpOworICAgICAgICBBU1NFUlQoY29weSk7CisgICAgICAgIHJldHVy
biBjb3B5OworICAgIH0KKworICAgIHZvaWQgcHJlZml4KHVpbnQxNl90IHByZSkKKyAgICB7Cisg
ICAgICAgIG1fYnVmZmVyLnB1dEJ5dGUocHJlKTsKKyAgICB9CisKKyAgICB2b2lkIG9uZVNob3J0
T3AodWludDE2X3Qgb3Bjb2RlLCBib29sIGNoZWNrc2l6ZSA9IHRydWUsIGJvb2wgaXNEb3VibGUg
PSB0cnVlKQorICAgIHsKKyAgICAgICAgcHJpbnRJbnN0cihvcGNvZGUsIG1fYnVmZmVyLnVuY2hl
Y2tlZFNpemUoKSwgaXNEb3VibGUpOworICAgICAgICBpZiAoY2hlY2tzaXplKQorICAgICAgICAg
ICAgbV9idWZmZXIuZW5zdXJlU3BhY2UobWF4SW5zdHJ1Y3Rpb25TaXplKTsKKyAgICAgICAgbV9i
dWZmZXIucHV0U2hvcnRVbmNoZWNrZWQob3Bjb2RlKTsKKyAgICB9CisKKyAgICB2b2lkIGVuc3Vy
ZVNwYWNlKGludCBzcGFjZSkKKyAgICB7CisgICAgICAgIG1fYnVmZmVyLmVuc3VyZVNwYWNlKHNw
YWNlKTsKKyAgICB9CisKKyAgICB2b2lkIGVuc3VyZVNwYWNlKGludCBpbnNuU3BhY2UsIGludCBj
b25zdFNwYWNlKQorICAgIHsKKyAgICAgICAgbV9idWZmZXIuZW5zdXJlU3BhY2UoaW5zblNwYWNl
LCBjb25zdFNwYWNlKTsKKyAgICB9CisKKyAgICAvLyBBZG1pbmlzdHJhdGl2ZSBtZXRob2RzCisK
KyAgICB2b2lkKiBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9idWZmZXIuZGF0YSgpOyB9CisgICAg
aW50IHNpemUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fYnVmZmVyLnNpemUoKTsKKyAgICB9
CisKKyNpZmRlZiBTSDRfQVNTRU1CTEVSX1RSQUNJTkcKKyAgICBzdGF0aWMgdm9pZCBwcmludElu
c3RyKHVpbnQxNl90IG9wYywgdW5zaWduZWQgaW50IHNpemUsIGJvb2wgaXNkb3VibGVJbnN0ID0g
dHJ1ZSkKKyAgICB7CisgICAgICAgIGlmICghZ2V0ZW52KCJKYXZhU2NyaXB0Q29yZUR1bXBKSVQi
KSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBjb25zdCBjaGFyICpmb3JtYXQgPSAw
OworICAgICAgICBwcmludGZTdGRvdXRJbnN0cigib2Zmc2V0OiAweCU4Ljh4XHQiLCBzaXplKTsK
KyAgICAgICAgc3dpdGNoIChvcGMpIHsKKyAgICAgICAgY2FzZSBCUktfT1BDT0RFOgorICAgICAg
ICAgICAgZm9ybWF0ID0gIiAgICBCUktcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBOT1BfT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBOT1BcbiI7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBSVFNfT1BDT0RFOgorICAgICAgICAgICAgZm9y
bWF0ID0iICAgICpSVFNcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTRVRT
X09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgU0VUU1xuIjsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIFNFVFRfT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0g
IiAgICBTRVRUXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ0xSVF9PUENP
REU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIENMUlRcbiI7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBGU0NIR19PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAg
IEZTQ0hHXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGZv
cm1hdCkgeworICAgICAgICAgICAgcHJpbnRmU3Rkb3V0SW5zdHIoZm9ybWF0KTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBzd2l0Y2ggKG9wYyAmIDB4ZjBmZikgewor
ICAgICAgICBjYXNlIEJSQUZfT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICAqQlJB
RiBSJWRcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBEVF9PUENPREU6Cisg
ICAgICAgICAgICBmb3JtYXQgPSAiICAgIERUIFIlZFxuIjsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIENNUFBMX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgQ01Q
L1BMIFIlZFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENNUFBaX09QQ09E
RToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgQ01QL1BaIFIlZFxuIjsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIEpNUF9PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAi
ICAgICpKTVAgQFIlZFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEpTUl9P
UENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgICpKU1IgQFIlZFxuIjsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIExEU1BSX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1h
dCA9ICIgICAgTERTIFIlZCwgUFJcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBMRFNMUFJfT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBMRFMuTCBAUiVkKywg
UFJcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBNT1ZUX09QQ09ERToKKyAg
ICAgICAgICAgIGZvcm1hdCA9ICIgICAgTU9WVCBSJWRcbiI7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBTSEFMX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgU0hB
TCBSJWRcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTSEFSX09QQ09ERToK
KyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgU0hBUiBSJWRcbiI7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBTSExMX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAg
U0hMTCBSJWRcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTSExMMl9PUENP
REU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIFNITEwyIFIlZFxuIjsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIFNITEw4X09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9
ICIgICAgU0hMTDggUiVkXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU0hM
TDE2X09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgU0hMTDE2IFIlZFxuIjsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNITFJfT1BDT0RFOgorICAgICAgICAgICAg
Zm9ybWF0ID0gIiAgICBTSExSIFIlZFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIFNITFIyX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgU0hMUjIgUiVkXG4i
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU0hMUjhfT1BDT0RFOgorICAgICAg
ICAgICAgZm9ybWF0ID0gIiAgICBTSExSOCBSJWRcbiI7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBTSExSMTZfT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBTSExS
MTYgUiVkXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU1RTUFJfT1BDT0RF
OgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBTVFMgUFIsIFIlZFxuIjsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIFNUU0xQUl9PUENPREU6CisgICAgICAgICAgICBmb3JtYXQg
PSAiICAgIFNUUy5MIFBSLCBALVIlZFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIExEU19STV9GUFVMX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgTERTIFIl
ZCwgRlBVTFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNUU19GUFVMX1JO
X09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgU1RTIEZQVUwsIFIlZCBcbiI7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBGTERTX0ZSTV9GUFVMX09QQ09ERToKKyAg
ICAgICAgICAgIGZvcm1hdCA9ICIgICAgRkxEUyBGUiVkLCBGUFVMXG4iOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgRlNUU19GUFVMX0ZSTl9PUENPREU6CisgICAgICAgICAgICBm
b3JtYXQgPSAiICAgIEZTVFMgRlBVTCwgUiVkIFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIExEU0ZQU0NSX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgTERT
IFIlZCwgRlBTQ1IgXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU1RTRlBT
Q1JfT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBTVFMgRlBTQ1IsIFIlZCBcbiI7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTVFNNQUNMX09QQ09ERToKKyAgICAg
ICAgICAgIGZvcm1hdCA9ICIgICAgU1RTIE1BQ0wsIFIlZCBcbiI7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBTVFNNQUNIX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIg
ICAgU1RTIE1BQ0gsIFIlZCBcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBC
U1JGX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgKkJTUkYgUiVkIjsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEZUUkNfT1BDT0RFOgorICAgICAgICAgICAgZm9y
bWF0ID0gIiAgICBGVFJDIEZSJWQsIEZQVUxcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICBpZiAoZm9ybWF0KSB7CisgICAgICAgICAgICBwcmludGZTdGRvdXRJbnN0
cihmb3JtYXQsIGdldFJuKG9wYykpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg
ICAgICAgIHN3aXRjaCAob3BjICYgMHhmMGZmKSB7CisgICAgICAgIGNhc2UgRk5FR19PUENPREU6
CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIEZORUcgRFIlZFxuIjsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIEZMT0FUX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIg
ICAgRkxPQVQgRFIlZFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEZUUkNf
T1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBGVFJDIEZSJWQsIEZQVUxcbiI7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBGU1FSVF9PUENPREU6CisgICAgICAgICAg
ICBmb3JtYXQgPSAiICAgIEZTUVJUIEZSJWRcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBGQ05WRFNfRFJNX0ZQVUxfT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAg
ICBGQ05WRFMgRlIlZCwgRlBVTFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgICAgIGlmIChmb3JtYXQpIHsKKyAgICAgICAgICAgIGlmIChpc2RvdWJsZUluc3QpCisgICAg
ICAgICAgICAgICAgcHJpbnRmU3Rkb3V0SW5zdHIoZm9ybWF0LCBnZXREUm4ob3BjKSA8PCAxKTsK
KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBwcmludGZTdGRvdXRJbnN0cihmb3Jt
YXQsIGdldFJuKG9wYykpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAg
IHN3aXRjaCAob3BjICYgMHhmMDBmKSB7CisgICAgICAgIGNhc2UgQUREX09QQ09ERToKKyAgICAg
ICAgICAgIGZvcm1hdCA9ICIgICAgQUREIFIlZCwgUiVkXG4iOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgQUREQ19PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIEFE
REMgUiVkLCBSJWRcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBRERWX09Q
Q09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgQUREViBSJWQsIFIlZFxuIjsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFORF9PUENPREU6CisgICAgICAgICAgICBmb3Jt
YXQgPSAiICAgIEFORCBSJWQsIFIlZFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIERJVjFfT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBESVYxIFIlZCwgUiVk
XG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ01QRVFfT1BDT0RFOgorICAg
ICAgICAgICAgZm9ybWF0ID0gIiAgICBDTVAvRVEgUiVkLCBSJWRcbiI7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBDTVBHRV9PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAi
ICAgIENNUC9HRSBSJWQsIFIlZFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IENNUEdUX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgQ01QL0dUIFIlZCwgUiVk
XG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ01QSElfT1BDT0RFOgorICAg
ICAgICAgICAgZm9ybWF0ID0gIiAgICBDTVAvSEkgUiVkLCBSJWRcbiI7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBDTVBIU19PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAi
ICAgIENNUC9IUyBSJWQsIFIlZFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IE1PVl9PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIE1PViBSJWQsIFIlZFxuIjsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE1PVkJfV1JJVEVfUk5fT1BDT0RFOgor
ICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBNT1YuQiBSJWQsIEBSJWRcbiI7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBNT1ZCX1dSSVRFX1JOREVDX09QQ09ERToKKyAgICAgICAg
ICAgIGZvcm1hdCA9ICIgICAgTU9WLkIgUiVkLCBALVIlZFxuIjsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIE1PVkJfV1JJVEVfUjBSTl9PUENPREU6CisgICAgICAgICAgICBmb3Jt
YXQgPSAiICAgIE1PVi5CIFIlZCwgQChSMCwgUiVkKVxuIjsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIE1PVkJfUkVBRF9STV9PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAi
ICAgIE1PVi5CIEBSJWQsIFIlZFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IE1PVkJfUkVBRF9STUlOQ19PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIE1PVi5C
IEBSJWQrLCBSJWRcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBNT1ZCX1JF
QURfUjBSTV9PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIE1PVi5CIEAoUjAsIFIl
ZCksIFIlZFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE1PVkxfV1JJVEVf
Uk5fT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBNT1YuTCBSJWQsIEBSJWRcbiI7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBNT1ZMX1dSSVRFX1JOREVDX09QQ09E
RToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgTU9WLkwgUiVkLCBALVIlZFxuIjsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE1PVkxfV1JJVEVfUjBSTl9PUENPREU6CisgICAg
ICAgICAgICBmb3JtYXQgPSAiICAgIE1PVi5MIFIlZCwgQChSMCwgUiVkKVxuIjsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIE1PVkxfUkVBRF9STV9PUENPREU6CisgICAgICAgICAg
ICBmb3JtYXQgPSAiICAgIE1PVi5MIEBSJWQsIFIlZFxuIjsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIE1PVkxfUkVBRF9STUlOQ19PUENPREU6CisgICAgICAgICAgICBmb3JtYXQg
PSAiICAgIE1PVi5MIEBSJWQrLCBSJWRcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBNT1ZMX1JFQURfUjBSTV9PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIE1P
Vi5MIEAoUjAsIFIlZCksIFIlZFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IE1VTExfT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBNVUwuTCBSJWQsIFIlZFxu
IjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIERNVUxMX0xfT1BDT0RFOgorICAg
ICAgICAgICAgZm9ybWF0ID0gIiAgICBETVVMVS5MIFIlZCwgUiVkXG4iOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgRE1VTFNMX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9
ICIgICAgRE1VTFMuTCBSJWQsIFIlZFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIE5FR19PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIE5FRyBSJWQsIFIlZFxu
IjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE5FR0NfT1BDT0RFOgorICAgICAg
ICAgICAgZm9ybWF0ID0gIiAgICBORUdDIFIlZCwgUiVkXG4iOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgTk9UX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgTk9U
IFIlZCwgUiVkXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgT1JfT1BDT0RF
OgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBPUiBSJWQsIFIlZFxuIjsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIFNIQURfT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0g
IiAgICBTSEFEIFIlZCwgUiVkXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
U0hMRF9PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIFNITEQgUiVkLCBSJWRcbiI7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTVUJfT1BDT0RFOgorICAgICAgICAg
ICAgZm9ybWF0ID0gIiAgICBTVUIgUiVkLCBSJWRcbiI7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBTVUJDX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgU1VCQyBS
JWQsIFIlZFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNVQlZfT1BDT0RF
OgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBTVUJWIFIlZCwgUiVkXG4iOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgVFNUX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9
ICIgICAgVFNUIFIlZCwgUiVkXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
WE9SX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgWE9SIFIlZCwgUiVkXG4iO2Jy
ZWFrOworICAgICAgICBjYXNlIE1PVldfV1JJVEVfUk5fT1BDT0RFOgorICAgICAgICAgICAgZm9y
bWF0ID0gIiAgICBNT1YuVyBSJWQsIEBSJWRcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBNT1ZXX1JFQURfUk1fT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBN
T1YuVyBAUiVkLCBSJWRcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBNT1ZX
X1JFQURfUjBSTV9PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIE1PVi5XIEAoUjAs
IFIlZCksIFIlZFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVYVFVXX09Q
Q09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgRVhUVS5XIFIlZCwgUiVkXG4iOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGZvcm1hdCkgeworICAgICAg
ICAgICAgcHJpbnRmU3Rkb3V0SW5zdHIoZm9ybWF0LCBnZXRSbShvcGMpLCBnZXRSbihvcGMpKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBzd2l0Y2ggKG9wYyAmIDB4
ZjAwZikgeworICAgICAgICBjYXNlIEZTVUJfT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0g
IiAgICBGU1VCIEZSJWQsIEZSJWRcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBGQUREX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgRkFERCBGUiVkLCBGUiVk
XG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRkRJVl9PUENPREU6CisgICAg
ICAgICAgICBmb3JtYXQgPSAiICAgIEZESVYgRlIlZCwgRlIlZFxuIjsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIEZNVUxfT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAg
ICBETVVMTCBGUiVkLCBGUiVkXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
Rk1PVl9PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIEZNT1YgRlIlZCwgRlIlZFxu
IjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEZDTVBFUV9PUENPREU6CisgICAg
ICAgICAgICBmb3JtYXQgPSAiICAgIEZDTVAvRVEgRlIlZCwgRlIlZFxuIjsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIEZDTVBHVF9PUENPREU6CisgICAgICAgICAgICBmb3JtYXQg
PSAiICAgIEZDTVAvR1QgRlIlZCwgRlIlZFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgICAgIGlmIChmb3JtYXQpIHsKKyAgICAgICAgICAgIGlmIChpc2RvdWJsZUluc3Qp
CisgICAgICAgICAgICAgICAgcHJpbnRmU3Rkb3V0SW5zdHIoZm9ybWF0LCBnZXREUm0ob3BjKSA8
PCAxLCBnZXREUm4ob3BjKSA8PCAxKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICBwcmludGZTdGRvdXRJbnN0cihmb3JtYXQsIGdldFJtKG9wYyksIGdldFJuKG9wYykpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHN3aXRjaCAob3BjICYgMHhmMDBm
KSB7CisgICAgICAgIGNhc2UgRk1PVlNfV1JJVEVfUk5fREVDX09QQ09ERToKKyAgICAgICAgICAg
IGZvcm1hdCA9ICIgICAgJXMgRlIlZCwgQC1SJWRcbiI7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBGTU9WU19XUklURV9STl9PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAi
ICAgICVzIEZSJWQsIEBSJWRcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBG
TU9WU19XUklURV9SMFJOX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgJXMgRlIl
ZCwgQChSMCwgUiVkKVxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg
IGlmIChmb3JtYXQpIHsKKyAgICAgICAgICAgIGlmIChpc2RvdWJsZUluc3QpCisgICAgICAgICAg
ICAgICAgcHJpbnRmU3Rkb3V0SW5zdHIoZm9ybWF0LCAiRk1PViIsIGdldERSbShvcGMpIDw8IDEs
IGdldERSbihvcGMpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBwcmludGZT
dGRvdXRJbnN0cihmb3JtYXQsICJGTU9WLlMiLCBnZXRSbShvcGMpLCBnZXRSbihvcGMpKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBzd2l0Y2ggKG9wYyAmIDB4ZjAw
ZikgeworICAgICAgICBjYXNlIEZNT1ZTX1JFQURfUk1fT1BDT0RFOgorICAgICAgICAgICAgZm9y
bWF0ID0gIiAgICAlcyBAUiVkLCBGUiVkXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgRk1PVlNfUkVBRF9STV9JTkNfT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAg
ICAlcyBAUiVkKywgRlIlZFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEZN
T1ZTX1JFQURfUjBSTV9PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgICVzIEAoUjAs
IFIlZCksIEZSJWRcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBp
ZiAoZm9ybWF0KSB7CisgICAgICAgICAgICBpZiAoaXNkb3VibGVJbnN0KQorICAgICAgICAgICAg
ICAgIHByaW50ZlN0ZG91dEluc3RyKGZvcm1hdCwgIkZNT1YiLCBnZXREUm0ob3BjKSwgZ2V0RFJu
KG9wYykgPDwgMSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcHJpbnRmU3Rk
b3V0SW5zdHIoZm9ybWF0LCAiRk1PVi5TIiwgZ2V0Um0ob3BjKSwgZ2V0Um4ob3BjKSk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgc3dpdGNoIChvcGMgJiAweGZmMDAp
IHsKKyAgICAgICAgY2FzZSBCRl9PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIEJG
ICVkXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQkZTX09QQ09ERToKKyAg
ICAgICAgICAgIGZvcm1hdCA9ICIgICAgKkJGL1MgJWRcbiI7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBBTkRJTU1fT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBB
TkQgIyVkLCBSMFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEJUX09QQ09E
RToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgQlQgJWRcbiI7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBCVFNfT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICAq
QlQvUyAlZFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENNUEVRSU1NX09Q
Q09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgQ01QL0VRICMlZCwgUjBcbiI7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBNT1ZCX1dSSVRFX09GRkdCUl9PUENPREU6Cisg
ICAgICAgICAgICBmb3JtYXQgPSAiICAgIE1PVi5CIFIwLCBAKCVkLCBHQlIpXG4iOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTU9WQl9SRUFEX09GRkdCUl9PUENPREU6CisgICAg
ICAgICAgICBmb3JtYXQgPSAiICAgIE1PVi5CIEAoJWQsIEdCUiksIFIwXG4iOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgTU9WTF9XUklURV9PRkZHQlJfT1BDT0RFOgorICAgICAg
ICAgICAgZm9ybWF0ID0gIiAgICBNT1YuTCBSMCwgQCglZCwgR0JSKVxuIjsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIE1PVkxfUkVBRF9PRkZHQlJfT1BDT0RFOgorICAgICAgICAg
ICAgZm9ybWF0ID0gIiAgICBNT1YuTCBAKCVkLCBHQlIpLCBSMFxuIjsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIE1PVkFfUkVBRF9PRkZQQ19PUENPREU6CisgICAgICAgICAgICBm
b3JtYXQgPSAiICAgIE1PVkEgQCglZCwgUEMpLCBSMFxuIjsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIE9SSU1NX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgT1Ig
IyVkLCBSMFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE9SQklNTV9PUENP
REU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIE9SLkIgIyVkLCBAKFIwLCBHQlIpXG4iOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVFNUSU1NX09QQ09ERToKKyAgICAgICAg
ICAgIGZvcm1hdCA9ICIgICAgVFNUICMlZCwgUjBcbiI7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBUU1RCX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgVFNULkIg
JWQsIEAoUjAsIEdCUilcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBYT1JJ
TU1fT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBYT1IgIyVkLCBSMFxuIjsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFhPUkJfT1BDT0RFOgorICAgICAgICAgICAg
Zm9ybWF0ID0gIiAgICBYT1IuQiAlZCwgQChSMCwgR0JSKVxuIjsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgIGlmIChmb3JtYXQpIHsKKyAgICAgICAgICAgIHByaW50ZlN0
ZG91dEluc3RyKGZvcm1hdCwgZ2V0SW1tOChvcGMpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgICAgICBzd2l0Y2ggKG9wYyAmIDB4ZmYwMCkgeworICAgICAgICBjYXNlIE1P
VkJfV1JJVEVfT0ZGUk5fT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBNT1YuQiBS
MCwgQCglZCwgUiVkKVxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE1PVkJf
UkVBRF9PRkZSTV9PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIE1PVi5CIEAoJWQs
IFIlZCksIFIwXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYg
KGZvcm1hdCkgeworICAgICAgICAgICAgcHJpbnRmU3Rkb3V0SW5zdHIoZm9ybWF0LCBnZXREaXNw
KG9wYyksIGdldFJtKG9wYykpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
ICAgIHN3aXRjaCAob3BjICYgMHhmMDAwKSB7CisgICAgICAgIGNhc2UgQlJBX09QQ09ERToKKyAg
ICAgICAgICAgIGZvcm1hdCA9ICIgICAgKkJSQSAlZFxuIjsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIEJTUl9PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgICpCU1Ig
JWRcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAoZm9ybWF0
KSB7CisgICAgICAgICAgICBwcmludGZTdGRvdXRJbnN0cihmb3JtYXQsIGdldEltbTEyKG9wYykp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHN3aXRjaCAob3BjICYg
MHhmMDAwKSB7CisgICAgICAgIGNhc2UgTU9WTF9SRUFEX09GRlBDX09QQ09ERToKKyAgICAgICAg
ICAgIGZvcm1hdCA9ICIgICAgTU9WLkwgQCglZCwgUEMpLCBSJWRcbiI7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBBRERJTU1fT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0g
IiAgICBBREQgIyVkLCBSJWRcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBN
T1ZJTU1fT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBNT1YgIyVkLCBSJWRcbiI7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBNT1ZXX1JFQURfT0ZGUENfT1BDT0RF
OgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBNT1YuVyBAKCVkLCBQQyksIFIlZFxuIjsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmIChmb3JtYXQpIHsKKyAgICAg
ICAgICAgIHByaW50ZlN0ZG91dEluc3RyKGZvcm1hdCwgZ2V0SW1tOChvcGMpLCBnZXRSbihvcGMp
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBzd2l0Y2ggKG9wYyAm
IDB4ZjAwMCkgeworICAgICAgICBjYXNlIE1PVkxfV1JJVEVfT0ZGUk5fT1BDT0RFOgorICAgICAg
ICAgICAgZm9ybWF0ID0gIiAgICBNT1YuTCBSJWQsIEAoJWQsIFIlZClcbiI7CisgICAgICAgICAg
ICBwcmludGZTdGRvdXRJbnN0cihmb3JtYXQsIGdldFJtKG9wYyksIGdldERpc3Aob3BjKSwgZ2V0
Um4ob3BjKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBNT1ZMX1JFQURfT0ZG
Uk1fT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBNT1YuTCBAKCVkLCBSJWQpLCBS
JWRcbiI7CisgICAgICAgICAgICBwcmludGZTdGRvdXRJbnN0cihmb3JtYXQsIGdldERpc3Aob3Bj
KSwgZ2V0Um0ob3BjKSwgZ2V0Um4ob3BjKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgIH0KKworICAgIHN0YXRpYyB2b2lkIHByaW50ZlN0ZG91dEluc3RyKGNvbnN0IGNoYXIq
IGZvcm1hdCwgLi4uKQorICAgIHsKKyAgICAgICAgaWYgKGdldGVudigiSmF2YVNjcmlwdENvcmVE
dW1wSklUIikpIHsKKyAgICAgICAgICAgIHZhX2xpc3QgYXJnczsKKyAgICAgICAgICAgIHZhX3N0
YXJ0KGFyZ3MsIGZvcm1hdCk7CisgICAgICAgICAgICB2cHJpbnRmU3Rkb3V0SW5zdHIoZm9ybWF0
LCBhcmdzKTsKKyAgICAgICAgICAgIHZhX2VuZChhcmdzKTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIHN0YXRpYyB2b2lkIHZwcmludGZTdGRvdXRJbnN0cihjb25zdCBjaGFyKiBmb3JtYXQsIHZh
X2xpc3QgYXJncykKKyAgICB7CisgICAgICAgIGlmIChnZXRlbnYoIkphdmFTY3JpcHRDb3JlRHVt
cEpJVCIpKQorICAgICAgICAgICAgdmZwcmludGYoc3Rkb3V0LCBmb3JtYXQsIGFyZ3MpOworICAg
IH0KKworICAgIHN0YXRpYyB2b2lkIHByaW50QmxvY2tJbnN0cih1aW50MTZfdCogZmlyc3QsIHVu
c2lnbmVkIGludCBvZmZzZXQsIGludCBuYkluc3RyKQorICAgIHsKKyAgICAgICAgcHJpbnRmU3Rk
b3V0SW5zdHIoIj4+IHJlcGF0Y2ggaW5zdHJ1Y3Rpb25zIGFmdGVyIGxpbmtcbiIpOworICAgICAg
ICBmb3IgKGludCBpID0gMDsgaSA8PSBuYkluc3RyOyBpKyspCisgICAgICAgICAgIHByaW50SW5z
dHIoKihmaXJzdCArIGkpLCBvZmZzZXQgKyBpKTsKKyAgICAgICAgcHJpbnRmU3Rkb3V0SW5zdHIo
Ij4+IGVuZCByZXBhdGNoXG4iKTsKKyAgICB9CisjZWxzZQorICAgIHN0YXRpYyB2b2lkIHByaW50
SW5zdHIodWludDE2X3Qgb3BjLCB1bnNpZ25lZCBpbnQgc2l6ZSwgYm9vbCBpc2RvdWJsZUluc3Qg
PSB0cnVlKSB7fTsKKyAgICBzdGF0aWMgdm9pZCBwcmludEJsb2NrSW5zdHIodWludDE2X3QqIGZp
cnN0LCB1bnNpZ25lZCBpbnQgb2Zmc2V0LCBpbnQgbmJJbnN0cikge307CisjZW5kaWYKKworcHJp
dmF0ZToKKyAgICBTSDRCdWZmZXIgbV9idWZmZXI7CisgICAgaW50IG1fY2xhaW1zY3JhdGNoUmVn
OworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoQVNTRU1CTEVS
KSAmJiBDUFUoU0g0KQorCisjZW5kaWYgLy8gU0g0QXNzZW1ibGVyX2gKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJKSVQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3lhcnIvWWFyckpJVC5jcHAKaW5kZXggZTM0ZTZmNC4uZjQzODkxNyAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckpJVC5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3lhcnIvWWFyckpJVC5jcHAKQEAgLTU5LDYgKzU5LDE2IEBAIGNsYXNzIFlhcnJH
ZW5lcmF0b3IgOiBwcml2YXRlIE1hY3JvQXNzZW1ibGVyIHsKICAgICBzdGF0aWMgY29uc3QgUmVn
aXN0ZXJJRCByZWdUMSA9IE1JUFNSZWdpc3RlcnM6OnQ1OwogCiAgICAgc3RhdGljIGNvbnN0IFJl
Z2lzdGVySUQgcmV0dXJuUmVnaXN0ZXIgPSBNSVBTUmVnaXN0ZXJzOjp2MDsKKyNlbGlmIENQVShT
SDQpCisgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgaW5wdXQgPSBTSDRSZWdpc3RlcnM6OnI0
OworICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIGluZGV4ID0gU0g0UmVnaXN0ZXJzOjpyNTsK
KyAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCBsZW5ndGggPSBTSDRSZWdpc3RlcnM6OnI2Owor
ICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIG91dHB1dCA9IFNINFJlZ2lzdGVyczo6cjc7CisK
KyAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCByZWdUMCA9IFNINFJlZ2lzdGVyczo6cjA7Cisg
ICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgcmVnVDEgPSBTSDRSZWdpc3RlcnM6OnIxOworCisg
ICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgcmV0dXJuUmVnaXN0ZXIgPSBTSDRSZWdpc3RlcnM6
OnIwOwogI2VsaWYgQ1BVKFg4NikKICAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCBpbnB1dCA9
IFg4NlJlZ2lzdGVyczo6ZWF4OwogICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIGluZGV4ID0g
WDg2UmVnaXN0ZXJzOjplZHg7CkBAIC0yMTc5LDYgKzIxODksOSBAQCBjbGFzcyBZYXJyR2VuZXJh
dG9yIDogcHJpdmF0ZSBNYWNyb0Fzc2VtYmxlciB7CiAgICAgICAgIHB1c2goQVJNUmVnaXN0ZXJz
OjpyOCk7IC8vIHNjcmF0Y2ggcmVnaXN0ZXIKICNlbmRpZgogICAgICAgICBtb3ZlKEFSTVJlZ2lz
dGVyczo6cjMsIG91dHB1dCk7CisjZWxpZiBDUFUoU0g0KQorICAgICAgICBwdXNoKFNINFJlZ2lz
dGVyczo6cjExKTsKKyAgICAgICAgcHVzaChTSDRSZWdpc3RlcnM6OnIxMyk7CiAjZWxpZiBDUFUo
TUlQUykKICAgICAgICAgLy8gRG8gbm90aGluZy4KICNlbmRpZgpAQCAtMjIwMSw2ICsyMjE0LDkg
QEAgY2xhc3MgWWFyckdlbmVyYXRvciA6IHByaXZhdGUgTWFjcm9Bc3NlbWJsZXIgewogICAgICAg
ICBwb3AoQVJNUmVnaXN0ZXJzOjpyNik7CiAgICAgICAgIHBvcChBUk1SZWdpc3RlcnM6OnI1KTsK
ICAgICAgICAgcG9wKEFSTVJlZ2lzdGVyczo6cjQpOworI2VsaWYgQ1BVKFNINCkKKyAgICAgICAg
cG9wKFNINFJlZ2lzdGVyczo6cjEzKTsKKyAgICAgICAgcG9wKFNINFJlZ2lzdGVyczo6cjExKTsK
ICNlbGlmIENQVShNSVBTKQogICAgICAgICAvLyBEbyBub3RoaW5nCiAjZW5kaWYK
</data>
<flag name="review"
          id="79574"
          type_id="1"
          status="-"
          setter="oliver"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>87681</attachid>
            <date>2011-03-31 02:21:22 -0700</date>
            <delta_ts>2011-03-31 03:53:54 -0700</delta_ts>
            <desc>YARR for SH4</desc>
            <filename>0001-Add-YARR-JIT-for-SH4-Platforms.patch</filename>
            <type>text/plain</type>
            <size>126018</size>
            <attacher name="thouraya">thouraya.andolsi</attacher>
            
              <data encoding="base64">RnJvbSAxOGY2MjZmMzkyNDUxMGFkODZhM2M2MjQ3ZDM0ZjM1N2E4M2RiYTM5IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBUaG91cmF5YSBBTkRPTFNJIDx0aG91cmF5YS5hbmRvbHNpQHN0
LmNvbT4KRGF0ZTogVGh1LCAzMSBNYXIgMjAxMSAxMDoxOTo0MCArMDIwMApTdWJqZWN0OiBbUEFU
Q0hdIEFkZCBZQVJSIEpJVCBmb3IgU0g0IFBsYXRmb3Jtcy4KCi0tLQogU291cmNlL0phdmFTY3Jp
cHRDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgfCAgIDE4ICsKIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5hbSAgICAgICAgICAgICAgIHwgICAgMyArCiAuLi4vYXNz
ZW1ibGVyL0Fzc2VtYmxlckJ1ZmZlcldpdGhDb25zdGFudFBvb2wuaCAgICB8ICAgMjAgKwogU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5oICAgfCAgICA2ICsK
IC4uLi9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJTSDQuY3BwIHwgICA4
MiArCiAuLi4vSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyU0g0LmggICB8
IDE3NDMgKysrKysrKysrKysrKysrKysKIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
U0g0QXNzZW1ibGVyLmggICAgIHwgMjA2NyArKysrKysrKysrKysrKysrKysrKwogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3lhcnIvWWFyckpJVC5jcHAgICAgICAgICAgICAgfCAgIDE2ICsKIDggZmls
ZXMgY2hhbmdlZCwgMzk1NSBpbnNlcnRpb25zKCspLCAwIGRlbGV0aW9ucygtKQogY3JlYXRlIG1v
ZGUgMTAwNjQ0IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJT
SDQuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9NYWNyb0Fzc2VtYmxlclNINC5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9TSDRBc3NlbWJsZXIuaAoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmlu
ZGV4IDcxOTBlNmQuLmNkNWViYjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9D
aGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDIxIEBACisyMDExLTAzLTMxICBUaG91cmF5YSBBTkRPTFNJICA8dGhvdXJheWEuYW5kb2xzaUBz
dC5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
TmVlZCBhIHNob3J0IGRlc2NyaXB0aW9uIGFuZCBidWcgVVJMIChPT1BTISkKKworICAgICAgICBT
SDQgSklUIFNVUFBPUlQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD00NDMyOS4KKworICAgICAgICBBZGQgWUFSUiBzdXBwb3J0IGZvciBTSDQgcGxhdGZv
cm1zIChkaXNhYmxlZCBieSBkZWZhdWx0KS4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOgor
ICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5oOgorICAgICAgICAqIGFzc2VtYmxl
ci9NYWNyb0Fzc2VtYmxlclNINC5jcHA6IEFkZGVkLgorICAgICAgICAqIGFzc2VtYmxlci9NYWNy
b0Fzc2VtYmxlclNINC5oOiBBZGRlZC4KKyAgICAgICAgKiBhc3NlbWJsZXIvU0g0QXNzZW1ibGVy
Lmg6IEFkZGVkLgorICAgICAgICAqIHlhcnIvWWFyckpJVC5jcHA6CisKIDIwMTEtMDMtMzAgIEFk
YW0gUm9iZW4gIDxhcm9iZW5AYXBwbGUuY29tPgogCiAgICAgICAgIENsZWFuIGJ1aWxkIGZpeApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtCmluZGV4IGQ5MmY0NjIuLjBhYjlmYTggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5hbQorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUuYW0KQEAgLTkxLDYgKzkxLDkgQEAgamF2YXNj
cmlwdGNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9N
YWNyb0Fzc2VtYmxlclg4Nl82NC5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvTWFjcm9Bc3NlbWJsZXJYODYuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9NYWNyb0Fzc2VtYmxlclNINC5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL01hY3JvQXNzZW1ibGVyU0g0LmNwcCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9TSDRBc3NlbWJsZXIuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9S
ZXBhdGNoQnVmZmVyLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNz
ZW1ibGVyLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3Bw
IFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQXNzZW1ibGVy
QnVmZmVyV2l0aENvbnN0YW50UG9vbC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9Bc3NlbWJsZXJCdWZmZXJXaXRoQ29uc3RhbnRQb29sLmgKaW5kZXggOWE5NjE4Zi4uM2NmYzY3
YiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9Bc3NlbWJsZXJC
dWZmZXJXaXRoQ29uc3RhbnRQb29sLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9Bc3NlbWJsZXJCdWZmZXJXaXRoQ29uc3RhbnRQb29sLmgKQEAgLTg1LDcgKzg1LDE0IEBA
IG5hbWVzcGFjZSBKU0MgewogdGVtcGxhdGUgPGludCBtYXhQb29sU2l6ZSwgaW50IGJhcnJpZXJT
aXplLCBpbnQgbWF4SW5zdHJ1Y3Rpb25TaXplLCBjbGFzcyBBc3NlbWJsZXJUeXBlPgogY2xhc3Mg
QXNzZW1ibGVyQnVmZmVyV2l0aENvbnN0YW50UG9vbDogcHVibGljIEFzc2VtYmxlckJ1ZmZlciB7
CiAgICAgdHlwZWRlZiBTZWdtZW50ZWRWZWN0b3I8dWludDMyX3QsIDUxMj4gTG9hZE9mZnNldHM7
CisgICAgdXNpbmcgQXNzZW1ibGVyQnVmZmVyOjpwdXRJbnRlZ3JhbDsKKyAgICB1c2luZyBBc3Nl
bWJsZXJCdWZmZXI6OnB1dEludGVncmFsVW5jaGVja2VkOwogcHVibGljOgorICAgIHR5cGVkZWYg
c3RydWN0IHsKKyAgICAgICAgc2hvcnQgaGlnaDsKKyAgICAgICAgc2hvcnQgbG93OworICAgIH0g
VHdvU2hvcnRzOworCiAgICAgZW51bSB7CiAgICAgICAgIFVuaXF1ZUNvbnN0LAogICAgICAgICBS
ZXVzYWJsZUNvbnN0LApAQCAtMTcxLDYgKzE3OCwxOSBAQCBwdWJsaWM6CiAgICAgICAgIGNvcnJl
Y3REZWx0YXMoOCk7CiAgICAgfQogCisgICAgdm9pZCBwdXRJbnRlZ3JhbChUd29TaG9ydHMgdmFs
dWUpCisgICAgeworICAgICAgICBpZiAobV9zaXplID4gbV9jYXBhY2l0eSAtIHNpemVvZihUd29T
aG9ydHMpKQorICAgICAgICAgICAgZ3JvdygpOworICAgICAgICBwdXRJbnRlZ3JhbFVuY2hlY2tl
ZCh2YWx1ZSk7CisgICAgfQorCisgICAgdm9pZCBwdXRJbnRlZ3JhbFVuY2hlY2tlZChUd29TaG9y
dHMgdmFsdWUpCisgICAgeworICAgICAgICBwdXRJbnRlZ3JhbFVuY2hlY2tlZCh2YWx1ZS5oaWdo
KTsKKyAgICAgICAgcHV0SW50ZWdyYWxVbmNoZWNrZWQodmFsdWUubG93KTsKKyAgICB9CisKICAg
ICBpbnQgc2l6ZSgpCiAgICAgewogICAgICAgICBmbHVzaElmTm9TcGFjZUZvcihtYXhJbnN0cnVj
dGlvblNpemUsIHNpemVvZih1aW50NjRfdCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5oCmluZGV4IGJiMTlhOTguLmNmZmI0MWQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmgKQEAg
LTUwLDYgKzUwLDEyIEBAIG5hbWVzcGFjZSBKU0MgeyB0eXBlZGVmIE1hY3JvQXNzZW1ibGVyWDg2
IE1hY3JvQXNzZW1ibGVyQmFzZTsgfTsKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlclg4Nl82NC5o
IgogbmFtZXNwYWNlIEpTQyB7IHR5cGVkZWYgTWFjcm9Bc3NlbWJsZXJYODZfNjQgTWFjcm9Bc3Nl
bWJsZXJCYXNlOyB9OwogCisjZWxpZiBDUFUoU0g0KQorI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVy
U0g0LmgiCituYW1lc3BhY2UgSlNDIHsKK3R5cGVkZWYgTWFjcm9Bc3NlbWJsZXJTSDQgTWFjcm9B
c3NlbWJsZXJCYXNlOworfTsKKwogI2Vsc2UKICNlcnJvciAiVGhlIE1hY3JvQXNzZW1ibGVyIGlz
IG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBwbGF0Zm9ybS4iCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJTSDQuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclNINC5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjcxODg0NQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJTSDQuY3BwCkBA
IC0wLDAgKzEsODIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgU1RNaWNyb2VsZWN0cm9u
aWNzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoQVNTRU1CTEVSKSAm
JiBDUFUoU0g0KQorCisjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJTSDQuaCIKKworbmFtZXNwYWNl
IEpTQyB7Citjb25zdCBDb25kaXRpb24gTWFjcm9Bc3NlbWJsZXJTSDQ6OkVxdWFsID0gU0g0QXNz
ZW1ibGVyOjpFUTsKK2NvbnN0IENvbmRpdGlvbiBNYWNyb0Fzc2VtYmxlclNINDo6Tm90RXF1YWwg
PSBTSDRBc3NlbWJsZXI6Ok5FOworY29uc3QgQ29uZGl0aW9uIE1hY3JvQXNzZW1ibGVyU0g0OjpH
cmVhdGVyVGhhbiA9IFNINEFzc2VtYmxlcjo6R1Q7Citjb25zdCBDb25kaXRpb24gTWFjcm9Bc3Nl
bWJsZXJTSDQ6OkdyZWF0ZXJUaGFuT3JFcXVhbCA9IFNINEFzc2VtYmxlcjo6R0U7Citjb25zdCBD
b25kaXRpb24gTWFjcm9Bc3NlbWJsZXJTSDQ6Okxlc3NUaGFuID0gU0g0QXNzZW1ibGVyOjpMVDsK
K2NvbnN0IENvbmRpdGlvbiBNYWNyb0Fzc2VtYmxlclNINDo6TGVzc1RoYW5PckVxdWFsID0gU0g0
QXNzZW1ibGVyOjpMRTsKK2NvbnN0IENvbmRpdGlvbiBNYWNyb0Fzc2VtYmxlclNINDo6VUdyZWF0
ZXJUaGFuID0gU0g0QXNzZW1ibGVyOjpISTsKK2NvbnN0IENvbmRpdGlvbiBNYWNyb0Fzc2VtYmxl
clNINDo6VUdyZWF0ZXJUaGFuT3JFcXVhbCA9IFNINEFzc2VtYmxlcjo6SFM7Citjb25zdCBDb25k
aXRpb24gTWFjcm9Bc3NlbWJsZXJTSDQ6OlVMZXNzVGhhbiA9IFNINEFzc2VtYmxlcjo6TEk7Citj
b25zdCBDb25kaXRpb24gTWFjcm9Bc3NlbWJsZXJTSDQ6OlVMZXNzVGhhbk9yRXF1YWwgPSBTSDRB
c3NlbWJsZXI6OkxTOworY29uc3QgQ29uZGl0aW9uIE1hY3JvQXNzZW1ibGVyU0g0OjpaZXJvID0g
U0g0QXNzZW1ibGVyOjpFUTsKK2NvbnN0IENvbmRpdGlvbiBNYWNyb0Fzc2VtYmxlclNINDo6Tm9u
WmVybyA9IFNINEFzc2VtYmxlcjo6TkU7Citjb25zdCBDb25kaXRpb24gTWFjcm9Bc3NlbWJsZXJT
SDQ6Ok92ZXJmbG93ID0gU0g0QXNzZW1ibGVyOjpPRjsKK2NvbnN0IENvbmRpdGlvbiBNYWNyb0Fz
c2VtYmxlclNINDo6QWJvdmUgPSBTSDRBc3NlbWJsZXI6OkhJOworY29uc3QgQ29uZGl0aW9uIE1h
Y3JvQXNzZW1ibGVyU0g0OjpBYm92ZU9yRXF1YWwgPSBTSDRBc3NlbWJsZXI6OkhTOworY29uc3Qg
Q29uZGl0aW9uIE1hY3JvQXNzZW1ibGVyU0g0OjpCZWxvdyA9IFNINEFzc2VtYmxlcjo6TEk7Citj
b25zdCBDb25kaXRpb24gTWFjcm9Bc3NlbWJsZXJTSDQ6OkJlbG93T3JFcXVhbCA9IFNINEFzc2Vt
Ymxlcjo6TFM7Citjb25zdCBDb25kaXRpb24gTWFjcm9Bc3NlbWJsZXJTSDQ6OkRvdWJsZUVxdWFs
ID0gU0g0QXNzZW1ibGVyOjpFUTsKK2NvbnN0IENvbmRpdGlvbiBNYWNyb0Fzc2VtYmxlclNINDo6
RG91YmxlTm90RXF1YWwgPSBTSDRBc3NlbWJsZXI6Ok5FOworY29uc3QgQ29uZGl0aW9uIE1hY3Jv
QXNzZW1ibGVyU0g0OjpEb3VibGVHcmVhdGVyVGhhbiA9IFNINEFzc2VtYmxlcjo6R1Q7Citjb25z
dCBDb25kaXRpb24gTWFjcm9Bc3NlbWJsZXJTSDQ6OkRvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbCA9
IFNINEFzc2VtYmxlcjo6R0U7Citjb25zdCBDb25kaXRpb24gTWFjcm9Bc3NlbWJsZXJTSDQ6OkRv
dWJsZUxlc3NUaGFuID0gU0g0QXNzZW1ibGVyOjpMVDsKK2NvbnN0IENvbmRpdGlvbiBNYWNyb0Fz
c2VtYmxlclNINDo6RG91YmxlTGVzc1RoYW5PckVxdWFsID0gU0g0QXNzZW1ibGVyOjpMRTsKK2Nv
bnN0IENvbmRpdGlvbiBNYWNyb0Fzc2VtYmxlclNINDo6RG91YmxlRXF1YWxPclVub3JkZXJlZCA9
IFNINEFzc2VtYmxlcjo6RVFVOworY29uc3QgQ29uZGl0aW9uIE1hY3JvQXNzZW1ibGVyU0g0OjpE
b3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkID0gU0g0QXNzZW1ibGVyOjpORVU7Citjb25zdCBDb25k
aXRpb24gTWFjcm9Bc3NlbWJsZXJTSDQ6OkRvdWJsZUdyZWF0ZXJUaGFuT3JVbm9yZGVyZWQgPSBT
SDRBc3NlbWJsZXI6OkdUVTsKK2NvbnN0IENvbmRpdGlvbiBNYWNyb0Fzc2VtYmxlclNINDo6RG91
YmxlR3JlYXRlclRoYW5PckVxdWFsT3JVbm9yZGVyZWQgPSBTSDRBc3NlbWJsZXI6OkdFVTsKK2Nv
bnN0IENvbmRpdGlvbiBNYWNyb0Fzc2VtYmxlclNINDo6RG91YmxlTGVzc1RoYW5PclVub3JkZXJl
ZCA9IFNINEFzc2VtYmxlcjo6TFRVOworY29uc3QgQ29uZGl0aW9uIE1hY3JvQXNzZW1ibGVyU0g0
OjpEb3VibGVMZXNzVGhhbk9yRXF1YWxPclVub3JkZXJlZCA9IFNINEFzc2VtYmxlcjo6TEVVOwor
Y29uc3QgQ29uZGl0aW9uIE1hY3JvQXNzZW1ibGVyU0g0OjpTaWduZWQgPSBTSDRBc3NlbWJsZXI6
OlNJOworCit2b2lkIE1hY3JvQXNzZW1ibGVyU0g0OjpsaW5rQ2FsbCh2b2lkKiBjb2RlLCBDYWxs
IGNhbGwsIEZ1bmN0aW9uUHRyIGZ1bmN0aW9uKQoreworICAgIFNINEFzc2VtYmxlcjo6bGlua0Nh
bGwoY29kZSwgY2FsbC5tX2ptcCwgZnVuY3Rpb24udmFsdWUoKSk7Cit9CisKK3ZvaWQgTWFjcm9B
c3NlbWJsZXJTSDQ6OnJlcGF0Y2hDYWxsKENvZGVMb2NhdGlvbkNhbGwgY2FsbCwgQ29kZUxvY2F0
aW9uTGFiZWwgZGVzdGluYXRpb24pCit7CisgICAgU0g0QXNzZW1ibGVyOjpyZWxpbmtDYWxsKGNh
bGwuZGF0YUxvY2F0aW9uKCksIGRlc3RpbmF0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpOworfQor
Cit2b2lkIE1hY3JvQXNzZW1ibGVyU0g0OjpyZXBhdGNoQ2FsbChDb2RlTG9jYXRpb25DYWxsIGNh
bGwsIEZ1bmN0aW9uUHRyIGRlc3RpbmF0aW9uKQoreworICAgIFNINEFzc2VtYmxlcjo6cmVsaW5r
Q2FsbChjYWxsLmRhdGFMb2NhdGlvbigpLCBkZXN0aW5hdGlvbi5leGVjdXRhYmxlQWRkcmVzcygp
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoQVNTRU1CTEVS
KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2Vt
YmxlclNINC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxl
clNINC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyMzVhNmYKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1i
bGVyU0g0LmgKQEAgLTAsMCArMSwxNzQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIw
MTEgU1RNaWNyb2VsZWN0cm9uaWNzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqLworCisjaWZuZGVmIE1hY3JvQXNzZW1ibGVyU0g0X2gK
KyNkZWZpbmUgTWFjcm9Bc3NlbWJsZXJTSDRfaAorCisjaWYgRU5BQkxFKEFTU0VNQkxFUikgJiYg
Q1BVKFNINCkKKworI2luY2x1ZGUgIkFic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaCIKKyNpbmNsdWRl
ICJTSDRBc3NlbWJsZXIuaCIKKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorCituYW1lc3Bh
Y2UgSlNDIHsKK3R5cGVkZWYgU0g0QXNzZW1ibGVyOjpDb25kaXRpb24gQ29uZGl0aW9uOworCitj
bGFzcyBNYWNyb0Fzc2VtYmxlclNINCA6IHB1YmxpYyBBYnN0cmFjdE1hY3JvQXNzZW1ibGVyPFNI
NEFzc2VtYmxlcj4geworcHVibGljOgorICAgIHR5cGVkZWYgU0g0QXNzZW1ibGVyOjpGUFJlZ2lz
dGVySUQgRlBSZWdpc3RlcklEOworCisgICAgc3RhdGljIGNvbnN0IENvbmRpdGlvbiBFcXVhbDsK
KyAgICBzdGF0aWMgY29uc3QgQ29uZGl0aW9uIE5vdEVxdWFsOworICAgIHN0YXRpYyBjb25zdCBD
b25kaXRpb24gR3JlYXRlclRoYW47CisgICAgc3RhdGljIGNvbnN0IENvbmRpdGlvbiBHcmVhdGVy
VGhhbk9yRXF1YWw7CisgICAgc3RhdGljIGNvbnN0IENvbmRpdGlvbiBMZXNzVGhhbjsKKyAgICBz
dGF0aWMgY29uc3QgQ29uZGl0aW9uIExlc3NUaGFuT3JFcXVhbDsKKyAgICBzdGF0aWMgY29uc3Qg
Q29uZGl0aW9uIFVHcmVhdGVyVGhhbjsKKyAgICBzdGF0aWMgY29uc3QgQ29uZGl0aW9uIFVHcmVh
dGVyVGhhbk9yRXF1YWw7CisgICAgc3RhdGljIGNvbnN0IENvbmRpdGlvbiBVTGVzc1RoYW47Cisg
ICAgc3RhdGljIGNvbnN0IENvbmRpdGlvbiBVTGVzc1RoYW5PckVxdWFsOworICAgIHN0YXRpYyBj
b25zdCBDb25kaXRpb24gWmVybzsKKyAgICBzdGF0aWMgY29uc3QgQ29uZGl0aW9uIE5vblplcm87
CisgICAgc3RhdGljIGNvbnN0IENvbmRpdGlvbiBPdmVyZmxvdzsKKyAgICBzdGF0aWMgY29uc3Qg
Q29uZGl0aW9uIEFib3ZlOworICAgIHN0YXRpYyBjb25zdCBDb25kaXRpb24gQWJvdmVPckVxdWFs
OworICAgIHN0YXRpYyBjb25zdCBDb25kaXRpb24gQmVsb3c7CisgICAgc3RhdGljIGNvbnN0IENv
bmRpdGlvbiBCZWxvd09yRXF1YWw7CisgICAgc3RhdGljIGNvbnN0IENvbmRpdGlvbiBEb3VibGVF
cXVhbDsKKyAgICBzdGF0aWMgY29uc3QgQ29uZGl0aW9uIERvdWJsZU5vdEVxdWFsOworICAgIHN0
YXRpYyBjb25zdCBDb25kaXRpb24gRG91YmxlR3JlYXRlclRoYW47CisgICAgc3RhdGljIGNvbnN0
IENvbmRpdGlvbiBEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWw7CisgICAgc3RhdGljIGNvbnN0IENv
bmRpdGlvbiBEb3VibGVMZXNzVGhhbjsKKyAgICBzdGF0aWMgY29uc3QgQ29uZGl0aW9uIERvdWJs
ZUxlc3NUaGFuT3JFcXVhbDsKKyAgICBzdGF0aWMgY29uc3QgQ29uZGl0aW9uIERvdWJsZUVxdWFs
T3JVbm9yZGVyZWQ7CisgICAgc3RhdGljIGNvbnN0IENvbmRpdGlvbiBEb3VibGVOb3RFcXVhbE9y
VW5vcmRlcmVkOworICAgIHN0YXRpYyBjb25zdCBDb25kaXRpb24gRG91YmxlR3JlYXRlclRoYW5P
clVub3JkZXJlZDsKKyAgICBzdGF0aWMgY29uc3QgQ29uZGl0aW9uIERvdWJsZUdyZWF0ZXJUaGFu
T3JFcXVhbE9yVW5vcmRlcmVkOworICAgIHN0YXRpYyBjb25zdCBDb25kaXRpb24gRG91YmxlTGVz
c1RoYW5PclVub3JkZXJlZDsKKyAgICBzdGF0aWMgY29uc3QgQ29uZGl0aW9uIERvdWJsZUxlc3NU
aGFuT3JFcXVhbE9yVW5vcmRlcmVkOworICAgIHN0YXRpYyBjb25zdCBDb25kaXRpb24gU2lnbmVk
OworICAgIHN0YXRpYyBjb25zdCBTY2FsZSBTY2FsZVB0ciA9IFRpbWVzRm91cjsKKyAgICBzdGF0
aWMgY29uc3QgRlBSZWdpc3RlcklEIGZzY3JhdGNoID0gU0g0UmVnaXN0ZXJzOjpmcjEwOworICAg
IHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIHN0YWNrUG9pbnRlclJlZ2lzdGVyID0gU0g0UmVnaXN0
ZXJzOjpzcDsKKyAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCBsaW5rUmVnaXN0ZXIgPSBTSDRS
ZWdpc3RlcnM6OnByOworICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIHNjcmF0Y2hSZWczID0g
U0g0UmVnaXN0ZXJzOjpyMTM7CisKKyAgICBSZWdpc3RlcklEIGNsYWltU2NyYXRjaCgpCisgICAg
eworICAgICAgICByZXR1cm4gbV9hc3NlbWJsZXIuY2xhaW1TY3JhdGNoKCk7CisgICAgfQorCisg
ICAgdm9pZCByZWxlYXNlU2NyYXRjaChSZWdpc3RlcklEIHJlZykKKyAgICB7CisgICAgICAgIG1f
YXNzZW1ibGVyLnJlbGVhc2VTY3JhdGNoKHJlZyk7CisgICAgfQorCisgICAgLy8gSW50ZWdlciBh
cml0aG1ldGljIG9wZXJhdGlvbnMKKworICAgIHZvaWQgYWRkMzIoUmVnaXN0ZXJJRCBzcmMsIFJl
Z2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmFkZGxSZWdSZWcoc3Jj
LCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIGFkZDMyKEltbTMyIGltbSwgUmVnaXN0ZXJJRCBk
ZXN0KQorICAgIHsKKyAgICAgICAgaWYgKG1fYXNzZW1ibGVyLmlzSW1tZWRpYXRlKGltbS5tX3Zh
bHVlKSkgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRkbEltbThyKGltbS5tX3ZhbHVlLCBk
ZXN0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIFJlZ2lzdGVy
SUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvYWRDb25zdGFu
dChpbW0ubV92YWx1ZSwgc2NyKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuYWRkbFJlZ1JlZyhzY3Is
IGRlc3QpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgIH0KKworICAgIHZvaWQg
YWRkMzIoSW1tMzIgaW1tLCBSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsK
KyAgICAgICAgaWYgKHNyYyAhPSBkZXN0KQorICAgICAgICAgICAgbV9hc3NlbWJsZXIubW92bFJl
Z1JlZyhzcmMsIGRlc3QpOworICAgICAgICBhZGQzMihpbW0sIGRlc3QpOworICAgIH0KKworICAg
IHZvaWQgYWRkMzIoSW1tMzIgaW1tLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBS
ZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBsb2FkMzIoYWRkcmVzcywg
c2NyKTsKKyAgICAgICAgYWRkMzIoaW1tLCBzY3IpOworICAgICAgICBzdG9yZTMyKHNjciwgYWRk
cmVzcyk7CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgfQorCisgICAgdm9pZCBh
ZGQzMihBZGRyZXNzIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgUmVnaXN0
ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgbG9hZDMyKHNyYywgc2NyKTsKKyAg
ICAgICAgbV9hc3NlbWJsZXIuYWRkbFJlZ1JlZyhzY3IsIGRlc3QpOworICAgICAgICByZWxlYXNl
U2NyYXRjaChzY3IpOworICAgIH0KKworICAgIHZvaWQgYW5kMzIoUmVnaXN0ZXJJRCBzcmMsIFJl
Z2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmFuZGxSZWdSZWcoc3Jj
LCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIGFuZDMyKEltbTMyIGltbSwgUmVnaXN0ZXJJRCBk
ZXN0KQorICAgIHsKKyAgICAgICAgaWYgKChpbW0ubV92YWx1ZSA8PSAyNTUpICYmIChpbW0ubV92
YWx1ZSA+PSAwKSAmJiAoZGVzdCA9PSBTSDRSZWdpc3RlcnM6OnIwKSkgeworICAgICAgICAgICAg
bV9hc3NlbWJsZXIuYW5kbEltbThyKGltbS5tX3ZhbHVlLCBkZXN0KTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorCisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNo
KCk7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvYWRDb25zdGFudCgoaW1tLm1fdmFsdWUpLCBzY3Ip
OworICAgICAgICBtX2Fzc2VtYmxlci5hbmRsUmVnUmVnKHNjciwgZGVzdCk7CisgICAgICAgIHJl
bGVhc2VTY3JhdGNoKHNjcik7CisgICAgfQorCisgICAgdm9pZCBsc2hpZnQzMihSZWdpc3RlcklE
IHNoaWZ0YW1vdW50LCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxl
ci5zaGxsUmVnUmVnKGRlc3QsIHNoaWZ0YW1vdW50KTsKKyAgICB9CisKKyAgICB2b2lkIHJzaGlm
dDMyKGludCBpbW0sIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIFJlZ2lzdGVySUQg
c2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvYWRDb25zdGFudCgt
aW1tLCBzY3IpOworICAgICAgICBtX2Fzc2VtYmxlci5zaGFSZWdSZWcoZGVzdCwgc2NyKTsKKyAg
ICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICB9CisKKyAgICB2b2lkIGxzaGlmdDMyKElt
bTMyIGltbSwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgaWYgKChpbW0ubV92YWx1
ZSA9PSAxKSB8fCAoaW1tLm1fdmFsdWUgPT0gMikgfHwgKGltbS5tX3ZhbHVlID09IDgpIHx8IChp
bW0ubV92YWx1ZSA9PSAxNikpIHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnNobGxJbW04cihp
bW0ubV92YWx1ZSwgZGVzdCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAg
ICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBtX2Fzc2VtYmxl
ci5sb2FkQ29uc3RhbnQoaW1tLm1fdmFsdWUsIHNjcik7CisgICAgICAgIG1fYXNzZW1ibGVyLnNo
bGxSZWdSZWcoZGVzdCwgc2NyKTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICB9
CisKKyAgICB2b2lkIG11bDMyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAg
eworICAgICAgICBtX2Fzc2VtYmxlci5pbXVsbFJlZ1JlZyhzcmMsIGRlc3QpOworICAgICAgICBt
X2Fzc2VtYmxlci5zdHNtYWNsKGRlc3QpOworICAgIH0KKworICAgIHZvaWQgbXVsMzIoSW1tMzIg
aW1tLCBSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgUmVn
aXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgbW92ZShpbW0sIHNjcik7Cisg
ICAgICAgIGlmICAoc3JjICE9IGRlc3QpCisgICAgICAgICAgICBtb3ZlKHNyYywgZGVzdCk7Cisg
ICAgICAgIG11bDMyKHNjciwgIGRlc3QpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOwor
ICAgIH0KKworICAgIHZvaWQgbm90MzIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkK
KyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLm5vdGxSZWcoc3JjLCBkZXN0KTsKKyAgICB9CisK
KyAgICB2b2lkIG9yMzIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7Cisg
ICAgICAgIG1fYXNzZW1ibGVyLm9ybFJlZ1JlZyhzcmMsIGRlc3QpOworICAgIH0KKworICAgIHZv
aWQgb3IzMihJbW0zMiBpbW0sIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIGlmICgo
aW1tLm1fdmFsdWUgPD0gMjU1KSAmJiAoaW1tLm1fdmFsdWUgPj0gMCkgJiYgKGRlc3QgPT0gU0g0
UmVnaXN0ZXJzOjpyMCkpIHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLm9ybEltbThyKGltbS5t
X3ZhbHVlLCBkZXN0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAg
IFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIG1fYXNzZW1ibGVyLmxv
YWRDb25zdGFudChpbW0ubV92YWx1ZSwgc2NyKTsKKyAgICAgICAgbV9hc3NlbWJsZXIub3JsUmVn
UmVnKHNjciwgZGVzdCk7CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgfQorCisg
ICAgdm9pZCByc2hpZnQzMihSZWdpc3RlcklEIHNoaWZ0YW1vdW50LCBSZWdpc3RlcklEIGRlc3Qp
CisgICAgeworICAgICAgICBjb21wYXJlMzIoMzIsIHNoaWZ0YW1vdW50LCBFcXVhbCk7CisgICAg
ICAgIG1fYXNzZW1ibGVyLmVuc3VyZVNwYWNlKG1fYXNzZW1ibGVyLm1heEluc3RydWN0aW9uU2l6
ZSArIDQpOworICAgICAgICBtX2Fzc2VtYmxlci5icmFuY2goQlRfT1BDT0RFLCAxKTsKKyAgICAg
ICAgbV9hc3NlbWJsZXIubmVnKHNoaWZ0YW1vdW50LCBzaGlmdGFtb3VudCk7CisgICAgICAgIG1f
YXNzZW1ibGVyLnNoYVJlZ1JlZyhkZXN0LCBzaGlmdGFtb3VudCk7CisgICAgfQorCisgICAgdm9p
ZCByc2hpZnQzMihJbW0zMiBpbW0sIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIGlm
IChpbW0ubV92YWx1ZSAmIDB4MWYpCisgICAgICAgICAgICByc2hpZnQzMihpbW0ubV92YWx1ZSAm
IDB4MWYsIGRlc3QpOworICAgIH0KKworICAgIHZvaWQgc3ViMzIoUmVnaXN0ZXJJRCBzcmMsIFJl
Z2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnN1YmxSZWdSZWcoc3Jj
LCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIHN1YjMyKEltbTMyIGltbSwgQWJzb2x1dGVBZGRy
ZXNzIGFkZHJlc3MsIFJlZ2lzdGVySUQgc2NyYXRjaFJlZykKKyAgICB7CisgICAgICAgIFJlZ2lz
dGVySUQgcmVzdWx0ID0gY2xhaW1TY3JhdGNoKCk7CisKKyAgICAgICAgbV9hc3NlbWJsZXIubG9h
ZENvbnN0YW50KHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3Q+KGFkZHJlc3MubV9wdHIpLCBzY3Jh
dGNoUmVnKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubW92bE1lbVJlZyhzY3JhdGNoUmVnLCByZXN1
bHQpOworCisgICAgICAgIGlmIChtX2Fzc2VtYmxlci5pc0ltbWVkaWF0ZSgtaW1tLm1fdmFsdWUp
KQorICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRkbEltbThyKC1pbW0ubV92YWx1ZSwgcmVzdWx0
KTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5sb2FkQ29uc3RhbnQo
aW1tLm1fdmFsdWUsIHNjcmF0Y2hSZWczKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnN1YmxS
ZWdSZWcoc2NyYXRjaFJlZzMsIHJlc3VsdCk7CisgICAgICAgIH0KKworICAgICAgICBzdG9yZTMy
KHJlc3VsdCwgc2NyYXRjaFJlZyk7CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHJlc3VsdCk7Cisg
ICAgfQorCisgICAgdm9pZCBzdWIzMihJbW0zMiBpbW0sIEFic29sdXRlQWRkcmVzcyBhZGRyZXNz
KQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCByZXN1bHQgPSBjbGFpbVNjcmF0Y2goKTsKKyAg
ICAgICAgUmVnaXN0ZXJJRCBzY3JhdGNoUmVnID0gY2xhaW1TY3JhdGNoKCk7CisKKyAgICAgICAg
bV9hc3NlbWJsZXIubG9hZENvbnN0YW50KHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3Q+KGFkZHJl
c3MubV9wdHIpLCBzY3JhdGNoUmVnKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubW92bE1lbVJlZyhz
Y3JhdGNoUmVnLCByZXN1bHQpOworCisgICAgICAgIGlmIChtX2Fzc2VtYmxlci5pc0ltbWVkaWF0
ZSgtaW1tLm1fdmFsdWUpKQorICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRkbEltbThyKC1pbW0u
bV92YWx1ZSwgcmVzdWx0KTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxl
ci5sb2FkQ29uc3RhbnQoaW1tLm1fdmFsdWUsIHNjcmF0Y2hSZWczKTsKKyAgICAgICAgICAgIG1f
YXNzZW1ibGVyLnN1YmxSZWdSZWcoc2NyYXRjaFJlZzMsIHJlc3VsdCk7CisgICAgICAgIH0KKwor
ICAgICAgICBzdG9yZTMyKHJlc3VsdCwgc2NyYXRjaFJlZyk7CisgICAgICAgIHJlbGVhc2VTY3Jh
dGNoKHJlc3VsdCk7CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcmF0Y2hSZWcpOworICAgIH0K
KworICAgIHZvaWQgYWRkMzIoSW1tMzIgaW1tLCBBYnNvbHV0ZUFkZHJlc3MgYWRkcmVzcywgUmVn
aXN0ZXJJRCBzY3JhdGNoUmVnKQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCByZXN1bHQgPSBj
bGFpbVNjcmF0Y2goKTsKKworICAgICAgICBtX2Fzc2VtYmxlci5sb2FkQ29uc3RhbnQocmVpbnRl
cnByZXRfY2FzdDx1aW50MzJfdD4oYWRkcmVzcy5tX3B0ciksIHNjcmF0Y2hSZWcpOworICAgICAg
ICBtX2Fzc2VtYmxlci5tb3ZsTWVtUmVnKHNjcmF0Y2hSZWcsIHJlc3VsdCk7CisKKyAgICAgICAg
aWYgKG1fYXNzZW1ibGVyLmlzSW1tZWRpYXRlKGltbS5tX3ZhbHVlKSkKKyAgICAgICAgICAgIG1f
YXNzZW1ibGVyLmFkZGxJbW04cihpbW0ubV92YWx1ZSwgcmVzdWx0KTsKKyAgICAgICAgZWxzZSB7
CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5sb2FkQ29uc3RhbnQoaW1tLm1fdmFsdWUsIHNjcmF0
Y2hSZWczKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZGxSZWdSZWcoc2NyYXRjaFJlZzMs
IHJlc3VsdCk7CisgICAgICAgIH0KKworICAgICAgICBzdG9yZTMyKHJlc3VsdCwgc2NyYXRjaFJl
Zyk7CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHJlc3VsdCk7CisgICAgfQorCisgICAgdm9pZCBh
ZGQzMihJbW0zMiBpbW0sIEFic29sdXRlQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAg
UmVnaXN0ZXJJRCByZXN1bHQgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgUmVnaXN0ZXJJRCBz
Y3JhdGNoUmVnID0gY2xhaW1TY3JhdGNoKCk7CisKKyAgICAgICAgbV9hc3NlbWJsZXIubG9hZENv
bnN0YW50KHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3Q+KGFkZHJlc3MubV9wdHIpLCBzY3JhdGNo
UmVnKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubW92bE1lbVJlZyhzY3JhdGNoUmVnLCByZXN1bHQp
OworCisgICAgICAgIGlmIChtX2Fzc2VtYmxlci5pc0ltbWVkaWF0ZShpbW0ubV92YWx1ZSkpCisg
ICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGRsSW1tOHIoaW1tLm1fdmFsdWUsIHJlc3VsdCk7Cisg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIubG9hZENvbnN0YW50KGltbS5t
X3ZhbHVlLCBzY3JhdGNoUmVnMyk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGRsUmVnUmVn
KHNjcmF0Y2hSZWczLCByZXN1bHQpOworICAgICAgICB9CisKKyAgICAgICAgc3RvcmUzMihyZXN1
bHQsIHNjcmF0Y2hSZWcpOworICAgICAgICByZWxlYXNlU2NyYXRjaChyZXN1bHQpOworICAgICAg
ICByZWxlYXNlU2NyYXRjaChzY3JhdGNoUmVnKTsKKyAgICB9CisKKyAgICB2b2lkIHN1YjMyKElt
bTMyIGltbSwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgaWYgKG1fYXNzZW1ibGVy
LmlzSW1tZWRpYXRlKC1pbW0ubV92YWx1ZSkpIHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFk
ZGxJbW04cigtaW1tLm1fdmFsdWUsIGRlc3QpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAg
bV9hc3NlbWJsZXIubG9hZENvbnN0YW50KGltbS5tX3ZhbHVlLCBzY3IpOworICAgICAgICBtX2Fz
c2VtYmxlci5zdWJsUmVnUmVnKHNjciwgZGVzdCk7CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNj
cik7CisgICAgfQorCisgICAgdm9pZCBzdWIzMihBZGRyZXNzIHNyYywgUmVnaXN0ZXJJRCBkZXN0
KQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAg
ICAgbG9hZDMyKHNyYywgc2NyKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuc3VibFJlZ1JlZyhzY3Is
IGRlc3QpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgIH0KKworICAgIHZvaWQg
eG9yMzIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1f
YXNzZW1ibGVyLnhvcmxSZWdSZWcoc3JjLCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIHhvcjMy
KEltbTMyIGltbSwgUmVnaXN0ZXJJRCBzcmNEZXN0KQorICAgIHsKKyAgICAgICAgaWYgKChzcmNE
ZXN0ICE9IFNINFJlZ2lzdGVyczo6cjApIHx8IChpbW0ubV92YWx1ZSA+IDI1NSkgfHwgKGltbS5t
X3ZhbHVlIDwgMCkpIHsKKyAgICAgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNo
KCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5sb2FkQ29uc3RhbnQoKGltbS5tX3ZhbHVlKSwg
c2NyKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnhvcmxSZWdSZWcoc2NyLCBzcmNEZXN0KTsK
KyAgICAgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKworICAgICAgICBtX2Fzc2VtYmxlci54b3JsSW1tOHIoaW1tLm1fdmFsdWUsIHNy
Y0Rlc3QpOworICAgIH0KKworICAgIHZvaWQgY29tcGFyZTMyKGludCBpbW0sIFJlZ2lzdGVySUQg
ZHN0LCBDb25kaXRpb24gY29uZCkKKyAgICB7CisgICAgICAgIGlmICgoKGNvbmQgPT0gRXF1YWwp
IHx8IChjb25kID09IE5vdEVxdWFsKSkgJiYgKGRzdCA9PSBTSDRSZWdpc3RlcnM6OnIwKSAmJiBt
X2Fzc2VtYmxlci5pc0ltbWVkaWF0ZShpbW0pKSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5j
bXBFcUltbVIwKGltbSwgZHN0LCBjb25kKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorCisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIG1f
YXNzZW1ibGVyLmxvYWRDb25zdGFudChpbW0sIHNjcik7CisgICAgICAgIG1fYXNzZW1ibGVyLmNt
cGxSZWdSZWcoc2NyLCBkc3QsIGNvbmQpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOwor
ICAgIH0KKworICAgIHZvaWQgY29tcGFyZTMyKGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwg
UmVnaXN0ZXJJRCBsZWZ0LCBDb25kaXRpb24gY29uZCkKKyAgICB7CisgICAgICAgIFJlZ2lzdGVy
SUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIGlmICghb2Zmc2V0KSB7CisgICAgICAg
ICAgICBtX2Fzc2VtYmxlci5tb3ZsTWVtUmVnKGJhc2UsIHNjcik7CisgICAgICAgICAgICBtX2Fz
c2VtYmxlci5jbXBsUmVnUmVnKHNjciwgbGVmdCwgY29uZCk7CisgICAgICAgICAgICByZWxlYXNl
U2NyYXRjaChzY3IpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKChvZmZzZXQgPCAwKSB8fCAob2Zmc2V0ID49IDY0KSkgeworICAgICAgICAgICAgbV9hc3Nl
bWJsZXIubG9hZENvbnN0YW50KG9mZnNldCwgc2NyKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVy
LmFkZGxSZWdSZWcoYmFzZSwgc2NyKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLm1vdmxNZW1S
ZWcoc2NyLCBzY3IpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuY21wbFJlZ1JlZyhzY3IsIGxl
ZnQsIGNvbmQpOworICAgICAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIG1fYXNzZW1ibGVyLm1vdmxNZW1SZWcob2Zm
c2V0ID4+IDIsIGJhc2UsIHNjcik7CisgICAgICAgIG1fYXNzZW1ibGVyLmNtcGxSZWdSZWcoc2Ny
LCBsZWZ0LCBjb25kKTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICB9CisKKyAg
ICB2b2lkIHRlc3RJbW0oaW50IGltbSwgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlKQorICAg
IHsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgUmVn
aXN0ZXJJRCBzY3IxID0gY2xhaW1TY3JhdGNoKCk7CisKKyAgICAgICAgaWYgKChvZmZzZXQgPCAw
KSB8fCAob2Zmc2V0ID49IDY0KSkgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIubG9hZENvbnN0
YW50KG9mZnNldCwgc2NyKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZGxSZWdSZWcoYmFz
ZSwgc2NyKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLm1vdmxNZW1SZWcoc2NyLCBzY3IpOwor
ICAgICAgICB9IGVsc2UgaWYgKG9mZnNldCkKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLm1vdmxN
ZW1SZWcob2Zmc2V0ID4+IDIsIGJhc2UsIHNjcik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IG1fYXNzZW1ibGVyLm1vdmxNZW1SZWcoYmFzZSwgc2NyKTsKKyAgICAgICAgaWYgKG1fYXNzZW1i
bGVyLmlzSW1tZWRpYXRlKGltbSkpCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5tb3ZJbW04KGlt
bSwgc2NyMSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmxvYWRDb25z
dGFudChpbW0sIHNjcjEpOworCisgICAgICAgIG1fYXNzZW1ibGVyLnRlc3RsUmVnUmVnKHNjciwg
c2NyMSk7CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgICAgIHJlbGVhc2VTY3Jh
dGNoKHNjcjEpOworICAgIH0KKworICAgIHZvaWQgdGVzdGxJbW0oaW50IGltbSwgUmVnaXN0ZXJJ
RCBkc3QpCisgICAgeworICAgICAgICBpZiAoKGRzdCA9PSBTSDRSZWdpc3RlcnM6OnIwKSAmJiAo
aW1tIDw9IDI1NSkgJiYgKGltbSA+PSAwKSkgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIudGVz
dGxJbW04cihpbW0sIGRzdCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAg
ICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBtX2Fzc2VtYmxl
ci5sb2FkQ29uc3RhbnQoaW1tLCBzY3IpOworICAgICAgICBtX2Fzc2VtYmxlci50ZXN0bFJlZ1Jl
ZyhzY3IsIGRzdCk7CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgfQorCisgICAg
dm9pZCBjb21wYXJlMzIoUmVnaXN0ZXJJRCByaWdodCwgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBi
YXNlLCBDb25kaXRpb24gY29uZCkKKyAgICB7CisgICAgICAgIGlmICghb2Zmc2V0KSB7CisgICAg
ICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICAgICAgbV9h
c3NlbWJsZXIubW92bE1lbVJlZyhiYXNlLCBzY3IpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIu
Y21wbFJlZ1JlZyhyaWdodCwgc2NyLCBjb25kKTsKKyAgICAgICAgICAgIHJlbGVhc2VTY3JhdGNo
KHNjcik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoKG9m
ZnNldCA8IDApIHx8IChvZmZzZXQgPj0gNjQpKSB7CisgICAgICAgICAgICBSZWdpc3RlcklEIHNj
ciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIubG9hZENvbnN0YW50
KG9mZnNldCwgc2NyKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZGxSZWdSZWcoYmFzZSwg
c2NyKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLm1vdmxNZW1SZWcoc2NyLCBzY3IpOworICAg
ICAgICAgICAgbV9hc3NlbWJsZXIuY21wbFJlZ1JlZyhyaWdodCwgc2NyLCBjb25kKTsKKyAgICAg
ICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKworICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBt
X2Fzc2VtYmxlci5tb3ZsTWVtUmVnKG9mZnNldCA+PiAyLCBiYXNlLCBzY3IpOworICAgICAgICBt
X2Fzc2VtYmxlci5jbXBsUmVnUmVnKHJpZ2h0LCBzY3IsIGNvbmQpOworICAgICAgICByZWxlYXNl
U2NyYXRjaChzY3IpOworICAgIH0KKworICAgIHZvaWQgY29tcGFyZTMyKGludCBpbW0sIGludCBv
ZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgQ29uZGl0aW9uIGNvbmQpCisgICAgeworICAgICAgICBp
ZiAoIW9mZnNldCkgeworICAgICAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2go
KTsKKyAgICAgICAgICAgIFJlZ2lzdGVySUQgc2NyMSA9IGNsYWltU2NyYXRjaCgpOworICAgICAg
ICAgICAgbV9hc3NlbWJsZXIubW92bE1lbVJlZyhiYXNlLCBzY3IpOworICAgICAgICAgICAgbV9h
c3NlbWJsZXIubG9hZENvbnN0YW50KGltbSwgc2NyMSk7CisgICAgICAgICAgICBtX2Fzc2VtYmxl
ci5jbXBsUmVnUmVnKHNjcjEsIHNjciwgY29uZCk7CisgICAgICAgICAgICByZWxlYXNlU2NyYXRj
aChzY3IxKTsKKyAgICAgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoKG9mZnNldCA8IDApIHx8IChvZmZzZXQg
Pj0gNjQpKSB7CisgICAgICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOwor
ICAgICAgICAgICAgUmVnaXN0ZXJJRCBzY3IxID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgICAg
ICBtX2Fzc2VtYmxlci5sb2FkQ29uc3RhbnQob2Zmc2V0LCBzY3IpOworICAgICAgICAgICAgbV9h
c3NlbWJsZXIuYWRkbFJlZ1JlZyhiYXNlLCBzY3IpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIu
bW92bE1lbVJlZyhzY3IsIHNjcik7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5sb2FkQ29uc3Rh
bnQoaW1tLCBzY3IxKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmNtcGxSZWdSZWcoc2NyMSwg
c2NyLCBjb25kKTsKKyAgICAgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcjEpOworICAgICAgICAg
ICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
CisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIFJlZ2lz
dGVySUQgc2NyMSA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBtX2Fzc2VtYmxlci5tb3ZsTWVt
UmVnKG9mZnNldCA+PiAyLCBiYXNlLCBzY3IpOworICAgICAgICBtX2Fzc2VtYmxlci5sb2FkQ29u
c3RhbnQoaW1tLCBzY3IxKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuY21wbFJlZ1JlZyhzY3IxLCBz
Y3IsIGNvbmQpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IxKTsKKyAgICAgICAgcmVsZWFz
ZVNjcmF0Y2goc2NyKTsKKyAgICB9CisKKyAgICAvLyBNZW1vcnkgYWNjZXNzIG9wZXJhdGlvbgor
CisgICAgdm9pZCBsb2FkMzIoSW1wbGljaXRBZGRyZXNzIGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVz
dCkKKyAgICB7CisgICAgICAgIGxvYWQzMihhZGRyZXNzLmJhc2UsIGFkZHJlc3Mub2Zmc2V0LCBk
ZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIGxvYWQ4KEltcGxpY2l0QWRkcmVzcyBhZGRyZXNzLCBS
ZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBsb2FkOChhZGRyZXNzLmJhc2UsIGFkZHJl
c3Mub2Zmc2V0LCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIGxvYWQzMihCYXNlSW5kZXggYWRk
cmVzcywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBj
bGFpbVNjcmF0Y2goKTsKKyAgICAgICAgbW92ZShhZGRyZXNzLmluZGV4LCBzY3IpOworICAgICAg
ICBsc2hpZnQzMihJbW0zMihhZGRyZXNzLnNjYWxlKSwgc2NyKTsKKyAgICAgICAgYWRkMzIoYWRk
cmVzcy5iYXNlLCBzY3IpOworICAgICAgICBsb2FkMzIoc2NyLCBhZGRyZXNzLm9mZnNldCwgZGVz
dCk7CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgfQorCisgICAgdm9pZCBsb2Fk
MzIodm9pZCogYWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3Nl
bWJsZXIubG9hZENvbnN0YW50KHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3Q+KGFkZHJlc3MpLCBk
ZXN0KTsKKyAgICAgICAgbV9hc3NlbWJsZXIubW92bE1lbVJlZyhkZXN0LCBkZXN0KTsKKyAgICB9
CisKKyAgICB2b2lkIGxvYWQzMihSZWdpc3RlcklEIGJhc2UsIGludCBvZmZzZXQsIFJlZ2lzdGVy
SUQgZGVzdCkKKyAgICB7CisgICAgICAgIGlmICghb2Zmc2V0KSB7CisgICAgICAgICAgICBtX2Fz
c2VtYmxlci5tb3ZsTWVtUmVnKGJhc2UsIGRlc3QpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKChvZmZzZXQgPj0gMCkgJiYgKG9mZnNldCA8IDY0KSkgewor
ICAgICAgICAgICAgbV9hc3NlbWJsZXIubW92bE1lbVJlZyhvZmZzZXQgPj4gMiwgYmFzZSwgZGVz
dCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoKGRlc3Qg
PT0gU0g0UmVnaXN0ZXJzOjpyMCkgJiYgKGRlc3QgIT0gYmFzZSkpIHsKKyAgICAgICAgICAgIG1f
YXNzZW1ibGVyLmxvYWRDb25zdGFudCgob2Zmc2V0KSwgZGVzdCk7CisgICAgICAgICAgICBtX2Fz
c2VtYmxlci5tb3ZsUjBtcihiYXNlLCBkZXN0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorCisgICAgICAgIFJlZ2lzdGVySUQgc2NyOworICAgICAgICBpZiAoZGVzdCA9PSBiYXNl
KQorICAgICAgICAgICAgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIHNjciA9IGRlc3Q7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvYWRDb25zdGFudCgob2Zm
c2V0KSwgc2NyKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuYWRkbFJlZ1JlZyhiYXNlLCBzY3IpOwor
ICAgICAgICBtX2Fzc2VtYmxlci5tb3ZsTWVtUmVnKHNjciwgZGVzdCk7CisKKyAgICAgICAgaWYg
KGRlc3QgPT0gYmFzZSkKKyAgICAgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgfQor
CisgICAgdm9pZCBsb2FkOChSZWdpc3RlcklEIGJhc2UsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQg
ZGVzdCkKKyAgICB7CisgICAgICAgIGlmICghb2Zmc2V0KSB7CisgICAgICAgICAgICBtX2Fzc2Vt
Ymxlci5tb3ZiTWVtUmVnKGJhc2UsIGRlc3QpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKChvZmZzZXQgPiAwKSAmJiAob2Zmc2V0IDwgNjQpICYmIChkZXN0
ID09IFNINFJlZ2lzdGVyczo6cjApKSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5tb3ZiTWVt
UmVnKG9mZnNldCwgYmFzZSwgZGVzdCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KworICAgICAgICBpZiAoYmFzZSAhPSBkZXN0KSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5s
b2FkQ29uc3RhbnQoKG9mZnNldCksIGRlc3QpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRk
bFJlZ1JlZyhiYXNlLCBkZXN0KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLm1vdmJNZW1SZWco
ZGVzdCwgZGVzdCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBS
ZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBtX2Fzc2VtYmxlci5sb2Fk
Q29uc3RhbnQoKG9mZnNldCksIHNjcik7CisgICAgICAgIG1fYXNzZW1ibGVyLmFkZGxSZWdSZWco
YmFzZSwgc2NyKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubW92Yk1lbVJlZyhzY3IsIGRlc3QpOwor
ICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgIH0KKworICAgIHZvaWQgbG9hZDMyKFJl
Z2lzdGVySUQgcjAsIFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAg
ICAgIEFTU0VSVChyMCA9PSBTSDRSZWdpc3RlcnM6OnIwKTsKKyAgICAgICAgbV9hc3NlbWJsZXIu
bW92bFIwbXIoc3JjLCBkc3QpOworICAgIH0KKworICAgIHZvaWQgbG9hZDMyKFJlZ2lzdGVySUQg
c3JjLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLm1vdmxNZW1S
ZWcoc3JjLCBkc3QpOworICAgIH0KKworICAgIHZvaWQgbG9hZDE2KEltcGxpY2l0QWRkcmVzcyBh
ZGRyZXNzLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBpZiAoIWFkZHJlc3Mub2Zm
c2V0KSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5tb3Z3TWVtUmVnKGFkZHJlc3MuYmFzZSwg
ZGVzdCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoKGFk
ZHJlc3Mub2Zmc2V0ID4gMCkgJiYgKGFkZHJlc3Mub2Zmc2V0IDwgNjQpICYmIChkZXN0ID09IFNI
NFJlZ2lzdGVyczo6cjApKSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5tb3Z3TWVtUmVnKGFk
ZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UsIGRlc3QpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKGFkZHJlc3MuYmFzZSAhPSBkZXN0KSB7CisgICAgICAg
ICAgICBtX2Fzc2VtYmxlci5sb2FkQ29uc3RhbnQoKGFkZHJlc3Mub2Zmc2V0KSwgZGVzdCk7Cisg
ICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGRsUmVnUmVnKGFkZHJlc3MuYmFzZSwgZGVzdCk7Cisg
ICAgICAgICAgICBtX2Fzc2VtYmxlci5tb3Z3TWVtUmVnKGRlc3QsIGRlc3QpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNj
cmF0Y2goKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9hZENvbnN0YW50KChhZGRyZXNzLm9mZnNl
dCksIHNjcik7CisgICAgICAgIG1fYXNzZW1ibGVyLmFkZGxSZWdSZWcoYWRkcmVzcy5iYXNlLCBz
Y3IpOworICAgICAgICBtX2Fzc2VtYmxlci5tb3Z3TWVtUmVnKHNjciwgZGVzdCk7CisgICAgICAg
IHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgfQorCisgICAgdm9pZCBsb2FkMTYoUmVnaXN0ZXJJ
RCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLm1vdndN
ZW1SZWcoc3JjLCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIGxvYWQxNihSZWdpc3RlcklEIHIw
LCBSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgQVNTRVJU
KHIwID09IFNINFJlZ2lzdGVyczo6cjApOworICAgICAgICBtX2Fzc2VtYmxlci5tb3Z3UjBtcihz
cmMsIGRlc3QpOworICAgIH0KKworICAgIHZvaWQgbG9hZDE2KEJhc2VJbmRleCBhZGRyZXNzLCBS
ZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2Ny
YXRjaCgpOworCisgICAgICAgIG1vdmUoYWRkcmVzcy5pbmRleCwgc2NyKTsKKyAgICAgICAgbHNo
aWZ0MzIoSW1tMzIoYWRkcmVzcy5zY2FsZSksIHNjcik7CisKKyAgICAgICAgaWYgKGFkZHJlc3Mu
b2Zmc2V0KQorICAgICAgICAgICAgYWRkMzIoSW1tMzIoYWRkcmVzcy5vZmZzZXQpLCBzY3IpOwor
ICAgICAgICBpZiAoc2NyID09IFNINFJlZ2lzdGVyczo6cjApCisgICAgICAgICAgICBtX2Fzc2Vt
Ymxlci5tb3Z3UjBtcihhZGRyZXNzLmJhc2UsIHNjcik7CisgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgYWRkMzIoYWRkcmVzcy5iYXNlLCBzY3IpOworICAgICAgICAgICAgbG9hZDE2KHNjciwg
c2NyKTsKKyAgICAgICAgfQorCisgICAgICAgIGV4dHV3KHNjciwgZGVzdCk7CisgICAgICAgIHJl
bGVhc2VTY3JhdGNoKHNjcik7CisgICAgfQorCisgICAgdm9pZCBzdG9yZTMyKFJlZ2lzdGVySUQg
c3JjLCBJbXBsaWNpdEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIFJlZ2lzdGVySUQg
c2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIHN0b3JlMzIoc3JjLCBhZGRyZXNzLm9mZnNl
dCwgYWRkcmVzcy5iYXNlLCBzY3IpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAg
IH0KKworICAgIHZvaWQgc3RvcmUzMihSZWdpc3RlcklEIHNyYywgaW50IG9mZnNldCwgUmVnaXN0
ZXJJRCBiYXNlLCBSZWdpc3RlcklEIHNjcikKKyAgICB7CisgICAgICAgIGlmICghb2Zmc2V0KSB7
CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5tb3ZsUmVnTWVtKHNyYywgYmFzZSk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoKG9mZnNldCA+PTApICYmIChv
ZmZzZXQgPCA2NCkpIHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLm1vdmxSZWdNZW0oc3JjLCBv
ZmZzZXQgPj4gMiwgYmFzZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAg
ICAgICBtX2Fzc2VtYmxlci5sb2FkQ29uc3RhbnQoKG9mZnNldCksIHNjcik7CisgICAgICAgIGlm
IChzY3IgPT0gU0g0UmVnaXN0ZXJzOjpyMCkgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIubW92
bFJlZ01lbXIwKHNyYywgYmFzZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwor
ICAgICAgICBtX2Fzc2VtYmxlci5hZGRsUmVnUmVnKGJhc2UsIHNjcik7CisgICAgICAgIG1fYXNz
ZW1ibGVyLm1vdmxSZWdNZW0oc3JjLCBzY3IpOworICAgIH0KKworICAgIHZvaWQgc3RvcmUzMihS
ZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkKKyAgICB7
CisgICAgICAgIEFTU0VSVChvZmZzZXQgPT0gU0g0UmVnaXN0ZXJzOjpyMCk7CisgICAgICAgIG1f
YXNzZW1ibGVyLm1vdmxSZWdNZW1yMChzcmMsIGJhc2UpOworICAgIH0KKworICAgIHZvaWQgc3Rv
cmUzMihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICBtX2Fz
c2VtYmxlci5tb3ZsUmVnTWVtKHNyYywgZHN0KTsKKyAgICB9CisKKyAgICB2b2lkIHN0b3JlMzIo
SW1tMzIgaW1tLCBJbXBsaWNpdEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIFJlZ2lz
dGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIFJlZ2lzdGVySUQgc2NyMSA9IGNs
YWltU2NyYXRjaCgpOworICAgICAgICBtX2Fzc2VtYmxlci5sb2FkQ29uc3RhbnQoKGltbS5tX3Zh
bHVlKSwgc2NyKTsKKyAgICAgICAgc3RvcmUzMihzY3IsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNz
LmJhc2UsIHNjcjEpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgICAgICByZWxl
YXNlU2NyYXRjaChzY3IxKTsKKyAgICB9CisKKyAgICB2b2lkIHN0b3JlMzIoUmVnaXN0ZXJJRCBz
cmMsIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBj
bGFpbVNjcmF0Y2goKTsKKworICAgICAgICBtb3ZlKGFkZHJlc3MuaW5kZXgsIHNjcik7CisgICAg
ICAgIGxzaGlmdDMyKEltbTMyKGFkZHJlc3Muc2NhbGUpLCBzY3IpOworICAgICAgICBhZGQzMihh
ZGRyZXNzLmJhc2UsIHNjcik7CisgICAgICAgIHN0b3JlMzIoc3JjLCBBZGRyZXNzKHNjciwgYWRk
cmVzcy5vZmZzZXQpKTsKKworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgIH0KKwor
ICAgIHZvaWQgc3RvcmUzMihJbW0zMiBpbW0sIHZvaWQqIGFkZHJlc3MpCisgICAgeworICAgICAg
ICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBSZWdpc3RlcklEIHNj
cjEgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9hZENvbnN0YW50KChp
bW0ubV92YWx1ZSksIHNjcik7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvYWRDb25zdGFudChyZWlu
dGVycHJldF9jYXN0PHVpbnQzMl90PihhZGRyZXNzKSwgc2NyMSk7CisgICAgICAgIG1fYXNzZW1i
bGVyLm1vdmxNZW1SZWcoc2NyLCBzY3IxKTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsK
KyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyMSk7CisgICAgfQorCisgICAgdm9pZCBzdG9yZTMy
KFJlZ2lzdGVySUQgc3JjLCB2b2lkKiBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJ
RCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9hZENvbnN0YW50
KHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3Q+KGFkZHJlc3MpLCBzY3IpOworICAgICAgICBtX2Fz
c2VtYmxlci5tb3ZsTWVtUmVnKHNyYywgc2NyKTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2Ny
KTsKKyAgICB9CisKKyAgICBEYXRhTGFiZWwzMiBsb2FkMzJXaXRoQWRkcmVzc09mZnNldFBhdGNo
KEFkZHJlc3MgYWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgUmVnaXN0
ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgRGF0YUxhYmVsMzIgbGFiZWwodGhp
cyk7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvYWRDb25zdGFudFVuUmV1c2FibGUoYWRkcmVzcy5v
ZmZzZXQsIHNjcik7CisgICAgICAgIG1fYXNzZW1ibGVyLmFkZGxSZWdSZWcoYWRkcmVzcy5iYXNl
LCBzY3IpOworICAgICAgICBtX2Fzc2VtYmxlci5tb3ZsTWVtUmVnKHNjciwgZGVzdCk7CisgICAg
ICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgICAgIHJldHVybiBsYWJlbDsKKyAgICB9CisK
KyAgICBEYXRhTGFiZWwzMiBzdG9yZTMyV2l0aEFkZHJlc3NPZmZzZXRQYXRjaChSZWdpc3RlcklE
IHNyYywgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBj
bGFpbVNjcmF0Y2goKTsKKyAgICAgICAgRGF0YUxhYmVsMzIgbGFiZWwodGhpcyk7CisgICAgICAg
IG1fYXNzZW1ibGVyLmxvYWRDb25zdGFudFVuUmV1c2FibGUoYWRkcmVzcy5vZmZzZXQsIHNjcik7
CisgICAgICAgIG1fYXNzZW1ibGVyLmFkZGxSZWdSZWcoYWRkcmVzcy5iYXNlLCBzY3IpOworICAg
ICAgICBtX2Fzc2VtYmxlci5tb3ZsUmVnTWVtKHNyYywgc2NyKTsKKyAgICAgICAgcmVsZWFzZVNj
cmF0Y2goc2NyKTsKKyAgICAgICAgcmV0dXJuIGxhYmVsOworICAgIH0KKworICAgICAvLyBGbG9h
dGluZy1wb2ludCBvcGVyYXRpb25zCisKKyAgICBib29sIHN1cHBvcnRzRmxvYXRpbmdQb2ludCgp
IGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKyAgICBib29sIHN1cHBvcnRzRmxvYXRpbmdQb2ludFRy
dW5jYXRlKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorICAgIGJvb2wgc3VwcG9ydHNGbG9hdGlu
Z1BvaW50U3FydCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKworICAgIHZvaWQgbG9hZERvdWJs
ZShJbXBsaWNpdEFkZHJlc3MgYWRkcmVzcywgRlBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAg
ICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworCisgICAgICAgIG1fYXNzZW1i
bGVyLmxvYWRDb25zdGFudChhZGRyZXNzLm9mZnNldCwgc2NyKTsKKyAgICAgICAgaWYgKGFkZHJl
c3MuYmFzZSA9PSBTSDRSZWdpc3RlcnM6OnIwKSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5m
bW92c1JlYWRyMHIoc2NyLCAoRlBSZWdpc3RlcklEKShkZXN0ICsgMSkpOworICAgICAgICAgICAg
bV9hc3NlbWJsZXIuYWRkbEltbThyKDQsIHNjcik7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5m
bW92c1JlYWRyMHIoc2NyLCBkZXN0KTsKKyAgICAgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBtX2Fzc2VtYmxlci5h
ZGRsUmVnUmVnKGFkZHJlc3MuYmFzZSwgc2NyKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuZm1vdnNS
ZWFkcm1pbmMoc2NyLCAoRlBSZWdpc3RlcklEKShkZXN0ICsgMSkpOworICAgICAgICBtX2Fzc2Vt
Ymxlci5mbW92c1JlYWRybShzY3IsIGRlc3QpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3Ip
OworICAgIH0KKworICAgIHZvaWQgbG9hZERvdWJsZShjb25zdCB2b2lkKiBhZGRyZXNzLCBGUFJl
Z2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3Jh
dGNoKCk7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvYWRDb25zdGFudChyZWludGVycHJldF9jYXN0
PHVpbnQzMl90PihhZGRyZXNzKSwgc2NyKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuZm1vdnNSZWFk
cm1pbmMoc2NyLCAoRlBSZWdpc3RlcklEKShkZXN0ICsgMSkpOworICAgICAgICBtX2Fzc2VtYmxl
ci5mbW92c1JlYWRybShzY3IsIGRlc3QpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOwor
ICAgIH0KKworICAgIHZvaWQgc3RvcmVEb3VibGUoRlBSZWdpc3RlcklEIHNyYywgSW1wbGljaXRB
ZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2Ny
YXRjaCgpOworICAgICAgICBtX2Fzc2VtYmxlci5sb2FkQ29uc3RhbnQoYWRkcmVzcy5vZmZzZXQs
IHNjcik7CisgICAgICAgIG1fYXNzZW1ibGVyLmFkZGxSZWdSZWcoYWRkcmVzcy5iYXNlLCBzY3Ip
OworICAgICAgICBtX2Fzc2VtYmxlci5mbW92c1dyaXRlcm0oKEZQUmVnaXN0ZXJJRCkoc3JjICsg
MSksIHNjcik7CisgICAgICAgIG1fYXNzZW1ibGVyLmFkZGxJbW04cig0LCBzY3IpOworICAgICAg
ICBtX2Fzc2VtYmxlci5mbW92c1dyaXRlcm0oc3JjLCBzY3IpOworICAgICAgICByZWxlYXNlU2Ny
YXRjaChzY3IpOworICAgIH0KKworICAgIHZvaWQgYWRkRG91YmxlKEZQUmVnaXN0ZXJJRCBzcmMs
IEZQUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuZGFkZFJlZ1Jl
ZyhzcmMsIGRlc3QpOworICAgIH0KKworICAgIHZvaWQgYWRkRG91YmxlKEFkZHJlc3MgYWRkcmVz
cywgRlBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBsb2FkRG91YmxlKGFkZHJlc3Ms
IGZzY3JhdGNoKTsKKyAgICAgICAgYWRkRG91YmxlKGZzY3JhdGNoLCBkZXN0KTsKKyAgICB9CisK
KyAgICB2b2lkIHN1YkRvdWJsZShGUFJlZ2lzdGVySUQgc3JjLCBGUFJlZ2lzdGVySUQgZGVzdCkK
KyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmRzdWJSZWdSZWcoc3JjLCBkZXN0KTsKKyAgICB9
CisKKyAgICB2b2lkIHN1YkRvdWJsZShBZGRyZXNzIGFkZHJlc3MsIEZQUmVnaXN0ZXJJRCBkZXN0
KQorICAgIHsKKyAgICAgICAgbG9hZERvdWJsZShhZGRyZXNzLCBmc2NyYXRjaCk7CisgICAgICAg
IHN1YkRvdWJsZShmc2NyYXRjaCwgZGVzdCk7CisgICAgfQorCisgICAgdm9pZCBtdWxEb3VibGUo
RlBSZWdpc3RlcklEIHNyYywgRlBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fz
c2VtYmxlci5kbXVsUmVnUmVnKHNyYywgZGVzdCk7CisgICAgfQorCisgICAgdm9pZCBtdWxEb3Vi
bGUoQWRkcmVzcyBhZGRyZXNzLCBGUFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIGxv
YWREb3VibGUoYWRkcmVzcywgZnNjcmF0Y2gpOworICAgICAgICBtdWxEb3VibGUoZnNjcmF0Y2gs
IGRlc3QpOworICAgIH0KKworICAgIHZvaWQgZGl2RG91YmxlKEZQUmVnaXN0ZXJJRCBzcmMsIEZQ
UmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuZGRpdlJlZ1JlZyhz
cmMsIGRlc3QpOworICAgIH0KKworICAgIHZvaWQgY29udmVydEludDMyVG9Eb3VibGUoUmVnaXN0
ZXJJRCBzcmMsIEZQUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIu
bGRzcm1mcHVsKHNyYyk7CisgICAgICAgIG1fYXNzZW1ibGVyLmZsb2F0ZnB1bERyZWcoZGVzdCk7
CisgICAgfQorCisgICAgdm9pZCBjb252ZXJ0SW50MzJUb0RvdWJsZShBYnNvbHV0ZUFkZHJlc3Mg
c3JjLCBGUFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0g
Y2xhaW1TY3JhdGNoKCk7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvYWRDb25zdGFudChyZWludGVy
cHJldF9jYXN0PHVpbnQzMl90PihzcmMubV9wdHIpLCBzY3IpOworICAgICAgICBjb252ZXJ0SW50
MzJUb0RvdWJsZShzY3IsIGRlc3QpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAg
IH0KKworICAgIHZvaWQgY29udmVydEludDMyVG9Eb3VibGUoQWRkcmVzcyBzcmMsIEZQUmVnaXN0
ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2go
KTsKKyAgICAgICAgbG9hZDMyKHNyYywgc2NyKTsKKyAgICAgICAgY29udmVydEludDMyVG9Eb3Vi
bGUoc2NyLCBkZXN0KTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICB9CisKKyAg
ICB2b2lkIGxvYWQzMldpdGhVbmFsaWduZWRIYWxmV29yZHMoQmFzZUluZGV4IGFkZHJlc3MsIFJl
Z2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3Jh
dGNoKCk7CisKKyAgICAgICAgbW92ZShhZGRyZXNzLmluZGV4LCBzY3IpOworICAgICAgICBsc2hp
ZnQzMihJbW0zMihhZGRyZXNzLnNjYWxlKSwgc2NyKTsKKyAgICAgICAgYWRkMzIoYWRkcmVzcy5i
YXNlLCBzY3IpOworCisgICAgICAgIGlmIChhZGRyZXNzLm9mZnNldCkKKyAgICAgICAgICAgIGFk
ZDMyKEltbTMyKGFkZHJlc3Mub2Zmc2V0KSwgc2NyKTsKKworICAgICAgICBSZWdpc3RlcklEIHNj
cjEgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgbG9hZDE2KHNjciwgc2NyMSk7CisgICAgICAg
IGFkZDMyKEltbTMyKDIpLCBzY3IpOworICAgICAgICBsb2FkMTYoc2NyLCBkZXN0KTsKKyAgICAg
ICAgbW92ZShJbW0zMigxNiksIHNjcik7CisgICAgICAgIG1fYXNzZW1ibGVyLnNobGxSZWdSZWco
ZGVzdCwgc2NyKTsKKyAgICAgICAgb3IzMihzY3IxLCBkZXN0KTsKKworICAgICAgICByZWxlYXNl
U2NyYXRjaChzY3IpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IxKTsKKyAgICB9CisKKyAg
ICBKdW1wIGJyYW5jaDMyV2l0aFVuYWxpZ25lZEhhbGZXb3JkcyhDb25kaXRpb24gY29uZCwgQmFz
ZUluZGV4IGxlZnQsIEltbTMyIHJpZ2h0KQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3Ig
PSBzY3JhdGNoUmVnMzsKKyAgICAgICAgbG9hZDMyV2l0aFVuYWxpZ25lZEhhbGZXb3JkcyhsZWZ0
LCBzY3IpOworICAgICAgICBpZiAoKChjb25kID09IEVxdWFsKSB8fCAoY29uZCA9PSBOb3RFcXVh
bCkpICYmICFyaWdodC5tX3ZhbHVlKQorICAgICAgICAgICAgbV9hc3NlbWJsZXIudGVzdGxSZWdS
ZWcoc2NyLCBzY3IpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBjb21wYXJlMzIocmlnaHQu
bV92YWx1ZSwgc2NyLCBjb25kKTsKKworICAgICAgICBpZiAoY29uZCA9PSBOb3RFcXVhbCkKKyAg
ICAgICAgICAgIHJldHVybiBicmFuY2hGYWxzZSgpOworICAgICAgICByZXR1cm4gYnJhbmNoVHJ1
ZSgpOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoRG91YmxlTm9uWmVybyhGUFJlZ2lzdGVySUQg
cmVnLCBGUFJlZ2lzdGVySUQgc2NyYXRjaCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLm1v
dkltbTgoMCwgc2NyYXRjaFJlZzMpOworICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShzY3Jh
dGNoUmVnMywgc2NyYXRjaCk7CisgICAgICAgIHJldHVybiBicmFuY2hEb3VibGUoRG91YmxlTm90
RXF1YWwsIHJlZywgc2NyYXRjaCk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2hEb3VibGVaZXJv
T3JOYU4oRlBSZWdpc3RlcklEIHJlZywgRlBSZWdpc3RlcklEIHNjcmF0Y2gpCisgICAgeworICAg
ICAgICBtX2Fzc2VtYmxlci5tb3ZJbW04KDAsIHNjcmF0Y2hSZWczKTsKKyAgICAgICAgY29udmVy
dEludDMyVG9Eb3VibGUoc2NyYXRjaFJlZzMsIHNjcmF0Y2gpOworICAgICAgICByZXR1cm4gYnJh
bmNoRG91YmxlKERvdWJsZUVxdWFsT3JVbm9yZGVyZWQsIHJlZywgc2NyYXRjaCk7CisgICAgfQor
CisgICAgSnVtcCBicmFuY2hEb3VibGUoQ29uZGl0aW9uIGNvbmQsIEZQUmVnaXN0ZXJJRCBsZWZ0
LCBGUFJlZ2lzdGVySUQgcmlnaHQpCisgICAgeworICAgICAgICBpZiAoY29uZCA9PSBEb3VibGVF
cXVhbCkgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIuZGNtcHBlcShyaWdodCwgbGVmdCk7Cisg
ICAgICAgICAgICByZXR1cm4gYnJhbmNoVHJ1ZSgpOworICAgICAgICB9CisKKyAgICAgICAgaWYg
KGNvbmQgPT0gRG91YmxlTm90RXF1YWwpIHsKKyAgICAgICAgICAgIFJlZ2lzdGVySUQgc2NyID0g
Y2xhaW1TY3JhdGNoKCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5sb2FkQ29uc3RhbnQoMHg3
ZmJmZmZmZiwgc2NyYXRjaFJlZzMpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuZGNudmRzKHJp
Z2h0KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnN0c2ZwdWxSZWcoc2NyKTsKKyAgICAgICAg
ICAgIG1fYXNzZW1ibGVyLmNtcGxSZWdSZWcoc2NyYXRjaFJlZzMsIHNjciwgRXF1YWwpOworICAg
ICAgICAgICAgbV9hc3NlbWJsZXIuZW5zdXJlU3BhY2UobV9hc3NlbWJsZXIubWF4SW5zdHJ1Y3Rp
b25TaXplICsgMjIsIHNpemVvZih1aW50MzJfdCkpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIu
YnJhbmNoKEJUX09QQ09ERSwgOCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5kY252ZHMobGVm
dCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zdHNmcHVsUmVnKHNjcik7CisgICAgICAgICAg
ICBtX2Fzc2VtYmxlci5jbXBsUmVnUmVnKHNjcmF0Y2hSZWczLCBzY3IsIEVxdWFsKTsKKyAgICAg
ICAgICAgIG1fYXNzZW1ibGVyLmJyYW5jaChCVF9PUENPREUsIDQpOworICAgICAgICAgICAgbV9h
c3NlbWJsZXIuZGNtcHBlcShyaWdodCwgbGVmdCk7CisgICAgICAgICAgICByZWxlYXNlU2NyYXRj
aChzY3IpOworICAgICAgICAgICAgcmV0dXJuIGJyYW5jaEZhbHNlKCk7CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAoY29uZCA9PSBEb3VibGVHcmVhdGVyVGhhbikgeworICAgICAgICAgICAgbV9h
c3NlbWJsZXIuZGNtcHBndChyaWdodCwgbGVmdCk7CisgICAgICAgICAgICByZXR1cm4gYnJhbmNo
VHJ1ZSgpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGNvbmQgPT0gRG91YmxlR3JlYXRlclRo
YW5PckVxdWFsKSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5kY21wcGd0KGxlZnQsIHJpZ2h0
KTsKKyAgICAgICAgICAgIHJldHVybiBicmFuY2hGYWxzZSgpOworICAgICAgICB9CisKKyAgICAg
ICAgaWYgKGNvbmQgPT0gRG91YmxlTGVzc1RoYW4pIHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVy
LmRjbXBwZ3QobGVmdCwgcmlnaHQpOworICAgICAgICAgICAgcmV0dXJuIGJyYW5jaFRydWUoKTsK
KyAgICAgICAgfQorCisgICAgICAgIGlmIChjb25kID09IERvdWJsZUxlc3NUaGFuT3JFcXVhbCkg
eworICAgICAgICAgICAgbV9hc3NlbWJsZXIuZGNtcHBndChyaWdodCwgbGVmdCk7CisgICAgICAg
ICAgICByZXR1cm4gYnJhbmNoRmFsc2UoKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChjb25k
ID09IERvdWJsZUVxdWFsT3JVbm9yZGVyZWQpIHsKKyAgICAgICAgICAgIFJlZ2lzdGVySUQgc2Ny
ID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5sb2FkQ29uc3RhbnQo
MHg3ZmJmZmZmZiwgc2NyYXRjaFJlZzMpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuZGNudmRz
KHJpZ2h0KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnN0c2ZwdWxSZWcoc2NyKTsKKyAgICAg
ICAgICAgIG1fYXNzZW1ibGVyLmNtcGxSZWdSZWcoc2NyYXRjaFJlZzMsIHNjciwgRXF1YWwpOwor
ICAgICAgICAgICAgbV9hc3NlbWJsZXIuZW5zdXJlU3BhY2UobV9hc3NlbWJsZXIubWF4SW5zdHJ1
Y3Rpb25TaXplICsgMjIsIHNpemVvZih1aW50MzJfdCkpOworICAgICAgICAgICAgbV9hc3NlbWJs
ZXIuYnJhbmNoKEJUX09QQ09ERSwgNSk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5kY252ZHMo
bGVmdCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zdHNmcHVsUmVnKHNjcik7CisgICAgICAg
ICAgICBtX2Fzc2VtYmxlci5jbXBsUmVnUmVnKHNjcmF0Y2hSZWczLCBzY3IsIEVxdWFsKTsKKyAg
ICAgICAgICAgIG1fYXNzZW1ibGVyLmJyYW5jaChCVF9PUENPREUsIDEpOworICAgICAgICAgICAg
bV9hc3NlbWJsZXIuZGNtcHBlcShsZWZ0LCByaWdodCk7CisgICAgICAgICAgICByZWxlYXNlU2Ny
YXRjaChzY3IpOworICAgICAgICAgICAgcmV0dXJuIGJyYW5jaFRydWUoKTsKKyAgICAgICAgfQor
CisgICAgICAgIGlmIChjb25kID09IERvdWJsZUdyZWF0ZXJUaGFuT3JVbm9yZGVyZWQpIHsKKyAg
ICAgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgICAgICBt
X2Fzc2VtYmxlci5sb2FkQ29uc3RhbnQoMHg3ZmJmZmZmZiwgc2NyYXRjaFJlZzMpOworICAgICAg
ICAgICAgbV9hc3NlbWJsZXIuZGNudmRzKHJpZ2h0KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVy
LnN0c2ZwdWxSZWcoc2NyKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmNtcGxSZWdSZWcoc2Ny
YXRjaFJlZzMsIHNjciwgRXF1YWwpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuZW5zdXJlU3Bh
Y2UobV9hc3NlbWJsZXIubWF4SW5zdHJ1Y3Rpb25TaXplICsgMjIsIHNpemVvZih1aW50MzJfdCkp
OworICAgICAgICAgICAgbV9hc3NlbWJsZXIuYnJhbmNoKEJUX09QQ09ERSwgNSk7CisgICAgICAg
ICAgICBtX2Fzc2VtYmxlci5kY252ZHMobGVmdCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5z
dHNmcHVsUmVnKHNjcik7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5jbXBsUmVnUmVnKHNjcmF0
Y2hSZWczLCBzY3IsIEVxdWFsKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmJyYW5jaChCVF9P
UENPREUsIDEpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuZGNtcHBndChyaWdodCwgbGVmdCk7
CisgICAgICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgICAgICAgICAgcmV0dXJuIGJy
YW5jaFRydWUoKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChjb25kID09IERvdWJsZUdyZWF0
ZXJUaGFuT3JFcXVhbE9yVW5vcmRlcmVkKSB7CisgICAgICAgICAgICBSZWdpc3RlcklEIHNjciA9
IGNsYWltU2NyYXRjaCgpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIubG9hZENvbnN0YW50KDB4
N2ZiZmZmZmYsIHNjcmF0Y2hSZWczKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmRjbnZkcyhy
aWdodCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zdHNmcHVsUmVnKHNjcik7CisgICAgICAg
ICAgICBtX2Fzc2VtYmxlci5jbXBsUmVnUmVnKHNjcmF0Y2hSZWczLCBzY3IsIEVxdWFsKTsKKyAg
ICAgICAgICAgIG1fYXNzZW1ibGVyLmVuc3VyZVNwYWNlKG1fYXNzZW1ibGVyLm1heEluc3RydWN0
aW9uU2l6ZSArIDIyLCBzaXplb2YodWludDMyX3QpKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVy
LmJyYW5jaChCVF9PUENPREUsIDUpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuZGNudmRzKGxl
ZnQpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuc3RzZnB1bFJlZyhzY3IpOworICAgICAgICAg
ICAgbV9hc3NlbWJsZXIuY21wbFJlZ1JlZyhzY3JhdGNoUmVnMywgc2NyLCBFcXVhbCk7CisgICAg
ICAgICAgICBtX2Fzc2VtYmxlci5icmFuY2goQlRfT1BDT0RFLCAxKTsKKyAgICAgICAgICAgIG1f
YXNzZW1ibGVyLmRjbXBwZ3QobGVmdCwgcmlnaHQpOworICAgICAgICAgICAgcmVsZWFzZVNjcmF0
Y2goc2NyKTsKKyAgICAgICAgICAgIHJldHVybiBicmFuY2hGYWxzZSgpOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKGNvbmQgPT0gRG91YmxlTGVzc1RoYW5PclVub3JkZXJlZCkgeworICAgICAg
ICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgICAgIG1fYXNz
ZW1ibGVyLmxvYWRDb25zdGFudCgweDdmYmZmZmZmLCBzY3JhdGNoUmVnMyk7CisgICAgICAgICAg
ICBtX2Fzc2VtYmxlci5kY252ZHMocmlnaHQpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuc3Rz
ZnB1bFJlZyhzY3IpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuY21wbFJlZ1JlZyhzY3JhdGNo
UmVnMywgc2NyLCBFcXVhbCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5lbnN1cmVTcGFjZSht
X2Fzc2VtYmxlci5tYXhJbnN0cnVjdGlvblNpemUgKyAyMiwgc2l6ZW9mKHVpbnQzMl90KSk7Cisg
ICAgICAgICAgICBtX2Fzc2VtYmxlci5icmFuY2goQlRfT1BDT0RFLCA1KTsKKyAgICAgICAgICAg
IG1fYXNzZW1ibGVyLmRjbnZkcyhsZWZ0KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnN0c2Zw
dWxSZWcoc2NyKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmNtcGxSZWdSZWcoc2NyYXRjaFJl
ZzMsIHNjciwgRXF1YWwpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuYnJhbmNoKEJUX09QQ09E
RSwgMSk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5kY21wcGd0KGxlZnQsIHJpZ2h0KTsKKyAg
ICAgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgICAgICAgICByZXR1cm4gYnJhbmNo
VHJ1ZSgpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGNvbmQgPT0gRG91YmxlTGVzc1RoYW5P
ckVxdWFsT3JVbm9yZGVyZWQpIHsKKyAgICAgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1T
Y3JhdGNoKCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5sb2FkQ29uc3RhbnQoMHg3ZmJmZmZm
Ziwgc2NyYXRjaFJlZzMpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuZGNudmRzKHJpZ2h0KTsK
KyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnN0c2ZwdWxSZWcoc2NyKTsKKyAgICAgICAgICAgIG1f
YXNzZW1ibGVyLmNtcGxSZWdSZWcoc2NyYXRjaFJlZzMsIHNjciwgRXF1YWwpOworICAgICAgICAg
ICAgbV9hc3NlbWJsZXIuZW5zdXJlU3BhY2UobV9hc3NlbWJsZXIubWF4SW5zdHJ1Y3Rpb25TaXpl
ICsgMjIsIHNpemVvZih1aW50MzJfdCkpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuYnJhbmNo
KEJUX09QQ09ERSwgNSk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5kY252ZHMobGVmdCk7Cisg
ICAgICAgICAgICBtX2Fzc2VtYmxlci5zdHNmcHVsUmVnKHNjcik7CisgICAgICAgICAgICBtX2Fz
c2VtYmxlci5jbXBsUmVnUmVnKHNjcmF0Y2hSZWczLCBzY3IsIEVxdWFsKTsKKyAgICAgICAgICAg
IG1fYXNzZW1ibGVyLmJyYW5jaChCVF9PUENPREUsIDEpOworICAgICAgICAgICAgbV9hc3NlbWJs
ZXIuZGNtcHBndChyaWdodCwgbGVmdCk7CisgICAgICAgICAgICByZWxlYXNlU2NyYXRjaChzY3Ip
OworICAgICAgICAgICAgcmV0dXJuIGJyYW5jaEZhbHNlKCk7CisgICAgICAgIH0KKworICAgICAg
ICBBU1NFUlQoY29uZCA9PSBEb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkKTsKKyAgICAgICAgUmVn
aXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9hZENv
bnN0YW50KDB4N2ZiZmZmZmYsIHNjcmF0Y2hSZWczKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuZGNu
dmRzKHJpZ2h0KTsKKyAgICAgICAgbV9hc3NlbWJsZXIuc3RzZnB1bFJlZyhzY3IpOworICAgICAg
ICBtX2Fzc2VtYmxlci5jbXBsUmVnUmVnKHNjcmF0Y2hSZWczLCBzY3IsIEVxdWFsKTsKKyAgICAg
ICAgbV9hc3NlbWJsZXIuZW5zdXJlU3BhY2UobV9hc3NlbWJsZXIubWF4SW5zdHJ1Y3Rpb25TaXpl
ICsgMjIsIHNpemVvZih1aW50MzJfdCkpOworICAgICAgICBtX2Fzc2VtYmxlci5icmFuY2goQlRf
T1BDT0RFLCA1KTsKKyAgICAgICAgbV9hc3NlbWJsZXIuZGNudmRzKGxlZnQpOworICAgICAgICBt
X2Fzc2VtYmxlci5zdHNmcHVsUmVnKHNjcik7CisgICAgICAgIG1fYXNzZW1ibGVyLmNtcGxSZWdS
ZWcoc2NyYXRjaFJlZzMsIHNjciwgRXF1YWwpOworICAgICAgICBtX2Fzc2VtYmxlci5icmFuY2go
QlRfT1BDT0RFLCAxKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuZGNtcHBlcShyaWdodCwgbGVmdCk7
CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgICAgIHJldHVybiBicmFuY2hGYWxz
ZSgpOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoVHJ1ZSgpCisgICAgeworICAgICAgICBtX2Fz
c2VtYmxlci5lbnN1cmVTcGFjZShtX2Fzc2VtYmxlci5tYXhJbnN0cnVjdGlvblNpemUgKyA2LCBz
aXplb2YodWludDMyX3QpKTsKKyAgICAgICAgSnVtcCBtX2p1bXAgPSBKdW1wKG1fYXNzZW1ibGVy
LmplKCkpOworICAgICAgICBtX2Fzc2VtYmxlci5sb2FkQ29uc3RhbnRVblJldXNhYmxlKDB4MCwg
c2NyYXRjaFJlZzMpOworICAgICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKKyAgICAgICAgbV9hc3Nl
bWJsZXIubm9wKCk7CisgICAgICAgIHJldHVybiBtX2p1bXA7CisgICAgfQorCisgICAgSnVtcCBi
cmFuY2hGYWxzZSgpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5lbnN1cmVTcGFjZShtX2Fz
c2VtYmxlci5tYXhJbnN0cnVjdGlvblNpemUgKyA2LCBzaXplb2YodWludDMyX3QpKTsKKyAgICAg
ICAgSnVtcCBtX2p1bXAgPSBKdW1wKG1fYXNzZW1ibGVyLmpuZSgpKTsKKyAgICAgICAgbV9hc3Nl
bWJsZXIubG9hZENvbnN0YW50VW5SZXVzYWJsZSgweDAsIHNjcmF0Y2hSZWczKTsKKyAgICAgICAg
bV9hc3NlbWJsZXIubm9wKCk7CisgICAgICAgIG1fYXNzZW1ibGVyLm5vcCgpOworICAgICAgICBy
ZXR1cm4gbV9qdW1wOworICAgIH0KKworICAgIHZvaWQgc2V0OENvbXBhcmUzMihDb25kaXRpb24g
Y29uZCwgUmVnaXN0ZXJJRCBsZWZ0LCBSZWdpc3RlcklEIHJpZ2h0LCBSZWdpc3RlcklEIGRlc3Qp
CisgICAgeworICAgICAgICBzZXQzMkNvbXBhcmUzMihjb25kLCBsZWZ0LCByaWdodCwgZGVzdCk7
CisgICAgfQorCisgICAgdm9pZCBzZXQ4Q29tcGFyZTMyKENvbmRpdGlvbiBjb25kLCBSZWdpc3Rl
cklEIGxlZnQsIEltbTMyIHJpZ2h0LCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBp
ZiAobGVmdCAhPSBkZXN0KSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5sb2FkQ29uc3RhbnQo
cmlnaHQubV92YWx1ZSwgZGVzdCk7CisgICAgICAgICAgICBzZXQzMkNvbXBhcmUzMihjb25kLCBs
ZWZ0LCBkZXN0LCBkZXN0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAg
ICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIG1fYXNzZW1ibGVy
LmxvYWRDb25zdGFudChyaWdodC5tX3ZhbHVlLCBzY3IpOworICAgICAgICBzZXQzMkNvbXBhcmUz
Mihjb25kLCBsZWZ0LCBzY3IsIGRlc3QpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOwor
ICAgIH0KKworICAgIEp1bXAgYnJhbmNoMzIoQ29uZGl0aW9uIGNvbmQsIEJhc2VJbmRleCBsZWZ0
LCBJbW0zMiByaWdodCkKKyAgICB7CisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3Jh
dGNoKCk7CisgICAgICAgIG1vdmUobGVmdC5pbmRleCwgc2NyKTsKKyAgICAgICAgbHNoaWZ0MzIo
SW1tMzIobGVmdC5zY2FsZSksIHNjcik7CisgICAgICAgIGFkZDMyKGxlZnQuYmFzZSwgc2NyKTsK
KyAgICAgICAgbG9hZDMyKHNjciwgbGVmdC5vZmZzZXQsIHNjcik7CisgICAgICAgIGNvbXBhcmUz
MihyaWdodC5tX3ZhbHVlLCBzY3IsIGNvbmQpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3Ip
OworCisgICAgICAgIGlmIChjb25kID09IE5vdEVxdWFsKQorICAgICAgICAgICAgcmV0dXJuIGJy
YW5jaEZhbHNlKCk7CisgICAgICAgIHJldHVybiBicmFuY2hUcnVlKCk7CisgICAgfQorCisgICAg
dm9pZCBzcXJ0RG91YmxlKEZQUmVnaXN0ZXJJRCBzcmMsIEZQUmVnaXN0ZXJJRCBkZXN0KQorICAg
IHsKKyAgICAgICAgaWYgKGRlc3QgIT0gc3JjKQorICAgICAgICAgICAgbV9hc3NlbWJsZXIuZG1v
dlJlZ1JlZyhzcmMsIGRlc3QpOworICAgICAgICBtX2Fzc2VtYmxlci5kc3FydChkZXN0KTsKKyAg
ICB9CisKKyAgICBKdW1wIGJyYW5jaFRlc3Q4KENvbmRpdGlvbiBjb25kLCBBZGRyZXNzIGFkZHJl
c3MsIEltbTMyIG1hc2sgPSBJbW0zMigtMSkpCisgICAgeworICAgICAgICBSZWdpc3RlcklEIGFk
ZHJlc3NUZW1wUmVnaXN0ZXIgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgbG9hZDgoYWRkcmVz
cywgYWRkcmVzc1RlbXBSZWdpc3Rlcik7CisgICAgICAgIEp1bXAgam1wID0gYnJhbmNoVGVzdDMy
KGNvbmQsIGFkZHJlc3NUZW1wUmVnaXN0ZXIsIG1hc2spOworICAgICAgICByZWxlYXNlU2NyYXRj
aChhZGRyZXNzVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgcmV0dXJuIGptcDsKKyAgICB9CisKKyAg
ICB2b2lkIHNpZ25FeHRlbmQzMlRvUHRyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3Qp
CisgICAgeworICAgICAgICBpZiAoc3JjICE9IGRlc3QpCisgICAgICAgICAgICBtb3ZlKHNyYywg
ZGVzdCk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2g4KENvbmRpdGlvbiBjb25kLCBBZGRyZXNz
IGxlZnQsIEltbTMyIHJpZ2h0KQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCBhZGRyZXNzVGVt
cFJlZ2lzdGVyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIGxvYWQ4KGxlZnQsIGFkZHJlc3NU
ZW1wUmVnaXN0ZXIpOworICAgICAgICBKdW1wIGptcCA9IGJyYW5jaDMyKGNvbmQsIGFkZHJlc3NU
ZW1wUmVnaXN0ZXIsIHJpZ2h0KTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goYWRkcmVzc1RlbXBS
ZWdpc3Rlcik7CisgICAgICAgIHJldHVybiBqbXA7CisgICAgfQorCisgICAgSnVtcCBicmFuY2hU
cnVuY2F0ZURvdWJsZVRvSW50MzIoRlBSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQor
ICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuZnRyY2RybWZwdWwoc3JjKTsKKyAgICAgICAgbV9h
c3NlbWJsZXIuc3RzZnB1bFJlZyhkZXN0KTsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9hZENvbnN0
YW50KDB4N2ZmZmZmZmYsIHNjcmF0Y2hSZWczKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuY21wbFJl
Z1JlZyhkZXN0LCBzY3JhdGNoUmVnMywgRXF1YWwpOworICAgICAgICBtX2Fzc2VtYmxlci5lbnN1
cmVTcGFjZShtX2Fzc2VtYmxlci5tYXhJbnN0cnVjdGlvblNpemUgKyAxNCwgc2l6ZW9mKHVpbnQz
Ml90KSk7CisgICAgICAgIG1fYXNzZW1ibGVyLmJyYW5jaChCVF9PUENPREUsIDIpOworICAgICAg
ICBtX2Fzc2VtYmxlci5hZGRsSW1tOHIoMSwgc2NyYXRjaFJlZzMpOworICAgICAgICBtX2Fzc2Vt
Ymxlci5jbXBsUmVnUmVnKGRlc3QsIHNjcmF0Y2hSZWczLCBFcXVhbCk7CisgICAgICAgIHJldHVy
biBicmFuY2hUcnVlKCk7CisgICAgfQorCisgICAgLy8gU3RhY2sgbWFuaXB1bGF0aW9uIG9wZXJh
dGlvbnMKKworICAgIHZvaWQgcG9wKFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1f
YXNzZW1ibGVyLnBvcFJlZyhkZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIHB1c2goUmVnaXN0ZXJJ
RCBzcmMpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5wdXNoUmVnKHNyYyk7CisgICAgfQor
CisgICAgdm9pZCBwdXNoKEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIGlmICghYWRk
cmVzcy5vZmZzZXQpIHsKKyAgICAgICAgICAgIHB1c2goYWRkcmVzcy5iYXNlKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgoYWRkcmVzcy5vZmZzZXQgPCAw
KSB8fCAoYWRkcmVzcy5vZmZzZXQgPj0gNjQpKSB7CisgICAgICAgICAgICBSZWdpc3RlcklEIHNj
ciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIubG9hZENvbnN0YW50
KGFkZHJlc3Mub2Zmc2V0LCBzY3IpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRkbFJlZ1Jl
ZyhhZGRyZXNzLmJhc2UsIHNjcik7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5tb3ZsTWVtUmVn
KHNjciwgU0g0UmVnaXN0ZXJzOjpzcCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGRsSW1t
OHIoLTQsIFNINFJlZ2lzdGVyczo6c3ApOworICAgICAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2Ny
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIG1fYXNzZW1ibGVy
Lm1vdmxNZW1SZWcoYWRkcmVzcy5vZmZzZXQgPj4gMiwgYWRkcmVzcy5iYXNlLCBTSDRSZWdpc3Rl
cnM6OnNwKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuYWRkbEltbThyKC00LCBTSDRSZWdpc3RlcnM6
OnNwKTsKKyAgICB9CisKKyAgICB2b2lkIHB1c2goSW1tMzIgaW1tKQorICAgIHsKKyAgICAgICAg
UmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9h
ZENvbnN0YW50KGltbS5tX3ZhbHVlLCBzY3IpOworICAgICAgICBwdXNoKHNjcik7CisgICAgICAg
IHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgfQorCisgICAgLy8gUmVnaXN0ZXIgbW92ZSBvcGVy
YXRpb25zCisKKyAgICB2b2lkIG1vdmUoSW1tMzIgaW1tLCBSZWdpc3RlcklEIGRlc3QpCisgICAg
eworICAgICAgICBtX2Fzc2VtYmxlci5sb2FkQ29uc3RhbnQoaW1tLm1fdmFsdWUsIGRlc3QpOwor
ICAgIH0KKworICAgIERhdGFMYWJlbFB0ciBtb3ZlV2l0aFBhdGNoKEltbVB0ciBpbml0aWFsVmFs
dWUsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIERhdGFMYWJlbFB0ciBkYXRhTGFi
ZWwodGhpcyk7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvYWRDb25zdGFudFVuUmV1c2FibGUocmVp
bnRlcnByZXRfY2FzdDx1aW50MzJfdD4oaW5pdGlhbFZhbHVlLm1fdmFsdWUpLCBkZXN0LCB0cnVl
KTsKKyAgICAgICAgcmV0dXJuIGRhdGFMYWJlbDsKKyAgICB9CisKKyAgICB2b2lkIG1vdmUoUmVn
aXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVy
Lm1vdmxSZWdSZWcoc3JjLCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIG1vdmUoSW1tUHRyIGlt
bSwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9hZENvbnN0
YW50KGltbS5hc0ludHB0cigpLCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIGV4dHV3KFJlZ2lz
dGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmV4
dHV3KHNyYywgZHN0KTsKKyAgICB9CisKKyAgICB2b2lkIHNldDMyQ29tcGFyZTMyKENvbmRpdGlv
biBjb25kLCBSZWdpc3RlcklEIGxlZnQsIFJlZ2lzdGVySUQgcmlnaHQsIFJlZ2lzdGVySUQgZGVz
dCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmNtcGxSZWdSZWcocmlnaHQsIGxlZnQsIGNv
bmQpOworICAgICAgICBpZiAoY29uZCAhPSBOb3RFcXVhbCkgeworICAgICAgICAgICAgbV9hc3Nl
bWJsZXIubW92dChkZXN0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAg
ICAgIG1fYXNzZW1ibGVyLmVuc3VyZVNwYWNlKG1fYXNzZW1ibGVyLm1heEluc3RydWN0aW9uU2l6
ZSArIDQpOworICAgICAgICBtX2Fzc2VtYmxlci5tb3ZJbW04KDAsIGRlc3QpOworICAgICAgICBt
X2Fzc2VtYmxlci5icmFuY2goQlRfT1BDT0RFLCAwKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubW92
SW1tOCgxLCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIHNldDMyQ29tcGFyZTMyKENvbmRpdGlv
biBjb25kLCBSZWdpc3RlcklEIGxlZnQsIEltbTMyIHJpZ2h0LCBSZWdpc3RlcklEIGRlc3QpCisg
ICAgeworICAgICAgICBpZiAobGVmdCAhPSBkZXN0KSB7CisgICAgICAgICAgICBtb3ZlKHJpZ2h0
LCBkZXN0KTsKKyAgICAgICAgICAgIHNldDMyQ29tcGFyZTMyKGNvbmQsIGxlZnQsIGRlc3QsIGRl
c3QpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgUmVnaXN0ZXJJ
RCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgbW92ZShyaWdodCwgc2NyKTsKKyAgICAg
ICAgc2V0MzJDb21wYXJlMzIoY29uZCwgbGVmdCwgc2NyLCBkZXN0KTsKKyAgICAgICAgcmVsZWFz
ZVNjcmF0Y2goc2NyKTsKKyAgICB9CisKKyAgICB2b2lkIHNldDMyVGVzdDgoQ29uZGl0aW9uIGNv
bmQsIEFkZHJlc3MgYWRkcmVzcywgSW1tMzIgbWFzaywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsK
KyAgICAgICAgQVNTRVJUKChjb25kID09IFplcm8pIHx8IChjb25kID09IE5vblplcm8pKTsKKwor
ICAgICAgICBsb2FkOChhZGRyZXNzLCBkZXN0KTsKKyAgICAgICAgaWYgKG1hc2subV92YWx1ZSA9
PSAtMSkKKyAgICAgICAgICAgIGNvbXBhcmUzMigwLCBkZXN0LCBjb25kKTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgdGVzdGxJbW0obWFzay5tX3ZhbHVlLCBkZXN0KTsKKyAgICAgICAgaWYg
KGNvbmQgIT0gTm9uWmVybykgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIubW92dChkZXN0KTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIG1fYXNzZW1ibGVyLmVu
c3VyZVNwYWNlKG1fYXNzZW1ibGVyLm1heEluc3RydWN0aW9uU2l6ZSArIDQpOworICAgICAgICBt
X2Fzc2VtYmxlci5tb3ZJbW04KDAsIGRlc3QpOworICAgICAgICBtX2Fzc2VtYmxlci5icmFuY2go
QlRfT1BDT0RFLCAwKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubW92SW1tOCgxLCBkZXN0KTsKKyAg
ICB9CisKKyAgICB2b2lkIGxvYWRQdHJMaW5rUmVnKEltcGxpY2l0QWRkcmVzcyBhZGRyZXNzKQor
ICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAg
bG9hZDMyKGFkZHJlc3MsIHNjcik7CisgICAgICAgIG1fYXNzZW1ibGVyLmxkc3ByKHNjcik7Cisg
ICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgfQorCisgICAgSnVtcCBicmFuY2gzMihD
b25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBsZWZ0LCBSZWdpc3RlcklEIHJpZ2h0KQorICAgIHsK
KyAgICAgICAgbV9hc3NlbWJsZXIuY21wbFJlZ1JlZyhyaWdodCwgbGVmdCwgY29uZCk7CisgICAg
ICAgIC8qIEJUIGxhYmVsID0+IEJGIG9mZgorICAgICAgICAgICBub3AgICAgICAgICBMRFIgcmVn
CisgICAgICAgICAgIG5vcCAgICAgICAgIGJyYWYgQHJlZworICAgICAgICAgICBub3AgICAgICAg
ICBub3AKKyAgICAgICAgICovCisgICAgICAgIGlmIChjb25kID09IE5vdEVxdWFsKQorICAgICAg
ICAgICAgcmV0dXJuIGJyYW5jaEZhbHNlKCk7CisgICAgICAgIHJldHVybiBicmFuY2hUcnVlKCk7
CisgICAgfQorCisgICAgSnVtcCBicmFuY2gzMihDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBs
ZWZ0LCBJbW0zMiByaWdodCkKKyAgICB7CisgICAgICAgIGlmICgoKGNvbmQgPT0gRXF1YWwpIHx8
IChjb25kID09IE5vdEVxdWFsKSkgJiYgIXJpZ2h0Lm1fdmFsdWUpCisgICAgICAgICAgICBtX2Fz
c2VtYmxlci50ZXN0bFJlZ1JlZyhsZWZ0LCBsZWZ0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgY29tcGFyZTMyKHJpZ2h0Lm1fdmFsdWUsIGxlZnQsIGNvbmQpOworCisgICAgICAgIGlmIChj
b25kID09IE5vdEVxdWFsKQorICAgICAgICAgICAgcmV0dXJuIGJyYW5jaEZhbHNlKCk7CisgICAg
ICAgIHJldHVybiBicmFuY2hUcnVlKCk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2gzMihDb25k
aXRpb24gY29uZCwgUmVnaXN0ZXJJRCBsZWZ0LCBBZGRyZXNzIHJpZ2h0KQorICAgIHsKKyAgICAg
ICAgY29tcGFyZTMyKHJpZ2h0Lm9mZnNldCwgcmlnaHQuYmFzZSwgbGVmdCwgY29uZCk7CisgICAg
ICAgIGlmIChjb25kID09IE5vdEVxdWFsKQorICAgICAgICAgICAgcmV0dXJuIGJyYW5jaEZhbHNl
KCk7CisgICAgICAgIHJldHVybiBicmFuY2hUcnVlKCk7CisgICAgfQorCisgICAgSnVtcCBicmFu
Y2gzMihDb25kaXRpb24gY29uZCwgQWRkcmVzcyBsZWZ0LCBSZWdpc3RlcklEIHJpZ2h0KQorICAg
IHsKKyAgICAgICAgY29tcGFyZTMyKHJpZ2h0LCBsZWZ0Lm9mZnNldCwgbGVmdC5iYXNlLCBjb25k
KTsKKyAgICAgICAgaWYgKGNvbmQgPT0gTm90RXF1YWwpCisgICAgICAgICAgICByZXR1cm4gYnJh
bmNoRmFsc2UoKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaFRydWUoKTsKKyAgICB9CisKKyAgICBK
dW1wIGJyYW5jaDMyKENvbmRpdGlvbiBjb25kLCBBZGRyZXNzIGxlZnQsIEltbTMyIHJpZ2h0KQor
ICAgIHsKKyAgICAgICAgY29tcGFyZTMyKHJpZ2h0Lm1fdmFsdWUsIGxlZnQub2Zmc2V0LCBsZWZ0
LmJhc2UsIGNvbmQpOworICAgICAgICBpZiAoY29uZCA9PSBOb3RFcXVhbCkKKyAgICAgICAgICAg
IHJldHVybiBicmFuY2hGYWxzZSgpOworICAgICAgICByZXR1cm4gYnJhbmNoVHJ1ZSgpOworICAg
IH0KKworICAgIEp1bXAgYnJhbmNoMzIoQ29uZGl0aW9uIGNvbmQsIEFic29sdXRlQWRkcmVzcyBs
ZWZ0LCBSZWdpc3RlcklEIHJpZ2h0KQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBj
bGFpbVNjcmF0Y2goKTsKKworICAgICAgICBtb3ZlKEltbTMyKHJlaW50ZXJwcmV0X2Nhc3Q8dWlu
dDMyX3Q+KGxlZnQubV9wdHIpKSwgc2NyKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuY21wbFJlZ1Jl
ZyhyaWdodCwgc2NyLCBjb25kKTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKworICAg
ICAgICBpZiAoY29uZCA9PSBOb3RFcXVhbCkKKyAgICAgICAgICAgIHJldHVybiBicmFuY2hGYWxz
ZSgpOworICAgICAgICByZXR1cm4gYnJhbmNoVHJ1ZSgpOworICAgIH0KKworICAgIEp1bXAgYnJh
bmNoMzIoQ29uZGl0aW9uIGNvbmQsIEFic29sdXRlQWRkcmVzcyBsZWZ0LCBJbW0zMiByaWdodCkK
KyAgICB7CisgICAgICAgIFJlZ2lzdGVySUQgYWRkcmVzc1RlbXBSZWdpc3RlciA9IGNsYWltU2Ny
YXRjaCgpOworCisgICAgICAgIG1fYXNzZW1ibGVyLmxvYWRDb25zdGFudChyZWludGVycHJldF9j
YXN0PHVpbnQzMl90PihsZWZ0Lm1fcHRyKSwgYWRkcmVzc1RlbXBSZWdpc3Rlcik7CisgICAgICAg
IG1fYXNzZW1ibGVyLm1vdmxNZW1SZWcoYWRkcmVzc1RlbXBSZWdpc3RlciwgYWRkcmVzc1RlbXBS
ZWdpc3Rlcik7CisgICAgICAgIGNvbXBhcmUzMihyaWdodC5tX3ZhbHVlLCBhZGRyZXNzVGVtcFJl
Z2lzdGVyLCBjb25kKTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goYWRkcmVzc1RlbXBSZWdpc3Rl
cik7CisKKyAgICAgICAgaWYgKGNvbmQgPT0gTm90RXF1YWwpCisgICAgICAgICAgICByZXR1cm4g
YnJhbmNoRmFsc2UoKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaFRydWUoKTsKKyAgICB9CisKKyAg
ICBKdW1wIGJyYW5jaDE2KENvbmRpdGlvbiBjb25kLCAgQmFzZUluZGV4IGxlZnQsIFJlZ2lzdGVy
SUQgcmlnaHQpCisgICAgeworICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgp
OworCisgICAgICAgIG1vdmUobGVmdC5pbmRleCwgc2NyKTsKKyAgICAgICAgbHNoaWZ0MzIoSW1t
MzIobGVmdC5zY2FsZSksIHNjcik7CisKKyAgICAgICAgaWYgKGxlZnQub2Zmc2V0KQorICAgICAg
ICAgICAgYWRkMzIoSW1tMzIobGVmdC5vZmZzZXQpLCBzY3IpOworICAgICAgICBhZGQzMihsZWZ0
LmJhc2UsIHNjcik7CisgICAgICAgIGxvYWQxNihzY3IsIHNjcik7CisgICAgICAgIGV4dHV3KHNj
ciwgc2NyKTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKworICAgICAgICByZXR1cm4g
YnJhbmNoMzIoY29uZCwgc2NyLCByaWdodCk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2gxNihD
b25kaXRpb24gY29uZCwgQmFzZUluZGV4IGxlZnQsIEltbTMyIHJpZ2h0KQorICAgIHsKKyAgICAg
ICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKworICAgICAgICBtb3ZlKGxlZnQu
aW5kZXgsIHNjcik7CisgICAgICAgIGxzaGlmdDMyKEltbTMyKGxlZnQuc2NhbGUpLCBzY3IpOwor
CisgICAgICAgIGlmIChsZWZ0Lm9mZnNldCkKKyAgICAgICAgICAgIGFkZDMyKEltbTMyKGxlZnQu
b2Zmc2V0KSwgc2NyKTsKKyAgICAgICAgYWRkMzIobGVmdC5iYXNlLCBzY3IpOworICAgICAgICBs
b2FkMTYoc2NyLCBzY3IpOworICAgICAgICBleHR1dyhzY3IsIHNjcik7CisgICAgICAgIFJlZ2lz
dGVySUQgc2NyMSA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBtX2Fzc2VtYmxlci5sb2FkQ29u
c3RhbnQocmlnaHQubV92YWx1ZSwgc2NyMSk7CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7
CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcjEpOworCisgICAgICAgIHJldHVybiBicmFuY2gz
Mihjb25kLCBzY3IsIHNjcjEpOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoVGVzdDMyKENvbmRp
dGlvbiBjb25kLCBSZWdpc3RlcklEIHJlZywgUmVnaXN0ZXJJRCBtYXNrKQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKChjb25kID09IFplcm8pIHx8IChjb25kID09IE5vblplcm8pKTsKKworICAgICAg
ICBtX2Fzc2VtYmxlci50ZXN0bFJlZ1JlZyhyZWcsIG1hc2spOworCisgICAgICAgIGlmIChjb25k
ID09IE5vdEVxdWFsKQorICAgICAgICAgICAgcmV0dXJuIGJyYW5jaEZhbHNlKCk7CisgICAgICAg
IHJldHVybiBicmFuY2hUcnVlKCk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2hUZXN0MzIoQ29u
ZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgcmVnLCBJbW0zMiBtYXNrID0gSW1tMzIoLTEpKQorICAg
IHsKKyAgICAgICAgQVNTRVJUKChjb25kID09IFplcm8pIHx8IChjb25kID09IE5vblplcm8pKTsK
KworICAgICAgICBpZiAobWFzay5tX3ZhbHVlID09IC0xKQorICAgICAgICAgICAgbV9hc3NlbWJs
ZXIudGVzdGxSZWdSZWcocmVnLCByZWcpOworICAgICAgICBlbHNlCisgICAgICAgICAgICB0ZXN0
bEltbShtYXNrLm1fdmFsdWUsIHJlZyk7CisKKyAgICAgICAgaWYgKGNvbmQgPT0gTm90RXF1YWwp
CisgICAgICAgICAgICByZXR1cm4gYnJhbmNoRmFsc2UoKTsKKyAgICAgICAgcmV0dXJuIGJyYW5j
aFRydWUoKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaFRlc3QzMihDb25kaXRpb24gY29uZCwg
QWRkcmVzcyBhZGRyZXNzLCBJbW0zMiBtYXNrID0gSW1tMzIoLTEpKQorICAgIHsKKyAgICAgICAg
QVNTRVJUKChjb25kID09IFplcm8pIHx8IChjb25kID09IE5vblplcm8pKTsKKworICAgICAgICBp
ZiAobWFzay5tX3ZhbHVlID09IC0xKQorICAgICAgICAgICAgY29tcGFyZTMyKDAsIGFkZHJlc3Mu
b2Zmc2V0LCBhZGRyZXNzLmJhc2UsIGNvbmQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICB0
ZXN0SW1tKG1hc2subV92YWx1ZSwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSk7CisKKyAg
ICAgICAgaWYgKGNvbmQgPT0gTm90RXF1YWwpCisgICAgICAgICAgICByZXR1cm4gYnJhbmNoRmFs
c2UoKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaFRydWUoKTsKKyAgICB9CisKKyAgICBKdW1wIGJy
YW5jaFRlc3QzMihDb25kaXRpb24gY29uZCwgQmFzZUluZGV4IGFkZHJlc3MsIEltbTMyIG1hc2sg
PSBJbW0zMigtMSkpCisgICAgeworICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRj
aCgpOworCisgICAgICAgIG1vdmUoYWRkcmVzcy5pbmRleCwgc2NyKTsKKyAgICAgICAgbHNoaWZ0
MzIoSW1tMzIoYWRkcmVzcy5zY2FsZSksIHNjcik7CisgICAgICAgIGFkZDMyKGFkZHJlc3MuYmFz
ZSwgc2NyKTsKKyAgICAgICAgbG9hZDMyKHNjciwgYWRkcmVzcy5vZmZzZXQsIHNjcik7CisKKyAg
ICAgICAgaWYgKG1hc2subV92YWx1ZSA9PSAtMSkKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnRl
c3RsUmVnUmVnKHNjciwgc2NyKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdGVzdGxJbW0o
bWFzay5tX3ZhbHVlLCBzY3IpOworCisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisKKyAg
ICAgICAgaWYgKGNvbmQgPT0gTm90RXF1YWwpCisgICAgICAgICAgICByZXR1cm4gYnJhbmNoRmFs
c2UoKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaFRydWUoKTsKKyAgICB9CisKKyAgICBKdW1wIGp1
bXAoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEp1bXAobV9hc3NlbWJsZXIuam1wKCkpOworICAg
IH0KKworICAgIHZvaWQganVtcChSZWdpc3RlcklEIHRhcmdldCkKKyAgICB7CisgICAgICAgIG1f
YXNzZW1ibGVyLmptcFJlZyh0YXJnZXQpOworICAgIH0KKworICAgIHZvaWQganVtcChBZGRyZXNz
IGFkZHJlc3MpCisgICAgeworICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgp
OworCisgICAgICAgIGlmICgoYWRkcmVzcy5vZmZzZXQgPCAwKSB8fCAoYWRkcmVzcy5vZmZzZXQg
Pj0gNjQpKSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5sb2FkQ29uc3RhbnQoYWRkcmVzcy5v
ZmZzZXQsIHNjcik7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGRsUmVnUmVnKGFkZHJlc3Mu
YmFzZSwgc2NyKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLm1vdmxNZW1SZWcoc2NyLCBzY3Ip
OworICAgICAgICB9IGVsc2UgaWYgKGFkZHJlc3Mub2Zmc2V0KQorICAgICAgICAgICAgbV9hc3Nl
bWJsZXIubW92bE1lbVJlZyhhZGRyZXNzLm9mZnNldCA+PiAyLCBhZGRyZXNzLmJhc2UsIHNjcik7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLm1vdmxNZW1SZWcoYWRkcmVz
cy5iYXNlLCBzY3IpOworICAgICAgICBtX2Fzc2VtYmxlci5qbXBSZWcoc2NyKTsKKworICAgICAg
ICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgIH0KKworICAgIC8vIEFyaXRobWV0aWMgY29udHJv
bCBmbG93IG9wZXJhdGlvbnMKKworICAgIEp1bXAgYnJhbmNoQWRkMzIoQ29uZGl0aW9uIGNvbmQs
IFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBBU1NFUlQo
KGNvbmQgPT0gT3ZlcmZsb3cpIHx8IChjb25kID09IFNpZ25lZCkgfHwgKGNvbmQgPT0gWmVybykg
fHwgKGNvbmQgPT0gTm9uWmVybykpOworCisgICAgICAgIGlmIChjb25kID09IE92ZXJmbG93KSB7
CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGR2bFJlZ1JlZyhzcmMsIGRlc3QpOworICAgICAg
ICAgICAgcmV0dXJuIGJyYW5jaFRydWUoKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChjb25k
ID09IFNpZ25lZCkgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRkbFJlZ1JlZyhzcmMsIGRl
c3QpOworICAgICAgICAgICAgLy8gQ2hlY2sgaWYgZGVzdCBpcyBuZWdhdGl2ZQorICAgICAgICAg
ICAgbV9hc3NlbWJsZXIuY21wcHooZGVzdCk7CisgICAgICAgICAgICByZXR1cm4gYnJhbmNoRmFs
c2UoKTsKKyAgICAgICAgfQorCisgICAgICAgIG1fYXNzZW1ibGVyLmFkZGxSZWdSZWcoc3JjLCBk
ZXN0KTsKKyAgICAgICAgY29tcGFyZTMyKDAsIGRlc3QsIEVxdWFsKTsKKworICAgICAgICBpZiAo
Y29uZCA9PSBOb3RFcXVhbCkKKyAgICAgICAgICAgIHJldHVybiBicmFuY2hGYWxzZSgpOworICAg
ICAgICByZXR1cm4gYnJhbmNoVHJ1ZSgpOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoQWRkMzIo
Q29uZGl0aW9uIGNvbmQsIEltbTMyIGltbSwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKChjb25kID09IE92ZXJmbG93KSB8fCAoY29uZCA9PSBTaWduZWQpIHx8IChjb25k
ID09IFplcm8pIHx8IChjb25kID09IE5vblplcm8pKTsKKworICAgICAgICBtb3ZlKGltbSwgc2Ny
YXRjaFJlZzMpOworICAgICAgICByZXR1cm4gYnJhbmNoQWRkMzIoY29uZCwgc2NyYXRjaFJlZzMs
IGRlc3QpOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoTXVsMzIoQ29uZGl0aW9uIGNvbmQsIFJl
Z2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBBU1NFUlQoKGNv
bmQgPT0gT3ZlcmZsb3cpIHx8IChjb25kID09IFNpZ25lZCkgfHwgKGNvbmQgPT0gWmVybykgfHwg
KGNvbmQgPT0gTm9uWmVybykpOworCisgICAgICAgIGlmIChjb25kID09IE92ZXJmbG93KSB7Cisg
ICAgICAgICAgICBSZWdpc3RlcklEIHNjcjEgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgICAg
IFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxl
ci5kbXVsbFJlZ1JlZyhzcmMsIGRlc3QpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuc3RzbWFj
bChkZXN0KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLm1vdkltbTgoLTMxLCBzY3IpOworICAg
ICAgICAgICAgbV9hc3NlbWJsZXIubW92bFJlZ1JlZyhkZXN0LCBzY3IxKTsKKyAgICAgICAgICAg
IG1fYXNzZW1ibGVyLnNoYVJlZ1JlZyhzY3IxLCBzY3IpOworICAgICAgICAgICAgbV9hc3NlbWJs
ZXIuc3RzbWFjaChzY3IpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuY21wbFJlZ1JlZyhzY3Is
IHNjcjEsIFplcm8pOworICAgICAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyMSk7CisgICAgICAg
ICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgICAgICAgICAgcmV0dXJuIGJyYW5jaEZhbHNl
KCk7CisgICAgICAgIH0KKworICAgICAgICBtX2Fzc2VtYmxlci5pbXVsbFJlZ1JlZyhzcmMsIGRl
c3QpOworICAgICAgICBtX2Fzc2VtYmxlci5zdHNtYWNsKGRlc3QpOworICAgICAgICBpZiAoY29u
ZCA9PSBTaWduZWQpIHsKKyAgICAgICAgICAgIC8vIENoZWNrIGlmIGRlc3QgaXMgbmVnYXRpdmUK
KyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmNtcHB6KGRlc3QpOworICAgICAgICAgICAgcmV0dXJu
IGJyYW5jaEZhbHNlKCk7CisgICAgICAgIH0KKworICAgICAgICBjb21wYXJlMzIoMCwgZGVzdCwg
Y29uZCk7CisKKyAgICAgICAgaWYgKGNvbmQgPT0gTm90RXF1YWwpCisgICAgICAgICAgICByZXR1
cm4gYnJhbmNoRmFsc2UoKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaFRydWUoKTsKKyAgICB9CisK
KyAgICBKdW1wIGJyYW5jaE11bDMyKENvbmRpdGlvbiBjb25kLCBJbW0zMiBpbW0sIFJlZ2lzdGVy
SUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBBU1NFUlQoKGNvbmQgPT0g
T3ZlcmZsb3cpIHx8IChjb25kID09IFNpZ25lZCkgfHwgKGNvbmQgPT0gWmVybykgfHwgKGNvbmQg
PT0gTm9uWmVybykpOworCisgICAgICAgIG1vdmUoaW1tLCBzY3JhdGNoUmVnMyk7CisgICAgICAg
IGlmIChzcmMgIT0gZGVzdCkKKyAgICAgICAgICAgIG1vdmUoc3JjLCBkZXN0KTsKKworICAgICAg
ICByZXR1cm4gYnJhbmNoTXVsMzIoY29uZCwgc2NyYXRjaFJlZzMsIGRlc3QpOworICAgIH0KKwor
ICAgIEp1bXAgYnJhbmNoU3ViMzIoQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgc3JjLCBSZWdp
c3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBBU1NFUlQoKGNvbmQgPT0gT3ZlcmZsb3cpIHx8
IChjb25kID09IFNpZ25lZCkgfHwgKGNvbmQgPT0gWmVybykgfHwgKGNvbmQgPT0gTm9uWmVybykp
OworCisgICAgICAgIGlmIChjb25kID09IE92ZXJmbG93KSB7CisgICAgICAgICAgICBtX2Fzc2Vt
Ymxlci5zdWJ2bFJlZ1JlZyhzcmMsIGRlc3QpOworICAgICAgICAgICAgcmV0dXJuIGJyYW5jaFRy
dWUoKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChjb25kID09IFNpZ25lZCkgeworICAgICAg
ICAgICAgLy8gQ2hlY2sgaWYgZGVzdCBpcyBuZWdhdGl2ZQorICAgICAgICAgICAgbV9hc3NlbWJs
ZXIuc3VibFJlZ1JlZyhzcmMsIGRlc3QpOworICAgICAgICAgICAgY29tcGFyZTMyKDAsIGRlc3Qs
IExlc3NUaGFuKTsKKyAgICAgICAgICAgIHJldHVybiBicmFuY2hUcnVlKCk7CisgICAgICAgIH0K
KworICAgICAgICBzdWIzMihzcmMsIGRlc3QpOworICAgICAgICBjb21wYXJlMzIoMCwgZGVzdCwg
Y29uZCk7CisKKyAgICAgICAgaWYgKGNvbmQgPT0gTm90RXF1YWwpCisgICAgICAgICAgICByZXR1
cm4gYnJhbmNoRmFsc2UoKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaFRydWUoKTsKKyAgICB9CisK
KyAgICBKdW1wIGJyYW5jaFN1YjMyKENvbmRpdGlvbiBjb25kLCBJbW0zMiBpbW0sIFJlZ2lzdGVy
SUQgZGVzdCkKKyAgICB7CisgICAgICAgIEFTU0VSVCgoY29uZCA9PSBPdmVyZmxvdykgfHwgKGNv
bmQgPT0gU2lnbmVkKSB8fCAoY29uZCA9PSBaZXJvKSB8fCAoY29uZCA9PSBOb25aZXJvKSk7CisK
KyAgICAgICAgbW92ZShpbW0sIHNjcmF0Y2hSZWczKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaFN1
YjMyKGNvbmQsIHNjcmF0Y2hSZWczLCBkZXN0KTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaE9y
MzIoQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAg
eworICAgICAgICBBU1NFUlQoKGNvbmQgPT0gU2lnbmVkKSB8fCAoY29uZCA9PSBaZXJvKSB8fCAo
Y29uZCA9PSBOb25aZXJvKSk7CisKKyAgICAgICAgaWYgKGNvbmQgPT0gU2lnbmVkKSB7CisgICAg
ICAgICAgICBvcjMyKHNyYywgZGVzdCk7CisgICAgICAgICAgICBjb21wYXJlMzIoMCwgZGVzdCwg
TGVzc1RoYW4pOworICAgICAgICAgICAgcmV0dXJuIGJyYW5jaFRydWUoKTsKKyAgICAgICAgfQor
CisgICAgICAgIG9yMzIoc3JjLCBkZXN0KTsKKyAgICAgICAgY29tcGFyZTMyKDAsIGRlc3QsIGNv
bmQpOworCisgICAgICAgIGlmIChjb25kID09IE5vdEVxdWFsKQorICAgICAgICAgICAgcmV0dXJu
IGJyYW5jaEZhbHNlKCk7CisgICAgICAgIHJldHVybiBicmFuY2hUcnVlKCk7CisgICAgfQorCisg
ICAgdm9pZCBicmFuY2hDb252ZXJ0RG91YmxlVG9JbnQzMihGUFJlZ2lzdGVySUQgc3JjLCBSZWdp
c3RlcklEIGRlc3QsIEp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIEZQUmVnaXN0ZXJJRCBmcFRlbXAp
CisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5mdHJjZHJtZnB1bChzcmMpOworICAgICAgICBt
X2Fzc2VtYmxlci5zdHNmcHVsUmVnKGRlc3QpOworICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJs
ZShkZXN0LCBmc2NyYXRjaCk7CisgICAgICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoYnJhbmNoRG91
YmxlKERvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQsIGZzY3JhdGNoLCBzcmMpKTsKKworICAgICAg
ICBpZiAoZGVzdCA9PSBTSDRSZWdpc3RlcnM6OnIwKQorICAgICAgICAgICAgbV9hc3NlbWJsZXIu
Y21wRXFJbW1SMCgwLCBkZXN0LCBFcXVhbCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAg
bV9hc3NlbWJsZXIubW92SW1tOCgwLCBzY3JhdGNoUmVnMyk7CisgICAgICAgICAgICBtX2Fzc2Vt
Ymxlci5jbXBsUmVnUmVnKHNjcmF0Y2hSZWczLCBkZXN0LCBFcXVhbCk7CisgICAgICAgIH0KKyAg
ICAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChicmFuY2hUcnVlKCkpOworICAgIH0KKworICAgIHZv
aWQgbmVnMzIoUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5uZWco
ZHN0LCBkc3QpOworICAgIH0KKworICAgIHZvaWQgbm90MzIoUmVnaXN0ZXJJRCBkc3QpCisgICAg
eworICAgICAgICBtX2Fzc2VtYmxlci5ub3RsUmVnKGRzdCwgZHN0KTsKKyAgICB9CisKKyAgICB2
b2lkIHVyc2hpZnQzMihSZWdpc3RlcklEIHNoaWZ0YW1vdW50LCBSZWdpc3RlcklEIGRlc3QpCisg
ICAgeworICAgICAgICBjb21wYXJlMzIoMzIsIHNoaWZ0YW1vdW50LCBFcXVhbCk7CisgICAgICAg
IG1fYXNzZW1ibGVyLmVuc3VyZVNwYWNlKG1fYXNzZW1ibGVyLm1heEluc3RydWN0aW9uU2l6ZSAr
IDQpOworICAgICAgICBtX2Fzc2VtYmxlci5icmFuY2goQlRfT1BDT0RFLCAxKTsKKyAgICAgICAg
bV9hc3NlbWJsZXIubmVnKHNoaWZ0YW1vdW50LCBzaGlmdGFtb3VudCk7CisgICAgICAgIG1fYXNz
ZW1ibGVyLnNobGxSZWdSZWcoZGVzdCwgc2hpZnRhbW91bnQpOworICAgIH0KKworICAgIHZvaWQg
dXJzaGlmdDMyKEltbTMyIGltbSwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgUmVn
aXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9hZENv
bnN0YW50KC0oaW1tLm1fdmFsdWUpLCBzY3IpOworICAgICAgICBtX2Fzc2VtYmxlci5zaGFSZWdS
ZWcoZGVzdCwgc2NyKTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICB9CisKKyAg
ICBDYWxsIGNhbGwoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIENhbGwobV9hc3NlbWJsZXIuY2Fs
bCgpLCBDYWxsOjpMaW5rYWJsZSk7CisgICAgfQorCisgICAgQ2FsbCBuZWFyQ2FsbCgpCisgICAg
eworICAgICAgICByZXR1cm4gQ2FsbChtX2Fzc2VtYmxlci5jYWxsKCksIENhbGw6OkxpbmthYmxl
TmVhcik7CisgICAgfQorCisgICAgQ2FsbCBjYWxsKFJlZ2lzdGVySUQgdGFyZ2V0KQorICAgIHsK
KyAgICAgICAgcmV0dXJuIENhbGwobV9hc3NlbWJsZXIuY2FsbCh0YXJnZXQpLCBDYWxsOjpOb25l
KTsKKyAgICB9CisKKyAgICB2b2lkIGJyZWFrcG9pbnQoKQorICAgIHsKKyAgICAgICAgbV9hc3Nl
bWJsZXIuYmtwdCgpOworICAgICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKKyAgICB9CisKKyAgICBK
dW1wIGJyYW5jaFB0cldpdGhQYXRjaChDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBsZWZ0LCBE
YXRhTGFiZWxQdHImIGRhdGFMYWJlbCwgSW1tUHRyIGluaXRpYWxSaWdodFZhbHVlID0gSW1tUHRy
KDApKQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCBkYXRhVGVtcFJlZ2lzdGVyID0gY2xhaW1T
Y3JhdGNoKCk7CisKKyAgICAgICAgZGF0YUxhYmVsID0gbW92ZVdpdGhQYXRjaChpbml0aWFsUmln
aHRWYWx1ZSwgZGF0YVRlbXBSZWdpc3Rlcik7CisgICAgICAgIG1fYXNzZW1ibGVyLmNtcGxSZWdS
ZWcoZGF0YVRlbXBSZWdpc3RlciwgbGVmdCwgY29uZCk7CisgICAgICAgIHJlbGVhc2VTY3JhdGNo
KGRhdGFUZW1wUmVnaXN0ZXIpOworCisgICAgICAgIGlmIChjb25kID09IE5vdEVxdWFsKQorICAg
ICAgICAgICAgcmV0dXJuIGJyYW5jaEZhbHNlKCk7CisgICAgICAgIHJldHVybiBicmFuY2hUcnVl
KCk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2hQdHJXaXRoUGF0Y2goQ29uZGl0aW9uIGNvbmQs
IEFkZHJlc3MgbGVmdCwgRGF0YUxhYmVsUHRyJiBkYXRhTGFiZWwsIEltbVB0ciBpbml0aWFsUmln
aHRWYWx1ZSA9IEltbVB0cigwKSkKKyAgICB7CisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xh
aW1TY3JhdGNoKCk7CisKKyAgICAgICAgbV9hc3NlbWJsZXIubG9hZENvbnN0YW50KGxlZnQub2Zm
c2V0LCBzY3IpOworICAgICAgICBtX2Fzc2VtYmxlci5hZGRsUmVnUmVnKGxlZnQuYmFzZSwgc2Ny
KTsKKyAgICAgICAgbV9hc3NlbWJsZXIubW92bE1lbVJlZyhzY3IsIHNjcik7CisgICAgICAgIFJl
Z2lzdGVySUQgc2NyMSA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBkYXRhTGFiZWwgPSBtb3Zl
V2l0aFBhdGNoKGluaXRpYWxSaWdodFZhbHVlLCBzY3IxKTsKKyAgICAgICAgbV9hc3NlbWJsZXIu
Y21wbFJlZ1JlZyhzY3IxLCBzY3IsIGNvbmQpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3Ip
OworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IxKTsKKworICAgICAgICBpZiAoY29uZCA9PSBO
b3RFcXVhbCkKKyAgICAgICAgICAgIHJldHVybiBicmFuY2hGYWxzZSgpOworICAgICAgICByZXR1
cm4gYnJhbmNoVHJ1ZSgpOworICAgIH0KKworICAgIHZvaWQgcmV0KCkKKyAgICB7CisgICAgICAg
IG1fYXNzZW1ibGVyLnJldCgpOworICAgICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKKyAgICB9CisK
KyAgICBEYXRhTGFiZWxQdHIgc3RvcmVQdHJXaXRoUGF0Y2goSW1tUHRyIGluaXRpYWxWYWx1ZSwg
SW1wbGljaXRBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBSZWdpc3RlcklEIHNjciA9
IGNsYWltU2NyYXRjaCgpOworICAgICAgICBEYXRhTGFiZWxQdHIgbGFiZWwgPSBtb3ZlV2l0aFBh
dGNoKGluaXRpYWxWYWx1ZSwgc2NyKTsKKyAgICAgICAgc3RvcmUzMihzY3IsIGFkZHJlc3MpOwor
ICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgICAgICByZXR1cm4gbGFiZWw7CisgICAg
fQorCisgICAgRGF0YUxhYmVsUHRyIHN0b3JlUHRyV2l0aFBhdGNoKEltcGxpY2l0QWRkcmVzcyBh
ZGRyZXNzKSB7IHJldHVybiBzdG9yZVB0cldpdGhQYXRjaChJbW1QdHIoMCksIGFkZHJlc3MpOyB9
CisKKyAgICBpbnQgc2l6ZU9mQ29uc3RhbnRQb29sKCkKKyAgICB7CisgICAgICAgIHJldHVybiBt
X2Fzc2VtYmxlci5zaXplT2ZDb25zdGFudFBvb2woKTsKKyAgICB9CisKKyAgICBDYWxsIHRhaWxS
ZWN1cnNpdmVDYWxsKCkKKyAgICB7CisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3Jh
dGNoKCk7CisKKyAgICAgICAgbV9hc3NlbWJsZXIubG9hZENvbnN0YW50VW5SZXVzYWJsZSgweDAs
IHNjciwgdHJ1ZSk7CisgICAgICAgIEp1bXAgbV9qdW1wID0gSnVtcChtX2Fzc2VtYmxlci5qbXAo
c2NyKSk7CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisKKyAgICAgICAgcmV0dXJuIENh
bGw6OmZyb21UYWlsSnVtcChtX2p1bXApOworICAgIH0KKworICAgIENhbGwgbWFrZVRhaWxSZWN1
cnNpdmVDYWxsKEp1bXAgb2xkSnVtcCkKKyAgICB7CisgICAgICAgIG9sZEp1bXAubGluayh0aGlz
KTsKKyAgICAgICAgcmV0dXJuIHRhaWxSZWN1cnNpdmVDYWxsKCk7CisgICAgfQorCitwcml2YXRl
OgorICAgIGZyaWVuZCBjbGFzcyBMaW5rQnVmZmVyOworICAgIGZyaWVuZCBjbGFzcyBSZXBhdGNo
QnVmZmVyOworCisgICAgc3RhdGljIHZvaWQgbGlua0NhbGwodm9pZCosIENhbGwsIEZ1bmN0aW9u
UHRyKTsKKyAgICBzdGF0aWMgdm9pZCByZXBhdGNoQ2FsbChDb2RlTG9jYXRpb25DYWxsLCBDb2Rl
TG9jYXRpb25MYWJlbCk7CisgICAgc3RhdGljIHZvaWQgcmVwYXRjaENhbGwoQ29kZUxvY2F0aW9u
Q2FsbCwgRnVuY3Rpb25QdHIpOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAv
LyBFTkFCTEUoQVNTRU1CTEVSKQorCisjZW5kaWYgLy8gTWFjcm9Bc3NlbWJsZXJTSDRfaApkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9TSDRBc3NlbWJsZXIuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvU0g0QXNzZW1ibGVyLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTcyNmFlOAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvU0g0QXNzZW1ibGVyLmgKQEAgLTAsMCArMSwy
MDY3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTEgU1RNaWNyb2VsZWN0cm9uaWNz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2lmbmRlZiBTSDRBc3NlbWJsZXJfaAorI2RlZmluZSBTSDRBc3NlbWJsZXJfaAor
CisjaWYgRU5BQkxFKEFTU0VNQkxFUikgJiYgQ1BVKFNINCkKKworI2luY2x1ZGUgIkFzc2VtYmxl
ckJ1ZmZlci5oIgorI2luY2x1ZGUgIkFzc2VtYmxlckJ1ZmZlcldpdGhDb25zdGFudFBvb2wuaCIK
KyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDx3dGYv
QXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworI2lmbmRlZiBOREVCVUcK
KyNkZWZpbmUgU0g0X0FTU0VNQkxFUl9UUkFDSU5HCisjZW5kaWYKKworbmFtZXNwYWNlIEpTQyB7
Cit0eXBlZGVmIHVpbnQxNl90IFNINFdvcmQ7CisKK2VudW0geworICAgIElOVkFMSURfT1BDT0RF
ID0gMHhmZmZmLAorICAgIEFERF9PUENPREUgPSAweDMwMGMsCisgICAgQURESU1NX09QQ09ERSA9
IDB4NzAwMCwKKyAgICBBRERDX09QQ09ERSA9IDB4MzAwZSwKKyAgICBBRERWX09QQ09ERSA9IDB4
MzAwZiwKKyAgICBBTkRfT1BDT0RFID0gMHgyMDA5LAorICAgIEFORElNTV9PUENPREUgPSAweGM5
MDAsCisgICAgRElWMF9PUENPREUgPSAweDIwMDcsCisgICAgRElWMV9PUENPREUgPSAweDMwMDQs
CisgICAgQkZfT1BDT0RFID0gMHg4YjAwLAorICAgIEJGU19PUENPREUgPSAweDhmMDAsCisgICAg
QlJBX09QQ09ERSA9IDB4YTAwMCwKKyAgICBCUkFGX09QQ09ERSA9IDB4MDAyMywKKyAgICBOT1Bf
T1BDT0RFID0gMHgwMDA5LAorICAgIEJTUl9PUENPREUgPSAweGIwMDAsCisgICAgUlRTX09QQ09E
RSA9IDB4MDAwYiwKKyAgICBCVF9PUENPREUgPSAweDg5MDAsCisgICAgQlRTX09QQ09ERSA9IDB4
OGQwMCwKKyAgICBCU1JGX09QQ09ERSA9IDB4MDAwMywKKyAgICBCUktfT1BDT0RFID0gMHgwMDNi
LAorICAgIEZUUkNfT1BDT0RFID0gMHhmMDNkLAorICAgIENNUEVRX09QQ09ERSA9IDB4MzAwMCwK
KyAgICBDTVBFUUlNTV9PUENPREUgPSAweDg4MDAsCisgICAgQ01QR0VfT1BDT0RFID0gMHgzMDAz
LAorICAgIENNUEdUX09QQ09ERSA9IDB4MzAwNywKKyAgICBDTVBISV9PUENPREUgPSAweDMwMDYs
CisgICAgQ01QSFNfT1BDT0RFID0gMHgzMDAyLAorICAgIENNUFBMX09QQ09ERSA9IDB4NDAxNSwK
KyAgICBDTVBQWl9PUENPREUgPSAweDQwMTEsCisgICAgQ01QU1RSX09QQ09ERSA9IDB4MjAwYywK
KyAgICBEVF9PUENPREUgPSAweDQwMTAsCisgICAgRkNNUEVRX09QQ09ERSA9IDB4ZjAwNCwKKyAg
ICBGQ01QR1RfT1BDT0RFID0gMHhmMDA1LAorICAgIEZNT1ZfT1BDT0RFID0gMHhmMDBjLAorICAg
IEZBRERfT1BDT0RFID0gMHhmMDAwLAorICAgIEZNVUxfT1BDT0RFID0gMHhmMDAyLAorICAgIEZT
VUJfT1BDT0RFID0gMHhmMDAxLAorICAgIEZESVZfT1BDT0RFID0gMHhmMDAzLAorICAgIEZORUdf
T1BDT0RFID0gMHhmMDRkLAorICAgIEpNUF9PUENPREUgPSAweDQwMmIsCisgICAgSlNSX09QQ09E
RSA9IDB4NDAwYiwKKyAgICBMRFNQUl9PUENPREUgPSAweDQwMmEsCisgICAgTERTTFBSX09QQ09E
RSA9IDB4NDAyNiwKKyAgICBNT1ZfT1BDT0RFID0gMHg2MDAzLAorICAgIE1PVklNTV9PUENPREUg
PSAweGUwMDAsCisgICAgTU9WQl9XUklURV9STl9PUENPREUgPSAweDIwMDAsCisgICAgTU9WQl9X
UklURV9STkRFQ19PUENPREUgPSAweDIwMDQsCisgICAgTU9WQl9XUklURV9SMFJOX09QQ09ERSA9
IDB4MDAwNCwKKyAgICBNT1ZCX1dSSVRFX09GRkdCUl9PUENPREUgPSAweGMwMDAsCisgICAgTU9W
Ql9XUklURV9PRkZSTl9PUENPREUgPSAweDgwMDAsCisgICAgTU9WQl9SRUFEX1JNX09QQ09ERSA9
IDB4NjAwMCwKKyAgICBNT1ZCX1JFQURfUk1JTkNfT1BDT0RFID0gMHg2MDA0LAorICAgIE1PVkJf
UkVBRF9SMFJNX09QQ09ERSA9IDB4MDAwYywKKyAgICBNT1ZCX1JFQURfT0ZGR0JSX09QQ09ERSA9
IDB4YzQwMCwKKyAgICBNT1ZCX1JFQURfT0ZGUk1fT1BDT0RFID0gMHg4NDAwLAorICAgIE1PVkxf
V1JJVEVfUk5fT1BDT0RFID0gMHgyMDAyLAorICAgIE1PVkxfV1JJVEVfUk5ERUNfT1BDT0RFID0g
MHgyMDA2LAorICAgIE1PVkxfV1JJVEVfUjBSTl9PUENPREUgPSAweDAwMDYsCisgICAgTU9WTF9X
UklURV9PRkZHQlJfT1BDT0RFID0gMHhjMjAwLAorICAgIE1PVkxfV1JJVEVfT0ZGUk5fT1BDT0RF
ID0gMHgxMDAwLAorICAgIE1PVkxfUkVBRF9STV9PUENPREUgPSAweDYwMDIsCisgICAgTU9WTF9S
RUFEX1JNSU5DX09QQ09ERSA9IDB4NjAwNiwKKyAgICBNT1ZMX1JFQURfUjBSTV9PUENPREUgPSAw
eDAwMGUsCisgICAgTU9WTF9SRUFEX09GRkdCUl9PUENPREUgPSAweGM2MDAsCisgICAgTU9WTF9S
RUFEX09GRlBDX09QQ09ERSA9IDB4ZDAwMCwKKyAgICBNT1ZMX1JFQURfT0ZGUk1fT1BDT0RFID0g
MHg1MDAwLAorICAgIE1PVldfV1JJVEVfUk5fT1BDT0RFID0gMHgyMDAxLAorICAgIE1PVldfUkVB
RF9STV9PUENPREUgPSAweDYwMDEsCisgICAgTU9WV19SRUFEX1IwUk1fT1BDT0RFID0gMHgwMDBk
LAorICAgIE1PVldfUkVBRF9PRkZSTV9PUENPREUgPSAweDg1MDAsCisgICAgTU9WV19SRUFEX09G
RlBDX09QQ09ERSA9IDB4OTAwMCwKKyAgICBNT1ZBX1JFQURfT0ZGUENfT1BDT0RFID0gMHhjNzAw
LAorICAgIE1PVlRfT1BDT0RFID0gMHgwMDI5LAorICAgIE1VTExfT1BDT0RFID0gMHgwMDA3LAor
ICAgIERNVUxMX0xfT1BDT0RFID0gMHgzMDA1LAorICAgIFNUU01BQ0xfT1BDT0RFID0gMHgwMDFh
LAorICAgIFNUU01BQ0hfT1BDT0RFID0gMHgwMDBhLAorICAgIERNVUxTTF9PUENPREUgPSAweDMw
MGQsCisgICAgTkVHX09QQ09ERSA9IDB4NjAwYiwKKyAgICBORUdDX09QQ09ERSA9IDB4NjAwYSwK
KyAgICBOT1RfT1BDT0RFID0gMHg2MDA3LAorICAgIE9SX09QQ09ERSA9IDB4MjAwYiwKKyAgICBP
UklNTV9PUENPREUgPSAweGNiMDAsCisgICAgT1JCSU1NX09QQ09ERSA9IDB4Y2YwMCwKKyAgICBT
RVRTX09QQ09ERSA9IDB4MDA1OCwKKyAgICBTRVRUX09QQ09ERSA9IDB4MDAxOCwKKyAgICBTSEFE
X09QQ09ERSA9IDB4NDAwYywKKyAgICBTSEFMX09QQ09ERSA9IDB4NDAyMCwKKyAgICBTSEFSX09Q
Q09ERSA9IDB4NDAyMSwKKyAgICBTSExEX09QQ09ERSA9IDB4NDAwZCwKKyAgICBTSExMX09QQ09E
RSA9IDB4NDAwMCwKKyAgICBTSExMMl9PUENPREUgPSAweDQwMDgsCisgICAgU0hMTDhfT1BDT0RF
ID0gMHg0MDE4LAorICAgIFNITEwxNl9PUENPREUgPSAweDQwMjgsCisgICAgU0hMUl9PUENPREUg
PSAweDQwMDEsCisgICAgU0hMUjJfT1BDT0RFID0gMHg0MDA5LAorICAgIFNITFI4X09QQ09ERSA9
IDB4NDAxOSwKKyAgICBTSExSMTZfT1BDT0RFID0gMHg0MDI5LAorICAgIFNUU1BSX09QQ09ERSA9
IDB4MDAyYSwKKyAgICBTVFNMUFJfT1BDT0RFID0gMHg0MDIyLAorICAgIEZMT0FUX09QQ09ERSA9
IDB4ZjAyZCwKKyAgICBTVUJfT1BDT0RFID0gMHgzMDA4LAorICAgIFNVQkNfT1BDT0RFID0gMHgz
MDBhLAorICAgIFNVQlZfT1BDT0RFID0gMHgzMDBiLAorICAgIFRTVF9PUENPREUgPSAweDIwMDgs
CisgICAgVFNUSU1NX09QQ09ERSA9IDB4YzgwMCwKKyAgICBUU1RCX09QQ09ERSA9IDB4Y2MwMCwK
KyAgICBFWFRVV19PUENPREUgPSAweDYwMGQsCisgICAgWE9SX09QQ09ERSA9IDB4MjAwYSwKKyAg
ICBYT1JJTU1fT1BDT0RFID0gMHhjYTAwLAorICAgIFhPUkJfT1BDT0RFID0gMHhjZTAwLAorICAg
IEZNT1ZTX1JFQURfUk1fSU5DX09QQ09ERSA9IDB4ZjAwOSwKKyAgICBGTU9WU19SRUFEX1JNX09Q
Q09ERSA9IDB4ZjAwOCwKKyAgICBGTU9WU19SRUFEX1IwUk1fT1BDT0RFID0gMHhmMDA2LAorICAg
IEZNT1ZTX1dSSVRFX1JOX09QQ09ERSA9IDB4ZjAwYSwKKyAgICBGTU9WU19XUklURV9STl9ERUNf
T1BDT0RFID0gMHhmMDBiLAorICAgIEZNT1ZTX1dSSVRFX1IwUk5fT1BDT0RFID0gMHhmMDA3LAor
ICAgIEZDTlZEU19EUk1fRlBVTF9PUENPREUgPSAweGYwYmQsCisgICAgTERTX1JNX0ZQVUxfT1BD
T0RFID0gMHg0MDVhLAorICAgIEZMRFNfRlJNX0ZQVUxfT1BDT0RFID0gMHhmMDFkLAorICAgIFNU
U19GUFVMX1JOX09QQ09ERSA9IDB4MDA1YSwKKyAgICBGU1RTX0ZQVUxfRlJOX09QQ09ERSA9IDB4
RjAwZCwKKyAgICBMRFNGUFNDUl9PUENPREUgPSAweDQwNmEsCisgICAgU1RTRlBTQ1JfT1BDT0RF
ID0gMHgwMDZhLAorICAgIExEU1JNRlBVTF9PUENPREUgPSAweDQwNWEsCisgICAgRlNUU0ZQVUxG
Uk5fT1BDT0RFID0gMHhmMDBkLAorICAgIEZTUVJUX09QQ09ERSA9IDB4ZjA2ZCwKKyAgICBGU0NI
R19PUENPREUgPSAweGYzZmQsCisgICAgQ0xSVF9PUENPREUgPSA4LAorfTsKKworbmFtZXNwYWNl
IFNINFJlZ2lzdGVycyB7Cit0eXBlZGVmIGVudW0geworICAgIHIwLAorICAgIHIxLAorICAgIHIy
LAorICAgIHIzLAorICAgIHI0LAorICAgIHI1LAorICAgIHI2LAorICAgIHI3LAorICAgIHI4LAor
ICAgIHI5LAorICAgIHIxMCwKKyAgICByMTEsCisgICAgcjEyLAorICAgIHIxMywKKyAgICByMTQs
IGZwID0gcjE0LAorICAgIHIxNSwgc3AgPSByMTUsCisgICAgcGMsCisgICAgcHIsCit9IFJlZ2lz
dGVySUQ7CisKK3R5cGVkZWYgZW51bSB7CisgICAgZnIwLCBkcjAgPSBmcjAsCisgICAgZnIxLAor
ICAgIGZyMiwgZHIyID0gZnIyLAorICAgIGZyMywKKyAgICBmcjQsIGRyNCA9IGZyNCwKKyAgICBm
cjUsCisgICAgZnI2LCBkcjYgPSBmcjYsCisgICAgZnI3LAorICAgIGZyOCwgZHI4ID0gZnI4LAor
ICAgIGZyOSwKKyAgICBmcjEwLCBkcjEwID0gZnIxMCwKKyAgICBmcjExLAorICAgIGZyMTIsIGRy
MTIgPSBmcjEyLAorICAgIGZyMTMsCisgICAgZnIxNCwgZHIxNCA9IGZyMTQsCisgICAgZnIxNSwK
K30gRlBSZWdpc3RlcklEOworfQorCitpbmxpbmUgdWludDE2X3QgZ2V0T3Bjb2RlR3JvdXAxKHVp
bnQxNl90IG9wYywgaW50IHJtLCBpbnQgcm4pCit7CisgICAgcmV0dXJuIChvcGMgfCAoKHJtICYg
MHhmKSA8PCA4KSB8ICgocm4gJiAweGYpIDw8IDQpKTsKK30KKworaW5saW5lIHVpbnQxNl90IGdl
dE9wY29kZUdyb3VwMih1aW50MTZfdCBvcGMsIGludCBybSkKK3sKKyAgICByZXR1cm4gKG9wYyB8
ICgocm0gJiAweGYpIDw8IDgpKTsKK30KKworaW5saW5lIHVpbnQxNl90IGdldE9wY29kZUdyb3Vw
Myh1aW50MTZfdCBvcGMsIGludCBybSwgaW50IHJuKQoreworICAgIHJldHVybiAob3BjIHwgKChy
bSAmIDB4ZikgPDwgOCkgfCAocm4gJiAweGZmKSk7Cit9CisKK2lubGluZSB1aW50MTZfdCBnZXRP
cGNvZGVHcm91cDQodWludDE2X3Qgb3BjLCBpbnQgcm0sIGludCBybiwgaW50IG9mZnNldCkKK3sK
KyAgICByZXR1cm4gKG9wYyB8ICgocm0gJiAweGYpIDw8IDgpIHwgKChybiAmIDB4ZikgPDwgNCkg
fCAob2Zmc2V0ICYgMHhmKSk7Cit9CisKK2lubGluZSB1aW50MTZfdCBnZXRPcGNvZGVHcm91cDUo
dWludDE2X3Qgb3BjLCBpbnQgcm0pCit7CisgICAgcmV0dXJuIChvcGMgfCAocm0gJiAweGZmKSk7
Cit9CisKK2lubGluZSB1aW50MTZfdCBnZXRPcGNvZGVHcm91cDYodWludDE2X3Qgb3BjLCBpbnQg
cm0pCit7CisgICAgcmV0dXJuIChvcGMgfCAocm0gJiAweGZmZikpOworfQorCitpbmxpbmUgdWlu
dDE2X3QgZ2V0T3Bjb2RlR3JvdXA3KHVpbnQxNl90IG9wYywgaW50IHJtKQoreworICAgIHJldHVy
biAob3BjIHwgKChybSAmIDB4NykgPDwgOSkpOworfQorCitpbmxpbmUgdWludDE2X3QgZ2V0T3Bj
b2RlR3JvdXA4KHVpbnQxNl90IG9wYywgaW50IHJtLCBpbnQgcm4pCit7CisgICAgcmV0dXJuIChv
cGMgfCAoKHJtICYgMHg3KSA8PCA5KSB8ICgocm4gJiAweDcpIDw8IDUpKTsKK30KKworaW5saW5l
IHVpbnQxNl90IGdldE9wY29kZUdyb3VwOSh1aW50MTZfdCBvcGMsIGludCBybSwgaW50IHJuKQor
eworICAgIHJldHVybiAob3BjIHwgKChybSAmIDB4ZikgPDwgOCkgfCAoKHJuICYgMHg3KSA8PCA1
KSk7Cit9CisKK2lubGluZSB1aW50MTZfdCBnZXRPcGNvZGVHcm91cDEwKHVpbnQxNl90IG9wYywg
aW50IHJtLCBpbnQgcm4pCit7CisgICAgcmV0dXJuIChvcGMgfCAoKHJtICYgMHg3KSA8PCA5KSB8
ICgocm4gJiAweGYpIDw8IDQpKTsKK30KKworaW5saW5lIHVpbnQxNl90IGdldE9wY29kZUdyb3Vw
MTEodWludDE2X3Qgb3BjLCBpbnQgcm0sIGludCBybikKK3sKKyAgICByZXR1cm4gKG9wYyB8ICgo
cm0gJiAweGYpIDw8IDQpIHwgKHJuICYgMHhmKSk7Cit9CisKK2lubGluZSB1aW50MTZfdCBnZXRS
bih1aW50MTZfdCB4KQoreworICAgIHJldHVybiAoKHggJiAweGYwMCkgPj4gOCk7Cit9CisKK2lu
bGluZSB1aW50MTZfdCBnZXRSbSh1aW50MTZfdCB4KQoreworICAgIHJldHVybiAoKHggJiAweGYw
KSA+PiA0KTsKK30KKworaW5saW5lIHVpbnQxNl90IGdldERpc3AodWludDE2X3QgeCkKK3sKKyAg
ICByZXR1cm4gKHggJiAweGYpOworfQorCitpbmxpbmUgdWludDE2X3QgZ2V0SW1tOCh1aW50MTZf
dCB4KQoreworICAgIHJldHVybiAoeCAmIDB4ZmYpOworfQorCitpbmxpbmUgdWludDE2X3QgZ2V0
SW1tMTIodWludDE2X3QgeCkKK3sKKyAgICByZXR1cm4gKHggJiAweGZmZik7Cit9CisKK2lubGlu
ZSB1aW50MTZfdCBnZXREUm4odWludDE2X3QgeCkKK3sKKyAgICByZXR1cm4gKCh4ICYgMHhlMDAp
ID4+IDkpOworfQorCitpbmxpbmUgdWludDE2X3QgZ2V0RFJtKHVpbnQxNl90IHgpCit7CisgICAg
cmV0dXJuICgoeCAmIDB4ZTApID4+IDUpOworfQorCitjbGFzcyBTSDRBc3NlbWJsZXIgeworcHVi
bGljOgorICAgIHR5cGVkZWYgU0g0UmVnaXN0ZXJzOjpSZWdpc3RlcklEIFJlZ2lzdGVySUQ7Cisg
ICAgdHlwZWRlZiBTSDRSZWdpc3RlcnM6OkZQUmVnaXN0ZXJJRCBGUFJlZ2lzdGVySUQ7CisgICAg
dHlwZWRlZiBBc3NlbWJsZXJCdWZmZXJXaXRoQ29uc3RhbnRQb29sPDUxMiwgNCwgMiwgU0g0QXNz
ZW1ibGVyPiBTSDRCdWZmZXI7CisgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgc2NyYXRjaFJl
ZzEgPSBTSDRSZWdpc3RlcnM6OnIzOworICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIHNjcmF0
Y2hSZWcyID0gU0g0UmVnaXN0ZXJzOjpyMTE7CisgICAgc3RhdGljIGNvbnN0IHVpbnQzMl90IG1h
eEluc3RydWN0aW9uU2l6ZSA9IDE2OworCisgICAgZW51bSB7CisgICAgICAgIHBhZEZvckFsaWdu
OCA9IDB4MDAsCisgICAgICAgIHBhZEZvckFsaWduMTYgPSAweDAwMDksCisgICAgICAgIHBhZEZv
ckFsaWduMzIgPSAweDAwMDkwMDA5LAorICAgIH07CisKKyAgICBTSDRBc3NlbWJsZXIoKQorICAg
IHsKKyAgICAgICAgbV9jbGFpbXNjcmF0Y2hSZWcgPSAweDA7CisgICAgfQorCisgICAgLy8gU0g0
IGNvbmRpdGlvbiBjb2RlcworICAgIHR5cGVkZWYgZW51bSB7CisgICAgICAgIEVRID0gMHgwLCAv
LyBFcXVhbAorICAgICAgICBORSA9IDB4MSwgLy8gTm90IEVxdWFsCisgICAgICAgIEhTID0gMHgy
LCAvLyBVbnNpZ2VuZCBHcmVhdGVyIFRoYW4gZXF1YWwKKyAgICAgICAgSEkgPSAweDMsIC8vIFVu
c2lnZW5kIEdyZWF0ZXIgVGhhbgorICAgICAgICBMUyA9IDB4NCwgLy8gVW5zaWdlbmQgTG93ZXIg
b3IgU2FtZQorICAgICAgICBMSSA9IDB4NSwgLy8gVW5zaWdlbmQgTG93ZXIKKyAgICAgICAgR0Ug
PSAweDYsIC8vIEdyZWF0ZXIgb3IgRXF1YWwKKyAgICAgICAgTFQgPSAweDcsIC8vIExlc3MgVGhh
bgorICAgICAgICBHVCA9IDB4OCwgLy8gR3JlYXRlciBUaGFuCisgICAgICAgIExFID0gMHg5LCAv
LyBMZXNzIG9yIEVxdWFsCisgICAgICAgIE9GID0gMHhhLCAvLyBPdmVyRmxvdworICAgICAgICBT
SSA9IDB4YiwgLy8gU2lnbmVkCisgICAgICAgIEVRVT0gMHhjLCAvLyBFcXVhbCBvciB1bm9yZGVy
ZWQoTmFOKQorICAgICAgICBORVU9IDB4ZCwKKyAgICAgICAgR1RVPSAweGUsCisgICAgICAgIEdF
VT0gMHhmLAorICAgICAgICBMVFU9IDB4MTAsCisgICAgICAgIExFVT0gMHgxMSwKKyAgICB9IENv
bmRpdGlvbjsKKworICAgIC8vIE9wYXF1ZSBsYWJlbCB0eXBlcworcHVibGljOgorICAgIGNsYXNz
IEptcFNyYyB7CisgICAgICAgIGZyaWVuZCBjbGFzcyBTSDRBc3NlbWJsZXI7CisgICAgcHVibGlj
OgorICAgICAgICBKbXBTcmMoKQorICAgICAgICAgICAgOiBtX29mZnNldCgtMSkKKyAgICAgICAg
eworICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBKbXBTcmMoaW50IG9mZnNldCkK
KyAgICAgICAgICAgIDogbV9vZmZzZXQob2Zmc2V0KQorICAgICAgICB7CisgICAgICAgIH0KKwor
ICAgICAgICBpbnQgbV9vZmZzZXQ7CisgICAgfTsKKworICAgIGNsYXNzIEptcERzdCB7CisgICAg
ICAgIGZyaWVuZCBjbGFzcyBTSDRBc3NlbWJsZXI7CisgICAgcHVibGljOgorICAgICAgICBKbXBE
c3QoKQorICAgICAgICAgICAgOiBtX29mZnNldCgtMSkKKyAgICAgICAgICAgICwgbV91c2VkKGZh
bHNlKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBib29sIGlzVXNlZCgpIGNvbnN0
IHsgcmV0dXJuIG1fdXNlZDsgfQorICAgICAgICBib29sIGlzU2V0KCkgY29uc3QgeyByZXR1cm4g
KG1fb2Zmc2V0ICE9IC0xKTsgfQorICAgICAgICB2b2lkIHVzZWQoKSB7IG1fdXNlZCA9IHRydWU7
IH0KKworICAgIHByaXZhdGU6CisgICAgICAgIEptcERzdChpbnQgb2Zmc2V0KQorICAgICAgICAg
ICAgOiBtX29mZnNldChvZmZzZXQpCisgICAgICAgICAgICAsIG1fdXNlZChmYWxzZSkKKyAgICAg
ICAgeworICAgICAgICAgICAgQVNTRVJUKG1fb2Zmc2V0ID09IG9mZnNldCk7CisgICAgICAgIH0K
KworICAgICAgICBpbnQgbV9vZmZzZXQgOiAzMTsKKyAgICAgICAgaW50IG1fdXNlZCA6IDE7Cisg
ICAgfTsKKworICAgIGJvb2wgaXNJbW1lZGlhdGUoaW50IGNvbnN0YW50KQorICAgIHsKKyAgICAg
ICAgcmV0dXJuICgoY29uc3RhbnQgPD0gMTI3KSAmJiAoY29uc3RhbnQgPj0gLTEyOCkpOworICAg
IH0KKworICAgIFJlZ2lzdGVySUQgY2xhaW1TY3JhdGNoKCkKKyAgICB7CisgICAgICAgIEFTU0VS
VCgobV9jbGFpbXNjcmF0Y2hSZWcgIT0gMHgzKSk7CisKKyAgICAgICAgaWYgKCEobV9jbGFpbXNj
cmF0Y2hSZWcgJiAweDEpKSB7CisgICAgICAgICAgICBtX2NsYWltc2NyYXRjaFJlZyA9IChtX2Ns
YWltc2NyYXRjaFJlZyB8IDB4MSk7CisgICAgICAgICAgICByZXR1cm4gc2NyYXRjaFJlZzE7Cisg
ICAgICAgIH0KKworICAgICAgICBtX2NsYWltc2NyYXRjaFJlZyA9IChtX2NsYWltc2NyYXRjaFJl
ZyB8IDB4Mik7CisgICAgICAgIHJldHVybiBzY3JhdGNoUmVnMjsKKyAgICB9CisKKyAgICB2b2lk
IHJlbGVhc2VTY3JhdGNoKFJlZ2lzdGVySUQgc2NyYXRjaFIpCisgICAgeworICAgICAgICBpZiAo
c2NyYXRjaFIgPT0gc2NyYXRjaFJlZzEpCisgICAgICAgICAgICBtX2NsYWltc2NyYXRjaFJlZyA9
IChtX2NsYWltc2NyYXRjaFJlZyAmIDB4Mik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1f
Y2xhaW1zY3JhdGNoUmVnID0gKG1fY2xhaW1zY3JhdGNoUmVnICYgMHgxKTsKKyAgICB9CisKKyAg
ICAvLyBTdGFjayBvcGVyYXRpb25zCisKKyAgICB2b2lkIHB1c2hSZWcoUmVnaXN0ZXJJRCByZWcp
CisgICAgeworICAgICAgICBpZiAocmVnID09IFNINFJlZ2lzdGVyczo6cHIpIHsKKyAgICAgICAg
ICAgIG9uZVNob3J0T3AoZ2V0T3Bjb2RlR3JvdXAyKFNUU0xQUl9PUENPREUsIFNINFJlZ2lzdGVy
czo6c3ApKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIG9uZVNo
b3J0T3AoZ2V0T3Bjb2RlR3JvdXAxKE1PVkxfV1JJVEVfUk5ERUNfT1BDT0RFLCBTSDRSZWdpc3Rl
cnM6OnNwLCByZWcpKTsKKyAgICB9CisKKyAgICB2b2lkIHBvcFJlZyhSZWdpc3RlcklEIHJlZykK
KyAgICB7CisgICAgICAgIGlmIChyZWcgPT0gU0g0UmVnaXN0ZXJzOjpwcikgeworICAgICAgICAg
ICAgb25lU2hvcnRPcChnZXRPcGNvZGVHcm91cDIoTERTTFBSX09QQ09ERSwgU0g0UmVnaXN0ZXJz
OjpzcCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgb25lU2hv
cnRPcChnZXRPcGNvZGVHcm91cDEoTU9WTF9SRUFEX1JNSU5DX09QQ09ERSwgcmVnLCBTSDRSZWdp
c3RlcnM6OnNwKSk7CisgICAgfQorCisgICAgdm9pZCBtb3Z0KFJlZ2lzdGVySUQgZHN0KQorICAg
IHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXAyKE1PVlRfT1BDT0RFLCBk
c3QpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgLy8gQXJpdGhtZXRp
YyBvcGVyYXRpb25zCisKKyAgICB2b2lkIGFkZGxSZWdSZWcoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lz
dGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXAx
KEFERF9PUENPREUsIGRzdCwgc3JjKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0K
KworICAgIHZvaWQgYWRkY2xSZWdSZWcoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQor
ICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXAxKEFERENfT1BDT0RF
LCBkc3QsIHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lk
IGFkZHZsUmVnUmVnKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAg
ICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3VwMShBRERWX09QQ09ERSwgZHN0LCBzcmMp
OworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCBhZGRsSW1tOHIo
aW50IGltbTgsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKChpbW04IDw9
IDEyNykgJiYgKGltbTggPj0gLTEyOCkpOworCisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9w
Y29kZUdyb3VwMyhBRERJTU1fT1BDT0RFLCBkc3QsIGltbTgpOworICAgICAgICBvbmVTaG9ydE9w
KG9wYyk7CisgICAgfQorCisgICAgdm9pZCBhbmRsUmVnUmVnKFJlZ2lzdGVySUQgc3JjLCBSZWdp
c3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3Vw
MShBTkRfT1BDT0RFLCBkc3QsIHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9
CisKKyAgICB2b2lkIGFuZGxJbW04cihpbnQgaW1tOCwgUmVnaXN0ZXJJRCBkc3QpCisgICAgewor
ICAgICAgICBBU1NFUlQoKGltbTggPD0gMjU1KSAmJiAoaW1tOCA+PSAwKSk7CisgICAgICAgIEFT
U0VSVChkc3QgPT0gU0g0UmVnaXN0ZXJzOjpyMCk7CisKKyAgICAgICAgdWludDE2X3Qgb3BjID0g
Z2V0T3Bjb2RlR3JvdXA1KEFORElNTV9PUENPREUsIGltbTgpOworICAgICAgICBvbmVTaG9ydE9w
KG9wYyk7CisgICAgfQorCisgICAgdm9pZCBkaXYxbFJlZ1JlZyhSZWdpc3RlcklEIHNyYywgUmVn
aXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91
cDEoRElWMV9PUENPREUsIGRzdCwgc3JjKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAg
IH0KKworICAgIHZvaWQgZGl2MGxSZWdSZWcoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0
KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXAxKERJVjBfT1BD
T0RFLCBkc3QsIHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICB2
b2lkIG5vdGxSZWcoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAg
ICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXAxKE5PVF9PUENPREUsIGRzdCwgc3JjKTsK
KyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAgIHZvaWQgb3JsUmVnUmVnKFJl
Z2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9w
YyA9IGdldE9wY29kZUdyb3VwMShPUl9PUENPREUsIGRzdCwgc3JjKTsKKyAgICAgICAgb25lU2hv
cnRPcChvcGMpOworICAgIH0KKworICAgIHZvaWQgb3JsSW1tOHIoaW50IGltbTgsIFJlZ2lzdGVy
SUQgZHN0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKChpbW04IDw9IDI1NSkgJiYgKGltbTggPj0g
MCkpOworICAgICAgICBBU1NFUlQoZHN0ID09IFNINFJlZ2lzdGVyczo6cjApOworCisgICAgICAg
IHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3VwNShPUklNTV9PUENPREUsIGltbTgpOworICAg
ICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCBzdWJsUmVnUmVnKFJlZ2lz
dGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgICB1aW50MTZfdCBvcGMg
PSBnZXRPcGNvZGVHcm91cDEoU1VCX09QQ09ERSwgZHN0LCBzcmMpOworICAgICAgICAgb25lU2hv
cnRPcChvcGMpOworICAgIH0KKworICAgIHZvaWQgc3VidmxSZWdSZWcoUmVnaXN0ZXJJRCBzcmMs
IFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29k
ZUdyb3VwMShTVUJWX09QQ09ERSwgZHN0LCBzcmMpOworICAgICAgICAgb25lU2hvcnRPcChvcGMp
OworICAgIH0KKworICAgIHZvaWQgeG9ybFJlZ1JlZyhSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJ
RCBkc3QpCisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDEoWE9S
X09QQ09ERSwgZHN0LCBzcmMpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisg
ICAgdm9pZCB4b3JsSW1tOHIoaW50IGltbTgsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKChpbW04IDw9IDI1NSkgJiYgKGltbTggPj0gMCkpOworICAgICAgICBBU1NFUlQo
ZHN0ID09IFNINFJlZ2lzdGVyczo6cjApOworCisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9w
Y29kZUdyb3VwNShYT1JJTU1fT1BDT0RFLCBpbW04KTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMp
OworICAgIH0KKworICAgIHZvaWQgc2hsbEltbThyKGludCBpbW0sIFJlZ2lzdGVySUQgZHN0KQor
ICAgIHsKKyAgICAgICAgc3dpdGNoIChpbW0pIHsKKyAgICAgICAgY2FzZSAxOgorICAgICAgICAg
ICAgb25lU2hvcnRPcChnZXRPcGNvZGVHcm91cDIoU0hMTF9PUENPREUsIGRzdCkpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgIG9uZVNob3J0T3AoZ2V0
T3Bjb2RlR3JvdXAyKFNITEwyX09QQ09ERSwgZHN0KSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSA4OgorICAgICAgICAgICAgb25lU2hvcnRPcChnZXRPcGNvZGVHcm91cDIoU0hM
TDhfT1BDT0RFLCBkc3QpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDE2Ogor
ICAgICAgICAgICAgb25lU2hvcnRPcChnZXRPcGNvZGVHcm91cDIoU0hMTDE2X09QQ09ERSwgZHN0
KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBuZWcoUmVn
aXN0ZXJJRCBkc3QsIFJlZ2lzdGVySUQgc3JjKQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3Bj
ID0gZ2V0T3Bjb2RlR3JvdXAxKE5FR19PUENPREUsIGRzdCwgc3JjKTsKKyAgICAgICAgb25lU2hv
cnRPcChvcGMpOworICAgIH0KKworICAgIHZvaWQgc2hsbFJlZ1JlZyhSZWdpc3RlcklEIGRzdCwg
UmVnaXN0ZXJJRCByU2hpZnQpCisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNv
ZGVHcm91cDEoU0hMRF9PUENPREUsIGRzdCwgclNoaWZ0KTsKKyAgICAgICAgb25lU2hvcnRPcChv
cGMpOworICAgIH0KKworICAgIHZvaWQgc2hsclJlZ1JlZyhSZWdpc3RlcklEIGRzdCwgUmVnaXN0
ZXJJRCByU2hpZnQpCisgICAgeworICAgICAgICBuZWcoclNoaWZ0LCByU2hpZnQpOworICAgICAg
ICBzaGxsUmVnUmVnKGRzdCwgclNoaWZ0KTsKKyAgICB9CisKKyAgICB2b2lkIHNoYXJSZWdSZWco
UmVnaXN0ZXJJRCBkc3QsIFJlZ2lzdGVySUQgclNoaWZ0KQorICAgIHsKKyAgICAgICAgbmVnKHJT
aGlmdCwgclNoaWZ0KTsKKyAgICAgICAgc2hhUmVnUmVnKGRzdCwgclNoaWZ0KTsKKyAgICB9CisK
KyAgICB2b2lkIHNoYVJlZ1JlZyhSZWdpc3RlcklEIGRzdCwgUmVnaXN0ZXJJRCByU2hpZnQpCisg
ICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDEoU0hBRF9PUENPREUs
IGRzdCwgclNoaWZ0KTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAgIHZv
aWQgc2hsckltbThyKGludCBpbW0sIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgc3dp
dGNoIChpbW0pIHsKKyAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgb25lU2hvcnRPcChnZXRP
cGNvZGVHcm91cDIoU0hMUl9PUENPREUsIGRzdCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgMjoKKyAgICAgICAgICAgIG9uZVNob3J0T3AoZ2V0T3Bjb2RlR3JvdXAyKFNITFIy
X09QQ09ERSwgZHN0KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSA4OgorICAg
ICAgICAgICAgb25lU2hvcnRPcChnZXRPcGNvZGVHcm91cDIoU0hMUjhfT1BDT0RFLCBkc3QpKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDE2OgorICAgICAgICAgICAgb25lU2hv
cnRPcChnZXRPcGNvZGVHcm91cDIoU0hMUjE2X09QQ09ERSwgZHN0KSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBpbXVsbFJlZ1JlZyhSZWdpc3RlcklEIHNy
YywgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNv
ZGVHcm91cDEoTVVMTF9PUENPREUsIGRzdCwgc3JjKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMp
OworICAgIH0KKworICAgIHZvaWQgZG11bGxSZWdSZWcoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVy
SUQgZHN0KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXAxKERN
VUxMX0xfT1BDT0RFLCBkc3QsIHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9
CisKKyAgICB2b2lkIGRtdWxzbFJlZ1JlZyhSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3Qp
CisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDEoRE1VTFNMX09Q
Q09ERSwgZHN0LCBzcmMpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAg
dm9pZCBzdHNtYWNsKFJlZ2lzdGVySUQgcmVnKQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3Bj
ID0gZ2V0T3Bjb2RlR3JvdXAyKFNUU01BQ0xfT1BDT0RFLCByZWcpOworICAgICAgICBvbmVTaG9y
dE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCBzdHNtYWNoKFJlZ2lzdGVySUQgcmVnKQorICAg
IHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXAyKFNUU01BQ0hfT1BDT0RF
LCByZWcpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgLy8gQ29tcGFy
aXNvbnMKKworICAgIHZvaWQgY21wbFJlZ1JlZyhSZWdpc3RlcklEIGxlZnQsIFJlZ2lzdGVySUQg
cmlnaHQsIENvbmRpdGlvbiBjb25kKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChjb25kKSB7Cisg
ICAgICAgIGNhc2UgTkU6CisgICAgICAgICAgICBvbmVTaG9ydE9wKGdldE9wY29kZUdyb3VwMShD
TVBFUV9PUENPREUsIHJpZ2h0LCBsZWZ0KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBHVDoKKyAgICAgICAgICAgIG9uZVNob3J0T3AoZ2V0T3Bjb2RlR3JvdXAxKENNUEdUX09Q
Q09ERSwgcmlnaHQsIGxlZnQpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVR
OgorICAgICAgICAgICAgb25lU2hvcnRPcChnZXRPcGNvZGVHcm91cDEoQ01QRVFfT1BDT0RFLCBy
aWdodCwgbGVmdCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR0U6CisgICAg
ICAgICAgICBvbmVTaG9ydE9wKGdldE9wY29kZUdyb3VwMShDTVBHRV9PUENPREUsIHJpZ2h0LCBs
ZWZ0KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBIUzoKKyAgICAgICAgICAg
IG9uZVNob3J0T3AoZ2V0T3Bjb2RlR3JvdXAxKENNUEhTX09QQ09ERSwgcmlnaHQsIGxlZnQpKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEhJOgorICAgICAgICAgICAgb25lU2hv
cnRPcChnZXRPcGNvZGVHcm91cDEoQ01QSElfT1BDT0RFLCByaWdodCwgbGVmdCkpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTEk6CisgICAgICAgICAgICBvbmVTaG9ydE9wKGdl
dE9wY29kZUdyb3VwMShDTVBISV9PUENPREUsIGxlZnQsIHJpZ2h0KSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBMUzoKKyAgICAgICAgICAgIG9uZVNob3J0T3AoZ2V0T3Bjb2Rl
R3JvdXAxKENNUEhTX09QQ09ERSwgbGVmdCwgcmlnaHQpKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIExFOgorICAgICAgICAgICAgb25lU2hvcnRPcChnZXRPcGNvZGVHcm91cDEo
Q01QR0VfT1BDT0RFLCBsZWZ0LCByaWdodCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgTFQ6CisgICAgICAgICAgICBvbmVTaG9ydE9wKGdldE9wY29kZUdyb3VwMShDTVBHVF9P
UENPREUsIGxlZnQsIHJpZ2h0KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgfQor
CisgICAgdm9pZCBjbXBwbChSZWdpc3RlcklEIHJlZykKKyAgICB7CisgICAgICAgIHVpbnQxNl90
IG9wYyA9IGdldE9wY29kZUdyb3VwMihDTVBQTF9PUENPREUsIHJlZyk7CisgICAgICAgIG9uZVNo
b3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lkIGNtcHB6KFJlZ2lzdGVySUQgcmVnKQorICAg
IHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXAyKENNUFBaX09QQ09ERSwg
cmVnKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAgIHZvaWQgY21wRXFJ
bW1SMChpbnQgaW1tLCBSZWdpc3RlcklEIGRzdCwgQ29uZGl0aW9uIGNvbmQpCisgICAgeworICAg
ICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDUoQ01QRVFJTU1fT1BDT0RFLCBpbW0p
OworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCB0ZXN0bFJlZ1Jl
ZyhSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICB1aW50MTZf
dCBvcGMgPSBnZXRPcGNvZGVHcm91cDEoVFNUX09QQ09ERSwgZHN0LCBzcmMpOworICAgICAgICBv
bmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCB0ZXN0bEltbThyKGludCBpbW0sIFJl
Z2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKChkc3QgPT0gU0g0UmVnaXN0ZXJz
OjpyMCkgJiYgKGltbSA8PSAyNTUpICYmIChpbW0gPj0gMCkpOworCisgICAgICAgIHVpbnQxNl90
IG9wYyA9IGdldE9wY29kZUdyb3VwNShUU1RJTU1fT1BDT0RFLCBpbW0pOworICAgICAgICBvbmVT
aG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCBub3AoKQorICAgIHsKKyAgICAgICAgb25l
U2hvcnRPcChOT1BfT1BDT0RFLCBmYWxzZSk7CisgICAgfQorCisgICAgdm9pZCBzZXR0KCkKKyAg
ICB7CisgICAgICAgIG9uZVNob3J0T3AoU0VUVF9PUENPREUpOworICAgIH0KKworICAgIHZvaWQg
Y2xydCgpCisgICAgeworICAgICAgICBvbmVTaG9ydE9wKENMUlRfT1BDT0RFKTsKKyAgICB9CisK
KyAgICB2b2lkIGZzY2hnKCkKKyAgICB7CisgICAgICAgIG9uZVNob3J0T3AoRlNDSEdfT1BDT0RF
KTsKKyAgICB9CisKKyAgICB2b2lkIGJrcHQoKQorICAgIHsKKyAgICAgICAgb25lU2hvcnRPcChC
UktfT1BDT0RFLCBmYWxzZSk7CisgICAgfQorCisgICAgdm9pZCBicmFuY2godWludDE2X3Qgb3Bj
LCBpbnQgbGFiZWwpCisgICAgeworICAgICAgICBzd2l0Y2ggKG9wYykgeworICAgICAgICBjYXNl
IEJUX09QQ09ERToKKyAgICAgICAgICAgIEFTU0VSVCgobGFiZWwgPD0gMTI3KSAmJiAobGFiZWwg
Pj0gLTEyOCkpOworICAgICAgICAgICAgb25lU2hvcnRPcChnZXRPcGNvZGVHcm91cDUoQlRfT1BD
T0RFLCBsYWJlbCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQlJBX09QQ09E
RToKKyAgICAgICAgICAgIEFTU0VSVCgobGFiZWwgPD0gMjA0NykgJiYgKGxhYmVsID49IC0yMDQ4
KSk7CisgICAgICAgICAgICBvbmVTaG9ydE9wKGdldE9wY29kZUdyb3VwNihCUkFfT1BDT0RFLCBs
YWJlbCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQkZfT1BDT0RFOgorICAg
ICAgICAgICAgQVNTRVJUKChsYWJlbCA8PSAxMjcpICYmIChsYWJlbCA+PSAtMTI4KSk7CisgICAg
ICAgICAgICBvbmVTaG9ydE9wKGdldE9wY29kZUdyb3VwNShCRl9PUENPREUsIGxhYmVsKSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBicmFuY2godWludDE2
X3Qgb3BjLCBSZWdpc3RlcklEIHJlZykKKyAgICB7CisgICAgICAgIHN3aXRjaCAob3BjKSB7Cisg
ICAgICAgIGNhc2UgQlJBRl9PUENPREU6CisgICAgICAgICAgICBvbmVTaG9ydE9wKGdldE9wY29k
ZUdyb3VwMihCUkFGX09QQ09ERSwgcmVnKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBKTVBfT1BDT0RFOgorICAgICAgICAgICAgb25lU2hvcnRPcChnZXRPcGNvZGVHcm91cDIo
Sk1QX09QQ09ERSwgcmVnKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBKU1Jf
T1BDT0RFOgorICAgICAgICAgICAgb25lU2hvcnRPcChnZXRPcGNvZGVHcm91cDIoSlNSX09QQ09E
RSwgcmVnKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBCU1JGX09QQ09ERToK
KyAgICAgICAgICAgIG9uZVNob3J0T3AoZ2V0T3Bjb2RlR3JvdXAyKEJTUkZfT1BDT0RFLCByZWcp
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIGxkc3ByKFJl
Z2lzdGVySUQgcmVnKQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3Jv
dXAyKExEU1BSX09QQ09ERSwgcmVnKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0K
KworICAgIHZvaWQgc3RzcHIoUmVnaXN0ZXJJRCByZWcpCisgICAgeworICAgICAgICB1aW50MTZf
dCBvcGMgPSBnZXRPcGNvZGVHcm91cDIoU1RTUFJfT1BDT0RFLCByZWcpOworICAgICAgICBvbmVT
aG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCBleHR1dyhSZWdpc3RlcklEIHNyYywgUmVn
aXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91
cDEoRVhUVVdfT1BDT0RFLCBkc3QsIHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAg
ICB9CisKKyAgICAvLyBmbG9hdCBvcGVyYXRpb25zCisKKyAgICB2b2lkIGxkc3JtZnB1bChSZWdp
c3RlcklEIHNyYykKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3Vw
MihMRFNfUk1fRlBVTF9PUENPREUsIHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAg
ICB9CisKKyAgICB2b2lkIGZuZWcoRlBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIHVp
bnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3VwMihGTkVHX09QQ09ERSwgZHN0KTsKKyAgICAgICAg
b25lU2hvcnRPcChvcGMsIHRydWUsIGZhbHNlKTsKKyAgICB9CisKKyAgICB2b2lkIGZzcXJ0KEZQ
UmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVH
cm91cDIoRlNRUlRfT1BDT0RFLCBkc3QpOworICAgICAgICBvbmVTaG9ydE9wKG9wYywgdHJ1ZSwg
ZmFsc2UpOworICAgIH0KKworICAgIHZvaWQgc3RzZnB1bFJlZyhSZWdpc3RlcklEIHNyYykKKyAg
ICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3VwMihTVFNfRlBVTF9STl9P
UENPREUsIHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lk
IGZsb2F0ZnB1bGZybihSZWdpc3RlcklEIHNyYykKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9w
YyA9IGdldE9wY29kZUdyb3VwMihGTE9BVF9PUENPREUsIHNyYyk7CisgICAgICAgIG9uZVNob3J0
T3Aob3BjLCB0cnVlLCBmYWxzZSk7CisgICAgfQorCisgICAgdm9pZCBmbXVsbChGUFJlZ2lzdGVy
SUQgc3JjLCBGUFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0g
Z2V0T3Bjb2RlR3JvdXAxKEZNVUxfT1BDT0RFLCBkc3QsIHNyYyk7CisgICAgICAgIG9uZVNob3J0
T3Aob3BjLCB0cnVlLCBmYWxzZSk7CisgICAgfQorCisgICAgdm9pZCBmbW92c1JlYWRybShSZWdp
c3RlcklEIHNyYywgRlBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9w
YyA9IGdldE9wY29kZUdyb3VwMShGTU9WU19SRUFEX1JNX09QQ09ERSwgZHN0LCBzcmMpOworICAg
ICAgICBvbmVTaG9ydE9wKG9wYywgdHJ1ZSwgZmFsc2UpOworICAgIH0KKworICAgIHZvaWQgZm1v
dnNXcml0ZXJtKEZQUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAg
ICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXAxKEZNT1ZTX1dSSVRFX1JOX09QQ09ERSwg
ZHN0LCBzcmMpOworICAgICAgICBvbmVTaG9ydE9wKG9wYywgdHJ1ZSwgZmFsc2UpOworICAgIH0K
KworICAgIHZvaWQgZm1vdnNXcml0ZXIwcihGUFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRz
dCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3VwMShGTU9WU19X
UklURV9SMFJOX09QQ09ERSwgZHN0LCBzcmMpOworICAgICAgICBvbmVTaG9ydE9wKG9wYywgdHJ1
ZSwgZmFsc2UpOworICAgIH0KKworICAgIHZvaWQgZm1vdnNSZWFkcjByKFJlZ2lzdGVySUQgc3Jj
LCBGUFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bj
b2RlR3JvdXAxKEZNT1ZTX1JFQURfUjBSTV9PUENPREUsIGRzdCwgc3JjKTsKKyAgICAgICAgb25l
U2hvcnRPcChvcGMsIHRydWUsIGZhbHNlKTsKKyAgICB9CisKKyAgICB2b2lkIGZtb3ZzUmVhZHJt
aW5jKFJlZ2lzdGVySUQgc3JjLCBGUFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgdWlu
dDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXAxKEZNT1ZTX1JFQURfUk1fSU5DX09QQ09ERSwgZHN0
LCBzcmMpOworICAgICAgICBvbmVTaG9ydE9wKG9wYywgdHJ1ZSwgZmFsc2UpOworICAgIH0KKwor
ICAgIHZvaWQgZm1vdnNXcml0ZXJuZGVjKEZQUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0
KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXAxKEZNT1ZTX1dS
SVRFX1JOX0RFQ19PUENPREUsIGRzdCwgc3JjKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMsIHRy
dWUsIGZhbHNlKTsKKyAgICB9CisKKyAgICB2b2lkIGZ0cmNSZWdmcHVsKEZQUmVnaXN0ZXJJRCBz
cmMpCisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDIoRlRSQ19P
UENPREUsIHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjLCB0cnVlLCBmYWxzZSk7CisgICAg
fQorCisgICAgdm9pZCBmbGRzZnB1bChSZWdpc3RlcklEIHNyYykKKyAgICB7CisgICAgICAgIHVp
bnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3VwMihGTERTX0ZSTV9GUFVMX09QQ09ERSwgc3JjKTsK
KyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAgIHZvaWQgZnN0c2ZwdWwoUmVn
aXN0ZXJJRCBzcmMpCisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91
cDIoRlNUU19GUFVMX0ZSTl9PUENPREUsIHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsK
KyAgICB9CisKKyAgICB2b2lkIGxkc2Zwc2NyKFJlZ2lzdGVySUQgcmVnKQorICAgIHsKKyAgICAg
ICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXAyKExEU0ZQU0NSX09QQ09ERSwgcmVnKTsK
KyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAgIHZvaWQgc3RzZnBzY3IoUmVn
aXN0ZXJJRCByZWcpCisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91
cDIoU1RTRlBTQ1JfT1BDT0RFLCByZWcpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAg
fQorCisgICAgLy8gZG91YmxlIG9wZXJhdGlvbnMKKworICAgIHZvaWQgZGNudmRzKEZQUmVnaXN0
ZXJJRCBzcmMpCisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDco
RkNOVkRTX0RSTV9GUFVMX09QQ09ERSwgc3JjID4+IDEpOworICAgICAgICBvbmVTaG9ydE9wKG9w
Yyk7CisgICAgfQorCisgICAgdm9pZCBkY21wcGVxKEZQUmVnaXN0ZXJJRCBzcmMsIEZQUmVnaXN0
ZXJJRCBkc3QpCisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDgo
RkNNUEVRX09QQ09ERSwgZHN0ID4+IDEsIHNyYyA+PiAxKTsKKyAgICAgICAgb25lU2hvcnRPcChv
cGMpOworICAgIH0KKworICAgIHZvaWQgZGNtcHBndChGUFJlZ2lzdGVySUQgc3JjLCBGUFJlZ2lz
dGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXA4
KEZDTVBHVF9PUENPREUsIGRzdCA+PiAxLCBzcmMgPj4gMSk7CisgICAgICAgIG9uZVNob3J0T3Ao
b3BjKTsKKyAgICB9CisKKyAgICB2b2lkIGRtdWxSZWdSZWcoRlBSZWdpc3RlcklEIHNyYywgRlBS
ZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdy
b3VwOChGTVVMX09QQ09ERSwgZHN0ID4+IDEsIHNyYyA+PiAxKTsKKyAgICAgICAgb25lU2hvcnRP
cChvcGMpOworICAgIH0KKworICAgIHZvaWQgZHN1YlJlZ1JlZyhGUFJlZ2lzdGVySUQgc3JjLCBG
UFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2Rl
R3JvdXA4KEZTVUJfT1BDT0RFLCBkc3QgPj4gMSwgc3JjID4+IDEpOworICAgICAgICBvbmVTaG9y
dE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCBkYWRkUmVnUmVnKEZQUmVnaXN0ZXJJRCBzcmMs
IEZQUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNv
ZGVHcm91cDgoRkFERF9PUENPREUsIGRzdCA+PiAxLCBzcmMgPj4gMSk7CisgICAgICAgIG9uZVNo
b3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lkIGRtb3ZSZWdSZWcoRlBSZWdpc3RlcklEIHNy
YywgRlBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9w
Y29kZUdyb3VwOChGTU9WX09QQ09ERSwgZHN0ID4+IDEsIHNyYyA+PiAxKTsKKyAgICAgICAgb25l
U2hvcnRPcChvcGMpOworICAgIH0KKworICAgIHZvaWQgZGRpdlJlZ1JlZyhGUFJlZ2lzdGVySUQg
c3JjLCBGUFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0
T3Bjb2RlR3JvdXA4KEZESVZfT1BDT0RFLCBkc3QgPj4gMSwgc3JjID4+IDEpOworICAgICAgICBv
bmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCBkc3FydChGUFJlZ2lzdGVySUQgZHN0
KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXA3KEZTUVJUX09Q
Q09ERSwgZHN0ID4+IDEpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAg
dm9pZCBkbmVnKEZQUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMg
PSBnZXRPcGNvZGVHcm91cDcoRk5FR19PUENPREUsIGRzdCA+PiAxKTsKKyAgICAgICAgb25lU2hv
cnRPcChvcGMpOworICAgIH0KKworICAgIHZvaWQgZm1vdlJlYWRybShSZWdpc3RlcklEIHNyYywg
RlBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29k
ZUdyb3VwMTAoRk1PVlNfUkVBRF9STV9PUENPREUsIGRzdCA+PiAxLCBzcmMpOworICAgICAgICBv
bmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCBmbW92V3JpdGVybShGUFJlZ2lzdGVy
SUQgc3JjLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdl
dE9wY29kZUdyb3VwOShGTU9WU19XUklURV9STl9PUENPREUsIGRzdCwgc3JjID4+IDEpOworICAg
ICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCBmbW92V3JpdGVyMHIoRlBS
ZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICB1aW50MTZfdCBv
cGMgPSBnZXRPcGNvZGVHcm91cDkoRk1PVlNfV1JJVEVfUjBSTl9PUENPREUsIGRzdCwgc3JjID4+
IDEpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCBmbW92UmVh
ZHIwcihSZWdpc3RlcklEIHNyYywgRlBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIHVp
bnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3VwMTAoRk1PVlNfUkVBRF9SMFJNX09QQ09ERSwgZHN0
ID4+IDEsIHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lk
IGZtb3ZSZWFkcm1pbmMoUmVnaXN0ZXJJRCBzcmMsIEZQUmVnaXN0ZXJJRCBkc3QpCisgICAgewor
ICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDEwKEZNT1ZTX1JFQURfUk1fSU5D
X09QQ09ERSwgZHN0ID4+IDEsIHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9
CisKKyAgICB2b2lkIGZtb3ZXcml0ZXJuZGVjKEZQUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQg
ZHN0KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXA5KEZNT1ZT
X1dSSVRFX1JOX0RFQ19PUENPREUsIGRzdCwgc3JjID4+IDEpOworICAgICAgICBvbmVTaG9ydE9w
KG9wYyk7CisgICAgfQorCisgICAgdm9pZCBmbG9hdGZwdWxEcmVnKEZQUmVnaXN0ZXJJRCBzcmMp
CisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDcoRkxPQVRfT1BD
T0RFLCBzcmMgPj4gMSk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICB2
b2lkIGZ0cmNkcm1mcHVsKEZQUmVnaXN0ZXJJRCBzcmMpCisgICAgeworICAgICAgICB1aW50MTZf
dCBvcGMgPSBnZXRPcGNvZGVHcm91cDcoRlRSQ19PUENPREUsIHNyYyA+PiAxKTsKKyAgICAgICAg
b25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAgIC8vIFZhcmlvdXMgbW92ZSBvcHMKKworICAg
IHZvaWQgbW92SW1tOChpbnQgaW1tOCwgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICBB
U1NFUlQoKGltbTggPD0gMTI3KSAmJiAoaW1tOCA+PSAtMTI4KSk7CisKKyAgICAgICAgdWludDE2
X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXAzKE1PVklNTV9PUENPREUsIGRzdCwgaW1tOCk7CisgICAg
ICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lkIG1vdmxSZWdSZWcoUmVnaXN0
ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0g
Z2V0T3Bjb2RlR3JvdXAxKE1PVl9PUENPREUsIGRzdCwgc3JjKTsKKyAgICAgICAgb25lU2hvcnRP
cChvcGMpOworICAgIH0KKworICAgIHZvaWQgbW92d1JlZ01lbShSZWdpc3RlcklEIHNyYywgUmVn
aXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91
cDEoTU9WV19XUklURV9STl9PUENPREUsIGRzdCwgc3JjKTsKKyAgICAgICAgb25lU2hvcnRPcChv
cGMpOworICAgIH0KKworICAgIHZvaWQgbW92d01lbVJlZyhSZWdpc3RlcklEIHNyYywgUmVnaXN0
ZXJJRCBkc3QpCisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDEo
TU9WV19SRUFEX1JNX09QQ09ERSwgZHN0LCBzcmMpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7
CisgICAgfQorCisgICAgdm9pZCBtb3Z3UENSZWcoaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNl
LCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIEFTU0VSVChiYXNlID09IFNINFJlZ2lz
dGVyczo6cGMpOworICAgICAgICBBU1NFUlQoKG9mZnNldCA8PSAyNTUpICYmIChvZmZzZXQgPj0g
MCkpOworCisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3VwMyhNT1ZXX1JFQURf
T0ZGUENfT1BDT0RFLCBkc3QsIG9mZnNldCk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAg
ICB9CisKKyAgICB2b2lkIG1vdndNZW1SZWcoaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBS
ZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIEFTU0VSVChkc3QgPT0gU0g0UmVnaXN0ZXJz
OjpyMCk7CisKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXAxMShNT1ZXX1JF
QURfT0ZGUk1fT1BDT0RFLCBiYXNlLCBvZmZzZXQpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7
CisgICAgfQorCisgICAgdm9pZCBtb3Z3UjBtcihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBk
c3QpCisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDEoTU9WV19S
RUFEX1IwUk1fT1BDT0RFLCBkc3QsIHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAg
ICB9CisKKyAgICB2b2lkIG1vdmxSZWdNZW0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJl
Z2lzdGVySUQgYmFzZSkKKyAgICB7CisgICAgICAgIEFTU0VSVCgob2Zmc2V0IDw9IDE1KSAmJiAo
b2Zmc2V0ID49IDApKTsKKworICAgICAgICBpZiAoIW9mZnNldCkgeworICAgICAgICAgICAgb25l
U2hvcnRPcChnZXRPcGNvZGVHcm91cDEoTU9WTF9XUklURV9STl9PUENPREUsIGJhc2UsIHNyYykp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgb25lU2hvcnRPcChn
ZXRPcGNvZGVHcm91cDQoTU9WTF9XUklURV9PRkZSTl9PUENPREUsIGJhc2UsIHNyYywgb2Zmc2V0
KSk7CisgICAgfQorCisgICAgdm9pZCBtb3ZsUmVnTWVtKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3Rl
cklEIGJhc2UpCisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDEo
TU9WTF9XUklURV9STl9PUENPREUsIGJhc2UsIHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Aob3Bj
KTsKKyAgICB9CisKKyAgICB2b2lkIG1vdmxNZW1SZWcoaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBi
YXNlLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIGlmIChiYXNlID09IFNINFJlZ2lz
dGVyczo6cGMpIHsKKyAgICAgICAgICAgIEFTU0VSVCgob2Zmc2V0IDw9IDI1NSkgJiYgKG9mZnNl
dCA+PSAwKSk7CisgICAgICAgICAgICBvbmVTaG9ydE9wKGdldE9wY29kZUdyb3VwMyhNT1ZMX1JF
QURfT0ZGUENfT1BDT0RFLCBkc3QsIG9mZnNldCkpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisKKyAgICAgICAgQVNTRVJUKChvZmZzZXQgPD0gMTUpICYmIChvZmZzZXQgPj0gMCkp
OworICAgICAgICBpZiAoIW9mZnNldCkgeworICAgICAgICAgICAgb25lU2hvcnRPcChnZXRPcGNv
ZGVHcm91cDEoTU9WTF9SRUFEX1JNX09QQ09ERSwgZHN0LCBiYXNlKSk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBvbmVTaG9ydE9wKGdldE9wY29kZUdyb3VwNChN
T1ZMX1JFQURfT0ZGUk1fT1BDT0RFLCBkc3QsIGJhc2UsIG9mZnNldCkpOworICAgIH0KKworICAg
IHZvaWQgbW92Yk1lbVJlZyhpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQg
ZHN0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKGRzdCA9PSBTSDRSZWdpc3RlcnM6OnIwKTsKKwor
ICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDExKE1PVkJfUkVBRF9PRkZSTV9P
UENPREUsIGJhc2UsIG9mZnNldCk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisK
KyAgICB2b2lkIG1vdmJSMG1yKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7
CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3VwMShNT1ZCX1JFQURfUjBSTV9P
UENPREUsIGRzdCwgc3JjKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAg
IHZvaWQgbW92Yk1lbVJlZyhSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpCisgICAgewor
ICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDEoTU9WQl9SRUFEX1JNX09QQ09E
RSwgZHN0LCBzcmMpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgdm9p
ZCBtb3ZsTWVtUmVnKFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAg
ICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDEoTU9WTF9SRUFEX1JNX09QQ09ERSwg
ZHN0LCBiYXNlKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAgIHZvaWQg
bW92bE1lbVJlZ0luKFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAg
ICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDEoTU9WTF9SRUFEX1JNSU5DX09QQ09E
RSwgZHN0LCBiYXNlKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAgIHZv
aWQgbW92bFIwbXIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAg
ICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXAxKE1PVkxfUkVBRF9SMFJNX09QQ09ERSwg
ZHN0LCBzcmMpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCBt
b3ZsUmVnTWVtcjAoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAg
ICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXAxKE1PVkxfV1JJVEVfUjBSTl9PUENPREUs
IGRzdCwgc3JjKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAgIHZvaWQg
bW92bEltbThyKGludCBpbW04LCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIEFTU0VS
VCgoaW1tOCA8PSAxMjcpICYmIChpbW04ID49IC0xMjgpKTsKKworICAgICAgICB1aW50MTZfdCBv
cGMgPSBnZXRPcGNvZGVHcm91cDMoTU9WSU1NX09QQ09ERSwgZHN0LCBpbW04KTsKKyAgICAgICAg
b25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAgIHZvaWQgbG9hZENvbnN0YW50KHVpbnQzMl90
IGNvbnN0YW50LCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIGlmICgoKGludCljb25z
dGFudCA8PSAweDdmKSAmJiAoKGludCljb25zdGFudCA+PSAtMHg4MCkpIHsKKyAgICAgICAgICAg
IG1vdkltbTgoY29uc3RhbnQsIGRzdCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KworICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDMoTU9WSU1NX09QQ09ERSwg
ZHN0LCAwKTsKKworICAgICAgICBtX2J1ZmZlci5lbnN1cmVTcGFjZShtYXhJbnN0cnVjdGlvblNp
emUsIHNpemVvZih1aW50MzJfdCkpOworICAgICAgICBwcmludEluc3RyKGdldE9wY29kZUdyb3Vw
MyhNT1ZJTU1fT1BDT0RFLCBkc3QsIGNvbnN0YW50KSwgbV9idWZmZXIudW5jaGVja2VkU2l6ZSgp
KTsKKyAgICAgICAgbV9idWZmZXIucHV0U2hvcnRXaXRoQ29uc3RhbnRJbnQob3BjLCBjb25zdGFu
dCwgdHJ1ZSk7CisgICAgfQorCisgICAgdm9pZCBsb2FkQ29uc3RhbnRVblJldXNhYmxlKHVpbnQz
Ml90IGNvbnN0YW50LCBSZWdpc3RlcklEIGRzdCwgYm9vbCBlbnN1cmVTcGFjZSA9IGZhbHNlKQor
ICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXAzKE1PVklNTV9PUENP
REUsIGRzdCwgMCk7CisKKyAgICAgICAgaWYgKGVuc3VyZVNwYWNlKQorICAgICAgICAgICAgbV9i
dWZmZXIuZW5zdXJlU3BhY2UobWF4SW5zdHJ1Y3Rpb25TaXplLCBzaXplb2YodWludDMyX3QpKTsK
KworICAgICAgICBwcmludEluc3RyKGdldE9wY29kZUdyb3VwMyhNT1ZJTU1fT1BDT0RFLCBkc3Qs
IGNvbnN0YW50KSwgbV9idWZmZXIudW5jaGVja2VkU2l6ZSgpKTsKKyAgICAgICAgbV9idWZmZXIu
cHV0U2hvcnRXaXRoQ29uc3RhbnRJbnQob3BjLCBjb25zdGFudCk7CisgICAgfQorCisgICAgLy8g
RmxvdyBjb250cm9sCisKKyAgICBKbXBTcmMgY2FsbCgpCisgICAgeworICAgICAgICBSZWdpc3Rl
cklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBtX2J1ZmZlci5lbnN1cmVTcGFjZSht
YXhJbnN0cnVjdGlvblNpemUgKyA0LCBzaXplb2YodWludDMyX3QpKTsKKyAgICAgICAgbG9hZENv
bnN0YW50VW5SZXVzYWJsZSgweDAsIHNjcik7CisgICAgICAgIGJyYW5jaChKU1JfT1BDT0RFLCBz
Y3IpOworICAgICAgICBub3AoKTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICAg
ICAgcmV0dXJuIEptcFNyYyhtX2J1ZmZlci51bmNoZWNrZWRTaXplKCkpOworICAgIH0KKworICAg
IEptcFNyYyBjYWxsKFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgbV9idWZmZXIuZW5z
dXJlU3BhY2UobWF4SW5zdHJ1Y3Rpb25TaXplICsgMik7CisgICAgICAgIGJyYW5jaChKU1JfT1BD
T0RFLCBkc3QpOworICAgICAgICBub3AoKTsKKyAgICAgICAgcmV0dXJuIEptcFNyYyhtX2J1ZmZl
ci51bmNoZWNrZWRTaXplKCkpOworICAgIH0KKworICAgIEptcFNyYyBqbXAoKQorICAgIHsKKyAg
ICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgbV9idWZmZXIu
ZW5zdXJlU3BhY2UobWF4SW5zdHJ1Y3Rpb25TaXplICsgNCwgc2l6ZW9mKHVpbnQzMl90KSk7Cisg
ICAgICAgIGludCBtX3NpemUgPSBtX2J1ZmZlci51bmNoZWNrZWRTaXplKCk7CisgICAgICAgIGxv
YWRDb25zdGFudFVuUmV1c2FibGUoMHgwLCBzY3IpOworICAgICAgICBicmFuY2goQlJBRl9PUENP
REUsIHNjcik7CisgICAgICAgIG5vcCgpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOwor
ICAgICAgICByZXR1cm4gSm1wU3JjKG1fc2l6ZSk7CisgICAgfQorCisgICAgSm1wU3JjIGptcChS
ZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIGptcFJlZyhkc3QpOworICAgICAgICByZXR1
cm4gSm1wU3JjKG1fYnVmZmVyLnVuY2hlY2tlZFNpemUoKSk7CisgICAgfQorCisgICAgdm9pZCBq
bXBSZWcoUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICBtX2J1ZmZlci5lbnN1cmVTcGFj
ZShtYXhJbnN0cnVjdGlvblNpemUgKyAyKTsKKyAgICAgICAgYnJhbmNoKEpNUF9PUENPREUsIGRz
dCk7CisgICAgICAgIG5vcCgpOworICAgIH0KKworICAgIEptcFNyYyBqbmUoKQorICAgIHsKKyAg
ICAgICAgaW50IG1fc2l6ZSA9IG1fYnVmZmVyLnVuY2hlY2tlZFNpemUoKTsKKyAgICAgICAgYnJh
bmNoKEJGX09QQ09ERSwgMCk7CisgICAgICAgIHJldHVybiBKbXBTcmMobV9zaXplKTsKKyAgICB9
CisKKyAgICBKbXBTcmMgamUoKQorICAgIHsKKyAgICAgICAgaW50IG1fc2l6ZSA9IG1fYnVmZmVy
LnVuY2hlY2tlZFNpemUoKTsKKyAgICAgICAgYnJhbmNoKEJUX09QQ09ERSwgMCk7CisgICAgICAg
IHJldHVybiBKbXBTcmMobV9zaXplKTsKKyAgICB9CisKKyAgICB2b2lkIHJldCgpCisgICAgewor
ICAgICAgICBtX2J1ZmZlci5lbnN1cmVTcGFjZShtYXhJbnN0cnVjdGlvblNpemUgKyAyKTsKKyAg
ICAgICAgb25lU2hvcnRPcChSVFNfT1BDT0RFLCBmYWxzZSk7CisgICAgfQorCisgICAgSm1wRHN0
IGxhYmVsKCkKKyAgICB7CisgICAgICAgIHJldHVybiBKbXBEc3QobV9idWZmZXIuc2l6ZSgpKTsK
KyAgICB9CisKKyAgICBpbnQgc2l6ZU9mQ29uc3RhbnRQb29sKCkKKyAgICB7CisgICAgICAgICBy
ZXR1cm4gbV9idWZmZXIuc2l6ZU9mQ29uc3RhbnRQb29sKCk7CisgICAgfQorCisgICAgSm1wRHN0
IGFsaWduKGludCBhbGlnbm1lbnQpCisgICAgeworICAgICAgICBtX2J1ZmZlci5lbnN1cmVTcGFj
ZShtYXhJbnN0cnVjdGlvblNpemUgKyAyKTsKKyAgICAgICAgd2hpbGUgKCFtX2J1ZmZlci5pc0Fs
aWduZWQoYWxpZ25tZW50KSkgeworICAgICAgICAgICAgbm9wKCk7CisgICAgICAgICAgICBtX2J1
ZmZlci5lbnN1cmVTcGFjZShtYXhJbnN0cnVjdGlvblNpemUgKyAyKTsKKyAgICAgICAgfQorICAg
ICAgICByZXR1cm4gbGFiZWwoKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBjaGFuZ2VQQ3Jl
bGF0aXZlQWRkcmVzcyhpbnQgb2Zmc2V0LCB1aW50MTZfdCogaW5zdHJ1Y3Rpb25QdHIsIHVpbnQz
Ml90IG5ld0FkZHJlc3MpCisgICAgeworICAgICAgICB1aW50MzJfdCBhZGRyZXNzID0gKG9mZnNl
dCA8PCAyKSArICgocmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdD4oaW5zdHJ1Y3Rpb25QdHIpICsg
NCkgJih+MHgzKSk7CisgICAgICAgICpyZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4oYWRkcmVz
cykgPSBuZXdBZGRyZXNzOworICAgIH0KKworICAgIHN0YXRpYyB1aW50MTZfdCogZ2V0SW5zdHJ1
Y3Rpb25QdHIodm9pZCogY29kZSwgaW50IG9mZnNldCkKKyAgICB7CisgICAgICAgIHJldHVybiBy
ZWludGVycHJldF9jYXN0PHVpbnQxNl90Kj4gKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3Q+KGNv
ZGUpICsgb2Zmc2V0KTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBsaW5rSnVtcCh2b2lkKiBj
b2RlLCBKbXBTcmMgZnJvbSwgdm9pZCogdG8pCisgICAgeworICAgICAgICBBU1NFUlQoZnJvbS5t
X29mZnNldCAhPSAtMSk7CisKKyAgICAgICAgdWludDE2X3QqIGluc3RydWN0aW9uUHRyID0gZ2V0
SW5zdHJ1Y3Rpb25QdHIoY29kZSwgZnJvbS5tX29mZnNldCk7CisgICAgICAgIHVpbnQxNl90IGlu
c3RydWN0aW9uID0gKmluc3RydWN0aW9uUHRyOworICAgICAgICBpbnQgb2Zmc2V0Qml0cyA9IChy
ZWludGVycHJldF9jYXN0PHVpbnQzMl90Pih0bykgLSByZWludGVycHJldF9jYXN0PHVpbnQzMl90
Pihjb2RlKSkgLSBmcm9tLm1fb2Zmc2V0OworCisgICAgICAgIGlmICgoKGluc3RydWN0aW9uICYg
MHhmZjAwKSA9PSBCVF9PUENPREUpIHx8ICgoaW5zdHJ1Y3Rpb24gJiAweGZmMDApID09IEJGX09Q
Q09ERSkpIHsKKyAgICAgICAgICAgIC8qIEJUIGxhYmVsID09PiBCRiAyCisgICAgICAgICAgICAg
ICBub3AgICAgICAgICAgTERSIHJlZworICAgICAgICAgICAgICAgbm9wICAgICAgICAgIGJyYWYg
QHJlZworICAgICAgICAgICAgICAgbm9wICAgICAgICAgIG5vcAorICAgICAgICAgICAgKi8KKyAg
ICAgICAgICAgIG9mZnNldEJpdHMgLT0gODsKKyAgICAgICAgICAgIGluc3RydWN0aW9uIF49IDB4
MDIwMjsKKyAgICAgICAgICAgICppbnN0cnVjdGlvblB0cisrID0gaW5zdHJ1Y3Rpb247CisgICAg
ICAgICAgICBjaGFuZ2VQQ3JlbGF0aXZlQWRkcmVzcygoKmluc3RydWN0aW9uUHRyICYgMHhmZiks
IGluc3RydWN0aW9uUHRyLCBvZmZzZXRCaXRzKTsKKyAgICAgICAgICAgIGluc3RydWN0aW9uID0g
KEJSQUZfT1BDT0RFIHwgKCppbnN0cnVjdGlvblB0cisrICYgMHhmMDApKTsKKyAgICAgICAgICAg
ICppbnN0cnVjdGlvblB0ciA9IGluc3RydWN0aW9uOworICAgICAgICAgICAgcHJpbnRCbG9ja0lu
c3RyKGluc3RydWN0aW9uUHRyIC0gMiwgZnJvbS5tX29mZnNldCwgMyk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICB9CisKKyAgICAgICAgIC8qIE1PViAjaW1tLCByZWcgPT4gTERSIHJl
ZworICAgICAgICAgICAgYnJhZiBAcmVnICAgICAgICBicmFmIEByZWcKKyAgICAgICAgICAgIG5v
cCAgICAgICAgICAgICAgbm9wCisgICAgICAgICAqLworICAgICAgICBBU1NFUlQoKCooaW5zdHJ1
Y3Rpb25QdHIgKyAxKSAmIEJSQUZfT1BDT0RFKSA9PSBCUkFGX09QQ09ERSk7CisKKyAgICAgICAg
b2Zmc2V0Qml0cyAtPSA0OworICAgICAgICBpZiAob2Zmc2V0Qml0cyA+PSAtNDA5NiAmJiBvZmZz
ZXRCaXRzIDw9IDQwOTQpIHsKKyAgICAgICAgICAgICppbnN0cnVjdGlvblB0ciA9IGdldE9wY29k
ZUdyb3VwNihCUkFfT1BDT0RFLCBvZmZzZXRCaXRzID4+IDEpOworICAgICAgICAgICAgKigrK2lu
c3RydWN0aW9uUHRyKSA9IE5PUF9PUENPREU7CisgICAgICAgICAgICBwcmludEJsb2NrSW5zdHIo
aW5zdHJ1Y3Rpb25QdHIgLSAxLCBmcm9tLm1fb2Zmc2V0LCAyKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorCisgICAgICAgIGNoYW5nZVBDcmVsYXRpdmVBZGRyZXNzKCgqaW5zdHJ1
Y3Rpb25QdHIgJiAweGZmKSwgaW5zdHJ1Y3Rpb25QdHIsIG9mZnNldEJpdHMgLSAyKTsKKyAgICAg
ICAgcHJpbnRJbnN0cigqaW5zdHJ1Y3Rpb25QdHIsIGZyb20ubV9vZmZzZXQgKyAyKTsKKyAgICB9
CisKKyAgICBzdGF0aWMgdm9pZCBsaW5rQ2FsbCh2b2lkKiBjb2RlLCBKbXBTcmMgZnJvbSwgdm9p
ZCogdG8pCisgICAgeworICAgICAgICB1aW50MTZfdCogaW5zdHJ1Y3Rpb25QdHIgPSBnZXRJbnN0
cnVjdGlvblB0cihjb2RlLCBmcm9tLm1fb2Zmc2V0KTsKKyAgICAgICAgaW5zdHJ1Y3Rpb25QdHIg
LT0gMzsKKyAgICAgICAgY2hhbmdlUENyZWxhdGl2ZUFkZHJlc3MoKCppbnN0cnVjdGlvblB0ciAm
IDB4ZmYpLCBpbnN0cnVjdGlvblB0ciwgcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdD4odG8pKTsK
KyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBsaW5rUG9pbnRlcih2b2lkKiBjb2RlLCBKbXBEc3Qg
d2hlcmUsIHZvaWQqIHZhbHVlKQorICAgIHsKKyAgICAgICAgdWludDE2X3QqIGluc3RydWN0aW9u
UHRyID0gZ2V0SW5zdHJ1Y3Rpb25QdHIoY29kZSwgd2hlcmUubV9vZmZzZXQpOworICAgICAgICBj
aGFuZ2VQQ3JlbGF0aXZlQWRkcmVzcygoKmluc3RydWN0aW9uUHRyICYgMHhmZiksIGluc3RydWN0
aW9uUHRyLCByZWludGVycHJldF9jYXN0PHVpbnQzMl90Pih2YWx1ZSkpOworICAgIH0KKworICAg
IHN0YXRpYyB1bnNpZ25lZCBnZXRDYWxsUmV0dXJuT2Zmc2V0KEptcFNyYyBjYWxsKQorICAgIHsK
KyAgICAgICAgQVNTRVJUKGNhbGwubV9vZmZzZXQgPj0gMCk7CisgICAgICAgIHJldHVybiBjYWxs
Lm1fb2Zmc2V0OworICAgIH0KKworICAgIHN0YXRpYyB1aW50MzJfdCogZ2V0TGRySW1tQWRkcmVz
c09uUG9vbChTSDRXb3JkKiBpbnNuLCB1aW50MzJfdCogY29uc3RQb29sKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIChjb25zdFBvb2wgKyAoKmluc24gJiAweGZmKSk7CisgICAgfQorCisgICAgc3Rh
dGljIFNINFdvcmQgcGF0Y2hDb25zdGFudFBvb2xMb2FkKFNINFdvcmQgbG9hZCwgaW50IHZhbHVl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuICgobG9hZCAmIH4weGZmKSB8IHZhbHVlKTsKKyAgICB9
CisKKyAgICBzdGF0aWMgU0g0QnVmZmVyOjpUd29TaG9ydHMgcGxhY2VDb25zdGFudFBvb2xCYXJy
aWVyKGludCBvZmZzZXQpCisgICAgeworICAgICAgICBBU1NFUlQoKChvZmZzZXQgPj4gMSkgPD0y
MDQ3KSAmJiAoKG9mZnNldCA+PiAxKSA+PSAtMjA0OCkpOworCisgICAgICAgIFNINEJ1ZmZlcjo6
VHdvU2hvcnRzIG1fYmFycmllcjsKKyAgICAgICAgbV9iYXJyaWVyLmhpZ2ggPSAoQlJBX09QQ09E
RSB8IChvZmZzZXQgPj4gMSkpOworICAgICAgICBtX2JhcnJpZXIubG93ID0gTk9QX09QQ09ERTsK
KyAgICAgICAgcHJpbnRJbnN0cigoKEJSQV9PUENPREUgfCAob2Zmc2V0ID4+IDEpKSksIDApOwor
ICAgICAgICBwcmludEluc3RyKE5PUF9PUENPREUsIDApOworICAgICAgICByZXR1cm4gbV9iYXJy
aWVyOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIHBhdGNoQ29uc3RhbnRQb29sTG9hZCh2b2lk
KiBsb2FkQWRkciwgdm9pZCogY29uc3RQb29sQWRkcikKKyAgICB7CisgICAgICAgIFNINFdvcmQq
IGluc3RydWN0aW9uUHRyID0gcmVpbnRlcnByZXRfY2FzdDxTSDRXb3JkKj4obG9hZEFkZHIpOwor
ICAgICAgICBTSDRXb3JkIGluc3RydWN0aW9uID0gKmluc3RydWN0aW9uUHRyOworICAgICAgICBT
SDRXb3JkIGluZGV4ID0gaW5zdHJ1Y3Rpb24gJiAweGZmOworCisgICAgICAgIGlmICgoaW5zdHJ1
Y3Rpb24gJiAweGYwMDApICE9IE1PVklNTV9PUENPREUpCisgICAgICAgICAgICByZXR1cm47CisK
KyAgICAgICAgQVNTRVJUKCgoKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3Q+KGNvbnN0UG9vbEFk
ZHIpIC0gcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdD4obG9hZEFkZHIpKSArIGluZGV4ICogNCkp
IDwgMTAyNCk7CisKKyAgICAgICAgaW50IG9mZnNldCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMy
X3Q+KGNvbnN0UG9vbEFkZHIpICsgKGluZGV4ICogNCkgLSAoKHJlaW50ZXJwcmV0X2Nhc3Q8dWlu
dDMyX3Q+KGluc3RydWN0aW9uUHRyKSAmIH4weDAzKSArIDQpOworICAgICAgICBpbnN0cnVjdGlv
biAmPTB4ZjAwOworICAgICAgICBpbnN0cnVjdGlvbiB8PSAweGQwMDA7CisgICAgICAgIG9mZnNl
dCAmPSAweDAzZmY7CisgICAgICAgIGluc3RydWN0aW9uIHw9IChvZmZzZXQgPj4gMik7CisgICAg
ICAgICppbnN0cnVjdGlvblB0ciA9IGluc3RydWN0aW9uOworICAgICAgICBwcmludEluc3RyKGlu
c3RydWN0aW9uLCByZWludGVycHJldF9jYXN0PHVpbnQzMl90Pihsb2FkQWRkcikpOworICAgIH0K
KworICAgIHN0YXRpYyB2b2lkIHJlcGF0Y2hQb2ludGVyKHZvaWQqIHdoZXJlLCB2b2lkKiB2YWx1
ZSkKKyAgICB7CisgICAgICAgIHBhdGNoUG9pbnRlcih3aGVyZSwgdmFsdWUpOworICAgIH0KKwor
ICAgIHN0YXRpYyB2b2lkIHJlcGF0Y2hJbnQzMih2b2lkKiB3aGVyZSwgaW50MzJfdCB2YWx1ZSkK
KyAgICB7CisgICAgICAgIHVpbnQxNl90KiBpbnN0cnVjdGlvblB0ciA9IHJlaW50ZXJwcmV0X2Nh
c3Q8dWludDE2X3QqPih3aGVyZSk7CisgICAgICAgIGNoYW5nZVBDcmVsYXRpdmVBZGRyZXNzKCgq
aW5zdHJ1Y3Rpb25QdHIgJiAweGZmKSwgaW5zdHJ1Y3Rpb25QdHIsIHZhbHVlKTsKKyAgICB9CisK
KyAgICBzdGF0aWMgdm9pZCByZWxpbmtDYWxsKHZvaWQqIGZyb20sIHZvaWQqIHRvKQorICAgIHsK
KyAgICAgICAgdWludDE2X3QqIGluc3RydWN0aW9uUHRyID0gcmVpbnRlcnByZXRfY2FzdDx1aW50
MTZfdCo+KGZyb20pOworICAgICAgICBpbnN0cnVjdGlvblB0ciAtPSAzOworICAgICAgICBjaGFu
Z2VQQ3JlbGF0aXZlQWRkcmVzcygoKmluc3RydWN0aW9uUHRyICYgMHhmZiksIGluc3RydWN0aW9u
UHRyLCByZWludGVycHJldF9jYXN0PHVpbnQzMl90Pih0bykpOworICAgIH0KKworICAgIHN0YXRp
YyB2b2lkIHJlbGlua0p1bXAodm9pZCogZnJvbSwgdm9pZCogdG8pCisgICAgeworICAgICAgICB1
aW50MTZfdCogaW5zdHJ1Y3Rpb25QdHIgPSByZWludGVycHJldF9jYXN0PHVpbnQxNl90Kj4gKGZy
b20pOworICAgICAgICB1aW50MTZfdCBpbnN0cnVjdGlvbiA9ICppbnN0cnVjdGlvblB0cjsKKyAg
ICAgICAgaW50MzJfdCBvZmZzZXRCaXRzID0gKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3Q+KHRv
KSAtIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3Q+KGZyb20pKTsKKworICAgICAgICBpZiAoKCgq
aW5zdHJ1Y3Rpb25QdHIgJiAweGZmMDApID09IEJUX09QQ09ERSkgfHwgKCgqaW5zdHJ1Y3Rpb25Q
dHIgJiAweGZmMDApID09IEJGX09QQ09ERSkpIHsKKyAgICAgICAgICAgIG9mZnNldEJpdHMgLT0g
ODsKKyAgICAgICAgICAgIGluc3RydWN0aW9uUHRyKys7CisgICAgICAgICAgICBjaGFuZ2VQQ3Jl
bGF0aXZlQWRkcmVzcygoKmluc3RydWN0aW9uUHRyICYgMHhmZiksIGluc3RydWN0aW9uUHRyLCBv
ZmZzZXRCaXRzKTsKKyAgICAgICAgICAgIGluc3RydWN0aW9uID0gKEJSQUZfT1BDT0RFIHwgKCpp
bnN0cnVjdGlvblB0cisrICYgMHhmMDApKTsKKyAgICAgICAgICAgICppbnN0cnVjdGlvblB0ciA9
IGluc3RydWN0aW9uOworICAgICAgICAgICAgcHJpbnRCbG9ja0luc3RyKGluc3RydWN0aW9uUHRy
LCByZWludGVycHJldF9jYXN0PHVpbnQzMl90Pihmcm9tKSArIDEsIDMpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgQVNTRVJUKCgqKGluc3RydWN0aW9uUHRyICsg
MSkgJiBCUkFGX09QQ09ERSkgPT0gQlJBRl9PUENPREUpOworICAgICAgICBvZmZzZXRCaXRzIC09
IDQ7CisgICAgICAgIGlmIChvZmZzZXRCaXRzID49IC00MDk2ICYmIG9mZnNldEJpdHMgPD0gNDA5
NCkgeworICAgICAgICAgICAgKmluc3RydWN0aW9uUHRyID0gZ2V0T3Bjb2RlR3JvdXA2KEJSQV9P
UENPREUsIG9mZnNldEJpdHMgPj4gMSk7CisgICAgICAgICAgICAqKCsraW5zdHJ1Y3Rpb25QdHIp
ID0gTk9QX09QQ09ERTsKKyAgICAgICAgICAgIHByaW50QmxvY2tJbnN0cihpbnN0cnVjdGlvblB0
ciAtIDIsIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3Q+KGZyb20pLCAyKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGNoYW5nZVBDcmVsYXRpdmVBZGRyZXNzKCgq
aW5zdHJ1Y3Rpb25QdHIgJiAweGZmKSwgaW5zdHJ1Y3Rpb25QdHIsIG9mZnNldEJpdHMgLSAyKTsK
KyAgICAgICAgcHJpbnRJbnN0cigqaW5zdHJ1Y3Rpb25QdHIsIHJlaW50ZXJwcmV0X2Nhc3Q8dWlu
dDMyX3Q+KGZyb20pKTsKKyAgICB9CisKKyAgICAvLyBMaW5raW5nICYgcGF0Y2hpbmcKKworICAg
IHZvaWQgbGlua0p1bXAoSm1wU3JjIGZyb20sIEptcERzdCB0bykKKyAgICB7CisgICAgICAgIEFT
U0VSVCh0by5tX29mZnNldCAhPSAtMSk7CisgICAgICAgIEFTU0VSVChmcm9tLm1fb2Zmc2V0ICE9
IC0xKTsKKworICAgICAgICB1aW50MTZfdCogaW5zdHJ1Y3Rpb25QdHIgPSBnZXRJbnN0cnVjdGlv
blB0cihkYXRhKCksIGZyb20ubV9vZmZzZXQpOworICAgICAgICB1aW50MTZfdCBpbnN0cnVjdGlv
biA9ICppbnN0cnVjdGlvblB0cjsKKyAgICAgICAgaW50IG9mZnNldEJpdHM7CisKKyAgICAgICAg
aWYgKCgoaW5zdHJ1Y3Rpb24gJiAweGZmMDApID09IEJUX09QQ09ERSkgfHwgKChpbnN0cnVjdGlv
biAmIDB4ZmYwMCkgPT0gQkZfT1BDT0RFKSkgeworICAgICAgICAgICAgLyogQlQgbGFiZWwgPT4g
QkYgMgorICAgICAgICAgICAgICAgbm9wICAgICAgICBMRFIgcmVnCisgICAgICAgICAgICAgICBu
b3AgICAgICAgIGJyYWYgQHJlZworICAgICAgICAgICAgICAgbm9wICAgICAgICBub3AKKyAgICAg
ICAgICAgICovCisgICAgICAgICAgICBvZmZzZXRCaXRzID0gKHRvLm1fb2Zmc2V0IC0gZnJvbS5t
X29mZnNldCkgLSA4OworICAgICAgICAgICAgaW5zdHJ1Y3Rpb24gXj0gMHgwMjAyOworICAgICAg
ICAgICAgKmluc3RydWN0aW9uUHRyKysgPSBpbnN0cnVjdGlvbjsKKyAgICAgICAgICAgIGlmICgo
Kmluc3RydWN0aW9uUHRyICYgMHhmMDAwKSA9PSAweGUwMDApIHsKKyAgICAgICAgICAgICAgICB1
aW50MzJfdCogYWRkciA9IGdldExkckltbUFkZHJlc3NPblBvb2woaW5zdHJ1Y3Rpb25QdHIsIG1f
YnVmZmVyLnBvb2xBZGRyZXNzKCkpOworICAgICAgICAgICAgICAgICphZGRyID0gb2Zmc2V0Qml0
czsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIGNoYW5nZVBDcmVsYXRpdmVB
ZGRyZXNzKCgqaW5zdHJ1Y3Rpb25QdHIgJiAweGZmKSwgaW5zdHJ1Y3Rpb25QdHIsIG9mZnNldEJp
dHMpOworICAgICAgICAgICAgaW5zdHJ1Y3Rpb24gPSAoQlJBRl9PUENPREUgfCAoKmluc3RydWN0
aW9uUHRyKysgJiAweGYwMCkpOworICAgICAgICAgICAgKmluc3RydWN0aW9uUHRyID0gaW5zdHJ1
Y3Rpb247CisgICAgICAgICAgICBwcmludEJsb2NrSW5zdHIoaW5zdHJ1Y3Rpb25QdHIgLSAyLCBm
cm9tLm1fb2Zmc2V0LCAzKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAg
ICAgIC8qIE1PViAjIGltbSwgcmVnID0+IExEUiByZWcKKyAgICAgICAgICAgYnJhZiBAcmVnICAg
ICAgICAgYnJhZiBAcmVnCisgICAgICAgICAgIG5vcCAgICAgICAgICAgICAgIG5vcAorICAgICAg
ICAqLworICAgICAgICBBU1NFUlQoKCooaW5zdHJ1Y3Rpb25QdHIgKyAxKSAmIEJSQUZfT1BDT0RF
KSA9PSBCUkFGX09QQ09ERSk7CisgICAgICAgIG9mZnNldEJpdHMgPSAodG8ubV9vZmZzZXQgLSBm
cm9tLm1fb2Zmc2V0KSAtIDQ7CisgICAgICAgIGlmIChvZmZzZXRCaXRzID49IC00MDk2ICYmIG9m
ZnNldEJpdHMgPD0gNDA5NCkgeworICAgICAgICAgICAgKmluc3RydWN0aW9uUHRyID0gZ2V0T3Bj
b2RlR3JvdXA2KEJSQV9PUENPREUsIG9mZnNldEJpdHMgPj4gMSk7CisgICAgICAgICAgICAqKCsr
aW5zdHJ1Y3Rpb25QdHIpID0gTk9QX09QQ09ERTsKKyAgICAgICAgICAgIHByaW50QmxvY2tJbnN0
cihpbnN0cnVjdGlvblB0ciAtIDEsIGZyb20ubV9vZmZzZXQsIDIpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisKKyAgICAgICAgaW5zdHJ1Y3Rpb24gPSAqaW5zdHJ1Y3Rpb25QdHI7
CisgICAgICAgIGlmICgoaW5zdHJ1Y3Rpb24gICYgMHhmMDAwKSA9PSAweGUwMDApIHsKKyAgICAg
ICAgICAgIHVpbnQzMl90KiBhZGRyID0gZ2V0TGRySW1tQWRkcmVzc09uUG9vbChpbnN0cnVjdGlv
blB0ciwgbV9idWZmZXIucG9vbEFkZHJlc3MoKSk7CisgICAgICAgICAgICAqYWRkciA9IG9mZnNl
dEJpdHMgLSAyOworICAgICAgICAgICAgcHJpbnRJbnN0cigqaW5zdHJ1Y3Rpb25QdHIsIGZyb20u
bV9vZmZzZXQgKyAyKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAg
IGNoYW5nZVBDcmVsYXRpdmVBZGRyZXNzKCgqaW5zdHJ1Y3Rpb25QdHIgJiAweGZmKSwgaW5zdHJ1
Y3Rpb25QdHIsIG9mZnNldEJpdHMgLSAyKTsKKyAgICAgICAgcHJpbnRJbnN0cigqaW5zdHJ1Y3Rp
b25QdHIsIGZyb20ubV9vZmZzZXQgKyAyKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCogZ2V0
UmVsb2NhdGVkQWRkcmVzcyh2b2lkKiBjb2RlLCBKbXBTcmMganVtcCkKKyAgICB7CisgICAgICAg
IHJldHVybiByZWludGVycHJldF9jYXN0PHZvaWQqPihyZWludGVycHJldF9jYXN0PHVpbnQzMl90
Pihjb2RlKSArIGp1bXAubV9vZmZzZXQpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkKiBnZXRS
ZWxvY2F0ZWRBZGRyZXNzKHZvaWQqIGNvZGUsIEptcERzdCBkZXN0aW5hdGlvbikKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChkZXN0aW5hdGlvbi5tX29mZnNldCAhPSAtMSk7CisgICAgICAgIHJldHVy
biByZWludGVycHJldF9jYXN0PHZvaWQqPihyZWludGVycHJldF9jYXN0PHVpbnQzMl90Pihjb2Rl
KSArIGRlc3RpbmF0aW9uLm1fb2Zmc2V0KTsKKyAgICB9CisKKyAgICBzdGF0aWMgaW50IGdldERp
ZmZlcmVuY2VCZXR3ZWVuTGFiZWxzKEptcERzdCBzcmMsIEptcERzdCBkc3QpCisgICAgeworICAg
ICAgICByZXR1cm4gZHN0Lm1fb2Zmc2V0IC0gc3JjLm1fb2Zmc2V0OworICAgIH0KKworICAgIHN0
YXRpYyBpbnQgZ2V0RGlmZmVyZW5jZUJldHdlZW5MYWJlbHMoSm1wRHN0IHNyYywgSm1wU3JjIGRz
dCkKKyAgICB7CisgICAgICAgIHJldHVybiBkc3QubV9vZmZzZXQgLSBzcmMubV9vZmZzZXQ7Cisg
ICAgfQorCisgICAgc3RhdGljIGludCBnZXREaWZmZXJlbmNlQmV0d2VlbkxhYmVscyhKbXBTcmMg
c3JjLCBKbXBEc3QgZHN0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGRzdC5tX29mZnNldCAtIHNy
Yy5tX29mZnNldDsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBwYXRjaFBvaW50ZXIodm9pZCog
Y29kZSwgSm1wRHN0IHdoZXJlLCB2b2lkKiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHBhdGNoUG9p
bnRlcihyZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4oY29kZSkgKyB3aGVyZS5tX29mZnNldCwg
dmFsdWUpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIHBhdGNoUG9pbnRlcih2b2lkKiBjb2Rl
LCB2b2lkKiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHBhdGNoSW50MzIoY29kZSwgcmVpbnRlcnBy
ZXRfY2FzdDx1aW50MzJfdD4odmFsdWUpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBwYXRj
aEludDMyKHZvaWQqIGNvZGUsIHVpbnQzMl90IHZhbHVlKQorICAgIHsKKyAgICAgICAgY2hhbmdl
UENyZWxhdGl2ZUFkZHJlc3MoKCoocmVpbnRlcnByZXRfY2FzdDx1aW50MTZfdCo+KGNvZGUpKSAm
IDB4ZmYpLCByZWludGVycHJldF9jYXN0PHVpbnQxNl90Kj4oY29kZSksIHZhbHVlKTsKKyAgICB9
CisKKyAgICB2b2lkKiBleGVjdXRhYmxlQ29weShFeGVjdXRhYmxlUG9vbCogYWxsb2NhdG9yKQor
ICAgIHsKKyAgICAgICAgdm9pZCogY29weSA9IG1fYnVmZmVyLmV4ZWN1dGFibGVDb3B5KGFsbG9j
YXRvcik7CisgICAgICAgIEFTU0VSVChjb3B5KTsKKyAgICAgICAgcmV0dXJuIGNvcHk7CisgICAg
fQorCisgICAgdm9pZCBwcmVmaXgodWludDE2X3QgcHJlKQorICAgIHsKKyAgICAgICAgbV9idWZm
ZXIucHV0Qnl0ZShwcmUpOworICAgIH0KKworICAgIHZvaWQgb25lU2hvcnRPcCh1aW50MTZfdCBv
cGNvZGUsIGJvb2wgY2hlY2tzaXplID0gdHJ1ZSwgYm9vbCBpc0RvdWJsZSA9IHRydWUpCisgICAg
eworICAgICAgICBwcmludEluc3RyKG9wY29kZSwgbV9idWZmZXIudW5jaGVja2VkU2l6ZSgpLCBp
c0RvdWJsZSk7CisgICAgICAgIGlmIChjaGVja3NpemUpCisgICAgICAgICAgICBtX2J1ZmZlci5l
bnN1cmVTcGFjZShtYXhJbnN0cnVjdGlvblNpemUpOworICAgICAgICBtX2J1ZmZlci5wdXRTaG9y
dFVuY2hlY2tlZChvcGNvZGUpOworICAgIH0KKworICAgIHZvaWQgZW5zdXJlU3BhY2UoaW50IHNw
YWNlKQorICAgIHsKKyAgICAgICAgbV9idWZmZXIuZW5zdXJlU3BhY2Uoc3BhY2UpOworICAgIH0K
KworICAgIHZvaWQgZW5zdXJlU3BhY2UoaW50IGluc25TcGFjZSwgaW50IGNvbnN0U3BhY2UpCisg
ICAgeworICAgICAgICBtX2J1ZmZlci5lbnN1cmVTcGFjZShpbnNuU3BhY2UsIGNvbnN0U3BhY2Up
OworICAgIH0KKworICAgIC8vIEFkbWluaXN0cmF0aXZlIG1ldGhvZHMKKworICAgIHZvaWQqIGRh
dGEoKSBjb25zdCB7IHJldHVybiBtX2J1ZmZlci5kYXRhKCk7IH0KKyAgICBpbnQgc2l6ZSgpCisg
ICAgeworICAgICAgICByZXR1cm4gbV9idWZmZXIuc2l6ZSgpOworICAgIH0KKworI2lmZGVmIFNI
NF9BU1NFTUJMRVJfVFJBQ0lORworICAgIHN0YXRpYyB2b2lkIHByaW50SW5zdHIodWludDE2X3Qg
b3BjLCB1bnNpZ25lZCBpbnQgc2l6ZSwgYm9vbCBpc2RvdWJsZUluc3QgPSB0cnVlKQorICAgIHsK
KyAgICAgICAgaWYgKCFnZXRlbnYoIkphdmFTY3JpcHRDb3JlRHVtcEpJVCIpKQorICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgIGNvbnN0IGNoYXIgKmZvcm1hdCA9IDA7CisgICAgICAgIHBy
aW50ZlN0ZG91dEluc3RyKCJvZmZzZXQ6IDB4JTguOHhcdCIsIHNpemUpOworICAgICAgICBzd2l0
Y2ggKG9wYykgeworICAgICAgICBjYXNlIEJSS19PUENPREU6CisgICAgICAgICAgICBmb3JtYXQg
PSAiICAgIEJSS1xuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE5PUF9PUENP
REU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIE5PUFxuIjsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIFJUU19PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSIgICAgKlJU
U1xuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNFVFNfT1BDT0RFOgorICAg
ICAgICAgICAgZm9ybWF0ID0gIiAgICBTRVRTXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgU0VUVF9PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIFNFVFRcbiI7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDTFJUX09QQ09ERToKKyAgICAgICAg
ICAgIGZvcm1hdCA9ICIgICAgQ0xSVFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIEZTQ0hHX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgRlNDSEdcbiI7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAoZm9ybWF0KSB7CisgICAg
ICAgICAgICBwcmludGZTdGRvdXRJbnN0cihmb3JtYXQpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgICAgIHN3aXRjaCAob3BjICYgMHhmMGZmKSB7CisgICAgICAgIGNhc2Ug
QlJBRl9PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgICpCUkFGIFIlZFxuIjsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIERUX09QQ09ERToKKyAgICAgICAgICAgIGZv
cm1hdCA9ICIgICAgRFQgUiVkXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
Q01QUExfT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBDTVAvUEwgUiVkXG4iOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ01QUFpfT1BDT0RFOgorICAgICAgICAg
ICAgZm9ybWF0ID0gIiAgICBDTVAvUFogUiVkXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgSk1QX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgKkpNUCBAUiVk
XG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSlNSX09QQ09ERToKKyAgICAg
ICAgICAgIGZvcm1hdCA9ICIgICAgKkpTUiBAUiVkXG4iOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgTERTUFJfT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBMRFMg
UiVkLCBQUlxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIExEU0xQUl9PUENP
REU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIExEUy5MIEBSJWQrLCBQUlxuIjsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE1PVlRfT1BDT0RFOgorICAgICAgICAgICAgZm9y
bWF0ID0gIiAgICBNT1ZUIFIlZFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IFNIQUxfT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBTSEFMIFIlZFxuIjsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNIQVJfT1BDT0RFOgorICAgICAgICAgICAg
Zm9ybWF0ID0gIiAgICBTSEFSIFIlZFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIFNITExfT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBTSExMIFIlZFxuIjsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNITEwyX09QQ09ERToKKyAgICAgICAg
ICAgIGZvcm1hdCA9ICIgICAgU0hMTDIgUiVkXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgU0hMTDhfT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBTSExMOCBS
JWRcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTSExMMTZfT1BDT0RFOgor
ICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBTSExMMTYgUiVkXG4iOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgU0hMUl9PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAg
IFNITFIgUiVkXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU0hMUjJfT1BD
T0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBTSExSMiBSJWRcbiI7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBTSExSOF9PUENPREU6CisgICAgICAgICAgICBmb3JtYXQg
PSAiICAgIFNITFI4IFIlZFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNI
TFIxNl9PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIFNITFIxNiBSJWRcbiI7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTVFNQUl9PUENPREU6CisgICAgICAgICAg
ICBmb3JtYXQgPSAiICAgIFNUUyBQUiwgUiVkXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgU1RTTFBSX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgU1RTLkwg
UFIsIEAtUiVkXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTERTX1JNX0ZQ
VUxfT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBMRFMgUiVkLCBGUFVMXG4iOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU1RTX0ZQVUxfUk5fT1BDT0RFOgorICAg
ICAgICAgICAgZm9ybWF0ID0gIiAgICBTVFMgRlBVTCwgUiVkIFxuIjsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIEZMRFNfRlJNX0ZQVUxfT1BDT0RFOgorICAgICAgICAgICAgZm9y
bWF0ID0gIiAgICBGTERTIEZSJWQsIEZQVUxcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBGU1RTX0ZQVUxfRlJOX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAg
RlNUUyBGUFVMLCBSJWQgXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTERT
RlBTQ1JfT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBMRFMgUiVkLCBGUFNDUiBc
biI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTVFNGUFNDUl9PUENPREU6Cisg
ICAgICAgICAgICBmb3JtYXQgPSAiICAgIFNUUyBGUFNDUiwgUiVkIFxuIjsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIFNUU01BQ0xfT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0
ID0gIiAgICBTVFMgTUFDTCwgUiVkIFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIFNUU01BQ0hfT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBTVFMgTUFDSCwg
UiVkIFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEJTUkZfT1BDT0RFOgor
ICAgICAgICAgICAgZm9ybWF0ID0gIiAgICAqQlNSRiBSJWQiOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgRlRSQ19PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIEZU
UkMgRlIlZCwgRlBVTFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg
IGlmIChmb3JtYXQpIHsKKyAgICAgICAgICAgIHByaW50ZlN0ZG91dEluc3RyKGZvcm1hdCwgZ2V0
Um4ob3BjKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgc3dpdGNo
IChvcGMgJiAweGYwZmYpIHsKKyAgICAgICAgY2FzZSBGTkVHX09QQ09ERToKKyAgICAgICAgICAg
IGZvcm1hdCA9ICIgICAgRk5FRyBEUiVkXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgRkxPQVRfT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBGTE9BVCBEUiVk
XG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRlRSQ19PUENPREU6CisgICAg
ICAgICAgICBmb3JtYXQgPSAiICAgIEZUUkMgRlIlZCwgRlBVTFxuIjsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIEZTUVJUX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIg
ICAgRlNRUlQgRlIlZFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEZDTlZE
U19EUk1fRlBVTF9PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIEZDTlZEUyBGUiVk
LCBGUFVMXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGZv
cm1hdCkgeworICAgICAgICAgICAgaWYgKGlzZG91YmxlSW5zdCkKKyAgICAgICAgICAgICAgICBw
cmludGZTdGRvdXRJbnN0cihmb3JtYXQsIGdldERSbihvcGMpIDw8IDEpOworICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgIHByaW50ZlN0ZG91dEluc3RyKGZvcm1hdCwgZ2V0Um4ob3Bj
KSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgc3dpdGNoIChvcGMg
JiAweGYwMGYpIHsKKyAgICAgICAgY2FzZSBBRERfT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0
ID0gIiAgICBBREQgUiVkLCBSJWRcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBBRERDX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgQUREQyBSJWQsIFIlZFxu
IjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFERFZfT1BDT0RFOgorICAgICAg
ICAgICAgZm9ybWF0ID0gIiAgICBBRERWIFIlZCwgUiVkXG4iOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgQU5EX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgQU5E
IFIlZCwgUiVkXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRElWMV9PUENP
REU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIERJVjEgUiVkLCBSJWRcbiI7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDTVBFUV9PUENPREU6CisgICAgICAgICAgICBmb3Jt
YXQgPSAiICAgIENNUC9FUSBSJWQsIFIlZFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIENNUEdFX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgQ01QL0dFIFIl
ZCwgUiVkXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ01QR1RfT1BDT0RF
OgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBDTVAvR1QgUiVkLCBSJWRcbiI7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDTVBISV9PUENPREU6CisgICAgICAgICAgICBmb3Jt
YXQgPSAiICAgIENNUC9ISSBSJWQsIFIlZFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIENNUEhTX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgQ01QL0hTIFIl
ZCwgUiVkXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTU9WX09QQ09ERToK
KyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgTU9WIFIlZCwgUiVkXG4iOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgTU9WQl9XUklURV9STl9PUENPREU6CisgICAgICAgICAgICBm
b3JtYXQgPSAiICAgIE1PVi5CIFIlZCwgQFIlZFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIE1PVkJfV1JJVEVfUk5ERUNfT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0g
IiAgICBNT1YuQiBSJWQsIEAtUiVkXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgTU9WQl9XUklURV9SMFJOX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgTU9W
LkIgUiVkLCBAKFIwLCBSJWQpXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
TU9WQl9SRUFEX1JNX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgTU9WLkIgQFIl
ZCwgUiVkXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTU9WQl9SRUFEX1JN
SU5DX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgTU9WLkIgQFIlZCssIFIlZFxu
IjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE1PVkJfUkVBRF9SMFJNX09QQ09E
RToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgTU9WLkIgQChSMCwgUiVkKSwgUiVkXG4iOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTU9WTF9XUklURV9STl9PUENPREU6Cisg
ICAgICAgICAgICBmb3JtYXQgPSAiICAgIE1PVi5MIFIlZCwgQFIlZFxuIjsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIE1PVkxfV1JJVEVfUk5ERUNfT1BDT0RFOgorICAgICAgICAg
ICAgZm9ybWF0ID0gIiAgICBNT1YuTCBSJWQsIEAtUiVkXG4iOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgTU9WTF9XUklURV9SMFJOX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1h
dCA9ICIgICAgTU9WLkwgUiVkLCBAKFIwLCBSJWQpXG4iOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgTU9WTF9SRUFEX1JNX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIg
ICAgTU9WLkwgQFIlZCwgUiVkXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
TU9WTF9SRUFEX1JNSU5DX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgTU9WLkwg
QFIlZCssIFIlZFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE1PVkxfUkVB
RF9SMFJNX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgTU9WLkwgQChSMCwgUiVk
KSwgUiVkXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTVVMTF9PUENPREU6
CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIE1VTC5MIFIlZCwgUiVkXG4iOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgRE1VTExfTF9PUENPREU6CisgICAgICAgICAgICBmb3Jt
YXQgPSAiICAgIERNVUxVLkwgUiVkLCBSJWRcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBETVVMU0xfT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBETVVMUy5M
IFIlZCwgUiVkXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTkVHX09QQ09E
RToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgTkVHIFIlZCwgUiVkXG4iOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgTkVHQ19PUENPREU6CisgICAgICAgICAgICBmb3JtYXQg
PSAiICAgIE5FR0MgUiVkLCBSJWRcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBOT1RfT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBOT1QgUiVkLCBSJWRcbiI7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBPUl9PUENPREU6CisgICAgICAgICAg
ICBmb3JtYXQgPSAiICAgIE9SIFIlZCwgUiVkXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgU0hBRF9PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIFNIQUQgUiVk
LCBSJWRcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTSExEX09QQ09ERToK
KyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgU0hMRCBSJWQsIFIlZFxuIjsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIFNVQl9PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAi
ICAgIFNVQiBSJWQsIFIlZFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNV
QkNfT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBTVUJDIFIlZCwgUiVkXG4iOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU1VCVl9PUENPREU6CisgICAgICAgICAg
ICBmb3JtYXQgPSAiICAgIFNVQlYgUiVkLCBSJWRcbiI7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBUU1RfT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBUU1QgUiVk
LCBSJWRcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBYT1JfT1BDT0RFOgor
ICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBYT1IgUiVkLCBSJWRcbiI7YnJlYWs7CisgICAgICAg
IGNhc2UgTU9WV19XUklURV9STl9PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIE1P
Vi5XIFIlZCwgQFIlZFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE1PVldf
UkVBRF9STV9PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIE1PVi5XIEBSJWQsIFIl
ZFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE1PVldfUkVBRF9SMFJNX09Q
Q09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgTU9WLlcgQChSMCwgUiVkKSwgUiVkXG4i
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRVhUVVdfT1BDT0RFOgorICAgICAg
ICAgICAgZm9ybWF0ID0gIiAgICBFWFRVLlcgUiVkLCBSJWRcbiI7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICBpZiAoZm9ybWF0KSB7CisgICAgICAgICAgICBwcmludGZT
dGRvdXRJbnN0cihmb3JtYXQsIGdldFJtKG9wYyksIGdldFJuKG9wYykpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisgICAgICAgIHN3aXRjaCAob3BjICYgMHhmMDBmKSB7CisgICAg
ICAgIGNhc2UgRlNVQl9PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIEZTVUIgRlIl
ZCwgRlIlZFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEZBRERfT1BDT0RF
OgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBGQUREIEZSJWQsIEZSJWRcbiI7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBGRElWX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1h
dCA9ICIgICAgRkRJViBGUiVkLCBGUiVkXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgRk1VTF9PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIERNVUxMIEZSJWQs
IEZSJWRcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBGTU9WX09QQ09ERToK
KyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgRk1PViBGUiVkLCBGUiVkXG4iOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgRkNNUEVRX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1h
dCA9ICIgICAgRkNNUC9FUSBGUiVkLCBGUiVkXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgRkNNUEdUX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgRkNNUC9H
VCBGUiVkLCBGUiVkXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
aWYgKGZvcm1hdCkgeworICAgICAgICAgICAgaWYgKGlzZG91YmxlSW5zdCkKKyAgICAgICAgICAg
ICAgICBwcmludGZTdGRvdXRJbnN0cihmb3JtYXQsIGdldERSbShvcGMpIDw8IDEsIGdldERSbihv
cGMpIDw8IDEpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHByaW50ZlN0ZG91
dEluc3RyKGZvcm1hdCwgZ2V0Um0ob3BjKSwgZ2V0Um4ob3BjKSk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKyAgICAgICAgc3dpdGNoIChvcGMgJiAweGYwMGYpIHsKKyAgICAgICAg
Y2FzZSBGTU9WU19XUklURV9STl9ERUNfT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAg
ICAlcyBGUiVkLCBALVIlZFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEZN
T1ZTX1dSSVRFX1JOX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgJXMgRlIlZCwg
QFIlZFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEZNT1ZTX1dSSVRFX1Iw
Uk5fT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICAlcyBGUiVkLCBAKFIwLCBSJWQp
XG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGZvcm1hdCkg
eworICAgICAgICAgICAgaWYgKGlzZG91YmxlSW5zdCkKKyAgICAgICAgICAgICAgICBwcmludGZT
dGRvdXRJbnN0cihmb3JtYXQsICJGTU9WIiwgZ2V0RFJtKG9wYykgPDwgMSwgZ2V0RFJuKG9wYykp
OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHByaW50ZlN0ZG91dEluc3RyKGZv
cm1hdCwgIkZNT1YuUyIsIGdldFJtKG9wYyksIGdldFJuKG9wYykpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisgICAgICAgIHN3aXRjaCAob3BjICYgMHhmMDBmKSB7CisgICAgICAg
IGNhc2UgRk1PVlNfUkVBRF9STV9PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgICVz
IEBSJWQsIEZSJWRcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBGTU9WU19S
RUFEX1JNX0lOQ19PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgICVzIEBSJWQrLCBG
UiVkXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRk1PVlNfUkVBRF9SMFJN
X09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgJXMgQChSMCwgUiVkKSwgRlIlZFxu
IjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmIChmb3JtYXQpIHsK
KyAgICAgICAgICAgIGlmIChpc2RvdWJsZUluc3QpCisgICAgICAgICAgICAgICAgcHJpbnRmU3Rk
b3V0SW5zdHIoZm9ybWF0LCAiRk1PViIsIGdldERSbShvcGMpLCBnZXREUm4ob3BjKSA8PCAxKTsK
KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBwcmludGZTdGRvdXRJbnN0cihmb3Jt
YXQsICJGTU9WLlMiLCBnZXRSbShvcGMpLCBnZXRSbihvcGMpKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgICAgICBzd2l0Y2ggKG9wYyAmIDB4ZmYwMCkgeworICAgICAgICBj
YXNlIEJGX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgQkYgJWRcbiI7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBCRlNfT1BDT0RFOgorICAgICAgICAgICAgZm9y
bWF0ID0gIiAgICAqQkYvUyAlZFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IEFORElNTV9PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIEFORCAjJWQsIFIwXG4i
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQlRfT1BDT0RFOgorICAgICAgICAg
ICAgZm9ybWF0ID0gIiAgICBCVCAlZFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIEJUU19PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgICpCVC9TICVkXG4iOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ01QRVFJTU1fT1BDT0RFOgorICAgICAg
ICAgICAgZm9ybWF0ID0gIiAgICBDTVAvRVEgIyVkLCBSMFxuIjsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIE1PVkJfV1JJVEVfT0ZGR0JSX09QQ09ERToKKyAgICAgICAgICAgIGZv
cm1hdCA9ICIgICAgTU9WLkIgUjAsIEAoJWQsIEdCUilcbiI7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBNT1ZCX1JFQURfT0ZGR0JSX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1h
dCA9ICIgICAgTU9WLkIgQCglZCwgR0JSKSwgUjBcbiI7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBNT1ZMX1dSSVRFX09GRkdCUl9PUENPREU6CisgICAgICAgICAgICBmb3JtYXQg
PSAiICAgIE1PVi5MIFIwLCBAKCVkLCBHQlIpXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgTU9WTF9SRUFEX09GRkdCUl9PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAi
ICAgIE1PVi5MIEAoJWQsIEdCUiksIFIwXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgTU9WQV9SRUFEX09GRlBDX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAg
TU9WQSBAKCVkLCBQQyksIFIwXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
T1JJTU1fT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBPUiAjJWQsIFIwXG4iOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgT1JCSU1NX09QQ09ERToKKyAgICAgICAg
ICAgIGZvcm1hdCA9ICIgICAgT1IuQiAjJWQsIEAoUjAsIEdCUilcbiI7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBUU1RJTU1fT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0g
IiAgICBUU1QgIyVkLCBSMFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFRT
VEJfT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBUU1QuQiAlZCwgQChSMCwgR0JS
KVxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFhPUklNTV9PUENPREU6Cisg
ICAgICAgICAgICBmb3JtYXQgPSAiICAgIFhPUiAjJWQsIFIwXG4iOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgWE9SQl9PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAg
IFhPUi5CICVkLCBAKFIwLCBHQlIpXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgaWYgKGZvcm1hdCkgeworICAgICAgICAgICAgcHJpbnRmU3Rkb3V0SW5zdHIoZm9y
bWF0LCBnZXRJbW04KG9wYykpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
ICAgIHN3aXRjaCAob3BjICYgMHhmZjAwKSB7CisgICAgICAgIGNhc2UgTU9WQl9XUklURV9PRkZS
Tl9PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIE1PVi5CIFIwLCBAKCVkLCBSJWQp
XG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTU9WQl9SRUFEX09GRlJNX09Q
Q09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgTU9WLkIgQCglZCwgUiVkKSwgUjBcbiI7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAoZm9ybWF0KSB7Cisg
ICAgICAgICAgICBwcmludGZTdGRvdXRJbnN0cihmb3JtYXQsIGdldERpc3Aob3BjKSwgZ2V0Um0o
b3BjKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgc3dpdGNoIChv
cGMgJiAweGYwMDApIHsKKyAgICAgICAgY2FzZSBCUkFfT1BDT0RFOgorICAgICAgICAgICAgZm9y
bWF0ID0gIiAgICAqQlJBICVkXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
QlNSX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgKkJTUiAlZFxuIjsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmIChmb3JtYXQpIHsKKyAgICAgICAg
ICAgIHByaW50ZlN0ZG91dEluc3RyKGZvcm1hdCwgZ2V0SW1tMTIob3BjKSk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgc3dpdGNoIChvcGMgJiAweGYwMDApIHsKKyAg
ICAgICAgY2FzZSBNT1ZMX1JFQURfT0ZGUENfT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0g
IiAgICBNT1YuTCBAKCVkLCBQQyksIFIlZFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIEFERElNTV9PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIEFERCAjJWQs
IFIlZFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE1PVklNTV9PUENPREU6
CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIE1PViAjJWQsIFIlZFxuIjsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIE1PVldfUkVBRF9PRkZQQ19PUENPREU6CisgICAgICAgICAg
ICBmb3JtYXQgPSAiICAgIE1PVi5XIEAoJWQsIFBDKSwgUiVkXG4iOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGZvcm1hdCkgeworICAgICAgICAgICAgcHJpbnRm
U3Rkb3V0SW5zdHIoZm9ybWF0LCBnZXRJbW04KG9wYyksIGdldFJuKG9wYykpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHN3aXRjaCAob3BjICYgMHhmMDAwKSB7Cisg
ICAgICAgIGNhc2UgTU9WTF9XUklURV9PRkZSTl9PUENPREU6CisgICAgICAgICAgICBmb3JtYXQg
PSAiICAgIE1PVi5MIFIlZCwgQCglZCwgUiVkKVxuIjsKKyAgICAgICAgICAgIHByaW50ZlN0ZG91
dEluc3RyKGZvcm1hdCwgZ2V0Um0ob3BjKSwgZ2V0RGlzcChvcGMpLCBnZXRSbihvcGMpKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE1PVkxfUkVBRF9PRkZSTV9PUENPREU6Cisg
ICAgICAgICAgICBmb3JtYXQgPSAiICAgIE1PVi5MIEAoJWQsIFIlZCksIFIlZFxuIjsKKyAgICAg
ICAgICAgIHByaW50ZlN0ZG91dEluc3RyKGZvcm1hdCwgZ2V0RGlzcChvcGMpLCBnZXRSbShvcGMp
LCBnZXRSbihvcGMpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisg
ICAgc3RhdGljIHZvaWQgcHJpbnRmU3Rkb3V0SW5zdHIoY29uc3QgY2hhciogZm9ybWF0LCAuLi4p
CisgICAgeworICAgICAgICBpZiAoZ2V0ZW52KCJKYXZhU2NyaXB0Q29yZUR1bXBKSVQiKSkgewor
ICAgICAgICAgICAgdmFfbGlzdCBhcmdzOworICAgICAgICAgICAgdmFfc3RhcnQoYXJncywgZm9y
bWF0KTsKKyAgICAgICAgICAgIHZwcmludGZTdGRvdXRJbnN0cihmb3JtYXQsIGFyZ3MpOworICAg
ICAgICAgICAgdmFfZW5kKGFyZ3MpOworICAgICAgICB9CisgICAgfQorCisgICAgc3RhdGljIHZv
aWQgdnByaW50ZlN0ZG91dEluc3RyKGNvbnN0IGNoYXIqIGZvcm1hdCwgdmFfbGlzdCBhcmdzKQor
ICAgIHsKKyAgICAgICAgaWYgKGdldGVudigiSmF2YVNjcmlwdENvcmVEdW1wSklUIikpCisgICAg
ICAgICAgICB2ZnByaW50ZihzdGRvdXQsIGZvcm1hdCwgYXJncyk7CisgICAgfQorCisgICAgc3Rh
dGljIHZvaWQgcHJpbnRCbG9ja0luc3RyKHVpbnQxNl90KiBmaXJzdCwgdW5zaWduZWQgaW50IG9m
ZnNldCwgaW50IG5iSW5zdHIpCisgICAgeworICAgICAgICBwcmludGZTdGRvdXRJbnN0cigiPj4g
cmVwYXRjaCBpbnN0cnVjdGlvbnMgYWZ0ZXIgbGlua1xuIik7CisgICAgICAgIGZvciAoaW50IGkg
PSAwOyBpIDw9IG5iSW5zdHI7IGkrKykKKyAgICAgICAgICAgcHJpbnRJbnN0cigqKGZpcnN0ICsg
aSksIG9mZnNldCArIGkpOworICAgICAgICBwcmludGZTdGRvdXRJbnN0cigiPj4gZW5kIHJlcGF0
Y2hcbiIpOworICAgIH0KKyNlbHNlCisgICAgc3RhdGljIHZvaWQgcHJpbnRJbnN0cih1aW50MTZf
dCBvcGMsIHVuc2lnbmVkIGludCBzaXplLCBib29sIGlzZG91YmxlSW5zdCA9IHRydWUpIHt9Owor
ICAgIHN0YXRpYyB2b2lkIHByaW50QmxvY2tJbnN0cih1aW50MTZfdCogZmlyc3QsIHVuc2lnbmVk
IGludCBvZmZzZXQsIGludCBuYkluc3RyKSB7fTsKKyNlbmRpZgorCitwcml2YXRlOgorICAgIFNI
NEJ1ZmZlciBtX2J1ZmZlcjsKKyAgICBpbnQgbV9jbGFpbXNjcmF0Y2hSZWc7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShBU1NFTUJMRVIpICYmIENQVShTSDQp
CisKKyNlbmRpZiAvLyBTSDRBc3NlbWJsZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3lhcnIvWWFyckpJVC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJy
SklULmNwcAppbmRleCBiYzYxYTZlLi5mNzQxMDdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUveWFyci9ZYXJySklULmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUveWFy
ci9ZYXJySklULmNwcApAQCAtNTksNiArNTksMTYgQEAgY2xhc3MgWWFyckdlbmVyYXRvciA6IHBy
aXZhdGUgTWFjcm9Bc3NlbWJsZXIgewogICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIHJlZ1Qx
ID0gTUlQU1JlZ2lzdGVyczo6dDU7CiAKICAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCByZXR1
cm5SZWdpc3RlciA9IE1JUFNSZWdpc3RlcnM6OnYwOworI2VsaWYgQ1BVKFNINCkKKyAgICBzdGF0
aWMgY29uc3QgUmVnaXN0ZXJJRCBpbnB1dCA9IFNINFJlZ2lzdGVyczo6cjQ7CisgICAgc3RhdGlj
IGNvbnN0IFJlZ2lzdGVySUQgaW5kZXggPSBTSDRSZWdpc3RlcnM6OnI1OworICAgIHN0YXRpYyBj
b25zdCBSZWdpc3RlcklEIGxlbmd0aCA9IFNINFJlZ2lzdGVyczo6cjY7CisgICAgc3RhdGljIGNv
bnN0IFJlZ2lzdGVySUQgb3V0cHV0ID0gU0g0UmVnaXN0ZXJzOjpyNzsKKworICAgIHN0YXRpYyBj
b25zdCBSZWdpc3RlcklEIHJlZ1QwID0gU0g0UmVnaXN0ZXJzOjpyMDsKKyAgICBzdGF0aWMgY29u
c3QgUmVnaXN0ZXJJRCByZWdUMSA9IFNINFJlZ2lzdGVyczo6cjE7CisKKyAgICBzdGF0aWMgY29u
c3QgUmVnaXN0ZXJJRCByZXR1cm5SZWdpc3RlciA9IFNINFJlZ2lzdGVyczo6cjA7CiAjZWxpZiBD
UFUoWDg2KQogICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIGlucHV0ID0gWDg2UmVnaXN0ZXJz
OjplYXg7CiAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgaW5kZXggPSBYODZSZWdpc3RlcnM6
OmVkeDsKQEAgLTIxNzksNiArMjE4OSw5IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgOiBwcml2YXRl
IE1hY3JvQXNzZW1ibGVyIHsKICAgICAgICAgcHVzaChBUk1SZWdpc3RlcnM6OnI4KTsgLy8gc2Ny
YXRjaCByZWdpc3RlcgogI2VuZGlmCiAgICAgICAgIG1vdmUoQVJNUmVnaXN0ZXJzOjpyMywgb3V0
cHV0KTsKKyNlbGlmIENQVShTSDQpCisgICAgICAgIHB1c2goU0g0UmVnaXN0ZXJzOjpyMTEpOwor
ICAgICAgICBwdXNoKFNINFJlZ2lzdGVyczo6cjEzKTsKICNlbGlmIENQVShNSVBTKQogICAgICAg
ICAvLyBEbyBub3RoaW5nLgogI2VuZGlmCkBAIC0yMjAxLDYgKzIyMTQsOSBAQCBjbGFzcyBZYXJy
R2VuZXJhdG9yIDogcHJpdmF0ZSBNYWNyb0Fzc2VtYmxlciB7CiAgICAgICAgIHBvcChBUk1SZWdp
c3RlcnM6OnI2KTsKICAgICAgICAgcG9wKEFSTVJlZ2lzdGVyczo6cjUpOwogICAgICAgICBwb3Ao
QVJNUmVnaXN0ZXJzOjpyNCk7CisjZWxpZiBDUFUoU0g0KQorICAgICAgICBwb3AoU0g0UmVnaXN0
ZXJzOjpyMTMpOworICAgICAgICBwb3AoU0g0UmVnaXN0ZXJzOjpyMTEpOwogI2VsaWYgQ1BVKE1J
UFMpCiAgICAgICAgIC8vIERvIG5vdGhpbmcKICNlbmRpZgotLSAKMS43LjIuMwoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>87693</attachid>
            <date>2011-03-31 03:53:54 -0700</date>
            <delta_ts>2011-03-31 06:28:29 -0700</delta_ts>
            <desc>YARR for SH4</desc>
            <filename>0001-Add-YARR-JIT-for-SH4-Platforms.patch</filename>
            <type>text/plain</type>
            <size>126403</size>
            <attacher name="thouraya">thouraya.andolsi</attacher>
            
              <data encoding="base64">RnJvbSBjMWIxODY4ZjhiYjliZWNkZGRlZTUzODNkZWE2OTc2MDllNTQxMDFiIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBUaG91cmF5YSBBTkRPTFNJIDx0aG91cmF5YS5hbmRvbHNpQHN0
LmNvbT4KRGF0ZTogVGh1LCAzMSBNYXIgMjAxMSAxMTo1ODowMiArMDIwMApTdWJqZWN0OiBbUEFU
Q0hdIEFkZCBZQVJSIEpJVCBmb3IgU0g0IFBsYXRmb3Jtcy4KCi0tLQogU291cmNlL0phdmFTY3Jp
cHRDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgfCAgIDE2ICsKIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5hbSAgICAgICAgICAgICAgIHwgICAgMyArCiAuLi4vYXNz
ZW1ibGVyL0Fzc2VtYmxlckJ1ZmZlcldpdGhDb25zdGFudFBvb2wuaCAgICB8ICAgMjAgKwogU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5oICAgfCAgICA2ICsK
IC4uLi9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJTSDQuY3BwIHwgICA4
MiArCiAuLi4vSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyU0g0LmggICB8
IDE3NDMgKysrKysrKysrKysrKysrKysKIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
U0g0QXNzZW1ibGVyLmggICAgIHwgMjA2NyArKysrKysrKysrKysrKysrKysrKwogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3lhcnIvWWFyckpJVC5jcHAgICAgICAgICAgICAgfCAgIDE2ICsKIDggZmls
ZXMgY2hhbmdlZCwgMzk1MyBpbnNlcnRpb25zKCspLCAwIGRlbGV0aW9ucygtKQogY3JlYXRlIG1v
ZGUgMTAwNjQ0IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJT
SDQuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9NYWNyb0Fzc2VtYmxlclNINC5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9TSDRBc3NlbWJsZXIuaAoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmlu
ZGV4IDcxOTBlNmQuLjJjOWVlZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9D
aGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDE5IEBACisyMDExLTAzLTMxICBUaG91cmF5YSBBTkRPTFNJICA8dGhvdXJheWEuYW5kb2xzaUBz
dC5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
U0g0IEpJVCBTVVBQT1JULgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NDQzMjkuCisKKyAgICAgICAgQWRkIFlBUlIgc3VwcG9ydCBmb3IgU0g0IHBsYXRm
b3JtcyAoZGlzYWJsZWQgYnkgZGVmYXVsdCkuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToK
KyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaDoKKyAgICAgICAgKiBhc3NlbWJs
ZXIvTWFjcm9Bc3NlbWJsZXJTSDQuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBhc3NlbWJsZXIvTWFj
cm9Bc3NlbWJsZXJTSDQuaDogQWRkZWQuCisgICAgICAgICogYXNzZW1ibGVyL1NINEFzc2VtYmxl
ci5oOiBBZGRlZC4KKyAgICAgICAgKiB5YXJyL1lhcnJKSVQuY3BwOgorCiAyMDExLTAzLTMwICBB
ZGFtIFJvYmVuICA8YXJvYmVuQGFwcGxlLmNvbT4KIAogICAgICAgICBDbGVhbiBidWlsZCBmaXgK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5hbSBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5hbQppbmRleCBkOTJmNDYyLi4wYWI5ZmE4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUuYW0KKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtCkBAIC05MSw2ICs5MSw5IEBAIGphdmFz
Y3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
TWFjcm9Bc3NlbWJsZXJYODZfNjQuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2LmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvTWFjcm9Bc3NlbWJsZXJTSDQuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9NYWNyb0Fzc2VtYmxlclNINC5jcHAgXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvU0g0QXNzZW1ibGVyLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
UmVwYXRjaEJ1ZmZlci5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1g4NkFz
c2VtYmxlci5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNw
cCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fzc2VtYmxl
ckJ1ZmZlcldpdGhDb25zdGFudFBvb2wuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvQXNzZW1ibGVyQnVmZmVyV2l0aENvbnN0YW50UG9vbC5oCmluZGV4IDlhOTYxOGYuLjNjZmM2
N2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQXNzZW1ibGVy
QnVmZmVyV2l0aENvbnN0YW50UG9vbC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvQXNzZW1ibGVyQnVmZmVyV2l0aENvbnN0YW50UG9vbC5oCkBAIC04NSw3ICs4NSwxNCBA
QCBuYW1lc3BhY2UgSlNDIHsKIHRlbXBsYXRlIDxpbnQgbWF4UG9vbFNpemUsIGludCBiYXJyaWVy
U2l6ZSwgaW50IG1heEluc3RydWN0aW9uU2l6ZSwgY2xhc3MgQXNzZW1ibGVyVHlwZT4KIGNsYXNz
IEFzc2VtYmxlckJ1ZmZlcldpdGhDb25zdGFudFBvb2w6IHB1YmxpYyBBc3NlbWJsZXJCdWZmZXIg
ewogICAgIHR5cGVkZWYgU2VnbWVudGVkVmVjdG9yPHVpbnQzMl90LCA1MTI+IExvYWRPZmZzZXRz
OworICAgIHVzaW5nIEFzc2VtYmxlckJ1ZmZlcjo6cHV0SW50ZWdyYWw7CisgICAgdXNpbmcgQXNz
ZW1ibGVyQnVmZmVyOjpwdXRJbnRlZ3JhbFVuY2hlY2tlZDsKIHB1YmxpYzoKKyAgICB0eXBlZGVm
IHN0cnVjdCB7CisgICAgICAgIHNob3J0IGhpZ2g7CisgICAgICAgIHNob3J0IGxvdzsKKyAgICB9
IFR3b1Nob3J0czsKKwogICAgIGVudW0gewogICAgICAgICBVbmlxdWVDb25zdCwKICAgICAgICAg
UmV1c2FibGVDb25zdCwKQEAgLTE3MSw2ICsxNzgsMTkgQEAgcHVibGljOgogICAgICAgICBjb3Jy
ZWN0RGVsdGFzKDgpOwogICAgIH0KIAorICAgIHZvaWQgcHV0SW50ZWdyYWwoVHdvU2hvcnRzIHZh
bHVlKQorICAgIHsKKyAgICAgICAgaWYgKG1fc2l6ZSA+IG1fY2FwYWNpdHkgLSBzaXplb2YoVHdv
U2hvcnRzKSkKKyAgICAgICAgICAgIGdyb3coKTsKKyAgICAgICAgcHV0SW50ZWdyYWxVbmNoZWNr
ZWQodmFsdWUpOworICAgIH0KKworICAgIHZvaWQgcHV0SW50ZWdyYWxVbmNoZWNrZWQoVHdvU2hv
cnRzIHZhbHVlKQorICAgIHsKKyAgICAgICAgcHV0SW50ZWdyYWxVbmNoZWNrZWQodmFsdWUuaGln
aCk7CisgICAgICAgIHB1dEludGVncmFsVW5jaGVja2VkKHZhbHVlLmxvdyk7CisgICAgfQorCiAg
ICAgaW50IHNpemUoKQogICAgIHsKICAgICAgICAgZmx1c2hJZk5vU3BhY2VGb3IobWF4SW5zdHJ1
Y3Rpb25TaXplLCBzaXplb2YodWludDY0X3QpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAppbmRleCBiYjE5YTk4Li5jZmZiNDFkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5oCkBA
IC01MCw2ICs1MCwxMiBAQCBuYW1lc3BhY2UgSlNDIHsgdHlwZWRlZiBNYWNyb0Fzc2VtYmxlclg4
NiBNYWNyb0Fzc2VtYmxlckJhc2U7IH07CiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJYODZfNjQu
aCIKIG5hbWVzcGFjZSBKU0MgeyB0eXBlZGVmIE1hY3JvQXNzZW1ibGVyWDg2XzY0IE1hY3JvQXNz
ZW1ibGVyQmFzZTsgfTsKIAorI2VsaWYgQ1BVKFNINCkKKyNpbmNsdWRlICJNYWNyb0Fzc2VtYmxl
clNINC5oIgorbmFtZXNwYWNlIEpTQyB7Cit0eXBlZGVmIE1hY3JvQXNzZW1ibGVyU0g0IE1hY3Jv
QXNzZW1ibGVyQmFzZTsKK307CisKICNlbHNlCiAjZXJyb3IgIlRoZSBNYWNyb0Fzc2VtYmxlciBp
cyBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgcGxhdGZvcm0uIgogI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyU0g0LmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJTSDQuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3MTg4NDUKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyU0g0LmNwcApA
QCAtMCwwICsxLDgyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIFNUTWljcm9lbGVjdHJv
bmljcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKEFTU0VNQkxFUikg
JiYgQ1BVKFNINCkKKworI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyU0g0LmgiCisKK25hbWVzcGFj
ZSBKU0MgeworY29uc3QgQ29uZGl0aW9uIE1hY3JvQXNzZW1ibGVyU0g0OjpFcXVhbCA9IFNINEFz
c2VtYmxlcjo6RVE7Citjb25zdCBDb25kaXRpb24gTWFjcm9Bc3NlbWJsZXJTSDQ6Ok5vdEVxdWFs
ID0gU0g0QXNzZW1ibGVyOjpORTsKK2NvbnN0IENvbmRpdGlvbiBNYWNyb0Fzc2VtYmxlclNINDo6
R3JlYXRlclRoYW4gPSBTSDRBc3NlbWJsZXI6OkdUOworY29uc3QgQ29uZGl0aW9uIE1hY3JvQXNz
ZW1ibGVyU0g0OjpHcmVhdGVyVGhhbk9yRXF1YWwgPSBTSDRBc3NlbWJsZXI6OkdFOworY29uc3Qg
Q29uZGl0aW9uIE1hY3JvQXNzZW1ibGVyU0g0OjpMZXNzVGhhbiA9IFNINEFzc2VtYmxlcjo6TFQ7
Citjb25zdCBDb25kaXRpb24gTWFjcm9Bc3NlbWJsZXJTSDQ6Okxlc3NUaGFuT3JFcXVhbCA9IFNI
NEFzc2VtYmxlcjo6TEU7Citjb25zdCBDb25kaXRpb24gTWFjcm9Bc3NlbWJsZXJTSDQ6OlVHcmVh
dGVyVGhhbiA9IFNINEFzc2VtYmxlcjo6SEk7Citjb25zdCBDb25kaXRpb24gTWFjcm9Bc3NlbWJs
ZXJTSDQ6OlVHcmVhdGVyVGhhbk9yRXF1YWwgPSBTSDRBc3NlbWJsZXI6OkhTOworY29uc3QgQ29u
ZGl0aW9uIE1hY3JvQXNzZW1ibGVyU0g0OjpVTGVzc1RoYW4gPSBTSDRBc3NlbWJsZXI6OkxJOwor
Y29uc3QgQ29uZGl0aW9uIE1hY3JvQXNzZW1ibGVyU0g0OjpVTGVzc1RoYW5PckVxdWFsID0gU0g0
QXNzZW1ibGVyOjpMUzsKK2NvbnN0IENvbmRpdGlvbiBNYWNyb0Fzc2VtYmxlclNINDo6WmVybyA9
IFNINEFzc2VtYmxlcjo6RVE7Citjb25zdCBDb25kaXRpb24gTWFjcm9Bc3NlbWJsZXJTSDQ6Ok5v
blplcm8gPSBTSDRBc3NlbWJsZXI6Ok5FOworY29uc3QgQ29uZGl0aW9uIE1hY3JvQXNzZW1ibGVy
U0g0OjpPdmVyZmxvdyA9IFNINEFzc2VtYmxlcjo6T0Y7Citjb25zdCBDb25kaXRpb24gTWFjcm9B
c3NlbWJsZXJTSDQ6OkFib3ZlID0gU0g0QXNzZW1ibGVyOjpISTsKK2NvbnN0IENvbmRpdGlvbiBN
YWNyb0Fzc2VtYmxlclNINDo6QWJvdmVPckVxdWFsID0gU0g0QXNzZW1ibGVyOjpIUzsKK2NvbnN0
IENvbmRpdGlvbiBNYWNyb0Fzc2VtYmxlclNINDo6QmVsb3cgPSBTSDRBc3NlbWJsZXI6OkxJOwor
Y29uc3QgQ29uZGl0aW9uIE1hY3JvQXNzZW1ibGVyU0g0OjpCZWxvd09yRXF1YWwgPSBTSDRBc3Nl
bWJsZXI6OkxTOworY29uc3QgQ29uZGl0aW9uIE1hY3JvQXNzZW1ibGVyU0g0OjpEb3VibGVFcXVh
bCA9IFNINEFzc2VtYmxlcjo6RVE7Citjb25zdCBDb25kaXRpb24gTWFjcm9Bc3NlbWJsZXJTSDQ6
OkRvdWJsZU5vdEVxdWFsID0gU0g0QXNzZW1ibGVyOjpORTsKK2NvbnN0IENvbmRpdGlvbiBNYWNy
b0Fzc2VtYmxlclNINDo6RG91YmxlR3JlYXRlclRoYW4gPSBTSDRBc3NlbWJsZXI6OkdUOworY29u
c3QgQ29uZGl0aW9uIE1hY3JvQXNzZW1ibGVyU0g0OjpEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWwg
PSBTSDRBc3NlbWJsZXI6OkdFOworY29uc3QgQ29uZGl0aW9uIE1hY3JvQXNzZW1ibGVyU0g0OjpE
b3VibGVMZXNzVGhhbiA9IFNINEFzc2VtYmxlcjo6TFQ7Citjb25zdCBDb25kaXRpb24gTWFjcm9B
c3NlbWJsZXJTSDQ6OkRvdWJsZUxlc3NUaGFuT3JFcXVhbCA9IFNINEFzc2VtYmxlcjo6TEU7Citj
b25zdCBDb25kaXRpb24gTWFjcm9Bc3NlbWJsZXJTSDQ6OkRvdWJsZUVxdWFsT3JVbm9yZGVyZWQg
PSBTSDRBc3NlbWJsZXI6OkVRVTsKK2NvbnN0IENvbmRpdGlvbiBNYWNyb0Fzc2VtYmxlclNINDo6
RG91YmxlTm90RXF1YWxPclVub3JkZXJlZCA9IFNINEFzc2VtYmxlcjo6TkVVOworY29uc3QgQ29u
ZGl0aW9uIE1hY3JvQXNzZW1ibGVyU0g0OjpEb3VibGVHcmVhdGVyVGhhbk9yVW5vcmRlcmVkID0g
U0g0QXNzZW1ibGVyOjpHVFU7Citjb25zdCBDb25kaXRpb24gTWFjcm9Bc3NlbWJsZXJTSDQ6OkRv
dWJsZUdyZWF0ZXJUaGFuT3JFcXVhbE9yVW5vcmRlcmVkID0gU0g0QXNzZW1ibGVyOjpHRVU7Citj
b25zdCBDb25kaXRpb24gTWFjcm9Bc3NlbWJsZXJTSDQ6OkRvdWJsZUxlc3NUaGFuT3JVbm9yZGVy
ZWQgPSBTSDRBc3NlbWJsZXI6OkxUVTsKK2NvbnN0IENvbmRpdGlvbiBNYWNyb0Fzc2VtYmxlclNI
NDo6RG91YmxlTGVzc1RoYW5PckVxdWFsT3JVbm9yZGVyZWQgPSBTSDRBc3NlbWJsZXI6OkxFVTsK
K2NvbnN0IENvbmRpdGlvbiBNYWNyb0Fzc2VtYmxlclNINDo6U2lnbmVkID0gU0g0QXNzZW1ibGVy
OjpTSTsKKwordm9pZCBNYWNyb0Fzc2VtYmxlclNINDo6bGlua0NhbGwodm9pZCogY29kZSwgQ2Fs
bCBjYWxsLCBGdW5jdGlvblB0ciBmdW5jdGlvbikKK3sKKyAgICBTSDRBc3NlbWJsZXI6OmxpbmtD
YWxsKGNvZGUsIGNhbGwubV9qbXAsIGZ1bmN0aW9uLnZhbHVlKCkpOworfQorCit2b2lkIE1hY3Jv
QXNzZW1ibGVyU0g0OjpyZXBhdGNoQ2FsbChDb2RlTG9jYXRpb25DYWxsIGNhbGwsIENvZGVMb2Nh
dGlvbkxhYmVsIGRlc3RpbmF0aW9uKQoreworICAgIFNINEFzc2VtYmxlcjo6cmVsaW5rQ2FsbChj
YWxsLmRhdGFMb2NhdGlvbigpLCBkZXN0aW5hdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKTsKK30K
Kwordm9pZCBNYWNyb0Fzc2VtYmxlclNINDo6cmVwYXRjaENhbGwoQ29kZUxvY2F0aW9uQ2FsbCBj
YWxsLCBGdW5jdGlvblB0ciBkZXN0aW5hdGlvbikKK3sKKyAgICBTSDRBc3NlbWJsZXI6OnJlbGlu
a0NhbGwoY2FsbC5kYXRhTG9jYXRpb24oKSwgZGVzdGluYXRpb24uZXhlY3V0YWJsZUFkZHJlc3Mo
KSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxFKEFTU0VNQkxF
UikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3Nl
bWJsZXJTSDQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJs
ZXJTSDQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNGIwNjAyCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2Vt
YmxlclNINC5oCkBAIC0wLDAgKzEsMTc0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOS0y
MDExIFNUTWljcm9lbGVjdHJvbmljcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKworI2lmbmRlZiBNYWNyb0Fzc2VtYmxlclNINF9o
CisjZGVmaW5lIE1hY3JvQXNzZW1ibGVyU0g0X2gKKworI2lmIEVOQUJMRShBU1NFTUJMRVIpICYm
IENQVShTSDQpCisKKyNpbmNsdWRlICJBYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgiCisjaW5jbHVk
ZSAiU0g0QXNzZW1ibGVyLmgiCisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKworbmFtZXNw
YWNlIEpTQyB7Cit0eXBlZGVmIFNINEFzc2VtYmxlcjo6Q29uZGl0aW9uIENvbmRpdGlvbjsKKwor
Y2xhc3MgTWFjcm9Bc3NlbWJsZXJTSDQgOiBwdWJsaWMgQWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjxT
SDRBc3NlbWJsZXI+IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIFNINEFzc2VtYmxlcjo6RlBSZWdp
c3RlcklEIEZQUmVnaXN0ZXJJRDsKKworICAgIHN0YXRpYyBjb25zdCBDb25kaXRpb24gRXF1YWw7
CisgICAgc3RhdGljIGNvbnN0IENvbmRpdGlvbiBOb3RFcXVhbDsKKyAgICBzdGF0aWMgY29uc3Qg
Q29uZGl0aW9uIEdyZWF0ZXJUaGFuOworICAgIHN0YXRpYyBjb25zdCBDb25kaXRpb24gR3JlYXRl
clRoYW5PckVxdWFsOworICAgIHN0YXRpYyBjb25zdCBDb25kaXRpb24gTGVzc1RoYW47CisgICAg
c3RhdGljIGNvbnN0IENvbmRpdGlvbiBMZXNzVGhhbk9yRXF1YWw7CisgICAgc3RhdGljIGNvbnN0
IENvbmRpdGlvbiBVR3JlYXRlclRoYW47CisgICAgc3RhdGljIGNvbnN0IENvbmRpdGlvbiBVR3Jl
YXRlclRoYW5PckVxdWFsOworICAgIHN0YXRpYyBjb25zdCBDb25kaXRpb24gVUxlc3NUaGFuOwor
ICAgIHN0YXRpYyBjb25zdCBDb25kaXRpb24gVUxlc3NUaGFuT3JFcXVhbDsKKyAgICBzdGF0aWMg
Y29uc3QgQ29uZGl0aW9uIFplcm87CisgICAgc3RhdGljIGNvbnN0IENvbmRpdGlvbiBOb25aZXJv
OworICAgIHN0YXRpYyBjb25zdCBDb25kaXRpb24gT3ZlcmZsb3c7CisgICAgc3RhdGljIGNvbnN0
IENvbmRpdGlvbiBBYm92ZTsKKyAgICBzdGF0aWMgY29uc3QgQ29uZGl0aW9uIEFib3ZlT3JFcXVh
bDsKKyAgICBzdGF0aWMgY29uc3QgQ29uZGl0aW9uIEJlbG93OworICAgIHN0YXRpYyBjb25zdCBD
b25kaXRpb24gQmVsb3dPckVxdWFsOworICAgIHN0YXRpYyBjb25zdCBDb25kaXRpb24gRG91Ymxl
RXF1YWw7CisgICAgc3RhdGljIGNvbnN0IENvbmRpdGlvbiBEb3VibGVOb3RFcXVhbDsKKyAgICBz
dGF0aWMgY29uc3QgQ29uZGl0aW9uIERvdWJsZUdyZWF0ZXJUaGFuOworICAgIHN0YXRpYyBjb25z
dCBDb25kaXRpb24gRG91YmxlR3JlYXRlclRoYW5PckVxdWFsOworICAgIHN0YXRpYyBjb25zdCBD
b25kaXRpb24gRG91YmxlTGVzc1RoYW47CisgICAgc3RhdGljIGNvbnN0IENvbmRpdGlvbiBEb3Vi
bGVMZXNzVGhhbk9yRXF1YWw7CisgICAgc3RhdGljIGNvbnN0IENvbmRpdGlvbiBEb3VibGVFcXVh
bE9yVW5vcmRlcmVkOworICAgIHN0YXRpYyBjb25zdCBDb25kaXRpb24gRG91YmxlTm90RXF1YWxP
clVub3JkZXJlZDsKKyAgICBzdGF0aWMgY29uc3QgQ29uZGl0aW9uIERvdWJsZUdyZWF0ZXJUaGFu
T3JVbm9yZGVyZWQ7CisgICAgc3RhdGljIGNvbnN0IENvbmRpdGlvbiBEb3VibGVHcmVhdGVyVGhh
bk9yRXF1YWxPclVub3JkZXJlZDsKKyAgICBzdGF0aWMgY29uc3QgQ29uZGl0aW9uIERvdWJsZUxl
c3NUaGFuT3JVbm9yZGVyZWQ7CisgICAgc3RhdGljIGNvbnN0IENvbmRpdGlvbiBEb3VibGVMZXNz
VGhhbk9yRXF1YWxPclVub3JkZXJlZDsKKyAgICBzdGF0aWMgY29uc3QgQ29uZGl0aW9uIFNpZ25l
ZDsKKyAgICBzdGF0aWMgY29uc3QgU2NhbGUgU2NhbGVQdHIgPSBUaW1lc0ZvdXI7CisgICAgc3Rh
dGljIGNvbnN0IEZQUmVnaXN0ZXJJRCBmc2NyYXRjaCA9IFNINFJlZ2lzdGVyczo6ZnIxMDsKKyAg
ICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCBzdGFja1BvaW50ZXJSZWdpc3RlciA9IFNINFJlZ2lz
dGVyczo6c3A7CisgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgbGlua1JlZ2lzdGVyID0gU0g0
UmVnaXN0ZXJzOjpwcjsKKyAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCBzY3JhdGNoUmVnMyA9
IFNINFJlZ2lzdGVyczo6cjEzOworCisgICAgUmVnaXN0ZXJJRCBjbGFpbVNjcmF0Y2goKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIG1fYXNzZW1ibGVyLmNsYWltU2NyYXRjaCgpOworICAgIH0KKwor
ICAgIHZvaWQgcmVsZWFzZVNjcmF0Y2goUmVnaXN0ZXJJRCByZWcpCisgICAgeworICAgICAgICBt
X2Fzc2VtYmxlci5yZWxlYXNlU2NyYXRjaChyZWcpOworICAgIH0KKworICAgIC8vIEludGVnZXIg
YXJpdGhtZXRpYyBvcGVyYXRpb25zCisKKyAgICB2b2lkIGFkZDMyKFJlZ2lzdGVySUQgc3JjLCBS
ZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5hZGRsUmVnUmVnKHNy
YywgZGVzdCk7CisgICAgfQorCisgICAgdm9pZCBhZGQzMihUcnVzdGVkSW1tMzIgaW1tLCBSZWdp
c3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBpZiAobV9hc3NlbWJsZXIuaXNJbW1lZGlhdGUo
aW1tLm1fdmFsdWUpKSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGRsSW1tOHIoaW1tLm1f
dmFsdWUsIGRlc3QpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAg
UmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9h
ZENvbnN0YW50KGltbS5tX3ZhbHVlLCBzY3IpOworICAgICAgICBtX2Fzc2VtYmxlci5hZGRsUmVn
UmVnKHNjciwgZGVzdCk7CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgfQorCisg
ICAgdm9pZCBhZGQzMihUcnVzdGVkSW1tMzIgaW1tLCBSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJ
RCBkZXN0KQorICAgIHsKKyAgICAgICAgaWYgKHNyYyAhPSBkZXN0KQorICAgICAgICAgICAgbV9h
c3NlbWJsZXIubW92bFJlZ1JlZyhzcmMsIGRlc3QpOworICAgICAgICBhZGQzMihpbW0sIGRlc3Qp
OworICAgIH0KKworICAgIHZvaWQgYWRkMzIoVHJ1c3RlZEltbTMyIGltbSwgQWRkcmVzcyBhZGRy
ZXNzKQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAg
ICAgICAgbG9hZDMyKGFkZHJlc3MsIHNjcik7CisgICAgICAgIGFkZDMyKGltbSwgc2NyKTsKKyAg
ICAgICAgc3RvcmUzMihzY3IsIGFkZHJlc3MpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3Ip
OworICAgIH0KKworICAgIHZvaWQgYWRkMzIoQWRkcmVzcyBzcmMsIFJlZ2lzdGVySUQgZGVzdCkK
KyAgICB7CisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAg
IGxvYWQzMihzcmMsIHNjcik7CisgICAgICAgIG1fYXNzZW1ibGVyLmFkZGxSZWdSZWcoc2NyLCBk
ZXN0KTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICB9CisKKyAgICB2b2lkIGFu
ZDMyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fz
c2VtYmxlci5hbmRsUmVnUmVnKHNyYywgZGVzdCk7CisgICAgfQorCisgICAgdm9pZCBhbmQzMihU
cnVzdGVkSW1tMzIgaW1tLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBpZiAoKGlt
bS5tX3ZhbHVlIDw9IDI1NSkgJiYgKGltbS5tX3ZhbHVlID49IDApICYmIChkZXN0ID09IFNINFJl
Z2lzdGVyczo6cjApKSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5hbmRsSW1tOHIoaW1tLm1f
dmFsdWUsIGRlc3QpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAg
UmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9h
ZENvbnN0YW50KChpbW0ubV92YWx1ZSksIHNjcik7CisgICAgICAgIG1fYXNzZW1ibGVyLmFuZGxS
ZWdSZWcoc2NyLCBkZXN0KTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICB9CisK
KyAgICB2b2lkIGxzaGlmdDMyKFJlZ2lzdGVySUQgc2hpZnRhbW91bnQsIFJlZ2lzdGVySUQgZGVz
dCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnNobGxSZWdSZWcoZGVzdCwgc2hpZnRhbW91
bnQpOworICAgIH0KKworICAgIHZvaWQgcnNoaWZ0MzIoaW50IGltbSwgUmVnaXN0ZXJJRCBkZXN0
KQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAg
ICAgbV9hc3NlbWJsZXIubG9hZENvbnN0YW50KC1pbW0sIHNjcik7CisgICAgICAgIG1fYXNzZW1i
bGVyLnNoYVJlZ1JlZyhkZXN0LCBzY3IpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOwor
ICAgIH0KKworICAgIHZvaWQgbHNoaWZ0MzIoVHJ1c3RlZEltbTMyIGltbSwgUmVnaXN0ZXJJRCBk
ZXN0KQorICAgIHsKKyAgICAgICAgaWYgKChpbW0ubV92YWx1ZSA9PSAxKSB8fCAoaW1tLm1fdmFs
dWUgPT0gMikgfHwgKGltbS5tX3ZhbHVlID09IDgpIHx8IChpbW0ubV92YWx1ZSA9PSAxNikpIHsK
KyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnNobGxJbW04cihpbW0ubV92YWx1ZSwgZGVzdCk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBSZWdpc3RlcklEIHNjciA9
IGNsYWltU2NyYXRjaCgpOworICAgICAgICBtX2Fzc2VtYmxlci5sb2FkQ29uc3RhbnQoaW1tLm1f
dmFsdWUsIHNjcik7CisgICAgICAgIG1fYXNzZW1ibGVyLnNobGxSZWdSZWcoZGVzdCwgc2NyKTsK
KyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICB9CisKKyAgICB2b2lkIG11bDMyKFJl
Z2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxl
ci5pbXVsbFJlZ1JlZyhzcmMsIGRlc3QpOworICAgICAgICBtX2Fzc2VtYmxlci5zdHNtYWNsKGRl
c3QpOworICAgIH0KKworICAgIHZvaWQgbXVsMzIoVHJ1c3RlZEltbTMyIGltbSwgUmVnaXN0ZXJJ
RCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0g
Y2xhaW1TY3JhdGNoKCk7CisgICAgICAgIG1vdmUoaW1tLCBzY3IpOworICAgICAgICBpZiAgKHNy
YyAhPSBkZXN0KQorICAgICAgICAgICAgbW92ZShzcmMsIGRlc3QpOworICAgICAgICBtdWwzMihz
Y3IsICBkZXN0KTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICB9CisKKyAgICB2
b2lkIG5vdDMyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAg
ICBtX2Fzc2VtYmxlci5ub3RsUmVnKHNyYywgZGVzdCk7CisgICAgfQorCisgICAgdm9pZCBvcjMy
KFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2Vt
Ymxlci5vcmxSZWdSZWcoc3JjLCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIG9yMzIoVHJ1c3Rl
ZEltbTMyIGltbSwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgaWYgKChpbW0ubV92
YWx1ZSA8PSAyNTUpICYmIChpbW0ubV92YWx1ZSA+PSAwKSAmJiAoZGVzdCA9PSBTSDRSZWdpc3Rl
cnM6OnIwKSkgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIub3JsSW1tOHIoaW1tLm1fdmFsdWUs
IGRlc3QpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgUmVnaXN0
ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9hZENvbnN0
YW50KGltbS5tX3ZhbHVlLCBzY3IpOworICAgICAgICBtX2Fzc2VtYmxlci5vcmxSZWdSZWcoc2Ny
LCBkZXN0KTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICB9CisKKyAgICB2b2lk
IHJzaGlmdDMyKFJlZ2lzdGVySUQgc2hpZnRhbW91bnQsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7
CisgICAgICAgIGNvbXBhcmUzMigzMiwgc2hpZnRhbW91bnQsIEVxdWFsKTsKKyAgICAgICAgbV9h
c3NlbWJsZXIuZW5zdXJlU3BhY2UobV9hc3NlbWJsZXIubWF4SW5zdHJ1Y3Rpb25TaXplICsgNCk7
CisgICAgICAgIG1fYXNzZW1ibGVyLmJyYW5jaChCVF9PUENPREUsIDEpOworICAgICAgICBtX2Fz
c2VtYmxlci5uZWcoc2hpZnRhbW91bnQsIHNoaWZ0YW1vdW50KTsKKyAgICAgICAgbV9hc3NlbWJs
ZXIuc2hhUmVnUmVnKGRlc3QsIHNoaWZ0YW1vdW50KTsKKyAgICB9CisKKyAgICB2b2lkIHJzaGlm
dDMyKFRydXN0ZWRJbW0zMiBpbW0sIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIGlm
IChpbW0ubV92YWx1ZSAmIDB4MWYpCisgICAgICAgICAgICByc2hpZnQzMihpbW0ubV92YWx1ZSAm
IDB4MWYsIGRlc3QpOworICAgIH0KKworICAgIHZvaWQgc3ViMzIoUmVnaXN0ZXJJRCBzcmMsIFJl
Z2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnN1YmxSZWdSZWcoc3Jj
LCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIHN1YjMyKFRydXN0ZWRJbW0zMiBpbW0sIEFic29s
dXRlQWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklEIHNjcmF0Y2hSZWcpCisgICAgeworICAgICAg
ICBSZWdpc3RlcklEIHJlc3VsdCA9IGNsYWltU2NyYXRjaCgpOworCisgICAgICAgIG1fYXNzZW1i
bGVyLmxvYWRDb25zdGFudChyZWludGVycHJldF9jYXN0PHVpbnQzMl90PihhZGRyZXNzLm1fcHRy
KSwgc2NyYXRjaFJlZyk7CisgICAgICAgIG1fYXNzZW1ibGVyLm1vdmxNZW1SZWcoc2NyYXRjaFJl
ZywgcmVzdWx0KTsKKworICAgICAgICBpZiAobV9hc3NlbWJsZXIuaXNJbW1lZGlhdGUoLWltbS5t
X3ZhbHVlKSkKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZGxJbW04cigtaW1tLm1fdmFsdWUs
IHJlc3VsdCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIubG9hZENv
bnN0YW50KGltbS5tX3ZhbHVlLCBzY3JhdGNoUmVnMyk7CisgICAgICAgICAgICBtX2Fzc2VtYmxl
ci5zdWJsUmVnUmVnKHNjcmF0Y2hSZWczLCByZXN1bHQpOworICAgICAgICB9CisKKyAgICAgICAg
c3RvcmUzMihyZXN1bHQsIHNjcmF0Y2hSZWcpOworICAgICAgICByZWxlYXNlU2NyYXRjaChyZXN1
bHQpOworICAgIH0KKworICAgIHZvaWQgc3ViMzIoVHJ1c3RlZEltbTMyIGltbSwgQWJzb2x1dGVB
ZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBSZWdpc3RlcklEIHJlc3VsdCA9IGNsYWlt
U2NyYXRjaCgpOworICAgICAgICBSZWdpc3RlcklEIHNjcmF0Y2hSZWcgPSBjbGFpbVNjcmF0Y2go
KTsKKworICAgICAgICBtX2Fzc2VtYmxlci5sb2FkQ29uc3RhbnQocmVpbnRlcnByZXRfY2FzdDx1
aW50MzJfdD4oYWRkcmVzcy5tX3B0ciksIHNjcmF0Y2hSZWcpOworICAgICAgICBtX2Fzc2VtYmxl
ci5tb3ZsTWVtUmVnKHNjcmF0Y2hSZWcsIHJlc3VsdCk7CisKKyAgICAgICAgaWYgKG1fYXNzZW1i
bGVyLmlzSW1tZWRpYXRlKC1pbW0ubV92YWx1ZSkpCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5h
ZGRsSW1tOHIoLWltbS5tX3ZhbHVlLCByZXN1bHQpOworICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgIG1fYXNzZW1ibGVyLmxvYWRDb25zdGFudChpbW0ubV92YWx1ZSwgc2NyYXRjaFJlZzMpOwor
ICAgICAgICAgICAgbV9hc3NlbWJsZXIuc3VibFJlZ1JlZyhzY3JhdGNoUmVnMywgcmVzdWx0KTsK
KyAgICAgICAgfQorCisgICAgICAgIHN0b3JlMzIocmVzdWx0LCBzY3JhdGNoUmVnKTsKKyAgICAg
ICAgcmVsZWFzZVNjcmF0Y2gocmVzdWx0KTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyYXRj
aFJlZyk7CisgICAgfQorCisgICAgdm9pZCBhZGQzMihUcnVzdGVkSW1tMzIgaW1tLCBBYnNvbHV0
ZUFkZHJlc3MgYWRkcmVzcywgUmVnaXN0ZXJJRCBzY3JhdGNoUmVnKQorICAgIHsKKyAgICAgICAg
UmVnaXN0ZXJJRCByZXN1bHQgPSBjbGFpbVNjcmF0Y2goKTsKKworICAgICAgICBtX2Fzc2VtYmxl
ci5sb2FkQ29uc3RhbnQocmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdD4oYWRkcmVzcy5tX3B0ciks
IHNjcmF0Y2hSZWcpOworICAgICAgICBtX2Fzc2VtYmxlci5tb3ZsTWVtUmVnKHNjcmF0Y2hSZWcs
IHJlc3VsdCk7CisKKyAgICAgICAgaWYgKG1fYXNzZW1ibGVyLmlzSW1tZWRpYXRlKGltbS5tX3Zh
bHVlKSkKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZGxJbW04cihpbW0ubV92YWx1ZSwgcmVz
dWx0KTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5sb2FkQ29uc3Rh
bnQoaW1tLm1fdmFsdWUsIHNjcmF0Y2hSZWczKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFk
ZGxSZWdSZWcoc2NyYXRjaFJlZzMsIHJlc3VsdCk7CisgICAgICAgIH0KKworICAgICAgICBzdG9y
ZTMyKHJlc3VsdCwgc2NyYXRjaFJlZyk7CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHJlc3VsdCk7
CisgICAgfQorCisgICAgdm9pZCBhZGQzMihUcnVzdGVkSW1tMzIgaW1tLCBBYnNvbHV0ZUFkZHJl
c3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIFJlZ2lzdGVySUQgcmVzdWx0ID0gY2xhaW1TY3Jh
dGNoKCk7CisgICAgICAgIFJlZ2lzdGVySUQgc2NyYXRjaFJlZyA9IGNsYWltU2NyYXRjaCgpOwor
CisgICAgICAgIG1fYXNzZW1ibGVyLmxvYWRDb25zdGFudChyZWludGVycHJldF9jYXN0PHVpbnQz
Ml90PihhZGRyZXNzLm1fcHRyKSwgc2NyYXRjaFJlZyk7CisgICAgICAgIG1fYXNzZW1ibGVyLm1v
dmxNZW1SZWcoc2NyYXRjaFJlZywgcmVzdWx0KTsKKworICAgICAgICBpZiAobV9hc3NlbWJsZXIu
aXNJbW1lZGlhdGUoaW1tLm1fdmFsdWUpKQorICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRkbElt
bThyKGltbS5tX3ZhbHVlLCByZXN1bHQpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIG1f
YXNzZW1ibGVyLmxvYWRDb25zdGFudChpbW0ubV92YWx1ZSwgc2NyYXRjaFJlZzMpOworICAgICAg
ICAgICAgbV9hc3NlbWJsZXIuYWRkbFJlZ1JlZyhzY3JhdGNoUmVnMywgcmVzdWx0KTsKKyAgICAg
ICAgfQorCisgICAgICAgIHN0b3JlMzIocmVzdWx0LCBzY3JhdGNoUmVnKTsKKyAgICAgICAgcmVs
ZWFzZVNjcmF0Y2gocmVzdWx0KTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyYXRjaFJlZyk7
CisgICAgfQorCisgICAgdm9pZCBzdWIzMihUcnVzdGVkSW1tMzIgaW1tLCBSZWdpc3RlcklEIGRl
c3QpCisgICAgeworICAgICAgICBpZiAobV9hc3NlbWJsZXIuaXNJbW1lZGlhdGUoLWltbS5tX3Zh
bHVlKSkgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRkbEltbThyKC1pbW0ubV92YWx1ZSwg
ZGVzdCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBSZWdpc3Rl
cklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBtX2Fzc2VtYmxlci5sb2FkQ29uc3Rh
bnQoaW1tLm1fdmFsdWUsIHNjcik7CisgICAgICAgIG1fYXNzZW1ibGVyLnN1YmxSZWdSZWcoc2Ny
LCBkZXN0KTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICB9CisKKyAgICB2b2lk
IHN1YjMyKEFkZHJlc3Mgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBSZWdp
c3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBsb2FkMzIoc3JjLCBzY3IpOwor
ICAgICAgICBtX2Fzc2VtYmxlci5zdWJsUmVnUmVnKHNjciwgZGVzdCk7CisgICAgICAgIHJlbGVh
c2VTY3JhdGNoKHNjcik7CisgICAgfQorCisgICAgdm9pZCB4b3IzMihSZWdpc3RlcklEIHNyYywg
UmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIueG9ybFJlZ1JlZyhz
cmMsIGRlc3QpOworICAgIH0KKworICAgIHZvaWQgeG9yMzIoVHJ1c3RlZEltbTMyIGltbSwgUmVn
aXN0ZXJJRCBzcmNEZXN0KQorICAgIHsKKyAgICAgICAgaWYgKChzcmNEZXN0ICE9IFNINFJlZ2lz
dGVyczo6cjApIHx8IChpbW0ubV92YWx1ZSA+IDI1NSkgfHwgKGltbS5tX3ZhbHVlIDwgMCkpIHsK
KyAgICAgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgICAg
ICBtX2Fzc2VtYmxlci5sb2FkQ29uc3RhbnQoKGltbS5tX3ZhbHVlKSwgc2NyKTsKKyAgICAgICAg
ICAgIG1fYXNzZW1ibGVyLnhvcmxSZWdSZWcoc2NyLCBzcmNEZXN0KTsKKyAgICAgICAgICAgIHJl
bGVhc2VTY3JhdGNoKHNjcik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAg
ICAgICBtX2Fzc2VtYmxlci54b3JsSW1tOHIoaW1tLm1fdmFsdWUsIHNyY0Rlc3QpOworICAgIH0K
KworICAgIHZvaWQgY29tcGFyZTMyKGludCBpbW0sIFJlZ2lzdGVySUQgZHN0LCBDb25kaXRpb24g
Y29uZCkKKyAgICB7CisgICAgICAgIGlmICgoKGNvbmQgPT0gRXF1YWwpIHx8IChjb25kID09IE5v
dEVxdWFsKSkgJiYgKGRzdCA9PSBTSDRSZWdpc3RlcnM6OnIwKSAmJiBtX2Fzc2VtYmxlci5pc0lt
bWVkaWF0ZShpbW0pKSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5jbXBFcUltbVIwKGltbSwg
ZHN0LCBjb25kKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIFJl
Z2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvYWRD
b25zdGFudChpbW0sIHNjcik7CisgICAgICAgIG1fYXNzZW1ibGVyLmNtcGxSZWdSZWcoc2NyLCBk
c3QsIGNvbmQpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgIH0KKworICAgIHZv
aWQgY29tcGFyZTMyKGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBsZWZ0
LCBDb25kaXRpb24gY29uZCkKKyAgICB7CisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1T
Y3JhdGNoKCk7CisgICAgICAgIGlmICghb2Zmc2V0KSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxl
ci5tb3ZsTWVtUmVnKGJhc2UsIHNjcik7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5jbXBsUmVn
UmVnKHNjciwgbGVmdCwgY29uZCk7CisgICAgICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKChvZmZzZXQgPCAw
KSB8fCAob2Zmc2V0ID49IDY0KSkgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIubG9hZENvbnN0
YW50KG9mZnNldCwgc2NyKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZGxSZWdSZWcoYmFz
ZSwgc2NyKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLm1vdmxNZW1SZWcoc2NyLCBzY3IpOwor
ICAgICAgICAgICAgbV9hc3NlbWJsZXIuY21wbFJlZ1JlZyhzY3IsIGxlZnQsIGNvbmQpOworICAg
ICAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorCisgICAgICAgIG1fYXNzZW1ibGVyLm1vdmxNZW1SZWcob2Zmc2V0ID4+IDIsIGJhc2Us
IHNjcik7CisgICAgICAgIG1fYXNzZW1ibGVyLmNtcGxSZWdSZWcoc2NyLCBsZWZ0LCBjb25kKTsK
KyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICB9CisKKyAgICB2b2lkIHRlc3RJbW0o
aW50IGltbSwgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlKQorICAgIHsKKyAgICAgICAgUmVn
aXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IxID0g
Y2xhaW1TY3JhdGNoKCk7CisKKyAgICAgICAgaWYgKChvZmZzZXQgPCAwKSB8fCAob2Zmc2V0ID49
IDY0KSkgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIubG9hZENvbnN0YW50KG9mZnNldCwgc2Ny
KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZGxSZWdSZWcoYmFzZSwgc2NyKTsKKyAgICAg
ICAgICAgIG1fYXNzZW1ibGVyLm1vdmxNZW1SZWcoc2NyLCBzY3IpOworICAgICAgICB9IGVsc2Ug
aWYgKG9mZnNldCkKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLm1vdmxNZW1SZWcob2Zmc2V0ID4+
IDIsIGJhc2UsIHNjcik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLm1v
dmxNZW1SZWcoYmFzZSwgc2NyKTsKKyAgICAgICAgaWYgKG1fYXNzZW1ibGVyLmlzSW1tZWRpYXRl
KGltbSkpCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5tb3ZJbW04KGltbSwgc2NyMSk7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmxvYWRDb25zdGFudChpbW0sIHNjcjEp
OworCisgICAgICAgIG1fYXNzZW1ibGVyLnRlc3RsUmVnUmVnKHNjciwgc2NyMSk7CisgICAgICAg
IHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcjEpOworICAg
IH0KKworICAgIHZvaWQgdGVzdGxJbW0oaW50IGltbSwgUmVnaXN0ZXJJRCBkc3QpCisgICAgewor
ICAgICAgICBpZiAoKGRzdCA9PSBTSDRSZWdpc3RlcnM6OnIwKSAmJiAoaW1tIDw9IDI1NSkgJiYg
KGltbSA+PSAwKSkgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIudGVzdGxJbW04cihpbW0sIGRz
dCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBSZWdpc3RlcklE
IHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBtX2Fzc2VtYmxlci5sb2FkQ29uc3RhbnQo
aW1tLCBzY3IpOworICAgICAgICBtX2Fzc2VtYmxlci50ZXN0bFJlZ1JlZyhzY3IsIGRzdCk7Cisg
ICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgfQorCisgICAgdm9pZCBjb21wYXJlMzIo
UmVnaXN0ZXJJRCByaWdodCwgaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBDb25kaXRpb24g
Y29uZCkKKyAgICB7CisgICAgICAgIGlmICghb2Zmc2V0KSB7CisgICAgICAgICAgICBSZWdpc3Rl
cklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIubW92bE1l
bVJlZyhiYXNlLCBzY3IpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuY21wbFJlZ1JlZyhyaWdo
dCwgc2NyLCBjb25kKTsKKyAgICAgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoKG9mZnNldCA8IDApIHx8IChv
ZmZzZXQgPj0gNjQpKSB7CisgICAgICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRj
aCgpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIubG9hZENvbnN0YW50KG9mZnNldCwgc2NyKTsK
KyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZGxSZWdSZWcoYmFzZSwgc2NyKTsKKyAgICAgICAg
ICAgIG1fYXNzZW1ibGVyLm1vdmxNZW1SZWcoc2NyLCBzY3IpOworICAgICAgICAgICAgbV9hc3Nl
bWJsZXIuY21wbFJlZ1JlZyhyaWdodCwgc2NyLCBjb25kKTsKKyAgICAgICAgICAgIHJlbGVhc2VT
Y3JhdGNoKHNjcik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBS
ZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBtX2Fzc2VtYmxlci5tb3Zs
TWVtUmVnKG9mZnNldCA+PiAyLCBiYXNlLCBzY3IpOworICAgICAgICBtX2Fzc2VtYmxlci5jbXBs
UmVnUmVnKHJpZ2h0LCBzY3IsIGNvbmQpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOwor
ICAgIH0KKworICAgIHZvaWQgY29tcGFyZTMyKGludCBpbW0sIGludCBvZmZzZXQsIFJlZ2lzdGVy
SUQgYmFzZSwgQ29uZGl0aW9uIGNvbmQpCisgICAgeworICAgICAgICBpZiAoIW9mZnNldCkgewor
ICAgICAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgICAg
IFJlZ2lzdGVySUQgc2NyMSA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICAgICAgbV9hc3NlbWJs
ZXIubW92bE1lbVJlZyhiYXNlLCBzY3IpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIubG9hZENv
bnN0YW50KGltbSwgc2NyMSk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5jbXBsUmVnUmVnKHNj
cjEsIHNjciwgY29uZCk7CisgICAgICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IxKTsKKyAgICAg
ICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKworICAgICAgICBpZiAoKG9mZnNldCA8IDApIHx8IChvZmZzZXQgPj0gNjQpKSB7CisgICAg
ICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICAgICAgUmVn
aXN0ZXJJRCBzY3IxID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5s
b2FkQ29uc3RhbnQob2Zmc2V0LCBzY3IpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRkbFJl
Z1JlZyhiYXNlLCBzY3IpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIubW92bE1lbVJlZyhzY3Is
IHNjcik7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5sb2FkQ29uc3RhbnQoaW1tLCBzY3IxKTsK
KyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmNtcGxSZWdSZWcoc2NyMSwgc2NyLCBjb25kKTsKKyAg
ICAgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcjEpOworICAgICAgICAgICAgcmVsZWFzZVNjcmF0
Y2goc2NyKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIFJlZ2lz
dGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIFJlZ2lzdGVySUQgc2NyMSA9IGNs
YWltU2NyYXRjaCgpOworICAgICAgICBtX2Fzc2VtYmxlci5tb3ZsTWVtUmVnKG9mZnNldCA+PiAy
LCBiYXNlLCBzY3IpOworICAgICAgICBtX2Fzc2VtYmxlci5sb2FkQ29uc3RhbnQoaW1tLCBzY3Ix
KTsKKyAgICAgICAgbV9hc3NlbWJsZXIuY21wbFJlZ1JlZyhzY3IxLCBzY3IsIGNvbmQpOworICAg
ICAgICByZWxlYXNlU2NyYXRjaChzY3IxKTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsK
KyAgICB9CisKKyAgICAvLyBNZW1vcnkgYWNjZXNzIG9wZXJhdGlvbgorCisgICAgdm9pZCBsb2Fk
MzIoSW1wbGljaXRBZGRyZXNzIGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAg
ICAgIGxvYWQzMihhZGRyZXNzLmJhc2UsIGFkZHJlc3Mub2Zmc2V0LCBkZXN0KTsKKyAgICB9CisK
KyAgICB2b2lkIGxvYWQ4KEltcGxpY2l0QWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3Qp
CisgICAgeworICAgICAgICBsb2FkOChhZGRyZXNzLmJhc2UsIGFkZHJlc3Mub2Zmc2V0LCBkZXN0
KTsKKyAgICB9CisKKyAgICB2b2lkIGxvYWQzMihCYXNlSW5kZXggYWRkcmVzcywgUmVnaXN0ZXJJ
RCBkZXN0KQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsK
KyAgICAgICAgbW92ZShhZGRyZXNzLmluZGV4LCBzY3IpOworICAgICAgICBsc2hpZnQzMihUcnVz
dGVkSW1tMzIoYWRkcmVzcy5zY2FsZSksIHNjcik7CisgICAgICAgIGFkZDMyKGFkZHJlc3MuYmFz
ZSwgc2NyKTsKKyAgICAgICAgbG9hZDMyKHNjciwgYWRkcmVzcy5vZmZzZXQsIGRlc3QpOworICAg
ICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgIH0KKworICAgIHZvaWQgbG9hZDMyKHZvaWQq
IGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxv
YWRDb25zdGFudChyZWludGVycHJldF9jYXN0PHVpbnQzMl90PihhZGRyZXNzKSwgZGVzdCk7Cisg
ICAgICAgIG1fYXNzZW1ibGVyLm1vdmxNZW1SZWcoZGVzdCwgZGVzdCk7CisgICAgfQorCisgICAg
dm9pZCBsb2FkMzIoUmVnaXN0ZXJJRCBiYXNlLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGRlc3Qp
CisgICAgeworICAgICAgICBpZiAoIW9mZnNldCkgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIu
bW92bE1lbVJlZyhiYXNlLCBkZXN0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
CisgICAgICAgIGlmICgob2Zmc2V0ID49IDApICYmIChvZmZzZXQgPCA2NCkpIHsKKyAgICAgICAg
ICAgIG1fYXNzZW1ibGVyLm1vdmxNZW1SZWcob2Zmc2V0ID4+IDIsIGJhc2UsIGRlc3QpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKChkZXN0ID09IFNINFJl
Z2lzdGVyczo6cjApICYmIChkZXN0ICE9IGJhc2UpKSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxl
ci5sb2FkQ29uc3RhbnQoKG9mZnNldCksIGRlc3QpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIu
bW92bFIwbXIoYmFzZSwgZGVzdCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwor
ICAgICAgICBSZWdpc3RlcklEIHNjcjsKKyAgICAgICAgaWYgKGRlc3QgPT0gYmFzZSkKKyAgICAg
ICAgICAgIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBz
Y3IgPSBkZXN0OworICAgICAgICBtX2Fzc2VtYmxlci5sb2FkQ29uc3RhbnQoKG9mZnNldCksIHNj
cik7CisgICAgICAgIG1fYXNzZW1ibGVyLmFkZGxSZWdSZWcoYmFzZSwgc2NyKTsKKyAgICAgICAg
bV9hc3NlbWJsZXIubW92bE1lbVJlZyhzY3IsIGRlc3QpOworCisgICAgICAgIGlmIChkZXN0ID09
IGJhc2UpCisgICAgICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgIH0KKworICAgIHZv
aWQgbG9hZDgoUmVnaXN0ZXJJRCBiYXNlLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGRlc3QpCisg
ICAgeworICAgICAgICBpZiAoIW9mZnNldCkgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIubW92
Yk1lbVJlZyhiYXNlLCBkZXN0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmICgob2Zmc2V0ID4gMCkgJiYgKG9mZnNldCA8IDY0KSAmJiAoZGVzdCA9PSBTSDRS
ZWdpc3RlcnM6OnIwKSkgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIubW92Yk1lbVJlZyhvZmZz
ZXQsIGJhc2UsIGRlc3QpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAg
ICAgaWYgKGJhc2UgIT0gZGVzdCkgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIubG9hZENvbnN0
YW50KChvZmZzZXQpLCBkZXN0KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZGxSZWdSZWco
YmFzZSwgZGVzdCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5tb3ZiTWVtUmVnKGRlc3QsIGRl
c3QpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgUmVnaXN0ZXJJ
RCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9hZENvbnN0YW50
KChvZmZzZXQpLCBzY3IpOworICAgICAgICBtX2Fzc2VtYmxlci5hZGRsUmVnUmVnKGJhc2UsIHNj
cik7CisgICAgICAgIG1fYXNzZW1ibGVyLm1vdmJNZW1SZWcoc2NyLCBkZXN0KTsKKyAgICAgICAg
cmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICB9CisKKyAgICB2b2lkIGxvYWQzMihSZWdpc3RlcklE
IHIwLCBSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICBBU1NF
UlQocjAgPT0gU0g0UmVnaXN0ZXJzOjpyMCk7CisgICAgICAgIG1fYXNzZW1ibGVyLm1vdmxSMG1y
KHNyYywgZHN0KTsKKyAgICB9CisKKyAgICB2b2lkIGxvYWQzMihSZWdpc3RlcklEIHNyYywgUmVn
aXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5tb3ZsTWVtUmVnKHNyYywg
ZHN0KTsKKyAgICB9CisKKyAgICB2b2lkIGxvYWQxNihJbXBsaWNpdEFkZHJlc3MgYWRkcmVzcywg
UmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgaWYgKCFhZGRyZXNzLm9mZnNldCkgewor
ICAgICAgICAgICAgbV9hc3NlbWJsZXIubW92d01lbVJlZyhhZGRyZXNzLmJhc2UsIGRlc3QpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKChhZGRyZXNzLm9m
ZnNldCA+IDApICYmIChhZGRyZXNzLm9mZnNldCA8IDY0KSAmJiAoZGVzdCA9PSBTSDRSZWdpc3Rl
cnM6OnIwKSkgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIubW92d01lbVJlZyhhZGRyZXNzLm9m
ZnNldCwgYWRkcmVzcy5iYXNlLCBkZXN0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorCisgICAgICAgIGlmIChhZGRyZXNzLmJhc2UgIT0gZGVzdCkgeworICAgICAgICAgICAgbV9h
c3NlbWJsZXIubG9hZENvbnN0YW50KChhZGRyZXNzLm9mZnNldCksIGRlc3QpOworICAgICAgICAg
ICAgbV9hc3NlbWJsZXIuYWRkbFJlZ1JlZyhhZGRyZXNzLmJhc2UsIGRlc3QpOworICAgICAgICAg
ICAgbV9hc3NlbWJsZXIubW92d01lbVJlZyhkZXN0LCBkZXN0KTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorCisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7
CisgICAgICAgIG1fYXNzZW1ibGVyLmxvYWRDb25zdGFudCgoYWRkcmVzcy5vZmZzZXQpLCBzY3Ip
OworICAgICAgICBtX2Fzc2VtYmxlci5hZGRsUmVnUmVnKGFkZHJlc3MuYmFzZSwgc2NyKTsKKyAg
ICAgICAgbV9hc3NlbWJsZXIubW92d01lbVJlZyhzY3IsIGRlc3QpOworICAgICAgICByZWxlYXNl
U2NyYXRjaChzY3IpOworICAgIH0KKworICAgIHZvaWQgbG9hZDE2KFJlZ2lzdGVySUQgc3JjLCBS
ZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5tb3Z3TWVtUmVnKHNy
YywgZGVzdCk7CisgICAgfQorCisgICAgdm9pZCBsb2FkMTYoUmVnaXN0ZXJJRCByMCwgUmVnaXN0
ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIEFTU0VSVChyMCA9PSBT
SDRSZWdpc3RlcnM6OnIwKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubW92d1IwbXIoc3JjLCBkZXN0
KTsKKyAgICB9CisKKyAgICB2b2lkIGxvYWQxNihCYXNlSW5kZXggYWRkcmVzcywgUmVnaXN0ZXJJ
RCBkZXN0KQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsK
KworICAgICAgICBtb3ZlKGFkZHJlc3MuaW5kZXgsIHNjcik7CisgICAgICAgIGxzaGlmdDMyKFRy
dXN0ZWRJbW0zMihhZGRyZXNzLnNjYWxlKSwgc2NyKTsKKworICAgICAgICBpZiAoYWRkcmVzcy5v
ZmZzZXQpCisgICAgICAgICAgICBhZGQzMihUcnVzdGVkSW1tMzIoYWRkcmVzcy5vZmZzZXQpLCBz
Y3IpOworICAgICAgICBpZiAoc2NyID09IFNINFJlZ2lzdGVyczo6cjApCisgICAgICAgICAgICBt
X2Fzc2VtYmxlci5tb3Z3UjBtcihhZGRyZXNzLmJhc2UsIHNjcik7CisgICAgICAgIGVsc2Ugewor
ICAgICAgICAgICAgYWRkMzIoYWRkcmVzcy5iYXNlLCBzY3IpOworICAgICAgICAgICAgbG9hZDE2
KHNjciwgc2NyKTsKKyAgICAgICAgfQorCisgICAgICAgIGV4dHV3KHNjciwgZGVzdCk7CisgICAg
ICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgfQorCisgICAgdm9pZCBzdG9yZTMyKFJlZ2lz
dGVySUQgc3JjLCBJbXBsaWNpdEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIFJlZ2lz
dGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIHN0b3JlMzIoc3JjLCBhZGRyZXNz
Lm9mZnNldCwgYWRkcmVzcy5iYXNlLCBzY3IpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3Ip
OworICAgIH0KKworICAgIHZvaWQgc3RvcmUzMihSZWdpc3RlcklEIHNyYywgaW50IG9mZnNldCwg
UmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIHNjcikKKyAgICB7CisgICAgICAgIGlmICghb2Zm
c2V0KSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5tb3ZsUmVnTWVtKHNyYywgYmFzZSk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoKG9mZnNldCA+PTAp
ICYmIChvZmZzZXQgPCA2NCkpIHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLm1vdmxSZWdNZW0o
c3JjLCBvZmZzZXQgPj4gMiwgYmFzZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KworICAgICAgICBtX2Fzc2VtYmxlci5sb2FkQ29uc3RhbnQoKG9mZnNldCksIHNjcik7CisgICAg
ICAgIGlmIChzY3IgPT0gU0g0UmVnaXN0ZXJzOjpyMCkgeworICAgICAgICAgICAgbV9hc3NlbWJs
ZXIubW92bFJlZ01lbXIwKHNyYywgYmFzZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKworICAgICAgICBtX2Fzc2VtYmxlci5hZGRsUmVnUmVnKGJhc2UsIHNjcik7CisgICAgICAg
IG1fYXNzZW1ibGVyLm1vdmxSZWdNZW0oc3JjLCBzY3IpOworICAgIH0KKworICAgIHZvaWQgc3Rv
cmUzMihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkK
KyAgICB7CisgICAgICAgIEFTU0VSVChvZmZzZXQgPT0gU0g0UmVnaXN0ZXJzOjpyMCk7CisgICAg
ICAgIG1fYXNzZW1ibGVyLm1vdmxSZWdNZW1yMChzcmMsIGJhc2UpOworICAgIH0KKworICAgIHZv
aWQgc3RvcmUzMihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAg
ICBtX2Fzc2VtYmxlci5tb3ZsUmVnTWVtKHNyYywgZHN0KTsKKyAgICB9CisKKyAgICB2b2lkIHN0
b3JlMzIoVHJ1c3RlZEltbTMyIGltbSwgSW1wbGljaXRBZGRyZXNzIGFkZHJlc3MpCisgICAgewor
ICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBSZWdpc3Rl
cklEIHNjcjEgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9hZENvbnN0
YW50KChpbW0ubV92YWx1ZSksIHNjcik7CisgICAgICAgIHN0b3JlMzIoc2NyLCBhZGRyZXNzLm9m
ZnNldCwgYWRkcmVzcy5iYXNlLCBzY3IxKTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsK
KyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyMSk7CisgICAgfQorCisgICAgdm9pZCBzdG9yZTMy
KFJlZ2lzdGVySUQgc3JjLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIFJlZ2lz
dGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisKKyAgICAgICAgbW92ZShhZGRyZXNzLmluZGV4
LCBzY3IpOworICAgICAgICBsc2hpZnQzMihUcnVzdGVkSW1tMzIoYWRkcmVzcy5zY2FsZSksIHNj
cik7CisgICAgICAgIGFkZDMyKGFkZHJlc3MuYmFzZSwgc2NyKTsKKyAgICAgICAgc3RvcmUzMihz
cmMsIEFkZHJlc3Moc2NyLCBhZGRyZXNzLm9mZnNldCkpOworCisgICAgICAgIHJlbGVhc2VTY3Jh
dGNoKHNjcik7CisgICAgfQorCisgICAgdm9pZCBzdG9yZTMyKFRydXN0ZWRJbW0zMiBpbW0sIHZv
aWQqIGFkZHJlc3MpCisgICAgeworICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRj
aCgpOworICAgICAgICBSZWdpc3RlcklEIHNjcjEgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAg
bV9hc3NlbWJsZXIubG9hZENvbnN0YW50KChpbW0ubV92YWx1ZSksIHNjcik7CisgICAgICAgIG1f
YXNzZW1ibGVyLmxvYWRDb25zdGFudChyZWludGVycHJldF9jYXN0PHVpbnQzMl90PihhZGRyZXNz
KSwgc2NyMSk7CisgICAgICAgIG1fYXNzZW1ibGVyLm1vdmxNZW1SZWcoc2NyLCBzY3IxKTsKKyAg
ICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyMSk7
CisgICAgfQorCisgICAgdm9pZCBzdG9yZTMyKFJlZ2lzdGVySUQgc3JjLCB2b2lkKiBhZGRyZXNz
KQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAg
ICAgbV9hc3NlbWJsZXIubG9hZENvbnN0YW50KHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3Q+KGFk
ZHJlc3MpLCBzY3IpOworICAgICAgICBtX2Fzc2VtYmxlci5tb3ZsTWVtUmVnKHNyYywgc2NyKTsK
KyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICB9CisKKyAgICBEYXRhTGFiZWwzMiBs
b2FkMzJXaXRoQWRkcmVzc09mZnNldFBhdGNoKEFkZHJlc3MgYWRkcmVzcywgUmVnaXN0ZXJJRCBk
ZXN0KQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAg
ICAgICAgRGF0YUxhYmVsMzIgbGFiZWwodGhpcyk7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvYWRD
b25zdGFudFVuUmV1c2FibGUoYWRkcmVzcy5vZmZzZXQsIHNjcik7CisgICAgICAgIG1fYXNzZW1i
bGVyLmFkZGxSZWdSZWcoYWRkcmVzcy5iYXNlLCBzY3IpOworICAgICAgICBtX2Fzc2VtYmxlci5t
b3ZsTWVtUmVnKHNjciwgZGVzdCk7CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAg
ICAgIHJldHVybiBsYWJlbDsKKyAgICB9CisKKyAgICBEYXRhTGFiZWwzMiBzdG9yZTMyV2l0aEFk
ZHJlc3NPZmZzZXRQYXRjaChSZWdpc3RlcklEIHNyYywgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsK
KyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgRGF0YUxh
YmVsMzIgbGFiZWwodGhpcyk7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvYWRDb25zdGFudFVuUmV1
c2FibGUoYWRkcmVzcy5vZmZzZXQsIHNjcik7CisgICAgICAgIG1fYXNzZW1ibGVyLmFkZGxSZWdS
ZWcoYWRkcmVzcy5iYXNlLCBzY3IpOworICAgICAgICBtX2Fzc2VtYmxlci5tb3ZsUmVnTWVtKHNy
Yywgc2NyKTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICAgICAgcmV0dXJuIGxh
YmVsOworICAgIH0KKworICAgICAvLyBGbG9hdGluZy1wb2ludCBvcGVyYXRpb25zCisKKyAgICBi
b29sIHN1cHBvcnRzRmxvYXRpbmdQb2ludCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKyAgICBi
b29sIHN1cHBvcnRzRmxvYXRpbmdQb2ludFRydW5jYXRlKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsg
fQorICAgIGJvb2wgc3VwcG9ydHNGbG9hdGluZ1BvaW50U3FydCgpIGNvbnN0IHsgcmV0dXJuIHRy
dWU7IH0KKworICAgIHZvaWQgbG9hZERvdWJsZShJbXBsaWNpdEFkZHJlc3MgYWRkcmVzcywgRlBS
ZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2Ny
YXRjaCgpOworCisgICAgICAgIG1fYXNzZW1ibGVyLmxvYWRDb25zdGFudChhZGRyZXNzLm9mZnNl
dCwgc2NyKTsKKyAgICAgICAgaWYgKGFkZHJlc3MuYmFzZSA9PSBTSDRSZWdpc3RlcnM6OnIwKSB7
CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5mbW92c1JlYWRyMHIoc2NyLCAoRlBSZWdpc3RlcklE
KShkZXN0ICsgMSkpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRkbEltbThyKDQsIHNjcik7
CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5mbW92c1JlYWRyMHIoc2NyLCBkZXN0KTsKKyAgICAg
ICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKworICAgICAgICBtX2Fzc2VtYmxlci5hZGRsUmVnUmVnKGFkZHJlc3MuYmFzZSwgc2NyKTsK
KyAgICAgICAgbV9hc3NlbWJsZXIuZm1vdnNSZWFkcm1pbmMoc2NyLCAoRlBSZWdpc3RlcklEKShk
ZXN0ICsgMSkpOworICAgICAgICBtX2Fzc2VtYmxlci5mbW92c1JlYWRybShzY3IsIGRlc3QpOwor
ICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgIH0KKworICAgIHZvaWQgbG9hZERvdWJs
ZShjb25zdCB2b2lkKiBhZGRyZXNzLCBGUFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAg
IFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIG1fYXNzZW1ibGVyLmxv
YWRDb25zdGFudChyZWludGVycHJldF9jYXN0PHVpbnQzMl90PihhZGRyZXNzKSwgc2NyKTsKKyAg
ICAgICAgbV9hc3NlbWJsZXIuZm1vdnNSZWFkcm1pbmMoc2NyLCAoRlBSZWdpc3RlcklEKShkZXN0
ICsgMSkpOworICAgICAgICBtX2Fzc2VtYmxlci5mbW92c1JlYWRybShzY3IsIGRlc3QpOworICAg
ICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgIH0KKworICAgIHZvaWQgc3RvcmVEb3VibGUo
RlBSZWdpc3RlcklEIHNyYywgSW1wbGljaXRBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAg
ICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBtX2Fzc2VtYmxlci5s
b2FkQ29uc3RhbnQoYWRkcmVzcy5vZmZzZXQsIHNjcik7CisgICAgICAgIG1fYXNzZW1ibGVyLmFk
ZGxSZWdSZWcoYWRkcmVzcy5iYXNlLCBzY3IpOworICAgICAgICBtX2Fzc2VtYmxlci5mbW92c1dy
aXRlcm0oKEZQUmVnaXN0ZXJJRCkoc3JjICsgMSksIHNjcik7CisgICAgICAgIG1fYXNzZW1ibGVy
LmFkZGxJbW04cig0LCBzY3IpOworICAgICAgICBtX2Fzc2VtYmxlci5mbW92c1dyaXRlcm0oc3Jj
LCBzY3IpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgIH0KKworICAgIHZvaWQg
YWRkRG91YmxlKEZQUmVnaXN0ZXJJRCBzcmMsIEZQUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAg
ICAgICAgbV9hc3NlbWJsZXIuZGFkZFJlZ1JlZyhzcmMsIGRlc3QpOworICAgIH0KKworICAgIHZv
aWQgYWRkRG91YmxlKEFkZHJlc3MgYWRkcmVzcywgRlBSZWdpc3RlcklEIGRlc3QpCisgICAgewor
ICAgICAgICBsb2FkRG91YmxlKGFkZHJlc3MsIGZzY3JhdGNoKTsKKyAgICAgICAgYWRkRG91Ymxl
KGZzY3JhdGNoLCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIHN1YkRvdWJsZShGUFJlZ2lzdGVy
SUQgc3JjLCBGUFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmRz
dWJSZWdSZWcoc3JjLCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIHN1YkRvdWJsZShBZGRyZXNz
IGFkZHJlc3MsIEZQUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbG9hZERvdWJsZShh
ZGRyZXNzLCBmc2NyYXRjaCk7CisgICAgICAgIHN1YkRvdWJsZShmc2NyYXRjaCwgZGVzdCk7Cisg
ICAgfQorCisgICAgdm9pZCBtdWxEb3VibGUoRlBSZWdpc3RlcklEIHNyYywgRlBSZWdpc3RlcklE
IGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5kbXVsUmVnUmVnKHNyYywgZGVzdCk7
CisgICAgfQorCisgICAgdm9pZCBtdWxEb3VibGUoQWRkcmVzcyBhZGRyZXNzLCBGUFJlZ2lzdGVy
SUQgZGVzdCkKKyAgICB7CisgICAgICAgIGxvYWREb3VibGUoYWRkcmVzcywgZnNjcmF0Y2gpOwor
ICAgICAgICBtdWxEb3VibGUoZnNjcmF0Y2gsIGRlc3QpOworICAgIH0KKworICAgIHZvaWQgZGl2
RG91YmxlKEZQUmVnaXN0ZXJJRCBzcmMsIEZQUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAg
ICAgbV9hc3NlbWJsZXIuZGRpdlJlZ1JlZyhzcmMsIGRlc3QpOworICAgIH0KKworICAgIHZvaWQg
Y29udmVydEludDMyVG9Eb3VibGUoUmVnaXN0ZXJJRCBzcmMsIEZQUmVnaXN0ZXJJRCBkZXN0KQor
ICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubGRzcm1mcHVsKHNyYyk7CisgICAgICAgIG1fYXNz
ZW1ibGVyLmZsb2F0ZnB1bERyZWcoZGVzdCk7CisgICAgfQorCisgICAgdm9pZCBjb252ZXJ0SW50
MzJUb0RvdWJsZShBYnNvbHV0ZUFkZHJlc3Mgc3JjLCBGUFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7
CisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIG1fYXNz
ZW1ibGVyLmxvYWRDb25zdGFudChyZWludGVycHJldF9jYXN0PHVpbnQzMl90PihzcmMubV9wdHIp
LCBzY3IpOworICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShzY3IsIGRlc3QpOworICAgICAg
ICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgIH0KKworICAgIHZvaWQgY29udmVydEludDMyVG9E
b3VibGUoQWRkcmVzcyBzcmMsIEZQUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgUmVn
aXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgbG9hZDMyKHNyYywgc2NyKTsK
KyAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUoc2NyLCBkZXN0KTsKKyAgICAgICAgcmVsZWFz
ZVNjcmF0Y2goc2NyKTsKKyAgICB9CisKKyAgICB2b2lkIGxvYWQzMldpdGhVbmFsaWduZWRIYWxm
V29yZHMoQmFzZUluZGV4IGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAg
IFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisKKyAgICAgICAgbW92ZShhZGRyZXNz
LmluZGV4LCBzY3IpOworICAgICAgICBsc2hpZnQzMihUcnVzdGVkSW1tMzIoYWRkcmVzcy5zY2Fs
ZSksIHNjcik7CisgICAgICAgIGFkZDMyKGFkZHJlc3MuYmFzZSwgc2NyKTsKKworICAgICAgICBp
ZiAoYWRkcmVzcy5vZmZzZXQpCisgICAgICAgICAgICBhZGQzMihUcnVzdGVkSW1tMzIoYWRkcmVz
cy5vZmZzZXQpLCBzY3IpOworCisgICAgICAgIFJlZ2lzdGVySUQgc2NyMSA9IGNsYWltU2NyYXRj
aCgpOworICAgICAgICBsb2FkMTYoc2NyLCBzY3IxKTsKKyAgICAgICAgYWRkMzIoVHJ1c3RlZElt
bTMyKDIpLCBzY3IpOworICAgICAgICBsb2FkMTYoc2NyLCBkZXN0KTsKKyAgICAgICAgbW92ZShU
cnVzdGVkSW1tMzIoMTYpLCBzY3IpOworICAgICAgICBtX2Fzc2VtYmxlci5zaGxsUmVnUmVnKGRl
c3QsIHNjcik7CisgICAgICAgIG9yMzIoc2NyMSwgZGVzdCk7CisKKyAgICAgICAgcmVsZWFzZVNj
cmF0Y2goc2NyKTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyMSk7CisgICAgfQorCisgICAg
SnVtcCBicmFuY2gzMldpdGhVbmFsaWduZWRIYWxmV29yZHMoQ29uZGl0aW9uIGNvbmQsIEJhc2VJ
bmRleCBsZWZ0LCBUcnVzdGVkSW1tMzIgcmlnaHQpCisgICAgeworICAgICAgICBSZWdpc3RlcklE
IHNjciA9IHNjcmF0Y2hSZWczOworICAgICAgICBsb2FkMzJXaXRoVW5hbGlnbmVkSGFsZldvcmRz
KGxlZnQsIHNjcik7CisgICAgICAgIGlmICgoKGNvbmQgPT0gRXF1YWwpIHx8IChjb25kID09IE5v
dEVxdWFsKSkgJiYgIXJpZ2h0Lm1fdmFsdWUpCisgICAgICAgICAgICBtX2Fzc2VtYmxlci50ZXN0
bFJlZ1JlZyhzY3IsIHNjcik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNvbXBhcmUzMihy
aWdodC5tX3ZhbHVlLCBzY3IsIGNvbmQpOworCisgICAgICAgIGlmIChjb25kID09IE5vdEVxdWFs
KQorICAgICAgICAgICAgcmV0dXJuIGJyYW5jaEZhbHNlKCk7CisgICAgICAgIHJldHVybiBicmFu
Y2hUcnVlKCk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2hEb3VibGVOb25aZXJvKEZQUmVnaXN0
ZXJJRCByZWcsIEZQUmVnaXN0ZXJJRCBzY3JhdGNoKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJs
ZXIubW92SW1tOCgwLCBzY3JhdGNoUmVnMyk7CisgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91Ymxl
KHNjcmF0Y2hSZWczLCBzY3JhdGNoKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaERvdWJsZShEb3Vi
bGVOb3RFcXVhbCwgcmVnLCBzY3JhdGNoKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaERvdWJs
ZVplcm9Pck5hTihGUFJlZ2lzdGVySUQgcmVnLCBGUFJlZ2lzdGVySUQgc2NyYXRjaCkKKyAgICB7
CisgICAgICAgIG1fYXNzZW1ibGVyLm1vdkltbTgoMCwgc2NyYXRjaFJlZzMpOworICAgICAgICBj
b252ZXJ0SW50MzJUb0RvdWJsZShzY3JhdGNoUmVnMywgc2NyYXRjaCk7CisgICAgICAgIHJldHVy
biBicmFuY2hEb3VibGUoRG91YmxlRXF1YWxPclVub3JkZXJlZCwgcmVnLCBzY3JhdGNoKTsKKyAg
ICB9CisKKyAgICBKdW1wIGJyYW5jaERvdWJsZShDb25kaXRpb24gY29uZCwgRlBSZWdpc3RlcklE
IGxlZnQsIEZQUmVnaXN0ZXJJRCByaWdodCkKKyAgICB7CisgICAgICAgIGlmIChjb25kID09IERv
dWJsZUVxdWFsKSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5kY21wcGVxKHJpZ2h0LCBsZWZ0
KTsKKyAgICAgICAgICAgIHJldHVybiBicmFuY2hUcnVlKCk7CisgICAgICAgIH0KKworICAgICAg
ICBpZiAoY29uZCA9PSBEb3VibGVOb3RFcXVhbCkgeworICAgICAgICAgICAgUmVnaXN0ZXJJRCBz
Y3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmxvYWRDb25zdGFu
dCgweDdmYmZmZmZmLCBzY3JhdGNoUmVnMyk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5kY252
ZHMocmlnaHQpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuc3RzZnB1bFJlZyhzY3IpOworICAg
ICAgICAgICAgbV9hc3NlbWJsZXIuY21wbFJlZ1JlZyhzY3JhdGNoUmVnMywgc2NyLCBFcXVhbCk7
CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5lbnN1cmVTcGFjZShtX2Fzc2VtYmxlci5tYXhJbnN0
cnVjdGlvblNpemUgKyAyMiwgc2l6ZW9mKHVpbnQzMl90KSk7CisgICAgICAgICAgICBtX2Fzc2Vt
Ymxlci5icmFuY2goQlRfT1BDT0RFLCA4KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmRjbnZk
cyhsZWZ0KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnN0c2ZwdWxSZWcoc2NyKTsKKyAgICAg
ICAgICAgIG1fYXNzZW1ibGVyLmNtcGxSZWdSZWcoc2NyYXRjaFJlZzMsIHNjciwgRXF1YWwpOwor
ICAgICAgICAgICAgbV9hc3NlbWJsZXIuYnJhbmNoKEJUX09QQ09ERSwgNCk7CisgICAgICAgICAg
ICBtX2Fzc2VtYmxlci5kY21wcGVxKHJpZ2h0LCBsZWZ0KTsKKyAgICAgICAgICAgIHJlbGVhc2VT
Y3JhdGNoKHNjcik7CisgICAgICAgICAgICByZXR1cm4gYnJhbmNoRmFsc2UoKTsKKyAgICAgICAg
fQorCisgICAgICAgIGlmIChjb25kID09IERvdWJsZUdyZWF0ZXJUaGFuKSB7CisgICAgICAgICAg
ICBtX2Fzc2VtYmxlci5kY21wcGd0KHJpZ2h0LCBsZWZ0KTsKKyAgICAgICAgICAgIHJldHVybiBi
cmFuY2hUcnVlKCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoY29uZCA9PSBEb3VibGVHcmVh
dGVyVGhhbk9yRXF1YWwpIHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmRjbXBwZ3QobGVmdCwg
cmlnaHQpOworICAgICAgICAgICAgcmV0dXJuIGJyYW5jaEZhbHNlKCk7CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAoY29uZCA9PSBEb3VibGVMZXNzVGhhbikgeworICAgICAgICAgICAgbV9hc3Nl
bWJsZXIuZGNtcHBndChsZWZ0LCByaWdodCk7CisgICAgICAgICAgICByZXR1cm4gYnJhbmNoVHJ1
ZSgpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGNvbmQgPT0gRG91YmxlTGVzc1RoYW5PckVx
dWFsKSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5kY21wcGd0KHJpZ2h0LCBsZWZ0KTsKKyAg
ICAgICAgICAgIHJldHVybiBicmFuY2hGYWxzZSgpOworICAgICAgICB9CisKKyAgICAgICAgaWYg
KGNvbmQgPT0gRG91YmxlRXF1YWxPclVub3JkZXJlZCkgeworICAgICAgICAgICAgUmVnaXN0ZXJJ
RCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmxvYWRDb25z
dGFudCgweDdmYmZmZmZmLCBzY3JhdGNoUmVnMyk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5k
Y252ZHMocmlnaHQpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuc3RzZnB1bFJlZyhzY3IpOwor
ICAgICAgICAgICAgbV9hc3NlbWJsZXIuY21wbFJlZ1JlZyhzY3JhdGNoUmVnMywgc2NyLCBFcXVh
bCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5lbnN1cmVTcGFjZShtX2Fzc2VtYmxlci5tYXhJ
bnN0cnVjdGlvblNpemUgKyAyMiwgc2l6ZW9mKHVpbnQzMl90KSk7CisgICAgICAgICAgICBtX2Fz
c2VtYmxlci5icmFuY2goQlRfT1BDT0RFLCA1KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmRj
bnZkcyhsZWZ0KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnN0c2ZwdWxSZWcoc2NyKTsKKyAg
ICAgICAgICAgIG1fYXNzZW1ibGVyLmNtcGxSZWdSZWcoc2NyYXRjaFJlZzMsIHNjciwgRXF1YWwp
OworICAgICAgICAgICAgbV9hc3NlbWJsZXIuYnJhbmNoKEJUX09QQ09ERSwgMSk7CisgICAgICAg
ICAgICBtX2Fzc2VtYmxlci5kY21wcGVxKGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgIHJlbGVh
c2VTY3JhdGNoKHNjcik7CisgICAgICAgICAgICByZXR1cm4gYnJhbmNoVHJ1ZSgpOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKGNvbmQgPT0gRG91YmxlR3JlYXRlclRoYW5PclVub3JkZXJlZCkg
eworICAgICAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAg
ICAgIG1fYXNzZW1ibGVyLmxvYWRDb25zdGFudCgweDdmYmZmZmZmLCBzY3JhdGNoUmVnMyk7Cisg
ICAgICAgICAgICBtX2Fzc2VtYmxlci5kY252ZHMocmlnaHQpOworICAgICAgICAgICAgbV9hc3Nl
bWJsZXIuc3RzZnB1bFJlZyhzY3IpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuY21wbFJlZ1Jl
ZyhzY3JhdGNoUmVnMywgc2NyLCBFcXVhbCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5lbnN1
cmVTcGFjZShtX2Fzc2VtYmxlci5tYXhJbnN0cnVjdGlvblNpemUgKyAyMiwgc2l6ZW9mKHVpbnQz
Ml90KSk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5icmFuY2goQlRfT1BDT0RFLCA1KTsKKyAg
ICAgICAgICAgIG1fYXNzZW1ibGVyLmRjbnZkcyhsZWZ0KTsKKyAgICAgICAgICAgIG1fYXNzZW1i
bGVyLnN0c2ZwdWxSZWcoc2NyKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmNtcGxSZWdSZWco
c2NyYXRjaFJlZzMsIHNjciwgRXF1YWwpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuYnJhbmNo
KEJUX09QQ09ERSwgMSk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5kY21wcGd0KHJpZ2h0LCBs
ZWZ0KTsKKyAgICAgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgICAgICAgICByZXR1
cm4gYnJhbmNoVHJ1ZSgpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGNvbmQgPT0gRG91Ymxl
R3JlYXRlclRoYW5PckVxdWFsT3JVbm9yZGVyZWQpIHsKKyAgICAgICAgICAgIFJlZ2lzdGVySUQg
c2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5sb2FkQ29uc3Rh
bnQoMHg3ZmJmZmZmZiwgc2NyYXRjaFJlZzMpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuZGNu
dmRzKHJpZ2h0KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnN0c2ZwdWxSZWcoc2NyKTsKKyAg
ICAgICAgICAgIG1fYXNzZW1ibGVyLmNtcGxSZWdSZWcoc2NyYXRjaFJlZzMsIHNjciwgRXF1YWwp
OworICAgICAgICAgICAgbV9hc3NlbWJsZXIuZW5zdXJlU3BhY2UobV9hc3NlbWJsZXIubWF4SW5z
dHJ1Y3Rpb25TaXplICsgMjIsIHNpemVvZih1aW50MzJfdCkpOworICAgICAgICAgICAgbV9hc3Nl
bWJsZXIuYnJhbmNoKEJUX09QQ09ERSwgNSk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5kY252
ZHMobGVmdCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zdHNmcHVsUmVnKHNjcik7CisgICAg
ICAgICAgICBtX2Fzc2VtYmxlci5jbXBsUmVnUmVnKHNjcmF0Y2hSZWczLCBzY3IsIEVxdWFsKTsK
KyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmJyYW5jaChCVF9PUENPREUsIDEpOworICAgICAgICAg
ICAgbV9hc3NlbWJsZXIuZGNtcHBndChsZWZ0LCByaWdodCk7CisgICAgICAgICAgICByZWxlYXNl
U2NyYXRjaChzY3IpOworICAgICAgICAgICAgcmV0dXJuIGJyYW5jaEZhbHNlKCk7CisgICAgICAg
IH0KKworICAgICAgICBpZiAoY29uZCA9PSBEb3VibGVMZXNzVGhhbk9yVW5vcmRlcmVkKSB7Cisg
ICAgICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICAgICAg
bV9hc3NlbWJsZXIubG9hZENvbnN0YW50KDB4N2ZiZmZmZmYsIHNjcmF0Y2hSZWczKTsKKyAgICAg
ICAgICAgIG1fYXNzZW1ibGVyLmRjbnZkcyhyaWdodCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxl
ci5zdHNmcHVsUmVnKHNjcik7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5jbXBsUmVnUmVnKHNj
cmF0Y2hSZWczLCBzY3IsIEVxdWFsKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmVuc3VyZVNw
YWNlKG1fYXNzZW1ibGVyLm1heEluc3RydWN0aW9uU2l6ZSArIDIyLCBzaXplb2YodWludDMyX3Qp
KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmJyYW5jaChCVF9PUENPREUsIDUpOworICAgICAg
ICAgICAgbV9hc3NlbWJsZXIuZGNudmRzKGxlZnQpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIu
c3RzZnB1bFJlZyhzY3IpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuY21wbFJlZ1JlZyhzY3Jh
dGNoUmVnMywgc2NyLCBFcXVhbCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5icmFuY2goQlRf
T1BDT0RFLCAxKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmRjbXBwZ3QobGVmdCwgcmlnaHQp
OworICAgICAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICAgICAgICAgIHJldHVybiBi
cmFuY2hUcnVlKCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoY29uZCA9PSBEb3VibGVMZXNz
VGhhbk9yRXF1YWxPclVub3JkZXJlZCkgeworICAgICAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBj
bGFpbVNjcmF0Y2goKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmxvYWRDb25zdGFudCgweDdm
YmZmZmZmLCBzY3JhdGNoUmVnMyk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5kY252ZHMocmln
aHQpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuc3RzZnB1bFJlZyhzY3IpOworICAgICAgICAg
ICAgbV9hc3NlbWJsZXIuY21wbFJlZ1JlZyhzY3JhdGNoUmVnMywgc2NyLCBFcXVhbCk7CisgICAg
ICAgICAgICBtX2Fzc2VtYmxlci5lbnN1cmVTcGFjZShtX2Fzc2VtYmxlci5tYXhJbnN0cnVjdGlv
blNpemUgKyAyMiwgc2l6ZW9mKHVpbnQzMl90KSk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5i
cmFuY2goQlRfT1BDT0RFLCA1KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmRjbnZkcyhsZWZ0
KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnN0c2ZwdWxSZWcoc2NyKTsKKyAgICAgICAgICAg
IG1fYXNzZW1ibGVyLmNtcGxSZWdSZWcoc2NyYXRjaFJlZzMsIHNjciwgRXF1YWwpOworICAgICAg
ICAgICAgbV9hc3NlbWJsZXIuYnJhbmNoKEJUX09QQ09ERSwgMSk7CisgICAgICAgICAgICBtX2Fz
c2VtYmxlci5kY21wcGd0KHJpZ2h0LCBsZWZ0KTsKKyAgICAgICAgICAgIHJlbGVhc2VTY3JhdGNo
KHNjcik7CisgICAgICAgICAgICByZXR1cm4gYnJhbmNoRmFsc2UoKTsKKyAgICAgICAgfQorCisg
ICAgICAgIEFTU0VSVChjb25kID09IERvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQpOworICAgICAg
ICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBtX2Fzc2VtYmxlci5s
b2FkQ29uc3RhbnQoMHg3ZmJmZmZmZiwgc2NyYXRjaFJlZzMpOworICAgICAgICBtX2Fzc2VtYmxl
ci5kY252ZHMocmlnaHQpOworICAgICAgICBtX2Fzc2VtYmxlci5zdHNmcHVsUmVnKHNjcik7Cisg
ICAgICAgIG1fYXNzZW1ibGVyLmNtcGxSZWdSZWcoc2NyYXRjaFJlZzMsIHNjciwgRXF1YWwpOwor
ICAgICAgICBtX2Fzc2VtYmxlci5lbnN1cmVTcGFjZShtX2Fzc2VtYmxlci5tYXhJbnN0cnVjdGlv
blNpemUgKyAyMiwgc2l6ZW9mKHVpbnQzMl90KSk7CisgICAgICAgIG1fYXNzZW1ibGVyLmJyYW5j
aChCVF9PUENPREUsIDUpOworICAgICAgICBtX2Fzc2VtYmxlci5kY252ZHMobGVmdCk7CisgICAg
ICAgIG1fYXNzZW1ibGVyLnN0c2ZwdWxSZWcoc2NyKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuY21w
bFJlZ1JlZyhzY3JhdGNoUmVnMywgc2NyLCBFcXVhbCk7CisgICAgICAgIG1fYXNzZW1ibGVyLmJy
YW5jaChCVF9PUENPREUsIDEpOworICAgICAgICBtX2Fzc2VtYmxlci5kY21wcGVxKHJpZ2h0LCBs
ZWZ0KTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICAgICAgcmV0dXJuIGJyYW5j
aEZhbHNlKCk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2hUcnVlKCkKKyAgICB7CisgICAgICAg
IG1fYXNzZW1ibGVyLmVuc3VyZVNwYWNlKG1fYXNzZW1ibGVyLm1heEluc3RydWN0aW9uU2l6ZSAr
IDYsIHNpemVvZih1aW50MzJfdCkpOworICAgICAgICBKdW1wIG1fanVtcCA9IEp1bXAobV9hc3Nl
bWJsZXIuamUoKSk7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvYWRDb25zdGFudFVuUmV1c2FibGUo
MHgwLCBzY3JhdGNoUmVnMyk7CisgICAgICAgIG1fYXNzZW1ibGVyLm5vcCgpOworICAgICAgICBt
X2Fzc2VtYmxlci5ub3AoKTsKKyAgICAgICAgcmV0dXJuIG1fanVtcDsKKyAgICB9CisKKyAgICBK
dW1wIGJyYW5jaEZhbHNlKCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmVuc3VyZVNwYWNl
KG1fYXNzZW1ibGVyLm1heEluc3RydWN0aW9uU2l6ZSArIDYsIHNpemVvZih1aW50MzJfdCkpOwor
ICAgICAgICBKdW1wIG1fanVtcCA9IEp1bXAobV9hc3NlbWJsZXIuam5lKCkpOworICAgICAgICBt
X2Fzc2VtYmxlci5sb2FkQ29uc3RhbnRVblJldXNhYmxlKDB4MCwgc2NyYXRjaFJlZzMpOworICAg
ICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubm9wKCk7CisgICAg
ICAgIHJldHVybiBtX2p1bXA7CisgICAgfQorCisgICAgdm9pZCBzZXQ4Q29tcGFyZTMyKENvbmRp
dGlvbiBjb25kLCBSZWdpc3RlcklEIGxlZnQsIFJlZ2lzdGVySUQgcmlnaHQsIFJlZ2lzdGVySUQg
ZGVzdCkKKyAgICB7CisgICAgICAgIHNldDMyQ29tcGFyZTMyKGNvbmQsIGxlZnQsIHJpZ2h0LCBk
ZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIHNldDhDb21wYXJlMzIoQ29uZGl0aW9uIGNvbmQsIFJl
Z2lzdGVySUQgbGVmdCwgVHJ1c3RlZEltbTMyIHJpZ2h0LCBSZWdpc3RlcklEIGRlc3QpCisgICAg
eworICAgICAgICBpZiAobGVmdCAhPSBkZXN0KSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5s
b2FkQ29uc3RhbnQocmlnaHQubV92YWx1ZSwgZGVzdCk7CisgICAgICAgICAgICBzZXQzMkNvbXBh
cmUzMihjb25kLCBsZWZ0LCBkZXN0LCBkZXN0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorCisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAg
IG1fYXNzZW1ibGVyLmxvYWRDb25zdGFudChyaWdodC5tX3ZhbHVlLCBzY3IpOworICAgICAgICBz
ZXQzMkNvbXBhcmUzMihjb25kLCBsZWZ0LCBzY3IsIGRlc3QpOworICAgICAgICByZWxlYXNlU2Ny
YXRjaChzY3IpOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoMzIoQ29uZGl0aW9uIGNvbmQsIEJh
c2VJbmRleCBsZWZ0LCBUcnVzdGVkSW1tMzIgcmlnaHQpCisgICAgeworICAgICAgICBSZWdpc3Rl
cklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBtb3ZlKGxlZnQuaW5kZXgsIHNjcik7
CisgICAgICAgIGxzaGlmdDMyKFRydXN0ZWRJbW0zMihsZWZ0LnNjYWxlKSwgc2NyKTsKKyAgICAg
ICAgYWRkMzIobGVmdC5iYXNlLCBzY3IpOworICAgICAgICBsb2FkMzIoc2NyLCBsZWZ0Lm9mZnNl
dCwgc2NyKTsKKyAgICAgICAgY29tcGFyZTMyKHJpZ2h0Lm1fdmFsdWUsIHNjciwgY29uZCk7Cisg
ICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisKKyAgICAgICAgaWYgKGNvbmQgPT0gTm90RXF1
YWwpCisgICAgICAgICAgICByZXR1cm4gYnJhbmNoRmFsc2UoKTsKKyAgICAgICAgcmV0dXJuIGJy
YW5jaFRydWUoKTsKKyAgICB9CisKKyAgICB2b2lkIHNxcnREb3VibGUoRlBSZWdpc3RlcklEIHNy
YywgRlBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBpZiAoZGVzdCAhPSBzcmMpCisg
ICAgICAgICAgICBtX2Fzc2VtYmxlci5kbW92UmVnUmVnKHNyYywgZGVzdCk7CisgICAgICAgIG1f
YXNzZW1ibGVyLmRzcXJ0KGRlc3QpOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoVGVzdDgoQ29u
ZGl0aW9uIGNvbmQsIEFkZHJlc3MgYWRkcmVzcywgVHJ1c3RlZEltbTMyIG1hc2sgPSBUcnVzdGVk
SW1tMzIoLTEpKQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCBhZGRyZXNzVGVtcFJlZ2lzdGVy
ID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIGxvYWQ4KGFkZHJlc3MsIGFkZHJlc3NUZW1wUmVn
aXN0ZXIpOworICAgICAgICBKdW1wIGptcCA9IGJyYW5jaFRlc3QzMihjb25kLCBhZGRyZXNzVGVt
cFJlZ2lzdGVyLCBtYXNrKTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goYWRkcmVzc1RlbXBSZWdp
c3Rlcik7CisgICAgICAgIHJldHVybiBqbXA7CisgICAgfQorCisgICAgdm9pZCBzaWduRXh0ZW5k
MzJUb1B0cihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAg
aWYgKHNyYyAhPSBkZXN0KQorICAgICAgICAgICAgbW92ZShzcmMsIGRlc3QpOworICAgIH0KKwor
ICAgIEp1bXAgYnJhbmNoOChDb25kaXRpb24gY29uZCwgQWRkcmVzcyBsZWZ0LCBUcnVzdGVkSW1t
MzIgcmlnaHQpCisgICAgeworICAgICAgICBSZWdpc3RlcklEIGFkZHJlc3NUZW1wUmVnaXN0ZXIg
PSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgbG9hZDgobGVmdCwgYWRkcmVzc1RlbXBSZWdpc3Rl
cik7CisgICAgICAgIEp1bXAgam1wID0gYnJhbmNoMzIoY29uZCwgYWRkcmVzc1RlbXBSZWdpc3Rl
ciwgcmlnaHQpOworICAgICAgICByZWxlYXNlU2NyYXRjaChhZGRyZXNzVGVtcFJlZ2lzdGVyKTsK
KyAgICAgICAgcmV0dXJuIGptcDsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaFRydW5jYXRlRG91
YmxlVG9JbnQzMihGUFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAg
ICAgICBtX2Fzc2VtYmxlci5mdHJjZHJtZnB1bChzcmMpOworICAgICAgICBtX2Fzc2VtYmxlci5z
dHNmcHVsUmVnKGRlc3QpOworICAgICAgICBtX2Fzc2VtYmxlci5sb2FkQ29uc3RhbnQoMHg3ZmZm
ZmZmZiwgc2NyYXRjaFJlZzMpOworICAgICAgICBtX2Fzc2VtYmxlci5jbXBsUmVnUmVnKGRlc3Qs
IHNjcmF0Y2hSZWczLCBFcXVhbCk7CisgICAgICAgIG1fYXNzZW1ibGVyLmVuc3VyZVNwYWNlKG1f
YXNzZW1ibGVyLm1heEluc3RydWN0aW9uU2l6ZSArIDE0LCBzaXplb2YodWludDMyX3QpKTsKKyAg
ICAgICAgbV9hc3NlbWJsZXIuYnJhbmNoKEJUX09QQ09ERSwgMik7CisgICAgICAgIG1fYXNzZW1i
bGVyLmFkZGxJbW04cigxLCBzY3JhdGNoUmVnMyk7CisgICAgICAgIG1fYXNzZW1ibGVyLmNtcGxS
ZWdSZWcoZGVzdCwgc2NyYXRjaFJlZzMsIEVxdWFsKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaFRy
dWUoKTsKKyAgICB9CisKKyAgICAvLyBTdGFjayBtYW5pcHVsYXRpb24gb3BlcmF0aW9ucworCisg
ICAgdm9pZCBwb3AoUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIu
cG9wUmVnKGRlc3QpOworICAgIH0KKworICAgIHZvaWQgcHVzaChSZWdpc3RlcklEIHNyYykKKyAg
ICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnB1c2hSZWcoc3JjKTsKKyAgICB9CisKKyAgICB2b2lk
IHB1c2goQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgaWYgKCFhZGRyZXNzLm9mZnNl
dCkgeworICAgICAgICAgICAgcHVzaChhZGRyZXNzLmJhc2UpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKChhZGRyZXNzLm9mZnNldCA8IDApIHx8IChhZGRy
ZXNzLm9mZnNldCA+PSA2NCkpIHsKKyAgICAgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1T
Y3JhdGNoKCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5sb2FkQ29uc3RhbnQoYWRkcmVzcy5v
ZmZzZXQsIHNjcik7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGRsUmVnUmVnKGFkZHJlc3Mu
YmFzZSwgc2NyKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLm1vdmxNZW1SZWcoc2NyLCBTSDRS
ZWdpc3RlcnM6OnNwKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZGxJbW04cigtNCwgU0g0
UmVnaXN0ZXJzOjpzcCk7CisgICAgICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgbV9hc3NlbWJsZXIubW92bE1lbVJl
ZyhhZGRyZXNzLm9mZnNldCA+PiAyLCBhZGRyZXNzLmJhc2UsIFNINFJlZ2lzdGVyczo6c3ApOwor
ICAgICAgICBtX2Fzc2VtYmxlci5hZGRsSW1tOHIoLTQsIFNINFJlZ2lzdGVyczo6c3ApOworICAg
IH0KKworICAgIHZvaWQgcHVzaChUcnVzdGVkSW1tMzIgaW1tKQorICAgIHsKKyAgICAgICAgUmVn
aXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9hZENv
bnN0YW50KGltbS5tX3ZhbHVlLCBzY3IpOworICAgICAgICBwdXNoKHNjcik7CisgICAgICAgIHJl
bGVhc2VTY3JhdGNoKHNjcik7CisgICAgfQorCisgICAgLy8gUmVnaXN0ZXIgbW92ZSBvcGVyYXRp
b25zCisKKyAgICB2b2lkIG1vdmUoVHJ1c3RlZEltbTMyIGltbSwgUmVnaXN0ZXJJRCBkZXN0KQor
ICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9hZENvbnN0YW50KGltbS5tX3ZhbHVlLCBkZXN0
KTsKKyAgICB9CisKKyAgICBEYXRhTGFiZWxQdHIgbW92ZVdpdGhQYXRjaChUcnVzdGVkSW1tUHRy
IGluaXRpYWxWYWx1ZSwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgRGF0YUxhYmVs
UHRyIGRhdGFMYWJlbCh0aGlzKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9hZENvbnN0YW50VW5S
ZXVzYWJsZShyZWludGVycHJldF9jYXN0PHVpbnQzMl90Pihpbml0aWFsVmFsdWUubV92YWx1ZSks
IGRlc3QsIHRydWUpOworICAgICAgICByZXR1cm4gZGF0YUxhYmVsOworICAgIH0KKworICAgIHZv
aWQgbW92ZShSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAg
bV9hc3NlbWJsZXIubW92bFJlZ1JlZyhzcmMsIGRlc3QpOworICAgIH0KKworICAgIHZvaWQgbW92
ZShUcnVzdGVkSW1tUHRyIGltbSwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9h
c3NlbWJsZXIubG9hZENvbnN0YW50KGltbS5hc0ludHB0cigpLCBkZXN0KTsKKyAgICB9CisKKyAg
ICB2b2lkIGV4dHV3KFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAg
ICAgIG1fYXNzZW1ibGVyLmV4dHV3KHNyYywgZHN0KTsKKyAgICB9CisKKyAgICB2b2lkIHNldDMy
Q29tcGFyZTMyKENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGxlZnQsIFJlZ2lzdGVySUQgcmln
aHQsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmNtcGxSZWdS
ZWcocmlnaHQsIGxlZnQsIGNvbmQpOworICAgICAgICBpZiAoY29uZCAhPSBOb3RFcXVhbCkgewor
ICAgICAgICAgICAgbV9hc3NlbWJsZXIubW92dChkZXN0KTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorCisgICAgICAgIG1fYXNzZW1ibGVyLmVuc3VyZVNwYWNlKG1fYXNzZW1ibGVy
Lm1heEluc3RydWN0aW9uU2l6ZSArIDQpOworICAgICAgICBtX2Fzc2VtYmxlci5tb3ZJbW04KDAs
IGRlc3QpOworICAgICAgICBtX2Fzc2VtYmxlci5icmFuY2goQlRfT1BDT0RFLCAwKTsKKyAgICAg
ICAgbV9hc3NlbWJsZXIubW92SW1tOCgxLCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIHNldDMy
Q29tcGFyZTMyKENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGxlZnQsIFRydXN0ZWRJbW0zMiBy
aWdodCwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgaWYgKGxlZnQgIT0gZGVzdCkg
eworICAgICAgICAgICAgbW92ZShyaWdodCwgZGVzdCk7CisgICAgICAgICAgICBzZXQzMkNvbXBh
cmUzMihjb25kLCBsZWZ0LCBkZXN0LCBkZXN0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorCisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAg
IG1vdmUocmlnaHQsIHNjcik7CisgICAgICAgIHNldDMyQ29tcGFyZTMyKGNvbmQsIGxlZnQsIHNj
ciwgZGVzdCk7CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgfQorCisgICAgdm9p
ZCBzZXQzMlRlc3Q4KENvbmRpdGlvbiBjb25kLCBBZGRyZXNzIGFkZHJlc3MsIFRydXN0ZWRJbW0z
MiBtYXNrLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBBU1NFUlQoKGNvbmQgPT0g
WmVybykgfHwgKGNvbmQgPT0gTm9uWmVybykpOworCisgICAgICAgIGxvYWQ4KGFkZHJlc3MsIGRl
c3QpOworICAgICAgICBpZiAobWFzay5tX3ZhbHVlID09IC0xKQorICAgICAgICAgICAgY29tcGFy
ZTMyKDAsIGRlc3QsIGNvbmQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICB0ZXN0bEltbSht
YXNrLm1fdmFsdWUsIGRlc3QpOworICAgICAgICBpZiAoY29uZCAhPSBOb25aZXJvKSB7CisgICAg
ICAgICAgICBtX2Fzc2VtYmxlci5tb3Z0KGRlc3QpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisKKyAgICAgICAgbV9hc3NlbWJsZXIuZW5zdXJlU3BhY2UobV9hc3NlbWJsZXIubWF4
SW5zdHJ1Y3Rpb25TaXplICsgNCk7CisgICAgICAgIG1fYXNzZW1ibGVyLm1vdkltbTgoMCwgZGVz
dCk7CisgICAgICAgIG1fYXNzZW1ibGVyLmJyYW5jaChCVF9PUENPREUsIDApOworICAgICAgICBt
X2Fzc2VtYmxlci5tb3ZJbW04KDEsIGRlc3QpOworICAgIH0KKworICAgIHZvaWQgbG9hZFB0ckxp
bmtSZWcoSW1wbGljaXRBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBSZWdpc3RlcklE
IHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBsb2FkMzIoYWRkcmVzcywgc2NyKTsKKyAg
ICAgICAgbV9hc3NlbWJsZXIubGRzcHIoc2NyKTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2Ny
KTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaDMyKENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklE
IGxlZnQsIFJlZ2lzdGVySUQgcmlnaHQpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5jbXBs
UmVnUmVnKHJpZ2h0LCBsZWZ0LCBjb25kKTsKKyAgICAgICAgLyogQlQgbGFiZWwgPT4gQkYgb2Zm
CisgICAgICAgICAgIG5vcCAgICAgICAgIExEUiByZWcKKyAgICAgICAgICAgbm9wICAgICAgICAg
YnJhZiBAcmVnCisgICAgICAgICAgIG5vcCAgICAgICAgIG5vcAorICAgICAgICAgKi8KKyAgICAg
ICAgaWYgKGNvbmQgPT0gTm90RXF1YWwpCisgICAgICAgICAgICByZXR1cm4gYnJhbmNoRmFsc2Uo
KTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaFRydWUoKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5j
aDMyKENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGxlZnQsIFRydXN0ZWRJbW0zMiByaWdodCkK
KyAgICB7CisgICAgICAgIGlmICgoKGNvbmQgPT0gRXF1YWwpIHx8IChjb25kID09IE5vdEVxdWFs
KSkgJiYgIXJpZ2h0Lm1fdmFsdWUpCisgICAgICAgICAgICBtX2Fzc2VtYmxlci50ZXN0bFJlZ1Jl
ZyhsZWZ0LCBsZWZ0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY29tcGFyZTMyKHJpZ2h0
Lm1fdmFsdWUsIGxlZnQsIGNvbmQpOworCisgICAgICAgIGlmIChjb25kID09IE5vdEVxdWFsKQor
ICAgICAgICAgICAgcmV0dXJuIGJyYW5jaEZhbHNlKCk7CisgICAgICAgIHJldHVybiBicmFuY2hU
cnVlKCk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2gzMihDb25kaXRpb24gY29uZCwgUmVnaXN0
ZXJJRCBsZWZ0LCBBZGRyZXNzIHJpZ2h0KQorICAgIHsKKyAgICAgICAgY29tcGFyZTMyKHJpZ2h0
Lm9mZnNldCwgcmlnaHQuYmFzZSwgbGVmdCwgY29uZCk7CisgICAgICAgIGlmIChjb25kID09IE5v
dEVxdWFsKQorICAgICAgICAgICAgcmV0dXJuIGJyYW5jaEZhbHNlKCk7CisgICAgICAgIHJldHVy
biBicmFuY2hUcnVlKCk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2gzMihDb25kaXRpb24gY29u
ZCwgQWRkcmVzcyBsZWZ0LCBSZWdpc3RlcklEIHJpZ2h0KQorICAgIHsKKyAgICAgICAgY29tcGFy
ZTMyKHJpZ2h0LCBsZWZ0Lm9mZnNldCwgbGVmdC5iYXNlLCBjb25kKTsKKyAgICAgICAgaWYgKGNv
bmQgPT0gTm90RXF1YWwpCisgICAgICAgICAgICByZXR1cm4gYnJhbmNoRmFsc2UoKTsKKyAgICAg
ICAgcmV0dXJuIGJyYW5jaFRydWUoKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaDMyKENvbmRp
dGlvbiBjb25kLCBBZGRyZXNzIGxlZnQsIFRydXN0ZWRJbW0zMiByaWdodCkKKyAgICB7CisgICAg
ICAgIGNvbXBhcmUzMihyaWdodC5tX3ZhbHVlLCBsZWZ0Lm9mZnNldCwgbGVmdC5iYXNlLCBjb25k
KTsKKyAgICAgICAgaWYgKGNvbmQgPT0gTm90RXF1YWwpCisgICAgICAgICAgICByZXR1cm4gYnJh
bmNoRmFsc2UoKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaFRydWUoKTsKKyAgICB9CisKKyAgICBK
dW1wIGJyYW5jaDMyKENvbmRpdGlvbiBjb25kLCBBYnNvbHV0ZUFkZHJlc3MgbGVmdCwgUmVnaXN0
ZXJJRCByaWdodCkKKyAgICB7CisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNo
KCk7CisKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIocmVpbnRlcnByZXRfY2FzdDx1aW50MzJf
dD4obGVmdC5tX3B0cikpLCBzY3IpOworICAgICAgICBtX2Fzc2VtYmxlci5jbXBsUmVnUmVnKHJp
Z2h0LCBzY3IsIGNvbmQpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworCisgICAgICAg
IGlmIChjb25kID09IE5vdEVxdWFsKQorICAgICAgICAgICAgcmV0dXJuIGJyYW5jaEZhbHNlKCk7
CisgICAgICAgIHJldHVybiBicmFuY2hUcnVlKCk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2gz
MihDb25kaXRpb24gY29uZCwgQWJzb2x1dGVBZGRyZXNzIGxlZnQsIFRydXN0ZWRJbW0zMiByaWdo
dCkKKyAgICB7CisgICAgICAgIFJlZ2lzdGVySUQgYWRkcmVzc1RlbXBSZWdpc3RlciA9IGNsYWlt
U2NyYXRjaCgpOworCisgICAgICAgIG1fYXNzZW1ibGVyLmxvYWRDb25zdGFudChyZWludGVycHJl
dF9jYXN0PHVpbnQzMl90PihsZWZ0Lm1fcHRyKSwgYWRkcmVzc1RlbXBSZWdpc3Rlcik7CisgICAg
ICAgIG1fYXNzZW1ibGVyLm1vdmxNZW1SZWcoYWRkcmVzc1RlbXBSZWdpc3RlciwgYWRkcmVzc1Rl
bXBSZWdpc3Rlcik7CisgICAgICAgIGNvbXBhcmUzMihyaWdodC5tX3ZhbHVlLCBhZGRyZXNzVGVt
cFJlZ2lzdGVyLCBjb25kKTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goYWRkcmVzc1RlbXBSZWdp
c3Rlcik7CisKKyAgICAgICAgaWYgKGNvbmQgPT0gTm90RXF1YWwpCisgICAgICAgICAgICByZXR1
cm4gYnJhbmNoRmFsc2UoKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaFRydWUoKTsKKyAgICB9CisK
KyAgICBKdW1wIGJyYW5jaDE2KENvbmRpdGlvbiBjb25kLCAgQmFzZUluZGV4IGxlZnQsIFJlZ2lz
dGVySUQgcmlnaHQpCisgICAgeworICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRj
aCgpOworCisgICAgICAgIG1vdmUobGVmdC5pbmRleCwgc2NyKTsKKyAgICAgICAgbHNoaWZ0MzIo
VHJ1c3RlZEltbTMyKGxlZnQuc2NhbGUpLCBzY3IpOworCisgICAgICAgIGlmIChsZWZ0Lm9mZnNl
dCkKKyAgICAgICAgICAgIGFkZDMyKFRydXN0ZWRJbW0zMihsZWZ0Lm9mZnNldCksIHNjcik7Cisg
ICAgICAgIGFkZDMyKGxlZnQuYmFzZSwgc2NyKTsKKyAgICAgICAgbG9hZDE2KHNjciwgc2NyKTsK
KyAgICAgICAgZXh0dXcoc2NyLCBzY3IpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOwor
CisgICAgICAgIHJldHVybiBicmFuY2gzMihjb25kLCBzY3IsIHJpZ2h0KTsKKyAgICB9CisKKyAg
ICBKdW1wIGJyYW5jaDE2KENvbmRpdGlvbiBjb25kLCBCYXNlSW5kZXggbGVmdCwgVHJ1c3RlZElt
bTMyIHJpZ2h0KQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2go
KTsKKworICAgICAgICBtb3ZlKGxlZnQuaW5kZXgsIHNjcik7CisgICAgICAgIGxzaGlmdDMyKFRy
dXN0ZWRJbW0zMihsZWZ0LnNjYWxlKSwgc2NyKTsKKworICAgICAgICBpZiAobGVmdC5vZmZzZXQp
CisgICAgICAgICAgICBhZGQzMihUcnVzdGVkSW1tMzIobGVmdC5vZmZzZXQpLCBzY3IpOworICAg
ICAgICBhZGQzMihsZWZ0LmJhc2UsIHNjcik7CisgICAgICAgIGxvYWQxNihzY3IsIHNjcik7Cisg
ICAgICAgIGV4dHV3KHNjciwgc2NyKTsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IxID0gY2xhaW1T
Y3JhdGNoKCk7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvYWRDb25zdGFudChyaWdodC5tX3ZhbHVl
LCBzY3IxKTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICAgICAgcmVsZWFzZVNj
cmF0Y2goc2NyMSk7CisKKyAgICAgICAgcmV0dXJuIGJyYW5jaDMyKGNvbmQsIHNjciwgc2NyMSk7
CisgICAgfQorCisgICAgSnVtcCBicmFuY2hUZXN0MzIoQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVy
SUQgcmVnLCBSZWdpc3RlcklEIG1hc2spCisgICAgeworICAgICAgICBBU1NFUlQoKGNvbmQgPT0g
WmVybykgfHwgKGNvbmQgPT0gTm9uWmVybykpOworCisgICAgICAgIG1fYXNzZW1ibGVyLnRlc3Rs
UmVnUmVnKHJlZywgbWFzayk7CisKKyAgICAgICAgaWYgKGNvbmQgPT0gTm90RXF1YWwpCisgICAg
ICAgICAgICByZXR1cm4gYnJhbmNoRmFsc2UoKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaFRydWUo
KTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaFRlc3QzMihDb25kaXRpb24gY29uZCwgUmVnaXN0
ZXJJRCByZWcsIFRydXN0ZWRJbW0zMiBtYXNrID0gVHJ1c3RlZEltbTMyKC0xKSkKKyAgICB7Cisg
ICAgICAgIEFTU0VSVCgoY29uZCA9PSBaZXJvKSB8fCAoY29uZCA9PSBOb25aZXJvKSk7CisKKyAg
ICAgICAgaWYgKG1hc2subV92YWx1ZSA9PSAtMSkKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnRl
c3RsUmVnUmVnKHJlZywgcmVnKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdGVzdGxJbW0o
bWFzay5tX3ZhbHVlLCByZWcpOworCisgICAgICAgIGlmIChjb25kID09IE5vdEVxdWFsKQorICAg
ICAgICAgICAgcmV0dXJuIGJyYW5jaEZhbHNlKCk7CisgICAgICAgIHJldHVybiBicmFuY2hUcnVl
KCk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2hUZXN0MzIoQ29uZGl0aW9uIGNvbmQsIEFkZHJl
c3MgYWRkcmVzcywgVHJ1c3RlZEltbTMyIG1hc2sgPSBUcnVzdGVkSW1tMzIoLTEpKQorICAgIHsK
KyAgICAgICAgQVNTRVJUKChjb25kID09IFplcm8pIHx8IChjb25kID09IE5vblplcm8pKTsKKwor
ICAgICAgICBpZiAobWFzay5tX3ZhbHVlID09IC0xKQorICAgICAgICAgICAgY29tcGFyZTMyKDAs
IGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UsIGNvbmQpOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICB0ZXN0SW1tKG1hc2subV92YWx1ZSwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFz
ZSk7CisKKyAgICAgICAgaWYgKGNvbmQgPT0gTm90RXF1YWwpCisgICAgICAgICAgICByZXR1cm4g
YnJhbmNoRmFsc2UoKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaFRydWUoKTsKKyAgICB9CisKKyAg
ICBKdW1wIGJyYW5jaFRlc3QzMihDb25kaXRpb24gY29uZCwgQmFzZUluZGV4IGFkZHJlc3MsIFRy
dXN0ZWRJbW0zMiBtYXNrID0gVHJ1c3RlZEltbTMyKC0xKSkKKyAgICB7CisgICAgICAgIFJlZ2lz
dGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisKKyAgICAgICAgbW92ZShhZGRyZXNzLmluZGV4
LCBzY3IpOworICAgICAgICBsc2hpZnQzMihUcnVzdGVkSW1tMzIoYWRkcmVzcy5zY2FsZSksIHNj
cik7CisgICAgICAgIGFkZDMyKGFkZHJlc3MuYmFzZSwgc2NyKTsKKyAgICAgICAgbG9hZDMyKHNj
ciwgYWRkcmVzcy5vZmZzZXQsIHNjcik7CisKKyAgICAgICAgaWYgKG1hc2subV92YWx1ZSA9PSAt
MSkKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnRlc3RsUmVnUmVnKHNjciwgc2NyKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgdGVzdGxJbW0obWFzay5tX3ZhbHVlLCBzY3IpOworCisgICAg
ICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisKKyAgICAgICAgaWYgKGNvbmQgPT0gTm90RXF1YWwp
CisgICAgICAgICAgICByZXR1cm4gYnJhbmNoRmFsc2UoKTsKKyAgICAgICAgcmV0dXJuIGJyYW5j
aFRydWUoKTsKKyAgICB9CisKKyAgICBKdW1wIGp1bXAoKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IEp1bXAobV9hc3NlbWJsZXIuam1wKCkpOworICAgIH0KKworICAgIHZvaWQganVtcChSZWdpc3Rl
cklEIHRhcmdldCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmptcFJlZyh0YXJnZXQpOwor
ICAgIH0KKworICAgIHZvaWQganVtcChBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBS
ZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworCisgICAgICAgIGlmICgoYWRkcmVzcy5v
ZmZzZXQgPCAwKSB8fCAoYWRkcmVzcy5vZmZzZXQgPj0gNjQpKSB7CisgICAgICAgICAgICBtX2Fz
c2VtYmxlci5sb2FkQ29uc3RhbnQoYWRkcmVzcy5vZmZzZXQsIHNjcik7CisgICAgICAgICAgICBt
X2Fzc2VtYmxlci5hZGRsUmVnUmVnKGFkZHJlc3MuYmFzZSwgc2NyKTsKKyAgICAgICAgICAgIG1f
YXNzZW1ibGVyLm1vdmxNZW1SZWcoc2NyLCBzY3IpOworICAgICAgICB9IGVsc2UgaWYgKGFkZHJl
c3Mub2Zmc2V0KQorICAgICAgICAgICAgbV9hc3NlbWJsZXIubW92bE1lbVJlZyhhZGRyZXNzLm9m
ZnNldCA+PiAyLCBhZGRyZXNzLmJhc2UsIHNjcik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IG1fYXNzZW1ibGVyLm1vdmxNZW1SZWcoYWRkcmVzcy5iYXNlLCBzY3IpOworICAgICAgICBtX2Fz
c2VtYmxlci5qbXBSZWcoc2NyKTsKKworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAg
IH0KKworICAgIC8vIEFyaXRobWV0aWMgY29udHJvbCBmbG93IG9wZXJhdGlvbnMKKworICAgIEp1
bXAgYnJhbmNoQWRkMzIoQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklE
IGRlc3QpCisgICAgeworICAgICAgICBBU1NFUlQoKGNvbmQgPT0gT3ZlcmZsb3cpIHx8IChjb25k
ID09IFNpZ25lZCkgfHwgKGNvbmQgPT0gWmVybykgfHwgKGNvbmQgPT0gTm9uWmVybykpOworCisg
ICAgICAgIGlmIChjb25kID09IE92ZXJmbG93KSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5h
ZGR2bFJlZ1JlZyhzcmMsIGRlc3QpOworICAgICAgICAgICAgcmV0dXJuIGJyYW5jaFRydWUoKTsK
KyAgICAgICAgfQorCisgICAgICAgIGlmIChjb25kID09IFNpZ25lZCkgeworICAgICAgICAgICAg
bV9hc3NlbWJsZXIuYWRkbFJlZ1JlZyhzcmMsIGRlc3QpOworICAgICAgICAgICAgLy8gQ2hlY2sg
aWYgZGVzdCBpcyBuZWdhdGl2ZQorICAgICAgICAgICAgbV9hc3NlbWJsZXIuY21wcHooZGVzdCk7
CisgICAgICAgICAgICByZXR1cm4gYnJhbmNoRmFsc2UoKTsKKyAgICAgICAgfQorCisgICAgICAg
IG1fYXNzZW1ibGVyLmFkZGxSZWdSZWcoc3JjLCBkZXN0KTsKKyAgICAgICAgY29tcGFyZTMyKDAs
IGRlc3QsIEVxdWFsKTsKKworICAgICAgICBpZiAoY29uZCA9PSBOb3RFcXVhbCkKKyAgICAgICAg
ICAgIHJldHVybiBicmFuY2hGYWxzZSgpOworICAgICAgICByZXR1cm4gYnJhbmNoVHJ1ZSgpOwor
ICAgIH0KKworICAgIEp1bXAgYnJhbmNoQWRkMzIoQ29uZGl0aW9uIGNvbmQsIFRydXN0ZWRJbW0z
MiBpbW0sIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIEFTU0VSVCgoY29uZCA9PSBP
dmVyZmxvdykgfHwgKGNvbmQgPT0gU2lnbmVkKSB8fCAoY29uZCA9PSBaZXJvKSB8fCAoY29uZCA9
PSBOb25aZXJvKSk7CisKKyAgICAgICAgbW92ZShpbW0sIHNjcmF0Y2hSZWczKTsKKyAgICAgICAg
cmV0dXJuIGJyYW5jaEFkZDMyKGNvbmQsIHNjcmF0Y2hSZWczLCBkZXN0KTsKKyAgICB9CisKKyAg
ICBKdW1wIGJyYW5jaE11bDMyKENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIHNyYywgUmVnaXN0
ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKChjb25kID09IE92ZXJmbG93KSB8fCAo
Y29uZCA9PSBTaWduZWQpIHx8IChjb25kID09IFplcm8pIHx8IChjb25kID09IE5vblplcm8pKTsK
KworICAgICAgICBpZiAoY29uZCA9PSBPdmVyZmxvdykgeworICAgICAgICAgICAgUmVnaXN0ZXJJ
RCBzY3IxID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNs
YWltU2NyYXRjaCgpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuZG11bGxSZWdSZWcoc3JjLCBk
ZXN0KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnN0c21hY2woZGVzdCk7CisgICAgICAgICAg
ICBtX2Fzc2VtYmxlci5tb3ZJbW04KC0zMSwgc2NyKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVy
Lm1vdmxSZWdSZWcoZGVzdCwgc2NyMSk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zaGFSZWdS
ZWcoc2NyMSwgc2NyKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnN0c21hY2goc2NyKTsKKyAg
ICAgICAgICAgIG1fYXNzZW1ibGVyLmNtcGxSZWdSZWcoc2NyLCBzY3IxLCBaZXJvKTsKKyAgICAg
ICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcjEpOworICAgICAgICAgICAgcmVsZWFzZVNjcmF0Y2go
c2NyKTsKKyAgICAgICAgICAgIHJldHVybiBicmFuY2hGYWxzZSgpOworICAgICAgICB9CisKKyAg
ICAgICAgbV9hc3NlbWJsZXIuaW11bGxSZWdSZWcoc3JjLCBkZXN0KTsKKyAgICAgICAgbV9hc3Nl
bWJsZXIuc3RzbWFjbChkZXN0KTsKKyAgICAgICAgaWYgKGNvbmQgPT0gU2lnbmVkKSB7CisgICAg
ICAgICAgICAvLyBDaGVjayBpZiBkZXN0IGlzIG5lZ2F0aXZlCisgICAgICAgICAgICBtX2Fzc2Vt
Ymxlci5jbXBweihkZXN0KTsKKyAgICAgICAgICAgIHJldHVybiBicmFuY2hGYWxzZSgpOworICAg
ICAgICB9CisKKyAgICAgICAgY29tcGFyZTMyKDAsIGRlc3QsIGNvbmQpOworCisgICAgICAgIGlm
IChjb25kID09IE5vdEVxdWFsKQorICAgICAgICAgICAgcmV0dXJuIGJyYW5jaEZhbHNlKCk7Cisg
ICAgICAgIHJldHVybiBicmFuY2hUcnVlKCk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2hNdWwz
MihDb25kaXRpb24gY29uZCwgVHJ1c3RlZEltbTMyIGltbSwgUmVnaXN0ZXJJRCBzcmMsIFJlZ2lz
dGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIEFTU0VSVCgoY29uZCA9PSBPdmVyZmxvdykgfHwg
KGNvbmQgPT0gU2lnbmVkKSB8fCAoY29uZCA9PSBaZXJvKSB8fCAoY29uZCA9PSBOb25aZXJvKSk7
CisKKyAgICAgICAgbW92ZShpbW0sIHNjcmF0Y2hSZWczKTsKKyAgICAgICAgaWYgKHNyYyAhPSBk
ZXN0KQorICAgICAgICAgICAgbW92ZShzcmMsIGRlc3QpOworCisgICAgICAgIHJldHVybiBicmFu
Y2hNdWwzMihjb25kLCBzY3JhdGNoUmVnMywgZGVzdCk7CisgICAgfQorCisgICAgSnVtcCBicmFu
Y2hTdWIzMihDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkK
KyAgICB7CisgICAgICAgIEFTU0VSVCgoY29uZCA9PSBPdmVyZmxvdykgfHwgKGNvbmQgPT0gU2ln
bmVkKSB8fCAoY29uZCA9PSBaZXJvKSB8fCAoY29uZCA9PSBOb25aZXJvKSk7CisKKyAgICAgICAg
aWYgKGNvbmQgPT0gT3ZlcmZsb3cpIHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnN1YnZsUmVn
UmVnKHNyYywgZGVzdCk7CisgICAgICAgICAgICByZXR1cm4gYnJhbmNoVHJ1ZSgpOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKGNvbmQgPT0gU2lnbmVkKSB7CisgICAgICAgICAgICAvLyBDaGVj
ayBpZiBkZXN0IGlzIG5lZ2F0aXZlCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zdWJsUmVnUmVn
KHNyYywgZGVzdCk7CisgICAgICAgICAgICBjb21wYXJlMzIoMCwgZGVzdCwgTGVzc1RoYW4pOwor
ICAgICAgICAgICAgcmV0dXJuIGJyYW5jaFRydWUoKTsKKyAgICAgICAgfQorCisgICAgICAgIHN1
YjMyKHNyYywgZGVzdCk7CisgICAgICAgIGNvbXBhcmUzMigwLCBkZXN0LCBjb25kKTsKKworICAg
ICAgICBpZiAoY29uZCA9PSBOb3RFcXVhbCkKKyAgICAgICAgICAgIHJldHVybiBicmFuY2hGYWxz
ZSgpOworICAgICAgICByZXR1cm4gYnJhbmNoVHJ1ZSgpOworICAgIH0KKworICAgIEp1bXAgYnJh
bmNoU3ViMzIoQ29uZGl0aW9uIGNvbmQsIFRydXN0ZWRJbW0zMiBpbW0sIFJlZ2lzdGVySUQgZGVz
dCkKKyAgICB7CisgICAgICAgIEFTU0VSVCgoY29uZCA9PSBPdmVyZmxvdykgfHwgKGNvbmQgPT0g
U2lnbmVkKSB8fCAoY29uZCA9PSBaZXJvKSB8fCAoY29uZCA9PSBOb25aZXJvKSk7CisKKyAgICAg
ICAgbW92ZShpbW0sIHNjcmF0Y2hSZWczKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaFN1YjMyKGNv
bmQsIHNjcmF0Y2hSZWczLCBkZXN0KTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaE9yMzIoQ29u
ZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAg
ICAgICBBU1NFUlQoKGNvbmQgPT0gU2lnbmVkKSB8fCAoY29uZCA9PSBaZXJvKSB8fCAoY29uZCA9
PSBOb25aZXJvKSk7CisKKyAgICAgICAgaWYgKGNvbmQgPT0gU2lnbmVkKSB7CisgICAgICAgICAg
ICBvcjMyKHNyYywgZGVzdCk7CisgICAgICAgICAgICBjb21wYXJlMzIoMCwgZGVzdCwgTGVzc1Ro
YW4pOworICAgICAgICAgICAgcmV0dXJuIGJyYW5jaFRydWUoKTsKKyAgICAgICAgfQorCisgICAg
ICAgIG9yMzIoc3JjLCBkZXN0KTsKKyAgICAgICAgY29tcGFyZTMyKDAsIGRlc3QsIGNvbmQpOwor
CisgICAgICAgIGlmIChjb25kID09IE5vdEVxdWFsKQorICAgICAgICAgICAgcmV0dXJuIGJyYW5j
aEZhbHNlKCk7CisgICAgICAgIHJldHVybiBicmFuY2hUcnVlKCk7CisgICAgfQorCisgICAgdm9p
ZCBicmFuY2hDb252ZXJ0RG91YmxlVG9JbnQzMihGUFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklE
IGRlc3QsIEp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIEZQUmVnaXN0ZXJJRCBmcFRlbXApCisgICAg
eworICAgICAgICBtX2Fzc2VtYmxlci5mdHJjZHJtZnB1bChzcmMpOworICAgICAgICBtX2Fzc2Vt
Ymxlci5zdHNmcHVsUmVnKGRlc3QpOworICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShkZXN0
LCBmc2NyYXRjaCk7CisgICAgICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoYnJhbmNoRG91YmxlKERv
dWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQsIGZzY3JhdGNoLCBzcmMpKTsKKworICAgICAgICBpZiAo
ZGVzdCA9PSBTSDRSZWdpc3RlcnM6OnIwKQorICAgICAgICAgICAgbV9hc3NlbWJsZXIuY21wRXFJ
bW1SMCgwLCBkZXN0LCBFcXVhbCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgbV9hc3Nl
bWJsZXIubW92SW1tOCgwLCBzY3JhdGNoUmVnMyk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5j
bXBsUmVnUmVnKHNjcmF0Y2hSZWczLCBkZXN0LCBFcXVhbCk7CisgICAgICAgIH0KKyAgICAgICAg
ZmFpbHVyZUNhc2VzLmFwcGVuZChicmFuY2hUcnVlKCkpOworICAgIH0KKworICAgIHZvaWQgbmVn
MzIoUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5uZWcoZHN0LCBk
c3QpOworICAgIH0KKworICAgIHZvaWQgbm90MzIoUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAg
ICAgICBtX2Fzc2VtYmxlci5ub3RsUmVnKGRzdCwgZHN0KTsKKyAgICB9CisKKyAgICB2b2lkIHVy
c2hpZnQzMihSZWdpc3RlcklEIHNoaWZ0YW1vdW50LCBSZWdpc3RlcklEIGRlc3QpCisgICAgewor
ICAgICAgICBjb21wYXJlMzIoMzIsIHNoaWZ0YW1vdW50LCBFcXVhbCk7CisgICAgICAgIG1fYXNz
ZW1ibGVyLmVuc3VyZVNwYWNlKG1fYXNzZW1ibGVyLm1heEluc3RydWN0aW9uU2l6ZSArIDQpOwor
ICAgICAgICBtX2Fzc2VtYmxlci5icmFuY2goQlRfT1BDT0RFLCAxKTsKKyAgICAgICAgbV9hc3Nl
bWJsZXIubmVnKHNoaWZ0YW1vdW50LCBzaGlmdGFtb3VudCk7CisgICAgICAgIG1fYXNzZW1ibGVy
LnNobGxSZWdSZWcoZGVzdCwgc2hpZnRhbW91bnQpOworICAgIH0KKworICAgIHZvaWQgdXJzaGlm
dDMyKFRydXN0ZWRJbW0zMiBpbW0sIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIFJl
Z2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvYWRD
b25zdGFudCgtKGltbS5tX3ZhbHVlKSwgc2NyKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuc2hhUmVn
UmVnKGRlc3QsIHNjcik7CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgfQorCisg
ICAgQ2FsbCBjYWxsKCkKKyAgICB7CisgICAgICAgIHJldHVybiBDYWxsKG1fYXNzZW1ibGVyLmNh
bGwoKSwgQ2FsbDo6TGlua2FibGUpOworICAgIH0KKworICAgIENhbGwgbmVhckNhbGwoKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIENhbGwobV9hc3NlbWJsZXIuY2FsbCgpLCBDYWxsOjpMaW5rYWJs
ZU5lYXIpOworICAgIH0KKworICAgIENhbGwgY2FsbChSZWdpc3RlcklEIHRhcmdldCkKKyAgICB7
CisgICAgICAgIHJldHVybiBDYWxsKG1fYXNzZW1ibGVyLmNhbGwodGFyZ2V0KSwgQ2FsbDo6Tm9u
ZSk7CisgICAgfQorCisgICAgdm9pZCBicmVha3BvaW50KCkKKyAgICB7CisgICAgICAgIG1fYXNz
ZW1ibGVyLmJrcHQoKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubm9wKCk7CisgICAgfQorCisgICAg
SnVtcCBicmFuY2hQdHJXaXRoUGF0Y2goQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgbGVmdCwg
RGF0YUxhYmVsUHRyJiBkYXRhTGFiZWwsIFRydXN0ZWRJbW1QdHIgaW5pdGlhbFJpZ2h0VmFsdWUg
PSBUcnVzdGVkSW1tUHRyKDApKQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCBkYXRhVGVtcFJl
Z2lzdGVyID0gY2xhaW1TY3JhdGNoKCk7CisKKyAgICAgICAgZGF0YUxhYmVsID0gbW92ZVdpdGhQ
YXRjaChpbml0aWFsUmlnaHRWYWx1ZSwgZGF0YVRlbXBSZWdpc3Rlcik7CisgICAgICAgIG1fYXNz
ZW1ibGVyLmNtcGxSZWdSZWcoZGF0YVRlbXBSZWdpc3RlciwgbGVmdCwgY29uZCk7CisgICAgICAg
IHJlbGVhc2VTY3JhdGNoKGRhdGFUZW1wUmVnaXN0ZXIpOworCisgICAgICAgIGlmIChjb25kID09
IE5vdEVxdWFsKQorICAgICAgICAgICAgcmV0dXJuIGJyYW5jaEZhbHNlKCk7CisgICAgICAgIHJl
dHVybiBicmFuY2hUcnVlKCk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2hQdHJXaXRoUGF0Y2go
Q29uZGl0aW9uIGNvbmQsIEFkZHJlc3MgbGVmdCwgRGF0YUxhYmVsUHRyJiBkYXRhTGFiZWwsIFRy
dXN0ZWRJbW1QdHIgaW5pdGlhbFJpZ2h0VmFsdWUgPSBUcnVzdGVkSW1tUHRyKDApKQorICAgIHsK
KyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKworICAgICAgICBtX2Fz
c2VtYmxlci5sb2FkQ29uc3RhbnQobGVmdC5vZmZzZXQsIHNjcik7CisgICAgICAgIG1fYXNzZW1i
bGVyLmFkZGxSZWdSZWcobGVmdC5iYXNlLCBzY3IpOworICAgICAgICBtX2Fzc2VtYmxlci5tb3Zs
TWVtUmVnKHNjciwgc2NyKTsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IxID0gY2xhaW1TY3JhdGNo
KCk7CisgICAgICAgIGRhdGFMYWJlbCA9IG1vdmVXaXRoUGF0Y2goaW5pdGlhbFJpZ2h0VmFsdWUs
IHNjcjEpOworICAgICAgICBtX2Fzc2VtYmxlci5jbXBsUmVnUmVnKHNjcjEsIHNjciwgY29uZCk7
CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNj
cjEpOworCisgICAgICAgIGlmIChjb25kID09IE5vdEVxdWFsKQorICAgICAgICAgICAgcmV0dXJu
IGJyYW5jaEZhbHNlKCk7CisgICAgICAgIHJldHVybiBicmFuY2hUcnVlKCk7CisgICAgfQorCisg
ICAgdm9pZCByZXQoKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIucmV0KCk7CisgICAgICAg
IG1fYXNzZW1ibGVyLm5vcCgpOworICAgIH0KKworICAgIERhdGFMYWJlbFB0ciBzdG9yZVB0cldp
dGhQYXRjaChUcnVzdGVkSW1tUHRyIGluaXRpYWxWYWx1ZSwgSW1wbGljaXRBZGRyZXNzIGFkZHJl
c3MpCisgICAgeworICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAg
ICAgICBEYXRhTGFiZWxQdHIgbGFiZWwgPSBtb3ZlV2l0aFBhdGNoKGluaXRpYWxWYWx1ZSwgc2Ny
KTsKKyAgICAgICAgc3RvcmUzMihzY3IsIGFkZHJlc3MpOworICAgICAgICByZWxlYXNlU2NyYXRj
aChzY3IpOworICAgICAgICByZXR1cm4gbGFiZWw7CisgICAgfQorCisgICAgRGF0YUxhYmVsUHRy
IHN0b3JlUHRyV2l0aFBhdGNoKEltcGxpY2l0QWRkcmVzcyBhZGRyZXNzKSB7IHJldHVybiBzdG9y
ZVB0cldpdGhQYXRjaChUcnVzdGVkSW1tUHRyKDApLCBhZGRyZXNzKTsgfQorCisgICAgaW50IHNp
emVPZkNvbnN0YW50UG9vbCgpCisgICAgeworICAgICAgICByZXR1cm4gbV9hc3NlbWJsZXIuc2l6
ZU9mQ29uc3RhbnRQb29sKCk7CisgICAgfQorCisgICAgQ2FsbCB0YWlsUmVjdXJzaXZlQ2FsbCgp
CisgICAgeworICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworCisgICAg
ICAgIG1fYXNzZW1ibGVyLmxvYWRDb25zdGFudFVuUmV1c2FibGUoMHgwLCBzY3IsIHRydWUpOwor
ICAgICAgICBKdW1wIG1fanVtcCA9IEp1bXAobV9hc3NlbWJsZXIuam1wKHNjcikpOworICAgICAg
ICByZWxlYXNlU2NyYXRjaChzY3IpOworCisgICAgICAgIHJldHVybiBDYWxsOjpmcm9tVGFpbEp1
bXAobV9qdW1wKTsKKyAgICB9CisKKyAgICBDYWxsIG1ha2VUYWlsUmVjdXJzaXZlQ2FsbChKdW1w
IG9sZEp1bXApCisgICAgeworICAgICAgICBvbGRKdW1wLmxpbmsodGhpcyk7CisgICAgICAgIHJl
dHVybiB0YWlsUmVjdXJzaXZlQ2FsbCgpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBmcmllbmQg
Y2xhc3MgTGlua0J1ZmZlcjsKKyAgICBmcmllbmQgY2xhc3MgUmVwYXRjaEJ1ZmZlcjsKKworICAg
IHN0YXRpYyB2b2lkIGxpbmtDYWxsKHZvaWQqLCBDYWxsLCBGdW5jdGlvblB0cik7CisgICAgc3Rh
dGljIHZvaWQgcmVwYXRjaENhbGwoQ29kZUxvY2F0aW9uQ2FsbCwgQ29kZUxvY2F0aW9uTGFiZWwp
OworICAgIHN0YXRpYyB2b2lkIHJlcGF0Y2hDYWxsKENvZGVMb2NhdGlvbkNhbGwsIEZ1bmN0aW9u
UHRyKTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxFKEFTU0VN
QkxFUikKKworI2VuZGlmIC8vIE1hY3JvQXNzZW1ibGVyU0g0X2gKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvU0g0QXNzZW1ibGVyLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL1NINEFzc2VtYmxlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjU3MjZhZTgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL1NINEFzc2VtYmxlci5oCkBAIC0wLDAgKzEsMjA2NyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwOS0yMDExIFNUTWljcm9lbGVjdHJvbmljcy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5k
ZWYgU0g0QXNzZW1ibGVyX2gKKyNkZWZpbmUgU0g0QXNzZW1ibGVyX2gKKworI2lmIEVOQUJMRShB
U1NFTUJMRVIpICYmIENQVShTSDQpCisKKyNpbmNsdWRlICJBc3NlbWJsZXJCdWZmZXIuaCIKKyNp
bmNsdWRlICJBc3NlbWJsZXJCdWZmZXJXaXRoQ29uc3RhbnRQb29sLmgiCisjaW5jbHVkZSA8c3Rk
YXJnLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4K
KyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKKyNpZm5kZWYgTkRFQlVHCisjZGVmaW5lIFNINF9B
U1NFTUJMRVJfVFJBQ0lORworI2VuZGlmCisKK25hbWVzcGFjZSBKU0MgewordHlwZWRlZiB1aW50
MTZfdCBTSDRXb3JkOworCitlbnVtIHsKKyAgICBJTlZBTElEX09QQ09ERSA9IDB4ZmZmZiwKKyAg
ICBBRERfT1BDT0RFID0gMHgzMDBjLAorICAgIEFERElNTV9PUENPREUgPSAweDcwMDAsCisgICAg
QUREQ19PUENPREUgPSAweDMwMGUsCisgICAgQUREVl9PUENPREUgPSAweDMwMGYsCisgICAgQU5E
X09QQ09ERSA9IDB4MjAwOSwKKyAgICBBTkRJTU1fT1BDT0RFID0gMHhjOTAwLAorICAgIERJVjBf
T1BDT0RFID0gMHgyMDA3LAorICAgIERJVjFfT1BDT0RFID0gMHgzMDA0LAorICAgIEJGX09QQ09E
RSA9IDB4OGIwMCwKKyAgICBCRlNfT1BDT0RFID0gMHg4ZjAwLAorICAgIEJSQV9PUENPREUgPSAw
eGEwMDAsCisgICAgQlJBRl9PUENPREUgPSAweDAwMjMsCisgICAgTk9QX09QQ09ERSA9IDB4MDAw
OSwKKyAgICBCU1JfT1BDT0RFID0gMHhiMDAwLAorICAgIFJUU19PUENPREUgPSAweDAwMGIsCisg
ICAgQlRfT1BDT0RFID0gMHg4OTAwLAorICAgIEJUU19PUENPREUgPSAweDhkMDAsCisgICAgQlNS
Rl9PUENPREUgPSAweDAwMDMsCisgICAgQlJLX09QQ09ERSA9IDB4MDAzYiwKKyAgICBGVFJDX09Q
Q09ERSA9IDB4ZjAzZCwKKyAgICBDTVBFUV9PUENPREUgPSAweDMwMDAsCisgICAgQ01QRVFJTU1f
T1BDT0RFID0gMHg4ODAwLAorICAgIENNUEdFX09QQ09ERSA9IDB4MzAwMywKKyAgICBDTVBHVF9P
UENPREUgPSAweDMwMDcsCisgICAgQ01QSElfT1BDT0RFID0gMHgzMDA2LAorICAgIENNUEhTX09Q
Q09ERSA9IDB4MzAwMiwKKyAgICBDTVBQTF9PUENPREUgPSAweDQwMTUsCisgICAgQ01QUFpfT1BD
T0RFID0gMHg0MDExLAorICAgIENNUFNUUl9PUENPREUgPSAweDIwMGMsCisgICAgRFRfT1BDT0RF
ID0gMHg0MDEwLAorICAgIEZDTVBFUV9PUENPREUgPSAweGYwMDQsCisgICAgRkNNUEdUX09QQ09E
RSA9IDB4ZjAwNSwKKyAgICBGTU9WX09QQ09ERSA9IDB4ZjAwYywKKyAgICBGQUREX09QQ09ERSA9
IDB4ZjAwMCwKKyAgICBGTVVMX09QQ09ERSA9IDB4ZjAwMiwKKyAgICBGU1VCX09QQ09ERSA9IDB4
ZjAwMSwKKyAgICBGRElWX09QQ09ERSA9IDB4ZjAwMywKKyAgICBGTkVHX09QQ09ERSA9IDB4ZjA0
ZCwKKyAgICBKTVBfT1BDT0RFID0gMHg0MDJiLAorICAgIEpTUl9PUENPREUgPSAweDQwMGIsCisg
ICAgTERTUFJfT1BDT0RFID0gMHg0MDJhLAorICAgIExEU0xQUl9PUENPREUgPSAweDQwMjYsCisg
ICAgTU9WX09QQ09ERSA9IDB4NjAwMywKKyAgICBNT1ZJTU1fT1BDT0RFID0gMHhlMDAwLAorICAg
IE1PVkJfV1JJVEVfUk5fT1BDT0RFID0gMHgyMDAwLAorICAgIE1PVkJfV1JJVEVfUk5ERUNfT1BD
T0RFID0gMHgyMDA0LAorICAgIE1PVkJfV1JJVEVfUjBSTl9PUENPREUgPSAweDAwMDQsCisgICAg
TU9WQl9XUklURV9PRkZHQlJfT1BDT0RFID0gMHhjMDAwLAorICAgIE1PVkJfV1JJVEVfT0ZGUk5f
T1BDT0RFID0gMHg4MDAwLAorICAgIE1PVkJfUkVBRF9STV9PUENPREUgPSAweDYwMDAsCisgICAg
TU9WQl9SRUFEX1JNSU5DX09QQ09ERSA9IDB4NjAwNCwKKyAgICBNT1ZCX1JFQURfUjBSTV9PUENP
REUgPSAweDAwMGMsCisgICAgTU9WQl9SRUFEX09GRkdCUl9PUENPREUgPSAweGM0MDAsCisgICAg
TU9WQl9SRUFEX09GRlJNX09QQ09ERSA9IDB4ODQwMCwKKyAgICBNT1ZMX1dSSVRFX1JOX09QQ09E
RSA9IDB4MjAwMiwKKyAgICBNT1ZMX1dSSVRFX1JOREVDX09QQ09ERSA9IDB4MjAwNiwKKyAgICBN
T1ZMX1dSSVRFX1IwUk5fT1BDT0RFID0gMHgwMDA2LAorICAgIE1PVkxfV1JJVEVfT0ZGR0JSX09Q
Q09ERSA9IDB4YzIwMCwKKyAgICBNT1ZMX1dSSVRFX09GRlJOX09QQ09ERSA9IDB4MTAwMCwKKyAg
ICBNT1ZMX1JFQURfUk1fT1BDT0RFID0gMHg2MDAyLAorICAgIE1PVkxfUkVBRF9STUlOQ19PUENP
REUgPSAweDYwMDYsCisgICAgTU9WTF9SRUFEX1IwUk1fT1BDT0RFID0gMHgwMDBlLAorICAgIE1P
VkxfUkVBRF9PRkZHQlJfT1BDT0RFID0gMHhjNjAwLAorICAgIE1PVkxfUkVBRF9PRkZQQ19PUENP
REUgPSAweGQwMDAsCisgICAgTU9WTF9SRUFEX09GRlJNX09QQ09ERSA9IDB4NTAwMCwKKyAgICBN
T1ZXX1dSSVRFX1JOX09QQ09ERSA9IDB4MjAwMSwKKyAgICBNT1ZXX1JFQURfUk1fT1BDT0RFID0g
MHg2MDAxLAorICAgIE1PVldfUkVBRF9SMFJNX09QQ09ERSA9IDB4MDAwZCwKKyAgICBNT1ZXX1JF
QURfT0ZGUk1fT1BDT0RFID0gMHg4NTAwLAorICAgIE1PVldfUkVBRF9PRkZQQ19PUENPREUgPSAw
eDkwMDAsCisgICAgTU9WQV9SRUFEX09GRlBDX09QQ09ERSA9IDB4YzcwMCwKKyAgICBNT1ZUX09Q
Q09ERSA9IDB4MDAyOSwKKyAgICBNVUxMX09QQ09ERSA9IDB4MDAwNywKKyAgICBETVVMTF9MX09Q
Q09ERSA9IDB4MzAwNSwKKyAgICBTVFNNQUNMX09QQ09ERSA9IDB4MDAxYSwKKyAgICBTVFNNQUNI
X09QQ09ERSA9IDB4MDAwYSwKKyAgICBETVVMU0xfT1BDT0RFID0gMHgzMDBkLAorICAgIE5FR19P
UENPREUgPSAweDYwMGIsCisgICAgTkVHQ19PUENPREUgPSAweDYwMGEsCisgICAgTk9UX09QQ09E
RSA9IDB4NjAwNywKKyAgICBPUl9PUENPREUgPSAweDIwMGIsCisgICAgT1JJTU1fT1BDT0RFID0g
MHhjYjAwLAorICAgIE9SQklNTV9PUENPREUgPSAweGNmMDAsCisgICAgU0VUU19PUENPREUgPSAw
eDAwNTgsCisgICAgU0VUVF9PUENPREUgPSAweDAwMTgsCisgICAgU0hBRF9PUENPREUgPSAweDQw
MGMsCisgICAgU0hBTF9PUENPREUgPSAweDQwMjAsCisgICAgU0hBUl9PUENPREUgPSAweDQwMjEs
CisgICAgU0hMRF9PUENPREUgPSAweDQwMGQsCisgICAgU0hMTF9PUENPREUgPSAweDQwMDAsCisg
ICAgU0hMTDJfT1BDT0RFID0gMHg0MDA4LAorICAgIFNITEw4X09QQ09ERSA9IDB4NDAxOCwKKyAg
ICBTSExMMTZfT1BDT0RFID0gMHg0MDI4LAorICAgIFNITFJfT1BDT0RFID0gMHg0MDAxLAorICAg
IFNITFIyX09QQ09ERSA9IDB4NDAwOSwKKyAgICBTSExSOF9PUENPREUgPSAweDQwMTksCisgICAg
U0hMUjE2X09QQ09ERSA9IDB4NDAyOSwKKyAgICBTVFNQUl9PUENPREUgPSAweDAwMmEsCisgICAg
U1RTTFBSX09QQ09ERSA9IDB4NDAyMiwKKyAgICBGTE9BVF9PUENPREUgPSAweGYwMmQsCisgICAg
U1VCX09QQ09ERSA9IDB4MzAwOCwKKyAgICBTVUJDX09QQ09ERSA9IDB4MzAwYSwKKyAgICBTVUJW
X09QQ09ERSA9IDB4MzAwYiwKKyAgICBUU1RfT1BDT0RFID0gMHgyMDA4LAorICAgIFRTVElNTV9P
UENPREUgPSAweGM4MDAsCisgICAgVFNUQl9PUENPREUgPSAweGNjMDAsCisgICAgRVhUVVdfT1BD
T0RFID0gMHg2MDBkLAorICAgIFhPUl9PUENPREUgPSAweDIwMGEsCisgICAgWE9SSU1NX09QQ09E
RSA9IDB4Y2EwMCwKKyAgICBYT1JCX09QQ09ERSA9IDB4Y2UwMCwKKyAgICBGTU9WU19SRUFEX1JN
X0lOQ19PUENPREUgPSAweGYwMDksCisgICAgRk1PVlNfUkVBRF9STV9PUENPREUgPSAweGYwMDgs
CisgICAgRk1PVlNfUkVBRF9SMFJNX09QQ09ERSA9IDB4ZjAwNiwKKyAgICBGTU9WU19XUklURV9S
Tl9PUENPREUgPSAweGYwMGEsCisgICAgRk1PVlNfV1JJVEVfUk5fREVDX09QQ09ERSA9IDB4ZjAw
YiwKKyAgICBGTU9WU19XUklURV9SMFJOX09QQ09ERSA9IDB4ZjAwNywKKyAgICBGQ05WRFNfRFJN
X0ZQVUxfT1BDT0RFID0gMHhmMGJkLAorICAgIExEU19STV9GUFVMX09QQ09ERSA9IDB4NDA1YSwK
KyAgICBGTERTX0ZSTV9GUFVMX09QQ09ERSA9IDB4ZjAxZCwKKyAgICBTVFNfRlBVTF9STl9PUENP
REUgPSAweDAwNWEsCisgICAgRlNUU19GUFVMX0ZSTl9PUENPREUgPSAweEYwMGQsCisgICAgTERT
RlBTQ1JfT1BDT0RFID0gMHg0MDZhLAorICAgIFNUU0ZQU0NSX09QQ09ERSA9IDB4MDA2YSwKKyAg
ICBMRFNSTUZQVUxfT1BDT0RFID0gMHg0MDVhLAorICAgIEZTVFNGUFVMRlJOX09QQ09ERSA9IDB4
ZjAwZCwKKyAgICBGU1FSVF9PUENPREUgPSAweGYwNmQsCisgICAgRlNDSEdfT1BDT0RFID0gMHhm
M2ZkLAorICAgIENMUlRfT1BDT0RFID0gOCwKK307CisKK25hbWVzcGFjZSBTSDRSZWdpc3RlcnMg
ewordHlwZWRlZiBlbnVtIHsKKyAgICByMCwKKyAgICByMSwKKyAgICByMiwKKyAgICByMywKKyAg
ICByNCwKKyAgICByNSwKKyAgICByNiwKKyAgICByNywKKyAgICByOCwKKyAgICByOSwKKyAgICBy
MTAsCisgICAgcjExLAorICAgIHIxMiwKKyAgICByMTMsCisgICAgcjE0LCBmcCA9IHIxNCwKKyAg
ICByMTUsIHNwID0gcjE1LAorICAgIHBjLAorICAgIHByLAorfSBSZWdpc3RlcklEOworCit0eXBl
ZGVmIGVudW0geworICAgIGZyMCwgZHIwID0gZnIwLAorICAgIGZyMSwKKyAgICBmcjIsIGRyMiA9
IGZyMiwKKyAgICBmcjMsCisgICAgZnI0LCBkcjQgPSBmcjQsCisgICAgZnI1LAorICAgIGZyNiwg
ZHI2ID0gZnI2LAorICAgIGZyNywKKyAgICBmcjgsIGRyOCA9IGZyOCwKKyAgICBmcjksCisgICAg
ZnIxMCwgZHIxMCA9IGZyMTAsCisgICAgZnIxMSwKKyAgICBmcjEyLCBkcjEyID0gZnIxMiwKKyAg
ICBmcjEzLAorICAgIGZyMTQsIGRyMTQgPSBmcjE0LAorICAgIGZyMTUsCit9IEZQUmVnaXN0ZXJJ
RDsKK30KKworaW5saW5lIHVpbnQxNl90IGdldE9wY29kZUdyb3VwMSh1aW50MTZfdCBvcGMsIGlu
dCBybSwgaW50IHJuKQoreworICAgIHJldHVybiAob3BjIHwgKChybSAmIDB4ZikgPDwgOCkgfCAo
KHJuICYgMHhmKSA8PCA0KSk7Cit9CisKK2lubGluZSB1aW50MTZfdCBnZXRPcGNvZGVHcm91cDIo
dWludDE2X3Qgb3BjLCBpbnQgcm0pCit7CisgICAgcmV0dXJuIChvcGMgfCAoKHJtICYgMHhmKSA8
PCA4KSk7Cit9CisKK2lubGluZSB1aW50MTZfdCBnZXRPcGNvZGVHcm91cDModWludDE2X3Qgb3Bj
LCBpbnQgcm0sIGludCBybikKK3sKKyAgICByZXR1cm4gKG9wYyB8ICgocm0gJiAweGYpIDw8IDgp
IHwgKHJuICYgMHhmZikpOworfQorCitpbmxpbmUgdWludDE2X3QgZ2V0T3Bjb2RlR3JvdXA0KHVp
bnQxNl90IG9wYywgaW50IHJtLCBpbnQgcm4sIGludCBvZmZzZXQpCit7CisgICAgcmV0dXJuIChv
cGMgfCAoKHJtICYgMHhmKSA8PCA4KSB8ICgocm4gJiAweGYpIDw8IDQpIHwgKG9mZnNldCAmIDB4
ZikpOworfQorCitpbmxpbmUgdWludDE2X3QgZ2V0T3Bjb2RlR3JvdXA1KHVpbnQxNl90IG9wYywg
aW50IHJtKQoreworICAgIHJldHVybiAob3BjIHwgKHJtICYgMHhmZikpOworfQorCitpbmxpbmUg
dWludDE2X3QgZ2V0T3Bjb2RlR3JvdXA2KHVpbnQxNl90IG9wYywgaW50IHJtKQoreworICAgIHJl
dHVybiAob3BjIHwgKHJtICYgMHhmZmYpKTsKK30KKworaW5saW5lIHVpbnQxNl90IGdldE9wY29k
ZUdyb3VwNyh1aW50MTZfdCBvcGMsIGludCBybSkKK3sKKyAgICByZXR1cm4gKG9wYyB8ICgocm0g
JiAweDcpIDw8IDkpKTsKK30KKworaW5saW5lIHVpbnQxNl90IGdldE9wY29kZUdyb3VwOCh1aW50
MTZfdCBvcGMsIGludCBybSwgaW50IHJuKQoreworICAgIHJldHVybiAob3BjIHwgKChybSAmIDB4
NykgPDwgOSkgfCAoKHJuICYgMHg3KSA8PCA1KSk7Cit9CisKK2lubGluZSB1aW50MTZfdCBnZXRP
cGNvZGVHcm91cDkodWludDE2X3Qgb3BjLCBpbnQgcm0sIGludCBybikKK3sKKyAgICByZXR1cm4g
KG9wYyB8ICgocm0gJiAweGYpIDw8IDgpIHwgKChybiAmIDB4NykgPDwgNSkpOworfQorCitpbmxp
bmUgdWludDE2X3QgZ2V0T3Bjb2RlR3JvdXAxMCh1aW50MTZfdCBvcGMsIGludCBybSwgaW50IHJu
KQoreworICAgIHJldHVybiAob3BjIHwgKChybSAmIDB4NykgPDwgOSkgfCAoKHJuICYgMHhmKSA8
PCA0KSk7Cit9CisKK2lubGluZSB1aW50MTZfdCBnZXRPcGNvZGVHcm91cDExKHVpbnQxNl90IG9w
YywgaW50IHJtLCBpbnQgcm4pCit7CisgICAgcmV0dXJuIChvcGMgfCAoKHJtICYgMHhmKSA8PCA0
KSB8IChybiAmIDB4ZikpOworfQorCitpbmxpbmUgdWludDE2X3QgZ2V0Um4odWludDE2X3QgeCkK
K3sKKyAgICByZXR1cm4gKCh4ICYgMHhmMDApID4+IDgpOworfQorCitpbmxpbmUgdWludDE2X3Qg
Z2V0Um0odWludDE2X3QgeCkKK3sKKyAgICByZXR1cm4gKCh4ICYgMHhmMCkgPj4gNCk7Cit9CisK
K2lubGluZSB1aW50MTZfdCBnZXREaXNwKHVpbnQxNl90IHgpCit7CisgICAgcmV0dXJuICh4ICYg
MHhmKTsKK30KKworaW5saW5lIHVpbnQxNl90IGdldEltbTgodWludDE2X3QgeCkKK3sKKyAgICBy
ZXR1cm4gKHggJiAweGZmKTsKK30KKworaW5saW5lIHVpbnQxNl90IGdldEltbTEyKHVpbnQxNl90
IHgpCit7CisgICAgcmV0dXJuICh4ICYgMHhmZmYpOworfQorCitpbmxpbmUgdWludDE2X3QgZ2V0
RFJuKHVpbnQxNl90IHgpCit7CisgICAgcmV0dXJuICgoeCAmIDB4ZTAwKSA+PiA5KTsKK30KKwor
aW5saW5lIHVpbnQxNl90IGdldERSbSh1aW50MTZfdCB4KQoreworICAgIHJldHVybiAoKHggJiAw
eGUwKSA+PiA1KTsKK30KKworY2xhc3MgU0g0QXNzZW1ibGVyIHsKK3B1YmxpYzoKKyAgICB0eXBl
ZGVmIFNINFJlZ2lzdGVyczo6UmVnaXN0ZXJJRCBSZWdpc3RlcklEOworICAgIHR5cGVkZWYgU0g0
UmVnaXN0ZXJzOjpGUFJlZ2lzdGVySUQgRlBSZWdpc3RlcklEOworICAgIHR5cGVkZWYgQXNzZW1i
bGVyQnVmZmVyV2l0aENvbnN0YW50UG9vbDw1MTIsIDQsIDIsIFNINEFzc2VtYmxlcj4gU0g0QnVm
ZmVyOworICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIHNjcmF0Y2hSZWcxID0gU0g0UmVnaXN0
ZXJzOjpyMzsKKyAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCBzY3JhdGNoUmVnMiA9IFNINFJl
Z2lzdGVyczo6cjExOworICAgIHN0YXRpYyBjb25zdCB1aW50MzJfdCBtYXhJbnN0cnVjdGlvblNp
emUgPSAxNjsKKworICAgIGVudW0geworICAgICAgICBwYWRGb3JBbGlnbjggPSAweDAwLAorICAg
ICAgICBwYWRGb3JBbGlnbjE2ID0gMHgwMDA5LAorICAgICAgICBwYWRGb3JBbGlnbjMyID0gMHgw
MDA5MDAwOSwKKyAgICB9OworCisgICAgU0g0QXNzZW1ibGVyKCkKKyAgICB7CisgICAgICAgIG1f
Y2xhaW1zY3JhdGNoUmVnID0gMHgwOworICAgIH0KKworICAgIC8vIFNINCBjb25kaXRpb24gY29k
ZXMKKyAgICB0eXBlZGVmIGVudW0geworICAgICAgICBFUSA9IDB4MCwgLy8gRXF1YWwKKyAgICAg
ICAgTkUgPSAweDEsIC8vIE5vdCBFcXVhbAorICAgICAgICBIUyA9IDB4MiwgLy8gVW5zaWdlbmQg
R3JlYXRlciBUaGFuIGVxdWFsCisgICAgICAgIEhJID0gMHgzLCAvLyBVbnNpZ2VuZCBHcmVhdGVy
IFRoYW4KKyAgICAgICAgTFMgPSAweDQsIC8vIFVuc2lnZW5kIExvd2VyIG9yIFNhbWUKKyAgICAg
ICAgTEkgPSAweDUsIC8vIFVuc2lnZW5kIExvd2VyCisgICAgICAgIEdFID0gMHg2LCAvLyBHcmVh
dGVyIG9yIEVxdWFsCisgICAgICAgIExUID0gMHg3LCAvLyBMZXNzIFRoYW4KKyAgICAgICAgR1Qg
PSAweDgsIC8vIEdyZWF0ZXIgVGhhbgorICAgICAgICBMRSA9IDB4OSwgLy8gTGVzcyBvciBFcXVh
bAorICAgICAgICBPRiA9IDB4YSwgLy8gT3ZlckZsb3cKKyAgICAgICAgU0kgPSAweGIsIC8vIFNp
Z25lZAorICAgICAgICBFUVU9IDB4YywgLy8gRXF1YWwgb3IgdW5vcmRlcmVkKE5hTikKKyAgICAg
ICAgTkVVPSAweGQsCisgICAgICAgIEdUVT0gMHhlLAorICAgICAgICBHRVU9IDB4ZiwKKyAgICAg
ICAgTFRVPSAweDEwLAorICAgICAgICBMRVU9IDB4MTEsCisgICAgfSBDb25kaXRpb247CisKKyAg
ICAvLyBPcGFxdWUgbGFiZWwgdHlwZXMKK3B1YmxpYzoKKyAgICBjbGFzcyBKbXBTcmMgeworICAg
ICAgICBmcmllbmQgY2xhc3MgU0g0QXNzZW1ibGVyOworICAgIHB1YmxpYzoKKyAgICAgICAgSm1w
U3JjKCkKKyAgICAgICAgICAgIDogbV9vZmZzZXQoLTEpCisgICAgICAgIHsKKyAgICAgICAgfQor
CisgICAgcHJpdmF0ZToKKyAgICAgICAgSm1wU3JjKGludCBvZmZzZXQpCisgICAgICAgICAgICA6
IG1fb2Zmc2V0KG9mZnNldCkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgaW50IG1f
b2Zmc2V0OworICAgIH07CisKKyAgICBjbGFzcyBKbXBEc3QgeworICAgICAgICBmcmllbmQgY2xh
c3MgU0g0QXNzZW1ibGVyOworICAgIHB1YmxpYzoKKyAgICAgICAgSm1wRHN0KCkKKyAgICAgICAg
ICAgIDogbV9vZmZzZXQoLTEpCisgICAgICAgICAgICAsIG1fdXNlZChmYWxzZSkKKyAgICAgICAg
eworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBpc1VzZWQoKSBjb25zdCB7IHJldHVybiBtX3Vz
ZWQ7IH0KKyAgICAgICAgYm9vbCBpc1NldCgpIGNvbnN0IHsgcmV0dXJuIChtX29mZnNldCAhPSAt
MSk7IH0KKyAgICAgICAgdm9pZCB1c2VkKCkgeyBtX3VzZWQgPSB0cnVlOyB9CisKKyAgICBwcml2
YXRlOgorICAgICAgICBKbXBEc3QoaW50IG9mZnNldCkKKyAgICAgICAgICAgIDogbV9vZmZzZXQo
b2Zmc2V0KQorICAgICAgICAgICAgLCBtX3VzZWQoZmFsc2UpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIEFTU0VSVChtX29mZnNldCA9PSBvZmZzZXQpOworICAgICAgICB9CisKKyAgICAgICAgaW50
IG1fb2Zmc2V0IDogMzE7CisgICAgICAgIGludCBtX3VzZWQgOiAxOworICAgIH07CisKKyAgICBi
b29sIGlzSW1tZWRpYXRlKGludCBjb25zdGFudCkKKyAgICB7CisgICAgICAgIHJldHVybiAoKGNv
bnN0YW50IDw9IDEyNykgJiYgKGNvbnN0YW50ID49IC0xMjgpKTsKKyAgICB9CisKKyAgICBSZWdp
c3RlcklEIGNsYWltU2NyYXRjaCgpCisgICAgeworICAgICAgICBBU1NFUlQoKG1fY2xhaW1zY3Jh
dGNoUmVnICE9IDB4MykpOworCisgICAgICAgIGlmICghKG1fY2xhaW1zY3JhdGNoUmVnICYgMHgx
KSkgeworICAgICAgICAgICAgbV9jbGFpbXNjcmF0Y2hSZWcgPSAobV9jbGFpbXNjcmF0Y2hSZWcg
fCAweDEpOworICAgICAgICAgICAgcmV0dXJuIHNjcmF0Y2hSZWcxOworICAgICAgICB9CisKKyAg
ICAgICAgbV9jbGFpbXNjcmF0Y2hSZWcgPSAobV9jbGFpbXNjcmF0Y2hSZWcgfCAweDIpOworICAg
ICAgICByZXR1cm4gc2NyYXRjaFJlZzI7CisgICAgfQorCisgICAgdm9pZCByZWxlYXNlU2NyYXRj
aChSZWdpc3RlcklEIHNjcmF0Y2hSKQorICAgIHsKKyAgICAgICAgaWYgKHNjcmF0Y2hSID09IHNj
cmF0Y2hSZWcxKQorICAgICAgICAgICAgbV9jbGFpbXNjcmF0Y2hSZWcgPSAobV9jbGFpbXNjcmF0
Y2hSZWcgJiAweDIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2NsYWltc2NyYXRjaFJl
ZyA9IChtX2NsYWltc2NyYXRjaFJlZyAmIDB4MSk7CisgICAgfQorCisgICAgLy8gU3RhY2sgb3Bl
cmF0aW9ucworCisgICAgdm9pZCBwdXNoUmVnKFJlZ2lzdGVySUQgcmVnKQorICAgIHsKKyAgICAg
ICAgaWYgKHJlZyA9PSBTSDRSZWdpc3RlcnM6OnByKSB7CisgICAgICAgICAgICBvbmVTaG9ydE9w
KGdldE9wY29kZUdyb3VwMihTVFNMUFJfT1BDT0RFLCBTSDRSZWdpc3RlcnM6OnNwKSk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBvbmVTaG9ydE9wKGdldE9wY29k
ZUdyb3VwMShNT1ZMX1dSSVRFX1JOREVDX09QQ09ERSwgU0g0UmVnaXN0ZXJzOjpzcCwgcmVnKSk7
CisgICAgfQorCisgICAgdm9pZCBwb3BSZWcoUmVnaXN0ZXJJRCByZWcpCisgICAgeworICAgICAg
ICBpZiAocmVnID09IFNINFJlZ2lzdGVyczo6cHIpIHsKKyAgICAgICAgICAgIG9uZVNob3J0T3Ao
Z2V0T3Bjb2RlR3JvdXAyKExEU0xQUl9PUENPREUsIFNINFJlZ2lzdGVyczo6c3ApKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIG9uZVNob3J0T3AoZ2V0T3Bjb2Rl
R3JvdXAxKE1PVkxfUkVBRF9STUlOQ19PUENPREUsIHJlZywgU0g0UmVnaXN0ZXJzOjpzcCkpOwor
ICAgIH0KKworICAgIHZvaWQgbW92dChSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIHVp
bnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3VwMihNT1ZUX09QQ09ERSwgZHN0KTsKKyAgICAgICAg
b25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAgIC8vIEFyaXRobWV0aWMgb3BlcmF0aW9ucwor
CisgICAgdm9pZCBhZGRsUmVnUmVnKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCkKKyAg
ICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3VwMShBRERfT1BDT0RFLCBk
c3QsIHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lkIGFk
ZGNsUmVnUmVnKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAg
IHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3VwMShBRERDX09QQ09ERSwgZHN0LCBzcmMpOwor
ICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCBhZGR2bFJlZ1JlZyhS
ZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICB1aW50MTZfdCBv
cGMgPSBnZXRPcGNvZGVHcm91cDEoQUREVl9PUENPREUsIGRzdCwgc3JjKTsKKyAgICAgICAgb25l
U2hvcnRPcChvcGMpOworICAgIH0KKworICAgIHZvaWQgYWRkbEltbThyKGludCBpbW04LCBSZWdp
c3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIEFTU0VSVCgoaW1tOCA8PSAxMjcpICYmIChpbW04
ID49IC0xMjgpKTsKKworICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDMoQURE
SU1NX09QQ09ERSwgZHN0LCBpbW04KTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0K
KworICAgIHZvaWQgYW5kbFJlZ1JlZyhSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpCisg
ICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDEoQU5EX09QQ09ERSwg
ZHN0LCBzcmMpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCBh
bmRsSW1tOHIoaW50IGltbTgsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgQVNTRVJU
KChpbW04IDw9IDI1NSkgJiYgKGltbTggPj0gMCkpOworICAgICAgICBBU1NFUlQoZHN0ID09IFNI
NFJlZ2lzdGVyczo6cjApOworCisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3Vw
NShBTkRJTU1fT1BDT0RFLCBpbW04KTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0K
KworICAgIHZvaWQgZGl2MWxSZWdSZWcoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQor
ICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXAxKERJVjFfT1BDT0RF
LCBkc3QsIHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lk
IGRpdjBsUmVnUmVnKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAg
ICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3VwMShESVYwX09QQ09ERSwgZHN0LCBzcmMp
OworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCBub3RsUmVnKFJl
Z2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9w
YyA9IGdldE9wY29kZUdyb3VwMShOT1RfT1BDT0RFLCBkc3QsIHNyYyk7CisgICAgICAgIG9uZVNo
b3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lkIG9ybFJlZ1JlZyhSZWdpc3RlcklEIHNyYywg
UmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVH
cm91cDEoT1JfT1BDT0RFLCBkc3QsIHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAg
ICB9CisKKyAgICB2b2lkIG9ybEltbThyKGludCBpbW04LCBSZWdpc3RlcklEIGRzdCkKKyAgICB7
CisgICAgICAgIEFTU0VSVCgoaW1tOCA8PSAyNTUpICYmIChpbW04ID49IDApKTsKKyAgICAgICAg
QVNTRVJUKGRzdCA9PSBTSDRSZWdpc3RlcnM6OnIwKTsKKworICAgICAgICB1aW50MTZfdCBvcGMg
PSBnZXRPcGNvZGVHcm91cDUoT1JJTU1fT1BDT0RFLCBpbW04KTsKKyAgICAgICAgb25lU2hvcnRP
cChvcGMpOworICAgIH0KKworICAgIHZvaWQgc3VibFJlZ1JlZyhSZWdpc3RlcklEIHNyYywgUmVn
aXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3Jv
dXAxKFNVQl9PUENPREUsIGRzdCwgc3JjKTsKKyAgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAg
ICB9CisKKyAgICB2b2lkIHN1YnZsUmVnUmVnKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRz
dCkKKyAgICB7CisgICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDEoU1VCVl9P
UENPREUsIGRzdCwgc3JjKTsKKyAgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAg
ICB2b2lkIHhvcmxSZWdSZWcoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsK
KyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXAxKFhPUl9PUENPREUsIGRzdCwg
c3JjKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAgIHZvaWQgeG9ybElt
bThyKGludCBpbW04LCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIEFTU0VSVCgoaW1t
OCA8PSAyNTUpICYmIChpbW04ID49IDApKTsKKyAgICAgICAgQVNTRVJUKGRzdCA9PSBTSDRSZWdp
c3RlcnM6OnIwKTsKKworICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDUoWE9S
SU1NX09QQ09ERSwgaW1tOCk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAg
ICB2b2lkIHNobGxJbW04cihpbnQgaW1tLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAg
IHN3aXRjaCAoaW1tKSB7CisgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgIG9uZVNob3J0T3Ao
Z2V0T3Bjb2RlR3JvdXAyKFNITExfT1BDT0RFLCBkc3QpKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICBvbmVTaG9ydE9wKGdldE9wY29kZUdyb3VwMihT
SExMMl9PUENPREUsIGRzdCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgODoK
KyAgICAgICAgICAgIG9uZVNob3J0T3AoZ2V0T3Bjb2RlR3JvdXAyKFNITEw4X09QQ09ERSwgZHN0
KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAxNjoKKyAgICAgICAgICAgIG9u
ZVNob3J0T3AoZ2V0T3Bjb2RlR3JvdXAyKFNITEwxNl9PUENPREUsIGRzdCkpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgbmVnKFJlZ2lzdGVySUQgZHN0LCBS
ZWdpc3RlcklEIHNyYykKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdy
b3VwMShORUdfT1BDT0RFLCBkc3QsIHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAg
ICB9CisKKyAgICB2b2lkIHNobGxSZWdSZWcoUmVnaXN0ZXJJRCBkc3QsIFJlZ2lzdGVySUQgclNo
aWZ0KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXAxKFNITERf
T1BDT0RFLCBkc3QsIHJTaGlmdCk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisK
KyAgICB2b2lkIHNobHJSZWdSZWcoUmVnaXN0ZXJJRCBkc3QsIFJlZ2lzdGVySUQgclNoaWZ0KQor
ICAgIHsKKyAgICAgICAgbmVnKHJTaGlmdCwgclNoaWZ0KTsKKyAgICAgICAgc2hsbFJlZ1JlZyhk
c3QsIHJTaGlmdCk7CisgICAgfQorCisgICAgdm9pZCBzaGFyUmVnUmVnKFJlZ2lzdGVySUQgZHN0
LCBSZWdpc3RlcklEIHJTaGlmdCkKKyAgICB7CisgICAgICAgIG5lZyhyU2hpZnQsIHJTaGlmdCk7
CisgICAgICAgIHNoYVJlZ1JlZyhkc3QsIHJTaGlmdCk7CisgICAgfQorCisgICAgdm9pZCBzaGFS
ZWdSZWcoUmVnaXN0ZXJJRCBkc3QsIFJlZ2lzdGVySUQgclNoaWZ0KQorICAgIHsKKyAgICAgICAg
dWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXAxKFNIQURfT1BDT0RFLCBkc3QsIHJTaGlmdCk7
CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lkIHNobHJJbW04cihp
bnQgaW1tLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoaW1tKSB7Cisg
ICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgIG9uZVNob3J0T3AoZ2V0T3Bjb2RlR3JvdXAyKFNI
TFJfT1BDT0RFLCBkc3QpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDI6Cisg
ICAgICAgICAgICBvbmVTaG9ydE9wKGdldE9wY29kZUdyb3VwMihTSExSMl9PUENPREUsIGRzdCkp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgODoKKyAgICAgICAgICAgIG9uZVNo
b3J0T3AoZ2V0T3Bjb2RlR3JvdXAyKFNITFI4X09QQ09ERSwgZHN0KSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSAxNjoKKyAgICAgICAgICAgIG9uZVNob3J0T3AoZ2V0T3Bjb2Rl
R3JvdXAyKFNITFIxNl9PUENPREUsIGRzdCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIHZvaWQgaW11bGxSZWdSZWcoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQg
ZHN0KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXAxKE1VTExf
T1BDT0RFLCBkc3QsIHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAg
ICB2b2lkIGRtdWxsUmVnUmVnKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7
CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3VwMShETVVMTF9MX09QQ09ERSwg
ZHN0LCBzcmMpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCBk
bXVsc2xSZWdSZWcoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAg
ICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXAxKERNVUxTTF9PUENPREUsIGRzdCwgc3Jj
KTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAgIHZvaWQgc3RzbWFjbChS
ZWdpc3RlcklEIHJlZykKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdy
b3VwMihTVFNNQUNMX09QQ09ERSwgcmVnKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAg
IH0KKworICAgIHZvaWQgc3RzbWFjaChSZWdpc3RlcklEIHJlZykKKyAgICB7CisgICAgICAgIHVp
bnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3VwMihTVFNNQUNIX09QQ09ERSwgcmVnKTsKKyAgICAg
ICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAgIC8vIENvbXBhcmlzb25zCisKKyAgICB2
b2lkIGNtcGxSZWdSZWcoUmVnaXN0ZXJJRCBsZWZ0LCBSZWdpc3RlcklEIHJpZ2h0LCBDb25kaXRp
b24gY29uZCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoY29uZCkgeworICAgICAgICBjYXNlIE5F
OgorICAgICAgICAgICAgb25lU2hvcnRPcChnZXRPcGNvZGVHcm91cDEoQ01QRVFfT1BDT0RFLCBy
aWdodCwgbGVmdCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR1Q6CisgICAg
ICAgICAgICBvbmVTaG9ydE9wKGdldE9wY29kZUdyb3VwMShDTVBHVF9PUENPREUsIHJpZ2h0LCBs
ZWZ0KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFUToKKyAgICAgICAgICAg
IG9uZVNob3J0T3AoZ2V0T3Bjb2RlR3JvdXAxKENNUEVRX09QQ09ERSwgcmlnaHQsIGxlZnQpKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEdFOgorICAgICAgICAgICAgb25lU2hv
cnRPcChnZXRPcGNvZGVHcm91cDEoQ01QR0VfT1BDT0RFLCByaWdodCwgbGVmdCkpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSFM6CisgICAgICAgICAgICBvbmVTaG9ydE9wKGdl
dE9wY29kZUdyb3VwMShDTVBIU19PUENPREUsIHJpZ2h0LCBsZWZ0KSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBISToKKyAgICAgICAgICAgIG9uZVNob3J0T3AoZ2V0T3Bjb2Rl
R3JvdXAxKENNUEhJX09QQ09ERSwgcmlnaHQsIGxlZnQpKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIExJOgorICAgICAgICAgICAgb25lU2hvcnRPcChnZXRPcGNvZGVHcm91cDEo
Q01QSElfT1BDT0RFLCBsZWZ0LCByaWdodCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgTFM6CisgICAgICAgICAgICBvbmVTaG9ydE9wKGdldE9wY29kZUdyb3VwMShDTVBIU19P
UENPREUsIGxlZnQsIHJpZ2h0KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBM
RToKKyAgICAgICAgICAgIG9uZVNob3J0T3AoZ2V0T3Bjb2RlR3JvdXAxKENNUEdFX09QQ09ERSwg
bGVmdCwgcmlnaHQpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIExUOgorICAg
ICAgICAgICAgb25lU2hvcnRPcChnZXRPcGNvZGVHcm91cDEoQ01QR1RfT1BDT0RFLCBsZWZ0LCBy
aWdodCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgY21w
cGwoUmVnaXN0ZXJJRCByZWcpCisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNv
ZGVHcm91cDIoQ01QUExfT1BDT0RFLCByZWcpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7Cisg
ICAgfQorCisgICAgdm9pZCBjbXBweihSZWdpc3RlcklEIHJlZykKKyAgICB7CisgICAgICAgIHVp
bnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3VwMihDTVBQWl9PUENPREUsIHJlZyk7CisgICAgICAg
IG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lkIGNtcEVxSW1tUjAoaW50IGltbSwg
UmVnaXN0ZXJJRCBkc3QsIENvbmRpdGlvbiBjb25kKQorICAgIHsKKyAgICAgICAgdWludDE2X3Qg
b3BjID0gZ2V0T3Bjb2RlR3JvdXA1KENNUEVRSU1NX09QQ09ERSwgaW1tKTsKKyAgICAgICAgb25l
U2hvcnRPcChvcGMpOworICAgIH0KKworICAgIHZvaWQgdGVzdGxSZWdSZWcoUmVnaXN0ZXJJRCBz
cmMsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bj
b2RlR3JvdXAxKFRTVF9PUENPREUsIGRzdCwgc3JjKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMp
OworICAgIH0KKworICAgIHZvaWQgdGVzdGxJbW04cihpbnQgaW1tLCBSZWdpc3RlcklEIGRzdCkK
KyAgICB7CisgICAgICAgIEFTU0VSVCgoZHN0ID09IFNINFJlZ2lzdGVyczo6cjApICYmIChpbW0g
PD0gMjU1KSAmJiAoaW1tID49IDApKTsKKworICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNv
ZGVHcm91cDUoVFNUSU1NX09QQ09ERSwgaW1tKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOwor
ICAgIH0KKworICAgIHZvaWQgbm9wKCkKKyAgICB7CisgICAgICAgIG9uZVNob3J0T3AoTk9QX09Q
Q09ERSwgZmFsc2UpOworICAgIH0KKworICAgIHZvaWQgc2V0dCgpCisgICAgeworICAgICAgICBv
bmVTaG9ydE9wKFNFVFRfT1BDT0RFKTsKKyAgICB9CisKKyAgICB2b2lkIGNscnQoKQorICAgIHsK
KyAgICAgICAgb25lU2hvcnRPcChDTFJUX09QQ09ERSk7CisgICAgfQorCisgICAgdm9pZCBmc2No
ZygpCisgICAgeworICAgICAgICBvbmVTaG9ydE9wKEZTQ0hHX09QQ09ERSk7CisgICAgfQorCisg
ICAgdm9pZCBia3B0KCkKKyAgICB7CisgICAgICAgIG9uZVNob3J0T3AoQlJLX09QQ09ERSwgZmFs
c2UpOworICAgIH0KKworICAgIHZvaWQgYnJhbmNoKHVpbnQxNl90IG9wYywgaW50IGxhYmVsKQor
ICAgIHsKKyAgICAgICAgc3dpdGNoIChvcGMpIHsKKyAgICAgICAgY2FzZSBCVF9PUENPREU6Cisg
ICAgICAgICAgICBBU1NFUlQoKGxhYmVsIDw9IDEyNykgJiYgKGxhYmVsID49IC0xMjgpKTsKKyAg
ICAgICAgICAgIG9uZVNob3J0T3AoZ2V0T3Bjb2RlR3JvdXA1KEJUX09QQ09ERSwgbGFiZWwpKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEJSQV9PUENPREU6CisgICAgICAgICAg
ICBBU1NFUlQoKGxhYmVsIDw9IDIwNDcpICYmIChsYWJlbCA+PSAtMjA0OCkpOworICAgICAgICAg
ICAgb25lU2hvcnRPcChnZXRPcGNvZGVHcm91cDYoQlJBX09QQ09ERSwgbGFiZWwpKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEJGX09QQ09ERToKKyAgICAgICAgICAgIEFTU0VS
VCgobGFiZWwgPD0gMTI3KSAmJiAobGFiZWwgPj0gLTEyOCkpOworICAgICAgICAgICAgb25lU2hv
cnRPcChnZXRPcGNvZGVHcm91cDUoQkZfT1BDT0RFLCBsYWJlbCkpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgYnJhbmNoKHVpbnQxNl90IG9wYywgUmVnaXN0
ZXJJRCByZWcpCisgICAgeworICAgICAgICBzd2l0Y2ggKG9wYykgeworICAgICAgICBjYXNlIEJS
QUZfT1BDT0RFOgorICAgICAgICAgICAgb25lU2hvcnRPcChnZXRPcGNvZGVHcm91cDIoQlJBRl9P
UENPREUsIHJlZykpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSk1QX09QQ09E
RToKKyAgICAgICAgICAgIG9uZVNob3J0T3AoZ2V0T3Bjb2RlR3JvdXAyKEpNUF9PUENPREUsIHJl
ZykpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSlNSX09QQ09ERToKKyAgICAg
ICAgICAgIG9uZVNob3J0T3AoZ2V0T3Bjb2RlR3JvdXAyKEpTUl9PUENPREUsIHJlZykpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQlNSRl9PUENPREU6CisgICAgICAgICAgICBv
bmVTaG9ydE9wKGdldE9wY29kZUdyb3VwMihCU1JGX09QQ09ERSwgcmVnKSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBsZHNwcihSZWdpc3RlcklEIHJlZykK
KyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3VwMihMRFNQUl9PUENP
REUsIHJlZyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lkIHN0
c3ByKFJlZ2lzdGVySUQgcmVnKQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bj
b2RlR3JvdXAyKFNUU1BSX09QQ09ERSwgcmVnKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOwor
ICAgIH0KKworICAgIHZvaWQgZXh0dXcoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQor
ICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXAxKEVYVFVXX09QQ09E
RSwgZHN0LCBzcmMpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgLy8g
ZmxvYXQgb3BlcmF0aW9ucworCisgICAgdm9pZCBsZHNybWZwdWwoUmVnaXN0ZXJJRCBzcmMpCisg
ICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDIoTERTX1JNX0ZQVUxf
T1BDT0RFLCBzcmMpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgdm9p
ZCBmbmVnKEZQUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBn
ZXRPcGNvZGVHcm91cDIoRk5FR19PUENPREUsIGRzdCk7CisgICAgICAgIG9uZVNob3J0T3Aob3Bj
LCB0cnVlLCBmYWxzZSk7CisgICAgfQorCisgICAgdm9pZCBmc3FydChGUFJlZ2lzdGVySUQgZHN0
KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXAyKEZTUVJUX09Q
Q09ERSwgZHN0KTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMsIHRydWUsIGZhbHNlKTsKKyAgICB9
CisKKyAgICB2b2lkIHN0c2ZwdWxSZWcoUmVnaXN0ZXJJRCBzcmMpCisgICAgeworICAgICAgICB1
aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDIoU1RTX0ZQVUxfUk5fT1BDT0RFLCBzcmMpOwor
ICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCBmbG9hdGZwdWxmcm4o
UmVnaXN0ZXJJRCBzcmMpCisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVH
cm91cDIoRkxPQVRfT1BDT0RFLCBzcmMpOworICAgICAgICBvbmVTaG9ydE9wKG9wYywgdHJ1ZSwg
ZmFsc2UpOworICAgIH0KKworICAgIHZvaWQgZm11bGwoRlBSZWdpc3RlcklEIHNyYywgRlBSZWdp
c3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3Vw
MShGTVVMX09QQ09ERSwgZHN0LCBzcmMpOworICAgICAgICBvbmVTaG9ydE9wKG9wYywgdHJ1ZSwg
ZmFsc2UpOworICAgIH0KKworICAgIHZvaWQgZm1vdnNSZWFkcm0oUmVnaXN0ZXJJRCBzcmMsIEZQ
UmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVH
cm91cDEoRk1PVlNfUkVBRF9STV9PUENPREUsIGRzdCwgc3JjKTsKKyAgICAgICAgb25lU2hvcnRP
cChvcGMsIHRydWUsIGZhbHNlKTsKKyAgICB9CisKKyAgICB2b2lkIGZtb3ZzV3JpdGVybShGUFJl
Z2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9w
YyA9IGdldE9wY29kZUdyb3VwMShGTU9WU19XUklURV9STl9PUENPREUsIGRzdCwgc3JjKTsKKyAg
ICAgICAgb25lU2hvcnRPcChvcGMsIHRydWUsIGZhbHNlKTsKKyAgICB9CisKKyAgICB2b2lkIGZt
b3ZzV3JpdGVyMHIoRlBSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAg
ICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDEoRk1PVlNfV1JJVEVfUjBSTl9PUENP
REUsIGRzdCwgc3JjKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMsIHRydWUsIGZhbHNlKTsKKyAg
ICB9CisKKyAgICB2b2lkIGZtb3ZzUmVhZHIwcihSZWdpc3RlcklEIHNyYywgRlBSZWdpc3RlcklE
IGRzdCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3VwMShGTU9W
U19SRUFEX1IwUk1fT1BDT0RFLCBkc3QsIHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjLCB0
cnVlLCBmYWxzZSk7CisgICAgfQorCisgICAgdm9pZCBmbW92c1JlYWRybWluYyhSZWdpc3RlcklE
IHNyYywgRlBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdl
dE9wY29kZUdyb3VwMShGTU9WU19SRUFEX1JNX0lOQ19PUENPREUsIGRzdCwgc3JjKTsKKyAgICAg
ICAgb25lU2hvcnRPcChvcGMsIHRydWUsIGZhbHNlKTsKKyAgICB9CisKKyAgICB2b2lkIGZtb3Zz
V3JpdGVybmRlYyhGUFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAg
ICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3VwMShGTU9WU19XUklURV9STl9ERUNfT1BD
T0RFLCBkc3QsIHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjLCB0cnVlLCBmYWxzZSk7Cisg
ICAgfQorCisgICAgdm9pZCBmdHJjUmVnZnB1bChGUFJlZ2lzdGVySUQgc3JjKQorICAgIHsKKyAg
ICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXAyKEZUUkNfT1BDT0RFLCBzcmMpOwor
ICAgICAgICBvbmVTaG9ydE9wKG9wYywgdHJ1ZSwgZmFsc2UpOworICAgIH0KKworICAgIHZvaWQg
Zmxkc2ZwdWwoUmVnaXN0ZXJJRCBzcmMpCisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBn
ZXRPcGNvZGVHcm91cDIoRkxEU19GUk1fRlBVTF9PUENPREUsIHNyYyk7CisgICAgICAgIG9uZVNo
b3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lkIGZzdHNmcHVsKFJlZ2lzdGVySUQgc3JjKQor
ICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXAyKEZTVFNfRlBVTF9G
Uk5fT1BDT0RFLCBzcmMpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAg
dm9pZCBsZHNmcHNjcihSZWdpc3RlcklEIHJlZykKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9w
YyA9IGdldE9wY29kZUdyb3VwMihMRFNGUFNDUl9PUENPREUsIHJlZyk7CisgICAgICAgIG9uZVNo
b3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lkIHN0c2Zwc2NyKFJlZ2lzdGVySUQgcmVnKQor
ICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXAyKFNUU0ZQU0NSX09Q
Q09ERSwgcmVnKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAgIC8vIGRv
dWJsZSBvcGVyYXRpb25zCisKKyAgICB2b2lkIGRjbnZkcyhGUFJlZ2lzdGVySUQgc3JjKQorICAg
IHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXA3KEZDTlZEU19EUk1fRlBV
TF9PUENPREUsIHNyYyA+PiAxKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKwor
ICAgIHZvaWQgZGNtcHBlcShGUFJlZ2lzdGVySUQgc3JjLCBGUFJlZ2lzdGVySUQgZHN0KQorICAg
IHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXA4KEZDTVBFUV9PUENPREUs
IGRzdCA+PiAxLCBzcmMgPj4gMSk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisK
KyAgICB2b2lkIGRjbXBwZ3QoRlBSZWdpc3RlcklEIHNyYywgRlBSZWdpc3RlcklEIGRzdCkKKyAg
ICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3VwOChGQ01QR1RfT1BDT0RF
LCBkc3QgPj4gMSwgc3JjID4+IDEpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQor
CisgICAgdm9pZCBkbXVsUmVnUmVnKEZQUmVnaXN0ZXJJRCBzcmMsIEZQUmVnaXN0ZXJJRCBkc3Qp
CisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDgoRk1VTF9PUENP
REUsIGRzdCA+PiAxLCBzcmMgPj4gMSk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9
CisKKyAgICB2b2lkIGRzdWJSZWdSZWcoRlBSZWdpc3RlcklEIHNyYywgRlBSZWdpc3RlcklEIGRz
dCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3VwOChGU1VCX09Q
Q09ERSwgZHN0ID4+IDEsIHNyYyA+PiAxKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAg
IH0KKworICAgIHZvaWQgZGFkZFJlZ1JlZyhGUFJlZ2lzdGVySUQgc3JjLCBGUFJlZ2lzdGVySUQg
ZHN0KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXA4KEZBRERf
T1BDT0RFLCBkc3QgPj4gMSwgc3JjID4+IDEpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7Cisg
ICAgfQorCisgICAgdm9pZCBkbW92UmVnUmVnKEZQUmVnaXN0ZXJJRCBzcmMsIEZQUmVnaXN0ZXJJ
RCBkc3QpCisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDgoRk1P
Vl9PUENPREUsIGRzdCA+PiAxLCBzcmMgPj4gMSk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsK
KyAgICB9CisKKyAgICB2b2lkIGRkaXZSZWdSZWcoRlBSZWdpc3RlcklEIHNyYywgRlBSZWdpc3Rl
cklEIGRzdCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3VwOChG
RElWX09QQ09ERSwgZHN0ID4+IDEsIHNyYyA+PiAxKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMp
OworICAgIH0KKworICAgIHZvaWQgZHNxcnQoRlBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAg
ICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3VwNyhGU1FSVF9PUENPREUsIGRzdCA+PiAx
KTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAgIHZvaWQgZG5lZyhGUFJl
Z2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3Jv
dXA3KEZORUdfT1BDT0RFLCBkc3QgPj4gMSk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAg
ICB9CisKKyAgICB2b2lkIGZtb3ZSZWFkcm0oUmVnaXN0ZXJJRCBzcmMsIEZQUmVnaXN0ZXJJRCBk
c3QpCisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDEwKEZNT1ZT
X1JFQURfUk1fT1BDT0RFLCBkc3QgPj4gMSwgc3JjKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMp
OworICAgIH0KKworICAgIHZvaWQgZm1vdldyaXRlcm0oRlBSZWdpc3RlcklEIHNyYywgUmVnaXN0
ZXJJRCBkc3QpCisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDko
Rk1PVlNfV1JJVEVfUk5fT1BDT0RFLCBkc3QsIHNyYyA+PiAxKTsKKyAgICAgICAgb25lU2hvcnRP
cChvcGMpOworICAgIH0KKworICAgIHZvaWQgZm1vdldyaXRlcjByKEZQUmVnaXN0ZXJJRCBzcmMs
IFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2Rl
R3JvdXA5KEZNT1ZTX1dSSVRFX1IwUk5fT1BDT0RFLCBkc3QsIHNyYyA+PiAxKTsKKyAgICAgICAg
b25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAgIHZvaWQgZm1vdlJlYWRyMHIoUmVnaXN0ZXJJ
RCBzcmMsIEZQUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBn
ZXRPcGNvZGVHcm91cDEwKEZNT1ZTX1JFQURfUjBSTV9PUENPREUsIGRzdCA+PiAxLCBzcmMpOwor
ICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCBmbW92UmVhZHJtaW5j
KFJlZ2lzdGVySUQgc3JjLCBGUFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgdWludDE2
X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXAxMChGTU9WU19SRUFEX1JNX0lOQ19PUENPREUsIGRzdCA+
PiAxLCBzcmMpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCBm
bW92V3JpdGVybmRlYyhGUFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7Cisg
ICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3VwOShGTU9WU19XUklURV9STl9ERUNf
T1BDT0RFLCBkc3QsIHNyYyA+PiAxKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0K
KworICAgIHZvaWQgZmxvYXRmcHVsRHJlZyhGUFJlZ2lzdGVySUQgc3JjKQorICAgIHsKKyAgICAg
ICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXA3KEZMT0FUX09QQ09ERSwgc3JjID4+IDEp
OworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCBmdHJjZHJtZnB1
bChGUFJlZ2lzdGVySUQgc3JjKQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bj
b2RlR3JvdXA3KEZUUkNfT1BDT0RFLCBzcmMgPj4gMSk7CisgICAgICAgIG9uZVNob3J0T3Aob3Bj
KTsKKyAgICB9CisKKyAgICAvLyBWYXJpb3VzIG1vdmUgb3BzCisKKyAgICB2b2lkIG1vdkltbTgo
aW50IGltbTgsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKChpbW04IDw9
IDEyNykgJiYgKGltbTggPj0gLTEyOCkpOworCisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9w
Y29kZUdyb3VwMyhNT1ZJTU1fT1BDT0RFLCBkc3QsIGltbTgpOworICAgICAgICBvbmVTaG9ydE9w
KG9wYyk7CisgICAgfQorCisgICAgdm9pZCBtb3ZsUmVnUmVnKFJlZ2lzdGVySUQgc3JjLCBSZWdp
c3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3Vw
MShNT1ZfT1BDT0RFLCBkc3QsIHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9
CisKKyAgICB2b2lkIG1vdndSZWdNZW0oUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQor
ICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXAxKE1PVldfV1JJVEVf
Uk5fT1BDT0RFLCBkc3QsIHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisK
KyAgICB2b2lkIG1vdndNZW1SZWcoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQorICAg
IHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXAxKE1PVldfUkVBRF9STV9P
UENPREUsIGRzdCwgc3JjKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAg
IHZvaWQgbW92d1BDUmVnKGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBk
c3QpCisgICAgeworICAgICAgICBBU1NFUlQoYmFzZSA9PSBTSDRSZWdpc3RlcnM6OnBjKTsKKyAg
ICAgICAgQVNTRVJUKChvZmZzZXQgPD0gMjU1KSAmJiAob2Zmc2V0ID49IDApKTsKKworICAgICAg
ICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDMoTU9WV19SRUFEX09GRlBDX09QQ09ERSwg
ZHN0LCBvZmZzZXQpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgdm9p
ZCBtb3Z3TWVtUmVnKGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBkc3Qp
CisgICAgeworICAgICAgICBBU1NFUlQoZHN0ID09IFNINFJlZ2lzdGVyczo6cjApOworCisgICAg
ICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3VwMTEoTU9WV19SRUFEX09GRlJNX09QQ09E
RSwgYmFzZSwgb2Zmc2V0KTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAg
IHZvaWQgbW92d1IwbXIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAg
ICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXAxKE1PVldfUkVBRF9SMFJNX09QQ09E
RSwgZHN0LCBzcmMpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgdm9p
ZCBtb3ZsUmVnTWVtKFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2Up
CisgICAgeworICAgICAgICBBU1NFUlQoKG9mZnNldCA8PSAxNSkgJiYgKG9mZnNldCA+PSAwKSk7
CisKKyAgICAgICAgaWYgKCFvZmZzZXQpIHsKKyAgICAgICAgICAgIG9uZVNob3J0T3AoZ2V0T3Bj
b2RlR3JvdXAxKE1PVkxfV1JJVEVfUk5fT1BDT0RFLCBiYXNlLCBzcmMpKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIG9uZVNob3J0T3AoZ2V0T3Bjb2RlR3JvdXA0
KE1PVkxfV1JJVEVfT0ZGUk5fT1BDT0RFLCBiYXNlLCBzcmMsIG9mZnNldCkpOworICAgIH0KKwor
ICAgIHZvaWQgbW92bFJlZ01lbShSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBiYXNlKQorICAg
IHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXAxKE1PVkxfV1JJVEVfUk5f
T1BDT0RFLCBiYXNlLCBzcmMpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisg
ICAgdm9pZCBtb3ZsTWVtUmVnKGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJ
RCBkc3QpCisgICAgeworICAgICAgICBpZiAoYmFzZSA9PSBTSDRSZWdpc3RlcnM6OnBjKSB7Cisg
ICAgICAgICAgICBBU1NFUlQoKG9mZnNldCA8PSAyNTUpICYmIChvZmZzZXQgPj0gMCkpOworICAg
ICAgICAgICAgb25lU2hvcnRPcChnZXRPcGNvZGVHcm91cDMoTU9WTF9SRUFEX09GRlBDX09QQ09E
RSwgZHN0LCBvZmZzZXQpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAg
ICAgIEFTU0VSVCgob2Zmc2V0IDw9IDE1KSAmJiAob2Zmc2V0ID49IDApKTsKKyAgICAgICAgaWYg
KCFvZmZzZXQpIHsKKyAgICAgICAgICAgIG9uZVNob3J0T3AoZ2V0T3Bjb2RlR3JvdXAxKE1PVkxf
UkVBRF9STV9PUENPREUsIGRzdCwgYmFzZSkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisKKyAgICAgICAgb25lU2hvcnRPcChnZXRPcGNvZGVHcm91cDQoTU9WTF9SRUFEX09GRlJN
X09QQ09ERSwgZHN0LCBiYXNlLCBvZmZzZXQpKTsKKyAgICB9CisKKyAgICB2b2lkIG1vdmJNZW1S
ZWcoaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChkc3QgPT0gU0g0UmVnaXN0ZXJzOjpyMCk7CisKKyAgICAgICAgdWludDE2
X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXAxMShNT1ZCX1JFQURfT0ZGUk1fT1BDT0RFLCBiYXNlLCBv
ZmZzZXQpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCBtb3Zi
UjBtcihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICB1aW50
MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDEoTU9WQl9SRUFEX1IwUk1fT1BDT0RFLCBkc3QsIHNy
Yyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lkIG1vdmJNZW1S
ZWcoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgdWludDE2
X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXAxKE1PVkJfUkVBRF9STV9PUENPREUsIGRzdCwgc3JjKTsK
KyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAgIHZvaWQgbW92bE1lbVJlZyhS
ZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qg
b3BjID0gZ2V0T3Bjb2RlR3JvdXAxKE1PVkxfUkVBRF9STV9PUENPREUsIGRzdCwgYmFzZSk7Cisg
ICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lkIG1vdmxNZW1SZWdJbihS
ZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qg
b3BjID0gZ2V0T3Bjb2RlR3JvdXAxKE1PVkxfUkVBRF9STUlOQ19PUENPREUsIGRzdCwgYmFzZSk7
CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lkIG1vdmxSMG1yKFJl
Z2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9w
YyA9IGdldE9wY29kZUdyb3VwMShNT1ZMX1JFQURfUjBSTV9PUENPREUsIGRzdCwgc3JjKTsKKyAg
ICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAgIHZvaWQgbW92bFJlZ01lbXIwKFJl
Z2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9w
YyA9IGdldE9wY29kZUdyb3VwMShNT1ZMX1dSSVRFX1IwUk5fT1BDT0RFLCBkc3QsIHNyYyk7Cisg
ICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lkIG1vdmxJbW04cihpbnQg
aW1tOCwgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICBBU1NFUlQoKGltbTggPD0gMTI3
KSAmJiAoaW1tOCA+PSAtMTI4KSk7CisKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2Rl
R3JvdXAzKE1PVklNTV9PUENPREUsIGRzdCwgaW1tOCk7CisgICAgICAgIG9uZVNob3J0T3Aob3Bj
KTsKKyAgICB9CisKKyAgICB2b2lkIGxvYWRDb25zdGFudCh1aW50MzJfdCBjb25zdGFudCwgUmVn
aXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICBpZiAoKChpbnQpY29uc3RhbnQgPD0gMHg3Zikg
JiYgKChpbnQpY29uc3RhbnQgPj0gLTB4ODApKSB7CisgICAgICAgICAgICBtb3ZJbW04KGNvbnN0
YW50LCBkc3QpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgdWlu
dDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXAzKE1PVklNTV9PUENPREUsIGRzdCwgMCk7CisKKyAg
ICAgICAgbV9idWZmZXIuZW5zdXJlU3BhY2UobWF4SW5zdHJ1Y3Rpb25TaXplLCBzaXplb2YodWlu
dDMyX3QpKTsKKyAgICAgICAgcHJpbnRJbnN0cihnZXRPcGNvZGVHcm91cDMoTU9WSU1NX09QQ09E
RSwgZHN0LCBjb25zdGFudCksIG1fYnVmZmVyLnVuY2hlY2tlZFNpemUoKSk7CisgICAgICAgIG1f
YnVmZmVyLnB1dFNob3J0V2l0aENvbnN0YW50SW50KG9wYywgY29uc3RhbnQsIHRydWUpOworICAg
IH0KKworICAgIHZvaWQgbG9hZENvbnN0YW50VW5SZXVzYWJsZSh1aW50MzJfdCBjb25zdGFudCwg
UmVnaXN0ZXJJRCBkc3QsIGJvb2wgZW5zdXJlU3BhY2UgPSBmYWxzZSkKKyAgICB7CisgICAgICAg
IHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3VwMyhNT1ZJTU1fT1BDT0RFLCBkc3QsIDApOwor
CisgICAgICAgIGlmIChlbnN1cmVTcGFjZSkKKyAgICAgICAgICAgIG1fYnVmZmVyLmVuc3VyZVNw
YWNlKG1heEluc3RydWN0aW9uU2l6ZSwgc2l6ZW9mKHVpbnQzMl90KSk7CisKKyAgICAgICAgcHJp
bnRJbnN0cihnZXRPcGNvZGVHcm91cDMoTU9WSU1NX09QQ09ERSwgZHN0LCBjb25zdGFudCksIG1f
YnVmZmVyLnVuY2hlY2tlZFNpemUoKSk7CisgICAgICAgIG1fYnVmZmVyLnB1dFNob3J0V2l0aENv
bnN0YW50SW50KG9wYywgY29uc3RhbnQpOworICAgIH0KKworICAgIC8vIEZsb3cgY29udHJvbAor
CisgICAgSm1wU3JjIGNhbGwoKQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFp
bVNjcmF0Y2goKTsKKyAgICAgICAgbV9idWZmZXIuZW5zdXJlU3BhY2UobWF4SW5zdHJ1Y3Rpb25T
aXplICsgNCwgc2l6ZW9mKHVpbnQzMl90KSk7CisgICAgICAgIGxvYWRDb25zdGFudFVuUmV1c2Fi
bGUoMHgwLCBzY3IpOworICAgICAgICBicmFuY2goSlNSX09QQ09ERSwgc2NyKTsKKyAgICAgICAg
bm9wKCk7CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgICAgIHJldHVybiBKbXBT
cmMobV9idWZmZXIudW5jaGVja2VkU2l6ZSgpKTsKKyAgICB9CisKKyAgICBKbXBTcmMgY2FsbChS
ZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIG1fYnVmZmVyLmVuc3VyZVNwYWNlKG1heElu
c3RydWN0aW9uU2l6ZSArIDIpOworICAgICAgICBicmFuY2goSlNSX09QQ09ERSwgZHN0KTsKKyAg
ICAgICAgbm9wKCk7CisgICAgICAgIHJldHVybiBKbXBTcmMobV9idWZmZXIudW5jaGVja2VkU2l6
ZSgpKTsKKyAgICB9CisKKyAgICBKbXBTcmMgam1wKCkKKyAgICB7CisgICAgICAgIFJlZ2lzdGVy
SUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIG1fYnVmZmVyLmVuc3VyZVNwYWNlKG1h
eEluc3RydWN0aW9uU2l6ZSArIDQsIHNpemVvZih1aW50MzJfdCkpOworICAgICAgICBpbnQgbV9z
aXplID0gbV9idWZmZXIudW5jaGVja2VkU2l6ZSgpOworICAgICAgICBsb2FkQ29uc3RhbnRVblJl
dXNhYmxlKDB4MCwgc2NyKTsKKyAgICAgICAgYnJhbmNoKEJSQUZfT1BDT0RFLCBzY3IpOworICAg
ICAgICBub3AoKTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICAgICAgcmV0dXJu
IEptcFNyYyhtX3NpemUpOworICAgIH0KKworICAgIEptcFNyYyBqbXAoUmVnaXN0ZXJJRCBkc3Qp
CisgICAgeworICAgICAgICBqbXBSZWcoZHN0KTsKKyAgICAgICAgcmV0dXJuIEptcFNyYyhtX2J1
ZmZlci51bmNoZWNrZWRTaXplKCkpOworICAgIH0KKworICAgIHZvaWQgam1wUmVnKFJlZ2lzdGVy
SUQgZHN0KQorICAgIHsKKyAgICAgICAgbV9idWZmZXIuZW5zdXJlU3BhY2UobWF4SW5zdHJ1Y3Rp
b25TaXplICsgMik7CisgICAgICAgIGJyYW5jaChKTVBfT1BDT0RFLCBkc3QpOworICAgICAgICBu
b3AoKTsKKyAgICB9CisKKyAgICBKbXBTcmMgam5lKCkKKyAgICB7CisgICAgICAgIGludCBtX3Np
emUgPSBtX2J1ZmZlci51bmNoZWNrZWRTaXplKCk7CisgICAgICAgIGJyYW5jaChCRl9PUENPREUs
IDApOworICAgICAgICByZXR1cm4gSm1wU3JjKG1fc2l6ZSk7CisgICAgfQorCisgICAgSm1wU3Jj
IGplKCkKKyAgICB7CisgICAgICAgIGludCBtX3NpemUgPSBtX2J1ZmZlci51bmNoZWNrZWRTaXpl
KCk7CisgICAgICAgIGJyYW5jaChCVF9PUENPREUsIDApOworICAgICAgICByZXR1cm4gSm1wU3Jj
KG1fc2l6ZSk7CisgICAgfQorCisgICAgdm9pZCByZXQoKQorICAgIHsKKyAgICAgICAgbV9idWZm
ZXIuZW5zdXJlU3BhY2UobWF4SW5zdHJ1Y3Rpb25TaXplICsgMik7CisgICAgICAgIG9uZVNob3J0
T3AoUlRTX09QQ09ERSwgZmFsc2UpOworICAgIH0KKworICAgIEptcERzdCBsYWJlbCgpCisgICAg
eworICAgICAgICByZXR1cm4gSm1wRHN0KG1fYnVmZmVyLnNpemUoKSk7CisgICAgfQorCisgICAg
aW50IHNpemVPZkNvbnN0YW50UG9vbCgpCisgICAgeworICAgICAgICAgcmV0dXJuIG1fYnVmZmVy
LnNpemVPZkNvbnN0YW50UG9vbCgpOworICAgIH0KKworICAgIEptcERzdCBhbGlnbihpbnQgYWxp
Z25tZW50KQorICAgIHsKKyAgICAgICAgbV9idWZmZXIuZW5zdXJlU3BhY2UobWF4SW5zdHJ1Y3Rp
b25TaXplICsgMik7CisgICAgICAgIHdoaWxlICghbV9idWZmZXIuaXNBbGlnbmVkKGFsaWdubWVu
dCkpIHsKKyAgICAgICAgICAgIG5vcCgpOworICAgICAgICAgICAgbV9idWZmZXIuZW5zdXJlU3Bh
Y2UobWF4SW5zdHJ1Y3Rpb25TaXplICsgMik7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGxh
YmVsKCk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgY2hhbmdlUENyZWxhdGl2ZUFkZHJlc3Mo
aW50IG9mZnNldCwgdWludDE2X3QqIGluc3RydWN0aW9uUHRyLCB1aW50MzJfdCBuZXdBZGRyZXNz
KQorICAgIHsKKyAgICAgICAgdWludDMyX3QgYWRkcmVzcyA9IChvZmZzZXQgPDwgMikgKyAoKHJl
aW50ZXJwcmV0X2Nhc3Q8dWludDMyX3Q+KGluc3RydWN0aW9uUHRyKSArIDQpICYofjB4MykpOwor
ICAgICAgICAqcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KGFkZHJlc3MpID0gbmV3QWRkcmVz
czsKKyAgICB9CisKKyAgICBzdGF0aWMgdWludDE2X3QqIGdldEluc3RydWN0aW9uUHRyKHZvaWQq
IGNvZGUsIGludCBvZmZzZXQpCisgICAgeworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2Fz
dDx1aW50MTZfdCo+IChyZWludGVycHJldF9jYXN0PHVpbnQzMl90Pihjb2RlKSArIG9mZnNldCk7
CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgbGlua0p1bXAodm9pZCogY29kZSwgSm1wU3JjIGZy
b20sIHZvaWQqIHRvKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGZyb20ubV9vZmZzZXQgIT0gLTEp
OworCisgICAgICAgIHVpbnQxNl90KiBpbnN0cnVjdGlvblB0ciA9IGdldEluc3RydWN0aW9uUHRy
KGNvZGUsIGZyb20ubV9vZmZzZXQpOworICAgICAgICB1aW50MTZfdCBpbnN0cnVjdGlvbiA9ICpp
bnN0cnVjdGlvblB0cjsKKyAgICAgICAgaW50IG9mZnNldEJpdHMgPSAocmVpbnRlcnByZXRfY2Fz
dDx1aW50MzJfdD4odG8pIC0gcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdD4oY29kZSkpIC0gZnJv
bS5tX29mZnNldDsKKworICAgICAgICBpZiAoKChpbnN0cnVjdGlvbiAmIDB4ZmYwMCkgPT0gQlRf
T1BDT0RFKSB8fCAoKGluc3RydWN0aW9uICYgMHhmZjAwKSA9PSBCRl9PUENPREUpKSB7CisgICAg
ICAgICAgICAvKiBCVCBsYWJlbCA9PT4gQkYgMgorICAgICAgICAgICAgICAgbm9wICAgICAgICAg
IExEUiByZWcKKyAgICAgICAgICAgICAgIG5vcCAgICAgICAgICBicmFmIEByZWcKKyAgICAgICAg
ICAgICAgIG5vcCAgICAgICAgICBub3AKKyAgICAgICAgICAgICovCisgICAgICAgICAgICBvZmZz
ZXRCaXRzIC09IDg7CisgICAgICAgICAgICBpbnN0cnVjdGlvbiBePSAweDAyMDI7CisgICAgICAg
ICAgICAqaW5zdHJ1Y3Rpb25QdHIrKyA9IGluc3RydWN0aW9uOworICAgICAgICAgICAgY2hhbmdl
UENyZWxhdGl2ZUFkZHJlc3MoKCppbnN0cnVjdGlvblB0ciAmIDB4ZmYpLCBpbnN0cnVjdGlvblB0
ciwgb2Zmc2V0Qml0cyk7CisgICAgICAgICAgICBpbnN0cnVjdGlvbiA9IChCUkFGX09QQ09ERSB8
ICgqaW5zdHJ1Y3Rpb25QdHIrKyAmIDB4ZjAwKSk7CisgICAgICAgICAgICAqaW5zdHJ1Y3Rpb25Q
dHIgPSBpbnN0cnVjdGlvbjsKKyAgICAgICAgICAgIHByaW50QmxvY2tJbnN0cihpbnN0cnVjdGlv
blB0ciAtIDIsIGZyb20ubV9vZmZzZXQsIDMpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgfQorCisgICAgICAgICAvKiBNT1YgI2ltbSwgcmVnID0+IExEUiByZWcKKyAgICAgICAgICAg
IGJyYWYgQHJlZyAgICAgICAgYnJhZiBAcmVnCisgICAgICAgICAgICBub3AgICAgICAgICAgICAg
IG5vcAorICAgICAgICAgKi8KKyAgICAgICAgQVNTRVJUKCgqKGluc3RydWN0aW9uUHRyICsgMSkg
JiBCUkFGX09QQ09ERSkgPT0gQlJBRl9PUENPREUpOworCisgICAgICAgIG9mZnNldEJpdHMgLT0g
NDsKKyAgICAgICAgaWYgKG9mZnNldEJpdHMgPj0gLTQwOTYgJiYgb2Zmc2V0Qml0cyA8PSA0MDk0
KSB7CisgICAgICAgICAgICAqaW5zdHJ1Y3Rpb25QdHIgPSBnZXRPcGNvZGVHcm91cDYoQlJBX09Q
Q09ERSwgb2Zmc2V0Qml0cyA+PiAxKTsKKyAgICAgICAgICAgICooKytpbnN0cnVjdGlvblB0cikg
PSBOT1BfT1BDT0RFOworICAgICAgICAgICAgcHJpbnRCbG9ja0luc3RyKGluc3RydWN0aW9uUHRy
IC0gMSwgZnJvbS5tX29mZnNldCwgMik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KworICAgICAgICBjaGFuZ2VQQ3JlbGF0aXZlQWRkcmVzcygoKmluc3RydWN0aW9uUHRyICYgMHhm
ZiksIGluc3RydWN0aW9uUHRyLCBvZmZzZXRCaXRzIC0gMik7CisgICAgICAgIHByaW50SW5zdHIo
Kmluc3RydWN0aW9uUHRyLCBmcm9tLm1fb2Zmc2V0ICsgMik7CisgICAgfQorCisgICAgc3RhdGlj
IHZvaWQgbGlua0NhbGwodm9pZCogY29kZSwgSm1wU3JjIGZyb20sIHZvaWQqIHRvKQorICAgIHsK
KyAgICAgICAgdWludDE2X3QqIGluc3RydWN0aW9uUHRyID0gZ2V0SW5zdHJ1Y3Rpb25QdHIoY29k
ZSwgZnJvbS5tX29mZnNldCk7CisgICAgICAgIGluc3RydWN0aW9uUHRyIC09IDM7CisgICAgICAg
IGNoYW5nZVBDcmVsYXRpdmVBZGRyZXNzKCgqaW5zdHJ1Y3Rpb25QdHIgJiAweGZmKSwgaW5zdHJ1
Y3Rpb25QdHIsIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3Q+KHRvKSk7CisgICAgfQorCisgICAg
c3RhdGljIHZvaWQgbGlua1BvaW50ZXIodm9pZCogY29kZSwgSm1wRHN0IHdoZXJlLCB2b2lkKiB2
YWx1ZSkKKyAgICB7CisgICAgICAgIHVpbnQxNl90KiBpbnN0cnVjdGlvblB0ciA9IGdldEluc3Ry
dWN0aW9uUHRyKGNvZGUsIHdoZXJlLm1fb2Zmc2V0KTsKKyAgICAgICAgY2hhbmdlUENyZWxhdGl2
ZUFkZHJlc3MoKCppbnN0cnVjdGlvblB0ciAmIDB4ZmYpLCBpbnN0cnVjdGlvblB0ciwgcmVpbnRl
cnByZXRfY2FzdDx1aW50MzJfdD4odmFsdWUpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdW5zaWdu
ZWQgZ2V0Q2FsbFJldHVybk9mZnNldChKbXBTcmMgY2FsbCkKKyAgICB7CisgICAgICAgIEFTU0VS
VChjYWxsLm1fb2Zmc2V0ID49IDApOworICAgICAgICByZXR1cm4gY2FsbC5tX29mZnNldDsKKyAg
ICB9CisKKyAgICBzdGF0aWMgdWludDMyX3QqIGdldExkckltbUFkZHJlc3NPblBvb2woU0g0V29y
ZCogaW5zbiwgdWludDMyX3QqIGNvbnN0UG9vbCkKKyAgICB7CisgICAgICAgIHJldHVybiAoY29u
c3RQb29sICsgKCppbnNuICYgMHhmZikpOworICAgIH0KKworICAgIHN0YXRpYyBTSDRXb3JkIHBh
dGNoQ29uc3RhbnRQb29sTG9hZChTSDRXb3JkIGxvYWQsIGludCB2YWx1ZSkKKyAgICB7CisgICAg
ICAgIHJldHVybiAoKGxvYWQgJiB+MHhmZikgfCB2YWx1ZSk7CisgICAgfQorCisgICAgc3RhdGlj
IFNINEJ1ZmZlcjo6VHdvU2hvcnRzIHBsYWNlQ29uc3RhbnRQb29sQmFycmllcihpbnQgb2Zmc2V0
KQorICAgIHsKKyAgICAgICAgQVNTRVJUKCgob2Zmc2V0ID4+IDEpIDw9MjA0NykgJiYgKChvZmZz
ZXQgPj4gMSkgPj0gLTIwNDgpKTsKKworICAgICAgICBTSDRCdWZmZXI6OlR3b1Nob3J0cyBtX2Jh
cnJpZXI7CisgICAgICAgIG1fYmFycmllci5oaWdoID0gKEJSQV9PUENPREUgfCAob2Zmc2V0ID4+
IDEpKTsKKyAgICAgICAgbV9iYXJyaWVyLmxvdyA9IE5PUF9PUENPREU7CisgICAgICAgIHByaW50
SW5zdHIoKChCUkFfT1BDT0RFIHwgKG9mZnNldCA+PiAxKSkpLCAwKTsKKyAgICAgICAgcHJpbnRJ
bnN0cihOT1BfT1BDT0RFLCAwKTsKKyAgICAgICAgcmV0dXJuIG1fYmFycmllcjsKKyAgICB9CisK
KyAgICBzdGF0aWMgdm9pZCBwYXRjaENvbnN0YW50UG9vbExvYWQodm9pZCogbG9hZEFkZHIsIHZv
aWQqIGNvbnN0UG9vbEFkZHIpCisgICAgeworICAgICAgICBTSDRXb3JkKiBpbnN0cnVjdGlvblB0
ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8U0g0V29yZCo+KGxvYWRBZGRyKTsKKyAgICAgICAgU0g0V29y
ZCBpbnN0cnVjdGlvbiA9ICppbnN0cnVjdGlvblB0cjsKKyAgICAgICAgU0g0V29yZCBpbmRleCA9
IGluc3RydWN0aW9uICYgMHhmZjsKKworICAgICAgICBpZiAoKGluc3RydWN0aW9uICYgMHhmMDAw
KSAhPSBNT1ZJTU1fT1BDT0RFKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIEFTU0VS
VCgoKChyZWludGVycHJldF9jYXN0PHVpbnQzMl90Pihjb25zdFBvb2xBZGRyKSAtIHJlaW50ZXJw
cmV0X2Nhc3Q8dWludDMyX3Q+KGxvYWRBZGRyKSkgKyBpbmRleCAqIDQpKSA8IDEwMjQpOworCisg
ICAgICAgIGludCBvZmZzZXQgPSByZWludGVycHJldF9jYXN0PHVpbnQzMl90Pihjb25zdFBvb2xB
ZGRyKSArIChpbmRleCAqIDQpIC0gKChyZWludGVycHJldF9jYXN0PHVpbnQzMl90PihpbnN0cnVj
dGlvblB0cikgJiB+MHgwMykgKyA0KTsKKyAgICAgICAgaW5zdHJ1Y3Rpb24gJj0weGYwMDsKKyAg
ICAgICAgaW5zdHJ1Y3Rpb24gfD0gMHhkMDAwOworICAgICAgICBvZmZzZXQgJj0gMHgwM2ZmOwor
ICAgICAgICBpbnN0cnVjdGlvbiB8PSAob2Zmc2V0ID4+IDIpOworICAgICAgICAqaW5zdHJ1Y3Rp
b25QdHIgPSBpbnN0cnVjdGlvbjsKKyAgICAgICAgcHJpbnRJbnN0cihpbnN0cnVjdGlvbiwgcmVp
bnRlcnByZXRfY2FzdDx1aW50MzJfdD4obG9hZEFkZHIpKTsKKyAgICB9CisKKyAgICBzdGF0aWMg
dm9pZCByZXBhdGNoUG9pbnRlcih2b2lkKiB3aGVyZSwgdm9pZCogdmFsdWUpCisgICAgeworICAg
ICAgICBwYXRjaFBvaW50ZXIod2hlcmUsIHZhbHVlKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9p
ZCByZXBhdGNoSW50MzIodm9pZCogd2hlcmUsIGludDMyX3QgdmFsdWUpCisgICAgeworICAgICAg
ICB1aW50MTZfdCogaW5zdHJ1Y3Rpb25QdHIgPSByZWludGVycHJldF9jYXN0PHVpbnQxNl90Kj4o
d2hlcmUpOworICAgICAgICBjaGFuZ2VQQ3JlbGF0aXZlQWRkcmVzcygoKmluc3RydWN0aW9uUHRy
ICYgMHhmZiksIGluc3RydWN0aW9uUHRyLCB2YWx1ZSk7CisgICAgfQorCisgICAgc3RhdGljIHZv
aWQgcmVsaW5rQ2FsbCh2b2lkKiBmcm9tLCB2b2lkKiB0bykKKyAgICB7CisgICAgICAgIHVpbnQx
Nl90KiBpbnN0cnVjdGlvblB0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDE2X3QqPihmcm9tKTsK
KyAgICAgICAgaW5zdHJ1Y3Rpb25QdHIgLT0gMzsKKyAgICAgICAgY2hhbmdlUENyZWxhdGl2ZUFk
ZHJlc3MoKCppbnN0cnVjdGlvblB0ciAmIDB4ZmYpLCBpbnN0cnVjdGlvblB0ciwgcmVpbnRlcnBy
ZXRfY2FzdDx1aW50MzJfdD4odG8pKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCByZWxpbmtK
dW1wKHZvaWQqIGZyb20sIHZvaWQqIHRvKQorICAgIHsKKyAgICAgICAgdWludDE2X3QqIGluc3Ry
dWN0aW9uUHRyID0gcmVpbnRlcnByZXRfY2FzdDx1aW50MTZfdCo+IChmcm9tKTsKKyAgICAgICAg
dWludDE2X3QgaW5zdHJ1Y3Rpb24gPSAqaW5zdHJ1Y3Rpb25QdHI7CisgICAgICAgIGludDMyX3Qg
b2Zmc2V0Qml0cyA9IChyZWludGVycHJldF9jYXN0PHVpbnQzMl90Pih0bykgLSByZWludGVycHJl
dF9jYXN0PHVpbnQzMl90Pihmcm9tKSk7CisKKyAgICAgICAgaWYgKCgoKmluc3RydWN0aW9uUHRy
ICYgMHhmZjAwKSA9PSBCVF9PUENPREUpIHx8ICgoKmluc3RydWN0aW9uUHRyICYgMHhmZjAwKSA9
PSBCRl9PUENPREUpKSB7CisgICAgICAgICAgICBvZmZzZXRCaXRzIC09IDg7CisgICAgICAgICAg
ICBpbnN0cnVjdGlvblB0cisrOworICAgICAgICAgICAgY2hhbmdlUENyZWxhdGl2ZUFkZHJlc3Mo
KCppbnN0cnVjdGlvblB0ciAmIDB4ZmYpLCBpbnN0cnVjdGlvblB0ciwgb2Zmc2V0Qml0cyk7Cisg
ICAgICAgICAgICBpbnN0cnVjdGlvbiA9IChCUkFGX09QQ09ERSB8ICgqaW5zdHJ1Y3Rpb25QdHIr
KyAmIDB4ZjAwKSk7CisgICAgICAgICAgICAqaW5zdHJ1Y3Rpb25QdHIgPSBpbnN0cnVjdGlvbjsK
KyAgICAgICAgICAgIHByaW50QmxvY2tJbnN0cihpbnN0cnVjdGlvblB0ciwgcmVpbnRlcnByZXRf
Y2FzdDx1aW50MzJfdD4oZnJvbSkgKyAxLCAzKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorCisgICAgICAgIEFTU0VSVCgoKihpbnN0cnVjdGlvblB0ciArIDEpICYgQlJBRl9PUENP
REUpID09IEJSQUZfT1BDT0RFKTsKKyAgICAgICAgb2Zmc2V0Qml0cyAtPSA0OworICAgICAgICBp
ZiAob2Zmc2V0Qml0cyA+PSAtNDA5NiAmJiBvZmZzZXRCaXRzIDw9IDQwOTQpIHsKKyAgICAgICAg
ICAgICppbnN0cnVjdGlvblB0ciA9IGdldE9wY29kZUdyb3VwNihCUkFfT1BDT0RFLCBvZmZzZXRC
aXRzID4+IDEpOworICAgICAgICAgICAgKigrK2luc3RydWN0aW9uUHRyKSA9IE5PUF9PUENPREU7
CisgICAgICAgICAgICBwcmludEJsb2NrSW5zdHIoaW5zdHJ1Y3Rpb25QdHIgLSAyLCByZWludGVy
cHJldF9jYXN0PHVpbnQzMl90Pihmcm9tKSwgMik7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKworICAgICAgICBjaGFuZ2VQQ3JlbGF0aXZlQWRkcmVzcygoKmluc3RydWN0aW9uUHRy
ICYgMHhmZiksIGluc3RydWN0aW9uUHRyLCBvZmZzZXRCaXRzIC0gMik7CisgICAgICAgIHByaW50
SW5zdHIoKmluc3RydWN0aW9uUHRyLCByZWludGVycHJldF9jYXN0PHVpbnQzMl90Pihmcm9tKSk7
CisgICAgfQorCisgICAgLy8gTGlua2luZyAmIHBhdGNoaW5nCisKKyAgICB2b2lkIGxpbmtKdW1w
KEptcFNyYyBmcm9tLCBKbXBEc3QgdG8pCisgICAgeworICAgICAgICBBU1NFUlQodG8ubV9vZmZz
ZXQgIT0gLTEpOworICAgICAgICBBU1NFUlQoZnJvbS5tX29mZnNldCAhPSAtMSk7CisKKyAgICAg
ICAgdWludDE2X3QqIGluc3RydWN0aW9uUHRyID0gZ2V0SW5zdHJ1Y3Rpb25QdHIoZGF0YSgpLCBm
cm9tLm1fb2Zmc2V0KTsKKyAgICAgICAgdWludDE2X3QgaW5zdHJ1Y3Rpb24gPSAqaW5zdHJ1Y3Rp
b25QdHI7CisgICAgICAgIGludCBvZmZzZXRCaXRzOworCisgICAgICAgIGlmICgoKGluc3RydWN0
aW9uICYgMHhmZjAwKSA9PSBCVF9PUENPREUpIHx8ICgoaW5zdHJ1Y3Rpb24gJiAweGZmMDApID09
IEJGX09QQ09ERSkpIHsKKyAgICAgICAgICAgIC8qIEJUIGxhYmVsID0+IEJGIDIKKyAgICAgICAg
ICAgICAgIG5vcCAgICAgICAgTERSIHJlZworICAgICAgICAgICAgICAgbm9wICAgICAgICBicmFm
IEByZWcKKyAgICAgICAgICAgICAgIG5vcCAgICAgICAgbm9wCisgICAgICAgICAgICAqLworICAg
ICAgICAgICAgb2Zmc2V0Qml0cyA9ICh0by5tX29mZnNldCAtIGZyb20ubV9vZmZzZXQpIC0gODsK
KyAgICAgICAgICAgIGluc3RydWN0aW9uIF49IDB4MDIwMjsKKyAgICAgICAgICAgICppbnN0cnVj
dGlvblB0cisrID0gaW5zdHJ1Y3Rpb247CisgICAgICAgICAgICBpZiAoKCppbnN0cnVjdGlvblB0
ciAmIDB4ZjAwMCkgPT0gMHhlMDAwKSB7CisgICAgICAgICAgICAgICAgdWludDMyX3QqIGFkZHIg
PSBnZXRMZHJJbW1BZGRyZXNzT25Qb29sKGluc3RydWN0aW9uUHRyLCBtX2J1ZmZlci5wb29sQWRk
cmVzcygpKTsKKyAgICAgICAgICAgICAgICAqYWRkciA9IG9mZnNldEJpdHM7CisgICAgICAgICAg
ICB9IGVsc2UKKyAgICAgICAgICAgICAgICBjaGFuZ2VQQ3JlbGF0aXZlQWRkcmVzcygoKmluc3Ry
dWN0aW9uUHRyICYgMHhmZiksIGluc3RydWN0aW9uUHRyLCBvZmZzZXRCaXRzKTsKKyAgICAgICAg
ICAgIGluc3RydWN0aW9uID0gKEJSQUZfT1BDT0RFIHwgKCppbnN0cnVjdGlvblB0cisrICYgMHhm
MDApKTsKKyAgICAgICAgICAgICppbnN0cnVjdGlvblB0ciA9IGluc3RydWN0aW9uOworICAgICAg
ICAgICAgcHJpbnRCbG9ja0luc3RyKGluc3RydWN0aW9uUHRyIC0gMiwgZnJvbS5tX29mZnNldCwg
Myk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICAvKiBNT1YgIyBp
bW0sIHJlZyA9PiBMRFIgcmVnCisgICAgICAgICAgIGJyYWYgQHJlZyAgICAgICAgIGJyYWYgQHJl
ZworICAgICAgICAgICBub3AgICAgICAgICAgICAgICBub3AKKyAgICAgICAgKi8KKyAgICAgICAg
QVNTRVJUKCgqKGluc3RydWN0aW9uUHRyICsgMSkgJiBCUkFGX09QQ09ERSkgPT0gQlJBRl9PUENP
REUpOworICAgICAgICBvZmZzZXRCaXRzID0gKHRvLm1fb2Zmc2V0IC0gZnJvbS5tX29mZnNldCkg
LSA0OworICAgICAgICBpZiAob2Zmc2V0Qml0cyA+PSAtNDA5NiAmJiBvZmZzZXRCaXRzIDw9IDQw
OTQpIHsKKyAgICAgICAgICAgICppbnN0cnVjdGlvblB0ciA9IGdldE9wY29kZUdyb3VwNihCUkFf
T1BDT0RFLCBvZmZzZXRCaXRzID4+IDEpOworICAgICAgICAgICAgKigrK2luc3RydWN0aW9uUHRy
KSA9IE5PUF9PUENPREU7CisgICAgICAgICAgICBwcmludEJsb2NrSW5zdHIoaW5zdHJ1Y3Rpb25Q
dHIgLSAxLCBmcm9tLm1fb2Zmc2V0LCAyKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorCisgICAgICAgIGluc3RydWN0aW9uID0gKmluc3RydWN0aW9uUHRyOworICAgICAgICBpZiAo
KGluc3RydWN0aW9uICAmIDB4ZjAwMCkgPT0gMHhlMDAwKSB7CisgICAgICAgICAgICB1aW50MzJf
dCogYWRkciA9IGdldExkckltbUFkZHJlc3NPblBvb2woaW5zdHJ1Y3Rpb25QdHIsIG1fYnVmZmVy
LnBvb2xBZGRyZXNzKCkpOworICAgICAgICAgICAgKmFkZHIgPSBvZmZzZXRCaXRzIC0gMjsKKyAg
ICAgICAgICAgIHByaW50SW5zdHIoKmluc3RydWN0aW9uUHRyLCBmcm9tLm1fb2Zmc2V0ICsgMik7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBjaGFuZ2VQQ3JlbGF0
aXZlQWRkcmVzcygoKmluc3RydWN0aW9uUHRyICYgMHhmZiksIGluc3RydWN0aW9uUHRyLCBvZmZz
ZXRCaXRzIC0gMik7CisgICAgICAgIHByaW50SW5zdHIoKmluc3RydWN0aW9uUHRyLCBmcm9tLm1f
b2Zmc2V0ICsgMik7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQqIGdldFJlbG9jYXRlZEFkZHJl
c3Modm9pZCogY29kZSwgSm1wU3JjIGp1bXApCisgICAgeworICAgICAgICByZXR1cm4gcmVpbnRl
cnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdD4oY29kZSkgKyBqdW1w
Lm1fb2Zmc2V0KTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCogZ2V0UmVsb2NhdGVkQWRkcmVz
cyh2b2lkKiBjb2RlLCBKbXBEc3QgZGVzdGluYXRpb24pCisgICAgeworICAgICAgICBBU1NFUlQo
ZGVzdGluYXRpb24ubV9vZmZzZXQgIT0gLTEpOworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRf
Y2FzdDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdD4oY29kZSkgKyBkZXN0aW5hdGlv
bi5tX29mZnNldCk7CisgICAgfQorCisgICAgc3RhdGljIGludCBnZXREaWZmZXJlbmNlQmV0d2Vl
bkxhYmVscyhKbXBEc3Qgc3JjLCBKbXBEc3QgZHN0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGRz
dC5tX29mZnNldCAtIHNyYy5tX29mZnNldDsKKyAgICB9CisKKyAgICBzdGF0aWMgaW50IGdldERp
ZmZlcmVuY2VCZXR3ZWVuTGFiZWxzKEptcERzdCBzcmMsIEptcFNyYyBkc3QpCisgICAgeworICAg
ICAgICByZXR1cm4gZHN0Lm1fb2Zmc2V0IC0gc3JjLm1fb2Zmc2V0OworICAgIH0KKworICAgIHN0
YXRpYyBpbnQgZ2V0RGlmZmVyZW5jZUJldHdlZW5MYWJlbHMoSm1wU3JjIHNyYywgSm1wRHN0IGRz
dCkKKyAgICB7CisgICAgICAgIHJldHVybiBkc3QubV9vZmZzZXQgLSBzcmMubV9vZmZzZXQ7Cisg
ICAgfQorCisgICAgc3RhdGljIHZvaWQgcGF0Y2hQb2ludGVyKHZvaWQqIGNvZGUsIEptcERzdCB3
aGVyZSwgdm9pZCogdmFsdWUpCisgICAgeworICAgICAgICBwYXRjaFBvaW50ZXIocmVpbnRlcnBy
ZXRfY2FzdDx1aW50MzJfdCo+KGNvZGUpICsgd2hlcmUubV9vZmZzZXQsIHZhbHVlKTsKKyAgICB9
CisKKyAgICBzdGF0aWMgdm9pZCBwYXRjaFBvaW50ZXIodm9pZCogY29kZSwgdm9pZCogdmFsdWUp
CisgICAgeworICAgICAgICBwYXRjaEludDMyKGNvZGUsIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMy
X3Q+KHZhbHVlKSk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgcGF0Y2hJbnQzMih2b2lkKiBj
b2RlLCB1aW50MzJfdCB2YWx1ZSkKKyAgICB7CisgICAgICAgIGNoYW5nZVBDcmVsYXRpdmVBZGRy
ZXNzKCgqKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDE2X3QqPihjb2RlKSkgJiAweGZmKSwgcmVpbnRl
cnByZXRfY2FzdDx1aW50MTZfdCo+KGNvZGUpLCB2YWx1ZSk7CisgICAgfQorCisgICAgdm9pZCog
ZXhlY3V0YWJsZUNvcHkoRXhlY3V0YWJsZVBvb2wqIGFsbG9jYXRvcikKKyAgICB7CisgICAgICAg
IHZvaWQqIGNvcHkgPSBtX2J1ZmZlci5leGVjdXRhYmxlQ29weShhbGxvY2F0b3IpOworICAgICAg
ICBBU1NFUlQoY29weSk7CisgICAgICAgIHJldHVybiBjb3B5OworICAgIH0KKworICAgIHZvaWQg
cHJlZml4KHVpbnQxNl90IHByZSkKKyAgICB7CisgICAgICAgIG1fYnVmZmVyLnB1dEJ5dGUocHJl
KTsKKyAgICB9CisKKyAgICB2b2lkIG9uZVNob3J0T3AodWludDE2X3Qgb3Bjb2RlLCBib29sIGNo
ZWNrc2l6ZSA9IHRydWUsIGJvb2wgaXNEb3VibGUgPSB0cnVlKQorICAgIHsKKyAgICAgICAgcHJp
bnRJbnN0cihvcGNvZGUsIG1fYnVmZmVyLnVuY2hlY2tlZFNpemUoKSwgaXNEb3VibGUpOworICAg
ICAgICBpZiAoY2hlY2tzaXplKQorICAgICAgICAgICAgbV9idWZmZXIuZW5zdXJlU3BhY2UobWF4
SW5zdHJ1Y3Rpb25TaXplKTsKKyAgICAgICAgbV9idWZmZXIucHV0U2hvcnRVbmNoZWNrZWQob3Bj
b2RlKTsKKyAgICB9CisKKyAgICB2b2lkIGVuc3VyZVNwYWNlKGludCBzcGFjZSkKKyAgICB7Cisg
ICAgICAgIG1fYnVmZmVyLmVuc3VyZVNwYWNlKHNwYWNlKTsKKyAgICB9CisKKyAgICB2b2lkIGVu
c3VyZVNwYWNlKGludCBpbnNuU3BhY2UsIGludCBjb25zdFNwYWNlKQorICAgIHsKKyAgICAgICAg
bV9idWZmZXIuZW5zdXJlU3BhY2UoaW5zblNwYWNlLCBjb25zdFNwYWNlKTsKKyAgICB9CisKKyAg
ICAvLyBBZG1pbmlzdHJhdGl2ZSBtZXRob2RzCisKKyAgICB2b2lkKiBkYXRhKCkgY29uc3QgeyBy
ZXR1cm4gbV9idWZmZXIuZGF0YSgpOyB9CisgICAgaW50IHNpemUoKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIG1fYnVmZmVyLnNpemUoKTsKKyAgICB9CisKKyNpZmRlZiBTSDRfQVNTRU1CTEVSX1RS
QUNJTkcKKyAgICBzdGF0aWMgdm9pZCBwcmludEluc3RyKHVpbnQxNl90IG9wYywgdW5zaWduZWQg
aW50IHNpemUsIGJvb2wgaXNkb3VibGVJbnN0ID0gdHJ1ZSkKKyAgICB7CisgICAgICAgIGlmICgh
Z2V0ZW52KCJKYXZhU2NyaXB0Q29yZUR1bXBKSVQiKSkKKyAgICAgICAgICAgIHJldHVybjsKKwor
ICAgICAgICBjb25zdCBjaGFyICpmb3JtYXQgPSAwOworICAgICAgICBwcmludGZTdGRvdXRJbnN0
cigib2Zmc2V0OiAweCU4Ljh4XHQiLCBzaXplKTsKKyAgICAgICAgc3dpdGNoIChvcGMpIHsKKyAg
ICAgICAgY2FzZSBCUktfT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBCUktcbiI7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBOT1BfT1BDT0RFOgorICAgICAgICAg
ICAgZm9ybWF0ID0gIiAgICBOT1BcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBSVFNfT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0iICAgICpSVFNcbiI7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTRVRTX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1h
dCA9ICIgICAgU0VUU1xuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNFVFRf
T1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBTRVRUXG4iOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgQ0xSVF9PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAi
ICAgIENMUlRcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBGU0NIR19PUENP
REU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIEZTQ0hHXG4iOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGZvcm1hdCkgeworICAgICAgICAgICAgcHJpbnRm
U3Rkb3V0SW5zdHIoZm9ybWF0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
ICAgICBzd2l0Y2ggKG9wYyAmIDB4ZjBmZikgeworICAgICAgICBjYXNlIEJSQUZfT1BDT0RFOgor
ICAgICAgICAgICAgZm9ybWF0ID0gIiAgICAqQlJBRiBSJWRcbiI7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBEVF9PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIERU
IFIlZFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENNUFBMX09QQ09ERToK
KyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgQ01QL1BMIFIlZFxuIjsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIENNUFBaX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIg
ICAgQ01QL1BaIFIlZFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEpNUF9P
UENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgICpKTVAgQFIlZFxuIjsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIEpTUl9PUENPREU6CisgICAgICAgICAgICBmb3JtYXQg
PSAiICAgICpKU1IgQFIlZFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIExE
U1BSX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgTERTIFIlZCwgUFJcbiI7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBMRFNMUFJfT1BDT0RFOgorICAgICAgICAg
ICAgZm9ybWF0ID0gIiAgICBMRFMuTCBAUiVkKywgUFJcbiI7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBNT1ZUX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgTU9W
VCBSJWRcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTSEFMX09QQ09ERToK
KyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgU0hBTCBSJWRcbiI7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBTSEFSX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAg
U0hBUiBSJWRcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTSExMX09QQ09E
RToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgU0hMTCBSJWRcbiI7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBTSExMMl9PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAi
ICAgIFNITEwyIFIlZFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNITEw4
X09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgU0hMTDggUiVkXG4iOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU0hMTDE2X09QQ09ERToKKyAgICAgICAgICAgIGZv
cm1hdCA9ICIgICAgU0hMTDE2IFIlZFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIFNITFJfT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBTSExSIFIlZFxuIjsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNITFIyX09QQ09ERToKKyAgICAgICAg
ICAgIGZvcm1hdCA9ICIgICAgU0hMUjIgUiVkXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgU0hMUjhfT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBTSExSOCBS
JWRcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTSExSMTZfT1BDT0RFOgor
ICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBTSExSMTYgUiVkXG4iOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgU1RTUFJfT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAg
ICBTVFMgUFIsIFIlZFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNUU0xQ
Ul9PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIFNUUy5MIFBSLCBALVIlZFxuIjsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIExEU19STV9GUFVMX09QQ09ERToKKyAg
ICAgICAgICAgIGZvcm1hdCA9ICIgICAgTERTIFIlZCwgRlBVTFxuIjsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIFNUU19GUFVMX1JOX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1h
dCA9ICIgICAgU1RTIEZQVUwsIFIlZCBcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBGTERTX0ZSTV9GUFVMX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgRkxE
UyBGUiVkLCBGUFVMXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRlNUU19G
UFVMX0ZSTl9PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIEZTVFMgRlBVTCwgUiVk
IFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIExEU0ZQU0NSX09QQ09ERToK
KyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgTERTIFIlZCwgRlBTQ1IgXG4iOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgU1RTRlBTQ1JfT1BDT0RFOgorICAgICAgICAgICAgZm9y
bWF0ID0gIiAgICBTVFMgRlBTQ1IsIFIlZCBcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBTVFNNQUNMX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgU1RTIE1B
Q0wsIFIlZCBcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTVFNNQUNIX09Q
Q09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgU1RTIE1BQ0gsIFIlZCBcbiI7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBCU1JGX09QQ09ERToKKyAgICAgICAgICAgIGZv
cm1hdCA9ICIgICAgKkJTUkYgUiVkIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IEZUUkNfT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBGVFJDIEZSJWQsIEZQVUxc
biI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAoZm9ybWF0KSB7
CisgICAgICAgICAgICBwcmludGZTdGRvdXRJbnN0cihmb3JtYXQsIGdldFJuKG9wYykpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHN3aXRjaCAob3BjICYgMHhmMGZm
KSB7CisgICAgICAgIGNhc2UgRk5FR19PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAg
IEZORUcgRFIlZFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEZMT0FUX09Q
Q09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgRkxPQVQgRFIlZFxuIjsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIEZUUkNfT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0
ID0gIiAgICBGVFJDIEZSJWQsIEZQVUxcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBGU1FSVF9PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIEZTUVJUIEZSJWRc
biI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBGQ05WRFNfRFJNX0ZQVUxfT1BD
T0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBGQ05WRFMgRlIlZCwgRlBVTFxuIjsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmIChmb3JtYXQpIHsKKyAgICAg
ICAgICAgIGlmIChpc2RvdWJsZUluc3QpCisgICAgICAgICAgICAgICAgcHJpbnRmU3Rkb3V0SW5z
dHIoZm9ybWF0LCBnZXREUm4ob3BjKSA8PCAxKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICBwcmludGZTdGRvdXRJbnN0cihmb3JtYXQsIGdldFJuKG9wYykpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHN3aXRjaCAob3BjICYgMHhmMDBmKSB7Cisg
ICAgICAgIGNhc2UgQUREX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgQUREIFIl
ZCwgUiVkXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQUREQ19PUENPREU6
CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIEFEREMgUiVkLCBSJWRcbiI7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBBRERWX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9
ICIgICAgQUREViBSJWQsIFIlZFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IEFORF9PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIEFORCBSJWQsIFIlZFxuIjsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIERJVjFfT1BDT0RFOgorICAgICAgICAg
ICAgZm9ybWF0ID0gIiAgICBESVYxIFIlZCwgUiVkXG4iOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgQ01QRVFfT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBDTVAv
RVEgUiVkLCBSJWRcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDTVBHRV9P
UENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIENNUC9HRSBSJWQsIFIlZFxuIjsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENNUEdUX09QQ09ERToKKyAgICAgICAgICAg
IGZvcm1hdCA9ICIgICAgQ01QL0dUIFIlZCwgUiVkXG4iOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgQ01QSElfT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBDTVAv
SEkgUiVkLCBSJWRcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDTVBIU19P
UENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIENNUC9IUyBSJWQsIFIlZFxuIjsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE1PVl9PUENPREU6CisgICAgICAgICAgICBm
b3JtYXQgPSAiICAgIE1PViBSJWQsIFIlZFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIE1PVkJfV1JJVEVfUk5fT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBN
T1YuQiBSJWQsIEBSJWRcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBNT1ZC
X1dSSVRFX1JOREVDX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgTU9WLkIgUiVk
LCBALVIlZFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE1PVkJfV1JJVEVf
UjBSTl9PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIE1PVi5CIFIlZCwgQChSMCwg
UiVkKVxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE1PVkJfUkVBRF9STV9P
UENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIE1PVi5CIEBSJWQsIFIlZFxuIjsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE1PVkJfUkVBRF9STUlOQ19PUENPREU6Cisg
ICAgICAgICAgICBmb3JtYXQgPSAiICAgIE1PVi5CIEBSJWQrLCBSJWRcbiI7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBNT1ZCX1JFQURfUjBSTV9PUENPREU6CisgICAgICAgICAg
ICBmb3JtYXQgPSAiICAgIE1PVi5CIEAoUjAsIFIlZCksIFIlZFxuIjsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIE1PVkxfV1JJVEVfUk5fT1BDT0RFOgorICAgICAgICAgICAgZm9y
bWF0ID0gIiAgICBNT1YuTCBSJWQsIEBSJWRcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBNT1ZMX1dSSVRFX1JOREVDX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIg
ICAgTU9WLkwgUiVkLCBALVIlZFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IE1PVkxfV1JJVEVfUjBSTl9PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIE1PVi5M
IFIlZCwgQChSMCwgUiVkKVxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE1P
VkxfUkVBRF9STV9PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIE1PVi5MIEBSJWQs
IFIlZFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE1PVkxfUkVBRF9STUlO
Q19PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIE1PVi5MIEBSJWQrLCBSJWRcbiI7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBNT1ZMX1JFQURfUjBSTV9PUENPREU6
CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIE1PVi5MIEAoUjAsIFIlZCksIFIlZFxuIjsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE1VTExfT1BDT0RFOgorICAgICAgICAgICAg
Zm9ybWF0ID0gIiAgICBNVUwuTCBSJWQsIFIlZFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIERNVUxMX0xfT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBETVVM
VS5MIFIlZCwgUiVkXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRE1VTFNM
X09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgRE1VTFMuTCBSJWQsIFIlZFxuIjsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE5FR19PUENPREU6CisgICAgICAgICAg
ICBmb3JtYXQgPSAiICAgIE5FRyBSJWQsIFIlZFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIE5FR0NfT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBORUdDIFIl
ZCwgUiVkXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTk9UX09QQ09ERToK
KyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgTk9UIFIlZCwgUiVkXG4iOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgT1JfT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAg
ICBPUiBSJWQsIFIlZFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNIQURf
T1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBTSEFEIFIlZCwgUiVkXG4iOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU0hMRF9PUENPREU6CisgICAgICAgICAgICBm
b3JtYXQgPSAiICAgIFNITEQgUiVkLCBSJWRcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBTVUJfT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBTVUIgUiVkLCBS
JWRcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTVUJDX09QQ09ERToKKyAg
ICAgICAgICAgIGZvcm1hdCA9ICIgICAgU1VCQyBSJWQsIFIlZFxuIjsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIFNVQlZfT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAg
ICBTVUJWIFIlZCwgUiVkXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVFNU
X09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgVFNUIFIlZCwgUiVkXG4iOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgWE9SX09QQ09ERToKKyAgICAgICAgICAgIGZv
cm1hdCA9ICIgICAgWE9SIFIlZCwgUiVkXG4iO2JyZWFrOworICAgICAgICBjYXNlIE1PVldfV1JJ
VEVfUk5fT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBNT1YuVyBSJWQsIEBSJWRc
biI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBNT1ZXX1JFQURfUk1fT1BDT0RF
OgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBNT1YuVyBAUiVkLCBSJWRcbiI7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBNT1ZXX1JFQURfUjBSTV9PUENPREU6CisgICAgICAg
ICAgICBmb3JtYXQgPSAiICAgIE1PVi5XIEAoUjAsIFIlZCksIFIlZFxuIjsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIEVYVFVXX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9
ICIgICAgRVhUVS5XIFIlZCwgUiVkXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgaWYgKGZvcm1hdCkgeworICAgICAgICAgICAgcHJpbnRmU3Rkb3V0SW5zdHIoZm9y
bWF0LCBnZXRSbShvcGMpLCBnZXRSbihvcGMpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgICAgICBzd2l0Y2ggKG9wYyAmIDB4ZjAwZikgeworICAgICAgICBjYXNlIEZTVUJf
T1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBGU1VCIEZSJWQsIEZSJWRcbiI7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBGQUREX09QQ09ERToKKyAgICAgICAgICAg
IGZvcm1hdCA9ICIgICAgRkFERCBGUiVkLCBGUiVkXG4iOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgRkRJVl9PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIEZESVYg
RlIlZCwgRlIlZFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEZNVUxfT1BD
T0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBETVVMTCBGUiVkLCBGUiVkXG4iOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRk1PVl9PUENPREU6CisgICAgICAgICAgICBm
b3JtYXQgPSAiICAgIEZNT1YgRlIlZCwgRlIlZFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIEZDTVBFUV9PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIEZDTVAv
RVEgRlIlZCwgRlIlZFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEZDTVBH
VF9PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIEZDTVAvR1QgRlIlZCwgRlIlZFxu
IjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmIChmb3JtYXQpIHsK
KyAgICAgICAgICAgIGlmIChpc2RvdWJsZUluc3QpCisgICAgICAgICAgICAgICAgcHJpbnRmU3Rk
b3V0SW5zdHIoZm9ybWF0LCBnZXREUm0ob3BjKSA8PCAxLCBnZXREUm4ob3BjKSA8PCAxKTsKKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBwcmludGZTdGRvdXRJbnN0cihmb3JtYXQs
IGdldFJtKG9wYyksIGdldFJuKG9wYykpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisgICAgICAgIHN3aXRjaCAob3BjICYgMHhmMDBmKSB7CisgICAgICAgIGNhc2UgRk1PVlNfV1JJ
VEVfUk5fREVDX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgJXMgRlIlZCwgQC1S
JWRcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBGTU9WU19XUklURV9STl9P
UENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgICVzIEZSJWQsIEBSJWRcbiI7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBGTU9WU19XUklURV9SMFJOX09QQ09ERToKKyAg
ICAgICAgICAgIGZvcm1hdCA9ICIgICAgJXMgRlIlZCwgQChSMCwgUiVkKVxuIjsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmIChmb3JtYXQpIHsKKyAgICAgICAgICAg
IGlmIChpc2RvdWJsZUluc3QpCisgICAgICAgICAgICAgICAgcHJpbnRmU3Rkb3V0SW5zdHIoZm9y
bWF0LCAiRk1PViIsIGdldERSbShvcGMpIDw8IDEsIGdldERSbihvcGMpKTsKKyAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICBwcmludGZTdGRvdXRJbnN0cihmb3JtYXQsICJGTU9WLlMi
LCBnZXRSbShvcGMpLCBnZXRSbihvcGMpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorICAgICAgICBzd2l0Y2ggKG9wYyAmIDB4ZjAwZikgeworICAgICAgICBjYXNlIEZNT1ZTX1JF
QURfUk1fT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICAlcyBAUiVkLCBGUiVkXG4i
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRk1PVlNfUkVBRF9STV9JTkNfT1BD
T0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICAlcyBAUiVkKywgRlIlZFxuIjsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEZNT1ZTX1JFQURfUjBSTV9PUENPREU6CisgICAg
ICAgICAgICBmb3JtYXQgPSAiICAgICVzIEAoUjAsIFIlZCksIEZSJWRcbiI7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAoZm9ybWF0KSB7CisgICAgICAgICAgICBp
ZiAoaXNkb3VibGVJbnN0KQorICAgICAgICAgICAgICAgIHByaW50ZlN0ZG91dEluc3RyKGZvcm1h
dCwgIkZNT1YiLCBnZXREUm0ob3BjKSwgZ2V0RFJuKG9wYykgPDwgMSk7CisgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgcHJpbnRmU3Rkb3V0SW5zdHIoZm9ybWF0LCAiRk1PVi5TIiwg
Z2V0Um0ob3BjKSwgZ2V0Um4ob3BjKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICAgICAgc3dpdGNoIChvcGMgJiAweGZmMDApIHsKKyAgICAgICAgY2FzZSBCRl9PUENPREU6
CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIEJGICVkXG4iOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgQkZTX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgKkJG
L1MgJWRcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBTkRJTU1fT1BDT0RF
OgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBBTkQgIyVkLCBSMFxuIjsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIEJUX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIg
ICAgQlQgJWRcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBCVFNfT1BDT0RF
OgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICAqQlQvUyAlZFxuIjsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIENNUEVRSU1NX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9
ICIgICAgQ01QL0VRICMlZCwgUjBcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBNT1ZCX1dSSVRFX09GRkdCUl9PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIE1P
Vi5CIFIwLCBAKCVkLCBHQlIpXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
TU9WQl9SRUFEX09GRkdCUl9PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIE1PVi5C
IEAoJWQsIEdCUiksIFIwXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTU9W
TF9XUklURV9PRkZHQlJfT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBNT1YuTCBS
MCwgQCglZCwgR0JSKVxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE1PVkxf
UkVBRF9PRkZHQlJfT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBNT1YuTCBAKCVk
LCBHQlIpLCBSMFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE1PVkFfUkVB
RF9PRkZQQ19PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIE1PVkEgQCglZCwgUEMp
LCBSMFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE9SSU1NX09QQ09ERToK
KyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgT1IgIyVkLCBSMFxuIjsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIE9SQklNTV9PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAi
ICAgIE9SLkIgIyVkLCBAKFIwLCBHQlIpXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgVFNUSU1NX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgVFNUICMlZCwg
UjBcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUU1RCX09QQ09ERToKKyAg
ICAgICAgICAgIGZvcm1hdCA9ICIgICAgVFNULkIgJWQsIEAoUjAsIEdCUilcbiI7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBYT1JJTU1fT1BDT0RFOgorICAgICAgICAgICAgZm9y
bWF0ID0gIiAgICBYT1IgIyVkLCBSMFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIFhPUkJfT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBYT1IuQiAlZCwgQChS
MCwgR0JSKVxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmIChm
b3JtYXQpIHsKKyAgICAgICAgICAgIHByaW50ZlN0ZG91dEluc3RyKGZvcm1hdCwgZ2V0SW1tOChv
cGMpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBzd2l0Y2ggKG9w
YyAmIDB4ZmYwMCkgeworICAgICAgICBjYXNlIE1PVkJfV1JJVEVfT0ZGUk5fT1BDT0RFOgorICAg
ICAgICAgICAgZm9ybWF0ID0gIiAgICBNT1YuQiBSMCwgQCglZCwgUiVkKVxuIjsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIE1PVkJfUkVBRF9PRkZSTV9PUENPREU6CisgICAgICAg
ICAgICBmb3JtYXQgPSAiICAgIE1PVi5CIEAoJWQsIFIlZCksIFIwXG4iOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGZvcm1hdCkgeworICAgICAgICAgICAgcHJp
bnRmU3Rkb3V0SW5zdHIoZm9ybWF0LCBnZXREaXNwKG9wYyksIGdldFJtKG9wYykpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHN3aXRjaCAob3BjICYgMHhmMDAwKSB7
CisgICAgICAgIGNhc2UgQlJBX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgKkJS
QSAlZFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEJTUl9PUENPREU6Cisg
ICAgICAgICAgICBmb3JtYXQgPSAiICAgICpCU1IgJWRcbiI7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICBpZiAoZm9ybWF0KSB7CisgICAgICAgICAgICBwcmludGZTdGRv
dXRJbnN0cihmb3JtYXQsIGdldEltbTEyKG9wYykpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgICAgIHN3aXRjaCAob3BjICYgMHhmMDAwKSB7CisgICAgICAgIGNhc2UgTU9W
TF9SRUFEX09GRlBDX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgTU9WLkwgQCgl
ZCwgUEMpLCBSJWRcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBRERJTU1f
T1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBBREQgIyVkLCBSJWRcbiI7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBNT1ZJTU1fT1BDT0RFOgorICAgICAgICAgICAg
Zm9ybWF0ID0gIiAgICBNT1YgIyVkLCBSJWRcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBNT1ZXX1JFQURfT0ZGUENfT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAg
ICBNT1YuVyBAKCVkLCBQQyksIFIlZFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgICAgIGlmIChmb3JtYXQpIHsKKyAgICAgICAgICAgIHByaW50ZlN0ZG91dEluc3RyKGZv
cm1hdCwgZ2V0SW1tOChvcGMpLCBnZXRSbihvcGMpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgICAgICBzd2l0Y2ggKG9wYyAmIDB4ZjAwMCkgeworICAgICAgICBjYXNlIE1P
VkxfV1JJVEVfT0ZGUk5fT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBNT1YuTCBS
JWQsIEAoJWQsIFIlZClcbiI7CisgICAgICAgICAgICBwcmludGZTdGRvdXRJbnN0cihmb3JtYXQs
IGdldFJtKG9wYyksIGdldERpc3Aob3BjKSwgZ2V0Um4ob3BjKSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBNT1ZMX1JFQURfT0ZGUk1fT1BDT0RFOgorICAgICAgICAgICAgZm9y
bWF0ID0gIiAgICBNT1YuTCBAKCVkLCBSJWQpLCBSJWRcbiI7CisgICAgICAgICAgICBwcmludGZT
dGRvdXRJbnN0cihmb3JtYXQsIGdldERpc3Aob3BjKSwgZ2V0Um0ob3BjKSwgZ2V0Um4ob3BjKSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN0YXRpYyB2b2lk
IHByaW50ZlN0ZG91dEluc3RyKGNvbnN0IGNoYXIqIGZvcm1hdCwgLi4uKQorICAgIHsKKyAgICAg
ICAgaWYgKGdldGVudigiSmF2YVNjcmlwdENvcmVEdW1wSklUIikpIHsKKyAgICAgICAgICAgIHZh
X2xpc3QgYXJnczsKKyAgICAgICAgICAgIHZhX3N0YXJ0KGFyZ3MsIGZvcm1hdCk7CisgICAgICAg
ICAgICB2cHJpbnRmU3Rkb3V0SW5zdHIoZm9ybWF0LCBhcmdzKTsKKyAgICAgICAgICAgIHZhX2Vu
ZChhcmdzKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN0YXRpYyB2b2lkIHZwcmludGZTdGRv
dXRJbnN0cihjb25zdCBjaGFyKiBmb3JtYXQsIHZhX2xpc3QgYXJncykKKyAgICB7CisgICAgICAg
IGlmIChnZXRlbnYoIkphdmFTY3JpcHRDb3JlRHVtcEpJVCIpKQorICAgICAgICAgICAgdmZwcmlu
dGYoc3Rkb3V0LCBmb3JtYXQsIGFyZ3MpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIHByaW50
QmxvY2tJbnN0cih1aW50MTZfdCogZmlyc3QsIHVuc2lnbmVkIGludCBvZmZzZXQsIGludCBuYklu
c3RyKQorICAgIHsKKyAgICAgICAgcHJpbnRmU3Rkb3V0SW5zdHIoIj4+IHJlcGF0Y2ggaW5zdHJ1
Y3Rpb25zIGFmdGVyIGxpbmtcbiIpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8PSBuYklu
c3RyOyBpKyspCisgICAgICAgICAgIHByaW50SW5zdHIoKihmaXJzdCArIGkpLCBvZmZzZXQgKyBp
KTsKKyAgICAgICAgcHJpbnRmU3Rkb3V0SW5zdHIoIj4+IGVuZCByZXBhdGNoXG4iKTsKKyAgICB9
CisjZWxzZQorICAgIHN0YXRpYyB2b2lkIHByaW50SW5zdHIodWludDE2X3Qgb3BjLCB1bnNpZ25l
ZCBpbnQgc2l6ZSwgYm9vbCBpc2RvdWJsZUluc3QgPSB0cnVlKSB7fTsKKyAgICBzdGF0aWMgdm9p
ZCBwcmludEJsb2NrSW5zdHIodWludDE2X3QqIGZpcnN0LCB1bnNpZ25lZCBpbnQgb2Zmc2V0LCBp
bnQgbmJJbnN0cikge307CisjZW5kaWYKKworcHJpdmF0ZToKKyAgICBTSDRCdWZmZXIgbV9idWZm
ZXI7CisgICAgaW50IG1fY2xhaW1zY3JhdGNoUmVnOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlND
CisKKyNlbmRpZiAvLyBFTkFCTEUoQVNTRU1CTEVSKSAmJiBDUFUoU0g0KQorCisjZW5kaWYgLy8g
U0g0QXNzZW1ibGVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lh
cnJKSVQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckpJVC5jcHAKaW5kZXgg
YmM2MWE2ZS4uZjc0MTA3YiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIv
WWFyckpJVC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckpJVC5jcHAK
QEAgLTU5LDYgKzU5LDE2IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgOiBwcml2YXRlIE1hY3JvQXNz
ZW1ibGVyIHsKICAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCByZWdUMSA9IE1JUFNSZWdpc3Rl
cnM6OnQ1OwogCiAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgcmV0dXJuUmVnaXN0ZXIgPSBN
SVBTUmVnaXN0ZXJzOjp2MDsKKyNlbGlmIENQVShTSDQpCisgICAgc3RhdGljIGNvbnN0IFJlZ2lz
dGVySUQgaW5wdXQgPSBTSDRSZWdpc3RlcnM6OnI0OworICAgIHN0YXRpYyBjb25zdCBSZWdpc3Rl
cklEIGluZGV4ID0gU0g0UmVnaXN0ZXJzOjpyNTsKKyAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJ
RCBsZW5ndGggPSBTSDRSZWdpc3RlcnM6OnI2OworICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklE
IG91dHB1dCA9IFNINFJlZ2lzdGVyczo6cjc7CisKKyAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJ
RCByZWdUMCA9IFNINFJlZ2lzdGVyczo6cjA7CisgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQg
cmVnVDEgPSBTSDRSZWdpc3RlcnM6OnIxOworCisgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQg
cmV0dXJuUmVnaXN0ZXIgPSBTSDRSZWdpc3RlcnM6OnIwOwogI2VsaWYgQ1BVKFg4NikKICAgICBz
dGF0aWMgY29uc3QgUmVnaXN0ZXJJRCBpbnB1dCA9IFg4NlJlZ2lzdGVyczo6ZWF4OwogICAgIHN0
YXRpYyBjb25zdCBSZWdpc3RlcklEIGluZGV4ID0gWDg2UmVnaXN0ZXJzOjplZHg7CkBAIC0yMTc5
LDYgKzIxODksOSBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIDogcHJpdmF0ZSBNYWNyb0Fzc2VtYmxl
ciB7CiAgICAgICAgIHB1c2goQVJNUmVnaXN0ZXJzOjpyOCk7IC8vIHNjcmF0Y2ggcmVnaXN0ZXIK
ICNlbmRpZgogICAgICAgICBtb3ZlKEFSTVJlZ2lzdGVyczo6cjMsIG91dHB1dCk7CisjZWxpZiBD
UFUoU0g0KQorICAgICAgICBwdXNoKFNINFJlZ2lzdGVyczo6cjExKTsKKyAgICAgICAgcHVzaChT
SDRSZWdpc3RlcnM6OnIxMyk7CiAjZWxpZiBDUFUoTUlQUykKICAgICAgICAgLy8gRG8gbm90aGlu
Zy4KICNlbmRpZgpAQCAtMjIwMSw2ICsyMjE0LDkgQEAgY2xhc3MgWWFyckdlbmVyYXRvciA6IHBy
aXZhdGUgTWFjcm9Bc3NlbWJsZXIgewogICAgICAgICBwb3AoQVJNUmVnaXN0ZXJzOjpyNik7CiAg
ICAgICAgIHBvcChBUk1SZWdpc3RlcnM6OnI1KTsKICAgICAgICAgcG9wKEFSTVJlZ2lzdGVyczo6
cjQpOworI2VsaWYgQ1BVKFNINCkKKyAgICAgICAgcG9wKFNINFJlZ2lzdGVyczo6cjEzKTsKKyAg
ICAgICAgcG9wKFNINFJlZ2lzdGVyczo6cjExKTsKICNlbGlmIENQVShNSVBTKQogICAgICAgICAv
LyBEbyBub3RoaW5nCiAjZW5kaWYKLS0gCjEuNy4yLjMKCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>87714</attachid>
            <date>2011-03-31 06:28:29 -0700</date>
            <delta_ts>2011-03-31 14:26:08 -0700</delta_ts>
            <desc>YARR for SH4</desc>
            <filename>0001-Add-YARR-JIT-for-SH4-Platforms.patch</filename>
            <type>text/plain</type>
            <size>126402</size>
            <attacher name="thouraya">thouraya.andolsi</attacher>
            
              <data encoding="base64">RnJvbSAxNTBhNjBhNzNiOTkxOGE5M2ZhOTdjOWFiM2MwM2U4NWQ5YTYxZTc4IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBUaG91cmF5YSBBTkRPTFNJIDx0aG91cmF5YS5hbmRvbHNpQHN0
LmNvbT4KRGF0ZTogVGh1LCAzMSBNYXIgMjAxMSAxNDoyODozNSArMDIwMApTdWJqZWN0OiBbUEFU
Q0hdIEFkZCBZQVJSIEpJVCBmb3IgU0g0IFBsYXRmb3Jtcy4KCi0tLQogU291cmNlL0phdmFTY3Jp
cHRDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgfCAgIDE2ICsKIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5hbSAgICAgICAgICAgICAgIHwgICAgMyArCiAuLi4vYXNz
ZW1ibGVyL0Fzc2VtYmxlckJ1ZmZlcldpdGhDb25zdGFudFBvb2wuaCAgICB8ICAgMjAgKwogU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5oICAgfCAgICA2ICsK
IC4uLi9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJTSDQuY3BwIHwgICA4
MiArCiAuLi4vSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyU0g0LmggICB8
IDE3NDMgKysrKysrKysrKysrKysrKysKIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
U0g0QXNzZW1ibGVyLmggICAgIHwgMjA2NyArKysrKysrKysrKysrKysrKysrKwogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3lhcnIvWWFyckpJVC5jcHAgICAgICAgICAgICAgfCAgIDE2ICsKIDggZmls
ZXMgY2hhbmdlZCwgMzk1MyBpbnNlcnRpb25zKCspLCAwIGRlbGV0aW9ucygtKQogY3JlYXRlIG1v
ZGUgMTAwNjQ0IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJT
SDQuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9NYWNyb0Fzc2VtYmxlclNINC5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9TSDRBc3NlbWJsZXIuaAoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmlu
ZGV4IDcxOTBlNmQuLjBjZTUwOTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9D
aGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDE5IEBACisyMDExLTAzLTMxICBUaG91cmF5YSBBTkRPTFNJICA8dGhvdXJheWEuYW5kb2xzaUBz
dC5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
U0g0IEpJVCBTVVBQT1JULgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NDQzMjkKKworICAgICAgICBBZGQgWUFSUiBzdXBwb3J0IGZvciBTSDQgcGxhdGZv
cm1zIChkaXNhYmxlZCBieSBkZWZhdWx0KS4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOgor
ICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5oOgorICAgICAgICAqIGFzc2VtYmxl
ci9NYWNyb0Fzc2VtYmxlclNINC5jcHA6IEFkZGVkLgorICAgICAgICAqIGFzc2VtYmxlci9NYWNy
b0Fzc2VtYmxlclNINC5oOiBBZGRlZC4KKyAgICAgICAgKiBhc3NlbWJsZXIvU0g0QXNzZW1ibGVy
Lmg6IEFkZGVkLgorICAgICAgICAqIHlhcnIvWWFyckpJVC5jcHA6CisKIDIwMTEtMDMtMzAgIEFk
YW0gUm9iZW4gIDxhcm9iZW5AYXBwbGUuY29tPgogCiAgICAgICAgIENsZWFuIGJ1aWxkIGZpeApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtCmluZGV4IGQ5MmY0NjIuLjBhYjlmYTggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5hbQorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUuYW0KQEAgLTkxLDYgKzkxLDkgQEAgamF2YXNj
cmlwdGNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9N
YWNyb0Fzc2VtYmxlclg4Nl82NC5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvTWFjcm9Bc3NlbWJsZXJYODYuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9NYWNyb0Fzc2VtYmxlclNINC5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL01hY3JvQXNzZW1ibGVyU0g0LmNwcCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9TSDRBc3NlbWJsZXIuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9S
ZXBhdGNoQnVmZmVyLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNz
ZW1ibGVyLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3Bw
IFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQXNzZW1ibGVy
QnVmZmVyV2l0aENvbnN0YW50UG9vbC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9Bc3NlbWJsZXJCdWZmZXJXaXRoQ29uc3RhbnRQb29sLmgKaW5kZXggOWE5NjE4Zi4uM2NmYzY3
YiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9Bc3NlbWJsZXJC
dWZmZXJXaXRoQ29uc3RhbnRQb29sLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9Bc3NlbWJsZXJCdWZmZXJXaXRoQ29uc3RhbnRQb29sLmgKQEAgLTg1LDcgKzg1LDE0IEBA
IG5hbWVzcGFjZSBKU0MgewogdGVtcGxhdGUgPGludCBtYXhQb29sU2l6ZSwgaW50IGJhcnJpZXJT
aXplLCBpbnQgbWF4SW5zdHJ1Y3Rpb25TaXplLCBjbGFzcyBBc3NlbWJsZXJUeXBlPgogY2xhc3Mg
QXNzZW1ibGVyQnVmZmVyV2l0aENvbnN0YW50UG9vbDogcHVibGljIEFzc2VtYmxlckJ1ZmZlciB7
CiAgICAgdHlwZWRlZiBTZWdtZW50ZWRWZWN0b3I8dWludDMyX3QsIDUxMj4gTG9hZE9mZnNldHM7
CisgICAgdXNpbmcgQXNzZW1ibGVyQnVmZmVyOjpwdXRJbnRlZ3JhbDsKKyAgICB1c2luZyBBc3Nl
bWJsZXJCdWZmZXI6OnB1dEludGVncmFsVW5jaGVja2VkOwogcHVibGljOgorICAgIHR5cGVkZWYg
c3RydWN0IHsKKyAgICAgICAgc2hvcnQgaGlnaDsKKyAgICAgICAgc2hvcnQgbG93OworICAgIH0g
VHdvU2hvcnRzOworCiAgICAgZW51bSB7CiAgICAgICAgIFVuaXF1ZUNvbnN0LAogICAgICAgICBS
ZXVzYWJsZUNvbnN0LApAQCAtMTcxLDYgKzE3OCwxOSBAQCBwdWJsaWM6CiAgICAgICAgIGNvcnJl
Y3REZWx0YXMoOCk7CiAgICAgfQogCisgICAgdm9pZCBwdXRJbnRlZ3JhbChUd29TaG9ydHMgdmFs
dWUpCisgICAgeworICAgICAgICBpZiAobV9zaXplID4gbV9jYXBhY2l0eSAtIHNpemVvZihUd29T
aG9ydHMpKQorICAgICAgICAgICAgZ3JvdygpOworICAgICAgICBwdXRJbnRlZ3JhbFVuY2hlY2tl
ZCh2YWx1ZSk7CisgICAgfQorCisgICAgdm9pZCBwdXRJbnRlZ3JhbFVuY2hlY2tlZChUd29TaG9y
dHMgdmFsdWUpCisgICAgeworICAgICAgICBwdXRJbnRlZ3JhbFVuY2hlY2tlZCh2YWx1ZS5oaWdo
KTsKKyAgICAgICAgcHV0SW50ZWdyYWxVbmNoZWNrZWQodmFsdWUubG93KTsKKyAgICB9CisKICAg
ICBpbnQgc2l6ZSgpCiAgICAgewogICAgICAgICBmbHVzaElmTm9TcGFjZUZvcihtYXhJbnN0cnVj
dGlvblNpemUsIHNpemVvZih1aW50NjRfdCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5oCmluZGV4IGJiMTlhOTguLmNmZmI0MWQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmgKQEAg
LTUwLDYgKzUwLDEyIEBAIG5hbWVzcGFjZSBKU0MgeyB0eXBlZGVmIE1hY3JvQXNzZW1ibGVyWDg2
IE1hY3JvQXNzZW1ibGVyQmFzZTsgfTsKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlclg4Nl82NC5o
IgogbmFtZXNwYWNlIEpTQyB7IHR5cGVkZWYgTWFjcm9Bc3NlbWJsZXJYODZfNjQgTWFjcm9Bc3Nl
bWJsZXJCYXNlOyB9OwogCisjZWxpZiBDUFUoU0g0KQorI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVy
U0g0LmgiCituYW1lc3BhY2UgSlNDIHsKK3R5cGVkZWYgTWFjcm9Bc3NlbWJsZXJTSDQgTWFjcm9B
c3NlbWJsZXJCYXNlOworfTsKKwogI2Vsc2UKICNlcnJvciAiVGhlIE1hY3JvQXNzZW1ibGVyIGlz
IG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBwbGF0Zm9ybS4iCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJTSDQuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclNINC5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjcxODg0NQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJTSDQuY3BwCkBA
IC0wLDAgKzEsODIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgU1RNaWNyb2VsZWN0cm9u
aWNzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoQVNTRU1CTEVSKSAm
JiBDUFUoU0g0KQorCisjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJTSDQuaCIKKworbmFtZXNwYWNl
IEpTQyB7Citjb25zdCBDb25kaXRpb24gTWFjcm9Bc3NlbWJsZXJTSDQ6OkVxdWFsID0gU0g0QXNz
ZW1ibGVyOjpFUTsKK2NvbnN0IENvbmRpdGlvbiBNYWNyb0Fzc2VtYmxlclNINDo6Tm90RXF1YWwg
PSBTSDRBc3NlbWJsZXI6Ok5FOworY29uc3QgQ29uZGl0aW9uIE1hY3JvQXNzZW1ibGVyU0g0OjpH
cmVhdGVyVGhhbiA9IFNINEFzc2VtYmxlcjo6R1Q7Citjb25zdCBDb25kaXRpb24gTWFjcm9Bc3Nl
bWJsZXJTSDQ6OkdyZWF0ZXJUaGFuT3JFcXVhbCA9IFNINEFzc2VtYmxlcjo6R0U7Citjb25zdCBD
b25kaXRpb24gTWFjcm9Bc3NlbWJsZXJTSDQ6Okxlc3NUaGFuID0gU0g0QXNzZW1ibGVyOjpMVDsK
K2NvbnN0IENvbmRpdGlvbiBNYWNyb0Fzc2VtYmxlclNINDo6TGVzc1RoYW5PckVxdWFsID0gU0g0
QXNzZW1ibGVyOjpMRTsKK2NvbnN0IENvbmRpdGlvbiBNYWNyb0Fzc2VtYmxlclNINDo6VUdyZWF0
ZXJUaGFuID0gU0g0QXNzZW1ibGVyOjpISTsKK2NvbnN0IENvbmRpdGlvbiBNYWNyb0Fzc2VtYmxl
clNINDo6VUdyZWF0ZXJUaGFuT3JFcXVhbCA9IFNINEFzc2VtYmxlcjo6SFM7Citjb25zdCBDb25k
aXRpb24gTWFjcm9Bc3NlbWJsZXJTSDQ6OlVMZXNzVGhhbiA9IFNINEFzc2VtYmxlcjo6TEk7Citj
b25zdCBDb25kaXRpb24gTWFjcm9Bc3NlbWJsZXJTSDQ6OlVMZXNzVGhhbk9yRXF1YWwgPSBTSDRB
c3NlbWJsZXI6OkxTOworY29uc3QgQ29uZGl0aW9uIE1hY3JvQXNzZW1ibGVyU0g0OjpaZXJvID0g
U0g0QXNzZW1ibGVyOjpFUTsKK2NvbnN0IENvbmRpdGlvbiBNYWNyb0Fzc2VtYmxlclNINDo6Tm9u
WmVybyA9IFNINEFzc2VtYmxlcjo6TkU7Citjb25zdCBDb25kaXRpb24gTWFjcm9Bc3NlbWJsZXJT
SDQ6Ok92ZXJmbG93ID0gU0g0QXNzZW1ibGVyOjpPRjsKK2NvbnN0IENvbmRpdGlvbiBNYWNyb0Fz
c2VtYmxlclNINDo6QWJvdmUgPSBTSDRBc3NlbWJsZXI6OkhJOworY29uc3QgQ29uZGl0aW9uIE1h
Y3JvQXNzZW1ibGVyU0g0OjpBYm92ZU9yRXF1YWwgPSBTSDRBc3NlbWJsZXI6OkhTOworY29uc3Qg
Q29uZGl0aW9uIE1hY3JvQXNzZW1ibGVyU0g0OjpCZWxvdyA9IFNINEFzc2VtYmxlcjo6TEk7Citj
b25zdCBDb25kaXRpb24gTWFjcm9Bc3NlbWJsZXJTSDQ6OkJlbG93T3JFcXVhbCA9IFNINEFzc2Vt
Ymxlcjo6TFM7Citjb25zdCBDb25kaXRpb24gTWFjcm9Bc3NlbWJsZXJTSDQ6OkRvdWJsZUVxdWFs
ID0gU0g0QXNzZW1ibGVyOjpFUTsKK2NvbnN0IENvbmRpdGlvbiBNYWNyb0Fzc2VtYmxlclNINDo6
RG91YmxlTm90RXF1YWwgPSBTSDRBc3NlbWJsZXI6Ok5FOworY29uc3QgQ29uZGl0aW9uIE1hY3Jv
QXNzZW1ibGVyU0g0OjpEb3VibGVHcmVhdGVyVGhhbiA9IFNINEFzc2VtYmxlcjo6R1Q7Citjb25z
dCBDb25kaXRpb24gTWFjcm9Bc3NlbWJsZXJTSDQ6OkRvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbCA9
IFNINEFzc2VtYmxlcjo6R0U7Citjb25zdCBDb25kaXRpb24gTWFjcm9Bc3NlbWJsZXJTSDQ6OkRv
dWJsZUxlc3NUaGFuID0gU0g0QXNzZW1ibGVyOjpMVDsKK2NvbnN0IENvbmRpdGlvbiBNYWNyb0Fz
c2VtYmxlclNINDo6RG91YmxlTGVzc1RoYW5PckVxdWFsID0gU0g0QXNzZW1ibGVyOjpMRTsKK2Nv
bnN0IENvbmRpdGlvbiBNYWNyb0Fzc2VtYmxlclNINDo6RG91YmxlRXF1YWxPclVub3JkZXJlZCA9
IFNINEFzc2VtYmxlcjo6RVFVOworY29uc3QgQ29uZGl0aW9uIE1hY3JvQXNzZW1ibGVyU0g0OjpE
b3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkID0gU0g0QXNzZW1ibGVyOjpORVU7Citjb25zdCBDb25k
aXRpb24gTWFjcm9Bc3NlbWJsZXJTSDQ6OkRvdWJsZUdyZWF0ZXJUaGFuT3JVbm9yZGVyZWQgPSBT
SDRBc3NlbWJsZXI6OkdUVTsKK2NvbnN0IENvbmRpdGlvbiBNYWNyb0Fzc2VtYmxlclNINDo6RG91
YmxlR3JlYXRlclRoYW5PckVxdWFsT3JVbm9yZGVyZWQgPSBTSDRBc3NlbWJsZXI6OkdFVTsKK2Nv
bnN0IENvbmRpdGlvbiBNYWNyb0Fzc2VtYmxlclNINDo6RG91YmxlTGVzc1RoYW5PclVub3JkZXJl
ZCA9IFNINEFzc2VtYmxlcjo6TFRVOworY29uc3QgQ29uZGl0aW9uIE1hY3JvQXNzZW1ibGVyU0g0
OjpEb3VibGVMZXNzVGhhbk9yRXF1YWxPclVub3JkZXJlZCA9IFNINEFzc2VtYmxlcjo6TEVVOwor
Y29uc3QgQ29uZGl0aW9uIE1hY3JvQXNzZW1ibGVyU0g0OjpTaWduZWQgPSBTSDRBc3NlbWJsZXI6
OlNJOworCit2b2lkIE1hY3JvQXNzZW1ibGVyU0g0OjpsaW5rQ2FsbCh2b2lkKiBjb2RlLCBDYWxs
IGNhbGwsIEZ1bmN0aW9uUHRyIGZ1bmN0aW9uKQoreworICAgIFNINEFzc2VtYmxlcjo6bGlua0Nh
bGwoY29kZSwgY2FsbC5tX2ptcCwgZnVuY3Rpb24udmFsdWUoKSk7Cit9CisKK3ZvaWQgTWFjcm9B
c3NlbWJsZXJTSDQ6OnJlcGF0Y2hDYWxsKENvZGVMb2NhdGlvbkNhbGwgY2FsbCwgQ29kZUxvY2F0
aW9uTGFiZWwgZGVzdGluYXRpb24pCit7CisgICAgU0g0QXNzZW1ibGVyOjpyZWxpbmtDYWxsKGNh
bGwuZGF0YUxvY2F0aW9uKCksIGRlc3RpbmF0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpOworfQor
Cit2b2lkIE1hY3JvQXNzZW1ibGVyU0g0OjpyZXBhdGNoQ2FsbChDb2RlTG9jYXRpb25DYWxsIGNh
bGwsIEZ1bmN0aW9uUHRyIGRlc3RpbmF0aW9uKQoreworICAgIFNINEFzc2VtYmxlcjo6cmVsaW5r
Q2FsbChjYWxsLmRhdGFMb2NhdGlvbigpLCBkZXN0aW5hdGlvbi5leGVjdXRhYmxlQWRkcmVzcygp
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoQVNTRU1CTEVS
KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2Vt
YmxlclNINC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxl
clNINC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0YjA2MDIKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1i
bGVyU0g0LmgKQEAgLTAsMCArMSwxNzQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIw
MTEgU1RNaWNyb2VsZWN0cm9uaWNzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqLworCisjaWZuZGVmIE1hY3JvQXNzZW1ibGVyU0g0X2gK
KyNkZWZpbmUgTWFjcm9Bc3NlbWJsZXJTSDRfaAorCisjaWYgRU5BQkxFKEFTU0VNQkxFUikgJiYg
Q1BVKFNINCkKKworI2luY2x1ZGUgIkFic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaCIKKyNpbmNsdWRl
ICJTSDRBc3NlbWJsZXIuaCIKKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorCituYW1lc3Bh
Y2UgSlNDIHsKK3R5cGVkZWYgU0g0QXNzZW1ibGVyOjpDb25kaXRpb24gQ29uZGl0aW9uOworCitj
bGFzcyBNYWNyb0Fzc2VtYmxlclNINCA6IHB1YmxpYyBBYnN0cmFjdE1hY3JvQXNzZW1ibGVyPFNI
NEFzc2VtYmxlcj4geworcHVibGljOgorICAgIHR5cGVkZWYgU0g0QXNzZW1ibGVyOjpGUFJlZ2lz
dGVySUQgRlBSZWdpc3RlcklEOworCisgICAgc3RhdGljIGNvbnN0IENvbmRpdGlvbiBFcXVhbDsK
KyAgICBzdGF0aWMgY29uc3QgQ29uZGl0aW9uIE5vdEVxdWFsOworICAgIHN0YXRpYyBjb25zdCBD
b25kaXRpb24gR3JlYXRlclRoYW47CisgICAgc3RhdGljIGNvbnN0IENvbmRpdGlvbiBHcmVhdGVy
VGhhbk9yRXF1YWw7CisgICAgc3RhdGljIGNvbnN0IENvbmRpdGlvbiBMZXNzVGhhbjsKKyAgICBz
dGF0aWMgY29uc3QgQ29uZGl0aW9uIExlc3NUaGFuT3JFcXVhbDsKKyAgICBzdGF0aWMgY29uc3Qg
Q29uZGl0aW9uIFVHcmVhdGVyVGhhbjsKKyAgICBzdGF0aWMgY29uc3QgQ29uZGl0aW9uIFVHcmVh
dGVyVGhhbk9yRXF1YWw7CisgICAgc3RhdGljIGNvbnN0IENvbmRpdGlvbiBVTGVzc1RoYW47Cisg
ICAgc3RhdGljIGNvbnN0IENvbmRpdGlvbiBVTGVzc1RoYW5PckVxdWFsOworICAgIHN0YXRpYyBj
b25zdCBDb25kaXRpb24gWmVybzsKKyAgICBzdGF0aWMgY29uc3QgQ29uZGl0aW9uIE5vblplcm87
CisgICAgc3RhdGljIGNvbnN0IENvbmRpdGlvbiBPdmVyZmxvdzsKKyAgICBzdGF0aWMgY29uc3Qg
Q29uZGl0aW9uIEFib3ZlOworICAgIHN0YXRpYyBjb25zdCBDb25kaXRpb24gQWJvdmVPckVxdWFs
OworICAgIHN0YXRpYyBjb25zdCBDb25kaXRpb24gQmVsb3c7CisgICAgc3RhdGljIGNvbnN0IENv
bmRpdGlvbiBCZWxvd09yRXF1YWw7CisgICAgc3RhdGljIGNvbnN0IENvbmRpdGlvbiBEb3VibGVF
cXVhbDsKKyAgICBzdGF0aWMgY29uc3QgQ29uZGl0aW9uIERvdWJsZU5vdEVxdWFsOworICAgIHN0
YXRpYyBjb25zdCBDb25kaXRpb24gRG91YmxlR3JlYXRlclRoYW47CisgICAgc3RhdGljIGNvbnN0
IENvbmRpdGlvbiBEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWw7CisgICAgc3RhdGljIGNvbnN0IENv
bmRpdGlvbiBEb3VibGVMZXNzVGhhbjsKKyAgICBzdGF0aWMgY29uc3QgQ29uZGl0aW9uIERvdWJs
ZUxlc3NUaGFuT3JFcXVhbDsKKyAgICBzdGF0aWMgY29uc3QgQ29uZGl0aW9uIERvdWJsZUVxdWFs
T3JVbm9yZGVyZWQ7CisgICAgc3RhdGljIGNvbnN0IENvbmRpdGlvbiBEb3VibGVOb3RFcXVhbE9y
VW5vcmRlcmVkOworICAgIHN0YXRpYyBjb25zdCBDb25kaXRpb24gRG91YmxlR3JlYXRlclRoYW5P
clVub3JkZXJlZDsKKyAgICBzdGF0aWMgY29uc3QgQ29uZGl0aW9uIERvdWJsZUdyZWF0ZXJUaGFu
T3JFcXVhbE9yVW5vcmRlcmVkOworICAgIHN0YXRpYyBjb25zdCBDb25kaXRpb24gRG91YmxlTGVz
c1RoYW5PclVub3JkZXJlZDsKKyAgICBzdGF0aWMgY29uc3QgQ29uZGl0aW9uIERvdWJsZUxlc3NU
aGFuT3JFcXVhbE9yVW5vcmRlcmVkOworICAgIHN0YXRpYyBjb25zdCBDb25kaXRpb24gU2lnbmVk
OworICAgIHN0YXRpYyBjb25zdCBTY2FsZSBTY2FsZVB0ciA9IFRpbWVzRm91cjsKKyAgICBzdGF0
aWMgY29uc3QgRlBSZWdpc3RlcklEIGZzY3JhdGNoID0gU0g0UmVnaXN0ZXJzOjpmcjEwOworICAg
IHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIHN0YWNrUG9pbnRlclJlZ2lzdGVyID0gU0g0UmVnaXN0
ZXJzOjpzcDsKKyAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCBsaW5rUmVnaXN0ZXIgPSBTSDRS
ZWdpc3RlcnM6OnByOworICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIHNjcmF0Y2hSZWczID0g
U0g0UmVnaXN0ZXJzOjpyMTM7CisKKyAgICBSZWdpc3RlcklEIGNsYWltU2NyYXRjaCgpCisgICAg
eworICAgICAgICByZXR1cm4gbV9hc3NlbWJsZXIuY2xhaW1TY3JhdGNoKCk7CisgICAgfQorCisg
ICAgdm9pZCByZWxlYXNlU2NyYXRjaChSZWdpc3RlcklEIHJlZykKKyAgICB7CisgICAgICAgIG1f
YXNzZW1ibGVyLnJlbGVhc2VTY3JhdGNoKHJlZyk7CisgICAgfQorCisgICAgLy8gSW50ZWdlciBh
cml0aG1ldGljIG9wZXJhdGlvbnMKKworICAgIHZvaWQgYWRkMzIoUmVnaXN0ZXJJRCBzcmMsIFJl
Z2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmFkZGxSZWdSZWcoc3Jj
LCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIGFkZDMyKFRydXN0ZWRJbW0zMiBpbW0sIFJlZ2lz
dGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIGlmIChtX2Fzc2VtYmxlci5pc0ltbWVkaWF0ZShp
bW0ubV92YWx1ZSkpIHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZGxJbW04cihpbW0ubV92
YWx1ZSwgZGVzdCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBS
ZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBtX2Fzc2VtYmxlci5sb2Fk
Q29uc3RhbnQoaW1tLm1fdmFsdWUsIHNjcik7CisgICAgICAgIG1fYXNzZW1ibGVyLmFkZGxSZWdS
ZWcoc2NyLCBkZXN0KTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICB9CisKKyAg
ICB2b2lkIGFkZDMyKFRydXN0ZWRJbW0zMiBpbW0sIFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklE
IGRlc3QpCisgICAgeworICAgICAgICBpZiAoc3JjICE9IGRlc3QpCisgICAgICAgICAgICBtX2Fz
c2VtYmxlci5tb3ZsUmVnUmVnKHNyYywgZGVzdCk7CisgICAgICAgIGFkZDMyKGltbSwgZGVzdCk7
CisgICAgfQorCisgICAgdm9pZCBhZGQzMihUcnVzdGVkSW1tMzIgaW1tLCBBZGRyZXNzIGFkZHJl
c3MpCisgICAgeworICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAg
ICAgICBsb2FkMzIoYWRkcmVzcywgc2NyKTsKKyAgICAgICAgYWRkMzIoaW1tLCBzY3IpOworICAg
ICAgICBzdG9yZTMyKHNjciwgYWRkcmVzcyk7CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7
CisgICAgfQorCisgICAgdm9pZCBhZGQzMihBZGRyZXNzIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQor
ICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAg
bG9hZDMyKHNyYywgc2NyKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuYWRkbFJlZ1JlZyhzY3IsIGRl
c3QpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgIH0KKworICAgIHZvaWQgYW5k
MzIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNz
ZW1ibGVyLmFuZGxSZWdSZWcoc3JjLCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIGFuZDMyKFRy
dXN0ZWRJbW0zMiBpbW0sIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIGlmICgoaW1t
Lm1fdmFsdWUgPD0gMjU1KSAmJiAoaW1tLm1fdmFsdWUgPj0gMCkgJiYgKGRlc3QgPT0gU0g0UmVn
aXN0ZXJzOjpyMCkpIHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFuZGxJbW04cihpbW0ubV92
YWx1ZSwgZGVzdCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBS
ZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBtX2Fzc2VtYmxlci5sb2Fk
Q29uc3RhbnQoKGltbS5tX3ZhbHVlKSwgc2NyKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuYW5kbFJl
Z1JlZyhzY3IsIGRlc3QpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgIH0KKwor
ICAgIHZvaWQgbHNoaWZ0MzIoUmVnaXN0ZXJJRCBzaGlmdGFtb3VudCwgUmVnaXN0ZXJJRCBkZXN0
KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuc2hsbFJlZ1JlZyhkZXN0LCBzaGlmdGFtb3Vu
dCk7CisgICAgfQorCisgICAgdm9pZCByc2hpZnQzMihpbnQgaW1tLCBSZWdpc3RlcklEIGRlc3Qp
CisgICAgeworICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAg
ICBtX2Fzc2VtYmxlci5sb2FkQ29uc3RhbnQoLWltbSwgc2NyKTsKKyAgICAgICAgbV9hc3NlbWJs
ZXIuc2hhUmVnUmVnKGRlc3QsIHNjcik7CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7Cisg
ICAgfQorCisgICAgdm9pZCBsc2hpZnQzMihUcnVzdGVkSW1tMzIgaW1tLCBSZWdpc3RlcklEIGRl
c3QpCisgICAgeworICAgICAgICBpZiAoKGltbS5tX3ZhbHVlID09IDEpIHx8IChpbW0ubV92YWx1
ZSA9PSAyKSB8fCAoaW1tLm1fdmFsdWUgPT0gOCkgfHwgKGltbS5tX3ZhbHVlID09IDE2KSkgewor
ICAgICAgICAgICAgbV9hc3NlbWJsZXIuc2hsbEltbThyKGltbS5tX3ZhbHVlLCBkZXN0KTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0g
Y2xhaW1TY3JhdGNoKCk7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvYWRDb25zdGFudChpbW0ubV92
YWx1ZSwgc2NyKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuc2hsbFJlZ1JlZyhkZXN0LCBzY3IpOwor
ICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgIH0KKworICAgIHZvaWQgbXVsMzIoUmVn
aXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVy
LmltdWxsUmVnUmVnKHNyYywgZGVzdCk7CisgICAgICAgIG1fYXNzZW1ibGVyLnN0c21hY2woZGVz
dCk7CisgICAgfQorCisgICAgdm9pZCBtdWwzMihUcnVzdGVkSW1tMzIgaW1tLCBSZWdpc3RlcklE
IHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBj
bGFpbVNjcmF0Y2goKTsKKyAgICAgICAgbW92ZShpbW0sIHNjcik7CisgICAgICAgIGlmICAoc3Jj
ICE9IGRlc3QpCisgICAgICAgICAgICBtb3ZlKHNyYywgZGVzdCk7CisgICAgICAgIG11bDMyKHNj
ciwgIGRlc3QpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgIH0KKworICAgIHZv
aWQgbm90MzIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAg
IG1fYXNzZW1ibGVyLm5vdGxSZWcoc3JjLCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIG9yMzIo
UmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1i
bGVyLm9ybFJlZ1JlZyhzcmMsIGRlc3QpOworICAgIH0KKworICAgIHZvaWQgb3IzMihUcnVzdGVk
SW1tMzIgaW1tLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBpZiAoKGltbS5tX3Zh
bHVlIDw9IDI1NSkgJiYgKGltbS5tX3ZhbHVlID49IDApICYmIChkZXN0ID09IFNINFJlZ2lzdGVy
czo6cjApKSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5vcmxJbW04cihpbW0ubV92YWx1ZSwg
ZGVzdCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBSZWdpc3Rl
cklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBtX2Fzc2VtYmxlci5sb2FkQ29uc3Rh
bnQoaW1tLm1fdmFsdWUsIHNjcik7CisgICAgICAgIG1fYXNzZW1ibGVyLm9ybFJlZ1JlZyhzY3Is
IGRlc3QpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgIH0KKworICAgIHZvaWQg
cnNoaWZ0MzIoUmVnaXN0ZXJJRCBzaGlmdGFtb3VudCwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsK
KyAgICAgICAgY29tcGFyZTMyKDMyLCBzaGlmdGFtb3VudCwgRXF1YWwpOworICAgICAgICBtX2Fz
c2VtYmxlci5lbnN1cmVTcGFjZShtX2Fzc2VtYmxlci5tYXhJbnN0cnVjdGlvblNpemUgKyA0KTsK
KyAgICAgICAgbV9hc3NlbWJsZXIuYnJhbmNoKEJUX09QQ09ERSwgMSk7CisgICAgICAgIG1fYXNz
ZW1ibGVyLm5lZyhzaGlmdGFtb3VudCwgc2hpZnRhbW91bnQpOworICAgICAgICBtX2Fzc2VtYmxl
ci5zaGFSZWdSZWcoZGVzdCwgc2hpZnRhbW91bnQpOworICAgIH0KKworICAgIHZvaWQgcnNoaWZ0
MzIoVHJ1c3RlZEltbTMyIGltbSwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgaWYg
KGltbS5tX3ZhbHVlICYgMHgxZikKKyAgICAgICAgICAgIHJzaGlmdDMyKGltbS5tX3ZhbHVlICYg
MHgxZiwgZGVzdCk7CisgICAgfQorCisgICAgdm9pZCBzdWIzMihSZWdpc3RlcklEIHNyYywgUmVn
aXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuc3VibFJlZ1JlZyhzcmMs
IGRlc3QpOworICAgIH0KKworICAgIHZvaWQgc3ViMzIoVHJ1c3RlZEltbTMyIGltbSwgQWJzb2x1
dGVBZGRyZXNzIGFkZHJlc3MsIFJlZ2lzdGVySUQgc2NyYXRjaFJlZykKKyAgICB7CisgICAgICAg
IFJlZ2lzdGVySUQgcmVzdWx0ID0gY2xhaW1TY3JhdGNoKCk7CisKKyAgICAgICAgbV9hc3NlbWJs
ZXIubG9hZENvbnN0YW50KHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3Q+KGFkZHJlc3MubV9wdHIp
LCBzY3JhdGNoUmVnKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubW92bE1lbVJlZyhzY3JhdGNoUmVn
LCByZXN1bHQpOworCisgICAgICAgIGlmIChtX2Fzc2VtYmxlci5pc0ltbWVkaWF0ZSgtaW1tLm1f
dmFsdWUpKQorICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRkbEltbThyKC1pbW0ubV92YWx1ZSwg
cmVzdWx0KTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5sb2FkQ29u
c3RhbnQoaW1tLm1fdmFsdWUsIHNjcmF0Y2hSZWczKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVy
LnN1YmxSZWdSZWcoc2NyYXRjaFJlZzMsIHJlc3VsdCk7CisgICAgICAgIH0KKworICAgICAgICBz
dG9yZTMyKHJlc3VsdCwgc2NyYXRjaFJlZyk7CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHJlc3Vs
dCk7CisgICAgfQorCisgICAgdm9pZCBzdWIzMihUcnVzdGVkSW1tMzIgaW1tLCBBYnNvbHV0ZUFk
ZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIFJlZ2lzdGVySUQgcmVzdWx0ID0gY2xhaW1T
Y3JhdGNoKCk7CisgICAgICAgIFJlZ2lzdGVySUQgc2NyYXRjaFJlZyA9IGNsYWltU2NyYXRjaCgp
OworCisgICAgICAgIG1fYXNzZW1ibGVyLmxvYWRDb25zdGFudChyZWludGVycHJldF9jYXN0PHVp
bnQzMl90PihhZGRyZXNzLm1fcHRyKSwgc2NyYXRjaFJlZyk7CisgICAgICAgIG1fYXNzZW1ibGVy
Lm1vdmxNZW1SZWcoc2NyYXRjaFJlZywgcmVzdWx0KTsKKworICAgICAgICBpZiAobV9hc3NlbWJs
ZXIuaXNJbW1lZGlhdGUoLWltbS5tX3ZhbHVlKSkKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFk
ZGxJbW04cigtaW1tLm1fdmFsdWUsIHJlc3VsdCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgbV9hc3NlbWJsZXIubG9hZENvbnN0YW50KGltbS5tX3ZhbHVlLCBzY3JhdGNoUmVnMyk7Cisg
ICAgICAgICAgICBtX2Fzc2VtYmxlci5zdWJsUmVnUmVnKHNjcmF0Y2hSZWczLCByZXN1bHQpOwor
ICAgICAgICB9CisKKyAgICAgICAgc3RvcmUzMihyZXN1bHQsIHNjcmF0Y2hSZWcpOworICAgICAg
ICByZWxlYXNlU2NyYXRjaChyZXN1bHQpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3JhdGNo
UmVnKTsKKyAgICB9CisKKyAgICB2b2lkIGFkZDMyKFRydXN0ZWRJbW0zMiBpbW0sIEFic29sdXRl
QWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklEIHNjcmF0Y2hSZWcpCisgICAgeworICAgICAgICBS
ZWdpc3RlcklEIHJlc3VsdCA9IGNsYWltU2NyYXRjaCgpOworCisgICAgICAgIG1fYXNzZW1ibGVy
LmxvYWRDb25zdGFudChyZWludGVycHJldF9jYXN0PHVpbnQzMl90PihhZGRyZXNzLm1fcHRyKSwg
c2NyYXRjaFJlZyk7CisgICAgICAgIG1fYXNzZW1ibGVyLm1vdmxNZW1SZWcoc2NyYXRjaFJlZywg
cmVzdWx0KTsKKworICAgICAgICBpZiAobV9hc3NlbWJsZXIuaXNJbW1lZGlhdGUoaW1tLm1fdmFs
dWUpKQorICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRkbEltbThyKGltbS5tX3ZhbHVlLCByZXN1
bHQpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmxvYWRDb25zdGFu
dChpbW0ubV92YWx1ZSwgc2NyYXRjaFJlZzMpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRk
bFJlZ1JlZyhzY3JhdGNoUmVnMywgcmVzdWx0KTsKKyAgICAgICAgfQorCisgICAgICAgIHN0b3Jl
MzIocmVzdWx0LCBzY3JhdGNoUmVnKTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2gocmVzdWx0KTsK
KyAgICB9CisKKyAgICB2b2lkIGFkZDMyKFRydXN0ZWRJbW0zMiBpbW0sIEFic29sdXRlQWRkcmVz
cyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCByZXN1bHQgPSBjbGFpbVNjcmF0
Y2goKTsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3JhdGNoUmVnID0gY2xhaW1TY3JhdGNoKCk7CisK
KyAgICAgICAgbV9hc3NlbWJsZXIubG9hZENvbnN0YW50KHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMy
X3Q+KGFkZHJlc3MubV9wdHIpLCBzY3JhdGNoUmVnKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubW92
bE1lbVJlZyhzY3JhdGNoUmVnLCByZXN1bHQpOworCisgICAgICAgIGlmIChtX2Fzc2VtYmxlci5p
c0ltbWVkaWF0ZShpbW0ubV92YWx1ZSkpCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGRsSW1t
OHIoaW1tLm1fdmFsdWUsIHJlc3VsdCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgbV9h
c3NlbWJsZXIubG9hZENvbnN0YW50KGltbS5tX3ZhbHVlLCBzY3JhdGNoUmVnMyk7CisgICAgICAg
ICAgICBtX2Fzc2VtYmxlci5hZGRsUmVnUmVnKHNjcmF0Y2hSZWczLCByZXN1bHQpOworICAgICAg
ICB9CisKKyAgICAgICAgc3RvcmUzMihyZXN1bHQsIHNjcmF0Y2hSZWcpOworICAgICAgICByZWxl
YXNlU2NyYXRjaChyZXN1bHQpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3JhdGNoUmVnKTsK
KyAgICB9CisKKyAgICB2b2lkIHN1YjMyKFRydXN0ZWRJbW0zMiBpbW0sIFJlZ2lzdGVySUQgZGVz
dCkKKyAgICB7CisgICAgICAgIGlmIChtX2Fzc2VtYmxlci5pc0ltbWVkaWF0ZSgtaW1tLm1fdmFs
dWUpKSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGRsSW1tOHIoLWltbS5tX3ZhbHVlLCBk
ZXN0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIFJlZ2lzdGVy
SUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvYWRDb25zdGFu
dChpbW0ubV92YWx1ZSwgc2NyKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuc3VibFJlZ1JlZyhzY3Is
IGRlc3QpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgIH0KKworICAgIHZvaWQg
c3ViMzIoQWRkcmVzcyBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIFJlZ2lz
dGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIGxvYWQzMihzcmMsIHNjcik7Cisg
ICAgICAgIG1fYXNzZW1ibGVyLnN1YmxSZWdSZWcoc2NyLCBkZXN0KTsKKyAgICAgICAgcmVsZWFz
ZVNjcmF0Y2goc2NyKTsKKyAgICB9CisKKyAgICB2b2lkIHhvcjMyKFJlZ2lzdGVySUQgc3JjLCBS
ZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci54b3JsUmVnUmVnKHNy
YywgZGVzdCk7CisgICAgfQorCisgICAgdm9pZCB4b3IzMihUcnVzdGVkSW1tMzIgaW1tLCBSZWdp
c3RlcklEIHNyY0Rlc3QpCisgICAgeworICAgICAgICBpZiAoKHNyY0Rlc3QgIT0gU0g0UmVnaXN0
ZXJzOjpyMCkgfHwgKGltbS5tX3ZhbHVlID4gMjU1KSB8fCAoaW1tLm1fdmFsdWUgPCAwKSkgewor
ICAgICAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgICAg
IG1fYXNzZW1ibGVyLmxvYWRDb25zdGFudCgoaW1tLm1fdmFsdWUpLCBzY3IpOworICAgICAgICAg
ICAgbV9hc3NlbWJsZXIueG9ybFJlZ1JlZyhzY3IsIHNyY0Rlc3QpOworICAgICAgICAgICAgcmVs
ZWFzZVNjcmF0Y2goc2NyKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAg
ICAgIG1fYXNzZW1ibGVyLnhvcmxJbW04cihpbW0ubV92YWx1ZSwgc3JjRGVzdCk7CisgICAgfQor
CisgICAgdm9pZCBjb21wYXJlMzIoaW50IGltbSwgUmVnaXN0ZXJJRCBkc3QsIENvbmRpdGlvbiBj
b25kKQorICAgIHsKKyAgICAgICAgaWYgKCgoY29uZCA9PSBFcXVhbCkgfHwgKGNvbmQgPT0gTm90
RXF1YWwpKSAmJiAoZHN0ID09IFNINFJlZ2lzdGVyczo6cjApICYmIG1fYXNzZW1ibGVyLmlzSW1t
ZWRpYXRlKGltbSkpIHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmNtcEVxSW1tUjAoaW1tLCBk
c3QsIGNvbmQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgUmVn
aXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9hZENv
bnN0YW50KGltbSwgc2NyKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuY21wbFJlZ1JlZyhzY3IsIGRz
dCwgY29uZCk7CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgfQorCisgICAgdm9p
ZCBjb21wYXJlMzIoaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGxlZnQs
IENvbmRpdGlvbiBjb25kKQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNj
cmF0Y2goKTsKKyAgICAgICAgaWYgKCFvZmZzZXQpIHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVy
Lm1vdmxNZW1SZWcoYmFzZSwgc2NyKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmNtcGxSZWdS
ZWcoc2NyLCBsZWZ0LCBjb25kKTsKKyAgICAgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoKG9mZnNldCA8IDAp
IHx8IChvZmZzZXQgPj0gNjQpKSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5sb2FkQ29uc3Rh
bnQob2Zmc2V0LCBzY3IpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRkbFJlZ1JlZyhiYXNl
LCBzY3IpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIubW92bE1lbVJlZyhzY3IsIHNjcik7Cisg
ICAgICAgICAgICBtX2Fzc2VtYmxlci5jbXBsUmVnUmVnKHNjciwgbGVmdCwgY29uZCk7CisgICAg
ICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisKKyAgICAgICAgbV9hc3NlbWJsZXIubW92bE1lbVJlZyhvZmZzZXQgPj4gMiwgYmFzZSwg
c2NyKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuY21wbFJlZ1JlZyhzY3IsIGxlZnQsIGNvbmQpOwor
ICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgIH0KKworICAgIHZvaWQgdGVzdEltbShp
bnQgaW1tLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UpCisgICAgeworICAgICAgICBSZWdp
c3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBSZWdpc3RlcklEIHNjcjEgPSBj
bGFpbVNjcmF0Y2goKTsKKworICAgICAgICBpZiAoKG9mZnNldCA8IDApIHx8IChvZmZzZXQgPj0g
NjQpKSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5sb2FkQ29uc3RhbnQob2Zmc2V0LCBzY3Ip
OworICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRkbFJlZ1JlZyhiYXNlLCBzY3IpOworICAgICAg
ICAgICAgbV9hc3NlbWJsZXIubW92bE1lbVJlZyhzY3IsIHNjcik7CisgICAgICAgIH0gZWxzZSBp
ZiAob2Zmc2V0KQorICAgICAgICAgICAgbV9hc3NlbWJsZXIubW92bE1lbVJlZyhvZmZzZXQgPj4g
MiwgYmFzZSwgc2NyKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9hc3NlbWJsZXIubW92
bE1lbVJlZyhiYXNlLCBzY3IpOworICAgICAgICBpZiAobV9hc3NlbWJsZXIuaXNJbW1lZGlhdGUo
aW1tKSkKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLm1vdkltbTgoaW1tLCBzY3IxKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgbV9hc3NlbWJsZXIubG9hZENvbnN0YW50KGltbSwgc2NyMSk7
CisKKyAgICAgICAgbV9hc3NlbWJsZXIudGVzdGxSZWdSZWcoc2NyLCBzY3IxKTsKKyAgICAgICAg
cmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyMSk7CisgICAg
fQorCisgICAgdm9pZCB0ZXN0bEltbShpbnQgaW1tLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7Cisg
ICAgICAgIGlmICgoZHN0ID09IFNINFJlZ2lzdGVyczo6cjApICYmIChpbW0gPD0gMjU1KSAmJiAo
aW1tID49IDApKSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci50ZXN0bEltbThyKGltbSwgZHN0
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIFJlZ2lzdGVySUQg
c2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvYWRDb25zdGFudChp
bW0sIHNjcik7CisgICAgICAgIG1fYXNzZW1ibGVyLnRlc3RsUmVnUmVnKHNjciwgZHN0KTsKKyAg
ICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICB9CisKKyAgICB2b2lkIGNvbXBhcmUzMihS
ZWdpc3RlcklEIHJpZ2h0LCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIENvbmRpdGlvbiBj
b25kKQorICAgIHsKKyAgICAgICAgaWYgKCFvZmZzZXQpIHsKKyAgICAgICAgICAgIFJlZ2lzdGVy
SUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5tb3ZsTWVt
UmVnKGJhc2UsIHNjcik7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5jbXBsUmVnUmVnKHJpZ2h0
LCBzY3IsIGNvbmQpOworICAgICAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgob2Zmc2V0IDwgMCkgfHwgKG9m
ZnNldCA+PSA2NCkpIHsKKyAgICAgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNo
KCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5sb2FkQ29uc3RhbnQob2Zmc2V0LCBzY3IpOwor
ICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRkbFJlZ1JlZyhiYXNlLCBzY3IpOworICAgICAgICAg
ICAgbV9hc3NlbWJsZXIubW92bE1lbVJlZyhzY3IsIHNjcik7CisgICAgICAgICAgICBtX2Fzc2Vt
Ymxlci5jbXBsUmVnUmVnKHJpZ2h0LCBzY3IsIGNvbmQpOworICAgICAgICAgICAgcmVsZWFzZVNj
cmF0Y2goc2NyKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIFJl
Z2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIG1fYXNzZW1ibGVyLm1vdmxN
ZW1SZWcob2Zmc2V0ID4+IDIsIGJhc2UsIHNjcik7CisgICAgICAgIG1fYXNzZW1ibGVyLmNtcGxS
ZWdSZWcocmlnaHQsIHNjciwgY29uZCk7CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7Cisg
ICAgfQorCisgICAgdm9pZCBjb21wYXJlMzIoaW50IGltbSwgaW50IG9mZnNldCwgUmVnaXN0ZXJJ
RCBiYXNlLCBDb25kaXRpb24gY29uZCkKKyAgICB7CisgICAgICAgIGlmICghb2Zmc2V0KSB7Cisg
ICAgICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICAgICAg
UmVnaXN0ZXJJRCBzY3IxID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxl
ci5tb3ZsTWVtUmVnKGJhc2UsIHNjcik7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5sb2FkQ29u
c3RhbnQoaW1tLCBzY3IxKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmNtcGxSZWdSZWcoc2Ny
MSwgc2NyLCBjb25kKTsKKyAgICAgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcjEpOworICAgICAg
ICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorCisgICAgICAgIGlmICgob2Zmc2V0IDwgMCkgfHwgKG9mZnNldCA+PSA2NCkpIHsKKyAgICAg
ICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgICAgICBSZWdp
c3RlcklEIHNjcjEgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmxv
YWRDb25zdGFudChvZmZzZXQsIHNjcik7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGRsUmVn
UmVnKGJhc2UsIHNjcik7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5tb3ZsTWVtUmVnKHNjciwg
c2NyKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmxvYWRDb25zdGFudChpbW0sIHNjcjEpOwor
ICAgICAgICAgICAgbV9hc3NlbWJsZXIuY21wbFJlZ1JlZyhzY3IxLCBzY3IsIGNvbmQpOworICAg
ICAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyMSk7CisgICAgICAgICAgICByZWxlYXNlU2NyYXRj
aChzY3IpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgUmVnaXN0
ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IxID0gY2xh
aW1TY3JhdGNoKCk7CisgICAgICAgIG1fYXNzZW1ibGVyLm1vdmxNZW1SZWcob2Zmc2V0ID4+IDIs
IGJhc2UsIHNjcik7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvYWRDb25zdGFudChpbW0sIHNjcjEp
OworICAgICAgICBtX2Fzc2VtYmxlci5jbXBsUmVnUmVnKHNjcjEsIHNjciwgY29uZCk7CisgICAg
ICAgIHJlbGVhc2VTY3JhdGNoKHNjcjEpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOwor
ICAgIH0KKworICAgIC8vIE1lbW9yeSBhY2Nlc3Mgb3BlcmF0aW9uCisKKyAgICB2b2lkIGxvYWQz
MihJbXBsaWNpdEFkZHJlc3MgYWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAg
ICAgbG9hZDMyKGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5vZmZzZXQsIGRlc3QpOworICAgIH0KKwor
ICAgIHZvaWQgbG9hZDgoSW1wbGljaXRBZGRyZXNzIGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkK
KyAgICB7CisgICAgICAgIGxvYWQ4KGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5vZmZzZXQsIGRlc3Qp
OworICAgIH0KKworICAgIHZvaWQgbG9hZDMyKEJhc2VJbmRleCBhZGRyZXNzLCBSZWdpc3RlcklE
IGRlc3QpCisgICAgeworICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOwor
ICAgICAgICBtb3ZlKGFkZHJlc3MuaW5kZXgsIHNjcik7CisgICAgICAgIGxzaGlmdDMyKFRydXN0
ZWRJbW0zMihhZGRyZXNzLnNjYWxlKSwgc2NyKTsKKyAgICAgICAgYWRkMzIoYWRkcmVzcy5iYXNl
LCBzY3IpOworICAgICAgICBsb2FkMzIoc2NyLCBhZGRyZXNzLm9mZnNldCwgZGVzdCk7CisgICAg
ICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgfQorCisgICAgdm9pZCBsb2FkMzIodm9pZCog
YWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9h
ZENvbnN0YW50KHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3Q+KGFkZHJlc3MpLCBkZXN0KTsKKyAg
ICAgICAgbV9hc3NlbWJsZXIubW92bE1lbVJlZyhkZXN0LCBkZXN0KTsKKyAgICB9CisKKyAgICB2
b2lkIGxvYWQzMihSZWdpc3RlcklEIGJhc2UsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgZGVzdCkK
KyAgICB7CisgICAgICAgIGlmICghb2Zmc2V0KSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5t
b3ZsTWVtUmVnKGJhc2UsIGRlc3QpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKChvZmZzZXQgPj0gMCkgJiYgKG9mZnNldCA8IDY0KSkgeworICAgICAgICAg
ICAgbV9hc3NlbWJsZXIubW92bE1lbVJlZyhvZmZzZXQgPj4gMiwgYmFzZSwgZGVzdCk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoKGRlc3QgPT0gU0g0UmVn
aXN0ZXJzOjpyMCkgJiYgKGRlc3QgIT0gYmFzZSkpIHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVy
LmxvYWRDb25zdGFudCgob2Zmc2V0KSwgZGVzdCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5t
b3ZsUjBtcihiYXNlLCBkZXN0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisg
ICAgICAgIFJlZ2lzdGVySUQgc2NyOworICAgICAgICBpZiAoZGVzdCA9PSBiYXNlKQorICAgICAg
ICAgICAgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNj
ciA9IGRlc3Q7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvYWRDb25zdGFudCgob2Zmc2V0KSwgc2Ny
KTsKKyAgICAgICAgbV9hc3NlbWJsZXIuYWRkbFJlZ1JlZyhiYXNlLCBzY3IpOworICAgICAgICBt
X2Fzc2VtYmxlci5tb3ZsTWVtUmVnKHNjciwgZGVzdCk7CisKKyAgICAgICAgaWYgKGRlc3QgPT0g
YmFzZSkKKyAgICAgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgfQorCisgICAgdm9p
ZCBsb2FkOChSZWdpc3RlcklEIGJhc2UsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgZGVzdCkKKyAg
ICB7CisgICAgICAgIGlmICghb2Zmc2V0KSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5tb3Zi
TWVtUmVnKGJhc2UsIGRlc3QpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAg
ICAgICAgaWYgKChvZmZzZXQgPiAwKSAmJiAob2Zmc2V0IDwgNjQpICYmIChkZXN0ID09IFNINFJl
Z2lzdGVyczo6cjApKSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5tb3ZiTWVtUmVnKG9mZnNl
dCwgYmFzZSwgZGVzdCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAg
ICBpZiAoYmFzZSAhPSBkZXN0KSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5sb2FkQ29uc3Rh
bnQoKG9mZnNldCksIGRlc3QpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRkbFJlZ1JlZyhi
YXNlLCBkZXN0KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLm1vdmJNZW1SZWcoZGVzdCwgZGVz
dCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBSZWdpc3RlcklE
IHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBtX2Fzc2VtYmxlci5sb2FkQ29uc3RhbnQo
KG9mZnNldCksIHNjcik7CisgICAgICAgIG1fYXNzZW1ibGVyLmFkZGxSZWdSZWcoYmFzZSwgc2Ny
KTsKKyAgICAgICAgbV9hc3NlbWJsZXIubW92Yk1lbVJlZyhzY3IsIGRlc3QpOworICAgICAgICBy
ZWxlYXNlU2NyYXRjaChzY3IpOworICAgIH0KKworICAgIHZvaWQgbG9hZDMyKFJlZ2lzdGVySUQg
cjAsIFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIEFTU0VS
VChyMCA9PSBTSDRSZWdpc3RlcnM6OnIwKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubW92bFIwbXIo
c3JjLCBkc3QpOworICAgIH0KKworICAgIHZvaWQgbG9hZDMyKFJlZ2lzdGVySUQgc3JjLCBSZWdp
c3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLm1vdmxNZW1SZWcoc3JjLCBk
c3QpOworICAgIH0KKworICAgIHZvaWQgbG9hZDE2KEltcGxpY2l0QWRkcmVzcyBhZGRyZXNzLCBS
ZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBpZiAoIWFkZHJlc3Mub2Zmc2V0KSB7Cisg
ICAgICAgICAgICBtX2Fzc2VtYmxlci5tb3Z3TWVtUmVnKGFkZHJlc3MuYmFzZSwgZGVzdCk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoKGFkZHJlc3Mub2Zm
c2V0ID4gMCkgJiYgKGFkZHJlc3Mub2Zmc2V0IDwgNjQpICYmIChkZXN0ID09IFNINFJlZ2lzdGVy
czo6cjApKSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5tb3Z3TWVtUmVnKGFkZHJlc3Mub2Zm
c2V0LCBhZGRyZXNzLmJhc2UsIGRlc3QpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKGFkZHJlc3MuYmFzZSAhPSBkZXN0KSB7CisgICAgICAgICAgICBtX2Fz
c2VtYmxlci5sb2FkQ29uc3RhbnQoKGFkZHJlc3Mub2Zmc2V0KSwgZGVzdCk7CisgICAgICAgICAg
ICBtX2Fzc2VtYmxlci5hZGRsUmVnUmVnKGFkZHJlc3MuYmFzZSwgZGVzdCk7CisgICAgICAgICAg
ICBtX2Fzc2VtYmxlci5tb3Z3TWVtUmVnKGRlc3QsIGRlc3QpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsK
KyAgICAgICAgbV9hc3NlbWJsZXIubG9hZENvbnN0YW50KChhZGRyZXNzLm9mZnNldCksIHNjcik7
CisgICAgICAgIG1fYXNzZW1ibGVyLmFkZGxSZWdSZWcoYWRkcmVzcy5iYXNlLCBzY3IpOworICAg
ICAgICBtX2Fzc2VtYmxlci5tb3Z3TWVtUmVnKHNjciwgZGVzdCk7CisgICAgICAgIHJlbGVhc2VT
Y3JhdGNoKHNjcik7CisgICAgfQorCisgICAgdm9pZCBsb2FkMTYoUmVnaXN0ZXJJRCBzcmMsIFJl
Z2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLm1vdndNZW1SZWcoc3Jj
LCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIGxvYWQxNihSZWdpc3RlcklEIHIwLCBSZWdpc3Rl
cklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKHIwID09IFNI
NFJlZ2lzdGVyczo6cjApOworICAgICAgICBtX2Fzc2VtYmxlci5tb3Z3UjBtcihzcmMsIGRlc3Qp
OworICAgIH0KKworICAgIHZvaWQgbG9hZDE2KEJhc2VJbmRleCBhZGRyZXNzLCBSZWdpc3RlcklE
IGRlc3QpCisgICAgeworICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOwor
CisgICAgICAgIG1vdmUoYWRkcmVzcy5pbmRleCwgc2NyKTsKKyAgICAgICAgbHNoaWZ0MzIoVHJ1
c3RlZEltbTMyKGFkZHJlc3Muc2NhbGUpLCBzY3IpOworCisgICAgICAgIGlmIChhZGRyZXNzLm9m
ZnNldCkKKyAgICAgICAgICAgIGFkZDMyKFRydXN0ZWRJbW0zMihhZGRyZXNzLm9mZnNldCksIHNj
cik7CisgICAgICAgIGlmIChzY3IgPT0gU0g0UmVnaXN0ZXJzOjpyMCkKKyAgICAgICAgICAgIG1f
YXNzZW1ibGVyLm1vdndSMG1yKGFkZHJlc3MuYmFzZSwgc2NyKTsKKyAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICBhZGQzMihhZGRyZXNzLmJhc2UsIHNjcik7CisgICAgICAgICAgICBsb2FkMTYo
c2NyLCBzY3IpOworICAgICAgICB9CisKKyAgICAgICAgZXh0dXcoc2NyLCBkZXN0KTsKKyAgICAg
ICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICB9CisKKyAgICB2b2lkIHN0b3JlMzIoUmVnaXN0
ZXJJRCBzcmMsIEltcGxpY2l0QWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgUmVnaXN0
ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgc3RvcmUzMihzcmMsIGFkZHJlc3Mu
b2Zmc2V0LCBhZGRyZXNzLmJhc2UsIHNjcik7CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7
CisgICAgfQorCisgICAgdm9pZCBzdG9yZTMyKFJlZ2lzdGVySUQgc3JjLCBpbnQgb2Zmc2V0LCBS
ZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgc2NyKQorICAgIHsKKyAgICAgICAgaWYgKCFvZmZz
ZXQpIHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLm1vdmxSZWdNZW0oc3JjLCBiYXNlKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgob2Zmc2V0ID49MCkg
JiYgKG9mZnNldCA8IDY0KSkgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIubW92bFJlZ01lbShz
cmMsIG9mZnNldCA+PiAyLCBiYXNlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
CisgICAgICAgIG1fYXNzZW1ibGVyLmxvYWRDb25zdGFudCgob2Zmc2V0KSwgc2NyKTsKKyAgICAg
ICAgaWYgKHNjciA9PSBTSDRSZWdpc3RlcnM6OnIwKSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxl
ci5tb3ZsUmVnTWVtcjAoc3JjLCBiYXNlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorCisgICAgICAgIG1fYXNzZW1ibGVyLmFkZGxSZWdSZWcoYmFzZSwgc2NyKTsKKyAgICAgICAg
bV9hc3NlbWJsZXIubW92bFJlZ01lbShzcmMsIHNjcik7CisgICAgfQorCisgICAgdm9pZCBzdG9y
ZTMyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlKQor
ICAgIHsKKyAgICAgICAgQVNTRVJUKG9mZnNldCA9PSBTSDRSZWdpc3RlcnM6OnIwKTsKKyAgICAg
ICAgbV9hc3NlbWJsZXIubW92bFJlZ01lbXIwKHNyYywgYmFzZSk7CisgICAgfQorCisgICAgdm9p
ZCBzdG9yZTMyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAg
IG1fYXNzZW1ibGVyLm1vdmxSZWdNZW0oc3JjLCBkc3QpOworICAgIH0KKworICAgIHZvaWQgc3Rv
cmUzMihUcnVzdGVkSW1tMzIgaW1tLCBJbXBsaWNpdEFkZHJlc3MgYWRkcmVzcykKKyAgICB7Cisg
ICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIFJlZ2lzdGVy
SUQgc2NyMSA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBtX2Fzc2VtYmxlci5sb2FkQ29uc3Rh
bnQoKGltbS5tX3ZhbHVlKSwgc2NyKTsKKyAgICAgICAgc3RvcmUzMihzY3IsIGFkZHJlc3Mub2Zm
c2V0LCBhZGRyZXNzLmJhc2UsIHNjcjEpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOwor
ICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IxKTsKKyAgICB9CisKKyAgICB2b2lkIHN0b3JlMzIo
UmVnaXN0ZXJJRCBzcmMsIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgUmVnaXN0
ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKworICAgICAgICBtb3ZlKGFkZHJlc3MuaW5kZXgs
IHNjcik7CisgICAgICAgIGxzaGlmdDMyKFRydXN0ZWRJbW0zMihhZGRyZXNzLnNjYWxlKSwgc2Ny
KTsKKyAgICAgICAgYWRkMzIoYWRkcmVzcy5iYXNlLCBzY3IpOworICAgICAgICBzdG9yZTMyKHNy
YywgQWRkcmVzcyhzY3IsIGFkZHJlc3Mub2Zmc2V0KSk7CisKKyAgICAgICAgcmVsZWFzZVNjcmF0
Y2goc2NyKTsKKyAgICB9CisKKyAgICB2b2lkIHN0b3JlMzIoVHJ1c3RlZEltbTMyIGltbSwgdm9p
ZCogYWRkcmVzcykKKyAgICB7CisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNo
KCk7CisgICAgICAgIFJlZ2lzdGVySUQgc2NyMSA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBt
X2Fzc2VtYmxlci5sb2FkQ29uc3RhbnQoKGltbS5tX3ZhbHVlKSwgc2NyKTsKKyAgICAgICAgbV9h
c3NlbWJsZXIubG9hZENvbnN0YW50KHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3Q+KGFkZHJlc3Mp
LCBzY3IxKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubW92bE1lbVJlZyhzY3IsIHNjcjEpOworICAg
ICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IxKTsK
KyAgICB9CisKKyAgICB2b2lkIHN0b3JlMzIoUmVnaXN0ZXJJRCBzcmMsIHZvaWQqIGFkZHJlc3Mp
CisgICAgeworICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAg
ICBtX2Fzc2VtYmxlci5sb2FkQ29uc3RhbnQocmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdD4oYWRk
cmVzcyksIHNjcik7CisgICAgICAgIG1fYXNzZW1ibGVyLm1vdmxNZW1SZWcoc3JjLCBzY3IpOwor
ICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgIH0KKworICAgIERhdGFMYWJlbDMyIGxv
YWQzMldpdGhBZGRyZXNzT2Zmc2V0UGF0Y2goQWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklEIGRl
c3QpCisgICAgeworICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAg
ICAgICBEYXRhTGFiZWwzMiBsYWJlbCh0aGlzKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9hZENv
bnN0YW50VW5SZXVzYWJsZShhZGRyZXNzLm9mZnNldCwgc2NyKTsKKyAgICAgICAgbV9hc3NlbWJs
ZXIuYWRkbFJlZ1JlZyhhZGRyZXNzLmJhc2UsIHNjcik7CisgICAgICAgIG1fYXNzZW1ibGVyLm1v
dmxNZW1SZWcoc2NyLCBkZXN0KTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICAg
ICAgcmV0dXJuIGxhYmVsOworICAgIH0KKworICAgIERhdGFMYWJlbDMyIHN0b3JlMzJXaXRoQWRk
cmVzc09mZnNldFBhdGNoKFJlZ2lzdGVySUQgc3JjLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgewor
ICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBEYXRhTGFi
ZWwzMiBsYWJlbCh0aGlzKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9hZENvbnN0YW50VW5SZXVz
YWJsZShhZGRyZXNzLm9mZnNldCwgc2NyKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuYWRkbFJlZ1Jl
ZyhhZGRyZXNzLmJhc2UsIHNjcik7CisgICAgICAgIG1fYXNzZW1ibGVyLm1vdmxSZWdNZW0oc3Jj
LCBzY3IpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgICAgICByZXR1cm4gbGFi
ZWw7CisgICAgfQorCisgICAgIC8vIEZsb2F0aW5nLXBvaW50IG9wZXJhdGlvbnMKKworICAgIGJv
b2wgc3VwcG9ydHNGbG9hdGluZ1BvaW50KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorICAgIGJv
b2wgc3VwcG9ydHNGbG9hdGluZ1BvaW50VHJ1bmNhdGUoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9
CisgICAgYm9vbCBzdXBwb3J0c0Zsb2F0aW5nUG9pbnRTcXJ0KCkgY29uc3QgeyByZXR1cm4gdHJ1
ZTsgfQorCisgICAgdm9pZCBsb2FkRG91YmxlKEltcGxpY2l0QWRkcmVzcyBhZGRyZXNzLCBGUFJl
Z2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3Jh
dGNoKCk7CisKKyAgICAgICAgbV9hc3NlbWJsZXIubG9hZENvbnN0YW50KGFkZHJlc3Mub2Zmc2V0
LCBzY3IpOworICAgICAgICBpZiAoYWRkcmVzcy5iYXNlID09IFNINFJlZ2lzdGVyczo6cjApIHsK
KyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmZtb3ZzUmVhZHIwcihzY3IsIChGUFJlZ2lzdGVySUQp
KGRlc3QgKyAxKSk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGRsSW1tOHIoNCwgc2NyKTsK
KyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmZtb3ZzUmVhZHIwcihzY3IsIGRlc3QpOworICAgICAg
ICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorCisgICAgICAgIG1fYXNzZW1ibGVyLmFkZGxSZWdSZWcoYWRkcmVzcy5iYXNlLCBzY3IpOwor
ICAgICAgICBtX2Fzc2VtYmxlci5mbW92c1JlYWRybWluYyhzY3IsIChGUFJlZ2lzdGVySUQpKGRl
c3QgKyAxKSk7CisgICAgICAgIG1fYXNzZW1ibGVyLmZtb3ZzUmVhZHJtKHNjciwgZGVzdCk7Cisg
ICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgfQorCisgICAgdm9pZCBsb2FkRG91Ymxl
KGNvbnN0IHZvaWQqIGFkZHJlc3MsIEZQUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAg
UmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9h
ZENvbnN0YW50KHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3Q+KGFkZHJlc3MpLCBzY3IpOworICAg
ICAgICBtX2Fzc2VtYmxlci5mbW92c1JlYWRybWluYyhzY3IsIChGUFJlZ2lzdGVySUQpKGRlc3Qg
KyAxKSk7CisgICAgICAgIG1fYXNzZW1ibGVyLmZtb3ZzUmVhZHJtKHNjciwgZGVzdCk7CisgICAg
ICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgfQorCisgICAgdm9pZCBzdG9yZURvdWJsZShG
UFJlZ2lzdGVySUQgc3JjLCBJbXBsaWNpdEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAg
IFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIG1fYXNzZW1ibGVyLmxv
YWRDb25zdGFudChhZGRyZXNzLm9mZnNldCwgc2NyKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuYWRk
bFJlZ1JlZyhhZGRyZXNzLmJhc2UsIHNjcik7CisgICAgICAgIG1fYXNzZW1ibGVyLmZtb3ZzV3Jp
dGVybSgoRlBSZWdpc3RlcklEKShzcmMgKyAxKSwgc2NyKTsKKyAgICAgICAgbV9hc3NlbWJsZXIu
YWRkbEltbThyKDQsIHNjcik7CisgICAgICAgIG1fYXNzZW1ibGVyLmZtb3ZzV3JpdGVybShzcmMs
IHNjcik7CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgfQorCisgICAgdm9pZCBh
ZGREb3VibGUoRlBSZWdpc3RlcklEIHNyYywgRlBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAg
ICAgICBtX2Fzc2VtYmxlci5kYWRkUmVnUmVnKHNyYywgZGVzdCk7CisgICAgfQorCisgICAgdm9p
ZCBhZGREb3VibGUoQWRkcmVzcyBhZGRyZXNzLCBGUFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7Cisg
ICAgICAgIGxvYWREb3VibGUoYWRkcmVzcywgZnNjcmF0Y2gpOworICAgICAgICBhZGREb3VibGUo
ZnNjcmF0Y2gsIGRlc3QpOworICAgIH0KKworICAgIHZvaWQgc3ViRG91YmxlKEZQUmVnaXN0ZXJJ
RCBzcmMsIEZQUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuZHN1
YlJlZ1JlZyhzcmMsIGRlc3QpOworICAgIH0KKworICAgIHZvaWQgc3ViRG91YmxlKEFkZHJlc3Mg
YWRkcmVzcywgRlBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBsb2FkRG91YmxlKGFk
ZHJlc3MsIGZzY3JhdGNoKTsKKyAgICAgICAgc3ViRG91YmxlKGZzY3JhdGNoLCBkZXN0KTsKKyAg
ICB9CisKKyAgICB2b2lkIG11bERvdWJsZShGUFJlZ2lzdGVySUQgc3JjLCBGUFJlZ2lzdGVySUQg
ZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmRtdWxSZWdSZWcoc3JjLCBkZXN0KTsK
KyAgICB9CisKKyAgICB2b2lkIG11bERvdWJsZShBZGRyZXNzIGFkZHJlc3MsIEZQUmVnaXN0ZXJJ
RCBkZXN0KQorICAgIHsKKyAgICAgICAgbG9hZERvdWJsZShhZGRyZXNzLCBmc2NyYXRjaCk7Cisg
ICAgICAgIG11bERvdWJsZShmc2NyYXRjaCwgZGVzdCk7CisgICAgfQorCisgICAgdm9pZCBkaXZE
b3VibGUoRlBSZWdpc3RlcklEIHNyYywgRlBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAg
ICBtX2Fzc2VtYmxlci5kZGl2UmVnUmVnKHNyYywgZGVzdCk7CisgICAgfQorCisgICAgdm9pZCBj
b252ZXJ0SW50MzJUb0RvdWJsZShSZWdpc3RlcklEIHNyYywgRlBSZWdpc3RlcklEIGRlc3QpCisg
ICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sZHNybWZwdWwoc3JjKTsKKyAgICAgICAgbV9hc3Nl
bWJsZXIuZmxvYXRmcHVsRHJlZyhkZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIGNvbnZlcnRJbnQz
MlRvRG91YmxlKEFic29sdXRlQWRkcmVzcyBzcmMsIEZQUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsK
KyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgbV9hc3Nl
bWJsZXIubG9hZENvbnN0YW50KHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3Q+KHNyYy5tX3B0ciks
IHNjcik7CisgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKHNjciwgZGVzdCk7CisgICAgICAg
IHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgfQorCisgICAgdm9pZCBjb252ZXJ0SW50MzJUb0Rv
dWJsZShBZGRyZXNzIHNyYywgRlBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBSZWdp
c3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBsb2FkMzIoc3JjLCBzY3IpOwor
ICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShzY3IsIGRlc3QpOworICAgICAgICByZWxlYXNl
U2NyYXRjaChzY3IpOworICAgIH0KKworICAgIHZvaWQgbG9hZDMyV2l0aFVuYWxpZ25lZEhhbGZX
b3JkcyhCYXNlSW5kZXggYWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAg
UmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKworICAgICAgICBtb3ZlKGFkZHJlc3Mu
aW5kZXgsIHNjcik7CisgICAgICAgIGxzaGlmdDMyKFRydXN0ZWRJbW0zMihhZGRyZXNzLnNjYWxl
KSwgc2NyKTsKKyAgICAgICAgYWRkMzIoYWRkcmVzcy5iYXNlLCBzY3IpOworCisgICAgICAgIGlm
IChhZGRyZXNzLm9mZnNldCkKKyAgICAgICAgICAgIGFkZDMyKFRydXN0ZWRJbW0zMihhZGRyZXNz
Lm9mZnNldCksIHNjcik7CisKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IxID0gY2xhaW1TY3JhdGNo
KCk7CisgICAgICAgIGxvYWQxNihzY3IsIHNjcjEpOworICAgICAgICBhZGQzMihUcnVzdGVkSW1t
MzIoMiksIHNjcik7CisgICAgICAgIGxvYWQxNihzY3IsIGRlc3QpOworICAgICAgICBtb3ZlKFRy
dXN0ZWRJbW0zMigxNiksIHNjcik7CisgICAgICAgIG1fYXNzZW1ibGVyLnNobGxSZWdSZWcoZGVz
dCwgc2NyKTsKKyAgICAgICAgb3IzMihzY3IxLCBkZXN0KTsKKworICAgICAgICByZWxlYXNlU2Ny
YXRjaChzY3IpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IxKTsKKyAgICB9CisKKyAgICBK
dW1wIGJyYW5jaDMyV2l0aFVuYWxpZ25lZEhhbGZXb3JkcyhDb25kaXRpb24gY29uZCwgQmFzZUlu
ZGV4IGxlZnQsIFRydXN0ZWRJbW0zMiByaWdodCkKKyAgICB7CisgICAgICAgIFJlZ2lzdGVySUQg
c2NyID0gc2NyYXRjaFJlZzM7CisgICAgICAgIGxvYWQzMldpdGhVbmFsaWduZWRIYWxmV29yZHMo
bGVmdCwgc2NyKTsKKyAgICAgICAgaWYgKCgoY29uZCA9PSBFcXVhbCkgfHwgKGNvbmQgPT0gTm90
RXF1YWwpKSAmJiAhcmlnaHQubV92YWx1ZSkKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnRlc3Rs
UmVnUmVnKHNjciwgc2NyKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY29tcGFyZTMyKHJp
Z2h0Lm1fdmFsdWUsIHNjciwgY29uZCk7CisKKyAgICAgICAgaWYgKGNvbmQgPT0gTm90RXF1YWwp
CisgICAgICAgICAgICByZXR1cm4gYnJhbmNoRmFsc2UoKTsKKyAgICAgICAgcmV0dXJuIGJyYW5j
aFRydWUoKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaERvdWJsZU5vblplcm8oRlBSZWdpc3Rl
cklEIHJlZywgRlBSZWdpc3RlcklEIHNjcmF0Y2gpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxl
ci5tb3ZJbW04KDAsIHNjcmF0Y2hSZWczKTsKKyAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUo
c2NyYXRjaFJlZzMsIHNjcmF0Y2gpOworICAgICAgICByZXR1cm4gYnJhbmNoRG91YmxlKERvdWJs
ZU5vdEVxdWFsLCByZWcsIHNjcmF0Y2gpOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoRG91Ymxl
WmVyb09yTmFOKEZQUmVnaXN0ZXJJRCByZWcsIEZQUmVnaXN0ZXJJRCBzY3JhdGNoKQorICAgIHsK
KyAgICAgICAgbV9hc3NlbWJsZXIubW92SW1tOCgwLCBzY3JhdGNoUmVnMyk7CisgICAgICAgIGNv
bnZlcnRJbnQzMlRvRG91YmxlKHNjcmF0Y2hSZWczLCBzY3JhdGNoKTsKKyAgICAgICAgcmV0dXJu
IGJyYW5jaERvdWJsZShEb3VibGVFcXVhbE9yVW5vcmRlcmVkLCByZWcsIHNjcmF0Y2gpOworICAg
IH0KKworICAgIEp1bXAgYnJhbmNoRG91YmxlKENvbmRpdGlvbiBjb25kLCBGUFJlZ2lzdGVySUQg
bGVmdCwgRlBSZWdpc3RlcklEIHJpZ2h0KQorICAgIHsKKyAgICAgICAgaWYgKGNvbmQgPT0gRG91
YmxlRXF1YWwpIHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmRjbXBwZXEocmlnaHQsIGxlZnQp
OworICAgICAgICAgICAgcmV0dXJuIGJyYW5jaFRydWUoKTsKKyAgICAgICAgfQorCisgICAgICAg
IGlmIChjb25kID09IERvdWJsZU5vdEVxdWFsKSB7CisgICAgICAgICAgICBSZWdpc3RlcklEIHNj
ciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIubG9hZENvbnN0YW50
KDB4N2ZiZmZmZmYsIHNjcmF0Y2hSZWczKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmRjbnZk
cyhyaWdodCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zdHNmcHVsUmVnKHNjcik7CisgICAg
ICAgICAgICBtX2Fzc2VtYmxlci5jbXBsUmVnUmVnKHNjcmF0Y2hSZWczLCBzY3IsIEVxdWFsKTsK
KyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmVuc3VyZVNwYWNlKG1fYXNzZW1ibGVyLm1heEluc3Ry
dWN0aW9uU2l6ZSArIDIyLCBzaXplb2YodWludDMyX3QpKTsKKyAgICAgICAgICAgIG1fYXNzZW1i
bGVyLmJyYW5jaChCVF9PUENPREUsIDgpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuZGNudmRz
KGxlZnQpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuc3RzZnB1bFJlZyhzY3IpOworICAgICAg
ICAgICAgbV9hc3NlbWJsZXIuY21wbFJlZ1JlZyhzY3JhdGNoUmVnMywgc2NyLCBFcXVhbCk7Cisg
ICAgICAgICAgICBtX2Fzc2VtYmxlci5icmFuY2goQlRfT1BDT0RFLCA0KTsKKyAgICAgICAgICAg
IG1fYXNzZW1ibGVyLmRjbXBwZXEocmlnaHQsIGxlZnQpOworICAgICAgICAgICAgcmVsZWFzZVNj
cmF0Y2goc2NyKTsKKyAgICAgICAgICAgIHJldHVybiBicmFuY2hGYWxzZSgpOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKGNvbmQgPT0gRG91YmxlR3JlYXRlclRoYW4pIHsKKyAgICAgICAgICAg
IG1fYXNzZW1ibGVyLmRjbXBwZ3QocmlnaHQsIGxlZnQpOworICAgICAgICAgICAgcmV0dXJuIGJy
YW5jaFRydWUoKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChjb25kID09IERvdWJsZUdyZWF0
ZXJUaGFuT3JFcXVhbCkgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIuZGNtcHBndChsZWZ0LCBy
aWdodCk7CisgICAgICAgICAgICByZXR1cm4gYnJhbmNoRmFsc2UoKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmIChjb25kID09IERvdWJsZUxlc3NUaGFuKSB7CisgICAgICAgICAgICBtX2Fzc2Vt
Ymxlci5kY21wcGd0KGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgIHJldHVybiBicmFuY2hUcnVl
KCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoY29uZCA9PSBEb3VibGVMZXNzVGhhbk9yRXF1
YWwpIHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmRjbXBwZ3QocmlnaHQsIGxlZnQpOworICAg
ICAgICAgICAgcmV0dXJuIGJyYW5jaEZhbHNlKCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAo
Y29uZCA9PSBEb3VibGVFcXVhbE9yVW5vcmRlcmVkKSB7CisgICAgICAgICAgICBSZWdpc3RlcklE
IHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIubG9hZENvbnN0
YW50KDB4N2ZiZmZmZmYsIHNjcmF0Y2hSZWczKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmRj
bnZkcyhyaWdodCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zdHNmcHVsUmVnKHNjcik7Cisg
ICAgICAgICAgICBtX2Fzc2VtYmxlci5jbXBsUmVnUmVnKHNjcmF0Y2hSZWczLCBzY3IsIEVxdWFs
KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmVuc3VyZVNwYWNlKG1fYXNzZW1ibGVyLm1heElu
c3RydWN0aW9uU2l6ZSArIDIyLCBzaXplb2YodWludDMyX3QpKTsKKyAgICAgICAgICAgIG1fYXNz
ZW1ibGVyLmJyYW5jaChCVF9PUENPREUsIDUpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuZGNu
dmRzKGxlZnQpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuc3RzZnB1bFJlZyhzY3IpOworICAg
ICAgICAgICAgbV9hc3NlbWJsZXIuY21wbFJlZ1JlZyhzY3JhdGNoUmVnMywgc2NyLCBFcXVhbCk7
CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5icmFuY2goQlRfT1BDT0RFLCAxKTsKKyAgICAgICAg
ICAgIG1fYXNzZW1ibGVyLmRjbXBwZXEobGVmdCwgcmlnaHQpOworICAgICAgICAgICAgcmVsZWFz
ZVNjcmF0Y2goc2NyKTsKKyAgICAgICAgICAgIHJldHVybiBicmFuY2hUcnVlKCk7CisgICAgICAg
IH0KKworICAgICAgICBpZiAoY29uZCA9PSBEb3VibGVHcmVhdGVyVGhhbk9yVW5vcmRlcmVkKSB7
CisgICAgICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICAg
ICAgbV9hc3NlbWJsZXIubG9hZENvbnN0YW50KDB4N2ZiZmZmZmYsIHNjcmF0Y2hSZWczKTsKKyAg
ICAgICAgICAgIG1fYXNzZW1ibGVyLmRjbnZkcyhyaWdodCk7CisgICAgICAgICAgICBtX2Fzc2Vt
Ymxlci5zdHNmcHVsUmVnKHNjcik7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5jbXBsUmVnUmVn
KHNjcmF0Y2hSZWczLCBzY3IsIEVxdWFsKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmVuc3Vy
ZVNwYWNlKG1fYXNzZW1ibGVyLm1heEluc3RydWN0aW9uU2l6ZSArIDIyLCBzaXplb2YodWludDMy
X3QpKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmJyYW5jaChCVF9PUENPREUsIDUpOworICAg
ICAgICAgICAgbV9hc3NlbWJsZXIuZGNudmRzKGxlZnQpOworICAgICAgICAgICAgbV9hc3NlbWJs
ZXIuc3RzZnB1bFJlZyhzY3IpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuY21wbFJlZ1JlZyhz
Y3JhdGNoUmVnMywgc2NyLCBFcXVhbCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5icmFuY2go
QlRfT1BDT0RFLCAxKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmRjbXBwZ3QocmlnaHQsIGxl
ZnQpOworICAgICAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICAgICAgICAgIHJldHVy
biBicmFuY2hUcnVlKCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoY29uZCA9PSBEb3VibGVH
cmVhdGVyVGhhbk9yRXF1YWxPclVub3JkZXJlZCkgeworICAgICAgICAgICAgUmVnaXN0ZXJJRCBz
Y3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmxvYWRDb25zdGFu
dCgweDdmYmZmZmZmLCBzY3JhdGNoUmVnMyk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5kY252
ZHMocmlnaHQpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuc3RzZnB1bFJlZyhzY3IpOworICAg
ICAgICAgICAgbV9hc3NlbWJsZXIuY21wbFJlZ1JlZyhzY3JhdGNoUmVnMywgc2NyLCBFcXVhbCk7
CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5lbnN1cmVTcGFjZShtX2Fzc2VtYmxlci5tYXhJbnN0
cnVjdGlvblNpemUgKyAyMiwgc2l6ZW9mKHVpbnQzMl90KSk7CisgICAgICAgICAgICBtX2Fzc2Vt
Ymxlci5icmFuY2goQlRfT1BDT0RFLCA1KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmRjbnZk
cyhsZWZ0KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnN0c2ZwdWxSZWcoc2NyKTsKKyAgICAg
ICAgICAgIG1fYXNzZW1ibGVyLmNtcGxSZWdSZWcoc2NyYXRjaFJlZzMsIHNjciwgRXF1YWwpOwor
ICAgICAgICAgICAgbV9hc3NlbWJsZXIuYnJhbmNoKEJUX09QQ09ERSwgMSk7CisgICAgICAgICAg
ICBtX2Fzc2VtYmxlci5kY21wcGd0KGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgIHJlbGVhc2VT
Y3JhdGNoKHNjcik7CisgICAgICAgICAgICByZXR1cm4gYnJhbmNoRmFsc2UoKTsKKyAgICAgICAg
fQorCisgICAgICAgIGlmIChjb25kID09IERvdWJsZUxlc3NUaGFuT3JVbm9yZGVyZWQpIHsKKyAg
ICAgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgICAgICBt
X2Fzc2VtYmxlci5sb2FkQ29uc3RhbnQoMHg3ZmJmZmZmZiwgc2NyYXRjaFJlZzMpOworICAgICAg
ICAgICAgbV9hc3NlbWJsZXIuZGNudmRzKHJpZ2h0KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVy
LnN0c2ZwdWxSZWcoc2NyKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmNtcGxSZWdSZWcoc2Ny
YXRjaFJlZzMsIHNjciwgRXF1YWwpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuZW5zdXJlU3Bh
Y2UobV9hc3NlbWJsZXIubWF4SW5zdHJ1Y3Rpb25TaXplICsgMjIsIHNpemVvZih1aW50MzJfdCkp
OworICAgICAgICAgICAgbV9hc3NlbWJsZXIuYnJhbmNoKEJUX09QQ09ERSwgNSk7CisgICAgICAg
ICAgICBtX2Fzc2VtYmxlci5kY252ZHMobGVmdCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5z
dHNmcHVsUmVnKHNjcik7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5jbXBsUmVnUmVnKHNjcmF0
Y2hSZWczLCBzY3IsIEVxdWFsKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmJyYW5jaChCVF9P
UENPREUsIDEpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuZGNtcHBndChsZWZ0LCByaWdodCk7
CisgICAgICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgICAgICAgICAgcmV0dXJuIGJy
YW5jaFRydWUoKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChjb25kID09IERvdWJsZUxlc3NU
aGFuT3JFcXVhbE9yVW5vcmRlcmVkKSB7CisgICAgICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNs
YWltU2NyYXRjaCgpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIubG9hZENvbnN0YW50KDB4N2Zi
ZmZmZmYsIHNjcmF0Y2hSZWczKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmRjbnZkcyhyaWdo
dCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zdHNmcHVsUmVnKHNjcik7CisgICAgICAgICAg
ICBtX2Fzc2VtYmxlci5jbXBsUmVnUmVnKHNjcmF0Y2hSZWczLCBzY3IsIEVxdWFsKTsKKyAgICAg
ICAgICAgIG1fYXNzZW1ibGVyLmVuc3VyZVNwYWNlKG1fYXNzZW1ibGVyLm1heEluc3RydWN0aW9u
U2l6ZSArIDIyLCBzaXplb2YodWludDMyX3QpKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmJy
YW5jaChCVF9PUENPREUsIDUpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuZGNudmRzKGxlZnQp
OworICAgICAgICAgICAgbV9hc3NlbWJsZXIuc3RzZnB1bFJlZyhzY3IpOworICAgICAgICAgICAg
bV9hc3NlbWJsZXIuY21wbFJlZ1JlZyhzY3JhdGNoUmVnMywgc2NyLCBFcXVhbCk7CisgICAgICAg
ICAgICBtX2Fzc2VtYmxlci5icmFuY2goQlRfT1BDT0RFLCAxKTsKKyAgICAgICAgICAgIG1fYXNz
ZW1ibGVyLmRjbXBwZ3QocmlnaHQsIGxlZnQpOworICAgICAgICAgICAgcmVsZWFzZVNjcmF0Y2go
c2NyKTsKKyAgICAgICAgICAgIHJldHVybiBicmFuY2hGYWxzZSgpOworICAgICAgICB9CisKKyAg
ICAgICAgQVNTRVJUKGNvbmQgPT0gRG91YmxlTm90RXF1YWxPclVub3JkZXJlZCk7CisgICAgICAg
IFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIG1fYXNzZW1ibGVyLmxv
YWRDb25zdGFudCgweDdmYmZmZmZmLCBzY3JhdGNoUmVnMyk7CisgICAgICAgIG1fYXNzZW1ibGVy
LmRjbnZkcyhyaWdodCk7CisgICAgICAgIG1fYXNzZW1ibGVyLnN0c2ZwdWxSZWcoc2NyKTsKKyAg
ICAgICAgbV9hc3NlbWJsZXIuY21wbFJlZ1JlZyhzY3JhdGNoUmVnMywgc2NyLCBFcXVhbCk7Cisg
ICAgICAgIG1fYXNzZW1ibGVyLmVuc3VyZVNwYWNlKG1fYXNzZW1ibGVyLm1heEluc3RydWN0aW9u
U2l6ZSArIDIyLCBzaXplb2YodWludDMyX3QpKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuYnJhbmNo
KEJUX09QQ09ERSwgNSk7CisgICAgICAgIG1fYXNzZW1ibGVyLmRjbnZkcyhsZWZ0KTsKKyAgICAg
ICAgbV9hc3NlbWJsZXIuc3RzZnB1bFJlZyhzY3IpOworICAgICAgICBtX2Fzc2VtYmxlci5jbXBs
UmVnUmVnKHNjcmF0Y2hSZWczLCBzY3IsIEVxdWFsKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuYnJh
bmNoKEJUX09QQ09ERSwgMSk7CisgICAgICAgIG1fYXNzZW1ibGVyLmRjbXBwZXEocmlnaHQsIGxl
ZnQpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgICAgICByZXR1cm4gYnJhbmNo
RmFsc2UoKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaFRydWUoKQorICAgIHsKKyAgICAgICAg
bV9hc3NlbWJsZXIuZW5zdXJlU3BhY2UobV9hc3NlbWJsZXIubWF4SW5zdHJ1Y3Rpb25TaXplICsg
Niwgc2l6ZW9mKHVpbnQzMl90KSk7CisgICAgICAgIEp1bXAgbV9qdW1wID0gSnVtcChtX2Fzc2Vt
Ymxlci5qZSgpKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9hZENvbnN0YW50VW5SZXVzYWJsZSgw
eDAsIHNjcmF0Y2hSZWczKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubm9wKCk7CisgICAgICAgIG1f
YXNzZW1ibGVyLm5vcCgpOworICAgICAgICByZXR1cm4gbV9qdW1wOworICAgIH0KKworICAgIEp1
bXAgYnJhbmNoRmFsc2UoKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuZW5zdXJlU3BhY2Uo
bV9hc3NlbWJsZXIubWF4SW5zdHJ1Y3Rpb25TaXplICsgNiwgc2l6ZW9mKHVpbnQzMl90KSk7Cisg
ICAgICAgIEp1bXAgbV9qdW1wID0gSnVtcChtX2Fzc2VtYmxlci5qbmUoKSk7CisgICAgICAgIG1f
YXNzZW1ibGVyLmxvYWRDb25zdGFudFVuUmV1c2FibGUoMHgwLCBzY3JhdGNoUmVnMyk7CisgICAg
ICAgIG1fYXNzZW1ibGVyLm5vcCgpOworICAgICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKKyAgICAg
ICAgcmV0dXJuIG1fanVtcDsKKyAgICB9CisKKyAgICB2b2lkIHNldDhDb21wYXJlMzIoQ29uZGl0
aW9uIGNvbmQsIFJlZ2lzdGVySUQgbGVmdCwgUmVnaXN0ZXJJRCByaWdodCwgUmVnaXN0ZXJJRCBk
ZXN0KQorICAgIHsKKyAgICAgICAgc2V0MzJDb21wYXJlMzIoY29uZCwgbGVmdCwgcmlnaHQsIGRl
c3QpOworICAgIH0KKworICAgIHZvaWQgc2V0OENvbXBhcmUzMihDb25kaXRpb24gY29uZCwgUmVn
aXN0ZXJJRCBsZWZ0LCBUcnVzdGVkSW1tMzIgcmlnaHQsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7
CisgICAgICAgIGlmIChsZWZ0ICE9IGRlc3QpIHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmxv
YWRDb25zdGFudChyaWdodC5tX3ZhbHVlLCBkZXN0KTsKKyAgICAgICAgICAgIHNldDMyQ29tcGFy
ZTMyKGNvbmQsIGxlZnQsIGRlc3QsIGRlc3QpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAg
bV9hc3NlbWJsZXIubG9hZENvbnN0YW50KHJpZ2h0Lm1fdmFsdWUsIHNjcik7CisgICAgICAgIHNl
dDMyQ29tcGFyZTMyKGNvbmQsIGxlZnQsIHNjciwgZGVzdCk7CisgICAgICAgIHJlbGVhc2VTY3Jh
dGNoKHNjcik7CisgICAgfQorCisgICAgSnVtcCBicmFuY2gzMihDb25kaXRpb24gY29uZCwgQmFz
ZUluZGV4IGxlZnQsIFRydXN0ZWRJbW0zMiByaWdodCkKKyAgICB7CisgICAgICAgIFJlZ2lzdGVy
SUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIG1vdmUobGVmdC5pbmRleCwgc2NyKTsK
KyAgICAgICAgbHNoaWZ0MzIoVHJ1c3RlZEltbTMyKGxlZnQuc2NhbGUpLCBzY3IpOworICAgICAg
ICBhZGQzMihsZWZ0LmJhc2UsIHNjcik7CisgICAgICAgIGxvYWQzMihzY3IsIGxlZnQub2Zmc2V0
LCBzY3IpOworICAgICAgICBjb21wYXJlMzIocmlnaHQubV92YWx1ZSwgc2NyLCBjb25kKTsKKyAg
ICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKworICAgICAgICBpZiAoY29uZCA9PSBOb3RFcXVh
bCkKKyAgICAgICAgICAgIHJldHVybiBicmFuY2hGYWxzZSgpOworICAgICAgICByZXR1cm4gYnJh
bmNoVHJ1ZSgpOworICAgIH0KKworICAgIHZvaWQgc3FydERvdWJsZShGUFJlZ2lzdGVySUQgc3Jj
LCBGUFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIGlmIChkZXN0ICE9IHNyYykKKyAg
ICAgICAgICAgIG1fYXNzZW1ibGVyLmRtb3ZSZWdSZWcoc3JjLCBkZXN0KTsKKyAgICAgICAgbV9h
c3NlbWJsZXIuZHNxcnQoZGVzdCk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2hUZXN0OChDb25k
aXRpb24gY29uZCwgQWRkcmVzcyBhZGRyZXNzLCBUcnVzdGVkSW1tMzIgbWFzayA9IFRydXN0ZWRJ
bW0zMigtMSkpCisgICAgeworICAgICAgICBSZWdpc3RlcklEIGFkZHJlc3NUZW1wUmVnaXN0ZXIg
PSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgbG9hZDgoYWRkcmVzcywgYWRkcmVzc1RlbXBSZWdp
c3Rlcik7CisgICAgICAgIEp1bXAgam1wID0gYnJhbmNoVGVzdDMyKGNvbmQsIGFkZHJlc3NUZW1w
UmVnaXN0ZXIsIG1hc2spOworICAgICAgICByZWxlYXNlU2NyYXRjaChhZGRyZXNzVGVtcFJlZ2lz
dGVyKTsKKyAgICAgICAgcmV0dXJuIGptcDsKKyAgICB9CisKKyAgICB2b2lkIHNpZ25FeHRlbmQz
MlRvUHRyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBp
ZiAoc3JjICE9IGRlc3QpCisgICAgICAgICAgICBtb3ZlKHNyYywgZGVzdCk7CisgICAgfQorCisg
ICAgSnVtcCBicmFuY2g4KENvbmRpdGlvbiBjb25kLCBBZGRyZXNzIGxlZnQsIFRydXN0ZWRJbW0z
MiByaWdodCkKKyAgICB7CisgICAgICAgIFJlZ2lzdGVySUQgYWRkcmVzc1RlbXBSZWdpc3RlciA9
IGNsYWltU2NyYXRjaCgpOworICAgICAgICBsb2FkOChsZWZ0LCBhZGRyZXNzVGVtcFJlZ2lzdGVy
KTsKKyAgICAgICAgSnVtcCBqbXAgPSBicmFuY2gzMihjb25kLCBhZGRyZXNzVGVtcFJlZ2lzdGVy
LCByaWdodCk7CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKGFkZHJlc3NUZW1wUmVnaXN0ZXIpOwor
ICAgICAgICByZXR1cm4gam1wOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoVHJ1bmNhdGVEb3Vi
bGVUb0ludDMyKEZQUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAg
ICAgIG1fYXNzZW1ibGVyLmZ0cmNkcm1mcHVsKHNyYyk7CisgICAgICAgIG1fYXNzZW1ibGVyLnN0
c2ZwdWxSZWcoZGVzdCk7CisgICAgICAgIG1fYXNzZW1ibGVyLmxvYWRDb25zdGFudCgweDdmZmZm
ZmZmLCBzY3JhdGNoUmVnMyk7CisgICAgICAgIG1fYXNzZW1ibGVyLmNtcGxSZWdSZWcoZGVzdCwg
c2NyYXRjaFJlZzMsIEVxdWFsKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuZW5zdXJlU3BhY2UobV9h
c3NlbWJsZXIubWF4SW5zdHJ1Y3Rpb25TaXplICsgMTQsIHNpemVvZih1aW50MzJfdCkpOworICAg
ICAgICBtX2Fzc2VtYmxlci5icmFuY2goQlRfT1BDT0RFLCAyKTsKKyAgICAgICAgbV9hc3NlbWJs
ZXIuYWRkbEltbThyKDEsIHNjcmF0Y2hSZWczKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuY21wbFJl
Z1JlZyhkZXN0LCBzY3JhdGNoUmVnMywgRXF1YWwpOworICAgICAgICByZXR1cm4gYnJhbmNoVHJ1
ZSgpOworICAgIH0KKworICAgIC8vIFN0YWNrIG1hbmlwdWxhdGlvbiBvcGVyYXRpb25zCisKKyAg
ICB2b2lkIHBvcChSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5w
b3BSZWcoZGVzdCk7CisgICAgfQorCisgICAgdm9pZCBwdXNoKFJlZ2lzdGVySUQgc3JjKQorICAg
IHsKKyAgICAgICAgbV9hc3NlbWJsZXIucHVzaFJlZyhzcmMpOworICAgIH0KKworICAgIHZvaWQg
cHVzaChBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBpZiAoIWFkZHJlc3Mub2Zmc2V0
KSB7CisgICAgICAgICAgICBwdXNoKGFkZHJlc3MuYmFzZSk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKworICAgICAgICBpZiAoKGFkZHJlc3Mub2Zmc2V0IDwgMCkgfHwgKGFkZHJl
c3Mub2Zmc2V0ID49IDY0KSkgeworICAgICAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNj
cmF0Y2goKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmxvYWRDb25zdGFudChhZGRyZXNzLm9m
ZnNldCwgc2NyKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZGxSZWdSZWcoYWRkcmVzcy5i
YXNlLCBzY3IpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIubW92bE1lbVJlZyhzY3IsIFNINFJl
Z2lzdGVyczo6c3ApOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRkbEltbThyKC00LCBTSDRS
ZWdpc3RlcnM6OnNwKTsKKyAgICAgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBtX2Fzc2VtYmxlci5tb3ZsTWVtUmVn
KGFkZHJlc3Mub2Zmc2V0ID4+IDIsIGFkZHJlc3MuYmFzZSwgU0g0UmVnaXN0ZXJzOjpzcCk7Cisg
ICAgICAgIG1fYXNzZW1ibGVyLmFkZGxJbW04cigtNCwgU0g0UmVnaXN0ZXJzOjpzcCk7CisgICAg
fQorCisgICAgdm9pZCBwdXNoKFRydXN0ZWRJbW0zMiBpbW0pCisgICAgeworICAgICAgICBSZWdp
c3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworICAgICAgICBtX2Fzc2VtYmxlci5sb2FkQ29u
c3RhbnQoaW1tLm1fdmFsdWUsIHNjcik7CisgICAgICAgIHB1c2goc2NyKTsKKyAgICAgICAgcmVs
ZWFzZVNjcmF0Y2goc2NyKTsKKyAgICB9CisKKyAgICAvLyBSZWdpc3RlciBtb3ZlIG9wZXJhdGlv
bnMKKworICAgIHZvaWQgbW92ZShUcnVzdGVkSW1tMzIgaW1tLCBSZWdpc3RlcklEIGRlc3QpCisg
ICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sb2FkQ29uc3RhbnQoaW1tLm1fdmFsdWUsIGRlc3Qp
OworICAgIH0KKworICAgIERhdGFMYWJlbFB0ciBtb3ZlV2l0aFBhdGNoKFRydXN0ZWRJbW1QdHIg
aW5pdGlhbFZhbHVlLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBEYXRhTGFiZWxQ
dHIgZGF0YUxhYmVsKHRoaXMpOworICAgICAgICBtX2Fzc2VtYmxlci5sb2FkQ29uc3RhbnRVblJl
dXNhYmxlKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3Q+KGluaXRpYWxWYWx1ZS5tX3ZhbHVlKSwg
ZGVzdCwgdHJ1ZSk7CisgICAgICAgIHJldHVybiBkYXRhTGFiZWw7CisgICAgfQorCisgICAgdm9p
ZCBtb3ZlKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBt
X2Fzc2VtYmxlci5tb3ZsUmVnUmVnKHNyYywgZGVzdCk7CisgICAgfQorCisgICAgdm9pZCBtb3Zl
KFRydXN0ZWRJbW1QdHIgaW1tLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fz
c2VtYmxlci5sb2FkQ29uc3RhbnQoaW1tLmFzSW50cHRyKCksIGRlc3QpOworICAgIH0KKworICAg
IHZvaWQgZXh0dXcoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAg
ICAgbV9hc3NlbWJsZXIuZXh0dXcoc3JjLCBkc3QpOworICAgIH0KKworICAgIHZvaWQgc2V0MzJD
b21wYXJlMzIoQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgbGVmdCwgUmVnaXN0ZXJJRCByaWdo
dCwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuY21wbFJlZ1Jl
ZyhyaWdodCwgbGVmdCwgY29uZCk7CisgICAgICAgIGlmIChjb25kICE9IE5vdEVxdWFsKSB7Cisg
ICAgICAgICAgICBtX2Fzc2VtYmxlci5tb3Z0KGRlc3QpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisKKyAgICAgICAgbV9hc3NlbWJsZXIuZW5zdXJlU3BhY2UobV9hc3NlbWJsZXIu
bWF4SW5zdHJ1Y3Rpb25TaXplICsgNCk7CisgICAgICAgIG1fYXNzZW1ibGVyLm1vdkltbTgoMCwg
ZGVzdCk7CisgICAgICAgIG1fYXNzZW1ibGVyLmJyYW5jaChCVF9PUENPREUsIDApOworICAgICAg
ICBtX2Fzc2VtYmxlci5tb3ZJbW04KDEsIGRlc3QpOworICAgIH0KKworICAgIHZvaWQgc2V0MzJD
b21wYXJlMzIoQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgbGVmdCwgVHJ1c3RlZEltbTMyIHJp
Z2h0LCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBpZiAobGVmdCAhPSBkZXN0KSB7
CisgICAgICAgICAgICBtb3ZlKHJpZ2h0LCBkZXN0KTsKKyAgICAgICAgICAgIHNldDMyQ29tcGFy
ZTMyKGNvbmQsIGxlZnQsIGRlc3QsIGRlc3QpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAg
bW92ZShyaWdodCwgc2NyKTsKKyAgICAgICAgc2V0MzJDb21wYXJlMzIoY29uZCwgbGVmdCwgc2Ny
LCBkZXN0KTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICB9CisKKyAgICB2b2lk
IHNldDMyVGVzdDgoQ29uZGl0aW9uIGNvbmQsIEFkZHJlc3MgYWRkcmVzcywgVHJ1c3RlZEltbTMy
IG1hc2ssIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIEFTU0VSVCgoY29uZCA9PSBa
ZXJvKSB8fCAoY29uZCA9PSBOb25aZXJvKSk7CisKKyAgICAgICAgbG9hZDgoYWRkcmVzcywgZGVz
dCk7CisgICAgICAgIGlmIChtYXNrLm1fdmFsdWUgPT0gLTEpCisgICAgICAgICAgICBjb21wYXJl
MzIoMCwgZGVzdCwgY29uZCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHRlc3RsSW1tKG1h
c2subV92YWx1ZSwgZGVzdCk7CisgICAgICAgIGlmIChjb25kICE9IE5vblplcm8pIHsKKyAgICAg
ICAgICAgIG1fYXNzZW1ibGVyLm1vdnQoZGVzdCk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKworICAgICAgICBtX2Fzc2VtYmxlci5lbnN1cmVTcGFjZShtX2Fzc2VtYmxlci5tYXhJ
bnN0cnVjdGlvblNpemUgKyA0KTsKKyAgICAgICAgbV9hc3NlbWJsZXIubW92SW1tOCgwLCBkZXN0
KTsKKyAgICAgICAgbV9hc3NlbWJsZXIuYnJhbmNoKEJUX09QQ09ERSwgMCk7CisgICAgICAgIG1f
YXNzZW1ibGVyLm1vdkltbTgoMSwgZGVzdCk7CisgICAgfQorCisgICAgdm9pZCBsb2FkUHRyTGlu
a1JlZyhJbXBsaWNpdEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIFJlZ2lzdGVySUQg
c2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAgICAgIGxvYWQzMihhZGRyZXNzLCBzY3IpOworICAg
ICAgICBtX2Fzc2VtYmxlci5sZHNwcihzY3IpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3Ip
OworICAgIH0KKworICAgIEp1bXAgYnJhbmNoMzIoQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQg
bGVmdCwgUmVnaXN0ZXJJRCByaWdodCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmNtcGxS
ZWdSZWcocmlnaHQsIGxlZnQsIGNvbmQpOworICAgICAgICAvKiBCVCBsYWJlbCA9PiBCRiBvZmYK
KyAgICAgICAgICAgbm9wICAgICAgICAgTERSIHJlZworICAgICAgICAgICBub3AgICAgICAgICBi
cmFmIEByZWcKKyAgICAgICAgICAgbm9wICAgICAgICAgbm9wCisgICAgICAgICAqLworICAgICAg
ICBpZiAoY29uZCA9PSBOb3RFcXVhbCkKKyAgICAgICAgICAgIHJldHVybiBicmFuY2hGYWxzZSgp
OworICAgICAgICByZXR1cm4gYnJhbmNoVHJ1ZSgpOworICAgIH0KKworICAgIEp1bXAgYnJhbmNo
MzIoQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgbGVmdCwgVHJ1c3RlZEltbTMyIHJpZ2h0KQor
ICAgIHsKKyAgICAgICAgaWYgKCgoY29uZCA9PSBFcXVhbCkgfHwgKGNvbmQgPT0gTm90RXF1YWwp
KSAmJiAhcmlnaHQubV92YWx1ZSkKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnRlc3RsUmVnUmVn
KGxlZnQsIGxlZnQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBjb21wYXJlMzIocmlnaHQu
bV92YWx1ZSwgbGVmdCwgY29uZCk7CisKKyAgICAgICAgaWYgKGNvbmQgPT0gTm90RXF1YWwpCisg
ICAgICAgICAgICByZXR1cm4gYnJhbmNoRmFsc2UoKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaFRy
dWUoKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaDMyKENvbmRpdGlvbiBjb25kLCBSZWdpc3Rl
cklEIGxlZnQsIEFkZHJlc3MgcmlnaHQpCisgICAgeworICAgICAgICBjb21wYXJlMzIocmlnaHQu
b2Zmc2V0LCByaWdodC5iYXNlLCBsZWZ0LCBjb25kKTsKKyAgICAgICAgaWYgKGNvbmQgPT0gTm90
RXF1YWwpCisgICAgICAgICAgICByZXR1cm4gYnJhbmNoRmFsc2UoKTsKKyAgICAgICAgcmV0dXJu
IGJyYW5jaFRydWUoKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaDMyKENvbmRpdGlvbiBjb25k
LCBBZGRyZXNzIGxlZnQsIFJlZ2lzdGVySUQgcmlnaHQpCisgICAgeworICAgICAgICBjb21wYXJl
MzIocmlnaHQsIGxlZnQub2Zmc2V0LCBsZWZ0LmJhc2UsIGNvbmQpOworICAgICAgICBpZiAoY29u
ZCA9PSBOb3RFcXVhbCkKKyAgICAgICAgICAgIHJldHVybiBicmFuY2hGYWxzZSgpOworICAgICAg
ICByZXR1cm4gYnJhbmNoVHJ1ZSgpOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoMzIoQ29uZGl0
aW9uIGNvbmQsIEFkZHJlc3MgbGVmdCwgVHJ1c3RlZEltbTMyIHJpZ2h0KQorICAgIHsKKyAgICAg
ICAgY29tcGFyZTMyKHJpZ2h0Lm1fdmFsdWUsIGxlZnQub2Zmc2V0LCBsZWZ0LmJhc2UsIGNvbmQp
OworICAgICAgICBpZiAoY29uZCA9PSBOb3RFcXVhbCkKKyAgICAgICAgICAgIHJldHVybiBicmFu
Y2hGYWxzZSgpOworICAgICAgICByZXR1cm4gYnJhbmNoVHJ1ZSgpOworICAgIH0KKworICAgIEp1
bXAgYnJhbmNoMzIoQ29uZGl0aW9uIGNvbmQsIEFic29sdXRlQWRkcmVzcyBsZWZ0LCBSZWdpc3Rl
cklEIHJpZ2h0KQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2go
KTsKKworICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihyZWludGVycHJldF9jYXN0PHVpbnQzMl90
PihsZWZ0Lm1fcHRyKSksIHNjcik7CisgICAgICAgIG1fYXNzZW1ibGVyLmNtcGxSZWdSZWcocmln
aHQsIHNjciwgY29uZCk7CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisKKyAgICAgICAg
aWYgKGNvbmQgPT0gTm90RXF1YWwpCisgICAgICAgICAgICByZXR1cm4gYnJhbmNoRmFsc2UoKTsK
KyAgICAgICAgcmV0dXJuIGJyYW5jaFRydWUoKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaDMy
KENvbmRpdGlvbiBjb25kLCBBYnNvbHV0ZUFkZHJlc3MgbGVmdCwgVHJ1c3RlZEltbTMyIHJpZ2h0
KQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJRCBhZGRyZXNzVGVtcFJlZ2lzdGVyID0gY2xhaW1T
Y3JhdGNoKCk7CisKKyAgICAgICAgbV9hc3NlbWJsZXIubG9hZENvbnN0YW50KHJlaW50ZXJwcmV0
X2Nhc3Q8dWludDMyX3Q+KGxlZnQubV9wdHIpLCBhZGRyZXNzVGVtcFJlZ2lzdGVyKTsKKyAgICAg
ICAgbV9hc3NlbWJsZXIubW92bE1lbVJlZyhhZGRyZXNzVGVtcFJlZ2lzdGVyLCBhZGRyZXNzVGVt
cFJlZ2lzdGVyKTsKKyAgICAgICAgY29tcGFyZTMyKHJpZ2h0Lm1fdmFsdWUsIGFkZHJlc3NUZW1w
UmVnaXN0ZXIsIGNvbmQpOworICAgICAgICByZWxlYXNlU2NyYXRjaChhZGRyZXNzVGVtcFJlZ2lz
dGVyKTsKKworICAgICAgICBpZiAoY29uZCA9PSBOb3RFcXVhbCkKKyAgICAgICAgICAgIHJldHVy
biBicmFuY2hGYWxzZSgpOworICAgICAgICByZXR1cm4gYnJhbmNoVHJ1ZSgpOworICAgIH0KKwor
ICAgIEp1bXAgYnJhbmNoMTYoQ29uZGl0aW9uIGNvbmQsICBCYXNlSW5kZXggbGVmdCwgUmVnaXN0
ZXJJRCByaWdodCkKKyAgICB7CisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNo
KCk7CisKKyAgICAgICAgbW92ZShsZWZ0LmluZGV4LCBzY3IpOworICAgICAgICBsc2hpZnQzMihU
cnVzdGVkSW1tMzIobGVmdC5zY2FsZSksIHNjcik7CisKKyAgICAgICAgaWYgKGxlZnQub2Zmc2V0
KQorICAgICAgICAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKGxlZnQub2Zmc2V0KSwgc2NyKTsKKyAg
ICAgICAgYWRkMzIobGVmdC5iYXNlLCBzY3IpOworICAgICAgICBsb2FkMTYoc2NyLCBzY3IpOwor
ICAgICAgICBleHR1dyhzY3IsIHNjcik7CisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisK
KyAgICAgICAgcmV0dXJuIGJyYW5jaDMyKGNvbmQsIHNjciwgcmlnaHQpOworICAgIH0KKworICAg
IEp1bXAgYnJhbmNoMTYoQ29uZGl0aW9uIGNvbmQsIEJhc2VJbmRleCBsZWZ0LCBUcnVzdGVkSW1t
MzIgcmlnaHQpCisgICAgeworICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgp
OworCisgICAgICAgIG1vdmUobGVmdC5pbmRleCwgc2NyKTsKKyAgICAgICAgbHNoaWZ0MzIoVHJ1
c3RlZEltbTMyKGxlZnQuc2NhbGUpLCBzY3IpOworCisgICAgICAgIGlmIChsZWZ0Lm9mZnNldCkK
KyAgICAgICAgICAgIGFkZDMyKFRydXN0ZWRJbW0zMihsZWZ0Lm9mZnNldCksIHNjcik7CisgICAg
ICAgIGFkZDMyKGxlZnQuYmFzZSwgc2NyKTsKKyAgICAgICAgbG9hZDE2KHNjciwgc2NyKTsKKyAg
ICAgICAgZXh0dXcoc2NyLCBzY3IpOworICAgICAgICBSZWdpc3RlcklEIHNjcjEgPSBjbGFpbVNj
cmF0Y2goKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9hZENvbnN0YW50KHJpZ2h0Lm1fdmFsdWUs
IHNjcjEpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgICAgICByZWxlYXNlU2Ny
YXRjaChzY3IxKTsKKworICAgICAgICByZXR1cm4gYnJhbmNoMzIoY29uZCwgc2NyLCBzY3IxKTsK
KyAgICB9CisKKyAgICBKdW1wIGJyYW5jaFRlc3QzMihDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJ
RCByZWcsIFJlZ2lzdGVySUQgbWFzaykKKyAgICB7CisgICAgICAgIEFTU0VSVCgoY29uZCA9PSBa
ZXJvKSB8fCAoY29uZCA9PSBOb25aZXJvKSk7CisKKyAgICAgICAgbV9hc3NlbWJsZXIudGVzdGxS
ZWdSZWcocmVnLCBtYXNrKTsKKworICAgICAgICBpZiAoY29uZCA9PSBOb3RFcXVhbCkKKyAgICAg
ICAgICAgIHJldHVybiBicmFuY2hGYWxzZSgpOworICAgICAgICByZXR1cm4gYnJhbmNoVHJ1ZSgp
OworICAgIH0KKworICAgIEp1bXAgYnJhbmNoVGVzdDMyKENvbmRpdGlvbiBjb25kLCBSZWdpc3Rl
cklEIHJlZywgVHJ1c3RlZEltbTMyIG1hc2sgPSBUcnVzdGVkSW1tMzIoLTEpKQorICAgIHsKKyAg
ICAgICAgQVNTRVJUKChjb25kID09IFplcm8pIHx8IChjb25kID09IE5vblplcm8pKTsKKworICAg
ICAgICBpZiAobWFzay5tX3ZhbHVlID09IC0xKQorICAgICAgICAgICAgbV9hc3NlbWJsZXIudGVz
dGxSZWdSZWcocmVnLCByZWcpOworICAgICAgICBlbHNlCisgICAgICAgICAgICB0ZXN0bEltbSht
YXNrLm1fdmFsdWUsIHJlZyk7CisKKyAgICAgICAgaWYgKGNvbmQgPT0gTm90RXF1YWwpCisgICAg
ICAgICAgICByZXR1cm4gYnJhbmNoRmFsc2UoKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaFRydWUo
KTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaFRlc3QzMihDb25kaXRpb24gY29uZCwgQWRkcmVz
cyBhZGRyZXNzLCBUcnVzdGVkSW1tMzIgbWFzayA9IFRydXN0ZWRJbW0zMigtMSkpCisgICAgewor
ICAgICAgICBBU1NFUlQoKGNvbmQgPT0gWmVybykgfHwgKGNvbmQgPT0gTm9uWmVybykpOworCisg
ICAgICAgIGlmIChtYXNrLm1fdmFsdWUgPT0gLTEpCisgICAgICAgICAgICBjb21wYXJlMzIoMCwg
YWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSwgY29uZCk7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIHRlc3RJbW0obWFzay5tX3ZhbHVlLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNl
KTsKKworICAgICAgICBpZiAoY29uZCA9PSBOb3RFcXVhbCkKKyAgICAgICAgICAgIHJldHVybiBi
cmFuY2hGYWxzZSgpOworICAgICAgICByZXR1cm4gYnJhbmNoVHJ1ZSgpOworICAgIH0KKworICAg
IEp1bXAgYnJhbmNoVGVzdDMyKENvbmRpdGlvbiBjb25kLCBCYXNlSW5kZXggYWRkcmVzcywgVHJ1
c3RlZEltbTMyIG1hc2sgPSBUcnVzdGVkSW1tMzIoLTEpKQorICAgIHsKKyAgICAgICAgUmVnaXN0
ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKworICAgICAgICBtb3ZlKGFkZHJlc3MuaW5kZXgs
IHNjcik7CisgICAgICAgIGxzaGlmdDMyKFRydXN0ZWRJbW0zMihhZGRyZXNzLnNjYWxlKSwgc2Ny
KTsKKyAgICAgICAgYWRkMzIoYWRkcmVzcy5iYXNlLCBzY3IpOworICAgICAgICBsb2FkMzIoc2Ny
LCBhZGRyZXNzLm9mZnNldCwgc2NyKTsKKworICAgICAgICBpZiAobWFzay5tX3ZhbHVlID09IC0x
KQorICAgICAgICAgICAgbV9hc3NlbWJsZXIudGVzdGxSZWdSZWcoc2NyLCBzY3IpOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICB0ZXN0bEltbShtYXNrLm1fdmFsdWUsIHNjcik7CisKKyAgICAg
ICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKworICAgICAgICBpZiAoY29uZCA9PSBOb3RFcXVhbCkK
KyAgICAgICAgICAgIHJldHVybiBicmFuY2hGYWxzZSgpOworICAgICAgICByZXR1cm4gYnJhbmNo
VHJ1ZSgpOworICAgIH0KKworICAgIEp1bXAganVtcCgpCisgICAgeworICAgICAgICByZXR1cm4g
SnVtcChtX2Fzc2VtYmxlci5qbXAoKSk7CisgICAgfQorCisgICAgdm9pZCBqdW1wKFJlZ2lzdGVy
SUQgdGFyZ2V0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuam1wUmVnKHRhcmdldCk7Cisg
ICAgfQorCisgICAgdm9pZCBqdW1wKEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIFJl
Z2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisKKyAgICAgICAgaWYgKChhZGRyZXNzLm9m
ZnNldCA8IDApIHx8IChhZGRyZXNzLm9mZnNldCA+PSA2NCkpIHsKKyAgICAgICAgICAgIG1fYXNz
ZW1ibGVyLmxvYWRDb25zdGFudChhZGRyZXNzLm9mZnNldCwgc2NyKTsKKyAgICAgICAgICAgIG1f
YXNzZW1ibGVyLmFkZGxSZWdSZWcoYWRkcmVzcy5iYXNlLCBzY3IpOworICAgICAgICAgICAgbV9h
c3NlbWJsZXIubW92bE1lbVJlZyhzY3IsIHNjcik7CisgICAgICAgIH0gZWxzZSBpZiAoYWRkcmVz
cy5vZmZzZXQpCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5tb3ZsTWVtUmVnKGFkZHJlc3Mub2Zm
c2V0ID4+IDIsIGFkZHJlc3MuYmFzZSwgc2NyKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
bV9hc3NlbWJsZXIubW92bE1lbVJlZyhhZGRyZXNzLmJhc2UsIHNjcik7CisgICAgICAgIG1fYXNz
ZW1ibGVyLmptcFJlZyhzY3IpOworCisgICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7CisgICAg
fQorCisgICAgLy8gQXJpdGhtZXRpYyBjb250cm9sIGZsb3cgb3BlcmF0aW9ucworCisgICAgSnVt
cCBicmFuY2hBZGQzMihDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQg
ZGVzdCkKKyAgICB7CisgICAgICAgIEFTU0VSVCgoY29uZCA9PSBPdmVyZmxvdykgfHwgKGNvbmQg
PT0gU2lnbmVkKSB8fCAoY29uZCA9PSBaZXJvKSB8fCAoY29uZCA9PSBOb25aZXJvKSk7CisKKyAg
ICAgICAgaWYgKGNvbmQgPT0gT3ZlcmZsb3cpIHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFk
ZHZsUmVnUmVnKHNyYywgZGVzdCk7CisgICAgICAgICAgICByZXR1cm4gYnJhbmNoVHJ1ZSgpOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKGNvbmQgPT0gU2lnbmVkKSB7CisgICAgICAgICAgICBt
X2Fzc2VtYmxlci5hZGRsUmVnUmVnKHNyYywgZGVzdCk7CisgICAgICAgICAgICAvLyBDaGVjayBp
ZiBkZXN0IGlzIG5lZ2F0aXZlCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5jbXBweihkZXN0KTsK
KyAgICAgICAgICAgIHJldHVybiBicmFuY2hGYWxzZSgpOworICAgICAgICB9CisKKyAgICAgICAg
bV9hc3NlbWJsZXIuYWRkbFJlZ1JlZyhzcmMsIGRlc3QpOworICAgICAgICBjb21wYXJlMzIoMCwg
ZGVzdCwgRXF1YWwpOworCisgICAgICAgIGlmIChjb25kID09IE5vdEVxdWFsKQorICAgICAgICAg
ICAgcmV0dXJuIGJyYW5jaEZhbHNlKCk7CisgICAgICAgIHJldHVybiBicmFuY2hUcnVlKCk7Cisg
ICAgfQorCisgICAgSnVtcCBicmFuY2hBZGQzMihDb25kaXRpb24gY29uZCwgVHJ1c3RlZEltbTMy
IGltbSwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKChjb25kID09IE92
ZXJmbG93KSB8fCAoY29uZCA9PSBTaWduZWQpIHx8IChjb25kID09IFplcm8pIHx8IChjb25kID09
IE5vblplcm8pKTsKKworICAgICAgICBtb3ZlKGltbSwgc2NyYXRjaFJlZzMpOworICAgICAgICBy
ZXR1cm4gYnJhbmNoQWRkMzIoY29uZCwgc2NyYXRjaFJlZzMsIGRlc3QpOworICAgIH0KKworICAg
IEp1bXAgYnJhbmNoTXVsMzIoQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgc3JjLCBSZWdpc3Rl
cklEIGRlc3QpCisgICAgeworICAgICAgICBBU1NFUlQoKGNvbmQgPT0gT3ZlcmZsb3cpIHx8IChj
b25kID09IFNpZ25lZCkgfHwgKGNvbmQgPT0gWmVybykgfHwgKGNvbmQgPT0gTm9uWmVybykpOwor
CisgICAgICAgIGlmIChjb25kID09IE92ZXJmbG93KSB7CisgICAgICAgICAgICBSZWdpc3RlcklE
IHNjcjEgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xh
aW1TY3JhdGNoKCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5kbXVsbFJlZ1JlZyhzcmMsIGRl
c3QpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuc3RzbWFjbChkZXN0KTsKKyAgICAgICAgICAg
IG1fYXNzZW1ibGVyLm1vdkltbTgoLTMxLCBzY3IpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIu
bW92bFJlZ1JlZyhkZXN0LCBzY3IxKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnNoYVJlZ1Jl
ZyhzY3IxLCBzY3IpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuc3RzbWFjaChzY3IpOworICAg
ICAgICAgICAgbV9hc3NlbWJsZXIuY21wbFJlZ1JlZyhzY3IsIHNjcjEsIFplcm8pOworICAgICAg
ICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyMSk7CisgICAgICAgICAgICByZWxlYXNlU2NyYXRjaChz
Y3IpOworICAgICAgICAgICAgcmV0dXJuIGJyYW5jaEZhbHNlKCk7CisgICAgICAgIH0KKworICAg
ICAgICBtX2Fzc2VtYmxlci5pbXVsbFJlZ1JlZyhzcmMsIGRlc3QpOworICAgICAgICBtX2Fzc2Vt
Ymxlci5zdHNtYWNsKGRlc3QpOworICAgICAgICBpZiAoY29uZCA9PSBTaWduZWQpIHsKKyAgICAg
ICAgICAgIC8vIENoZWNrIGlmIGRlc3QgaXMgbmVnYXRpdmUKKyAgICAgICAgICAgIG1fYXNzZW1i
bGVyLmNtcHB6KGRlc3QpOworICAgICAgICAgICAgcmV0dXJuIGJyYW5jaEZhbHNlKCk7CisgICAg
ICAgIH0KKworICAgICAgICBjb21wYXJlMzIoMCwgZGVzdCwgY29uZCk7CisKKyAgICAgICAgaWYg
KGNvbmQgPT0gTm90RXF1YWwpCisgICAgICAgICAgICByZXR1cm4gYnJhbmNoRmFsc2UoKTsKKyAg
ICAgICAgcmV0dXJuIGJyYW5jaFRydWUoKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaE11bDMy
KENvbmRpdGlvbiBjb25kLCBUcnVzdGVkSW1tMzIgaW1tLCBSZWdpc3RlcklEIHNyYywgUmVnaXN0
ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKChjb25kID09IE92ZXJmbG93KSB8fCAo
Y29uZCA9PSBTaWduZWQpIHx8IChjb25kID09IFplcm8pIHx8IChjb25kID09IE5vblplcm8pKTsK
KworICAgICAgICBtb3ZlKGltbSwgc2NyYXRjaFJlZzMpOworICAgICAgICBpZiAoc3JjICE9IGRl
c3QpCisgICAgICAgICAgICBtb3ZlKHNyYywgZGVzdCk7CisKKyAgICAgICAgcmV0dXJuIGJyYW5j
aE11bDMyKGNvbmQsIHNjcmF0Y2hSZWczLCBkZXN0KTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5j
aFN1YjMyKENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQor
ICAgIHsKKyAgICAgICAgQVNTRVJUKChjb25kID09IE92ZXJmbG93KSB8fCAoY29uZCA9PSBTaWdu
ZWQpIHx8IChjb25kID09IFplcm8pIHx8IChjb25kID09IE5vblplcm8pKTsKKworICAgICAgICBp
ZiAoY29uZCA9PSBPdmVyZmxvdykgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIuc3VidmxSZWdS
ZWcoc3JjLCBkZXN0KTsKKyAgICAgICAgICAgIHJldHVybiBicmFuY2hUcnVlKCk7CisgICAgICAg
IH0KKworICAgICAgICBpZiAoY29uZCA9PSBTaWduZWQpIHsKKyAgICAgICAgICAgIC8vIENoZWNr
IGlmIGRlc3QgaXMgbmVnYXRpdmUKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnN1YmxSZWdSZWco
c3JjLCBkZXN0KTsKKyAgICAgICAgICAgIGNvbXBhcmUzMigwLCBkZXN0LCBMZXNzVGhhbik7Cisg
ICAgICAgICAgICByZXR1cm4gYnJhbmNoVHJ1ZSgpOworICAgICAgICB9CisKKyAgICAgICAgc3Vi
MzIoc3JjLCBkZXN0KTsKKyAgICAgICAgY29tcGFyZTMyKDAsIGRlc3QsIGNvbmQpOworCisgICAg
ICAgIGlmIChjb25kID09IE5vdEVxdWFsKQorICAgICAgICAgICAgcmV0dXJuIGJyYW5jaEZhbHNl
KCk7CisgICAgICAgIHJldHVybiBicmFuY2hUcnVlKCk7CisgICAgfQorCisgICAgSnVtcCBicmFu
Y2hTdWIzMihDb25kaXRpb24gY29uZCwgVHJ1c3RlZEltbTMyIGltbSwgUmVnaXN0ZXJJRCBkZXN0
KQorICAgIHsKKyAgICAgICAgQVNTRVJUKChjb25kID09IE92ZXJmbG93KSB8fCAoY29uZCA9PSBT
aWduZWQpIHx8IChjb25kID09IFplcm8pIHx8IChjb25kID09IE5vblplcm8pKTsKKworICAgICAg
ICBtb3ZlKGltbSwgc2NyYXRjaFJlZzMpOworICAgICAgICByZXR1cm4gYnJhbmNoU3ViMzIoY29u
ZCwgc2NyYXRjaFJlZzMsIGRlc3QpOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoT3IzMihDb25k
aXRpb24gY29uZCwgUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAg
ICAgIEFTU0VSVCgoY29uZCA9PSBTaWduZWQpIHx8IChjb25kID09IFplcm8pIHx8IChjb25kID09
IE5vblplcm8pKTsKKworICAgICAgICBpZiAoY29uZCA9PSBTaWduZWQpIHsKKyAgICAgICAgICAg
IG9yMzIoc3JjLCBkZXN0KTsKKyAgICAgICAgICAgIGNvbXBhcmUzMigwLCBkZXN0LCBMZXNzVGhh
bik7CisgICAgICAgICAgICByZXR1cm4gYnJhbmNoVHJ1ZSgpOworICAgICAgICB9CisKKyAgICAg
ICAgb3IzMihzcmMsIGRlc3QpOworICAgICAgICBjb21wYXJlMzIoMCwgZGVzdCwgY29uZCk7CisK
KyAgICAgICAgaWYgKGNvbmQgPT0gTm90RXF1YWwpCisgICAgICAgICAgICByZXR1cm4gYnJhbmNo
RmFsc2UoKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaFRydWUoKTsKKyAgICB9CisKKyAgICB2b2lk
IGJyYW5jaENvbnZlcnREb3VibGVUb0ludDMyKEZQUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQg
ZGVzdCwgSnVtcExpc3QmIGZhaWx1cmVDYXNlcywgRlBSZWdpc3RlcklEIGZwVGVtcCkKKyAgICB7
CisgICAgICAgIG1fYXNzZW1ibGVyLmZ0cmNkcm1mcHVsKHNyYyk7CisgICAgICAgIG1fYXNzZW1i
bGVyLnN0c2ZwdWxSZWcoZGVzdCk7CisgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKGRlc3Qs
IGZzY3JhdGNoKTsKKyAgICAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChicmFuY2hEb3VibGUoRG91
YmxlTm90RXF1YWxPclVub3JkZXJlZCwgZnNjcmF0Y2gsIHNyYykpOworCisgICAgICAgIGlmIChk
ZXN0ID09IFNINFJlZ2lzdGVyczo6cjApCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5jbXBFcUlt
bVIwKDAsIGRlc3QsIEVxdWFsKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBtX2Fzc2Vt
Ymxlci5tb3ZJbW04KDAsIHNjcmF0Y2hSZWczKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmNt
cGxSZWdSZWcoc2NyYXRjaFJlZzMsIGRlc3QsIEVxdWFsKTsKKyAgICAgICAgfQorICAgICAgICBm
YWlsdXJlQ2FzZXMuYXBwZW5kKGJyYW5jaFRydWUoKSk7CisgICAgfQorCisgICAgdm9pZCBuZWcz
MihSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLm5lZyhkc3QsIGRz
dCk7CisgICAgfQorCisgICAgdm9pZCBub3QzMihSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAg
ICAgIG1fYXNzZW1ibGVyLm5vdGxSZWcoZHN0LCBkc3QpOworICAgIH0KKworICAgIHZvaWQgdXJz
aGlmdDMyKFJlZ2lzdGVySUQgc2hpZnRhbW91bnQsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7Cisg
ICAgICAgIGNvbXBhcmUzMigzMiwgc2hpZnRhbW91bnQsIEVxdWFsKTsKKyAgICAgICAgbV9hc3Nl
bWJsZXIuZW5zdXJlU3BhY2UobV9hc3NlbWJsZXIubWF4SW5zdHJ1Y3Rpb25TaXplICsgNCk7Cisg
ICAgICAgIG1fYXNzZW1ibGVyLmJyYW5jaChCVF9PUENPREUsIDEpOworICAgICAgICBtX2Fzc2Vt
Ymxlci5uZWcoc2hpZnRhbW91bnQsIHNoaWZ0YW1vdW50KTsKKyAgICAgICAgbV9hc3NlbWJsZXIu
c2hsbFJlZ1JlZyhkZXN0LCBzaGlmdGFtb3VudCk7CisgICAgfQorCisgICAgdm9pZCB1cnNoaWZ0
MzIoVHJ1c3RlZEltbTMyIGltbSwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgUmVn
aXN0ZXJJRCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubG9hZENv
bnN0YW50KC0oaW1tLm1fdmFsdWUpLCBzY3IpOworICAgICAgICBtX2Fzc2VtYmxlci5zaGFSZWdS
ZWcoZGVzdCwgc2NyKTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICB9CisKKyAg
ICBDYWxsIGNhbGwoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIENhbGwobV9hc3NlbWJsZXIuY2Fs
bCgpLCBDYWxsOjpMaW5rYWJsZSk7CisgICAgfQorCisgICAgQ2FsbCBuZWFyQ2FsbCgpCisgICAg
eworICAgICAgICByZXR1cm4gQ2FsbChtX2Fzc2VtYmxlci5jYWxsKCksIENhbGw6OkxpbmthYmxl
TmVhcik7CisgICAgfQorCisgICAgQ2FsbCBjYWxsKFJlZ2lzdGVySUQgdGFyZ2V0KQorICAgIHsK
KyAgICAgICAgcmV0dXJuIENhbGwobV9hc3NlbWJsZXIuY2FsbCh0YXJnZXQpLCBDYWxsOjpOb25l
KTsKKyAgICB9CisKKyAgICB2b2lkIGJyZWFrcG9pbnQoKQorICAgIHsKKyAgICAgICAgbV9hc3Nl
bWJsZXIuYmtwdCgpOworICAgICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKKyAgICB9CisKKyAgICBK
dW1wIGJyYW5jaFB0cldpdGhQYXRjaChDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBsZWZ0LCBE
YXRhTGFiZWxQdHImIGRhdGFMYWJlbCwgVHJ1c3RlZEltbVB0ciBpbml0aWFsUmlnaHRWYWx1ZSA9
IFRydXN0ZWRJbW1QdHIoMCkpCisgICAgeworICAgICAgICBSZWdpc3RlcklEIGRhdGFUZW1wUmVn
aXN0ZXIgPSBjbGFpbVNjcmF0Y2goKTsKKworICAgICAgICBkYXRhTGFiZWwgPSBtb3ZlV2l0aFBh
dGNoKGluaXRpYWxSaWdodFZhbHVlLCBkYXRhVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgbV9hc3Nl
bWJsZXIuY21wbFJlZ1JlZyhkYXRhVGVtcFJlZ2lzdGVyLCBsZWZ0LCBjb25kKTsKKyAgICAgICAg
cmVsZWFzZVNjcmF0Y2goZGF0YVRlbXBSZWdpc3Rlcik7CisKKyAgICAgICAgaWYgKGNvbmQgPT0g
Tm90RXF1YWwpCisgICAgICAgICAgICByZXR1cm4gYnJhbmNoRmFsc2UoKTsKKyAgICAgICAgcmV0
dXJuIGJyYW5jaFRydWUoKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaFB0cldpdGhQYXRjaChD
b25kaXRpb24gY29uZCwgQWRkcmVzcyBsZWZ0LCBEYXRhTGFiZWxQdHImIGRhdGFMYWJlbCwgVHJ1
c3RlZEltbVB0ciBpbml0aWFsUmlnaHRWYWx1ZSA9IFRydXN0ZWRJbW1QdHIoMCkpCisgICAgewor
ICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWltU2NyYXRjaCgpOworCisgICAgICAgIG1fYXNz
ZW1ibGVyLmxvYWRDb25zdGFudChsZWZ0Lm9mZnNldCwgc2NyKTsKKyAgICAgICAgbV9hc3NlbWJs
ZXIuYWRkbFJlZ1JlZyhsZWZ0LmJhc2UsIHNjcik7CisgICAgICAgIG1fYXNzZW1ibGVyLm1vdmxN
ZW1SZWcoc2NyLCBzY3IpOworICAgICAgICBSZWdpc3RlcklEIHNjcjEgPSBjbGFpbVNjcmF0Y2go
KTsKKyAgICAgICAgZGF0YUxhYmVsID0gbW92ZVdpdGhQYXRjaChpbml0aWFsUmlnaHRWYWx1ZSwg
c2NyMSk7CisgICAgICAgIG1fYXNzZW1ibGVyLmNtcGxSZWdSZWcoc2NyMSwgc2NyLCBjb25kKTsK
KyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2Ny
MSk7CisKKyAgICAgICAgaWYgKGNvbmQgPT0gTm90RXF1YWwpCisgICAgICAgICAgICByZXR1cm4g
YnJhbmNoRmFsc2UoKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaFRydWUoKTsKKyAgICB9CisKKyAg
ICB2b2lkIHJldCgpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5yZXQoKTsKKyAgICAgICAg
bV9hc3NlbWJsZXIubm9wKCk7CisgICAgfQorCisgICAgRGF0YUxhYmVsUHRyIHN0b3JlUHRyV2l0
aFBhdGNoKFRydXN0ZWRJbW1QdHIgaW5pdGlhbFZhbHVlLCBJbXBsaWNpdEFkZHJlc3MgYWRkcmVz
cykKKyAgICB7CisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisgICAg
ICAgIERhdGFMYWJlbFB0ciBsYWJlbCA9IG1vdmVXaXRoUGF0Y2goaW5pdGlhbFZhbHVlLCBzY3Ip
OworICAgICAgICBzdG9yZTMyKHNjciwgYWRkcmVzcyk7CisgICAgICAgIHJlbGVhc2VTY3JhdGNo
KHNjcik7CisgICAgICAgIHJldHVybiBsYWJlbDsKKyAgICB9CisKKyAgICBEYXRhTGFiZWxQdHIg
c3RvcmVQdHJXaXRoUGF0Y2goSW1wbGljaXRBZGRyZXNzIGFkZHJlc3MpIHsgcmV0dXJuIHN0b3Jl
UHRyV2l0aFBhdGNoKFRydXN0ZWRJbW1QdHIoMCksIGFkZHJlc3MpOyB9CisKKyAgICBpbnQgc2l6
ZU9mQ29uc3RhbnRQb29sKCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX2Fzc2VtYmxlci5zaXpl
T2ZDb25zdGFudFBvb2woKTsKKyAgICB9CisKKyAgICBDYWxsIHRhaWxSZWN1cnNpdmVDYWxsKCkK
KyAgICB7CisgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CisKKyAgICAg
ICAgbV9hc3NlbWJsZXIubG9hZENvbnN0YW50VW5SZXVzYWJsZSgweDAsIHNjciwgdHJ1ZSk7Cisg
ICAgICAgIEp1bXAgbV9qdW1wID0gSnVtcChtX2Fzc2VtYmxlci5qbXAoc2NyKSk7CisgICAgICAg
IHJlbGVhc2VTY3JhdGNoKHNjcik7CisKKyAgICAgICAgcmV0dXJuIENhbGw6OmZyb21UYWlsSnVt
cChtX2p1bXApOworICAgIH0KKworICAgIENhbGwgbWFrZVRhaWxSZWN1cnNpdmVDYWxsKEp1bXAg
b2xkSnVtcCkKKyAgICB7CisgICAgICAgIG9sZEp1bXAubGluayh0aGlzKTsKKyAgICAgICAgcmV0
dXJuIHRhaWxSZWN1cnNpdmVDYWxsKCk7CisgICAgfQorCitwcml2YXRlOgorICAgIGZyaWVuZCBj
bGFzcyBMaW5rQnVmZmVyOworICAgIGZyaWVuZCBjbGFzcyBSZXBhdGNoQnVmZmVyOworCisgICAg
c3RhdGljIHZvaWQgbGlua0NhbGwodm9pZCosIENhbGwsIEZ1bmN0aW9uUHRyKTsKKyAgICBzdGF0
aWMgdm9pZCByZXBhdGNoQ2FsbChDb2RlTG9jYXRpb25DYWxsLCBDb2RlTG9jYXRpb25MYWJlbCk7
CisgICAgc3RhdGljIHZvaWQgcmVwYXRjaENhbGwoQ29kZUxvY2F0aW9uQ2FsbCwgRnVuY3Rpb25Q
dHIpOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoQVNTRU1C
TEVSKQorCisjZW5kaWYgLy8gTWFjcm9Bc3NlbWJsZXJTSDRfaApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9TSDRBc3NlbWJsZXIuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvU0g0QXNzZW1ibGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uNTcyNmFlOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvU0g0QXNzZW1ibGVyLmgKQEAgLTAsMCArMSwyMDY3IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDA5LTIwMTEgU1RNaWNyb2VsZWN0cm9uaWNzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBTSDRBc3NlbWJsZXJfaAorI2RlZmluZSBTSDRBc3NlbWJsZXJfaAorCisjaWYgRU5BQkxFKEFT
U0VNQkxFUikgJiYgQ1BVKFNINCkKKworI2luY2x1ZGUgIkFzc2VtYmxlckJ1ZmZlci5oIgorI2lu
Y2x1ZGUgIkFzc2VtYmxlckJ1ZmZlcldpdGhDb25zdGFudFBvb2wuaCIKKyNpbmNsdWRlIDxzdGRh
cmcuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgor
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworI2lmbmRlZiBOREVCVUcKKyNkZWZpbmUgU0g0X0FT
U0VNQkxFUl9UUkFDSU5HCisjZW5kaWYKKworbmFtZXNwYWNlIEpTQyB7Cit0eXBlZGVmIHVpbnQx
Nl90IFNINFdvcmQ7CisKK2VudW0geworICAgIElOVkFMSURfT1BDT0RFID0gMHhmZmZmLAorICAg
IEFERF9PUENPREUgPSAweDMwMGMsCisgICAgQURESU1NX09QQ09ERSA9IDB4NzAwMCwKKyAgICBB
RERDX09QQ09ERSA9IDB4MzAwZSwKKyAgICBBRERWX09QQ09ERSA9IDB4MzAwZiwKKyAgICBBTkRf
T1BDT0RFID0gMHgyMDA5LAorICAgIEFORElNTV9PUENPREUgPSAweGM5MDAsCisgICAgRElWMF9P
UENPREUgPSAweDIwMDcsCisgICAgRElWMV9PUENPREUgPSAweDMwMDQsCisgICAgQkZfT1BDT0RF
ID0gMHg4YjAwLAorICAgIEJGU19PUENPREUgPSAweDhmMDAsCisgICAgQlJBX09QQ09ERSA9IDB4
YTAwMCwKKyAgICBCUkFGX09QQ09ERSA9IDB4MDAyMywKKyAgICBOT1BfT1BDT0RFID0gMHgwMDA5
LAorICAgIEJTUl9PUENPREUgPSAweGIwMDAsCisgICAgUlRTX09QQ09ERSA9IDB4MDAwYiwKKyAg
ICBCVF9PUENPREUgPSAweDg5MDAsCisgICAgQlRTX09QQ09ERSA9IDB4OGQwMCwKKyAgICBCU1JG
X09QQ09ERSA9IDB4MDAwMywKKyAgICBCUktfT1BDT0RFID0gMHgwMDNiLAorICAgIEZUUkNfT1BD
T0RFID0gMHhmMDNkLAorICAgIENNUEVRX09QQ09ERSA9IDB4MzAwMCwKKyAgICBDTVBFUUlNTV9P
UENPREUgPSAweDg4MDAsCisgICAgQ01QR0VfT1BDT0RFID0gMHgzMDAzLAorICAgIENNUEdUX09Q
Q09ERSA9IDB4MzAwNywKKyAgICBDTVBISV9PUENPREUgPSAweDMwMDYsCisgICAgQ01QSFNfT1BD
T0RFID0gMHgzMDAyLAorICAgIENNUFBMX09QQ09ERSA9IDB4NDAxNSwKKyAgICBDTVBQWl9PUENP
REUgPSAweDQwMTEsCisgICAgQ01QU1RSX09QQ09ERSA9IDB4MjAwYywKKyAgICBEVF9PUENPREUg
PSAweDQwMTAsCisgICAgRkNNUEVRX09QQ09ERSA9IDB4ZjAwNCwKKyAgICBGQ01QR1RfT1BDT0RF
ID0gMHhmMDA1LAorICAgIEZNT1ZfT1BDT0RFID0gMHhmMDBjLAorICAgIEZBRERfT1BDT0RFID0g
MHhmMDAwLAorICAgIEZNVUxfT1BDT0RFID0gMHhmMDAyLAorICAgIEZTVUJfT1BDT0RFID0gMHhm
MDAxLAorICAgIEZESVZfT1BDT0RFID0gMHhmMDAzLAorICAgIEZORUdfT1BDT0RFID0gMHhmMDRk
LAorICAgIEpNUF9PUENPREUgPSAweDQwMmIsCisgICAgSlNSX09QQ09ERSA9IDB4NDAwYiwKKyAg
ICBMRFNQUl9PUENPREUgPSAweDQwMmEsCisgICAgTERTTFBSX09QQ09ERSA9IDB4NDAyNiwKKyAg
ICBNT1ZfT1BDT0RFID0gMHg2MDAzLAorICAgIE1PVklNTV9PUENPREUgPSAweGUwMDAsCisgICAg
TU9WQl9XUklURV9STl9PUENPREUgPSAweDIwMDAsCisgICAgTU9WQl9XUklURV9STkRFQ19PUENP
REUgPSAweDIwMDQsCisgICAgTU9WQl9XUklURV9SMFJOX09QQ09ERSA9IDB4MDAwNCwKKyAgICBN
T1ZCX1dSSVRFX09GRkdCUl9PUENPREUgPSAweGMwMDAsCisgICAgTU9WQl9XUklURV9PRkZSTl9P
UENPREUgPSAweDgwMDAsCisgICAgTU9WQl9SRUFEX1JNX09QQ09ERSA9IDB4NjAwMCwKKyAgICBN
T1ZCX1JFQURfUk1JTkNfT1BDT0RFID0gMHg2MDA0LAorICAgIE1PVkJfUkVBRF9SMFJNX09QQ09E
RSA9IDB4MDAwYywKKyAgICBNT1ZCX1JFQURfT0ZGR0JSX09QQ09ERSA9IDB4YzQwMCwKKyAgICBN
T1ZCX1JFQURfT0ZGUk1fT1BDT0RFID0gMHg4NDAwLAorICAgIE1PVkxfV1JJVEVfUk5fT1BDT0RF
ID0gMHgyMDAyLAorICAgIE1PVkxfV1JJVEVfUk5ERUNfT1BDT0RFID0gMHgyMDA2LAorICAgIE1P
VkxfV1JJVEVfUjBSTl9PUENPREUgPSAweDAwMDYsCisgICAgTU9WTF9XUklURV9PRkZHQlJfT1BD
T0RFID0gMHhjMjAwLAorICAgIE1PVkxfV1JJVEVfT0ZGUk5fT1BDT0RFID0gMHgxMDAwLAorICAg
IE1PVkxfUkVBRF9STV9PUENPREUgPSAweDYwMDIsCisgICAgTU9WTF9SRUFEX1JNSU5DX09QQ09E
RSA9IDB4NjAwNiwKKyAgICBNT1ZMX1JFQURfUjBSTV9PUENPREUgPSAweDAwMGUsCisgICAgTU9W
TF9SRUFEX09GRkdCUl9PUENPREUgPSAweGM2MDAsCisgICAgTU9WTF9SRUFEX09GRlBDX09QQ09E
RSA9IDB4ZDAwMCwKKyAgICBNT1ZMX1JFQURfT0ZGUk1fT1BDT0RFID0gMHg1MDAwLAorICAgIE1P
VldfV1JJVEVfUk5fT1BDT0RFID0gMHgyMDAxLAorICAgIE1PVldfUkVBRF9STV9PUENPREUgPSAw
eDYwMDEsCisgICAgTU9WV19SRUFEX1IwUk1fT1BDT0RFID0gMHgwMDBkLAorICAgIE1PVldfUkVB
RF9PRkZSTV9PUENPREUgPSAweDg1MDAsCisgICAgTU9WV19SRUFEX09GRlBDX09QQ09ERSA9IDB4
OTAwMCwKKyAgICBNT1ZBX1JFQURfT0ZGUENfT1BDT0RFID0gMHhjNzAwLAorICAgIE1PVlRfT1BD
T0RFID0gMHgwMDI5LAorICAgIE1VTExfT1BDT0RFID0gMHgwMDA3LAorICAgIERNVUxMX0xfT1BD
T0RFID0gMHgzMDA1LAorICAgIFNUU01BQ0xfT1BDT0RFID0gMHgwMDFhLAorICAgIFNUU01BQ0hf
T1BDT0RFID0gMHgwMDBhLAorICAgIERNVUxTTF9PUENPREUgPSAweDMwMGQsCisgICAgTkVHX09Q
Q09ERSA9IDB4NjAwYiwKKyAgICBORUdDX09QQ09ERSA9IDB4NjAwYSwKKyAgICBOT1RfT1BDT0RF
ID0gMHg2MDA3LAorICAgIE9SX09QQ09ERSA9IDB4MjAwYiwKKyAgICBPUklNTV9PUENPREUgPSAw
eGNiMDAsCisgICAgT1JCSU1NX09QQ09ERSA9IDB4Y2YwMCwKKyAgICBTRVRTX09QQ09ERSA9IDB4
MDA1OCwKKyAgICBTRVRUX09QQ09ERSA9IDB4MDAxOCwKKyAgICBTSEFEX09QQ09ERSA9IDB4NDAw
YywKKyAgICBTSEFMX09QQ09ERSA9IDB4NDAyMCwKKyAgICBTSEFSX09QQ09ERSA9IDB4NDAyMSwK
KyAgICBTSExEX09QQ09ERSA9IDB4NDAwZCwKKyAgICBTSExMX09QQ09ERSA9IDB4NDAwMCwKKyAg
ICBTSExMMl9PUENPREUgPSAweDQwMDgsCisgICAgU0hMTDhfT1BDT0RFID0gMHg0MDE4LAorICAg
IFNITEwxNl9PUENPREUgPSAweDQwMjgsCisgICAgU0hMUl9PUENPREUgPSAweDQwMDEsCisgICAg
U0hMUjJfT1BDT0RFID0gMHg0MDA5LAorICAgIFNITFI4X09QQ09ERSA9IDB4NDAxOSwKKyAgICBT
SExSMTZfT1BDT0RFID0gMHg0MDI5LAorICAgIFNUU1BSX09QQ09ERSA9IDB4MDAyYSwKKyAgICBT
VFNMUFJfT1BDT0RFID0gMHg0MDIyLAorICAgIEZMT0FUX09QQ09ERSA9IDB4ZjAyZCwKKyAgICBT
VUJfT1BDT0RFID0gMHgzMDA4LAorICAgIFNVQkNfT1BDT0RFID0gMHgzMDBhLAorICAgIFNVQlZf
T1BDT0RFID0gMHgzMDBiLAorICAgIFRTVF9PUENPREUgPSAweDIwMDgsCisgICAgVFNUSU1NX09Q
Q09ERSA9IDB4YzgwMCwKKyAgICBUU1RCX09QQ09ERSA9IDB4Y2MwMCwKKyAgICBFWFRVV19PUENP
REUgPSAweDYwMGQsCisgICAgWE9SX09QQ09ERSA9IDB4MjAwYSwKKyAgICBYT1JJTU1fT1BDT0RF
ID0gMHhjYTAwLAorICAgIFhPUkJfT1BDT0RFID0gMHhjZTAwLAorICAgIEZNT1ZTX1JFQURfUk1f
SU5DX09QQ09ERSA9IDB4ZjAwOSwKKyAgICBGTU9WU19SRUFEX1JNX09QQ09ERSA9IDB4ZjAwOCwK
KyAgICBGTU9WU19SRUFEX1IwUk1fT1BDT0RFID0gMHhmMDA2LAorICAgIEZNT1ZTX1dSSVRFX1JO
X09QQ09ERSA9IDB4ZjAwYSwKKyAgICBGTU9WU19XUklURV9STl9ERUNfT1BDT0RFID0gMHhmMDBi
LAorICAgIEZNT1ZTX1dSSVRFX1IwUk5fT1BDT0RFID0gMHhmMDA3LAorICAgIEZDTlZEU19EUk1f
RlBVTF9PUENPREUgPSAweGYwYmQsCisgICAgTERTX1JNX0ZQVUxfT1BDT0RFID0gMHg0MDVhLAor
ICAgIEZMRFNfRlJNX0ZQVUxfT1BDT0RFID0gMHhmMDFkLAorICAgIFNUU19GUFVMX1JOX09QQ09E
RSA9IDB4MDA1YSwKKyAgICBGU1RTX0ZQVUxfRlJOX09QQ09ERSA9IDB4RjAwZCwKKyAgICBMRFNG
UFNDUl9PUENPREUgPSAweDQwNmEsCisgICAgU1RTRlBTQ1JfT1BDT0RFID0gMHgwMDZhLAorICAg
IExEU1JNRlBVTF9PUENPREUgPSAweDQwNWEsCisgICAgRlNUU0ZQVUxGUk5fT1BDT0RFID0gMHhm
MDBkLAorICAgIEZTUVJUX09QQ09ERSA9IDB4ZjA2ZCwKKyAgICBGU0NIR19PUENPREUgPSAweGYz
ZmQsCisgICAgQ0xSVF9PUENPREUgPSA4LAorfTsKKworbmFtZXNwYWNlIFNINFJlZ2lzdGVycyB7
Cit0eXBlZGVmIGVudW0geworICAgIHIwLAorICAgIHIxLAorICAgIHIyLAorICAgIHIzLAorICAg
IHI0LAorICAgIHI1LAorICAgIHI2LAorICAgIHI3LAorICAgIHI4LAorICAgIHI5LAorICAgIHIx
MCwKKyAgICByMTEsCisgICAgcjEyLAorICAgIHIxMywKKyAgICByMTQsIGZwID0gcjE0LAorICAg
IHIxNSwgc3AgPSByMTUsCisgICAgcGMsCisgICAgcHIsCit9IFJlZ2lzdGVySUQ7CisKK3R5cGVk
ZWYgZW51bSB7CisgICAgZnIwLCBkcjAgPSBmcjAsCisgICAgZnIxLAorICAgIGZyMiwgZHIyID0g
ZnIyLAorICAgIGZyMywKKyAgICBmcjQsIGRyNCA9IGZyNCwKKyAgICBmcjUsCisgICAgZnI2LCBk
cjYgPSBmcjYsCisgICAgZnI3LAorICAgIGZyOCwgZHI4ID0gZnI4LAorICAgIGZyOSwKKyAgICBm
cjEwLCBkcjEwID0gZnIxMCwKKyAgICBmcjExLAorICAgIGZyMTIsIGRyMTIgPSBmcjEyLAorICAg
IGZyMTMsCisgICAgZnIxNCwgZHIxNCA9IGZyMTQsCisgICAgZnIxNSwKK30gRlBSZWdpc3RlcklE
OworfQorCitpbmxpbmUgdWludDE2X3QgZ2V0T3Bjb2RlR3JvdXAxKHVpbnQxNl90IG9wYywgaW50
IHJtLCBpbnQgcm4pCit7CisgICAgcmV0dXJuIChvcGMgfCAoKHJtICYgMHhmKSA8PCA4KSB8ICgo
cm4gJiAweGYpIDw8IDQpKTsKK30KKworaW5saW5lIHVpbnQxNl90IGdldE9wY29kZUdyb3VwMih1
aW50MTZfdCBvcGMsIGludCBybSkKK3sKKyAgICByZXR1cm4gKG9wYyB8ICgocm0gJiAweGYpIDw8
IDgpKTsKK30KKworaW5saW5lIHVpbnQxNl90IGdldE9wY29kZUdyb3VwMyh1aW50MTZfdCBvcGMs
IGludCBybSwgaW50IHJuKQoreworICAgIHJldHVybiAob3BjIHwgKChybSAmIDB4ZikgPDwgOCkg
fCAocm4gJiAweGZmKSk7Cit9CisKK2lubGluZSB1aW50MTZfdCBnZXRPcGNvZGVHcm91cDQodWlu
dDE2X3Qgb3BjLCBpbnQgcm0sIGludCBybiwgaW50IG9mZnNldCkKK3sKKyAgICByZXR1cm4gKG9w
YyB8ICgocm0gJiAweGYpIDw8IDgpIHwgKChybiAmIDB4ZikgPDwgNCkgfCAob2Zmc2V0ICYgMHhm
KSk7Cit9CisKK2lubGluZSB1aW50MTZfdCBnZXRPcGNvZGVHcm91cDUodWludDE2X3Qgb3BjLCBp
bnQgcm0pCit7CisgICAgcmV0dXJuIChvcGMgfCAocm0gJiAweGZmKSk7Cit9CisKK2lubGluZSB1
aW50MTZfdCBnZXRPcGNvZGVHcm91cDYodWludDE2X3Qgb3BjLCBpbnQgcm0pCit7CisgICAgcmV0
dXJuIChvcGMgfCAocm0gJiAweGZmZikpOworfQorCitpbmxpbmUgdWludDE2X3QgZ2V0T3Bjb2Rl
R3JvdXA3KHVpbnQxNl90IG9wYywgaW50IHJtKQoreworICAgIHJldHVybiAob3BjIHwgKChybSAm
IDB4NykgPDwgOSkpOworfQorCitpbmxpbmUgdWludDE2X3QgZ2V0T3Bjb2RlR3JvdXA4KHVpbnQx
Nl90IG9wYywgaW50IHJtLCBpbnQgcm4pCit7CisgICAgcmV0dXJuIChvcGMgfCAoKHJtICYgMHg3
KSA8PCA5KSB8ICgocm4gJiAweDcpIDw8IDUpKTsKK30KKworaW5saW5lIHVpbnQxNl90IGdldE9w
Y29kZUdyb3VwOSh1aW50MTZfdCBvcGMsIGludCBybSwgaW50IHJuKQoreworICAgIHJldHVybiAo
b3BjIHwgKChybSAmIDB4ZikgPDwgOCkgfCAoKHJuICYgMHg3KSA8PCA1KSk7Cit9CisKK2lubGlu
ZSB1aW50MTZfdCBnZXRPcGNvZGVHcm91cDEwKHVpbnQxNl90IG9wYywgaW50IHJtLCBpbnQgcm4p
Cit7CisgICAgcmV0dXJuIChvcGMgfCAoKHJtICYgMHg3KSA8PCA5KSB8ICgocm4gJiAweGYpIDw8
IDQpKTsKK30KKworaW5saW5lIHVpbnQxNl90IGdldE9wY29kZUdyb3VwMTEodWludDE2X3Qgb3Bj
LCBpbnQgcm0sIGludCBybikKK3sKKyAgICByZXR1cm4gKG9wYyB8ICgocm0gJiAweGYpIDw8IDQp
IHwgKHJuICYgMHhmKSk7Cit9CisKK2lubGluZSB1aW50MTZfdCBnZXRSbih1aW50MTZfdCB4KQor
eworICAgIHJldHVybiAoKHggJiAweGYwMCkgPj4gOCk7Cit9CisKK2lubGluZSB1aW50MTZfdCBn
ZXRSbSh1aW50MTZfdCB4KQoreworICAgIHJldHVybiAoKHggJiAweGYwKSA+PiA0KTsKK30KKwor
aW5saW5lIHVpbnQxNl90IGdldERpc3AodWludDE2X3QgeCkKK3sKKyAgICByZXR1cm4gKHggJiAw
eGYpOworfQorCitpbmxpbmUgdWludDE2X3QgZ2V0SW1tOCh1aW50MTZfdCB4KQoreworICAgIHJl
dHVybiAoeCAmIDB4ZmYpOworfQorCitpbmxpbmUgdWludDE2X3QgZ2V0SW1tMTIodWludDE2X3Qg
eCkKK3sKKyAgICByZXR1cm4gKHggJiAweGZmZik7Cit9CisKK2lubGluZSB1aW50MTZfdCBnZXRE
Um4odWludDE2X3QgeCkKK3sKKyAgICByZXR1cm4gKCh4ICYgMHhlMDApID4+IDkpOworfQorCitp
bmxpbmUgdWludDE2X3QgZ2V0RFJtKHVpbnQxNl90IHgpCit7CisgICAgcmV0dXJuICgoeCAmIDB4
ZTApID4+IDUpOworfQorCitjbGFzcyBTSDRBc3NlbWJsZXIgeworcHVibGljOgorICAgIHR5cGVk
ZWYgU0g0UmVnaXN0ZXJzOjpSZWdpc3RlcklEIFJlZ2lzdGVySUQ7CisgICAgdHlwZWRlZiBTSDRS
ZWdpc3RlcnM6OkZQUmVnaXN0ZXJJRCBGUFJlZ2lzdGVySUQ7CisgICAgdHlwZWRlZiBBc3NlbWJs
ZXJCdWZmZXJXaXRoQ29uc3RhbnRQb29sPDUxMiwgNCwgMiwgU0g0QXNzZW1ibGVyPiBTSDRCdWZm
ZXI7CisgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgc2NyYXRjaFJlZzEgPSBTSDRSZWdpc3Rl
cnM6OnIzOworICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIHNjcmF0Y2hSZWcyID0gU0g0UmVn
aXN0ZXJzOjpyMTE7CisgICAgc3RhdGljIGNvbnN0IHVpbnQzMl90IG1heEluc3RydWN0aW9uU2l6
ZSA9IDE2OworCisgICAgZW51bSB7CisgICAgICAgIHBhZEZvckFsaWduOCA9IDB4MDAsCisgICAg
ICAgIHBhZEZvckFsaWduMTYgPSAweDAwMDksCisgICAgICAgIHBhZEZvckFsaWduMzIgPSAweDAw
MDkwMDA5LAorICAgIH07CisKKyAgICBTSDRBc3NlbWJsZXIoKQorICAgIHsKKyAgICAgICAgbV9j
bGFpbXNjcmF0Y2hSZWcgPSAweDA7CisgICAgfQorCisgICAgLy8gU0g0IGNvbmRpdGlvbiBjb2Rl
cworICAgIHR5cGVkZWYgZW51bSB7CisgICAgICAgIEVRID0gMHgwLCAvLyBFcXVhbAorICAgICAg
ICBORSA9IDB4MSwgLy8gTm90IEVxdWFsCisgICAgICAgIEhTID0gMHgyLCAvLyBVbnNpZ2VuZCBH
cmVhdGVyIFRoYW4gZXF1YWwKKyAgICAgICAgSEkgPSAweDMsIC8vIFVuc2lnZW5kIEdyZWF0ZXIg
VGhhbgorICAgICAgICBMUyA9IDB4NCwgLy8gVW5zaWdlbmQgTG93ZXIgb3IgU2FtZQorICAgICAg
ICBMSSA9IDB4NSwgLy8gVW5zaWdlbmQgTG93ZXIKKyAgICAgICAgR0UgPSAweDYsIC8vIEdyZWF0
ZXIgb3IgRXF1YWwKKyAgICAgICAgTFQgPSAweDcsIC8vIExlc3MgVGhhbgorICAgICAgICBHVCA9
IDB4OCwgLy8gR3JlYXRlciBUaGFuCisgICAgICAgIExFID0gMHg5LCAvLyBMZXNzIG9yIEVxdWFs
CisgICAgICAgIE9GID0gMHhhLCAvLyBPdmVyRmxvdworICAgICAgICBTSSA9IDB4YiwgLy8gU2ln
bmVkCisgICAgICAgIEVRVT0gMHhjLCAvLyBFcXVhbCBvciB1bm9yZGVyZWQoTmFOKQorICAgICAg
ICBORVU9IDB4ZCwKKyAgICAgICAgR1RVPSAweGUsCisgICAgICAgIEdFVT0gMHhmLAorICAgICAg
ICBMVFU9IDB4MTAsCisgICAgICAgIExFVT0gMHgxMSwKKyAgICB9IENvbmRpdGlvbjsKKworICAg
IC8vIE9wYXF1ZSBsYWJlbCB0eXBlcworcHVibGljOgorICAgIGNsYXNzIEptcFNyYyB7CisgICAg
ICAgIGZyaWVuZCBjbGFzcyBTSDRBc3NlbWJsZXI7CisgICAgcHVibGljOgorICAgICAgICBKbXBT
cmMoKQorICAgICAgICAgICAgOiBtX29mZnNldCgtMSkKKyAgICAgICAgeworICAgICAgICB9CisK
KyAgICBwcml2YXRlOgorICAgICAgICBKbXBTcmMoaW50IG9mZnNldCkKKyAgICAgICAgICAgIDog
bV9vZmZzZXQob2Zmc2V0KQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBpbnQgbV9v
ZmZzZXQ7CisgICAgfTsKKworICAgIGNsYXNzIEptcERzdCB7CisgICAgICAgIGZyaWVuZCBjbGFz
cyBTSDRBc3NlbWJsZXI7CisgICAgcHVibGljOgorICAgICAgICBKbXBEc3QoKQorICAgICAgICAg
ICAgOiBtX29mZnNldCgtMSkKKyAgICAgICAgICAgICwgbV91c2VkKGZhbHNlKQorICAgICAgICB7
CisgICAgICAgIH0KKworICAgICAgICBib29sIGlzVXNlZCgpIGNvbnN0IHsgcmV0dXJuIG1fdXNl
ZDsgfQorICAgICAgICBib29sIGlzU2V0KCkgY29uc3QgeyByZXR1cm4gKG1fb2Zmc2V0ICE9IC0x
KTsgfQorICAgICAgICB2b2lkIHVzZWQoKSB7IG1fdXNlZCA9IHRydWU7IH0KKworICAgIHByaXZh
dGU6CisgICAgICAgIEptcERzdChpbnQgb2Zmc2V0KQorICAgICAgICAgICAgOiBtX29mZnNldChv
ZmZzZXQpCisgICAgICAgICAgICAsIG1fdXNlZChmYWxzZSkKKyAgICAgICAgeworICAgICAgICAg
ICAgQVNTRVJUKG1fb2Zmc2V0ID09IG9mZnNldCk7CisgICAgICAgIH0KKworICAgICAgICBpbnQg
bV9vZmZzZXQgOiAzMTsKKyAgICAgICAgaW50IG1fdXNlZCA6IDE7CisgICAgfTsKKworICAgIGJv
b2wgaXNJbW1lZGlhdGUoaW50IGNvbnN0YW50KQorICAgIHsKKyAgICAgICAgcmV0dXJuICgoY29u
c3RhbnQgPD0gMTI3KSAmJiAoY29uc3RhbnQgPj0gLTEyOCkpOworICAgIH0KKworICAgIFJlZ2lz
dGVySUQgY2xhaW1TY3JhdGNoKCkKKyAgICB7CisgICAgICAgIEFTU0VSVCgobV9jbGFpbXNjcmF0
Y2hSZWcgIT0gMHgzKSk7CisKKyAgICAgICAgaWYgKCEobV9jbGFpbXNjcmF0Y2hSZWcgJiAweDEp
KSB7CisgICAgICAgICAgICBtX2NsYWltc2NyYXRjaFJlZyA9IChtX2NsYWltc2NyYXRjaFJlZyB8
IDB4MSk7CisgICAgICAgICAgICByZXR1cm4gc2NyYXRjaFJlZzE7CisgICAgICAgIH0KKworICAg
ICAgICBtX2NsYWltc2NyYXRjaFJlZyA9IChtX2NsYWltc2NyYXRjaFJlZyB8IDB4Mik7CisgICAg
ICAgIHJldHVybiBzY3JhdGNoUmVnMjsKKyAgICB9CisKKyAgICB2b2lkIHJlbGVhc2VTY3JhdGNo
KFJlZ2lzdGVySUQgc2NyYXRjaFIpCisgICAgeworICAgICAgICBpZiAoc2NyYXRjaFIgPT0gc2Ny
YXRjaFJlZzEpCisgICAgICAgICAgICBtX2NsYWltc2NyYXRjaFJlZyA9IChtX2NsYWltc2NyYXRj
aFJlZyAmIDB4Mik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fY2xhaW1zY3JhdGNoUmVn
ID0gKG1fY2xhaW1zY3JhdGNoUmVnICYgMHgxKTsKKyAgICB9CisKKyAgICAvLyBTdGFjayBvcGVy
YXRpb25zCisKKyAgICB2b2lkIHB1c2hSZWcoUmVnaXN0ZXJJRCByZWcpCisgICAgeworICAgICAg
ICBpZiAocmVnID09IFNINFJlZ2lzdGVyczo6cHIpIHsKKyAgICAgICAgICAgIG9uZVNob3J0T3Ao
Z2V0T3Bjb2RlR3JvdXAyKFNUU0xQUl9PUENPREUsIFNINFJlZ2lzdGVyczo6c3ApKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIG9uZVNob3J0T3AoZ2V0T3Bjb2Rl
R3JvdXAxKE1PVkxfV1JJVEVfUk5ERUNfT1BDT0RFLCBTSDRSZWdpc3RlcnM6OnNwLCByZWcpKTsK
KyAgICB9CisKKyAgICB2b2lkIHBvcFJlZyhSZWdpc3RlcklEIHJlZykKKyAgICB7CisgICAgICAg
IGlmIChyZWcgPT0gU0g0UmVnaXN0ZXJzOjpwcikgeworICAgICAgICAgICAgb25lU2hvcnRPcChn
ZXRPcGNvZGVHcm91cDIoTERTTFBSX09QQ09ERSwgU0g0UmVnaXN0ZXJzOjpzcCkpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgb25lU2hvcnRPcChnZXRPcGNvZGVH
cm91cDEoTU9WTF9SRUFEX1JNSU5DX09QQ09ERSwgcmVnLCBTSDRSZWdpc3RlcnM6OnNwKSk7Cisg
ICAgfQorCisgICAgdm9pZCBtb3Z0KFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgdWlu
dDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXAyKE1PVlRfT1BDT0RFLCBkc3QpOworICAgICAgICBv
bmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgLy8gQXJpdGhtZXRpYyBvcGVyYXRpb25zCisK
KyAgICB2b2lkIGFkZGxSZWdSZWcoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQorICAg
IHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXAxKEFERF9PUENPREUsIGRz
dCwgc3JjKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAgIHZvaWQgYWRk
Y2xSZWdSZWcoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAg
dWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXAxKEFERENfT1BDT0RFLCBkc3QsIHNyYyk7Cisg
ICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lkIGFkZHZsUmVnUmVnKFJl
Z2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9w
YyA9IGdldE9wY29kZUdyb3VwMShBRERWX09QQ09ERSwgZHN0LCBzcmMpOworICAgICAgICBvbmVT
aG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCBhZGRsSW1tOHIoaW50IGltbTgsIFJlZ2lz
dGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKChpbW04IDw9IDEyNykgJiYgKGltbTgg
Pj0gLTEyOCkpOworCisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3VwMyhBRERJ
TU1fT1BDT0RFLCBkc3QsIGltbTgpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQor
CisgICAgdm9pZCBhbmRsUmVnUmVnKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCkKKyAg
ICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3VwMShBTkRfT1BDT0RFLCBk
c3QsIHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lkIGFu
ZGxJbW04cihpbnQgaW1tOCwgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICBBU1NFUlQo
KGltbTggPD0gMjU1KSAmJiAoaW1tOCA+PSAwKSk7CisgICAgICAgIEFTU0VSVChkc3QgPT0gU0g0
UmVnaXN0ZXJzOjpyMCk7CisKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXA1
KEFORElNTV9PUENPREUsIGltbTgpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQor
CisgICAgdm9pZCBkaXYxbFJlZ1JlZyhSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpCisg
ICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDEoRElWMV9PUENPREUs
IGRzdCwgc3JjKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAgIHZvaWQg
ZGl2MGxSZWdSZWcoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAg
ICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXAxKERJVjBfT1BDT0RFLCBkc3QsIHNyYyk7
CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lkIG5vdGxSZWcoUmVn
aXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3Bj
ID0gZ2V0T3Bjb2RlR3JvdXAxKE5PVF9PUENPREUsIGRzdCwgc3JjKTsKKyAgICAgICAgb25lU2hv
cnRPcChvcGMpOworICAgIH0KKworICAgIHZvaWQgb3JsUmVnUmVnKFJlZ2lzdGVySUQgc3JjLCBS
ZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdy
b3VwMShPUl9PUENPREUsIGRzdCwgc3JjKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAg
IH0KKworICAgIHZvaWQgb3JsSW1tOHIoaW50IGltbTgsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsK
KyAgICAgICAgQVNTRVJUKChpbW04IDw9IDI1NSkgJiYgKGltbTggPj0gMCkpOworICAgICAgICBB
U1NFUlQoZHN0ID09IFNINFJlZ2lzdGVyczo6cjApOworCisgICAgICAgIHVpbnQxNl90IG9wYyA9
IGdldE9wY29kZUdyb3VwNShPUklNTV9PUENPREUsIGltbTgpOworICAgICAgICBvbmVTaG9ydE9w
KG9wYyk7CisgICAgfQorCisgICAgdm9pZCBzdWJsUmVnUmVnKFJlZ2lzdGVySUQgc3JjLCBSZWdp
c3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91
cDEoU1VCX09QQ09ERSwgZHN0LCBzcmMpOworICAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAg
IH0KKworICAgIHZvaWQgc3VidmxSZWdSZWcoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0
KQorICAgIHsKKyAgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3VwMShTVUJWX09Q
Q09ERSwgZHN0LCBzcmMpOworICAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAg
IHZvaWQgeG9ybFJlZ1JlZyhSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpCisgICAgewor
ICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDEoWE9SX09QQ09ERSwgZHN0LCBz
cmMpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCB4b3JsSW1t
OHIoaW50IGltbTgsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKChpbW04
IDw9IDI1NSkgJiYgKGltbTggPj0gMCkpOworICAgICAgICBBU1NFUlQoZHN0ID09IFNINFJlZ2lz
dGVyczo6cjApOworCisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3VwNShYT1JJ
TU1fT1BDT0RFLCBpbW04KTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAg
IHZvaWQgc2hsbEltbThyKGludCBpbW0sIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAg
c3dpdGNoIChpbW0pIHsKKyAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgb25lU2hvcnRPcChn
ZXRPcGNvZGVHcm91cDIoU0hMTF9PUENPREUsIGRzdCkpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgIG9uZVNob3J0T3AoZ2V0T3Bjb2RlR3JvdXAyKFNI
TEwyX09QQ09ERSwgZHN0KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSA4Ogor
ICAgICAgICAgICAgb25lU2hvcnRPcChnZXRPcGNvZGVHcm91cDIoU0hMTDhfT1BDT0RFLCBkc3Qp
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDE2OgorICAgICAgICAgICAgb25l
U2hvcnRPcChnZXRPcGNvZGVHcm91cDIoU0hMTDE2X09QQ09ERSwgZHN0KSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBuZWcoUmVnaXN0ZXJJRCBkc3QsIFJl
Z2lzdGVySUQgc3JjKQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3Jv
dXAxKE5FR19PUENPREUsIGRzdCwgc3JjKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAg
IH0KKworICAgIHZvaWQgc2hsbFJlZ1JlZyhSZWdpc3RlcklEIGRzdCwgUmVnaXN0ZXJJRCByU2hp
ZnQpCisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDEoU0hMRF9P
UENPREUsIGRzdCwgclNoaWZ0KTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKwor
ICAgIHZvaWQgc2hsclJlZ1JlZyhSZWdpc3RlcklEIGRzdCwgUmVnaXN0ZXJJRCByU2hpZnQpCisg
ICAgeworICAgICAgICBuZWcoclNoaWZ0LCByU2hpZnQpOworICAgICAgICBzaGxsUmVnUmVnKGRz
dCwgclNoaWZ0KTsKKyAgICB9CisKKyAgICB2b2lkIHNoYXJSZWdSZWcoUmVnaXN0ZXJJRCBkc3Qs
IFJlZ2lzdGVySUQgclNoaWZ0KQorICAgIHsKKyAgICAgICAgbmVnKHJTaGlmdCwgclNoaWZ0KTsK
KyAgICAgICAgc2hhUmVnUmVnKGRzdCwgclNoaWZ0KTsKKyAgICB9CisKKyAgICB2b2lkIHNoYVJl
Z1JlZyhSZWdpc3RlcklEIGRzdCwgUmVnaXN0ZXJJRCByU2hpZnQpCisgICAgeworICAgICAgICB1
aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDEoU0hBRF9PUENPREUsIGRzdCwgclNoaWZ0KTsK
KyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAgIHZvaWQgc2hsckltbThyKGlu
dCBpbW0sIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgc3dpdGNoIChpbW0pIHsKKyAg
ICAgICAgY2FzZSAxOgorICAgICAgICAgICAgb25lU2hvcnRPcChnZXRPcGNvZGVHcm91cDIoU0hM
Ul9PUENPREUsIGRzdCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMjoKKyAg
ICAgICAgICAgIG9uZVNob3J0T3AoZ2V0T3Bjb2RlR3JvdXAyKFNITFIyX09QQ09ERSwgZHN0KSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSA4OgorICAgICAgICAgICAgb25lU2hv
cnRPcChnZXRPcGNvZGVHcm91cDIoU0hMUjhfT1BDT0RFLCBkc3QpKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIDE2OgorICAgICAgICAgICAgb25lU2hvcnRPcChnZXRPcGNvZGVH
cm91cDIoU0hMUjE2X09QQ09ERSwgZHN0KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9Cisg
ICAgfQorCisgICAgdm9pZCBpbXVsbFJlZ1JlZyhSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBk
c3QpCisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDEoTVVMTF9P
UENPREUsIGRzdCwgc3JjKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAg
IHZvaWQgZG11bGxSZWdSZWcoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsK
KyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXAxKERNVUxMX0xfT1BDT0RFLCBk
c3QsIHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lkIGRt
dWxzbFJlZ1JlZyhSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAg
ICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDEoRE1VTFNMX09QQ09ERSwgZHN0LCBzcmMp
OworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCBzdHNtYWNsKFJl
Z2lzdGVySUQgcmVnKQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3Jv
dXAyKFNUU01BQ0xfT1BDT0RFLCByZWcpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAg
fQorCisgICAgdm9pZCBzdHNtYWNoKFJlZ2lzdGVySUQgcmVnKQorICAgIHsKKyAgICAgICAgdWlu
dDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXAyKFNUU01BQ0hfT1BDT0RFLCByZWcpOworICAgICAg
ICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgLy8gQ29tcGFyaXNvbnMKKworICAgIHZv
aWQgY21wbFJlZ1JlZyhSZWdpc3RlcklEIGxlZnQsIFJlZ2lzdGVySUQgcmlnaHQsIENvbmRpdGlv
biBjb25kKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChjb25kKSB7CisgICAgICAgIGNhc2UgTkU6
CisgICAgICAgICAgICBvbmVTaG9ydE9wKGdldE9wY29kZUdyb3VwMShDTVBFUV9PUENPREUsIHJp
Z2h0LCBsZWZ0KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHVDoKKyAgICAg
ICAgICAgIG9uZVNob3J0T3AoZ2V0T3Bjb2RlR3JvdXAxKENNUEdUX09QQ09ERSwgcmlnaHQsIGxl
ZnQpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVROgorICAgICAgICAgICAg
b25lU2hvcnRPcChnZXRPcGNvZGVHcm91cDEoQ01QRVFfT1BDT0RFLCByaWdodCwgbGVmdCkpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR0U6CisgICAgICAgICAgICBvbmVTaG9y
dE9wKGdldE9wY29kZUdyb3VwMShDTVBHRV9PUENPREUsIHJpZ2h0LCBsZWZ0KSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBIUzoKKyAgICAgICAgICAgIG9uZVNob3J0T3AoZ2V0
T3Bjb2RlR3JvdXAxKENNUEhTX09QQ09ERSwgcmlnaHQsIGxlZnQpKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIEhJOgorICAgICAgICAgICAgb25lU2hvcnRPcChnZXRPcGNvZGVH
cm91cDEoQ01QSElfT1BDT0RFLCByaWdodCwgbGVmdCkpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgTEk6CisgICAgICAgICAgICBvbmVTaG9ydE9wKGdldE9wY29kZUdyb3VwMShD
TVBISV9PUENPREUsIGxlZnQsIHJpZ2h0KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBMUzoKKyAgICAgICAgICAgIG9uZVNob3J0T3AoZ2V0T3Bjb2RlR3JvdXAxKENNUEhTX09Q
Q09ERSwgbGVmdCwgcmlnaHQpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIExF
OgorICAgICAgICAgICAgb25lU2hvcnRPcChnZXRPcGNvZGVHcm91cDEoQ01QR0VfT1BDT0RFLCBs
ZWZ0LCByaWdodCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTFQ6CisgICAg
ICAgICAgICBvbmVTaG9ydE9wKGdldE9wY29kZUdyb3VwMShDTVBHVF9PUENPREUsIGxlZnQsIHJp
Z2h0KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBjbXBw
bChSZWdpc3RlcklEIHJlZykKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29k
ZUdyb3VwMihDTVBQTF9PUENPREUsIHJlZyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAg
ICB9CisKKyAgICB2b2lkIGNtcHB6KFJlZ2lzdGVySUQgcmVnKQorICAgIHsKKyAgICAgICAgdWlu
dDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXAyKENNUFBaX09QQ09ERSwgcmVnKTsKKyAgICAgICAg
b25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAgIHZvaWQgY21wRXFJbW1SMChpbnQgaW1tLCBS
ZWdpc3RlcklEIGRzdCwgQ29uZGl0aW9uIGNvbmQpCisgICAgeworICAgICAgICB1aW50MTZfdCBv
cGMgPSBnZXRPcGNvZGVHcm91cDUoQ01QRVFJTU1fT1BDT0RFLCBpbW0pOworICAgICAgICBvbmVT
aG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCB0ZXN0bFJlZ1JlZyhSZWdpc3RlcklEIHNy
YywgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNv
ZGVHcm91cDEoVFNUX09QQ09ERSwgZHN0LCBzcmMpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7
CisgICAgfQorCisgICAgdm9pZCB0ZXN0bEltbThyKGludCBpbW0sIFJlZ2lzdGVySUQgZHN0KQor
ICAgIHsKKyAgICAgICAgQVNTRVJUKChkc3QgPT0gU0g0UmVnaXN0ZXJzOjpyMCkgJiYgKGltbSA8
PSAyNTUpICYmIChpbW0gPj0gMCkpOworCisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29k
ZUdyb3VwNShUU1RJTU1fT1BDT0RFLCBpbW0pOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7Cisg
ICAgfQorCisgICAgdm9pZCBub3AoKQorICAgIHsKKyAgICAgICAgb25lU2hvcnRPcChOT1BfT1BD
T0RFLCBmYWxzZSk7CisgICAgfQorCisgICAgdm9pZCBzZXR0KCkKKyAgICB7CisgICAgICAgIG9u
ZVNob3J0T3AoU0VUVF9PUENPREUpOworICAgIH0KKworICAgIHZvaWQgY2xydCgpCisgICAgewor
ICAgICAgICBvbmVTaG9ydE9wKENMUlRfT1BDT0RFKTsKKyAgICB9CisKKyAgICB2b2lkIGZzY2hn
KCkKKyAgICB7CisgICAgICAgIG9uZVNob3J0T3AoRlNDSEdfT1BDT0RFKTsKKyAgICB9CisKKyAg
ICB2b2lkIGJrcHQoKQorICAgIHsKKyAgICAgICAgb25lU2hvcnRPcChCUktfT1BDT0RFLCBmYWxz
ZSk7CisgICAgfQorCisgICAgdm9pZCBicmFuY2godWludDE2X3Qgb3BjLCBpbnQgbGFiZWwpCisg
ICAgeworICAgICAgICBzd2l0Y2ggKG9wYykgeworICAgICAgICBjYXNlIEJUX09QQ09ERToKKyAg
ICAgICAgICAgIEFTU0VSVCgobGFiZWwgPD0gMTI3KSAmJiAobGFiZWwgPj0gLTEyOCkpOworICAg
ICAgICAgICAgb25lU2hvcnRPcChnZXRPcGNvZGVHcm91cDUoQlRfT1BDT0RFLCBsYWJlbCkpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQlJBX09QQ09ERToKKyAgICAgICAgICAg
IEFTU0VSVCgobGFiZWwgPD0gMjA0NykgJiYgKGxhYmVsID49IC0yMDQ4KSk7CisgICAgICAgICAg
ICBvbmVTaG9ydE9wKGdldE9wY29kZUdyb3VwNihCUkFfT1BDT0RFLCBsYWJlbCkpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQkZfT1BDT0RFOgorICAgICAgICAgICAgQVNTRVJU
KChsYWJlbCA8PSAxMjcpICYmIChsYWJlbCA+PSAtMTI4KSk7CisgICAgICAgICAgICBvbmVTaG9y
dE9wKGdldE9wY29kZUdyb3VwNShCRl9PUENPREUsIGxhYmVsKSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBicmFuY2godWludDE2X3Qgb3BjLCBSZWdpc3Rl
cklEIHJlZykKKyAgICB7CisgICAgICAgIHN3aXRjaCAob3BjKSB7CisgICAgICAgIGNhc2UgQlJB
Rl9PUENPREU6CisgICAgICAgICAgICBvbmVTaG9ydE9wKGdldE9wY29kZUdyb3VwMihCUkFGX09Q
Q09ERSwgcmVnKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBKTVBfT1BDT0RF
OgorICAgICAgICAgICAgb25lU2hvcnRPcChnZXRPcGNvZGVHcm91cDIoSk1QX09QQ09ERSwgcmVn
KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBKU1JfT1BDT0RFOgorICAgICAg
ICAgICAgb25lU2hvcnRPcChnZXRPcGNvZGVHcm91cDIoSlNSX09QQ09ERSwgcmVnKSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBCU1JGX09QQ09ERToKKyAgICAgICAgICAgIG9u
ZVNob3J0T3AoZ2V0T3Bjb2RlR3JvdXAyKEJTUkZfT1BDT0RFLCByZWcpKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIGxkc3ByKFJlZ2lzdGVySUQgcmVnKQor
ICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXAyKExEU1BSX09QQ09E
RSwgcmVnKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAgIHZvaWQgc3Rz
cHIoUmVnaXN0ZXJJRCByZWcpCisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNv
ZGVHcm91cDIoU1RTUFJfT1BDT0RFLCByZWcpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7Cisg
ICAgfQorCisgICAgdm9pZCBleHR1dyhSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpCisg
ICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDEoRVhUVVdfT1BDT0RF
LCBkc3QsIHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICAvLyBm
bG9hdCBvcGVyYXRpb25zCisKKyAgICB2b2lkIGxkc3JtZnB1bChSZWdpc3RlcklEIHNyYykKKyAg
ICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3VwMihMRFNfUk1fRlBVTF9P
UENPREUsIHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lk
IGZuZWcoRlBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdl
dE9wY29kZUdyb3VwMihGTkVHX09QQ09ERSwgZHN0KTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMs
IHRydWUsIGZhbHNlKTsKKyAgICB9CisKKyAgICB2b2lkIGZzcXJ0KEZQUmVnaXN0ZXJJRCBkc3Qp
CisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDIoRlNRUlRfT1BD
T0RFLCBkc3QpOworICAgICAgICBvbmVTaG9ydE9wKG9wYywgdHJ1ZSwgZmFsc2UpOworICAgIH0K
KworICAgIHZvaWQgc3RzZnB1bFJlZyhSZWdpc3RlcklEIHNyYykKKyAgICB7CisgICAgICAgIHVp
bnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3VwMihTVFNfRlBVTF9STl9PUENPREUsIHNyYyk7Cisg
ICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lkIGZsb2F0ZnB1bGZybihS
ZWdpc3RlcklEIHNyYykKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdy
b3VwMihGTE9BVF9PUENPREUsIHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjLCB0cnVlLCBm
YWxzZSk7CisgICAgfQorCisgICAgdm9pZCBmbXVsbChGUFJlZ2lzdGVySUQgc3JjLCBGUFJlZ2lz
dGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXAx
KEZNVUxfT1BDT0RFLCBkc3QsIHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjLCB0cnVlLCBm
YWxzZSk7CisgICAgfQorCisgICAgdm9pZCBmbW92c1JlYWRybShSZWdpc3RlcklEIHNyYywgRlBS
ZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdy
b3VwMShGTU9WU19SRUFEX1JNX09QQ09ERSwgZHN0LCBzcmMpOworICAgICAgICBvbmVTaG9ydE9w
KG9wYywgdHJ1ZSwgZmFsc2UpOworICAgIH0KKworICAgIHZvaWQgZm1vdnNXcml0ZXJtKEZQUmVn
aXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3Bj
ID0gZ2V0T3Bjb2RlR3JvdXAxKEZNT1ZTX1dSSVRFX1JOX09QQ09ERSwgZHN0LCBzcmMpOworICAg
ICAgICBvbmVTaG9ydE9wKG9wYywgdHJ1ZSwgZmFsc2UpOworICAgIH0KKworICAgIHZvaWQgZm1v
dnNXcml0ZXIwcihGUFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAg
ICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3VwMShGTU9WU19XUklURV9SMFJOX09QQ09E
RSwgZHN0LCBzcmMpOworICAgICAgICBvbmVTaG9ydE9wKG9wYywgdHJ1ZSwgZmFsc2UpOworICAg
IH0KKworICAgIHZvaWQgZm1vdnNSZWFkcjByKFJlZ2lzdGVySUQgc3JjLCBGUFJlZ2lzdGVySUQg
ZHN0KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXAxKEZNT1ZT
X1JFQURfUjBSTV9PUENPREUsIGRzdCwgc3JjKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMsIHRy
dWUsIGZhbHNlKTsKKyAgICB9CisKKyAgICB2b2lkIGZtb3ZzUmVhZHJtaW5jKFJlZ2lzdGVySUQg
c3JjLCBGUFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0
T3Bjb2RlR3JvdXAxKEZNT1ZTX1JFQURfUk1fSU5DX09QQ09ERSwgZHN0LCBzcmMpOworICAgICAg
ICBvbmVTaG9ydE9wKG9wYywgdHJ1ZSwgZmFsc2UpOworICAgIH0KKworICAgIHZvaWQgZm1vdnNX
cml0ZXJuZGVjKEZQUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAg
ICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXAxKEZNT1ZTX1dSSVRFX1JOX0RFQ19PUENP
REUsIGRzdCwgc3JjKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMsIHRydWUsIGZhbHNlKTsKKyAg
ICB9CisKKyAgICB2b2lkIGZ0cmNSZWdmcHVsKEZQUmVnaXN0ZXJJRCBzcmMpCisgICAgeworICAg
ICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDIoRlRSQ19PUENPREUsIHNyYyk7Cisg
ICAgICAgIG9uZVNob3J0T3Aob3BjLCB0cnVlLCBmYWxzZSk7CisgICAgfQorCisgICAgdm9pZCBm
bGRzZnB1bChSZWdpc3RlcklEIHNyYykKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdl
dE9wY29kZUdyb3VwMihGTERTX0ZSTV9GUFVMX09QQ09ERSwgc3JjKTsKKyAgICAgICAgb25lU2hv
cnRPcChvcGMpOworICAgIH0KKworICAgIHZvaWQgZnN0c2ZwdWwoUmVnaXN0ZXJJRCBzcmMpCisg
ICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDIoRlNUU19GUFVMX0ZS
Tl9PUENPREUsIHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICB2
b2lkIGxkc2Zwc2NyKFJlZ2lzdGVySUQgcmVnKQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3Bj
ID0gZ2V0T3Bjb2RlR3JvdXAyKExEU0ZQU0NSX09QQ09ERSwgcmVnKTsKKyAgICAgICAgb25lU2hv
cnRPcChvcGMpOworICAgIH0KKworICAgIHZvaWQgc3RzZnBzY3IoUmVnaXN0ZXJJRCByZWcpCisg
ICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDIoU1RTRlBTQ1JfT1BD
T0RFLCByZWcpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgLy8gZG91
YmxlIG9wZXJhdGlvbnMKKworICAgIHZvaWQgZGNudmRzKEZQUmVnaXN0ZXJJRCBzcmMpCisgICAg
eworICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDcoRkNOVkRTX0RSTV9GUFVM
X09QQ09ERSwgc3JjID4+IDEpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisg
ICAgdm9pZCBkY21wcGVxKEZQUmVnaXN0ZXJJRCBzcmMsIEZQUmVnaXN0ZXJJRCBkc3QpCisgICAg
eworICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDgoRkNNUEVRX09QQ09ERSwg
ZHN0ID4+IDEsIHNyYyA+PiAxKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKwor
ICAgIHZvaWQgZGNtcHBndChGUFJlZ2lzdGVySUQgc3JjLCBGUFJlZ2lzdGVySUQgZHN0KQorICAg
IHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXA4KEZDTVBHVF9PUENPREUs
IGRzdCA+PiAxLCBzcmMgPj4gMSk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisK
KyAgICB2b2lkIGRtdWxSZWdSZWcoRlBSZWdpc3RlcklEIHNyYywgRlBSZWdpc3RlcklEIGRzdCkK
KyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3VwOChGTVVMX09QQ09E
RSwgZHN0ID4+IDEsIHNyYyA+PiAxKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0K
KworICAgIHZvaWQgZHN1YlJlZ1JlZyhGUFJlZ2lzdGVySUQgc3JjLCBGUFJlZ2lzdGVySUQgZHN0
KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXA4KEZTVUJfT1BD
T0RFLCBkc3QgPj4gMSwgc3JjID4+IDEpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAg
fQorCisgICAgdm9pZCBkYWRkUmVnUmVnKEZQUmVnaXN0ZXJJRCBzcmMsIEZQUmVnaXN0ZXJJRCBk
c3QpCisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDgoRkFERF9P
UENPREUsIGRzdCA+PiAxLCBzcmMgPj4gMSk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAg
ICB9CisKKyAgICB2b2lkIGRtb3ZSZWdSZWcoRlBSZWdpc3RlcklEIHNyYywgRlBSZWdpc3RlcklE
IGRzdCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3VwOChGTU9W
X09QQ09ERSwgZHN0ID4+IDEsIHNyYyA+PiAxKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOwor
ICAgIH0KKworICAgIHZvaWQgZGRpdlJlZ1JlZyhGUFJlZ2lzdGVySUQgc3JjLCBGUFJlZ2lzdGVy
SUQgZHN0KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXA4KEZE
SVZfT1BDT0RFLCBkc3QgPj4gMSwgc3JjID4+IDEpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7
CisgICAgfQorCisgICAgdm9pZCBkc3FydChGUFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAg
ICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXA3KEZTUVJUX09QQ09ERSwgZHN0ID4+IDEp
OworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCBkbmVnKEZQUmVn
aXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91
cDcoRk5FR19PUENPREUsIGRzdCA+PiAxKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAg
IH0KKworICAgIHZvaWQgZm1vdlJlYWRybShSZWdpc3RlcklEIHNyYywgRlBSZWdpc3RlcklEIGRz
dCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3VwMTAoRk1PVlNf
UkVBRF9STV9PUENPREUsIGRzdCA+PiAxLCBzcmMpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7
CisgICAgfQorCisgICAgdm9pZCBmbW92V3JpdGVybShGUFJlZ2lzdGVySUQgc3JjLCBSZWdpc3Rl
cklEIGRzdCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3VwOShG
TU9WU19XUklURV9STl9PUENPREUsIGRzdCwgc3JjID4+IDEpOworICAgICAgICBvbmVTaG9ydE9w
KG9wYyk7CisgICAgfQorCisgICAgdm9pZCBmbW92V3JpdGVyMHIoRlBSZWdpc3RlcklEIHNyYywg
UmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVH
cm91cDkoRk1PVlNfV1JJVEVfUjBSTl9PUENPREUsIGRzdCwgc3JjID4+IDEpOworICAgICAgICBv
bmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCBmbW92UmVhZHIwcihSZWdpc3RlcklE
IHNyYywgRlBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIHVpbnQxNl90IG9wYyA9IGdl
dE9wY29kZUdyb3VwMTAoRk1PVlNfUkVBRF9SMFJNX09QQ09ERSwgZHN0ID4+IDEsIHNyYyk7Cisg
ICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lkIGZtb3ZSZWFkcm1pbmMo
UmVnaXN0ZXJJRCBzcmMsIEZQUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICB1aW50MTZf
dCBvcGMgPSBnZXRPcGNvZGVHcm91cDEwKEZNT1ZTX1JFQURfUk1fSU5DX09QQ09ERSwgZHN0ID4+
IDEsIHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lkIGZt
b3ZXcml0ZXJuZGVjKEZQUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAg
ICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXA5KEZNT1ZTX1dSSVRFX1JOX0RFQ19P
UENPREUsIGRzdCwgc3JjID4+IDEpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQor
CisgICAgdm9pZCBmbG9hdGZwdWxEcmVnKEZQUmVnaXN0ZXJJRCBzcmMpCisgICAgeworICAgICAg
ICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDcoRkxPQVRfT1BDT0RFLCBzcmMgPj4gMSk7
CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lkIGZ0cmNkcm1mcHVs
KEZQUmVnaXN0ZXJJRCBzcmMpCisgICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNv
ZGVHcm91cDcoRlRSQ19PUENPREUsIHNyYyA+PiAxKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMp
OworICAgIH0KKworICAgIC8vIFZhcmlvdXMgbW92ZSBvcHMKKworICAgIHZvaWQgbW92SW1tOChp
bnQgaW1tOCwgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICBBU1NFUlQoKGltbTggPD0g
MTI3KSAmJiAoaW1tOCA+PSAtMTI4KSk7CisKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bj
b2RlR3JvdXAzKE1PVklNTV9PUENPREUsIGRzdCwgaW1tOCk7CisgICAgICAgIG9uZVNob3J0T3Ao
b3BjKTsKKyAgICB9CisKKyAgICB2b2lkIG1vdmxSZWdSZWcoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lz
dGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXAx
KE1PVl9PUENPREUsIGRzdCwgc3JjKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0K
KworICAgIHZvaWQgbW92d1JlZ01lbShSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpCisg
ICAgeworICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDEoTU9WV19XUklURV9S
Tl9PUENPREUsIGRzdCwgc3JjKTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKwor
ICAgIHZvaWQgbW92d01lbVJlZyhSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpCisgICAg
eworICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDEoTU9WV19SRUFEX1JNX09Q
Q09ERSwgZHN0LCBzcmMpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAg
dm9pZCBtb3Z3UENSZWcoaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGRz
dCkKKyAgICB7CisgICAgICAgIEFTU0VSVChiYXNlID09IFNINFJlZ2lzdGVyczo6cGMpOworICAg
ICAgICBBU1NFUlQoKG9mZnNldCA8PSAyNTUpICYmIChvZmZzZXQgPj0gMCkpOworCisgICAgICAg
IHVpbnQxNl90IG9wYyA9IGdldE9wY29kZUdyb3VwMyhNT1ZXX1JFQURfT0ZGUENfT1BDT0RFLCBk
c3QsIG9mZnNldCk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lk
IG1vdndNZW1SZWcoaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGRzdCkK
KyAgICB7CisgICAgICAgIEFTU0VSVChkc3QgPT0gU0g0UmVnaXN0ZXJzOjpyMCk7CisKKyAgICAg
ICAgdWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXAxMShNT1ZXX1JFQURfT0ZGUk1fT1BDT0RF
LCBiYXNlLCBvZmZzZXQpOworICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAg
dm9pZCBtb3Z3UjBtcihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAg
ICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDEoTU9WV19SRUFEX1IwUk1fT1BDT0RF
LCBkc3QsIHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lk
IG1vdmxSZWdNZW0oUmVnaXN0ZXJJRCBzcmMsIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSkK
KyAgICB7CisgICAgICAgIEFTU0VSVCgob2Zmc2V0IDw9IDE1KSAmJiAob2Zmc2V0ID49IDApKTsK
KworICAgICAgICBpZiAoIW9mZnNldCkgeworICAgICAgICAgICAgb25lU2hvcnRPcChnZXRPcGNv
ZGVHcm91cDEoTU9WTF9XUklURV9STl9PUENPREUsIGJhc2UsIHNyYykpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgb25lU2hvcnRPcChnZXRPcGNvZGVHcm91cDQo
TU9WTF9XUklURV9PRkZSTl9PUENPREUsIGJhc2UsIHNyYywgb2Zmc2V0KSk7CisgICAgfQorCisg
ICAgdm9pZCBtb3ZsUmVnTWVtKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGJhc2UpCisgICAg
eworICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDEoTU9WTF9XUklURV9STl9P
UENPREUsIGJhc2UsIHNyYyk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAg
ICB2b2lkIG1vdmxNZW1SZWcoaW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklE
IGRzdCkKKyAgICB7CisgICAgICAgIGlmIChiYXNlID09IFNINFJlZ2lzdGVyczo6cGMpIHsKKyAg
ICAgICAgICAgIEFTU0VSVCgob2Zmc2V0IDw9IDI1NSkgJiYgKG9mZnNldCA+PSAwKSk7CisgICAg
ICAgICAgICBvbmVTaG9ydE9wKGdldE9wY29kZUdyb3VwMyhNT1ZMX1JFQURfT0ZGUENfT1BDT0RF
LCBkc3QsIG9mZnNldCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAg
ICAgQVNTRVJUKChvZmZzZXQgPD0gMTUpICYmIChvZmZzZXQgPj0gMCkpOworICAgICAgICBpZiAo
IW9mZnNldCkgeworICAgICAgICAgICAgb25lU2hvcnRPcChnZXRPcGNvZGVHcm91cDEoTU9WTF9S
RUFEX1JNX09QQ09ERSwgZHN0LCBiYXNlKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKworICAgICAgICBvbmVTaG9ydE9wKGdldE9wY29kZUdyb3VwNChNT1ZMX1JFQURfT0ZGUk1f
T1BDT0RFLCBkc3QsIGJhc2UsIG9mZnNldCkpOworICAgIH0KKworICAgIHZvaWQgbW92Yk1lbVJl
ZyhpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAg
ICAgICAgQVNTRVJUKGRzdCA9PSBTSDRSZWdpc3RlcnM6OnIwKTsKKworICAgICAgICB1aW50MTZf
dCBvcGMgPSBnZXRPcGNvZGVHcm91cDExKE1PVkJfUkVBRF9PRkZSTV9PUENPREUsIGJhc2UsIG9m
ZnNldCk7CisgICAgICAgIG9uZVNob3J0T3Aob3BjKTsKKyAgICB9CisKKyAgICB2b2lkIG1vdmJS
MG1yKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIHVpbnQx
Nl90IG9wYyA9IGdldE9wY29kZUdyb3VwMShNT1ZCX1JFQURfUjBSTV9PUENPREUsIGRzdCwgc3Jj
KTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAgIHZvaWQgbW92Yk1lbVJl
ZyhSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICB1aW50MTZf
dCBvcGMgPSBnZXRPcGNvZGVHcm91cDEoTU9WQl9SRUFEX1JNX09QQ09ERSwgZHN0LCBzcmMpOwor
ICAgICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCBtb3ZsTWVtUmVnKFJl
Z2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICB1aW50MTZfdCBv
cGMgPSBnZXRPcGNvZGVHcm91cDEoTU9WTF9SRUFEX1JNX09QQ09ERSwgZHN0LCBiYXNlKTsKKyAg
ICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAgIHZvaWQgbW92bE1lbVJlZ0luKFJl
Z2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICB1aW50MTZfdCBv
cGMgPSBnZXRPcGNvZGVHcm91cDEoTU9WTF9SRUFEX1JNSU5DX09QQ09ERSwgZHN0LCBiYXNlKTsK
KyAgICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAgIHZvaWQgbW92bFIwbXIoUmVn
aXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3Bj
ID0gZ2V0T3Bjb2RlR3JvdXAxKE1PVkxfUkVBRF9SMFJNX09QQ09ERSwgZHN0LCBzcmMpOworICAg
ICAgICBvbmVTaG9ydE9wKG9wYyk7CisgICAgfQorCisgICAgdm9pZCBtb3ZsUmVnTWVtcjAoUmVn
aXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb3Bj
ID0gZ2V0T3Bjb2RlR3JvdXAxKE1PVkxfV1JJVEVfUjBSTl9PUENPREUsIGRzdCwgc3JjKTsKKyAg
ICAgICAgb25lU2hvcnRPcChvcGMpOworICAgIH0KKworICAgIHZvaWQgbW92bEltbThyKGludCBp
bW04LCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIEFTU0VSVCgoaW1tOCA8PSAxMjcp
ICYmIChpbW04ID49IC0xMjgpKTsKKworICAgICAgICB1aW50MTZfdCBvcGMgPSBnZXRPcGNvZGVH
cm91cDMoTU9WSU1NX09QQ09ERSwgZHN0LCBpbW04KTsKKyAgICAgICAgb25lU2hvcnRPcChvcGMp
OworICAgIH0KKworICAgIHZvaWQgbG9hZENvbnN0YW50KHVpbnQzMl90IGNvbnN0YW50LCBSZWdp
c3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIGlmICgoKGludCljb25zdGFudCA8PSAweDdmKSAm
JiAoKGludCljb25zdGFudCA+PSAtMHg4MCkpIHsKKyAgICAgICAgICAgIG1vdkltbTgoY29uc3Rh
bnQsIGRzdCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICB1aW50
MTZfdCBvcGMgPSBnZXRPcGNvZGVHcm91cDMoTU9WSU1NX09QQ09ERSwgZHN0LCAwKTsKKworICAg
ICAgICBtX2J1ZmZlci5lbnN1cmVTcGFjZShtYXhJbnN0cnVjdGlvblNpemUsIHNpemVvZih1aW50
MzJfdCkpOworICAgICAgICBwcmludEluc3RyKGdldE9wY29kZUdyb3VwMyhNT1ZJTU1fT1BDT0RF
LCBkc3QsIGNvbnN0YW50KSwgbV9idWZmZXIudW5jaGVja2VkU2l6ZSgpKTsKKyAgICAgICAgbV9i
dWZmZXIucHV0U2hvcnRXaXRoQ29uc3RhbnRJbnQob3BjLCBjb25zdGFudCwgdHJ1ZSk7CisgICAg
fQorCisgICAgdm9pZCBsb2FkQ29uc3RhbnRVblJldXNhYmxlKHVpbnQzMl90IGNvbnN0YW50LCBS
ZWdpc3RlcklEIGRzdCwgYm9vbCBlbnN1cmVTcGFjZSA9IGZhbHNlKQorICAgIHsKKyAgICAgICAg
dWludDE2X3Qgb3BjID0gZ2V0T3Bjb2RlR3JvdXAzKE1PVklNTV9PUENPREUsIGRzdCwgMCk7CisK
KyAgICAgICAgaWYgKGVuc3VyZVNwYWNlKQorICAgICAgICAgICAgbV9idWZmZXIuZW5zdXJlU3Bh
Y2UobWF4SW5zdHJ1Y3Rpb25TaXplLCBzaXplb2YodWludDMyX3QpKTsKKworICAgICAgICBwcmlu
dEluc3RyKGdldE9wY29kZUdyb3VwMyhNT1ZJTU1fT1BDT0RFLCBkc3QsIGNvbnN0YW50KSwgbV9i
dWZmZXIudW5jaGVja2VkU2l6ZSgpKTsKKyAgICAgICAgbV9idWZmZXIucHV0U2hvcnRXaXRoQ29u
c3RhbnRJbnQob3BjLCBjb25zdGFudCk7CisgICAgfQorCisgICAgLy8gRmxvdyBjb250cm9sCisK
KyAgICBKbXBTcmMgY2FsbCgpCisgICAgeworICAgICAgICBSZWdpc3RlcklEIHNjciA9IGNsYWlt
U2NyYXRjaCgpOworICAgICAgICBtX2J1ZmZlci5lbnN1cmVTcGFjZShtYXhJbnN0cnVjdGlvblNp
emUgKyA0LCBzaXplb2YodWludDMyX3QpKTsKKyAgICAgICAgbG9hZENvbnN0YW50VW5SZXVzYWJs
ZSgweDAsIHNjcik7CisgICAgICAgIGJyYW5jaChKU1JfT1BDT0RFLCBzY3IpOworICAgICAgICBu
b3AoKTsKKyAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKKyAgICAgICAgcmV0dXJuIEptcFNy
YyhtX2J1ZmZlci51bmNoZWNrZWRTaXplKCkpOworICAgIH0KKworICAgIEptcFNyYyBjYWxsKFJl
Z2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgbV9idWZmZXIuZW5zdXJlU3BhY2UobWF4SW5z
dHJ1Y3Rpb25TaXplICsgMik7CisgICAgICAgIGJyYW5jaChKU1JfT1BDT0RFLCBkc3QpOworICAg
ICAgICBub3AoKTsKKyAgICAgICAgcmV0dXJuIEptcFNyYyhtX2J1ZmZlci51bmNoZWNrZWRTaXpl
KCkpOworICAgIH0KKworICAgIEptcFNyYyBqbXAoKQorICAgIHsKKyAgICAgICAgUmVnaXN0ZXJJ
RCBzY3IgPSBjbGFpbVNjcmF0Y2goKTsKKyAgICAgICAgbV9idWZmZXIuZW5zdXJlU3BhY2UobWF4
SW5zdHJ1Y3Rpb25TaXplICsgNCwgc2l6ZW9mKHVpbnQzMl90KSk7CisgICAgICAgIGludCBtX3Np
emUgPSBtX2J1ZmZlci51bmNoZWNrZWRTaXplKCk7CisgICAgICAgIGxvYWRDb25zdGFudFVuUmV1
c2FibGUoMHgwLCBzY3IpOworICAgICAgICBicmFuY2goQlJBRl9PUENPREUsIHNjcik7CisgICAg
ICAgIG5vcCgpOworICAgICAgICByZWxlYXNlU2NyYXRjaChzY3IpOworICAgICAgICByZXR1cm4g
Sm1wU3JjKG1fc2l6ZSk7CisgICAgfQorCisgICAgSm1wU3JjIGptcChSZWdpc3RlcklEIGRzdCkK
KyAgICB7CisgICAgICAgIGptcFJlZyhkc3QpOworICAgICAgICByZXR1cm4gSm1wU3JjKG1fYnVm
ZmVyLnVuY2hlY2tlZFNpemUoKSk7CisgICAgfQorCisgICAgdm9pZCBqbXBSZWcoUmVnaXN0ZXJJ
RCBkc3QpCisgICAgeworICAgICAgICBtX2J1ZmZlci5lbnN1cmVTcGFjZShtYXhJbnN0cnVjdGlv
blNpemUgKyAyKTsKKyAgICAgICAgYnJhbmNoKEpNUF9PUENPREUsIGRzdCk7CisgICAgICAgIG5v
cCgpOworICAgIH0KKworICAgIEptcFNyYyBqbmUoKQorICAgIHsKKyAgICAgICAgaW50IG1fc2l6
ZSA9IG1fYnVmZmVyLnVuY2hlY2tlZFNpemUoKTsKKyAgICAgICAgYnJhbmNoKEJGX09QQ09ERSwg
MCk7CisgICAgICAgIHJldHVybiBKbXBTcmMobV9zaXplKTsKKyAgICB9CisKKyAgICBKbXBTcmMg
amUoKQorICAgIHsKKyAgICAgICAgaW50IG1fc2l6ZSA9IG1fYnVmZmVyLnVuY2hlY2tlZFNpemUo
KTsKKyAgICAgICAgYnJhbmNoKEJUX09QQ09ERSwgMCk7CisgICAgICAgIHJldHVybiBKbXBTcmMo
bV9zaXplKTsKKyAgICB9CisKKyAgICB2b2lkIHJldCgpCisgICAgeworICAgICAgICBtX2J1ZmZl
ci5lbnN1cmVTcGFjZShtYXhJbnN0cnVjdGlvblNpemUgKyAyKTsKKyAgICAgICAgb25lU2hvcnRP
cChSVFNfT1BDT0RFLCBmYWxzZSk7CisgICAgfQorCisgICAgSm1wRHN0IGxhYmVsKCkKKyAgICB7
CisgICAgICAgIHJldHVybiBKbXBEc3QobV9idWZmZXIuc2l6ZSgpKTsKKyAgICB9CisKKyAgICBp
bnQgc2l6ZU9mQ29uc3RhbnRQb29sKCkKKyAgICB7CisgICAgICAgICByZXR1cm4gbV9idWZmZXIu
c2l6ZU9mQ29uc3RhbnRQb29sKCk7CisgICAgfQorCisgICAgSm1wRHN0IGFsaWduKGludCBhbGln
bm1lbnQpCisgICAgeworICAgICAgICBtX2J1ZmZlci5lbnN1cmVTcGFjZShtYXhJbnN0cnVjdGlv
blNpemUgKyAyKTsKKyAgICAgICAgd2hpbGUgKCFtX2J1ZmZlci5pc0FsaWduZWQoYWxpZ25tZW50
KSkgeworICAgICAgICAgICAgbm9wKCk7CisgICAgICAgICAgICBtX2J1ZmZlci5lbnN1cmVTcGFj
ZShtYXhJbnN0cnVjdGlvblNpemUgKyAyKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbGFi
ZWwoKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBjaGFuZ2VQQ3JlbGF0aXZlQWRkcmVzcyhp
bnQgb2Zmc2V0LCB1aW50MTZfdCogaW5zdHJ1Y3Rpb25QdHIsIHVpbnQzMl90IG5ld0FkZHJlc3Mp
CisgICAgeworICAgICAgICB1aW50MzJfdCBhZGRyZXNzID0gKG9mZnNldCA8PCAyKSArICgocmVp
bnRlcnByZXRfY2FzdDx1aW50MzJfdD4oaW5zdHJ1Y3Rpb25QdHIpICsgNCkgJih+MHgzKSk7Cisg
ICAgICAgICpyZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4oYWRkcmVzcykgPSBuZXdBZGRyZXNz
OworICAgIH0KKworICAgIHN0YXRpYyB1aW50MTZfdCogZ2V0SW5zdHJ1Y3Rpb25QdHIodm9pZCog
Y29kZSwgaW50IG9mZnNldCkKKyAgICB7CisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0
PHVpbnQxNl90Kj4gKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3Q+KGNvZGUpICsgb2Zmc2V0KTsK
KyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBsaW5rSnVtcCh2b2lkKiBjb2RlLCBKbXBTcmMgZnJv
bSwgdm9pZCogdG8pCisgICAgeworICAgICAgICBBU1NFUlQoZnJvbS5tX29mZnNldCAhPSAtMSk7
CisKKyAgICAgICAgdWludDE2X3QqIGluc3RydWN0aW9uUHRyID0gZ2V0SW5zdHJ1Y3Rpb25QdHIo
Y29kZSwgZnJvbS5tX29mZnNldCk7CisgICAgICAgIHVpbnQxNl90IGluc3RydWN0aW9uID0gKmlu
c3RydWN0aW9uUHRyOworICAgICAgICBpbnQgb2Zmc2V0Qml0cyA9IChyZWludGVycHJldF9jYXN0
PHVpbnQzMl90Pih0bykgLSByZWludGVycHJldF9jYXN0PHVpbnQzMl90Pihjb2RlKSkgLSBmcm9t
Lm1fb2Zmc2V0OworCisgICAgICAgIGlmICgoKGluc3RydWN0aW9uICYgMHhmZjAwKSA9PSBCVF9P
UENPREUpIHx8ICgoaW5zdHJ1Y3Rpb24gJiAweGZmMDApID09IEJGX09QQ09ERSkpIHsKKyAgICAg
ICAgICAgIC8qIEJUIGxhYmVsID09PiBCRiAyCisgICAgICAgICAgICAgICBub3AgICAgICAgICAg
TERSIHJlZworICAgICAgICAgICAgICAgbm9wICAgICAgICAgIGJyYWYgQHJlZworICAgICAgICAg
ICAgICAgbm9wICAgICAgICAgIG5vcAorICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIG9mZnNl
dEJpdHMgLT0gODsKKyAgICAgICAgICAgIGluc3RydWN0aW9uIF49IDB4MDIwMjsKKyAgICAgICAg
ICAgICppbnN0cnVjdGlvblB0cisrID0gaW5zdHJ1Y3Rpb247CisgICAgICAgICAgICBjaGFuZ2VQ
Q3JlbGF0aXZlQWRkcmVzcygoKmluc3RydWN0aW9uUHRyICYgMHhmZiksIGluc3RydWN0aW9uUHRy
LCBvZmZzZXRCaXRzKTsKKyAgICAgICAgICAgIGluc3RydWN0aW9uID0gKEJSQUZfT1BDT0RFIHwg
KCppbnN0cnVjdGlvblB0cisrICYgMHhmMDApKTsKKyAgICAgICAgICAgICppbnN0cnVjdGlvblB0
ciA9IGluc3RydWN0aW9uOworICAgICAgICAgICAgcHJpbnRCbG9ja0luc3RyKGluc3RydWN0aW9u
UHRyIC0gMiwgZnJvbS5tX29mZnNldCwgMyk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICB9CisKKyAgICAgICAgIC8qIE1PViAjaW1tLCByZWcgPT4gTERSIHJlZworICAgICAgICAgICAg
YnJhZiBAcmVnICAgICAgICBicmFmIEByZWcKKyAgICAgICAgICAgIG5vcCAgICAgICAgICAgICAg
bm9wCisgICAgICAgICAqLworICAgICAgICBBU1NFUlQoKCooaW5zdHJ1Y3Rpb25QdHIgKyAxKSAm
IEJSQUZfT1BDT0RFKSA9PSBCUkFGX09QQ09ERSk7CisKKyAgICAgICAgb2Zmc2V0Qml0cyAtPSA0
OworICAgICAgICBpZiAob2Zmc2V0Qml0cyA+PSAtNDA5NiAmJiBvZmZzZXRCaXRzIDw9IDQwOTQp
IHsKKyAgICAgICAgICAgICppbnN0cnVjdGlvblB0ciA9IGdldE9wY29kZUdyb3VwNihCUkFfT1BD
T0RFLCBvZmZzZXRCaXRzID4+IDEpOworICAgICAgICAgICAgKigrK2luc3RydWN0aW9uUHRyKSA9
IE5PUF9PUENPREU7CisgICAgICAgICAgICBwcmludEJsb2NrSW5zdHIoaW5zdHJ1Y3Rpb25QdHIg
LSAxLCBmcm9tLm1fb2Zmc2V0LCAyKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
CisgICAgICAgIGNoYW5nZVBDcmVsYXRpdmVBZGRyZXNzKCgqaW5zdHJ1Y3Rpb25QdHIgJiAweGZm
KSwgaW5zdHJ1Y3Rpb25QdHIsIG9mZnNldEJpdHMgLSAyKTsKKyAgICAgICAgcHJpbnRJbnN0cigq
aW5zdHJ1Y3Rpb25QdHIsIGZyb20ubV9vZmZzZXQgKyAyKTsKKyAgICB9CisKKyAgICBzdGF0aWMg
dm9pZCBsaW5rQ2FsbCh2b2lkKiBjb2RlLCBKbXBTcmMgZnJvbSwgdm9pZCogdG8pCisgICAgewor
ICAgICAgICB1aW50MTZfdCogaW5zdHJ1Y3Rpb25QdHIgPSBnZXRJbnN0cnVjdGlvblB0cihjb2Rl
LCBmcm9tLm1fb2Zmc2V0KTsKKyAgICAgICAgaW5zdHJ1Y3Rpb25QdHIgLT0gMzsKKyAgICAgICAg
Y2hhbmdlUENyZWxhdGl2ZUFkZHJlc3MoKCppbnN0cnVjdGlvblB0ciAmIDB4ZmYpLCBpbnN0cnVj
dGlvblB0ciwgcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdD4odG8pKTsKKyAgICB9CisKKyAgICBz
dGF0aWMgdm9pZCBsaW5rUG9pbnRlcih2b2lkKiBjb2RlLCBKbXBEc3Qgd2hlcmUsIHZvaWQqIHZh
bHVlKQorICAgIHsKKyAgICAgICAgdWludDE2X3QqIGluc3RydWN0aW9uUHRyID0gZ2V0SW5zdHJ1
Y3Rpb25QdHIoY29kZSwgd2hlcmUubV9vZmZzZXQpOworICAgICAgICBjaGFuZ2VQQ3JlbGF0aXZl
QWRkcmVzcygoKmluc3RydWN0aW9uUHRyICYgMHhmZiksIGluc3RydWN0aW9uUHRyLCByZWludGVy
cHJldF9jYXN0PHVpbnQzMl90Pih2YWx1ZSkpOworICAgIH0KKworICAgIHN0YXRpYyB1bnNpZ25l
ZCBnZXRDYWxsUmV0dXJuT2Zmc2V0KEptcFNyYyBjYWxsKQorICAgIHsKKyAgICAgICAgQVNTRVJU
KGNhbGwubV9vZmZzZXQgPj0gMCk7CisgICAgICAgIHJldHVybiBjYWxsLm1fb2Zmc2V0OworICAg
IH0KKworICAgIHN0YXRpYyB1aW50MzJfdCogZ2V0TGRySW1tQWRkcmVzc09uUG9vbChTSDRXb3Jk
KiBpbnNuLCB1aW50MzJfdCogY29uc3RQb29sKQorICAgIHsKKyAgICAgICAgcmV0dXJuIChjb25z
dFBvb2wgKyAoKmluc24gJiAweGZmKSk7CisgICAgfQorCisgICAgc3RhdGljIFNINFdvcmQgcGF0
Y2hDb25zdGFudFBvb2xMb2FkKFNINFdvcmQgbG9hZCwgaW50IHZhbHVlKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuICgobG9hZCAmIH4weGZmKSB8IHZhbHVlKTsKKyAgICB9CisKKyAgICBzdGF0aWMg
U0g0QnVmZmVyOjpUd29TaG9ydHMgcGxhY2VDb25zdGFudFBvb2xCYXJyaWVyKGludCBvZmZzZXQp
CisgICAgeworICAgICAgICBBU1NFUlQoKChvZmZzZXQgPj4gMSkgPD0yMDQ3KSAmJiAoKG9mZnNl
dCA+PiAxKSA+PSAtMjA0OCkpOworCisgICAgICAgIFNINEJ1ZmZlcjo6VHdvU2hvcnRzIG1fYmFy
cmllcjsKKyAgICAgICAgbV9iYXJyaWVyLmhpZ2ggPSAoQlJBX09QQ09ERSB8IChvZmZzZXQgPj4g
MSkpOworICAgICAgICBtX2JhcnJpZXIubG93ID0gTk9QX09QQ09ERTsKKyAgICAgICAgcHJpbnRJ
bnN0cigoKEJSQV9PUENPREUgfCAob2Zmc2V0ID4+IDEpKSksIDApOworICAgICAgICBwcmludElu
c3RyKE5PUF9PUENPREUsIDApOworICAgICAgICByZXR1cm4gbV9iYXJyaWVyOworICAgIH0KKwor
ICAgIHN0YXRpYyB2b2lkIHBhdGNoQ29uc3RhbnRQb29sTG9hZCh2b2lkKiBsb2FkQWRkciwgdm9p
ZCogY29uc3RQb29sQWRkcikKKyAgICB7CisgICAgICAgIFNINFdvcmQqIGluc3RydWN0aW9uUHRy
ID0gcmVpbnRlcnByZXRfY2FzdDxTSDRXb3JkKj4obG9hZEFkZHIpOworICAgICAgICBTSDRXb3Jk
IGluc3RydWN0aW9uID0gKmluc3RydWN0aW9uUHRyOworICAgICAgICBTSDRXb3JkIGluZGV4ID0g
aW5zdHJ1Y3Rpb24gJiAweGZmOworCisgICAgICAgIGlmICgoaW5zdHJ1Y3Rpb24gJiAweGYwMDAp
ICE9IE1PVklNTV9PUENPREUpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgQVNTRVJU
KCgoKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3Q+KGNvbnN0UG9vbEFkZHIpIC0gcmVpbnRlcnBy
ZXRfY2FzdDx1aW50MzJfdD4obG9hZEFkZHIpKSArIGluZGV4ICogNCkpIDwgMTAyNCk7CisKKyAg
ICAgICAgaW50IG9mZnNldCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3Q+KGNvbnN0UG9vbEFk
ZHIpICsgKGluZGV4ICogNCkgLSAoKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3Q+KGluc3RydWN0
aW9uUHRyKSAmIH4weDAzKSArIDQpOworICAgICAgICBpbnN0cnVjdGlvbiAmPTB4ZjAwOworICAg
ICAgICBpbnN0cnVjdGlvbiB8PSAweGQwMDA7CisgICAgICAgIG9mZnNldCAmPSAweDAzZmY7Cisg
ICAgICAgIGluc3RydWN0aW9uIHw9IChvZmZzZXQgPj4gMik7CisgICAgICAgICppbnN0cnVjdGlv
blB0ciA9IGluc3RydWN0aW9uOworICAgICAgICBwcmludEluc3RyKGluc3RydWN0aW9uLCByZWlu
dGVycHJldF9jYXN0PHVpbnQzMl90Pihsb2FkQWRkcikpOworICAgIH0KKworICAgIHN0YXRpYyB2
b2lkIHJlcGF0Y2hQb2ludGVyKHZvaWQqIHdoZXJlLCB2b2lkKiB2YWx1ZSkKKyAgICB7CisgICAg
ICAgIHBhdGNoUG9pbnRlcih3aGVyZSwgdmFsdWUpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lk
IHJlcGF0Y2hJbnQzMih2b2lkKiB3aGVyZSwgaW50MzJfdCB2YWx1ZSkKKyAgICB7CisgICAgICAg
IHVpbnQxNl90KiBpbnN0cnVjdGlvblB0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDE2X3QqPih3
aGVyZSk7CisgICAgICAgIGNoYW5nZVBDcmVsYXRpdmVBZGRyZXNzKCgqaW5zdHJ1Y3Rpb25QdHIg
JiAweGZmKSwgaW5zdHJ1Y3Rpb25QdHIsIHZhbHVlKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9p
ZCByZWxpbmtDYWxsKHZvaWQqIGZyb20sIHZvaWQqIHRvKQorICAgIHsKKyAgICAgICAgdWludDE2
X3QqIGluc3RydWN0aW9uUHRyID0gcmVpbnRlcnByZXRfY2FzdDx1aW50MTZfdCo+KGZyb20pOwor
ICAgICAgICBpbnN0cnVjdGlvblB0ciAtPSAzOworICAgICAgICBjaGFuZ2VQQ3JlbGF0aXZlQWRk
cmVzcygoKmluc3RydWN0aW9uUHRyICYgMHhmZiksIGluc3RydWN0aW9uUHRyLCByZWludGVycHJl
dF9jYXN0PHVpbnQzMl90Pih0bykpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIHJlbGlua0p1
bXAodm9pZCogZnJvbSwgdm9pZCogdG8pCisgICAgeworICAgICAgICB1aW50MTZfdCogaW5zdHJ1
Y3Rpb25QdHIgPSByZWludGVycHJldF9jYXN0PHVpbnQxNl90Kj4gKGZyb20pOworICAgICAgICB1
aW50MTZfdCBpbnN0cnVjdGlvbiA9ICppbnN0cnVjdGlvblB0cjsKKyAgICAgICAgaW50MzJfdCBv
ZmZzZXRCaXRzID0gKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3Q+KHRvKSAtIHJlaW50ZXJwcmV0
X2Nhc3Q8dWludDMyX3Q+KGZyb20pKTsKKworICAgICAgICBpZiAoKCgqaW5zdHJ1Y3Rpb25QdHIg
JiAweGZmMDApID09IEJUX09QQ09ERSkgfHwgKCgqaW5zdHJ1Y3Rpb25QdHIgJiAweGZmMDApID09
IEJGX09QQ09ERSkpIHsKKyAgICAgICAgICAgIG9mZnNldEJpdHMgLT0gODsKKyAgICAgICAgICAg
IGluc3RydWN0aW9uUHRyKys7CisgICAgICAgICAgICBjaGFuZ2VQQ3JlbGF0aXZlQWRkcmVzcygo
Kmluc3RydWN0aW9uUHRyICYgMHhmZiksIGluc3RydWN0aW9uUHRyLCBvZmZzZXRCaXRzKTsKKyAg
ICAgICAgICAgIGluc3RydWN0aW9uID0gKEJSQUZfT1BDT0RFIHwgKCppbnN0cnVjdGlvblB0cisr
ICYgMHhmMDApKTsKKyAgICAgICAgICAgICppbnN0cnVjdGlvblB0ciA9IGluc3RydWN0aW9uOwor
ICAgICAgICAgICAgcHJpbnRCbG9ja0luc3RyKGluc3RydWN0aW9uUHRyLCByZWludGVycHJldF9j
YXN0PHVpbnQzMl90Pihmcm9tKSArIDEsIDMpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisKKyAgICAgICAgQVNTRVJUKCgqKGluc3RydWN0aW9uUHRyICsgMSkgJiBCUkFGX09QQ09E
RSkgPT0gQlJBRl9PUENPREUpOworICAgICAgICBvZmZzZXRCaXRzIC09IDQ7CisgICAgICAgIGlm
IChvZmZzZXRCaXRzID49IC00MDk2ICYmIG9mZnNldEJpdHMgPD0gNDA5NCkgeworICAgICAgICAg
ICAgKmluc3RydWN0aW9uUHRyID0gZ2V0T3Bjb2RlR3JvdXA2KEJSQV9PUENPREUsIG9mZnNldEJp
dHMgPj4gMSk7CisgICAgICAgICAgICAqKCsraW5zdHJ1Y3Rpb25QdHIpID0gTk9QX09QQ09ERTsK
KyAgICAgICAgICAgIHByaW50QmxvY2tJbnN0cihpbnN0cnVjdGlvblB0ciAtIDIsIHJlaW50ZXJw
cmV0X2Nhc3Q8dWludDMyX3Q+KGZyb20pLCAyKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorCisgICAgICAgIGNoYW5nZVBDcmVsYXRpdmVBZGRyZXNzKCgqaW5zdHJ1Y3Rpb25QdHIg
JiAweGZmKSwgaW5zdHJ1Y3Rpb25QdHIsIG9mZnNldEJpdHMgLSAyKTsKKyAgICAgICAgcHJpbnRJ
bnN0cigqaW5zdHJ1Y3Rpb25QdHIsIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3Q+KGZyb20pKTsK
KyAgICB9CisKKyAgICAvLyBMaW5raW5nICYgcGF0Y2hpbmcKKworICAgIHZvaWQgbGlua0p1bXAo
Sm1wU3JjIGZyb20sIEptcERzdCB0bykKKyAgICB7CisgICAgICAgIEFTU0VSVCh0by5tX29mZnNl
dCAhPSAtMSk7CisgICAgICAgIEFTU0VSVChmcm9tLm1fb2Zmc2V0ICE9IC0xKTsKKworICAgICAg
ICB1aW50MTZfdCogaW5zdHJ1Y3Rpb25QdHIgPSBnZXRJbnN0cnVjdGlvblB0cihkYXRhKCksIGZy
b20ubV9vZmZzZXQpOworICAgICAgICB1aW50MTZfdCBpbnN0cnVjdGlvbiA9ICppbnN0cnVjdGlv
blB0cjsKKyAgICAgICAgaW50IG9mZnNldEJpdHM7CisKKyAgICAgICAgaWYgKCgoaW5zdHJ1Y3Rp
b24gJiAweGZmMDApID09IEJUX09QQ09ERSkgfHwgKChpbnN0cnVjdGlvbiAmIDB4ZmYwMCkgPT0g
QkZfT1BDT0RFKSkgeworICAgICAgICAgICAgLyogQlQgbGFiZWwgPT4gQkYgMgorICAgICAgICAg
ICAgICAgbm9wICAgICAgICBMRFIgcmVnCisgICAgICAgICAgICAgICBub3AgICAgICAgIGJyYWYg
QHJlZworICAgICAgICAgICAgICAgbm9wICAgICAgICBub3AKKyAgICAgICAgICAgICovCisgICAg
ICAgICAgICBvZmZzZXRCaXRzID0gKHRvLm1fb2Zmc2V0IC0gZnJvbS5tX29mZnNldCkgLSA4Owor
ICAgICAgICAgICAgaW5zdHJ1Y3Rpb24gXj0gMHgwMjAyOworICAgICAgICAgICAgKmluc3RydWN0
aW9uUHRyKysgPSBpbnN0cnVjdGlvbjsKKyAgICAgICAgICAgIGlmICgoKmluc3RydWN0aW9uUHRy
ICYgMHhmMDAwKSA9PSAweGUwMDApIHsKKyAgICAgICAgICAgICAgICB1aW50MzJfdCogYWRkciA9
IGdldExkckltbUFkZHJlc3NPblBvb2woaW5zdHJ1Y3Rpb25QdHIsIG1fYnVmZmVyLnBvb2xBZGRy
ZXNzKCkpOworICAgICAgICAgICAgICAgICphZGRyID0gb2Zmc2V0Qml0czsKKyAgICAgICAgICAg
IH0gZWxzZQorICAgICAgICAgICAgICAgIGNoYW5nZVBDcmVsYXRpdmVBZGRyZXNzKCgqaW5zdHJ1
Y3Rpb25QdHIgJiAweGZmKSwgaW5zdHJ1Y3Rpb25QdHIsIG9mZnNldEJpdHMpOworICAgICAgICAg
ICAgaW5zdHJ1Y3Rpb24gPSAoQlJBRl9PUENPREUgfCAoKmluc3RydWN0aW9uUHRyKysgJiAweGYw
MCkpOworICAgICAgICAgICAgKmluc3RydWN0aW9uUHRyID0gaW5zdHJ1Y3Rpb247CisgICAgICAg
ICAgICBwcmludEJsb2NrSW5zdHIoaW5zdHJ1Y3Rpb25QdHIgLSAyLCBmcm9tLm1fb2Zmc2V0LCAz
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8qIE1PViAjIGlt
bSwgcmVnID0+IExEUiByZWcKKyAgICAgICAgICAgYnJhZiBAcmVnICAgICAgICAgYnJhZiBAcmVn
CisgICAgICAgICAgIG5vcCAgICAgICAgICAgICAgIG5vcAorICAgICAgICAqLworICAgICAgICBB
U1NFUlQoKCooaW5zdHJ1Y3Rpb25QdHIgKyAxKSAmIEJSQUZfT1BDT0RFKSA9PSBCUkFGX09QQ09E
RSk7CisgICAgICAgIG9mZnNldEJpdHMgPSAodG8ubV9vZmZzZXQgLSBmcm9tLm1fb2Zmc2V0KSAt
IDQ7CisgICAgICAgIGlmIChvZmZzZXRCaXRzID49IC00MDk2ICYmIG9mZnNldEJpdHMgPD0gNDA5
NCkgeworICAgICAgICAgICAgKmluc3RydWN0aW9uUHRyID0gZ2V0T3Bjb2RlR3JvdXA2KEJSQV9P
UENPREUsIG9mZnNldEJpdHMgPj4gMSk7CisgICAgICAgICAgICAqKCsraW5zdHJ1Y3Rpb25QdHIp
ID0gTk9QX09QQ09ERTsKKyAgICAgICAgICAgIHByaW50QmxvY2tJbnN0cihpbnN0cnVjdGlvblB0
ciAtIDEsIGZyb20ubV9vZmZzZXQsIDIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisKKyAgICAgICAgaW5zdHJ1Y3Rpb24gPSAqaW5zdHJ1Y3Rpb25QdHI7CisgICAgICAgIGlmICgo
aW5zdHJ1Y3Rpb24gICYgMHhmMDAwKSA9PSAweGUwMDApIHsKKyAgICAgICAgICAgIHVpbnQzMl90
KiBhZGRyID0gZ2V0TGRySW1tQWRkcmVzc09uUG9vbChpbnN0cnVjdGlvblB0ciwgbV9idWZmZXIu
cG9vbEFkZHJlc3MoKSk7CisgICAgICAgICAgICAqYWRkciA9IG9mZnNldEJpdHMgLSAyOworICAg
ICAgICAgICAgcHJpbnRJbnN0cigqaW5zdHJ1Y3Rpb25QdHIsIGZyb20ubV9vZmZzZXQgKyAyKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGNoYW5nZVBDcmVsYXRp
dmVBZGRyZXNzKCgqaW5zdHJ1Y3Rpb25QdHIgJiAweGZmKSwgaW5zdHJ1Y3Rpb25QdHIsIG9mZnNl
dEJpdHMgLSAyKTsKKyAgICAgICAgcHJpbnRJbnN0cigqaW5zdHJ1Y3Rpb25QdHIsIGZyb20ubV9v
ZmZzZXQgKyAyKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCogZ2V0UmVsb2NhdGVkQWRkcmVz
cyh2b2lkKiBjb2RlLCBKbXBTcmMganVtcCkKKyAgICB7CisgICAgICAgIHJldHVybiByZWludGVy
cHJldF9jYXN0PHZvaWQqPihyZWludGVycHJldF9jYXN0PHVpbnQzMl90Pihjb2RlKSArIGp1bXAu
bV9vZmZzZXQpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkKiBnZXRSZWxvY2F0ZWRBZGRyZXNz
KHZvaWQqIGNvZGUsIEptcERzdCBkZXN0aW5hdGlvbikKKyAgICB7CisgICAgICAgIEFTU0VSVChk
ZXN0aW5hdGlvbi5tX29mZnNldCAhPSAtMSk7CisgICAgICAgIHJldHVybiByZWludGVycHJldF9j
YXN0PHZvaWQqPihyZWludGVycHJldF9jYXN0PHVpbnQzMl90Pihjb2RlKSArIGRlc3RpbmF0aW9u
Lm1fb2Zmc2V0KTsKKyAgICB9CisKKyAgICBzdGF0aWMgaW50IGdldERpZmZlcmVuY2VCZXR3ZWVu
TGFiZWxzKEptcERzdCBzcmMsIEptcERzdCBkc3QpCisgICAgeworICAgICAgICByZXR1cm4gZHN0
Lm1fb2Zmc2V0IC0gc3JjLm1fb2Zmc2V0OworICAgIH0KKworICAgIHN0YXRpYyBpbnQgZ2V0RGlm
ZmVyZW5jZUJldHdlZW5MYWJlbHMoSm1wRHN0IHNyYywgSm1wU3JjIGRzdCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBkc3QubV9vZmZzZXQgLSBzcmMubV9vZmZzZXQ7CisgICAgfQorCisgICAgc3Rh
dGljIGludCBnZXREaWZmZXJlbmNlQmV0d2VlbkxhYmVscyhKbXBTcmMgc3JjLCBKbXBEc3QgZHN0
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGRzdC5tX29mZnNldCAtIHNyYy5tX29mZnNldDsKKyAg
ICB9CisKKyAgICBzdGF0aWMgdm9pZCBwYXRjaFBvaW50ZXIodm9pZCogY29kZSwgSm1wRHN0IHdo
ZXJlLCB2b2lkKiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHBhdGNoUG9pbnRlcihyZWludGVycHJl
dF9jYXN0PHVpbnQzMl90Kj4oY29kZSkgKyB3aGVyZS5tX29mZnNldCwgdmFsdWUpOworICAgIH0K
KworICAgIHN0YXRpYyB2b2lkIHBhdGNoUG9pbnRlcih2b2lkKiBjb2RlLCB2b2lkKiB2YWx1ZSkK
KyAgICB7CisgICAgICAgIHBhdGNoSW50MzIoY29kZSwgcmVpbnRlcnByZXRfY2FzdDx1aW50MzJf
dD4odmFsdWUpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBwYXRjaEludDMyKHZvaWQqIGNv
ZGUsIHVpbnQzMl90IHZhbHVlKQorICAgIHsKKyAgICAgICAgY2hhbmdlUENyZWxhdGl2ZUFkZHJl
c3MoKCoocmVpbnRlcnByZXRfY2FzdDx1aW50MTZfdCo+KGNvZGUpKSAmIDB4ZmYpLCByZWludGVy
cHJldF9jYXN0PHVpbnQxNl90Kj4oY29kZSksIHZhbHVlKTsKKyAgICB9CisKKyAgICB2b2lkKiBl
eGVjdXRhYmxlQ29weShFeGVjdXRhYmxlUG9vbCogYWxsb2NhdG9yKQorICAgIHsKKyAgICAgICAg
dm9pZCogY29weSA9IG1fYnVmZmVyLmV4ZWN1dGFibGVDb3B5KGFsbG9jYXRvcik7CisgICAgICAg
IEFTU0VSVChjb3B5KTsKKyAgICAgICAgcmV0dXJuIGNvcHk7CisgICAgfQorCisgICAgdm9pZCBw
cmVmaXgodWludDE2X3QgcHJlKQorICAgIHsKKyAgICAgICAgbV9idWZmZXIucHV0Qnl0ZShwcmUp
OworICAgIH0KKworICAgIHZvaWQgb25lU2hvcnRPcCh1aW50MTZfdCBvcGNvZGUsIGJvb2wgY2hl
Y2tzaXplID0gdHJ1ZSwgYm9vbCBpc0RvdWJsZSA9IHRydWUpCisgICAgeworICAgICAgICBwcmlu
dEluc3RyKG9wY29kZSwgbV9idWZmZXIudW5jaGVja2VkU2l6ZSgpLCBpc0RvdWJsZSk7CisgICAg
ICAgIGlmIChjaGVja3NpemUpCisgICAgICAgICAgICBtX2J1ZmZlci5lbnN1cmVTcGFjZShtYXhJ
bnN0cnVjdGlvblNpemUpOworICAgICAgICBtX2J1ZmZlci5wdXRTaG9ydFVuY2hlY2tlZChvcGNv
ZGUpOworICAgIH0KKworICAgIHZvaWQgZW5zdXJlU3BhY2UoaW50IHNwYWNlKQorICAgIHsKKyAg
ICAgICAgbV9idWZmZXIuZW5zdXJlU3BhY2Uoc3BhY2UpOworICAgIH0KKworICAgIHZvaWQgZW5z
dXJlU3BhY2UoaW50IGluc25TcGFjZSwgaW50IGNvbnN0U3BhY2UpCisgICAgeworICAgICAgICBt
X2J1ZmZlci5lbnN1cmVTcGFjZShpbnNuU3BhY2UsIGNvbnN0U3BhY2UpOworICAgIH0KKworICAg
IC8vIEFkbWluaXN0cmF0aXZlIG1ldGhvZHMKKworICAgIHZvaWQqIGRhdGEoKSBjb25zdCB7IHJl
dHVybiBtX2J1ZmZlci5kYXRhKCk7IH0KKyAgICBpbnQgc2l6ZSgpCisgICAgeworICAgICAgICBy
ZXR1cm4gbV9idWZmZXIuc2l6ZSgpOworICAgIH0KKworI2lmZGVmIFNINF9BU1NFTUJMRVJfVFJB
Q0lORworICAgIHN0YXRpYyB2b2lkIHByaW50SW5zdHIodWludDE2X3Qgb3BjLCB1bnNpZ25lZCBp
bnQgc2l6ZSwgYm9vbCBpc2RvdWJsZUluc3QgPSB0cnVlKQorICAgIHsKKyAgICAgICAgaWYgKCFn
ZXRlbnYoIkphdmFTY3JpcHRDb3JlRHVtcEpJVCIpKQorICAgICAgICAgICAgcmV0dXJuOworCisg
ICAgICAgIGNvbnN0IGNoYXIgKmZvcm1hdCA9IDA7CisgICAgICAgIHByaW50ZlN0ZG91dEluc3Ry
KCJvZmZzZXQ6IDB4JTguOHhcdCIsIHNpemUpOworICAgICAgICBzd2l0Y2ggKG9wYykgeworICAg
ICAgICBjYXNlIEJSS19PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIEJSS1xuIjsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE5PUF9PUENPREU6CisgICAgICAgICAg
ICBmb3JtYXQgPSAiICAgIE5PUFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IFJUU19PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSIgICAgKlJUU1xuIjsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIFNFVFNfT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0
ID0gIiAgICBTRVRTXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU0VUVF9P
UENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIFNFVFRcbiI7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBDTFJUX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIg
ICAgQ0xSVFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEZTQ0hHX09QQ09E
RToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgRlNDSEdcbiI7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICBpZiAoZm9ybWF0KSB7CisgICAgICAgICAgICBwcmludGZT
dGRvdXRJbnN0cihmb3JtYXQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
ICAgIHN3aXRjaCAob3BjICYgMHhmMGZmKSB7CisgICAgICAgIGNhc2UgQlJBRl9PUENPREU6Cisg
ICAgICAgICAgICBmb3JtYXQgPSAiICAgICpCUkFGIFIlZFxuIjsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIERUX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgRFQg
UiVkXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ01QUExfT1BDT0RFOgor
ICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBDTVAvUEwgUiVkXG4iOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgQ01QUFpfT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAg
ICBDTVAvUFogUiVkXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSk1QX09Q
Q09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgKkpNUCBAUiVkXG4iOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgSlNSX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9
ICIgICAgKkpTUiBAUiVkXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTERT
UFJfT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBMRFMgUiVkLCBQUlxuIjsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIExEU0xQUl9PUENPREU6CisgICAgICAgICAg
ICBmb3JtYXQgPSAiICAgIExEUy5MIEBSJWQrLCBQUlxuIjsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIE1PVlRfT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBNT1ZU
IFIlZFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNIQUxfT1BDT0RFOgor
ICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBTSEFMIFIlZFxuIjsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIFNIQVJfT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBT
SEFSIFIlZFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNITExfT1BDT0RF
OgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBTSExMIFIlZFxuIjsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIFNITEwyX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIg
ICAgU0hMTDIgUiVkXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU0hMTDhf
T1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBTSExMOCBSJWRcbiI7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTSExMMTZfT1BDT0RFOgorICAgICAgICAgICAgZm9y
bWF0ID0gIiAgICBTSExMMTYgUiVkXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgU0hMUl9PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIFNITFIgUiVkXG4iOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU0hMUjJfT1BDT0RFOgorICAgICAgICAg
ICAgZm9ybWF0ID0gIiAgICBTSExSMiBSJWRcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBTSExSOF9PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIFNITFI4IFIl
ZFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNITFIxNl9PUENPREU6Cisg
ICAgICAgICAgICBmb3JtYXQgPSAiICAgIFNITFIxNiBSJWRcbiI7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBTVFNQUl9PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAg
IFNUUyBQUiwgUiVkXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU1RTTFBS
X09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgU1RTLkwgUFIsIEAtUiVkXG4iOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTERTX1JNX0ZQVUxfT1BDT0RFOgorICAg
ICAgICAgICAgZm9ybWF0ID0gIiAgICBMRFMgUiVkLCBGUFVMXG4iOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgU1RTX0ZQVUxfUk5fT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0
ID0gIiAgICBTVFMgRlBVTCwgUiVkIFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIEZMRFNfRlJNX0ZQVUxfT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBGTERT
IEZSJWQsIEZQVUxcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBGU1RTX0ZQ
VUxfRlJOX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgRlNUUyBGUFVMLCBSJWQg
XG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTERTRlBTQ1JfT1BDT0RFOgor
ICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBMRFMgUiVkLCBGUFNDUiBcbiI7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBTVFNGUFNDUl9PUENPREU6CisgICAgICAgICAgICBmb3Jt
YXQgPSAiICAgIFNUUyBGUFNDUiwgUiVkIFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIFNUU01BQ0xfT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBTVFMgTUFD
TCwgUiVkIFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNUU01BQ0hfT1BD
T0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBTVFMgTUFDSCwgUiVkIFxuIjsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEJTUkZfT1BDT0RFOgorICAgICAgICAgICAgZm9y
bWF0ID0gIiAgICAqQlNSRiBSJWQiOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
RlRSQ19PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIEZUUkMgRlIlZCwgRlBVTFxu
IjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmIChmb3JtYXQpIHsK
KyAgICAgICAgICAgIHByaW50ZlN0ZG91dEluc3RyKGZvcm1hdCwgZ2V0Um4ob3BjKSk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgc3dpdGNoIChvcGMgJiAweGYwZmYp
IHsKKyAgICAgICAgY2FzZSBGTkVHX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAg
Rk5FRyBEUiVkXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRkxPQVRfT1BD
T0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBGTE9BVCBEUiVkXG4iOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgRlRSQ19PUENPREU6CisgICAgICAgICAgICBmb3JtYXQg
PSAiICAgIEZUUkMgRlIlZCwgRlBVTFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIEZTUVJUX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgRlNRUlQgRlIlZFxu
IjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEZDTlZEU19EUk1fRlBVTF9PUENP
REU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIEZDTlZEUyBGUiVkLCBGUFVMXG4iOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGZvcm1hdCkgeworICAgICAg
ICAgICAgaWYgKGlzZG91YmxlSW5zdCkKKyAgICAgICAgICAgICAgICBwcmludGZTdGRvdXRJbnN0
cihmb3JtYXQsIGdldERSbihvcGMpIDw8IDEpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgIHByaW50ZlN0ZG91dEluc3RyKGZvcm1hdCwgZ2V0Um4ob3BjKSk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgc3dpdGNoIChvcGMgJiAweGYwMGYpIHsKKyAg
ICAgICAgY2FzZSBBRERfT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBBREQgUiVk
LCBSJWRcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBRERDX09QQ09ERToK
KyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgQUREQyBSJWQsIFIlZFxuIjsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIEFERFZfT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0g
IiAgICBBRERWIFIlZCwgUiVkXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
QU5EX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgQU5EIFIlZCwgUiVkXG4iOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRElWMV9PUENPREU6CisgICAgICAgICAg
ICBmb3JtYXQgPSAiICAgIERJVjEgUiVkLCBSJWRcbiI7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBDTVBFUV9PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIENNUC9F
USBSJWQsIFIlZFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENNUEdFX09Q
Q09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgQ01QL0dFIFIlZCwgUiVkXG4iOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ01QR1RfT1BDT0RFOgorICAgICAgICAgICAg
Zm9ybWF0ID0gIiAgICBDTVAvR1QgUiVkLCBSJWRcbiI7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBDTVBISV9PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIENNUC9I
SSBSJWQsIFIlZFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENNUEhTX09Q
Q09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgQ01QL0hTIFIlZCwgUiVkXG4iOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTU9WX09QQ09ERToKKyAgICAgICAgICAgIGZv
cm1hdCA9ICIgICAgTU9WIFIlZCwgUiVkXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgTU9WQl9XUklURV9STl9PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIE1P
Vi5CIFIlZCwgQFIlZFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE1PVkJf
V1JJVEVfUk5ERUNfT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBNT1YuQiBSJWQs
IEAtUiVkXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTU9WQl9XUklURV9S
MFJOX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgTU9WLkIgUiVkLCBAKFIwLCBS
JWQpXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTU9WQl9SRUFEX1JNX09Q
Q09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgTU9WLkIgQFIlZCwgUiVkXG4iOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTU9WQl9SRUFEX1JNSU5DX09QQ09ERToKKyAg
ICAgICAgICAgIGZvcm1hdCA9ICIgICAgTU9WLkIgQFIlZCssIFIlZFxuIjsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIE1PVkJfUkVBRF9SMFJNX09QQ09ERToKKyAgICAgICAgICAg
IGZvcm1hdCA9ICIgICAgTU9WLkIgQChSMCwgUiVkKSwgUiVkXG4iOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgTU9WTF9XUklURV9STl9PUENPREU6CisgICAgICAgICAgICBmb3Jt
YXQgPSAiICAgIE1PVi5MIFIlZCwgQFIlZFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIE1PVkxfV1JJVEVfUk5ERUNfT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAg
ICBNT1YuTCBSJWQsIEAtUiVkXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
TU9WTF9XUklURV9SMFJOX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgTU9WLkwg
UiVkLCBAKFIwLCBSJWQpXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTU9W
TF9SRUFEX1JNX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgTU9WLkwgQFIlZCwg
UiVkXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTU9WTF9SRUFEX1JNSU5D
X09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgTU9WLkwgQFIlZCssIFIlZFxuIjsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE1PVkxfUkVBRF9SMFJNX09QQ09ERToK
KyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgTU9WLkwgQChSMCwgUiVkKSwgUiVkXG4iOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTVVMTF9PUENPREU6CisgICAgICAgICAgICBm
b3JtYXQgPSAiICAgIE1VTC5MIFIlZCwgUiVkXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgRE1VTExfTF9PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIERNVUxV
LkwgUiVkLCBSJWRcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBETVVMU0xf
T1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBETVVMUy5MIFIlZCwgUiVkXG4iOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTkVHX09QQ09ERToKKyAgICAgICAgICAg
IGZvcm1hdCA9ICIgICAgTkVHIFIlZCwgUiVkXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgTkVHQ19PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIE5FR0MgUiVk
LCBSJWRcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBOT1RfT1BDT0RFOgor
ICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBOT1QgUiVkLCBSJWRcbiI7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBPUl9PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAg
IE9SIFIlZCwgUiVkXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU0hBRF9P
UENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIFNIQUQgUiVkLCBSJWRcbiI7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTSExEX09QQ09ERToKKyAgICAgICAgICAgIGZv
cm1hdCA9ICIgICAgU0hMRCBSJWQsIFIlZFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIFNVQl9PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIFNVQiBSJWQsIFIl
ZFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNVQkNfT1BDT0RFOgorICAg
ICAgICAgICAgZm9ybWF0ID0gIiAgICBTVUJDIFIlZCwgUiVkXG4iOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgU1VCVl9PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAg
IFNVQlYgUiVkLCBSJWRcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUU1Rf
T1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBUU1QgUiVkLCBSJWRcbiI7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBYT1JfT1BDT0RFOgorICAgICAgICAgICAgZm9y
bWF0ID0gIiAgICBYT1IgUiVkLCBSJWRcbiI7YnJlYWs7CisgICAgICAgIGNhc2UgTU9WV19XUklU
RV9STl9PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIE1PVi5XIFIlZCwgQFIlZFxu
IjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE1PVldfUkVBRF9STV9PUENPREU6
CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIE1PVi5XIEBSJWQsIFIlZFxuIjsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIE1PVldfUkVBRF9SMFJNX09QQ09ERToKKyAgICAgICAg
ICAgIGZvcm1hdCA9ICIgICAgTU9WLlcgQChSMCwgUiVkKSwgUiVkXG4iOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgRVhUVVdfT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0g
IiAgICBFWFRVLlcgUiVkLCBSJWRcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgICAgICBpZiAoZm9ybWF0KSB7CisgICAgICAgICAgICBwcmludGZTdGRvdXRJbnN0cihmb3Jt
YXQsIGdldFJtKG9wYyksIGdldFJuKG9wYykpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgICAgIHN3aXRjaCAob3BjICYgMHhmMDBmKSB7CisgICAgICAgIGNhc2UgRlNVQl9P
UENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIEZTVUIgRlIlZCwgRlIlZFxuIjsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEZBRERfT1BDT0RFOgorICAgICAgICAgICAg
Zm9ybWF0ID0gIiAgICBGQUREIEZSJWQsIEZSJWRcbiI7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBGRElWX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgRkRJViBG
UiVkLCBGUiVkXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRk1VTF9PUENP
REU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIERNVUxMIEZSJWQsIEZSJWRcbiI7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBGTU9WX09QQ09ERToKKyAgICAgICAgICAgIGZv
cm1hdCA9ICIgICAgRk1PViBGUiVkLCBGUiVkXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgRkNNUEVRX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgRkNNUC9F
USBGUiVkLCBGUiVkXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRkNNUEdU
X09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgRkNNUC9HVCBGUiVkLCBGUiVkXG4i
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGZvcm1hdCkgewor
ICAgICAgICAgICAgaWYgKGlzZG91YmxlSW5zdCkKKyAgICAgICAgICAgICAgICBwcmludGZTdGRv
dXRJbnN0cihmb3JtYXQsIGdldERSbShvcGMpIDw8IDEsIGdldERSbihvcGMpIDw8IDEpOworICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHByaW50ZlN0ZG91dEluc3RyKGZvcm1hdCwg
Z2V0Um0ob3BjKSwgZ2V0Um4ob3BjKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICAgICAgc3dpdGNoIChvcGMgJiAweGYwMGYpIHsKKyAgICAgICAgY2FzZSBGTU9WU19XUklU
RV9STl9ERUNfT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICAlcyBGUiVkLCBALVIl
ZFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEZNT1ZTX1dSSVRFX1JOX09Q
Q09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgJXMgRlIlZCwgQFIlZFxuIjsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEZNT1ZTX1dSSVRFX1IwUk5fT1BDT0RFOgorICAg
ICAgICAgICAgZm9ybWF0ID0gIiAgICAlcyBGUiVkLCBAKFIwLCBSJWQpXG4iOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGZvcm1hdCkgeworICAgICAgICAgICAg
aWYgKGlzZG91YmxlSW5zdCkKKyAgICAgICAgICAgICAgICBwcmludGZTdGRvdXRJbnN0cihmb3Jt
YXQsICJGTU9WIiwgZ2V0RFJtKG9wYykgPDwgMSwgZ2V0RFJuKG9wYykpOworICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgIHByaW50ZlN0ZG91dEluc3RyKGZvcm1hdCwgIkZNT1YuUyIs
IGdldFJtKG9wYyksIGdldFJuKG9wYykpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisgICAgICAgIHN3aXRjaCAob3BjICYgMHhmMDBmKSB7CisgICAgICAgIGNhc2UgRk1PVlNfUkVB
RF9STV9PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgICVzIEBSJWQsIEZSJWRcbiI7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBGTU9WU19SRUFEX1JNX0lOQ19PUENP
REU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgICVzIEBSJWQrLCBGUiVkXG4iOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRk1PVlNfUkVBRF9SMFJNX09QQ09ERToKKyAgICAg
ICAgICAgIGZvcm1hdCA9ICIgICAgJXMgQChSMCwgUiVkKSwgRlIlZFxuIjsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmIChmb3JtYXQpIHsKKyAgICAgICAgICAgIGlm
IChpc2RvdWJsZUluc3QpCisgICAgICAgICAgICAgICAgcHJpbnRmU3Rkb3V0SW5zdHIoZm9ybWF0
LCAiRk1PViIsIGdldERSbShvcGMpLCBnZXREUm4ob3BjKSA8PCAxKTsKKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICBwcmludGZTdGRvdXRJbnN0cihmb3JtYXQsICJGTU9WLlMiLCBn
ZXRSbShvcGMpLCBnZXRSbihvcGMpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
ICAgICAgICBzd2l0Y2ggKG9wYyAmIDB4ZmYwMCkgeworICAgICAgICBjYXNlIEJGX09QQ09ERToK
KyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgQkYgJWRcbiI7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBCRlNfT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICAqQkYv
UyAlZFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFORElNTV9PUENPREU6
CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIEFORCAjJWQsIFIwXG4iOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgQlRfT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAg
ICBCVCAlZFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEJUU19PUENPREU6
CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgICpCVC9TICVkXG4iOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgQ01QRVFJTU1fT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0g
IiAgICBDTVAvRVEgIyVkLCBSMFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IE1PVkJfV1JJVEVfT0ZGR0JSX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgTU9W
LkIgUjAsIEAoJWQsIEdCUilcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBN
T1ZCX1JFQURfT0ZGR0JSX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgTU9WLkIg
QCglZCwgR0JSKSwgUjBcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBNT1ZM
X1dSSVRFX09GRkdCUl9PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIE1PVi5MIFIw
LCBAKCVkLCBHQlIpXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTU9WTF9S
RUFEX09GRkdCUl9PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIE1PVi5MIEAoJWQs
IEdCUiksIFIwXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTU9WQV9SRUFE
X09GRlBDX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIgICAgTU9WQSBAKCVkLCBQQyks
IFIwXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgT1JJTU1fT1BDT0RFOgor
ICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBPUiAjJWQsIFIwXG4iOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgT1JCSU1NX09QQ09ERToKKyAgICAgICAgICAgIGZvcm1hdCA9ICIg
ICAgT1IuQiAjJWQsIEAoUjAsIEdCUilcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBUU1RJTU1fT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBUU1QgIyVkLCBS
MFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFRTVEJfT1BDT0RFOgorICAg
ICAgICAgICAgZm9ybWF0ID0gIiAgICBUU1QuQiAlZCwgQChSMCwgR0JSKVxuIjsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIFhPUklNTV9PUENPREU6CisgICAgICAgICAgICBmb3Jt
YXQgPSAiICAgIFhPUiAjJWQsIFIwXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgWE9SQl9PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIFhPUi5CICVkLCBAKFIw
LCBHQlIpXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGZv
cm1hdCkgeworICAgICAgICAgICAgcHJpbnRmU3Rkb3V0SW5zdHIoZm9ybWF0LCBnZXRJbW04KG9w
YykpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHN3aXRjaCAob3Bj
ICYgMHhmZjAwKSB7CisgICAgICAgIGNhc2UgTU9WQl9XUklURV9PRkZSTl9PUENPREU6CisgICAg
ICAgICAgICBmb3JtYXQgPSAiICAgIE1PVi5CIFIwLCBAKCVkLCBSJWQpXG4iOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgTU9WQl9SRUFEX09GRlJNX09QQ09ERToKKyAgICAgICAg
ICAgIGZvcm1hdCA9ICIgICAgTU9WLkIgQCglZCwgUiVkKSwgUjBcbiI7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAoZm9ybWF0KSB7CisgICAgICAgICAgICBwcmlu
dGZTdGRvdXRJbnN0cihmb3JtYXQsIGdldERpc3Aob3BjKSwgZ2V0Um0ob3BjKSk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgc3dpdGNoIChvcGMgJiAweGYwMDApIHsK
KyAgICAgICAgY2FzZSBCUkFfT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICAqQlJB
ICVkXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQlNSX09QQ09ERToKKyAg
ICAgICAgICAgIGZvcm1hdCA9ICIgICAgKkJTUiAlZFxuIjsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgIGlmIChmb3JtYXQpIHsKKyAgICAgICAgICAgIHByaW50ZlN0ZG91
dEluc3RyKGZvcm1hdCwgZ2V0SW1tMTIob3BjKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICAgICAgc3dpdGNoIChvcGMgJiAweGYwMDApIHsKKyAgICAgICAgY2FzZSBNT1ZM
X1JFQURfT0ZGUENfT1BDT0RFOgorICAgICAgICAgICAgZm9ybWF0ID0gIiAgICBNT1YuTCBAKCVk
LCBQQyksIFIlZFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFERElNTV9P
UENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIEFERCAjJWQsIFIlZFxuIjsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE1PVklNTV9PUENPREU6CisgICAgICAgICAgICBm
b3JtYXQgPSAiICAgIE1PViAjJWQsIFIlZFxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIE1PVldfUkVBRF9PRkZQQ19PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAg
IE1PVi5XIEAoJWQsIFBDKSwgUiVkXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgaWYgKGZvcm1hdCkgeworICAgICAgICAgICAgcHJpbnRmU3Rkb3V0SW5zdHIoZm9y
bWF0LCBnZXRJbW04KG9wYyksIGdldFJuKG9wYykpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgICAgIHN3aXRjaCAob3BjICYgMHhmMDAwKSB7CisgICAgICAgIGNhc2UgTU9W
TF9XUklURV9PRkZSTl9PUENPREU6CisgICAgICAgICAgICBmb3JtYXQgPSAiICAgIE1PVi5MIFIl
ZCwgQCglZCwgUiVkKVxuIjsKKyAgICAgICAgICAgIHByaW50ZlN0ZG91dEluc3RyKGZvcm1hdCwg
Z2V0Um0ob3BjKSwgZ2V0RGlzcChvcGMpLCBnZXRSbihvcGMpKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIE1PVkxfUkVBRF9PRkZSTV9PUENPREU6CisgICAgICAgICAgICBmb3Jt
YXQgPSAiICAgIE1PVi5MIEAoJWQsIFIlZCksIFIlZFxuIjsKKyAgICAgICAgICAgIHByaW50ZlN0
ZG91dEluc3RyKGZvcm1hdCwgZ2V0RGlzcChvcGMpLCBnZXRSbShvcGMpLCBnZXRSbihvcGMpKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgc3RhdGljIHZvaWQg
cHJpbnRmU3Rkb3V0SW5zdHIoY29uc3QgY2hhciogZm9ybWF0LCAuLi4pCisgICAgeworICAgICAg
ICBpZiAoZ2V0ZW52KCJKYXZhU2NyaXB0Q29yZUR1bXBKSVQiKSkgeworICAgICAgICAgICAgdmFf
bGlzdCBhcmdzOworICAgICAgICAgICAgdmFfc3RhcnQoYXJncywgZm9ybWF0KTsKKyAgICAgICAg
ICAgIHZwcmludGZTdGRvdXRJbnN0cihmb3JtYXQsIGFyZ3MpOworICAgICAgICAgICAgdmFfZW5k
KGFyZ3MpOworICAgICAgICB9CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgdnByaW50ZlN0ZG91
dEluc3RyKGNvbnN0IGNoYXIqIGZvcm1hdCwgdmFfbGlzdCBhcmdzKQorICAgIHsKKyAgICAgICAg
aWYgKGdldGVudigiSmF2YVNjcmlwdENvcmVEdW1wSklUIikpCisgICAgICAgICAgICB2ZnByaW50
ZihzdGRvdXQsIGZvcm1hdCwgYXJncyk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgcHJpbnRC
bG9ja0luc3RyKHVpbnQxNl90KiBmaXJzdCwgdW5zaWduZWQgaW50IG9mZnNldCwgaW50IG5iSW5z
dHIpCisgICAgeworICAgICAgICBwcmludGZTdGRvdXRJbnN0cigiPj4gcmVwYXRjaCBpbnN0cnVj
dGlvbnMgYWZ0ZXIgbGlua1xuIik7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDw9IG5iSW5z
dHI7IGkrKykKKyAgICAgICAgICAgcHJpbnRJbnN0cigqKGZpcnN0ICsgaSksIG9mZnNldCArIGkp
OworICAgICAgICBwcmludGZTdGRvdXRJbnN0cigiPj4gZW5kIHJlcGF0Y2hcbiIpOworICAgIH0K
KyNlbHNlCisgICAgc3RhdGljIHZvaWQgcHJpbnRJbnN0cih1aW50MTZfdCBvcGMsIHVuc2lnbmVk
IGludCBzaXplLCBib29sIGlzZG91YmxlSW5zdCA9IHRydWUpIHt9OworICAgIHN0YXRpYyB2b2lk
IHByaW50QmxvY2tJbnN0cih1aW50MTZfdCogZmlyc3QsIHVuc2lnbmVkIGludCBvZmZzZXQsIGlu
dCBuYkluc3RyKSB7fTsKKyNlbmRpZgorCitwcml2YXRlOgorICAgIFNINEJ1ZmZlciBtX2J1ZmZl
cjsKKyAgICBpbnQgbV9jbGFpbXNjcmF0Y2hSZWc7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MK
KworI2VuZGlmIC8vIEVOQUJMRShBU1NFTUJMRVIpICYmIENQVShTSDQpCisKKyNlbmRpZiAvLyBT
SDRBc3NlbWJsZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFy
ckpJVC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySklULmNwcAppbmRleCBi
YzYxYTZlLi5mNzQxMDdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9Z
YXJySklULmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySklULmNwcApA
QCAtNTksNiArNTksMTYgQEAgY2xhc3MgWWFyckdlbmVyYXRvciA6IHByaXZhdGUgTWFjcm9Bc3Nl
bWJsZXIgewogICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIHJlZ1QxID0gTUlQU1JlZ2lzdGVy
czo6dDU7CiAKICAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCByZXR1cm5SZWdpc3RlciA9IE1J
UFNSZWdpc3RlcnM6OnYwOworI2VsaWYgQ1BVKFNINCkKKyAgICBzdGF0aWMgY29uc3QgUmVnaXN0
ZXJJRCBpbnB1dCA9IFNINFJlZ2lzdGVyczo6cjQ7CisgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVy
SUQgaW5kZXggPSBTSDRSZWdpc3RlcnM6OnI1OworICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklE
IGxlbmd0aCA9IFNINFJlZ2lzdGVyczo6cjY7CisgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQg
b3V0cHV0ID0gU0g0UmVnaXN0ZXJzOjpyNzsKKworICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklE
IHJlZ1QwID0gU0g0UmVnaXN0ZXJzOjpyMDsKKyAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCBy
ZWdUMSA9IFNINFJlZ2lzdGVyczo6cjE7CisKKyAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCBy
ZXR1cm5SZWdpc3RlciA9IFNINFJlZ2lzdGVyczo6cjA7CiAjZWxpZiBDUFUoWDg2KQogICAgIHN0
YXRpYyBjb25zdCBSZWdpc3RlcklEIGlucHV0ID0gWDg2UmVnaXN0ZXJzOjplYXg7CiAgICAgc3Rh
dGljIGNvbnN0IFJlZ2lzdGVySUQgaW5kZXggPSBYODZSZWdpc3RlcnM6OmVkeDsKQEAgLTIxNzks
NiArMjE4OSw5IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgOiBwcml2YXRlIE1hY3JvQXNzZW1ibGVy
IHsKICAgICAgICAgcHVzaChBUk1SZWdpc3RlcnM6OnI4KTsgLy8gc2NyYXRjaCByZWdpc3Rlcgog
I2VuZGlmCiAgICAgICAgIG1vdmUoQVJNUmVnaXN0ZXJzOjpyMywgb3V0cHV0KTsKKyNlbGlmIENQ
VShTSDQpCisgICAgICAgIHB1c2goU0g0UmVnaXN0ZXJzOjpyMTEpOworICAgICAgICBwdXNoKFNI
NFJlZ2lzdGVyczo6cjEzKTsKICNlbGlmIENQVShNSVBTKQogICAgICAgICAvLyBEbyBub3RoaW5n
LgogI2VuZGlmCkBAIC0yMjAxLDYgKzIyMTQsOSBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIDogcHJp
dmF0ZSBNYWNyb0Fzc2VtYmxlciB7CiAgICAgICAgIHBvcChBUk1SZWdpc3RlcnM6OnI2KTsKICAg
ICAgICAgcG9wKEFSTVJlZ2lzdGVyczo6cjUpOwogICAgICAgICBwb3AoQVJNUmVnaXN0ZXJzOjpy
NCk7CisjZWxpZiBDUFUoU0g0KQorICAgICAgICBwb3AoU0g0UmVnaXN0ZXJzOjpyMTMpOworICAg
ICAgICBwb3AoU0g0UmVnaXN0ZXJzOjpyMTEpOwogI2VsaWYgQ1BVKE1JUFMpCiAgICAgICAgIC8v
IERvIG5vdGhpbmcKICNlbmRpZgotLSAKMS43LjIuMwoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>88415</attachid>
            <date>2011-04-06 07:51:29 -0700</date>
            <delta_ts>2011-04-08 07:10:45 -0700</delta_ts>
            <desc>JIT remaining part for SH4 platforms.</desc>
            <filename>0001-Add-JIT-remaining-part-for-SH4-platforms.patch</filename>
            <type>text/plain</type>
            <size>18443</size>
            <attacher name="thouraya">thouraya.andolsi</attacher>
            
              <data encoding="base64">RnJvbSA0ZTVmZGRlNzI4M2MzZGM1MDQ5OWJhMGMwNTA4NjljNjFjM2EyZDNhIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBUaG91cmF5YSBBTkRPTFNJIDx0aG91cmF5YS5hbmRvbHNpQHN0
LmNvbT4KRGF0ZTogV2VkLCA2IEFwciAyMDExIDE1OjQzOjUwICswMjAwClN1YmplY3Q6IFtQQVRD
SF0gQWRkIEpJVCByZW1haW5pbmcgcGFydCBmb3IgU0g0IHBsYXRmb3Jtcy4KCi0tLQogU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgfCAgIDE5ICsrKysK
IC4uLi9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJTSDQuaCAgIHwgICAg
OCArKwogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9TSDRBc3NlbWJsZXIuaCAgICAg
fCAgICAxICsKIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmggICAgICAgICAgICAgICAg
ICAgIHwgICA0NSArKysrKysrKysKIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5l
TWV0aG9kcy5oICAgICAgIHwgICAyNSArKysrKwogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGNvZGVzMzJfNjQuY3BwICAgICAgfCAgIDQwICsrKysrKysrCiAuLi4vSmF2YVNjcmlwdENv
cmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwICB8ICAgMTEgKystCiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcCAgICAgICAgICAgICB8ICAgOTUgKysrKysrKysr
KysrKysrKysrKysKIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuaCAgICAgICAg
ICAgICAgIHwgICAyMSArKysrKwogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KU0ludGVyZmFj
ZUpJVC5oICAgICAgICAgfCAgIDI1ICsrKysrCiAxMCBmaWxlcyBjaGFuZ2VkLCAyODkgaW5zZXJ0
aW9ucygrKSwgMSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAxYjM4
ZDg5Li4yMjVmYmJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMiBAQAor
MjAxMS0wNC0wNiAgVGhvdXJheWEgQU5ET0xTSSAgPHRob3VyYXlhLmFuZG9sc2lAc3QuY29tPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFNINCBKSVQg
U1VQUE9SVC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTQ0MzI5CisKKyAgICAgICAgQWRkIHJlbWFpbmluZyBKSVQgcGFydCBmb3IgU0g0IHBsYXRmb3Jt
cy4KKworICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclNINC5oOgorICAgICAgICAq
IGFzc2VtYmxlci9TSDRBc3NlbWJsZXIuaDoKKyAgICAgICAgKiBqaXQvSklULmg6CisgICAgICAg
ICogaml0L0pJVElubGluZU1ldGhvZHMuaDoKKyAgICAgICAgKiBqaXQvSklUT3Bjb2RlczMyXzY0
LmNwcDoKKyAgICAgICAgKiBqaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHA6CisgICAgICAg
ICogaml0L0pJVFN0dWJzLmNwcDoKKyAgICAgICAgKiBqaXQvSklUU3R1YnMuaDoKKyAgICAgICAg
KiBqaXQvSlNJbnRlcmZhY2VKSVQuaDoKKwogMjAxMS0wNC0wNSAgR2VvZmZyZXkgR2FyZW4gIDxn
Z2FyZW5AYXBwbGUuY29tPgogCiAgICAgICAgIFRyeSB0byBmaXggdGhlIFdpbmRvd3MgYnVpbGQu
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1i
bGVyU0g0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVy
U0g0LmgKaW5kZXggMDRiMDYwMi4uN2UxNWU2YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclNINC5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJTSDQuaApAQCAtMTY1MSw2ICsxNjUxLDE0
IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIENhbGwobV9hc3NlbWJsZXIuY2FsbCh0YXJnZXQp
LCBDYWxsOjpOb25lKTsKICAgICB9CiAKKyAgICB2b2lkIGNhbGwoQWRkcmVzcyBhZGRyZXNzLCBS
ZWdpc3RlcklEIHRhcmdldCkKKyAgICB7CisgICAgICAgIGxvYWQzMihhZGRyZXNzLmJhc2UsIGFk
ZHJlc3Mub2Zmc2V0LCB0YXJnZXQpOworICAgICAgICBtX2Fzc2VtYmxlci5lbnN1cmVTcGFjZSht
X2Fzc2VtYmxlci5tYXhJbnN0cnVjdGlvblNpemUgKyAyKTsKKyAgICAgICAgbV9hc3NlbWJsZXIu
YnJhbmNoKEpTUl9PUENPREUsIHRhcmdldCk7CisgICAgICAgIG1fYXNzZW1ibGVyLm5vcCgpOwor
ICAgIH0KKwogICAgIHZvaWQgYnJlYWtwb2ludCgpCiAgICAgewogICAgICAgICBtX2Fzc2VtYmxl
ci5ia3B0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1NI
NEFzc2VtYmxlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9TSDRBc3NlbWJs
ZXIuaAppbmRleCA1NzI2YWU4Li4zMGRiMGY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL1NINEFzc2VtYmxlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvU0g0QXNzZW1ibGVyLmgKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJB
c3NlbWJsZXJCdWZmZXJXaXRoQ29uc3RhbnRQb29sLmgiCiAjaW5jbHVkZSA8c3RkYXJnLmg+CiAj
aW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDx3dGYvQXNz
ZXJ0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
LmgKaW5kZXggNjFiZDJhYi4uM2UyMzM4ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCkBAIC00
NzMsNiArNDczLDQ4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdGF0aWMgY29uc3QgaW50
IHBhdGNoT2Zmc2V0TWV0aG9kQ2hlY2tQcm90b1N0cnVjdCA9IDUyOwogICAgICAgICBzdGF0aWMg
Y29uc3QgaW50IHBhdGNoT2Zmc2V0TWV0aG9kQ2hlY2tQdXRGdW5jdGlvbiA9IDg0OwogI2VuZGlm
CisjZWxpZiBDUFUoU0g0KQorICAgICAgIC8vIFRoZXNlIGFyY2hpdGVjdHVyZSBzcGVjaWZpYyB2
YWx1ZSBhcmUgdXNlZCB0byBlbmFibGUgcGF0Y2hpbmcgLSBzZWUgY29tbWVudCBvbiBvcF9wdXRf
YnlfaWQuCisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRHZXRCeUlkU3RydWN0
dXJlID0gNjsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldFB1dEJ5SWRQcm9w
ZXJ0eU1hcE9mZnNldCA9IDI0OworICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0
UHV0QnlJZFN0cnVjdHVyZSA9IDY7CisgICAgICAgIC8vIFRoZXNlIGFyY2hpdGVjdHVyZSBzcGVj
aWZpYyB2YWx1ZSBhcmUgdXNlZCB0byBlbmFibGUgcGF0Y2hpbmcgLSBzZWUgY29tbWVudCBvbiBv
cF9nZXRfYnlfaWQuCisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRHZXRCeUlk
QnJhbmNoVG9TbG93Q2FzZSA9IDEwOworICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zm
c2V0R2V0QnlJZFByb3BlcnR5TWFwT2Zmc2V0ID0gMjQ7CisgICAgICAgIHN0YXRpYyBjb25zdCBp
bnQgcGF0Y2hPZmZzZXRHZXRCeUlkUHV0UmVzdWx0ID0gMzI7CisKKyAgICAgICAgLy8gc2VxdWVu
Y2VPcENhbGwKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBzZXF1ZW5jZU9wQ2FsbEluc3RydWN0
aW9uU3BhY2UgPSAxMjsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBzZXF1ZW5jZU9wQ2FsbENv
bnN0YW50U3BhY2UgPSAyOworICAgICAgICAvLyBzZXF1ZW5jZU1ldGhvZENoZWNrCisgICAgICAg
IHN0YXRpYyBjb25zdCBpbnQgc2VxdWVuY2VNZXRob2RDaGVja0luc3RydWN0aW9uU3BhY2UgPSA0
MDsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBzZXF1ZW5jZU1ldGhvZENoZWNrQ29uc3RhbnRT
cGFjZSA9IDY7CisgICAgICAgIC8vIHNlcXVlbmNlR2V0QnlJZEhvdFBhdGgKKyAgICAgICAgc3Rh
dGljIGNvbnN0IGludCBzZXF1ZW5jZUdldEJ5SWRIb3RQYXRoSW5zdHJ1Y3Rpb25TcGFjZSA9IDM2
OworICAgICAgICBzdGF0aWMgY29uc3QgaW50IHNlcXVlbmNlR2V0QnlJZEhvdFBhdGhDb25zdGFu
dFNwYWNlID0gNTsKKyAgICAgICAgLy8gc2VxdWVuY2VHZXRCeUlkU2xvd0Nhc2UKKyAgICAgICAg
c3RhdGljIGNvbnN0IGludCBzZXF1ZW5jZUdldEJ5SWRTbG93Q2FzZUluc3RydWN0aW9uU3BhY2Ug
PSAyNjsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBzZXF1ZW5jZUdldEJ5SWRTbG93Q2FzZUNv
bnN0YW50U3BhY2UgPSAyOworICAgICAgICAvLyBzZXF1ZW5jZVB1dEJ5SWQKKyAgICAgICAgc3Rh
dGljIGNvbnN0IGludCBzZXF1ZW5jZVB1dEJ5SWRJbnN0cnVjdGlvblNwYWNlID0gMzY7CisgICAg
ICAgIHN0YXRpYyBjb25zdCBpbnQgc2VxdWVuY2VQdXRCeUlkQ29uc3RhbnRTcGFjZSA9IDU7CisK
KyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldEdldEJ5SWRQcm9wZXJ0eU1hcE9m
ZnNldDEgPSAyMDsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldEdldEJ5SWRQ
cm9wZXJ0eU1hcE9mZnNldDIgPSAyNjsKKworICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNo
T2Zmc2V0UHV0QnlJZFByb3BlcnR5TWFwT2Zmc2V0MSA9IDIwOworICAgICAgICBzdGF0aWMgY29u
c3QgaW50IHBhdGNoT2Zmc2V0UHV0QnlJZFByb3BlcnR5TWFwT2Zmc2V0MiA9IDI2OworCisjaWYg
RU5BQkxFKE9QQ09ERV9TQU1QTElORykKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9m
ZnNldEdldEJ5SWRTbG93Q2FzZUNhbGwgPSAwOyAvLyBGSU1YRQorI2Vsc2UKKyAgICAgICAgc3Rh
dGljIGNvbnN0IGludCBwYXRjaE9mZnNldEdldEJ5SWRTbG93Q2FzZUNhbGwgPSAyMjsKKyNlbmRp
ZgorICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0T3BDYWxsQ29tcGFyZVRvSnVt
cCA9IDQ7CisKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldE1ldGhvZENoZWNr
UHJvdG9PYmogPSAxMjsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldE1ldGhv
ZENoZWNrUHJvdG9TdHJ1Y3QgPSAyMDsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9m
ZnNldE1ldGhvZENoZWNrUHV0RnVuY3Rpb24gPSAzMjsKICNlbHNlCiAjZXJyb3IgIkpTVkFMVUUz
Ml82NCBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgcGxhdGZvcm0uIgogI2VuZGlmCkBAIC02NjYsNiAr
NzA4LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAjaWYgKGRlZmluZWQoQVNTRU1CTEVSX0hBU19DT05T
VEFOVF9QT09MKSAmJiBBU1NFTUJMRVJfSEFTX0NPTlNUQU5UX1BPT0wpCiAjZGVmaW5lIEJFR0lO
X1VOSU5URVJSVVBURURfU0VRVUVOQ0UobmFtZSkgZG8geyBiZWdpblVuaW50ZXJydXB0ZWRTZXF1
ZW5jZShuYW1lICMjIEluc3RydWN0aW9uU3BhY2UsIG5hbWUgIyMgQ29uc3RhbnRTcGFjZSk7IH0g
d2hpbGUgKGZhbHNlKQogI2RlZmluZSBFTkRfVU5JTlRFUlJVUFRFRF9TRVFVRU5DRShuYW1lKSBk
byB7IGVuZFVuaW50ZXJydXB0ZWRTZXF1ZW5jZShuYW1lICMjIEluc3RydWN0aW9uU3BhY2UsIG5h
bWUgIyMgQ29uc3RhbnRTcGFjZSk7IH0gd2hpbGUgKGZhbHNlKQorI2lmIENQVShTSDQpCisjZGVm
aW5lIEVORF9VTklOVEVSUlVQVEVEX1NFUVVFTkNFUyhuYW1lLCBleHRyYUksIGV4dHJhQykgZW5k
VW5pbnRlcnJ1cHRlZFNlcXVlbmNlKG5hbWUgIyMgSW5zdHJ1Y3Rpb25TcGFjZSArIGV4dHJhSSwg
bmFtZSAjIyBDb25zdGFudFNwYWNlICsgZXh0cmFDKQorI2VuZGlmCiAKICAgICAgICAgdm9pZCBi
ZWdpblVuaW50ZXJydXB0ZWRTZXF1ZW5jZShpbnQsIGludCk7CiAgICAgICAgIHZvaWQgZW5kVW5p
bnRlcnJ1cHRlZFNlcXVlbmNlKGludCwgaW50KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUSW5saW5lTWV0aG9kcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRJbmxpbmVNZXRob2RzLmgKaW5kZXggMTZjMjMzNS4uYTZlZGI1MyAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVNZXRob2RzLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVNZXRob2RzLmgKQEAgLTEyMyw2ICsxMjMsMTMg
QEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YmVnaW5VbmludGVycnVwdGVkU2VxdWVuY2UoaW50
IGluc25TcGFjZSwgaW50IGNvbnN0U3BhY2UKIAogICAgIGVuc3VyZVNwYWNlKGluc25TcGFjZSwg
Y29uc3RTcGFjZSk7CiAKKyNlbGlmIENQVShTSDQpCisjaWZuZGVmIE5ERUJVRworICAgIGluc25T
cGFjZSArPSBzaXplb2YoU0g0V29yZCk7CisgICAgY29uc3RTcGFjZSArPSBzaXplb2YodWludDY0
X3QpOworI2VuZGlmCisKKyAgICBtX2Fzc2VtYmxlci5lbnN1cmVTcGFjZShpbnNuU3BhY2UgKyBt
X2Fzc2VtYmxlci5tYXhJbnN0cnVjdGlvblNpemUgKyAyLCBjb25zdFNwYWNlICsgOCk7CiAjZW5k
aWYKIAogI2lmIGRlZmluZWQoQVNTRU1CTEVSX0hBU19DT05TVEFOVF9QT09MKSAmJiBBU1NFTUJM
RVJfSEFTX0NPTlNUQU5UX1BPT0wKQEAgLTE2Nyw2ICsxNzQsMjIgQEAgQUxXQVlTX0lOTElORSB2
b2lkIEpJVDo6cmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4oQWRkcmVzcyBhZGRyZXNz
KQogewogICAgIGxvYWRQdHIoYWRkcmVzcywgbGlua1JlZ2lzdGVyKTsKIH0KKyNlbGlmIENQVShT
SDQpCisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OnByZXNlcnZlUmV0dXJuQWRkcmVzc0FmdGVy
Q2FsbChSZWdpc3RlcklEIHJlZykKK3sKKyAgICBtX2Fzc2VtYmxlci5zdHNwcihyZWcpOworfQor
CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpyZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVy
bihSZWdpc3RlcklEIHJlZykKK3sKKyAgICBtX2Fzc2VtYmxlci5sZHNwcihyZWcpOworfQorCitB
TFdBWVNfSU5MSU5FIHZvaWQgSklUOjpyZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihB
ZGRyZXNzIGFkZHJlc3MpCit7CisgICAgbG9hZFB0ckxpbmtSZWcoYWRkcmVzcyk7Cit9CiAKICNl
bGlmIENQVShNSVBTKQogCkBAIC0yMTcsNiArMjQwLDggQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJ
VDo6cmVzdG9yZUFyZ3VtZW50UmVmZXJlbmNlRm9yVHJhbXBvbGluZSgpCiAgICAgYWRkUHRyKFRy
dXN0ZWRJbW0zMihzaXplb2Yodm9pZCopKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIsIGZpcnN0QXJn
dW1lbnRSZWdpc3Rlcik7CiAjZWxpZiBDUFUoQVJNKQogICAgIG1vdmUoc3RhY2tQb2ludGVyUmVn
aXN0ZXIsIGZpcnN0QXJndW1lbnRSZWdpc3Rlcik7CisjZWxpZiBDUFUoU0g0KQorICAgIG1vdmUo
c3RhY2tQb2ludGVyUmVnaXN0ZXIsIGZpcnN0QXJndW1lbnRSZWdpc3Rlcik7CiAjZW5kaWYKICAg
ICAvLyBJbiB0aGUgdHJhbXBvbGluZSBvbiB4ODYtNjQsIHRoZSBmaXJzdCBhcmd1bWVudCByZWdp
c3RlciBpcyBub3Qgb3ZlcndyaXR0ZW4uCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVE9wY29kZXMzMl82NC5jcHAKaW5kZXggYmMwYjJjYi4uMjIyYWRiOCAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcApAQCAtMjQ1LDcgKzI0NSwy
NiBAQCBKSVQ6OkxhYmVsIEpJVDo6cHJpdmF0ZUNvbXBpbGVDVElOYXRpdmVDYWxsKEpTR2xvYmFs
RGF0YSogZ2xvYmFsRGF0YSwgYm9vbCBpc0NvbgogICAgIGNhbGwoQWRkcmVzcyhyZWdUMiwgZXhl
Y3V0YWJsZU9mZnNldFRvRnVuY3Rpb24pKTsKIAogICAgIHJlc3RvcmVSZXR1cm5BZGRyZXNzQmVm
b3JlUmV0dXJuKHJlZ1QzKTsKKyNlbGlmIENQVShTSDQpCisgICAgLy8gTG9hZCBjYWxsZXIgZnJh
bWUncyBzY29wZSBjaGFpbiBpbnRvIHRoaXMgY2FsbGZyYW1lIHNvIHRoYXQgd2hhdGV2ZXIgd2Ug
Y2FsbCBjYW4KKyAgICAvLyBnZXQgdG8gaXRzIGdsb2JhbCBkYXRhLgorICAgIGVtaXRHZXRGcm9t
Q2FsbEZyYW1lSGVhZGVyUHRyKFJlZ2lzdGVyRmlsZTo6Q2FsbGVyRnJhbWUsIHJlZ1QyKTsKKyAg
ICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihSZWdpc3RlckZpbGU6OlNjb3BlQ2hhaW4s
IHJlZ1QxLCByZWdUMik7CisgICAgZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKHJlZ1QxLCBSZWdp
c3RlckZpbGU6OlNjb3BlQ2hhaW4pOworCisgICAgcHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJD
YWxsKHJlZ1QzKTsgLy8gQ2FsbGVlIHByZXNlcnZlZAorICAgIGVtaXRQdXRUb0NhbGxGcmFtZUhl
YWRlcihyZWdUMywgUmVnaXN0ZXJGaWxlOjpSZXR1cm5QQyk7CiAKKyAgICAvLyBDYWxsaW5nIGNv
bnZlbnRpb246IGYocjAgPT0gcmVnVDQsIHIxID09IHJlZ1Q1LCAuLi4pOworICAgIC8vIEhvc3Qg
ZnVuY3Rpb24gc2lnbmF0dXJlOiBmKEV4ZWNTdGF0ZSopOworICAgIG1vdmUoY2FsbEZyYW1lUmVn
aXN0ZXIsIHJlZ1Q0KTsKKworICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKFJlZ2lz
dGVyRmlsZTo6Q2FsbGVlLCByZWdUNSk7CisgICAgbW92ZShyZWdUMiwgY2FsbEZyYW1lUmVnaXN0
ZXIpOyAvLyBFYWdlcmx5IHJlc3RvcmUgY2FsbGVyIGZyYW1lIHJlZ2lzdGVyIHRvIGF2b2lkIGxv
YWRpbmcgZnJvbSBzdGFjay4KKyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDUsIE9CSkVDVF9PRkZT
RVRPRihKU0Z1bmN0aW9uLCBtX2V4ZWN1dGFibGUpKSwgcmVnVDIpOworCisgICAgY2FsbChBZGRy
ZXNzKHJlZ1QyLCBleGVjdXRhYmxlT2Zmc2V0VG9GdW5jdGlvbiksIHJlZ1QwKTsKKyAgICByZXN0
b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihyZWdUMyk7CiAjZWxpZiBDUFUoTUlQUykKICAg
ICAvLyBMb2FkIGNhbGxlciBmcmFtZSdzIHNjb3BlIGNoYWluIGludG8gdGhpcyBjYWxsZnJhbWUg
c28gdGhhdCB3aGF0ZXZlciB3ZSBjYWxsIGNhbgogICAgIC8vIGdldCB0byBpdHMgZ2xvYmFsIGRh
dGEuCkBAIC0zOTQsNyArNDEzLDI4IEBAIEpJVDo6Q29kZVB0ciBKSVQ6OnByaXZhdGVDb21waWxl
Q1RJTmF0aXZlQ2FsbChQYXNzUmVmUHRyPEV4ZWN1dGFibGVQb29sPiBleGVjdXRhCiAgICAgYWRk
UHRyKFRydXN0ZWRJbW0zMigxNiksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKIAogICAgIHJlc3Rv
cmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKHJlZ1QzKTsKKyNlbGlmIENQVShTSDQpCisgICAg
Ly8gTG9hZCBjYWxsZXIgZnJhbWUncyBzY29wZSBjaGFpbiBpbnRvIHRoaXMgY2FsbGZyYW1lIHNv
IHRoYXQgd2hhdGV2ZXIgd2UgY2FsbCBjYW4KKyAgICAvLyBnZXQgdG8gaXRzIGdsb2JhbCBkYXRh
LgorICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKFJlZ2lzdGVyRmlsZTo6Q2FsbGVy
RnJhbWUsIHJlZ1QyKTsKKyAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihSZWdpc3Rl
ckZpbGU6OlNjb3BlQ2hhaW4sIHJlZ1QxLCByZWdUMik7CisgICAgZW1pdFB1dFRvQ2FsbEZyYW1l
SGVhZGVyKHJlZ1QxLCBSZWdpc3RlckZpbGU6OlNjb3BlQ2hhaW4pOworCisgICAgcHJlc2VydmVS
ZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKHJlZ1QzKTsgLy8gQ2FsbGVlIHByZXNlcnZlZAorICAgIGVt
aXRQdXRUb0NhbGxGcmFtZUhlYWRlcihyZWdUMywgUmVnaXN0ZXJGaWxlOjpSZXR1cm5QQyk7CisK
KyAgICAvLyBDYWxsaW5nIGNvbnZlbnRpb246IGYocjAgPT0gcmVnVDQsIHIxID09IHJlZ1Q1LCAu
Li4pOworICAgIC8vIEhvc3QgZnVuY3Rpb24gc2lnbmF0dXJlOiBmKEV4ZWNTdGF0ZSopOworICAg
IG1vdmUoY2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1Q0KTsKIAorICAgIGVtaXRHZXRGcm9tQ2FsbEZy
YW1lSGVhZGVyUHRyKFJlZ2lzdGVyRmlsZTo6Q2FsbGVlLCByZWdUNSk7CisgICAgbW92ZShyZWdU
MiwgY2FsbEZyYW1lUmVnaXN0ZXIpOyAvLyBFYWdlcmx5IHJlc3RvcmUgY2FsbGVyIGZyYW1lIHJl
Z2lzdGVyIHRvIGF2b2lkIGxvYWRpbmcgZnJvbSBzdGFjay4KKyAgICBsb2FkUHRyKEFkZHJlc3Mo
cmVnVDUsIE9CSkVDVF9PRkZTRVRPRihKU0Z1bmN0aW9uLCBtX2V4ZWN1dGFibGUpKSwgcmVnVDIp
OworCisgICAgLy8gY2FsbCB0aGUgZnVuY3Rpb24KKyAgICBuYXRpdmVDYWxsID0gY2FsbCgpOwor
CisgICAgcmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4ocmVnVDMpOwogI2VsaWYgRU5B
QkxFKEpJVF9PUFRJTUlaRV9OQVRJVkVfQ0FMTCkKICNlcnJvciAiSklUX09QVElNSVpFX05BVElW
RV9DQUxMIG5vdCB5ZXQgc3VwcG9ydGVkIG9uIHRoaXMgcGxhdGZvcm0uIgogI2Vsc2UKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3Bw
CmluZGV4IDJhNDdlNWMuLjQ5YjYzN2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcApAQCAtNDc1LDcgKzQ3NSwxNiBAQCB2
b2lkIEpJVDo6Y29tcGlsZUdldEJ5SWRTbG93Q2FzZShpbnQgZHN0LCBpbnQgYmFzZSwgSWRlbnRp
ZmllciogaWRlbnQsIFZlY3RvcjxTbAogICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KFRydXN0ZWRJ
bW1QdHIoaWRlbnQpKTsKICAgICBDYWxsIGNhbGwgPSBzdHViQ2FsbC5jYWxsKGRzdCk7CiAgICAg
CisjaWYgQ1BVKFNINCkKKyAgICBpZiAoKGRzdCA+PSAwKSAmJiAoZHN0IDw9IDcpKQorICAgICAg
ICBFTkRfVU5JTlRFUlJVUFRFRF9TRVFVRU5DRShzZXF1ZW5jZUdldEJ5SWRTbG93Q2FzZSk7Cisg
ICAgZWxzZSBpZiAoKGRzdCA+IDE1KSB8fCAoZHN0IDwgLTE2KSkKKyAgICAgICAgRU5EX1VOSU5U
RVJSVVBURURfU0VRVUVOQ0VTKHNlcXVlbmNlR2V0QnlJZFNsb3dDYXNlLCA4LCAyKTsKKyAgICBl
bHNlCisgICAgICAgIEVORF9VTklOVEVSUlVQVEVEX1NFUVVFTkNFUyhzZXF1ZW5jZUdldEJ5SWRT
bG93Q2FzZSwgOCwgMCk7CisjZWxzZQogICAgIEVORF9VTklOVEVSUlVQVEVEX1NFUVVFTkNFKHNl
cXVlbmNlR2V0QnlJZFNsb3dDYXNlKTsKKyNlbmRpZgogICAgIAogICAgIEFTU0VSVF9KSVRfT0ZG
U0VUKGRpZmZlcmVuY2VCZXR3ZWVuKGNvbGRQYXRoQmVnaW4sIGNhbGwpLCBwYXRjaE9mZnNldEdl
dEJ5SWRTbG93Q2FzZUNhbGwpOwogICAgIApAQCAtNjI0LDcgKzYzMyw3IEBAIHZvaWQgSklUOjpw
cml2YXRlQ29tcGlsZVB1dEJ5SWRUcmFuc2l0aW9uKFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5m
bywgU3RydWN0dXJlCiAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBBYnNvbHV0ZUFkZHJlc3Mo
bmV3U3RydWN0dXJlLT5hZGRyZXNzT2ZDb3VudCgpKSk7CiAgICAgc3RvcmVQdHIoVHJ1c3RlZElt
bVB0cihuZXdTdHJ1Y3R1cmUpLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNl
dCgpKSk7CiAgICAgCi0jaWYgQ1BVKE1JUFMpCisjaWYgQ1BVKE1JUFMpIHx8IENQVShTSDQpCiAg
ICAgLy8gRm9yIE1JUFMsIHdlIGRvbid0IGFkZCBzaXplb2Yodm9pZCopIHRvIHRoZSBzdGFjayBv
ZmZzZXQuCiAgICAgbG9hZDMyKEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIE9CSkVDVF9P
RkZTRVRPRihKSVRTdGFja0ZyYW1lLCBhcmdzWzJdKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVl
LCB1LmFzQml0cy5wYXlsb2FkKSksIHJlZ1QzKTsKICAgICBsb2FkMzIoQWRkcmVzcyhzdGFja1Bv
aW50ZXJSZWdpc3RlciwgT0JKRUNUX09GRlNFVE9GKEpJVFN0YWNrRnJhbWUsIGFyZ3NbMl0pICsg
T0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCByZWdUMik7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCmluZGV4IGNhYzlmMDIuLjQyODE4MzQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCkBAIC0zMTQsNyArMzE0LDc5IEBAIGV4
dGVybiAiQyIgewogI2RlZmluZSBFTkFCTEVfUFJPRklMRVJfUkVGRVJFTkNFX09GRlNFVCA5Ngog
I2RlZmluZSBHTE9CQUxfREFUQV9PRkZTRVQgICAgICAgICAxMDAKICNkZWZpbmUgU1RBQ0tfTEVO
R1RIICAgICAgICAgICAgICAgMTA0CisjZWxpZiBDUFUoU0g0KQorI2RlZmluZSBTWU1CT0xfU1RS
SU5HKG5hbWUpICNuYW1lCisvKiBjb2RlIChyNCksIFJlZ2lzdGVyRmlsZSogKHI1KSwgQ2FsbEZy
YW1lKiAocjYpLCBKU1ZhbHVlKiBleGNlcHRpb24gKHI3KSwgUHJvZmlsZXIqKihzcCksIEpTR2xv
YmFsRGF0YSAoc3ApKi8KIAorYXNtIHZvbGF0aWxlICgKKyIudGV4dFxuIgorIi5nbG9ibCAiIFNZ
TUJPTF9TVFJJTkcoY3RpVHJhbXBvbGluZSkgIlxuIgorSElERV9TWU1CT0woY3RpVHJhbXBvbGlu
ZSkgIlxuIgorU1lNQk9MX1NUUklORyhjdGlUcmFtcG9saW5lKSAiOiIgIlxuIgorICAgICJtb3Yu
bCByNywgQC1yMTUiICJcbiIKKyAgICAibW92LmwgcjYsIEAtcjE1IiAiXG4iCisgICAgIm1vdi5s
IHI1LCBALXIxNSIgIlxuIgorICAgICJtb3YubCByOCwgQC1yMTUiICJcbiIKKyAgICAibW92ICMx
MjcsIHI4IiAiXG4iCisgICAgIm1vdi5sIHIxNCwgQC1yMTUiICJcbiIKKyAgICAic3RzLmwgcHIs
IEAtcjE1IiAiXG4iCisgICAgIm1vdi5sIHIxMywgQC1yMTUiICJcbiIKKyAgICAibW92LmwgcjEx
LCBALXIxNSIgIlxuIgorICAgICJtb3YubCByMTAsIEAtcjE1IiAiXG4iCisgICAgImFkZCAjLTYw
LCByMTUiICJcbiIKKyAgICAibW92IHI2LCByMTQiICJcbiIKKyAgICAianNyIEByNCIgIlxuIgor
ICAgICJub3AiICJcbiIKKyAgICAiYWRkICM2MCwgcjE1IiAiXG4iCisgICAgIm1vdi5sIEByMTUr
LHIxMCIgIlxuIgorICAgICJtb3YubCBAcjE1KyxyMTEiICJcbiIKKyAgICAibW92LmwgQHIxNSss
cjEzIiAiXG4iCisgICAgImxkcy5sIEByMTUrLHByIiAiXG4iCisgICAgIm1vdi5sIEByMTUrLHIx
NCIgIlxuIgorICAgICJtb3YubCBAcjE1KyxyOCIgIlxuIgorICAgICJhZGQgIzEyLCByMTUiICJc
biIKKyAgICAicnRzIiAiXG4iCisgICAgIm5vcCIgIlxuIgorKTsKKworYXNtIHZvbGF0aWxlICgK
KyIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5HKGN0aVZNVGhyb3dUcmFtcG9saW5lKSAiXG4iCitISURF
X1NZTUJPTChjdGlWTVRocm93VHJhbXBvbGluZSkgIlxuIgorU1lNQk9MX1NUUklORyhjdGlWTVRo
cm93VHJhbXBvbGluZSkgIjoiICJcbiIKKyAgICAibW92LmwgLkwyIlNZTUJPTF9TVFJJTkcoY3Rp
X3ZtX3Rocm93KSIscjAiICJcbiIKKyAgICAibW92IHIxNSwgcjQiICJcbiIKKyAgICAibW92Lmwg
QChyMCxyMTIpLHIxMSIgIlxuIgorICAgICJqc3IgQHIxMSIgIlxuIgorICAgICJub3AiICJcbiIK
KyAgICAiYWRkICM2MCwgcjE1IiAiXG4iCisgICAgIm1vdi5sIEByMTUrLHIxMCIgIlxuIgorICAg
ICJtb3YubCBAcjE1KyxyMTEiICJcbiIKKyAgICAibW92LmwgQHIxNSsscjEzIiAiXG4iCisgICAg
Imxkcy5sIEByMTUrLHByIiAiXG4iCisgICAgIm1vdi5sIEByMTUrLHIxNCIgIlxuIgorICAgICJt
b3YubCBAcjE1KyxyOCIgIlxuIgorICAgICJhZGQgIzEyLCByMTUiICJcbiIKKyAgICAicnRzIiAi
XG4iCisgICAgIm5vcCIgIlxuIgorICAgICIuYWxpZ24gMiIgIlxuIgorICAgICIuTDIiU1lNQk9M
X1NUUklORyhjdGlfdm1fdGhyb3cpIjoubG9uZyAiIFNZTUJPTF9TVFJJTkcoY3RpX3ZtX3Rocm93
KSJAR09UIFxuIgorKTsKKworYXNtIHZvbGF0aWxlICgKKyIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5H
KGN0aU9wVGhyb3dOb3RDYXVnaHQpICJcbiIKK0hJREVfU1lNQk9MKGN0aU9wVGhyb3dOb3RDYXVn
aHQpICJcbiIKK1NZTUJPTF9TVFJJTkcoY3RpT3BUaHJvd05vdENhdWdodCkgIjoiICJcbiIKKyAg
ICAiYWRkICM2MCwgcjE1IiAiXG4iCisgICAgIm1vdi5sIEByMTUrLHIxMCIgIlxuIgorICAgICJt
b3YubCBAcjE1KyxyMTEiICJcbiIKKyAgICAibW92LmwgQHIxNSsscjEzIiAiXG4iCisgICAgImxk
cy5sIEByMTUrLHByIiAiXG4iCisgICAgIm1vdi5sIEByMTUrLHIxNCIgIlxuIgorICAgICJtb3Yu
bCBAcjE1KyxyOCIgIlxuIgorICAgICJhZGQgIzEyLCByMTUiICJcbiIKKyAgICAicnRzIiAiXG4i
CisgICAgIm5vcCIgIlxuIgorKTsKICNlbHNlCiAgICAgI2Vycm9yICJKSVQgbm90IHN1cHBvcnRl
ZCBvbiB0aGlzIHBsYXRmb3JtLiIKICNlbmRpZgpAQCAtMTE1Niw2ICsxMjI4LDI5IEBAIE1TVkMo
KQogTVNWQ19FTkQoICAgIEVORCkKICovCiAKKyNlbGlmIENQVShTSDQpCisjZGVmaW5lIERFRklO
RV9TVFVCX0ZVTkNUSU9OKHJ0eXBlLCBvcCkgXAorICAgIGV4dGVybiAiQyIgeyBcCisgICAgICAg
IHJ0eXBlIEpJVFN0dWJUaHVua2VkXyMjb3AoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKTsgXAorICAg
IH07IFwKKyAgICBhc20gdm9sYXRpbGUoIFwKKyAgICAiLmFsaWduIDIiICJcbiIgXAorICAgICIu
Z2xvYmwgIiBTWU1CT0xfU1RSSU5HKGN0aV8jI29wKSAiXG4iIFwKKyAgICBTWU1CT0xfU1RSSU5H
KGN0aV8jI29wKSAiOiIgIlxuIiBcCisgICAgInN0cyBwciwgcjExIiAiXG4iIFwKKyAgICAibW92
LmwgcjExLCBAKDB4MzgsIHIxNSkiICJcbiIgXAorICAgICJtb3YubCAuTDIiU1lNQk9MX1NUUklO
RyhKSVRTdHViVGh1bmtlZF8jI29wKSIscjAiICJcbiIgXAorICAgICJtb3YubCBAKHIwLHIxMiks
cjExIiAiXG4iIFwKKyAgICAianNyIEByMTEiICJcbiIgXAorICAgICJub3AiICJcbiIgXAorICAg
ICJtb3YubCBAKDB4MzgsIHIxNSksIHIxMSAiICJcbiIgXAorICAgICJsZHMgcjExLCBwciAiICJc
biIgXAorICAgICJydHMiICJcbiIgXAorICAgICJub3AiICJcbiIgXAorICAgICIuYWxpZ24gMiIg
IlxuIiBcCisgICAgIi5MMiJTWU1CT0xfU1RSSU5HKEpJVFN0dWJUaHVua2VkXyMjb3ApIjoubG9u
ZyAiIFNZTUJPTF9TVFJJTkcoSklUU3R1YlRodW5rZWRfIyNvcCkiQEdPVCBcbiIgXAorICAgICk7
IFwKKyAgICBydHlwZSBKSVRTdHViVGh1bmtlZF8jI29wKFNUVUJfQVJHU19ERUNMQVJBVElPTikK
ICNlbHNlCiAjZGVmaW5lIERFRklORV9TVFVCX0ZVTkNUSU9OKHJ0eXBlLCBvcCkgcnR5cGUgSklU
X1NUVUIgY3RpXyMjb3AoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKQogI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFN0dWJzLmgKaW5kZXggYWY2ZTEzZi4uNGE5MWQ1OCAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUU3R1YnMuaApAQCAtMjI5LDYgKzIyOSwyNyBAQCBuYW1lc3BhY2UgSlND
IHsKIAogICAgICAgICBSZXR1cm5BZGRyZXNzUHRyKiByZXR1cm5BZGRyZXNzU2xvdCgpIHsgcmV0
dXJuICZ0aHVua1JldHVybkFkZHJlc3M7IH0KICAgICB9OworI2VsaWYgQ1BVKFNINCkKKyAgICBz
dHJ1Y3QgSklUU3RhY2tGcmFtZSB7CisgICAgICAgIEpJVFN0dWJBcmcgcGFkZGluZzsgLy8gVW51
c2VkCisgICAgICAgIEpJVFN0dWJBcmcgYXJnc1s2XTsKKworICAgICAgICBSZXR1cm5BZGRyZXNz
UHRyIHRodW5rUmV0dXJuQWRkcmVzczsKKyAgICAgICAgdm9pZCogc2F2ZWRSMTA7CisgICAgICAg
IHZvaWQqIHNhdmVkUjExOworICAgICAgICB2b2lkKiBzYXZlZFIxMzsKKyAgICAgICAgdm9pZCog
c2F2ZWRSUFI7CisgICAgICAgIHZvaWQqIHNhdmVkUjE0OworICAgICAgICB2b2lkKiBzYXZlZFRp
bWVvdXRSZWc7CisKKyAgICAgICAgUmVnaXN0ZXJGaWxlKiByZWdpc3RlckZpbGU7CisgICAgICAg
IENhbGxGcmFtZSogY2FsbEZyYW1lOworICAgICAgICBKU1ZhbHVlKiBleGNlcHRpb247CisgICAg
ICAgIFByb2ZpbGVyKiogZW5hYmxlZFByb2ZpbGVyUmVmZXJlbmNlOworICAgICAgICBKU0dsb2Jh
bERhdGEqIGdsb2JhbERhdGE7CisKKyAgICAgICAgUmV0dXJuQWRkcmVzc1B0ciogcmV0dXJuQWRk
cmVzc1Nsb3QoKSB7IHJldHVybiAmdGh1bmtSZXR1cm5BZGRyZXNzOyB9CisgICAgfTsKICNlbHNl
CiAjZXJyb3IgIkpJVFN0YWNrRnJhbWUgbm90IGRlZmluZWQgZm9yIHRoaXMgcGxhdGZvcm0uIgog
I2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pTSW50ZXJmYWNl
SklULmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pTSW50ZXJmYWNlSklULmgKaW5kZXgg
NWQzZjIzOS4uOTQwM2I0YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
U0ludGVyZmFjZUpJVC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSlNJbnRlcmZh
Y2VKSVQuaApAQCAtMTU0LDYgKzE1NCwzMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3Rh
dGljIGNvbnN0IEZQUmVnaXN0ZXJJRCBmcFJlZ1QxID0gTUlQU1JlZ2lzdGVyczo6ZjY7CiAgICAg
ICAgIHN0YXRpYyBjb25zdCBGUFJlZ2lzdGVySUQgZnBSZWdUMiA9IE1JUFNSZWdpc3RlcnM6OmY4
OwogICAgICAgICBzdGF0aWMgY29uc3QgRlBSZWdpc3RlcklEIGZwUmVnVDMgPSBNSVBTUmVnaXN0
ZXJzOjpmMTA7CisjZWxpZiBDUFUoU0g0KQorICAgICAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJ
RCB0aW1lb3V0Q2hlY2tSZWdpc3RlciA9IFNINFJlZ2lzdGVyczo6cjg7CisgICAgICAgIHN0YXRp
YyBjb25zdCBSZWdpc3RlcklEIGNhbGxGcmFtZVJlZ2lzdGVyID0gU0g0UmVnaXN0ZXJzOjpmcDsK
KworICAgICAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCByZWdUMCA9IFNINFJlZ2lzdGVyczo6
cjA7CisgICAgICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIHJlZ1QxID0gU0g0UmVnaXN0ZXJz
OjpyMTsKKyAgICAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgcmVnVDIgPSBTSDRSZWdpc3Rl
cnM6OnIyOworICAgICAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCByZWdUMyA9IFNINFJlZ2lz
dGVyczo6cjEwOworICAgICAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCByZWdUNCA9IFNINFJl
Z2lzdGVyczo6cjQ7CisgICAgICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIHJlZ1Q1ID0gU0g0
UmVnaXN0ZXJzOjpyNTsKKyAgICAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgcmVnVDYgPSBT
SDRSZWdpc3RlcnM6OnI2OworICAgICAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCByZWdUNyA9
IFNINFJlZ2lzdGVyczo6cjc7CisgICAgICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIGZpcnN0
QXJndW1lbnRSZWdpc3RlciA9cmVnVDQ7CisKKyAgICAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVy
SUQgcmV0dXJuVmFsdWVSZWdpc3RlciA9IFNINFJlZ2lzdGVyczo6cjA7CisgICAgICAgIHN0YXRp
YyBjb25zdCBSZWdpc3RlcklEIGNhY2hlZFJlc3VsdFJlZ2lzdGVyID0gU0g0UmVnaXN0ZXJzOjpy
MDsKKworICAgICAgICBzdGF0aWMgY29uc3QgRlBSZWdpc3RlcklEIGZwUmVnVDAgID0gU0g0UmVn
aXN0ZXJzOjpmcjA7CisgICAgICAgIHN0YXRpYyBjb25zdCBGUFJlZ2lzdGVySUQgZnBSZWdUMSAg
PSBTSDRSZWdpc3RlcnM6OmZyMjsKKyAgICAgICAgc3RhdGljIGNvbnN0IEZQUmVnaXN0ZXJJRCBm
cFJlZ1QyICA9IFNINFJlZ2lzdGVyczo6ZnI0OworICAgICAgICBzdGF0aWMgY29uc3QgRlBSZWdp
c3RlcklEIGZwUmVnVDMgID0gU0g0UmVnaXN0ZXJzOjpmcjY7CisgICAgICAgIHN0YXRpYyBjb25z
dCBGUFJlZ2lzdGVySUQgZnBSZWdUNCAgPSBTSDRSZWdpc3RlcnM6OmZyODsKKyAgICAgICAgc3Rh
dGljIGNvbnN0IEZQUmVnaXN0ZXJJRCBmcFJlZ1Q1ICA9IFNINFJlZ2lzdGVyczo6ZnIxMDsKKyAg
ICAgICAgc3RhdGljIGNvbnN0IEZQUmVnaXN0ZXJJRCBmcFJlZ1Q2ICA9IFNINFJlZ2lzdGVyczo6
ZnIxMjsKKyAgICAgICAgc3RhdGljIGNvbnN0IEZQUmVnaXN0ZXJJRCBmcFJlZ1Q3ICA9IFNINFJl
Z2lzdGVyczo6ZnIxNDsKICNlbHNlCiAjZXJyb3IgIkpJVCBub3Qgc3VwcG9ydGVkIG9uIHRoaXMg
cGxhdGZvcm0uIgogI2VuZGlmCi0tIAoxLjcuMi4zCgo=
</data>
<flag name="review"
          id="80910"
          type_id="1"
          status="-"
          setter="oliver"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>88819</attachid>
            <date>2011-04-08 07:10:45 -0700</date>
            <delta_ts>2011-04-08 07:38:03 -0700</delta_ts>
            <desc>JIT remaining part for SH4 platforms.</desc>
            <filename>0001-Add-JIT-remaining-part-for-SH4-platforms.patch</filename>
            <type>text/plain</type>
            <size>18985</size>
            <attacher name="thouraya">thouraya.andolsi</attacher>
            
              <data encoding="base64">RnJvbSBlNDVlYWUyZjA4ZTk0ZTkxYWY2YTFhN2M1YzIzZjU5MWEwMjU4OTc0IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBUaG91cmF5YSBBTkRPTFNJIDx0aG91cmF5YS5hbmRvbHNpQHN0
LmNvbT4KRGF0ZTogRnJpLCA4IEFwciAyMDExIDE0OjM0OjQ1ICswMjAwClN1YmplY3Q6IFtQQVRD
SF0gQWRkIEpJVCByZW1haW5pbmcgcGFydCBmb3IgU0g0IHBsYXRmb3Jtcy4KCi0tLQogU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgfCAgIDE4ICsrKysK
IC4uLi9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJTSDQuaCAgIHwgICAg
OCArKwogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaCAgICAgICAgICAgICAgICAgICAg
fCAgIDQ3ICsrKysrKysrKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lTWV0
aG9kcy5oICAgICAgIHwgICAzNiArKysrKysrLQogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGNvZGVzMzJfNjQuY3BwICAgICAgfCAgIDQwICsrKysrKysrCiAuLi4vSmF2YVNjcmlwdENv
cmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwICB8ICAgIDQgKy0KIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwICAgICAgICAgICAgIHwgICA5NSArKysrKysrKysr
KysrKysrKysrKwogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5oICAgICAgICAg
ICAgICAgfCAgIDIxICsrKysrCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pTSW50ZXJmYWNl
SklULmggICAgICAgICB8ICAgMjUgKysrKysKIDkgZmlsZXMgY2hhbmdlZCwgMjg5IGluc2VydGlv
bnMoKyksIDUgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0NoYW5nZUxvZyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKaW5kZXggMGMzNDll
Ny4uYmU4MmU5NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIw
MTEtMDQtMDggIFRob3VyYXlhIEFORE9MU0kgIDx0aG91cmF5YS5hbmRvbHNpQHN0LmNvbT4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTSDQgSklUIFNV
UFBPUlQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00
NDMyOQorCisgICAgICAgIEFkZCBKSVQgcmVtYWluaW5nIHBhcnQgZm9yIFNINCBwbGF0Zm9ybXMu
CisKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJTSDQuaDoKKyAgICAgICAgKiBq
aXQvSklULmg6CisgICAgICAgICogaml0L0pJVElubGluZU1ldGhvZHMuaDoKKyAgICAgICAgKiBq
aXQvSklUT3Bjb2RlczMyXzY0LmNwcDoKKyAgICAgICAgKiBqaXQvSklUUHJvcGVydHlBY2Nlc3Mz
Ml82NC5jcHA6CisgICAgICAgICogaml0L0pJVFN0dWJzLmNwcDoKKyAgICAgICAgKiBqaXQvSklU
U3R1YnMuaDoKKyAgICAgICAgKiBqaXQvSlNJbnRlcmZhY2VKSVQuaDoKKwogMjAxMS0wNC0wNyAg
R2VvZmZyZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IE1hY2llaiBTdGFjaG93aWFrLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9NYWNyb0Fzc2VtYmxlclNINC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9NYWNyb0Fzc2VtYmxlclNINC5oCmluZGV4IDA0YjA2MDIuLjdlMTVlNmMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJTSDQuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyU0g0LmgK
QEAgLTE2NTEsNiArMTY1MSwxNCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBDYWxsKG1fYXNz
ZW1ibGVyLmNhbGwodGFyZ2V0KSwgQ2FsbDo6Tm9uZSk7CiAgICAgfQogCisgICAgdm9pZCBjYWxs
KEFkZHJlc3MgYWRkcmVzcywgUmVnaXN0ZXJJRCB0YXJnZXQpCisgICAgeworICAgICAgICBsb2Fk
MzIoYWRkcmVzcy5iYXNlLCBhZGRyZXNzLm9mZnNldCwgdGFyZ2V0KTsKKyAgICAgICAgbV9hc3Nl
bWJsZXIuZW5zdXJlU3BhY2UobV9hc3NlbWJsZXIubWF4SW5zdHJ1Y3Rpb25TaXplICsgMik7Cisg
ICAgICAgIG1fYXNzZW1ibGVyLmJyYW5jaChKU1JfT1BDT0RFLCB0YXJnZXQpOworICAgICAgICBt
X2Fzc2VtYmxlci5ub3AoKTsKKyAgICB9CisKICAgICB2b2lkIGJyZWFrcG9pbnQoKQogICAgIHsK
ICAgICAgICAgbV9hc3NlbWJsZXIuYmtwdCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKaW5kZXgg
OTljOGNkNC4uYzVhMjE5MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCkBAIC00NzMsNiArNDcz
LDQ4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zm
c2V0TWV0aG9kQ2hlY2tQcm90b1N0cnVjdCA9IDUyOwogICAgICAgICBzdGF0aWMgY29uc3QgaW50
IHBhdGNoT2Zmc2V0TWV0aG9kQ2hlY2tQdXRGdW5jdGlvbiA9IDg0OwogI2VuZGlmCisjZWxpZiBD
UFUoU0g0KQorICAgICAgIC8vIFRoZXNlIGFyY2hpdGVjdHVyZSBzcGVjaWZpYyB2YWx1ZSBhcmUg
dXNlZCB0byBlbmFibGUgcGF0Y2hpbmcgLSBzZWUgY29tbWVudCBvbiBvcF9wdXRfYnlfaWQuCisg
ICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRHZXRCeUlkU3RydWN0dXJlID0gNjsK
KyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldFB1dEJ5SWRQcm9wZXJ0eU1hcE9m
ZnNldCA9IDI0OworICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0UHV0QnlJZFN0
cnVjdHVyZSA9IDY7CisgICAgICAgIC8vIFRoZXNlIGFyY2hpdGVjdHVyZSBzcGVjaWZpYyB2YWx1
ZSBhcmUgdXNlZCB0byBlbmFibGUgcGF0Y2hpbmcgLSBzZWUgY29tbWVudCBvbiBvcF9nZXRfYnlf
aWQuCisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRHZXRCeUlkQnJhbmNoVG9T
bG93Q2FzZSA9IDEwOworICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0R2V0QnlJ
ZFByb3BlcnR5TWFwT2Zmc2V0ID0gMjQ7CisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hP
ZmZzZXRHZXRCeUlkUHV0UmVzdWx0ID0gMzI7CisKKyAgICAgICAgLy8gc2VxdWVuY2VPcENhbGwK
KyAgICAgICAgc3RhdGljIGNvbnN0IGludCBzZXF1ZW5jZU9wQ2FsbEluc3RydWN0aW9uU3BhY2Ug
PSAxMjsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBzZXF1ZW5jZU9wQ2FsbENvbnN0YW50U3Bh
Y2UgPSAyOworICAgICAgICAvLyBzZXF1ZW5jZU1ldGhvZENoZWNrCisgICAgICAgIHN0YXRpYyBj
b25zdCBpbnQgc2VxdWVuY2VNZXRob2RDaGVja0luc3RydWN0aW9uU3BhY2UgPSA0MDsKKyAgICAg
ICAgc3RhdGljIGNvbnN0IGludCBzZXF1ZW5jZU1ldGhvZENoZWNrQ29uc3RhbnRTcGFjZSA9IDY7
CisgICAgICAgIC8vIHNlcXVlbmNlR2V0QnlJZEhvdFBhdGgKKyAgICAgICAgc3RhdGljIGNvbnN0
IGludCBzZXF1ZW5jZUdldEJ5SWRIb3RQYXRoSW5zdHJ1Y3Rpb25TcGFjZSA9IDM2OworICAgICAg
ICBzdGF0aWMgY29uc3QgaW50IHNlcXVlbmNlR2V0QnlJZEhvdFBhdGhDb25zdGFudFNwYWNlID0g
NTsKKyAgICAgICAgLy8gc2VxdWVuY2VHZXRCeUlkU2xvd0Nhc2UKKyAgICAgICAgc3RhdGljIGNv
bnN0IGludCBzZXF1ZW5jZUdldEJ5SWRTbG93Q2FzZUluc3RydWN0aW9uU3BhY2UgPSAyNjsKKyAg
ICAgICAgc3RhdGljIGNvbnN0IGludCBzZXF1ZW5jZUdldEJ5SWRTbG93Q2FzZUNvbnN0YW50U3Bh
Y2UgPSAyOworICAgICAgICAvLyBzZXF1ZW5jZVB1dEJ5SWQKKyAgICAgICAgc3RhdGljIGNvbnN0
IGludCBzZXF1ZW5jZVB1dEJ5SWRJbnN0cnVjdGlvblNwYWNlID0gMzY7CisgICAgICAgIHN0YXRp
YyBjb25zdCBpbnQgc2VxdWVuY2VQdXRCeUlkQ29uc3RhbnRTcGFjZSA9IDU7CisKKyAgICAgICAg
c3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldEdldEJ5SWRQcm9wZXJ0eU1hcE9mZnNldDEgPSAy
MDsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldEdldEJ5SWRQcm9wZXJ0eU1h
cE9mZnNldDIgPSAyNjsKKworICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0UHV0
QnlJZFByb3BlcnR5TWFwT2Zmc2V0MSA9IDIwOworICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBh
dGNoT2Zmc2V0UHV0QnlJZFByb3BlcnR5TWFwT2Zmc2V0MiA9IDI2OworCisjaWYgRU5BQkxFKE9Q
Q09ERV9TQU1QTElORykKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldEdldEJ5
SWRTbG93Q2FzZUNhbGwgPSAwOyAvLyBGSU1YRQorI2Vsc2UKKyAgICAgICAgc3RhdGljIGNvbnN0
IGludCBwYXRjaE9mZnNldEdldEJ5SWRTbG93Q2FzZUNhbGwgPSAyMjsKKyNlbmRpZgorICAgICAg
ICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0T3BDYWxsQ29tcGFyZVRvSnVtcCA9IDQ7CisK
KyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldE1ldGhvZENoZWNrUHJvdG9PYmog
PSAxMjsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldE1ldGhvZENoZWNrUHJv
dG9TdHJ1Y3QgPSAyMDsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldE1ldGhv
ZENoZWNrUHV0RnVuY3Rpb24gPSAzMjsKICNlbHNlCiAjZXJyb3IgIkpTVkFMVUUzMl82NCBub3Qg
c3VwcG9ydGVkIG9uIHRoaXMgcGxhdGZvcm0uIgogI2VuZGlmCkBAIC02NjUsMTAgKzcwNywxMSBA
QCBuYW1lc3BhY2UgSlNDIHsKIAogI2lmIChkZWZpbmVkKEFTU0VNQkxFUl9IQVNfQ09OU1RBTlRf
UE9PTCkgJiYgQVNTRU1CTEVSX0hBU19DT05TVEFOVF9QT09MKQogI2RlZmluZSBCRUdJTl9VTklO
VEVSUlVQVEVEX1NFUVVFTkNFKG5hbWUpIGRvIHsgYmVnaW5VbmludGVycnVwdGVkU2VxdWVuY2Uo
bmFtZSAjIyBJbnN0cnVjdGlvblNwYWNlLCBuYW1lICMjIENvbnN0YW50U3BhY2UpOyB9IHdoaWxl
IChmYWxzZSkKLSNkZWZpbmUgRU5EX1VOSU5URVJSVVBURURfU0VRVUVOQ0UobmFtZSkgZG8geyBl
bmRVbmludGVycnVwdGVkU2VxdWVuY2UobmFtZSAjIyBJbnN0cnVjdGlvblNwYWNlLCBuYW1lICMj
IENvbnN0YW50U3BhY2UpOyB9IHdoaWxlIChmYWxzZSkKKyNkZWZpbmUgRU5EX1VOSU5URVJSVVBU
RURfU0VRVUVOQ0UyKG5hbWUsIGRzdCkgZG8geyBlbmRVbmludGVycnVwdGVkU2VxdWVuY2UobmFt
ZSAjIyBJbnN0cnVjdGlvblNwYWNlLCBuYW1lICMjIENvbnN0YW50U3BhY2UsIGRzdCk7IH0gd2hp
bGUgKGZhbHNlKQorI2RlZmluZSBFTkRfVU5JTlRFUlJVUFRFRF9TRVFVRU5DRShuYW1lKSBFTkRf
VU5JTlRFUlJVUFRFRF9TRVFVRU5DRTIobmFtZSwgMCkKIAogICAgICAgICB2b2lkIGJlZ2luVW5p
bnRlcnJ1cHRlZFNlcXVlbmNlKGludCwgaW50KTsKLSAgICAgICAgdm9pZCBlbmRVbmludGVycnVw
dGVkU2VxdWVuY2UoaW50LCBpbnQpOworICAgICAgICB2b2lkIGVuZFVuaW50ZXJydXB0ZWRTZXF1
ZW5jZShpbnQsIGludCwgaW50KTsKIAogI2Vsc2UKICNkZWZpbmUgQkVHSU5fVU5JTlRFUlJVUFRF
RF9TRVFVRU5DRShuYW1lKSAgZG8geyBiZWdpblVuaW50ZXJydXB0ZWRTZXF1ZW5jZSgpOyB9IHdo
aWxlIChmYWxzZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5s
aW5lTWV0aG9kcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVNZXRob2Rz
LmgKaW5kZXggOWFmYWYxYS4uZDE4ODA5NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRJbmxpbmVNZXRob2RzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRJbmxpbmVNZXRob2RzLmgKQEAgLTEyMyw2ICsxMjMsMTMgQEAgQUxXQVlTX0lOTElORSB2
b2lkIEpJVDo6YmVnaW5VbmludGVycnVwdGVkU2VxdWVuY2UoaW50IGluc25TcGFjZSwgaW50IGNv
bnN0U3BhY2UKIAogICAgIGVuc3VyZVNwYWNlKGluc25TcGFjZSwgY29uc3RTcGFjZSk7CiAKKyNl
bGlmIENQVShTSDQpCisjaWZuZGVmIE5ERUJVRworICAgIGluc25TcGFjZSArPSBzaXplb2YoU0g0
V29yZCk7CisgICAgY29uc3RTcGFjZSArPSBzaXplb2YodWludDY0X3QpOworI2VuZGlmCisKKyAg
ICBtX2Fzc2VtYmxlci5lbnN1cmVTcGFjZShpbnNuU3BhY2UgKyBtX2Fzc2VtYmxlci5tYXhJbnN0
cnVjdGlvblNpemUgKyAyLCBjb25zdFNwYWNlICsgOCk7CiAjZW5kaWYKIAogI2lmIGRlZmluZWQo
QVNTRU1CTEVSX0hBU19DT05TVEFOVF9QT09MKSAmJiBBU1NFTUJMRVJfSEFTX0NPTlNUQU5UX1BP
T0wKQEAgLTEzMyw3ICsxNDAsNyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpiZWdpblVuaW50
ZXJydXB0ZWRTZXF1ZW5jZShpbnQgaW5zblNwYWNlLCBpbnQgY29uc3RTcGFjZQogI2VuZGlmCiB9
CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVuZFVuaW50ZXJydXB0ZWRTZXF1ZW5jZShpbnQg
aW5zblNwYWNlLCBpbnQgY29uc3RTcGFjZSkKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVuZFVu
aW50ZXJydXB0ZWRTZXF1ZW5jZShpbnQgaW5zblNwYWNlLCBpbnQgY29uc3RTcGFjZSwgaW50IGRz
dCkKIHsKICNpZiBkZWZpbmVkKEFTU0VNQkxFUl9IQVNfQ09OU1RBTlRfUE9PTCkgJiYgQVNTRU1C
TEVSX0hBU19DT05TVEFOVF9QT09MCiAgICAgLyogVGhlcmUgYXJlIHNldmVyYWwgY2FzZXMgd2hl
biB0aGUgdW5pbnRlcnJ1cHRlZCBzZXF1ZW5jZSBpcyBsYXJnZXIgdGhhbgpAQCAtMTQzLDYgKzE1
MCwxNSBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbmRVbmludGVycnVwdGVkU2VxdWVuY2Uo
aW50IGluc25TcGFjZSwgaW50IGNvbnN0U3BhY2UpCiAgICAgICogY2FsY3VsYXRpb24gb2YgbGVu
Z3RoIG9mIHVuaW50ZXJydXB0ZWQgc2VxdWVuY2UuIFNvLCB0aGUgaW5zblNwYWNlIGFuZAogICAg
ICAqIGNvbnN0U3BhY2Ugc2hvdWxkIGJlIHVwcGVyIGxpbWl0IGluc3RlYWQgb2YgaGFyZCBsaW1p
dC4KICAgICAgKi8KKyNpZiBDUFUoU0g0KQorICAgIGlmICgoZHN0ID4gMTUpIHx8IChkc3QgPCAt
MTYpKSB7CisgICAgICAgIGluc25TcGFjZSArPSA4OworICAgICAgICBjb25zdFNwYWNlICs9IDI7
CisgICAgfQorCisgICAgaWYgKCgoZHN0ID49IC0xNikgJiYgKGRzdCA8IDApKSB8fCAoKGRzdCA+
IDcpICYmIChkc3QgPD0gMTUpKSkKKyAgICAgICAgaW5zblNwYWNlICs9IDg7CisjZW5kaWYKICAg
ICBBU1NFUlQoZGlmZmVyZW5jZUJldHdlZW4obV91bmludGVycnVwdGVkSW5zdHJ1Y3Rpb25TZXF1
ZW5jZUJlZ2luLCBsYWJlbCgpKSA8PSBpbnNuU3BhY2UpOwogICAgIEFTU0VSVChzaXplT2ZDb25z
dGFudFBvb2woKSAtIG1fdW5pbnRlcnJ1cHRlZENvbnN0YW50U2VxdWVuY2VCZWdpbiA8PSBjb25z
dFNwYWNlKTsKICNlbmRpZgpAQCAtMTY3LDYgKzE4MywyMiBAQCBBTFdBWVNfSU5MSU5FIHZvaWQg
SklUOjpyZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihBZGRyZXNzIGFkZHJlc3MpCiB7
CiAgICAgbG9hZFB0cihhZGRyZXNzLCBsaW5rUmVnaXN0ZXIpOwogfQorI2VsaWYgQ1BVKFNINCkK
KworQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6cHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxs
KFJlZ2lzdGVySUQgcmVnKQoreworICAgIG1fYXNzZW1ibGVyLnN0c3ByKHJlZyk7Cit9CisKK0FM
V0FZU19JTkxJTkUgdm9pZCBKSVQ6OnJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKFJl
Z2lzdGVySUQgcmVnKQoreworICAgIG1fYXNzZW1ibGVyLmxkc3ByKHJlZyk7Cit9CisKK0FMV0FZ
U19JTkxJTkUgdm9pZCBKSVQ6OnJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKEFkZHJl
c3MgYWRkcmVzcykKK3sKKyAgICBsb2FkUHRyTGlua1JlZyhhZGRyZXNzKTsKK30KIAogI2VsaWYg
Q1BVKE1JUFMpCiAKQEAgLTIxNyw2ICsyNDksOCBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpy
ZXN0b3JlQXJndW1lbnRSZWZlcmVuY2VGb3JUcmFtcG9saW5lKCkKICAgICBhZGRQdHIoVHJ1c3Rl
ZEltbTMyKHNpemVvZih2b2lkKikpLCBzdGFja1BvaW50ZXJSZWdpc3RlciwgZmlyc3RBcmd1bWVu
dFJlZ2lzdGVyKTsKICNlbGlmIENQVShBUk0pCiAgICAgbW92ZShzdGFja1BvaW50ZXJSZWdpc3Rl
ciwgZmlyc3RBcmd1bWVudFJlZ2lzdGVyKTsKKyNlbGlmIENQVShTSDQpCisgICAgbW92ZShzdGFj
a1BvaW50ZXJSZWdpc3RlciwgZmlyc3RBcmd1bWVudFJlZ2lzdGVyKTsKICNlbmRpZgogICAgIC8v
IEluIHRoZSB0cmFtcG9saW5lIG9uIHg4Ni02NCwgdGhlIGZpcnN0IGFyZ3VtZW50IHJlZ2lzdGVy
IGlzIG5vdCBvdmVyd3JpdHRlbi4KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
T3Bjb2RlczMyXzY0LmNwcAppbmRleCBlMmQ4NTQ4Li5lZGNlMjFjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCkBAIC0yNDUsNyArMjQ1LDI2IEBA
IEpJVDo6TGFiZWwgSklUOjpwcml2YXRlQ29tcGlsZUNUSU5hdGl2ZUNhbGwoSlNHbG9iYWxEYXRh
KiBnbG9iYWxEYXRhLCBib29sIGlzQ29uCiAgICAgY2FsbChBZGRyZXNzKHJlZ1QyLCBleGVjdXRh
YmxlT2Zmc2V0VG9GdW5jdGlvbikpOwogCiAgICAgcmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVS
ZXR1cm4ocmVnVDMpOworI2VsaWYgQ1BVKFNINCkKKyAgICAvLyBMb2FkIGNhbGxlciBmcmFtZSdz
IHNjb3BlIGNoYWluIGludG8gdGhpcyBjYWxsZnJhbWUgc28gdGhhdCB3aGF0ZXZlciB3ZSBjYWxs
IGNhbgorICAgIC8vIGdldCB0byBpdHMgZ2xvYmFsIGRhdGEuCisgICAgZW1pdEdldEZyb21DYWxs
RnJhbWVIZWFkZXJQdHIoUmVnaXN0ZXJGaWxlOjpDYWxsZXJGcmFtZSwgcmVnVDIpOworICAgIGVt
aXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKFJlZ2lzdGVyRmlsZTo6U2NvcGVDaGFpbiwgcmVn
VDEsIHJlZ1QyKTsKKyAgICBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIocmVnVDEsIFJlZ2lzdGVy
RmlsZTo6U2NvcGVDaGFpbik7CisKKyAgICBwcmVzZXJ2ZVJldHVybkFkZHJlc3NBZnRlckNhbGwo
cmVnVDMpOyAvLyBDYWxsZWUgcHJlc2VydmVkCisgICAgZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVy
KHJlZ1QzLCBSZWdpc3RlckZpbGU6OlJldHVyblBDKTsKIAorICAgIC8vIENhbGxpbmcgY29udmVu
dGlvbjogZihyMCA9PSByZWdUNCwgcjEgPT0gcmVnVDUsIC4uLik7CisgICAgLy8gSG9zdCBmdW5j
dGlvbiBzaWduYXR1cmU6IGYoRXhlY1N0YXRlKik7CisgICAgbW92ZShjYWxsRnJhbWVSZWdpc3Rl
ciwgcmVnVDQpOworCisgICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoUmVnaXN0ZXJG
aWxlOjpDYWxsZWUsIHJlZ1Q1KTsKKyAgICBtb3ZlKHJlZ1QyLCBjYWxsRnJhbWVSZWdpc3Rlcik7
IC8vIEVhZ2VybHkgcmVzdG9yZSBjYWxsZXIgZnJhbWUgcmVnaXN0ZXIgdG8gYXZvaWQgbG9hZGlu
ZyBmcm9tIHN0YWNrLgorICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUNSwgT0JKRUNUX09GRlNFVE9G
KEpTRnVuY3Rpb24sIG1fZXhlY3V0YWJsZSkpLCByZWdUMik7CisKKyAgICBjYWxsKEFkZHJlc3Mo
cmVnVDIsIGV4ZWN1dGFibGVPZmZzZXRUb0Z1bmN0aW9uKSwgcmVnVDApOworICAgIHJlc3RvcmVS
ZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKHJlZ1QzKTsKICNlbGlmIENQVShNSVBTKQogICAgIC8v
IExvYWQgY2FsbGVyIGZyYW1lJ3Mgc2NvcGUgY2hhaW4gaW50byB0aGlzIGNhbGxmcmFtZSBzbyB0
aGF0IHdoYXRldmVyIHdlIGNhbGwgY2FuCiAgICAgLy8gZ2V0IHRvIGl0cyBnbG9iYWwgZGF0YS4K
QEAgLTM5NCw3ICs0MTMsMjggQEAgSklUOjpDb2RlUHRyIEpJVDo6cHJpdmF0ZUNvbXBpbGVDVElO
YXRpdmVDYWxsKFBhc3NSZWZQdHI8RXhlY3V0YWJsZVBvb2w+IGV4ZWN1dGEKICAgICBhZGRQdHIo
VHJ1c3RlZEltbTMyKDE2KSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogCiAgICAgcmVzdG9yZVJl
dHVybkFkZHJlc3NCZWZvcmVSZXR1cm4ocmVnVDMpOworI2VsaWYgQ1BVKFNINCkKKyAgICAvLyBM
b2FkIGNhbGxlciBmcmFtZSdzIHNjb3BlIGNoYWluIGludG8gdGhpcyBjYWxsZnJhbWUgc28gdGhh
dCB3aGF0ZXZlciB3ZSBjYWxsIGNhbgorICAgIC8vIGdldCB0byBpdHMgZ2xvYmFsIGRhdGEuCisg
ICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoUmVnaXN0ZXJGaWxlOjpDYWxsZXJGcmFt
ZSwgcmVnVDIpOworICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKFJlZ2lzdGVyRmls
ZTo6U2NvcGVDaGFpbiwgcmVnVDEsIHJlZ1QyKTsKKyAgICBlbWl0UHV0VG9DYWxsRnJhbWVIZWFk
ZXIocmVnVDEsIFJlZ2lzdGVyRmlsZTo6U2NvcGVDaGFpbik7CisKKyAgICBwcmVzZXJ2ZVJldHVy
bkFkZHJlc3NBZnRlckNhbGwocmVnVDMpOyAvLyBDYWxsZWUgcHJlc2VydmVkCisgICAgZW1pdFB1
dFRvQ2FsbEZyYW1lSGVhZGVyKHJlZ1QzLCBSZWdpc3RlckZpbGU6OlJldHVyblBDKTsKKworICAg
IC8vIENhbGxpbmcgY29udmVudGlvbjogZihyMCA9PSByZWdUNCwgcjEgPT0gcmVnVDUsIC4uLik7
CisgICAgLy8gSG9zdCBmdW5jdGlvbiBzaWduYXR1cmU6IGYoRXhlY1N0YXRlKik7CisgICAgbW92
ZShjYWxsRnJhbWVSZWdpc3RlciwgcmVnVDQpOwogCisgICAgZW1pdEdldEZyb21DYWxsRnJhbWVI
ZWFkZXJQdHIoUmVnaXN0ZXJGaWxlOjpDYWxsZWUsIHJlZ1Q1KTsKKyAgICBtb3ZlKHJlZ1QyLCBj
YWxsRnJhbWVSZWdpc3Rlcik7IC8vIEVhZ2VybHkgcmVzdG9yZSBjYWxsZXIgZnJhbWUgcmVnaXN0
ZXIgdG8gYXZvaWQgbG9hZGluZyBmcm9tIHN0YWNrLgorICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdU
NSwgT0JKRUNUX09GRlNFVE9GKEpTRnVuY3Rpb24sIG1fZXhlY3V0YWJsZSkpLCByZWdUMik7CisK
KyAgICAvLyBjYWxsIHRoZSBmdW5jdGlvbgorICAgIG5hdGl2ZUNhbGwgPSBjYWxsKCk7CisKKyAg
ICByZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihyZWdUMyk7CiAjZWxpZiBFTkFCTEUo
SklUX09QVElNSVpFX05BVElWRV9DQUxMKQogI2Vycm9yICJKSVRfT1BUSU1JWkVfTkFUSVZFX0NB
TEwgbm90IHlldCBzdXBwb3J0ZWQgb24gdGhpcyBwbGF0Zm9ybS4iCiAjZWxzZQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAKaW5k
ZXggMmE0N2U1Yy4uYzM5YmM1MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCkBAIC00NzUsNyArNDc1LDcgQEAgdm9pZCBK
SVQ6OmNvbXBpbGVHZXRCeUlkU2xvd0Nhc2UoaW50IGRzdCwgaW50IGJhc2UsIElkZW50aWZpZXIq
IGlkZW50LCBWZWN0b3I8U2wKICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChUcnVzdGVkSW1tUHRy
KGlkZW50KSk7CiAgICAgQ2FsbCBjYWxsID0gc3R1YkNhbGwuY2FsbChkc3QpOwogICAgIAotICAg
IEVORF9VTklOVEVSUlVQVEVEX1NFUVVFTkNFKHNlcXVlbmNlR2V0QnlJZFNsb3dDYXNlKTsKKyAg
ICBFTkRfVU5JTlRFUlJVUFRFRF9TRVFVRU5DRTIoc2VxdWVuY2VHZXRCeUlkU2xvd0Nhc2UsIGRz
dCk7CiAgICAgCiAgICAgQVNTRVJUX0pJVF9PRkZTRVQoZGlmZmVyZW5jZUJldHdlZW4oY29sZFBh
dGhCZWdpbiwgY2FsbCksIHBhdGNoT2Zmc2V0R2V0QnlJZFNsb3dDYXNlQ2FsbCk7CiAgICAgCkBA
IC02MjQsNyArNjI0LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlJZFRyYW5zaXRp
b24oU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBTdHJ1Y3R1cmUKICAgICBhZGQzMihUcnVz
dGVkSW1tMzIoMSksIEFic29sdXRlQWRkcmVzcyhuZXdTdHJ1Y3R1cmUtPmFkZHJlc3NPZkNvdW50
KCkpKTsKICAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKG5ld1N0cnVjdHVyZSksIEFkZHJlc3Mo
cmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpKTsKICAgICAKLSNpZiBDUFUoTUlQUykK
KyNpZiBDUFUoTUlQUykgfHwgQ1BVKFNINCkKICAgICAvLyBGb3IgTUlQUywgd2UgZG9uJ3QgYWRk
IHNpemVvZih2b2lkKikgdG8gdGhlIHN0YWNrIG9mZnNldC4KICAgICBsb2FkMzIoQWRkcmVzcyhz
dGFja1BvaW50ZXJSZWdpc3RlciwgT0JKRUNUX09GRlNFVE9GKEpJVFN0YWNrRnJhbWUsIGFyZ3Nb
Ml0pICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwgcmVnVDMp
OwogICAgIGxvYWQzMihBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBPQkpFQ1RfT0ZGU0VU
T0YoSklUU3RhY2tGcmFtZSwgYXJnc1syXSkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5h
c0JpdHMudGFnKSksIHJlZ1QyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUU3R1YnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAK
aW5kZXggZGI0MTVjNS4uMzBjZTk3NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRTdHVicy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVi
cy5jcHAKQEAgLTMxNCw3ICszMTQsNzkgQEAgZXh0ZXJuICJDIiB7CiAjZGVmaW5lIEVOQUJMRV9Q
Uk9GSUxFUl9SRUZFUkVOQ0VfT0ZGU0VUIDk2CiAjZGVmaW5lIEdMT0JBTF9EQVRBX09GRlNFVCAg
ICAgICAgIDEwMAogI2RlZmluZSBTVEFDS19MRU5HVEggICAgICAgICAgICAgICAxMDQKKyNlbGlm
IENQVShTSDQpCisjZGVmaW5lIFNZTUJPTF9TVFJJTkcobmFtZSkgI25hbWUKKy8qIGNvZGUgKHI0
KSwgUmVnaXN0ZXJGaWxlKiAocjUpLCBDYWxsRnJhbWUqIChyNiksIEpTVmFsdWUqIGV4Y2VwdGlv
biAocjcpLCBQcm9maWxlcioqKHNwKSwgSlNHbG9iYWxEYXRhIChzcCkqLwogCithc20gdm9sYXRp
bGUgKAorIi50ZXh0XG4iCisiLmdsb2JsICIgU1lNQk9MX1NUUklORyhjdGlUcmFtcG9saW5lKSAi
XG4iCitISURFX1NZTUJPTChjdGlUcmFtcG9saW5lKSAiXG4iCitTWU1CT0xfU1RSSU5HKGN0aVRy
YW1wb2xpbmUpICI6IiAiXG4iCisgICAgIm1vdi5sIHI3LCBALXIxNSIgIlxuIgorICAgICJtb3Yu
bCByNiwgQC1yMTUiICJcbiIKKyAgICAibW92LmwgcjUsIEAtcjE1IiAiXG4iCisgICAgIm1vdi5s
IHI4LCBALXIxNSIgIlxuIgorICAgICJtb3YgIzEyNywgcjgiICJcbiIKKyAgICAibW92LmwgcjE0
LCBALXIxNSIgIlxuIgorICAgICJzdHMubCBwciwgQC1yMTUiICJcbiIKKyAgICAibW92LmwgcjEz
LCBALXIxNSIgIlxuIgorICAgICJtb3YubCByMTEsIEAtcjE1IiAiXG4iCisgICAgIm1vdi5sIHIx
MCwgQC1yMTUiICJcbiIKKyAgICAiYWRkICMtNjAsIHIxNSIgIlxuIgorICAgICJtb3YgcjYsIHIx
NCIgIlxuIgorICAgICJqc3IgQHI0IiAiXG4iCisgICAgIm5vcCIgIlxuIgorICAgICJhZGQgIzYw
LCByMTUiICJcbiIKKyAgICAibW92LmwgQHIxNSsscjEwIiAiXG4iCisgICAgIm1vdi5sIEByMTUr
LHIxMSIgIlxuIgorICAgICJtb3YubCBAcjE1KyxyMTMiICJcbiIKKyAgICAibGRzLmwgQHIxNSss
cHIiICJcbiIKKyAgICAibW92LmwgQHIxNSsscjE0IiAiXG4iCisgICAgIm1vdi5sIEByMTUrLHI4
IiAiXG4iCisgICAgImFkZCAjMTIsIHIxNSIgIlxuIgorICAgICJydHMiICJcbiIKKyAgICAibm9w
IiAiXG4iCispOworCithc20gdm9sYXRpbGUgKAorIi5nbG9ibCAiIFNZTUJPTF9TVFJJTkcoY3Rp
Vk1UaHJvd1RyYW1wb2xpbmUpICJcbiIKK0hJREVfU1lNQk9MKGN0aVZNVGhyb3dUcmFtcG9saW5l
KSAiXG4iCitTWU1CT0xfU1RSSU5HKGN0aVZNVGhyb3dUcmFtcG9saW5lKSAiOiIgIlxuIgorICAg
ICJtb3YubCAuTDIiU1lNQk9MX1NUUklORyhjdGlfdm1fdGhyb3cpIixyMCIgIlxuIgorICAgICJt
b3YgcjE1LCByNCIgIlxuIgorICAgICJtb3YubCBAKHIwLHIxMikscjExIiAiXG4iCisgICAgImpz
ciBAcjExIiAiXG4iCisgICAgIm5vcCIgIlxuIgorICAgICJhZGQgIzYwLCByMTUiICJcbiIKKyAg
ICAibW92LmwgQHIxNSsscjEwIiAiXG4iCisgICAgIm1vdi5sIEByMTUrLHIxMSIgIlxuIgorICAg
ICJtb3YubCBAcjE1KyxyMTMiICJcbiIKKyAgICAibGRzLmwgQHIxNSsscHIiICJcbiIKKyAgICAi
bW92LmwgQHIxNSsscjE0IiAiXG4iCisgICAgIm1vdi5sIEByMTUrLHI4IiAiXG4iCisgICAgImFk
ZCAjMTIsIHIxNSIgIlxuIgorICAgICJydHMiICJcbiIKKyAgICAibm9wIiAiXG4iCisgICAgIi5h
bGlnbiAyIiAiXG4iCisgICAgIi5MMiJTWU1CT0xfU1RSSU5HKGN0aV92bV90aHJvdykiOi5sb25n
ICIgU1lNQk9MX1NUUklORyhjdGlfdm1fdGhyb3cpIkBHT1QgXG4iCispOworCithc20gdm9sYXRp
bGUgKAorIi5nbG9ibCAiIFNZTUJPTF9TVFJJTkcoY3RpT3BUaHJvd05vdENhdWdodCkgIlxuIgor
SElERV9TWU1CT0woY3RpT3BUaHJvd05vdENhdWdodCkgIlxuIgorU1lNQk9MX1NUUklORyhjdGlP
cFRocm93Tm90Q2F1Z2h0KSAiOiIgIlxuIgorICAgICJhZGQgIzYwLCByMTUiICJcbiIKKyAgICAi
bW92LmwgQHIxNSsscjEwIiAiXG4iCisgICAgIm1vdi5sIEByMTUrLHIxMSIgIlxuIgorICAgICJt
b3YubCBAcjE1KyxyMTMiICJcbiIKKyAgICAibGRzLmwgQHIxNSsscHIiICJcbiIKKyAgICAibW92
LmwgQHIxNSsscjE0IiAiXG4iCisgICAgIm1vdi5sIEByMTUrLHI4IiAiXG4iCisgICAgImFkZCAj
MTIsIHIxNSIgIlxuIgorICAgICJydHMiICJcbiIKKyAgICAibm9wIiAiXG4iCispOwogI2Vsc2UK
ICAgICAjZXJyb3IgIkpJVCBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgcGxhdGZvcm0uIgogI2VuZGlm
CkBAIC0xMTU2LDYgKzEyMjgsMjkgQEAgTVNWQygpCiBNU1ZDX0VORCggICAgRU5EKQogKi8KIAor
I2VsaWYgQ1BVKFNINCkKKyNkZWZpbmUgREVGSU5FX1NUVUJfRlVOQ1RJT04ocnR5cGUsIG9wKSBc
CisgICAgZXh0ZXJuICJDIiB7IFwKKyAgICAgICAgcnR5cGUgSklUU3R1YlRodW5rZWRfIyNvcChT
VFVCX0FSR1NfREVDTEFSQVRJT04pOyBcCisgICAgfTsgXAorICAgIGFzbSB2b2xhdGlsZSggXAor
ICAgICIuYWxpZ24gMiIgIlxuIiBcCisgICAgIi5nbG9ibCAiIFNZTUJPTF9TVFJJTkcoY3RpXyMj
b3ApICJcbiIgXAorICAgIFNZTUJPTF9TVFJJTkcoY3RpXyMjb3ApICI6IiAiXG4iIFwKKyAgICAi
c3RzIHByLCByMTEiICJcbiIgXAorICAgICJtb3YubCByMTEsIEAoMHgzOCwgcjE1KSIgIlxuIiBc
CisgICAgIm1vdi5sIC5MMiJTWU1CT0xfU1RSSU5HKEpJVFN0dWJUaHVua2VkXyMjb3ApIixyMCIg
IlxuIiBcCisgICAgIm1vdi5sIEAocjAscjEyKSxyMTEiICJcbiIgXAorICAgICJqc3IgQHIxMSIg
IlxuIiBcCisgICAgIm5vcCIgIlxuIiBcCisgICAgIm1vdi5sIEAoMHgzOCwgcjE1KSwgcjExICIg
IlxuIiBcCisgICAgImxkcyByMTEsIHByICIgIlxuIiBcCisgICAgInJ0cyIgIlxuIiBcCisgICAg
Im5vcCIgIlxuIiBcCisgICAgIi5hbGlnbiAyIiAiXG4iIFwKKyAgICAiLkwyIlNZTUJPTF9TVFJJ
TkcoSklUU3R1YlRodW5rZWRfIyNvcCkiOi5sb25nICIgU1lNQk9MX1NUUklORyhKSVRTdHViVGh1
bmtlZF8jI29wKSJAR09UIFxuIiBcCisgICAgKTsgXAorICAgIHJ0eXBlIEpJVFN0dWJUaHVua2Vk
XyMjb3AoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKQogI2Vsc2UKICNkZWZpbmUgREVGSU5FX1NUVUJf
RlVOQ1RJT04ocnR5cGUsIG9wKSBydHlwZSBKSVRfU1RVQiBjdGlfIyNvcChTVFVCX0FSR1NfREVD
TEFSQVRJT04pCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUU3R1YnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuaAppbmRleCBh
ZjZlMTNmLi40YTkxZDU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFN0dWJzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5oCkBAIC0y
MjksNiArMjI5LDI3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIFJldHVybkFkZHJlc3NQ
dHIqIHJldHVybkFkZHJlc3NTbG90KCkgeyByZXR1cm4gJnRodW5rUmV0dXJuQWRkcmVzczsgfQog
ICAgIH07CisjZWxpZiBDUFUoU0g0KQorICAgIHN0cnVjdCBKSVRTdGFja0ZyYW1lIHsKKyAgICAg
ICAgSklUU3R1YkFyZyBwYWRkaW5nOyAvLyBVbnVzZWQKKyAgICAgICAgSklUU3R1YkFyZyBhcmdz
WzZdOworCisgICAgICAgIFJldHVybkFkZHJlc3NQdHIgdGh1bmtSZXR1cm5BZGRyZXNzOworICAg
ICAgICB2b2lkKiBzYXZlZFIxMDsKKyAgICAgICAgdm9pZCogc2F2ZWRSMTE7CisgICAgICAgIHZv
aWQqIHNhdmVkUjEzOworICAgICAgICB2b2lkKiBzYXZlZFJQUjsKKyAgICAgICAgdm9pZCogc2F2
ZWRSMTQ7CisgICAgICAgIHZvaWQqIHNhdmVkVGltZW91dFJlZzsKKworICAgICAgICBSZWdpc3Rl
ckZpbGUqIHJlZ2lzdGVyRmlsZTsKKyAgICAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWU7CisgICAg
ICAgIEpTVmFsdWUqIGV4Y2VwdGlvbjsKKyAgICAgICAgUHJvZmlsZXIqKiBlbmFibGVkUHJvZmls
ZXJSZWZlcmVuY2U7CisgICAgICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YTsKKworICAgICAg
ICBSZXR1cm5BZGRyZXNzUHRyKiByZXR1cm5BZGRyZXNzU2xvdCgpIHsgcmV0dXJuICZ0aHVua1Jl
dHVybkFkZHJlc3M7IH0KKyAgICB9OwogI2Vsc2UKICNlcnJvciAiSklUU3RhY2tGcmFtZSBub3Qg
ZGVmaW5lZCBmb3IgdGhpcyBwbGF0Zm9ybS4iCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSlNJbnRlcmZhY2VKSVQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSlNJbnRlcmZhY2VKSVQuaAppbmRleCA4NTJlMDFhLi4wNzIxOGMxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pTSW50ZXJmYWNlSklULmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KU0ludGVyZmFjZUpJVC5oCkBAIC0xNTQsNiArMTU0LDMxIEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdGF0aWMgY29uc3QgRlBSZWdpc3RlcklEIGZwUmVn
VDEgPSBNSVBTUmVnaXN0ZXJzOjpmNjsKICAgICAgICAgc3RhdGljIGNvbnN0IEZQUmVnaXN0ZXJJ
RCBmcFJlZ1QyID0gTUlQU1JlZ2lzdGVyczo6Zjg7CiAgICAgICAgIHN0YXRpYyBjb25zdCBGUFJl
Z2lzdGVySUQgZnBSZWdUMyA9IE1JUFNSZWdpc3RlcnM6OmYxMDsKKyNlbGlmIENQVShTSDQpCisg
ICAgICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIHRpbWVvdXRDaGVja1JlZ2lzdGVyID0gU0g0
UmVnaXN0ZXJzOjpyODsKKyAgICAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgY2FsbEZyYW1l
UmVnaXN0ZXIgPSBTSDRSZWdpc3RlcnM6OmZwOworCisgICAgICAgIHN0YXRpYyBjb25zdCBSZWdp
c3RlcklEIHJlZ1QwID0gU0g0UmVnaXN0ZXJzOjpyMDsKKyAgICAgICAgc3RhdGljIGNvbnN0IFJl
Z2lzdGVySUQgcmVnVDEgPSBTSDRSZWdpc3RlcnM6OnIxOworICAgICAgICBzdGF0aWMgY29uc3Qg
UmVnaXN0ZXJJRCByZWdUMiA9IFNINFJlZ2lzdGVyczo6cjI7CisgICAgICAgIHN0YXRpYyBjb25z
dCBSZWdpc3RlcklEIHJlZ1QzID0gU0g0UmVnaXN0ZXJzOjpyMTA7CisgICAgICAgIHN0YXRpYyBj
b25zdCBSZWdpc3RlcklEIHJlZ1Q0ID0gU0g0UmVnaXN0ZXJzOjpyNDsKKyAgICAgICAgc3RhdGlj
IGNvbnN0IFJlZ2lzdGVySUQgcmVnVDUgPSBTSDRSZWdpc3RlcnM6OnI1OworICAgICAgICBzdGF0
aWMgY29uc3QgUmVnaXN0ZXJJRCByZWdUNiA9IFNINFJlZ2lzdGVyczo6cjY7CisgICAgICAgIHN0
YXRpYyBjb25zdCBSZWdpc3RlcklEIHJlZ1Q3ID0gU0g0UmVnaXN0ZXJzOjpyNzsKKyAgICAgICAg
c3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgZmlyc3RBcmd1bWVudFJlZ2lzdGVyID1yZWdUNDsKKwor
ICAgICAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCByZXR1cm5WYWx1ZVJlZ2lzdGVyID0gU0g0
UmVnaXN0ZXJzOjpyMDsKKyAgICAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgY2FjaGVkUmVz
dWx0UmVnaXN0ZXIgPSBTSDRSZWdpc3RlcnM6OnIwOworCisgICAgICAgIHN0YXRpYyBjb25zdCBG
UFJlZ2lzdGVySUQgZnBSZWdUMCAgPSBTSDRSZWdpc3RlcnM6OmZyMDsKKyAgICAgICAgc3RhdGlj
IGNvbnN0IEZQUmVnaXN0ZXJJRCBmcFJlZ1QxICA9IFNINFJlZ2lzdGVyczo6ZnIyOworICAgICAg
ICBzdGF0aWMgY29uc3QgRlBSZWdpc3RlcklEIGZwUmVnVDIgID0gU0g0UmVnaXN0ZXJzOjpmcjQ7
CisgICAgICAgIHN0YXRpYyBjb25zdCBGUFJlZ2lzdGVySUQgZnBSZWdUMyAgPSBTSDRSZWdpc3Rl
cnM6OmZyNjsKKyAgICAgICAgc3RhdGljIGNvbnN0IEZQUmVnaXN0ZXJJRCBmcFJlZ1Q0ICA9IFNI
NFJlZ2lzdGVyczo6ZnI4OworICAgICAgICBzdGF0aWMgY29uc3QgRlBSZWdpc3RlcklEIGZwUmVn
VDUgID0gU0g0UmVnaXN0ZXJzOjpmcjEwOworICAgICAgICBzdGF0aWMgY29uc3QgRlBSZWdpc3Rl
cklEIGZwUmVnVDYgID0gU0g0UmVnaXN0ZXJzOjpmcjEyOworICAgICAgICBzdGF0aWMgY29uc3Qg
RlBSZWdpc3RlcklEIGZwUmVnVDcgID0gU0g0UmVnaXN0ZXJzOjpmcjE0OwogI2Vsc2UKICNlcnJv
ciAiSklUIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBwbGF0Zm9ybS4iCiAjZW5kaWYKLS0gCjEuNy4y
LjMKCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>88821</attachid>
            <date>2011-04-08 07:38:03 -0700</date>
            <delta_ts>2011-04-08 10:30:27 -0700</delta_ts>
            <desc>JIT remaining part for SH4 platforms.</desc>
            <filename>0001-Add-JIT-remaining-part-for-SH4-platforms.patch</filename>
            <type>text/plain</type>
            <size>19225</size>
            <attacher name="thouraya">thouraya.andolsi</attacher>
            
              <data encoding="base64">RnJvbSBlNWU4ZDRjYmFjNmViNjkwNjcwMDBhMzE2NjNkOWMwNTYyMjIyNGE1IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBUaG91cmF5YSBBTkRPTFNJIDx0aG91cmF5YS5hbmRvbHNpQHN0
LmNvbT4KRGF0ZTogRnJpLCA4IEFwciAyMDExIDE1OjQzOjI3ICswMjAwClN1YmplY3Q6IFtQQVRD
SF0gQWRkIEpJVCByZW1haW5pbmcgcGFydCBmb3IgU0g0IHBsYXRmb3JtcwoKLS0tCiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICB8ICAgMTggKysrKwog
Li4uL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclNINC5oICAgfCAgICA4
ICsrCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oICAgICAgICAgICAgICAgICAgICB8
ICAgNDggKysrKysrKysrKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lTWV0
aG9kcy5oICAgICAgIHwgICAzNiArKysrKysrLQogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGNvZGVzMzJfNjQuY3BwICAgICAgfCAgIDQwICsrKysrKysrCiAuLi4vSmF2YVNjcmlwdENv
cmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwICB8ICAgIDQgKy0KIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwICAgICAgICAgICAgIHwgICA5NSArKysrKysrKysr
KysrKysrKysrKwogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5oICAgICAgICAg
ICAgICAgfCAgIDIxICsrKysrCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pTSW50ZXJmYWNl
SklULmggICAgICAgICB8ICAgMjUgKysrKysKIDkgZmlsZXMgY2hhbmdlZCwgMjkwIGluc2VydGlv
bnMoKyksIDUgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0NoYW5nZUxvZyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKaW5kZXggMGMzNDll
Ny4uYmU4MmU5NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIw
MTEtMDQtMDggIFRob3VyYXlhIEFORE9MU0kgIDx0aG91cmF5YS5hbmRvbHNpQHN0LmNvbT4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTSDQgSklUIFNV
UFBPUlQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00
NDMyOQorCisgICAgICAgIEFkZCBKSVQgcmVtYWluaW5nIHBhcnQgZm9yIFNINCBwbGF0Zm9ybXMu
CisKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJTSDQuaDoKKyAgICAgICAgKiBq
aXQvSklULmg6CisgICAgICAgICogaml0L0pJVElubGluZU1ldGhvZHMuaDoKKyAgICAgICAgKiBq
aXQvSklUT3Bjb2RlczMyXzY0LmNwcDoKKyAgICAgICAgKiBqaXQvSklUUHJvcGVydHlBY2Nlc3Mz
Ml82NC5jcHA6CisgICAgICAgICogaml0L0pJVFN0dWJzLmNwcDoKKyAgICAgICAgKiBqaXQvSklU
U3R1YnMuaDoKKyAgICAgICAgKiBqaXQvSlNJbnRlcmZhY2VKSVQuaDoKKwogMjAxMS0wNC0wNyAg
R2VvZmZyZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IE1hY2llaiBTdGFjaG93aWFrLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9NYWNyb0Fzc2VtYmxlclNINC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9NYWNyb0Fzc2VtYmxlclNINC5oCmluZGV4IDA0YjA2MDIuLjdlMTVlNmMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJTSDQuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyU0g0LmgK
QEAgLTE2NTEsNiArMTY1MSwxNCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBDYWxsKG1fYXNz
ZW1ibGVyLmNhbGwodGFyZ2V0KSwgQ2FsbDo6Tm9uZSk7CiAgICAgfQogCisgICAgdm9pZCBjYWxs
KEFkZHJlc3MgYWRkcmVzcywgUmVnaXN0ZXJJRCB0YXJnZXQpCisgICAgeworICAgICAgICBsb2Fk
MzIoYWRkcmVzcy5iYXNlLCBhZGRyZXNzLm9mZnNldCwgdGFyZ2V0KTsKKyAgICAgICAgbV9hc3Nl
bWJsZXIuZW5zdXJlU3BhY2UobV9hc3NlbWJsZXIubWF4SW5zdHJ1Y3Rpb25TaXplICsgMik7Cisg
ICAgICAgIG1fYXNzZW1ibGVyLmJyYW5jaChKU1JfT1BDT0RFLCB0YXJnZXQpOworICAgICAgICBt
X2Fzc2VtYmxlci5ub3AoKTsKKyAgICB9CisKICAgICB2b2lkIGJyZWFrcG9pbnQoKQogICAgIHsK
ICAgICAgICAgbV9hc3NlbWJsZXIuYmtwdCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKaW5kZXgg
OTljOGNkNC4uODk3NTY5NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCkBAIC00NzMsNiArNDcz
LDQ4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zm
c2V0TWV0aG9kQ2hlY2tQcm90b1N0cnVjdCA9IDUyOwogICAgICAgICBzdGF0aWMgY29uc3QgaW50
IHBhdGNoT2Zmc2V0TWV0aG9kQ2hlY2tQdXRGdW5jdGlvbiA9IDg0OwogI2VuZGlmCisjZWxpZiBD
UFUoU0g0KQorICAgICAgIC8vIFRoZXNlIGFyY2hpdGVjdHVyZSBzcGVjaWZpYyB2YWx1ZSBhcmUg
dXNlZCB0byBlbmFibGUgcGF0Y2hpbmcgLSBzZWUgY29tbWVudCBvbiBvcF9wdXRfYnlfaWQuCisg
ICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRHZXRCeUlkU3RydWN0dXJlID0gNjsK
KyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldFB1dEJ5SWRQcm9wZXJ0eU1hcE9m
ZnNldCA9IDI0OworICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0UHV0QnlJZFN0
cnVjdHVyZSA9IDY7CisgICAgICAgIC8vIFRoZXNlIGFyY2hpdGVjdHVyZSBzcGVjaWZpYyB2YWx1
ZSBhcmUgdXNlZCB0byBlbmFibGUgcGF0Y2hpbmcgLSBzZWUgY29tbWVudCBvbiBvcF9nZXRfYnlf
aWQuCisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRHZXRCeUlkQnJhbmNoVG9T
bG93Q2FzZSA9IDEwOworICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0R2V0QnlJ
ZFByb3BlcnR5TWFwT2Zmc2V0ID0gMjQ7CisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hP
ZmZzZXRHZXRCeUlkUHV0UmVzdWx0ID0gMzI7CisKKyAgICAgICAgLy8gc2VxdWVuY2VPcENhbGwK
KyAgICAgICAgc3RhdGljIGNvbnN0IGludCBzZXF1ZW5jZU9wQ2FsbEluc3RydWN0aW9uU3BhY2Ug
PSAxMjsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBzZXF1ZW5jZU9wQ2FsbENvbnN0YW50U3Bh
Y2UgPSAyOworICAgICAgICAvLyBzZXF1ZW5jZU1ldGhvZENoZWNrCisgICAgICAgIHN0YXRpYyBj
b25zdCBpbnQgc2VxdWVuY2VNZXRob2RDaGVja0luc3RydWN0aW9uU3BhY2UgPSA0MDsKKyAgICAg
ICAgc3RhdGljIGNvbnN0IGludCBzZXF1ZW5jZU1ldGhvZENoZWNrQ29uc3RhbnRTcGFjZSA9IDY7
CisgICAgICAgIC8vIHNlcXVlbmNlR2V0QnlJZEhvdFBhdGgKKyAgICAgICAgc3RhdGljIGNvbnN0
IGludCBzZXF1ZW5jZUdldEJ5SWRIb3RQYXRoSW5zdHJ1Y3Rpb25TcGFjZSA9IDM2OworICAgICAg
ICBzdGF0aWMgY29uc3QgaW50IHNlcXVlbmNlR2V0QnlJZEhvdFBhdGhDb25zdGFudFNwYWNlID0g
NTsKKyAgICAgICAgLy8gc2VxdWVuY2VHZXRCeUlkU2xvd0Nhc2UKKyAgICAgICAgc3RhdGljIGNv
bnN0IGludCBzZXF1ZW5jZUdldEJ5SWRTbG93Q2FzZUluc3RydWN0aW9uU3BhY2UgPSAyNjsKKyAg
ICAgICAgc3RhdGljIGNvbnN0IGludCBzZXF1ZW5jZUdldEJ5SWRTbG93Q2FzZUNvbnN0YW50U3Bh
Y2UgPSAyOworICAgICAgICAvLyBzZXF1ZW5jZVB1dEJ5SWQKKyAgICAgICAgc3RhdGljIGNvbnN0
IGludCBzZXF1ZW5jZVB1dEJ5SWRJbnN0cnVjdGlvblNwYWNlID0gMzY7CisgICAgICAgIHN0YXRp
YyBjb25zdCBpbnQgc2VxdWVuY2VQdXRCeUlkQ29uc3RhbnRTcGFjZSA9IDU7CisKKyAgICAgICAg
c3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldEdldEJ5SWRQcm9wZXJ0eU1hcE9mZnNldDEgPSAy
MDsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldEdldEJ5SWRQcm9wZXJ0eU1h
cE9mZnNldDIgPSAyNjsKKworICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0UHV0
QnlJZFByb3BlcnR5TWFwT2Zmc2V0MSA9IDIwOworICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBh
dGNoT2Zmc2V0UHV0QnlJZFByb3BlcnR5TWFwT2Zmc2V0MiA9IDI2OworCisjaWYgRU5BQkxFKE9Q
Q09ERV9TQU1QTElORykKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldEdldEJ5
SWRTbG93Q2FzZUNhbGwgPSAwOyAvLyBGSU1YRQorI2Vsc2UKKyAgICAgICAgc3RhdGljIGNvbnN0
IGludCBwYXRjaE9mZnNldEdldEJ5SWRTbG93Q2FzZUNhbGwgPSAyMjsKKyNlbmRpZgorICAgICAg
ICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0T3BDYWxsQ29tcGFyZVRvSnVtcCA9IDQ7CisK
KyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldE1ldGhvZENoZWNrUHJvdG9PYmog
PSAxMjsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldE1ldGhvZENoZWNrUHJv
dG9TdHJ1Y3QgPSAyMDsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldE1ldGhv
ZENoZWNrUHV0RnVuY3Rpb24gPSAzMjsKICNlbHNlCiAjZXJyb3IgIkpTVkFMVUUzMl82NCBub3Qg
c3VwcG9ydGVkIG9uIHRoaXMgcGxhdGZvcm0uIgogI2VuZGlmCkBAIC02NjUsMTQgKzcwNywxNiBA
QCBuYW1lc3BhY2UgSlNDIHsKIAogI2lmIChkZWZpbmVkKEFTU0VNQkxFUl9IQVNfQ09OU1RBTlRf
UE9PTCkgJiYgQVNTRU1CTEVSX0hBU19DT05TVEFOVF9QT09MKQogI2RlZmluZSBCRUdJTl9VTklO
VEVSUlVQVEVEX1NFUVVFTkNFKG5hbWUpIGRvIHsgYmVnaW5VbmludGVycnVwdGVkU2VxdWVuY2Uo
bmFtZSAjIyBJbnN0cnVjdGlvblNwYWNlLCBuYW1lICMjIENvbnN0YW50U3BhY2UpOyB9IHdoaWxl
IChmYWxzZSkKLSNkZWZpbmUgRU5EX1VOSU5URVJSVVBURURfU0VRVUVOQ0UobmFtZSkgZG8geyBl
bmRVbmludGVycnVwdGVkU2VxdWVuY2UobmFtZSAjIyBJbnN0cnVjdGlvblNwYWNlLCBuYW1lICMj
IENvbnN0YW50U3BhY2UpOyB9IHdoaWxlIChmYWxzZSkKKyNkZWZpbmUgRU5EX1VOSU5URVJSVVBU
RURfU0VRVUVOQ0UyKG5hbWUsIGRzdCkgZG8geyBlbmRVbmludGVycnVwdGVkU2VxdWVuY2UobmFt
ZSAjIyBJbnN0cnVjdGlvblNwYWNlLCBuYW1lICMjIENvbnN0YW50U3BhY2UsIGRzdCk7IH0gd2hp
bGUgKGZhbHNlKQorI2RlZmluZSBFTkRfVU5JTlRFUlJVUFRFRF9TRVFVRU5DRShuYW1lKSBFTkRf
VU5JTlRFUlJVUFRFRF9TRVFVRU5DRTIobmFtZSwgMCkKIAogICAgICAgICB2b2lkIGJlZ2luVW5p
bnRlcnJ1cHRlZFNlcXVlbmNlKGludCwgaW50KTsKLSAgICAgICAgdm9pZCBlbmRVbmludGVycnVw
dGVkU2VxdWVuY2UoaW50LCBpbnQpOworICAgICAgICB2b2lkIGVuZFVuaW50ZXJydXB0ZWRTZXF1
ZW5jZShpbnQsIGludCwgaW50KTsKIAogI2Vsc2UKICNkZWZpbmUgQkVHSU5fVU5JTlRFUlJVUFRF
RF9TRVFVRU5DRShuYW1lKSAgZG8geyBiZWdpblVuaW50ZXJydXB0ZWRTZXF1ZW5jZSgpOyB9IHdo
aWxlIChmYWxzZSkKICNkZWZpbmUgRU5EX1VOSU5URVJSVVBURURfU0VRVUVOQ0UobmFtZSkgIGRv
IHsgZW5kVW5pbnRlcnJ1cHRlZFNlcXVlbmNlKCk7IH0gd2hpbGUgKGZhbHNlKQorI2RlZmluZSBF
TkRfVU5JTlRFUlJVUFRFRF9TRVFVRU5DRTIobmFtZSwgZHN0KSBkbyB7IGVuZFVuaW50ZXJydXB0
ZWRTZXF1ZW5jZSgpOyB9IHdoaWxlIChmYWxzZSkKICNlbmRpZgogCiAgICAgICAgIHZvaWQgZW1p
dF9vcF9hZGQoSW5zdHJ1Y3Rpb24qKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUSW5saW5lTWV0aG9kcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJ
bmxpbmVNZXRob2RzLmgKaW5kZXggOWFmYWYxYS4uZDE4ODA5NCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVNZXRob2RzLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVNZXRob2RzLmgKQEAgLTEyMyw2ICsxMjMsMTMgQEAgQUxX
QVlTX0lOTElORSB2b2lkIEpJVDo6YmVnaW5VbmludGVycnVwdGVkU2VxdWVuY2UoaW50IGluc25T
cGFjZSwgaW50IGNvbnN0U3BhY2UKIAogICAgIGVuc3VyZVNwYWNlKGluc25TcGFjZSwgY29uc3RT
cGFjZSk7CiAKKyNlbGlmIENQVShTSDQpCisjaWZuZGVmIE5ERUJVRworICAgIGluc25TcGFjZSAr
PSBzaXplb2YoU0g0V29yZCk7CisgICAgY29uc3RTcGFjZSArPSBzaXplb2YodWludDY0X3QpOwor
I2VuZGlmCisKKyAgICBtX2Fzc2VtYmxlci5lbnN1cmVTcGFjZShpbnNuU3BhY2UgKyBtX2Fzc2Vt
Ymxlci5tYXhJbnN0cnVjdGlvblNpemUgKyAyLCBjb25zdFNwYWNlICsgOCk7CiAjZW5kaWYKIAog
I2lmIGRlZmluZWQoQVNTRU1CTEVSX0hBU19DT05TVEFOVF9QT09MKSAmJiBBU1NFTUJMRVJfSEFT
X0NPTlNUQU5UX1BPT0wKQEAgLTEzMyw3ICsxNDAsNyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklU
OjpiZWdpblVuaW50ZXJydXB0ZWRTZXF1ZW5jZShpbnQgaW5zblNwYWNlLCBpbnQgY29uc3RTcGFj
ZQogI2VuZGlmCiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVuZFVuaW50ZXJydXB0ZWRT
ZXF1ZW5jZShpbnQgaW5zblNwYWNlLCBpbnQgY29uc3RTcGFjZSkKK0FMV0FZU19JTkxJTkUgdm9p
ZCBKSVQ6OmVuZFVuaW50ZXJydXB0ZWRTZXF1ZW5jZShpbnQgaW5zblNwYWNlLCBpbnQgY29uc3RT
cGFjZSwgaW50IGRzdCkKIHsKICNpZiBkZWZpbmVkKEFTU0VNQkxFUl9IQVNfQ09OU1RBTlRfUE9P
TCkgJiYgQVNTRU1CTEVSX0hBU19DT05TVEFOVF9QT09MCiAgICAgLyogVGhlcmUgYXJlIHNldmVy
YWwgY2FzZXMgd2hlbiB0aGUgdW5pbnRlcnJ1cHRlZCBzZXF1ZW5jZSBpcyBsYXJnZXIgdGhhbgpA
QCAtMTQzLDYgKzE1MCwxNSBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbmRVbmludGVycnVw
dGVkU2VxdWVuY2UoaW50IGluc25TcGFjZSwgaW50IGNvbnN0U3BhY2UpCiAgICAgICogY2FsY3Vs
YXRpb24gb2YgbGVuZ3RoIG9mIHVuaW50ZXJydXB0ZWQgc2VxdWVuY2UuIFNvLCB0aGUgaW5zblNw
YWNlIGFuZAogICAgICAqIGNvbnN0U3BhY2Ugc2hvdWxkIGJlIHVwcGVyIGxpbWl0IGluc3RlYWQg
b2YgaGFyZCBsaW1pdC4KICAgICAgKi8KKyNpZiBDUFUoU0g0KQorICAgIGlmICgoZHN0ID4gMTUp
IHx8IChkc3QgPCAtMTYpKSB7CisgICAgICAgIGluc25TcGFjZSArPSA4OworICAgICAgICBjb25z
dFNwYWNlICs9IDI7CisgICAgfQorCisgICAgaWYgKCgoZHN0ID49IC0xNikgJiYgKGRzdCA8IDAp
KSB8fCAoKGRzdCA+IDcpICYmIChkc3QgPD0gMTUpKSkKKyAgICAgICAgaW5zblNwYWNlICs9IDg7
CisjZW5kaWYKICAgICBBU1NFUlQoZGlmZmVyZW5jZUJldHdlZW4obV91bmludGVycnVwdGVkSW5z
dHJ1Y3Rpb25TZXF1ZW5jZUJlZ2luLCBsYWJlbCgpKSA8PSBpbnNuU3BhY2UpOwogICAgIEFTU0VS
VChzaXplT2ZDb25zdGFudFBvb2woKSAtIG1fdW5pbnRlcnJ1cHRlZENvbnN0YW50U2VxdWVuY2VC
ZWdpbiA8PSBjb25zdFNwYWNlKTsKICNlbmRpZgpAQCAtMTY3LDYgKzE4MywyMiBAQCBBTFdBWVNf
SU5MSU5FIHZvaWQgSklUOjpyZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihBZGRyZXNz
IGFkZHJlc3MpCiB7CiAgICAgbG9hZFB0cihhZGRyZXNzLCBsaW5rUmVnaXN0ZXIpOwogfQorI2Vs
aWYgQ1BVKFNINCkKKworQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6cHJlc2VydmVSZXR1cm5BZGRy
ZXNzQWZ0ZXJDYWxsKFJlZ2lzdGVySUQgcmVnKQoreworICAgIG1fYXNzZW1ibGVyLnN0c3ByKHJl
Zyk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OnJlc3RvcmVSZXR1cm5BZGRyZXNzQmVm
b3JlUmV0dXJuKFJlZ2lzdGVySUQgcmVnKQoreworICAgIG1fYXNzZW1ibGVyLmxkc3ByKHJlZyk7
Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OnJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3Jl
UmV0dXJuKEFkZHJlc3MgYWRkcmVzcykKK3sKKyAgICBsb2FkUHRyTGlua1JlZyhhZGRyZXNzKTsK
K30KIAogI2VsaWYgQ1BVKE1JUFMpCiAKQEAgLTIxNyw2ICsyNDksOCBAQCBBTFdBWVNfSU5MSU5F
IHZvaWQgSklUOjpyZXN0b3JlQXJndW1lbnRSZWZlcmVuY2VGb3JUcmFtcG9saW5lKCkKICAgICBh
ZGRQdHIoVHJ1c3RlZEltbTMyKHNpemVvZih2b2lkKikpLCBzdGFja1BvaW50ZXJSZWdpc3Rlciwg
Zmlyc3RBcmd1bWVudFJlZ2lzdGVyKTsKICNlbGlmIENQVShBUk0pCiAgICAgbW92ZShzdGFja1Bv
aW50ZXJSZWdpc3RlciwgZmlyc3RBcmd1bWVudFJlZ2lzdGVyKTsKKyNlbGlmIENQVShTSDQpCisg
ICAgbW92ZShzdGFja1BvaW50ZXJSZWdpc3RlciwgZmlyc3RBcmd1bWVudFJlZ2lzdGVyKTsKICNl
bmRpZgogICAgIC8vIEluIHRoZSB0cmFtcG9saW5lIG9uIHg4Ni02NCwgdGhlIGZpcnN0IGFyZ3Vt
ZW50IHJlZ2lzdGVyIGlzIG5vdCBvdmVyd3JpdHRlbi4KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAppbmRleCBlMmQ4NTQ4Li5lZGNlMjFjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCkBAIC0yNDUs
NyArMjQ1LDI2IEBAIEpJVDo6TGFiZWwgSklUOjpwcml2YXRlQ29tcGlsZUNUSU5hdGl2ZUNhbGwo
SlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBib29sIGlzQ29uCiAgICAgY2FsbChBZGRyZXNzKHJl
Z1QyLCBleGVjdXRhYmxlT2Zmc2V0VG9GdW5jdGlvbikpOwogCiAgICAgcmVzdG9yZVJldHVybkFk
ZHJlc3NCZWZvcmVSZXR1cm4ocmVnVDMpOworI2VsaWYgQ1BVKFNINCkKKyAgICAvLyBMb2FkIGNh
bGxlciBmcmFtZSdzIHNjb3BlIGNoYWluIGludG8gdGhpcyBjYWxsZnJhbWUgc28gdGhhdCB3aGF0
ZXZlciB3ZSBjYWxsIGNhbgorICAgIC8vIGdldCB0byBpdHMgZ2xvYmFsIGRhdGEuCisgICAgZW1p
dEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoUmVnaXN0ZXJGaWxlOjpDYWxsZXJGcmFtZSwgcmVn
VDIpOworICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKFJlZ2lzdGVyRmlsZTo6U2Nv
cGVDaGFpbiwgcmVnVDEsIHJlZ1QyKTsKKyAgICBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIocmVn
VDEsIFJlZ2lzdGVyRmlsZTo6U2NvcGVDaGFpbik7CisKKyAgICBwcmVzZXJ2ZVJldHVybkFkZHJl
c3NBZnRlckNhbGwocmVnVDMpOyAvLyBDYWxsZWUgcHJlc2VydmVkCisgICAgZW1pdFB1dFRvQ2Fs
bEZyYW1lSGVhZGVyKHJlZ1QzLCBSZWdpc3RlckZpbGU6OlJldHVyblBDKTsKIAorICAgIC8vIENh
bGxpbmcgY29udmVudGlvbjogZihyMCA9PSByZWdUNCwgcjEgPT0gcmVnVDUsIC4uLik7CisgICAg
Ly8gSG9zdCBmdW5jdGlvbiBzaWduYXR1cmU6IGYoRXhlY1N0YXRlKik7CisgICAgbW92ZShjYWxs
RnJhbWVSZWdpc3RlciwgcmVnVDQpOworCisgICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQ
dHIoUmVnaXN0ZXJGaWxlOjpDYWxsZWUsIHJlZ1Q1KTsKKyAgICBtb3ZlKHJlZ1QyLCBjYWxsRnJh
bWVSZWdpc3Rlcik7IC8vIEVhZ2VybHkgcmVzdG9yZSBjYWxsZXIgZnJhbWUgcmVnaXN0ZXIgdG8g
YXZvaWQgbG9hZGluZyBmcm9tIHN0YWNrLgorICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUNSwgT0JK
RUNUX09GRlNFVE9GKEpTRnVuY3Rpb24sIG1fZXhlY3V0YWJsZSkpLCByZWdUMik7CisKKyAgICBj
YWxsKEFkZHJlc3MocmVnVDIsIGV4ZWN1dGFibGVPZmZzZXRUb0Z1bmN0aW9uKSwgcmVnVDApOwor
ICAgIHJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKHJlZ1QzKTsKICNlbGlmIENQVShN
SVBTKQogICAgIC8vIExvYWQgY2FsbGVyIGZyYW1lJ3Mgc2NvcGUgY2hhaW4gaW50byB0aGlzIGNh
bGxmcmFtZSBzbyB0aGF0IHdoYXRldmVyIHdlIGNhbGwgY2FuCiAgICAgLy8gZ2V0IHRvIGl0cyBn
bG9iYWwgZGF0YS4KQEAgLTM5NCw3ICs0MTMsMjggQEAgSklUOjpDb2RlUHRyIEpJVDo6cHJpdmF0
ZUNvbXBpbGVDVElOYXRpdmVDYWxsKFBhc3NSZWZQdHI8RXhlY3V0YWJsZVBvb2w+IGV4ZWN1dGEK
ICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKDE2KSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogCiAg
ICAgcmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4ocmVnVDMpOworI2VsaWYgQ1BVKFNI
NCkKKyAgICAvLyBMb2FkIGNhbGxlciBmcmFtZSdzIHNjb3BlIGNoYWluIGludG8gdGhpcyBjYWxs
ZnJhbWUgc28gdGhhdCB3aGF0ZXZlciB3ZSBjYWxsIGNhbgorICAgIC8vIGdldCB0byBpdHMgZ2xv
YmFsIGRhdGEuCisgICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoUmVnaXN0ZXJGaWxl
OjpDYWxsZXJGcmFtZSwgcmVnVDIpOworICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRy
KFJlZ2lzdGVyRmlsZTo6U2NvcGVDaGFpbiwgcmVnVDEsIHJlZ1QyKTsKKyAgICBlbWl0UHV0VG9D
YWxsRnJhbWVIZWFkZXIocmVnVDEsIFJlZ2lzdGVyRmlsZTo6U2NvcGVDaGFpbik7CisKKyAgICBw
cmVzZXJ2ZVJldHVybkFkZHJlc3NBZnRlckNhbGwocmVnVDMpOyAvLyBDYWxsZWUgcHJlc2VydmVk
CisgICAgZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKHJlZ1QzLCBSZWdpc3RlckZpbGU6OlJldHVy
blBDKTsKKworICAgIC8vIENhbGxpbmcgY29udmVudGlvbjogZihyMCA9PSByZWdUNCwgcjEgPT0g
cmVnVDUsIC4uLik7CisgICAgLy8gSG9zdCBmdW5jdGlvbiBzaWduYXR1cmU6IGYoRXhlY1N0YXRl
Kik7CisgICAgbW92ZShjYWxsRnJhbWVSZWdpc3RlciwgcmVnVDQpOwogCisgICAgZW1pdEdldEZy
b21DYWxsRnJhbWVIZWFkZXJQdHIoUmVnaXN0ZXJGaWxlOjpDYWxsZWUsIHJlZ1Q1KTsKKyAgICBt
b3ZlKHJlZ1QyLCBjYWxsRnJhbWVSZWdpc3Rlcik7IC8vIEVhZ2VybHkgcmVzdG9yZSBjYWxsZXIg
ZnJhbWUgcmVnaXN0ZXIgdG8gYXZvaWQgbG9hZGluZyBmcm9tIHN0YWNrLgorICAgIGxvYWRQdHIo
QWRkcmVzcyhyZWdUNSwgT0JKRUNUX09GRlNFVE9GKEpTRnVuY3Rpb24sIG1fZXhlY3V0YWJsZSkp
LCByZWdUMik7CisKKyAgICAvLyBjYWxsIHRoZSBmdW5jdGlvbgorICAgIG5hdGl2ZUNhbGwgPSBj
YWxsKCk7CisKKyAgICByZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihyZWdUMyk7CiAj
ZWxpZiBFTkFCTEUoSklUX09QVElNSVpFX05BVElWRV9DQUxMKQogI2Vycm9yICJKSVRfT1BUSU1J
WkVfTkFUSVZFX0NBTEwgbm90IHlldCBzdXBwb3J0ZWQgb24gdGhpcyBwbGF0Zm9ybS4iCiAjZWxz
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vz
czMyXzY0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3Mz
Ml82NC5jcHAKaW5kZXggMmE0N2U1Yy4uYzM5YmM1MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCkBAIC00NzUsNyArNDc1
LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVHZXRCeUlkU2xvd0Nhc2UoaW50IGRzdCwgaW50IGJhc2Us
IElkZW50aWZpZXIqIGlkZW50LCBWZWN0b3I8U2wKICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChU
cnVzdGVkSW1tUHRyKGlkZW50KSk7CiAgICAgQ2FsbCBjYWxsID0gc3R1YkNhbGwuY2FsbChkc3Qp
OwogICAgIAotICAgIEVORF9VTklOVEVSUlVQVEVEX1NFUVVFTkNFKHNlcXVlbmNlR2V0QnlJZFNs
b3dDYXNlKTsKKyAgICBFTkRfVU5JTlRFUlJVUFRFRF9TRVFVRU5DRTIoc2VxdWVuY2VHZXRCeUlk
U2xvd0Nhc2UsIGRzdCk7CiAgICAgCiAgICAgQVNTRVJUX0pJVF9PRkZTRVQoZGlmZmVyZW5jZUJl
dHdlZW4oY29sZFBhdGhCZWdpbiwgY2FsbCksIHBhdGNoT2Zmc2V0R2V0QnlJZFNsb3dDYXNlQ2Fs
bCk7CiAgICAgCkBAIC02MjQsNyArNjI0LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0
QnlJZFRyYW5zaXRpb24oU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBTdHJ1Y3R1cmUKICAg
ICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIEFic29sdXRlQWRkcmVzcyhuZXdTdHJ1Y3R1cmUtPmFk
ZHJlc3NPZkNvdW50KCkpKTsKICAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKG5ld1N0cnVjdHVy
ZSksIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpKTsKICAgICAKLSNp
ZiBDUFUoTUlQUykKKyNpZiBDUFUoTUlQUykgfHwgQ1BVKFNINCkKICAgICAvLyBGb3IgTUlQUywg
d2UgZG9uJ3QgYWRkIHNpemVvZih2b2lkKikgdG8gdGhlIHN0YWNrIG9mZnNldC4KICAgICBsb2Fk
MzIoQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3RlciwgT0JKRUNUX09GRlNFVE9GKEpJVFN0YWNr
RnJhbWUsIGFyZ3NbMl0pICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxv
YWQpKSwgcmVnVDMpOwogICAgIGxvYWQzMihBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBP
QkpFQ1RfT0ZGU0VUT0YoSklUU3RhY2tGcmFtZSwgYXJnc1syXSkgKyBPQkpFQ1RfT0ZGU0VUT0Yo
SlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksIHJlZ1QyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRTdHVicy5jcHAKaW5kZXggZGI0MTVjNS4uMzBjZTk3NSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRTdHVicy5jcHAKQEAgLTMxNCw3ICszMTQsNzkgQEAgZXh0ZXJuICJDIiB7CiAjZGVm
aW5lIEVOQUJMRV9QUk9GSUxFUl9SRUZFUkVOQ0VfT0ZGU0VUIDk2CiAjZGVmaW5lIEdMT0JBTF9E
QVRBX09GRlNFVCAgICAgICAgIDEwMAogI2RlZmluZSBTVEFDS19MRU5HVEggICAgICAgICAgICAg
ICAxMDQKKyNlbGlmIENQVShTSDQpCisjZGVmaW5lIFNZTUJPTF9TVFJJTkcobmFtZSkgI25hbWUK
Ky8qIGNvZGUgKHI0KSwgUmVnaXN0ZXJGaWxlKiAocjUpLCBDYWxsRnJhbWUqIChyNiksIEpTVmFs
dWUqIGV4Y2VwdGlvbiAocjcpLCBQcm9maWxlcioqKHNwKSwgSlNHbG9iYWxEYXRhIChzcCkqLwog
Cithc20gdm9sYXRpbGUgKAorIi50ZXh0XG4iCisiLmdsb2JsICIgU1lNQk9MX1NUUklORyhjdGlU
cmFtcG9saW5lKSAiXG4iCitISURFX1NZTUJPTChjdGlUcmFtcG9saW5lKSAiXG4iCitTWU1CT0xf
U1RSSU5HKGN0aVRyYW1wb2xpbmUpICI6IiAiXG4iCisgICAgIm1vdi5sIHI3LCBALXIxNSIgIlxu
IgorICAgICJtb3YubCByNiwgQC1yMTUiICJcbiIKKyAgICAibW92LmwgcjUsIEAtcjE1IiAiXG4i
CisgICAgIm1vdi5sIHI4LCBALXIxNSIgIlxuIgorICAgICJtb3YgIzEyNywgcjgiICJcbiIKKyAg
ICAibW92LmwgcjE0LCBALXIxNSIgIlxuIgorICAgICJzdHMubCBwciwgQC1yMTUiICJcbiIKKyAg
ICAibW92LmwgcjEzLCBALXIxNSIgIlxuIgorICAgICJtb3YubCByMTEsIEAtcjE1IiAiXG4iCisg
ICAgIm1vdi5sIHIxMCwgQC1yMTUiICJcbiIKKyAgICAiYWRkICMtNjAsIHIxNSIgIlxuIgorICAg
ICJtb3YgcjYsIHIxNCIgIlxuIgorICAgICJqc3IgQHI0IiAiXG4iCisgICAgIm5vcCIgIlxuIgor
ICAgICJhZGQgIzYwLCByMTUiICJcbiIKKyAgICAibW92LmwgQHIxNSsscjEwIiAiXG4iCisgICAg
Im1vdi5sIEByMTUrLHIxMSIgIlxuIgorICAgICJtb3YubCBAcjE1KyxyMTMiICJcbiIKKyAgICAi
bGRzLmwgQHIxNSsscHIiICJcbiIKKyAgICAibW92LmwgQHIxNSsscjE0IiAiXG4iCisgICAgIm1v
di5sIEByMTUrLHI4IiAiXG4iCisgICAgImFkZCAjMTIsIHIxNSIgIlxuIgorICAgICJydHMiICJc
biIKKyAgICAibm9wIiAiXG4iCispOworCithc20gdm9sYXRpbGUgKAorIi5nbG9ibCAiIFNZTUJP
TF9TVFJJTkcoY3RpVk1UaHJvd1RyYW1wb2xpbmUpICJcbiIKK0hJREVfU1lNQk9MKGN0aVZNVGhy
b3dUcmFtcG9saW5lKSAiXG4iCitTWU1CT0xfU1RSSU5HKGN0aVZNVGhyb3dUcmFtcG9saW5lKSAi
OiIgIlxuIgorICAgICJtb3YubCAuTDIiU1lNQk9MX1NUUklORyhjdGlfdm1fdGhyb3cpIixyMCIg
IlxuIgorICAgICJtb3YgcjE1LCByNCIgIlxuIgorICAgICJtb3YubCBAKHIwLHIxMikscjExIiAi
XG4iCisgICAgImpzciBAcjExIiAiXG4iCisgICAgIm5vcCIgIlxuIgorICAgICJhZGQgIzYwLCBy
MTUiICJcbiIKKyAgICAibW92LmwgQHIxNSsscjEwIiAiXG4iCisgICAgIm1vdi5sIEByMTUrLHIx
MSIgIlxuIgorICAgICJtb3YubCBAcjE1KyxyMTMiICJcbiIKKyAgICAibGRzLmwgQHIxNSsscHIi
ICJcbiIKKyAgICAibW92LmwgQHIxNSsscjE0IiAiXG4iCisgICAgIm1vdi5sIEByMTUrLHI4IiAi
XG4iCisgICAgImFkZCAjMTIsIHIxNSIgIlxuIgorICAgICJydHMiICJcbiIKKyAgICAibm9wIiAi
XG4iCisgICAgIi5hbGlnbiAyIiAiXG4iCisgICAgIi5MMiJTWU1CT0xfU1RSSU5HKGN0aV92bV90
aHJvdykiOi5sb25nICIgU1lNQk9MX1NUUklORyhjdGlfdm1fdGhyb3cpIkBHT1QgXG4iCispOwor
Cithc20gdm9sYXRpbGUgKAorIi5nbG9ibCAiIFNZTUJPTF9TVFJJTkcoY3RpT3BUaHJvd05vdENh
dWdodCkgIlxuIgorSElERV9TWU1CT0woY3RpT3BUaHJvd05vdENhdWdodCkgIlxuIgorU1lNQk9M
X1NUUklORyhjdGlPcFRocm93Tm90Q2F1Z2h0KSAiOiIgIlxuIgorICAgICJhZGQgIzYwLCByMTUi
ICJcbiIKKyAgICAibW92LmwgQHIxNSsscjEwIiAiXG4iCisgICAgIm1vdi5sIEByMTUrLHIxMSIg
IlxuIgorICAgICJtb3YubCBAcjE1KyxyMTMiICJcbiIKKyAgICAibGRzLmwgQHIxNSsscHIiICJc
biIKKyAgICAibW92LmwgQHIxNSsscjE0IiAiXG4iCisgICAgIm1vdi5sIEByMTUrLHI4IiAiXG4i
CisgICAgImFkZCAjMTIsIHIxNSIgIlxuIgorICAgICJydHMiICJcbiIKKyAgICAibm9wIiAiXG4i
CispOwogI2Vsc2UKICAgICAjZXJyb3IgIkpJVCBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgcGxhdGZv
cm0uIgogI2VuZGlmCkBAIC0xMTU2LDYgKzEyMjgsMjkgQEAgTVNWQygpCiBNU1ZDX0VORCggICAg
RU5EKQogKi8KIAorI2VsaWYgQ1BVKFNINCkKKyNkZWZpbmUgREVGSU5FX1NUVUJfRlVOQ1RJT04o
cnR5cGUsIG9wKSBcCisgICAgZXh0ZXJuICJDIiB7IFwKKyAgICAgICAgcnR5cGUgSklUU3R1YlRo
dW5rZWRfIyNvcChTVFVCX0FSR1NfREVDTEFSQVRJT04pOyBcCisgICAgfTsgXAorICAgIGFzbSB2
b2xhdGlsZSggXAorICAgICIuYWxpZ24gMiIgIlxuIiBcCisgICAgIi5nbG9ibCAiIFNZTUJPTF9T
VFJJTkcoY3RpXyMjb3ApICJcbiIgXAorICAgIFNZTUJPTF9TVFJJTkcoY3RpXyMjb3ApICI6IiAi
XG4iIFwKKyAgICAic3RzIHByLCByMTEiICJcbiIgXAorICAgICJtb3YubCByMTEsIEAoMHgzOCwg
cjE1KSIgIlxuIiBcCisgICAgIm1vdi5sIC5MMiJTWU1CT0xfU1RSSU5HKEpJVFN0dWJUaHVua2Vk
XyMjb3ApIixyMCIgIlxuIiBcCisgICAgIm1vdi5sIEAocjAscjEyKSxyMTEiICJcbiIgXAorICAg
ICJqc3IgQHIxMSIgIlxuIiBcCisgICAgIm5vcCIgIlxuIiBcCisgICAgIm1vdi5sIEAoMHgzOCwg
cjE1KSwgcjExICIgIlxuIiBcCisgICAgImxkcyByMTEsIHByICIgIlxuIiBcCisgICAgInJ0cyIg
IlxuIiBcCisgICAgIm5vcCIgIlxuIiBcCisgICAgIi5hbGlnbiAyIiAiXG4iIFwKKyAgICAiLkwy
IlNZTUJPTF9TVFJJTkcoSklUU3R1YlRodW5rZWRfIyNvcCkiOi5sb25nICIgU1lNQk9MX1NUUklO
RyhKSVRTdHViVGh1bmtlZF8jI29wKSJAR09UIFxuIiBcCisgICAgKTsgXAorICAgIHJ0eXBlIEpJ
VFN0dWJUaHVua2VkXyMjb3AoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKQogI2Vsc2UKICNkZWZpbmUg
REVGSU5FX1NUVUJfRlVOQ1RJT04ocnR5cGUsIG9wKSBydHlwZSBKSVRfU1RVQiBjdGlfIyNvcChT
VFVCX0FSR1NfREVDTEFSQVRJT04pCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUU3R1YnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1
YnMuaAppbmRleCBhZjZlMTNmLi40YTkxZDU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFN0dWJzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRT
dHVicy5oCkBAIC0yMjksNiArMjI5LDI3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIFJl
dHVybkFkZHJlc3NQdHIqIHJldHVybkFkZHJlc3NTbG90KCkgeyByZXR1cm4gJnRodW5rUmV0dXJu
QWRkcmVzczsgfQogICAgIH07CisjZWxpZiBDUFUoU0g0KQorICAgIHN0cnVjdCBKSVRTdGFja0Zy
YW1lIHsKKyAgICAgICAgSklUU3R1YkFyZyBwYWRkaW5nOyAvLyBVbnVzZWQKKyAgICAgICAgSklU
U3R1YkFyZyBhcmdzWzZdOworCisgICAgICAgIFJldHVybkFkZHJlc3NQdHIgdGh1bmtSZXR1cm5B
ZGRyZXNzOworICAgICAgICB2b2lkKiBzYXZlZFIxMDsKKyAgICAgICAgdm9pZCogc2F2ZWRSMTE7
CisgICAgICAgIHZvaWQqIHNhdmVkUjEzOworICAgICAgICB2b2lkKiBzYXZlZFJQUjsKKyAgICAg
ICAgdm9pZCogc2F2ZWRSMTQ7CisgICAgICAgIHZvaWQqIHNhdmVkVGltZW91dFJlZzsKKworICAg
ICAgICBSZWdpc3RlckZpbGUqIHJlZ2lzdGVyRmlsZTsKKyAgICAgICAgQ2FsbEZyYW1lKiBjYWxs
RnJhbWU7CisgICAgICAgIEpTVmFsdWUqIGV4Y2VwdGlvbjsKKyAgICAgICAgUHJvZmlsZXIqKiBl
bmFibGVkUHJvZmlsZXJSZWZlcmVuY2U7CisgICAgICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0
YTsKKworICAgICAgICBSZXR1cm5BZGRyZXNzUHRyKiByZXR1cm5BZGRyZXNzU2xvdCgpIHsgcmV0
dXJuICZ0aHVua1JldHVybkFkZHJlc3M7IH0KKyAgICB9OwogI2Vsc2UKICNlcnJvciAiSklUU3Rh
Y2tGcmFtZSBub3QgZGVmaW5lZCBmb3IgdGhpcyBwbGF0Zm9ybS4iCiAjZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSlNJbnRlcmZhY2VKSVQuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSlNJbnRlcmZhY2VKSVQuaAppbmRleCA4NTJlMDFhLi4wNzIxOGMx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pTSW50ZXJmYWNlSklULmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KU0ludGVyZmFjZUpJVC5oCkBAIC0xNTQs
NiArMTU0LDMxIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdGF0aWMgY29uc3QgRlBSZWdp
c3RlcklEIGZwUmVnVDEgPSBNSVBTUmVnaXN0ZXJzOjpmNjsKICAgICAgICAgc3RhdGljIGNvbnN0
IEZQUmVnaXN0ZXJJRCBmcFJlZ1QyID0gTUlQU1JlZ2lzdGVyczo6Zjg7CiAgICAgICAgIHN0YXRp
YyBjb25zdCBGUFJlZ2lzdGVySUQgZnBSZWdUMyA9IE1JUFNSZWdpc3RlcnM6OmYxMDsKKyNlbGlm
IENQVShTSDQpCisgICAgICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIHRpbWVvdXRDaGVja1Jl
Z2lzdGVyID0gU0g0UmVnaXN0ZXJzOjpyODsKKyAgICAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVy
SUQgY2FsbEZyYW1lUmVnaXN0ZXIgPSBTSDRSZWdpc3RlcnM6OmZwOworCisgICAgICAgIHN0YXRp
YyBjb25zdCBSZWdpc3RlcklEIHJlZ1QwID0gU0g0UmVnaXN0ZXJzOjpyMDsKKyAgICAgICAgc3Rh
dGljIGNvbnN0IFJlZ2lzdGVySUQgcmVnVDEgPSBTSDRSZWdpc3RlcnM6OnIxOworICAgICAgICBz
dGF0aWMgY29uc3QgUmVnaXN0ZXJJRCByZWdUMiA9IFNINFJlZ2lzdGVyczo6cjI7CisgICAgICAg
IHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIHJlZ1QzID0gU0g0UmVnaXN0ZXJzOjpyMTA7CisgICAg
ICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIHJlZ1Q0ID0gU0g0UmVnaXN0ZXJzOjpyNDsKKyAg
ICAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgcmVnVDUgPSBTSDRSZWdpc3RlcnM6OnI1Owor
ICAgICAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCByZWdUNiA9IFNINFJlZ2lzdGVyczo6cjY7
CisgICAgICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIHJlZ1Q3ID0gU0g0UmVnaXN0ZXJzOjpy
NzsKKyAgICAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgZmlyc3RBcmd1bWVudFJlZ2lzdGVy
ID1yZWdUNDsKKworICAgICAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCByZXR1cm5WYWx1ZVJl
Z2lzdGVyID0gU0g0UmVnaXN0ZXJzOjpyMDsKKyAgICAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVy
SUQgY2FjaGVkUmVzdWx0UmVnaXN0ZXIgPSBTSDRSZWdpc3RlcnM6OnIwOworCisgICAgICAgIHN0
YXRpYyBjb25zdCBGUFJlZ2lzdGVySUQgZnBSZWdUMCAgPSBTSDRSZWdpc3RlcnM6OmZyMDsKKyAg
ICAgICAgc3RhdGljIGNvbnN0IEZQUmVnaXN0ZXJJRCBmcFJlZ1QxICA9IFNINFJlZ2lzdGVyczo6
ZnIyOworICAgICAgICBzdGF0aWMgY29uc3QgRlBSZWdpc3RlcklEIGZwUmVnVDIgID0gU0g0UmVn
aXN0ZXJzOjpmcjQ7CisgICAgICAgIHN0YXRpYyBjb25zdCBGUFJlZ2lzdGVySUQgZnBSZWdUMyAg
PSBTSDRSZWdpc3RlcnM6OmZyNjsKKyAgICAgICAgc3RhdGljIGNvbnN0IEZQUmVnaXN0ZXJJRCBm
cFJlZ1Q0ICA9IFNINFJlZ2lzdGVyczo6ZnI4OworICAgICAgICBzdGF0aWMgY29uc3QgRlBSZWdp
c3RlcklEIGZwUmVnVDUgID0gU0g0UmVnaXN0ZXJzOjpmcjEwOworICAgICAgICBzdGF0aWMgY29u
c3QgRlBSZWdpc3RlcklEIGZwUmVnVDYgID0gU0g0UmVnaXN0ZXJzOjpmcjEyOworICAgICAgICBz
dGF0aWMgY29uc3QgRlBSZWdpc3RlcklEIGZwUmVnVDcgID0gU0g0UmVnaXN0ZXJzOjpmcjE0Owog
I2Vsc2UKICNlcnJvciAiSklUIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBwbGF0Zm9ybS4iCiAjZW5k
aWYKLS0gCjEuNy4yLjMKCg==
</data>
<flag name="review"
          id="81399"
          type_id="1"
          status="-"
          setter="oliver"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>88826</attachid>
            <date>2011-04-08 08:19:54 -0700</date>
            <delta_ts>2011-04-11 14:12:12 -0700</delta_ts>
            <desc>Enable JIT </desc>
            <filename>0001-Enable-JIT-support-for-SH4-platforms.patch</filename>
            <type>text/plain</type>
            <size>1735</size>
            <attacher name="thouraya">thouraya.andolsi</attacher>
            
              <data encoding="base64">RnJvbSBlNjBlMzViMDIzYTc1NTc1NzgzODRhZGQ5N2MwYTZlMzY5NDJjMDRkIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBUaG91cmF5YSBBTkRPTFNJIDx0aG91cmF5YS5hbmRvbHNpQHN0
LmNvbT4KRGF0ZTogRnJpLCA4IEFwciAyMDExIDE2OjIyOjA3ICswMjAwClN1YmplY3Q6IFtQQVRD
SF0gRW5hYmxlIEpJVCBzdXBwb3J0IGZvciBTSDQgcGxhdGZvcm1zLgoKLS0tCiBDaGFuZ2VMb2cg
ICAgfCAgIDExICsrKysrKysrKysrCiBjb25maWd1cmUuYWMgfCAgIDExICsrKysrKysrKysrCiAy
IGZpbGVzIGNoYW5nZWQsIDIyIGluc2VydGlvbnMoKyksIDAgZGVsZXRpb25zKC0pCgpkaWZmIC0t
Z2l0IGEvQ2hhbmdlTG9nIGIvQ2hhbmdlTG9nCmluZGV4IGUwNDE3ZTcuLjEyMjkxZTYgMTAwNjQ0
Ci0tLSBhL0NoYW5nZUxvZworKysgYi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxMS0w
NC0wOCAgVGhvdXJheWEgQU5ET0xTSSAgPHRob3VyYXlhLmFuZG9sc2lAc3QuY29tPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFNINCBKSVQgU1VQUE9S
VC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ0MzI5
CisKKyAgICAgICAgRW5hYmxlIEpJVCBzdXBwb3J0IGZvciBTSDQgcGxhdGZvcm1zLgorCisgICAg
ICAgICogY29uZmlndXJlLmFjOgorCiAyMDExLTA0LTA3ICBFcmljIFNlaWRlbCAgPGVyaWNAd2Vi
a2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBBZGFtIEJhcnRoLgpkaWZmIC0tZ2l0IGEv
Y29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCmluZGV4IDc1N2IxY2IuLjUyNzRmZjYgMTAwNjQ0
Ci0tLSBhL2NvbmZpZ3VyZS5hYworKysgYi9jb25maWd1cmUuYWMKQEAgLTgwNSw2ICs4MDUsMTIg
QEAgaWYgdGVzdCAiJGVuYWJsZV9qaXQiID0gInllcyI7IHRoZW4KICAgICAgICAgICAgICAgICA7
OwogICAgICAgICAgICAgZXNhYwogICAgICAgICA7OworICAgICAgICBzaDQpCisgICAgICAgICAg
ICBBQ19ERUZJTkUoW0VOQUJMRV9ZQVJSXSwgWzFdLCBbRGVmaW5lIHRvIGVuYWJsZSBZQVJSXSkK
KyAgICAgICAgICAgIEFDX0RFRklORShbRU5BQkxFX1lBUlJfSklUXSwgWzFdLCBbRGVmaW5lIHRv
IGVuYWJsZSBZQVJSIEpJVF0pCisgICAgICAgICAgICBBQ19ERUZJTkUoW0VOQUJMRV9KSVRdLCBb
MV0sIFtEZWZpbmUgdG8gZW5hYmxlIEpJVF0pCisgICAgICAgICAgICBBQ19ERUZJTkUoW1dURl9V
U0VfSklUX1NUVUJfQVJHVU1FTlRfUkVHSVNURVJdLCBbMV0sIFtVc2Ugc3R1YiByZWdpc3Rlcl0p
CisgICAgICAgIDs7CiAgICAgICAgICopCiAgICAgICAgICAgICBlbmFibGVfaml0PSJubyAoQ1BV
ICckaG9zdF9jcHUnIG5vdCBzdXBwb3J0ZWQpIgogICAgICAgICA7OwpAQCAtODc5LDYgKzg4NSwx
MSBAQCBjYXNlICIkd2l0aF9mb250X2JhY2tlbmQiIGluCiBlc2FjCiBBQ19NU0dfUkVTVUxUKFsk
d2l0aF9mb250X2JhY2tlbmRdKQogCitpZiB0ZXN0ICIkaG9zdF9jcHUiID0gInNoNCI7IHRoZW4K
KyAgIENYWEZMQUdTPSIkQ1hYRkxBR1MgLW1pZWVlIC13IgorICAgQ0ZMQUdTPSIkQ0ZMQUdTIC1t
aWVlZSAtdyIKK2ZpCisKICMgQWRkICctZycgZmxhZyB0byBnY2MgaWYgaXQncyBkZWJ1ZyBidWls
ZAogaWYgdGVzdCAiJGVuYWJsZV9kZWJ1ZyIgPSAieWVzIjsgdGhlbgogICAgQ1hYRkxBR1M9IiRD
WFhGTEFHUyAtZyIKLS0gCjEuNy4yLjMKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>88983</attachid>
            <date>2011-04-11 03:51:42 -0700</date>
            <delta_ts>2011-04-11 04:02:38 -0700</delta_ts>
            <desc>JIT remaining part for SH4 platforms.</desc>
            <filename>0001-JIT-remaining-parts-for-SH4.patch</filename>
            <type>text/plain</type>
            <size>19342</size>
            <attacher name="thouraya">thouraya.andolsi</attacher>
            
              <data encoding="base64">RnJvbSBlZTNkNDZkZjc3M2JkZjZiYWM3NGQxMTIyYzMxMTU5NDA5MTYxNTJkIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBUaG91cmF5YSBBTkRPTFNJIDx0aG91cmF5YS5hbmRvbHNpQHN0
LmNvbT4KRGF0ZTogTW9uLCAxMSBBcHIgMjAxMSAxMTo1MTo1NiArMDIwMApTdWJqZWN0OiBbUEFU
Q0hdIEpJVCByZW1haW5pbmcgcGFydHMgZm9yIFNINC4KCi0tLQogU291cmNlL0phdmFTY3JpcHRD
b3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgfCAgIDE4ICsrKysKIC4uLi9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJTSDQuaCAgIHwgICAgOCArKwogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaCAgICAgICAgICAgICAgICAgICAgfCAgIDQ4ICsrKysr
KysrKystCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZU1ldGhvZHMuaCAgICAg
ICB8ICAgMzcgKysrKysrKystCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMz
Ml82NC5jcHAgICAgICB8ICAgNDAgKysrKysrKysKIC4uLi9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
UHJvcGVydHlBY2Nlc3MzMl82NC5jcHAgIHwgICAgNCArLQogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRTdHVicy5jcHAgICAgICAgICAgICAgfCAgIDk1ICsrKysrKysrKysrKysrKysrKysr
CiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmggICAgICAgICAgICAgICB8ICAg
MjEgKysrKysKIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSlNJbnRlcmZhY2VKSVQuaCAgICAg
ICAgIHwgICAyNSArKysrKwogOSBmaWxlcyBjaGFuZ2VkLCAyOTEgaW5zZXJ0aW9ucygrKSwgNSBk
ZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9n
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA1NjljOWQyLi4zM2I5MWYy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMSBAQAorMjAxMS0wNC0xMSAg
VGhvdXJheWEgQU5ET0xTSSAgPHRob3VyYXlhLmFuZG9sc2lAc3QuY29tPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFNINCBKSVQgU1VQUE9SVC4KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ0MzI5CisKKyAg
ICAgICAgQWRkIEpJVCByZW1haW5pbmcgcGFydCBmb3IgU0g0IHBsYXRmb3Jtcy4KKworICAgICAg
ICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclNINC5oOgorICAgICAgICAqIGppdC9KSVQuaDoK
KyAgICAgICAgKiBqaXQvSklUSW5saW5lTWV0aG9kcy5oOgorICAgICAgICAqIGppdC9KSVRPcGNv
ZGVzMzJfNjQuY3BwOgorICAgICAgICAqIGppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcDoK
KyAgICAgICAgKiBqaXQvSklUU3R1YnMuY3BwOgorICAgICAgICAqIGppdC9KSVRTdHVicy5oOgor
ICAgICAgICAqIGppdC9KU0ludGVyZmFjZUpJVC5oOgorCiAyMDExLTA0LTEwICBHZW9mZnJleSBH
YXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CiAKICAgICAgICAgUnViYmVyLXN0YW1wZWQgYnkgQmV0
aCBEYWtpbi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFj
cm9Bc3NlbWJsZXJTSDQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9B
c3NlbWJsZXJTSDQuaAppbmRleCAwNGIwNjAyLi43ZTE1ZTZjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyU0g0LmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclNINC5oCkBAIC0xNjUxLDYg
KzE2NTEsMTQgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gQ2FsbChtX2Fzc2VtYmxlci5jYWxs
KHRhcmdldCksIENhbGw6Ok5vbmUpOwogICAgIH0KIAorICAgIHZvaWQgY2FsbChBZGRyZXNzIGFk
ZHJlc3MsIFJlZ2lzdGVySUQgdGFyZ2V0KQorICAgIHsKKyAgICAgICAgbG9hZDMyKGFkZHJlc3Mu
YmFzZSwgYWRkcmVzcy5vZmZzZXQsIHRhcmdldCk7CisgICAgICAgIG1fYXNzZW1ibGVyLmVuc3Vy
ZVNwYWNlKG1fYXNzZW1ibGVyLm1heEluc3RydWN0aW9uU2l6ZSArIDIpOworICAgICAgICBtX2Fz
c2VtYmxlci5icmFuY2goSlNSX09QQ09ERSwgdGFyZ2V0KTsKKyAgICAgICAgbV9hc3NlbWJsZXIu
bm9wKCk7CisgICAgfQorCiAgICAgdm9pZCBicmVha3BvaW50KCkKICAgICB7CiAgICAgICAgIG1f
YXNzZW1ibGVyLmJrcHQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklULmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCmluZGV4IDk5YzhjZDQuLjNk
ODdlNTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaApAQCAtNDczLDYgKzQ3Myw0OCBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldE1ldGhvZENo
ZWNrUHJvdG9TdHJ1Y3QgPSA1MjsKICAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNl
dE1ldGhvZENoZWNrUHV0RnVuY3Rpb24gPSA4NDsKICNlbmRpZgorI2VsaWYgQ1BVKFNINCkKKyAg
ICAgICAvLyBUaGVzZSBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgdmFsdWUgYXJlIHVzZWQgdG8gZW5h
YmxlIHBhdGNoaW5nIC0gc2VlIGNvbW1lbnQgb24gb3BfcHV0X2J5X2lkLgorICAgICAgICBzdGF0
aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0R2V0QnlJZFN0cnVjdHVyZSA9IDY7CisgICAgICAgIHN0
YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRQdXRCeUlkUHJvcGVydHlNYXBPZmZzZXQgPSAyNDsK
KyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldFB1dEJ5SWRTdHJ1Y3R1cmUgPSA2
OworICAgICAgICAvLyBUaGVzZSBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgdmFsdWUgYXJlIHVzZWQg
dG8gZW5hYmxlIHBhdGNoaW5nIC0gc2VlIGNvbW1lbnQgb24gb3BfZ2V0X2J5X2lkLgorICAgICAg
ICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0R2V0QnlJZEJyYW5jaFRvU2xvd0Nhc2UgPSAx
MDsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldEdldEJ5SWRQcm9wZXJ0eU1h
cE9mZnNldCA9IDI0OworICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0R2V0QnlJ
ZFB1dFJlc3VsdCA9IDMyOworCisgICAgICAgIC8vIHNlcXVlbmNlT3BDYWxsCisgICAgICAgIHN0
YXRpYyBjb25zdCBpbnQgc2VxdWVuY2VPcENhbGxJbnN0cnVjdGlvblNwYWNlID0gMTI7CisgICAg
ICAgIHN0YXRpYyBjb25zdCBpbnQgc2VxdWVuY2VPcENhbGxDb25zdGFudFNwYWNlID0gMjsKKyAg
ICAgICAgLy8gc2VxdWVuY2VNZXRob2RDaGVjaworICAgICAgICBzdGF0aWMgY29uc3QgaW50IHNl
cXVlbmNlTWV0aG9kQ2hlY2tJbnN0cnVjdGlvblNwYWNlID0gNDA7CisgICAgICAgIHN0YXRpYyBj
b25zdCBpbnQgc2VxdWVuY2VNZXRob2RDaGVja0NvbnN0YW50U3BhY2UgPSA2OworICAgICAgICAv
LyBzZXF1ZW5jZUdldEJ5SWRIb3RQYXRoCisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgc2VxdWVu
Y2VHZXRCeUlkSG90UGF0aEluc3RydWN0aW9uU3BhY2UgPSAzNjsKKyAgICAgICAgc3RhdGljIGNv
bnN0IGludCBzZXF1ZW5jZUdldEJ5SWRIb3RQYXRoQ29uc3RhbnRTcGFjZSA9IDU7CisgICAgICAg
IC8vIHNlcXVlbmNlR2V0QnlJZFNsb3dDYXNlCisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgc2Vx
dWVuY2VHZXRCeUlkU2xvd0Nhc2VJbnN0cnVjdGlvblNwYWNlID0gMjY7CisgICAgICAgIHN0YXRp
YyBjb25zdCBpbnQgc2VxdWVuY2VHZXRCeUlkU2xvd0Nhc2VDb25zdGFudFNwYWNlID0gMjsKKyAg
ICAgICAgLy8gc2VxdWVuY2VQdXRCeUlkCisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgc2VxdWVu
Y2VQdXRCeUlkSW5zdHJ1Y3Rpb25TcGFjZSA9IDM2OworICAgICAgICBzdGF0aWMgY29uc3QgaW50
IHNlcXVlbmNlUHV0QnlJZENvbnN0YW50U3BhY2UgPSA1OworCisgICAgICAgIHN0YXRpYyBjb25z
dCBpbnQgcGF0Y2hPZmZzZXRHZXRCeUlkUHJvcGVydHlNYXBPZmZzZXQxID0gMjA7CisgICAgICAg
IHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRHZXRCeUlkUHJvcGVydHlNYXBPZmZzZXQyID0g
MjY7CisKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldFB1dEJ5SWRQcm9wZXJ0
eU1hcE9mZnNldDEgPSAyMDsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldFB1
dEJ5SWRQcm9wZXJ0eU1hcE9mZnNldDIgPSAyNjsKKworI2lmIEVOQUJMRShPUENPREVfU0FNUExJ
TkcpCisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRHZXRCeUlkU2xvd0Nhc2VD
YWxsID0gMDsgLy8gRklNWEUKKyNlbHNlCisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hP
ZmZzZXRHZXRCeUlkU2xvd0Nhc2VDYWxsID0gMjI7CisjZW5kaWYKKyAgICAgICAgc3RhdGljIGNv
bnN0IGludCBwYXRjaE9mZnNldE9wQ2FsbENvbXBhcmVUb0p1bXAgPSA0OworCisgICAgICAgIHN0
YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRNZXRob2RDaGVja1Byb3RvT2JqID0gMTI7CisgICAg
ICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRNZXRob2RDaGVja1Byb3RvU3RydWN0ID0g
MjA7CisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRNZXRob2RDaGVja1B1dEZ1
bmN0aW9uID0gMzI7CiAjZWxzZQogI2Vycm9yICJKU1ZBTFVFMzJfNjQgbm90IHN1cHBvcnRlZCBv
biB0aGlzIHBsYXRmb3JtLiIKICNlbmRpZgpAQCAtNjY1LDE0ICs3MDcsMTYgQEAgbmFtZXNwYWNl
IEpTQyB7CiAKICNpZiAoZGVmaW5lZChBU1NFTUJMRVJfSEFTX0NPTlNUQU5UX1BPT0wpICYmIEFT
U0VNQkxFUl9IQVNfQ09OU1RBTlRfUE9PTCkKICNkZWZpbmUgQkVHSU5fVU5JTlRFUlJVUFRFRF9T
RVFVRU5DRShuYW1lKSBkbyB7IGJlZ2luVW5pbnRlcnJ1cHRlZFNlcXVlbmNlKG5hbWUgIyMgSW5z
dHJ1Y3Rpb25TcGFjZSwgbmFtZSAjIyBDb25zdGFudFNwYWNlKTsgfSB3aGlsZSAoZmFsc2UpCi0j
ZGVmaW5lIEVORF9VTklOVEVSUlVQVEVEX1NFUVVFTkNFKG5hbWUpIGRvIHsgZW5kVW5pbnRlcnJ1
cHRlZFNlcXVlbmNlKG5hbWUgIyMgSW5zdHJ1Y3Rpb25TcGFjZSwgbmFtZSAjIyBDb25zdGFudFNw
YWNlKTsgfSB3aGlsZSAoZmFsc2UpCisjZGVmaW5lIEVORF9VTklOVEVSUlVQVEVEX1NFUVVFTkNF
X0ZPUl9QVVQobmFtZSwgZHN0KSBkbyB7IGVuZFVuaW50ZXJydXB0ZWRTZXF1ZW5jZShuYW1lICMj
IEluc3RydWN0aW9uU3BhY2UsIG5hbWUgIyMgQ29uc3RhbnRTcGFjZSwgZHN0KTsgfSB3aGlsZSAo
ZmFsc2UpCisjZGVmaW5lIEVORF9VTklOVEVSUlVQVEVEX1NFUVVFTkNFKG5hbWUpIEVORF9VTklO
VEVSUlVQVEVEX1NFUVVFTkNFX0ZPUl9QVVQobmFtZSwgMCkKIAogICAgICAgICB2b2lkIGJlZ2lu
VW5pbnRlcnJ1cHRlZFNlcXVlbmNlKGludCwgaW50KTsKLSAgICAgICAgdm9pZCBlbmRVbmludGVy
cnVwdGVkU2VxdWVuY2UoaW50LCBpbnQpOworICAgICAgICB2b2lkIGVuZFVuaW50ZXJydXB0ZWRT
ZXF1ZW5jZShpbnQsIGludCwgaW50KTsKIAogI2Vsc2UKICNkZWZpbmUgQkVHSU5fVU5JTlRFUlJV
UFRFRF9TRVFVRU5DRShuYW1lKSAgZG8geyBiZWdpblVuaW50ZXJydXB0ZWRTZXF1ZW5jZSgpOyB9
IHdoaWxlIChmYWxzZSkKICNkZWZpbmUgRU5EX1VOSU5URVJSVVBURURfU0VRVUVOQ0UobmFtZSkg
IGRvIHsgZW5kVW5pbnRlcnJ1cHRlZFNlcXVlbmNlKCk7IH0gd2hpbGUgKGZhbHNlKQorI2RlZmlu
ZSBFTkRfVU5JTlRFUlJVUFRFRF9TRVFVRU5DRV9GT1JfUFVUKG5hbWUsIGRzdCkgZG8geyBlbmRV
bmludGVycnVwdGVkU2VxdWVuY2UoKTsgfSB3aGlsZSAoZmFsc2UpCiAjZW5kaWYKIAogICAgICAg
ICB2b2lkIGVtaXRfb3BfYWRkKEluc3RydWN0aW9uKik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVElubGluZU1ldGhvZHMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUSW5saW5lTWV0aG9kcy5oCmluZGV4IDlhZmFmMWEuLjQyNDhhN2IgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lTWV0aG9kcy5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lTWV0aG9kcy5oCkBAIC0xMjMsNiArMTIz
LDEzIEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmJlZ2luVW5pbnRlcnJ1cHRlZFNlcXVlbmNl
KGludCBpbnNuU3BhY2UsIGludCBjb25zdFNwYWNlCiAKICAgICBlbnN1cmVTcGFjZShpbnNuU3Bh
Y2UsIGNvbnN0U3BhY2UpOwogCisjZWxpZiBDUFUoU0g0KQorI2lmbmRlZiBOREVCVUcKKyAgICBp
bnNuU3BhY2UgKz0gc2l6ZW9mKFNINFdvcmQpOworICAgIGNvbnN0U3BhY2UgKz0gc2l6ZW9mKHVp
bnQ2NF90KTsKKyNlbmRpZgorCisgICAgbV9hc3NlbWJsZXIuZW5zdXJlU3BhY2UoaW5zblNwYWNl
ICsgbV9hc3NlbWJsZXIubWF4SW5zdHJ1Y3Rpb25TaXplICsgMiwgY29uc3RTcGFjZSArIDgpOwog
I2VuZGlmCiAKICNpZiBkZWZpbmVkKEFTU0VNQkxFUl9IQVNfQ09OU1RBTlRfUE9PTCkgJiYgQVNT
RU1CTEVSX0hBU19DT05TVEFOVF9QT09MCkBAIC0xMzMsOCArMTQwLDkgQEAgQUxXQVlTX0lOTElO
RSB2b2lkIEpJVDo6YmVnaW5VbmludGVycnVwdGVkU2VxdWVuY2UoaW50IGluc25TcGFjZSwgaW50
IGNvbnN0U3BhY2UKICNlbmRpZgogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbmRVbmlu
dGVycnVwdGVkU2VxdWVuY2UoaW50IGluc25TcGFjZSwgaW50IGNvbnN0U3BhY2UpCitBTFdBWVNf
SU5MSU5FIHZvaWQgSklUOjplbmRVbmludGVycnVwdGVkU2VxdWVuY2UoaW50IGluc25TcGFjZSwg
aW50IGNvbnN0U3BhY2UgLGludCBkc3QpCiB7CisgICAgVU5VU0VEX1BBUkFNKGRzdCk7CiAjaWYg
ZGVmaW5lZChBU1NFTUJMRVJfSEFTX0NPTlNUQU5UX1BPT0wpICYmIEFTU0VNQkxFUl9IQVNfQ09O
U1RBTlRfUE9PTAogICAgIC8qIFRoZXJlIGFyZSBzZXZlcmFsIGNhc2VzIHdoZW4gdGhlIHVuaW50
ZXJydXB0ZWQgc2VxdWVuY2UgaXMgbGFyZ2VyIHRoYW4KICAgICAgKiBtYXhpbXVtIHJlcXVpcmVk
IG9mZnNldCBmb3IgcGF0aGluZyB0aGUgc2FtZSBzZXF1ZW5jZS4gRWcuOiBpZiBpbiBhCkBAIC0x
NDMsNiArMTUxLDE1IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVuZFVuaW50ZXJydXB0ZWRT
ZXF1ZW5jZShpbnQgaW5zblNwYWNlLCBpbnQgY29uc3RTcGFjZSkKICAgICAgKiBjYWxjdWxhdGlv
biBvZiBsZW5ndGggb2YgdW5pbnRlcnJ1cHRlZCBzZXF1ZW5jZS4gU28sIHRoZSBpbnNuU3BhY2Ug
YW5kCiAgICAgICogY29uc3RTcGFjZSBzaG91bGQgYmUgdXBwZXIgbGltaXQgaW5zdGVhZCBvZiBo
YXJkIGxpbWl0LgogICAgICAqLworI2lmIENQVShTSDQpCisgICAgaWYgKChkc3QgPiAxNSkgfHwg
KGRzdCA8IC0xNikpIHsKKyAgICAgICAgaW5zblNwYWNlICs9IDg7CisgICAgICAgIGNvbnN0U3Bh
Y2UgKz0gMjsKKyAgICB9CisKKyAgICBpZiAoKChkc3QgPj0gLTE2KSAmJiAoZHN0IDwgMCkpIHx8
ICgoZHN0ID4gNykgJiYgKGRzdCA8PSAxNSkpKQorICAgICAgICBpbnNuU3BhY2UgKz0gODsKKyNl
bmRpZgogICAgIEFTU0VSVChkaWZmZXJlbmNlQmV0d2VlbihtX3VuaW50ZXJydXB0ZWRJbnN0cnVj
dGlvblNlcXVlbmNlQmVnaW4sIGxhYmVsKCkpIDw9IGluc25TcGFjZSk7CiAgICAgQVNTRVJUKHNp
emVPZkNvbnN0YW50UG9vbCgpIC0gbV91bmludGVycnVwdGVkQ29uc3RhbnRTZXF1ZW5jZUJlZ2lu
IDw9IGNvbnN0U3BhY2UpOwogI2VuZGlmCkBAIC0xNjcsNiArMTg0LDIyIEBAIEFMV0FZU19JTkxJ
TkUgdm9pZCBKSVQ6OnJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKEFkZHJlc3MgYWRk
cmVzcykKIHsKICAgICBsb2FkUHRyKGFkZHJlc3MsIGxpbmtSZWdpc3Rlcik7CiB9CisjZWxpZiBD
UFUoU0g0KQorCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpwcmVzZXJ2ZVJldHVybkFkZHJlc3NB
ZnRlckNhbGwoUmVnaXN0ZXJJRCByZWcpCit7CisgICAgbV9hc3NlbWJsZXIuc3RzcHIocmVnKTsK
K30KKworQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6cmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVS
ZXR1cm4oUmVnaXN0ZXJJRCByZWcpCit7CisgICAgbV9hc3NlbWJsZXIubGRzcHIocmVnKTsKK30K
KworQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6cmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1
cm4oQWRkcmVzcyBhZGRyZXNzKQoreworICAgIGxvYWRQdHJMaW5rUmVnKGFkZHJlc3MpOworfQog
CiAjZWxpZiBDUFUoTUlQUykKIApAQCAtMjE3LDYgKzI1MCw4IEBAIEFMV0FZU19JTkxJTkUgdm9p
ZCBKSVQ6OnJlc3RvcmVBcmd1bWVudFJlZmVyZW5jZUZvclRyYW1wb2xpbmUoKQogICAgIGFkZFB0
cihUcnVzdGVkSW1tMzIoc2l6ZW9mKHZvaWQqKSksIHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBmaXJz
dEFyZ3VtZW50UmVnaXN0ZXIpOwogI2VsaWYgQ1BVKEFSTSkKICAgICBtb3ZlKHN0YWNrUG9pbnRl
clJlZ2lzdGVyLCBmaXJzdEFyZ3VtZW50UmVnaXN0ZXIpOworI2VsaWYgQ1BVKFNINCkKKyAgICBt
b3ZlKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBmaXJzdEFyZ3VtZW50UmVnaXN0ZXIpOwogI2VuZGlm
CiAgICAgLy8gSW4gdGhlIHRyYW1wb2xpbmUgb24geDg2LTY0LCB0aGUgZmlyc3QgYXJndW1lbnQg
cmVnaXN0ZXIgaXMgbm90IG92ZXJ3cml0dGVuLgogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCmluZGV4IGUyZDg1NDguLmVkY2UyMWMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAKQEAgLTI0NSw3ICsy
NDUsMjYgQEAgSklUOjpMYWJlbCBKSVQ6OnByaXZhdGVDb21waWxlQ1RJTmF0aXZlQ2FsbChKU0ds
b2JhbERhdGEqIGdsb2JhbERhdGEsIGJvb2wgaXNDb24KICAgICBjYWxsKEFkZHJlc3MocmVnVDIs
IGV4ZWN1dGFibGVPZmZzZXRUb0Z1bmN0aW9uKSk7CiAKICAgICByZXN0b3JlUmV0dXJuQWRkcmVz
c0JlZm9yZVJldHVybihyZWdUMyk7CisjZWxpZiBDUFUoU0g0KQorICAgIC8vIExvYWQgY2FsbGVy
IGZyYW1lJ3Mgc2NvcGUgY2hhaW4gaW50byB0aGlzIGNhbGxmcmFtZSBzbyB0aGF0IHdoYXRldmVy
IHdlIGNhbGwgY2FuCisgICAgLy8gZ2V0IHRvIGl0cyBnbG9iYWwgZGF0YS4KKyAgICBlbWl0R2V0
RnJvbUNhbGxGcmFtZUhlYWRlclB0cihSZWdpc3RlckZpbGU6OkNhbGxlckZyYW1lLCByZWdUMik7
CisgICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoUmVnaXN0ZXJGaWxlOjpTY29wZUNo
YWluLCByZWdUMSwgcmVnVDIpOworICAgIGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihyZWdUMSwg
UmVnaXN0ZXJGaWxlOjpTY29wZUNoYWluKTsKKworICAgIHByZXNlcnZlUmV0dXJuQWRkcmVzc0Fm
dGVyQ2FsbChyZWdUMyk7IC8vIENhbGxlZSBwcmVzZXJ2ZWQKKyAgICBlbWl0UHV0VG9DYWxsRnJh
bWVIZWFkZXIocmVnVDMsIFJlZ2lzdGVyRmlsZTo6UmV0dXJuUEMpOwogCisgICAgLy8gQ2FsbGlu
ZyBjb252ZW50aW9uOiBmKHIwID09IHJlZ1Q0LCByMSA9PSByZWdUNSwgLi4uKTsKKyAgICAvLyBI
b3N0IGZ1bmN0aW9uIHNpZ25hdHVyZTogZihFeGVjU3RhdGUqKTsKKyAgICBtb3ZlKGNhbGxGcmFt
ZVJlZ2lzdGVyLCByZWdUNCk7CisKKyAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihS
ZWdpc3RlckZpbGU6OkNhbGxlZSwgcmVnVDUpOworICAgIG1vdmUocmVnVDIsIGNhbGxGcmFtZVJl
Z2lzdGVyKTsgLy8gRWFnZXJseSByZXN0b3JlIGNhbGxlciBmcmFtZSByZWdpc3RlciB0byBhdm9p
ZCBsb2FkaW5nIGZyb20gc3RhY2suCisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1Q1LCBPQkpFQ1Rf
T0ZGU0VUT0YoSlNGdW5jdGlvbiwgbV9leGVjdXRhYmxlKSksIHJlZ1QyKTsKKworICAgIGNhbGwo
QWRkcmVzcyhyZWdUMiwgZXhlY3V0YWJsZU9mZnNldFRvRnVuY3Rpb24pLCByZWdUMCk7CisgICAg
cmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4ocmVnVDMpOwogI2VsaWYgQ1BVKE1JUFMp
CiAgICAgLy8gTG9hZCBjYWxsZXIgZnJhbWUncyBzY29wZSBjaGFpbiBpbnRvIHRoaXMgY2FsbGZy
YW1lIHNvIHRoYXQgd2hhdGV2ZXIgd2UgY2FsbCBjYW4KICAgICAvLyBnZXQgdG8gaXRzIGdsb2Jh
bCBkYXRhLgpAQCAtMzk0LDcgKzQxMywyOCBAQCBKSVQ6OkNvZGVQdHIgSklUOjpwcml2YXRlQ29t
cGlsZUNUSU5hdGl2ZUNhbGwoUGFzc1JlZlB0cjxFeGVjdXRhYmxlUG9vbD4gZXhlY3V0YQogICAg
IGFkZFB0cihUcnVzdGVkSW1tMzIoMTYpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAKICAgICBy
ZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihyZWdUMyk7CisjZWxpZiBDUFUoU0g0KQor
ICAgIC8vIExvYWQgY2FsbGVyIGZyYW1lJ3Mgc2NvcGUgY2hhaW4gaW50byB0aGlzIGNhbGxmcmFt
ZSBzbyB0aGF0IHdoYXRldmVyIHdlIGNhbGwgY2FuCisgICAgLy8gZ2V0IHRvIGl0cyBnbG9iYWwg
ZGF0YS4KKyAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihSZWdpc3RlckZpbGU6OkNh
bGxlckZyYW1lLCByZWdUMik7CisgICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoUmVn
aXN0ZXJGaWxlOjpTY29wZUNoYWluLCByZWdUMSwgcmVnVDIpOworICAgIGVtaXRQdXRUb0NhbGxG
cmFtZUhlYWRlcihyZWdUMSwgUmVnaXN0ZXJGaWxlOjpTY29wZUNoYWluKTsKKworICAgIHByZXNl
cnZlUmV0dXJuQWRkcmVzc0FmdGVyQ2FsbChyZWdUMyk7IC8vIENhbGxlZSBwcmVzZXJ2ZWQKKyAg
ICBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIocmVnVDMsIFJlZ2lzdGVyRmlsZTo6UmV0dXJuUEMp
OworCisgICAgLy8gQ2FsbGluZyBjb252ZW50aW9uOiBmKHIwID09IHJlZ1Q0LCByMSA9PSByZWdU
NSwgLi4uKTsKKyAgICAvLyBIb3N0IGZ1bmN0aW9uIHNpZ25hdHVyZTogZihFeGVjU3RhdGUqKTsK
KyAgICBtb3ZlKGNhbGxGcmFtZVJlZ2lzdGVyLCByZWdUNCk7CiAKKyAgICBlbWl0R2V0RnJvbUNh
bGxGcmFtZUhlYWRlclB0cihSZWdpc3RlckZpbGU6OkNhbGxlZSwgcmVnVDUpOworICAgIG1vdmUo
cmVnVDIsIGNhbGxGcmFtZVJlZ2lzdGVyKTsgLy8gRWFnZXJseSByZXN0b3JlIGNhbGxlciBmcmFt
ZSByZWdpc3RlciB0byBhdm9pZCBsb2FkaW5nIGZyb20gc3RhY2suCisgICAgbG9hZFB0cihBZGRy
ZXNzKHJlZ1Q1LCBPQkpFQ1RfT0ZGU0VUT0YoSlNGdW5jdGlvbiwgbV9leGVjdXRhYmxlKSksIHJl
Z1QyKTsKKworICAgIC8vIGNhbGwgdGhlIGZ1bmN0aW9uCisgICAgbmF0aXZlQ2FsbCA9IGNhbGwo
KTsKKworICAgIHJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKHJlZ1QzKTsKICNlbGlm
IEVOQUJMRShKSVRfT1BUSU1JWkVfTkFUSVZFX0NBTEwpCiAjZXJyb3IgIkpJVF9PUFRJTUlaRV9O
QVRJVkVfQ0FMTCBub3QgeWV0IHN1cHBvcnRlZCBvbiB0aGlzIHBsYXRmb3JtLiIKICNlbHNlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJf
NjQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0
LmNwcAppbmRleCAyYTQ3ZTVjLi45Mzc5ZjdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAKQEAgLTQ3NSw3ICs0NzUsNyBA
QCB2b2lkIEpJVDo6Y29tcGlsZUdldEJ5SWRTbG93Q2FzZShpbnQgZHN0LCBpbnQgYmFzZSwgSWRl
bnRpZmllciogaWRlbnQsIFZlY3RvcjxTbAogICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KFRydXN0
ZWRJbW1QdHIoaWRlbnQpKTsKICAgICBDYWxsIGNhbGwgPSBzdHViQ2FsbC5jYWxsKGRzdCk7CiAg
ICAgCi0gICAgRU5EX1VOSU5URVJSVVBURURfU0VRVUVOQ0Uoc2VxdWVuY2VHZXRCeUlkU2xvd0Nh
c2UpOworICAgIEVORF9VTklOVEVSUlVQVEVEX1NFUVVFTkNFX0ZPUl9QVVQoc2VxdWVuY2VHZXRC
eUlkU2xvd0Nhc2UsIGRzdCk7CiAgICAgCiAgICAgQVNTRVJUX0pJVF9PRkZTRVQoZGlmZmVyZW5j
ZUJldHdlZW4oY29sZFBhdGhCZWdpbiwgY2FsbCksIHBhdGNoT2Zmc2V0R2V0QnlJZFNsb3dDYXNl
Q2FsbCk7CiAgICAgCkBAIC02MjQsNyArNjI0LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxl
UHV0QnlJZFRyYW5zaXRpb24oU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBTdHJ1Y3R1cmUK
ICAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIEFic29sdXRlQWRkcmVzcyhuZXdTdHJ1Y3R1cmUt
PmFkZHJlc3NPZkNvdW50KCkpKTsKICAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKG5ld1N0cnVj
dHVyZSksIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpKTsKICAgICAK
LSNpZiBDUFUoTUlQUykKKyNpZiBDUFUoTUlQUykgfHwgQ1BVKFNINCkKICAgICAvLyBGb3IgTUlQ
Uywgd2UgZG9uJ3QgYWRkIHNpemVvZih2b2lkKikgdG8gdGhlIHN0YWNrIG9mZnNldC4KICAgICBs
b2FkMzIoQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3RlciwgT0JKRUNUX09GRlNFVE9GKEpJVFN0
YWNrRnJhbWUsIGFyZ3NbMl0pICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBh
eWxvYWQpKSwgcmVnVDMpOwogICAgIGxvYWQzMihBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVy
LCBPQkpFQ1RfT0ZGU0VUT0YoSklUU3RhY2tGcmFtZSwgYXJnc1syXSkgKyBPQkpFQ1RfT0ZGU0VU
T0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksIHJlZ1QyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRTdHVicy5jcHAKaW5kZXggNDRjYTg2Ny4uOTIyYmQ1OSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRTdHVicy5jcHAKQEAgLTMxNCw3ICszMTQsNzkgQEAgZXh0ZXJuICJDIiB7CiAj
ZGVmaW5lIEVOQUJMRV9QUk9GSUxFUl9SRUZFUkVOQ0VfT0ZGU0VUIDk2CiAjZGVmaW5lIEdMT0JB
TF9EQVRBX09GRlNFVCAgICAgICAgIDEwMAogI2RlZmluZSBTVEFDS19MRU5HVEggICAgICAgICAg
ICAgICAxMDQKKyNlbGlmIENQVShTSDQpCisjZGVmaW5lIFNZTUJPTF9TVFJJTkcobmFtZSkgI25h
bWUKKy8qIGNvZGUgKHI0KSwgUmVnaXN0ZXJGaWxlKiAocjUpLCBDYWxsRnJhbWUqIChyNiksIEpT
VmFsdWUqIGV4Y2VwdGlvbiAocjcpLCBQcm9maWxlcioqKHNwKSwgSlNHbG9iYWxEYXRhIChzcCkq
LwogCithc20gdm9sYXRpbGUgKAorIi50ZXh0XG4iCisiLmdsb2JsICIgU1lNQk9MX1NUUklORyhj
dGlUcmFtcG9saW5lKSAiXG4iCitISURFX1NZTUJPTChjdGlUcmFtcG9saW5lKSAiXG4iCitTWU1C
T0xfU1RSSU5HKGN0aVRyYW1wb2xpbmUpICI6IiAiXG4iCisgICAgIm1vdi5sIHI3LCBALXIxNSIg
IlxuIgorICAgICJtb3YubCByNiwgQC1yMTUiICJcbiIKKyAgICAibW92LmwgcjUsIEAtcjE1IiAi
XG4iCisgICAgIm1vdi5sIHI4LCBALXIxNSIgIlxuIgorICAgICJtb3YgIzEyNywgcjgiICJcbiIK
KyAgICAibW92LmwgcjE0LCBALXIxNSIgIlxuIgorICAgICJzdHMubCBwciwgQC1yMTUiICJcbiIK
KyAgICAibW92LmwgcjEzLCBALXIxNSIgIlxuIgorICAgICJtb3YubCByMTEsIEAtcjE1IiAiXG4i
CisgICAgIm1vdi5sIHIxMCwgQC1yMTUiICJcbiIKKyAgICAiYWRkICMtNjAsIHIxNSIgIlxuIgor
ICAgICJtb3YgcjYsIHIxNCIgIlxuIgorICAgICJqc3IgQHI0IiAiXG4iCisgICAgIm5vcCIgIlxu
IgorICAgICJhZGQgIzYwLCByMTUiICJcbiIKKyAgICAibW92LmwgQHIxNSsscjEwIiAiXG4iCisg
ICAgIm1vdi5sIEByMTUrLHIxMSIgIlxuIgorICAgICJtb3YubCBAcjE1KyxyMTMiICJcbiIKKyAg
ICAibGRzLmwgQHIxNSsscHIiICJcbiIKKyAgICAibW92LmwgQHIxNSsscjE0IiAiXG4iCisgICAg
Im1vdi5sIEByMTUrLHI4IiAiXG4iCisgICAgImFkZCAjMTIsIHIxNSIgIlxuIgorICAgICJydHMi
ICJcbiIKKyAgICAibm9wIiAiXG4iCispOworCithc20gdm9sYXRpbGUgKAorIi5nbG9ibCAiIFNZ
TUJPTF9TVFJJTkcoY3RpVk1UaHJvd1RyYW1wb2xpbmUpICJcbiIKK0hJREVfU1lNQk9MKGN0aVZN
VGhyb3dUcmFtcG9saW5lKSAiXG4iCitTWU1CT0xfU1RSSU5HKGN0aVZNVGhyb3dUcmFtcG9saW5l
KSAiOiIgIlxuIgorICAgICJtb3YubCAuTDIiU1lNQk9MX1NUUklORyhjdGlfdm1fdGhyb3cpIixy
MCIgIlxuIgorICAgICJtb3YgcjE1LCByNCIgIlxuIgorICAgICJtb3YubCBAKHIwLHIxMikscjEx
IiAiXG4iCisgICAgImpzciBAcjExIiAiXG4iCisgICAgIm5vcCIgIlxuIgorICAgICJhZGQgIzYw
LCByMTUiICJcbiIKKyAgICAibW92LmwgQHIxNSsscjEwIiAiXG4iCisgICAgIm1vdi5sIEByMTUr
LHIxMSIgIlxuIgorICAgICJtb3YubCBAcjE1KyxyMTMiICJcbiIKKyAgICAibGRzLmwgQHIxNSss
cHIiICJcbiIKKyAgICAibW92LmwgQHIxNSsscjE0IiAiXG4iCisgICAgIm1vdi5sIEByMTUrLHI4
IiAiXG4iCisgICAgImFkZCAjMTIsIHIxNSIgIlxuIgorICAgICJydHMiICJcbiIKKyAgICAibm9w
IiAiXG4iCisgICAgIi5hbGlnbiAyIiAiXG4iCisgICAgIi5MMiJTWU1CT0xfU1RSSU5HKGN0aV92
bV90aHJvdykiOi5sb25nICIgU1lNQk9MX1NUUklORyhjdGlfdm1fdGhyb3cpIkBHT1QgXG4iCisp
OworCithc20gdm9sYXRpbGUgKAorIi5nbG9ibCAiIFNZTUJPTF9TVFJJTkcoY3RpT3BUaHJvd05v
dENhdWdodCkgIlxuIgorSElERV9TWU1CT0woY3RpT3BUaHJvd05vdENhdWdodCkgIlxuIgorU1lN
Qk9MX1NUUklORyhjdGlPcFRocm93Tm90Q2F1Z2h0KSAiOiIgIlxuIgorICAgICJhZGQgIzYwLCBy
MTUiICJcbiIKKyAgICAibW92LmwgQHIxNSsscjEwIiAiXG4iCisgICAgIm1vdi5sIEByMTUrLHIx
MSIgIlxuIgorICAgICJtb3YubCBAcjE1KyxyMTMiICJcbiIKKyAgICAibGRzLmwgQHIxNSsscHIi
ICJcbiIKKyAgICAibW92LmwgQHIxNSsscjE0IiAiXG4iCisgICAgIm1vdi5sIEByMTUrLHI4IiAi
XG4iCisgICAgImFkZCAjMTIsIHIxNSIgIlxuIgorICAgICJydHMiICJcbiIKKyAgICAibm9wIiAi
XG4iCispOwogI2Vsc2UKICAgICAjZXJyb3IgIkpJVCBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgcGxh
dGZvcm0uIgogI2VuZGlmCkBAIC0xMTU2LDYgKzEyMjgsMjkgQEAgTVNWQygpCiBNU1ZDX0VORCgg
ICAgRU5EKQogKi8KIAorI2VsaWYgQ1BVKFNINCkKKyNkZWZpbmUgREVGSU5FX1NUVUJfRlVOQ1RJ
T04ocnR5cGUsIG9wKSBcCisgICAgZXh0ZXJuICJDIiB7IFwKKyAgICAgICAgcnR5cGUgSklUU3R1
YlRodW5rZWRfIyNvcChTVFVCX0FSR1NfREVDTEFSQVRJT04pOyBcCisgICAgfTsgXAorICAgIGFz
bSB2b2xhdGlsZSggXAorICAgICIuYWxpZ24gMiIgIlxuIiBcCisgICAgIi5nbG9ibCAiIFNZTUJP
TF9TVFJJTkcoY3RpXyMjb3ApICJcbiIgXAorICAgIFNZTUJPTF9TVFJJTkcoY3RpXyMjb3ApICI6
IiAiXG4iIFwKKyAgICAic3RzIHByLCByMTEiICJcbiIgXAorICAgICJtb3YubCByMTEsIEAoMHgz
OCwgcjE1KSIgIlxuIiBcCisgICAgIm1vdi5sIC5MMiJTWU1CT0xfU1RSSU5HKEpJVFN0dWJUaHVu
a2VkXyMjb3ApIixyMCIgIlxuIiBcCisgICAgIm1vdi5sIEAocjAscjEyKSxyMTEiICJcbiIgXAor
ICAgICJqc3IgQHIxMSIgIlxuIiBcCisgICAgIm5vcCIgIlxuIiBcCisgICAgIm1vdi5sIEAoMHgz
OCwgcjE1KSwgcjExICIgIlxuIiBcCisgICAgImxkcyByMTEsIHByICIgIlxuIiBcCisgICAgInJ0
cyIgIlxuIiBcCisgICAgIm5vcCIgIlxuIiBcCisgICAgIi5hbGlnbiAyIiAiXG4iIFwKKyAgICAi
LkwyIlNZTUJPTF9TVFJJTkcoSklUU3R1YlRodW5rZWRfIyNvcCkiOi5sb25nICIgU1lNQk9MX1NU
UklORyhKSVRTdHViVGh1bmtlZF8jI29wKSJAR09UIFxuIiBcCisgICAgKTsgXAorICAgIHJ0eXBl
IEpJVFN0dWJUaHVua2VkXyMjb3AoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKQogI2Vsc2UKICNkZWZp
bmUgREVGSU5FX1NUVUJfRlVOQ1RJT04ocnR5cGUsIG9wKSBydHlwZSBKSVRfU1RVQiBjdGlfIyNv
cChTVFVCX0FSR1NfREVDTEFSQVRJT04pCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
U3R1YnMuaAppbmRleCA2MTBhZTNmLi43YzY3ZjZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVFN0dWJzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRTdHVicy5oCkBAIC0yMjksNiArMjI5LDI3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAg
IFJldHVybkFkZHJlc3NQdHIqIHJldHVybkFkZHJlc3NTbG90KCkgeyByZXR1cm4gJnRodW5rUmV0
dXJuQWRkcmVzczsgfQogICAgIH07CisjZWxpZiBDUFUoU0g0KQorICAgIHN0cnVjdCBKSVRTdGFj
a0ZyYW1lIHsKKyAgICAgICAgSklUU3R1YkFyZyBwYWRkaW5nOyAvLyBVbnVzZWQKKyAgICAgICAg
SklUU3R1YkFyZyBhcmdzWzZdOworCisgICAgICAgIFJldHVybkFkZHJlc3NQdHIgdGh1bmtSZXR1
cm5BZGRyZXNzOworICAgICAgICB2b2lkKiBzYXZlZFIxMDsKKyAgICAgICAgdm9pZCogc2F2ZWRS
MTE7CisgICAgICAgIHZvaWQqIHNhdmVkUjEzOworICAgICAgICB2b2lkKiBzYXZlZFJQUjsKKyAg
ICAgICAgdm9pZCogc2F2ZWRSMTQ7CisgICAgICAgIHZvaWQqIHNhdmVkVGltZW91dFJlZzsKKwor
ICAgICAgICBSZWdpc3RlckZpbGUqIHJlZ2lzdGVyRmlsZTsKKyAgICAgICAgQ2FsbEZyYW1lKiBj
YWxsRnJhbWU7CisgICAgICAgIEpTVmFsdWUqIGV4Y2VwdGlvbjsKKyAgICAgICAgUHJvZmlsZXIq
KiBlbmFibGVkUHJvZmlsZXJSZWZlcmVuY2U7CisgICAgICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFs
RGF0YTsKKworICAgICAgICBSZXR1cm5BZGRyZXNzUHRyKiByZXR1cm5BZGRyZXNzU2xvdCgpIHsg
cmV0dXJuICZ0aHVua1JldHVybkFkZHJlc3M7IH0KKyAgICB9OwogI2Vsc2UKICNlcnJvciAiSklU
U3RhY2tGcmFtZSBub3QgZGVmaW5lZCBmb3IgdGhpcyBwbGF0Zm9ybS4iCiAjZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSlNJbnRlcmZhY2VKSVQuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSlNJbnRlcmZhY2VKSVQuaAppbmRleCA4NTJlMDFhLi4wNzIx
OGMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pTSW50ZXJmYWNlSklU
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KU0ludGVyZmFjZUpJVC5oCkBAIC0x
NTQsNiArMTU0LDMxIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdGF0aWMgY29uc3QgRlBS
ZWdpc3RlcklEIGZwUmVnVDEgPSBNSVBTUmVnaXN0ZXJzOjpmNjsKICAgICAgICAgc3RhdGljIGNv
bnN0IEZQUmVnaXN0ZXJJRCBmcFJlZ1QyID0gTUlQU1JlZ2lzdGVyczo6Zjg7CiAgICAgICAgIHN0
YXRpYyBjb25zdCBGUFJlZ2lzdGVySUQgZnBSZWdUMyA9IE1JUFNSZWdpc3RlcnM6OmYxMDsKKyNl
bGlmIENQVShTSDQpCisgICAgICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIHRpbWVvdXRDaGVj
a1JlZ2lzdGVyID0gU0g0UmVnaXN0ZXJzOjpyODsKKyAgICAgICAgc3RhdGljIGNvbnN0IFJlZ2lz
dGVySUQgY2FsbEZyYW1lUmVnaXN0ZXIgPSBTSDRSZWdpc3RlcnM6OmZwOworCisgICAgICAgIHN0
YXRpYyBjb25zdCBSZWdpc3RlcklEIHJlZ1QwID0gU0g0UmVnaXN0ZXJzOjpyMDsKKyAgICAgICAg
c3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgcmVnVDEgPSBTSDRSZWdpc3RlcnM6OnIxOworICAgICAg
ICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCByZWdUMiA9IFNINFJlZ2lzdGVyczo6cjI7CisgICAg
ICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIHJlZ1QzID0gU0g0UmVnaXN0ZXJzOjpyMTA7Cisg
ICAgICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIHJlZ1Q0ID0gU0g0UmVnaXN0ZXJzOjpyNDsK
KyAgICAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgcmVnVDUgPSBTSDRSZWdpc3RlcnM6OnI1
OworICAgICAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCByZWdUNiA9IFNINFJlZ2lzdGVyczo6
cjY7CisgICAgICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIHJlZ1Q3ID0gU0g0UmVnaXN0ZXJz
OjpyNzsKKyAgICAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgZmlyc3RBcmd1bWVudFJlZ2lz
dGVyID1yZWdUNDsKKworICAgICAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCByZXR1cm5WYWx1
ZVJlZ2lzdGVyID0gU0g0UmVnaXN0ZXJzOjpyMDsKKyAgICAgICAgc3RhdGljIGNvbnN0IFJlZ2lz
dGVySUQgY2FjaGVkUmVzdWx0UmVnaXN0ZXIgPSBTSDRSZWdpc3RlcnM6OnIwOworCisgICAgICAg
IHN0YXRpYyBjb25zdCBGUFJlZ2lzdGVySUQgZnBSZWdUMCAgPSBTSDRSZWdpc3RlcnM6OmZyMDsK
KyAgICAgICAgc3RhdGljIGNvbnN0IEZQUmVnaXN0ZXJJRCBmcFJlZ1QxICA9IFNINFJlZ2lzdGVy
czo6ZnIyOworICAgICAgICBzdGF0aWMgY29uc3QgRlBSZWdpc3RlcklEIGZwUmVnVDIgID0gU0g0
UmVnaXN0ZXJzOjpmcjQ7CisgICAgICAgIHN0YXRpYyBjb25zdCBGUFJlZ2lzdGVySUQgZnBSZWdU
MyAgPSBTSDRSZWdpc3RlcnM6OmZyNjsKKyAgICAgICAgc3RhdGljIGNvbnN0IEZQUmVnaXN0ZXJJ
RCBmcFJlZ1Q0ICA9IFNINFJlZ2lzdGVyczo6ZnI4OworICAgICAgICBzdGF0aWMgY29uc3QgRlBS
ZWdpc3RlcklEIGZwUmVnVDUgID0gU0g0UmVnaXN0ZXJzOjpmcjEwOworICAgICAgICBzdGF0aWMg
Y29uc3QgRlBSZWdpc3RlcklEIGZwUmVnVDYgID0gU0g0UmVnaXN0ZXJzOjpmcjEyOworICAgICAg
ICBzdGF0aWMgY29uc3QgRlBSZWdpc3RlcklEIGZwUmVnVDcgID0gU0g0UmVnaXN0ZXJzOjpmcjE0
OwogI2Vsc2UKICNlcnJvciAiSklUIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBwbGF0Zm9ybS4iCiAj
ZW5kaWYKLS0gCjEuNy4yLjMKCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>88986</attachid>
            <date>2011-04-11 04:02:38 -0700</date>
            <delta_ts>2011-04-11 10:11:59 -0700</delta_ts>
            <desc>JIT remaining part for SH4 platforms.</desc>
            <filename>0001-JIT-remaining-parts-for-SH4.patch</filename>
            <type>text/plain</type>
            <size>19342</size>
            <attacher name="thouraya">thouraya.andolsi</attacher>
            
              <data encoding="base64">RnJvbSBiNWNhZjI5YTAyNTU2ZGFiNGUzNmE4MWMwMGUwOGM1OGY1NGRiMGM4IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBUaG91cmF5YSBBTkRPTFNJIDx0aG91cmF5YS5hbmRvbHNpQHN0
LmNvbT4KRGF0ZTogTW9uLCAxMSBBcHIgMjAxMSAxMjowNzoyNCArMDIwMApTdWJqZWN0OiBbUEFU
Q0hdIEpJVCByZW1haW5pbmcgcGFydHMgZm9yIFNINC4KCi0tLQogU291cmNlL0phdmFTY3JpcHRD
b3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgfCAgIDE4ICsrKysKIC4uLi9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJTSDQuaCAgIHwgICAgOCArKwogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaCAgICAgICAgICAgICAgICAgICAgfCAgIDQ4ICsrKysr
KysrKystCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZU1ldGhvZHMuaCAgICAg
ICB8ICAgMzcgKysrKysrKystCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMz
Ml82NC5jcHAgICAgICB8ICAgNDAgKysrKysrKysKIC4uLi9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
UHJvcGVydHlBY2Nlc3MzMl82NC5jcHAgIHwgICAgNCArLQogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRTdHVicy5jcHAgICAgICAgICAgICAgfCAgIDk1ICsrKysrKysrKysrKysrKysrKysr
CiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmggICAgICAgICAgICAgICB8ICAg
MjEgKysrKysKIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSlNJbnRlcmZhY2VKSVQuaCAgICAg
ICAgIHwgICAyNSArKysrKwogOSBmaWxlcyBjaGFuZ2VkLCAyOTEgaW5zZXJ0aW9ucygrKSwgNSBk
ZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9n
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA1NjljOWQyLi4zM2I5MWYy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMSBAQAorMjAxMS0wNC0xMSAg
VGhvdXJheWEgQU5ET0xTSSAgPHRob3VyYXlhLmFuZG9sc2lAc3QuY29tPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFNINCBKSVQgU1VQUE9SVC4KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ0MzI5CisKKyAg
ICAgICAgQWRkIEpJVCByZW1haW5pbmcgcGFydCBmb3IgU0g0IHBsYXRmb3Jtcy4KKworICAgICAg
ICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclNINC5oOgorICAgICAgICAqIGppdC9KSVQuaDoK
KyAgICAgICAgKiBqaXQvSklUSW5saW5lTWV0aG9kcy5oOgorICAgICAgICAqIGppdC9KSVRPcGNv
ZGVzMzJfNjQuY3BwOgorICAgICAgICAqIGppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcDoK
KyAgICAgICAgKiBqaXQvSklUU3R1YnMuY3BwOgorICAgICAgICAqIGppdC9KSVRTdHVicy5oOgor
ICAgICAgICAqIGppdC9KU0ludGVyZmFjZUpJVC5oOgorCiAyMDExLTA0LTEwICBHZW9mZnJleSBH
YXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CiAKICAgICAgICAgUnViYmVyLXN0YW1wZWQgYnkgQmV0
aCBEYWtpbi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFj
cm9Bc3NlbWJsZXJTSDQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9B
c3NlbWJsZXJTSDQuaAppbmRleCAwNGIwNjAyLi43ZTE1ZTZjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyU0g0LmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclNINC5oCkBAIC0xNjUxLDYg
KzE2NTEsMTQgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gQ2FsbChtX2Fzc2VtYmxlci5jYWxs
KHRhcmdldCksIENhbGw6Ok5vbmUpOwogICAgIH0KIAorICAgIHZvaWQgY2FsbChBZGRyZXNzIGFk
ZHJlc3MsIFJlZ2lzdGVySUQgdGFyZ2V0KQorICAgIHsKKyAgICAgICAgbG9hZDMyKGFkZHJlc3Mu
YmFzZSwgYWRkcmVzcy5vZmZzZXQsIHRhcmdldCk7CisgICAgICAgIG1fYXNzZW1ibGVyLmVuc3Vy
ZVNwYWNlKG1fYXNzZW1ibGVyLm1heEluc3RydWN0aW9uU2l6ZSArIDIpOworICAgICAgICBtX2Fz
c2VtYmxlci5icmFuY2goSlNSX09QQ09ERSwgdGFyZ2V0KTsKKyAgICAgICAgbV9hc3NlbWJsZXIu
bm9wKCk7CisgICAgfQorCiAgICAgdm9pZCBicmVha3BvaW50KCkKICAgICB7CiAgICAgICAgIG1f
YXNzZW1ibGVyLmJrcHQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklULmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCmluZGV4IDk5YzhjZDQuLjNk
ODdlNTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaApAQCAtNDczLDYgKzQ3Myw0OCBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldE1ldGhvZENo
ZWNrUHJvdG9TdHJ1Y3QgPSA1MjsKICAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNl
dE1ldGhvZENoZWNrUHV0RnVuY3Rpb24gPSA4NDsKICNlbmRpZgorI2VsaWYgQ1BVKFNINCkKKyAg
ICAgICAvLyBUaGVzZSBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgdmFsdWUgYXJlIHVzZWQgdG8gZW5h
YmxlIHBhdGNoaW5nIC0gc2VlIGNvbW1lbnQgb24gb3BfcHV0X2J5X2lkLgorICAgICAgICBzdGF0
aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0R2V0QnlJZFN0cnVjdHVyZSA9IDY7CisgICAgICAgIHN0
YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRQdXRCeUlkUHJvcGVydHlNYXBPZmZzZXQgPSAyNDsK
KyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldFB1dEJ5SWRTdHJ1Y3R1cmUgPSA2
OworICAgICAgICAvLyBUaGVzZSBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgdmFsdWUgYXJlIHVzZWQg
dG8gZW5hYmxlIHBhdGNoaW5nIC0gc2VlIGNvbW1lbnQgb24gb3BfZ2V0X2J5X2lkLgorICAgICAg
ICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0R2V0QnlJZEJyYW5jaFRvU2xvd0Nhc2UgPSAx
MDsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldEdldEJ5SWRQcm9wZXJ0eU1h
cE9mZnNldCA9IDI0OworICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0R2V0QnlJ
ZFB1dFJlc3VsdCA9IDMyOworCisgICAgICAgIC8vIHNlcXVlbmNlT3BDYWxsCisgICAgICAgIHN0
YXRpYyBjb25zdCBpbnQgc2VxdWVuY2VPcENhbGxJbnN0cnVjdGlvblNwYWNlID0gMTI7CisgICAg
ICAgIHN0YXRpYyBjb25zdCBpbnQgc2VxdWVuY2VPcENhbGxDb25zdGFudFNwYWNlID0gMjsKKyAg
ICAgICAgLy8gc2VxdWVuY2VNZXRob2RDaGVjaworICAgICAgICBzdGF0aWMgY29uc3QgaW50IHNl
cXVlbmNlTWV0aG9kQ2hlY2tJbnN0cnVjdGlvblNwYWNlID0gNDA7CisgICAgICAgIHN0YXRpYyBj
b25zdCBpbnQgc2VxdWVuY2VNZXRob2RDaGVja0NvbnN0YW50U3BhY2UgPSA2OworICAgICAgICAv
LyBzZXF1ZW5jZUdldEJ5SWRIb3RQYXRoCisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgc2VxdWVu
Y2VHZXRCeUlkSG90UGF0aEluc3RydWN0aW9uU3BhY2UgPSAzNjsKKyAgICAgICAgc3RhdGljIGNv
bnN0IGludCBzZXF1ZW5jZUdldEJ5SWRIb3RQYXRoQ29uc3RhbnRTcGFjZSA9IDU7CisgICAgICAg
IC8vIHNlcXVlbmNlR2V0QnlJZFNsb3dDYXNlCisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgc2Vx
dWVuY2VHZXRCeUlkU2xvd0Nhc2VJbnN0cnVjdGlvblNwYWNlID0gMjY7CisgICAgICAgIHN0YXRp
YyBjb25zdCBpbnQgc2VxdWVuY2VHZXRCeUlkU2xvd0Nhc2VDb25zdGFudFNwYWNlID0gMjsKKyAg
ICAgICAgLy8gc2VxdWVuY2VQdXRCeUlkCisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgc2VxdWVu
Y2VQdXRCeUlkSW5zdHJ1Y3Rpb25TcGFjZSA9IDM2OworICAgICAgICBzdGF0aWMgY29uc3QgaW50
IHNlcXVlbmNlUHV0QnlJZENvbnN0YW50U3BhY2UgPSA1OworCisgICAgICAgIHN0YXRpYyBjb25z
dCBpbnQgcGF0Y2hPZmZzZXRHZXRCeUlkUHJvcGVydHlNYXBPZmZzZXQxID0gMjA7CisgICAgICAg
IHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRHZXRCeUlkUHJvcGVydHlNYXBPZmZzZXQyID0g
MjY7CisKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldFB1dEJ5SWRQcm9wZXJ0
eU1hcE9mZnNldDEgPSAyMDsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldFB1
dEJ5SWRQcm9wZXJ0eU1hcE9mZnNldDIgPSAyNjsKKworI2lmIEVOQUJMRShPUENPREVfU0FNUExJ
TkcpCisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRHZXRCeUlkU2xvd0Nhc2VD
YWxsID0gMDsgLy8gRklNWEUKKyNlbHNlCisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hP
ZmZzZXRHZXRCeUlkU2xvd0Nhc2VDYWxsID0gMjI7CisjZW5kaWYKKyAgICAgICAgc3RhdGljIGNv
bnN0IGludCBwYXRjaE9mZnNldE9wQ2FsbENvbXBhcmVUb0p1bXAgPSA0OworCisgICAgICAgIHN0
YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRNZXRob2RDaGVja1Byb3RvT2JqID0gMTI7CisgICAg
ICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRNZXRob2RDaGVja1Byb3RvU3RydWN0ID0g
MjA7CisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRNZXRob2RDaGVja1B1dEZ1
bmN0aW9uID0gMzI7CiAjZWxzZQogI2Vycm9yICJKU1ZBTFVFMzJfNjQgbm90IHN1cHBvcnRlZCBv
biB0aGlzIHBsYXRmb3JtLiIKICNlbmRpZgpAQCAtNjY1LDE0ICs3MDcsMTYgQEAgbmFtZXNwYWNl
IEpTQyB7CiAKICNpZiAoZGVmaW5lZChBU1NFTUJMRVJfSEFTX0NPTlNUQU5UX1BPT0wpICYmIEFT
U0VNQkxFUl9IQVNfQ09OU1RBTlRfUE9PTCkKICNkZWZpbmUgQkVHSU5fVU5JTlRFUlJVUFRFRF9T
RVFVRU5DRShuYW1lKSBkbyB7IGJlZ2luVW5pbnRlcnJ1cHRlZFNlcXVlbmNlKG5hbWUgIyMgSW5z
dHJ1Y3Rpb25TcGFjZSwgbmFtZSAjIyBDb25zdGFudFNwYWNlKTsgfSB3aGlsZSAoZmFsc2UpCi0j
ZGVmaW5lIEVORF9VTklOVEVSUlVQVEVEX1NFUVVFTkNFKG5hbWUpIGRvIHsgZW5kVW5pbnRlcnJ1
cHRlZFNlcXVlbmNlKG5hbWUgIyMgSW5zdHJ1Y3Rpb25TcGFjZSwgbmFtZSAjIyBDb25zdGFudFNw
YWNlKTsgfSB3aGlsZSAoZmFsc2UpCisjZGVmaW5lIEVORF9VTklOVEVSUlVQVEVEX1NFUVVFTkNF
X0ZPUl9QVVQobmFtZSwgZHN0KSBkbyB7IGVuZFVuaW50ZXJydXB0ZWRTZXF1ZW5jZShuYW1lICMj
IEluc3RydWN0aW9uU3BhY2UsIG5hbWUgIyMgQ29uc3RhbnRTcGFjZSwgZHN0KTsgfSB3aGlsZSAo
ZmFsc2UpCisjZGVmaW5lIEVORF9VTklOVEVSUlVQVEVEX1NFUVVFTkNFKG5hbWUpIEVORF9VTklO
VEVSUlVQVEVEX1NFUVVFTkNFX0ZPUl9QVVQobmFtZSwgMCkKIAogICAgICAgICB2b2lkIGJlZ2lu
VW5pbnRlcnJ1cHRlZFNlcXVlbmNlKGludCwgaW50KTsKLSAgICAgICAgdm9pZCBlbmRVbmludGVy
cnVwdGVkU2VxdWVuY2UoaW50LCBpbnQpOworICAgICAgICB2b2lkIGVuZFVuaW50ZXJydXB0ZWRT
ZXF1ZW5jZShpbnQsIGludCwgaW50KTsKIAogI2Vsc2UKICNkZWZpbmUgQkVHSU5fVU5JTlRFUlJV
UFRFRF9TRVFVRU5DRShuYW1lKSAgZG8geyBiZWdpblVuaW50ZXJydXB0ZWRTZXF1ZW5jZSgpOyB9
IHdoaWxlIChmYWxzZSkKICNkZWZpbmUgRU5EX1VOSU5URVJSVVBURURfU0VRVUVOQ0UobmFtZSkg
IGRvIHsgZW5kVW5pbnRlcnJ1cHRlZFNlcXVlbmNlKCk7IH0gd2hpbGUgKGZhbHNlKQorI2RlZmlu
ZSBFTkRfVU5JTlRFUlJVUFRFRF9TRVFVRU5DRV9GT1JfUFVUKG5hbWUsIGRzdCkgZG8geyBlbmRV
bmludGVycnVwdGVkU2VxdWVuY2UoKTsgfSB3aGlsZSAoZmFsc2UpCiAjZW5kaWYKIAogICAgICAg
ICB2b2lkIGVtaXRfb3BfYWRkKEluc3RydWN0aW9uKik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVElubGluZU1ldGhvZHMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUSW5saW5lTWV0aG9kcy5oCmluZGV4IDlhZmFmMWEuLjNkZmExMDUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lTWV0aG9kcy5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lTWV0aG9kcy5oCkBAIC0xMjMsNiArMTIz
LDEzIEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmJlZ2luVW5pbnRlcnJ1cHRlZFNlcXVlbmNl
KGludCBpbnNuU3BhY2UsIGludCBjb25zdFNwYWNlCiAKICAgICBlbnN1cmVTcGFjZShpbnNuU3Bh
Y2UsIGNvbnN0U3BhY2UpOwogCisjZWxpZiBDUFUoU0g0KQorI2lmbmRlZiBOREVCVUcKKyAgICBp
bnNuU3BhY2UgKz0gc2l6ZW9mKFNINFdvcmQpOworICAgIGNvbnN0U3BhY2UgKz0gc2l6ZW9mKHVp
bnQ2NF90KTsKKyNlbmRpZgorCisgICAgbV9hc3NlbWJsZXIuZW5zdXJlU3BhY2UoaW5zblNwYWNl
ICsgbV9hc3NlbWJsZXIubWF4SW5zdHJ1Y3Rpb25TaXplICsgMiwgY29uc3RTcGFjZSArIDgpOwog
I2VuZGlmCiAKICNpZiBkZWZpbmVkKEFTU0VNQkxFUl9IQVNfQ09OU1RBTlRfUE9PTCkgJiYgQVNT
RU1CTEVSX0hBU19DT05TVEFOVF9QT09MCkBAIC0xMzMsOCArMTQwLDkgQEAgQUxXQVlTX0lOTElO
RSB2b2lkIEpJVDo6YmVnaW5VbmludGVycnVwdGVkU2VxdWVuY2UoaW50IGluc25TcGFjZSwgaW50
IGNvbnN0U3BhY2UKICNlbmRpZgogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbmRVbmlu
dGVycnVwdGVkU2VxdWVuY2UoaW50IGluc25TcGFjZSwgaW50IGNvbnN0U3BhY2UpCitBTFdBWVNf
SU5MSU5FIHZvaWQgSklUOjplbmRVbmludGVycnVwdGVkU2VxdWVuY2UoaW50IGluc25TcGFjZSwg
aW50IGNvbnN0U3BhY2UsIGludCBkc3QpCiB7CisgICAgVU5VU0VEX1BBUkFNKGRzdCk7CiAjaWYg
ZGVmaW5lZChBU1NFTUJMRVJfSEFTX0NPTlNUQU5UX1BPT0wpICYmIEFTU0VNQkxFUl9IQVNfQ09O
U1RBTlRfUE9PTAogICAgIC8qIFRoZXJlIGFyZSBzZXZlcmFsIGNhc2VzIHdoZW4gdGhlIHVuaW50
ZXJydXB0ZWQgc2VxdWVuY2UgaXMgbGFyZ2VyIHRoYW4KICAgICAgKiBtYXhpbXVtIHJlcXVpcmVk
IG9mZnNldCBmb3IgcGF0aGluZyB0aGUgc2FtZSBzZXF1ZW5jZS4gRWcuOiBpZiBpbiBhCkBAIC0x
NDMsNiArMTUxLDE1IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVuZFVuaW50ZXJydXB0ZWRT
ZXF1ZW5jZShpbnQgaW5zblNwYWNlLCBpbnQgY29uc3RTcGFjZSkKICAgICAgKiBjYWxjdWxhdGlv
biBvZiBsZW5ndGggb2YgdW5pbnRlcnJ1cHRlZCBzZXF1ZW5jZS4gU28sIHRoZSBpbnNuU3BhY2Ug
YW5kCiAgICAgICogY29uc3RTcGFjZSBzaG91bGQgYmUgdXBwZXIgbGltaXQgaW5zdGVhZCBvZiBo
YXJkIGxpbWl0LgogICAgICAqLworI2lmIENQVShTSDQpCisgICAgaWYgKChkc3QgPiAxNSkgfHwg
KGRzdCA8IC0xNikpIHsKKyAgICAgICAgaW5zblNwYWNlICs9IDg7CisgICAgICAgIGNvbnN0U3Bh
Y2UgKz0gMjsKKyAgICB9CisKKyAgICBpZiAoKChkc3QgPj0gLTE2KSAmJiAoZHN0IDwgMCkpIHx8
ICgoZHN0ID4gNykgJiYgKGRzdCA8PSAxNSkpKQorICAgICAgICBpbnNuU3BhY2UgKz0gODsKKyNl
bmRpZgogICAgIEFTU0VSVChkaWZmZXJlbmNlQmV0d2VlbihtX3VuaW50ZXJydXB0ZWRJbnN0cnVj
dGlvblNlcXVlbmNlQmVnaW4sIGxhYmVsKCkpIDw9IGluc25TcGFjZSk7CiAgICAgQVNTRVJUKHNp
emVPZkNvbnN0YW50UG9vbCgpIC0gbV91bmludGVycnVwdGVkQ29uc3RhbnRTZXF1ZW5jZUJlZ2lu
IDw9IGNvbnN0U3BhY2UpOwogI2VuZGlmCkBAIC0xNjcsNiArMTg0LDIyIEBAIEFMV0FZU19JTkxJ
TkUgdm9pZCBKSVQ6OnJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKEFkZHJlc3MgYWRk
cmVzcykKIHsKICAgICBsb2FkUHRyKGFkZHJlc3MsIGxpbmtSZWdpc3Rlcik7CiB9CisjZWxpZiBD
UFUoU0g0KQorCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpwcmVzZXJ2ZVJldHVybkFkZHJlc3NB
ZnRlckNhbGwoUmVnaXN0ZXJJRCByZWcpCit7CisgICAgbV9hc3NlbWJsZXIuc3RzcHIocmVnKTsK
K30KKworQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6cmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVS
ZXR1cm4oUmVnaXN0ZXJJRCByZWcpCit7CisgICAgbV9hc3NlbWJsZXIubGRzcHIocmVnKTsKK30K
KworQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6cmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1
cm4oQWRkcmVzcyBhZGRyZXNzKQoreworICAgIGxvYWRQdHJMaW5rUmVnKGFkZHJlc3MpOworfQog
CiAjZWxpZiBDUFUoTUlQUykKIApAQCAtMjE3LDYgKzI1MCw4IEBAIEFMV0FZU19JTkxJTkUgdm9p
ZCBKSVQ6OnJlc3RvcmVBcmd1bWVudFJlZmVyZW5jZUZvclRyYW1wb2xpbmUoKQogICAgIGFkZFB0
cihUcnVzdGVkSW1tMzIoc2l6ZW9mKHZvaWQqKSksIHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBmaXJz
dEFyZ3VtZW50UmVnaXN0ZXIpOwogI2VsaWYgQ1BVKEFSTSkKICAgICBtb3ZlKHN0YWNrUG9pbnRl
clJlZ2lzdGVyLCBmaXJzdEFyZ3VtZW50UmVnaXN0ZXIpOworI2VsaWYgQ1BVKFNINCkKKyAgICBt
b3ZlKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBmaXJzdEFyZ3VtZW50UmVnaXN0ZXIpOwogI2VuZGlm
CiAgICAgLy8gSW4gdGhlIHRyYW1wb2xpbmUgb24geDg2LTY0LCB0aGUgZmlyc3QgYXJndW1lbnQg
cmVnaXN0ZXIgaXMgbm90IG92ZXJ3cml0dGVuLgogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCmluZGV4IGUyZDg1NDguLmVkY2UyMWMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAKQEAgLTI0NSw3ICsy
NDUsMjYgQEAgSklUOjpMYWJlbCBKSVQ6OnByaXZhdGVDb21waWxlQ1RJTmF0aXZlQ2FsbChKU0ds
b2JhbERhdGEqIGdsb2JhbERhdGEsIGJvb2wgaXNDb24KICAgICBjYWxsKEFkZHJlc3MocmVnVDIs
IGV4ZWN1dGFibGVPZmZzZXRUb0Z1bmN0aW9uKSk7CiAKICAgICByZXN0b3JlUmV0dXJuQWRkcmVz
c0JlZm9yZVJldHVybihyZWdUMyk7CisjZWxpZiBDUFUoU0g0KQorICAgIC8vIExvYWQgY2FsbGVy
IGZyYW1lJ3Mgc2NvcGUgY2hhaW4gaW50byB0aGlzIGNhbGxmcmFtZSBzbyB0aGF0IHdoYXRldmVy
IHdlIGNhbGwgY2FuCisgICAgLy8gZ2V0IHRvIGl0cyBnbG9iYWwgZGF0YS4KKyAgICBlbWl0R2V0
RnJvbUNhbGxGcmFtZUhlYWRlclB0cihSZWdpc3RlckZpbGU6OkNhbGxlckZyYW1lLCByZWdUMik7
CisgICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoUmVnaXN0ZXJGaWxlOjpTY29wZUNo
YWluLCByZWdUMSwgcmVnVDIpOworICAgIGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihyZWdUMSwg
UmVnaXN0ZXJGaWxlOjpTY29wZUNoYWluKTsKKworICAgIHByZXNlcnZlUmV0dXJuQWRkcmVzc0Fm
dGVyQ2FsbChyZWdUMyk7IC8vIENhbGxlZSBwcmVzZXJ2ZWQKKyAgICBlbWl0UHV0VG9DYWxsRnJh
bWVIZWFkZXIocmVnVDMsIFJlZ2lzdGVyRmlsZTo6UmV0dXJuUEMpOwogCisgICAgLy8gQ2FsbGlu
ZyBjb252ZW50aW9uOiBmKHIwID09IHJlZ1Q0LCByMSA9PSByZWdUNSwgLi4uKTsKKyAgICAvLyBI
b3N0IGZ1bmN0aW9uIHNpZ25hdHVyZTogZihFeGVjU3RhdGUqKTsKKyAgICBtb3ZlKGNhbGxGcmFt
ZVJlZ2lzdGVyLCByZWdUNCk7CisKKyAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihS
ZWdpc3RlckZpbGU6OkNhbGxlZSwgcmVnVDUpOworICAgIG1vdmUocmVnVDIsIGNhbGxGcmFtZVJl
Z2lzdGVyKTsgLy8gRWFnZXJseSByZXN0b3JlIGNhbGxlciBmcmFtZSByZWdpc3RlciB0byBhdm9p
ZCBsb2FkaW5nIGZyb20gc3RhY2suCisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1Q1LCBPQkpFQ1Rf
T0ZGU0VUT0YoSlNGdW5jdGlvbiwgbV9leGVjdXRhYmxlKSksIHJlZ1QyKTsKKworICAgIGNhbGwo
QWRkcmVzcyhyZWdUMiwgZXhlY3V0YWJsZU9mZnNldFRvRnVuY3Rpb24pLCByZWdUMCk7CisgICAg
cmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4ocmVnVDMpOwogI2VsaWYgQ1BVKE1JUFMp
CiAgICAgLy8gTG9hZCBjYWxsZXIgZnJhbWUncyBzY29wZSBjaGFpbiBpbnRvIHRoaXMgY2FsbGZy
YW1lIHNvIHRoYXQgd2hhdGV2ZXIgd2UgY2FsbCBjYW4KICAgICAvLyBnZXQgdG8gaXRzIGdsb2Jh
bCBkYXRhLgpAQCAtMzk0LDcgKzQxMywyOCBAQCBKSVQ6OkNvZGVQdHIgSklUOjpwcml2YXRlQ29t
cGlsZUNUSU5hdGl2ZUNhbGwoUGFzc1JlZlB0cjxFeGVjdXRhYmxlUG9vbD4gZXhlY3V0YQogICAg
IGFkZFB0cihUcnVzdGVkSW1tMzIoMTYpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAKICAgICBy
ZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihyZWdUMyk7CisjZWxpZiBDUFUoU0g0KQor
ICAgIC8vIExvYWQgY2FsbGVyIGZyYW1lJ3Mgc2NvcGUgY2hhaW4gaW50byB0aGlzIGNhbGxmcmFt
ZSBzbyB0aGF0IHdoYXRldmVyIHdlIGNhbGwgY2FuCisgICAgLy8gZ2V0IHRvIGl0cyBnbG9iYWwg
ZGF0YS4KKyAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihSZWdpc3RlckZpbGU6OkNh
bGxlckZyYW1lLCByZWdUMik7CisgICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoUmVn
aXN0ZXJGaWxlOjpTY29wZUNoYWluLCByZWdUMSwgcmVnVDIpOworICAgIGVtaXRQdXRUb0NhbGxG
cmFtZUhlYWRlcihyZWdUMSwgUmVnaXN0ZXJGaWxlOjpTY29wZUNoYWluKTsKKworICAgIHByZXNl
cnZlUmV0dXJuQWRkcmVzc0FmdGVyQ2FsbChyZWdUMyk7IC8vIENhbGxlZSBwcmVzZXJ2ZWQKKyAg
ICBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIocmVnVDMsIFJlZ2lzdGVyRmlsZTo6UmV0dXJuUEMp
OworCisgICAgLy8gQ2FsbGluZyBjb252ZW50aW9uOiBmKHIwID09IHJlZ1Q0LCByMSA9PSByZWdU
NSwgLi4uKTsKKyAgICAvLyBIb3N0IGZ1bmN0aW9uIHNpZ25hdHVyZTogZihFeGVjU3RhdGUqKTsK
KyAgICBtb3ZlKGNhbGxGcmFtZVJlZ2lzdGVyLCByZWdUNCk7CiAKKyAgICBlbWl0R2V0RnJvbUNh
bGxGcmFtZUhlYWRlclB0cihSZWdpc3RlckZpbGU6OkNhbGxlZSwgcmVnVDUpOworICAgIG1vdmUo
cmVnVDIsIGNhbGxGcmFtZVJlZ2lzdGVyKTsgLy8gRWFnZXJseSByZXN0b3JlIGNhbGxlciBmcmFt
ZSByZWdpc3RlciB0byBhdm9pZCBsb2FkaW5nIGZyb20gc3RhY2suCisgICAgbG9hZFB0cihBZGRy
ZXNzKHJlZ1Q1LCBPQkpFQ1RfT0ZGU0VUT0YoSlNGdW5jdGlvbiwgbV9leGVjdXRhYmxlKSksIHJl
Z1QyKTsKKworICAgIC8vIGNhbGwgdGhlIGZ1bmN0aW9uCisgICAgbmF0aXZlQ2FsbCA9IGNhbGwo
KTsKKworICAgIHJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKHJlZ1QzKTsKICNlbGlm
IEVOQUJMRShKSVRfT1BUSU1JWkVfTkFUSVZFX0NBTEwpCiAjZXJyb3IgIkpJVF9PUFRJTUlaRV9O
QVRJVkVfQ0FMTCBub3QgeWV0IHN1cHBvcnRlZCBvbiB0aGlzIHBsYXRmb3JtLiIKICNlbHNlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJf
NjQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0
LmNwcAppbmRleCAyYTQ3ZTVjLi45Mzc5ZjdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAKQEAgLTQ3NSw3ICs0NzUsNyBA
QCB2b2lkIEpJVDo6Y29tcGlsZUdldEJ5SWRTbG93Q2FzZShpbnQgZHN0LCBpbnQgYmFzZSwgSWRl
bnRpZmllciogaWRlbnQsIFZlY3RvcjxTbAogICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KFRydXN0
ZWRJbW1QdHIoaWRlbnQpKTsKICAgICBDYWxsIGNhbGwgPSBzdHViQ2FsbC5jYWxsKGRzdCk7CiAg
ICAgCi0gICAgRU5EX1VOSU5URVJSVVBURURfU0VRVUVOQ0Uoc2VxdWVuY2VHZXRCeUlkU2xvd0Nh
c2UpOworICAgIEVORF9VTklOVEVSUlVQVEVEX1NFUVVFTkNFX0ZPUl9QVVQoc2VxdWVuY2VHZXRC
eUlkU2xvd0Nhc2UsIGRzdCk7CiAgICAgCiAgICAgQVNTRVJUX0pJVF9PRkZTRVQoZGlmZmVyZW5j
ZUJldHdlZW4oY29sZFBhdGhCZWdpbiwgY2FsbCksIHBhdGNoT2Zmc2V0R2V0QnlJZFNsb3dDYXNl
Q2FsbCk7CiAgICAgCkBAIC02MjQsNyArNjI0LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxl
UHV0QnlJZFRyYW5zaXRpb24oU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBTdHJ1Y3R1cmUK
ICAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIEFic29sdXRlQWRkcmVzcyhuZXdTdHJ1Y3R1cmUt
PmFkZHJlc3NPZkNvdW50KCkpKTsKICAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKG5ld1N0cnVj
dHVyZSksIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpKTsKICAgICAK
LSNpZiBDUFUoTUlQUykKKyNpZiBDUFUoTUlQUykgfHwgQ1BVKFNINCkKICAgICAvLyBGb3IgTUlQ
Uywgd2UgZG9uJ3QgYWRkIHNpemVvZih2b2lkKikgdG8gdGhlIHN0YWNrIG9mZnNldC4KICAgICBs
b2FkMzIoQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3RlciwgT0JKRUNUX09GRlNFVE9GKEpJVFN0
YWNrRnJhbWUsIGFyZ3NbMl0pICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBh
eWxvYWQpKSwgcmVnVDMpOwogICAgIGxvYWQzMihBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVy
LCBPQkpFQ1RfT0ZGU0VUT0YoSklUU3RhY2tGcmFtZSwgYXJnc1syXSkgKyBPQkpFQ1RfT0ZGU0VU
T0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksIHJlZ1QyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRTdHVicy5jcHAKaW5kZXggNDRjYTg2Ny4uOTIyYmQ1OSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRTdHVicy5jcHAKQEAgLTMxNCw3ICszMTQsNzkgQEAgZXh0ZXJuICJDIiB7CiAj
ZGVmaW5lIEVOQUJMRV9QUk9GSUxFUl9SRUZFUkVOQ0VfT0ZGU0VUIDk2CiAjZGVmaW5lIEdMT0JB
TF9EQVRBX09GRlNFVCAgICAgICAgIDEwMAogI2RlZmluZSBTVEFDS19MRU5HVEggICAgICAgICAg
ICAgICAxMDQKKyNlbGlmIENQVShTSDQpCisjZGVmaW5lIFNZTUJPTF9TVFJJTkcobmFtZSkgI25h
bWUKKy8qIGNvZGUgKHI0KSwgUmVnaXN0ZXJGaWxlKiAocjUpLCBDYWxsRnJhbWUqIChyNiksIEpT
VmFsdWUqIGV4Y2VwdGlvbiAocjcpLCBQcm9maWxlcioqKHNwKSwgSlNHbG9iYWxEYXRhIChzcCkq
LwogCithc20gdm9sYXRpbGUgKAorIi50ZXh0XG4iCisiLmdsb2JsICIgU1lNQk9MX1NUUklORyhj
dGlUcmFtcG9saW5lKSAiXG4iCitISURFX1NZTUJPTChjdGlUcmFtcG9saW5lKSAiXG4iCitTWU1C
T0xfU1RSSU5HKGN0aVRyYW1wb2xpbmUpICI6IiAiXG4iCisgICAgIm1vdi5sIHI3LCBALXIxNSIg
IlxuIgorICAgICJtb3YubCByNiwgQC1yMTUiICJcbiIKKyAgICAibW92LmwgcjUsIEAtcjE1IiAi
XG4iCisgICAgIm1vdi5sIHI4LCBALXIxNSIgIlxuIgorICAgICJtb3YgIzEyNywgcjgiICJcbiIK
KyAgICAibW92LmwgcjE0LCBALXIxNSIgIlxuIgorICAgICJzdHMubCBwciwgQC1yMTUiICJcbiIK
KyAgICAibW92LmwgcjEzLCBALXIxNSIgIlxuIgorICAgICJtb3YubCByMTEsIEAtcjE1IiAiXG4i
CisgICAgIm1vdi5sIHIxMCwgQC1yMTUiICJcbiIKKyAgICAiYWRkICMtNjAsIHIxNSIgIlxuIgor
ICAgICJtb3YgcjYsIHIxNCIgIlxuIgorICAgICJqc3IgQHI0IiAiXG4iCisgICAgIm5vcCIgIlxu
IgorICAgICJhZGQgIzYwLCByMTUiICJcbiIKKyAgICAibW92LmwgQHIxNSsscjEwIiAiXG4iCisg
ICAgIm1vdi5sIEByMTUrLHIxMSIgIlxuIgorICAgICJtb3YubCBAcjE1KyxyMTMiICJcbiIKKyAg
ICAibGRzLmwgQHIxNSsscHIiICJcbiIKKyAgICAibW92LmwgQHIxNSsscjE0IiAiXG4iCisgICAg
Im1vdi5sIEByMTUrLHI4IiAiXG4iCisgICAgImFkZCAjMTIsIHIxNSIgIlxuIgorICAgICJydHMi
ICJcbiIKKyAgICAibm9wIiAiXG4iCispOworCithc20gdm9sYXRpbGUgKAorIi5nbG9ibCAiIFNZ
TUJPTF9TVFJJTkcoY3RpVk1UaHJvd1RyYW1wb2xpbmUpICJcbiIKK0hJREVfU1lNQk9MKGN0aVZN
VGhyb3dUcmFtcG9saW5lKSAiXG4iCitTWU1CT0xfU1RSSU5HKGN0aVZNVGhyb3dUcmFtcG9saW5l
KSAiOiIgIlxuIgorICAgICJtb3YubCAuTDIiU1lNQk9MX1NUUklORyhjdGlfdm1fdGhyb3cpIixy
MCIgIlxuIgorICAgICJtb3YgcjE1LCByNCIgIlxuIgorICAgICJtb3YubCBAKHIwLHIxMikscjEx
IiAiXG4iCisgICAgImpzciBAcjExIiAiXG4iCisgICAgIm5vcCIgIlxuIgorICAgICJhZGQgIzYw
LCByMTUiICJcbiIKKyAgICAibW92LmwgQHIxNSsscjEwIiAiXG4iCisgICAgIm1vdi5sIEByMTUr
LHIxMSIgIlxuIgorICAgICJtb3YubCBAcjE1KyxyMTMiICJcbiIKKyAgICAibGRzLmwgQHIxNSss
cHIiICJcbiIKKyAgICAibW92LmwgQHIxNSsscjE0IiAiXG4iCisgICAgIm1vdi5sIEByMTUrLHI4
IiAiXG4iCisgICAgImFkZCAjMTIsIHIxNSIgIlxuIgorICAgICJydHMiICJcbiIKKyAgICAibm9w
IiAiXG4iCisgICAgIi5hbGlnbiAyIiAiXG4iCisgICAgIi5MMiJTWU1CT0xfU1RSSU5HKGN0aV92
bV90aHJvdykiOi5sb25nICIgU1lNQk9MX1NUUklORyhjdGlfdm1fdGhyb3cpIkBHT1QgXG4iCisp
OworCithc20gdm9sYXRpbGUgKAorIi5nbG9ibCAiIFNZTUJPTF9TVFJJTkcoY3RpT3BUaHJvd05v
dENhdWdodCkgIlxuIgorSElERV9TWU1CT0woY3RpT3BUaHJvd05vdENhdWdodCkgIlxuIgorU1lN
Qk9MX1NUUklORyhjdGlPcFRocm93Tm90Q2F1Z2h0KSAiOiIgIlxuIgorICAgICJhZGQgIzYwLCBy
MTUiICJcbiIKKyAgICAibW92LmwgQHIxNSsscjEwIiAiXG4iCisgICAgIm1vdi5sIEByMTUrLHIx
MSIgIlxuIgorICAgICJtb3YubCBAcjE1KyxyMTMiICJcbiIKKyAgICAibGRzLmwgQHIxNSsscHIi
ICJcbiIKKyAgICAibW92LmwgQHIxNSsscjE0IiAiXG4iCisgICAgIm1vdi5sIEByMTUrLHI4IiAi
XG4iCisgICAgImFkZCAjMTIsIHIxNSIgIlxuIgorICAgICJydHMiICJcbiIKKyAgICAibm9wIiAi
XG4iCispOwogI2Vsc2UKICAgICAjZXJyb3IgIkpJVCBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgcGxh
dGZvcm0uIgogI2VuZGlmCkBAIC0xMTU2LDYgKzEyMjgsMjkgQEAgTVNWQygpCiBNU1ZDX0VORCgg
ICAgRU5EKQogKi8KIAorI2VsaWYgQ1BVKFNINCkKKyNkZWZpbmUgREVGSU5FX1NUVUJfRlVOQ1RJ
T04ocnR5cGUsIG9wKSBcCisgICAgZXh0ZXJuICJDIiB7IFwKKyAgICAgICAgcnR5cGUgSklUU3R1
YlRodW5rZWRfIyNvcChTVFVCX0FSR1NfREVDTEFSQVRJT04pOyBcCisgICAgfTsgXAorICAgIGFz
bSB2b2xhdGlsZSggXAorICAgICIuYWxpZ24gMiIgIlxuIiBcCisgICAgIi5nbG9ibCAiIFNZTUJP
TF9TVFJJTkcoY3RpXyMjb3ApICJcbiIgXAorICAgIFNZTUJPTF9TVFJJTkcoY3RpXyMjb3ApICI6
IiAiXG4iIFwKKyAgICAic3RzIHByLCByMTEiICJcbiIgXAorICAgICJtb3YubCByMTEsIEAoMHgz
OCwgcjE1KSIgIlxuIiBcCisgICAgIm1vdi5sIC5MMiJTWU1CT0xfU1RSSU5HKEpJVFN0dWJUaHVu
a2VkXyMjb3ApIixyMCIgIlxuIiBcCisgICAgIm1vdi5sIEAocjAscjEyKSxyMTEiICJcbiIgXAor
ICAgICJqc3IgQHIxMSIgIlxuIiBcCisgICAgIm5vcCIgIlxuIiBcCisgICAgIm1vdi5sIEAoMHgz
OCwgcjE1KSwgcjExICIgIlxuIiBcCisgICAgImxkcyByMTEsIHByICIgIlxuIiBcCisgICAgInJ0
cyIgIlxuIiBcCisgICAgIm5vcCIgIlxuIiBcCisgICAgIi5hbGlnbiAyIiAiXG4iIFwKKyAgICAi
LkwyIlNZTUJPTF9TVFJJTkcoSklUU3R1YlRodW5rZWRfIyNvcCkiOi5sb25nICIgU1lNQk9MX1NU
UklORyhKSVRTdHViVGh1bmtlZF8jI29wKSJAR09UIFxuIiBcCisgICAgKTsgXAorICAgIHJ0eXBl
IEpJVFN0dWJUaHVua2VkXyMjb3AoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKQogI2Vsc2UKICNkZWZp
bmUgREVGSU5FX1NUVUJfRlVOQ1RJT04ocnR5cGUsIG9wKSBydHlwZSBKSVRfU1RVQiBjdGlfIyNv
cChTVFVCX0FSR1NfREVDTEFSQVRJT04pCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
U3R1YnMuaAppbmRleCA2MTBhZTNmLi43YzY3ZjZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVFN0dWJzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRTdHVicy5oCkBAIC0yMjksNiArMjI5LDI3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAg
IFJldHVybkFkZHJlc3NQdHIqIHJldHVybkFkZHJlc3NTbG90KCkgeyByZXR1cm4gJnRodW5rUmV0
dXJuQWRkcmVzczsgfQogICAgIH07CisjZWxpZiBDUFUoU0g0KQorICAgIHN0cnVjdCBKSVRTdGFj
a0ZyYW1lIHsKKyAgICAgICAgSklUU3R1YkFyZyBwYWRkaW5nOyAvLyBVbnVzZWQKKyAgICAgICAg
SklUU3R1YkFyZyBhcmdzWzZdOworCisgICAgICAgIFJldHVybkFkZHJlc3NQdHIgdGh1bmtSZXR1
cm5BZGRyZXNzOworICAgICAgICB2b2lkKiBzYXZlZFIxMDsKKyAgICAgICAgdm9pZCogc2F2ZWRS
MTE7CisgICAgICAgIHZvaWQqIHNhdmVkUjEzOworICAgICAgICB2b2lkKiBzYXZlZFJQUjsKKyAg
ICAgICAgdm9pZCogc2F2ZWRSMTQ7CisgICAgICAgIHZvaWQqIHNhdmVkVGltZW91dFJlZzsKKwor
ICAgICAgICBSZWdpc3RlckZpbGUqIHJlZ2lzdGVyRmlsZTsKKyAgICAgICAgQ2FsbEZyYW1lKiBj
YWxsRnJhbWU7CisgICAgICAgIEpTVmFsdWUqIGV4Y2VwdGlvbjsKKyAgICAgICAgUHJvZmlsZXIq
KiBlbmFibGVkUHJvZmlsZXJSZWZlcmVuY2U7CisgICAgICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFs
RGF0YTsKKworICAgICAgICBSZXR1cm5BZGRyZXNzUHRyKiByZXR1cm5BZGRyZXNzU2xvdCgpIHsg
cmV0dXJuICZ0aHVua1JldHVybkFkZHJlc3M7IH0KKyAgICB9OwogI2Vsc2UKICNlcnJvciAiSklU
U3RhY2tGcmFtZSBub3QgZGVmaW5lZCBmb3IgdGhpcyBwbGF0Zm9ybS4iCiAjZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSlNJbnRlcmZhY2VKSVQuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSlNJbnRlcmZhY2VKSVQuaAppbmRleCA4NTJlMDFhLi4wNzIx
OGMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pTSW50ZXJmYWNlSklU
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KU0ludGVyZmFjZUpJVC5oCkBAIC0x
NTQsNiArMTU0LDMxIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdGF0aWMgY29uc3QgRlBS
ZWdpc3RlcklEIGZwUmVnVDEgPSBNSVBTUmVnaXN0ZXJzOjpmNjsKICAgICAgICAgc3RhdGljIGNv
bnN0IEZQUmVnaXN0ZXJJRCBmcFJlZ1QyID0gTUlQU1JlZ2lzdGVyczo6Zjg7CiAgICAgICAgIHN0
YXRpYyBjb25zdCBGUFJlZ2lzdGVySUQgZnBSZWdUMyA9IE1JUFNSZWdpc3RlcnM6OmYxMDsKKyNl
bGlmIENQVShTSDQpCisgICAgICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIHRpbWVvdXRDaGVj
a1JlZ2lzdGVyID0gU0g0UmVnaXN0ZXJzOjpyODsKKyAgICAgICAgc3RhdGljIGNvbnN0IFJlZ2lz
dGVySUQgY2FsbEZyYW1lUmVnaXN0ZXIgPSBTSDRSZWdpc3RlcnM6OmZwOworCisgICAgICAgIHN0
YXRpYyBjb25zdCBSZWdpc3RlcklEIHJlZ1QwID0gU0g0UmVnaXN0ZXJzOjpyMDsKKyAgICAgICAg
c3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgcmVnVDEgPSBTSDRSZWdpc3RlcnM6OnIxOworICAgICAg
ICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCByZWdUMiA9IFNINFJlZ2lzdGVyczo6cjI7CisgICAg
ICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIHJlZ1QzID0gU0g0UmVnaXN0ZXJzOjpyMTA7Cisg
ICAgICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIHJlZ1Q0ID0gU0g0UmVnaXN0ZXJzOjpyNDsK
KyAgICAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgcmVnVDUgPSBTSDRSZWdpc3RlcnM6OnI1
OworICAgICAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCByZWdUNiA9IFNINFJlZ2lzdGVyczo6
cjY7CisgICAgICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIHJlZ1Q3ID0gU0g0UmVnaXN0ZXJz
OjpyNzsKKyAgICAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgZmlyc3RBcmd1bWVudFJlZ2lz
dGVyID1yZWdUNDsKKworICAgICAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCByZXR1cm5WYWx1
ZVJlZ2lzdGVyID0gU0g0UmVnaXN0ZXJzOjpyMDsKKyAgICAgICAgc3RhdGljIGNvbnN0IFJlZ2lz
dGVySUQgY2FjaGVkUmVzdWx0UmVnaXN0ZXIgPSBTSDRSZWdpc3RlcnM6OnIwOworCisgICAgICAg
IHN0YXRpYyBjb25zdCBGUFJlZ2lzdGVySUQgZnBSZWdUMCAgPSBTSDRSZWdpc3RlcnM6OmZyMDsK
KyAgICAgICAgc3RhdGljIGNvbnN0IEZQUmVnaXN0ZXJJRCBmcFJlZ1QxICA9IFNINFJlZ2lzdGVy
czo6ZnIyOworICAgICAgICBzdGF0aWMgY29uc3QgRlBSZWdpc3RlcklEIGZwUmVnVDIgID0gU0g0
UmVnaXN0ZXJzOjpmcjQ7CisgICAgICAgIHN0YXRpYyBjb25zdCBGUFJlZ2lzdGVySUQgZnBSZWdU
MyAgPSBTSDRSZWdpc3RlcnM6OmZyNjsKKyAgICAgICAgc3RhdGljIGNvbnN0IEZQUmVnaXN0ZXJJ
RCBmcFJlZ1Q0ICA9IFNINFJlZ2lzdGVyczo6ZnI4OworICAgICAgICBzdGF0aWMgY29uc3QgRlBS
ZWdpc3RlcklEIGZwUmVnVDUgID0gU0g0UmVnaXN0ZXJzOjpmcjEwOworICAgICAgICBzdGF0aWMg
Y29uc3QgRlBSZWdpc3RlcklEIGZwUmVnVDYgID0gU0g0UmVnaXN0ZXJzOjpmcjEyOworICAgICAg
ICBzdGF0aWMgY29uc3QgRlBSZWdpc3RlcklEIGZwUmVnVDcgID0gU0g0UmVnaXN0ZXJzOjpmcjE0
OwogI2Vsc2UKICNlcnJvciAiSklUIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBwbGF0Zm9ybS4iCiAj
ZW5kaWYKLS0gCjEuNy4yLjMKCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>